]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/gspca/m5602/m5602_ov9650.h
Merge commit 'v2.6.29-rc1' into x86/urgent
[linux-2.6-omap-h63xx.git] / drivers / media / video / gspca / m5602 / m5602_ov9650.h
index 636dce61c49da06218c09aecf29907893ddf4720..f4b33b8e8daebe08a62fb67d8b151f4cdfd76f98 100644 (file)
@@ -35,6 +35,7 @@
 #define OV9650_PID                     0x0a
 #define OV9650_VER                     0x0b
 #define OV9650_COM3                    0x0c
+#define OV9650_COM4                    0x0d
 #define OV9650_COM5                    0x0e
 #define OV9650_COM6                    0x0f
 #define OV9650_AECH                    0x10
@@ -93,6 +94,7 @@
 
 #define OV9650_REGISTER_RESET          (1 << 7)
 #define OV9650_VGA_SELECT              (1 << 6)
+#define OV9650_CIF_SELECT              (1 << 5)
 #define OV9650_QVGA_SELECT             (1 << 4)
 #define OV9650_RGB_SELECT              (1 << 2)
 #define OV9650_RAW_RGB_SELECT          (1 << 0)
 #define OV9650_SYSTEM_CLK_SEL          (1 << 7)
 #define OV9650_SLAM_MODE               (1 << 4)
 
+#define OV9650_QVGA_VARIOPIXEL         (1 << 7)
+
 #define OV9650_VFLIP                   (1 << 4)
 #define OV9650_HFLIP                   (1 << 5)
 
@@ -258,7 +262,7 @@ static struct m5602_sensor ov9650 = {
        }
        },
 
-       .nmodes = 2,
+       .nmodes = 3,
        .modes = {
        {
                320,
@@ -270,6 +274,16 @@ static struct m5602_sensor ov9650 = {
                .bytesperline = 320,
                .colorspace = V4L2_COLORSPACE_SRGB,
                .priv = 0
+       }, {
+               352,
+               288,
+               V4L2_PIX_FMT_SBGGR8,
+               V4L2_FIELD_NONE,
+               .sizeimage =
+                       352 * 288,
+               .bytesperline = 352,
+               .colorspace = V4L2_COLORSPACE_SRGB,
+               .priv = 0
        }, {
                640,
                480,
@@ -328,6 +342,7 @@ static const unsigned char init_ov9650[][3] =
        {BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
        {BRIDGE, M5602_XB_GPIO_DAT, 0x00},
        {BRIDGE, M5602_XB_I2C_CLK_DIV, 0x0a},
+
        /* Reset chip */
        {SENSOR, OV9650_COM7, OV9650_REGISTER_RESET},
        /* Enable double clock */
@@ -335,8 +350,6 @@ static const unsigned char init_ov9650[][3] =
        /* Do something out of spec with the power */
        {SENSOR, OV9650_OFON, 0x40},
 
-       /* Set QQVGA */
-       {SENSOR, OV9650_COM1, 0x20},
        /* Set fast AGC/AEC algorithm with unlimited step size */
        {SENSOR, OV9650_COM8, OV9650_FAST_AGC_AEC |
                              OV9650_AEC_UNLIM_STEP_SIZE |
@@ -409,10 +422,6 @@ static const unsigned char init_ov9650[][3] =
        {SENSOR, OV9650_VSTOP, 0x7e},
        /* Set complementing vertical frame control */
        {SENSOR, OV9650_VREF, 0x10},
-       /* Set raw RGB output format with VGA resolution */
-       {SENSOR, OV9650_COM7, OV9650_VGA_SELECT |
-                             OV9650_RGB_SELECT |
-                             OV9650_RAW_RGB_SELECT},
        {SENSOR, OV9650_ADC, 0x04},
        {SENSOR, OV9650_HV, 0x40},
        /* Enable denoise, and white-pixel erase */
@@ -421,6 +430,10 @@ static const unsigned char init_ov9650[][3] =
        /* Set the high bits of the exposure value */
        {SENSOR, OV9650_AECH, ((EXPOSURE_DEFAULT & 0xff00) >> 8)},
 
+       /* Enable VARIOPIXEL */
+       {SENSOR, OV9650_COM3, OV9650_VARIOPIXEL},
+       {SENSOR, OV9650_COM4, OV9650_QVGA_VARIOPIXEL},
+
        /* Set the low bits of the exposure value */
        {SENSOR, OV9650_COM1, (EXPOSURE_DEFAULT & 0xff)},
        {SENSOR, OV9650_GAIN, GAIN_DEFAULT},
@@ -445,47 +458,60 @@ static const unsigned char power_down_ov9650[][3] =
        {BRIDGE, M5602_XB_GPIO_EN_L, 0x06},
        {BRIDGE, M5602_XB_GPIO_DAT_H, 0x02},
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x04},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0}
+       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
+};
+
+static const unsigned char res_init_ov9650[][2] =
+{
+       {M5602_XB_LINE_OF_FRAME_H, 0x82},
+       {M5602_XB_LINE_OF_FRAME_L, 0x00},
+       {M5602_XB_PIX_OF_LINE_H, 0x82},
+       {M5602_XB_PIX_OF_LINE_L, 0x00},
+       {M5602_XB_SIG_INI, 0x01}
 };
 
 static const unsigned char VGA_ov9650[][3] =
 {
+       /* Moves the view window in a vertical orientation */
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x09},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0}, /* 480 */
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x62}, /* 98 */
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02}, /* 640 + 98 */
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0xe2},
+
        {SENSOR, OV9650_COM7, OV9650_VGA_SELECT |
                              OV9650_RGB_SELECT |
                              OV9650_RAW_RGB_SELECT},
+};
 
-       {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x82},
-       {BRIDGE, M5602_XB_LINE_OF_FRAME_L, 0x00},
-       {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},
-       {BRIDGE, M5602_XB_PIX_OF_LINE_L, 0x00},
-       {BRIDGE, M5602_XB_SIG_INI, 0x01},
-
+static const unsigned char CIF_ov9650[][3] =
+{
        /* Moves the view window in a vertical orientation */
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x09},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0}, /* 480 */
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x20}, /* 288 */
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x64}, /* 100 */
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02}, /* 640 + 100 */
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0xe4}
-};
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x62}, /* 98 */
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x01}, /* 352 + 98 */
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0xc2},
 
-static const unsigned char QVGA_ov9650[][3] =
-{
-       {SENSOR, OV9650_COM7, OV9650_QVGA_SELECT |
+       {SENSOR, OV9650_COM7, OV9650_CIF_SELECT |
                              OV9650_RGB_SELECT |
                              OV9650_RAW_RGB_SELECT},
+};
 
-       {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x82},
-       {BRIDGE, M5602_XB_LINE_OF_FRAME_L, 0x00},
-       {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},
-       {BRIDGE, M5602_XB_PIX_OF_LINE_L, 0x00},
-       {BRIDGE, M5602_XB_SIG_INI, 0x01},
-
+static const unsigned char QVGA_ov9650[][3] =
+{
        /* Moves the view window in a vertical orientation */
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x08},
@@ -497,7 +523,11 @@ static const unsigned char QVGA_ov9650[][3] =
        {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_HSYNC_PARA, 0x31}, /* 50 */
        {BRIDGE, M5602_XB_HSYNC_PARA, 0x01}, /* 320 + 50 */
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x71}
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x71},
+
+       {SENSOR, OV9650_COM7, OV9650_QVGA_SELECT |
+                             OV9650_RGB_SELECT |
+                             OV9650_RAW_RGB_SELECT},
 };
 
 #endif