Lines Matching refs:gspca_dev

34 	struct gspca_dev gspca_dev;	/* !! must be the first item */  member
66 static void reg_r(struct gspca_dev *gspca_dev, in reg_r() argument
70 struct usb_device *dev = gspca_dev->dev; in reg_r()
73 gspca_err(gspca_dev, "reg_r: buffer overflow\n"); in reg_r()
82 index, gspca_dev->usb_buf, len, in reg_r()
84 gspca_dbg(gspca_dev, D_USBI, "reg read [%02x] -> %02x ..\n", in reg_r()
85 index, gspca_dev->usb_buf[0]); in reg_r()
89 static void reg_w_val(struct gspca_dev *gspca_dev, in reg_w_val() argument
93 struct usb_device *dev = gspca_dev->dev; in reg_w_val()
95 gspca_dev->usb_buf[0] = val; in reg_w_val()
101 index, gspca_dev->usb_buf, 1, 500); in reg_w_val()
104 static void reg_w(struct gspca_dev *gspca_dev, in reg_w() argument
109 struct usb_device *dev = gspca_dev->dev; in reg_w()
112 gspca_err(gspca_dev, "reg_w: buffer overflow\n"); in reg_w()
115 gspca_dbg(gspca_dev, D_USBO, "reg write [%02x] = %02x..\n", in reg_w()
118 memcpy(gspca_dev->usb_buf, buffer, len); in reg_w()
124 index, gspca_dev->usb_buf, len, 500); in reg_w()
202 static void cx11646_fw(struct gspca_dev*gspca_dev) in cx11646_fw() argument
206 reg_w_val(gspca_dev, 0x006a, 0x02); in cx11646_fw()
208 reg_w(gspca_dev, 0x006b, cx11646_fw1[i], 3); in cx11646_fw()
211 reg_w_val(gspca_dev, 0x006a, 0x00); in cx11646_fw()
240 static void cx_sensor(struct gspca_dev*gspca_dev) in cx_sensor() argument
246 reg_w(gspca_dev, 0x0020, reg20, 8); in cx_sensor()
247 reg_w(gspca_dev, 0x0028, reg28, 8); in cx_sensor()
248 reg_w(gspca_dev, 0x0010, reg10, 2); in cx_sensor()
249 reg_w_val(gspca_dev, 0x0092, 0x03); in cx_sensor()
251 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { in cx_sensor()
253 reg_w(gspca_dev, 0x0071, reg71a, 4); in cx_sensor()
256 reg_w(gspca_dev, 0x0071, reg71b, 4); in cx_sensor()
260 reg_w(gspca_dev, 0x0071, reg71c, 4); in cx_sensor()
263 reg_w(gspca_dev, 0x0071, reg71d, 4); in cx_sensor()
266 reg_w(gspca_dev, 0x007b, reg7b, 6); in cx_sensor()
267 reg_w_val(gspca_dev, 0x00f8, 0x00); in cx_sensor()
268 reg_w(gspca_dev, 0x0010, reg10, 2); in cx_sensor()
269 reg_w_val(gspca_dev, 0x0098, 0x41); in cx_sensor()
275 reg_w(gspca_dev, 0x00e5, ptsensor, length); in cx_sensor()
277 reg_r(gspca_dev, 0x00e8, 1); in cx_sensor()
279 reg_r(gspca_dev, 0x00e8, length); in cx_sensor()
282 reg_r(gspca_dev, 0x00e7, 8); in cx_sensor()
322 static void cx11646_initsize(struct gspca_dev *gspca_dev) in cx11646_initsize() argument
329 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { in cx11646_initsize()
344 reg_w_val(gspca_dev, 0x009a, 0x01); in cx11646_initsize()
345 reg_w_val(gspca_dev, 0x0010, 0x10); in cx11646_initsize()
346 reg_w(gspca_dev, 0x0012, reg12, 5); in cx11646_initsize()
347 reg_w(gspca_dev, 0x0017, reg17, 8); in cx11646_initsize()
348 reg_w_val(gspca_dev, 0x00c0, 0x00); in cx11646_initsize()
349 reg_w_val(gspca_dev, 0x00c1, 0x04); in cx11646_initsize()
350 reg_w_val(gspca_dev, 0x00c2, 0x04); in cx11646_initsize()
352 reg_w(gspca_dev, 0x0061, cxinit, 8); in cx11646_initsize()
354 reg_w(gspca_dev, 0x00ca, cxinit, 8); in cx11646_initsize()
356 reg_w(gspca_dev, 0x00d2, cxinit, 8); in cx11646_initsize()
358 reg_w(gspca_dev, 0x00da, cxinit, 6); in cx11646_initsize()
360 reg_w(gspca_dev, 0x0041, cxinit, 8); in cx11646_initsize()
362 reg_w(gspca_dev, 0x0049, cxinit, 8); in cx11646_initsize()
364 reg_w(gspca_dev, 0x0051, cxinit, 2); in cx11646_initsize()
366 reg_r(gspca_dev, 0x0010, 1); in cx11646_initsize()
591 static void cx11646_jpegInit(struct gspca_dev*gspca_dev) in cx11646_jpegInit() argument
596 reg_w_val(gspca_dev, 0x00c0, 0x01); in cx11646_jpegInit()
597 reg_w_val(gspca_dev, 0x00c3, 0x00); in cx11646_jpegInit()
598 reg_w_val(gspca_dev, 0x00c0, 0x00); in cx11646_jpegInit()
599 reg_r(gspca_dev, 0x0001, 1); in cx11646_jpegInit()
604 reg_w(gspca_dev, 0x0008, cx_jpeg_init[i], length); in cx11646_jpegInit()
606 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpegInit()
607 reg_w_val(gspca_dev, 0x0055, 0x14); in cx11646_jpegInit()
619 static void cx11646_jpeg(struct gspca_dev*gspca_dev) in cx11646_jpeg() argument
626 reg_w_val(gspca_dev, 0x00c0, 0x01); in cx11646_jpeg()
627 reg_w_val(gspca_dev, 0x00c3, 0x00); in cx11646_jpeg()
628 reg_w_val(gspca_dev, 0x00c0, 0x00); in cx11646_jpeg()
629 reg_r(gspca_dev, 0x0001, 1); in cx11646_jpeg()
631 switch (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv) { in cx11646_jpeg()
636 reg_w(gspca_dev, 0x0008, cxjpeg_640[i], length); in cx11646_jpeg()
644 reg_w(gspca_dev, 0x0008, cxjpeg_352[i], length); in cx11646_jpeg()
653 reg_w(gspca_dev, 0x0008, cxjpeg_320[i], length); in cx11646_jpeg()
661 reg_w(gspca_dev, 0x0008, cxjpeg_176[i], length); in cx11646_jpeg()
667 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpeg()
668 reg_w_val(gspca_dev, 0x0055, Reg55); in cx11646_jpeg()
669 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpeg()
670 reg_w(gspca_dev, 0x0010, reg10, 2); in cx11646_jpeg()
671 reg_w_val(gspca_dev, 0x0054, 0x02); in cx11646_jpeg()
672 reg_w_val(gspca_dev, 0x0054, 0x01); in cx11646_jpeg()
673 reg_w_val(gspca_dev, 0x0000, 0x94); in cx11646_jpeg()
674 reg_w_val(gspca_dev, 0x0053, 0xc0); in cx11646_jpeg()
675 reg_w_val(gspca_dev, 0x00fc, 0xe1); in cx11646_jpeg()
676 reg_w_val(gspca_dev, 0x0000, 0x00); in cx11646_jpeg()
680 reg_r(gspca_dev, 0x0002, 1); in cx11646_jpeg()
682 if (gspca_dev->usb_buf[0] == 0x00) in cx11646_jpeg()
684 reg_w_val(gspca_dev, 0x0053, 0x00); in cx11646_jpeg()
687 gspca_err(gspca_dev, "Damned Errors sending jpeg Table\n"); in cx11646_jpeg()
689 reg_r(gspca_dev, 0x0001, 1); /* -> 0x18 */ in cx11646_jpeg()
694 reg_w(gspca_dev, 0x0008, cxjpeg_qtable[i], length); in cx11646_jpeg()
697 reg_r(gspca_dev, 0x0002, 1); /* 0x00 */ in cx11646_jpeg()
698 reg_r(gspca_dev, 0x0053, 1); /* 0x00 */ in cx11646_jpeg()
699 reg_w_val(gspca_dev, 0x0054, 0x02); in cx11646_jpeg()
700 reg_w_val(gspca_dev, 0x0054, 0x01); in cx11646_jpeg()
701 reg_w_val(gspca_dev, 0x0000, 0x94); in cx11646_jpeg()
702 reg_w_val(gspca_dev, 0x0053, 0xc0); in cx11646_jpeg()
704 reg_r(gspca_dev, 0x0038, 1); /* 0x40 */ in cx11646_jpeg()
705 reg_r(gspca_dev, 0x0038, 1); /* 0x40 */ in cx11646_jpeg()
706 reg_r(gspca_dev, 0x001f, 1); /* 0x38 */ in cx11646_jpeg()
707 reg_w(gspca_dev, 0x0012, reg12, 5); in cx11646_jpeg()
708 reg_w(gspca_dev, 0x00e5, regE5_8, 8); in cx11646_jpeg()
709 reg_r(gspca_dev, 0x00e8, 8); in cx11646_jpeg()
710 reg_w(gspca_dev, 0x00e5, regE5a, 4); in cx11646_jpeg()
711 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in cx11646_jpeg()
712 reg_w_val(gspca_dev, 0x009a, 0x01); in cx11646_jpeg()
713 reg_w(gspca_dev, 0x00e5, regE5b, 4); in cx11646_jpeg()
714 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in cx11646_jpeg()
715 reg_w(gspca_dev, 0x00e5, regE5c, 4); in cx11646_jpeg()
716 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in cx11646_jpeg()
718 reg_w(gspca_dev, 0x0051, reg51, 2); in cx11646_jpeg()
719 reg_w(gspca_dev, 0x0010, reg10, 2); in cx11646_jpeg()
720 reg_w_val(gspca_dev, 0x0070, reg70); in cx11646_jpeg()
723 static void cx11646_init1(struct gspca_dev *gspca_dev) in cx11646_init1() argument
727 reg_w_val(gspca_dev, 0x0010, 0x00); in cx11646_init1()
728 reg_w_val(gspca_dev, 0x0053, 0x00); in cx11646_init1()
729 reg_w_val(gspca_dev, 0x0052, 0x00); in cx11646_init1()
730 reg_w_val(gspca_dev, 0x009b, 0x2f); in cx11646_init1()
731 reg_w_val(gspca_dev, 0x009c, 0x10); in cx11646_init1()
732 reg_r(gspca_dev, 0x0098, 1); in cx11646_init1()
733 reg_w_val(gspca_dev, 0x0098, 0x40); in cx11646_init1()
734 reg_r(gspca_dev, 0x0099, 1); in cx11646_init1()
735 reg_w_val(gspca_dev, 0x0099, 0x07); in cx11646_init1()
736 reg_w_val(gspca_dev, 0x0039, 0x40); in cx11646_init1()
737 reg_w_val(gspca_dev, 0x003c, 0xff); in cx11646_init1()
738 reg_w_val(gspca_dev, 0x003f, 0x1f); in cx11646_init1()
739 reg_w_val(gspca_dev, 0x003d, 0x40); in cx11646_init1()
741 reg_r(gspca_dev, 0x0099, 1); /* ->0x07 */ in cx11646_init1()
744 reg_w_val(gspca_dev, 0x00e5, cx_sensor_init[i][0]); in cx11646_init1()
745 reg_r(gspca_dev, 0x00e8, 1); /* -> 0x00 */ in cx11646_init1()
747 reg_w_val(gspca_dev, 0x00ed, 0x01); in cx11646_init1()
748 reg_r(gspca_dev, 0x00ed, 1); /* -> 0x01 */ in cx11646_init1()
752 reg_w_val(gspca_dev, 0x00c3, 0x00); in cx11646_init1()
756 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
761 cam = &gspca_dev->cam; in sd_config()
768 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
770 cx11646_init1(gspca_dev); in sd_init()
771 cx11646_initsize(gspca_dev); in sd_init()
772 cx11646_fw(gspca_dev); in sd_init()
773 cx_sensor(gspca_dev); in sd_init()
774 cx11646_jpegInit(gspca_dev); in sd_init()
778 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
780 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
783 jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height, in sd_start()
784 gspca_dev->pixfmt.width, in sd_start()
788 cx11646_initsize(gspca_dev); in sd_start()
789 cx11646_fw(gspca_dev); in sd_start()
790 cx_sensor(gspca_dev); in sd_start()
791 cx11646_jpeg(gspca_dev); in sd_start()
796 static void sd_stop0(struct gspca_dev *gspca_dev) in sd_stop0() argument
800 if (!gspca_dev->present) in sd_stop0()
802 reg_w_val(gspca_dev, 0x0000, 0x00); in sd_stop0()
803 reg_r(gspca_dev, 0x0002, 1); in sd_stop0()
804 reg_w_val(gspca_dev, 0x0053, 0x00); in sd_stop0()
808 reg_r(gspca_dev, 0x0053, 1); in sd_stop0()
809 if (gspca_dev->usb_buf[0] == 0) in sd_stop0()
812 reg_w_val(gspca_dev, 0x0000, 0x00); in sd_stop0()
813 reg_r(gspca_dev, 0x0002, 1); in sd_stop0()
815 reg_w_val(gspca_dev, 0x0010, 0x00); in sd_stop0()
816 reg_r(gspca_dev, 0x0033, 1); in sd_stop0()
817 reg_w_val(gspca_dev, 0x00fc, 0xe0); in sd_stop0()
820 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
824 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
829 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
832 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
837 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
840 static void setbrightness(struct gspca_dev *gspca_dev, s32 val, s32 sat) in setbrightness() argument
846 reg_w(gspca_dev, 0x00e5, regE5cbx, 8); in setbrightness()
847 reg_r(gspca_dev, 0x00e8, 8); in setbrightness()
848 reg_w(gspca_dev, 0x00e5, regE5c, 4); in setbrightness()
849 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in setbrightness()
853 reg_w(gspca_dev, 0x0051, reg51c, 2); in setbrightness()
854 reg_w(gspca_dev, 0x0010, reg10, 2); in setbrightness()
855 reg_w_val(gspca_dev, 0x0070, reg70); in setbrightness()
858 static void setcontrast(struct gspca_dev *gspca_dev, s32 val, s32 sat) in setcontrast() argument
865 reg_w(gspca_dev, 0x00e5, regE5acx, 4); in setcontrast()
866 reg_r(gspca_dev, 0x00e8, 1); /* 0x00 */ in setcontrast()
869 reg_w(gspca_dev, 0x0051, reg51c, 2); in setcontrast()
870 reg_w(gspca_dev, 0x0010, reg10, 2); in setcontrast()
871 reg_w_val(gspca_dev, 0x0070, reg70); in setcontrast()
876 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
877 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
878 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
880 gspca_dev->usb_err = 0; in sd_s_ctrl()
882 if (!gspca_dev->streaming) in sd_s_ctrl()
887 setbrightness(gspca_dev, ctrl->val, sd->sat->cur.val); in sd_s_ctrl()
890 setcontrast(gspca_dev, ctrl->val, sd->sat->cur.val); in sd_s_ctrl()
893 setbrightness(gspca_dev, sd->brightness->cur.val, ctrl->val); in sd_s_ctrl()
894 setcontrast(gspca_dev, sd->contrast->cur.val, ctrl->val); in sd_s_ctrl()
897 return gspca_dev->usb_err; in sd_s_ctrl()
904 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
906 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls()
907 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
909 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()