Lines Matching refs:gspca_dev
24 struct gspca_dev gspca_dev; /* !! must be the first item */
233 /* read <len> bytes to gspca_dev->usb_buf */
234 static void reg_r(struct gspca_dev *gspca_dev,
242 gspca_err(gspca_dev, "reg_r: buffer overflow\n");
246 gspca_err(gspca_dev, "reg_r: zero-length read\n");
249 if (gspca_dev->usb_err < 0)
251 ret = usb_control_msg(gspca_dev->dev,
252 usb_rcvctrlpipe(gspca_dev->dev, 0),
257 gspca_dev->usb_buf, len,
261 gspca_dev->usb_err = ret;
266 memset(gspca_dev->usb_buf, 0, USB_BUF_SZ);
271 static void reg_w_1(struct gspca_dev *gspca_dev,
279 if (gspca_dev->usb_err < 0)
281 gspca_dev->usb_buf[0] = byte;
282 ret = usb_control_msg(gspca_dev->dev,
283 usb_sndctrlpipe(gspca_dev->dev, 0),
287 gspca_dev->usb_buf, 1,
291 gspca_dev->usb_err = ret;
296 static void reg_w_riv(struct gspca_dev *gspca_dev,
299 struct usb_device *dev = gspca_dev->dev;
302 if (gspca_dev->usb_err < 0)
311 gspca_dev->usb_err = ret;
314 gspca_dbg(gspca_dev, D_USBO, "reg_w_riv: 0x%02x,0x%04x:0x%04x\n",
318 static void write_vector(struct gspca_dev *gspca_dev,
322 reg_w_riv(gspca_dev, data->req, data->idx, data->val);
327 static void setup_qtable(struct gspca_dev *gspca_dev,
334 reg_w_riv(gspca_dev, 0x00, 0x2800 + i, qtable[0][i]);
338 reg_w_riv(gspca_dev, 0x00, 0x2840 + i, qtable[1][i]);
341 static void spca504_acknowledged_command(struct gspca_dev *gspca_dev,
344 reg_w_riv(gspca_dev, req, idx, val);
345 reg_r(gspca_dev, 0x01, 0x0001, 1);
346 gspca_dbg(gspca_dev, D_FRAM, "before wait 0x%04x\n",
347 gspca_dev->usb_buf[0]);
348 reg_w_riv(gspca_dev, req, idx, val);
351 reg_r(gspca_dev, 0x01, 0x0001, 1);
352 gspca_dbg(gspca_dev, D_FRAM, "after wait 0x%04x\n",
353 gspca_dev->usb_buf[0]);
356 static void spca504_read_info(struct gspca_dev *gspca_dev)
365 reg_r(gspca_dev, 0, i, 1);
366 info[i] = gspca_dev->usb_buf[0];
368 gspca_dbg(gspca_dev, D_STREAM,
374 static void spca504A_acknowledged_command(struct gspca_dev *gspca_dev,
380 reg_w_riv(gspca_dev, req, idx, val);
381 reg_r(gspca_dev, 0x01, 0x0001, 1);
382 if (gspca_dev->usb_err < 0)
384 gspca_dbg(gspca_dev, D_FRAM, "Status 0x%02x Need 0x%02x\n",
385 gspca_dev->usb_buf[0], endcode);
392 /* reg_w_riv(gspca_dev, req, idx, val); */
393 reg_r(gspca_dev, 0x01, 0x0001, 1);
394 status = gspca_dev->usb_buf[0];
396 gspca_dbg(gspca_dev, D_FRAM, "status 0x%04x after wait %d\n",
403 static void spca504B_PollingDataReady(struct gspca_dev *gspca_dev)
408 reg_r(gspca_dev, 0x21, 0, 1);
409 if ((gspca_dev->usb_buf[0] & 0x01) == 0)
415 static void spca504B_WaitCmdStatus(struct gspca_dev *gspca_dev)
420 reg_r(gspca_dev, 0x21, 1, 1);
421 if (gspca_dev->usb_buf[0] != 0) {
422 reg_w_1(gspca_dev, 0x21, 0, 1, 0);
423 reg_r(gspca_dev, 0x21, 1, 1);
424 spca504B_PollingDataReady(gspca_dev);
431 static void spca50x_GetFirmware(struct gspca_dev *gspca_dev)
438 data = gspca_dev->usb_buf;
439 reg_r(gspca_dev, 0x20, 0, 5);
440 gspca_dbg(gspca_dev, D_STREAM, "FirmWare: %d %d %d %d %d\n",
442 reg_r(gspca_dev, 0x23, 0, 64);
443 reg_r(gspca_dev, 0x23, 1, 64);
446 static void spca504B_SetSizeType(struct gspca_dev *gspca_dev)
448 struct sd *sd = (struct sd *) gspca_dev;
451 Size = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv;
454 reg_w_riv(gspca_dev, 0x31, 0, 0);
455 spca504B_WaitCmdStatus(gspca_dev);
456 spca504B_PollingDataReady(gspca_dev);
457 spca50x_GetFirmware(gspca_dev);
459 reg_w_1(gspca_dev, 0x24, 0, 8, 2); /* type */
460 reg_r(gspca_dev, 0x24, 8, 1);
462 reg_w_1(gspca_dev, 0x25, 0, 4, Size);
463 reg_r(gspca_dev, 0x25, 4, 1); /* size */
464 spca504B_PollingDataReady(gspca_dev);
467 reg_w_riv(gspca_dev, 0x31, 0x0004, 0x00);
468 spca504B_WaitCmdStatus(gspca_dev);
469 spca504B_PollingDataReady(gspca_dev);
474 reg_w_1(gspca_dev, 0x25, 0, 4, Size);
475 reg_r(gspca_dev, 0x25, 4, 1); /* size */
476 reg_w_1(gspca_dev, 0x27, 0, 0, 6);
477 reg_r(gspca_dev, 0x27, 0, 1); /* type */
478 spca504B_PollingDataReady(gspca_dev);
484 spca504A_acknowledged_command(gspca_dev,
487 spca504A_acknowledged_command(gspca_dev,
490 spca504_acknowledged_command(gspca_dev, 0x08, Size, 0);
495 reg_w_riv(gspca_dev, 0xa0, (0x0500 | (Size & 0x0f)), 0x00);
496 reg_w_riv(gspca_dev, 0x20, 0x01, 0x0500 | (Size & 0x0f));
501 static void spca504_wait_status(struct gspca_dev *gspca_dev)
508 reg_r(gspca_dev, 0x06, 0x00, 1);
509 if (gspca_dev->usb_buf[0] == 0)
515 static void spca504B_setQtable(struct gspca_dev *gspca_dev)
517 reg_w_1(gspca_dev, 0x26, 0, 0, 3);
518 reg_r(gspca_dev, 0x26, 0, 1);
519 spca504B_PollingDataReady(gspca_dev);
522 static void setbrightness(struct gspca_dev *gspca_dev, s32 val)
524 struct sd *sd = (struct sd *) gspca_dev;
528 reg_w_riv(gspca_dev, 0x00, reg, val);
531 static void setcontrast(struct gspca_dev *gspca_dev, s32 val)
533 struct sd *sd = (struct sd *) gspca_dev;
537 reg_w_riv(gspca_dev, 0x00, reg, val);
540 static void setcolors(struct gspca_dev *gspca_dev, s32 val)
542 struct sd *sd = (struct sd *) gspca_dev;
546 reg_w_riv(gspca_dev, 0x00, reg, val);
549 static void init_ctl_reg(struct gspca_dev *gspca_dev)
551 struct sd *sd = (struct sd *) gspca_dev;
562 reg_w_riv(gspca_dev, 0, 0x21ad, 0x00); /* hue */
563 reg_w_riv(gspca_dev, 0, 0x21ac, 0x01); /* sat/hue */
564 reg_w_riv(gspca_dev, 0, 0x21a3, 0x00); /* gamma */
567 reg_w_riv(gspca_dev, 0, 0x20f5, 0x40);
568 reg_w_riv(gspca_dev, 0, 0x20f4, 0x01);
569 reg_w_riv(gspca_dev, 0, 0x2089, 0x00);
573 spca504B_PollingDataReady(gspca_dev);
577 static int sd_config(struct gspca_dev *gspca_dev,
580 struct sd *sd = (struct sd *) gspca_dev;
583 cam = &gspca_dev->cam;
592 reg_r(gspca_dev, 0x20, 0, 1);
593 switch (gspca_dev->usb_buf[0]) {
629 static int sd_init(struct gspca_dev *gspca_dev)
631 struct sd *sd = (struct sd *) gspca_dev;
635 reg_w_riv(gspca_dev, 0x1d, 0x00, 0);
636 reg_w_riv(gspca_dev, 0x00, 0x2306, 0x01);
637 reg_w_riv(gspca_dev, 0x00, 0x0d04, 0x00);
638 reg_w_riv(gspca_dev, 0x00, 0x2000, 0x00);
639 reg_w_riv(gspca_dev, 0x00, 0x2301, 0x13);
640 reg_w_riv(gspca_dev, 0x00, 0x2306, 0x00);
643 spca504B_PollingDataReady(gspca_dev);
644 spca50x_GetFirmware(gspca_dev);
647 spca50x_GetFirmware(gspca_dev);
648 reg_r(gspca_dev, 0x00, 0x5002, 1);
649 reg_w_1(gspca_dev, 0x24, 0, 0, 0);
650 reg_r(gspca_dev, 0x24, 0, 1);
651 spca504B_PollingDataReady(gspca_dev);
652 reg_w_riv(gspca_dev, 0x34, 0, 0);
653 spca504B_WaitCmdStatus(gspca_dev);
656 gspca_dbg(gspca_dev, D_STREAM, "Opening SPCA504 (PC-CAM 600)\n");
657 reg_w_riv(gspca_dev, 0xe0, 0x0000, 0x0000);
658 reg_w_riv(gspca_dev, 0xe0, 0x0000, 0x0001); /* reset */
659 spca504_wait_status(gspca_dev);
661 write_vector(gspca_dev,
665 write_vector(gspca_dev, spca504_pccam600_open_data,
667 setup_qtable(gspca_dev, qtable_creative_pccam);
671 gspca_dbg(gspca_dev, D_STREAM, "Opening SPCA504\n");
673 spca504_read_info(gspca_dev);
676 spca504A_acknowledged_command(gspca_dev, 0x24,
679 spca504A_acknowledged_command(gspca_dev, 0x24,
682 spca504A_acknowledged_command(gspca_dev, 0x24,
686 spca504A_acknowledged_command(gspca_dev, 0x08,
690 /* spca504A_acknowledged_command (gspca_dev, 0x08,
692 /* spca504A_acknowledged_command (gspca_dev, 0x24,
694 reg_w_riv(gspca_dev, 0x00, 0x270c, 0x05);
696 reg_w_riv(gspca_dev, 0x00, 0x2310, 0x05);
697 spca504A_acknowledged_command(gspca_dev, 0x01,
701 reg_w_riv(gspca_dev, 0, 0x2000, 0);
702 reg_w_riv(gspca_dev, 0, 0x2883, 1);
703 setup_qtable(gspca_dev, qtable_spca504_default);
706 return gspca_dev->usb_err;
709 static int sd_start(struct gspca_dev *gspca_dev)
711 struct sd *sd = (struct sd *) gspca_dev;
715 jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height,
716 gspca_dev->pixfmt.width,
721 spca504B_setQtable(gspca_dev);
722 spca504B_SetSizeType(gspca_dev);
732 reg_w_riv(gspca_dev, 0xf0, 0, 0);
733 spca504B_WaitCmdStatus(gspca_dev);
734 reg_w_riv(gspca_dev, 0xf0, 4, 0);
735 spca504B_WaitCmdStatus(gspca_dev);
738 reg_w_riv(gspca_dev, 0x31, 0x0004, 0x00);
739 spca504B_WaitCmdStatus(gspca_dev);
740 spca504B_PollingDataReady(gspca_dev);
746 spca504_read_info(gspca_dev);
749 spca504A_acknowledged_command(gspca_dev, 0x24,
752 spca504A_acknowledged_command(gspca_dev, 0x24,
754 spca504A_acknowledged_command(gspca_dev, 0x24,
757 spca504_acknowledged_command(gspca_dev, 0x24, 8, 3);
758 spca504_read_info(gspca_dev);
759 spca504_acknowledged_command(gspca_dev, 0x24, 8, 3);
760 spca504_acknowledged_command(gspca_dev, 0x24, 0, 0);
762 spca504B_SetSizeType(gspca_dev);
763 reg_w_riv(gspca_dev, 0x00, 0x270c, 0x05);
765 reg_w_riv(gspca_dev, 0x00, 0x2310, 0x05);
769 write_vector(gspca_dev,
773 write_vector(gspca_dev, spca504_pccam600_init_data,
777 reg_w_riv(gspca_dev, 0x0c, 0x0000, enable);
779 reg_w_riv(gspca_dev, 0xb0, 0x0000, enable);
783 reg_w_riv(gspca_dev, 0x30, 0x0001, 800); /* ~ 20 fps */
784 reg_w_riv(gspca_dev, 0x30, 0x0002, 1600);
785 spca504B_SetSizeType(gspca_dev);
788 init_ctl_reg(gspca_dev);
789 return gspca_dev->usb_err;
792 static void sd_stopN(struct gspca_dev *gspca_dev)
794 struct sd *sd = (struct sd *) gspca_dev;
801 reg_w_riv(gspca_dev, 0x31, 0, 0);
802 spca504B_WaitCmdStatus(gspca_dev);
803 spca504B_PollingDataReady(gspca_dev);
807 reg_w_riv(gspca_dev, 0x00, 0x2000, 0x0000);
811 /* spca504A_acknowledged_command(gspca_dev, 0x08,
813 spca504A_acknowledged_command(gspca_dev, 0x24,
815 spca504A_acknowledged_command(gspca_dev, 0x01,
818 spca504_acknowledged_command(gspca_dev, 0x24, 0, 0);
819 reg_w_riv(gspca_dev, 0x01, 0x000f, 0x0000);
825 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
829 struct sd *sd = (struct sd *) gspca_dev;
838 /* gspca_dev->last_packet_type = DISCARD_PACKET; */
869 /* gspca_dev->last_packet_type = DISCARD_PACKET; */
885 /* gspca_dev->last_packet_type = DISCARD_PACKET; */
895 gspca_frame_add(gspca_dev, LAST_PACKET,
899 gspca_frame_add(gspca_dev, FIRST_PACKET,
907 gspca_frame_add(gspca_dev, INTER_PACKET,
916 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
921 struct gspca_dev *gspca_dev =
922 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
923 struct sd *sd = (struct sd *)gspca_dev;
925 gspca_dev->usb_err = 0;
927 if (!gspca_dev->streaming)
932 setbrightness(gspca_dev, ctrl->val);
935 setcontrast(gspca_dev, ctrl->val);
938 setcolors(gspca_dev, ctrl->val);
944 return gspca_dev->usb_err;
951 static int sd_init_controls(struct gspca_dev *gspca_dev)
953 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
955 gspca_dev->vdev.ctrl_handler = hdl;