aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-omap-psp-2.6.32/0008-board-omap3beagle-ugly-copy-paste-job-to-get-mt9p111.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/linux/linux-omap-psp-2.6.32/0008-board-omap3beagle-ugly-copy-paste-job-to-get-mt9p111.patch')
-rw-r--r--recipes/linux/linux-omap-psp-2.6.32/0008-board-omap3beagle-ugly-copy-paste-job-to-get-mt9p111.patch214
1 files changed, 214 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-psp-2.6.32/0008-board-omap3beagle-ugly-copy-paste-job-to-get-mt9p111.patch b/recipes/linux/linux-omap-psp-2.6.32/0008-board-omap3beagle-ugly-copy-paste-job-to-get-mt9p111.patch
new file mode 100644
index 0000000000..a009ec5194
--- /dev/null
+++ b/recipes/linux/linux-omap-psp-2.6.32/0008-board-omap3beagle-ugly-copy-paste-job-to-get-mt9p111.patch
@@ -0,0 +1,214 @@
+From b1f02af6bdbf845ad928e0f046e737f9af000f11 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <k-kooi@ti.com>
+Date: Tue, 9 Feb 2010 20:53:56 +0100
+Subject: [PATCH 08/30] board-omap3beagle: ugly copy/paste job to get mt9p111 sensor data in (only compile tested)
+
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 169 +++++++++++++++++++++++++++++++
+ 1 files changed, 169 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index accf80d..e63bec6 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -25,6 +25,12 @@
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
+
++#include <media/v4l2-int-device.h>
++#include <media/mt9t111.h>
++
++/* Include V4L2 ISP-Camera driver related header file */
++#include <../drivers/media/video/omap34xxcam.h>
++
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/mtd/nand.h>
+@@ -441,6 +447,157 @@ static struct twl4030_platform_data beagle_twldata = {
+ .vpll2 = &beagle_vpll2,
+ };
+
++
++#if defined(CONFIG_VIDEO_MT9T111) || defined(CONFIG_VIDEO_MT9T111_MODULE)
++static struct isp_interface_config mt9t111_if_config = {
++ .ccdc_par_ser = ISP_PARLL,
++ .dataline_shift = 0x0,
++ .hsvs_syncdetect = ISPCTRL_SYNC_DETECT_VSRISE,
++ .strobe = 0x0,
++ .prestrobe = 0x0,
++ .shutter = 0x0,
++ .u.par.par_bridge = 0x1,
++ .u.par.par_clk_pol = 0x0,
++};
++
++static struct v4l2_ifparm mt9t111_ifparm_s = {
++#if 1
++ .if_type = V4L2_IF_TYPE_RAW,
++ .u = {
++ .raw = {
++ .frame_start_on_rising_vs = 1,
++ .bt_sync_correct = 0,
++ .swap = 0,
++ .latch_clk_inv = 0,
++ .nobt_hs_inv = 0, /* active high */
++ .nobt_vs_inv = 0, /* active high */
++ .clock_min = MT9T111_CLK_MIN,
++ .clock_max = MT9T111_CLK_MAX,
++ },
++ },
++#else
++ .if_type = V4L2_IF_TYPE_YCbCr,
++ .u = {
++ .ycbcr = {
++ .frame_start_on_rising_vs = 1,
++ .bt_sync_correct = 0,
++ .swap = 0,
++ .latch_clk_inv = 0,
++ .nobt_hs_inv = 0, /* active high */
++ .nobt_vs_inv = 0, /* active high */
++ .clock_min = MT9T111_CLK_MIN,
++ .clock_max = MT9T111_CLK_MAX,
++ },
++ },
++#endif
++};
++
++/**
++ * @brief mt9t111_ifparm - Returns the mt9t111 interface parameters
++ *
++ * @param p - pointer to v4l2_ifparm structure
++ *
++ * @return result of operation - 0 is success
++ */
++static int mt9t111_ifparm(struct v4l2_ifparm *p)
++{
++ if (p == NULL)
++ return -EINVAL;
++
++ *p = mt9t111_ifparm_s;
++ return 0;
++}
++
++#if defined(CONFIG_VIDEO_OMAP3_CAM) || defined(CONFIG_VIDEO_OMAP3_CAM_MODULE)
++static struct omap34xxcam_hw_config mt9t111_decoder_hwc = {
++ .dev_index = 0,
++ .dev_minor = 0,
++ .dev_type = OMAP34XXCAM_SLAVE_SENSOR,
++ .u.sensor.xclk = OMAP34XXCAM_XCLK_NONE,
++ .u.sensor.sensor_isp = 1,
++};
++#endif
++
++/**
++ * @brief mt9t111_set_prv_data - Returns mt9t111 omap34xx driver private data
++ *
++ * @param priv - pointer to omap34xxcam_hw_config structure
++ *
++ * @return result of operation - 0 is success
++ */
++static int mt9t111_set_prv_data(void *priv)
++{
++#if defined(CONFIG_VIDEO_OMAP3_CAM) || defined(CONFIG_VIDEO_OMAP3_CAM_MODULE)
++ struct omap34xxcam_hw_config *hwc = priv;
++
++ if (priv == NULL)
++ return -EINVAL;
++
++ hwc->u.sensor.sensor_isp = mt9t111_decoder_hwc.u.sensor.sensor_isp;
++ hwc->u.sensor.xclk = mt9t111_decoder_hwc.u.sensor.xclk;
++ hwc->dev_index = mt9t111_decoder_hwc.dev_index;
++ hwc->dev_minor = mt9t111_decoder_hwc.dev_minor;
++ hwc->dev_type = mt9t111_decoder_hwc.dev_type;
++ return 0;
++#else
++ return -EINVAL;
++#endif
++}
++
++/**
++ * @brief mt9t111_power_set - Power-on or power-off TVP5146 device
++ *
++ * @param power - enum, Power on/off, resume/standby
++ *
++ * @return result of operation - 0 is success
++ */
++static int mt9t111_power_set(enum v4l2_power power)
++{
++ switch (power) {
++ case V4L2_POWER_OFF:
++ /* Disable mux for TVP5146 decoder data path */
++// if (omap3evmdc_set_mux(MUX_CAMERA_SENSOR, DISABLE_MUX))
++// return -ENODEV;
++ break;
++
++ case V4L2_POWER_STANDBY:
++ break;
++
++ case V4L2_POWER_ON:
++ /* Enable mux for expension camera data path */
++// if (omap3evmdc_set_mux(MUX_CAMERA_SENSOR, ENABLE_MUX))
++// return -ENODEV;
++
++#if defined(CONFIG_VIDEO_OMAP3_CAM) || defined(CONFIG_VIDEO_OMAP3_CAM_MODULE)
++ isp_configure_interface(&mt9t111_if_config);
++#endif
++ break;
++
++ default:
++ return -ENODEV;
++ break;
++ }
++ return 0;
++}
++
++static struct mt9t111_platform_data mt9t111_pdata = {
++ .master = "omap34xxcam",
++ .power_set = mt9t111_power_set,
++ .priv_data_set = mt9t111_set_prv_data,
++ .ifparm = mt9t111_ifparm,
++ /* Some interface dependent params */
++ .clk_polarity = 0, /* data clocked out on falling edge */
++ .hs_polarity = 1, /* 0 - Active low, 1- Active high */
++ .vs_polarity = 1, /* 0 - Active low, 1- Active high */
++};
++
++static struct i2c_board_info __initdata mt9t111_i2c_board_info = {
++ I2C_BOARD_INFO("mt9t111", MT9T111_I2C_ADDR),
++ .platform_data = &mt9t111_pdata,
++};
++
++#endif /* #ifdef CONFIG_VIDEO_MT9T111 */
++
+ static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = {
+ {
+ I2C_BOARD_INFO("twl4030", 0x48),
+@@ -618,6 +775,8 @@ static struct omap_board_mux board_mux[] __initdata = {
+
+ static void __init omap3_beagle_init(void)
+ {
++ int err;
++
+ omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+ omap3_beagle_i2c_init();
+ platform_add_devices(omap3_beagle_devices,
+@@ -640,7 +799,17 @@ static void __init omap3_beagle_init(void)
+ omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
+
+ beagle_display_init();
++
++ // Revisit: hardcodes i2c bus 2
++#if defined(CONFIG_VIDEO_MT9T111) || defined(CONFIG_VIDEO_MT9T111_MODULE)
++ err = i2c_register_board_info(2, &mt9t111_i2c_board_info, 1);
++ if (err) {
++ printk("beagle: MT9T111 I2C Board Registration failed \n");
++ return err;
++ }
++#endif
+ }
++
+ static void __init omap3_beagle_map_io(void)
+ {
+ omap2_set_globals_343x();
+--
+1.6.6.1
+