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