diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-shmobile/board-armadillo800eva.c | 101 |
1 files changed, 86 insertions, 15 deletions
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 60694e866d1a..f322a18b55b6 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -28,8 +28,10 @@ | |||
28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
30 | #include <linux/gpio_keys.h> | 30 | #include <linux/gpio_keys.h> |
31 | #include <linux/regulator/driver.h> | ||
31 | #include <linux/pinctrl/machine.h> | 32 | #include <linux/pinctrl/machine.h> |
32 | #include <linux/regulator/fixed.h> | 33 | #include <linux/regulator/fixed.h> |
34 | #include <linux/regulator/gpio-regulator.h> | ||
33 | #include <linux/regulator/machine.h> | 35 | #include <linux/regulator/machine.h> |
34 | #include <linux/sh_eth.h> | 36 | #include <linux/sh_eth.h> |
35 | #include <linux/videodev2.h> | 37 | #include <linux/videodev2.h> |
@@ -555,17 +557,94 @@ static struct platform_device gpio_keys_device = { | |||
555 | }, | 557 | }, |
556 | }; | 558 | }; |
557 | 559 | ||
558 | /* Fixed 3.3V regulator to be used by SDHI0, SDHI1, MMCIF */ | 560 | /* Fixed 3.3V regulator to be used by SDHI1, MMCIF */ |
559 | static struct regulator_consumer_supply fixed3v3_power_consumers[] = | 561 | static struct regulator_consumer_supply fixed3v3_power_consumers[] = { |
560 | { | ||
561 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), | ||
562 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), | ||
563 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), | 562 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), |
564 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), | 563 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), |
565 | REGULATOR_SUPPLY("vmmc", "sh_mmcif"), | 564 | REGULATOR_SUPPLY("vmmc", "sh_mmcif"), |
566 | REGULATOR_SUPPLY("vqmmc", "sh_mmcif"), | 565 | REGULATOR_SUPPLY("vqmmc", "sh_mmcif"), |
567 | }; | 566 | }; |
568 | 567 | ||
568 | /* Fixed 3.3V regulator to be used by SDHI0 */ | ||
569 | static struct regulator_consumer_supply vcc_sdhi0_consumers[] = { | ||
570 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), | ||
571 | }; | ||
572 | |||
573 | static struct regulator_init_data vcc_sdhi0_init_data = { | ||
574 | .constraints = { | ||
575 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
576 | }, | ||
577 | .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi0_consumers), | ||
578 | .consumer_supplies = vcc_sdhi0_consumers, | ||
579 | }; | ||
580 | |||
581 | static struct fixed_voltage_config vcc_sdhi0_info = { | ||
582 | .supply_name = "SDHI0 Vcc", | ||
583 | .microvolts = 3300000, | ||
584 | .gpio = GPIO_PORT75, | ||
585 | .enable_high = 1, | ||
586 | .init_data = &vcc_sdhi0_init_data, | ||
587 | }; | ||
588 | |||
589 | static struct platform_device vcc_sdhi0 = { | ||
590 | .name = "reg-fixed-voltage", | ||
591 | .id = 1, | ||
592 | .dev = { | ||
593 | .platform_data = &vcc_sdhi0_info, | ||
594 | }, | ||
595 | }; | ||
596 | |||
597 | /* 1.8 / 3.3V SDHI0 VccQ regulator */ | ||
598 | static struct regulator_consumer_supply vccq_sdhi0_consumers[] = { | ||
599 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), | ||
600 | }; | ||
601 | |||
602 | static struct regulator_init_data vccq_sdhi0_init_data = { | ||
603 | .constraints = { | ||
604 | .input_uV = 3300000, | ||
605 | .min_uV = 1800000, | ||
606 | .max_uV = 3300000, | ||
607 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | | ||
608 | REGULATOR_CHANGE_STATUS, | ||
609 | }, | ||
610 | .num_consumer_supplies = ARRAY_SIZE(vccq_sdhi0_consumers), | ||
611 | .consumer_supplies = vccq_sdhi0_consumers, | ||
612 | }; | ||
613 | |||
614 | static struct gpio vccq_sdhi0_gpios[] = { | ||
615 | {GPIO_PORT17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" }, | ||
616 | }; | ||
617 | |||
618 | static struct gpio_regulator_state vccq_sdhi0_states[] = { | ||
619 | { .value = 3300000, .gpios = (0 << 0) }, | ||
620 | { .value = 1800000, .gpios = (1 << 0) }, | ||
621 | }; | ||
622 | |||
623 | static struct gpio_regulator_config vccq_sdhi0_info = { | ||
624 | .supply_name = "vqmmc", | ||
625 | |||
626 | .enable_gpio = GPIO_PORT74, | ||
627 | .enable_high = 1, | ||
628 | .enabled_at_boot = 0, | ||
629 | |||
630 | .gpios = vccq_sdhi0_gpios, | ||
631 | .nr_gpios = ARRAY_SIZE(vccq_sdhi0_gpios), | ||
632 | |||
633 | .states = vccq_sdhi0_states, | ||
634 | .nr_states = ARRAY_SIZE(vccq_sdhi0_states), | ||
635 | |||
636 | .type = REGULATOR_VOLTAGE, | ||
637 | .init_data = &vccq_sdhi0_init_data, | ||
638 | }; | ||
639 | |||
640 | static struct platform_device vccq_sdhi0 = { | ||
641 | .name = "gpio-regulator", | ||
642 | .id = -1, | ||
643 | .dev = { | ||
644 | .platform_data = &vccq_sdhi0_info, | ||
645 | }, | ||
646 | }; | ||
647 | |||
569 | /* SDHI0 */ | 648 | /* SDHI0 */ |
570 | /* | 649 | /* |
571 | * FIXME | 650 | * FIXME |
@@ -580,7 +659,6 @@ static struct sh_mobile_sdhi_info sdhi0_info = { | |||
580 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | 659 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
581 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | 660 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, |
582 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ, | 661 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ, |
583 | .tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | ||
584 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | 662 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, |
585 | .cd_gpio = GPIO_PORT167, | 663 | .cd_gpio = GPIO_PORT167, |
586 | }; | 664 | }; |
@@ -622,7 +700,6 @@ static struct sh_mobile_sdhi_info sdhi1_info = { | |||
622 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | 700 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
623 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | 701 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, |
624 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ, | 702 | .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ, |
625 | .tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | ||
626 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | 703 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, |
627 | /* Port72 cannot generate IRQs, will be used in polling mode. */ | 704 | /* Port72 cannot generate IRQs, will be used in polling mode. */ |
628 | .cd_gpio = GPIO_PORT72, | 705 | .cd_gpio = GPIO_PORT72, |
@@ -673,7 +750,6 @@ static const struct pinctrl_map eva_sdhi1_pinctrl_map[] = { | |||
673 | /* MMCIF */ | 750 | /* MMCIF */ |
674 | static struct sh_mmcif_plat_data sh_mmcif_plat = { | 751 | static struct sh_mmcif_plat_data sh_mmcif_plat = { |
675 | .sup_pclk = 0, | 752 | .sup_pclk = 0, |
676 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | ||
677 | .caps = MMC_CAP_4_BIT_DATA | | 753 | .caps = MMC_CAP_4_BIT_DATA | |
678 | MMC_CAP_8_BIT_DATA | | 754 | MMC_CAP_8_BIT_DATA | |
679 | MMC_CAP_NONREMOVABLE, | 755 | MMC_CAP_NONREMOVABLE, |
@@ -926,6 +1002,8 @@ static struct platform_device *eva_devices[] __initdata = { | |||
926 | &fsi_wm8978_device, | 1002 | &fsi_wm8978_device, |
927 | &fsi_hdmi_device, | 1003 | &fsi_hdmi_device, |
928 | &i2c_gpio_device, | 1004 | &i2c_gpio_device, |
1005 | &vcc_sdhi0, | ||
1006 | &vccq_sdhi0, | ||
929 | }; | 1007 | }; |
930 | 1008 | ||
931 | static const struct pinctrl_map eva_pinctrl_map[] = { | 1009 | static const struct pinctrl_map eva_pinctrl_map[] = { |
@@ -1060,13 +1138,6 @@ static void __init eva_init(void) | |||
1060 | usb = &usbhsf_device; | 1138 | usb = &usbhsf_device; |
1061 | } | 1139 | } |
1062 | 1140 | ||
1063 | /* SDHI0 */ | ||
1064 | gpio_request_one(17, GPIOF_OUT_INIT_LOW, NULL); /* SDHI0_18/33_B */ | ||
1065 | gpio_request_one(74, GPIOF_OUT_INIT_HIGH, NULL); /* SDHI0_PON */ | ||
1066 | gpio_request_one(75, GPIOF_OUT_INIT_HIGH, NULL); /* SDSLOT1_PON */ | ||
1067 | |||
1068 | /* we can use GPIO_FN_IRQ31_PORT167 here for SDHI0 CD irq */ | ||
1069 | |||
1070 | /* CEU0 */ | 1141 | /* CEU0 */ |
1071 | gpio_request(GPIO_FN_VIO0_D7, NULL); | 1142 | gpio_request(GPIO_FN_VIO0_D7, NULL); |
1072 | gpio_request(GPIO_FN_VIO0_D6, NULL); | 1143 | gpio_request(GPIO_FN_VIO0_D6, NULL); |