V4L/DVB (11535): gspca - m5602-po1030: Add experimental QVGA support
authorErik Andr?n <erik.andren@gmail.com>
Thu, 15 Jan 2009 17:18:36 +0000 (14:18 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 21:20:34 +0000 (18:20 -0300)
Adds experimental support for QVGA. This is code is compile tested only.

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 d75b27221a5c8d5835eb831f12150b889584e492..9e9eed89ea637d3b84320a08b948155f463f16d1 100644 (file)
@@ -43,6 +43,15 @@ static int po1030_get_auto_exposure(struct gspca_dev *gspca_dev,
 
 static struct v4l2_pix_format po1030_modes[] = {
        {
+               320,
+               240,
+               V4L2_PIX_FMT_SBGGR8,
+               V4L2_FIELD_NONE,
+               .sizeimage = 320 * 240,
+               .bytesperline = 320,
+               .colorspace = V4L2_COLORSPACE_SRGB,
+               .priv = 2
+       }, {
                640,
                480,
                V4L2_PIX_FMT_SBGGR8,
@@ -329,7 +338,40 @@ int po1030_start(struct sd *sd)
        u8 data;
 
        switch (width) {
+       case 320:
+               data = PO1030_SUBSAMPLING;
+               err = m5602_write_sensor(sd, PO1030_CONTROL3, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = ((width + 3) >> 8) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWWIDTH_H, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = (width + 3) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWWIDTH_L, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = ((height + 1) >> 8) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWHEIGHT_H, &data, 1);
+               if (err < 0)
+                       return err;
+
+               data = (height + 1) & 0xff;
+               err = m5602_write_sensor(sd, PO1030_WINDOWHEIGHT_L, &data, 1);
+
+               height += 6;
+               width -= 1;
+               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)
index 8ded84d20973852bc66cbf39eb94445e1519fae2..1ea380b2bbe73ee49c6734883a38a2d80b74d816 100644 (file)
 
 #define PO1030_SENSOR_RESET    (1 << 5)
 
+#define PO1030_SUBSAMPLING     (1 << 6)
+
 /*****************************************************************************/
 
 #define PO1030_GLOBAL_GAIN_DEFAULT     0x12
This page took 0.048609 seconds and 5 git commands to generate.