]> Pileus Git - ~andy/linux/blobdiff - drivers/media/video/gspca/xirlink_cit.c
[media] gspca_xirlink_cit: Grab backlight compensation control while streaming
[~andy/linux] / drivers / media / video / gspca / xirlink_cit.c
index 4fe2ab1c17d5c0ad4d52b41bcd80bb9691dd06ad..13b8d395d21072040c089f13a41090f117d8e55f 100644 (file)
@@ -1914,9 +1914,10 @@ static int cit_start_model2(struct gspca_dev *gspca_dev)
                break;
        }
 
-       /* FIXME this cannot be changed while streaming, so we
-          should report a grabbed flag for this control. */
        cit_model2_Packet1(gspca_dev, 0x0028, v4l2_ctrl_g_ctrl(sd->lighting));
+       /* model2 cannot change the backlight compensation while streaming */
+       v4l2_ctrl_grab(sd->lighting, true);
+
        /* color balance rg2 */
        cit_model2_Packet1(gspca_dev, 0x001e, 0x002f);
        /* saturation */
@@ -2620,8 +2621,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
                break;
        }
 
-       v4l2_ctrl_handler_setup(&gspca_dev->ctrl_handler);
-
        /* Program max isoc packet size */
        cit_write_reg(gspca_dev, packet_size >> 8, 0x0106);
        cit_write_reg(gspca_dev, packet_size & 0xff, 0x0107);
@@ -2717,6 +2716,8 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
                cit_write_reg(gspca_dev, 0x81, 0x0100); /* LED Off */
                break;
        case CIT_MODEL2:
+               v4l2_ctrl_grab(sd->lighting, false);
+               /* Fall through! */
        case CIT_MODEL4:
                cit_model2_Packet1(gspca_dev, 0x0030, 0x0004);
 
@@ -3137,6 +3138,7 @@ static struct usb_driver sd_driver = {
 #ifdef CONFIG_PM
        .suspend = gspca_suspend,
        .resume = gspca_resume,
+       .reset_resume = gspca_resume,
 #endif
 };