V4L/DVB (11635): gspca - m5602-ov7660: Initial checkin of sensor skeleton code
authorErik Andrén <erik.andren@gmail.com>
Wed, 21 Jan 2009 16:28:31 +0000 (13:28 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 21:20:46 +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/Makefile
drivers/media/video/gspca/m5602/m5602_ov7660.c [new file with mode: 0644]
drivers/media/video/gspca/m5602/m5602_ov7660.h [new file with mode: 0644]

index 9fa3644..c819d78 100644 (file)
@@ -2,6 +2,7 @@ obj-$(CONFIG_USB_M5602) += gspca_m5602.o
 
 gspca_m5602-objs := m5602_core.o \
                    m5602_ov9650.o \
+                   m5602_ov7660.o \
                    m5602_mt9m111.o \
                    m5602_po1030.o \
                    m5602_s5k83a.o \
diff --git a/drivers/media/video/gspca/m5602/m5602_ov7660.c b/drivers/media/video/gspca/m5602/m5602_ov7660.c
new file mode 100644 (file)
index 0000000..466de66
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Driver for the ov7660 sensor
+ *
+ * Copyright (C) 2009 Erik Andrén
+ * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.
+ * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br>
+ *
+ * Portions of code to USB interface and ALi driver software,
+ * Copyright (c) 2006 Willem Duinker
+ * v4l2 interface modeled after the V4L2 driver
+ * for SN9C10x PC Camera Controllers
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, version 2.
+ *
+ */
+
+#include "m5602_ov7660.h"
+
+const static struct ctrl ov7660_ctrls[] = {};
+
+static struct v4l2_pix_format ov7660_modes[] = {
+       {
+               640,
+               480,
+               V4L2_PIX_FMT_SBGGR8,
+               V4L2_FIELD_NONE,
+               .sizeimage =
+                       640 * 480,
+               .bytesperline = 640,
+               .colorspace = V4L2_COLORSPACE_SRGB,
+               .priv = 0
+       }
+};
+
+static void ov7660_dump_registers(struct sd *sd);
+
+int ov7660_probe(struct sd *sd)
+{
+       return -ENODEV;
+}
+
+int ov7660_init(struct sd *sd)
+{
+       return 0;
+}
+
+int ov7660_start(struct sd *sd)
+{
+       return 0;
+}
+
+int ov7660_stop(struct sd *sd)
+{
+       return 0;
+}
+
+void ov7660_disconnect(struct sd *sd) {}
+
+static void ov7660_dump_registers(struct sd *sd)
+{
+       int address;
+       info("Dumping the ov7660 register state");
+       for (address = 0; address < 0xa9; address++) {
+               u8 value;
+               m5602_read_sensor(sd, address, &value, 1);
+               info("register 0x%x contains 0x%x",
+                    address, value);
+       }
+
+       info("ov7660 register state dump complete");
+
+       info("Probing for which registers that are read/write");
+       for (address = 0; address < 0xff; address++) {
+               u8 old_value, ctrl_value;
+               u8 test_value[2] = {0xff, 0xff};
+
+               m5602_read_sensor(sd, address, &old_value, 1);
+               m5602_write_sensor(sd, address, test_value, 1);
+               m5602_read_sensor(sd, address, &ctrl_value, 1);
+
+               if (ctrl_value == test_value[0])
+                       info("register 0x%x is writeable", address);
+               else
+                       info("register 0x%x is read only", address);
+
+               /* Restore original value */
+               m5602_write_sensor(sd, address, &old_value, 1);
+       }
+}
+
diff --git a/drivers/media/video/gspca/m5602/m5602_ov7660.h b/drivers/media/video/gspca/m5602/m5602_ov7660.h
new file mode 100644 (file)
index 0000000..67bde9b
--- /dev/null
@@ -0,0 +1,367 @@
+/*
+ * Driver for the ov7660 sensor
+ *
+ * Copyright (C) 2009 Erik Andrén
+ * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.
+ * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br>
+ *
+ * Portions of code to USB interface and ALi driver software,
+ * Copyright (c) 2006 Willem Duinker
+ * v4l2 interface modeled after the V4L2 driver
+ * for SN9C10x PC Camera Controllers
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, version 2.
+ *
+ */
+
+#ifndef M5602_OV7660_H_
+#define M5602_OV7660_H_
+
+#include "m5602_sensor.h"
+
+#define OV7660_GAIN            0x00
+#define OV7660_BLUE_GAIN       0x01
+#define OV7660_RED_GAIN                0x02
+#define OV7660_VREF            0x03
+#define OV7660_COM1            0x04
+#define OV7660_BAVE            0x05
+#define OV7660_GEAVE           0x06
+#define OV7660_AECHH           0x07
+#define OV7660_RAVE            0x08
+#define OV7660_COM2            0x09
+#define OV7660_PID             0x0a
+#define OV7660_VER             0x0b
+#define OV7660_COM3            0x0c
+#define OV7660_COM4            0x0d
+#define OV7660_COM5            0x0e
+#define OV7660_COM6            0x0f
+#define OV7660_AECH            0x10
+#define OV7660_CLKRC           0x11
+#define OV7660_COM7            0x12
+#define OV7660_COM8            0x13
+#define OV7660_COM9            0x14
+#define OV7660_COM10           0x15
+#define OV7660_RSVD16          0x16
+#define OV7660_HSTART          0x17
+#define OV7660_HSTOP           0x18
+#define OV7660_VSTART          0x19
+#define OV7660_VSTOP           0x1a
+#define OV7660_PSHFT           0x1b
+#define OV7660_MIDH            0x1c
+#define OV7660_MIDL            0x1d
+#define OV7660_MVFP            0x1e
+#define OV7660_LAEC            0x1f
+#define OV7660_BOS             0x20
+#define OV7660_GBOS            0x21
+#define OV7660_GROS            0x22
+#define OV7660_ROS             0x23
+#define OV7660_AEW             0x24
+#define OV7660_AEB             0x25
+#define OV7660_VPT             0x26
+#define OV7660_BBIAS           0x27
+#define OV7660_GbBIAS          0x28
+#define OV7660_RSVD29          0x29
+#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_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 DEFAULT_GAIN           0x0e
+#define DEFAULT_RED_GAIN       0x80
+#define DEFAULT_BLUE_GAIN      0x80
+#define DEFAULT_SATURATION     0x00
+#define DEFAULT_EXPOSURE       0x20
+
+int ov7660_probe(struct sd *sd);
+int ov7660_init(struct sd *sd);
+int ov7660_start(struct sd *sd);
+int ov7660_stop(struct sd *sd);
+void ov7660_disconnect(struct sd *sd);
+
+const static struct m5602_sensor ov7660 = {
+       .name = "ov7660",
+       .i2c_slave_id = 0x42,
+       .i2c_regW = 1,
+       .probe = ov7660_probe,
+       .init = ov7660_init,
+       .start = ov7660_start,
+       .stop = ov7660_stop,
+       .disconnect = ov7660_disconnect,
+};
+
+static const unsigned char preinit_ov7660[][4] =
+{
+       {BRIDGE, M5602_XB_MCU_CLK_DIV, 0x02},
+       {BRIDGE, M5602_XB_MCU_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, 0x0d},
+       {BRIDGE, M5602_XB_SENSOR_CTRL, 0x00},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x03},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x03},
+       {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
+       {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
+
+       {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}
+};
+
+static const unsigned char init_ov7660[][4] =
+{
+       {BRIDGE, M5602_XB_MCU_CLK_DIV, 0x02},
+       {BRIDGE, M5602_XB_MCU_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, 0x0d},
+       {BRIDGE, M5602_XB_SENSOR_CTRL, 0x00},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x03},
+       {BRIDGE, M5602_XB_GPIO_DIR, 0x03},
+       {BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
+       {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
+
+       {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_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},
+       {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
+       {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x81},
+       {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},
+       {BRIDGE, M5602_XB_SIG_INI, 0x01},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x08},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
+       {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_HSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x27},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0xae},
+       {BRIDGE, M5602_XB_SIG_INI, 0x00},
+
+       {SENSOR, OV7660_BLUE_GAIN, 0x80},
+       {SENSOR, OV7660_RED_GAIN, 0x80},
+
+       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x02},
+       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
+
+       {SENSOR, OV7660_AECH, DEFAULT_EXPOSURE},
+       {SENSOR, OV7660_COM1, 0x00},
+       {SENSOR, OV7660_GAIN, DEFAULT_GAIN},
+
+       {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},
+       {BRIDGE, M5602_XB_SIG_INI, 0x01},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x08},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
+       {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_HSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x27},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0xae},
+       {BRIDGE, M5602_XB_SIG_INI, 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_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},
+       {BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
+       {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x81},
+       {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},
+       {BRIDGE, M5602_XB_SIG_INI, 0x01},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x08},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0xec}, /* 492 */
+       {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, 0xae}, /* 686 */
+       {BRIDGE, M5602_XB_SIG_INI, 0x00},
+
+       {SENSOR, OV7660_BLUE_GAIN, 0x80},
+       {SENSOR, OV7660_RED_GAIN, 0x80},
+
+       {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
+       {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
+
+       {SENSOR, OV7660_AECH, 0x20},
+       {SENSOR, OV7660_COM1, 0x00},
+       {SENSOR, OV7660_GAIN, DEFAULT_GAIN},
+       {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}
+};
+
+#endif