The patch number 12993 was added via Mauro Carvalho Chehab <mche...@redhat.com>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        Linux Media Mailing List <linux-me...@vger.kernel.org>

------

From: Mauro Carvalho Chehab  <mche...@redhat.com>
merge: http://linuxtv.org/hg/~eandren/v4l-dvb


Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>


---

 linux/drivers/media/video/gspca/m5602/m5602_ov7660.c |  362 ++++++++++-
 linux/drivers/media/video/gspca/m5602/m5602_ov7660.h |  168 ++---
 2 files changed, 437 insertions(+), 93 deletions(-)

diff -r fdc9c06cbbe9 -r d7345d5b2ec6 
linux/drivers/media/video/gspca/m5602/m5602_ov7660.c
--- a/linux/drivers/media/video/gspca/m5602/m5602_ov7660.c      Thu Sep 17 
20:00:40 2009 -0400
+++ b/linux/drivers/media/video/gspca/m5602/m5602_ov7660.c      Thu Sep 17 
23:18:57 2009 -0300
@@ -20,6 +20,24 @@
 
 static int ov7660_get_gain(struct gspca_dev *gspca_dev, __s32 *val);
 static int ov7660_set_gain(struct gspca_dev *gspca_dev, __s32 val);
+#if 0
+static int ov7660_get_blue_gain(struct gspca_dev *gspca_dev, __s32 *val);
+static int ov7660_set_blue_gain(struct gspca_dev *gspca_dev, __s32 val);
+static int ov7660_get_red_gain(struct gspca_dev *gspca_dev, __s32 *val);
+static int ov7660_set_red_gain(struct gspca_dev *gspca_dev, __s32 val);
+#endif
+static int ov7660_get_auto_white_balance(struct gspca_dev *gspca_dev,
+                                        __s32 *val);
+static int ov7660_set_auto_white_balance(struct gspca_dev *gspca_dev,
+                                        __s32 val);
+static int ov7660_get_auto_gain(struct gspca_dev *gspca_dev, __s32 *val);
+static int ov7660_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val);
+static int ov7660_get_auto_exposure(struct gspca_dev *gspca_dev, __s32 *val);
+static int ov7660_set_auto_exposure(struct gspca_dev *gspca_dev, __s32 val);
+static int ov7660_get_hflip(struct gspca_dev *gspca_dev, __s32 *val);
+static int ov7660_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
+static int ov7660_get_vflip(struct gspca_dev *gspca_dev, __s32 *val);
+static int ov7660_set_vflip(struct gspca_dev *gspca_dev, __s32 val);
 
 const static struct ctrl ov7660_ctrls[] = {
 #define GAIN_IDX 1
@@ -37,6 +55,111 @@
                .set = ov7660_set_gain,
                .get = ov7660_get_gain
        },
