V4L/DVB (11536): gspca - m5602-po1030: Impove the bridge vsync/hsync configuration
authorErik Andr?n <erik.andren@gmail.com>
Fri, 16 Jan 2009 06:48:15 +0000 (03:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 21:20:34 +0000 (18:20 -0300)
Signed-off-by: Erik Andr?n <erik.andren@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/m5602/m5602_po1030.c

index 9e9eed8..5b91133 100644 (file)
@@ -367,11 +367,6 @@ int po1030_start(struct sd *sd)
                break;
 
        case 640:
-               data = 0;
-               err = m5602_write_sensor(sd, PO1030_CONTROL3, &data, 1);
-               if (err < 0)
-                       return err;
-
                data = ((width + 7) >> 8) & 0xff;
                err = m5602_write_sensor(sd, PO1030_WINDOWWIDTH_H, &data, 1);
                if (err < 0)
@@ -394,6 +389,9 @@ int po1030_start(struct sd *sd)
                width -= 2;
                break;
        }
+       err = m5602_write_bridge(sd, M5602_XB_SENSOR_TYPE, 0x0c);
+       if (err < 0)
+               return err;
 
        err = m5602_write_bridge(sd, M5602_XB_LINE_OF_FRAME_H, 0x81);
        if (err < 0)
@@ -403,6 +401,10 @@ int po1030_start(struct sd *sd)
        if (err < 0)
                return err;
 
+       err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 0x01);
+       if (err < 0)
+               return err;
+
        err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA,
                                 ((ver_offs >> 8) & 0xff));
        if (err < 0)
@@ -412,7 +414,8 @@ int po1030_start(struct sd *sd)
        if (err < 0)
                return err;
 
-       err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
+       for (i = 0; i < 2 && !err; i++)
+               err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
        if (err < 0)
                return err;
 
@@ -427,6 +430,9 @@ int po1030_start(struct sd *sd)
        for (i = 0; i < 2 && !err; i++)
                err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
 
+       for (i = 0; i < 2 && !err; i++)
+               err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 0);
+
        for (i = 0; i < 2 && !err; i++)
                err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA, 0);
        if (err < 0)
@@ -437,6 +443,10 @@ int po1030_start(struct sd *sd)
                return err;
 
        err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA, (width & 0xff));
+       if (err < 0)
+               return err;
+
+       err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 0);
        return err;
 }