linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor
@ 2011-09-20 14:56 Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 1/5] omap3evm: Enable regulators for camera interface Deepthy Ravi
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Deepthy Ravi @ 2011-09-20 14:56 UTC (permalink / raw)
  To: linux-arm-kernel

This patchset
	-adds support for MT9T111 sensor on omap3evm.
	Currently the sensor driver supports only
	VGA resolution.
	-enables MT9T111 sensor in omap2plus_defconfig.

This is applied on top of the following patchset
http://www.spinics.net/lists/linux-media/msg37270.html 
which adds YUYV input support for OMAP3ISP.
---

Deepthy Ravi (2):
  ispccdc: Configure CCDC_SYN_MODE register for     UYVY8_2X8 and
    YUYV8_2X8 formats
  omap2plus_defconfig: Enable omap3isp and MT9T111     sensor drivers

Vaibhav Hiremath (3):
  omap3evm: Enable regulators for camera interface
  [media] v4l: Add mt9t111 sensor driver
  omap3evm: Add Camera board init/hookup file

 arch/arm/configs/omap2plus_defconfig        |   10 +
 arch/arm/mach-omap2/Makefile                |    5 +
 arch/arm/mach-omap2/board-omap3evm-camera.c |  185 ++++
 arch/arm/mach-omap2/board-omap3evm.c        |   25 +
 drivers/media/video/Kconfig                 |    7 +
 drivers/media/video/Makefile                |    1 +
 drivers/media/video/mt9t111.c               |  793 ++++++++++++++++
 drivers/media/video/mt9t111_reg.h           | 1367 +++++++++++++++++++++++++++
 drivers/media/video/omap3isp/ispccdc.c      |   11 +-
 include/media/mt9t111.h                     |   45 +
 10 files changed, 2446 insertions(+), 3 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap3evm-camera.c
 create mode 100644 drivers/media/video/mt9t111.c
 create mode 100644 drivers/media/video/mt9t111_reg.h
 create mode 100644 include/media/mt9t111.h

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/5] omap3evm: Enable regulators for camera interface
  2011-09-20 14:56 [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor Deepthy Ravi
@ 2011-09-20 14:56 ` Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver Deepthy Ravi
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: Deepthy Ravi @ 2011-09-20 14:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Vaibhav Hiremath <hvaibhav@ti.com>

Enabled 1v8 and 2v8 regulator output, which is being used by
camera module.

Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
---
 arch/arm/mach-omap2/board-omap3evm.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index c452b3f..cf30fff 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -273,6 +273,25 @@ static struct omap_dss_board_info omap3_evm_dss_data = {
 	.default_device	= &omap3_evm_lcd_device,
 };
 
+static struct regulator_consumer_supply omap3evm_vaux3_supply[] = {
+	REGULATOR_SUPPLY("cam_2v8", NULL),
+};
+
+/* VAUX3 for CAM_2V8 */
+static struct regulator_init_data omap3evm_vaux3 = {
+	.constraints = {
+		.min_uV                 = 2800000,
+		.max_uV                 = 2800000,
+		.apply_uV               = true,
+		.valid_modes_mask       = REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask         = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+		},
+	.num_consumer_supplies  = ARRAY_SIZE(omap3evm_vaux3_supply),
+	.consumer_supplies      = omap3evm_vaux3_supply,
+};
+
 static struct regulator_consumer_supply omap3evm_vmmc1_supply[] = {
 	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
 };
@@ -433,6 +452,7 @@ static struct twl4030_keypad_data omap3evm_kp_data = {
 /* ads7846 on SPI */
 static struct regulator_consumer_supply omap3evm_vio_supply[] = {
 	REGULATOR_SUPPLY("vcc", "spi1.0"),
+	REGULATOR_SUPPLY("vio_1v8", NULL),
 };
 
 /* VIO for ads7846 */
@@ -499,6 +519,7 @@ static struct twl4030_platform_data omap3evm_twldata = {
 	.vio		= &omap3evm_vio,
 	.vmmc1		= &omap3evm_vmmc1,
 	.vsim		= &omap3evm_vsim,
+	.vaux3          = &omap3evm_vaux3,
 };
 
 static int __init omap3_evm_i2c_init(void)
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver
  2011-09-20 14:56 [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 1/5] omap3evm: Enable regulators for camera interface Deepthy Ravi
@ 2011-09-20 14:56 ` Deepthy Ravi
  2011-09-20 15:09   ` Guennadi Liakhovetski
  2011-09-20 14:56 ` [PATCH 3/5] omap3evm: Add Camera board init/hookup file Deepthy Ravi
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: Deepthy Ravi @ 2011-09-20 14:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Vaibhav Hiremath <hvaibhav@ti.com>

The MT9T111 is a 3.1Mp CMOS sensor from Aptina with
its latest image signal processing (ISP) and 1.75??m
pixel technology.
The sensor driver currently supports only VGA
resolution.

Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
---
 drivers/media/video/Kconfig       |    7 +
 drivers/media/video/Makefile      |    1 +
 drivers/media/video/mt9t111.c     |  793 +++++++++++++++++++++
 drivers/media/video/mt9t111_reg.h | 1367 +++++++++++++++++++++++++++++++++++++
 include/media/mt9t111.h           |   45 ++
 5 files changed, 2213 insertions(+), 0 deletions(-)
 create mode 100644 drivers/media/video/mt9t111.c
 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 f574dc0..ca374cb 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 2723900..52cfef5 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) += mt9t111.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.c b/drivers/media/video/mt9t111.c
