Lines Matching refs:gspca_dev

23 	struct gspca_dev gspca_dev;		/* !! must be the first item */  member
304 static void reg_r(struct gspca_dev *gspca_dev, in reg_r() argument
308 usb_control_msg(gspca_dev->dev, in reg_r()
309 usb_rcvctrlpipe(gspca_dev->dev, 0), in reg_r()
313 index, gspca_dev->usb_buf, length, 500); in reg_r()
316 static int reg_w(struct gspca_dev *gspca_dev, in reg_w() argument
321 gspca_dbg(gspca_dev, D_USBO, "reg write: [0x%02x] = 0x%02x\n", in reg_w()
323 ret = usb_control_msg(gspca_dev->dev, in reg_w()
324 usb_sndctrlpipe(gspca_dev->dev, 0), in reg_w()
334 static int reg_r_12(struct gspca_dev *gspca_dev, in reg_r_12() argument
341 gspca_dev->usb_buf[1] = 0; in reg_r_12()
342 ret = usb_control_msg(gspca_dev->dev, in reg_r_12()
343 usb_rcvctrlpipe(gspca_dev->dev, 0), in reg_r_12()
348 gspca_dev->usb_buf, length, in reg_r_12()
354 return (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]; in reg_r_12()
362 static int reg_r_wait(struct gspca_dev *gspca_dev, in reg_r_wait() argument
368 ret = reg_r_12(gspca_dev, reg, index, 1); in reg_r_wait()
376 static int write_vector(struct gspca_dev *gspca_dev, in write_vector() argument
382 ret = reg_w(gspca_dev, data[i][0], data[i][2], data[i][1]); in write_vector()
390 static int spca50x_setup_qtable(struct gspca_dev *gspca_dev, in spca50x_setup_qtable() argument
400 err = reg_w(gspca_dev, request, ybase + i, qtable[0][i]); in spca50x_setup_qtable()
407 err = reg_w(gspca_dev, request, cbase + i, qtable[1][i]); in spca50x_setup_qtable()
414 static void spca500_ping310(struct gspca_dev *gspca_dev) in spca500_ping310() argument
416 reg_r(gspca_dev, 0x0d04, 2); in spca500_ping310()
417 gspca_dbg(gspca_dev, D_STREAM, "ClickSmart310 ping 0x0d04 0x%02x 0x%02x\n", in spca500_ping310()
418 gspca_dev->usb_buf[0], gspca_dev->usb_buf[1]); in spca500_ping310()
421 static void spca500_clksmart310_init(struct gspca_dev *gspca_dev) in spca500_clksmart310_init() argument
423 reg_r(gspca_dev, 0x0d05, 2); in spca500_clksmart310_init()
424 gspca_dbg(gspca_dev, D_STREAM, "ClickSmart310 init 0x0d05 0x%02x 0x%02x\n", in spca500_clksmart310_init()
425 gspca_dev->usb_buf[0], gspca_dev->usb_buf[1]); in spca500_clksmart310_init()
426 reg_w(gspca_dev, 0x00, 0x8167, 0x5a); in spca500_clksmart310_init()
427 spca500_ping310(gspca_dev); in spca500_clksmart310_init()
429 reg_w(gspca_dev, 0x00, 0x8168, 0x22); in spca500_clksmart310_init()
430 reg_w(gspca_dev, 0x00, 0x816a, 0xc0); in spca500_clksmart310_init()
431 reg_w(gspca_dev, 0x00, 0x816b, 0x0b); in spca500_clksmart310_init()
432 reg_w(gspca_dev, 0x00, 0x8169, 0x25); in spca500_clksmart310_init()
433 reg_w(gspca_dev, 0x00, 0x8157, 0x5b); in spca500_clksmart310_init()
434 reg_w(gspca_dev, 0x00, 0x8158, 0x5b); in spca500_clksmart310_init()
435 reg_w(gspca_dev, 0x00, 0x813f, 0x03); in spca500_clksmart310_init()
436 reg_w(gspca_dev, 0x00, 0x8151, 0x4a); in spca500_clksmart310_init()
437 reg_w(gspca_dev, 0x00, 0x8153, 0x78); in spca500_clksmart310_init()
438 reg_w(gspca_dev, 0x00, 0x0d01, 0x04); in spca500_clksmart310_init()
440 reg_w(gspca_dev, 0x00, 0x0d02, 0x01); in spca500_clksmart310_init()
441 reg_w(gspca_dev, 0x00, 0x8169, 0x25); in spca500_clksmart310_init()
442 reg_w(gspca_dev, 0x00, 0x0d01, 0x02); in spca500_clksmart310_init()
445 static void spca500_setmode(struct gspca_dev *gspca_dev, in spca500_setmode() argument
451 reg_w(gspca_dev, 0, 0x8001, xmult); in spca500_setmode()
454 reg_w(gspca_dev, 0, 0x8002, ymult); in spca500_setmode()
457 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; in spca500_setmode()
458 reg_w(gspca_dev, 0, 0x8003, mode << 4); in spca500_setmode()
461 static int spca500_full_reset(struct gspca_dev *gspca_dev) in spca500_full_reset() argument
466 err = reg_w(gspca_dev, 0xe0, 0x0001, 0x0000); in spca500_full_reset()
471 err = reg_r_wait(gspca_dev, 0x06, 0x0000, 0x0000); in spca500_full_reset()
474 err = reg_w(gspca_dev, 0xe0, 0x0000, 0x0000); in spca500_full_reset()
477 err = reg_r_wait(gspca_dev, 0x06, 0, 0); in spca500_full_reset()
479 gspca_err(gspca_dev, "reg_r_wait() failed\n"); in spca500_full_reset()
492 static int spca500_synch310(struct gspca_dev *gspca_dev) in spca500_synch310() argument
494 if (usb_set_interface(gspca_dev->dev, gspca_dev->iface, 0) < 0) { in spca500_synch310()
495 gspca_err(gspca_dev, "Set packet size: set interface error\n"); in spca500_synch310()
498 spca500_ping310(gspca_dev); in spca500_synch310()
500 reg_r(gspca_dev, 0x0d00, 1); in spca500_synch310()
503 gspca_dbg(gspca_dev, D_PACK, "ClickSmart310 sync alt: %d\n", in spca500_synch310()
504 gspca_dev->alt); in spca500_synch310()
507 if (usb_set_interface(gspca_dev->dev, in spca500_synch310()
508 gspca_dev->iface, in spca500_synch310()
509 gspca_dev->alt) < 0) { in spca500_synch310()
510 gspca_err(gspca_dev, "Set packet size: set interface error\n"); in spca500_synch310()
518 static void spca500_reinit(struct gspca_dev *gspca_dev) in spca500_reinit() argument
525 reg_w(gspca_dev, 0x00, 0x0d01, 0x01); in spca500_reinit()
526 reg_w(gspca_dev, 0x00, 0x0d03, 0x00); in spca500_reinit()
527 reg_w(gspca_dev, 0x00, 0x0d02, 0x01); in spca500_reinit()
530 reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in spca500_reinit()
532 err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, in spca500_reinit()
535 gspca_err(gspca_dev, "spca50x_setup_qtable failed on init\n"); in spca500_reinit()
538 reg_w(gspca_dev, 0x00, 0x8880, 2); in spca500_reinit()
540 reg_w(gspca_dev, 0x00, 0x800a, 0x00); in spca500_reinit()
542 reg_w(gspca_dev, 0x00, 0x820f, 0x01); in spca500_reinit()
544 reg_w(gspca_dev, 0x00, 0x870a, 0x04); in spca500_reinit()
546 reg_w(gspca_dev, 0, 0x8003, 0x00); in spca500_reinit()
548 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in spca500_reinit()
550 if (reg_r_wait(gspca_dev, 0, 0x8000, 0x44) != 0) { in spca500_reinit()
551 reg_r(gspca_dev, 0x816b, 1); in spca500_reinit()
552 Data = gspca_dev->usb_buf[0]; in spca500_reinit()
553 reg_w(gspca_dev, 0x00, 0x816b, Data); in spca500_reinit()
558 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
561 struct sd *sd = (struct sd *) gspca_dev; in sd_config()
564 cam = &gspca_dev->cam; in sd_config()
577 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
579 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
582 gspca_dbg(gspca_dev, D_STREAM, "SPCA500 init\n"); in sd_init()
584 spca500_clksmart310_init(gspca_dev); in sd_init()
587 gspca_dbg(gspca_dev, D_STREAM, "SPCA500 init done\n"); in sd_init()
591 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
593 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
599 jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height, in sd_start()
600 gspca_dev->pixfmt.width, in sd_start()
613 reg_r(gspca_dev, 0x8a04, 1); in sd_start()
614 gspca_dbg(gspca_dev, D_STREAM, "Spca500 Sensor Address 0x%02x\n", in sd_start()
615 gspca_dev->usb_buf[0]); in sd_start()
616 gspca_dbg(gspca_dev, D_STREAM, "Spca500 curr_mode: %d Xmult: 0x%02x, Ymult: 0x%02x", in sd_start()
617 gspca_dev->curr_mode, xmult, ymult); in sd_start()
622 spca500_setmode(gspca_dev, xmult, ymult); in sd_start()
625 reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in sd_start()
626 reg_w(gspca_dev, 0x00, 0x8880, 3); in sd_start()
627 err = spca50x_setup_qtable(gspca_dev, in sd_start()
631 gspca_err(gspca_dev, "spca50x_setup_qtable failed\n"); in sd_start()
633 reg_w(gspca_dev, 0x00, 0x870a, 0x04); in sd_start()
636 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_start()
638 if (reg_r_wait(gspca_dev, 0, 0x8000, 0x44) != 0) in sd_start()
639 gspca_err(gspca_dev, "reg_r_wait() failed\n"); in sd_start()
641 reg_r(gspca_dev, 0x816b, 1); in sd_start()
642 Data = gspca_dev->usb_buf[0]; in sd_start()
643 reg_w(gspca_dev, 0x00, 0x816b, Data); in sd_start()
645 spca500_synch310(gspca_dev); in sd_start()
647 write_vector(gspca_dev, spca500_visual_defaults); in sd_start()
648 spca500_setmode(gspca_dev, xmult, ymult); in sd_start()
650 err = reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in sd_start()
652 gspca_err(gspca_dev, "failed to enable drop packet\n"); in sd_start()
653 reg_w(gspca_dev, 0x00, 0x8880, 3); in sd_start()
654 err = spca50x_setup_qtable(gspca_dev, in sd_start()
658 gspca_err(gspca_dev, "spca50x_setup_qtable failed\n"); in sd_start()
661 reg_w(gspca_dev, 0x00, 0x870a, 0x04); in sd_start()
664 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_start()
666 if (reg_r_wait(gspca_dev, 0, 0x8000, 0x44) != 0) in sd_start()
667 gspca_err(gspca_dev, "reg_r_wait() failed\n"); in sd_start()
669 reg_r(gspca_dev, 0x816b, 1); in sd_start()
670 Data = gspca_dev->usb_buf[0]; in sd_start()
671 reg_w(gspca_dev, 0x00, 0x816b, Data); in sd_start()
679 err = spca500_full_reset(gspca_dev); in sd_start()
681 gspca_err(gspca_dev, "spca500_full_reset failed\n"); in sd_start()
684 err = reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in sd_start()
686 gspca_err(gspca_dev, "failed to enable drop packet\n"); in sd_start()
687 reg_w(gspca_dev, 0x00, 0x8880, 3); in sd_start()
688 err = spca50x_setup_qtable(gspca_dev, in sd_start()
692 gspca_err(gspca_dev, "spca50x_setup_qtable failed\n"); in sd_start()
694 spca500_setmode(gspca_dev, xmult, ymult); in sd_start()
695 reg_w(gspca_dev, 0x20, 0x0001, 0x0004); in sd_start()
698 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_start()
700 if (reg_r_wait(gspca_dev, 0, 0x8000, 0x44) != 0) in sd_start()
701 gspca_err(gspca_dev, "reg_r_wait() failed\n"); in sd_start()
703 reg_r(gspca_dev, 0x816b, 1); in sd_start()
704 Data = gspca_dev->usb_buf[0]; in sd_start()
705 reg_w(gspca_dev, 0x00, 0x816b, Data); in sd_start()
712 err = spca500_full_reset(gspca_dev); in sd_start()
714 gspca_err(gspca_dev, "spca500_full_reset failed\n"); in sd_start()
716 reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in sd_start()
717 reg_w(gspca_dev, 0x00, 0x8880, 0); in sd_start()
718 err = spca50x_setup_qtable(gspca_dev, in sd_start()
722 gspca_err(gspca_dev, "spca50x_setup_qtable failed\n"); in sd_start()
723 spca500_setmode(gspca_dev, xmult, ymult); in sd_start()
725 reg_w(gspca_dev, 0x20, 0x0001, 0x0004); in sd_start()
728 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_start()
730 if (reg_r_wait(gspca_dev, 0, 0x8000, 0x44) != 0) in sd_start()
731 gspca_err(gspca_dev, "reg_r_wait() failed\n"); in sd_start()
733 reg_r(gspca_dev, 0x816b, 1); in sd_start()
734 Data = gspca_dev->usb_buf[0]; in sd_start()
735 reg_w(gspca_dev, 0x00, 0x816b, Data); in sd_start()
749 spca500_reinit(gspca_dev); in sd_start()
750 reg_w(gspca_dev, 0x00, 0x0d01, 0x01); in sd_start()
752 reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in sd_start()
754 err = spca50x_setup_qtable(gspca_dev, in sd_start()
757 gspca_err(gspca_dev, "spca50x_setup_qtable failed\n"); in sd_start()
758 reg_w(gspca_dev, 0x00, 0x8880, 2); in sd_start()
761 reg_w(gspca_dev, 0x00, 0x800a, 0x00); in sd_start()
763 reg_w(gspca_dev, 0x00, 0x820f, 0x01); in sd_start()
765 reg_w(gspca_dev, 0x00, 0x870a, 0x04); in sd_start()
767 spca500_setmode(gspca_dev, xmult, ymult); in sd_start()
769 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_start()
771 reg_r_wait(gspca_dev, 0, 0x8000, 0x44); in sd_start()
773 reg_r(gspca_dev, 0x816b, 1); in sd_start()
774 Data = gspca_dev->usb_buf[0]; in sd_start()
775 reg_w(gspca_dev, 0x00, 0x816b, Data); in sd_start()
779 reg_w(gspca_dev, 0x02, 0x00, 0x00); in sd_start()
781 reg_w(gspca_dev, 0x00, 0x850a, 0x0001); in sd_start()
783 err = spca50x_setup_qtable(gspca_dev, in sd_start()
787 gspca_err(gspca_dev, "spca50x_setup_qtable failed\n"); in sd_start()
788 reg_w(gspca_dev, 0x00, 0x8880, 3); in sd_start()
789 reg_w(gspca_dev, 0x00, 0x800a, 0x00); in sd_start()
791 reg_w(gspca_dev, 0x00, 0x870a, 0x04); in sd_start()
793 spca500_setmode(gspca_dev, xmult, ymult); in sd_start()
796 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_start()
797 reg_r_wait(gspca_dev, 0, 0x8000, 0x44); in sd_start()
799 reg_r(gspca_dev, 0x816b, 1); in sd_start()
800 Data = gspca_dev->usb_buf[0]; in sd_start()
801 reg_w(gspca_dev, 0x00, 0x816b, Data); in sd_start()
802 write_vector(gspca_dev, Clicksmart510_defaults); in sd_start()
808 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
810 reg_w(gspca_dev, 0, 0x8003, 0x00); in sd_stopN()
813 reg_w(gspca_dev, 0x00, 0x8000, 0x0004); in sd_stopN()
814 reg_r(gspca_dev, 0x8000, 1); in sd_stopN()
815 gspca_dbg(gspca_dev, D_STREAM, "stop SPCA500 done reg8000: 0x%2x\n", in sd_stopN()
816 gspca_dev->usb_buf[0]); in sd_stopN()
819 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
823 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
833 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
837 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
851 gspca_frame_add(gspca_dev, INTER_PACKET, in sd_pkt_scan()
860 gspca_frame_add(gspca_dev, INTER_PACKET, data, len); in sd_pkt_scan()
863 static void setbrightness(struct gspca_dev *gspca_dev, s32 val) in setbrightness() argument
865 reg_w(gspca_dev, 0x00, 0x8167, in setbrightness()
869 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
871 reg_w(gspca_dev, 0x00, 0x8168, val); in setcontrast()
874 static void setcolors(struct gspca_dev *gspca_dev, s32 val) in setcolors() argument
876 reg_w(gspca_dev, 0x00, 0x8169, val); in setcolors()
881 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
882 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
884 gspca_dev->usb_err = 0; in sd_s_ctrl()
886 if (!gspca_dev->streaming) in sd_s_ctrl()
891 setbrightness(gspca_dev, ctrl->val); in sd_s_ctrl()
894 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
897 setcolors(gspca_dev, ctrl->val); in sd_s_ctrl()
900 return gspca_dev->usb_err; in sd_s_ctrl()
907 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
909 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
911 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()