Lines Matching refs:gspca_dev

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