Lines Matching refs:gspca_dev
147 struct gspca_dev gspca_dev; /* !! must be the first item */ member
195 static int val_reply(struct gspca_dev *gspca_dev, const char *reply, int rc) in val_reply() argument
198 gspca_err(gspca_dev, "reply has error %d\n", rc); in val_reply()
202 gspca_err(gspca_dev, "Bad reply size %d\n", rc); in val_reply()
206 gspca_err(gspca_dev, "Bad reply 0x%02x\n", (int)reply[0]); in val_reply()
212 static void reg_w(struct gspca_dev *gspca_dev, u16 value, u16 index) in reg_w() argument
214 char *buff = gspca_dev->usb_buf; in reg_w()
217 gspca_dbg(gspca_dev, D_USBO, in reg_w()
220 rc = usb_control_msg(gspca_dev->dev, usb_rcvctrlpipe(gspca_dev->dev, 0), in reg_w()
222 gspca_dbg(gspca_dev, D_USBO, "rc=%d, ret={0x%02x}\n", rc, (int)buff[0]); in reg_w()
224 gspca_err(gspca_dev, "Failed reg_w(0x0B, 0xC0, 0x%04X, 0x%04X) w/ rc %d\n", in reg_w()
226 gspca_dev->usb_err = rc; in reg_w()
229 if (val_reply(gspca_dev, buff, rc)) { in reg_w()
230 gspca_err(gspca_dev, "Bad reply to reg_w(0x0B, 0xC0, 0x%04X, 0x%04X\n", in reg_w()
232 gspca_dev->usb_err = -EIO; in reg_w()
236 static void reg_w_buf(struct gspca_dev *gspca_dev, in reg_w_buf() argument
240 reg_w(gspca_dev, p->value, p->index); in reg_w_buf()
245 static void setexposure(struct gspca_dev *gspca_dev, s32 val) in setexposure() argument
248 unsigned int w = gspca_dev->pixfmt.width; in setexposure()
257 gspca_err(gspca_dev, "Invalid width %u\n", w); in setexposure()
258 gspca_dev->usb_err = -EINVAL; in setexposure()
261 gspca_dbg(gspca_dev, D_STREAM, "exposure: 0x%04X ms\n\n", value); in setexposure()
264 reg_w(gspca_dev, value, REG_COARSE_INTEGRATION_TIME_); in setexposure()
265 reg_w(gspca_dev, value, REG_COARSE_INTEGRATION_TIME_); in setexposure()
284 static void setggain(struct gspca_dev *gspca_dev, u16 global_gain) in setggain() argument
289 gspca_dbg(gspca_dev, D_STREAM, "gain G1/G2 (0x%04X): 0x%04X (src 0x%04X)\n\n", in setggain()
293 reg_w(gspca_dev, normalized, REG_GREEN1_GAIN); in setggain()
294 reg_w(gspca_dev, normalized, REG_GREEN2_GAIN); in setggain()
297 static void setbgain(struct gspca_dev *gspca_dev, in setbgain() argument
305 gspca_dbg(gspca_dev, D_STREAM, "Truncating blue 0x%04X w/ value 0x%04X\n\n", in setbgain()
310 gspca_dbg(gspca_dev, D_STREAM, "gain B (0x%04X): 0x%04X w/ source 0x%04X\n\n", in setbgain()
313 reg_w(gspca_dev, normalized, REG_BLUE_GAIN); in setbgain()
316 static void setrgain(struct gspca_dev *gspca_dev, in setrgain() argument
324 gspca_dbg(gspca_dev, D_STREAM, "Truncating gain 0x%04X w/ value 0x%04X\n\n", in setrgain()
329 gspca_dbg(gspca_dev, D_STREAM, "gain R (0x%04X): 0x%04X w / source 0x%04X\n\n", in setrgain()
332 reg_w(gspca_dev, normalized, REG_RED_GAIN); in setrgain()
335 static void configure_wh(struct gspca_dev *gspca_dev) in configure_wh() argument
337 unsigned int w = gspca_dev->pixfmt.width; in configure_wh()
339 gspca_dbg(gspca_dev, D_STREAM, "configure_wh\n\n"); in configure_wh()
350 reg_w_buf(gspca_dev, in configure_wh()
361 reg_w_buf(gspca_dev, in configure_wh()
372 reg_w_buf(gspca_dev, in configure_wh()
375 gspca_err(gspca_dev, "bad width %u\n", w); in configure_wh()
376 gspca_dev->usb_err = -EINVAL; in configure_wh()
380 reg_w(gspca_dev, 0x0000, REG_SCALING_MODE); in configure_wh()
381 reg_w(gspca_dev, 0x0010, REG_SCALE_M); in configure_wh()
382 reg_w(gspca_dev, w, REG_X_OUTPUT_SIZE); in configure_wh()
383 reg_w(gspca_dev, gspca_dev->pixfmt.height, REG_Y_OUTPUT_SIZE); in configure_wh()
386 reg_w(gspca_dev, 0x0384, REG_FRAME_LENGTH_LINES_); in configure_wh()
387 reg_w(gspca_dev, 0x0960, REG_LINE_LENGTH_PCK_); in configure_wh()
389 reg_w(gspca_dev, 0x0640, REG_FRAME_LENGTH_LINES_); in configure_wh()
390 reg_w(gspca_dev, 0x0FA0, REG_LINE_LENGTH_PCK_); in configure_wh()
392 reg_w(gspca_dev, 0x0B4B, REG_FRAME_LENGTH_LINES_); in configure_wh()
393 reg_w(gspca_dev, 0x1F40, REG_LINE_LENGTH_PCK_); in configure_wh()
395 gspca_err(gspca_dev, "bad width %u\n", w); in configure_wh()
396 gspca_dev->usb_err = -EINVAL; in configure_wh()
402 static void configure_encrypted(struct gspca_dev *gspca_dev) in configure_encrypted() argument
428 gspca_dbg(gspca_dev, D_STREAM, "Encrypted begin, w = %u\n\n", in configure_encrypted()
429 gspca_dev->pixfmt.width); in configure_encrypted()
430 reg_w_buf(gspca_dev, reg_init_begin, ARRAY_SIZE(reg_init_begin)); in configure_encrypted()
431 configure_wh(gspca_dev); in configure_encrypted()
432 reg_w_buf(gspca_dev, reg_init_end, ARRAY_SIZE(reg_init_end)); in configure_encrypted()
433 reg_w(gspca_dev, 0x0100, REG_GROUPED_PARAMETER_HOLD); in configure_encrypted()
434 reg_w(gspca_dev, 0x0000, REG_GROUPED_PARAMETER_HOLD); in configure_encrypted()
436 gspca_dbg(gspca_dev, D_STREAM, "Encrypted end\n\n"); in configure_encrypted()
439 static int configure(struct gspca_dev *gspca_dev) in configure() argument
442 char *buff = gspca_dev->usb_buf; in configure()
444 gspca_dbg(gspca_dev, D_STREAM, "configure()\n\n"); in configure()
459 rc = usb_control_msg(gspca_dev->dev, usb_rcvctrlpipe(gspca_dev->dev, 0), in configure()
461 if (val_reply(gspca_dev, buff, rc)) { in configure()
462 gspca_err(gspca_dev, "failed key req\n"); in configure()
476 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0), in configure()
479 gspca_err(gspca_dev, "failed to replay packet 176 w/ rc %d\n", in configure()
484 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0), in configure()
487 gspca_err(gspca_dev, "failed to replay packet 178 w/ rc %d\n", in configure()
492 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0), in configure()
495 gspca_err(gspca_dev, "failed to replay packet 180 w/ rc %d\n", in configure()
509 gspca_dev->usb_err = 0; in configure()
510 configure_encrypted(gspca_dev); in configure()
511 if (gspca_dev->usb_err) in configure()
512 return gspca_dev->usb_err; in configure()
515 rc = usb_control_msg(gspca_dev->dev, usb_sndctrlpipe(gspca_dev->dev, 0), in configure()
518 gspca_err(gspca_dev, "failed to replay final packet w/ rc %d\n", in configure()
523 gspca_dbg(gspca_dev, D_STREAM, "Configure complete\n\n"); in configure()
527 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
530 gspca_dev->cam.cam_mode = vga_mode; in sd_config()
531 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode); in sd_config()
534 gspca_dev->cam.no_urb_create = 0; in sd_config()
535 gspca_dev->cam.bulk_nurbs = 4; in sd_config()
537 gspca_dev->cam.bulk_size = BULK_SIZE; in sd_config()
539 gspca_dev->cam.bulk = 1; in sd_config()
544 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
546 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
551 rc = configure(gspca_dev); in sd_start()
553 gspca_err(gspca_dev, "Failed configure\n"); in sd_start()
561 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
565 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
569 if (sd->this_f + len == gspca_dev->pixfmt.sizeimage) { in sd_pkt_scan()
570 gspca_frame_add(gspca_dev, LAST_PACKET, data, len); in sd_pkt_scan()
571 gspca_dbg(gspca_dev, D_FRAM, "finish frame sz %u/%u w/ len %u\n\n", in sd_pkt_scan()
572 sd->this_f, gspca_dev->pixfmt.sizeimage, len); in sd_pkt_scan()
575 gspca_frame_add(gspca_dev, DISCARD_PACKET, NULL, 0); in sd_pkt_scan()
576 gspca_dbg(gspca_dev, D_FRAM, "abort frame sz %u/%u w/ len %u\n\n", in sd_pkt_scan()
577 sd->this_f, gspca_dev->pixfmt.sizeimage, len); in sd_pkt_scan()
582 gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); in sd_pkt_scan()
584 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
589 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
596 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
597 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
598 struct sd *sd = (struct sd *) gspca_dev; in sd_s_ctrl()
600 gspca_dev->usb_err = 0; in sd_s_ctrl()
602 if (!gspca_dev->streaming) in sd_s_ctrl()
607 setexposure(gspca_dev, ctrl->val); in sd_s_ctrl()
611 setggain(gspca_dev, gspca_dev->gain->val); in sd_s_ctrl()
615 setbgain(gspca_dev, sd->blue->val, gspca_dev->gain->val); in sd_s_ctrl()
619 setrgain(gspca_dev, sd->red->val, gspca_dev->gain->val); in sd_s_ctrl()
622 return gspca_dev->usb_err; in sd_s_ctrl()
629 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
631 struct sd *sd = (struct sd *) gspca_dev; in sd_init_controls()
632 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
634 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
637 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
641 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
649 gspca_err(gspca_dev, "Could not initialize controls\n"); in sd_init_controls()