+#define BLUE_BALANCE_IDX 2
+#if 0
+       {
+               {
+                       .id             = V4L2_CID_BLUE_BALANCE,
+                       .type           = V4L2_CTRL_TYPE_INTEGER,
+                       .name           = "blue balance",
+                       .minimum        = 0x00,
+                       .maximum        = 0x7f,
+                       .step           = 0x1,
+                       .default_value  = OV7660_DEFAULT_BLUE_GAIN,
+                       .flags          = V4L2_CTRL_FLAG_SLIDER
+               },
+               .set = ov7660_set_blue_gain,
+               .get = ov7660_get_blue_gain
+       },
+#endif
+#define RED_BALANCE_IDX 3
+#if 0
+       {
+               {
+                       .id             = V4L2_CID_RED_BALANCE,
+                       .type           = V4L2_CTRL_TYPE_INTEGER,
+                       .name           = "red balance",
+                       .minimum        = 0x00,
+                       .maximum        = 0x7f,
+                       .step           = 0x1,
+                       .default_value  = OV7660_DEFAULT_RED_GAIN,
+                       .flags          = V4L2_CTRL_FLAG_SLIDER
+               },
+               .set = ov7660_set_red_gain,
+               .get = ov7660_get_red_gain
+       },
+#endif
+#define AUTO_WHITE_BALANCE_IDX 4
+       {
+               {
+                       .id             = V4L2_CID_AUTO_WHITE_BALANCE,
+                       .type           = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name           = "auto white balance",
+                       .minimum        = 0,
+                       .maximum        = 1,
+                       .step           = 1,
+                       .default_value  = 1
+               },
+               .set = ov7660_set_auto_white_balance,
+               .get = ov7660_get_auto_white_balance
+       },
+#define AUTO_GAIN_CTRL_IDX 5
+       {
+               {
+                       .id             = V4L2_CID_AUTOGAIN,
+                       .type           = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name           = "auto gain control",
+                       .minimum        = 0,
+                       .maximum        = 1,
+                       .step           = 1,
+                       .default_value  = 1
+               },
+               .set = ov7660_set_auto_gain,
+               .get = ov7660_get_auto_gain
+       },
+#define AUTO_EXPOSURE_IDX 6
+       {
+               {
+                       .id             = V4L2_CID_EXPOSURE_AUTO,
+                       .type           = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name           = "auto exposure",
+                       .minimum        = 0,
+                       .maximum        = 1,
+                       .step           = 1,
+                       .default_value  = 1
+               },
+               .set = ov7660_set_auto_exposure,
+               .get = ov7660_get_auto_exposure
+       },
+#define HFLIP_IDX 7
+       {
+               {
+                       .id             = V4L2_CID_HFLIP,
+                       .type           = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name           = "horizontal flip",
+                       .minimum        = 0,
+                       .maximum        = 1,
+                       .step           = 1,
+                       .default_value  = 0
+               },
+               .set = ov7660_set_hflip,
+               .get = ov7660_get_hflip
+       },
+#define VFLIP_IDX 8
+       {
+               {
+                       .id             = V4L2_CID_VFLIP,
+                       .type           = V4L2_CTRL_TYPE_BOOLEAN,
+                       .name           = "vertical flip",
+                       .minimum        = 0,
+                       .maximum        = 1,
+                       .step           = 1,
+                       .default_value  = 0
+               },
+               .set = ov7660_set_vflip,
+               .get = ov7660_get_vflip
+       },
+
 };
 
 static struct v4l2_pix_format ov7660_modes[] = {
@@ -137,7 +260,7 @@
                } else {
                        data[0] = init_ov7660[i][2];
                        err = m5602_write_sensor(sd,
-                                       init_ov7660[i][1], data, 1);
+                               init_ov7660[i][1], data, 1);
                }
        }
 
@@ -148,6 +271,39 @@
        if (err < 0)
                return err;
 
+       err = ov7660_set_auto_white_balance(&sd->gspca_dev,
+               sensor_settings[AUTO_WHITE_BALANCE_IDX]);
+       if (err < 0)
+               return err;
+
+       err = ov7660_set_auto_gain(&sd->gspca_dev,
+               sensor_settings[AUTO_GAIN_CTRL_IDX]);
+       if (err < 0)
+               return err;
+
+       err = ov7660_set_auto_exposure(&sd->gspca_dev,
+               sensor_settings[AUTO_EXPOSURE_IDX]);
+       if (err < 0)
+               return err;
+#if 0
+       err = ov7660_set_blue_gain(&sd->gspca_dev,
+               sensor_settings[BLUE_BALANCE_IDX]);
+       if (err < 0)
+               return err;
+
+       err = ov7660_set_red_gain(&sd->gspca_dev,
+               sensor_settings[RED_BALANCE_IDX]);
+       if (err < 0)
+               return err;
+#endif
+       err = ov7660_set_hflip(&sd->gspca_dev,
+               sensor_settings[HFLIP_IDX]);
+       if (err < 0)
+               return err;
+
+       err = ov7660_set_vflip(&sd->gspca_dev,
+               sensor_settings[VFLIP_IDX]);
+
        return err;
 }
 
@@ -194,6 +350,210 @@
        return err;
 }
 
