[PATCH v2 2/5] [media] v4l: Add support for mt9t111 sensor driver

From: Deepthy Ravi
Date: Tue Sep 27 2011 - 09:42:09 EST


Added support for mt9t111 sensor in the existing
mt9t112 driver. Also added support for media controller
framework. The sensor driver currently supports only
VGA resolution.

Signed-off-by: Deepthy Ravi <deepthy.ravi@xxxxxx>
---
drivers/media/video/Kconfig | 7 +
drivers/media/video/Makefile | 1 +
drivers/media/video/mt9t111_reg.h | 1367 +++++++++++++++++++++++++++++++++++++
drivers/media/video/mt9t112.c | 320 ++++++++-
include/media/mt9t111.h | 45 ++
5 files changed, 1704 insertions(+), 36 deletions(-)
create mode 100644 drivers/media/video/mt9t111_reg.h
create mode 100644 include/media/mt9t111.h

diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
index 14326d7..b5806e8 100644
--- a/drivers/media/video/Kconfig
+++ b/drivers/media/video/Kconfig
@@ -482,6 +482,13 @@ config VIDEO_MT9V032
This is a Video4Linux2 sensor-level driver for the Micron
MT9V032 752x480 CMOS sensor.

+config VIDEO_MT9T111
+ tristate "Aptina MT9T111 VGA CMOS IMAGE SENSOR"
+ depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
+ ---help---
+ This is a Video4Linux2 sensor-level driver for the Aptina MT9T111
+ image sensor.
+
config VIDEO_TCM825X
tristate "TCM825x camera sensor support"
depends on I2C && VIDEO_V4L2
diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
index c06f515..02a8b70 100644
--- a/drivers/media/video/Makefile
+++ b/drivers/media/video/Makefile
@@ -68,6 +68,7 @@ obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
obj-$(CONFIG_VIDEO_MT9V011) += mt9v011.o
obj-$(CONFIG_VIDEO_MT9V032) += mt9v032.o
obj-$(CONFIG_VIDEO_SR030PC30) += sr030pc30.o
+obj-$(CONFIG_VIDEO_MT9T111) += mt9t112.o
obj-$(CONFIG_VIDEO_NOON010PC30) += noon010pc30.o
obj-$(CONFIG_VIDEO_M5MOLS) += m5mols/
obj-$(CONFIG_VIDEO_ADP1653) += adp1653.o
diff --git a/drivers/media/video/mt9t111_reg.h b/drivers/media/video/mt9t111_reg.h
new file mode 100644
index 0000000..2f610d4
--- /dev/null
+++ b/drivers/media/video/mt9t111_reg.h
@@ -0,0 +1,1367 @@
+/*
+ * drivers/media/video/mt9t111_reg.h
+ *
+ * mt9t111 sensor driver header file
+ *
+ * Copyright (C) 2009 Leopard Imaging
+ *
+ * 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.
+ */
+
+#ifndef MT9T111_REG_H
+#define MT9T111_REG_H
+
+/* register addr */
+#define MT9T111_CHIP_ID (0x0000)
+
+/* register value */
+#define MT9T111_CHIP_ID_VALUE (0x2680)
+
+#define MT9T111_IMAGE_WIDTH (640)
+#define MT9T111_IMAGE_HEIGHT (480)
+
+typedef struct {
+ u16 delay_time;
+ u16 addr;
+ u16 data;
+} mt9t111_regs;
+
+mt9t111_regs patch_rev6[] = {
+ {0, 0x0982, 0x0},
+ {0, 0x098A, 0xCE7},
+ {0, 0x0990, 0x3C3C},
+ {0, 0x0992, 0x3C3C},
+ {0, 0x0994, 0x3C5F},
+ {0, 0x0996, 0x4F30},
+ {0, 0x0998, 0xED08},
+ {0, 0x099a, 0xBD61},
+ {0, 0x099c, 0xD5CE},
+ {0, 0x099e, 0x4CD},
+ {0, 0x098A, 0xCF7},
+ {0, 0x0990, 0x1F17},
+ {0, 0x0992, 0x211},
+ {0, 0x0994, 0xCC33},
+ {0, 0x0996, 0x2E30},
+ {0, 0x0998, 0xED02},
+ {0, 0x099a, 0xCCFF},
+ {0, 0x099c, 0xFDED},
+ {0, 0x099e, 0xCC},
+ {0, 0x098A, 0xD07},
+ {0, 0x0990, 0x2},
+ {0, 0x0992, 0xBD70},
+ {0, 0x0994, 0x6D18},
+ {0, 0x0996, 0xDE1F},
+ {0, 0x0998, 0x181F},
+ {0, 0x099a, 0x8E01},
+ {0, 0x099c, 0x10CC},
+ {0, 0x099e, 0x3C52},
+ {0, 0x098A, 0xD17},
+ {0, 0x0990, 0x30ED},
+ {0, 0x0992, 0x18},
+ {0, 0x0994, 0xECA0},
+ {0, 0x0996, 0xC4FD},
+ {0, 0x0998, 0xBD70},
+ {0, 0x099a, 0x2120},
+ {0, 0x099c, 0x1ECC},
+ {0, 0x099e, 0x3C52},
+ {0, 0x098A, 0xD27},
+ {0, 0x0990, 0x30ED},
+ {0, 0x0992, 0xDE},
+ {0, 0x0994, 0x1FEC},
+ {0, 0x0996, 0xA0BD},
+ {0, 0x0998, 0x7021},
+ {0, 0x099a, 0xCC3C},
+ {0, 0x099c, 0x5230},
+ {0, 0x099e, 0xED02},
+ {0, 0x098A, 0xD37},
+ {0, 0x0990, 0xCCFF},
+ {0, 0x0992, 0xFCED},
+ {0, 0x0994, 0xCC},
+ {0, 0x0996, 0x2},
+ {0, 0x0998, 0xBD70},
+ {0, 0x099a, 0x6DFC},
+ {0, 0x099c, 0x4E1},
+ {0, 0x099e, 0x1A83},
+ {0, 0x098A, 0xD47},
+ {0, 0x0990, 0x1},
+ {0, 0x0992, 0x2720},
+ {0, 0x0994, 0x1A83},
+ {0, 0x0996, 0x4},
+ {0, 0x0998, 0x271E},
+ {0, 0x099a, 0x1A83},
+ {0, 0x099c, 0x8},
+ {0, 0x099e, 0x271C},
+ {0, 0x098A, 0xD57},
+ {0, 0x0990, 0x1A83},
+ {0, 0x0992, 0x10},
+ {0, 0x0994, 0x271A},
+ {0, 0x0996, 0x1A83},
+ {0, 0x0998, 0x20},
+ {0, 0x099a, 0x2718},
+ {0, 0x099c, 0x1A83},
+ {0, 0x099e, 0x40},
+ {0, 0x098A, 0xD67},
+ {0, 0x0990, 0x2716},
+ {0, 0x0992, 0x2019},
+ {0, 0x0994, 0xC61E},
+ {0, 0x0996, 0x2012},
+ {0, 0x0998, 0xC622},
+ {0, 0x099a, 0x200E},
+ {0, 0x099c, 0xC621},
+ {0, 0x099e, 0x200A},
+ {0, 0x098A, 0xD77},
+ {0, 0x0990, 0xC620},
+ {0, 0x0992, 0x2006},
+ {0, 0x0994, 0xC62A},
+ {0, 0x0996, 0x2002},
+ {0, 0x0998, 0xC62B},
+ {0, 0x099a, 0x30ED},
+ {0, 0x099c, 0x8CC},
+ {0, 0x099e, 0x3400},
+ {0, 0x098A, 0xD87},
+ {0, 0x0990, 0x30ED},
+ {0, 0x0992, 0x34},
+ {0, 0x0994, 0xBD6F},
+ {0, 0x0996, 0xD184},
+ {0, 0x0998, 0x330},
+ {0, 0x099a, 0xED07},
+ {0, 0x099c, 0xA60A},
+ {0, 0x099e, 0x4848},
+ {0, 0x098A, 0xD97},
+ {0, 0x0990, 0x5FED},
+ {0, 0x0992, 0x5EA},
+ {0, 0x0994, 0x8AA},
+ {0, 0x0996, 0x731},
+ {0, 0x0998, 0xBD70},
+ {0, 0x099a, 0x2130},
+ {0, 0x099c, 0xC60A},
+ {0, 0x099e, 0x3A35},
+ {0, 0x098A, 0xDA7},
+ {0, 0x0990, 0x3937},
+ {0, 0x0992, 0x3C3C},
+ {0, 0x0994, 0x3C34},
+ {0, 0x0996, 0xDE2F},
+ {0, 0x0998, 0xEE0E},
+ {0, 0x099a, 0xAD00},
+ {0, 0x099c, 0x7D13},
+ {0, 0x099e, 0xEF27},
+ {0, 0x098A, 0xDB7},
+ {0, 0x0990, 0x7CCE},
+ {0, 0x0992, 0x13E0},
+ {0, 0x0994, 0x1E05},
+ {0, 0x0996, 0x1060},
+ {0, 0x0998, 0xE60E},
+ {0, 0x099a, 0x4FC3},
+ {0, 0x099c, 0x13F0},
+ {0, 0x099e, 0x8FE6},
+ {0, 0x098A, 0xDC7},
+ {0, 0x0990, 0x30},
+ {0, 0x0992, 0xE107},
+ {0, 0x0994, 0x2216},
+ {0, 0x0996, 0xF613},
+ {0, 0x0998, 0xEE4F},
+ {0, 0x099a, 0xC313},
+ {0, 0x099c, 0xF38F},
+ {0, 0x099e, 0xE600},
+ {0, 0x098A, 0xDD7},
+ {0, 0x0990, 0x30E1},
+ {0, 0x0992, 0x725},
+ {0, 0x0994, 0x7F6},
+ {0, 0x0996, 0x13EE},
+ {0, 0x0998, 0xC103},
+ {0, 0x099a, 0x253C},
+ {0, 0x099c, 0x7F13},
+ {0, 0x099e, 0xEEF6},
+ {0, 0x098A, 0xDE7},
+ {0, 0x0990, 0x13EF},
+ {0, 0x0992, 0xE706},
+ {0, 0x0994, 0xCC13},
+ {0, 0x0996, 0xF0ED},
+ {0, 0x0998, 0x4CC},
+ {0, 0x099a, 0x13F3},
+ {0, 0x099c, 0x200F},
+ {0, 0x099e, 0x7C13},
+ {0, 0x098A, 0xDF7},
+ {0, 0x0990, 0xEEEC},
+ {0, 0x0992, 0x4C3},
+ {0, 0x0994, 0x1},
+ {0, 0x0996, 0xED04},
+ {0, 0x0998, 0xEC02},
+ {0, 0x099a, 0xC300},
+ {0, 0x099c, 0x1ED},
+ {0, 0x099e, 0x2F6},
+ {0, 0x098A, 0xE07},
+ {0, 0x0990, 0x13EE},
+ {0, 0x0992, 0xE106},
+ {0, 0x0994, 0x2412},
+ {0, 0x0996, 0xEE04},
+ {0, 0x0998, 0xE600},
+ {0, 0x099a, 0x30E1},
+ {0, 0x099c, 0x722},
+ {0, 0x099e, 0xDFEE},
+ {0, 0x098A, 0xE17},
+ {0, 0x0990, 0x2E6},
+ {0, 0x0992, 0x30},
+ {0, 0x0994, 0xE107},
+ {0, 0x0996, 0x25D6},
+ {0, 0x0998, 0xDE49},
+ {0, 0x099a, 0xEE08},
+ {0, 0x099c, 0xAD00},
+ {0, 0x099e, 0xCC13},
+ {0, 0x098A, 0xE27},
+ {0, 0x0990, 0xF630},
+ {0, 0x0992, 0xED00},
+ {0, 0x0994, 0xDE2F},
+ {0, 0x0996, 0xEE10},
+ {0, 0x0998, 0xCC13},
+ {0, 0x099a, 0xFAAD},
+ {0, 0x099c, 0x38},
+ {0, 0x099e, 0x3838},
+ {0, 0x098A, 0xE37},
+ {0, 0x0990, 0x3839},
+ {0, 0x098A, 0x1000},
+ {0, 0x0990, 0xCC10},
+ {0, 0x0992, 0x9BD},
+ {0, 0x0994, 0x4224},
+ {0, 0x0996, 0x7E10},
+ {0, 0x0998, 0x9C6},
+ {0, 0x099a, 0x1F7},
+ {0, 0x099c, 0x18A},
+ {0, 0x099e, 0xC606},
+ {0, 0x098A, 0x1010},
+ {0, 0x0990, 0xF701},
+ {0, 0x0992, 0x8BDE},
+ {0, 0x0994, 0x3F18},
+ {0, 0x0996, 0xCE0B},
+ {0, 0x0998, 0xF1CC},
+ {0, 0x099a, 0x11},
+ {0, 0x099c, 0xBDD7},
+ {0, 0x099e, 0xCC},
+ {0, 0x098A, 0x1020},
+ {0, 0x0990, 0xBF1},
+ {0, 0x0992, 0xDD3F},
+ {0, 0x0994, 0xDE35},
+ {0, 0x0996, 0x18CE},
+ {0, 0x0998, 0xC03},
+ {0, 0x099a, 0xCC00},
+ {0, 0x099c, 0x3FBD},
+ {0, 0x099e, 0xD700},
+ {0, 0x098A, 0x1030},
+ {0, 0x0990, 0xCC0C},
+ {0, 0x0992, 0x3DD},
+ {0, 0x0994, 0x35DE},
+ {0, 0x0996, 0x4718},
+ {0, 0x0998, 0xCE0C},
+ {0, 0x099a, 0x43CC},
+ {0, 0x099c, 0x15},
+ {0, 0x099e, 0xBDD7},
+ {0, 0x098A, 0x1040},
+ {0, 0x0990, 0xCC},
+ {0, 0x0992, 0xC43},
+ {0, 0x0994, 0xDD47},
+ {0, 0x0996, 0xFE00},
+ {0, 0x0998, 0x3318},
+ {0, 0x099a, 0xCE0C},
+ {0, 0x099c, 0x59CC},
+ {0, 0x099e, 0x9},
+ {0, 0x098A, 0x1050},
+ {0, 0x0990, 0xBDD7},
+ {0, 0x0992, 0xCC},
+ {0, 0x0994, 0xC59},
+ {0, 0x0996, 0xFD00},
+ {0, 0x0998, 0x33DE},
+ {0, 0x099a, 0x4118},
+ {0, 0x099c, 0xCE0C},
+ {0, 0x099e, 0x63CC},
+ {0, 0x098A, 0x1060},
+ {0, 0x0990, 0xD},
+ {0, 0x0992, 0xBDD7},
+ {0, 0x0994, 0xCC},
+ {0, 0x0996, 0xC63},
+ {0, 0x0998, 0xDD41},
+ {0, 0x099a, 0xFE00},
+ {0, 0x099c, 0x3118},
+ {0, 0x099e, 0xCE0C},
+ {0, 0x098A, 0x1070},
+ {0, 0x0990, 0x71CC},
+ {0, 0x0992, 0x29},
+ {0, 0x0994, 0xBDD7},
+ {0, 0x0996, 0xCC},
+ {0, 0x0998, 0xC71},
+ {0, 0x099a, 0xFD00},
+ {0, 0x099c, 0x31DE},
+ {0, 0x099e, 0x3918},
+ {0, 0x098A, 0x1080},
+ {0, 0x0990, 0xCE0C},
+ {0, 0x0992, 0x9BCC},
+ {0, 0x0994, 0x23},
+ {0, 0x0996, 0xBDD7},
+ {0, 0x0998, 0xCC},
+ {0, 0x099a, 0xC9B},
+ {0, 0x099c, 0xDD39},
+ {0, 0x099e, 0xDE49},
+ {0, 0x098A, 0x1090},
+ {0, 0x0990, 0x18CE},
+ {0, 0x0992, 0xCBF},
+ {0, 0x0994, 0xCC00},
+ {0, 0x0996, 0xDBD},
+ {0, 0x0998, 0xD700},
+ {0, 0x099a, 0xCC0C},
+ {0, 0x099c, 0xBFDD},
+ {0, 0x099e, 0x49CC},
+ {0, 0x098A, 0x10A0},
+ {0, 0x0990, 0x1162},
+ {0, 0x0992, 0xFD0B},
+ {0, 0x0994, 0xFDCC},
+ {0, 0x0996, 0xCE7},
+ {0, 0x0998, 0xFD0C},
+ {0, 0x099a, 0x1FCC},
+ {0, 0x099c, 0x1245},
+ {0, 0x099e, 0xFD0C},
+ {0, 0x098A, 0x10B0},
+ {0, 0x0990, 0x51CC},
+ {0, 0x0992, 0x110B},
+ {0, 0x0994, 0xFD0C},
+ {0, 0x0996, 0x5BCC},
+ {0, 0x0998, 0x1108},
+ {0, 0x099a, 0xFD0C},
+ {0, 0x099c, 0x65CC},
+ {0, 0x099e, 0x10D0},
+ {0, 0x098A, 0x10C0},
+ {0, 0x0990, 0xFD0C},
+ {0, 0x0992, 0x7BCC},
+ {0, 0x0994, 0x12DE},
+ {0, 0x0996, 0xFD0C},
+ {0, 0x0998, 0xA7CC},
+ {0, 0x099a, 0xDA8},
+ {0, 0x099c, 0xFD0C},
+ {0, 0x099e, 0xCB39},
+ {0, 0x098A, 0x10D0},
+ {0, 0x0990, 0x37DE},
+ {0, 0x0992, 0x1DEC},
+ {0, 0x0994, 0xC5F},
+ {0, 0x0996, 0x8402},
+ {0, 0x0998, 0x4416},
+ {0, 0x099a, 0x4FF7},
+ {0, 0x099c, 0xCCD},
+ {0, 0x099e, 0xE60B},
+ {0, 0x098A, 0x10E0},
+ {0, 0x0990, 0xC407},
+ {0, 0x0992, 0xF70C},
+ {0, 0x0994, 0xCE7F},
+ {0, 0x0996, 0x30C4},
+ {0, 0x0998, 0xEC25},
+ {0, 0x099a, 0xFD30},
+ {0, 0x099c, 0xC5FC},
+ {0, 0x099e, 0x6D6},
+ {0, 0x098A, 0x10F0},
+ {0, 0x0990, 0xFD30},
+ {0, 0x0992, 0xC701},
+ {0, 0x0994, 0xFC30},
+ {0, 0x0996, 0xC0FD},
+ {0, 0x0998, 0xBED},
+ {0, 0x099a, 0xFC30},
+ {0, 0x099c, 0xC2FD},
+ {0, 0x099e, 0xBEF},
+ {0, 0x098A, 0x1100},
+ {0, 0x0990, 0x30E6},
+ {0, 0x0992, 0xBD},
+ {0, 0x0994, 0x5203},
+ {0, 0x0996, 0x3139},
+ {0, 0x0998, 0x7E9E},
+ {0, 0x099a, 0x143C},
+ {0, 0x099c, 0x3C3C},
+ {0, 0x099e, 0x2101},
+ {0, 0x098A, 0x1110},
+ {0, 0x0990, 0xCC00},
+ {0, 0x0992, 0x18BD},
+ {0, 0x0994, 0x6FD1},
+ {0, 0x0996, 0xC504},
+ {0, 0x0998, 0x26F5},
+ {0, 0x099a, 0xDC25},
+ {0, 0x099c, 0x30ED},
+ {0, 0x099e, 0x420},
+ {0, 0x098A, 0x1120},
+ {0, 0x0990, 0x12EE},
+ {0, 0x0992, 0x43C},
+ {0, 0x0994, 0x1838},
+ {0, 0x0996, 0xE621},
+ {0, 0x0998, 0x18E7},
+ {0, 0x099a, 0xBE30},
+ {0, 0x099c, 0xEE04},
+ {0, 0x099e, 0xEC1D},
+ {0, 0x098A, 0x1130},
+ {0, 0x0990, 0x30ED},
+ {0, 0x0992, 0x4EC},
+ {0, 0x0994, 0x426},
+ {0, 0x0996, 0xEACC},
+ {0, 0x0998, 0x1A},
+ {0, 0x099a, 0xED02},
+ {0, 0x099c, 0xCCFB},
+ {0, 0x099e, 0xFFED},
+ {0, 0x098A, 0x1140},
+ {0, 0x0990, 0xCC},
+ {0, 0x0992, 0x400},
+ {0, 0x0994, 0xBD70},
+ {0, 0x0996, 0x6DCC},
+ {0, 0x0998, 0x1A},
+ {0, 0x099a, 0x30ED},
+ {0, 0x099c, 0x2CC},
+ {0, 0x099e, 0xFBFF},
+ {0, 0x098A, 0x1150},
+ {0, 0x0990, 0xED00},
+ {0, 0x0992, 0x5F4F},
+ {0, 0x0994, 0xBD70},
+ {0, 0x0996, 0x6D5F},
+ {0, 0x0998, 0xBD5B},
+ {0, 0x099a, 0x17BD},
+ {0, 0x099c, 0x558B},
+ {0, 0x099e, 0x3838},
+ {0, 0x098A, 0x1160},
+ {0, 0x0990, 0x3839},
+ {0, 0x0992, 0x3C3C},
+ {0, 0x0994, 0xC640},
+ {0, 0x0996, 0xF730},
+ {0, 0x0998, 0xC4FC},
+ {0, 0x099a, 0xBED},
+ {0, 0x099c, 0xFD30},
+ {0, 0x099e, 0xC0FC},
+ {0, 0x098A, 0x1170},
+ {0, 0x0990, 0xBEF},
+ {0, 0x0992, 0xFD30},
+ {0, 0x0994, 0xC2DE},
+ {0, 0x0996, 0x1DEC},
+ {0, 0x0998, 0x25FD},
+ {0, 0x099a, 0x30C5},
+ {0, 0x099c, 0x101},
+ {0, 0x099e, 0x1FC},
+ {0, 0x098A, 0x1180},
+ {0, 0x0990, 0x30C2},
+ {0, 0x0992, 0xFD06},
+ {0, 0x0994, 0xD6EC},
+ {0, 0x0996, 0xC5F},
+ {0, 0x0998, 0x8402},
+ {0, 0x099a, 0x4416},
+ {0, 0x099c, 0x4F30},
+ {0, 0x099e, 0xE703},
+ {0, 0x098A, 0x1190},
+ {0, 0x0990, 0xF10C},
+ {0, 0x0992, 0xCD27},
+ {0, 0x0994, 0x15F1},
+ {0, 0x0996, 0xCCD},
+ {0, 0x0998, 0x2309},
+ {0, 0x099a, 0xFC06},
+ {0, 0x099c, 0xD604},
+ {0, 0x099e, 0xFD06},
+ {0, 0x098A, 0x11A0},
+ {0, 0x0990, 0xD620},
+ {0, 0x0992, 0x7FC},
+ {0, 0x0994, 0x6D6},
+ {0, 0x0996, 0x5FD},
+ {0, 0x0998, 0x6D6},
+ {0, 0x099a, 0xDE1D},
+ {0, 0x099c, 0xE60B},
+ {0, 0x099e, 0xC407},
+ {0, 0x098A, 0x11B0},
+ {0, 0x0990, 0x30E7},
+ {0, 0x0992, 0x2F1},
+ {0, 0x0994, 0xCCE},
+ {0, 0x0996, 0x272C},
+ {0, 0x0998, 0x7D0C},
+ {0, 0x099a, 0xCE27},
+ {0, 0x099c, 0x275D},
+ {0, 0x099e, 0x2724},
+ {0, 0x098A, 0x11C0},
+ {0, 0x0990, 0x7F30},
+ {0, 0x0992, 0xC4FC},
+ {0, 0x0994, 0x6D6},
+ {0, 0x0996, 0xFD30},
+ {0, 0x0998, 0xC5F6},
+ {0, 0x099a, 0xCCE},
+ {0, 0x099c, 0x4FFD},
+ {0, 0x099e, 0x30C7},
+ {0, 0x098A, 0x11D0},
+ {0, 0x0990, 0xC640},
+ {0, 0x0992, 0xF730},
+ {0, 0x0994, 0xC4E6},
+ {0, 0x0996, 0x24F},
+ {0, 0x0998, 0xFD30},
+ {0, 0x099a, 0xC501},
+ {0, 0x099c, 0x101},
+ {0, 0x099e, 0xFC30},
+ {0, 0x098A, 0x11E0},
+ {0, 0x0990, 0xC2FD},
+ {0, 0x0992, 0x6D6},
+ {0, 0x0994, 0x7D06},
+ {0, 0x0996, 0xCB27},
+ {0, 0x0998, 0x2EC6},
+ {0, 0x099a, 0x40F7},
+ {0, 0x099c, 0x30C4},
+ {0, 0x099e, 0xFC06},
+ {0, 0x098A, 0x11F0},
+ {0, 0x0990, 0xC104},
+ {0, 0x0992, 0xF306},
+ {0, 0x0994, 0xD6ED},
+ {0, 0x0996, 0x5F},
+ {0, 0x0998, 0x6D00},
+ {0, 0x099a, 0x2A01},
+ {0, 0x099c, 0x5317},
+ {0, 0x099e, 0xFD30},
+ {0, 0x098A, 0x1200},
+ {0, 0x0990, 0xC0EC},
+ {0, 0x0992, 0xFD},
+ {0, 0x0994, 0x30C2},
+ {0, 0x0996, 0xFC06},
+ {0, 0x0998, 0xC1FD},
+ {0, 0x099a, 0x30C5},
+ {0, 0x099c, 0x101},
+ {0, 0x099e, 0x1FC},
+ {0, 0x098A, 0x1210},
+ {0, 0x0990, 0x30C2},
+ {0, 0x0992, 0xFD06},
+ {0, 0x0994, 0xC720},
+ {0, 0x0996, 0x227F},
+ {0, 0x0998, 0x30C4},
+ {0, 0x099a, 0xDE1D},
+ {0, 0x099c, 0xEC25},
+ {0, 0x099e, 0xFD30},
+ {0, 0x098A, 0x1220},
+ {0, 0x0990, 0xC5FC},
+ {0, 0x0992, 0x6D6},
+ {0, 0x0994, 0xFD30},
+ {0, 0x0996, 0xC701},
+ {0, 0x0998, 0xFC30},
+ {0, 0x099a, 0xC0FD},
+ {0, 0x099c, 0x6D0},
+ {0, 0x099e, 0xFC30},
+ {0, 0x098A, 0x1230},
+ {0, 0x0990, 0xC2FD},
+ {0, 0x0992, 0x6D2},
+ {0, 0x0994, 0xEC25},
+ {0, 0x0996, 0xFD06},
+ {0, 0x0998, 0xC3BD},
+ {0, 0x099a, 0x953C},
+ {0, 0x099c, 0xDE3F},
+ {0, 0x099e, 0xEE10},
+ {0, 0x098A, 0x1240},
+ {0, 0x0990, 0xAD00},
+ {0, 0x0992, 0x3838},
+ {0, 0x0994, 0x3930},
+ {0, 0x0996, 0x8FC3},
+ {0, 0x0998, 0xFFE9},
+ {0, 0x099a, 0x8F35},
+ {0, 0x099c, 0xBDAD},
+ {0, 0x099e, 0x1530},
+ {0, 0x098A, 0x1250},
+ {0, 0x0990, 0x6F16},
+ {0, 0x0992, 0x18DE},
+ {0, 0x0994, 0x1918},
+ {0, 0x0996, 0x8FC3},
+ {0, 0x0998, 0x14B},
+ {0, 0x099a, 0x188F},
+ {0, 0x099c, 0x18EC},
+ {0, 0x099e, 0xFD},
+ {0, 0x098A, 0x1260},
+ {0, 0x0990, 0x50E},
+ {0, 0x0992, 0x18EC},
+ {0, 0x0994, 0x2FD},
+ {0, 0x0996, 0x510},
+ {0, 0x0998, 0xE616},
+ {0, 0x099a, 0x4FED},
+ {0, 0x099c, 0x418},
+ {0, 0x099e, 0x8FC3},
+ {0, 0x098A, 0x1270},
+ {0, 0x0990, 0xFFCB},
+ {0, 0x0992, 0xE304},
+ {0, 0x0994, 0x8FE6},
+ {0, 0x0996, 0xF7},
+ {0, 0x0998, 0x514},
+ {0, 0x099a, 0x18DE},
+ {0, 0x099c, 0x1930},
+ {0, 0x099e, 0xE616},
+ {0, 0x098A, 0x1280},
+ {0, 0x0990, 0x4FED},
+ {0, 0x0992, 0x418},
+ {0, 0x0994, 0x8FC3},
+ {0, 0x0996, 0x119},
+ {0, 0x0998, 0xE304},
+ {0, 0x099a, 0x8FE6},
+ {0, 0x099c, 0xF7},
+ {0, 0x099e, 0x515},
+ {0, 0x098A, 0x1290},
+ {0, 0x0990, 0xFC05},
+ {0, 0x0992, 0x5BFD},
+ {0, 0x0994, 0x512},
+ {0, 0x0996, 0xDE37},
+ {0, 0x0998, 0xEE08},
+ {0, 0x099a, 0xAD00},
+ {0, 0x099c, 0x30E6},
+ {0, 0x099e, 0x164F},
+ {0, 0x098A, 0x12A0},
+ {0, 0x0990, 0x5ED},
+ {0, 0x0992, 0x48F},
+ {0, 0x0994, 0xC300},
+ {0, 0x0996, 0x630},
+ {0, 0x0998, 0xE304},
+ {0, 0x099a, 0x8FF6},
+ {0, 0x099c, 0x516},
+ {0, 0x099e, 0x4FED},
+ {0, 0x098A, 0x12B0},
+ {0, 0x0990, 0x30},
+ {0, 0x0992, 0x6C16},
+ {0, 0x0994, 0xE616},
+ {0, 0x0996, 0xC103},
+ {0, 0x0998, 0x2598},
+ {0, 0x099a, 0xCC32},
+ {0, 0x099c, 0x8EED},
+ {0, 0x099e, 0xEC},
+ {0, 0x098A, 0x12C0},
+ {0, 0x0990, 0x6BD},
+ {0, 0x0992, 0x7021},
+ {0, 0x0994, 0xCC32},
+ {0, 0x0996, 0x6C30},
+ {0, 0x0998, 0xED02},
+ {0, 0x099a, 0xCCF8},
+ {0, 0x099c, 0xED},
+ {0, 0x099e, 0xA6},
+ {0, 0x098A, 0x12D0},
+ {0, 0x0990, 0x9E3},
+ {0, 0x0992, 0xA84},
+ {0, 0x0994, 0x7BD},
+ {0, 0x0996, 0x706D},
+ {0, 0x0998, 0x30C6},
+ {0, 0x099a, 0x173A},
+ {0, 0x099c, 0x3539},
+ {0, 0x099e, 0x3CBD},
+ {0, 0x098A, 0x12E0},
+ {0, 0x0990, 0x776D},
+ {0, 0x0992, 0xCC32},
+ {0, 0x0994, 0x5C30},
+ {0, 0x0996, 0xED00},
+ {0, 0x0998, 0xFC13},
+ {0, 0x099a, 0x8683},
+ {0, 0x099c, 0x1},
+ {0, 0x099e, 0xBD70},
+ {0, 0x098A, 0x12F0},
+ {0, 0x0990, 0x21CC},
+ {0, 0x0992, 0x325E},
+ {0, 0x0994, 0x30ED},
+ {0, 0x0996, 0xFC},
+ {0, 0x0998, 0x1388},
+ {0, 0x099a, 0x8300},
+ {0, 0x099c, 0x1BD},
+ {0, 0x099e, 0x7021},
+ {0, 0x098A, 0x1300},
+ {0, 0x0990, 0x3839},
+ {0, 0x098E, 0x0010},
+ {0, 0x0990, 0x1000},
+ {0, 0x098E, 0x0003},
+ {100, 0x0990, 0x0004}
+};
+
+mt9t111_regs def_regs1[] = {
+ {0, 0x001A, 0x0218},
+ {0, 0x001E, 0x0777},
+ {0, 0x3084, 0x2409},
+ {0, 0x3092, 0x0A49},
+ {0, 0x3094, 0x4949},
+ {0, 0x3096, 0x4950},
+ {0, 0x0018, 0x402D},
+ {100, 0x0018, 0x402C},
+ {0, 0x098E, 0x6800},
+ {0, 0x0990, 0x0280},
+ {0, 0x098E, 0x6802},
+ {0, 0x0990, 0x01E0},
+ {0, 0x098E, 0xE88E},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x68A0},
+ {0, 0x0990, 0x082D},
+ {0, 0x098E, 0x4802},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x4804},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x4806},
+ {0, 0x0990, 0x060D},
+ {0, 0x098E, 0x4808},
+ {0, 0x0990, 0x080D},
+ {0, 0x098E, 0x480A},
+ {0, 0x0990, 0x0111},
+ {0, 0x098E, 0x480C},
+ {0, 0x0990, 0x046C},
+ {0, 0x098E, 0x480F},
+ {0, 0x0990, 0x00CC},
+ {0, 0x098E, 0x4811},
+ {0, 0x0990, 0x0381},
+ {0, 0x098E, 0x4813},
+ {0, 0x0990, 0x024F},
+ {0, 0x098E, 0x481D},
+ {0, 0x0990, 0x05AE},
+ {0, 0x098E, 0x481F},
+ {0, 0x0990, 0x05D0},
+ {0, 0x098E, 0x4825},
+ {0, 0x0990, 0x07AC},
+ {0, 0x098E, 0x6C00},
+ {0, 0x0990, 0x0800},
+ {0, 0x098E, 0x6C02},
+ {0, 0x0990, 0x0600},
+ {0, 0x098E, 0xEC8E},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x6CA0},
+ {0, 0x0990, 0x082D},
+ {0, 0x098E, 0x484A},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x484C},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x484E},
+ {0, 0x0990, 0x060D},
+ {0, 0x098E, 0x4850},
+ {0, 0x0990, 0x080D},
+ {0, 0x098E, 0x4852},
+ {0, 0x0990, 0x0111},
+ {0, 0x098E, 0x4854},
+ {0, 0x0990, 0x146C},
+ {0, 0x098E, 0x4857},
+ {0, 0x0990, 0x00CC},
+ {0, 0x098E, 0x4859},
+ {0, 0x0990, 0x0381},
+ {0, 0x098E, 0x485B},
+ {0, 0x0990, 0x024F},
+ {0, 0x098E, 0x4865},
+ {0, 0x0990, 0x05AE},
+ {0, 0x098E, 0x4867},
+ {0, 0x0990, 0x05D0},
+ {0, 0x098E, 0x486D},
+ {0, 0x0990, 0x07AC},
+ {0, 0x098E, 0xC8A5},
+ {0, 0x0990, 0x001D},
+ {0, 0x098E, 0xC8A6},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0xC8A7},
+ {0, 0x0990, 0x0023},
+ {0, 0x098E, 0xC8A8},
+ {0, 0x0990, 0x0026},
+ {0, 0x098E, 0xC844},
+ {0, 0x0990, 0x0091},
+ {0, 0x098E, 0xC92F},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xC845},
+ {0, 0x0990, 0x0079},
+ {0, 0x098E, 0xC92D},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xC88C},
+ {0, 0x0990, 0x0091},
+ {0, 0x098E, 0xC930},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xC88D},
+ {0, 0x0990, 0x0079},
+ {0, 0x098E, 0xC92E},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xA002},
+ {0, 0x0990, 0x0010},
+ {0, 0x098E, 0xA009},
+ {0, 0x0990, 0x0002},
+ {0, 0x098E, 0xA00A},
+ {0, 0x0990, 0x0003},
+ {0, 0x098E, 0xA00C},
+ {0, 0x0990, 0x000A},
+ {0, 0x098E, 0x4846},
+ {0, 0x0990, 0x0014},
+ {0, 0x098E, 0x68AA},
+ {0, 0x0990, 0x0278},
+ {0, 0x098E, 0x488E},
+ {0, 0x0990, 0x0014},
+ {0, 0x098E, 0x6CAA},
+ {0, 0x0990, 0x0218},
+ {0, 0x098E, 0x8400},
+ {0, 0x0990, 0x0006},
+ {0, 0x098E, 0x8400},
+ {0, 0x0990, 0x0005},
+ {0, 0x3C20, 0x0001},
+ {0, 0x364A, 0x7D2F},
+ {0, 0x364C, 0x79EB},
+ {0, 0x364E, 0x18D2},
+ {0, 0x3650, 0x9F8F},
+ {0, 0x3652, 0xA7D2},
+ {0, 0x368A, 0x460C},
+ {0, 0x368C, 0x14F0},
+ {0, 0x368E, 0x946F},
+ {0, 0x3690, 0xC471},
+ {0, 0x3692, 0x04B1},
+ {0, 0x36CA, 0x0433},
+ {0, 0x36CC, 0x680D},
+ {0, 0x36CE, 0xEEF3},
+ {0, 0x36D0, 0x4850},
+ {0, 0x36D2, 0xF233},
+ {0, 0x370A, 0xB2AF},
+ {0, 0x370C, 0x2CF0},
+ {0, 0x370E, 0x3F10},
+ {0, 0x3710, 0xC673},
+ {0, 0x3712, 0xA972},
+ {0, 0x374A, 0x0590},
+ {0, 0x374C, 0xAFB3},
+ {0, 0x374E, 0x93D7},
+ {0, 0x3750, 0x8D12},
+ {0, 0x3752, 0x2539},
+ {0, 0x3640, 0x0350},
+ {0, 0x3642, 0x322C},
+ {0, 0x3644, 0x77D1},
+ {0, 0x3646, 0xA26F},
+ {0, 0x3648, 0xC872},
+ {0, 0x3680, 0x0C4C},
+ {0, 0x3682, 0x9510},
+ {0, 0x3684, 0x110E},
+ {0, 0x3686, 0x4331},
+ {0, 0x3688, 0xC1CF},
+ {0, 0x36C0, 0x6152},
+ {0, 0x36C2, 0x038E},
+ {0, 0x36C4, 0x9AF4},
+ {0, 0x36C6, 0xE12F},
+ {0, 0x36C8, 0x09F3},
+ {0, 0x3700, 0xC5AF},
+ {0, 0x3702, 0xCA90},
+ {0, 0x3704, 0x5D0F},
+ {0, 0x3706, 0x3293},
+ {0, 0x3708, 0x2B92},
+ {0, 0x3740, 0xC590},
+ {0, 0x3742, 0x8133},
+ {0, 0x3744, 0xE0F6},
+ {0, 0x3746, 0x0254},
+ {0, 0x3748, 0x10B9},
+ {0, 0x3654, 0x7F8F},
+ {0, 0x3656, 0x6F6C},
+ {0, 0x3658, 0x5971},
+ {0, 0x365A, 0x9A0F},
+ {0, 0x365C, 0xA1B2},
+ {0, 0x3694, 0xB00C},
+ {0, 0x3696, 0xEBCF},
+ {0, 0x3698, 0x06AD},
+ {0, 0x369A, 0x4D31},
+ {0, 0x369C, 0x2A4E},
+ {0, 0x36D4, 0x4752},
+ {0, 0x36D6, 0x724D},
+ {0, 0x36D8, 0xAD34},
+ {0, 0x36DA, 0x1350},
+ {0, 0x36DC, 0x4E94},
+ {0, 0x3714, 0xA06E},
+ {0, 0x3716, 0x9152},
+ {0, 0x3718, 0x1F53},
+ {0, 0x371A, 0x3933},
+ {0, 0x371C, 0xBA94},
+ {0, 0x3754, 0x1233},
+ {0, 0x3756, 0xA032},
+ {0, 0x3758, 0xE936},
+ {0, 0x375A, 0xBE34},
+ {0, 0x375C, 0x02D9},
+ {0, 0x365E, 0x7DEF},
+ {0, 0x3660, 0x434B},
+ {0, 0x3662, 0x69F1},
+ {0, 0x3664, 0x8A0F},
+ {0, 0x3666, 0xBDB2},
+ {0, 0x369E, 0x290D},
+ {0, 0x36A0, 0x42CF},
+ {0, 0x36A2, 0xDC6D},
+ {0, 0x36A4, 0x91B1},
+ {0, 0x36A6, 0x9DE9},
+ {0, 0x36DE, 0x70B2},
+ {0, 0x36E0, 0x02AC},
+ {0, 0x36E2, 0x9714},
+ {0, 0x36E4, 0xF3CF},
+ {0, 0x36E6, 0x6BD1},
+ {0, 0x371E, 0xE42E},
+ {0, 0x3720, 0x1D32},
+ {0, 0x3722, 0xCC31},
+ {0, 0x3724, 0xAE94},
+ {0, 0x3726, 0x6413},
+ {0, 0x375E, 0xE290},
+ {0, 0x3760, 0x8F53},
+ {0, 0x3762, 0xF936},
+ {0, 0x3764, 0x4614},
+ {0, 0x3766, 0x1B59},
+ {0, 0x3784, 0x0404},
+ {0, 0x3782, 0x0304},
+ {0, 0x3210, 0x01B8},
+ {0, 0x098E, 0xC913},
+ {0, 0x0990, 0x000A},
+ {0, 0x098E, 0x686B},
+ {0, 0x0990, 0x05DC},
+ {0, 0x098E, 0x686D},
+ {0, 0x0990, 0x0BB8},
+ {0, 0x098E, 0x6C6B},
+ {0, 0x0990, 0x05DC},
+ {0, 0x098E, 0x6C6D},
+ {0, 0x0990, 0x0BB8},
+ {0, 0x098E, 0x3439},
+ {0, 0x0990, 0x05DC},
+ {0, 0x098E, 0x343B},
+ {0, 0x0990, 0x0BB8},
+ {0, 0x098E, 0x4926},
+ {0, 0x0990, 0x0001},
+ {0, 0x098E, 0x4928},
+ {0, 0x0990, 0x0002},
+ {0, 0x098E, 0x492A},
+ {0, 0x0990, 0x0656},
+ {0, 0x098E, 0x4D26},
+ {0, 0x0990, 0x0001},
+ {0, 0x098E, 0x4D28},
+ {0, 0x0990, 0x0002},
+ {0, 0x098E, 0x4D2A},
+ {0, 0x0990, 0x0656},
+ {0, 0x33F4, 0x040B},
+ {0, 0x098E, 0xC916},
+ {0, 0x0990, 0x0014},
+ {0, 0x098E, 0xC919},
+ {0, 0x0990, 0x0028},
+ {0, 0x098E, 0xC917},
+ {0, 0x0990, 0x0004},
+ {0, 0x098E, 0xC918},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xC91A},
+ {0, 0x0990, 0x0001},
+ {0, 0x098E, 0xC91B},
+ {0, 0x0990, 0x0009},
+ {0, 0x326C, 0x0C00},
+ {0, 0x098E, 0x494B},
+ {0, 0x0990, 0x0042},
+ {0, 0x098E, 0x494D},
+ {0, 0x0990, 0x012C},
+ {0, 0x098E, 0xC91E},
+ {0, 0x0990, 0x0012},
+ {0, 0x098E, 0xC91F},
+ {0, 0x0990, 0x000A},
+ {0, 0x098E, 0xC920},
+ {0, 0x0990, 0x0012},
+ {0, 0x098E, 0xC921},
+ {0, 0x0990, 0x000A},
+ {0, 0x098E, 0xC922},
+ {0, 0x0990, 0x0026},
+ {0, 0x098E, 0xC923},
+ {0, 0x0990, 0x001E},
+ {0, 0x098E, 0xC924},
+ {0, 0x0990, 0x0026},
+ {0, 0x098E, 0xC925},
+ {0, 0x0990, 0x0026},
+ {0, 0x098E, 0xBC02},
+ {0, 0x0990, 0x0003},
+ {0, 0x098E, 0xBC05},
+ {0, 0x0990, 0x000E},
+ {0, 0x098E, 0xC950},
+ {0, 0x0990, 0x0064},
+ {0, 0x098E, 0xC94F},
+ {0, 0x0990, 0x0038},
+ {0, 0x098E, 0xC952},
+ {0, 0x0990, 0x0064},
+ {0, 0x098E, 0xC951},
+ {0, 0x0990, 0x0051},
+ {0, 0x098E, 0xC954},
+ {0, 0x0990, 0x0010},
+ {0, 0x098E, 0xC953},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0xC956},
+ {0, 0x0990, 0x0010},
+ {0, 0x098E, 0xC955},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0xC958},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0xC957},
+ {0, 0x0990, 0x0014},
+ {0, 0x098E, 0xC95A},
+ {0, 0x0990, 0x001D},
+ {0, 0x098E, 0xC959},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0xC95C},
+ {0, 0x0990, 0x000C},
+ {0, 0x098E, 0xC95B},
+ {0, 0x0990, 0x0008},
+ {0, 0x098E, 0xC95E},
+ {0, 0x0990, 0x000C},
+ {0, 0x098E, 0xC95D},
+ {0, 0x0990, 0x0008},
+ {0, 0x098E, 0xC95F},
+ {0, 0x0990, 0x0064},
+ {0, 0x098E, 0x48DC},
+ {0, 0x0990, 0x004D},
+ {0, 0x098E, 0x48DE},
+ {0, 0x0990, 0x0096},
+ {0, 0x098E, 0x48E0},
+ {0, 0x0990, 0x001D},
+ {0, 0x098E, 0x48E2},
+ {0, 0x0990, 0x004D},
+ {0, 0x098E, 0x48E4},
+ {0, 0x0990, 0x0096},
+ {0, 0x098E, 0x48E6},
+ {0, 0x0990, 0x001D},
+ {0, 0x098E, 0x48E8},
+ {0, 0x0990, 0x004D},
+ {0, 0x098E, 0x48EA},
+ {0, 0x0990, 0x0096},
+ {0, 0x098E, 0x48EC},
+ {0, 0x0990, 0x001D},
+ {0, 0x098E, 0xDC2A},
+ {0, 0x0990, 0x000B},
+ {0, 0x098E, 0xDC2B},
+ {0, 0x0990, 0x0017},
+ {0, 0x098E, 0xBC0B},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xBC0C},
+ {0, 0x0990, 0x001B},
+ {0, 0x098E, 0xBC0D},
+ {0, 0x0990, 0x002A},
+ {0, 0x098E, 0xBC0E},
+ {0, 0x0990, 0x003E},
+ {0, 0x098E, 0xBC0F},
+ {0, 0x0990, 0x005A},
+ {0, 0x098E, 0xBC10},
+ {0, 0x0990, 0x0070},
+ {0, 0x098E, 0xBC11},
+ {0, 0x0990, 0x0081},
+ {0, 0x098E, 0xBC12},
+ {0, 0x0990, 0x0090},
+ {0, 0x098E, 0xBC13},
+ {0, 0x0990, 0x009E},
+ {0, 0x098E, 0xBC14},
+ {0, 0x0990, 0x00AB},
+ {0, 0x098E, 0xBC15},
+ {0, 0x0990, 0x00B6},
+ {0, 0x098E, 0xBC16},
+ {0, 0x0990, 0x00C1},
+ {0, 0x098E, 0xBC17},
+ {0, 0x0990, 0x00CB},
+ {0, 0x098E, 0xBC18},
+ {0, 0x0990, 0x00D5},
+ {0, 0x098E, 0xBC19},
+ {0, 0x0990, 0x00DE},
+ {0, 0x098E, 0xBC1A},
+ {0, 0x0990, 0x00E7},
+ {0, 0x098E, 0xBC1B},
+ {0, 0x0990, 0x00EF},
+ {0, 0x098E, 0xBC1C},
+ {0, 0x0990, 0x00F7},
+ {0, 0x098E, 0xBC1D},
+ {0, 0x0990, 0x00FF},
+ {0, 0x098E, 0xBC1E},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xBC1F},
+ {0, 0x0990, 0x001B},
+ {0, 0x098E, 0xBC20},
+ {0, 0x0990, 0x002A},
+ {0, 0x098E, 0xBC21},
+ {0, 0x0990, 0x003E},
+ {0, 0x098E, 0xBC22},
+ {0, 0x0990, 0x005A},
+ {0, 0x098E, 0xBC23},
+ {0, 0x0990, 0x0070},
+ {0, 0x098E, 0xBC24},
+ {0, 0x0990, 0x0081},
+ {0, 0x098E, 0xBC25},
+ {0, 0x0990, 0x0090},
+ {0, 0x098E, 0xBC26},
+ {0, 0x0990, 0x009E},
+ {0, 0x098E, 0xBC27},
+ {0, 0x0990, 0x00AB},
+ {0, 0x098E, 0xBC28},
+ {0, 0x0990, 0x00B6},
+ {0, 0x098E, 0xBC29},
+ {0, 0x0990, 0x00C1},
+ {0, 0x098E, 0xBC2A},
+ {0, 0x0990, 0x00CB},
+ {0, 0x098E, 0xBC2B},
+ {0, 0x0990, 0x00D5},
+ {0, 0x098E, 0xBC2C},
+ {0, 0x0990, 0x00DE},
+ {0, 0x098E, 0xBC2D},
+ {0, 0x0990, 0x00E7},
+ {0, 0x098E, 0xBC2E},
+ {0, 0x0990, 0x00EF},
+ {0, 0x098E, 0xBC2F},
+ {0, 0x0990, 0x00F7},
+ {0, 0x098E, 0xBC30},
+ {0, 0x0990, 0x00FF},
+ {0, 0x098E, 0xBC31},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xBC32},
+ {0, 0x0990, 0x000D},
+ {0, 0x098E, 0xBC33},
+ {0, 0x0990, 0x0019},
+ {0, 0x098E, 0xBC34},
+ {0, 0x0990, 0x0030},
+ {0, 0x098E, 0xBC35},
+ {0, 0x0990, 0x0056},
+ {0, 0x098E, 0xBC36},
+ {0, 0x0990, 0x0070},
+ {0, 0x098E, 0xBC37},
+ {0, 0x0990, 0x0081},
+ {0, 0x098E, 0xBC38},
+ {0, 0x0990, 0x0090},
+ {0, 0x098E, 0xBC39},
+ {0, 0x0990, 0x009E},
+ {0, 0x098E, 0xBC3A},
+ {0, 0x0990, 0x00AB},
+ {0, 0x098E, 0xBC3B},
+ {0, 0x0990, 0x00B6},
+ {0, 0x098E, 0xBC3C},
+ {0, 0x0990, 0x00C1},
+ {0, 0x098E, 0xBC3D},
+ {0, 0x0990, 0x00CB},
+ {0, 0x098E, 0xBC3E},
+ {0, 0x0990, 0x00D5},
+ {0, 0x098E, 0xBC3F},
+ {0, 0x0990, 0x00DE},
+ {0, 0x098E, 0xBC40},
+ {0, 0x0990, 0x00E7},
+ {0, 0x098E, 0xBC41},
+ {0, 0x0990, 0x00EF},
+ {0, 0x098E, 0xBC42},
+ {0, 0x0990, 0x00F7},
+ {0, 0x098E, 0xBC43},
+ {0, 0x0990, 0x00FF},
+ {0, 0x098E, 0x6865},
+ {0, 0x0990, 0x00E0},
+ {0, 0x098E, 0x6867},
+ {0, 0x0990, 0x00F4},
+ {0, 0x098E, 0x8400},
+ {0, 0x0990, 0x0006},
+ {0, 0x098E, 0xBC4A},
+ {0, 0x0990, 0x007F},
+ {0, 0x098E, 0xBC4B},
+ {0, 0x0990, 0x007F},
+ {0, 0x098E, 0xBC4C},
+ {0, 0x0990, 0x007F},
+ {0, 0x3542, 0x0010},
+ {0, 0x3544, 0x0030},
+ {0, 0x3546, 0x0040},
+ {0, 0x3548, 0x0080},
+ {0, 0x354A, 0x0100},
+ {0, 0x354C, 0x0200},
+ {0, 0x354E, 0x0300},
+ {0, 0x3550, 0x0010},
+ {0, 0x3552, 0x0030},
+ {0, 0x3554, 0x0040},
+ {0, 0x3556, 0x0080},
+ {0, 0x3558, 0x012C},
+ {0, 0x355A, 0x0320},
+ {0, 0x355C, 0x03E8},
+ {0, 0x3560, 0x0040},
+ {0, 0x3562, 0x0020},
+ {0, 0x3564, 0x0040},
+ {0, 0x3566, 0x0010},
+ {0, 0x3568, 0x0008},
+ {0, 0x356A, 0x0004},
+ {0, 0x356C, 0x0004},
+ {0, 0x356E, 0x0004},
+ {0, 0x098E, 0x3C4D},
+ {0, 0x0990, 0x0DAC},
+ {0, 0x098E, 0x3C4F},
+ {0, 0x0990, 0x148A},
+ {0, 0x098E, 0xC911},
+ {0, 0x0990, 0x00C8},
+ {0, 0x098E, 0xC8F4},
+ {0, 0x0990, 0x0004},
+ {0, 0x098E, 0xC8F5},
+ {0, 0x0990, 0x0002},
+ {0, 0x098E, 0x48F6},
+ {0, 0x0990, 0x3B4D},
+ {0, 0x098E, 0x48F8},
+ {0, 0x0990, 0x6380},
+ {0, 0x098E, 0x48FA},
+ {0, 0x0990, 0x9B18},
+ {0, 0x098E, 0x48FC},
+ {0, 0x0990, 0x5D51},
+ {0, 0x098E, 0x48FE},
+ {0, 0x0990, 0xEDE8},
+ {0, 0x098E, 0x4900},
+ {0, 0x0990, 0xE515},
+ {0, 0x098E, 0x4902},
+ {0, 0x0990, 0xBFF4},
+ {0, 0x098E, 0x4904},
+ {0, 0x0990, 0x001E},
+ {0, 0x098E, 0x4906},
+ {0, 0x0990, 0x0026},
+ {0, 0x098E, 0x4908},
+ {0, 0x0990, 0x0033},
+ {0, 0x098E, 0xE84A},
+ {0, 0x0990, 0x0083},
+ {0, 0x098E, 0xE84D},
+ {0, 0x0990, 0x0083},
+ {0, 0x098E, 0xE84C},
+ {0, 0x0990, 0x0080},
+ {0, 0x098E, 0xE84F},
+ {0, 0x0990, 0x0080},
+ {0, 0x098E, 0x8400},
+ {0, 0x0990, 0x0006},
+ {0, 0x098E, 0x48B0},
+ {0, 0x0990, 0x0180},
+ {0, 0x098E, 0x48B2},
+ {0, 0x0990, 0xFF7A},
+ {0, 0x098E, 0x48B4},
+ {0, 0x0990, 0x0018},
+ {0, 0x098E, 0x48B6},
+ {0, 0x0990, 0xFFCA},
+ {0, 0x098E, 0x48B8},
+ {0, 0x0990, 0x017C},
+ {0, 0x098E, 0x48BA},
+ {0, 0x0990, 0xFFCC},
+ {0, 0x098E, 0x48BC},
+ {0, 0x0990, 0x000C},
+ {0, 0x098E, 0x48BE},
+ {0, 0x0990, 0xFF1F},
+ {0, 0x098E, 0x48C0},
+ {0, 0x0990, 0x01E8},
+ {0, 0x098E, 0x48C2},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0x48C4},
+ {0, 0x0990, 0x0044},
+ {0, 0x098E, 0x48C6},
+ {0, 0x0990, 0x0079},
+ {0, 0x098E, 0x48C8},
+ {0, 0x0990, 0xFFAD},
+ {0, 0x098E, 0x48CA},
+ {0, 0x0990, 0xFFE2},
+ {0, 0x098E, 0x48CC},
+ {0, 0x0990, 0x0033},
+ {0, 0x098E, 0x48CE},
+ {0, 0x0990, 0x002A},
+ {0, 0x098E, 0x48D0},
+ {0, 0x0990, 0xFFAA},
+ {0, 0x098E, 0x48D2},
+ {0, 0x0990, 0x0017},
+ {0, 0x098E, 0x48D4},
+ {0, 0x0990, 0x004B},
+ {0, 0x098E, 0x48D6},
+ {0, 0x0990, 0xFFA5},
+ {0, 0x098E, 0x48D8},
+ {0, 0x0990, 0x0015},
+ {0, 0x098E, 0x48DA},
+ {0, 0x0990, 0xFFE2},
+ {0, 0x35A2, 0x0014},
+ {0, 0x098E, 0xC949},
+ {0, 0x0990, 0x0024},
+ {0, 0x35A4, 0x0596},
+ {0, 0x098E, 0xC94A},
+ {0, 0x0990, 0x0062},
+ {0, 0x098E, 0xC948},
+ {0, 0x0990, 0x0006},
+ {0, 0x098E, 0xC914},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xC915},
+ {0, 0x0990, 0x00FF},
+ {0, 0x098E, 0xE86F},
+ {0, 0x0990, 0x0060},
+ {0, 0x098E, 0xE870},
+ {0, 0x0990, 0x003C},
+ {0, 0x098E, 0xEC6F},
+ {0, 0x0990, 0x0060},
+ {0, 0x098E, 0xEC70},
+ {0, 0x0990, 0x003C},
+ {0, 0x098E, 0xE883},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xEC83},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x8400},
+ {0, 0x0990, 0x0006},
+ {0, 0x098E, 0xE885},
+ {0, 0x0990, 0x001E},
+ {0, 0x098E, 0xE886},
+ {0, 0x0990, 0x00D8},
+ {0, 0x098E, 0xEC85},
+ {0, 0x0990, 0x001E},
+ {0, 0x098E, 0xEC86},
+ {0, 0x0990, 0x00D8},
+ {0, 0x098E, 0xE884},
+ {0, 0x0990, 0x005C},
+ {0, 0x098E, 0xEC84},
+ {0, 0x0990, 0x005C},
+ {0, 0x098E, 0x490A},
+ {0, 0x0990, 0x0666},
+ {0, 0x098E, 0x490C},
+ {0, 0x0990, 0x0140},
+ {0, 0x098E, 0x6857},
+ {0, 0x0990, 0x0014},
+ {0, 0x098E, 0x685C},
+ {0, 0x0990, 0x0005},
+ {0, 0x098E, 0x490E},
+ {0, 0x0990, 0x00A4},
+ {0, 0x098E, 0xB43D},
+ {0, 0x0990, 0x0031},
+ {0, 0x098E, 0xB43E},
+ {0, 0x0990, 0x001B},
+ {0, 0x098E, 0xB43F},
+ {0, 0x0990, 0x0028},
+ {0, 0x098E, 0xB440},
+ {0, 0x0990, 0x0003},
+ {0, 0x098E, 0xB441},
+ {0, 0x0990, 0x00CD},
+ {0, 0x098E, 0xB442},
+ {0, 0x0990, 0x0064},
+ {0, 0x098E, 0xB443},
+ {0, 0x0990, 0x000F},
+ {0, 0x098E, 0xB444},
+ {0, 0x0990, 0x0007},
+ {0, 0x098E, 0x300D},
+ {0, 0x0990, 0x000F},
+ {0, 0x098E, 0x3017},
+ {0, 0x0990, 0x0F0F},
+ {0, 0x098E, 0x8400},
+ {0, 0x0990, 0x0006},
+ {0, 0x098E, 0xE81F},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0x68A0},
+ {0, 0x0990, 0x082E},
+ {0, 0x098E, 0x6CA0},
+ {0, 0x0990, 0x082E},
+ {0, 0x098E, 0x70A0},
+ {0, 0x0990, 0x082E},
+ {0, 0x098E, 0x74A0},
+ {0, 0x0990, 0x082E},
+ {0, 0x3C52, 0x082E},
+ {0, 0x098E, 0x488E},
+ {0, 0x0990, 0x0020},
+ {0, 0x098E, 0xECAC},
+ {0, 0x0990, 0x0000}
+};
+
+mt9t111_regs def_regs2[] = {
+ {100, 0x0018, 0x0028},
+ {0, 0x316C, 0x350F},
+ {0, 0x098E, 0x6817},
+ {0, 0x0990, 0x000C},
+ {0, 0x0034, 0x0000}
+};
+
+mt9t111_regs pll_regs1[] = {
+ {0, 0x0014, 0x2425},
+ {0, 0x0014, 0x2425},
+ {0, 0x0014, 0x2145},
+ {0, 0x0010, 0x0219},
+ {0, 0x0012, 0x0090},
+ {0, 0x002A, 0x79DD},
+ {0, 0x0014, 0x2545},
+ {0, 0x0014, 0x2547},
+ {0, 0x0014, 0x3447},
+ {0, 0x0014, 0x3047}
+};
+
+mt9t111_regs pll_regs2[] = {
+ {0, 0x0014, 0x3046},
+ {0, 0x0022, 0x01E0},
+ {0, 0x001E, 0x0707},
+ {0, 0x3B84, 0x011D}
+};
+
+mt9t111_regs bayer_pattern_regs[] = {
+ {0, 0x098E, 0x6807},
+ {0, 0x0990, 0x0100},
+ {0, 0x098E, 0x6809},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xE88E},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0x6C07},
+ {0, 0x0990, 0x0100},
+ {0, 0x098E, 0x6C09},
+ {0, 0x0990, 0x0000},
+ {0, 0x098E, 0xEC8E},
+ {0, 0x0990, 0x0000}
+};
+
+#endif
diff --git a/drivers/media/video/mt9t112.c b/drivers/media/video/mt9t112.c
index 32114a3..aba49e2 100644
--- a/drivers/media/video/mt9t112.c
+++ b/drivers/media/video/mt9t112.c
@@ -24,12 +24,16 @@
#include <linux/slab.h>
#include <linux/v4l2-mediabus.h>
#include <linux/videodev2.h>
+#include <linux/regulator/consumer.h>