new file mode 100644
index 0000000..5f6131a
--- /dev/null
+++ b/drivers/media/video/mt9t111.c
@@ -0,0 +1,793 @@
+/*
+ * drivers/media/video/mt9t111.c
+ *
+ * mt9t111 sensor driver
+ *
+ * Copyright (C) 2010 Texas Instruments Inc
+ * Author: Vaibhav Hiremath <hvaibhav@ti.com>
+
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/i2c.h>
+#include <linux/delay.h>
+#include <linux/slab.h>
+#include <linux/v4l2-mediabus.h>
+#include <linux/regulator/consumer.h>
+
+#include <media/v4l2-device.h>
+#include <media/v4l2-subdev.h>
+#include <media/v4l2-ctrls.h>
+#include <media/mt9t111.h>
+
+#include "mt9t111_reg.h"
+
+/*
+ * struct mt9t111 - main structure for storage of sensor information
+ * @subdev: V4L2 sub-device structure structure
+ * @pad: Media entity pad structure
+ * @format: Media-bus format
+ * @rect:
+ * @pix: V4L2 pixel format information structure
+ * @ctrls: v4l2 control handler
+ * @frameival: sub-dev pad frame interval
+ * @pdata: access functions and data for platform level information
+ * @ver: mt9t111 chip version
+ * @power: Turn on OR off the interface
+ * @omap3evm_1v8: pointer to the regulator used for camera interface
+ * @omap3evm_2v8: pointer to the regulator used for camera interface
+ */
+struct mt9t111 {
+	struct v4l2_subdev		subdev;
+	struct media_pad		pad;
+	struct v4l2_mbus_framefmt	format;
+	struct v4l2_rect		rect;
+	struct v4l2_pix_format		pix;
+
+	struct v4l2_ctrl_handler ctrls;
+
+	struct mt9t111_platform_data	*pdata;
+	int				ver;
+	unsigned int			power;
+	struct regulator		*omap3evm_1v8;
+	struct regulator		*omap3evm_2v8;
+};
+
+#define to_mt9t111(sd)  container_of(sd, struct mt9t111, subdev)
+
+/*
+ * struct mt9t111_fmt -
+ * @mbus_code: associated media bus code
+ * @fmt: format descriptor
+ */
+struct mt9t111_fmt {
+	unsigned int mbus_code;
+	struct v4l2_fmtdesc fmt;
+};
+
+/*
+ * List of image formats supported by mt9t111
+ * Currently we are using 8 bit and 8x2 bit mode only, but can be
+ * extended to 10 bit mode.
+ */
+static const struct mt9t111_fmt mt9t111_fmt_list[] = {
+	{
+		.mbus_code = V4L2_MBUS_FMT_UYVY8_2X8,
+		.fmt = {
+			.index = 0,
+			.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+			.flags = 0,
+			.description = "8-bit UYVY 4:2:2 Format",
+			.pixelformat = V4L2_PIX_FMT_UYVY,
+		},
+	},
+	{
+		.mbus_code = V4L2_MBUS_FMT_YUYV8_2X8,
+		.fmt = {
+			.index = 1,
+			.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+			.flags = 0,
+			.description = "8-bit YUYV 4:2:2 Format",
+			.pixelformat = V4L2_PIX_FMT_YUYV,
+		},
+	},
+	{
+		.mbus_code = V4L2_MBUS_FMT_RGB565_2X8_LE,
+		.fmt = {
+			.index = 2,
+			.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
+			.flags = 0,
+			.description = "16-bit RGB565 format",
+			.pixelformat = V4L2_PIX_FMT_RGB565,
+		},
+	},
+};
+
+/*
+ * mt9t111_read_reg - Read a value from a register in an mt9t111 sensor device
+ * @client: i2c driver client structure
+ * @data_length: length of data to be read
+ * @reg: register address / offset
+ * @val: stores the value that gets read
+ *
+ * Read a value from a register in an mt9t111 sensor device.
+ * The value is returned in 'val'.
+ * Returns zero if successful, or non-zero otherwise.
+ */
+static int mt9t111_read_reg(struct i2c_client *client, u16 reg, u16 *val)
+{
+	struct i2c_msg msg[1];
+	u8 data[4];
+	int err;
+
+	msg->addr = client->addr;
+	msg->flags = 0;
+	msg->len = 2;
+	msg->buf = data;
+	data[0] = (reg & 0xff00) >> 8;
+	data[1] = (reg & 0x00ff);
+	err = i2c_transfer(client->adapter, msg, 1);
+	if (err >= 0) {
+		msg->flags = I2C_M_RD;
+		msg->len = 2;	/* 2 byte read */
+		err = i2c_transfer(client->adapter, msg, 1);
+		if (err >= 0) {
+			*val = ((data[0] & 0x00ff) << 8)
+				| (data[1] & 0x00ff);
+			return 0;
+		}
+	}
+	return err;
+}
+
+/*
+ * mt9t111_write_reg - Write a value to a register in an mt9t111 sensor device
+ * @client: i2c driver client structure
+ * @data_length: length of data to be read
+ * @reg: register address / offset
+ * @val: value to be written to specified register
+ *
+ * Write a value to a register in an mt9t111 sensor device.
+ * Returns zero if successful, or non-zero otherwise.
+ */
+static int mt9t111_write_reg(struct i2c_client *client, u16 reg, u16 val)
+{
+	struct i2c_msg msg[1];
+	u8 data[20];
+	int err;
+
+	msg->addr = client->addr;
+	msg->flags = 0;
+	msg->len = 4;
+	msg->buf = data;
+	data[0] = (u8)((reg & 0xff00) >> 8);
+	data[1] = (u8)(reg & 0x00ff);
+	data[2] = (u8)((val & 0xff00) >> 8);
+	data[3] = (u8)(val & 0x00ff);
+	err = i2c_transfer(client->adapter, msg, 1);
+	if (err < 0)
+		return err;
+
+	return 0;
+}
+
+/*
+ * mt9t111_write_regs - Write registers to an mt9t111 sensor device
+ * @client: i2c driver client structure
+ * @reg_in: pointer to registers to write
+ * @cnt: the number of registers
+ *
+ * Write registers .
+ * Returns zero if successful, or non-zero otherwise.
+ */
+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) {
+			err |= mt9t111_write_reg(client, reg->addr, reg->data);
+		} else if (reg->addr != 0 || reg->data != 0) {
+			err |= mt9t111_write_reg(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 mt9t111_refresh(struct i2c_client *client)
+{
+	int i, err = 0;
+	unsigned short value;
+
+	/* MCU_ADDRESS [SEQ_CMD] -- refresh mode */
+	err = mt9t111_write_reg(client, 0x098E, 0x8400);
+	if (err)
+		return err;
+	err = mt9t111_write_reg(client, 0x0990, 0x0006);
+	if (err)
+		return err;
+
+	/* refresh command */
+	err = mt9t111_write_reg(client, 0x098E, 0x8400);
+	if (err)
+		return err;
+	err = mt9t111_write_reg(client, 0x0990, 0x0005);
+	if (err)
+		return err;
+
+	for (i = 0; i < 100; i++) {
+		err = mt9t111_write_reg(client, 0x098E, 0x8400);
+		if (err)
+			break;
+		err = mt9t111_read_reg(client, 0x0990, &value);
+		if ((value == 0) || (err))
+			break;
+		mdelay(5);
+	}
+
+	return err;
+}
+
+static int mt9t111_enable_pll(struct i2c_client *client)
+{
+	int i, err = 0;
+	unsigned short value;
+
+	err = mt9t111_write_regs(client, pll_regs1,
+			   sizeof(pll_regs1) / sizeof(mt9t111_regs));
+	if (err)
+		return err;
+
+	for (i = 0; i < 100; i++) {
+		err = mt9t111_read_reg(client, 0x0014, &value);
+		if (((value & 0x8000) != 0) || (err))
+			break;
+		mdelay(2);
+	}
+	err = mt9t111_write_regs(client, pll_regs2,
+			   sizeof(pll_regs2) / sizeof(mt9t111_regs));
+	return err;
+}
+
+/*
+ * mt9t111_configure - Configure the mt9t111 for the specified image mode
+ * @s: pointer to standard V4L2 device structure
+ *
+ * Configure the mt9t111 for a specified image size, pixel format, and frame
+ * period.  xclk is the frequency (in Hz) of the xclk input to the mt9t111.
+ * fper is the frame period (in seconds) expressed as a fraction.
+ * Returns zero if successful, or non-zero otherwise.
+ * The actual frame period is returned in fper.
+ */
+static int mt9t111_configure(struct v4l2_subdev *subdev)
+{
+	struct i2c_client *client = v4l2_get_subdevdata(subdev);
+	int err = 0;
+
+	err = mt9t111_write_reg(client, 0x001A, 0x001D);
+	if (err < 0)
+		return err;
+
+	msleep(1);
+
+	err = mt9t111_write_reg(client, 0x001A, 0x0018);
+	if (err < 0)
+		goto out;
+
+	err = mt9t111_enable_pll(client);
+	if (err)
+		goto out;
+
+	err = mt9t111_write_regs(client, def_regs1,
+			   sizeof(def_regs1) / sizeof(mt9t111_regs));
+	if (err)
+		goto out;
+
+	err = mt9t111_write_regs(client, patch_rev6,
+			   sizeof(patch_rev6) / sizeof(mt9t111_regs));
+	if (err)
+		goto out;
+
+	err = mt9t111_write_regs(client, def_regs2,
+			   sizeof(def_regs2) / sizeof(mt9t111_regs));
+	if (err)
+		goto out;
+
+	err = mt9t111_refresh(client);
+out:
+	return err;
+}
+
+/*
+ * mt9t111_detect - Detect if an mt9t111 is present, and if so which revision
+ * @subdev: pointer to the V4L2 sub-device driver structure
+ *
+ * Detect if an mt9t111 is present
+ * Returns a negative error number if no device is detected, or the
+ * non-negative value of the version ID register if a device is detected.
+ */
+static int mt9t111_detect(struct v4l2_subdev *subdev)
+{
+	u16 val;
+	struct i2c_client *client = v4l2_get_subdevdata(subdev);
+
+	/* chip ID is@address 0 */
+	if (mt9t111_read_reg(client, MT9T111_CHIP_ID, &val) < 0)
+		return -ENODEV;
+
+	if (val != MT9T111_CHIP_ID_VALUE) {
+		dev_err(&client->dev, "model id mismatch received 0x%x"
+				" expecting 0x%x\n",
+				val, MT9T111_CHIP_ID_VALUE);
+		return -ENODEV;
+	}
+
+	return (int)val;
+
+}
+
+/*
+ * mt9t111_dev_init - sensor init, tries to detect the sensor
+ * @subdev: pointer to standard V4L2 subdev structure
+ */
+
+static int mt9t111_dev_init(struct v4l2_subdev *subdev)
+{
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+	struct i2c_client *client = v4l2_get_subdevdata(subdev);
+	int rval;
+
+	rval = mt9t111->pdata->s_power(subdev, 1);
+	if (rval)
+		return rval;
+
+	rval = mt9t111_detect(subdev);
+	if (rval < 0) {
+		v4l_err(client, "Unable to detect"
+				MT9T111_MODULE_NAME "sensor\n");
+		goto out;
+	}
+	mt9t111->ver = rval;
+	v4l_info(client, MT9T111_MODULE_NAME
+			" chip version 0x%02x detected\n", mt9t111->ver);
+	rval = 0;
+out:
+	mt9t111->pdata->s_power(subdev, 0);
+	return rval;
+}
+
+static int omap3evm_regulator_ctrl(struct mt9t111 *mt9t111, u32 on)
+{
+	if (!(mt9t111->omap3evm_1v8) || !(mt9t111->omap3evm_2v8)) {
+		printk(KERN_ERR "No regulator available\n");
+		return -ENODEV;
+	}
+	if (on) {
+		regulator_enable(mt9t111->omap3evm_1v8);
+		mdelay(1);
+		regulator_enable(mt9t111->omap3evm_2v8);
+		mdelay(50);
+	} else {
+		if (regulator_is_enabled(mt9t111->omap3evm_1v8))
+			regulator_disable(mt9t111->omap3evm_1v8);
+		if (regulator_is_enabled(mt9t111->omap3evm_2v8))
+			regulator_disable(mt9t111->omap3evm_2v8);
+	}
+	return 0;
+}
+
+/* -----------------------------------------------------------------------------
+ * V4L2 subdev core operations
+ */
+/*
+ * mt9t111_s_power - V4L2 sensor interface handler for s_power
+ * @s: pointer to standard V4L2 device structure
+ * @on: power state to which device is to be set
+ *
+ * Sets devices power state to requrested state, if possible.
+ */
+static int mt9t111_s_power(struct v4l2_subdev *subdev, int on)
+{
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+	struct i2c_client *client = v4l2_get_subdevdata(subdev);
+	int rval;
+
+	if (on) {
+		rval = omap3evm_regulator_ctrl(mt9t111, on);
+		if (rval)
+			goto out;
+
+		rval = mt9t111->pdata->s_power(subdev, 1);
+		if (rval)
+			goto out;
+
+		rval = mt9t111_configure(subdev);
+		if (rval) {
+			mt9t111->pdata->s_power(subdev, 0);
+			goto out;
+		}
+	} else {
+		rval = mt9t111->pdata->s_power(subdev, 0);
+		if (rval)
+			goto out;
+	}
+
+	mt9t111->power = on;
+
+out:
+	if (rval)
+		v4l_err(client, "Unable to set target power state\n");
+
+	return rval;
+}
+
+/* --------------------------------------------------------------------------
+ * V4L2 subdev internal operations
+ */
+/*
+ * mt9t111_registered - called when subdevice is registered
+ * @subdev: pointer to standard V4L2 subdev structure
+ */
+static int mt9t111_registered(struct v4l2_subdev *subdev)
+{
+
+	return mt9t111_dev_init(subdev);
+}
+
+static int mt9t111_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh)
+{
+	struct v4l2_mbus_framefmt *format;
+	struct v4l2_rect *crop;
+
+	/*
+	 * Default configuration -
+	 *	Resolution: VGA
+	 *	Format: UYVY
+	 *	crop = window
+	 */
+	crop = v4l2_subdev_get_try_crop(fh, 0);
+	crop->left = 0;
+	crop->top = 0;
+	crop->width = MT9T111_IMAGE_WIDTH;
+	crop->height = MT9T111_IMAGE_HEIGHT;
+
+	format = v4l2_subdev_get_try_format(fh, 0);
+	format->code = V4L2_MBUS_FMT_UYVY8_2X8;
+	format->width = MT9T111_IMAGE_WIDTH;
+	format->height = MT9T111_IMAGE_HEIGHT;
+	format->field = V4L2_FIELD_NONE;
+	format->colorspace = V4L2_COLORSPACE_JPEG;
+
+	return 0;
+}
+
+/* --------------------------------------------------------------------------
+ * V4L2 subdev video operations
+ */
+
+static int mt9t111_s_stream(struct v4l2_subdev *subdev, int streaming)
+{
+	/*
+	 * FIXME: We should put here the specific reg setting to turn on
+	 * streaming in sensor.
+	 */
+	return 0;
+}
+
+
+/* --------------------------------------------------------------------------
+ * V4L2 subdev pad operations
+ */
+/*
+ * mt9t111_enum_mbus_code - V4L2 sensor interface handler for pad_ops
+ * @subdev: pointer to standard V4L2 sub-device structure
+ * @qctrl: standard V4L2 VIDIOC_QUERYCTRL ioctl structure
+ *
+ * If the requested control is supported, returns the control information
+ * from the video_control[] array.  Otherwise, returns -EINVAL if the
+ * control is not supported.
+ */
+static int mt9t111_enum_mbus_code(struct v4l2_subdev *subdev,
+		struct v4l2_subdev_fh *fh,
+		struct v4l2_subdev_mbus_code_enum *code)
+{
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+
+	if (code->index >= ARRAY_SIZE(mt9t111_fmt_list))
+		return -EINVAL;
+
+	code->code = mt9t111->format.code;
+
+	return 0;
+}
+
+static int mt9t111_enum_frame_size(struct v4l2_subdev *subdev,
+		struct v4l2_subdev_fh *fh,
+		struct v4l2_subdev_frame_size_enum *fse)
+{
+	int i;
+
+	/* Is requested media-bus format/pixelformat not found on sensor? */
+	for (i = 0; i < ARRAY_SIZE(mt9t111_fmt_list); i++) {
+		if (fse->code == mt9t111_fmt_list[i].mbus_code)
+			goto fmt_found;
+	}
+	if (i >= ARRAY_SIZE(mt9t111_fmt_list))
+		return -EINVAL;
+
+fmt_found:
+	/*
+	 * Currently only supports VGA resolution
+	 */
+	fse->min_width = fse->max_width = MT9T111_IMAGE_WIDTH;
+	fse->min_height = fse->max_height = MT9T111_IMAGE_HEIGHT;
+
+	return 0;
+}
+
+
+static int mt9t111_get_pad_format(struct v4l2_subdev *subdev,
+		struct v4l2_subdev_fh *fh,
+		struct v4l2_subdev_format *fmt)
+{
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+
+	fmt->format = mt9t111->format;
+	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 mt9t111 *mt9t111 = to_mt9t111(subdev);
+
+	for (i = 0; i < ARRAY_SIZE(mt9t111_fmt_list); i++) {
+		if (fmt->format.code == mt9t111_fmt_list[i].mbus_code)
+			goto fmt_found;
+	}
+	if (i >= ARRAY_SIZE(mt9t111_fmt_list))
+		return -EINVAL;
+
+fmt_found:
+	/*
+	 * Only VGA resolution supported
+	 */
+	fmt->format.width = MT9T111_IMAGE_WIDTH;
+	fmt->format.height = MT9T111_IMAGE_HEIGHT;
+	fmt->format.field = V4L2_FIELD_NONE;
+	fmt->format.colorspace = V4L2_COLORSPACE_JPEG;
+
+	mt9t111->format = fmt->format;
+
+	return 0;
+}
+
+static int mt9t111_get_crop(struct v4l2_subdev *subdev,
+		struct v4l2_subdev_fh *fh, struct v4l2_subdev_crop *crop)
+{
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+
+	crop->rect = mt9t111->rect;
+	return 0;
+}
+
+static int mt9t111_set_crop(struct v4l2_subdev *subdev,
+		struct v4l2_subdev_fh *fh, struct v4l2_subdev_crop *crop)
+{
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+	struct v4l2_rect rect;
+
+	/*
+	 * Only VGA resolution/window is supported
+	 */
+	rect.left = 0;
+	rect.top = 0;
+	rect.width = MT9T111_IMAGE_WIDTH;
+	rect.height = MT9T111_IMAGE_HEIGHT;
+
+	mt9t111->rect = rect;
+	crop->rect = rect;
+
+	return 0;
+}
+
+static const struct v4l2_subdev_core_ops mt9t111_core_ops = {
+	.s_power = mt9t111_s_power,
+};
+
+static struct v4l2_subdev_internal_ops mt9t111_subdev_internal_ops = {
+	.registered     = mt9t111_registered,
+	.open		= mt9t111_open,
+};
+
+static const struct v4l2_subdev_video_ops mt9t111_video_ops = {
+	.s_stream	= mt9t111_s_stream,
+};
+
+static const struct v4l2_subdev_pad_ops mt9t111_pad_ops = {
+	.enum_mbus_code	= mt9t111_enum_mbus_code,
+	.enum_frame_size = mt9t111_enum_frame_size,
+	.get_fmt	= mt9t111_get_pad_format,
+	.set_fmt	= mt9t111_set_pad_format,
+	.get_crop	= mt9t111_get_crop,
+	.set_crop	= mt9t111_set_crop,
+};
+
+static const struct v4l2_subdev_ops mt9t111_ops = {
+	.core	= &mt9t111_core_ops,
+	.video	= &mt9t111_video_ops,
+	.pad	= &mt9t111_pad_ops,
+};
+
+/*
+ * mt9t111_probe - sensor driver i2c probe handler
+ * @client: i2c driver client device structure
+ *
+ * Register sensor as an i2c client device and V4L2
+ * device.
+ */
+static int mt9t111_probe(struct i2c_client *client,
+				const struct i2c_device_id *id)
+{
+	struct mt9t111 *mt9t111;
+	int ret;
+
+	/* Check if the adapter supports the needed features */
+	if (!i2c_check_functionality(client->adapter,
+				I2C_FUNC_SMBUS_BYTE_DATA)) {
+		v4l_err(client, "mt9t111: I2C Adapter doesn't support" \
+				" I2C_FUNC_SMBUS_WORD\n");
+		return -EIO;
+	}
+
+	if (!client->dev.platform_data) {
+		v4l_err(client, "No platform data!!\n");
+		return -ENODEV;
+	}
+
+	mt9t111 = kzalloc(sizeof(*mt9t111), GFP_KERNEL);
+	if (mt9t111 == NULL) {
+		v4l_err(client, "Could not able to alocate memory!!\n");
+		return -ENOMEM;
+	}
+
+	mt9t111->pdata = client->dev.platform_data;
+
+	/*
+	* Regulator supply required for camera interface
+	*/
+	mt9t111->omap3evm_1v8 = regulator_get(NULL, "vio_1v8");
+	if (IS_ERR(mt9t111->omap3evm_1v8)) {
+		printk(KERN_ERR "vio_1v8 regulator missing\n");
+		ret =  PTR_ERR(mt9t111->omap3evm_1v8);
+		goto err_1;
+	}
+	mt9t111->omap3evm_2v8 = regulator_get(NULL, "cam_2v8");
+	if (IS_ERR(mt9t111->omap3evm_2v8)) {
+		printk(KERN_ERR "cam_2v8 regulator missing\n");
+		ret = PTR_ERR(mt9t111->omap3evm_2v8);
+		goto err_2;
+	}
+
+	/*
+	 * Default configuration -
+	 *      Resolution: VGA
+	 *      Format: UYVY
+	 *      crop = window
+	 */
+
+	mt9t111->rect.left = 0;
+	mt9t111->rect.top = 0;
+	mt9t111->rect.width = MT9T111_IMAGE_WIDTH;
+	mt9t111->rect.height = MT9T111_IMAGE_HEIGHT;
+
+	mt9t111->format.code = V4L2_MBUS_FMT_UYVY8_2X8;
+	mt9t111->format.width = MT9T111_IMAGE_WIDTH;
+	mt9t111->format.height = MT9T111_IMAGE_HEIGHT;
+	mt9t111->format.field = V4L2_FIELD_NONE;
+	mt9t111->format.colorspace = V4L2_COLORSPACE_JPEG;
+
+	v4l2_i2c_subdev_init(&mt9t111->subdev, client, &mt9t111_ops);
+	mt9t111->subdev.internal_ops = &mt9t111_subdev_internal_ops;
+	mt9t111->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+
+	mt9t111->pad.flags = MEDIA_PAD_FL_SOURCE;
+	ret = media_entity_init(&mt9t111->subdev.entity, 1, &mt9t111->pad, 0);
+	if (!ret)
+		return 0;
+
+	kfree(mt9t111);
+err_2:
+	regulator_put(mt9t111->omap3evm_2v8);
+err_1:
+	regulator_put(mt9t111->omap3evm_1v8);
+
+	return ret;
+}
+
+/*
+ * mt9t111_remove - sensor driver i2c remove handler
+ * @client: i2c driver client device structure
+ *
+ * Unregister sensor as an i2c client device and V4L2
+ * device.  Complement of mt9t111_probe().
+ */
+static int __exit mt9t111_remove(struct i2c_client *client)
+{
+	struct v4l2_subdev *subdev = i2c_get_clientdata(client);
+	struct mt9t111 *mt9t111 = to_mt9t111(subdev);
+
+	v4l2_device_unregister_subdev(&mt9t111->subdev);
+	media_entity_cleanup(&mt9t111->subdev.entity);
+	kfree(mt9t111);
+
+	return 0;
+}
+
+static const struct i2c_device_id mt9t111_id[] = {
+	{ MT9T111_MODULE_NAME, 0 },
+	{ },
+};
+MODULE_DEVICE_TABLE(i2c, mt9t111_id);
+
+static struct i2c_driver mt9t111_i2c_driver = {
+	.driver = {
+		.name = MT9T111_MODULE_NAME,
+		.owner = THIS_MODULE,
+	},
+	.probe = mt9t111_probe,
+	.remove = __exit_p(mt9t111_remove),
+	.id_table = mt9t111_id,
+};
+
+/*
+ * mt9t111_init - sensor driver module_init handler
+ *
+ * Registers driver as an i2c client driver.  Returns 0 on success,
+ * error code otherwise.
+ */
+static int __init mt9t111_init(void)
+{
+	return i2c_add_driver(&mt9t111_i2c_driver);
+}
+
+/*
+ * mt9t111_cleanup - sensor driver module_exit handler
+ *
+ * Unregisters/deletes driver as an i2c client driver.
+ * Complement of mt9t111_init.
+ */
+static void __exit mt9t111_cleanup(void)
+{
+	i2c_del_driver(&mt9t111_i2c_driver);
+}
+
+module_init(mt9t111_init);
+module_exit(mt9t111_cleanup);
+
+MODULE_AUTHOR("Texas Instruments");
+MODULE_DESCRIPTION("mt9t111 camera sensor driver");
+MODULE_LICENSE("GPL");
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/include/media/mt9t111.h b/include/media/mt9t111.h
new file mode 100644
index 0000000..1d6a583
--- /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		"mt9t111"
+
+/*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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 3/5] omap3evm: Add Camera board init/hookup file
  2011-09-20 14:56 [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 1/5] omap3evm: Enable regulators for camera interface Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver Deepthy Ravi
@ 2011-09-20 14:56 ` Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats Deepthy Ravi
  2011-09-20 14:56 ` [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers Deepthy Ravi
  4 siblings, 0 replies; 14+ messages in thread
From: Deepthy Ravi @ 2011-09-20 14:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Vaibhav Hiremath <hvaibhav@ti.com>

Adds board support for MT9T111 sensor.

Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
---
 arch/arm/mach-omap2/Makefile                |    5 +
 arch/arm/mach-omap2/board-omap3evm-camera.c |  185 +++++++++++++++++++++++++++
 arch/arm/mach-omap2/board-omap3evm.c        |    4 +
 3 files changed, 194 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap3evm-camera.c

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index f343365..a19753c 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -280,3 +280,8 @@ disp-$(CONFIG_OMAP2_DSS)		:= display.o
 obj-y					+= $(disp-m) $(disp-y)
 
 obj-y					+= common-board-devices.o twl-common.o
+
+ifeq ($(CONFIG_MACH_OMAP3EVM),y)
+evm-camera-$(CONFIG_VIDEO_OMAP3)       := board-omap3evm-camera.o
+obj-y                                  += $(evm-camera-m) $(evm-camera-y)
+endif
diff --git a/arch/arm/mach-omap2/board-omap3evm-camera.c b/arch/arm/mach-omap2/board-omap3evm-camera.c
new file mode 100644
index 0000000..e762f61
--- /dev/null
+++ b/arch/arm/mach-omap2/board-omap3evm-camera.c
@@ -0,0 +1,185 @@
+/*
+ * arch/arm/mach-omap2/board-omap3evm-camera.c
+ *
+ * OMAP3EVM: Driver for Leopard Module Board
+ *
+ * Copyright (C) 2011 Texas Instruments Inc
+ * Author: Vaibhav Hiremath <hvaibhav@ti.com>
+ *
+ * This package is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/io.h>
+#include <linux/i2c.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/err.h>
+#include <linux/platform_device.h>
+#include <mach/gpio.h>
+#include <media/mt9t111.h>
+#include <media/omap3isp.h>
+#include <../drivers/media/video/omap3isp/isp.h>
+#include "devices.h"
+
+#define CAM_USE_XCLKA			0
+
+#define T2_GPIO_2			194
+#define nCAM_VD_SEL			157
+#define nCAM_VD_EN			200
+
+/* mux id to enable/disable signal routing to different peripherals */
+enum omap3evm_cam_mux {
+	MUX_EN_TVP5146 = 0,
+	MUX_EN_CAMERA_SENSOR,
+	MUX_EN_EXP_CAMERA_SENSOR,
+	MUX_INVALID,
+};
+
+/**
+ * @brief omap3evm_set_mux - Sets mux to enable/disable signal routing to
+ *                             different peripherals present on new EVM board
+ *
+ * @param mux_id - enum, mux id to enable/disable
+ * @param value - enum, ENABLE_MUX for enabling and DISABLE_MUX for disabling
+ *
+ */
+static void omap3evm_set_mux(enum omap3evm_cam_mux mux_id)
+{
+	switch (mux_id) {
+	/*
+	* JP1 jumper need to configure to choose between on-board
+	* camera sensor conn and on-board LI-3MC02 camera sensor.
+	*/
+	case MUX_EN_CAMERA_SENSOR:
+		/* Set nCAM_VD_EN (T2_GPIO8) = 0 */
+		gpio_set_value_cansleep(nCAM_VD_EN, 0);
+		/* Set nCAM_VD_SEL (GPIO157) = 0 */
+		gpio_set_value(nCAM_VD_SEL, 0);
+		break;
+	case MUX_EN_EXP_CAMERA_SENSOR:
+		/* Set nCAM_VD_EN (T2_GPIO8) = 1 */
+		gpio_set_value_cansleep(nCAM_VD_EN, 1);
+		break;
+	case MUX_EN_TVP5146:
+	default:
+		/* Set nCAM_VD_EN (T2_GPIO8) = 0 */
+		gpio_set_value_cansleep(nCAM_VD_EN, 0);
+		/* Set nCAM_VD_SEL (GPIO157) = 1 */
+		gpio_set_value(nCAM_VD_SEL, 1);
+		break;
+	}
+}
+
+/* MT9T111: 3M sensor */
+static int omap3evm_mt9t111_s_power(struct v4l2_subdev *subdev, u32 on)
+{
+	struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev);
+
+	omap3evm_set_mux(MUX_EN_CAMERA_SENSOR);
+
+	if (on) {
+		/* Enable EXTCLK */
+		if (isp->platform_cb.set_xclk)
+			isp->platform_cb.set_xclk(isp, 24000000, CAM_USE_XCLKA);
+		udelay(5);
+	} else {
+		if (isp->platform_cb.set_xclk)
+			isp->platform_cb.set_xclk(isp, 0, CAM_USE_XCLKA);
+	}
+
+	return 0;
+}
+
+static struct mt9t111_platform_data omap3evm_mt9t111_platform_data = {
+	.s_power		= omap3evm_mt9t111_s_power,
+};
+
+
+#define MT9T111_I2C_BUS_NUM		2
+
+static struct i2c_board_info omap3evm_camera_i2c_devices[] = {
+	{
+		I2C_BOARD_INFO(MT9T111_MODULE_NAME, MT9T111_I2C_ADDR),
+		.platform_data = &omap3evm_mt9t111_platform_data,
+	}
+};
+
+static struct isp_subdev_i2c_board_info omap3evm_mt9t111_subdevs[] = {
+	{
+		.board_info = &omap3evm_camera_i2c_devices[0],
+		.i2c_adapter_id = MT9T111_I2C_BUS_NUM,
+	},
+	{ NULL, 0 },
+};
+
+static struct isp_v4l2_subdevs_group omap3evm_camera_subdevs[] = {
+	{
+		.subdevs = omap3evm_mt9t111_subdevs,
+		.interface = ISP_INTERFACE_PARALLEL,
+		.bus = {
+			.parallel = {
+				.data_lane_shift	= 1,
+				.clk_pol		= 0,
+				.hs_pol			= 0,
+				.vs_pol			= 0,
+				.bridge			= 3,
+				.bt656			= 0,
+			},
+		},
+	},
+	{ NULL, 0 },
+};
+
+static struct isp_platform_data omap3evm_isp_platform_data = {
+	.subdevs = omap3evm_camera_subdevs,
+};
+
+static struct gpio omap3evm_gpios[] __initdata = {
+	/* First level GPIO enable: T2_GPIO.2 */
+	{ T2_GPIO_2, GPIOF_OUT_INIT_LOW, "T2_GPIO.2" },
+	/* nCAM_VD_SEL (GPIO157) */
+	{ nCAM_VD_SEL, GPIOF_OUT_INIT_HIGH, "cam_vd_sel" },
+	/*EXP_nCAM_VD_EN (T2_GPIO.8) */
+	{ nCAM_VD_EN, GPIOF_OUT_INIT_LOW, "cam_vd_en" },
+};
+
+static int __init omap3evm_cam_init(void)
+{
+	int ret;
+
+	ret = gpio_request_array(omap3evm_gpios,
+			ARRAY_SIZE(omap3evm_gpios));
+	if (ret < 0) {
+		printk(KERN_ERR "Unable to get GPIO pins\n");
+		return ret;
+	}
+
+	omap3_init_camera(&omap3evm_isp_platform_data);
+
+	printk(KERN_INFO "omap3evm camera init done successfully...\n");
+	return 0;
+}
+
+static void __exit omap3evm_cam_exit(void)
+{
+	gpio_free_array(omap3evm_gpios,
+			ARRAY_SIZE(omap3evm_gpios));
+}
+
+module_init(omap3evm_cam_init);
+module_exit(omap3evm_cam_exit);
+
+MODULE_AUTHOR("Texas Instruments");
+MODULE_DESCRIPTION("OMAP3EVM: Driver for Leopard Module Board");
+MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index cf30fff..be15394 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -572,6 +572,8 @@ static struct omap_board_mux omap35x_board_mux[] __initdata = {
 				OMAP_PIN_OFF_NONE),
 	OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
 				OMAP_PIN_OFF_NONE),
