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