Lines Matching refs:gspca_dev

73 	struct gspca_dev gspca_dev;		/* !! must be the first item */  member
160 static void reg_w_buf(struct gspca_dev *gspca_dev, in reg_w_buf() argument
166 if (gspca_dev->usb_err < 0) in reg_w_buf()
168 memcpy(gspca_dev->usb_buf, buffer, len); in reg_w_buf()
169 ret = usb_control_msg(gspca_dev->dev, in reg_w_buf()
170 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w_buf()
174 index, gspca_dev->usb_buf, len, in reg_w_buf()
179 gspca_dev->usb_err = ret; in reg_w_buf()
184 static void reg_w(struct gspca_dev *gspca_dev, in reg_w() argument
190 if (gspca_dev->usb_err < 0) in reg_w()
192 gspca_dev->usb_buf[0] = value; in reg_w()
193 ret = usb_control_msg(gspca_dev->dev, in reg_w()
194 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w()
197 0, index, gspca_dev->usb_buf, 1, in reg_w()
202 gspca_dev->usb_err = ret; in reg_w()
206 static void reg_w_seq(struct gspca_dev *gspca_dev, in reg_w_seq() argument
210 reg_w(gspca_dev, seq[0], seq[1]); in reg_w_seq()
216 static void reg_w_page(struct gspca_dev *gspca_dev, in reg_w_page() argument
222 if (gspca_dev->usb_err < 0) in reg_w_page()
227 gspca_dev->usb_buf[0] = page[index]; in reg_w_page()
228 ret = usb_control_msg(gspca_dev->dev, in reg_w_page()
229 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w_page()
232 0, index, gspca_dev->usb_buf, 1, in reg_w_page()
237 gspca_dev->usb_err = ret; in reg_w_page()
244 static void reg_w_var(struct gspca_dev *gspca_dev, in reg_w_var() argument
257 reg_w_page(gspca_dev, page4, page4_len); in reg_w_var()
261 gspca_err(gspca_dev, "Incorrect variable sequence\n"); in reg_w_var()
266 reg_w_buf(gspca_dev, in reg_w_var()
271 reg_w_buf(gspca_dev, index, seq, 8); in reg_w_var()
282 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
285 struct cam *cam = &gspca_dev->cam; in sd_config()
294 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
296 reg_w(gspca_dev, 0xff, 0x04); in setcontrast()
297 reg_w(gspca_dev, 0x10, val); in setcontrast()
299 reg_w(gspca_dev, 0x11, 0x01); in setcontrast()
302 static void setgain(struct gspca_dev *gspca_dev, s32 val) in setgain() argument
304 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ in setgain()
305 reg_w(gspca_dev, 0x0e, 0x00); in setgain()
306 reg_w(gspca_dev, 0x0f, gspca_dev->gain->maximum - val + 1); in setgain()
309 reg_w(gspca_dev, 0x11, 0x01); in setgain()
312 static void setexposure(struct gspca_dev *gspca_dev, s32 val) in setexposure() argument
314 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ in setexposure()
315 reg_w(gspca_dev, 0x02, val); in setexposure()
318 reg_w(gspca_dev, 0x11, 0x01); in setexposure()
324 reg_w(gspca_dev, 0xff, 0x01); in setexposure()
325 if (gspca_dev->pixfmt.width != 640 && val <= 3) in setexposure()
326 reg_w(gspca_dev, 0x08, 0x09); in setexposure()
328 reg_w(gspca_dev, 0x08, 0x08); in setexposure()
336 if (gspca_dev->pixfmt.width == 640 && val == 2) in setexposure()
337 reg_w(gspca_dev, 0x80, 0x01); in setexposure()
339 reg_w(gspca_dev, 0x80, 0x1c); in setexposure()
342 reg_w(gspca_dev, 0x11, 0x01); in setexposure()
345 static void sethvflip(struct gspca_dev *gspca_dev, s32 hflip, s32 vflip) in sethvflip() argument
349 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ in sethvflip()
352 reg_w(gspca_dev, 0x21, data); in sethvflip()
355 reg_w(gspca_dev, 0x11, 0x01); in sethvflip()
359 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
361 reg_w_seq(gspca_dev, init_7311, sizeof(init_7311)/2); in sd_init()
362 return gspca_dev->usb_err; in sd_init()
367 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
368 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
369 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
371 gspca_dev->usb_err = 0; in sd_s_ctrl()
378 gspca_dev->exposure->val = PAC7311_EXPOSURE_DEFAULT; in sd_s_ctrl()
379 gspca_dev->gain->val = PAC7311_GAIN_DEFAULT; in sd_s_ctrl()
383 if (!gspca_dev->streaming) in sd_s_ctrl()
388 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
391 if (gspca_dev->exposure->is_new || (ctrl->is_new && ctrl->val)) in sd_s_ctrl()
392 setexposure(gspca_dev, gspca_dev->exposure->val); in sd_s_ctrl()
393 if (gspca_dev->gain->is_new || (ctrl->is_new && ctrl->val)) in sd_s_ctrl()
394 setgain(gspca_dev, gspca_dev->gain->val); in sd_s_ctrl()
397 sethvflip(gspca_dev, sd->hflip->val, 1); in sd_s_ctrl()
402 return gspca_dev->usb_err; in sd_s_ctrl()
410 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
412 struct sd *sd = (struct sd *) gspca_dev; in sd_init_controls()
413 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
415 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
420 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
422 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
425 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
436 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false); in sd_init_controls()
441 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
443 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
447 reg_w_var(gspca_dev, start_7311, in sd_start()
449 setcontrast(gspca_dev, v4l2_ctrl_g_ctrl(sd->contrast)); in sd_start()
450 setgain(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->gain)); in sd_start()
451 setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure)); in sd_start()
452 sethvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip), 1); in sd_start()
455 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { in sd_start()
457 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
458 reg_w(gspca_dev, 0x17, 0x20); in sd_start()
459 reg_w(gspca_dev, 0x87, 0x10); in sd_start()
462 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
463 reg_w(gspca_dev, 0x17, 0x30); in sd_start()
464 reg_w(gspca_dev, 0x87, 0x11); in sd_start()
467 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
468 reg_w(gspca_dev, 0x17, 0x00); in sd_start()
469 reg_w(gspca_dev, 0x87, 0x12); in sd_start()
478 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
479 reg_w(gspca_dev, 0x78, 0x05); in sd_start()
481 return gspca_dev->usb_err; in sd_start()
484 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
486 reg_w(gspca_dev, 0xff, 0x04); in sd_stopN()
487 reg_w(gspca_dev, 0x27, 0x80); in sd_stopN()
488 reg_w(gspca_dev, 0x28, 0xca); in sd_stopN()
489 reg_w(gspca_dev, 0x29, 0x53); in sd_stopN()
490 reg_w(gspca_dev, 0x2a, 0x0e); in sd_stopN()
491 reg_w(gspca_dev, 0xff, 0x01); in sd_stopN()
492 reg_w(gspca_dev, 0x3e, 0x20); in sd_stopN()
493 reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ in sd_stopN()
494 reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ in sd_stopN()
495 reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ in sd_stopN()
498 static void do_autogain(struct gspca_dev *gspca_dev) in do_autogain() argument
500 struct sd *sd = (struct sd *) gspca_dev; in do_autogain()
512 else if (gspca_coarse_grained_expo_autogain(gspca_dev, avg_lum, in do_autogain()
545 static void pac_start_frame(struct gspca_dev *gspca_dev, in pac_start_frame() argument
550 gspca_frame_add(gspca_dev, FIRST_PACKET, in pac_start_frame()
558 gspca_frame_add(gspca_dev, INTER_PACKET, in pac_start_frame()
560 gspca_frame_add(gspca_dev, INTER_PACKET, in pac_start_frame()
565 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
569 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
573 sof = pac_find_sof(gspca_dev, &sd->sof_read, data, len); in sd_pkt_scan()
589 gspca_dev->image_len += n; in sd_pkt_scan()
592 gspca_frame_add(gspca_dev, INTER_PACKET, data, n); in sd_pkt_scan()
594 image = gspca_dev->image; in sd_pkt_scan()
596 && image[gspca_dev->image_len - 2] == 0xff in sd_pkt_scan()
597 && image[gspca_dev->image_len - 1] == 0xd9) in sd_pkt_scan()
598 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
605 if (gspca_dev->last_packet_type == LAST_PACKET && in sd_pkt_scan()
613 pac_start_frame(gspca_dev, in sd_pkt_scan()
614 gspca_dev->pixfmt.height, gspca_dev->pixfmt.width); in sd_pkt_scan()
616 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
620 static int sd_int_pkt_scan(struct gspca_dev *gspca_dev, in sd_int_pkt_scan() argument
638 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); in sd_int_pkt_scan()
639 input_sync(gspca_dev->input_dev); in sd_int_pkt_scan()
640 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); in sd_int_pkt_scan()
641 input_sync(gspca_dev->input_dev); in sd_int_pkt_scan()