[PATCH 1/2] ARM: Exynos4: enable TV support on Nuri board

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch adds platform devices and regulators for TV devices on
Samsung Nuri board.

Signed-off-by: Tomasz Stanislawski <t.stanislaws@xxxxxxxxxxx>
Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
---
 arch/arm/mach-exynos/Kconfig     |    2 +
 arch/arm/mach-exynos/mach-nuri.c |   99 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 5d602f6..4cb5225 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -268,12 +268,14 @@ config MACH_NURI
 	select S3C_DEV_I2C1
 	select S3C_DEV_I2C3
 	select S3C_DEV_I2C5
+	select S5P_DEV_I2C_HDMIPHY
 	select S5P_DEV_CSIS0
 	select S5P_DEV_FIMC0
 	select S5P_DEV_FIMC1
 	select S5P_DEV_FIMC2
 	select S5P_DEV_FIMC3
 	select S5P_DEV_MFC
+	select S5P_DEV_TV
 	select S5P_DEV_USB_EHCI
 	select S5P_SETUP_MIPIPHY
 	select EXYNOS4_DEV_DMA
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
index b895ec0..7d04844 100644
--- a/arch/arm/mach-exynos/mach-nuri.c
+++ b/arch/arm/mach-exynos/mach-nuri.c
@@ -8,6 +8,7 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/serial_core.h>
 #include <linux/input.h>
@@ -29,6 +30,8 @@
 #include <video/platform_lcd.h>
 #include <media/m5mols.h>
 #include <media/s5p_fimc.h>
+#include <media/s5p_hdmi.h>
+#include <media/sii9234.h>
 #include <media/v4l2-mediabus.h>
 
 #include <asm/mach/arch.h>
@@ -75,6 +78,7 @@ enum fixed_regulator_id {
 	FIXED_REG_ID_MAX8903,
 	FIXED_REG_ID_CAM_A28V,
 	FIXED_REG_ID_CAM_12V,
+	FIXED_REG_ID_HDMI_EN,
 };
 
 static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
