diff options
author | Tomasz Stanislawski <t.stanislaws@samsung.com> | 2011-09-16 05:48:32 -0400 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2011-10-04 05:58:31 -0400 |
commit | d737cf29bfb60ad5c881a8a43fd4d7b38c2a1ee9 (patch) | |
tree | d456cce712d8fa92a565404f64fbbf8a7aec3c4f /arch/arm/mach-exynos4/mach-universal_c210.c | |
parent | fbf05563fe2a3c83c18b4e2768a0d96971a07b16 (diff) |
ARM: EXYNOS4: enable TV support on Universal_C210 board
This patch adds platform devices and regulators for TV devices on
Samsung Universal C210 board.
Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/mach-exynos4/mach-universal_c210.c')
-rw-r--r-- | arch/arm/mach-exynos4/mach-universal_c210.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/arch/arm/mach-exynos4/mach-universal_c210.c b/arch/arm/mach-exynos4/mach-universal_c210.c index 3ca7f3a8c2c5..315c50328067 100644 --- a/arch/arm/mach-exynos4/mach-universal_c210.c +++ b/arch/arm/mach-exynos4/mach-universal_c210.c | |||
@@ -113,6 +113,9 @@ static struct regulator_consumer_supply lp3974_buck1_consumer = | |||
113 | static struct regulator_consumer_supply lp3974_buck2_consumer = | 113 | static struct regulator_consumer_supply lp3974_buck2_consumer = |
114 | REGULATOR_SUPPLY("vddg3d", NULL); | 114 | REGULATOR_SUPPLY("vddg3d", NULL); |
115 | 115 | ||
116 | static struct regulator_consumer_supply lp3974_buck3_consumer = | ||
117 | REGULATOR_SUPPLY("vdet", "s5p-sdo"); | ||
118 | |||
116 | static struct regulator_init_data lp3974_buck1_data = { | 119 | static struct regulator_init_data lp3974_buck1_data = { |
117 | .constraints = { | 120 | .constraints = { |
118 | .name = "VINT_1.1V", | 121 | .name = "VINT_1.1V", |
@@ -156,6 +159,8 @@ static struct regulator_init_data lp3974_buck3_data = { | |||
156 | .enabled = 1, | 159 | .enabled = 1, |
157 | }, | 160 | }, |
158 | }, | 161 | }, |
162 | .num_consumer_supplies = 1, | ||
163 | .consumer_supplies = &lp3974_buck3_consumer, | ||
159 | }; | 164 | }; |
160 | 165 | ||
161 | static struct regulator_init_data lp3974_buck4_data = { | 166 | static struct regulator_init_data lp3974_buck4_data = { |
@@ -184,6 +189,11 @@ static struct regulator_init_data lp3974_ldo2_data = { | |||
184 | }, | 189 | }, |
185 | }; | 190 | }; |
186 | 191 | ||
192 | static struct regulator_consumer_supply lp3974_ldo3_consumer[] = { | ||
193 | REGULATOR_SUPPLY("vdd", "exynos4-hdmi"), | ||
194 | REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"), | ||
195 | }; | ||
196 | |||
187 | static struct regulator_init_data lp3974_ldo3_data = { | 197 | static struct regulator_init_data lp3974_ldo3_data = { |
188 | .constraints = { | 198 | .constraints = { |
189 | .name = "VUSB+MIPI_1.1V", | 199 | .name = "VUSB+MIPI_1.1V", |
@@ -195,6 +205,12 @@ static struct regulator_init_data lp3974_ldo3_data = { | |||
195 | .disabled = 1, | 205 | .disabled = 1, |
196 | }, | 206 | }, |
197 | }, | 207 | }, |
208 | .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo3_consumer), | ||
209 | .consumer_supplies = lp3974_ldo3_consumer, | ||
210 | }; | ||
211 | |||
212 | static struct regulator_consumer_supply lp3974_ldo4_consumer[] = { | ||
213 | REGULATOR_SUPPLY("vdd_osc", "exynos4-hdmi"), | ||
198 | }; | 214 | }; |
199 | 215 | ||
200 | static struct regulator_init_data lp3974_ldo4_data = { | 216 | static struct regulator_init_data lp3974_ldo4_data = { |
@@ -208,6 +224,8 @@ static struct regulator_init_data lp3974_ldo4_data = { | |||
208 | .disabled = 1, | 224 | .disabled = 1, |
209 | }, | 225 | }, |
210 | }, | 226 | }, |
227 | .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo4_consumer), | ||
228 | .consumer_supplies = lp3974_ldo4_consumer, | ||
211 | }; | 229 | }; |
212 | 230 | ||
213 | static struct regulator_init_data lp3974_ldo5_data = { | 231 | static struct regulator_init_data lp3974_ldo5_data = { |
@@ -249,6 +267,10 @@ static struct regulator_init_data lp3974_ldo7_data = { | |||
249 | }, | 267 | }, |
250 | }; | 268 | }; |
251 | 269 | ||
270 | static struct regulator_consumer_supply lp3974_ldo8_consumer[] = { | ||
271 | REGULATOR_SUPPLY("vdd33a_dac", "s5p-sdo"), | ||
272 | }; | ||
273 | |||
252 | static struct regulator_init_data lp3974_ldo8_data = { | 274 | static struct regulator_init_data lp3974_ldo8_data = { |
253 | .constraints = { | 275 | .constraints = { |
254 | .name = "VUSB+VDAC_3.3V", | 276 | .name = "VUSB+VDAC_3.3V", |
@@ -260,6 +282,8 @@ static struct regulator_init_data lp3974_ldo8_data = { | |||
260 | .disabled = 1, | 282 | .disabled = 1, |
261 | }, | 283 | }, |
262 | }, | 284 | }, |
285 | .num_consumer_supplies = ARRAY_SIZE(lp3974_ldo8_consumer), | ||
286 | .consumer_supplies = lp3974_ldo8_consumer, | ||
263 | }; | 287 | }; |
264 | 288 | ||
265 | static struct regulator_init_data lp3974_ldo9_data = { | 289 | static struct regulator_init_data lp3974_ldo9_data = { |
@@ -475,6 +499,34 @@ static struct max8998_platform_data universal_lp3974_pdata = { | |||
475 | .wakeup = true, | 499 | .wakeup = true, |
476 | }; | 500 | }; |
477 | 501 | ||
502 | static struct regulator_consumer_supply hdmi_fixed_consumer = | ||
503 | REGULATOR_SUPPLY("hdmi-en", "exynos4-hdmi"); | ||
504 | |||
505 | static struct regulator_init_data hdmi_fixed_voltage_init_data = { | ||
506 | .constraints = { | ||
507 | .name = "HDMI_5V", | ||
508 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
509 | }, | ||
510 | .num_consumer_supplies = 1, | ||
511 | .consumer_supplies = &hdmi_fixed_consumer, | ||
512 | }; | ||
513 | |||
514 | static struct fixed_voltage_config hdmi_fixed_voltage_config = { | ||
515 | .supply_name = "HDMI_EN1", | ||
516 | .microvolts = 5000000, | ||
517 | .gpio = EXYNOS4_GPE0(1), | ||
518 | .enable_high = true, | ||
519 | .init_data = &hdmi_fixed_voltage_init_data, | ||
520 | }; | ||
521 | |||
522 | static struct platform_device hdmi_fixed_voltage = { | ||
523 | .name = "reg-fixed-voltage", | ||
524 | .id = 6, | ||
525 | .dev = { | ||
526 | .platform_data = &hdmi_fixed_voltage_config, | ||
527 | }, | ||
528 | }; | ||
529 | |||
478 | /* GPIO I2C 5 (PMIC) */ | 530 | /* GPIO I2C 5 (PMIC) */ |
479 | static struct i2c_board_info i2c5_devs[] __initdata = { | 531 | static struct i2c_board_info i2c5_devs[] __initdata = { |
480 | { | 532 | { |
@@ -743,6 +795,12 @@ static struct platform_device *universal_devices[] __initdata = { | |||
743 | &s3c_device_hsmmc3, | 795 | &s3c_device_hsmmc3, |
744 | &s3c_device_i2c3, | 796 | &s3c_device_i2c3, |
745 | &s3c_device_i2c5, | 797 | &s3c_device_i2c5, |
798 | &s5p_device_i2c_hdmiphy, | ||
799 | &hdmi_fixed_voltage, | ||
800 | &exynos4_device_pd[PD_TV], | ||
801 | &s5p_device_hdmi, | ||
802 | &s5p_device_sdo, | ||
803 | &s5p_device_mixer, | ||
746 | 804 | ||
747 | /* Universal Devices */ | 805 | /* Universal Devices */ |
748 | &i2c_gpio12, | 806 | &i2c_gpio12, |
@@ -763,6 +821,20 @@ static void __init universal_map_io(void) | |||
763 | s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs)); | 821 | s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs)); |
764 | } | 822 | } |
765 | 823 | ||
824 | void s5p_tv_setup(void) | ||
825 | { | ||
826 | /* direct HPD to HDMI chip */ | ||
827 | gpio_request(EXYNOS4_GPX3(7), "hpd-plug"); | ||
828 | |||
829 | gpio_direction_input(EXYNOS4_GPX3(7)); | ||
830 | s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3)); | ||
831 | s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE); | ||
832 | |||
833 | /* setup dependencies between TV devices */ | ||
834 | s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev; | ||
835 | s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev; | ||
836 | } | ||
837 | |||
766 | static void __init universal_reserve(void) | 838 | static void __init universal_reserve(void) |
767 | { | 839 | { |
768 | s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20); | 840 | s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20); |
@@ -771,6 +843,7 @@ static void __init universal_reserve(void) | |||
771 | static void __init universal_machine_init(void) | 843 | static void __init universal_machine_init(void) |
772 | { | 844 | { |
773 | universal_sdhci_init(); | 845 | universal_sdhci_init(); |
846 | s5p_tv_setup(); | ||
774 | 847 | ||
775 | i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs)); | 848 | i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs)); |
776 | i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs)); | 849 | i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs)); |
@@ -780,6 +853,7 @@ static void __init universal_machine_init(void) | |||
780 | i2c_register_board_info(3, i2c3_devs, ARRAY_SIZE(i2c3_devs)); | 853 | i2c_register_board_info(3, i2c3_devs, ARRAY_SIZE(i2c3_devs)); |
781 | 854 | ||
782 | s3c_i2c5_set_platdata(NULL); | 855 | s3c_i2c5_set_platdata(NULL); |
856 | s5p_i2c_hdmiphy_set_platdata(NULL); | ||
783 | i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs)); | 857 | i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs)); |
784 | 858 | ||
785 | s5p_fimd0_set_platdata(&universal_lcd_pdata); | 859 | s5p_fimd0_set_platdata(&universal_lcd_pdata); |