V4L/DVB (11542): gspca - m5602-mt9m111: Synthesize the hsync/vsync setup
authorErik Andr?n <erik.andren@gmail.com>
Tue, 20 Jan 2009 07:05:19 +0000 (04:05 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 21:20:35 +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_mt9m111.c
drivers/media/video/gspca/m5602/m5602_mt9m111.h

index edf502041b8086a7f85759c66eadb9d6880648b3..7986ef074c55e429cd63e00322a89fe64b0b478a 100644 (file)
@@ -269,6 +269,10 @@ int mt9m111_start(struct sd *sd)
 {
        int i, err = 0;
        u8 data[2];
+       struct cam *cam = &sd->gspca_dev.cam;
+
+       int width = cam->cam_mode[sd->gspca_dev.curr_mode].width;
+       int height = cam->cam_mode[sd->gspca_dev.curr_mode].height;
 
        for (i = 0; i < ARRAY_SIZE(start_mt9m111) && !err; i++) {
                if (start_mt9m111[i][0] == BRIDGE) {
@@ -282,6 +286,53 @@ int mt9m111_start(struct sd *sd)
                                start_mt9m111[i][1], data, 2);
                }
        }
+       if (err < 0)
+               return err;
+
+       err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (height >> 8) & 0xff);
+       if (err < 0)
+               return err;
+
+       err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (height & 0xff));
+       if (err < 0)
+               return err;
+
+       for (i = 0; i < 2 && !err; i++)
+               err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
+       if (err < 0)
+               return err;
+
+       err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 0);
+       if (err < 0)
+               return err;
+
+       err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 2);
+       if (err < 0)
+               return err;
+
+       for (i = 0; i < 2 && !err; i++)
+               err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA, 0);
+       if (err < 0)
+               return err;
+
+       err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA,
+                                (width >> 8) & 0xff);
+       if (err < 0)
+               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);
+       if (err < 0)
+               return err;
+
+       switch (width) {
+       case 640:
+               PDEBUG(D_V4L2, "Configuring camera for VGA mode");
+               break;
+       }
        return err;
 }
 
index 6598dd9c438ed5bdcbf4fdac24e0f9772b0b0844..7c8c700bab950925a3e59320b629cea3c09b61b4 100644 (file)
@@ -275,20 +275,6 @@ static const unsigned char start_mt9m111[][4] =
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x01, 0x00},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0, 0x00}, /* 480 */
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
-       {BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
-       {BRIDGE, M5602_XB_SIG_INI, 0x02, 0x00},
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02, 0x00}, /* 639*/
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x7f, 0x00},
-       {BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
-       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0, 0x00},
 };
 
-
 #endif