summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Xu <Feng.Xu@freescale.com>2012-01-09 16:41:33 +0800
committerFrank Li <Frank.Li@freescale.com>2012-01-09 17:32:16 +0800
commitdea497fbc8b8b702c397f905888fe1b123406703 (patch)
tree527f1e896a99d8d76d68237cee37eda7cfff7b05
parent62daaf5727a7257131e7f0a681a8b0cf89fa174e (diff)
ENGR00171564-2 MX6Q ARM2: Enable TVIN based on AutoBoard
- Add TVin platform data - Configure TVin io: such as RESET, POWERDOWN Signed-off-by: Even Xu <b21019@freescale.com>
-rw-r--r--arch/arm/mach-mx6/board-mx6q_arm2.c63
-rw-r--r--arch/arm/plat-mxc/include/mach/iomux-mx6q.h2
2 files changed, 56 insertions, 9 deletions
diff --git a/arch/arm/mach-mx6/board-mx6q_arm2.c b/arch/arm/mach-mx6/board-mx6q_arm2.c
index dca7a7f16c32..26c5caa501a3 100644
--- a/arch/arm/mach-mx6/board-mx6q_arm2.c
+++ b/arch/arm/mach-mx6/board-mx6q_arm2.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc. All Rights Reserved.
*
* 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
@@ -100,8 +100,9 @@
#define MX6Q_ARM2_CAN2_STBY MX6Q_ARM2_IO_EXP_GPIO2(1)
#define MX6Q_ARM2_CAN2_EN IMX_GPIO_NR(5, 24)
-#define MX6Q_SMD_CSI0_RST IMX_GPIO_NR(4, 5)
-#define MX6Q_SMD_CSI0_PWN IMX_GPIO_NR(5, 23)
+#define MX6Q_ARM2_CSI0_RST IMX_GPIO_NR(4, 5)
+#define MX6Q_ARM2_CSI0_PWN IMX_GPIO_NR(5, 23)
+#define MX6Q_ARM2_CSI0_RST_TVIN IMX_GPIO_NR(5, 25)
#define BMCR_PDOWN 0x0800 /* PHY Powerdown */
@@ -334,6 +335,25 @@ static iomux_v3_cfg_t mx6q_arm2_csi0_sensor_pads[] = {
MX6Q_PAD_CSI0_DAT5__GPIO_5_23,
};
+static iomux_v3_cfg_t mx6q_arm2_csi0_tvin_pads[] = {
+ /* ipu1 csi0 */
+ MX6Q_PAD_CSI0_DAT12__IPU1_CSI0_D_12,
+ MX6Q_PAD_CSI0_DAT13__IPU1_CSI0_D_13,
+ MX6Q_PAD_CSI0_DAT14__IPU1_CSI0_D_14,
+ MX6Q_PAD_CSI0_DAT15__IPU1_CSI0_D_15,
+ MX6Q_PAD_CSI0_DAT16__IPU1_CSI0_D_16,
+ MX6Q_PAD_CSI0_DAT17__IPU1_CSI0_D_17,
+ MX6Q_PAD_CSI0_DAT18__IPU1_CSI0_D_18,
+ MX6Q_PAD_CSI0_DAT19__IPU1_CSI0_D_19,
+ MX6Q_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC,
+ MX6Q_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC,
+ MX6Q_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK,
+ /* camera reset */
+ MX6Q_PAD_CSI0_DAT7__GPIO_5_25,
+ /* camera powerdown */
+ MX6Q_PAD_CSI0_DAT5__GPIO_5_23,
+};
+
static iomux_v3_cfg_t mx6q_arm2_mipi_sensor_pads[] = {
MX6Q_PAD_CSI0_MCLK__CCM_CLKO,
};
@@ -681,14 +701,14 @@ static void mx6q_csi0_io_init(void)
ARRAY_SIZE(mx6q_arm2_csi0_sensor_pads));
/* Camera reset */
- gpio_request(MX6Q_SMD_CSI0_RST, "cam-reset");
- gpio_direction_output(MX6Q_SMD_CSI0_RST, 1);
+ gpio_request(MX6Q_ARM2_CSI0_RST, "cam-reset");
+ gpio_direction_output(MX6Q_ARM2_CSI0_RST, 1);
/* Camera power down */
- gpio_request(MX6Q_SMD_CSI0_PWN, "cam-pwdn");
- gpio_direction_output(MX6Q_SMD_CSI0_PWN, 1);
+ gpio_request(MX6Q_ARM2_CSI0_PWN, "cam-pwdn");
+ gpio_direction_output(MX6Q_ARM2_CSI0_PWN, 1);
msleep(1);
- gpio_set_value(MX6Q_SMD_CSI0_PWN, 0);
+ gpio_set_value(MX6Q_ARM2_CSI0_PWN, 0);
/* For MX6Q GPR1 bit19 and bit20 meaning:
* Bit19: 0 - Enable mipi to IPU1 CSI0
@@ -713,6 +733,29 @@ static struct fsl_mxc_camera_platform_data camera_data = {
.io_init = mx6q_csi0_io_init,
};
+static void mx6q_csi0_tvin_io_init(void)
+{
+ mxc_iomux_v3_setup_multiple_pads(mx6q_arm2_csi0_tvin_pads,
+ ARRAY_SIZE(mx6q_arm2_csi0_tvin_pads));
+
+ /* Tvin reset */
+ gpio_request(MX6Q_ARM2_CSI0_RST_TVIN, "tvin-reset");
+ gpio_direction_output(MX6Q_ARM2_CSI0_RST_TVIN, 1);
+
+ /* Tvin power down */
+ gpio_request(MX6Q_ARM2_CSI0_PWN, "cam-pwdn");
+ gpio_direction_output(MX6Q_ARM2_CSI0_PWN, 0);
+ msleep(1);
+ gpio_set_value(MX6Q_ARM2_CSI0_PWN, 1);
+
+ mxc_iomux_set_gpr_register(1, 19, 1, 1);
+}
+
+static struct fsl_mxc_tvin_platform_data tvin_data = {
+ .io_init = mx6q_csi0_tvin_io_init,
+ .cvbs = false,
+};
+
static void mx6q_mipi_sensor_io_init(void)
{
mxc_iomux_v3_setup_multiple_pads(mx6q_arm2_mipi_sensor_pads,
@@ -735,6 +778,10 @@ static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {
I2C_BOARD_INFO("ov5640", 0x3c),
.platform_data = (void *)&camera_data,
},
+ {
+ I2C_BOARD_INFO("adv7180", 0x21),
+ .platform_data = (void *)&tvin_data,
+ },
};
static struct imxi2c_platform_data mx6q_arm2_i2c0_data = {
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx6q.h b/arch/arm/plat-mxc/include/mach/iomux-mx6q.h
index 756a576a7aae..27242c76c65f 100644
--- a/arch/arm/plat-mxc/include/mach/iomux-mx6q.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-mx6q.h
@@ -6213,7 +6213,7 @@ typedef enum iomux_config {
#define MX6Q_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD \
(_MX6Q_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD | MUX_PAD_CTRL(NO_PAD_CTRL))
#define MX6Q_PAD_CSI0_DAT7__GPIO_5_25 \
- (_MX6Q_PAD_CSI0_DAT7__GPIO_5_25 | MUX_PAD_CTRL(NO_PAD_CTRL))
+ (_MX6Q_PAD_CSI0_DAT7__GPIO_5_25 | MUX_PAD_CTRL(MX6Q_HIGH_DRV))
#define MX6Q_PAD_CSI0_DAT7__MMDC_MMDC_DEBUG_46 \
(_MX6Q_PAD_CSI0_DAT7__MMDC_MMDC_DEBUG_46 | MUX_PAD_CTRL(NO_PAD_CTRL))
#define MX6Q_PAD_CSI0_DAT7__CHEETAH_TRACE_4 \