[Armadeus-commitlog] armadeus branch, master, updated. release-3.3-39-gaf0d71b
Brought to you by:
sszy
|
From: Julien B a. A. <ar...@us...> - 2010-09-30 20:05:58
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via af0d71b1094c063826a23044cae3cd5c5b6e3423 (commit)
via f5941bbf9b63225b0fb411472040b25ceba534f9 (commit)
via aa8155a96f14205409b02a6ecb5c02d2eaefbeeb (commit)
from 53ec075d32b7664998c4aeb64fa47b225689a8d9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit af0d71b1094c063826a23044cae3cd5c5b6e3423
Author: Julien Boibessot <jul...@ar...>
Date: Thu Sep 30 22:05:19 2010 +0200
[LINUX] apf9328: makes mach/gpio.h includable several times
commit f5941bbf9b63225b0fb411472040b25ceba534f9
Author: Julien Boibessot <jul...@ar...>
Date: Thu Sep 30 19:33:21 2010 +0200
Updates apf9328 Linux default config
commit aa8155a96f14205409b02a6ecb5c02d2eaefbeeb
Author: Julien Boibessot <jul...@ar...>
Date: Thu Sep 30 19:03:02 2010 +0200
[LINUX] ov3640: makes the sensor detected correctly and initialized in a default mode compatible with apf27
-----------------------------------------------------------------------
Summary of changes:
.../armadeus/apf9328/apf9328-linux-2.6.29.config | 4 +-
...mach-imx_gpio_h_includable_more_than_once.patch | 16 +
...adeus-soc_camera-add_ov3640_sensor_driver.patch | 1180 +++++++++++++++-----
3 files changed, 940 insertions(+), 260 deletions(-)
create mode 100644 buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/080-apf9328-armadeus-makes_mach-imx_gpio_h_includable_more_than_once.patch
diff --git a/buildroot/target/device/armadeus/apf9328/apf9328-linux-2.6.29.config b/buildroot/target/device/armadeus/apf9328/apf9328-linux-2.6.29.config
index 047fb13..cd842d9 100644
--- a/buildroot/target/device/armadeus/apf9328/apf9328-linux-2.6.29.config
+++ b/buildroot/target/device/armadeus/apf9328/apf9328-linux-2.6.29.config
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.29.6
-# Sun Dec 20 12:29:08 2009
+# Thu Sep 30 19:09:01 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -777,6 +777,7 @@ CONFIG_HWMON=m
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_AS1531 is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
@@ -1190,6 +1191,7 @@ CONFIG_ARMADEUS_DRIVERS=y
# Misc.
#
# CONFIG_ARMADEUS_GENERIC_DRIVER is not set
+# CONFIG_ARMADEUS_AS1531_PLAT is not set
CONFIG_ARMADEUS_GPIO_DRIVER=m
CONFIG_ARMADEUS_PPDEV_DRIVER=m
CONFIG_ARMADEUS_KEYPAD_DRIVER=m
diff --git a/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/080-apf9328-armadeus-makes_mach-imx_gpio_h_includable_more_than_once.patch b/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/080-apf9328-armadeus-makes_mach-imx_gpio_h_includable_more_than_once.patch
new file mode 100644
index 0000000..a0e6166
--- /dev/null
+++ b/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/080-apf9328-armadeus-makes_mach-imx_gpio_h_includable_more_than_once.patch
@@ -0,0 +1,16 @@
+
+Without this modification, it's not possible to "#include <mach/gpio.h>" in
+different places that can be called from the same source file.
+
+Signed-off-by: Gwenhael Goavec-Merou <gwe...@ar...>
+
+Index: linux-2.6.29.6/arch/arm/mach-imx/include/mach/gpio.h
+===================================================================
+--- linux-2.6.29.6.orig/arch/arm/mach-imx/include/mach/gpio.h 2010-09-30 19:55:32.000000000 +0200
++++ linux-2.6.29.6/arch/arm/mach-imx/include/mach/gpio.h 2010-09-30 19:55:51.000000000 +0200
+@@ -1,4 +1,5 @@
+ #ifndef _IMX_GPIO_H
++#define _IMX_GPIO_H
+
+ #include <linux/kernel.h>
+ #include <mach/imx-regs.h>
diff --git a/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/361-armadeus-soc_camera-add_ov3640_sensor_driver.patch b/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/361-armadeus-soc_camera-add_ov3640_sensor_driver.patch
index f777fd3..2f7aa7c 100644
--- a/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/361-armadeus-soc_camera-add_ov3640_sensor_driver.patch
+++ b/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/361-armadeus-soc_camera-add_ov3640_sensor_driver.patch
@@ -1,7 +1,7 @@
Index: linux-2.6.29.6/drivers/media/video/Kconfig
===================================================================
---- linux-2.6.29.6.orig/drivers/media/video/Kconfig 2010-07-23 11:41:31.000000000 +0200
-+++ linux-2.6.29.6/drivers/media/video/Kconfig 2010-07-23 11:41:31.000000000 +0200
+--- linux-2.6.29.6.orig/drivers/media/video/Kconfig 2010-09-27 15:45:46.000000000 +0200
++++ linux-2.6.29.6/drivers/media/video/Kconfig 2010-09-27 15:45:46.000000000 +0200
@@ -783,6 +783,12 @@
help
This is a generic SoC camera platform driver, useful for testing
@@ -17,8 +17,8 @@ Index: linux-2.6.29.6/drivers/media/video/Kconfig
depends on SOC_CAMERA && I2C
Index: linux-2.6.29.6/drivers/media/video/Makefile
===================================================================
---- linux-2.6.29.6.orig/drivers/media/video/Makefile 2010-07-23 11:41:31.000000000 +0200
-+++ linux-2.6.29.6/drivers/media/video/Makefile 2010-07-23 11:41:31.000000000 +0200
+--- linux-2.6.29.6.orig/drivers/media/video/Makefile 2010-09-27 15:45:46.000000000 +0200
++++ linux-2.6.29.6/drivers/media/video/Makefile 2010-09-27 15:45:46.000000000 +0200
@@ -144,6 +144,7 @@
obj-$(CONFIG_SOC_CAMERA_MT9M111) += mt9m111.o
obj-$(CONFIG_SOC_CAMERA_MT9T031) += mt9t031.o
@@ -30,20 +30,24 @@ Index: linux-2.6.29.6/drivers/media/video/Makefile
Index: linux-2.6.29.6/drivers/media/video/ov3640.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.29.6/drivers/media/video/ov3640.c 2010-07-27 12:28:15.000000000 +0200
-@@ -0,0 +1,1459 @@
++++ linux-2.6.29.6/drivers/media/video/ov3640.c 2010-09-30 18:46:25.000000000 +0200
+@@ -0,0 +1,2115 @@
+/*
++ * OV3640 driver (soc_camera)
+ *
+ * Copyright 2010 Armadeus Systems
+ *
-+ * Based on work (init sequences) which is:
++ * Based on drivers which are:
+ * Copyright 2005-2009 Freescale Semiconductor, Inc. All Rights Reserved.
++ * Copyright 2010 Texas Instruments.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
++#define DEBUG
++
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
@@ -61,14 +65,6 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+
+#define DRIVER_NAME "ov3640"
+
-+#define CAMERA_DBG
-+
-+#ifdef CAMERA_DBG
-+ #define CAMERA_TRACE(x) (printk)x
-+#else
-+ #define CAMERA_TRACE(x)
-+#endif
-+
+#define OV3640_VOLTAGE_ANALOG 2800000
+#define OV3640_VOLTAGE_DIGITAL_CORE 1500000
+#define OV3640_VOLTAGE_DIGITAL_IO 1800000
@@ -233,248 +229,908 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+#define NUM_CAPTURE_FORMATS (sizeof(ov3640_formats) / sizeof(ov3640_formats[0]))
+
+static struct reg_value ov3640_setting_15fps_QXGA_2048_1536[] = {
-+ {0x3012, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
-+ {0x3087, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, {0x30a2, 0xe4, 0, 0},
-+ {0x30aa, 0x42, 0, 0}, {0x30b0, 0xff, 0, 0}, {0x30b1, 0xff, 0, 0},
-+ {0x30b2, 0x10, 0, 0}, {0x300e, 0x32, 0, 0}, {0x300f, 0x21, 0, 0},
-+ {0x3010, 0x20, 0, 0}, {0x3011, 0x00, 0, 0}, {0x304c, 0x81, 0, 0},
-+ {0x30d7, 0x10, 0, 0}, {0x30d9, 0x0d, 0, 0}, {0x30db, 0x08, 0, 0},
-+ {0x3016, 0x82, 0, 0}, {0x3018, 0x38, 0, 0}, {0x3019, 0x30, 0, 0},
-+ {0x301a, 0x61, 0, 0}, {0x307d, 0x00, 0, 0}, {0x3087, 0x02, 0, 0},
-+ {0x3082, 0x20, 0, 0}, {0x3015, 0x12, 0, 0}, {0x3014, 0x04, 0, 0},
-+ {0x3013, 0xf7, 0, 0}, {0x303c, 0x08, 0, 0}, {0x303d, 0x18, 0, 0},
-+ {0x303e, 0x06, 0, 0}, {0x303f, 0x0c, 0, 0}, {0x3030, 0x62, 0, 0},
-+ {0x3031, 0x26, 0, 0}, {0x3032, 0xe6, 0, 0}, {0x3033, 0x6e, 0, 0},
-+ {0x3034, 0xea, 0, 0}, {0x3035, 0xae, 0, 0}, {0x3036, 0xa6, 0, 0},
-+ {0x3037, 0x6a, 0, 0}, {0x3104, 0x02, 0, 0}, {0x3105, 0xfd, 0, 0},
-+ {0x3106, 0x00, 0, 0}, {0x3107, 0xff, 0, 0}, {0x3300, 0x12, 0, 0},
-+ {0x3301, 0xde, 0, 0}, {0x3302, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
-+ {0x3314, 0x42, 0, 0}, {0x3313, 0x2b, 0, 0}, {0x3315, 0x42, 0, 0},
-+ {0x3310, 0xd0, 0, 0}, {0x3311, 0xbd, 0, 0}, {0x330c, 0x18, 0, 0},
-+ {0x330d, 0x18, 0, 0}, {0x330e, 0x56, 0, 0}, {0x330f, 0x5c, 0, 0},
-+ {0x330b, 0x1c, 0, 0}, {0x3306, 0x5c, 0, 0}, {0x3307, 0x11, 0, 0},
-+ {0x336a, 0x52, 0, 0}, {0x3370, 0x46, 0, 0}, {0x3376, 0x38, 0, 0},
-+ {0x30b8, 0x20, 0, 0}, {0x30b9, 0x17, 0, 0}, {0x30ba, 0x04, 0, 0},
-+ {0x30bb, 0x08, 0, 0}, {0x3507, 0x06, 0, 0}, {0x350a, 0x4f, 0, 0},
-+ {0x3100, 0x02, 0, 0}, {0x3301, 0xde, 0, 0}, {0x3304, 0x00, 0, 0},
-+ {0x3400, 0x00, 0, 0}, {0x3404, 0x02, 0, 0}, {0x3600, 0xc4, 0, 0},
-+ {0x3302, 0xef, 0, 0}, {0x3020, 0x01, 0, 0}, {0x3021, 0x1d, 0, 0},
-+ {0x3022, 0x00, 0, 0}, {0x3023, 0x0a, 0, 0}, {0x3024, 0x08, 0, 0},
-+ {0x3025, 0x00, 0, 0}, {0x3026, 0x06, 0, 0}, {0x3027, 0x00, 0, 0},
-+ {0x335f, 0x68, 0, 0}, {0x3360, 0x00, 0, 0}, {0x3361, 0x00, 0, 0},
-+ {0x3362, 0x68, 0, 0}, {0x3363, 0x00, 0, 0}, {0x3364, 0x00, 0, 0},
-+ {0x3403, 0x00, 0, 0}, {0x3088, 0x08, 0, 0}, {0x3089, 0x00, 0, 0},
-+ {0x308a, 0x06, 0, 0}, {0x308b, 0x00, 0, 0}, {0x307c, 0x10, 0, 0},
-+ {0x3090, 0xc0, 0, 0}, {0x304c, 0x84, 0, 0}, {0x308d, 0x04, 0, 0},
-+ {0x3086, 0x03, 0, 0}, {0x3086, 0x00, 0, 0}, {0x3012, 0x00, 0, 0},
-+ {0x3020, 0x01, 0, 0}, {0x3021, 0x1d, 0, 0}, {0x3022, 0x00, 0, 0},
-+ {0x3023, 0x0a, 0, 0}, {0x3024, 0x08, 0, 0}, {0x3025, 0x18, 0, 0},
-+ {0x3026, 0x06, 0, 0}, {0x3027, 0x0c, 0, 0}, {0x302a, 0x06, 0, 0},
-+ {0x302b, 0x20, 0, 0}, {0x3075, 0x44, 0, 0}, {0x300d, 0x00, 0, 0},
-+ {0x30d7, 0x00, 0, 0}, {0x3069, 0x40, 0, 0}, {0x303e, 0x01, 0, 0},
-+ {0x303f, 0x80, 0, 0}, {0x3302, 0x20, 0, 0}, {0x335f, 0x68, 0, 0},
-+ {0x3360, 0x18, 0, 0}, {0x3361, 0x0c, 0, 0}, {0x3362, 0x68, 0, 0},
-+ {0x3363, 0x08, 0, 0}, {0x3364, 0x04, 0, 0}, {0x3403, 0x42, 0, 0},
-+ {0x3088, 0x08, 0, 0}, {0x3089, 0x00, 0, 0}, {0x308a, 0x06, 0, 0},
-+ {0x308b, 0x00, 0, 0},
++ {OV3640_SYS, 0x80, 0, 0},
++ {0x304d, 0x45, 0, 0},
++ {0x30a7, 0x5e, 0, 0},
++ {OV3640_TMC11, 0x16, 0, 0},
++ {0x309c, 0x1a, 0, 0}, /* reserved */
++ {0x30a2, 0xe4, 0, 0}, /* reserved */
++ {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0},
++ {OV3640_IO_CTRL1, 0xff, 0, 0},
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x00, 0, 0},
++ {0x304c, 0x81, 0, 0}, /* reserved */
++ {0x30d7, 0x10, 0, 0}, /* reserved */
++ {0x30d9, 0x0d, 0, 0}, /* reserved */
++ {0x30db, 0x08, 0, 0}, /* reserved */
++ {0x3016, 0x82, 0, 0}, /* reserved */
++ {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0},
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++ {0x3082, 0x20, 0, 0}, /* reserved */
++ {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0},
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++ {0x3312, 0x26, 0, 0},
++ {0x3314, 0x42, 0, 0},
++ {0x3313, 0x2b, 0, 0},
++ {0x3315, 0x42, 0, 0},
++ {0x3310, 0xd0, 0, 0},
++ {0x3311, 0xbd, 0, 0},
++ {0x330c, 0x18, 0, 0},
++ {0x330d, 0x18, 0, 0},
++ {0x330e, 0x56, 0, 0},
++ {0x330f, 0x5c, 0, 0},
++ {0x330b, 0x1c, 0, 0},
++ {0x3306, 0x5c, 0, 0},
++ {0x3307, 0x11, 0, 0},
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++ {0x3507, 0x06, 0, 0},
++ {0x350a, 0x4f, 0, 0},
++ {OV3640_SC_CTRL0, 0x02, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x00, 0, 0},
++ {OV3640_FMT_CTRL00, 0x02, 0, 0},
++ {OV3640_OUT_CTRL00, 0xc4, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xef, 0, 0},
++ {OV3640_HS_H, 0x01, 0, 0},
++ {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0},
++ {OV3640_VS_L, 0x0a, 0, 0},
++ {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x00, 0, 0},
++ {OV3640_VH_H, 0x06, 0, 0},
++ {OV3640_VH_L, 0x00, 0, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x00, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0x00, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x00, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x08, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x00, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x06, 0, 0},
++ {OV3640_ISP_YOUT_L, 0x00, 0, 0},
++ {OV3640_TMC6, 0x10, 0, 0},
++ {0x3090, 0xc0, 0, 0},
++ {0x304c, 0x84, 0, 0}, /* reserved */
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_SYS, 0x00, 0, 0},
++ {OV3640_HS_H, 0x01, 0, 0},
++ {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0},
++ {OV3640_VS_L, 0x0a, 0, 0},
++ {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x18, 0, 0},
++ {OV3640_VH_H, 0x06, 0, 0},
++ {OV3640_VH_L, 0x0c, 0, 0},
++ {OV3640_VTS_H, 0x06, 0, 0},
++ {OV3640_VTS_L, 0x20, 0, 0},
++ {OV3640_VSYNCOPT, 0x44, 0, 0},
++ {OV3640_PCLK, 0x00, 0, 0},
++ {0x30d7, 0x00, 0, 0}, /* reserved */
++ {OV3640_BLC9, 0x40, 0, 0},
++ {OV3640_AVH_H, 0x01, 0, 0},
++ {OV3640_AVH_L, 0x80, 0, 0},
++ {OV3640_DSP_CTRL_2, 0x20, 0, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x18, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x0c, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x08, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0x04, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x08, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x00, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x06, 0, 0},
++ {OV3640_ISP_YOUT_L, 0x00, 0, 0},
+};
+
+static struct reg_value ov3640_setting_15fps_XGA_1024_768[] = {
-+ {0x3012, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
-+ {0x3087, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, {0x30a2, 0xe4, 0, 0},
-+ {0x30aa, 0x42, 0, 0}, {0x30b0, 0xff, 0, 0}, {0x30b1, 0xff, 0, 0},
-+ {0x30b2, 0x10, 0, 0}, {0x300e, 0x32, 0, 0}, {0x300f, 0x21, 0, 0},
-+ {0x3010, 0x20, 0, 0}, {0x3011, 0x00, 0, 0}, {0x304c, 0x81, 0, 0},
-+ {0x3016, 0x82, 0, 0}, {0x3018, 0x38, 0, 0}, {0x3019, 0x30, 0, 0},
-+ {0x301a, 0x61, 0, 0}, {0x307d, 0x00, 0, 0}, {0x3087, 0x02, 0, 0},
-+ {0x3082, 0x20, 0, 0}, {0x3015, 0x12, 0, 0}, {0x3014, 0x04, 0, 0},
-+ {0x3013, 0xf7, 0, 0}, {0x303c, 0x08, 0, 0}, {0x303d, 0x18, 0, 0},
-+ {0x303e, 0x06, 0, 0}, {0x303f, 0x0c, 0, 0}, {0x3030, 0x62, 0, 0},
-+ {0x3031, 0x26, 0, 0}, {0x3032, 0xe6, 0, 0}, {0x3033, 0x6e, 0, 0},
-+ {0x3034, 0xea, 0, 0}, {0x3035, 0xae, 0, 0}, {0x3036, 0xa6, 0, 0},
-+ {0x3037, 0x6a, 0, 0}, {0x3104, 0x02, 0, 0}, {0x3105, 0xfd, 0, 0},
-+ {0x3106, 0x00, 0, 0}, {0x3107, 0xff, 0, 0}, {0x3300, 0x12, 0, 0},
-+ {0x3301, 0xde, 0, 0}, {0x3302, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
++ {OV3640_SYS, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
++ {OV3640_TMC11, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, /* reserved */ {0x30a2, 0xe4, 0, 0}, /* reserved */
++ {0x30aa, 0x42, 0, 0}, /* reserved */ {OV3640_IO_CTRL0, 0xff, 0, 0}, {OV3640_IO_CTRL1, 0xff, 0, 0},
++ {OV3640_IO_CTRL2, 0x10, 0, 0}, {OV3640_PLL_1, 0x32, 0, 0}, {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0}, {OV3640_CLK, 0x00, 0, 0}, {0x304c, 0x81, 0, 0}, /* reserved */
++ {0x3016, 0x82, 0, 0}, /* reserved */ {OV3640_WPT_HISH, 0x38, 0, 0}, {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0}, {OV3640_TMC7, 0x00, 0, 0}, {OV3640_TMC11, 0x02, 0, 0},
++ {0x3082, 0x20, 0, 0}, /* reserved */ {OV3640_AUTO_3, 0x12, 0, 0}, {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0}, {OV3640_AHW_H, 0x08, 0, 0}, {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0}, {OV3640_AVH_L, 0x0c, 0, 0}, {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0}, {OV3640_WEIGHT2, 0xe6, 0, 0}, {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0}, {OV3640_WEIGHT5, 0xae, 0, 0}, {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0}, {OV3640_SC_SYN_CTRL0, 0x02, 0, 0}, {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0}, {OV3640_SC_SYN_CTRL3, 0xff, 0, 0}, {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0}, {OV3640_DSP_CTRL_2, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
+ {0x3314, 0x42, 0, 0}, {0x3313, 0x2b, 0, 0}, {0x3315, 0x42, 0, 0},
+ {0x3310, 0xd0, 0, 0}, {0x3311, 0xbd, 0, 0}, {0x330c, 0x18, 0, 0},
+ {0x330d, 0x18, 0, 0}, {0x330e, 0x56, 0, 0}, {0x330f, 0x5c, 0, 0},
+ {0x330b, 0x1c, 0, 0}, {0x3306, 0x5c, 0, 0}, {0x3307, 0x11, 0, 0},
-+ {0x336a, 0x52, 0, 0}, {0x3370, 0x46, 0, 0}, {0x3376, 0x38, 0, 0},
-+ {0x30b8, 0x20, 0, 0}, {0x30b9, 0x17, 0, 0}, {0x30ba, 0x04, 0, 0},
-+ {0x30bb, 0x08, 0, 0}, {0x3507, 0x06, 0, 0}, {0x350a, 0x4f, 0, 0},
-+ {0x3100, 0x02, 0, 0}, {0x3301, 0xde, 0, 0}, {0x3304, 0x00, 0, 0},
-+ {0x3400, 0x01, 0, 0}, {0x3404, 0x1d, 0, 0}, {0x3600, 0xc4, 0, 0},
-+ {0x3302, 0xef, 0, 0}, {0x3020, 0x01, 0, 0}, {0x3021, 0x1d, 0, 0},
-+ {0x3022, 0x00, 0, 0}, {0x3023, 0x0a, 0, 0}, {0x3024, 0x08, 0, 0},
-+ {0x3025, 0x00, 0, 0}, {0x3026, 0x06, 0, 0}, {0x3027, 0x00, 0, 0},
-+ {0x335f, 0x68, 0, 0}, {0x3360, 0x00, 0, 0}, {0x3361, 0x00, 0, 0},
-+ {0x3362, 0x34, 0, 0}, {0x3363, 0x00, 0, 0}, {0x3364, 0x00, 0, 0},
-+ {0x3403, 0x00, 0, 0}, {0x3088, 0x04, 0, 0}, {0x3089, 0x00, 0, 0},
-+ {0x308a, 0x03, 0, 0}, {0x308b, 0x00, 0, 0}, {0x307c, 0x10, 0, 0},
-+ {0x3090, 0xc0, 0, 0}, {0x304c, 0x84, 0, 0}, {0x308d, 0x04, 0, 0},
-+ {0x3086, 0x03, 0, 0}, {0x3086, 0x00, 0, 0}, {0x3011, 0x01, 0, 0},
++ {OV3640_R_A1, 0x52, 0, 0}, {OV3640_G_A1, 0x46, 0, 0}, {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0}, {OV3640_DSPC1, 0x17, 0, 0}, {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0}, {0x3507, 0x06, 0, 0}, {0x350a, 0x4f, 0, 0},
++ {OV3640_SC_CTRL0, 0x02, 0, 0}, {OV3640_DSP_CTRL_1, 0xde, 0, 0}, {OV3640_DSP_CTRL_4, 0x00, 0, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x01, 0, 0}, {OV3640_FMT_CTRL00, 0x1d, 0, 0}, {OV3640_OUT_CTRL00, 0xc4, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xef, 0, 0}, {OV3640_HS_H, 0x01, 0, 0}, {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0}, {OV3640_VS_L, 0x0a, 0, 0}, {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x00, 0, 0}, {OV3640_VH_H, 0x06, 0, 0}, {OV3640_VH_L, 0x00, 0, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0}, {OV3640_HSIZE_IN_L, 0x00, 0, 0}, {OV3640_VSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x34, 0, 0}, {OV3640_HSIZE_OUT_L, 0x00, 0, 0}, {OV3640_VSIZE_OUT_L, 0x00, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x00, 0, 0}, {OV3640_ISP_XOUT_H, 0x04, 0, 0}, {OV3640_ISP_XOUT_L, 0x00, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x03, 0, 0}, {OV3640_ISP_YOUT_L, 0x00, 0, 0}, {OV3640_TMC6, 0x10, 0, 0},
++ {0x3090, 0xc0, 0, 0}, {0x304c, 0x84, 0, 0}, /* reserved */ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0}, {OV3640_TMC10, 0x00, 0, 0}, {OV3640_CLK, 0x01, 0, 0},
+};
+
+static struct reg_value ov3640_setting_30fps_XGA_1024_768[] = {
+ {0x0, 0x0, 0}
+};
+
++static struct reg_value ov3640_setting_15fps_VGA_640_480_org[] = {
++ {OV3640_SYS, OV3640_SYS_SRST, 0, 0},
++ {0x304d, 0x45, 0, 0}, /* reserved */
++ {0x30a7, 0x5e, 0, 0}, /* reserved */
++ {OV3640_TMC11, 0x16, 0, 0},
++ {0x309c, 0x1a, 0, 0}, /* reserved */
++ {0x30a2, 0xe4, 0, 0}, /* reserved */
++ {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0},
++ {OV3640_IO_CTRL1, 0xff, 0, 0},
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x00, 0, 0},
++ {0x304c, 0x81, 0, 0}, /* reserved */
++ {0x30d7, 0x10, 0, 0}, /* reserved */
++ {0x30d9, 0x0d, 0, 0}, /* reserved */
++ {0x30db, 0x08, 0, 0}, /* reserved */
++ {0x3016, 0x82, 0, 0}, /* reserved */
++ {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0},
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++ {0x3082, 0x20, 0, 0}, /* reserved */
++ {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0},
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++ {0x3312, 0x26, 0, 0}, /* reserved */
++ {0x3314, 0x42, 0, 0}, /* reserved */
++ {0x3313, 0x2b, 0, 0}, /* reserved */
++ {0x3315, 0x42, 0, 0}, /* reserved */
++ {0x3310, 0xd0, 0, 0}, /* reserved */
++ {0x3311, 0xbd, 0, 0}, /* reserved */
++ {0x330c, 0x18, 0, 0}, /* reserved */
++ {0x330d, 0x18, 0, 0}, /* reserved */
++ {0x330e, 0x56, 0, 0}, /* reserved */
++ {0x330f, 0x5c, 0, 0}, /* reserved */
++ {0x330b, 0x1c, 0, 0}, /* reserved */
++ {0x3306, 0x5c, 0, 0}, /* reserved */
++ {0x3307, 0x11, 0, 0}, /* reserved */
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++ {0x3507, 0x06, 0, 0}, /* reserved */
++ {0x350a, 0x4f, 0, 0}, /* reserved */
++ {OV3640_SC_CTRL0, 0x02, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x00, 0, 0},
++ {OV3640_FMT_CTRL00, 0x42, 0, 0},
++ {OV3640_OUT_CTRL00, 0xc4, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xef, 0, 0},
++ {OV3640_HS_H, 0x01, 0, 0},
++ {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0},
++ {OV3640_VS_L, 0x0a, 0, 0},
++ {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x00, 0, 0},
++ {OV3640_VH_H, 0x06, 0, 0},
++ {OV3640_VH_L, 0x00, 0, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x80, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe0, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x00, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++ {OV3640_TMC6, 0x10, 0, 0},
++ {0x3090, 0xc0, 0, 0}, /* reserved */
++ {0x304c, 0x84, 0, 0}, /* reserved */
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_CLK, 0x00, 0, 0},
++};
++
++static struct reg_value ov3640_setting_15fps_VGA_640_480mine[] = {
++ {OV3640_SYS, OV3640_SYS_SRST, 0, 0}, /* reset */
++// {0x304d, 0x45, 0, 0}, /* reserved */
++// {0x30a7, 0x5e, 0, 0}, /* reserved */
++ {OV3640_TMC11, 0x16, 0, 0},
++// {0x309c, 0x1a, 0, 0}, /* reserved */
++// {0x30a2, 0xe4, 0, 0}, /* reserved */
++// {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0}, /* DATA = OUT */
++ {OV3640_IO_CTRL1, 0xff, 0, 0}, /* CTRL = OUT */
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x00, 0, 0},
++// {0x304c, 0x81, 0, 0}, /* reserved */
++// {0x30d7, 0x10, 0, 0}, /* reserved */
++// {0x30d9, 0x0d, 0, 0}, /* reserved */
++// {0x30db, 0x08, 0, 0}, /* reserved */
++// {0x3016, 0x82, 0, 0}, /* reserved */
++ {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0},
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++// {0x3082, 0x20, 0, 0}, /* reserved */
++ {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0},
++ /* Bring used modules out of reset */
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++// {0x3312, 0x26, 0, 0}, /* reserved */
++// {0x3314, 0x42, 0, 0}, /* reserved */
++// {0x3313, 0x2b, 0, 0}, /* reserved */
++// {0x3315, 0x42, 0, 0}, /* reserved */
++// {0x3310, 0xd0, 0, 0}, /* reserved */
++// {0x3311, 0xbd, 0, 0}, /* reserved */
++// {0x330c, 0x18, 0, 0}, /* reserved */
++// {0x330d, 0x18, 0, 0}, /* reserved */
++// {0x330e, 0x56, 0, 0}, /* reserved */
++// {0x330f, 0x5c, 0, 0}, /* reserved */
++// {0x330b, 0x1c, 0, 0}, /* reserved */
++// {0x3306, 0x5c, 0, 0}, /* reserved */
++// {0x3307, 0x11, 0, 0}, /* reserved */
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++// {0x3507, 0x06, 0, 0}, /* reserved */
++// {0x350a, 0x4f, 0, 0}, /* reserved */
++ {OV3640_SC_CTRL0, 0x02, 0, 0}, /* disable compression */
++// {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0, 0},
++
++ {OV3640_FMT_MUX_CTRL0, 0x01, 0, 0}, /* ISP RGB */
++ {OV3640_FMT_CTRL00, 0x11, 0, 0}, /* RGB565 */
++ {OV3640_OUT_CTRL00, 0xc0, 0, 0},
++ {OV3640_OUT_CTRL01, 0x81, 0, 0}, /* PCLK gated */
++ {OV3640_DSP_CTRL_2, 0xef, 0, 0},
++ {OV3640_OUT_CTRL46, 0x4d, 0, 0}, /* HSYNC_EN + HSYNC_DVP_EN */
++
++ {OV3640_HS_H, 0x01, 0, 0},
++ {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0},
++ {OV3640_VS_L, 0x0a, 0, 0},
++ {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x00, 0, 0},
++ {OV3640_VH_H, 0x06, 0, 0},
++ {OV3640_VH_L, 0x00, 0, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x80, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe0, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x00, 0, 0},
++ /* 0x280 x 0x1e0 -> 640 x 480 */
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++// {OV3640_TMC6, 0x10, 0, 0},
++// {0x3090, 0xc0, 0, 0}, /* reserved */
++// {0x304c, 0x84, 0, 0}, /* reserved */
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_CLK, 0x00, 0, 0},
++};
++
++/* Generated by Omnivision tool : */
+static struct reg_value ov3640_setting_15fps_VGA_640_480[] = {
-+ {0x3012, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
-+ {0x3087, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, {0x30a2, 0xe4, 0, 0},
-+ {0x30aa, 0x42, 0, 0}, {0x30b0, 0xff, 0, 0}, {0x30b1, 0xff, 0, 0},
-+ {0x30b2, 0x10, 0, 0}, {0x300e, 0x32, 0, 0}, {0x300f, 0x21, 0, 0},
-+ {0x3010, 0x20, 0, 0}, {0x3011, 0x00, 0, 0}, {0x304c, 0x81, 0, 0},
-+ {0x30d7, 0x10, 0, 0}, {0x30d9, 0x0d, 0, 0}, {0x30db, 0x08, 0, 0},
-+ {0x3016, 0x82, 0, 0}, {0x3018, 0x38, 0, 0}, {0x3019, 0x30, 0, 0},
-+ {0x301a, 0x61, 0, 0}, {0x307d, 0x00, 0, 0}, {0x3087, 0x02, 0, 0},
-+ {0x3082, 0x20, 0, 0}, {0x3015, 0x12, 0, 0}, {0x3014, 0x04, 0, 0},
-+ {0x3013, 0xf7, 0, 0}, {0x303c, 0x08, 0, 0}, {0x303d, 0x18, 0, 0},
-+ {0x303e, 0x06, 0, 0}, {0x303f, 0x0c, 0, 0}, {0x3030, 0x62, 0, 0},
-+ {0x3031, 0x26, 0, 0}, {0x3032, 0xe6, 0, 0}, {0x3033, 0x6e, 0, 0},
-+ {0x3034, 0xea, 0, 0}, {0x3035, 0xae, 0, 0}, {0x3036, 0xa6, 0, 0},
-+ {0x3037, 0x6a, 0, 0}, {0x3104, 0x02, 0, 0}, {0x3105, 0xfd, 0, 0},
-+ {0x3106, 0x00, 0, 0}, {0x3107, 0xff, 0, 0}, {0x3300, 0x12, 0, 0},
-+ {0x3301, 0xde, 0, 0}, {0x3302, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
-+ {0x3314, 0x42, 0, 0}, {0x3313, 0x2b, 0, 0}, {0x3315, 0x42, 0, 0},
-+ {0x3310, 0xd0, 0, 0}, {0x3311, 0xbd, 0, 0}, {0x330c, 0x18, 0, 0},
-+ {0x330d, 0x18, 0, 0}, {0x330e, 0x56, 0, 0}, {0x330f, 0x5c, 0, 0},
-+ {0x330b, 0x1c, 0, 0}, {0x3306, 0x5c, 0, 0}, {0x3307, 0x11, 0, 0},
-+ {0x336a, 0x52, 0, 0}, {0x3370, 0x46, 0, 0}, {0x3376, 0x38, 0, 0},
-+ {0x30b8, 0x20, 0, 0}, {0x30b9, 0x17, 0, 0}, {0x30ba, 0x04, 0, 0},
-+ {0x30bb, 0x08, 0, 0}, {0x3507, 0x06, 0, 0}, {0x350a, 0x4f, 0, 0},
-+ {0x3100, 0x02, 0, 0}, {0x3301, 0xde, 0, 0}, {0x3304, 0x00, 0, 0},
-+ {0x3400, 0x00, 0, 0}, {0x3404, 0x42, 0, 0}, {0x3600, 0xc4, 0, 0},
-+ {0x3302, 0xef, 0, 0}, {0x3020, 0x01, 0, 0}, {0x3021, 0x1d, 0, 0},
-+ {0x3022, 0x00, 0, 0}, {0x3023, 0x0a, 0, 0}, {0x3024, 0x08, 0, 0},
-+ {0x3025, 0x00, 0, 0}, {0x3026, 0x06, 0, 0}, {0x3027, 0x00, 0, 0},
-+ {0x335f, 0x68, 0, 0}, {0x3360, 0x00, 0, 0}, {0x3361, 0x00, 0, 0},
-+ {0x3362, 0x12, 0, 0}, {0x3363, 0x80, 0, 0}, {0x3364, 0xe0, 0, 0},
-+ {0x3403, 0x00, 0, 0}, {0x3088, 0x02, 0, 0}, {0x3089, 0x80, 0, 0},
-+ {0x308a, 0x01, 0, 0}, {0x308b, 0xe0, 0, 0}, {0x307c, 0x10, 0, 0},
-+ {0x3090, 0xc0, 0, 0}, {0x304c, 0x84, 0, 0}, {0x308d, 0x04, 0, 0},
-+ {0x3086, 0x03, 0, 0}, {0x3086, 0x00, 0, 0}, {0x3011, 0x00, 0, 0},
++ {OV3640_SYS, 0x00, 0, 0},
++
++ /* added by me */
++ {OV3640_IO_CTRL0, 0xff, 0, 0}, /* DATA = OUT */
++ {OV3640_IO_CTRL1, 0xff, 0, 0}, /* CTRL = OUT */
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_OUT_CTRL01, 0x81, 0, 0}, /* PCLK gated */
++// {OV3640_OUT_CTRL46, 0x4d, 0, 0}, /* HSYNC_EN + HSYNC_DVP_EN */
++
++ {OV3640_HS_H, 0x01, 0, 0},
++ {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0},
++ {OV3640_VS_L, 0x0a, 0, 0},
++ {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x18, 0, 0},
++ {OV3640_VH_H, 0x06, 0, 0},
++ {OV3640_VH_L, 0x0c, 0, 0},
++
++ {OV3640_VTS_H, 0x06, 0, 0},
++ {OV3640_VTS_L, 0x20, 0, 0},
++ {OV3640_VSYNCOPT, 0x44, 0, 0},
++ {OV3640_PCLK, 0x00, 0, 0},
++ {0x30d7, 0x00, 0x80, 0},
++ {OV3640_BLC9, 0x40, 0x40, 0},
++ {OV3640_AVH_H, 0x01, 0, 0},
++ {OV3640_AVH_L, 0x80, 0, 0},
++
++ {OV3640_DSP_CTRL_2, 0x20, 0x20, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x18, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x0c, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},// ;Zoom_out output size
++ {OV3640_HSIZE_OUT_L, 0x88, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe4, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ /* 0x280 x 0x1e0 -> 640 x 480 */
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},// ;x_output_size
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},// ;y_output_size
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++
++ {OV3640_SC_CTRL0, 0x02, 0, 0},
++ {OV3640_DSP_CTRL_1, 0x10, 0x30, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0x03, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x01, 0, 0}, /* ISP RGB */
++ {OV3640_FMT_CTRL00, 0x11, 0, 0}, /* RGB565 */
++
++ {0x304c, 0x84, 0, 0},
++ {OV3640_CLK, 00, 0, 0},// ;15fps
++};
++
++static struct reg_value ov3640_setting_30fps_VGA_640_480_org[] = {
++ {OV3640_SYS, 0x80, 0, 0},
++ {0x304d, 0x45, 0, 0}, /* reserved */
++ {0x30a7, 0x5e, 0, 0}, /* reserved */
++ {OV3640_TMC11, 0x16, 0, 0},
++ {0x309c, 0x1a, 0, 0}, /* reserved */
++ {0x30a2, 0xe4, 0, 0}, /* reserved */
++ {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0},
++ {OV3640_IO_CTRL1, 0xff, 0, 0},
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0},
++ {0x304c, 0x82, 0, 0}, /* reserved */
++ {0x30d7, 0x10, 0, 0}, /* reserved */
++ {0x30d9, 0x0d, 0, 0}, /* reserved */
++ {0x30db, 0x08, 0, 0}, /* reserved */
++ {0x3016, 0x82, 0, 0}, /* reserved */
++ {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0},
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++ {0x3082, 0x20, 0, 0}, /* reserved */
++ {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x0c, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0},
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++ {0x3312, 0x26, 0, 0}, /* reserved */
++ {0x3314, 0x42, 0, 0}, /* reserved */
++ {0x3313, 0x2b, 0, 0}, /* reserved */
++ {0x3315, 0x42, 0, 0}, /* reserved */
++ {0x3310, 0xd0, 0, 0}, /* reserved */
++ {0x3311, 0xbd, 0, 0}, /* reserved */
++ {0x330c, 0x18, 0, 0}, /* reserved */
++ {0x330d, 0x18, 0, 0}, /* reserved */
++ {0x330e, 0x56, 0, 0}, /* reserved */
++ {0x330f, 0x5c, 0, 0}, /* reserved */
++ {0x330b, 0x1c, 0, 0}, /* reserved */
++ {0x3306, 0x5c, 0, 0}, /* reserved */
++ {0x3307, 0x11, 0, 0}, /* reserved */
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x13, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++ {OV3640_SC_CTRL0, 0x02, 0, 0},
++ {OV3640_DSP_CTRL_1, 0x10, 0x30, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0x03, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x00, 0, 0},
++ {OV3640_FMT_CTRL00, 0x02, 0, 0},
++ {OV3640_OUT_CTRL00, 0xc0, 0, 0},
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_SYS, 0x10, 0, 0},
++ {OV3640_VS_L, 0x06, 0, 0},
++ {OV3640_VH_H, 0x03, 0, 0},
++ {OV3640_VH_L, 0x04, 0, 0},
++ {OV3640_VTS_H, 0x03, 0, 0},
++ {OV3640_VTS_L, 0x10, 0, 0},
++ {OV3640_VSYNCOPT, 0x24, 0, 0},
++ {OV3640_PCLK, 0x01, 0, 0},
++ {0x30d7, 0x80, 0x80, 0}, /* reserved */
++ {OV3640_BLC9, 0x00, 0x40, 0},
++ {OV3640_AVH_H, 0x00, 0, 0},
++ {OV3640_AVH_L, 0xc0, 0, 0},
++ {OV3640_DSP_CTRL_2, 0x20, 0x20, 0},
++ {OV3640_SIZE_IN_MISC, 0x34, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x0c, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x04, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x88, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe4, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x88, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe4, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++ {OV3640_PLL_1, 0x37, 0, 0},
++ {OV3640_PLL_2, 0xe1, 0, 0},
++ {OV3640_PLL_3, 0x22, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0},
++ {0x304c, 0x84, 0, 0}, /* reserved */
++ {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_3, 0x02, 0, 0},
++ {OV3640_EXVTS_L, 0x00, 0, 0},
++ {OV3640_EXVTS_H, 0x00, 0, 0},
+};
+
+static struct reg_value ov3640_setting_30fps_VGA_640_480[] = {
-+ {0x3012, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
-+ {0x3087, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, {0x30a2, 0xe4, 0, 0},
-+ {0x30aa, 0x42, 0, 0}, {0x30b0, 0xff, 0, 0}, {0x30b1, 0xff, 0, 0},
-+ {0x30b2, 0x10, 0, 0}, {0x300e, 0x32, 0, 0}, {0x300f, 0x21, 0, 0},
-+ {0x3010, 0x20, 0, 0}, {0x3011, 0x01, 0, 0}, {0x304c, 0x82, 0, 0},
-+ {0x30d7, 0x10, 0, 0}, {0x30d9, 0x0d, 0, 0}, {0x30db, 0x08, 0, 0},
-+ {0x3016, 0x82, 0, 0}, {0x3018, 0x38, 0, 0}, {0x3019, 0x30, 0, 0},
-+ {0x301a, 0x61, 0, 0}, {0x307d, 0x00, 0, 0}, {0x3087, 0x02, 0, 0},
-+ {0x3082, 0x20, 0, 0}, {0x3015, 0x12, 0, 0}, {0x3014, 0x0c, 0, 0},
-+ {0x3013, 0xf7, 0, 0}, {0x303c, 0x08, 0, 0}, {0x303d, 0x18, 0, 0},
-+ {0x303e, 0x06, 0, 0}, {0x303f, 0x0c, 0, 0}, {0x3030, 0x62, 0, 0},
-+ {0x3031, 0x26, 0, 0}, {0x3032, 0xe6, 0, 0}, {0x3033, 0x6e, 0, 0},
-+ {0x3034, 0xea, 0, 0}, {0x3035, 0xae, 0, 0}, {0x3036, 0xa6, 0, 0},
-+ {0x3037, 0x6a, 0, 0}, {0x3104, 0x02, 0, 0}, {0x3105, 0xfd, 0, 0},
-+ {0x3106, 0x00, 0, 0}, {0x3107, 0xff, 0, 0}, {0x3300, 0x12, 0, 0},
-+ {0x3301, 0xde, 0, 0}, {0x3302, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
-+ {0x3314, 0x42, 0, 0}, {0x3313, 0x2b, 0, 0}, {0x3315, 0x42, 0, 0},
-+ {0x3310, 0xd0, 0, 0}, {0x3311, 0xbd, 0, 0}, {0x330c, 0x18, 0, 0},
-+ {0x330d, 0x18, 0, 0}, {0x330e, 0x56, 0, 0}, {0x330f, 0x5c, 0, 0},
-+ {0x330b, 0x1c, 0, 0}, {0x3306, 0x5c, 0, 0}, {0x3307, 0x11, 0, 0},
-+ {0x336a, 0x52, 0, 0}, {0x3370, 0x46, 0, 0}, {0x3376, 0x38, 0, 0},
-+ {0x3300, 0x13, 0, 0}, {0x30b8, 0x20, 0, 0}, {0x30b9, 0x17, 0, 0},
-+ {0x30ba, 0x04, 0, 0}, {0x30bb, 0x08, 0, 0}, {0x3100, 0x02, 0, 0},
-+ {0x3301, 0x10, 0x30, 0}, {0x3304, 0x00, 0x03, 0}, {0x3400, 0x00, 0, 0},
-+ {0x3404, 0x02, 0, 0}, {0x3600, 0xc0, 0, 0}, {0x308d, 0x04, 0, 0},
-+ {0x3086, 0x03, 0, 0}, {0x3086, 0x00, 0, 0}, {0x3012, 0x10, 0, 0},
-+ {0x3023, 0x06, 0, 0}, {0x3026, 0x03, 0, 0}, {0x3027, 0x04, 0, 0},
-+ {0x302a, 0x03, 0, 0}, {0x302b, 0x10, 0, 0}, {0x3075, 0x24, 0, 0},
-+ {0x300d, 0x01, 0, 0}, {0x30d7, 0x80, 0x80, 0}, {0x3069, 0x00, 0x40, 0},
-+ {0x303e, 0x00, 0, 0}, {0x303f, 0xc0, 0, 0}, {0x3302, 0x20, 0x20, 0},
-+ {0x335f, 0x34, 0, 0}, {0x3360, 0x0c, 0, 0}, {0x3361, 0x04, 0, 0},
-+ {0x3362, 0x12, 0, 0}, {0x3363, 0x88, 0, 0}, {0x3364, 0xe4, 0, 0},
-+ {0x3403, 0x42, 0, 0}, {0x3088, 0x02, 0, 0}, {0x3089, 0x80, 0, 0},
-+ {0x308a, 0x01, 0, 0}, {0x308b, 0xe0, 0, 0}, {0x3362, 0x12, 0, 0},
-+ {0x3363, 0x88, 0, 0}, {0x3364, 0xe4, 0, 0}, {0x3403, 0x42, 0, 0},
-+ {0x3088, 0x02, 0, 0}, {0x3089, 0x80, 0, 0}, {0x308a, 0x01, 0, 0},
-+ {0x308b, 0xe0, 0, 0}, {0x300e, 0x37, 0, 0}, {0x300f, 0xe1, 0, 0},
-+ {0x3010, 0x22, 0, 0}, {0x3011, 0x01, 0, 0}, {0x304c, 0x84, 0, 0},
-+ {0x3014, 0x04, 0, 0}, {0x3015, 0x02, 0, 0}, {0x302e, 0x00, 0, 0},
-+ {0x302d, 0x00, 0, 0},
++ {OV3640_SYS, OV3640_SYS_SRST, 0, 0}, /* reset */
++// {0x304d, 0x45, 0, 0}, /* reserved */
++// {0x30a7, 0x5e, 0, 0}, /* reserved */
++ {OV3640_TMC11, 0x16, 0, 0},
++// {0x309c, 0x1a, 0, 0}, /* reserved */
++// {0x30a2, 0xe4, 0, 0}, /* reserved */
++// {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0}, /* DATA = OUT */
++ {OV3640_IO_CTRL1, 0xff, 0, 0}, /* CTRL = OUT */
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++/* {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0}, */
++// {0x304c, 0x82, 0, 0}, /* reserved */
++// {0x30d7, 0x10, 0, 0}, /* reserved */
++// {0x30d9, 0x0d, 0, 0}, /* reserved */
++// {0x30db, 0x08, 0, 0}, /* reserved */
++// {0x3016, 0x82, 0, 0}, /* reserved */
++/* {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0}, */
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++// {0x3082, 0x20, 0, 0}, /* reserved */
++/* {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x0c, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0}, */
++ /* Bring used modules out of reset */
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++// {0x3312, 0x26, 0, 0}, /* reserved */
++// {0x3314, 0x42, 0, 0}, /* reserved */
++// {0x3313, 0x2b, 0, 0}, /* reserved */
++// {0x3315, 0x42, 0, 0}, /* reserved */
++// {0x3310, 0xd0, 0, 0}, /* reserved */
++// {0x3311, 0xbd, 0, 0}, /* reserved */
++// {0x330c, 0x18, 0, 0}, /* reserved */
++// {0x330d, 0x18, 0, 0}, /* reserved */
++// {0x330e, 0x56, 0, 0}, /* reserved */
++// {0x330f, 0x5c, 0, 0}, /* reserved */
++// {0x330b, 0x1c, 0, 0}, /* reserved */
++// {0x3306, 0x5c, 0, 0}, /* reserved */
++// {0x3307, 0x11, 0, 0}, /* reserved */
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++ {OV3640_SC_CTRL0, 0x02, 0, 0}, /* disable compression */
++ {OV3640_DSP_CTRL_0, 0x13, 0, 0},
++ {OV3640_DSP_CTRL_1, 0x10, 0x30, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0x03, 0},
++
++ {OV3640_FMT_MUX_CTRL0, 0x01, 0, 0}, /* ISP RGB */
++ {OV3640_FMT_CTRL00, 0x11, 0, 0}, /* RGB565 */
++ {OV3640_OUT_CTRL00, 0xc0, 0, 0},
++ {OV3640_OUT_CTRL01, 0x81, 0, 0}, /* PCLK gated */
++ {OV3640_DSP_CTRL_2, 0xef, 0, 0},
++ {OV3640_OUT_CTRL46, 0x4d, 0, 0}, /* HSYNC_EN + HSYNC_DVP_EN */
++
++ {OV3640_SYS, 0x10, 0, 0}, /* XGA @ 30 fps */
++ {OV3640_VS_L, 0x06, 0, 0},
++ {OV3640_VH_H, 0x03, 0, 0},
++ {OV3640_VH_L, 0x04, 0, 0},
++ {OV3640_VTS_H, 0x03, 0, 0},
++ {OV3640_VTS_L, 0x10, 0, 0},
++ {OV3640_VSYNCOPT, 0x24, 0, 0},
++ {OV3640_PCLK, 0x01, 0, 0},
++// {0x30d7, 0x80, 0x80, 0}, /* reserved */
++ {OV3640_BLC9, 0x00, 0x40, 0},
++ {OV3640_AVH_H, 0x00, 0, 0},
++ {OV3640_AVH_L, 0xc0, 0, 0},
++ {OV3640_DSP_CTRL_2, 0x20, 0x20, 0},
++ {OV3640_SIZE_IN_MISC, 0x34, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x0c, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x04, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x88, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe4, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ /* 0x280 x 0x1e0 -> 640 x 480 */
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++ {OV3640_PLL_1, 0x37, 0, 0},
++ {OV3640_PLL_2, 0xe1, 0, 0},
++ {OV3640_PLL_3, 0x22, 0, 0},
++// {0x304c, 0x84, 0, 0}, /* reserved */
++ {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_3, 0x02, 0, 0},
++/* {OV3640_EXVTS_L, 0x00, 0, 0},
++ {OV3640_EXVTS_H, 0x00, 0, 0}, */
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0},
+};
+
+static struct reg_value ov3640_setting_15fps_QVGA_320_240[] = {
-+ {0x3012, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
-+ {0x3087, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, {0x30a2, 0xe4, 0, 0},
-+ {0x30aa, 0x42, 0, 0}, {0x30b0, 0xff, 0, 0}, {0x30b1, 0xff, 0, 0},
-+ {0x30b2, 0x10, 0, 0}, {0x300e, 0x32, 0, 0}, {0x300f, 0x21, 0, 0},
-+ {0x3010, 0x20, 0, 0}, {0x3011, 0x00, 0, 0}, {0x304c, 0x81, 0, 0},
-+ {0x30d7, 0x10, 0, 0}, {0x30d9, 0x0d, 0, 0}, {0x30db, 0x08, 0, 0},
-+ {0x3016, 0x82, 0, 0}, {0x3018, 0x38, 0, 0}, {0x3019, 0x30, 0, 0},
-+ {0x301a, 0x61, 0, 0}, {0x307d, 0x00, 0, 0}, {0x3087, 0x02, 0, 0},
-+ {0x3082, 0x20, 0, 0}, {0x3015, 0x12, 0, 0}, {0x3014, 0x04, 0, 0},
-+ {0x3013, 0xf7, 0, 0}, {0x303c, 0x08, 0, 0}, {0x303d, 0x18, 0, 0},
-+ {0x303e, 0x06, 0, 0}, {0x303f, 0x0c, 0, 0}, {0x3030, 0x62, 0, 0},
-+ {0x3031, 0x26, 0, 0}, {0x3032, 0xe6, 0, 0}, {0x3033, 0x6e, 0, 0},
-+ {0x3034, 0xea, 0, 0}, {0x3035, 0xae, 0, 0}, {0x3036, 0xa6, 0, 0},
-+ {0x3037, 0x6a, 0, 0}, {0x3104, 0x02, 0, 0}, {0x3105, 0xfd, 0, 0},
-+ {0x3106, 0x00, 0, 0}, {0x3107, 0xff, 0, 0}, {0x3300, 0x12, 0, 0},
-+ {0x3301, 0xde, 0, 0}, {0x3302, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
-+ {0x3314, 0x42, 0, 0}, {0x3313, 0x2b, 0, 0}, {0x3315, 0x42, 0, 0},
-+ {0x3310, 0xd0, 0, 0}, {0x3311, 0xbd, 0, 0}, {0x330c, 0x18, 0, 0},
-+ {0x330d, 0x18, 0, 0}, {0x330e, 0x56, 0, 0}, {0x330f, 0x5c, 0, 0},
-+ {0x330b, 0x1c, 0, 0}, {0x3306, 0x5c, 0, 0}, {0x3307, 0x11, 0, 0},
-+ {0x336a, 0x52, 0, 0}, {0x3370, 0x46, 0, 0}, {0x3376, 0x38, 0, 0},
-+ {0x30b8, 0x20, 0, 0}, {0x30b9, 0x17, 0, 0}, {0x30ba, 0x04, 0, 0},
-+ {0x30bb, 0x08, 0, 0}, {0x3507, 0x06, 0, 0}, {0x350a, 0x4f, 0, 0},
-+ {0x3100, 0x02, 0, 0}, {0x3301, 0xde, 0, 0}, {0x3304, 0x00, 0, 0},
-+ {0x3400, 0x00, 0, 0}, {0x3404, 0x42, 0, 0}, {0x3600, 0xc4, 0, 0},
-+ {0x3302, 0xef, 0, 0}, {0x3020, 0x01, 0, 0}, {0x3021, 0x1d, 0, 0},
-+ {0x3022, 0x00, 0, 0}, {0x3023, 0x0a, 0, 0}, {0x3024, 0x08, 0, 0},
-+ {0x3025, 0x00, 0, 0}, {0x3026, 0x06, 0, 0}, {0x3027, 0x00, 0, 0},
-+ {0x335f, 0x68, 0, 0}, {0x3360, 0x00, 0, 0}, {0x3361, 0x00, 0, 0},
-+ {0x3362, 0x01, 0, 0}, {0x3363, 0x40, 0, 0}, {0x3364, 0xf0, 0, 0},
-+ {0x3403, 0x00, 0, 0}, {0x3088, 0x01, 0, 0}, {0x3089, 0x40, 0, 0},
-+ {0x308a, 0x00, 0, 0}, {0x308b, 0xf0, 0, 0}, {0x307c, 0x10, 0, 0},
-+ {0x3090, 0xc0, 0, 0}, {0x304c, 0x84, 0, 0}, {0x308d, 0x04, 0, 0},
-+ {0x3086, 0x03, 0, 0}, {0x3086, 0x00, 0, 0}, {0x3011, 0x01, 0, 0},
++ {OV3640_SYS, 0x80, 0, 0},
++ {0x304d, 0x45, 0, 0},
++ {0x30a7, 0x5e, 0, 0},
++ {OV3640_TMC11, 0x16, 0, 0},
++ {0x309c, 0x1a, 0, 0}, /* reserved */
++ {0x30a2, 0xe4, 0, 0}, /* reserved */
++ {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0},
++ {OV3640_IO_CTRL1, 0xff, 0, 0},
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x00, 0, 0},
++ {0x304c, 0x81, 0, 0}, /* reserved */
++ {0x30d7, 0x10, 0, 0}, /* reserved */
++ {0x30d9, 0x0d, 0, 0}, /* reserved */
++ {0x30db, 0x08, 0, 0}, /* reserved */
++ {0x3016, 0x82, 0, 0}, /* reserved */
++ {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0},
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++ {0x3082, 0x20, 0, 0}, /* reserved */
++ {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x04, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0},
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++ {0x3312, 0x26, 0, 0},
++ {0x3314, 0x42, 0, 0},
++ {0x3313, 0x2b, 0, 0},
++ {0x3315, 0x42, 0, 0},
++ {0x3310, 0xd0, 0, 0},
++ {0x3311, 0xbd, 0, 0},
++ {0x330c, 0x18, 0, 0},
++ {0x330d, 0x18, 0, 0},
++ {0x330e, 0x56, 0, 0},
++ {0x330f, 0x5c, 0, 0},
++ {0x330b, 0x1c, 0, 0},
++ {0x3306, 0x5c, 0, 0},
++ {0x3307, 0x11, 0, 0},
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++ {0x3507, 0x06, 0, 0},
++ {0x350a, 0x4f, 0, 0},
++ {OV3640_SC_CTRL0, 0x02, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x00, 0, 0},
++ {OV3640_FMT_CTRL00, 0x42, 0, 0},
++ {OV3640_OUT_CTRL00, 0xc4, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xef, 0, 0},
++ {OV3640_HS_H, 0x01, 0, 0},
++ {OV3640_HS_L, 0x1d, 0, 0},
++ {OV3640_VS_H, 0x00, 0, 0},
++ {OV3640_VS_L, 0x0a, 0, 0},
++ {OV3640_HW_H, 0x08, 0, 0},
++ {OV3640_HW_L, 0x00, 0, 0},
++ {OV3640_VH_H, 0x06, 0, 0},
++ {OV3640_VH_L, 0x00, 0, 0},
++ {OV3640_SIZE_IN_MISC, 0x68, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x00, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x01, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x40, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xf0, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x00, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x40, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x00, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xf0, 0, 0},
++ {OV3640_TMC6, 0x10, 0, 0},
++ {0x3090, 0xc0, 0, 0},
++ {0x304c, 0x84, 0, 0}, /* reserved */
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0},
+};
+
+static struct reg_value ov3640_setting_30fps_QVGA_320_240[] = {
-+ {0x3012, 0x80, 0, 0}, {0x304d, 0x45, 0, 0}, {0x30a7, 0x5e, 0, 0},
-+ {0x3087, 0x16, 0, 0}, {0x309c, 0x1a, 0, 0}, {0x30a2, 0xe4, 0, 0},
-+ {0x30aa, 0x42, 0, 0}, {0x30b0, 0xff, 0, 0}, {0x30b1, 0xff, 0, 0},
-+ {0x30b2, 0x10, 0, 0}, {0x300e, 0x32, 0, 0}, {0x300f, 0x21, 0, 0},
-+ {0x3010, 0x20, 0, 0}, {0x3011, 0x01, 0, 0}, {0x304c, 0x82, 0, 0},
-+ {0x30d7, 0x10, 0, 0}, {0x30d9, 0x0d, 0, 0}, {0x30db, 0x08, 0, 0},
-+ {0x3016, 0x82, 0, 0}, {0x3018, 0x38, 0, 0}, {0x3019, 0x30, 0, 0},
-+ {0x301a, 0x61, 0, 0}, {0x307d, 0x00, 0, 0}, {0x3087, 0x02, 0, 0},
-+ {0x3082, 0x20, 0, 0}, {0x3015, 0x12, 0, 0}, {0x3014, 0x0c, 0, 0},
-+ {0x3013, 0xf7, 0, 0}, {0x303c, 0x08, 0, 0}, {0x303d, 0x18, 0, 0},
-+ {0x303e, 0x06, 0, 0}, {0x303f, 0x0c, 0, 0}, {0x3030, 0x62, 0, 0},
-+ {0x3031, 0x26, 0, 0}, {0x3032, 0xe6, 0, 0}, {0x3033, 0x6e, 0, 0},
-+ {0x3034, 0xea, 0, 0}, {0x3035, 0xae, 0, 0}, {0x3036, 0xa6, 0, 0},
-+ {0x3037, 0x6a, 0, 0}, {0x3104, 0x02, 0, 0}, {0x3105, 0xfd, 0, 0},
-+ {0x3106, 0x00, 0, 0}, {0x3107, 0xff, 0, 0}, {0x3300, 0x12, 0, 0},
-+ {0x3301, 0xde, 0, 0}, {0x3302, 0xcf, 0, 0}, {0x3312, 0x26, 0, 0},
-+ {0x3314, 0x42, 0, 0}, {0x3313, 0x2b, 0, 0}, {0x3315, 0x42, 0, 0},
-+ {0x3310, 0xd0, 0, 0}, {0x3311, 0xbd, 0, 0}, {0x330c, 0x18, 0, 0},
-+ {0x330d, 0x18, 0, 0}, {0x330e, 0x56, 0, 0}, {0x330f, 0x5c, 0, 0},
-+ {0x330b, 0x1c, 0, 0}, {0x3306, 0x5c, 0, 0}, {0x3307, 0x11, 0, 0},
-+ {0x336a, 0x52, 0, 0}, {0x3370, 0x46, 0, 0}, {0x3376, 0x38, 0, 0},
-+ {0x3300, 0x13, 0, 0}, {0x30b8, 0x20, 0, 0}, {0x30b9, 0x17, 0, 0},
-+ {0x30ba, 0x04, 0, 0}, {0x30bb, 0x08, 0, 0}, {0x3100, 0x02, 0, 0},
-+ {0x3301, 0x10, 0x30, 0}, {0x3304, 0x00, 0x03, 0}, {0x3400, 0x00, 0, 0},
-+ {0x3404, 0x02, 0, 0}, {0x3600, 0xc0, 0, 0}, {0x308d, 0x04, 0, 0},
-+ {0x3086, 0x03, 0, 0}, {0x3086, 0x00, 0, 0}, {0x3012, 0x10, 0, 0},
-+ {0x3023, 0x06, 0, 0}, {0x3026, 0x03, 0, 0}, {0x3027, 0x04, 0, 0},
-+ {0x302a, 0x03, 0, 0}, {0x302b, 0x10, 0, 0}, {0x3075, 0x24, 0, 0},
-+ {0x300d, 0x01, 0, 0}, {0x30d7, 0x80, 0x80, 0}, {0x3069, 0x00, 0x40, 0},
-+ {0x303e, 0x00, 0, 0}, {0x303f, 0xc0, 0, 0}, {0x3302, 0x20, 0x20, 0},
-+ {0x335f, 0x34, 0, 0}, {0x3360, 0x0c, 0, 0}, {0x3361, 0x04, 0, 0},
-+ {0x3362, 0x34, 0, 0}, {0x3363, 0x08, 0, 0}, {0x3364, 0x04, 0, 0},
-+ {0x3403, 0x42, 0, 0}, {0x3088, 0x04, 0, 0}, {0x3089, 0x00, 0, 0},
-+ {0x308a, 0x03, 0, 0}, {0x308b, 0x00, 0, 0}, {0x3362, 0x12, 0, 0},
-+ {0x3363, 0x88, 0, 0}, {0x3364, 0xe4, 0, 0}, {0x3403, 0x42, 0, 0},
-+ {0x3088, 0x02, 0, 0}, {0x3089, 0x80, 0, 0}, {0x308a, 0x01, 0, 0},
-+ {0x308b, 0xe0, 0, 0}, {0x300e, 0x37, 0, 0}, {0x300f, 0xe1, 0, 0},
-+ {0x3010, 0x22, 0, 0}, {0x3011, 0x01, 0, 0}, {0x304c, 0x84, 0, 0},
++ {OV3640_SYS, 0x80, 0, 0},
++ {0x304d, 0x45, 0, 0},
++ {0x30a7, 0x5e, 0, 0},
++ {OV3640_TMC11, 0x16, 0, 0},
++ {0x309c, 0x1a, 0, 0}, /* reserved */
++ {0x30a2, 0xe4, 0, 0}, /* reserved */
++ {0x30aa, 0x42, 0, 0}, /* reserved */
++ {OV3640_IO_CTRL0, 0xff, 0, 0},
++ {OV3640_IO_CTRL1, 0xff, 0, 0},
++ {OV3640_IO_CTRL2, 0x10, 0, 0},
++ {OV3640_PLL_1, 0x32, 0, 0},
++ {OV3640_PLL_2, 0x21, 0, 0},
++ {OV3640_PLL_3, 0x20, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0},
++ {0x304c, 0x82, 0, 0}, /* reserved */
++ {0x30d7, 0x10, 0, 0}, /* reserved */
++ {0x30d9, 0x0d, 0, 0}, /* reserved */
++ {0x30db, 0x08, 0, 0}, /* reserved */
++ {0x3016, 0x82, 0, 0}, /* reserved */
++ {OV3640_WPT_HISH, 0x38, 0, 0},
++ {OV3640_BPT_HISL, 0x30, 0, 0},
++ {OV3640_VPT, 0x61, 0, 0},
++ {OV3640_TMC7, 0x00, 0, 0},
++ {OV3640_TMC11, 0x02, 0, 0},
++ {0x3082, 0x20, 0, 0}, /* reserved */
++ {OV3640_AUTO_3, 0x12, 0, 0},
++ {OV3640_AUTO_2, 0x0c, 0, 0},
++ {OV3640_AUTO_1, 0xf7, 0, 0},
++ {OV3640_AHW_H, 0x08, 0, 0},
++ {OV3640_AHW_L, 0x18, 0, 0},
++ {OV3640_AVH_H, 0x06, 0, 0},
++ {OV3640_AVH_L, 0x0c, 0, 0},
++ {OV3640_WEIGHT0, 0x62, 0, 0},
++ {OV3640_WEIGHT1, 0x26, 0, 0},
++ {OV3640_WEIGHT2, 0xe6, 0, 0},
++ {OV3640_WEIGHT3, 0x6e, 0, 0},
++ {OV3640_WEIGHT4, 0xea, 0, 0},
++ {OV3640_WEIGHT5, 0xae, 0, 0},
++ {OV3640_WEIGHT6, 0xa6, 0, 0},
++ {OV3640_WEIGHT7, 0x6a, 0, 0},
++ {OV3640_SC_SYN_CTRL0, 0x02, 0, 0},
++ {OV3640_SC_SYN_CTRL1, 0xfd, 0, 0},
++ {OV3640_SC_SYN_CTRL2, 0x00, 0, 0},
++ {OV3640_SC_SYN_CTRL3, 0xff, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x12, 0, 0},
++ {OV3640_DSP_CTRL_1, 0xde, 0, 0},
++ {OV3640_DSP_CTRL_2, 0xcf, 0, 0},
++ {0x3312, 0x26, 0, 0},
++ {0x3314, 0x42, 0, 0},
++ {0x3313, 0x2b, 0, 0},
++ {0x3315, 0x42, 0, 0},
++ {0x3310, 0xd0, 0, 0},
++ {0x3311, 0xbd, 0, 0},
++ {0x330c, 0x18, 0, 0},
++ {0x330d, 0x18, 0, 0},
++ {0x330e, 0x56, 0, 0},
++ {0x330f, 0x5c, 0, 0},
++ {0x330b, 0x1c, 0, 0},
++ {0x3306, 0x5c, 0, 0},
++ {0x3307, 0x11, 0, 0},
++ {OV3640_R_A1, 0x52, 0, 0},
++ {OV3640_G_A1, 0x46, 0, 0},
++ {OV3640_B_A1, 0x38, 0, 0},
++ {OV3640_DSP_CTRL_0, 0x13, 0, 0},
++ {OV3640_DSPC0, 0x20, 0, 0},
++ {OV3640_DSPC1, 0x17, 0, 0},
++ {OV3640_DSPC2, 0x04, 0, 0},
++ {OV3640_DSPC3, 0x08, 0, 0},
++ {OV3640_SC_CTRL0, 0x02, 0, 0},
++ {OV3640_DSP_CTRL_1, 0x10, 0x30, 0},
++ {OV3640_DSP_CTRL_4, 0x00, 0x03, 0},
++ {OV3640_FMT_MUX_CTRL0, 0x00, 0, 0},
++ {OV3640_FMT_CTRL00, 0x02, 0, 0},
++ {OV3640_OUT_CTRL00, 0xc0, 0, 0},
++ {OV3640_TMC13, 0x04, 0, 0},
++ {OV3640_TMC10, 0x03, 0, 0},
++ {OV3640_TMC10, 0x00, 0, 0},
++ {OV3640_SYS, 0x10, 0, 0},
++ {OV3640_VS_L, 0x06, 0, 0},
++ {OV3640_VH_H, 0x03, 0, 0},
++ {OV3640_VH_L, 0x04, 0, 0},
++ {OV3640_VTS_H, 0x03, 0, 0},
++ {OV3640_VTS_L, 0x10, 0, 0},
++ {OV3640_VSYNCOPT, 0x24, 0, 0},
++ {OV3640_PCLK, 0x01, 0, 0},
++ {0x30d7, 0x80, 0x80, 0}, /* reserved */
++ {OV3640_BLC9, 0x00, 0x40, 0},
++ {OV3640_AVH_H, 0x00, 0, 0},
++ {OV3640_AVH_L, 0xc0, 0, 0},
++ {OV3640_DSP_CTRL_2, 0x20, 0x20, 0},
++ {OV3640_SIZE_IN_MISC, 0x34, 0, 0},
++ {OV3640_HSIZE_IN_L, 0x0c, 0, 0},
++ {OV3640_VSIZE_IN_L, 0x04, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x34, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x08, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0x04, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x04, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x00, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x03, 0, 0},
++ {OV3640_ISP_YOUT_L, 0x00, 0, 0},
++ {OV3640_SIZE_OUT_MISC, 0x12, 0, 0},
++ {OV3640_HSIZE_OUT_L, 0x88, 0, 0},
++ {OV3640_VSIZE_OUT_L, 0xe4, 0, 0},
++ {OV3640_ISP_PAD_CTR2, 0x42, 0, 0},
++ {OV3640_ISP_XOUT_H, 0x02, 0, 0},
++ {OV3640_ISP_XOUT_L, 0x80, 0, 0},
++ {OV3640_ISP_YOUT_H, 0x01, 0, 0},
++ {OV3640_ISP_YOUT_L, 0xe0, 0, 0},
++ {OV3640_PLL_1, 0x37, 0, 0},
++ {OV3640_PLL_2, 0xe1, 0, 0},
++ {OV3640_PLL_3, 0x22, 0, 0},
++ {OV3640_CLK, 0x01, 0, 0},
++ {0x304c, 0x84, 0, 0}, /* reserved */
+};
+
+static struct ov3640_mode_info ov3640_mode_info_data[2][ov3640_mode_MAX + 1] = {
@@ -543,7 +1199,7 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+ .maximum = OV3640_MAX_BRIGHT,
+ .step = OV3640_BRIGHT_STEP,
+ .default_value = OV3640_DEF_BRIGHT,
-+ },
++ },
+ .current_value = OV3640_DEF_BRIGHT,
+ }, {
+ {
@@ -697,7 +1353,7 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+static void ov3640_allocate_video_controls(void)
+{
+ int i;
-+
++
+ for (i = 0; i < (ARRAY_SIZE(video_control) - 1); i++) {
+ memcpy(&ov3640_controls[i], &video_control[i], sizeof(struct v4l2_queryctrl));
+ }
@@ -717,7 +1373,7 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+ if (i2c_master_send(client, au8Buf, 3) < 0) {
+ dev_err(&client->dev, "error while writing reg 0x%04x with val=0x%x\n",
+ reg, val);
-+ return -1;
++ return -ENODEV;
+ }
+
+ return 0;
@@ -725,6 +1381,7 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+
+static int ov3640_read(struct i2c_client *client, u16 reg, u8 *val)
+{
++ int ret = 0;
+ u8 au8RegBuf[2] = {0};
+ u8 u8RdVal = 0;
+
@@ -737,18 +1394,18 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+ if (2 != i2c_master_send(client, au8RegBuf, 2)) {
+ pr_err("%s:write reg error:reg=%x\n",
+ __func__, reg);
-+ return -1;
++ return -ENODEV;
+ }
+
+ if (1 != i2c_master_recv(client, &u8RdVal, 1)) {
+ dev_err(&client->dev, "%s:read reg error:reg=%x,val=%x\n",
+ __func__, reg, u8RdVal);
-+ return -1;
++ return -ENODEV;
+ }
+
+ *val = u8RdVal;
+
-+ return u8RdVal;
++ return ret;
+}
+
+/*static int ov3640_init_mode(struct i2c_client *client,
@@ -774,9 +1431,7 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+
+ /* XXX */
+ enum ov3640_mode mode = ov3640_mode_VGA_640_480;
-+ enum ov3640_frame_rate frame_rate = ov3640_30_fps;
-+
-+ CAMERA_TRACE(("CAMERA_DBG Entry: ov3640_init_mode\n"));
++ enum ov3640_frame_rate frame_rate = ov3640_15_fps;/*ov3640_30_fps;*/
+
+ if (mode > ov3640_mode_MAX || mode < ov3640_mode_MIN) {
+ pr_err("Wrong ov3640 mode detected!\n");
@@ -814,7 +1469,6 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+ msleep(Delay_ms);
+ }
+err:
-+ CAMERA_TRACE(("CAMERA_DBG Exit: ov3640_init_mode\n"));
+
+ return retval;
+}
@@ -1034,22 +1688,24 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+static int ov3640_detect(struct i2c_client *client)
+{
+ u8 pidh, pidl, sccb_id;
++ int ret;
+
+ if (!client)
+ return -ENODEV;
+
-+ if (ov3640_read(client, OV3640_PIDH, &pidh))
-+ return -ENODEV;
-+ if (ov3640_read(client, OV3640_PIDL, &pidl))
-+ return -ENODEV;
-+ if (ov3640_read(client, OV3640_SCCB_ID, &sccb_id))
-+ return -ENODEV;
++ if ((ret = ov3640_read(client, OV3640_PIDH, &pidh)))
++ return ret;
++ if ((ret = ov3640_read(client, OV3640_PIDL, &pidl)))
++ return ret;
++ if ((ret = ov3640_read(client, OV3640_SCCB_ID, &sccb_id)))
++ return ret;
+
+ dev_dbg(&client->dev, "PIDH=0x%02x PIDL=0x%02x SCCB_ID=0x%02x\n",
+ pidh, pidl, sccb_id);
+
-+ if ((pidh != 0x36)
-+ || ( (pidl != 0x40) && (pidl != 0x40) && (pidl != 0x40) ))
++ if ((pidh != OV3640_PIDH_MAGIC) || ((pidl != OV3640_PIDL_MAGIC1A) &&
++ (pidl != OV3640_PIDL_MAGIC2A) &&
++ (pidl != OV3640_PIDL_MAGIC2C)))
+ /*
+ * We didn't read the values we expected, so
+ * this must not be an OV3640.
@@ -1209,7 +1865,7 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+
+static void ov3640_reset(struct i2c_client *client)
+{
-+ /* XXX: tweak register 0x3104 */
++ /* XXX: tweak register OV3640_SC_SYN_CTRL0 */
+ msleep(1);
+}
+
@@ -1301,10 +1957,10 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
+ icd->num_formats = NUM_CAPTURE_FORMATS;
+
+ /* configure default image size and pixel format */
-+/* ret = ov3640_write_regs(client, ov3640_reg_init[YUV][QVGA]);
++ ret = ov3640_configure(icd);
+ if (ret)
+ goto err;
-+*/
++
+ /* Now that we know the model, we can start video */
+ ret = soc_camera_video_start(icd);
+ if (ret)
@@ -1494,8 +2150,8 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640.c
Index: linux-2.6.29.6/drivers/media/video/ov3640_regs.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.29.6/drivers/media/video/ov3640_regs.h 2010-07-23 11:41:31.000000000 +0200
-@@ -0,0 +1,596 @@
++++ linux-2.6.29.6/drivers/media/video/ov3640_regs.h 2010-09-27 15:45:46.000000000 +0200
+@@ -0,0 +1,602 @@
+/*
+ * drivers/media/video/ov3640_regs.h
+ *
@@ -1527,7 +2183,11 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640_regs.h
+#define OV3640_GREEN 0x3006
+#define OV3640_BLUE 0x3007
+#define OV3640_PIDH 0x300A
++#define OV3640_PIDH_MAGIC 0x36
+#define OV3640_PIDL 0x300B
++#define OV3640_PIDL_MAGIC1A 0x40
++#define OV3640_PIDL_MAGIC2A 0x41
++#define OV3640_PIDL_MAGIC2C 0x4C
+#define OV3640_SCCB_ID 0x300C
+#define OV3640_PCLK 0x300D
+#define OV3640_PCLK_HREFQUAL_OUT (1 << 5)
@@ -2075,6 +2735,8 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640_regs.h
+#define OV3640_OUT_CTRL43 0x3643
+#define OV3640_OUT_CTRL44 0x3644
+#define OV3640_OUT_CTRL46 0x3646
++#define OV3640_OUT_CTRL46_HSYNC_EN (1 << 6)
++#define OV3640_OUT_CTRL46_HSYNC_DVP_EN (1 << 2)
+#define OV3640_MIPI_CTRL4C 0x364C
+#define OV3640_MIPI_CTRL4C_ECC_PHBYTEORDER2 (1 << 2)
+/*
@@ -2094,8 +2756,8 @@ Index: linux-2.6.29.6/drivers/media/video/ov3640_regs.h
+#endif /* ifndef OV3640_REGS...
[truncated message content] |