Lines Matching refs:gspca_dev

138 	struct gspca_dev gspca_dev;	/* !! must be the first item */
186 static int val_reply(struct gspca_dev *gspca_dev, const char *reply, int rc)
189 gspca_err(gspca_dev, "reply has error %d\n", rc);
193 gspca_err(gspca_dev, "Bad reply size %d\n", rc);
197 gspca_err(gspca_dev, "Bad reply 0x%02x\n", (int)reply[0]);
203 static void reg_w(struct gspca_dev *gspca_dev, u16 value, u16 index)
205 char *buff = gspca_dev->usb_buf;
208 gspca_dbg(gspca_dev, D_USBO,
211 rc = usb_control_msg(gspca_dev->dev, usb_rcvctrlpipe(gspca_dev->dev, 0),
213 gspca_dbg(gspca_dev, D_USBO, "rc=%d, ret={0x%02x}\n", rc, (int)buff[0]);
215 gspca_err(gspca_dev, "Failed reg_w(0x0B, 0xC0, 0x%04X, 0x%04X) w/ rc %d\n",
217 gspca_dev->usb_err = rc;
220 if (val_reply(gspca_dev, buff, rc)) {
221 gspca_err(gspca_dev, "Bad reply to reg_w(0x0B, 0xC0, 0x%04X, 0x%04X\n",
223 gspca_dev->usb_err = -EIO;
227 static void reg_w_buf(struct gspca_dev *gspca_dev,
231 reg_w(gspca_dev, p->value, p->index);
236 static void setexposure(struct gspca_dev *gspca_dev, s32 val)
239 unsigned int w = gspca_dev->pixfmt.width;
248 gspca_err(gspca_dev, "Invalid width %u\n", w);
249 gspca_dev->usb_err = -EINVAL;
252 gspca_dbg(gspca_dev, D_STREAM, "exposure: 0x%04X ms\n\n", value);
255 reg_w(gspca_dev, value, REG_COARSE_INTEGRATION_TIME_);
256 reg_w(gspca_dev, value, REG_COARSE_INTEGRATION_TIME_);
275 static void setggain(struct gspca_dev *gspca_dev, u16 global_gain)
280 gspca_dbg(gspca_dev, D_STREAM, "gain G1/G2 (0x%04X): 0x%04X (src 0x%04X)\n\n",
284 reg_w(gspca_dev, normalized, REG_GREEN1_GAIN);
285 reg_w(gspca_dev, normalized, REG_GREEN2_GAIN);
288 static void setbgain(struct gspca_dev *gspca_dev,
296 gspca_dbg(gspca_dev, D_STREAM, "Truncating blue 0x%04X w/ value 0x%04X\n\n",
301 gspca_dbg(gspca_dev, D_STREAM, "gain B (0x%04X): 0x%04X w/ source 0x%04X\n\n",
304 reg_w(gspca_dev, normalized, REG_BLUE_GAIN);
307 static void setrgain(struct gspca_dev *gspca_dev,
315 gspca_dbg(gspca_dev, D_STREAM, "Truncating gain 0x%04X w/ value 0x%04X\n\n",
320 gspca_dbg(gspca_dev, D_STREAM, "gain R (0x%04X): 0x%04X w / source 0x%04X\n\n",
323 reg_w(gspca_dev, normalized, REG_RED_GAIN);
326 static void configure_wh(struct gspca_dev *gspca_dev)
328 unsigned int w = gspca_dev->pixfmt.width;
330 gspca_dbg(gspca_dev, D_STREAM, "configure_wh\n\n");
341 reg_w_buf(gspca_dev,
352 reg_w_buf(gspca_dev,
363 reg_w_buf(gspca_dev,
366 gspca_err(gspca_dev, "bad width %u\n", w);
367 gspca_dev->usb_err = -EINVAL;
371 reg_w(gspca_dev, 0x0000, REG_SCALING_MODE);
372 reg_w(gspca_dev, 0x0010, REG_SCALE_M);
373 reg_w(gspca_dev, w, REG_X_OUTPUT_SIZE);
374 reg_w(gspca_dev, gspca_dev->pixfmt.height, REG_Y_OUTPUT_SIZE);
377 reg_w(gspca_dev, 0x0384, REG_FRAME_LENGTH_LINES_);
378 reg_w(gspca_dev, 0x0960, REG_LINE_LENGTH_PCK_);
380 reg_w(gspca_dev, 0x0640, REG_FRAME_LENGTH_LINES_);
381 reg_w(gspca_dev, 0x0FA0, REG_LINE_LENGTH_PCK_);
383 reg_w(gspca_dev, 0x0B4B, REG_FRAME_LENGTH_LINES_);
384 reg_w(gspca_dev, 0x1F40, REG_LINE_LENGTH_PCK_);
386 gspca_err(gspca_dev, "bad width %u\n", w);
387 gspca_dev->usb_err = -EINVAL;
393 static void configure_encrypted(struct gspca_dev *gspca_dev)
419 gspca_dbg(gspca_dev, D_STREAM, "Encrypted begin, w = %u\n\n",
420 gspca_dev->pixfmt.width);
421 reg_w_buf(gspca_dev, reg_init_begin, ARRAY_SIZE(reg_init_begin));
422 configure_wh(gspca_dev);
423 reg_w_buf(gspca_dev, reg_init_end, ARRAY_SIZE(reg_init_end));
424 reg_w(gspca_dev, 0x0100, REG_GROUPED_PARAMETER_HOLD);
425 reg_w(gspca_dev, 0x0000, REG_GROUPED_PARAMETER_HOLD);
427 gspca_dbg(gspca_dev, D_STREAM, "Encrypted end\n\n");
430 static int configure(struct gspca_dev *gspca_dev)
433 char *buff = gspca_dev->usb_buf;
435 gspca_dbg(gspca_dev, D_STREAM, "configure()\n\n");
450 rc = usb_control_msg(gspca_dev->dev, usb_rcvctrlpipe(gspca_dev->dev, 0),
452 if (val_reply(gspca_dev, buff, rc)) {
453 gspca_err(gspca_dev, "failed key req\n");
467 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0),
470 gspca_err(gspca_dev, "failed to replay packet 176 w/ rc %d\n",
475 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0),
478 gspca_err(gspca_dev, "failed to replay packet 178 w/ rc %d\n",
483 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0),
486 gspca_err(gspca_dev, "failed to replay packet 180 w/ rc %d\n",
494 * rc = usb_control_msg(gspca_dev->dev,
495 * usb_rcvctrlpipe(gspca_dev->dev, 0),
500 gspca_dev->usb_err = 0;
501 configure_encrypted(gspca_dev);
502 if (gspca_dev->usb_err)
503 return gspca_dev->usb_err;
506 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0),
509 gspca_err(gspca_dev, "failed to replay final packet w/ rc %d\n",
514 gspca_dbg(gspca_dev, D_STREAM, "Configure complete\n\n");
518 static int sd_config(struct gspca_dev *gspca_dev,
521 gspca_dev->cam.cam_mode = vga_mode;
522 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
525 gspca_dev->cam.no_urb_create = 0;
526 gspca_dev->cam.bulk_nurbs = 4;
528 gspca_dev->cam.bulk_size = BULK_SIZE;
530 gspca_dev->cam.bulk = 1;
535 static int sd_start(struct gspca_dev *gspca_dev)
537 struct sd *sd = (struct sd *) gspca_dev;
542 rc = configure(gspca_dev);
544 gspca_err(gspca_dev, "Failed configure\n");
552 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
556 struct sd *sd = (struct sd *) gspca_dev;
560 if (sd->this_f + len == gspca_dev->pixfmt.sizeimage) {
561 gspca_frame_add(gspca_dev, LAST_PACKET, data, len);
562 gspca_dbg(gspca_dev, D_FRAM, "finish frame sz %u/%u w/ len %u\n\n",
563 sd->this_f, gspca_dev->pixfmt.sizeimage, len);
566 gspca_frame_add(gspca_dev, DISCARD_PACKET, NULL, 0);
567 gspca_dbg(gspca_dev, D_FRAM, "abort frame sz %u/%u w/ len %u\n\n",
568 sd->this_f, gspca_dev->pixfmt.sizeimage, len);
573 gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
575 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
580 static int sd_init(struct gspca_dev *gspca_dev)
587 struct gspca_dev *gspca_dev =
588 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
589 struct sd *sd = (struct sd *) gspca_dev;
591 gspca_dev->usb_err = 0;
593 if (!gspca_dev->streaming)
598 setexposure(gspca_dev, ctrl->val);
601 /* gspca_dev->gain automatically updated */
602 setggain(gspca_dev, gspca_dev->gain->val);
606 setbgain(gspca_dev, sd->blue->val, gspca_dev->gain->val);
610 setrgain(gspca_dev, sd->red->val, gspca_dev->gain->val);
613 return gspca_dev->usb_err;
620 static int sd_init_controls(struct gspca_dev *gspca_dev)
622 struct sd *sd = (struct sd *) gspca_dev;
623 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
625 gspca_dev->vdev.ctrl_handler = hdl;
628 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
632 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
640 gspca_err(gspca_dev, "Could not initialize controls\n");