+	OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
+				OMAP_PIN_OFF_NONE),
 #ifdef CONFIG_WL12XX_PLATFORM_DATA
 	/* WLAN IRQ - GPIO 149 */
 	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
@@ -597,6 +599,8 @@ static struct omap_board_mux omap36x_board_mux[] __initdata = {
 	OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
 				OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
 				OMAP_PIN_OFF_WAKEUPENABLE),
+	OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
+				OMAP_PIN_OFF_NONE),
 	/* AM/DM37x EVM: DSS data bus muxed with sys_boot */
 	OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
 	OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats
  2011-09-20 14:56 [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor Deepthy Ravi
                   ` (2 preceding siblings ...)
  2011-09-20 14:56 ` [PATCH 3/5] omap3evm: Add Camera board init/hookup file Deepthy Ravi
@ 2011-09-20 14:56 ` Deepthy Ravi
  2011-09-20 23:26   ` Laurent Pinchart
  2011-09-20 14:56 ` [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers Deepthy Ravi
  4 siblings, 1 reply; 14+ messages in thread
From: Deepthy Ravi @ 2011-09-20 14:56 UTC (permalink / raw)
  To: linux-arm-kernel

Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
register for UYVY8_2X8 and YUYV8_2X8 formats.

Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
---
 drivers/media/video/omap3isp/ispccdc.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/omap3isp/ispccdc.c b/drivers/media/video/omap3isp/ispccdc.c
index 418ba65..1dcf180 100644
--- a/drivers/media/video/omap3isp/ispccdc.c
+++ b/drivers/media/video/omap3isp/ispccdc.c
@@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct isp_ccdc_device *ccdc,
 
 	syn_mode &= ~ISPCCDC_SYN_MODE_INPMOD_MASK;
 	if (format->code == V4L2_MBUS_FMT_YUYV8_2X8 ||
-	    format->code == V4L2_MBUS_FMT_UYVY8_2X8)
-		syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
+	    format->code == V4L2_MBUS_FMT_UYVY8_2X8){
+		if (pdata && pdata->bt656)
+			syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
+		else
+			syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
+	}
 	else if (format->code == V4L2_MBUS_FMT_YUYV8_1X16 ||
 		 format->code == V4L2_MBUS_FMT_UYVY8_1X16)
 		syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
@@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device *ccdc)
 		syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
 
 	/* Use PACK8 mode for 1byte per pixel formats. */
-	if (omap3isp_video_format_info(format->code)->width <= 8)
+	if ((omap3isp_video_format_info(format->code)->width <= 8) &&
+			(omap3isp_video_format_info(format->code)->bpp <= 8))
 		syn_mode |= ISPCCDC_SYN_MODE_PACK8;
 	else
 		syn_mode &= ~ISPCCDC_SYN_MODE_PACK8;
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers
  2011-09-20 14:56 [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor Deepthy Ravi
                   ` (3 preceding siblings ...)
  2011-09-20 14:56 ` [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats Deepthy Ravi
@ 2011-09-20 14:56 ` Deepthy Ravi
  2011-09-20 23:13   ` Laurent Pinchart
  4 siblings, 1 reply; 14+ messages in thread
From: Deepthy Ravi @ 2011-09-20 14:56 UTC (permalink / raw)
  To: linux-arm-kernel

Enables multimedia driver, media controller api,
v4l2-subdev-api, omap3isp and mt9t111 sensor
drivers in omap2plus_defconfig.

Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
---
 arch/arm/configs/omap2plus_defconfig |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
index d5f00d7..548823d 100644
--- a/arch/arm/configs/omap2plus_defconfig
+++ b/arch/arm/configs/omap2plus_defconfig
@@ -133,6 +133,16 @@ CONFIG_TWL4030_WATCHDOG=y
 CONFIG_REGULATOR_TWL4030=y
 CONFIG_REGULATOR_TPS65023=y
 CONFIG_REGULATOR_TPS6507X=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_MEDIA=y
+CONFIG_VIDEO_MT9T111=y
+CONFIG_VIDEO_OMAP3=y
 CONFIG_FB=y
 CONFIG_FIRMWARE_EDID=y
 CONFIG_FB_MODE_HELPERS=y
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver
  2011-09-20 14:56 ` [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver Deepthy Ravi
@ 2011-09-20 15:09   ` Guennadi Liakhovetski
  2011-09-27 14:07     ` Ravi, Deepthy
  0 siblings, 1 reply; 14+ messages in thread
From: Guennadi Liakhovetski @ 2011-09-20 15:09 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, 20 Sep 2011, Deepthy Ravi wrote:

> From: Vaibhav Hiremath <hvaibhav@ti.com>
> 
> The MT9T111 is a 3.1Mp CMOS sensor from Aptina with
> its latest image signal processing (ISP) and 1.75??m
> pixel technology.
> The sensor driver currently supports only VGA
> resolution.
> 
> Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
> ---
>  drivers/media/video/Kconfig       |    7 +
>  drivers/media/video/Makefile      |    1 +
>  drivers/media/video/mt9t111.c     |  793 +++++++++++++++++++++
>  drivers/media/video/mt9t111_reg.h | 1367 +++++++++++++++++++++++++++++++++++++
>  include/media/mt9t111.h           |   45 ++
>  5 files changed, 2213 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/media/video/mt9t111.c
>  create mode 100644 drivers/media/video/mt9t111_reg.h
>  create mode 100644 include/media/mt9t111.h

NAK. The mt9t112 driver claims to also support mt9t111. I'm not sure, 
whether the driver has indeed been tested with mt9t111, but this is 
definitely something to verify. If the chips are indeed similar, please 
use the tree at

http://git.linuxtv.org/gliakhovetski/v4l-dvb.git/shortlog/refs/heads/rc1-for-3.2

which has converted the mt9t112 driver to be also used outside ot the 
soc-camera subsystem, and use that driver instead of adding another one.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers
  2011-09-20 14:56 ` [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers Deepthy Ravi
@ 2011-09-20 23:13   ` Laurent Pinchart
  2011-09-20 23:52     ` Tony Lindgren
  0 siblings, 1 reply; 14+ messages in thread
From: Laurent Pinchart @ 2011-09-20 23:13 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Deepthy,

Thanks for the patch.

On Tuesday 20 September 2011 16:56:52 Deepthy Ravi wrote:
> Enables multimedia driver, media controller api,
> v4l2-subdev-api, omap3isp and mt9t111 sensor
> drivers in omap2plus_defconfig.
> 
> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
> ---
>  arch/arm/configs/omap2plus_defconfig |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/configs/omap2plus_defconfig
> b/arch/arm/configs/omap2plus_defconfig index d5f00d7..548823d 100644
> --- a/arch/arm/configs/omap2plus_defconfig
> +++ b/arch/arm/configs/omap2plus_defconfig
> @@ -133,6 +133,16 @@ CONFIG_TWL4030_WATCHDOG=y
>  CONFIG_REGULATOR_TWL4030=y
>  CONFIG_REGULATOR_TPS65023=y
>  CONFIG_REGULATOR_TPS6507X=y
> +CONFIG_MEDIA_SUPPORT=y
> +CONFIG_MEDIA_CONTROLLER=y
> +CONFIG_VIDEO_DEV=y
> +CONFIG_VIDEO_V4L2_COMMON=y
> +CONFIG_VIDEO_ALLOW_V4L1=y
> +CONFIG_VIDEO_V4L1_COMPAT=y
> +CONFIG_VIDEO_V4L2_SUBDEV_API=y
> +CONFIG_VIDEO_MEDIA=y
> +CONFIG_VIDEO_MT9T111=y
> +CONFIG_VIDEO_OMAP3=y

Shouldn't they be compiled as modules instead ?

>  CONFIG_FB=y
>  CONFIG_FIRMWARE_EDID=y
>  CONFIG_FB_MODE_HELPERS=y

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats
  2011-09-20 14:56 ` [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats Deepthy Ravi
@ 2011-09-20 23:26   ` Laurent Pinchart
  2011-09-21  5:32     ` Ravi, Deepthy
  0 siblings, 1 reply; 14+ messages in thread
From: Laurent Pinchart @ 2011-09-20 23:26 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Deepthy,

Thanks for the patch.

On Tuesday 20 September 2011 16:56:51 Deepthy Ravi wrote:
> Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
> register for UYVY8_2X8 and YUYV8_2X8 formats.
> 
> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
> ---
>  drivers/media/video/omap3isp/ispccdc.c |   11 ++++++++---
>  1 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/video/omap3isp/ispccdc.c
> b/drivers/media/video/omap3isp/ispccdc.c index 418ba65..1dcf180 100644
> --- a/drivers/media/video/omap3isp/ispccdc.c
> +++ b/drivers/media/video/omap3isp/ispccdc.c
> @@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct isp_ccdc_device
> *ccdc,
> 
>  	syn_mode &= ~ISPCCDC_SYN_MODE_INPMOD_MASK;
>  	if (format->code == V4L2_MBUS_FMT_YUYV8_2X8 ||
> -	    format->code == V4L2_MBUS_FMT_UYVY8_2X8)
> -		syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
> +	    format->code == V4L2_MBUS_FMT_UYVY8_2X8){
> +		if (pdata && pdata->bt656)
> +			syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
> +		else
> +			syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
> +	}
>  	else if (format->code == V4L2_MBUS_FMT_YUYV8_1X16 ||
>  		 format->code == V4L2_MBUS_FMT_UYVY8_1X16)
>  		syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
> @@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device
> *ccdc) syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
> 
>  	/* Use PACK8 mode for 1byte per pixel formats. */
> -	if (omap3isp_video_format_info(format->code)->width <= 8)
> +	if ((omap3isp_video_format_info(format->code)->width <= 8) &&
> +			(omap3isp_video_format_info(format->code)->bpp <= 8))

I'm not sure to follow you. This will clear the PACK8 bit for the YUYV8_2X8 
formats. Those formats are 8 bits wide, shouldn't PACK8 be set to store 
samples on 8 bits instead of 16 bits ?

Is this patch intended to support YUYV8_2X8 sensors in non BT.656 mode with 
the bridge enabled ? In that case, what would you think about setting the CCDC 
input format to YUYV8_1X16 instead ? This would better reflect the reality, as 
the bridge converts YUYV8_2X8 to YUYV8_1X16, and the CCDC is then fed with 
YUYV8_1X16.

>  		syn_mode |= ISPCCDC_SYN_MODE_PACK8;
>  	else
>  		syn_mode &= ~ISPCCDC_SYN_MODE_PACK8;

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers
  2011-09-20 23:13   ` Laurent Pinchart
@ 2011-09-20 23:52     ` Tony Lindgren
  0 siblings, 0 replies; 14+ messages in thread
From: Tony Lindgren @ 2011-09-20 23:52 UTC (permalink / raw)
  To: linux-arm-kernel

* Laurent Pinchart <laurent.pinchart@ideasonboard.com> [110920 15:40]:
> >  CONFIG_REGULATOR_TPS65023=y
> >  CONFIG_REGULATOR_TPS6507X=y
> > +CONFIG_MEDIA_SUPPORT=y
> > +CONFIG_MEDIA_CONTROLLER=y
> > +CONFIG_VIDEO_DEV=y
> > +CONFIG_VIDEO_V4L2_COMMON=y
> > +CONFIG_VIDEO_ALLOW_V4L1=y
> > +CONFIG_VIDEO_V4L1_COMPAT=y
> > +CONFIG_VIDEO_V4L2_SUBDEV_API=y
> > +CONFIG_VIDEO_MEDIA=y
> > +CONFIG_VIDEO_MT9T111=y
> > +CONFIG_VIDEO_OMAP3=y
> 
> Shouldn't they be compiled as modules instead ?

Yes, let's not apply this.

Tony

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats
  2011-09-20 23:26   ` Laurent Pinchart
@ 2011-09-21  5:32     ` Ravi, Deepthy
  2011-09-21  9:06       ` Laurent Pinchart
  0 siblings, 1 reply; 14+ messages in thread
From: Ravi, Deepthy @ 2011-09-21  5:32 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Laurent,
> ________________________________________
> From: Laurent Pinchart [laurent.pinchart at ideasonboard.com]
> Sent: Wednesday, September 21, 2011 4:56 AM
> To: Ravi, Deepthy
> Cc: mchehab at infradead.org; tony at atomide.com; Hiremath, Vaibhav;
> linux-media at vger.kernel.org; linux at arm.linux.org.uk;
> linux-arm-kernel at lists.infradead.org; kyungmin.park at samsung.com;
> hverkuil at xs4all.nl; m.szyprowski at samsung.com; g.liakhovetski at gmx.de;
> Shilimkar, Santosh; khilman at deeprootsystems.com; david.woodhouse at intel.com;
> akpm at linux-foundation.org; linux-kernel at vger.kernel.org;
> linux-omap at vger.kernel.org; Sakari Ailus
> Subject: Re: [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for
> UYVY8_2X8 and YUYV8_2X8 formats
>
> Hi Deepthy,
>
> Thanks for the patch.
>
> On Tuesday 20 September 2011 16:56:51 Deepthy Ravi wrote:
>> Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
>> register for UYVY8_2X8 and YUYV8_2X8 formats.
>>
>> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
>> ---
>>  drivers/media/video/omap3isp/ispccdc.c |   11 ++++++++---
>>  1 files changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/media/video/omap3isp/ispccdc.c
>> b/drivers/media/video/omap3isp/ispccdc.c index 418ba65..1dcf180 100644
>> --- a/drivers/media/video/omap3isp/ispccdc.c
>> +++ b/drivers/media/video/omap3isp/ispccdc.c
>> @@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct
>> isp_ccdc_device
>> *ccdc,
>>
>>       syn_mode &= ~ISPCCDC_SYN_MODE_INPMOD_MASK;
>>       if (format->code == V4L2_MBUS_FMT_YUYV8_2X8 ||
>> -         format->code == V4L2_MBUS_FMT_UYVY8_2X8)
>> -             syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
>> +         format->code == V4L2_MBUS_FMT_UYVY8_2X8){
>> +             if (pdata && pdata->bt656)
>> +                     syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
>> +             else
>> +                     syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
>> +     }
>>       else if (format->code == V4L2_MBUS_FMT_YUYV8_1X16 ||
>>                format->code == V4L2_MBUS_FMT_UYVY8_1X16)
>>               syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
>> @@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device
>> *ccdc) syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
>>
>>       /* Use PACK8 mode for 1byte per pixel formats. */
>> -     if (omap3isp_video_format_info(format->code)->width <= 8)
>> +     if ((omap3isp_video_format_info(format->code)->width <= 8) &&
>> +                     (omap3isp_video_format_info(format->code)->bpp <=
>> 8))
>
> I'm not sure to follow you. This will clear the PACK8 bit for the YUYV8_2X8
> formats. Those formats are 8 bits wide, shouldn't PACK8 be set to store
> samples on 8 bits instead of 16 bits ?
>
> Is this patch intended to support YUYV8_2X8 sensors in non BT.656 mode with
> the bridge enabled ? In that case, what would you think about setting the
> CCDC
> input format to YUYV8_1X16 instead ? This would better reflect the reality,
> as
> the bridge converts YUYV8_2X8 to YUYV8_1X16, and the CCDC is then fed with
> YUYV8_1X16.
>
[Deepthy Ravi] Yes this is intended for  YUYV8_2X8 sensors in non BT.656 with 8 to 16 bit bridge enabled. So the data has to be stored as 16 bits per sample. Thats why PACK8 is cleared . I am not sure about using YUYV8_1X16. 

>>               syn_mode |= ISPCCDC_SYN_MODE_PACK8;
>>       else
>>               syn_mode &= ~ISPCCDC_SYN_MODE_PACK8;
>
> --
> Regards,
>
> Laurent Pinchart
>


-- 
Thanks,
Deepthy Ravi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats
  2011-09-21  5:32     ` Ravi, Deepthy
@ 2011-09-21  9:06       ` Laurent Pinchart
  2011-09-23 11:53         ` Ravi, Deepthy
  0 siblings, 1 reply; 14+ messages in thread
From: Laurent Pinchart @ 2011-09-21  9:06 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Deepthy,

On Wednesday 21 September 2011 07:32:44 Ravi, Deepthy wrote:
> On Wednesday, September 21, 2011 4:56 AM Laurent Pinchart wrote:
> > On Tuesday 20 September 2011 16:56:51 Deepthy Ravi wrote:
> >> Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
> >> register for UYVY8_2X8 and YUYV8_2X8 formats.
> >> 
> >> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
> >> ---
> >> 
> >>  drivers/media/video/omap3isp/ispccdc.c |   11 ++++++++---
> >>  1 files changed, 8 insertions(+), 3 deletions(-)
> >> 
> >> diff --git a/drivers/media/video/omap3isp/ispccdc.c
> >> b/drivers/media/video/omap3isp/ispccdc.c index 418ba65..1dcf180 100644
> >> --- a/drivers/media/video/omap3isp/ispccdc.c
> >> +++ b/drivers/media/video/omap3isp/ispccdc.c
> >> @@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct
> >> isp_ccdc_device
> >> *ccdc,
> >> 
> >>       syn_mode &= ~ISPCCDC_SYN_MODE_INPMOD_MASK;
> >>       if (format->code == V4L2_MBUS_FMT_YUYV8_2X8 ||
> >> 
> >> -         format->code == V4L2_MBUS_FMT_UYVY8_2X8)
> >> -             syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
> >> +         format->code == V4L2_MBUS_FMT_UYVY8_2X8){
> >> +             if (pdata && pdata->bt656)
> >> +                     syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
> >> +             else
> >> +                     syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
> >> +     }
> >> 
> >>       else if (format->code == V4L2_MBUS_FMT_YUYV8_1X16 ||
> >>       
> >>                format->code == V4L2_MBUS_FMT_UYVY8_1X16)
> >>               
> >>               syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
> >> 
> >> @@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device
> >> *ccdc) syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
> >> 
> >>       /* Use PACK8 mode for 1byte per pixel formats. */
> >> 
> >> -     if (omap3isp_video_format_info(format->code)->width <= 8)
> >> +     if ((omap3isp_video_format_info(format->code)->width <= 8) &&
> >> +                     (omap3isp_video_format_info(format->code)->bpp <=
> >> 8))
> > 
> > I'm not sure to follow you. This will clear the PACK8 bit for the
> > YUYV8_2X8 formats. Those formats are 8 bits wide, shouldn't PACK8 be set
> > to store samples on 8 bits instead of 16 bits ?
> > 
> > Is this patch intended to support YUYV8_2X8 sensors in non BT.656 mode
> > with the bridge enabled ? In that case, what would you think about setting
> > the CCDC input format to YUYV8_1X16 instead ? This would better reflect
> > the reality, as the bridge converts YUYV8_2X8 to YUYV8_1X16, and the CCDC
> > is then fed with YUYV8_1X16.
> 
> Yes this is intended for  YUYV8_2X8 sensors in non BT.656 with 8 to 16 bit
> bridge enabled. So the data has to be stored as 16 bits per sample. Thats
> why PACK8 is cleared . I am not sure about using YUYV8_1X16.

