aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2013-03-22 08:41:45 -0400
committerArnd Bergmann <arnd@arndb.de>2013-03-22 08:41:45 -0400
commit271c8f9afae76a897408c277f9fae4c28bc0c64d (patch)
tree6b17d7f8305bf60b0931a4e9265ed0c097c55fe9
parent8f07b1d580fdbbc21969319d4208a15f5280d04e (diff)
parentac22dde76c80a3ffa3c3c24cf16bb8076b20b767 (diff)
Merge tag 'renesas-boards2-for-v3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/boards
From Simon Horman <horms+renesas@verge.net.au>: Second round of Renesas ARM-based SoC board updates for v3.10 * Resolve a build regression on Mackerel by reverting "ARM: shmobile: streamline mackerel SD and MMC devices" * DTS cleanup and corrections for kzm9g/sh73a0 from Guennadi * SDHI voltage regulator enhancements for kzm9g and armadillo800eva from Guennadi * tag 'renesas-boards2-for-v3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: Revert "ARM: shmobile: streamline mackerel SD and MMC devices" ARM: shmobile: kzm9g-reference: fix device-tree bindings and device names ARM: shmobile: kzm9g: add fixed voltage regulators for SDHI0 and SDHI2 ARM: shmobile: armadillo800eva: add a fixed voltage regulator for SDHI1 ARM: shmobile: sh73a0: move SDHI and MMCIF DT nodes to sh73a0.dtsi ARM: shmobile: kzm9g: SDHI0 and SDHI1 use a 3.3V power supply Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--arch/arm/boot/dts/sh73a0-kzm9g-reference.dts49
-rw-r--r--arch/arm/boot/dts/sh73a0-reference.dtsi24
-rw-r--r--arch/arm/boot/dts/sh73a0.dtsi44
-rw-r--r--arch/arm/mach-shmobile/board-armadillo800eva.c45
-rw-r--r--arch/arm/mach-shmobile/board-kzm9g-reference.c27
-rw-r--r--arch/arm/mach-shmobile/board-kzm9g.c78
-rw-r--r--arch/arm/mach-shmobile/board-mackerel.c113
7 files changed, 230 insertions, 150 deletions
diff --git a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts
index 7fad4b9b2f43..f33b5ccb7446 100644
--- a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts
+++ b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts
@@ -12,7 +12,7 @@
12 */ 12 */
13 13
14/dts-v1/; 14/dts-v1/;
15/include/ "sh73a0-reference.dtsi" 15/include/ "sh73a0.dtsi"
16 16
17/ { 17/ {
18 model = "KZM-A9-GT"; 18 model = "KZM-A9-GT";
@@ -36,42 +36,31 @@
36 regulator-boot-on; 36 regulator-boot-on;
37 }; 37 };
38 38
39 reg_2p8v: regulator@1 { 39 reg_3p3v: regulator@1 {
40 compatible = "regulator-fixed"; 40 compatible = "regulator-fixed";
41 regulator-name = "fixed-2.8V"; 41 regulator-name = "fixed-3.3V";
42 regulator-min-microvolt = <2800000>; 42 regulator-min-microvolt = <3300000>;
43 regulator-max-microvolt = <2800000>; 43 regulator-max-microvolt = <3300000>;
44 regulator-always-on; 44 regulator-always-on;
45 regulator-boot-on; 45 regulator-boot-on;
46 }; 46 };
47
48 sdhi0: sdhi@0xee100000 {
49 compatible = "renesas,shmobile-sdhi";
50 reg = <0xee100000 0x100>;
51 interrupt-parent = <&gic>;
52 interrupts = <0 83 4
53 0 84 4
54 0 85 4>;
55 vmmc-supply = <&reg_2p8v>;
56 bus-width = <4>;
57 toshiba,mmc-has-idle-wait;
58 };
59
60 sdhi2: sdhi@0xee140000 {
61 compatible = "renesas,shmobile-sdhi";
62 reg = <0xee140000 0x100>;
63 interrupt-parent = <&gic>;
64 interrupts = <0 104 4
65 0 105 4>;
66 vmmc-supply = <&reg_2p8v>;
67 bus-width = <4>;
68 broken-cd;
69 toshiba,mmc-wrprotect-disable;
70 toshiba,mmc-has-idle-wait;
71 };
72}; 47};
73 48
74&mmcif { 49&mmcif {
75 bus-width = <8>; 50 bus-width = <8>;
76 vmmc-supply = <&reg_1p8v>; 51 vmmc-supply = <&reg_1p8v>;
52 status = "okay";
53};
54
55&sdhi0 {
56 vmmc-supply = <&reg_3p3v>;
57 bus-width = <4>;
58 status = "okay";
59};
60
61&sdhi2 {
62 vmmc-supply = <&reg_3p3v>;
63 bus-width = <4>;
64 broken-cd;
65 status = "okay";
77}; 66};
diff --git a/arch/arm/boot/dts/sh73a0-reference.dtsi b/arch/arm/boot/dts/sh73a0-reference.dtsi
deleted file mode 100644
index d4bb0125b2b2..000000000000
--- a/arch/arm/boot/dts/sh73a0-reference.dtsi
+++ /dev/null
@@ -1,24 +0,0 @@
1/*
2 * Device Tree Source for the SH73A0 SoC
3 *
4 * Copyright (C) 2012 Renesas Solutions Corp.
5 *
6 * This file is licensed under the terms of the GNU General Public License
7 * version 2. This program is licensed "as is" without any warranty of any
8 * kind, whether express or implied.
9 */
10
11/include/ "sh73a0.dtsi"
12
13/ {
14 compatible = "renesas,sh73a0";
15
16 mmcif: mmcif@0x10010000 {
17 compatible = "renesas,sh-mmcif";
18 reg = <0xe6bd0000 0x100>;
19 interrupt-parent = <&gic>;
20 interrupts = <0 140 0x4
21 0 141 0x4>;
22 reg-io-width = <4>;
23 };
24};
diff --git a/arch/arm/boot/dts/sh73a0.dtsi b/arch/arm/boot/dts/sh73a0.dtsi
index 8a59465d0231..3e4d383ac6d9 100644
--- a/arch/arm/boot/dts/sh73a0.dtsi
+++ b/arch/arm/boot/dts/sh73a0.dtsi
@@ -97,4 +97,48 @@
97 0 189 0x4 97 0 189 0x4
98 0 190 0x4>; 98 0 190 0x4>;
99 }; 99 };
100
101 mmcif: mmcif@0x10010000 {
102 compatible = "renesas,sh-mmcif";
103 reg = <0xe6bd0000 0x100>;
104 interrupt-parent = <&gic>;
105 interrupts = <0 140 0x4
106 0 141 0x4>;
107 reg-io-width = <4>;
108 status = "disabled";
109 };
110
111 sdhi0: sdhi@0xee100000 {
112 compatible = "renesas,r8a7740-sdhi";
113 reg = <0xee100000 0x100>;
114 interrupt-parent = <&gic>;
115 interrupts = <0 83 4
116 0 84 4
117 0 85 4>;
118 cap-sd-highspeed;
119 status = "disabled";
120 };
121
122 /* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
123 sdhi1: sdhi@0xee120000 {
124 compatible = "renesas,r8a7740-sdhi";
125 reg = <0xee120000 0x100>;
126 interrupt-parent = <&gic>;
127 interrupts = <0 88 4
128 0 89 4>;
129 toshiba,mmc-wrprotect-disable;
130 cap-sd-highspeed;
131 status = "disabled";
132 };
133
134 sdhi2: sdhi@0xee140000 {
135 compatible = "renesas,r8a7740-sdhi";
136 reg = <0xee140000 0x100>;
137 interrupt-parent = <&gic>;
138 interrupts = <0 104 4
139 0 105 4>;
140 toshiba,mmc-wrprotect-disable;
141 cap-sd-highspeed;
142 status = "disabled";
143 };
100}; 144};
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
diff --git a/arch/arm/mach-shmobile/board-kzm9g-reference.c b/arch/arm/mach-shmobile/board-kzm9g-reference.c
index e93473c84c56..aefa50d385b7 100644
--- a/arch/arm/mach-shmobile/board-kzm9g-reference.c
+++ b/arch/arm/mach-shmobile/board-kzm9g-reference.c
@@ -40,16 +40,16 @@ static unsigned long pin_pullup_conf[] = {
40}; 40};
41 41
42static const struct pinctrl_map kzm_pinctrl_map[] = { 42static const struct pinctrl_map kzm_pinctrl_map[] = {
43 PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0", 43 PIN_MAP_MUX_GROUP_DEFAULT("e6826000.i2c", "pfc-sh73a0",
44 "i2c3_1", "i2c3"), 44 "i2c3_1", "i2c3"),
45 /* MMCIF */ 45 /* MMCIF */
46 PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 46 PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
47 "mmc0_data8_0", "mmc0"), 47 "mmc0_data8_0", "mmc0"),
48 PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 48 PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
49 "mmc0_ctrl_0", "mmc0"), 49 "mmc0_ctrl_0", "mmc0"),
50 PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 50 PIN_MAP_CONFIGS_PIN_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
51 "PORT279", pin_pullup_conf), 51 "PORT279", pin_pullup_conf),
52 PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", 52 PIN_MAP_CONFIGS_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
53 "mmc0_data8_0", pin_pullup_conf), 53 "mmc0_data8_0", pin_pullup_conf),
54 /* SCIFA4 */ 54 /* SCIFA4 */
55 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0", 55 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
@@ -57,18 +57,18 @@ static const struct pinctrl_map kzm_pinctrl_map[] = {
57 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0", 57 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
58 "scifa4_ctrl", "scifa4"), 58 "scifa4_ctrl", "scifa4"),
59 /* SDHI0 */ 59 /* SDHI0 */
60 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 60 PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
61 "sdhi0_data4", "sdhi0"), 61 "sdhi0_data4", "sdhi0"),
62 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 62 PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
63 "sdhi0_ctrl", "sdhi0"), 63 "sdhi0_ctrl", "sdhi0"),
64 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 64 PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
65 "sdhi0_cd", "sdhi0"), 65 "sdhi0_cd", "sdhi0"),
66 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", 66 PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
67 "sdhi0_wp", "sdhi0"), 67 "sdhi0_wp", "sdhi0"),
68 /* SDHI2 */ 68 /* SDHI2 */
69 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0", 69 PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "pfc-sh73a0",
70 "sdhi2_data4", "sdhi2"), 70 "sdhi2_data4", "sdhi2"),
71 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0", 71 PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "pfc-sh73a0",
72 "sdhi2_ctrl", "sdhi2"), 72 "sdhi2_ctrl", "sdhi2"),
73}; 73};
74 74
@@ -80,10 +80,9 @@ static void __init kzm_init(void)
80 80
81 /* enable SD */ 81 /* enable SD */
82 gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL); 82 gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
83 gpio_request_one(GPIO_PORT15, GPIOF_OUT_INIT_HIGH, NULL); /* power */ 83 gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
84 84
85 gpio_request(GPIO_FN_SDHICLK2, NULL); 85 gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
86 gpio_request_one(GPIO_PORT14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
87 86
88#ifdef CONFIG_CACHE_L2X0 87#ifdef CONFIG_CACHE_L2X0
89 /* Early BRESP enable, Shared attribute override enable, 64K*8way */ 88 /* Early BRESP enable, Shared attribute override enable, 64K*8way */
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c
index d2ace3a9f603..77a66ac12417 100644
--- a/arch/arm/mach-shmobile/board-kzm9g.c
+++ b/arch/arm/mach-shmobile/board-kzm9g.c
@@ -375,13 +375,64 @@ static struct platform_device mmc_device = {
375 .resource = sh_mmcif_resources, 375 .resource = sh_mmcif_resources,
376}; 376};
377 377
378/* Fixed 2.8V regulators to be used by SDHI0 and SDHI2 */ 378/* Fixed 3.3V regulators to be used by SDHI0 */
379static struct regulator_consumer_supply fixed2v8_power_consumers[] = 379static struct regulator_consumer_supply vcc_sdhi0_consumers[] =
380{ 380{
381 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), 381 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
382 REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), 382};
383
384static struct regulator_init_data vcc_sdhi0_init_data = {
385 .constraints = {
386 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
387 },
388 .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi0_consumers),
389 .consumer_supplies = vcc_sdhi0_consumers,
390};
391
392static struct fixed_voltage_config vcc_sdhi0_info = {
393 .supply_name = "SDHI0 Vcc",
394 .microvolts = 3300000,
395 .gpio = 15,
396 .enable_high = 1,
397 .init_data = &vcc_sdhi0_init_data,
398};
399
400static struct platform_device vcc_sdhi0 = {
401 .name = "reg-fixed-voltage",
402 .id = 0,
403 .dev = {
404 .platform_data = &vcc_sdhi0_info,
405 },
406};
407
408/* Fixed 3.3V regulators to be used by SDHI2 */
409static struct regulator_consumer_supply vcc_sdhi2_consumers[] =
410{
383 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"), 411 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
384 REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"), 412};
413
414static struct regulator_init_data vcc_sdhi2_init_data = {
415 .constraints = {
416 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
417 },
418 .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi2_consumers),
419 .consumer_supplies = vcc_sdhi2_consumers,
420};
421
422static struct fixed_voltage_config vcc_sdhi2_info = {
423 .supply_name = "SDHI2 Vcc",
424 .microvolts = 3300000,
425 .gpio = 14,
426 .enable_high = 1,
427 .init_data = &vcc_sdhi2_init_data,
428};
429
430static struct platform_device vcc_sdhi2 = {
431 .name = "reg-fixed-voltage",
432 .id = 1,
433 .dev = {
434 .platform_data = &vcc_sdhi2_info,
435 },
385}; 436};
386 437
387/* SDHI */ 438/* SDHI */
@@ -389,8 +440,8 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
389 .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, 440 .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
390 .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, 441 .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
391 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, 442 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
392 .tmio_caps = MMC_CAP_SD_HIGHSPEED, 443 .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
393 .tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29, 444 MMC_CAP_POWER_OFF_CARD,
394}; 445};
395 446
396static struct resource sdhi0_resources[] = { 447static struct resource sdhi0_resources[] = {
@@ -433,8 +484,7 @@ static struct sh_mobile_sdhi_info sdhi2_info = {
433 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | 484 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT |
434 TMIO_MMC_USE_GPIO_CD | 485 TMIO_MMC_USE_GPIO_CD |
435 TMIO_MMC_WRPROTECT_DISABLE, 486 TMIO_MMC_WRPROTECT_DISABLE,
436 .tmio_caps = MMC_CAP_SD_HIGHSPEED, 487 .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_POWER_OFF_CARD,
437 .tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
438 .cd_gpio = 13, 488 .cd_gpio = 13,
439}; 489};
440 490
@@ -594,6 +644,8 @@ static struct platform_device *kzm_devices[] __initdata = {
594 &usbhs_device, 644 &usbhs_device,
595 &lcdc_device, 645 &lcdc_device,
596 &mmc_device, 646 &mmc_device,
647 &vcc_sdhi0,
648 &vcc_sdhi2,
597 &sdhi0_device, 649 &sdhi0_device,
598 &sdhi2_device, 650 &sdhi2_device,
599 &gpio_keys_device, 651 &gpio_keys_device,
@@ -714,11 +766,9 @@ device_initcall(as3711_enable_lcdc_backlight);
714 766
715static void __init kzm_init(void) 767static void __init kzm_init(void)
716{ 768{
717 regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers, 769 regulator_register_always_on(2, "fixed-1.8V", fixed1v8_power_consumers,
718 ARRAY_SIZE(fixed1v8_power_consumers), 1800000); 770 ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
719 regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers, 771 regulator_register_fixed(3, dummy_supplies, ARRAY_SIZE(dummy_supplies));
720 ARRAY_SIZE(fixed2v8_power_consumers), 2800000);
721 regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
722 772
723 pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map)); 773 pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map));
724 774
@@ -736,10 +786,6 @@ static void __init kzm_init(void)
736 786
737 /* enable SD */ 787 /* enable SD */
738 gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL); 788 gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
739 gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
740
741 /* enable Micro SD */
742 gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
743 789
744#ifdef CONFIG_CACHE_L2X0 790#ifdef CONFIG_CACHE_L2X0
745 /* Early BRESP enable, Shared attribute override enable, 64K*8way */ 791 /* Early BRESP enable, Shared attribute override enable, 64K*8way */
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c
index ef22ec4dafae..1a9c75383ca0 100644
--- a/arch/arm/mach-shmobile/board-mackerel.c
+++ b/arch/arm/mach-shmobile/board-mackerel.c
@@ -963,6 +963,15 @@ static struct platform_device nand_flash_device = {
963 }, 963 },
964}; 964};
965 965
966/*
967 * The card detect pin of the top SD/MMC slot (CN7) is active low and is
968 * connected to GPIO A22 of SH7372 (GPIO 41).
969 */
970static int slot_cn7_get_cd(struct platform_device *pdev)
971{
972 return !gpio_get_value(41);
973}
974
966/* SDHI0 */ 975/* SDHI0 */
967static struct sh_mobile_sdhi_info sdhi0_info = { 976static struct sh_mobile_sdhi_info sdhi0_info = {
968 .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, 977 .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
@@ -973,21 +982,21 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
973}; 982};
974 983
975static struct resource sdhi0_resources[] = { 984static struct resource sdhi0_resources[] = {
976 { 985 [0] = {
977 .name = "SDHI0", 986 .name = "SDHI0",
978 .start = 0xe6850000, 987 .start = 0xe6850000,
979 .end = 0xe68500ff, 988 .end = 0xe68500ff,
980 .flags = IORESOURCE_MEM, 989 .flags = IORESOURCE_MEM,
981 }, { 990 },
982 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT, 991 [1] = {
983 .start = evt2irq(0x0e00) /* SDHI0_SDHI0I0 */, 992 .start = evt2irq(0x0e00) /* SDHI0_SDHI0I0 */,
984 .flags = IORESOURCE_IRQ, 993 .flags = IORESOURCE_IRQ,
985 }, { 994 },
986 .name = SH_MOBILE_SDHI_IRQ_SDCARD, 995 [2] = {
987 .start = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */, 996 .start = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */,
988 .flags = IORESOURCE_IRQ, 997 .flags = IORESOURCE_IRQ,
989 }, { 998 },
990 .name = SH_MOBILE_SDHI_IRQ_SDIO, 999 [3] = {
991 .start = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */, 1000 .start = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */,
992 .flags = IORESOURCE_IRQ, 1001 .flags = IORESOURCE_IRQ,
993 }, 1002 },
@@ -1005,28 +1014,34 @@ static struct platform_device sdhi0_device = {
1005 1014
1006#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) 1015#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
1007/* SDHI1 */ 1016/* SDHI1 */
1008
1009/* GPIO_PORT41 can trigger IRQ8, but it is used by USBHS1, we have to poll */
1010static struct sh_mobile_sdhi_info sdhi1_info = { 1017static struct sh_mobile_sdhi_info sdhi1_info = {
1011 .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, 1018 .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
1012 .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, 1019 .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
1013 .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_USE_GPIO_CD, 1020 .tmio_ocr_mask = MMC_VDD_165_195,
1021 .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
1014 .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | 1022 .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
1015 MMC_CAP_NEEDS_POLL, 1023 MMC_CAP_NEEDS_POLL,
1016 .cd_gpio = GPIO_PORT41, 1024 .get_cd = slot_cn7_get_cd,
1017}; 1025};
1018 1026
1019static struct resource sdhi1_resources[] = { 1027static struct resource sdhi1_resources[] = {
1020 { 1028 [0] = {
1021 .name = "SDHI1", 1029 .name = "SDHI1",
1022 .start = 0xe6860000, 1030 .start = 0xe6860000,
1023 .end = 0xe68600ff, 1031 .end = 0xe68600ff,
1024 .flags = IORESOURCE_MEM, 1032 .flags = IORESOURCE_MEM,
1025 }, { 1033 },
1034 [1] = {
1035 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
1036 .start = evt2irq(0x0e80), /* SDHI1_SDHI1I0 */
1037 .flags = IORESOURCE_IRQ,
1038 },
1039 [2] = {
1026 .name = SH_MOBILE_SDHI_IRQ_SDCARD, 1040 .name = SH_MOBILE_SDHI_IRQ_SDCARD,
1027 .start = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */ 1041 .start = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */
1028 .flags = IORESOURCE_IRQ, 1042 .flags = IORESOURCE_IRQ,
1029 }, { 1043 },
1044 [3] = {
1030 .name = SH_MOBILE_SDHI_IRQ_SDIO, 1045 .name = SH_MOBILE_SDHI_IRQ_SDIO,
1031 .start = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */ 1046 .start = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */
1032 .flags = IORESOURCE_IRQ, 1047 .flags = IORESOURCE_IRQ,
@@ -1044,32 +1059,43 @@ static struct platform_device sdhi1_device = {
1044}; 1059};
1045#endif 1060#endif
1046 1061
1047/* SDHI2 */
1048
1049/* 1062/*
1050 * The card detect pin of the top SD/MMC slot (CN23) is active low and is 1063 * The card detect pin of the top SD/MMC slot (CN23) is active low and is
1051 * connected to GPIO SCIFB_SCK of SH7372 (GPIO_PORT162). 1064 * connected to GPIO SCIFB_SCK of SH7372 (162).
1052 */ 1065 */
1066static int slot_cn23_get_cd(struct platform_device *pdev)
1067{
1068 return !gpio_get_value(162);
1069}
1070
1071/* SDHI2 */
1053static struct sh_mobile_sdhi_info sdhi2_info = { 1072static struct sh_mobile_sdhi_info sdhi2_info = {
1054 .dma_slave_tx = SHDMA_SLAVE_SDHI2_TX, 1073 .dma_slave_tx = SHDMA_SLAVE_SDHI2_TX,
1055 .dma_slave_rx = SHDMA_SLAVE_SDHI2_RX, 1074 .dma_slave_rx = SHDMA_SLAVE_SDHI2_RX,
1056 .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_USE_GPIO_CD, 1075 .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
1057 .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | 1076 .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
1058 MMC_CAP_NEEDS_POLL, 1077 MMC_CAP_NEEDS_POLL,
1059 .cd_gpio = GPIO_PORT162, 1078 .get_cd = slot_cn23_get_cd,
1060}; 1079};
1061 1080
1062static struct resource sdhi2_resources[] = { 1081static struct resource sdhi2_resources[] = {
1063 { 1082 [0] = {
1064 .name = "SDHI2", 1083 .name = "SDHI2",
1065 .start = 0xe6870000, 1084 .start = 0xe6870000,
1066 .end = 0xe68700ff, 1085 .end = 0xe68700ff,
1067 .flags = IORESOURCE_MEM, 1086 .flags = IORESOURCE_MEM,
1068 }, { 1087 },
1088 [1] = {
1089 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
1090 .start = evt2irq(0x1200), /* SDHI2_SDHI2I0 */
1091 .flags = IORESOURCE_IRQ,
1092 },
1093 [2] = {
1069 .name = SH_MOBILE_SDHI_IRQ_SDCARD, 1094 .name = SH_MOBILE_SDHI_IRQ_SDCARD,
1070 .start = evt2irq(0x1220), /* SDHI2_SDHI2I1 */ 1095 .start = evt2irq(0x1220), /* SDHI2_SDHI2I1 */
1071 .flags = IORESOURCE_IRQ, 1096 .flags = IORESOURCE_IRQ,
1072 }, { 1097 },
1098 [3] = {
1073 .name = SH_MOBILE_SDHI_IRQ_SDIO, 1099 .name = SH_MOBILE_SDHI_IRQ_SDIO,
1074 .start = evt2irq(0x1240), /* SDHI2_SDHI2I2 */ 1100 .start = evt2irq(0x1240), /* SDHI2_SDHI2I2 */
1075 .flags = IORESOURCE_IRQ, 1101 .flags = IORESOURCE_IRQ,
@@ -1108,12 +1134,11 @@ static struct resource sh_mmcif_resources[] = {
1108 1134
1109static struct sh_mmcif_plat_data sh_mmcif_plat = { 1135static struct sh_mmcif_plat_data sh_mmcif_plat = {
1110 .sup_pclk = 0, 1136 .sup_pclk = 0,
1137 .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
1111 .caps = MMC_CAP_4_BIT_DATA | 1138 .caps = MMC_CAP_4_BIT_DATA |
1112 MMC_CAP_8_BIT_DATA | 1139 MMC_CAP_8_BIT_DATA |
1113 MMC_CAP_NEEDS_POLL, 1140 MMC_CAP_NEEDS_POLL,
1114 .use_cd_gpio = true, 1141 .get_cd = slot_cn7_get_cd,
1115 /* card detect pin for SD/MMC slot (CN7) */
1116 .cd_gpio = GPIO_PORT41,
1117 .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, 1142 .slave_id_tx = SHDMA_SLAVE_MMCIF_TX,
1118 .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, 1143 .slave_id_rx = SHDMA_SLAVE_MMCIF_RX,
1119}; 1144};
@@ -1238,10 +1263,9 @@ static struct platform_device *mackerel_devices[] __initdata = {
1238 &sdhi0_device, 1263 &sdhi0_device,
1239#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) 1264#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
1240 &sdhi1_device, 1265 &sdhi1_device,
1241#else
1242 &sh_mmcif_device,
1243#endif 1266#endif
1244 &sdhi2_device, 1267 &sdhi2_device,
1268 &sh_mmcif_device,
1245 &ceu_device, 1269 &ceu_device,
1246 &mackerel_camera, 1270 &mackerel_camera,
1247 &hdmi_device, 1271 &hdmi_device,
@@ -1348,11 +1372,10 @@ static void __init mackerel_init(void)
1348 { "A3SP", &usbhs0_device, }, 1372 { "A3SP", &usbhs0_device, },
1349 { "A3SP", &usbhs1_device, }, 1373 { "A3SP", &usbhs1_device, },
1350 { "A3SP", &nand_flash_device, }, 1374 { "A3SP", &nand_flash_device, },
1375 { "A3SP", &sh_mmcif_device, },
1351 { "A3SP", &sdhi0_device, }, 1376 { "A3SP", &sdhi0_device, },
1352#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) 1377#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
1353 { "A3SP", &sdhi1_device, }, 1378 { "A3SP", &sdhi1_device, },
1354#else
1355 { "A3SP", &sh_mmcif_device, },
1356#endif 1379#endif
1357 { "A3SP", &sdhi2_device, }, 1380 { "A3SP", &sdhi2_device, },
1358 { "A4R", &ceu_device, }, 1381 { "A4R", &ceu_device, },
@@ -1463,35 +1486,11 @@ static void __init mackerel_init(void)
1463 /* SDHI0 PORT172 card-detect IRQ26 */ 1486 /* SDHI0 PORT172 card-detect IRQ26 */
1464 gpio_request(GPIO_FN_IRQ26_172, NULL); 1487 gpio_request(GPIO_FN_IRQ26_172, NULL);
1465 1488
1466#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) 1489 /* card detect pin for MMC slot (CN7) */
1467 /* enable SDHI1 */ 1490 gpio_request_one(41, GPIOF_IN, NULL);
1468 gpio_request(GPIO_FN_SDHICMD1, NULL);
1469 gpio_request(GPIO_FN_SDHICLK1, NULL);
1470 gpio_request(GPIO_FN_SDHID1_3, NULL);
1471 gpio_request(GPIO_FN_SDHID1_2, NULL);
1472 gpio_request(GPIO_FN_SDHID1_1, NULL);
1473 gpio_request(GPIO_FN_SDHID1_0, NULL);
1474#else
1475 /* MMCIF */
1476 gpio_request(GPIO_FN_MMCD0_0, NULL);
1477 gpio_request(GPIO_FN_MMCD0_1, NULL);
1478 gpio_request(GPIO_FN_MMCD0_2, NULL);
1479 gpio_request(GPIO_FN_MMCD0_3, NULL);
1480 gpio_request(GPIO_FN_MMCD0_4, NULL);
1481 gpio_request(GPIO_FN_MMCD0_5, NULL);
1482 gpio_request(GPIO_FN_MMCD0_6, NULL);
1483 gpio_request(GPIO_FN_MMCD0_7, NULL);
1484 gpio_request(GPIO_FN_MMCCMD0, NULL);
1485 gpio_request(GPIO_FN_MMCCLK0, NULL);
1486#endif
1487 1491
1488 /* enable SDHI2 */ 1492 /* card detect pin for microSD slot (CN23) */
1489 gpio_request(GPIO_FN_SDHICMD2, NULL); 1493 gpio_request_one(162, GPIOF_IN, NULL);
1490 gpio_request(GPIO_FN_SDHICLK2, NULL);
1491 gpio_request(GPIO_FN_SDHID2_3, NULL);
1492 gpio_request(GPIO_FN_SDHID2_2, NULL);
1493 gpio_request(GPIO_FN_SDHID2_1, NULL);
1494 gpio_request(GPIO_FN_SDHID2_0, NULL);
1495 1494
1496 /* FLCTL */ 1495 /* FLCTL */
1497 gpio_request(GPIO_FN_D0_NAF0, NULL); 1496 gpio_request(GPIO_FN_D0_NAF0, NULL);