Lines Matching refs:gspca_dev

61 	struct gspca_dev gspca_dev;	/* !! must be the first item */  member
448 static void reg_r(struct gspca_dev *gspca_dev, in reg_r() argument
453 if (gspca_dev->usb_err < 0) in reg_r()
456 res = usb_control_msg(gspca_dev->dev, in reg_r()
457 usb_rcvctrlpipe(gspca_dev->dev, 0), in reg_r()
462 gspca_dev->usb_buf, 1, in reg_r()
466 dev_err(gspca_dev->v4l2_dev.dev, in reg_r()
468 gspca_dev->usb_err = res; in reg_r()
472 static void reg_w(struct gspca_dev *gspca_dev, in reg_w() argument
479 if (gspca_dev->usb_err < 0) in reg_w()
482 memcpy(gspca_dev->usb_buf, buffer, len); in reg_w()
483 res = usb_control_msg(gspca_dev->dev, in reg_w()
484 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w()
489 gspca_dev->usb_buf, len, in reg_w()
493 dev_err(gspca_dev->v4l2_dev.dev, in reg_w()
495 gspca_dev->usb_err = res; in reg_w()
499 static void i2c_w(struct gspca_dev *gspca_dev, const u8 *buf) in i2c_w() argument
503 if (gspca_dev->usb_err < 0) in i2c_w()
507 reg_w(gspca_dev, 0x08, buf, 8); in i2c_w()
509 if (gspca_dev->usb_err < 0) in i2c_w()
512 reg_r(gspca_dev, 0x08); in i2c_w()
513 if (gspca_dev->usb_buf[0] & 0x04) { in i2c_w()
514 if (gspca_dev->usb_buf[0] & 0x08) { in i2c_w()
515 dev_err(gspca_dev->v4l2_dev.dev, in i2c_w()
517 gspca_dev->usb_err = -EIO; in i2c_w()
523 dev_err(gspca_dev->v4l2_dev.dev, "i2c write timeout\n"); in i2c_w()
524 gspca_dev->usb_err = -EIO; in i2c_w()
527 static void i2c_w_vector(struct gspca_dev *gspca_dev, in i2c_w_vector() argument
531 if (gspca_dev->usb_err < 0) in i2c_w_vector()
533 i2c_w(gspca_dev, *buffer); in i2c_w_vector()
541 static void setbrightness(struct gspca_dev *gspca_dev) in setbrightness() argument
543 struct sd *sd = (struct sd *) gspca_dev; in setbrightness()
554 i2c_w(gspca_dev, i2cOV); in setbrightness()
578 i2c_w(gspca_dev, i2cpbright); in setbrightness()
579 i2c_w(gspca_dev, i2cpdoit); in setbrightness()
587 static void setgain(struct gspca_dev *gspca_dev) in setgain() argument
589 struct sd *sd = (struct sd *) gspca_dev; in setgain()
590 u8 gain = gspca_dev->gain->val; in setgain()
601 i2c_w(gspca_dev, i2c); in setgain()
610 i2c_w(gspca_dev, i2c); in setgain()
626 i2c_w(gspca_dev, i2c); in setgain()
642 i2c_w(gspca_dev, i2c); in setgain()
668 i2c_w(gspca_dev, i2cpgain); in setgain()
669 i2c_w(gspca_dev, i2cpcolorgain); in setgain()
670 i2c_w(gspca_dev, i2cpdoit); in setgain()
676 reg_w(gspca_dev, 0x05, buf, 3); in setgain()
681 reg_w(gspca_dev, 0x10, buf, 2); in setgain()
686 static void setexposure(struct gspca_dev *gspca_dev) in setexposure() argument
688 struct sd *sd = (struct sd *) gspca_dev; in setexposure()
695 u16 reg = gspca_dev->exposure->val; in setexposure()
699 i2c_w(gspca_dev, i2c); in setexposure()
707 u8 reg = gspca_dev->exposure->val; in setexposure()
710 reg_w(gspca_dev, 0x19, &reg, 1); in setexposure()
744 reg11 = (15 * gspca_dev->exposure->val + 999) / 1000; in setexposure()
753 if (gspca_dev->pixfmt.width == 640 && reg11 < 4) in setexposure()
759 reg10 = (gspca_dev->exposure->val * 15 * reg10_max) in setexposure()
766 if (gspca_dev->autogain->val && reg10 < 10) in setexposure()
780 i2c_w(gspca_dev, i2c); in setexposure()
781 if (gspca_dev->usb_err == 0) in setexposure()
804 if (gspca_dev->exposure->val < 200) { in setexposure()
805 i2cpexpo[3] = 255 - (gspca_dev->exposure->val * 255) in setexposure()
812 framerate_ctrl = (gspca_dev->exposure->val - 200) in setexposure()
818 i2c_w(gspca_dev, i2cpframerate); in setexposure()
819 i2c_w(gspca_dev, i2cpexpo); in setexposure()
820 i2c_w(gspca_dev, i2cpdoit); in setexposure()
834 if (gspca_dev->exposure->val < 150) { in setexposure()
835 i2cpexpo[3] = 150 - gspca_dev->exposure->val; in setexposure()
841 framerate_ctrl = (gspca_dev->exposure->val - 150) in setexposure()
847 i2c_w(gspca_dev, i2cpframerate); in setexposure()
848 i2c_w(gspca_dev, i2cpexpo); in setexposure()
849 i2c_w(gspca_dev, i2cpdoit); in setexposure()
857 static void setfreq(struct gspca_dev *gspca_dev) in setfreq() argument
859 struct sd *sd = (struct sd *) gspca_dev; in setfreq()
879 i2c_w(gspca_dev, i2c); in setfreq()
883 static void do_autogain(struct gspca_dev *gspca_dev) in do_autogain() argument
885 struct sd *sd = (struct sd *) gspca_dev; in do_autogain()
911 if (gspca_dev->exposure->maximum < 500) { in do_autogain()
912 if (gspca_coarse_grained_expo_autogain(gspca_dev, avg_lum, in do_autogain()
916 int gain_knee = (s32)gspca_dev->gain->maximum * 9 / 10; in do_autogain()
917 if (gspca_expo_autogain(gspca_dev, avg_lum, desired_avg_lum, in do_autogain()
924 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
927 struct sd *sd = (struct sd *) gspca_dev; in sd_config()
930 reg_r(gspca_dev, 0x00); in sd_config()
931 if (gspca_dev->usb_buf[0] != 0x10) in sd_config()
938 cam = &gspca_dev->cam; in sd_config()
952 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
956 reg_w(gspca_dev, 0x01, &stop, 1); in sd_init()
958 return gspca_dev->usb_err; in sd_init()
963 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
964 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
965 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
967 gspca_dev->usb_err = 0; in sd_s_ctrl()
974 gspca_dev->gain->val = gspca_dev->gain->default_value; in sd_s_ctrl()
975 gspca_dev->exposure->val = gspca_dev->exposure->default_value; in sd_s_ctrl()
979 if (!gspca_dev->streaming) in sd_s_ctrl()
984 setbrightness(gspca_dev); in sd_s_ctrl()
987 if (gspca_dev->exposure->is_new || (ctrl->is_new && ctrl->val)) in sd_s_ctrl()
988 setexposure(gspca_dev); in sd_s_ctrl()
989 if (gspca_dev->gain->is_new || (ctrl->is_new && ctrl->val)) in sd_s_ctrl()
990 setgain(gspca_dev); in sd_s_ctrl()
993 setfreq(gspca_dev); in sd_s_ctrl()
998 return gspca_dev->usb_err; in sd_s_ctrl()
1006 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
1008 struct sd *sd = (struct sd *) gspca_dev; in sd_init_controls()
1009 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
1011 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
1024 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1028 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1032 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1038 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1043 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1046 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1054 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1062 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1068 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1073 if (gspca_dev->exposure) { in sd_init_controls()
1074 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1089 if (gspca_dev->autogain) in sd_init_controls()
1090 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false); in sd_init_controls()
1096 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
1098 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
1099 struct cam *cam = &gspca_dev->cam; in sd_start()
1103 mode = cam->cam_mode[gspca_dev->curr_mode].priv & 0x07; in sd_start()
1168 if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW) in sd_start()
1172 if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_REDUCED_SIF) { in sd_start()
1180 reg_w(gspca_dev, 0x01, &regs[0x01], 1); in sd_start()
1182 reg_w(gspca_dev, 0x17, &regs[0x17], 1); in sd_start()
1184 reg_w(gspca_dev, 0x01, &regs[0x01], in sd_start()
1188 i2c_w_vector(gspca_dev, sensor_data[sd->sensor].sensor_init, in sd_start()
1198 i2c_w(gspca_dev, i2cpclockdiv); in sd_start()
1207 i2c_w(gspca_dev, i2c); in sd_start()
1212 reg_w(gspca_dev, 0x15, &regs[0x15], 2); in sd_start()
1214 reg_w(gspca_dev, 0x18, &regs[0x18], 1); in sd_start()
1216 reg_w(gspca_dev, 0x12, &regs[0x12], 1); in sd_start()
1218 reg_w(gspca_dev, 0x13, &regs[0x13], 1); in sd_start()
1221 reg_w(gspca_dev, 0x17, &regs[0x17], 1); in sd_start()
1223 reg_w(gspca_dev, 0x19, &regs[0x19], 1); in sd_start()
1225 reg_w(gspca_dev, 0x1c, &regs[0x1c], 4); in sd_start()
1227 reg_w(gspca_dev, 0x01, &regs[0x01], 1); in sd_start()
1229 reg_w(gspca_dev, 0x18, &regs[0x18], 2); in sd_start()
1234 setgain(gspca_dev); in sd_start()
1235 setbrightness(gspca_dev); in sd_start()
1236 setexposure(gspca_dev); in sd_start()
1237 setfreq(gspca_dev); in sd_start()
1241 gspca_dev->exp_too_high_cnt = 0; in sd_start()
1242 gspca_dev->exp_too_low_cnt = 0; in sd_start()
1244 return gspca_dev->usb_err; in sd_start()
1247 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
1249 sd_init(gspca_dev); in sd_stopN()
1252 static u8* find_sof(struct gspca_dev *gspca_dev, u8 *data, int len) in find_sof() argument
1254 struct sd *sd = (struct sd *) gspca_dev; in find_sof()
1320 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
1325 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
1326 struct cam *cam = &gspca_dev->cam; in sd_pkt_scan()
1329 sof = find_sof(gspca_dev, data, len); in sd_pkt_scan()
1345 if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW) { in sd_pkt_scan()
1349 int size = cam->cam_mode[gspca_dev->curr_mode].sizeimage; in sd_pkt_scan()
1351 used = gspca_dev->image_len; in sd_pkt_scan()
1356 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
1380 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
1382 gspca_frame_add(gspca_dev, FIRST_PACKET, sof, len_after_sof); in sd_pkt_scan()
1387 static int sd_int_pkt_scan(struct gspca_dev *gspca_dev, in sd_int_pkt_scan() argument
1394 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); in sd_int_pkt_scan()
1395 input_sync(gspca_dev->input_dev); in sd_int_pkt_scan()
1396 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); in sd_int_pkt_scan()
1397 input_sync(gspca_dev->input_dev); in sd_int_pkt_scan()