#include <media/mt9t112.h>
+#include <media/mt9t111.h>
#include <media/soc_camera.h>
#include <media/v4l2-chip-ident.h>
#include <media/v4l2-common.h>

+#include "mt9t111_reg.h"
+
/* you can check PLL/clock info */
/* #define EXT_CLOCK 24000000 */

@@ -88,11 +92,15 @@ struct mt9t112_format {
struct mt9t112_priv {
struct v4l2_subdev subdev;
struct mt9t112_camera_info *info;
+ struct media_pad pad;
struct i2c_client *client;
struct v4l2_rect frame;
const struct mt9t112_format *format;
+ struct v4l2_mbus_framefmt fmt;
int model;
u32 flags;
+ struct regulator *omap3evm_1v8;
+ struct regulator *omap3evm_2v8;
/* for flags */
#define INIT_DONE (1 << 0)
#define PCLK_RISING (1 << 1)
@@ -206,6 +214,33 @@ static int __mt9t112_reg_write(const struct i2c_client *client,
return ret;
}

+static int mt9t111_write_regs(struct i2c_client *client,
+ mt9t111_regs *reg_in, int cnt)
+{
+ int err = 0, i;
+ mt9t111_regs *reg = reg_in;
+
+ for (i = 0; i < cnt; i++) {
+ if (reg->delay_time == 0) {
+ mt9t112_reg_write(err, client, reg->addr, reg->data);
+ } else if (reg->addr != 0 || reg->data != 0) {
+ mt9t112_reg_write(err, client, reg->addr, reg->data);
+ mdelay(reg->delay_time);
+ } else {
+ mdelay(reg->delay_time);
+ }
+ if (err < 0) {
+ dev_warn(&client->dev, "write reg error, addr = 0x%x,"
+ "data = 0x%x\n",
+ reg->addr, reg->data);
+ return err;
+ }
+ reg++;
+ }
+
+ return err;
+}
+
static int __mt9t112_reg_mask_set(const struct i2c_client *client,
u16 command,
u16 mask,
@@ -733,6 +768,82 @@ static int mt9t112_init_camera(const struct i2c_client *client)
return ret;
}

+static int mt9t111_configure(struct v4l2_subdev *subdev)
+{
+ int i, ret = 0;
+ unsigned short value;
+ struct i2c_client *client = v4l2_get_subdevdata(subdev);
+
+ mt9t112_reg_write(ret, client, 0x001A, 0x001D);
+ if (ret)
+ goto out;
+
+ msleep(1);
+
+ mt9t112_reg_write(ret, client, 0x001A, 0x0018);
+ if (ret)
+ goto out;
+
+ ret = mt9t111_write_regs(client, pll_regs1,
+ sizeof(pll_regs1) / sizeof(mt9t111_regs));
+ if (ret)
+ goto out;
+
+ for (i = 0; i < 100; i++) {
+ mt9t112_reg_read(value, client, 0x0014);
+ if ((value & 0x8000) != 0)
+ break;
+ mdelay(2);
+ }
+
+ ret = mt9t111_write_regs(client, pll_regs2,
+ sizeof(pll_regs2) / sizeof(mt9t111_regs));
+ if (ret)
+ goto out;
+
+ ret = mt9t111_write_regs(client, def_regs1,
+ sizeof(def_regs1) / sizeof(mt9t111_regs));
+ if (ret)
+ goto out;
+
+ ret = mt9t111_write_regs(client, patch_rev6,
+ sizeof(patch_rev6) / sizeof(mt9t111_regs));
+ if (ret)
+ goto out;
+
+ ret = mt9t111_write_regs(client, def_regs2,
+ sizeof(def_regs2) / sizeof(mt9t111_regs));
+ if (ret)
+ goto out;
+
+ /* MCU_ADDRESS [SEQ_CMD] -- refresh mode */
+ mt9t112_reg_write(ret, client, 0x098E, 0x8400);
+ if (ret)
+ goto out;
+ mt9t112_reg_write(ret, client, 0x0990, 0x0006);
+ if (ret)
+ goto out;
+
+ /* refresh command */
+ mt9t112_reg_write(ret, client, 0x098E, 0x8400);
+ if (ret)
+ goto out;
+ mt9t112_reg_write(ret, client, 0x0990, 0x0005);
+ if (ret)
+ goto out;
+ for (i = 0; i < 100; i++) {
+ mt9t112_reg_write(ret, client, 0x098E, 0x8400);
+ if (ret)
+ break;
+ mt9t112_reg_read(value , client, 0x0990);
+ if (value == 0)
+ break;
+ mdelay(5);
+ }
+out:
+ return ret;
+}
+
/************************************************************************
v4l2_subdev_core_ops
************************************************************************/
@@ -775,15 +886,72 @@ static int mt9t112_s_register(struct v4l2_subdev *sd,
}
#endif

+static int omap3evm_regulator_ctrl(struct mt9t112_priv *priv, u32 on)
+{
+ if (!(priv->omap3evm_1v8) || !(priv->omap3evm_2v8)) {
+ printk(KERN_ERR "No regulator available\n");
+ return -ENODEV;
+ }
+ if (on) {
+ regulator_enable(priv->omap3evm_1v8);
+ mdelay(1);
+ regulator_enable(priv->omap3evm_2v8);
+ mdelay(50);
+ } else {
+ if (regulator_is_enabled(priv->omap3evm_1v8))
+ regulator_disable(priv->omap3evm_1v8);
+ if (regulator_is_enabled(priv->omap3evm_2v8))
+ regulator_disable(priv->omap3evm_2v8);
+ }
+ return 0;
+}
+
+static int mt9t111_s_power(struct v4l2_subdev *subdev, int on)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(subdev);
+ struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
+ struct mt9t112_priv *priv = to_mt9t112(client);
+ struct mt9t111_platform_data *pdata;
+ int rval;
+
+ pdata = (struct mt9t111_platform_data *) icl;
+ if (on) {
+ rval = omap3evm_regulator_ctrl(priv, on);
+ if (rval)
+ goto out;
+
+ rval = pdata->s_power(subdev, 1);
+ if (rval)
+ goto out;
+
+ rval = mt9t111_configure(subdev);
+ if (rval) {
+ pdata->s_power(subdev, 0);
+ goto out;
+ }
+
+ } else {
+ rval = pdata->s_power(subdev, 0);
+ if (rval)
+ goto out;
+ }
+
+out:
+ if (rval)
+ v4l_err(client, "Unable to set target power state\n");
+
+ return rval;
+}
+
static struct v4l2_subdev_core_ops mt9t112_subdev_core_ops = {
.g_chip_ident = mt9t112_g_chip_ident,
+ .s_power = mt9t111_s_power,
#ifdef CONFIG_VIDEO_ADV_DEBUG
- .g_register = mt9t112_g_register,
- .s_register = mt9t112_s_register,
+ .g_register = mt9t112_g_register,
+ .s_register = mt9t112_s_register,
#endif
};

-
/************************************************************************
v4l2_subdev_video_ops
************************************************************************/
@@ -793,51 +961,56 @@ static int mt9t112_s_stream(struct v4l2_subdev *sd, int enable)
struct mt9t112_priv *priv = to_mt9t112(client);
int ret = 0;

- if (!enable) {
- /* FIXME
- *
- * If user selected large output size,
- * and used it long time,
- * mt9t112 camera will be very warm.
- *
- * But current driver can not stop mt9t112 camera.
- * So, set small size here to solve this problem.
- */
- mt9t112_set_a_frame_size(client, VGA_WIDTH, VGA_HEIGHT);
+ if (priv->model == V4L2_IDENT_MT9T111) {
return ret;
- }

- if (!(priv->flags & INIT_DONE)) {
- u16 param = PCLK_RISING & priv->flags ? 0x0001 : 0x0000;
+ } else {
+ if (!enable) {
+ /* FIXME
+ *
+ * If user selected large output size,
+ * and used it long time,
+ * mt9t112 camera will be very warm.
+ *
+ * But current driver can not stop mt9t112 camera.
+ * So, set small size here to solve this problem.
+ */
+ mt9t112_set_a_frame_size(client, VGA_WIDTH, VGA_HEIGHT);
+ return ret;
+ }

- ECHECKER(ret, mt9t112_init_camera(client));
+ if (!(priv->flags & INIT_DONE)) {
+ u16 param = PCLK_RISING & priv->flags ? 0x0001 : 0x0000;

- /* Invert PCLK (Data sampled on falling edge of pixclk) */
- mt9t112_reg_write(ret, client, 0x3C20, param);
+ ECHECKER(ret, mt9t112_init_camera(client));

- mdelay(5);
+ /* Invert PCLK (Data sampled on falling edge of pixclk) */
+ mt9t112_reg_write(ret, client, 0x3C20, param);

- priv->flags |= INIT_DONE;
- }
+ mdelay(5);

- mt9t112_mcu_write(ret, client, VAR(26, 7), priv->format->fmt);
- mt9t112_mcu_write(ret, client, VAR(26, 9), priv->format->order);
- mt9t112_mcu_write(ret, client, VAR8(1, 0), 0x06);
+ priv->flags |= INIT_DONE;
+ }

- mt9t112_set_a_frame_size(client,
- priv->frame.width,
- priv->frame.height);
+ mt9t112_mcu_write(ret, client, VAR(26, 7), priv->format->fmt);
+ mt9t112_mcu_write(ret, client, VAR(26, 9), priv->format->order);
+ mt9t112_mcu_write(ret, client, VAR8(1, 0), 0x06);

- ECHECKER(ret, mt9t112_auto_focus_trigger(client));
+ mt9t112_set_a_frame_size(client,
+ priv->frame.width,
+ priv->frame.height);

- dev_dbg(&client->dev, "format : %d\n", priv->format->code);
- dev_dbg(&client->dev, "size : %d x %d\n",
- priv->frame.width,
- priv->frame.height);
+ ECHECKER(ret, mt9t112_auto_focus_trigger(client));

- CLOCK_INFO(client, EXT_CLOCK);
+ dev_dbg(&client->dev, "format : %d\n", priv->format->code);
+ dev_dbg(&client->dev, "size : %d x %d\n",
+ priv->frame.width,
+ priv->frame.height);

- return ret;
+ CLOCK_INFO(client, EXT_CLOCK);
+
+ return ret;
+ }
}

