Lines Matching refs:gspca_dev
25 struct gspca_dev gspca_dev; /* !! must be the first item */
56 /* the read bytes are found in gspca_dev->usb_buf */
57 static void reg_r(struct gspca_dev *gspca_dev,
61 struct usb_device *dev = gspca_dev->dev;
64 gspca_err(gspca_dev, "reg_r: buffer overflow\n");
73 index, gspca_dev->usb_buf, len,
75 gspca_dbg(gspca_dev, D_USBI, "reg read [%02x] -> %02x ..\n",
76 index, gspca_dev->usb_buf[0]);
79 /* the bytes to write are in gspca_dev->usb_buf */
80 static void reg_w_val(struct gspca_dev *gspca_dev,
84 struct usb_device *dev = gspca_dev->dev;
86 gspca_dev->usb_buf[0] = val;
92 index, gspca_dev->usb_buf, 1, 500);
95 static void reg_w(struct gspca_dev *gspca_dev,
100 struct usb_device *dev = gspca_dev->dev;
103 gspca_err(gspca_dev, "reg_w: buffer overflow\n");
106 gspca_dbg(gspca_dev, D_USBO, "reg write [%02x] = %02x..\n",
109 memcpy(gspca_dev->usb_buf, buffer, len);
115 index, gspca_dev->usb_buf, len, 500);
193 static void cx11646_fw(struct gspca_dev*gspca_dev)
197 reg_w_val(gspca_dev, 0x006a, 0x02);
199 reg_w(gspca_dev, 0x006b, cx11646_fw1[i], 3);
202 reg_w_val(gspca_dev, 0x006a, 0x00);
231 static void cx_sensor(struct gspca_dev*gspca_dev)
237 reg_w(gspca_dev, 0x0020, reg20, 8);
238 reg_w(gspca_dev, 0x0028, reg28, 8);
239 reg_w(gspca_dev, 0x0010, reg10, 2);
240 reg_w_val(gspca_dev, 0x0092, 0x03);
242 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) {
244 reg_w(gspca_dev, 0x0071, reg71a, 4);
247 reg_w(gspca_dev, 0x0071, reg71b, 4);
251 reg_w(gspca_dev, 0x0071, reg71c, 4);
254 reg_w(gspca_dev, 0x0071, reg71d, 4);
257 reg_w(gspca_dev, 0x007b, reg7b, 6);
258 reg_w_val(gspca_dev, 0x00f8, 0x00);
259 reg_w(gspca_dev, 0x0010, reg10, 2);
260 reg_w_val(gspca_dev, 0x0098, 0x41);
266 reg_w(gspca_dev, 0x00e5, ptsensor, length);
268 reg_r(gspca_dev, 0x00e8, 1);
270 reg_r(gspca_dev, 0x00e8, length);
273 reg_r(gspca_dev, 0x00e7, 8);
313 static void cx11646_initsize(struct gspca_dev *gspca_dev)
320 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) {
335 reg_w_val(gspca_dev, 0x009a, 0x01);
336 reg_w_val(gspca_dev, 0x0010, 0x10);
337 reg_w(gspca_dev, 0x0012, reg12, 5);
338 reg_w(gspca_dev, 0x0017, reg17, 8);
339 reg_w_val(gspca_dev, 0x00c0, 0x00);
340 reg_w_val(gspca_dev, 0x00c1, 0x04);
341 reg_w_val(gspca_dev, 0x00c2, 0x04);
343 reg_w(gspca_dev, 0x0061, cxinit, 8);
345 reg_w(gspca_dev, 0x00ca, cxinit, 8);
347 reg_w(gspca_dev, 0x00d2, cxinit, 8);
349 reg_w(gspca_dev, 0x00da, cxinit, 6);
351 reg_w(gspca_dev, 0x0041, cxinit, 8);
353 reg_w(gspca_dev, 0x0049, cxinit, 8);
355 reg_w(gspca_dev, 0x0051, cxinit, 2);
357 reg_r(gspca_dev, 0x0010, 1);
582 static void cx11646_jpegInit(struct gspca_dev*gspca_dev)
587 reg_w_val(gspca_dev, 0x00c0, 0x01);
588 reg_w_val(gspca_dev, 0x00c3, 0x00);
589 reg_w_val(gspca_dev, 0x00c0, 0x00);
590 reg_r(gspca_dev, 0x0001, 1);
595 reg_w(gspca_dev, 0x0008, cx_jpeg_init[i], length);
597 reg_r(gspca_dev, 0x0002, 1);
598 reg_w_val(gspca_dev, 0x0055, 0x14);
610 static void cx11646_jpeg(struct gspca_dev*gspca_dev)
617 reg_w_val(gspca_dev, 0x00c0, 0x01);
618 reg_w_val(gspca_dev, 0x00c3, 0x00);
619 reg_w_val(gspca_dev, 0x00c0, 0x00);
620 reg_r(gspca_dev, 0x0001, 1);
622 switch (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv) {
627 reg_w(gspca_dev, 0x0008, cxjpeg_640[i], length);
635 reg_w(gspca_dev, 0x0008, cxjpeg_352[i], length);
644 reg_w(gspca_dev, 0x0008, cxjpeg_320[i], length);
652 reg_w(gspca_dev, 0x0008, cxjpeg_176[i], length);
658 reg_r(gspca_dev, 0x0002, 1);
659 reg_w_val(gspca_dev, 0x0055, Reg55);
660 reg_r(gspca_dev, 0x0002, 1);
661 reg_w(gspca_dev, 0x0010, reg10, 2);
662 reg_w_val(gspca_dev, 0x0054, 0x02);
663 reg_w_val(gspca_dev, 0x0054, 0x01);
664 reg_w_val(gspca_dev, 0x0000, 0x94);
665 reg_w_val(gspca_dev, 0x0053, 0xc0);
666 reg_w_val(gspca_dev, 0x00fc, 0xe1);
667 reg_w_val(gspca_dev, 0x0000, 0x00);
671 reg_r(gspca_dev, 0x0002, 1);
673 if (gspca_dev->usb_buf[0] == 0x00)
675 reg_w_val(gspca_dev, 0x0053, 0x00);
678 gspca_err(gspca_dev, "Damned Errors sending jpeg Table\n");
680 reg_r(gspca_dev, 0x0001, 1); /* -> 0x18 */
685 reg_w(gspca_dev, 0x0008, cxjpeg_qtable[i], length);
688 reg_r(gspca_dev, 0x0002, 1); /* 0x00 */
689 reg_r(gspca_dev, 0x0053, 1); /* 0x00 */
690 reg_w_val(gspca_dev, 0x0054, 0x02);
691 reg_w_val(gspca_dev, 0x0054, 0x01);
692 reg_w_val(gspca_dev, 0x0000, 0x94);
693 reg_w_val(gspca_dev, 0x0053, 0xc0);
695 reg_r(gspca_dev, 0x0038, 1); /* 0x40 */
696 reg_r(gspca_dev, 0x0038, 1); /* 0x40 */
697 reg_r(gspca_dev, 0x001f, 1); /* 0x38 */
698 reg_w(gspca_dev, 0x0012, reg12, 5);
699 reg_w(gspca_dev, 0x00e5, regE5_8, 8);
700 reg_r(gspca_dev, 0x00e8, 8);
701 reg_w(gspca_dev, 0x00e5, regE5a, 4);
702 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */
703 reg_w_val(gspca_dev, 0x009a, 0x01);
704 reg_w(gspca_dev, 0x00e5, regE5b, 4);
705 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */
706 reg_w(gspca_dev, 0x00e5, regE5c, 4);
707 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */
709 reg_w(gspca_dev, 0x0051, reg51, 2);
710 reg_w(gspca_dev, 0x0010, reg10, 2);
711 reg_w_val(gspca_dev, 0x0070, reg70);
714 static void cx11646_init1(struct gspca_dev *gspca_dev)
718 reg_w_val(gspca_dev, 0x0010, 0x00);
719 reg_w_val(gspca_dev, 0x0053, 0x00);
720 reg_w_val(gspca_dev, 0x0052, 0x00);
721 reg_w_val(gspca_dev, 0x009b, 0x2f);
722 reg_w_val(gspca_dev, 0x009c, 0x10);
723 reg_r(gspca_dev, 0x0098, 1);
724 reg_w_val(gspca_dev, 0x0098, 0x40);
725 reg_r(gspca_dev, 0x0099, 1);
726 reg_w_val(gspca_dev, 0x0099, 0x07);
727 reg_w_val(gspca_dev, 0x0039, 0x40);
728 reg_w_val(gspca_dev, 0x003c, 0xff);
729 reg_w_val(gspca_dev, 0x003f, 0x1f);
730 reg_w_val(gspca_dev, 0x003d, 0x40);
731 /* reg_w_val(gspca_dev, 0x003d, 0x60); */
732 reg_r(gspca_dev, 0x0099, 1); /* ->0x07 */
735 reg_w_val(gspca_dev, 0x00e5, cx_sensor_init[i][0]);
736 reg_r(gspca_dev, 0x00e8, 1); /* -> 0x00 */
738 reg_w_val(gspca_dev, 0x00ed, 0x01);
739 reg_r(gspca_dev, 0x00ed, 1); /* -> 0x01 */
743 reg_w_val(gspca_dev, 0x00c3, 0x00);
747 static int sd_config(struct gspca_dev *gspca_dev,
752 cam = &gspca_dev->cam;
759 static int sd_init(struct gspca_dev *gspca_dev)
761 cx11646_init1(gspca_dev);
762 cx11646_initsize(gspca_dev);
763 cx11646_fw(gspca_dev);
764 cx_sensor(gspca_dev);
765 cx11646_jpegInit(gspca_dev);
769 static int sd_start(struct gspca_dev *gspca_dev)
771 struct sd *sd = (struct sd *) gspca_dev;
774 jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height,
775 gspca_dev->pixfmt.width,
779 cx11646_initsize(gspca_dev);
780 cx11646_fw(gspca_dev);
781 cx_sensor(gspca_dev);
782 cx11646_jpeg(gspca_dev);
787 static void sd_stop0(struct gspca_dev *gspca_dev)
791 if (!gspca_dev->present)
793 reg_w_val(gspca_dev, 0x0000, 0x00);
794 reg_r(gspca_dev, 0x0002, 1);
795 reg_w_val(gspca_dev, 0x0053, 0x00);
798 /* reg_r(gspca_dev, 0x0002, 1);*/
799 reg_r(gspca_dev, 0x0053, 1);
800 if (gspca_dev->usb_buf[0] == 0)
803 reg_w_val(gspca_dev, 0x0000, 0x00);
804 reg_r(gspca_dev, 0x0002, 1);
806 reg_w_val(gspca_dev, 0x0010, 0x00);
807 reg_r(gspca_dev, 0x0033, 1);
808 reg_w_val(gspca_dev, 0x00fc, 0xe0);
811 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
815 struct sd *sd = (struct sd *) gspca_dev;
820 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
823 gspca_frame_add(gspca_dev, FIRST_PACKET,
828 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
831 static void setbrightness(struct gspca_dev *gspca_dev, s32 val, s32 sat)
837 reg_w(gspca_dev, 0x00e5, regE5cbx, 8);
838 reg_r(gspca_dev, 0x00e8, 8);
839 reg_w(gspca_dev, 0x00e5, regE5c, 4);
840 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */
844 reg_w(gspca_dev, 0x0051, reg51c, 2);
845 reg_w(gspca_dev, 0x0010, reg10, 2);
846 reg_w_val(gspca_dev, 0x0070, reg70);
849 static void setcontrast(struct gspca_dev *gspca_dev, s32 val, s32 sat)
856 reg_w(gspca_dev, 0x00e5, regE5acx, 4);
857 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */
860 reg_w(gspca_dev, 0x0051, reg51c, 2);
861 reg_w(gspca_dev, 0x0010, reg10, 2);
862 reg_w_val(gspca_dev, 0x0070, reg70);
867 struct gspca_dev *gspca_dev =
868 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
869 struct sd *sd = (struct sd *)gspca_dev;
871 gspca_dev->usb_err = 0;
873 if (!gspca_dev->streaming)
878 setbrightness(gspca_dev, ctrl->val, sd->sat->cur.val);
881 setcontrast(gspca_dev, ctrl->val, sd->sat->cur.val);
884 setbrightness(gspca_dev, sd->brightness->cur.val, ctrl->val);
885 setcontrast(gspca_dev, sd->contrast->cur.val, ctrl->val);
888 return gspca_dev->usb_err;
895 static int sd_init_controls(struct gspca_dev *gspca_dev)
897 struct sd *sd = (struct sd *)gspca_dev;
898 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
900 gspca_dev->vdev.ctrl_handler = hdl;