V4L/DVB (11533): gspca - m5602-po1030: Setup window per resolution
authorErik Andr?n <erik.andren@gmail.com>
Thu, 15 Jan 2009 16:39:39 +0000 (13:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 21:20:33 +0000 (18:20 -0300)
This patch for the po1030 sets the drawing window for the VGA resolution

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
drivers/media/video/gspca/m5602/m5602_po1030.h

index ee8e496090a2dbdc7d45225ffb7f82b3f9d06d0f..af0e937451fc8f3d149951088bfbeed467b56914 100644 (file)
@@ -321,7 +321,34 @@ int po1030_init(struct sd *sd)
 
 int po1030_start(struct sd *sd)
 {
+       struct cam *cam = &sd->gspca_dev.cam;
        int i, err = 0;
+       int width = cam->cam_mode[sd->gspca_dev.curr_mode].width;
+       int height = cam->cam_mode[sd->gspca_dev.curr_mode].height;
+       u8 data;
+
+       switch (width) {
+       case 640:
+               data = ((width + 7) >> 8) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWWIDTH_H, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = (width + 7) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWWIDTH_L, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = ((height + 3) >> 8) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWHEIGHT_H, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = (height + 3) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWHEIGHT_L, &data, 1);
+               break;
+       }
+
        /* Synthesize the vsync/hsync setup */
        for (i = 0; i < ARRAY_SIZE(start_po1030) && !err; i++) {
                if (start_po1030[i][0] == BRIDGE)
@@ -330,7 +357,7 @@ int po1030_start(struct sd *sd)
                else if (start_po1030[i][0] == SENSOR) {
                        u8 data = start_po1030[i][2];
                        err = m5602_write_sensor(sd,
-                                       start_po1030[i][1], &data, 1);
+                               start_po1030[i][1], &data, 1);
                }
        }
        return err;
index fb0accfa77a4bffc5ffc08ea4940eb13134057cf..b47f590ef4282cf12b204430e5d9216ca5ea1533 100644 (file)
@@ -272,17 +272,6 @@ static const unsigned char init_po1030[][3] =
 
 static const unsigned char start_po1030[][3] =
 {
-       /* Set the window width to 647 */
-       {SENSOR, PO1030_WINDOWWIDTH_H, 0x02},
-       {SENSOR, PO1030_WINDOWWIDTH_L, 0x87},
-
-       /* Set the window height to 483 */
-       {SENSOR, PO1030_WINDOWHEIGHT_H, 0x01},
-       {SENSOR, PO1030_WINDOWHEIGHT_L, 0xe3},
-
-       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x06},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
-       {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
        {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
        {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x81},
        {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},