static int mt9t112_set_params(struct mt9t112_priv *priv,
@@ -1019,11 +1192,60 @@ static struct v4l2_subdev_video_ops mt9t112_subdev_video_ops = {
};

/************************************************************************
+ v4l2_subdev_pad_ops
+************************************************************************/
+static int mt9t111_get_pad_format(struct v4l2_subdev *subdev,
+ struct v4l2_subdev_fh *fh,
+ struct v4l2_subdev_format *fmt)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(subdev);
+ struct mt9t112_priv *priv = to_mt9t112(client);
+
+ fmt->format = priv->fmt;
+ return 0;
+}
+
+static int mt9t111_set_pad_format(struct v4l2_subdev *subdev,
+ struct v4l2_subdev_fh *fh,
+ struct v4l2_subdev_format *fmt)
+{
+ int i;
+ struct i2c_client *client = v4l2_get_subdevdata(subdev);
+ struct mt9t112_priv *priv = to_mt9t112(client);
+
+ for (i = 0; i < ARRAY_SIZE(mt9t112_cfmts); i++) {
+ if (fmt->format.code == mt9t112_cfmts[i].code)
+ goto fmt_found;
+ }
+ if (i >= ARRAY_SIZE(mt9t112_cfmts))
+ return -EINVAL;
+
+fmt_found:
+ /*
+ * Only VGA resolution supported
+ */
+ fmt->format.width = VGA_WIDTH;
+ fmt->format.height = VGA_HEIGHT;
+ fmt->format.field = V4L2_FIELD_NONE;
+ fmt->format.colorspace = V4L2_COLORSPACE_JPEG;
+
+ priv->fmt = fmt->format;
+
+ return 0;
+}
+
+static const struct v4l2_subdev_pad_ops mt9t111_pad_ops = {
+ .get_fmt = mt9t111_get_pad_format,
+ .set_fmt = mt9t111_set_pad_format,
+};
+
+/************************************************************************
i2c driver
************************************************************************/
static struct v4l2_subdev_ops mt9t112_subdev_ops = {
.core = &mt9t112_subdev_core_ops,
.video = &mt9t112_subdev_video_ops,
+ .pad = &mt9t111_pad_ops,
};

