Lines Matching refs:gspca_dev

64 	struct gspca_dev gspca_dev;		/* !! must be the first item */  member
151 static void reg_w_buf(struct gspca_dev *gspca_dev, in reg_w_buf() argument
157 if (gspca_dev->usb_err < 0) in reg_w_buf()
159 memcpy(gspca_dev->usb_buf, buffer, len); in reg_w_buf()
160 ret = usb_control_msg(gspca_dev->dev, in reg_w_buf()
161 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w_buf()
165 index, gspca_dev->usb_buf, len, in reg_w_buf()
170 gspca_dev->usb_err = ret; in reg_w_buf()
175 static void reg_w(struct gspca_dev *gspca_dev, in reg_w() argument
181 if (gspca_dev->usb_err < 0) in reg_w()
183 gspca_dev->usb_buf[0] = value; in reg_w()
184 ret = usb_control_msg(gspca_dev->dev, in reg_w()
185 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w()
188 0, index, gspca_dev->usb_buf, 1, in reg_w()
193 gspca_dev->usb_err = ret; in reg_w()
197 static void reg_w_seq(struct gspca_dev *gspca_dev, in reg_w_seq() argument
201 reg_w(gspca_dev, seq[0], seq[1]); in reg_w_seq()
207 static void reg_w_page(struct gspca_dev *gspca_dev, in reg_w_page() argument
213 if (gspca_dev->usb_err < 0) in reg_w_page()
218 gspca_dev->usb_buf[0] = page[index]; in reg_w_page()
219 ret = usb_control_msg(gspca_dev->dev, in reg_w_page()
220 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w_page()
223 0, index, gspca_dev->usb_buf, 1, in reg_w_page()
228 gspca_dev->usb_err = ret; in reg_w_page()
235 static void reg_w_var(struct gspca_dev *gspca_dev, in reg_w_var() argument
248 reg_w_page(gspca_dev, page4, page4_len); in reg_w_var()
252 gspca_err(gspca_dev, "Incorrect variable sequence\n"); in reg_w_var()
257 reg_w_buf(gspca_dev, in reg_w_var()
262 reg_w_buf(gspca_dev, index, seq, 8); in reg_w_var()
273 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
276 struct cam *cam = &gspca_dev->cam; in sd_config()
285 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
287 reg_w(gspca_dev, 0xff, 0x04); in setcontrast()
288 reg_w(gspca_dev, 0x10, val); in setcontrast()
290 reg_w(gspca_dev, 0x11, 0x01); in setcontrast()
293 static void setgain(struct gspca_dev *gspca_dev, s32 val) in setgain() argument
295 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ in setgain()
296 reg_w(gspca_dev, 0x0e, 0x00); in setgain()
297 reg_w(gspca_dev, 0x0f, gspca_dev->gain->maximum - val + 1); in setgain()
300 reg_w(gspca_dev, 0x11, 0x01); in setgain()
303 static void setexposure(struct gspca_dev *gspca_dev, s32 val) in setexposure() argument
305 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ in setexposure()
306 reg_w(gspca_dev, 0x02, val); in setexposure()
309 reg_w(gspca_dev, 0x11, 0x01); in setexposure()
315 reg_w(gspca_dev, 0xff, 0x01); in setexposure()
316 if (gspca_dev->pixfmt.width != 640 && val <= 3) in setexposure()
317 reg_w(gspca_dev, 0x08, 0x09); in setexposure()
319 reg_w(gspca_dev, 0x08, 0x08); in setexposure()
327 if (gspca_dev->pixfmt.width == 640 && val == 2) in setexposure()
328 reg_w(gspca_dev, 0x80, 0x01); in setexposure()
330 reg_w(gspca_dev, 0x80, 0x1c); in setexposure()
333 reg_w(gspca_dev, 0x11, 0x01); in setexposure()
336 static void sethvflip(struct gspca_dev *gspca_dev, s32 hflip, s32 vflip) in sethvflip() argument
340 reg_w(gspca_dev, 0xff, 0x04); /* page 4 */ in sethvflip()
343 reg_w(gspca_dev, 0x21, data); in sethvflip()
346 reg_w(gspca_dev, 0x11, 0x01); in sethvflip()
350 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
352 reg_w_seq(gspca_dev, init_7311, sizeof(init_7311)/2); in sd_init()
353 return gspca_dev->usb_err; in sd_init()
358 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
359 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
360 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
362 gspca_dev->usb_err = 0; in sd_s_ctrl()
369 gspca_dev->exposure->val = PAC7311_EXPOSURE_DEFAULT; in sd_s_ctrl()
370 gspca_dev->gain->val = PAC7311_GAIN_DEFAULT; in sd_s_ctrl()
374 if (!gspca_dev->streaming) in sd_s_ctrl()
379 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
382 if (gspca_dev->exposure->is_new || (ctrl->is_new && ctrl->val)) in sd_s_ctrl()
383 setexposure(gspca_dev, gspca_dev->exposure->val); in sd_s_ctrl()
384 if (gspca_dev->gain->is_new || (ctrl->is_new && ctrl->val)) in sd_s_ctrl()
385 setgain(gspca_dev, gspca_dev->gain->val); in sd_s_ctrl()
388 sethvflip(gspca_dev, sd->hflip->val, 1); in sd_s_ctrl()
393 return gspca_dev->usb_err; in sd_s_ctrl()
401 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
403 struct sd *sd = (struct sd *) gspca_dev; in sd_init_controls()
404 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
406 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
411 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
413 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
416 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
427 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false); in sd_init_controls()
432 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
434 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
438 reg_w_var(gspca_dev, start_7311, in sd_start()
440 setcontrast(gspca_dev, v4l2_ctrl_g_ctrl(sd->contrast)); in sd_start()
441 setgain(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->gain)); in sd_start()
442 setexposure(gspca_dev, v4l2_ctrl_g_ctrl(gspca_dev->exposure)); in sd_start()
443 sethvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip), 1); in sd_start()
446 switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { in sd_start()
448 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
449 reg_w(gspca_dev, 0x17, 0x20); in sd_start()
450 reg_w(gspca_dev, 0x87, 0x10); in sd_start()
453 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
454 reg_w(gspca_dev, 0x17, 0x30); in sd_start()
455 reg_w(gspca_dev, 0x87, 0x11); in sd_start()
458 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
459 reg_w(gspca_dev, 0x17, 0x00); in sd_start()
460 reg_w(gspca_dev, 0x87, 0x12); in sd_start()
469 reg_w(gspca_dev, 0xff, 0x01); in sd_start()
470 reg_w(gspca_dev, 0x78, 0x05); in sd_start()
472 return gspca_dev->usb_err; in sd_start()
475 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
477 reg_w(gspca_dev, 0xff, 0x04); in sd_stopN()
478 reg_w(gspca_dev, 0x27, 0x80); in sd_stopN()
479 reg_w(gspca_dev, 0x28, 0xca); in sd_stopN()
480 reg_w(gspca_dev, 0x29, 0x53); in sd_stopN()
481 reg_w(gspca_dev, 0x2a, 0x0e); in sd_stopN()
482 reg_w(gspca_dev, 0xff, 0x01); in sd_stopN()
483 reg_w(gspca_dev, 0x3e, 0x20); in sd_stopN()
484 reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ in sd_stopN()
485 reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ in sd_stopN()
486 reg_w(gspca_dev, 0x78, 0x44); /* Bit_0=start stream, Bit_6=LED */ in sd_stopN()
489 static void do_autogain(struct gspca_dev *gspca_dev) in do_autogain() argument
491 struct sd *sd = (struct sd *) gspca_dev; in do_autogain()
503 else if (gspca_coarse_grained_expo_autogain(gspca_dev, avg_lum, in do_autogain()
536 static void pac_start_frame(struct gspca_dev *gspca_dev, in pac_start_frame() argument
541 gspca_frame_add(gspca_dev, FIRST_PACKET, in pac_start_frame()
549 gspca_frame_add(gspca_dev, INTER_PACKET, in pac_start_frame()
551 gspca_frame_add(gspca_dev, INTER_PACKET, in pac_start_frame()
556 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
560 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
564 sof = pac_find_sof(gspca_dev, &sd->sof_read, data, len); in sd_pkt_scan()
580 gspca_dev->image_len += n; in sd_pkt_scan()
583 gspca_frame_add(gspca_dev, INTER_PACKET, data, n); in sd_pkt_scan()
585 image = gspca_dev->image; in sd_pkt_scan()
587 && image[gspca_dev->image_len - 2] == 0xff in sd_pkt_scan()
588 && image[gspca_dev->image_len - 1] == 0xd9) in sd_pkt_scan()
589 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
596 if (gspca_dev->last_packet_type == LAST_PACKET && in sd_pkt_scan()
604 pac_start_frame(gspca_dev, in sd_pkt_scan()
605 gspca_dev->pixfmt.height, gspca_dev->pixfmt.width); in sd_pkt_scan()
607 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
611 static int sd_int_pkt_scan(struct gspca_dev *gspca_dev, in sd_int_pkt_scan() argument
629 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); in sd_int_pkt_scan()
630 input_sync(gspca_dev->input_dev); in sd_int_pkt_scan()
631 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); in sd_int_pkt_scan()
632 input_sync(gspca_dev->input_dev); in sd_int_pkt_scan()