My original idea when I wrote the YV support patches was to implement this use 
case with YUYV8_2X8 at the sensor output and YUYV8_1X16 at the CCDC input. The 
ISP driver could then enable the bridge automatically. I'm not sure if that's 
the best solution though, it might be confusing for the users. What I would 
like to keep, however, is the idea of enabling the bridge automatically.

Sakari, any opinion on this ?

> >>               syn_mode |= ISPCCDC_SYN_MODE_PACK8;
> >>       else
> >>               syn_mode &= ~ISPCCDC_SYN_MODE_PACK8;

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats
  2011-09-21  9:06       ` Laurent Pinchart
@ 2011-09-23 11:53         ` Ravi, Deepthy
  0 siblings, 0 replies; 14+ messages in thread
From: Ravi, Deepthy @ 2011-09-23 11:53 UTC (permalink / raw)
  To: linux-arm-kernel


> ________________________________________
> From: Laurent Pinchart [laurent.pinchart at ideasonboard.com]
> Sent: Wednesday, September 21, 2011 2:36 PM
> To: Ravi, Deepthy
> Cc: mchehab at infradead.org; tony at atomide.com; Hiremath, Vaibhav; linux-media at vger.kernel.org; linux at arm.linux.org.uk; linux-arm-kernel at lists.infradead.org; kyungmin.park at samsung.com; hverkuil at xs4all.nl; m.szyprowski at samsung.com; g.liakhovetski at gmx.de; Shilimkar, Santosh; khilman at deeprootsystems.com; david.woodhouse at intel.com; akpm at linux-foundation.org; linux-kernel at vger.kernel.org; linux-omap at vger.kernel.org; Sakari Ailus
> Subject: Re: [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats
>
> Hi Deepthy,
>
> On Wednesday 21 September 2011 07:32:44 Ravi, Deepthy wrote:
>> On Wednesday, September 21, 2011 4:56 AM Laurent Pinchart wrote:
>> > On Tuesday 20 September 2011 16:56:51 Deepthy Ravi wrote:
>> >> Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
>> >> register for UYVY8_2X8 and YUYV8_2X8 formats.
>> >>
>> >> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
>> >> ---
>> >>
>> >>  drivers/media/video/omap3isp/ispccdc.c |   11 ++++++++---
>> >>  1 files changed, 8 insertions(+), 3 deletions(-)
>> >>
>> >> diff --git a/drivers/media/video/omap3isp/ispccdc.c
>> >> b/drivers/media/video/omap3isp/ispccdc.c index 418ba65..1dcf180 100644
>> >> --- a/drivers/media/video/omap3isp/ispccdc.c
>> >> +++ b/drivers/media/video/omap3isp/ispccdc.c
>> >> @@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct
>> >> isp_ccdc_device
>> >> *ccdc,
>> >>
>> >>       syn_mode &= ~ISPCCDC_SYN_MODE_INPMOD_MASK;
>> >>       if (format->code == V4L2_MBUS_FMT_YUYV8_2X8 ||
>> >>
>> >> -         format->code == V4L2_MBUS_FMT_UYVY8_2X8)
>> >> -             syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
>> >> +         format->code == V4L2_MBUS_FMT_UYVY8_2X8){
>> >> +             if (pdata && pdata->bt656)
>> >> +                     syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
>> >> +             else
>> >> +                     syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
>> >> +     }
>> >>
>> >>       else if (format->code == V4L2_MBUS_FMT_YUYV8_1X16 ||
>> >>
>> >>                format->code == V4L2_MBUS_FMT_UYVY8_1X16)
>> >>
>> >>               syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
>> >>
>> >> @@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device
>> >> *ccdc) syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
>> >>
>> >>       /* Use PACK8 mode for 1byte per pixel formats. */
>> >>
>> >> -     if (omap3isp_video_format_info(format->code)->width <= 8)
>> >> +     if ((omap3isp_video_format_info(format->code)->width <= 8) &&
>> >> +                     (omap3isp_video_format_info(format->code)->bpp <=
>> >> 8))
>> >
>> > I'm not sure to follow you. This will clear the PACK8 bit for the
>> > YUYV8_2X8 formats. Those formats are 8 bits wide, shouldn't PACK8 be set
>> > to store samples on 8 bits instead of 16 bits ?
>> >
>> > Is this patch intended to support YUYV8_2X8 sensors in non BT.656 mode
>> > with the bridge enabled ? In that case, what would you think about setting
>> > the CCDC input format to YUYV8_1X16 instead ? This would better reflect
>> > the reality, as the bridge converts YUYV8_2X8 to YUYV8_1X16, and the CCDC
>> > is then fed with YUYV8_1X16.
>>
>> Yes this is intended for  YUYV8_2X8 sensors in non BT.656 with 8 to 16 bit
>> bridge enabled. So the data has to be stored as 16 bits per sample. Thats
>> why PACK8 is cleared . I am not sure about using YUYV8_1X16.
>
> My original idea when I wrote the YV support patches was to implement this use
> case with YUYV8_2X8 at the sensor output and YUYV8_1X16 at the CCDC input. The
> ISP driver could then enable the bridge automatically. I'm not sure if that's
> the best solution though, it might be confusing for the users. What I would
> like to keep, however, is the idea of enabling the bridge automatically.
>
[Deepthy Ravi] But for streaming to start, the formats on both ends of the link should match. I believe setting different formats at sensor output and ccdc input will give a broken pipe error. Is my understanding correct ? If so, how do you propose to handle the situation ? 

