aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2013-03-18 14:26:40 -0400
committerSimon Horman <horms+renesas@verge.net.au>2013-03-21 06:36:33 -0400
commita9060f89d9ad4e806c69acb1ea5ebdaeaa91e54b (patch)
tree16d1ab0904c7d3cebce8bf9fa35e55d51109a2a0 /arch/arm
parent546e5d3ef6f2f17c63de01f1cf43cdb51c1e9a6b (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.c45
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 */
561static struct regulator_consumer_supply fixed3v3_power_consumers[] = { 561static 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 */
647static struct regulator_consumer_supply vcc_sdhi1_consumers[] = {
648 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
649};
650
651static 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
659static 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
667static 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 = {
658static struct sh_mobile_sdhi_info sdhi0_info = { 685static 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 = {
699static struct sh_mobile_sdhi_info sdhi1_info = { 727static 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
1009static const struct pinctrl_map eva_pinctrl_map[] = { 1038static 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