Lines Matching refs:gspca_dev
38 struct gspca_dev gspca_dev; /* !! must be the first item */ member
70 static void reg_r(struct gspca_dev *gspca_dev, in reg_r() argument
74 struct usb_device *dev = gspca_dev->dev; in reg_r()
86 index, gspca_dev->usb_buf, len, in reg_r()
89 index, gspca_dev->usb_buf[0]); in reg_r()
93 static void reg_w_val(struct gspca_dev *gspca_dev, in reg_w_val() argument
97 struct usb_device *dev = gspca_dev->dev; in reg_w_val()
99 gspca_dev->usb_buf[0] = val; in reg_w_val()
105 index, gspca_dev->usb_buf, 1, 500); in reg_w_val()
108 static void reg_w(struct gspca_dev *gspca_dev, in reg_w() argument
113 struct usb_device *dev = gspca_dev->dev; in reg_w()
121 memcpy(gspca_dev->usb_buf, buffer, len); in reg_w()
127 index, gspca_dev->usb_buf, len, 500); in reg_w()
205 static void cx11646_fw(struct gspca_dev*gspca_dev) in cx11646_fw() argument
209 reg_w_val(gspca_dev, 0x006a, 0x02); in cx11646_fw()
211 reg_w(gspca_dev, 0x006b, cx11646_fw1[i], 3); in cx11646_fw()
214 reg_w_val(gspca_dev, 0x006a, 0x00); in cx11646_fw()
243 static void cx_sensor(struct gspca_dev*gspca_dev) in cx_sensor() argument
249 reg_w(gspca_dev, 0x0020, reg20, 8); in cx_sensor()
250 reg_w(gspca_dev, 0x0028, reg28, 8); in cx_sensor()
251 reg_w(gspca_dev, 0x0010, reg10, 2); in cx_sensor()
252 reg_w_val(gspca_dev, 0x0092, 0x03); in cx_sensor()
254 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { in cx_sensor()
256 reg_w(gspca_dev, 0x0071, reg71a, 4); in cx_sensor()
259 reg_w(gspca_dev, 0x0071, reg71b, 4); in cx_sensor()
263 reg_w(gspca_dev, 0x0071, reg71c, 4); in cx_sensor()
266 reg_w(gspca_dev, 0x0071, reg71d, 4); in cx_sensor()
269 reg_w(gspca_dev, 0x007b, reg7b, 6); in cx_sensor()
270 reg_w_val(gspca_dev, 0x00f8, 0x00); in cx_sensor()
271 reg_w(gspca_dev, 0x0010, reg10, 2); in cx_sensor()
272 reg_w_val(gspca_dev, 0x0098, 0x41); in cx_sensor()
278 reg_w(gspca_dev, 0x00e5, ptsensor, length); in cx_sensor()
280 reg_r(gspca_dev, 0x00e8, 1); in cx_sensor()
282 reg_r(gspca_dev, 0x00e8, length); in cx_sensor()
285 reg_r(gspca_dev, 0x00e7, 8); in cx_sensor()
325 static void cx11646_initsize(struct gspca_dev *gspca_dev) in cx11646_initsize() argument
332 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { in cx11646_initsize()
347 reg_w_val(gspca_dev, 0x009a, 0x01); in cx11646_initsize()
348 reg_w_val(gspca_dev, 0x0010, 0x10); in cx11646_initsize()
349 reg_w(gspca_dev, 0x0012, reg12, 5); in cx11646_initsize()
350 reg_w(gspca_dev, 0x0017, reg17, 8); in cx11646_initsize()
351 reg_w_val(gspca_dev, 0x00c0, 0x00); in cx11646_initsize()
352 reg_w_val(gspca_dev, 0x00c1, 0x04); in cx11646_initsize()
353 reg_w_val(gspca_dev, 0x00c2, 0x04); in cx11646_initsize()
355 reg_w(gspca_dev, 0x0061, cxinit, 8); in cx11646_initsize()
357 reg_w(gspca_dev, 0x00ca, cxinit, 8); in cx11646_initsize()
359 reg_w(gspca_dev, 0x00d2, cxinit, 8); in cx11646_initsize()
361 reg_w(gspca_dev, 0x00da, cxinit, 6); in cx11646_initsize()
363 reg_w(gspca_dev, 0x0041, cxinit, 8); in cx11646_initsize()
365 reg_w(gspca_dev, 0x0049, cxinit, 8); in cx11646_initsize()
367 reg_w(gspca_dev, 0x0051, cxinit, 2); in cx11646_initsize()
369 reg_r(gspca_dev, 0x0010, 1); in cx11646_initsize()
594 static void cx11646_jpegInit(struct gspca_dev*gspca_dev) in cx11646_jpegInit() argument
599 reg_w_val(gspca_dev, 0x00c0, 0x01); in cx11646_jpegInit()
600 reg_w_val(gspca_dev, 0x00c3, 0x00); in cx11646_jpegInit()
601 reg_w_val(gspca_dev, 0x00c0, 0x00); in cx11646_jpegInit()
602 reg_r(gspca_dev, 0x0001, 1); in cx11646_jpegInit()
607 reg_w(gspca_dev, 0x0008, cx_jpeg_init[i], length); in cx11646_jpegInit()
609 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpegInit()
610 reg_w_val(gspca_dev, 0x0055, 0x14); in cx11646_jpegInit()
622 static void cx11646_jpeg(struct gspca_dev*gspca_dev) in cx11646_jpeg() argument
629 reg_w_val(gspca_dev, 0x00c0, 0x01); in cx11646_jpeg()
630 reg_w_val(gspca_dev, 0x00c3, 0x00); in cx11646_jpeg()
631 reg_w_val(gspca_dev, 0x00c0, 0x00); in cx11646_jpeg()
632 reg_r(gspca_dev, 0x0001, 1); in cx11646_jpeg()
634 switch (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv) { in cx11646_jpeg()
639 reg_w(gspca_dev, 0x0008, cxjpeg_640[i], length); in cx11646_jpeg()
647 reg_w(gspca_dev, 0x0008, cxjpeg_352[i], length); in cx11646_jpeg()
656 reg_w(gspca_dev, 0x0008, cxjpeg_320[i], length); in cx11646_jpeg()
664 reg_w(gspca_dev, 0x0008, cxjpeg_176[i], length); in cx11646_jpeg()
670 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpeg()
671 reg_w_val(gspca_dev, 0x0055, Reg55); in cx11646_jpeg()
672 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpeg()
673 reg_w(gspca_dev, 0x0010, reg10, 2); in cx11646_jpeg()
674 reg_w_val(gspca_dev, 0x0054, 0x02); in cx11646_jpeg()
675 reg_w_val(gspca_dev, 0x0054, 0x01); in cx11646_jpeg()
676 reg_w_val(gspca_dev, 0x0000, 0x94); in cx11646_jpeg()
677 reg_w_val(gspca_dev, 0x0053, 0xc0); in cx11646_jpeg()
678 reg_w_val(gspca_dev, 0x00fc, 0xe1); in cx11646_jpeg()
679 reg_w_val(gspca_dev, 0x0000, 0x00); in cx11646_jpeg()
683 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpeg()
685 if (gspca_dev->usb_buf[0] == 0x00) in cx11646_jpeg()
687 reg_w_val(gspca_dev, 0x0053, 0x00); in cx11646_jpeg()
692 reg_r(gspca_dev, 0x0001, 1); /* -> 0x18 */ in cx11646_jpeg()
697 reg_w(gspca_dev, 0x0008, cxjpeg_qtable[i], length); in cx11646_jpeg()
700 reg_r(gspca_dev, 0x0002, 1); /* 0x00 */ in cx11646_jpeg()
701 reg_r(gspca_dev, 0x0053, 1); /* 0x00 */ in cx11646_jpeg()
702 reg_w_val(gspca_dev, 0x0054, 0x02); in cx11646_jpeg()
703 reg_w_val(gspca_dev, 0x0054, 0x01); in cx11646_jpeg()
704 reg_w_val(gspca_dev, 0x0000, 0x94); in cx11646_jpeg()
705 reg_w_val(gspca_dev, 0x0053, 0xc0); in cx11646_jpeg()
707 reg_r(gspca_dev, 0x0038, 1); /* 0x40 */ in cx11646_jpeg()
708 reg_r(gspca_dev, 0x0038, 1); /* 0x40 */ in cx11646_jpeg()
709 reg_r(gspca_dev, 0x001f, 1); /* 0x38 */ in cx11646_jpeg()
710 reg_w(gspca_dev, 0x0012, reg12, 5); in cx11646_jpeg()
711 reg_w(gspca_dev, 0x00e5, regE5_8, 8); in cx11646_jpeg()
712 reg_r(gspca_dev, 0x00e8, 8); in cx11646_jpeg()
713 reg_w(gspca_dev, 0x00e5, regE5a, 4); in cx11646_jpeg()
714 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in cx11646_jpeg()
715 reg_w_val(gspca_dev, 0x009a, 0x01); in cx11646_jpeg()
716 reg_w(gspca_dev, 0x00e5, regE5b, 4); in cx11646_jpeg()
717 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in cx11646_jpeg()
718 reg_w(gspca_dev, 0x00e5, regE5c, 4); in cx11646_jpeg()
719 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in cx11646_jpeg()
721 reg_w(gspca_dev, 0x0051, reg51, 2); in cx11646_jpeg()
722 reg_w(gspca_dev, 0x0010, reg10, 2); in cx11646_jpeg()
723 reg_w_val(gspca_dev, 0x0070, reg70); in cx11646_jpeg()
726 static void cx11646_init1(struct gspca_dev *gspca_dev) in cx11646_init1() argument
730 reg_w_val(gspca_dev, 0x0010, 0x00); in cx11646_init1()
731 reg_w_val(gspca_dev, 0x0053, 0x00); in cx11646_init1()
732 reg_w_val(gspca_dev, 0x0052, 0x00); in cx11646_init1()
733 reg_w_val(gspca_dev, 0x009b, 0x2f); in cx11646_init1()
734 reg_w_val(gspca_dev, 0x009c, 0x10); in cx11646_init1()
735 reg_r(gspca_dev, 0x0098, 1); in cx11646_init1()
736 reg_w_val(gspca_dev, 0x0098, 0x40); in cx11646_init1()
737 reg_r(gspca_dev, 0x0099, 1); in cx11646_init1()
738 reg_w_val(gspca_dev, 0x0099, 0x07); in cx11646_init1()
739 reg_w_val(gspca_dev, 0x0039, 0x40); in cx11646_init1()
740 reg_w_val(gspca_dev, 0x003c, 0xff); in cx11646_init1()
741 reg_w_val(gspca_dev, 0x003f, 0x1f); in cx11646_init1()
742 reg_w_val(gspca_dev, 0x003d, 0x40); in cx11646_init1()
744 reg_r(gspca_dev, 0x0099, 1); /* ->0x07 */ in cx11646_init1()
747 reg_w_val(gspca_dev, 0x00e5, cx_sensor_init[i][0]); in cx11646_init1()
748 reg_r(gspca_dev, 0x00e8, 1); /* -> 0x00 */ in cx11646_init1()
750 reg_w_val(gspca_dev, 0x00ed, 0x01); in cx11646_init1()
751 reg_r(gspca_dev, 0x00ed, 1); /* -> 0x01 */ in cx11646_init1()
755 reg_w_val(gspca_dev, 0x00c3, 0x00); in cx11646_init1()
759 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
764 cam = &gspca_dev->cam; in sd_config()
771 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
773 cx11646_init1(gspca_dev); in sd_init()
774 cx11646_initsize(gspca_dev); in sd_init()
775 cx11646_fw(gspca_dev); in sd_init()
776 cx_sensor(gspca_dev); in sd_init()
777 cx11646_jpegInit(gspca_dev); in sd_init()
781 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
783 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
786 jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height, in sd_start()
787 gspca_dev->pixfmt.width, in sd_start()
791 cx11646_initsize(gspca_dev); in sd_start()
792 cx11646_fw(gspca_dev); in sd_start()
793 cx_sensor(gspca_dev); in sd_start()
794 cx11646_jpeg(gspca_dev); in sd_start()
799 static void sd_stop0(struct gspca_dev *gspca_dev) in sd_stop0() argument
803 if (!gspca_dev->present) in sd_stop0()
805 reg_w_val(gspca_dev, 0x0000, 0x00); in sd_stop0()
806 reg_r(gspca_dev, 0x0002, 1); in sd_stop0()
807 reg_w_val(gspca_dev, 0x0053, 0x00); in sd_stop0()
811 reg_r(gspca_dev, 0x0053, 1); in sd_stop0()
812 if (gspca_dev->usb_buf[0] == 0) in sd_stop0()
815 reg_w_val(gspca_dev, 0x0000, 0x00); in sd_stop0()
816 reg_r(gspca_dev, 0x0002, 1); in sd_stop0()
818 reg_w_val(gspca_dev, 0x0010, 0x00); in sd_stop0()
819 reg_r(gspca_dev, 0x0033, 1); in sd_stop0()
820 reg_w_val(gspca_dev, 0x00fc, 0xe0); in sd_stop0()
823 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
827 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
832 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
835 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
840 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
843 static void setbrightness(struct gspca_dev *gspca_dev, s32 val, s32 sat) in setbrightness() argument
849 reg_w(gspca_dev, 0x00e5, regE5cbx, 8); in setbrightness()
850 reg_r(gspca_dev, 0x00e8, 8); in setbrightness()
851 reg_w(gspca_dev, 0x00e5, regE5c, 4); in setbrightness()
852 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in setbrightness()
856 reg_w(gspca_dev, 0x0051, reg51c, 2); in setbrightness()
857 reg_w(gspca_dev, 0x0010, reg10, 2); in setbrightness()
858 reg_w_val(gspca_dev, 0x0070, reg70); in setbrightness()
861 static void setcontrast(struct gspca_dev *gspca_dev, s32 val, s32 sat) in setcontrast() argument
868 reg_w(gspca_dev, 0x00e5, regE5acx, 4); in setcontrast()
869 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in setcontrast()
872 reg_w(gspca_dev, 0x0051, reg51c, 2); in setcontrast()
873 reg_w(gspca_dev, 0x0010, reg10, 2); in setcontrast()
874 reg_w_val(gspca_dev, 0x0070, reg70); in setcontrast()
879 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
880 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
881 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
883 gspca_dev->usb_err = 0; in sd_s_ctrl()
885 if (!gspca_dev->streaming) in sd_s_ctrl()
890 setbrightness(gspca_dev, ctrl->val, sd->sat->cur.val); in sd_s_ctrl()
893 setcontrast(gspca_dev, ctrl->val, sd->sat->cur.val); in sd_s_ctrl()
896 setbrightness(gspca_dev, sd->brightness->cur.val, ctrl->val); in sd_s_ctrl()
897 setcontrast(gspca_dev, sd->contrast->cur.val, ctrl->val); in sd_s_ctrl()
900 return gspca_dev->usb_err; in sd_s_ctrl()
907 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
909 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls()
910 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
912 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()