Lines Matching refs:gspca_dev

100 	struct gspca_dev gspca_dev;		/* !! must be the first item */
232 static void reg_w_buf(struct gspca_dev *gspca_dev,
238 if (gspca_dev->usb_err < 0)
240 memcpy(gspca_dev->usb_buf, buffer, len);
241 ret = usb_control_msg(gspca_dev->dev,
242 usb_sndctrlpipe(gspca_dev->dev, 0),
246 index, gspca_dev->usb_buf, len,
251 gspca_dev->usb_err = ret;
256 static void reg_w(struct gspca_dev *gspca_dev,
262 if (gspca_dev->usb_err < 0)
264 gspca_dev->usb_buf[0] = value;
265 ret = usb_control_msg(gspca_dev->dev,
266 usb_sndctrlpipe(gspca_dev->dev, 0),
269 0, index, gspca_dev->usb_buf, 1,
274 gspca_dev->usb_err = ret;
278 static void reg_w_seq(struct gspca_dev *gspca_dev,
282 reg_w(gspca_dev, seq[0], seq[1]);
288 static void reg_w_page(struct gspca_dev *gspca_dev,
294 if (gspca_dev->usb_err < 0)
299 gspca_dev->usb_buf[0] = page[index];
300 ret = usb_control_msg(gspca_dev->dev,
301 usb_sndctrlpipe(gspca_dev->dev, 0),
304 0, index, gspca_dev->usb_buf, 1,
309 gspca_dev->usb_err = ret;
316 static void reg_w_var(struct gspca_dev *gspca_dev,
329 reg_w_page(gspca_dev, page3, page3_len);
333 gspca_err(gspca_dev, "Incorrect variable sequence\n");
338 reg_w_buf(gspca_dev,
343 reg_w_buf(gspca_dev, index, seq, 8);
354 static int sd_config(struct gspca_dev *gspca_dev,
357 struct sd *sd = (struct sd *) gspca_dev;
360 cam = &gspca_dev->cam;
369 static void setbrightcont(struct gspca_dev *gspca_dev)
371 struct sd *sd = (struct sd *) gspca_dev;
380 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
390 reg_w(gspca_dev, 0xa2 + i, v);
392 reg_w(gspca_dev, 0xdc, 0x01);
395 static void setcolors(struct gspca_dev *gspca_dev)
397 struct sd *sd = (struct sd *) gspca_dev;
404 reg_w(gspca_dev, 0xff, 0x03); /* page 3 */
405 reg_w(gspca_dev, 0x11, 0x01);
406 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
410 reg_w(gspca_dev, 0x0f + 2 * i, (v >> 8) & 0x07);
411 reg_w(gspca_dev, 0x0f + 2 * i + 1, v);
413 reg_w(gspca_dev, 0xdc, 0x01);
416 static void setwhitebalance(struct gspca_dev *gspca_dev)
418 struct sd *sd = (struct sd *) gspca_dev;
420 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
421 reg_w(gspca_dev, 0xc6, sd->white_balance->val);
423 reg_w(gspca_dev, 0xdc, 0x01);
444 static void setredbalance(struct gspca_dev *gspca_dev)
446 struct sd *sd = (struct sd *) gspca_dev;
448 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
449 reg_w(gspca_dev, 0x01,
452 reg_w(gspca_dev, 0xdc, 0x01);
455 static void setbluebalance(struct gspca_dev *gspca_dev)
457 struct sd *sd = (struct sd *) gspca_dev;
459 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
460 reg_w(gspca_dev, 0x03,
463 reg_w(gspca_dev, 0xdc, 0x01);
466 static void setgain(struct gspca_dev *gspca_dev)
470 if (gspca_dev->gain->val < 32) {
471 reg10 = gspca_dev->gain->val;
475 reg12 = gspca_dev->gain->val - 31;
478 reg_w(gspca_dev, 0xff, 0x03); /* page 3 */
479 reg_w(gspca_dev, 0x10, reg10);
480 reg_w(gspca_dev, 0x12, reg12);
483 reg_w(gspca_dev, 0x11, 0x01);
486 static void setexposure(struct gspca_dev *gspca_dev)
496 clockdiv = (90 * gspca_dev->exposure->val + 1999) / 2000;
521 exposure = (gspca_dev->exposure->val * 45 * 448) / (1000 * clockdiv);
525 reg_w(gspca_dev, 0xff, 0x03); /* page 3 */
526 reg_w(gspca_dev, 0x02, clockdiv);
527 reg_w(gspca_dev, 0x0e, exposure & 0xff);
528 reg_w(gspca_dev, 0x0f, exposure >> 8);
531 reg_w(gspca_dev, 0x11, 0x01);
534 static void sethvflip(struct gspca_dev *gspca_dev)
536 struct sd *sd = (struct sd *) gspca_dev;
546 reg_w(gspca_dev, 0xff, 0x03); /* page 3 */
548 reg_w(gspca_dev, 0x21, data);
551 reg_w(gspca_dev, 0x11, 0x01);
554 static void setsharpness(struct gspca_dev *gspca_dev)
556 struct sd *sd = (struct sd *) gspca_dev;
558 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
559 reg_w(gspca_dev, 0xb6, sd->sharpness->val);
561 reg_w(gspca_dev, 0xdc, 0x01);
565 static int sd_init(struct gspca_dev *gspca_dev)
567 reg_w_seq(gspca_dev, init_7302, sizeof(init_7302)/2);
568 return gspca_dev->usb_err;
573 struct gspca_dev *gspca_dev =
574 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
575 struct sd *sd = (struct sd *)gspca_dev;
577 gspca_dev->usb_err = 0;
584 gspca_dev->exposure->val = PAC7302_EXPOSURE_DEFAULT;
585 gspca_dev->gain->val = PAC7302_GAIN_DEFAULT;
589 if (!gspca_dev->streaming)
594 setbrightcont(gspca_dev);
597 setcolors(gspca_dev);
600 setwhitebalance(gspca_dev);
603 setredbalance(gspca_dev);
606 setbluebalance(gspca_dev);
609 if (gspca_dev->exposure->is_new || (ctrl->is_new && ctrl->val))
610 setexposure(gspca_dev);
611 if (gspca_dev->gain->is_new || (ctrl->is_new && ctrl->val))
612 setgain(gspca_dev);
615 sethvflip(gspca_dev);
618 setsharpness(gspca_dev);
623 return gspca_dev->usb_err;
631 static int sd_init_controls(struct gspca_dev *gspca_dev)
633 struct sd *sd = (struct sd *) gspca_dev;
634 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
636 gspca_dev->vdev.ctrl_handler = hdl;
660 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
662 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
665 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
683 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
689 static int sd_start(struct gspca_dev *gspca_dev)
691 struct sd *sd = (struct sd *) gspca_dev;
693 reg_w_var(gspca_dev, start_7302,
701 reg_w(gspca_dev, 0xff, 0x01);
702 reg_w(gspca_dev, 0x78, 0x01);
704 return gspca_dev->usb_err;
707 static void sd_stopN(struct gspca_dev *gspca_dev)
711 reg_w(gspca_dev, 0xff, 0x01);
712 reg_w(gspca_dev, 0x78, 0x00);
716 static void sd_stop0(struct gspca_dev *gspca_dev)
718 if (!gspca_dev->present)
720 reg_w(gspca_dev, 0xff, 0x01);
721 reg_w(gspca_dev, 0x78, 0x40);
724 static void do_autogain(struct gspca_dev *gspca_dev)
726 struct sd *sd = (struct sd *) gspca_dev;
739 if (gspca_expo_autogain(gspca_dev, avg_lum, desired_lum,
772 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
776 struct sd *sd = (struct sd *) gspca_dev;
780 sof = pac_find_sof(gspca_dev, &sd->sof_read, data, len);
796 gspca_dev->image_len += n;
798 gspca_frame_add(gspca_dev, INTER_PACKET, data, n);
801 image = gspca_dev->image;
803 && image[gspca_dev->image_len - 2] == 0xff
804 && image[gspca_dev->image_len - 1] == 0xd9)
805 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
812 if (gspca_dev->last_packet_type == LAST_PACKET &&
819 gspca_frame_add(gspca_dev, FIRST_PACKET,
822 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
826 static int sd_dbg_s_register(struct gspca_dev *gspca_dev,
850 reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
851 reg_w(gspca_dev, index, value);
853 reg_w(gspca_dev, 0xdc, 0x01);
855 return gspca_dev->usb_err;
860 static int sd_int_pkt_scan(struct gspca_dev *gspca_dev,
878 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1);
879 input_sync(gspca_dev->input_dev);
880 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0);
881 input_sync(gspca_dev->input_dev);