Lines Matching refs:gspca_dev
34 struct gspca_dev gspca_dev; /* !! must be the first item */ member
284 static void reg_w_val(struct gspca_dev *gspca_dev, __u16 index, __u8 value) in reg_w_val() argument
287 struct usb_device *dev = gspca_dev->dev; in reg_w_val()
293 gspca_dbg(gspca_dev, D_USBO, "reg write: 0x%02x:0x%02x\n", in reg_w_val()
299 static void write_vector(struct gspca_dev *gspca_dev, in write_vector() argument
306 reg_w_val(gspca_dev, data[i][1], data[i][0]); in write_vector()
312 static void reg_r(struct gspca_dev *gspca_dev, in reg_r() argument
315 usb_control_msg(gspca_dev->dev, in reg_r()
316 usb_rcvctrlpipe(gspca_dev->dev, 0), in reg_r()
320 index, gspca_dev->usb_buf, length, 500); in reg_r()
324 static void reg_w_buf(struct gspca_dev *gspca_dev, in reg_w_buf() argument
327 usb_control_msg(gspca_dev->dev, in reg_w_buf()
328 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w_buf()
332 index, gspca_dev->usb_buf, len, 500); in reg_w_buf()
335 static void i2c_write(struct gspca_dev *gspca_dev, __u16 value, __u16 reg) in i2c_write() argument
339 reg_w_val(gspca_dev, 0x8801, reg); in i2c_write()
340 reg_w_val(gspca_dev, 0x8805, value); in i2c_write()
341 reg_w_val(gspca_dev, 0x8800, value >> 8); in i2c_write()
343 reg_r(gspca_dev, 0x8803, 1); in i2c_write()
344 if (!gspca_dev->usb_buf[0]) in i2c_write()
350 static int i2c_read(struct gspca_dev *gspca_dev, __u16 reg, __u8 mode) in i2c_read() argument
355 reg_w_val(gspca_dev, 0x8804, 0x92); in i2c_read()
356 reg_w_val(gspca_dev, 0x8801, reg); in i2c_read()
357 reg_w_val(gspca_dev, 0x8802, mode | 0x01); in i2c_read()
359 reg_r(gspca_dev, 0x8803, 1); in i2c_read()
360 if (!gspca_dev->usb_buf[0]) { in i2c_read()
361 reg_r(gspca_dev, 0x8800, 1); in i2c_read()
362 value = gspca_dev->usb_buf[0]; in i2c_read()
363 reg_r(gspca_dev, 0x8805, 1); in i2c_read()
364 return ((int) value << 8) | gspca_dev->usb_buf[0]; in i2c_read()
371 static void sensor_mapwrite(struct gspca_dev *gspca_dev, in sensor_mapwrite() argument
375 gspca_dev->usb_buf[0] = (*sensormap)[1]; in sensor_mapwrite()
376 gspca_dev->usb_buf[1] = (*sensormap)[1] >> 8; in sensor_mapwrite()
377 reg_w_buf(gspca_dev, (*sensormap)[0], 2); in sensor_mapwrite()
382 static void write_sensor_72a(struct gspca_dev *gspca_dev, in write_sensor_72a() argument
386 i2c_write(gspca_dev, (*sensor)[1], (*sensor)[0]); in write_sensor_72a()
391 static void init_161rev12A(struct gspca_dev *gspca_dev) in init_161rev12A() argument
393 write_vector(gspca_dev, spca561_161rev12A_data1); in init_161rev12A()
394 sensor_mapwrite(gspca_dev, Pb100_1map8300); in init_161rev12A()
396 write_vector(gspca_dev, spca561_161rev12A_data2); in init_161rev12A()
397 sensor_mapwrite(gspca_dev, Pb100_2map8300); in init_161rev12A()
401 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
404 struct sd *sd = (struct sd *) gspca_dev; in sd_config()
413 reg_r(gspca_dev, 0x8104, 1); in sd_config()
414 data1 = gspca_dev->usb_buf[0]; in sd_config()
415 reg_r(gspca_dev, 0x8105, 1); in sd_config()
416 data2 = gspca_dev->usb_buf[0]; in sd_config()
418 reg_r(gspca_dev, 0x8106, 1); in sd_config()
419 data1 = gspca_dev->usb_buf[0]; in sd_config()
420 reg_r(gspca_dev, 0x8107, 1); in sd_config()
421 data2 = gspca_dev->usb_buf[0]; in sd_config()
424 gspca_dbg(gspca_dev, D_PROBE, "Bad vendor / product from device\n"); in sd_config()
428 cam = &gspca_dev->cam; in sd_config()
444 static int sd_init_12a(struct gspca_dev *gspca_dev) in sd_init_12a() argument
446 gspca_dbg(gspca_dev, D_STREAM, "Chip revision: 012a\n"); in sd_init_12a()
447 init_161rev12A(gspca_dev); in sd_init_12a()
450 static int sd_init_72a(struct gspca_dev *gspca_dev) in sd_init_72a() argument
452 gspca_dbg(gspca_dev, D_STREAM, "Chip revision: 072a\n"); in sd_init_72a()
453 write_vector(gspca_dev, rev72a_reset); in sd_init_72a()
455 write_vector(gspca_dev, rev72a_init_data1); in sd_init_72a()
456 write_sensor_72a(gspca_dev, rev72a_init_sensor1); in sd_init_72a()
457 write_vector(gspca_dev, rev72a_init_data2); in sd_init_72a()
458 write_sensor_72a(gspca_dev, rev72a_init_sensor2); in sd_init_72a()
459 reg_w_val(gspca_dev, 0x8112, 0x30); in sd_init_72a()
463 static void setbrightness(struct gspca_dev *gspca_dev, s32 val) in setbrightness() argument
465 struct sd *sd = (struct sd *) gspca_dev; in setbrightness()
473 reg_w_val(gspca_dev, reg + 0, val); /* R */ in setbrightness()
474 reg_w_val(gspca_dev, reg + 1, val); /* Gr */ in setbrightness()
475 reg_w_val(gspca_dev, reg + 2, val); /* B */ in setbrightness()
476 reg_w_val(gspca_dev, reg + 3, val); /* Gb */ in setbrightness()
479 static void setwhite(struct gspca_dev *gspca_dev, s32 white, s32 contrast) in setwhite() argument
481 struct sd *sd = (struct sd *) gspca_dev; in setwhite()
494 reg_w_val(gspca_dev, 0x8652, contrast + 0x20); /* Gr */ in setwhite()
495 reg_w_val(gspca_dev, 0x8654, contrast + 0x20); /* Gb */ in setwhite()
497 reg_w_val(gspca_dev, reg, red); in setwhite()
498 reg_w_val(gspca_dev, reg + 2, blue); in setwhite()
502 static void setexposure(struct gspca_dev *gspca_dev, s32 val) in setexposure() argument
534 gspca_dev->usb_buf[0] = expo; in setexposure()
535 gspca_dev->usb_buf[1] = expo >> 8; in setexposure()
536 reg_w_buf(gspca_dev, 0x8309, 2); in setexposure()
540 static void setgain(struct gspca_dev *gspca_dev, s32 val) in setgain() argument
546 gspca_dev->usb_buf[0] = val; in setgain()
548 gspca_dev->usb_buf[0] = (val / 2) | 0x40; in setgain()
550 gspca_dev->usb_buf[0] = (val / 4) | 0xc0; in setgain()
552 gspca_dev->usb_buf[1] = 0; in setgain()
553 reg_w_buf(gspca_dev, 0x8335, 2); in setgain()
556 static void setautogain(struct gspca_dev *gspca_dev, s32 val) in setautogain() argument
558 struct sd *sd = (struct sd *) gspca_dev; in setautogain()
566 static int sd_start_12a(struct gspca_dev *gspca_dev) in sd_start_12a() argument
572 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; in sd_start_12a()
575 reg_w_val(gspca_dev, 0x8500, 0x10 | mode); in sd_start_12a()
580 reg_w_val(gspca_dev, 0x8500, mode); in sd_start_12a()
583 gspca_dev->usb_buf[0] = 0xaa; in sd_start_12a()
584 gspca_dev->usb_buf[1] = 0x00; in sd_start_12a()
585 reg_w_buf(gspca_dev, 0x8307, 2); in sd_start_12a()
587 reg_w_val(gspca_dev, 0x8700, 0x8a); in sd_start_12a()
589 reg_w_val(gspca_dev, 0x8112, 0x1e | 0x20); in sd_start_12a()
590 reg_w_val(gspca_dev, 0x850b, 0x03); in sd_start_12a()
591 memcpy(gspca_dev->usb_buf, Reg8391, 8); in sd_start_12a()
592 reg_w_buf(gspca_dev, 0x8391, 8); in sd_start_12a()
593 reg_w_buf(gspca_dev, 0x8390, 8); in sd_start_12a()
596 reg_w_val(gspca_dev, 0x8114, 0x00); in sd_start_12a()
599 static int sd_start_72a(struct gspca_dev *gspca_dev) in sd_start_72a() argument
601 struct sd *sd = (struct sd *) gspca_dev; in sd_start_72a()
605 write_vector(gspca_dev, rev72a_reset); in sd_start_72a()
607 write_vector(gspca_dev, rev72a_init_data1); in sd_start_72a()
608 write_sensor_72a(gspca_dev, rev72a_init_sensor1); in sd_start_72a()
610 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; in sd_start_72a()
626 reg_w_val(gspca_dev, 0x8700, Clck); /* 0x27 clock */ in sd_start_72a()
627 reg_w_val(gspca_dev, 0x8702, 0x81); in sd_start_72a()
628 reg_w_val(gspca_dev, 0x8500, mode); /* mode */ in sd_start_72a()
629 write_sensor_72a(gspca_dev, rev72a_init_sensor2); in sd_start_72a()
630 setwhite(gspca_dev, v4l2_ctrl_g_ctrl(sd->hue), in sd_start_72a()
633 setautogain(gspca_dev, v4l2_ctrl_g_ctrl(sd->autogain)); in sd_start_72a()
634 reg_w_val(gspca_dev, 0x8112, 0x10 | 0x20); in sd_start_72a()
638 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
640 struct sd *sd = (struct sd *) gspca_dev; in sd_stopN()
643 reg_w_val(gspca_dev, 0x8112, 0x0e); in sd_stopN()
645 reg_w_val(gspca_dev, 0x8114, 0x08); in sd_stopN()
647 reg_w_val(gspca_dev, 0x8112, 0x20); in sd_stopN()
652 static void do_autogain(struct gspca_dev *gspca_dev) in do_autogain() argument
654 struct sd *sd = (struct sd *) gspca_dev; in do_autogain()
672 reg_r(gspca_dev, 0x8621, 1); in do_autogain()
673 Gr = gspca_dev->usb_buf[0]; in do_autogain()
674 reg_r(gspca_dev, 0x8622, 1); in do_autogain()
675 R = gspca_dev->usb_buf[0]; in do_autogain()
676 reg_r(gspca_dev, 0x8623, 1); in do_autogain()
677 B = gspca_dev->usb_buf[0]; in do_autogain()
678 reg_r(gspca_dev, 0x8624, 1); in do_autogain()
679 Gb = gspca_dev->usb_buf[0]; in do_autogain()
686 expotimes = i2c_read(gspca_dev, 0x09, 0x10); in do_autogain()
689 gainG = i2c_read(gspca_dev, 0x35, 0x10); in do_autogain()
698 i2c_write(gspca_dev, gainG, 0x35); in do_autogain()
704 i2c_write(gspca_dev, expotimes | pixelclk, 0x09); in do_autogain()
710 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
714 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
719 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
723 gspca_err(gspca_dev, "Short SOF packet, ignoring\n\n\n\n\n"); in sd_pkt_scan()
724 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
730 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); in sd_pkt_scan()
731 input_sync(gspca_dev->input_dev); in sd_pkt_scan()
732 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); in sd_pkt_scan()
733 input_sync(gspca_dev->input_dev); in sd_pkt_scan()
739 gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); in sd_pkt_scan()
749 gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); in sd_pkt_scan()
755 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
760 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
761 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
762 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
764 gspca_dev->usb_err = 0; in sd_s_ctrl()
766 if (!gspca_dev->streaming) in sd_s_ctrl()
771 setbrightness(gspca_dev, ctrl->val); in sd_s_ctrl()
775 setwhite(gspca_dev, sd->hue->val, ctrl->val); in sd_s_ctrl()
779 setwhite(gspca_dev, ctrl->val, 0); in sd_s_ctrl()
782 setexposure(gspca_dev, ctrl->val); in sd_s_ctrl()
785 setgain(gspca_dev, ctrl->val); in sd_s_ctrl()
788 setautogain(gspca_dev, ctrl->val); in sd_s_ctrl()
791 return gspca_dev->usb_err; in sd_s_ctrl()
798 static int sd_init_controls_12a(struct gspca_dev *gspca_dev) in sd_init_controls_12a() argument
800 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls_12a()
802 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls_12a()
820 static int sd_init_controls_72a(struct gspca_dev *gspca_dev) in sd_init_controls_72a() argument
822 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls_72a()
823 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls_72a()
825 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls_72a()