Lines Matching refs:gspca_dev
37 struct gspca_dev gspca_dev; /* !! must be the first item */ member
247 static void reg_r(struct gspca_dev *gspca_dev, in reg_r() argument
258 if (gspca_dev->usb_err < 0) in reg_r()
260 ret = usb_control_msg(gspca_dev->dev, in reg_r()
261 usb_rcvctrlpipe(gspca_dev->dev, 0), in reg_r()
266 len ? gspca_dev->usb_buf : NULL, len, in reg_r()
270 gspca_dev->usb_err = ret; in reg_r()
275 static void reg_w_1(struct gspca_dev *gspca_dev, in reg_w_1() argument
283 if (gspca_dev->usb_err < 0) in reg_w_1()
285 gspca_dev->usb_buf[0] = byte; in reg_w_1()
286 ret = usb_control_msg(gspca_dev->dev, in reg_w_1()
287 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w_1()
291 gspca_dev->usb_buf, 1, in reg_w_1()
295 gspca_dev->usb_err = ret; in reg_w_1()
300 static void reg_w_riv(struct gspca_dev *gspca_dev, in reg_w_riv() argument
303 struct usb_device *dev = gspca_dev->dev; in reg_w_riv()
306 if (gspca_dev->usb_err < 0) in reg_w_riv()
315 gspca_dev->usb_err = ret; in reg_w_riv()
322 static void write_vector(struct gspca_dev *gspca_dev, in write_vector() argument
326 reg_w_riv(gspca_dev, data->req, data->idx, data->val); in write_vector()
331 static void setup_qtable(struct gspca_dev *gspca_dev, in setup_qtable() argument
338 reg_w_riv(gspca_dev, 0x00, 0x2800 + i, qtable[0][i]); in setup_qtable()
342 reg_w_riv(gspca_dev, 0x00, 0x2840 + i, qtable[1][i]); in setup_qtable()
345 static void spca504_acknowledged_command(struct gspca_dev *gspca_dev, in spca504_acknowledged_command() argument
348 reg_w_riv(gspca_dev, req, idx, val); in spca504_acknowledged_command()
349 reg_r(gspca_dev, 0x01, 0x0001, 1); in spca504_acknowledged_command()
350 PDEBUG(D_FRAM, "before wait 0x%04x", gspca_dev->usb_buf[0]); in spca504_acknowledged_command()
351 reg_w_riv(gspca_dev, req, idx, val); in spca504_acknowledged_command()
354 reg_r(gspca_dev, 0x01, 0x0001, 1); in spca504_acknowledged_command()
355 PDEBUG(D_FRAM, "after wait 0x%04x", gspca_dev->usb_buf[0]); in spca504_acknowledged_command()
358 static void spca504_read_info(struct gspca_dev *gspca_dev) in spca504_read_info() argument
367 reg_r(gspca_dev, 0, i, 1); in spca504_read_info()
368 info[i] = gspca_dev->usb_buf[0]; in spca504_read_info()
377 static void spca504A_acknowledged_command(struct gspca_dev *gspca_dev, in spca504A_acknowledged_command() argument
383 reg_w_riv(gspca_dev, req, idx, val); in spca504A_acknowledged_command()
384 reg_r(gspca_dev, 0x01, 0x0001, 1); in spca504A_acknowledged_command()
385 if (gspca_dev->usb_err < 0) in spca504A_acknowledged_command()
388 gspca_dev->usb_buf[0], endcode); in spca504A_acknowledged_command()
396 reg_r(gspca_dev, 0x01, 0x0001, 1); in spca504A_acknowledged_command()
397 status = gspca_dev->usb_buf[0]; in spca504A_acknowledged_command()
406 static void spca504B_PollingDataReady(struct gspca_dev *gspca_dev) in spca504B_PollingDataReady() argument
411 reg_r(gspca_dev, 0x21, 0, 1); in spca504B_PollingDataReady()
412 if ((gspca_dev->usb_buf[0] & 0x01) == 0) in spca504B_PollingDataReady()
418 static void spca504B_WaitCmdStatus(struct gspca_dev *gspca_dev) in spca504B_WaitCmdStatus() argument
423 reg_r(gspca_dev, 0x21, 1, 1); in spca504B_WaitCmdStatus()
424 if (gspca_dev->usb_buf[0] != 0) { in spca504B_WaitCmdStatus()
425 reg_w_1(gspca_dev, 0x21, 0, 1, 0); in spca504B_WaitCmdStatus()
426 reg_r(gspca_dev, 0x21, 1, 1); in spca504B_WaitCmdStatus()
427 spca504B_PollingDataReady(gspca_dev); in spca504B_WaitCmdStatus()
434 static void spca50x_GetFirmware(struct gspca_dev *gspca_dev) in spca50x_GetFirmware() argument
441 data = gspca_dev->usb_buf; in spca50x_GetFirmware()
442 reg_r(gspca_dev, 0x20, 0, 5); in spca50x_GetFirmware()
445 reg_r(gspca_dev, 0x23, 0, 64); in spca50x_GetFirmware()
446 reg_r(gspca_dev, 0x23, 1, 64); in spca50x_GetFirmware()
449 static void spca504B_SetSizeType(struct gspca_dev *gspca_dev) in spca504B_SetSizeType() argument
451 struct sd *sd = (struct sd *) gspca_dev; in spca504B_SetSizeType()
454 Size = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; in spca504B_SetSizeType()
457 reg_w_riv(gspca_dev, 0x31, 0, 0); in spca504B_SetSizeType()
458 spca504B_WaitCmdStatus(gspca_dev); in spca504B_SetSizeType()
459 spca504B_PollingDataReady(gspca_dev); in spca504B_SetSizeType()
460 spca50x_GetFirmware(gspca_dev); in spca504B_SetSizeType()
462 reg_w_1(gspca_dev, 0x24, 0, 8, 2); /* type */ in spca504B_SetSizeType()
463 reg_r(gspca_dev, 0x24, 8, 1); in spca504B_SetSizeType()
465 reg_w_1(gspca_dev, 0x25, 0, 4, Size); in spca504B_SetSizeType()
466 reg_r(gspca_dev, 0x25, 4, 1); /* size */ in spca504B_SetSizeType()
467 spca504B_PollingDataReady(gspca_dev); in spca504B_SetSizeType()
470 reg_w_riv(gspca_dev, 0x31, 0x0004, 0x00); in spca504B_SetSizeType()
471 spca504B_WaitCmdStatus(gspca_dev); in spca504B_SetSizeType()
472 spca504B_PollingDataReady(gspca_dev); in spca504B_SetSizeType()
477 reg_w_1(gspca_dev, 0x25, 0, 4, Size); in spca504B_SetSizeType()
478 reg_r(gspca_dev, 0x25, 4, 1); /* size */ in spca504B_SetSizeType()
479 reg_w_1(gspca_dev, 0x27, 0, 0, 6); in spca504B_SetSizeType()
480 reg_r(gspca_dev, 0x27, 0, 1); /* type */ in spca504B_SetSizeType()
481 spca504B_PollingDataReady(gspca_dev); in spca504B_SetSizeType()
487 spca504A_acknowledged_command(gspca_dev, in spca504B_SetSizeType()
490 spca504A_acknowledged_command(gspca_dev, in spca504B_SetSizeType()
493 spca504_acknowledged_command(gspca_dev, 0x08, Size, 0); in spca504B_SetSizeType()
498 reg_w_riv(gspca_dev, 0xa0, (0x0500 | (Size & 0x0f)), 0x00); in spca504B_SetSizeType()
499 reg_w_riv(gspca_dev, 0x20, 0x01, 0x0500 | (Size & 0x0f)); in spca504B_SetSizeType()
504 static void spca504_wait_status(struct gspca_dev *gspca_dev) in spca504_wait_status() argument
511 reg_r(gspca_dev, 0x06, 0x00, 1); in spca504_wait_status()
512 if (gspca_dev->usb_buf[0] == 0) in spca504_wait_status()
518 static void spca504B_setQtable(struct gspca_dev *gspca_dev) in spca504B_setQtable() argument
520 reg_w_1(gspca_dev, 0x26, 0, 0, 3); in spca504B_setQtable()
521 reg_r(gspca_dev, 0x26, 0, 1); in spca504B_setQtable()
522 spca504B_PollingDataReady(gspca_dev); in spca504B_setQtable()
525 static void setbrightness(struct gspca_dev *gspca_dev, s32 val) in setbrightness() argument
527 struct sd *sd = (struct sd *) gspca_dev; in setbrightness()
531 reg_w_riv(gspca_dev, 0x00, reg, val); in setbrightness()
534 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
536 struct sd *sd = (struct sd *) gspca_dev; in setcontrast()
540 reg_w_riv(gspca_dev, 0x00, reg, val); in setcontrast()
543 static void setcolors(struct gspca_dev *gspca_dev, s32 val) in setcolors() argument
545 struct sd *sd = (struct sd *) gspca_dev; in setcolors()
549 reg_w_riv(gspca_dev, 0x00, reg, val); in setcolors()
552 static void init_ctl_reg(struct gspca_dev *gspca_dev) in init_ctl_reg() argument
554 struct sd *sd = (struct sd *) gspca_dev; in init_ctl_reg()
565 reg_w_riv(gspca_dev, 0, 0x21ad, 0x00); /* hue */ in init_ctl_reg()
566 reg_w_riv(gspca_dev, 0, 0x21ac, 0x01); /* sat/hue */ in init_ctl_reg()
567 reg_w_riv(gspca_dev, 0, 0x21a3, 0x00); /* gamma */ in init_ctl_reg()
570 reg_w_riv(gspca_dev, 0, 0x20f5, 0x40); in init_ctl_reg()
571 reg_w_riv(gspca_dev, 0, 0x20f4, 0x01); in init_ctl_reg()
572 reg_w_riv(gspca_dev, 0, 0x2089, 0x00); in init_ctl_reg()
576 spca504B_PollingDataReady(gspca_dev); in init_ctl_reg()
580 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
583 struct sd *sd = (struct sd *) gspca_dev; in sd_config()
586 cam = &gspca_dev->cam; in sd_config()
595 reg_r(gspca_dev, 0x20, 0, 1); in sd_config()
596 switch (gspca_dev->usb_buf[0]) { in sd_config()
632 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
634 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
638 reg_w_riv(gspca_dev, 0x1d, 0x00, 0); in sd_init()
639 reg_w_riv(gspca_dev, 0x00, 0x2306, 0x01); in sd_init()
640 reg_w_riv(gspca_dev, 0x00, 0x0d04, 0x00); in sd_init()
641 reg_w_riv(gspca_dev, 0x00, 0x2000, 0x00); in sd_init()
642 reg_w_riv(gspca_dev, 0x00, 0x2301, 0x13); in sd_init()
643 reg_w_riv(gspca_dev, 0x00, 0x2306, 0x00); in sd_init()
646 spca504B_PollingDataReady(gspca_dev); in sd_init()
647 spca50x_GetFirmware(gspca_dev); in sd_init()
650 spca50x_GetFirmware(gspca_dev); in sd_init()
651 reg_r(gspca_dev, 0x00, 0x5002, 1); in sd_init()
652 reg_w_1(gspca_dev, 0x24, 0, 0, 0); in sd_init()
653 reg_r(gspca_dev, 0x24, 0, 1); in sd_init()
654 spca504B_PollingDataReady(gspca_dev); in sd_init()
655 reg_w_riv(gspca_dev, 0x34, 0, 0); in sd_init()
656 spca504B_WaitCmdStatus(gspca_dev); in sd_init()
660 reg_w_riv(gspca_dev, 0xe0, 0x0000, 0x0000); in sd_init()
661 reg_w_riv(gspca_dev, 0xe0, 0x0000, 0x0001); /* reset */ in sd_init()
662 spca504_wait_status(gspca_dev); in sd_init()
664 write_vector(gspca_dev, in sd_init()
668 write_vector(gspca_dev, spca504_pccam600_open_data, in sd_init()
670 setup_qtable(gspca_dev, qtable_creative_pccam); in sd_init()
676 spca504_read_info(gspca_dev); in sd_init()
679 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_init()
682 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_init()
685 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_init()
689 spca504A_acknowledged_command(gspca_dev, 0x08, in sd_init()
697 reg_w_riv(gspca_dev, 0x00, 0x270c, 0x05); in sd_init()
699 reg_w_riv(gspca_dev, 0x00, 0x2310, 0x05); in sd_init()
700 spca504A_acknowledged_command(gspca_dev, 0x01, in sd_init()
704 reg_w_riv(gspca_dev, 0, 0x2000, 0); in sd_init()
705 reg_w_riv(gspca_dev, 0, 0x2883, 1); in sd_init()
706 setup_qtable(gspca_dev, qtable_spca504_default); in sd_init()
709 return gspca_dev->usb_err; in sd_init()
712 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
714 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
718 jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height, in sd_start()
719 gspca_dev->pixfmt.width, in sd_start()
724 spca504B_setQtable(gspca_dev); in sd_start()
725 spca504B_SetSizeType(gspca_dev); in sd_start()
735 reg_w_riv(gspca_dev, 0xf0, 0, 0); in sd_start()
736 spca504B_WaitCmdStatus(gspca_dev); in sd_start()
737 reg_r(gspca_dev, 0xf0, 4, 0); in sd_start()
738 spca504B_WaitCmdStatus(gspca_dev); in sd_start()
741 reg_w_riv(gspca_dev, 0x31, 0x0004, 0x00); in sd_start()
742 spca504B_WaitCmdStatus(gspca_dev); in sd_start()
743 spca504B_PollingDataReady(gspca_dev); in sd_start()
749 spca504_read_info(gspca_dev); in sd_start()
752 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_start()
755 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_start()
757 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_start()
760 spca504_acknowledged_command(gspca_dev, 0x24, 8, 3); in sd_start()
761 spca504_read_info(gspca_dev); in sd_start()
762 spca504_acknowledged_command(gspca_dev, 0x24, 8, 3); in sd_start()
763 spca504_acknowledged_command(gspca_dev, 0x24, 0, 0); in sd_start()
765 spca504B_SetSizeType(gspca_dev); in sd_start()
766 reg_w_riv(gspca_dev, 0x00, 0x270c, 0x05); in sd_start()
768 reg_w_riv(gspca_dev, 0x00, 0x2310, 0x05); in sd_start()
772 write_vector(gspca_dev, in sd_start()
776 write_vector(gspca_dev, spca504_pccam600_init_data, in sd_start()
780 reg_w_riv(gspca_dev, 0x0c, 0x0000, enable); in sd_start()
782 reg_w_riv(gspca_dev, 0xb0, 0x0000, enable); in sd_start()
786 reg_w_riv(gspca_dev, 0x30, 0x0001, 800); /* ~ 20 fps */ in sd_start()
787 reg_w_riv(gspca_dev, 0x30, 0x0002, 1600); in sd_start()
788 spca504B_SetSizeType(gspca_dev); in sd_start()
791 init_ctl_reg(gspca_dev); in sd_start()
792 return gspca_dev->usb_err; in sd_start()
795 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
797 struct sd *sd = (struct sd *) gspca_dev; in sd_stopN()
804 reg_w_riv(gspca_dev, 0x31, 0, 0); in sd_stopN()
805 spca504B_WaitCmdStatus(gspca_dev); in sd_stopN()
806 spca504B_PollingDataReady(gspca_dev); in sd_stopN()
810 reg_w_riv(gspca_dev, 0x00, 0x2000, 0x0000); in sd_stopN()
816 spca504A_acknowledged_command(gspca_dev, 0x24, in sd_stopN()
818 spca504A_acknowledged_command(gspca_dev, 0x01, in sd_stopN()
821 spca504_acknowledged_command(gspca_dev, 0x24, 0, 0); in sd_stopN()
822 reg_w_riv(gspca_dev, 0x01, 0x000f, 0x0000); in sd_stopN()
828 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
832 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
898 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
902 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
910 gspca_frame_add(gspca_dev, INTER_PACKET, in sd_pkt_scan()
919 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
924 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
925 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
926 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl()
928 gspca_dev->usb_err = 0; in sd_s_ctrl()
930 if (!gspca_dev->streaming) in sd_s_ctrl()
935 setbrightness(gspca_dev, ctrl->val); in sd_s_ctrl()
938 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
941 setcolors(gspca_dev, ctrl->val); in sd_s_ctrl()
947 return gspca_dev->usb_err; in sd_s_ctrl()
954 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
956 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
958 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()