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