V4L/DVB (10387): gspca - spca505: Move some sequences from probe to streamon.
authorJean-Francois Moine <moinejf@free.fr>
Sat, 24 Jan 2009 18:42:50 +0000 (15:42 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:42:34 +0000 (12:42 -0300)
The webcams worked only one time after connection.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/spca505.c

index b9139b1edac9021b81f891d48f65c95e2fd36c9d..4fc54d8b84aa3e6277fad99447136eb542ac11ed 100644 (file)
@@ -650,31 +650,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
 /* this function is called at probe and resume time */
 static int sd_init(struct gspca_dev *gspca_dev)
 {
-       struct sd *sd = (struct sd *) gspca_dev;
-       int ret;
-
-       if (sd->subtype == Nxultra)
-               write_vector(gspca_dev, spca505b_open_data_ccd);
-       else
-               write_vector(gspca_dev, spca505_open_data_ccd);
-       ret = reg_read(gspca_dev, 0x06, 0x16);
-
-       if (ret < 0) {
-               PDEBUG(D_ERR|D_CONF,
-                      "register read failed err: %d",
-                      ret);
-               return ret;
-       }
-       if (ret != 0x0101) {
-               PDEBUG(D_ERR|D_CONF,
-                       "After vector read returns 0x%04x should be 0x0101",
-                       ret);
-       }
-
-       ret = reg_write(gspca_dev->dev, 0x06, 0x16, 0x0a);
-       if (ret < 0)
-               return ret;
-       reg_write(gspca_dev->dev, 0x05, 0xc2, 0x12);
        return 0;
 }
 
@@ -689,6 +664,7 @@ static void setbrightness(struct gspca_dev *gspca_dev)
 
 static int sd_start(struct gspca_dev *gspca_dev)
 {
+       struct sd *sd = (struct sd *) gspca_dev;
        struct usb_device *dev = gspca_dev->dev;
        int ret, mode;
        static u8 mode_tb[][3] = {
@@ -700,6 +676,29 @@ static int sd_start(struct gspca_dev *gspca_dev)
                {0x05, 0x40, 0x40}      /* 160x120 */
        };
 
+       if (sd->subtype == Nxultra)
+               write_vector(gspca_dev, spca505b_open_data_ccd);
+       else
+               write_vector(gspca_dev, spca505_open_data_ccd);
+       ret = reg_read(gspca_dev, 0x06, 0x16);
+
+       if (ret < 0) {
+               PDEBUG(D_ERR|D_CONF,
+                      "register read failed err: %d",
+                      ret);
+               return ret;
+       }
+       if (ret != 0x0101) {
+               PDEBUG(D_ERR|D_CONF,
+                       "After vector read returns 0x%04x should be 0x0101",
+                       ret);
+       }
+
+       ret = reg_write(gspca_dev->dev, 0x06, 0x16, 0x0a);
+       if (ret < 0)
+               return ret;
+       reg_write(gspca_dev->dev, 0x05, 0xc2, 0x12);
+
        /* necessary because without it we can see stream
         * only once after loading module */
        /* stopping usb registers Tomasz change */