static int mt9t112_camera_probe(struct i2c_client *client)
@@ -1089,6 +1311,32 @@ static int mt9t112_probe(struct i2c_client *client,
/* Cannot fail: using the default supported pixel code */
mt9t112_set_params(priv, &rect, V4L2_MBUS_FMT_UYVY8_2X8);

+ if (priv->model == V4L2_IDENT_MT9T111) {
+ priv->omap3evm_1v8 = regulator_get(NULL, "vio_1v8");
+ if (IS_ERR(priv->omap3evm_1v8)) {
+ printk(KERN_ERR "vio_1v8 regulator missing\n");
+ ret = PTR_ERR(priv->omap3evm_1v8);
+ goto err_1;
+ }
+ priv->omap3evm_2v8 = regulator_get(NULL, "cam_2v8");
+ if (IS_ERR(priv->omap3evm_2v8)) {
+ printk(KERN_ERR "cam_2v8 regulator missing\n");
+ ret = PTR_ERR(priv->omap3evm_2v8);
+ goto err_2;
+ }
+
+ priv->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+ priv->pad.flags = MEDIA_PAD_FL_SOURCE;
+ ret = media_entity_init(&priv->subdev.entity, 1, &priv->pad, 0);
+ if (!ret)
+ return 0;
+ kfree(priv);
+err_2:
+ regulator_put(priv->omap3evm_2v8);
+err_1:
+ regulator_put(priv->omap3evm_1v8);
+ }
+
return ret;
}