@@ -389,9 +393,12 @@ static void __init nuri_tsp_init(void)
 
 static struct regulator_consumer_supply __initdata max8997_ldo1_[] = {
 	REGULATOR_SUPPLY("vdd", "s5p-adc"), /* Used by CPU's ADC drv */
+	REGULATOR_SUPPLY("vdd_osc", "exynos4-hdmi"), /* HDMI */
 };
 static struct regulator_consumer_supply __initdata max8997_ldo3_[] = {
 	REGULATOR_SUPPLY("vdd11", "s5p-mipi-csis.0"), /* MIPI */
+	REGULATOR_SUPPLY("vdd", "exynos4-hdmi"), /* HDMI */
+	REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"), /* HDMI */
 };
 static struct regulator_consumer_supply __initdata max8997_ldo4_[] = {
 	REGULATOR_SUPPLY("vdd18", "s5p-mipi-csis.0"), /* MIPI */
@@ -563,6 +570,51 @@ static struct regulator_init_data __initdata max8997_ldo7_data = {
 	.consumer_supplies	= max8997_ldo7_,
 };
 
+static struct regulator_consumer_supply hdmi_fixed_consumer[] = {
+	REGULATOR_SUPPLY("hdmi-en", "exynos4-hdmi"),
+	REGULATOR_SUPPLY("hdmi-en", "15-0039"), /* sii9234 */
+};
+
+static struct regulator_init_data hdmi_fixed_voltage_init_data = {
+	.constraints		= {
+		.name		= "HDMI_5V",
+		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies	= ARRAY_SIZE(hdmi_fixed_consumer),
+	.consumer_supplies	= hdmi_fixed_consumer,
+};
+
+static struct fixed_voltage_config hdmi_fixed_voltage_config = {
+	.supply_name		= "HDMI_EN1",
+	.microvolts		= 5000000,
+	.gpio			= EXYNOS4_GPX2(4),
+	.enable_high		= true,
+	.init_data		= &hdmi_fixed_voltage_init_data,
+};
+
+static struct platform_device hdmi_fixed_voltage = {
+	.name			= "reg-fixed-voltage",
+	.id			= FIXED_REG_ID_HDMI_EN,
+	.dev			= {
+		.platform_data	= &hdmi_fixed_voltage_config,
+	},
+};
+
+/* I2C-GPIO15: MHL */
+static struct i2c_gpio_platform_data i2c15_gpio_data = {
+	.sda_pin		= EXYNOS4_GPY3(0),	/* XM0ADDR_0 */
+	.scl_pin		= EXYNOS4_GPY3(2),	/* XM0ADDR_2 */
+	.udelay			= 2,
+};
+
+static struct platform_device i2c15_gpio = {
+	.name			= "i2c-gpio",
+	.id			= 15,
+	.dev			= {
+		.platform_data	= &i2c15_gpio_data,
+	},
+};
+
 static struct regulator_init_data __initdata max8997_ldo8_data = {
 	.constraints	= {
 		.name		= "VUSB/VDAC_3.3V_C210",
@@ -1267,6 +1319,11 @@ static struct platform_device *nuri_devices[] __initdata = {
 	&exynos4_device_pd[PD_LCD0],
 	&exynos4_device_pd[PD_CAM],
 	&s5p_device_fimc_md,
+	&exynos4_device_pd[PD_TV],
+	&hdmi_fixed_voltage,
+	&s5p_device_i2c_hdmiphy,
+	&s5p_device_hdmi,
+	&s5p_device_mixer,
 
 	/* NURI Devices */
 	&nuri_gpio_keys,
@@ -1276,6 +1333,7 @@ static struct platform_device *nuri_devices[] __initdata = {
 	&nuri_max8903_device,
 	&cam_vdda_fixed_rdev,
 	&cam_8m_12v_fixed_rdev,
+	&i2c15_gpio,
 };
 
 static void __init nuri_map_io(void)
@@ -1290,6 +1348,46 @@ static void __init nuri_reserve(void)
 	s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
 }
 
+static struct i2c_board_info s5p_hdmiphy_info = {
+	I2C_BOARD_INFO("hdmiphy", 0x70 >> 1),
+};
+
+static struct sii9234_platform_data s5p_sii9234_pdata = {
+	.gpio_n_reset = EXYNOS4_GPF3(4),
+};
+
+static struct i2c_board_info s5p_sii9234_info = {
+	I2C_BOARD_INFO("SII9234", 0x72 >> 1),
+	.platform_data = &s5p_sii9234_pdata,
+};
+
+static struct s5p_hdmi_platform_data s5p_hdmi_pdata = {
+	.hdmiphy_info = &s5p_hdmiphy_info,
+	.hdmiphy_bus = 8,
+	.mhl_info = &s5p_sii9234_info,
+	.mhl_bus = 15,
+};
+
+static void s5p_tv_init(void)
+{
+	/* setting up HDMIPHY device */
+	s5p_i2c_hdmiphy_set_platdata(NULL);
+
+	/* direct HPD to HDMI chip */
+	gpio_request(EXYNOS4_GPX3(7), "hpd-plug");
+
+	gpio_direction_input(EXYNOS4_GPX3(7));
+	s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
+	s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
+
+	/* setting platform data */
+	s5p_device_hdmi.dev.platform_data = &s5p_hdmi_pdata;
+
+	/* setup dependencies between TV devices */
+	s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;
+	s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;
+}
+
 static void __init nuri_machine_init(void)
 {
 	nuri_sdhci_init();
@@ -1318,6 +1416,7 @@ static void __init nuri_machine_init(void)
 	s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
 	s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;
 
+	s5p_tv_init();
 	s5p_device_fimc0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 	s5p_device_fimc1.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 	s5p_device_fimc2.dev.parent = &exynos4_device_pd[PD_CAM].dev;
-- 
1.7.5.4

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


[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  Powered by Linux