> Sakari, any opinion on this ?
>
>> >>               syn_mode |= ISPCCDC_SYN_MODE_PACK8;
>> >>       else
>> >>               syn_mode &= ~ISPCCDC_SYN_MODE_PACK8;
>
> --
> Regards,
>
> Laurent Pinchart
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver
  2011-09-20 15:09   ` Guennadi Liakhovetski
@ 2011-09-27 14:07     ` Ravi, Deepthy
  0 siblings, 0 replies; 14+ messages in thread
From: Ravi, Deepthy @ 2011-09-27 14:07 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,
> ________________________________________
> From: Gary Thomas [gary at mlbassoc.com]
> Sent: Tuesday, September 27, 2011 7:21 PM
> To: Ravi, Deepthy
> Cc: laurent.pinchart at ideasonboard.com; mchehab at infradead.org; tony at atomide.com; Hiremath, Vaibhav; linux-media at vger.kernel.org; linux at arm.linux.org.uk; linux-arm-kernel at lists.infradead.org; kyungmin.park at samsung.com; hverkuil at xs4all.nl; m.szyprowski at samsung.com; g.liakhovetski at gmx.de; Shilimkar, Santosh; khilman at deeprootsystems.com; linux-kernel at vger.kernel.org; linux-omap at vger.kernel.org
> Subject: Re: [PATCH v2 0/5] OMAP3EVM: Add support for MT9T111 sensor
>
> On 2011-09-27 07:40, Deepthy Ravi wrote:
>> This patchset
>>       -adds support for MT9T111 sensor on omap3evm.
>>       Currently the sensor driver supports only
>>       VGA resolution.
>>       -enables MT9T111 sensor in omap2plus_defconfig.
>>
>> This is dependent on the following patchset
>> http://www.spinics.net/lists/linux-media/msg37270.html
>> which adds YUYV input support for OMAP3ISP. And is
>> applied on top of rc1-for-3.2 of gliakhovetski/v4l-dvb.git
>
> Why not use the same base as Lennart?
>   The set is based on
>   http://git.linuxtv.org/pinchartl/media.git/shortlog/refs/heads/omap3isp-omap3isp-next
>
[Deepthy Ravi] Because the patches for making mt9t112 driver usable outside the soc-camera subsystem are present in that base only . Its not there in Laurent's.
>> ---
>> Changes in v2:
>>       As per the discussion here,
>>       https://lkml.org/lkml/2011/9/20/280
>>       the existing mt9t112 driver is reused for
>>       adding support for mt9t111 sensor.
>> Deepthy Ravi (3):
>>    [media] v4l: Add support for mt9t111 sensor driver
>>    ispccdc: Configure CCDC_SYN_MODE register
>>    omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers
>>
>> Vaibhav Hiremath (2):
>>    omap3evm: Enable regulators for camera interface
>>    omap3evm: Add Camera board init/hookup file
>>
>>   arch/arm/configs/omap2plus_defconfig        |    9 +
>>   arch/arm/mach-omap2/Makefile                |    5 +
>>   arch/arm/mach-omap2/board-omap3evm-camera.c |  185 ++++
>>   arch/arm/mach-omap2/board-omap3evm.c        |   26 +
>>   drivers/media/video/Kconfig                 |    7 +
>>   drivers/media/video/Makefile                |    1 +
>>   drivers/media/video/mt9t111_reg.h           | 1367 +++++++++++++++++++++++++++
>>   drivers/media/video/mt9t112.c               |  320 ++++++-
>>   drivers/media/video/omap3isp/ispccdc.c      |   11 +-
>>   include/media/mt9t111.h                     |   45 +
>>   10 files changed, 1937 insertions(+), 39 deletions(-)
>>   create mode 100644 arch/arm/mach-omap2/board-omap3evm-camera.c
>>   create mode 100644 drivers/media/video/mt9t111_reg.h
>>   create mode 100644 include/media/mt9t111.h
>
> --
> ------------------------------------------------------------
> Gary Thomas                 |  Consulting for the
> MLB Associates              |    Embedded world
> ------------------------------------------------------------
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2011-09-27 14:07 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-20 14:56 [PATCH 0/5] OMAP3EVM: Add support for MT9T111 sensor Deepthy Ravi
2011-09-20 14:56 ` [PATCH 1/5] omap3evm: Enable regulators for camera interface Deepthy Ravi
2011-09-20 14:56 ` [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver Deepthy Ravi
2011-09-20 15:09   ` Guennadi Liakhovetski
2011-09-27 14:07     ` Ravi, Deepthy
2011-09-20 14:56 ` [PATCH 3/5] omap3evm: Add Camera board init/hookup file Deepthy Ravi
2011-09-20 14:56 ` [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats Deepthy Ravi
2011-09-20 23:26   ` Laurent Pinchart
2011-09-21  5:32     ` Ravi, Deepthy
2011-09-21  9:06       ` Laurent Pinchart
2011-09-23 11:53         ` Ravi, Deepthy
2011-09-20 14:56 ` [PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers Deepthy Ravi
2011-09-20 23:13   ` Laurent Pinchart
2011-09-20 23:52     ` Tony Lindgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).