+#if 0
+static int ov7660_get_blue_gain(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[BLUE_BALANCE_IDX];
+       PDEBUG(D_V4L2, "Read blue balance %d", *val);
+       return 0;
+}
+
+static int ov7660_set_blue_gain(struct gspca_dev *gspca_dev, __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Setting blue balance to %d", val);
+
+       sensor_settings[BLUE_BALANCE_IDX] = val;
+
+       err = m5602_write_sensor(sd, OV7660_BLUE_GAIN, &i2c_data, 1);
+       return err;
+}
+
+static int ov7660_get_red_gain(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[RED_BALANCE_IDX];
+       PDEBUG(D_V4L2, "Read red balance %d", *val);
+       return 0;
+}
+
+static int ov7660_set_red_gain(struct gspca_dev *gspca_dev, __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Setting red balance to %d", val);
+
+       sensor_settings[RED_BALANCE_IDX] = val;
+
+       err = m5602_write_sensor(sd, OV7660_RED_GAIN, &i2c_data, 1);
+       return err;
+}
+#endif
+
+static int ov7660_get_auto_white_balance(struct gspca_dev *gspca_dev,
+                                        __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[AUTO_WHITE_BALANCE_IDX];
+       return 0;
+}
+
+static int ov7660_set_auto_white_balance(struct gspca_dev *gspca_dev,
+                                        __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Set auto white balance to %d", val);
+
+       sensor_settings[AUTO_WHITE_BALANCE_IDX] = val;
+       err = m5602_read_sensor(sd, OV7660_COM8, &i2c_data, 1);
+       if (err < 0)
+               return err;
+
+       i2c_data = ((i2c_data & 0xfd) | ((val & 0x01) << 1));
+       err = m5602_write_sensor(sd, OV7660_COM8, &i2c_data, 1);
+
+       return err;
+}
+
+static int ov7660_get_auto_gain(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[AUTO_GAIN_CTRL_IDX];
+       PDEBUG(D_V4L2, "Read auto gain control %d", *val);
+       return 0;
+}
+
+static int ov7660_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Set auto gain control to %d", val);
+
+       sensor_settings[AUTO_GAIN_CTRL_IDX] = val;
+       err = m5602_read_sensor(sd, OV7660_COM8, &i2c_data, 1);
+       if (err < 0)
+               return err;
+
+       i2c_data = ((i2c_data & 0xfb) | ((val & 0x01) << 2));
+
+       return m5602_write_sensor(sd, OV7660_COM8, &i2c_data, 1);
+}
+
+static int ov7660_get_auto_exposure(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[AUTO_EXPOSURE_IDX];
+       PDEBUG(D_V4L2, "Read auto exposure control %d", *val);
+       return 0;
+}
+
+static int ov7660_set_auto_exposure(struct gspca_dev *gspca_dev,
+                                   __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Set auto exposure control to %d", val);
+
+       sensor_settings[AUTO_EXPOSURE_IDX] = val;
+       err = m5602_read_sensor(sd, OV7660_COM8, &i2c_data, 1);
+       if (err < 0)
+               return err;
+
+       i2c_data = ((i2c_data & 0xfe) | ((val & 0x01) << 0));
+
+       return m5602_write_sensor(sd, OV7660_COM8, &i2c_data, 1);
+}
+
+static int ov7660_get_hflip(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[HFLIP_IDX];
+       PDEBUG(D_V4L2, "Read horizontal flip %d", *val);
+       return 0;
+}
+
+static int ov7660_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Set horizontal flip to %d", val);
+
+       sensor_settings[HFLIP_IDX] = val;
+
+       i2c_data = ((val & 0x01) << 5) |
+               (sensor_settings[VFLIP_IDX] << 4);
+
+       err = m5602_write_sensor(sd, OV7660_MVFP, &i2c_data, 1);
+
+       return err;
+}
+
+static int ov7660_get_vflip(struct gspca_dev *gspca_dev, __s32 *val)
+{
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       *val = sensor_settings[VFLIP_IDX];
+       PDEBUG(D_V4L2, "Read vertical flip %d", *val);
+
+       return 0;
+}
+
+static int ov7660_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
+{
+       int err;
+       u8 i2c_data;
+       struct sd *sd = (struct sd *) gspca_dev;
+       s32 *sensor_settings = sd->sensor_priv;
+
+       PDEBUG(D_V4L2, "Set vertical flip to %d", val);
+       sensor_settings[VFLIP_IDX] = val;
+
+       i2c_data = ((val & 0x01) << 4) | (sensor_settings[VFLIP_IDX] << 5);
+       err = m5602_write_sensor(sd, OV7660_MVFP, &i2c_data, 1);
+       if (err < 0)
+               return err;
+
+       /* When vflip is toggled we need to readjust the bridge hsync/vsync */
+       if (gspca_dev->streaming)
+               err = ov7660_start(sd);
+
+       return err;
+}
+
 static void ov7660_dump_registers(struct sd *sd)
 {
        int address;
diff -r fdc9c06cbbe9 -r d7345d5b2ec6 
linux/drivers/media/video/gspca/m5602/m5602_ov7660.h
--- a/linux/drivers/media/video/gspca/m5602/m5602_ov7660.h      Thu Sep 17 
20:00:40 2009 -0400
+++ b/linux/drivers/media/video/gspca/m5602/m5602_ov7660.h      Thu Sep 17 
23:18:57 2009 -0300
@@ -66,23 +66,23 @@
 #define OV7660_RBIAS           0x2c
 #define OV7660_HREF            0x32
 #define OV7660_ADC             0x37
-#define OV7660_OFON            0x39
-#define OV7660_TSLB            0x3a
-#define OV7660_COM12           0x3c
-#define OV7660_COM13           0x3d
+#define OV7660_OFON            0x39
+#define OV7660_TSLB            0x3a
+#define OV7660_COM12           0x3c
+#define OV7660_COM13           0x3d
 #define OV7660_LCC1            0x62
 #define OV7660_LCC2            0x63
 #define OV7660_LCC3            0x64
 #define OV7660_LCC4            0x65
 #define OV7660_LCC5            0x66
-#define OV7660_HV              0x69
-#define OV7660_RSVDA1          0xa1
+#define OV7660_HV              0x69
+#define OV7660_RSVDA1          0xa1
 
 #define OV7660_DEFAULT_GAIN            0x0e
-#define OV7660_DEFAULT_RED_GAIN        0x80
+#define OV7660_DEFAULT_RED_GAIN                0x80
 #define OV7660_DEFAULT_BLUE_GAIN       0x80
 #define OV7660_DEFAULT_SATURATION      0x00
-#define OV7660_DEFAULT_EXPOSURE        0x20
+#define OV7660_DEFAULT_EXPOSURE                0x20
 
 /* Kernel module parameters */
 extern int force_sensor;
@@ -149,15 +149,75 @@
        {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
        {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0d},
        {BRIDGE, M5602_XB_SENSOR_CTRL, 0x00},
-       {BRIDGE, M5602_XB_GPIO_DIR, 0x03},
-       {BRIDGE, M5602_XB_GPIO_DIR, 0x03},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x01},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x01},
+       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
+       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
        {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
        {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x05},
+       {BRIDGE, M5602_XB_GPIO_DAT, 0x00},
+       {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
+       {BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
+       {SENSOR, OV7660_COM7, 0x80},
+       {SENSOR, OV7660_CLKRC, 0x80},
+       {SENSOR, OV7660_COM9, 0x4c},
+       {SENSOR, OV7660_OFON, 0x43},
+       {SENSOR, OV7660_COM12, 0x28},
+       {SENSOR, OV7660_COM8, 0x00},
+       {SENSOR, OV7660_COM10, 0x40},
+       {SENSOR, OV7660_HSTART, 0x0c},
+       {SENSOR, OV7660_HSTOP, 0x61},
+       {SENSOR, OV7660_HREF, 0xa4},
+       {SENSOR, OV7660_PSHFT, 0x0b},
+       {SENSOR, OV7660_VSTART, 0x01},
+       {SENSOR, OV7660_VSTOP, 0x7a},
+       {SENSOR, OV7660_VSTOP, 0x00},
+       {SENSOR, OV7660_COM7, 0x05},
+       {SENSOR, OV7660_COM6, 0x42},
+       {SENSOR, OV7660_BBIAS, 0x94},
+       {SENSOR, OV7660_GbBIAS, 0x94},
+       {SENSOR, OV7660_RSVD29, 0x94},
+       {SENSOR, OV7660_RBIAS, 0x94},
+       {SENSOR, OV7660_COM1, 0x00},
+       {SENSOR, OV7660_AECH, 0x00},
+       {SENSOR, OV7660_AECHH, 0x00},
+       {SENSOR, OV7660_ADC, 0x05},
+       {SENSOR, OV7660_COM13, 0x00},
+       {SENSOR, OV7660_RSVDA1, 0x23},
+       {SENSOR, OV7660_TSLB, 0x0d},
+       {SENSOR, OV7660_HV, 0x80},
+       {SENSOR, OV7660_LCC1, 0x00},
+       {SENSOR, OV7660_LCC2, 0x00},
+       {SENSOR, OV7660_LCC3, 0x10},
+       {SENSOR, OV7660_LCC4, 0x40},
+       {SENSOR, OV7660_LCC5, 0x01},
 
+       {SENSOR, OV7660_AECH, 0x20},
+       {SENSOR, OV7660_COM1, 0x00},
        {SENSOR, OV7660_OFON, 0x0c},
        {SENSOR, OV7660_COM2, 0x11},
        {SENSOR, OV7660_COM7, 0x05},
-
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x01},
+       {BRIDGE, M5602_XB_GPIO_DAT, 0x04},
+       {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
+       {BRIDGE, M5602_XB_GPIO_DIR_H, 0x06},
+       {BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
+       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x08},
+       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
+       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
+       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
+       {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
+       {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x05},
+       {BRIDGE, M5602_XB_GPIO_DAT, 0x00},
+       {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
+       {BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
+       {SENSOR, OV7660_AECH, 0x5f},
+       {SENSOR, OV7660_COM1, 0x03},
+       {SENSOR, OV7660_OFON, 0x0c},
+       {SENSOR, OV7660_COM2, 0x11},
+       {SENSOR, OV7660_COM7, 0x05},
        {BRIDGE, M5602_XB_GPIO_DIR, 0x01},
        {BRIDGE, M5602_XB_GPIO_DAT, 0x04},
        {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
@@ -174,65 +234,6 @@
        {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
        {BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
 
-       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x02},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
-
-       {SENSOR, OV7660_AECH, OV7660_DEFAULT_EXPOSURE},
-       {SENSOR, OV7660_COM1, 0x00},
-
-       {BRIDGE, M5602_XB_GPIO_DIR, 0x01},
-       {BRIDGE, M5602_XB_GPIO_DAT, 0x04},
-       {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
-       {BRIDGE, M5602_XB_GPIO_DIR_H, 0x06},
-       {BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
-       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x08},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
-
-       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
-       {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
-       {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
-       {BRIDGE, M5602_XB_GPIO_DIR, 0x05},
-       {BRIDGE, M5602_XB_GPIO_DAT, 0x00},
-       {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
-       {BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
-
-       {SENSOR, OV7660_COM7, 0x80},
-       {SENSOR, OV7660_CLKRC, 0x80},
-       {SENSOR, OV7660_BLUE_GAIN, 0x80},
-       {SENSOR, OV7660_RED_GAIN, 0x80},
-       {SENSOR, OV7660_COM9, 0x4c},
-       {SENSOR, OV7660_OFON, 0x43},
-       {SENSOR, OV7660_COM12, 0x28},
-       {SENSOR, OV7660_COM8, 0x00},
-       {SENSOR, OV7660_COM10, 0x40},
-       {SENSOR, OV7660_HSTART, 0x0c},
-       {SENSOR, OV7660_HSTOP, 0x61},
-       {SENSOR, OV7660_HREF, 0xa4},
-       {SENSOR, OV7660_PSHFT, 0x0b},
-       {SENSOR, OV7660_VSTART, 0x01},
-       {SENSOR, OV7660_VSTOP, 0x7a},
-       {SENSOR, OV7660_VREF, 0x00},
-       {SENSOR, OV7660_COM7, 0x05},
-       {SENSOR, OV7660_COM6, 0x4b},
-       {SENSOR, OV7660_BBIAS, 0x98},
-       {SENSOR, OV7660_GbBIAS, 0x98},
-       {SENSOR, OV7660_RSVD29, 0x98},
-       {SENSOR, OV7660_RBIAS, 0x98},
-       {SENSOR, OV7660_COM1, 0x00},
-       {SENSOR, OV7660_AECH, 0x00},
-       {SENSOR, OV7660_AECHH, 0x00},
-       {SENSOR, OV7660_ADC, 0x04},
-       {SENSOR, OV7660_COM13, 0x00},
-       {SENSOR, OV7660_RSVDA1, 0x23},
-       {SENSOR, OV7660_TSLB, 0x0d},
-       {SENSOR, OV7660_HV, 0x80},
-       {SENSOR, OV7660_LCC1, 0x00},
-       {SENSOR, OV7660_LCC2, 0x00},
-       {SENSOR, OV7660_LCC3, 0x10},
-       {SENSOR, OV7660_LCC4, 0x40},
-       {SENSOR, OV7660_LCC5, 0x01},
-
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x06},
        {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
        {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
@@ -245,35 +246,18 @@
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0}, /* 480 */
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0xec},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
        {BRIDGE, M5602_XB_SIG_INI, 0x00},
        {BRIDGE, M5602_XB_SIG_INI, 0x02},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x27}, /* 39 */
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x02},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0xa7}, /* 679 */
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x27},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0xa7},
        {BRIDGE, M5602_XB_SIG_INI, 0x00},
-
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
-
-       {SENSOR, OV7660_AECH, 0x20},
-       {SENSOR, OV7660_COM1, 0x00},
-       {SENSOR, OV7660_OFON, 0x0c},
-       {SENSOR, OV7660_COM2, 0x11},
-       {SENSOR, OV7660_COM7, 0x05},
-       {SENSOR, OV7660_BLUE_GAIN, 0x80},
-       {SENSOR, OV7660_RED_GAIN, 0x80},
-
-       {BRIDGE, M5602_XB_GPIO_DIR, 0x01},
-       {BRIDGE, M5602_XB_GPIO_DAT, 0x04},
-       {BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
-       {BRIDGE, M5602_XB_GPIO_DIR_H, 0x06},
-       {BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
-       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x08},
-       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0}
 };
 
 #endif


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/d7345d5b2ec6be9d17e4b4ac52e5f27a45b87db1

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to