diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2013-03-18 14:26:40 -0400 |
---|---|---|
committer | Simon Horman <horms+renesas@verge.net.au> | 2013-03-21 06:36:33 -0400 |
commit | a9060f89d9ad4e806c69acb1ea5ebdaeaa91e54b (patch) | |
tree | 16d1ab0904c7d3cebce8bf9fa35e55d51109a2a0 /arch/arm | |
parent | 546e5d3ef6f2f17c63de01f1cf43cdb51c1e9a6b (diff) |
ARM: shmobile: armadillo800eva: add a fixed voltage regulator for SDHI1
The SDHI1 power supply on armadillo800eva can be switched on and off. In
the current version this is not used and the regulator is hard-wired to
"on." This patch switches SDHI1 to a proper fixed-voltage regulator,
using a GPIO to enable and disable it. Both SDHI0 and SDHI1 ports shall
now be specifying the MMC_CAP_POWER_OFF_CARD MMC capability. Both
interfaces tested with an SDIO card.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-shmobile/board-armadillo800eva.c | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index f322a18b55b6..7a78f9486684 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -559,8 +559,6 @@ static struct platform_device gpio_keys_device = { | |||
559 | 559 | ||
560 | /* Fixed 3.3V regulator to be used by SDHI1, MMCIF */ | 560 | /* Fixed 3.3V regulator to be used by SDHI1, MMCIF */ |
561 | static struct regulator_consumer_supply fixed3v3_power_consumers[] = { | 561 | static struct regulator_consumer_supply fixed3v3_power_consumers[] = { |
562 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), | ||
563 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), | ||
564 | REGULATOR_SUPPLY("vmmc", "sh_mmcif"), | 562 | REGULATOR_SUPPLY("vmmc", "sh_mmcif"), |
565 | REGULATOR_SUPPLY("vqmmc", "sh_mmcif"), | 563 | REGULATOR_SUPPLY("vqmmc", "sh_mmcif"), |
566 | }; | 564 | }; |
@@ -645,6 +643,35 @@ static struct platform_device vccq_sdhi0 = { | |||
645 | }, | 643 | }, |
646 | }; | 644 | }; |
647 | 645 | ||
646 | /* Fixed 3.3V regulator to be used by SDHI1 */ | ||
647 | static struct regulator_consumer_supply vcc_sdhi1_consumers[] = { | ||
648 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), | ||
649 | }; | ||
650 | |||
651 | static struct regulator_init_data vcc_sdhi1_init_data = { | ||
652 | .constraints = { | ||
653 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
654 | }, | ||
655 | .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi1_consumers), | ||
656 | .consumer_supplies = vcc_sdhi1_consumers, | ||
657 | }; | ||
658 | |||
659 | static struct fixed_voltage_config vcc_sdhi1_info = { | ||
660 | .supply_name = "SDHI1 Vcc", | ||
661 | .microvolts = 3300000, | ||
662 | .gpio = GPIO_PORT16, | ||
663 | .enable_high = 1, | ||
664 | .init_data = &vcc_sdhi1_init_data, | ||
665 | }; | ||
666 | |||
667 | static struct platform_device vcc_sdhi1 = { | ||
668 | .name = "reg-fixed-voltage", | ||
669 | .id = 2, | ||
670 | .dev = { | ||
671 | .platform_data = &vcc_sdhi1_info, | ||
672 | }, | ||
673 | }; | ||
674 | |||
648 | /* SDHI0 */ | 675 | /* SDHI0 */ |
649 | /* | 676 | /* |
650 | * FIXME | 677 | * FIXME |
@@ -658,7 +685,8 @@ static struct platform_device vccq_sdhi0 = { | |||
658 | static struct sh_mobile_sdhi_info sdhi0_info = { | 685 | static struct sh_mobile_sdhi_info sdhi0_info = { |
659 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | 686 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
660 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | 687 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, |
661 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ, | 688 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | |
689 | MMC_CAP_POWER_OFF_CARD, | ||
662 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | 690 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, |
663 | .cd_gpio = GPIO_PORT167, | 691 | .cd_gpio = GPIO_PORT167, |
664 | }; | 692 | }; |
@@ -699,7 +727,8 @@ static struct platform_device sdhi0_device = { | |||
699 | static struct sh_mobile_sdhi_info sdhi1_info = { | 727 | static struct sh_mobile_sdhi_info sdhi1_info = { |
700 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | 728 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
701 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | 729 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, |
702 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ, | 730 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | |
731 | MMC_CAP_POWER_OFF_CARD, | ||
703 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | 732 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, |
704 | /* Port72 cannot generate IRQs, will be used in polling mode. */ | 733 | /* Port72 cannot generate IRQs, will be used in polling mode. */ |
705 | .cd_gpio = GPIO_PORT72, | 734 | .cd_gpio = GPIO_PORT72, |
@@ -992,6 +1021,8 @@ static struct platform_device *eva_devices[] __initdata = { | |||
992 | &lcdc0_device, | 1021 | &lcdc0_device, |
993 | &gpio_keys_device, | 1022 | &gpio_keys_device, |
994 | &sh_eth_device, | 1023 | &sh_eth_device, |
1024 | &vcc_sdhi0, | ||
1025 | &vccq_sdhi0, | ||
995 | &sdhi0_device, | 1026 | &sdhi0_device, |
996 | &sh_mmcif_device, | 1027 | &sh_mmcif_device, |
997 | &hdmi_device, | 1028 | &hdmi_device, |
@@ -1002,8 +1033,6 @@ static struct platform_device *eva_devices[] __initdata = { | |||
1002 | &fsi_wm8978_device, | 1033 | &fsi_wm8978_device, |
1003 | &fsi_hdmi_device, | 1034 | &fsi_hdmi_device, |
1004 | &i2c_gpio_device, | 1035 | &i2c_gpio_device, |
1005 | &vcc_sdhi0, | ||
1006 | &vccq_sdhi0, | ||
1007 | }; | 1036 | }; |
1008 | 1037 | ||
1009 | static const struct pinctrl_map eva_pinctrl_map[] = { | 1038 | static const struct pinctrl_map eva_pinctrl_map[] = { |
@@ -1198,9 +1227,7 @@ static void __init eva_init(void) | |||
1198 | pinctrl_register_mappings(eva_sdhi1_pinctrl_map, | 1227 | pinctrl_register_mappings(eva_sdhi1_pinctrl_map, |
1199 | ARRAY_SIZE(eva_sdhi1_pinctrl_map)); | 1228 | ARRAY_SIZE(eva_sdhi1_pinctrl_map)); |
1200 | 1229 | ||
1201 | /* SDSLOT2_PON */ | 1230 | platform_device_register(&vcc_sdhi1); |
1202 | gpio_request_one(16, GPIOF_OUT_INIT_HIGH, NULL); | ||
1203 | |||
1204 | platform_device_register(&sdhi1_device); | 1231 | platform_device_register(&sdhi1_device); |
1205 | } | 1232 | } |
1206 | 1233 | ||