diff --git a/include/media/mt9t111.h b/include/media/mt9t111.h
new file mode 100644
index 0000000..372dc0d
--- /dev/null
+++ b/include/media/mt9t111.h
@@ -0,0 +1,45 @@
+/*
+ * include/media/mt9t111.h
+ *
+ * mt9t111 sensor driver
+ *
+ * Copyright (C) 2009 Leopard Imaging
+ *
+ * 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.
+ */
+
+#ifndef MT9T111_H
+#define MT9T111_H
+
+struct v4l2_subdev;
+
+/*
+ * Defines and Macros and globals
+ */
+#define MT9T111_MODULE_NAME "mt9t112"
+
+/*i2c adress for MT9T111*/
+#define MT9T111_I2C_ADDR (0x78 >> 1)
+
+#define MT9T111_CLK_MAX (96000000) /* 96MHz */
+#define MT9T111_CLK_MIN (6000000) /* 6Mhz */
+
+#define MT9T111_I2C_CONFIG (1)
+#define I2C_ONE_BYTE_TRANSFER (1)
+#define I2C_TWO_BYTE_TRANSFER (2)
+#define I2C_THREE_BYTE_TRANSFER (3)
+#define I2C_FOUR_BYTE_TRANSFER (4)
+#define I2C_TXRX_DATA_MASK (0x00FF)
+#define I2C_TXRX_DATA_MASK_UPPER (0xFF00)
+#define I2C_TXRX_DATA_SHIFT (8)
+
+struct mt9t111_platform_data {
+ int (*s_power) (struct v4l2_subdev *subdev, u32 on);
+ int (*set_xclk) (struct v4l2_subdev *subdev, u32 hz);
+ int (*configure_interface) (struct v4l2_subdev *subdev, u32 pixclk);
+};
+
+#endif /* ifndef MT9T111 */
+
--
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/