Lines Matching refs:gspca_dev

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