From: Vaibhav Hiremath <hvaib...@ti.com>

Adds board support for MT9T111 sensor.

Signed-off-by: Vaibhav Hiremath <hvaib...@ti.com>
Signed-off-by: Deepthy Ravi <deepthy.r...@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 <hvaib...@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 f63a8fa..485bc1c 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -573,6 +573,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),
@@ -598,6 +600,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

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to