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>
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "sh73a0-reference.dtsi"
|
||||
/include/ "sh73a0.dtsi"
|
||||
|
||||
/ {
|
||||
model = "KZM-A9-GT";
|
||||
@@ -36,42 +36,31 @@
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
reg_2p8v: regulator@1 {
|
||||
reg_3p3v: regulator@1 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "fixed-2.8V";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-name = "fixed-3.3V";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
sdhi0: sdhi@0xee100000 {
|
||||
compatible = "renesas,shmobile-sdhi";
|
||||
reg = <0xee100000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 83 4
|
||||
0 84 4
|
||||
0 85 4>;
|
||||
vmmc-supply = <®_2p8v>;
|
||||
bus-width = <4>;
|
||||
toshiba,mmc-has-idle-wait;
|
||||
};
|
||||
|
||||
sdhi2: sdhi@0xee140000 {
|
||||
compatible = "renesas,shmobile-sdhi";
|
||||
reg = <0xee140000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 104 4
|
||||
0 105 4>;
|
||||
vmmc-supply = <®_2p8v>;
|
||||
bus-width = <4>;
|
||||
broken-cd;
|
||||
toshiba,mmc-wrprotect-disable;
|
||||
toshiba,mmc-has-idle-wait;
|
||||
};
|
||||
};
|
||||
|
||||
&mmcif {
|
||||
bus-width = <8>;
|
||||
vmmc-supply = <®_1p8v>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdhi0 {
|
||||
vmmc-supply = <®_3p3v>;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdhi2 {
|
||||
vmmc-supply = <®_3p3v>;
|
||||
bus-width = <4>;
|
||||
broken-cd;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Device Tree Source for the SH73A0 SoC
|
||||
*
|
||||
* Copyright (C) 2012 Renesas Solutions Corp.
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public License
|
||||
* version 2. This program is licensed "as is" without any warranty of any
|
||||
* kind, whether express or implied.
|
||||
*/
|
||||
|
||||
/include/ "sh73a0.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "renesas,sh73a0";
|
||||
|
||||
mmcif: mmcif@0x10010000 {
|
||||
compatible = "renesas,sh-mmcif";
|
||||
reg = <0xe6bd0000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 140 0x4
|
||||
0 141 0x4>;
|
||||
reg-io-width = <4>;
|
||||
};
|
||||
};
|
||||
@@ -97,4 +97,48 @@
|
||||
0 189 0x4
|
||||
0 190 0x4>;
|
||||
};
|
||||
|
||||
mmcif: mmcif@0x10010000 {
|
||||
compatible = "renesas,sh-mmcif";
|
||||
reg = <0xe6bd0000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 140 0x4
|
||||
0 141 0x4>;
|
||||
reg-io-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhi0: sdhi@0xee100000 {
|
||||
compatible = "renesas,r8a7740-sdhi";
|
||||
reg = <0xee100000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 83 4
|
||||
0 84 4
|
||||
0 85 4>;
|
||||
cap-sd-highspeed;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
|
||||
sdhi1: sdhi@0xee120000 {
|
||||
compatible = "renesas,r8a7740-sdhi";
|
||||
reg = <0xee120000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 88 4
|
||||
0 89 4>;
|
||||
toshiba,mmc-wrprotect-disable;
|
||||
cap-sd-highspeed;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhi2: sdhi@0xee140000 {
|
||||
compatible = "renesas,r8a7740-sdhi";
|
||||
reg = <0xee140000 0x100>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 104 4
|
||||
0 105 4>;
|
||||
toshiba,mmc-wrprotect-disable;
|
||||
cap-sd-highspeed;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -559,8 +559,6 @@ static struct platform_device gpio_keys_device = {
|
||||
|
||||
/* Fixed 3.3V regulator to be used by SDHI1, MMCIF */
|
||||
static struct regulator_consumer_supply fixed3v3_power_consumers[] = {
|
||||
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
|
||||
REGULATOR_SUPPLY("vmmc", "sh_mmcif"),
|
||||
REGULATOR_SUPPLY("vqmmc", "sh_mmcif"),
|
||||
};
|
||||
@@ -645,6 +643,35 @@ static struct platform_device vccq_sdhi0 = {
|
||||
},
|
||||
};
|
||||
|
||||
/* Fixed 3.3V regulator to be used by SDHI1 */
|
||||
static struct regulator_consumer_supply vcc_sdhi1_consumers[] = {
|
||||
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vcc_sdhi1_init_data = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vcc_sdhi1_consumers),
|
||||
.consumer_supplies = vcc_sdhi1_consumers,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config vcc_sdhi1_info = {
|
||||
.supply_name = "SDHI1 Vcc",
|
||||
.microvolts = 3300000,
|
||||
.gpio = GPIO_PORT16,
|
||||
.enable_high = 1,
|
||||
.init_data = &vcc_sdhi1_init_data,
|
||||
};
|
||||
|
||||
static struct platform_device vcc_sdhi1 = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = 2,
|
||||
.dev = {
|
||||
.platform_data = &vcc_sdhi1_info,
|
||||
},
|
||||
};
|
||||
|
||||
/* SDHI0 */
|
||||
/*
|
||||
* FIXME
|
||||
@@ -658,7 +685,8 @@ static struct platform_device vccq_sdhi0 = {
|
||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
||||
.dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
||||
MMC_CAP_POWER_OFF_CARD,
|
||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
|
||||
.cd_gpio = GPIO_PORT167,
|
||||
};
|
||||
@@ -699,7 +727,8 @@ static struct platform_device sdhi0_device = {
|
||||
static struct sh_mobile_sdhi_info sdhi1_info = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
|
||||
.dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
||||
MMC_CAP_POWER_OFF_CARD,
|
||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
|
||||
/* Port72 cannot generate IRQs, will be used in polling mode. */
|
||||
.cd_gpio = GPIO_PORT72,
|
||||
@@ -992,6 +1021,8 @@ static struct platform_device *eva_devices[] __initdata = {
|
||||
&lcdc0_device,
|
||||
&gpio_keys_device,
|
||||
&sh_eth_device,
|
||||
&vcc_sdhi0,
|
||||
&vccq_sdhi0,
|
||||
&sdhi0_device,
|
||||
&sh_mmcif_device,
|
||||
&hdmi_device,
|
||||
@@ -1002,8 +1033,6 @@ static struct platform_device *eva_devices[] __initdata = {
|
||||
&fsi_wm8978_device,
|
||||
&fsi_hdmi_device,
|
||||
&i2c_gpio_device,
|
||||
&vcc_sdhi0,
|
||||
&vccq_sdhi0,
|
||||
};
|
||||
|
||||
static const struct pinctrl_map eva_pinctrl_map[] = {
|
||||
@@ -1198,9 +1227,7 @@ static void __init eva_init(void)
|
||||
pinctrl_register_mappings(eva_sdhi1_pinctrl_map,
|
||||
ARRAY_SIZE(eva_sdhi1_pinctrl_map));
|
||||
|
||||
/* SDSLOT2_PON */
|
||||
gpio_request_one(16, GPIOF_OUT_INIT_HIGH, NULL);
|
||||
|
||||
platform_device_register(&vcc_sdhi1);
|
||||
platform_device_register(&sdhi1_device);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,16 +40,16 @@ static unsigned long pin_pullup_conf[] = {
|
||||
};
|
||||
|
||||
static const struct pinctrl_map kzm_pinctrl_map[] = {
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("e6826000.i2c", "pfc-sh73a0",
|
||||
"i2c3_1", "i2c3"),
|
||||
/* MMCIF */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
|
||||
"mmc0_data8_0", "mmc0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
|
||||
"mmc0_ctrl_0", "mmc0"),
|
||||
PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
|
||||
PIN_MAP_CONFIGS_PIN_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
|
||||
"PORT279", pin_pullup_conf),
|
||||
PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
|
||||
PIN_MAP_CONFIGS_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
|
||||
"mmc0_data8_0", pin_pullup_conf),
|
||||
/* SCIFA4 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
|
||||
@@ -57,18 +57,18 @@ static const struct pinctrl_map kzm_pinctrl_map[] = {
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
|
||||
"scifa4_ctrl", "scifa4"),
|
||||
/* SDHI0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
|
||||
"sdhi0_data4", "sdhi0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
|
||||
"sdhi0_ctrl", "sdhi0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
|
||||
"sdhi0_cd", "sdhi0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
|
||||
"sdhi0_wp", "sdhi0"),
|
||||
/* SDHI2 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "pfc-sh73a0",
|
||||
"sdhi2_data4", "sdhi2"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "pfc-sh73a0",
|
||||
"sdhi2_ctrl", "sdhi2"),
|
||||
};
|
||||
|
||||
@@ -80,10 +80,9 @@ static void __init kzm_init(void)
|
||||
|
||||
/* enable SD */
|
||||
gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
|
||||
gpio_request_one(GPIO_PORT15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
|
||||
gpio_request(GPIO_FN_SDHICLK2, NULL);
|
||||
gpio_request_one(GPIO_PORT14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
/* Early BRESP enable, Shared attribute override enable, 64K*8way */
|
||||
|
||||
@@ -375,13 +375,64 @@ static struct platform_device mmc_device = {
|
||||
.resource = sh_mmcif_resources,
|
||||
};
|
||||
|
||||
/* Fixed 2.8V regulators to be used by SDHI0 and SDHI2 */
|
||||
static struct regulator_consumer_supply fixed2v8_power_consumers[] =
|
||||
/* Fixed 3.3V regulators to be used by SDHI0 */
|
||||
static struct regulator_consumer_supply vcc_sdhi0_consumers[] =
|
||||
{
|
||||
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
|
||||
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vcc_sdhi0_init_data = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vcc_sdhi0_consumers),
|
||||
.consumer_supplies = vcc_sdhi0_consumers,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config vcc_sdhi0_info = {
|
||||
.supply_name = "SDHI0 Vcc",
|
||||
.microvolts = 3300000,
|
||||
.gpio = 15,
|
||||
.enable_high = 1,
|
||||
.init_data = &vcc_sdhi0_init_data,
|
||||
};
|
||||
|
||||
static struct platform_device vcc_sdhi0 = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &vcc_sdhi0_info,
|
||||
},
|
||||
};
|
||||
|
||||
/* Fixed 3.3V regulators to be used by SDHI2 */
|
||||
static struct regulator_consumer_supply vcc_sdhi2_consumers[] =
|
||||
{
|
||||
REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
|
||||
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vcc_sdhi2_init_data = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vcc_sdhi2_consumers),
|
||||
.consumer_supplies = vcc_sdhi2_consumers,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config vcc_sdhi2_info = {
|
||||
.supply_name = "SDHI2 Vcc",
|
||||
.microvolts = 3300000,
|
||||
.gpio = 14,
|
||||
.enable_high = 1,
|
||||
.init_data = &vcc_sdhi2_init_data,
|
||||
};
|
||||
|
||||
static struct platform_device vcc_sdhi2 = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &vcc_sdhi2_info,
|
||||
},
|
||||
};
|
||||
|
||||
/* SDHI */
|
||||
@@ -389,8 +440,8 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
||||
.dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
|
||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
||||
.tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
||||
MMC_CAP_POWER_OFF_CARD,
|
||||
};
|
||||
|
||||
static struct resource sdhi0_resources[] = {
|
||||
@@ -433,8 +484,7 @@ static struct sh_mobile_sdhi_info sdhi2_info = {
|
||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT |
|
||||
TMIO_MMC_USE_GPIO_CD |
|
||||
TMIO_MMC_WRPROTECT_DISABLE,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
||||
.tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_POWER_OFF_CARD,
|
||||
.cd_gpio = 13,
|
||||
};
|
||||
|
||||
@@ -594,6 +644,8 @@ static struct platform_device *kzm_devices[] __initdata = {
|
||||
&usbhs_device,
|
||||
&lcdc_device,
|
||||
&mmc_device,
|
||||
&vcc_sdhi0,
|
||||
&vcc_sdhi2,
|
||||
&sdhi0_device,
|
||||
&sdhi2_device,
|
||||
&gpio_keys_device,
|
||||
@@ -714,11 +766,9 @@ device_initcall(as3711_enable_lcdc_backlight);
|
||||
|
||||
static void __init kzm_init(void)
|
||||
{
|
||||
regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
|
||||
regulator_register_always_on(2, "fixed-1.8V", fixed1v8_power_consumers,
|
||||
ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
|
||||
regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers,
|
||||
ARRAY_SIZE(fixed2v8_power_consumers), 2800000);
|
||||
regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
regulator_register_fixed(3, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map));
|
||||
|
||||
@@ -736,10 +786,6 @@ static void __init kzm_init(void)
|
||||
|
||||
/* enable SD */
|
||||
gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
|
||||
gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
|
||||
/* enable Micro SD */
|
||||
gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
/* Early BRESP enable, Shared attribute override enable, 64K*8way */
|
||||
|
||||
@@ -963,6 +963,15 @@ static struct platform_device nand_flash_device = {
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* The card detect pin of the top SD/MMC slot (CN7) is active low and is
|
||||
* connected to GPIO A22 of SH7372 (GPIO 41).
|
||||
*/
|
||||
static int slot_cn7_get_cd(struct platform_device *pdev)
|
||||
{
|
||||
return !gpio_get_value(41);
|
||||
}
|
||||
|
||||
/* SDHI0 */
|
||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
||||
@@ -973,21 +982,21 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||
};
|
||||
|
||||
static struct resource sdhi0_resources[] = {
|
||||
{
|
||||
[0] = {
|
||||
.name = "SDHI0",
|
||||
.start = 0xe6850000,
|
||||
.end = 0xe68500ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
|
||||
},
|
||||
[1] = {
|
||||
.start = evt2irq(0x0e00) /* SDHI0_SDHI0I0 */,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
.name = SH_MOBILE_SDHI_IRQ_SDCARD,
|
||||
},
|
||||
[2] = {
|
||||
.start = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
.name = SH_MOBILE_SDHI_IRQ_SDIO,
|
||||
},
|
||||
[3] = {
|
||||
.start = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
@@ -1005,28 +1014,34 @@ static struct platform_device sdhi0_device = {
|
||||
|
||||
#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
||||
/* SDHI1 */
|
||||
|
||||
/* GPIO_PORT41 can trigger IRQ8, but it is used by USBHS1, we have to poll */
|
||||
static struct sh_mobile_sdhi_info sdhi1_info = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
|
||||
.dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
|
||||
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_USE_GPIO_CD,
|
||||
.tmio_ocr_mask = MMC_VDD_165_195,
|
||||
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
||||
MMC_CAP_NEEDS_POLL,
|
||||
.cd_gpio = GPIO_PORT41,
|
||||
.get_cd = slot_cn7_get_cd,
|
||||
};
|
||||
|
||||
static struct resource sdhi1_resources[] = {
|
||||
{
|
||||
[0] = {
|
||||
.name = "SDHI1",
|
||||
.start = 0xe6860000,
|
||||
.end = 0xe68600ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
},
|
||||
[1] = {
|
||||
.name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
|
||||
.start = evt2irq(0x0e80), /* SDHI1_SDHI1I0 */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.name = SH_MOBILE_SDHI_IRQ_SDCARD,
|
||||
.start = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
},
|
||||
[3] = {
|
||||
.name = SH_MOBILE_SDHI_IRQ_SDIO,
|
||||
.start = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
@@ -1044,32 +1059,43 @@ static struct platform_device sdhi1_device = {
|
||||
};
|
||||
#endif
|
||||
|
||||
/* SDHI2 */
|
||||
|
||||
/*
|
||||
* The card detect pin of the top SD/MMC slot (CN23) is active low and is
|
||||
* connected to GPIO SCIFB_SCK of SH7372 (GPIO_PORT162).
|
||||
* connected to GPIO SCIFB_SCK of SH7372 (162).
|
||||
*/
|
||||
static int slot_cn23_get_cd(struct platform_device *pdev)
|
||||
{
|
||||
return !gpio_get_value(162);
|
||||
}
|
||||
|
||||
/* SDHI2 */
|
||||
static struct sh_mobile_sdhi_info sdhi2_info = {
|
||||
.dma_slave_tx = SHDMA_SLAVE_SDHI2_TX,
|
||||
.dma_slave_rx = SHDMA_SLAVE_SDHI2_RX,
|
||||
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_USE_GPIO_CD,
|
||||
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
|
||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
||||
MMC_CAP_NEEDS_POLL,
|
||||
.cd_gpio = GPIO_PORT162,
|
||||
.get_cd = slot_cn23_get_cd,
|
||||
};
|
||||
|
||||
static struct resource sdhi2_resources[] = {
|
||||
{
|
||||
[0] = {
|
||||
.name = "SDHI2",
|
||||
.start = 0xe6870000,
|
||||
.end = 0xe68700ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
},
|
||||
[1] = {
|
||||
.name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
|
||||
.start = evt2irq(0x1200), /* SDHI2_SDHI2I0 */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.name = SH_MOBILE_SDHI_IRQ_SDCARD,
|
||||
.start = evt2irq(0x1220), /* SDHI2_SDHI2I1 */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}, {
|
||||
},
|
||||
[3] = {
|
||||
.name = SH_MOBILE_SDHI_IRQ_SDIO,
|
||||
.start = evt2irq(0x1240), /* SDHI2_SDHI2I2 */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
@@ -1108,12 +1134,11 @@ static struct resource sh_mmcif_resources[] = {
|
||||
|
||||
static struct sh_mmcif_plat_data sh_mmcif_plat = {
|
||||
.sup_pclk = 0,
|
||||
.ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.caps = MMC_CAP_4_BIT_DATA |
|
||||
MMC_CAP_8_BIT_DATA |
|
||||
MMC_CAP_NEEDS_POLL,
|
||||
.use_cd_gpio = true,
|
||||
/* card detect pin for SD/MMC slot (CN7) */
|
||||
.cd_gpio = GPIO_PORT41,
|
||||
.get_cd = slot_cn7_get_cd,
|
||||
.slave_id_tx = SHDMA_SLAVE_MMCIF_TX,
|
||||
.slave_id_rx = SHDMA_SLAVE_MMCIF_RX,
|
||||
};
|
||||
@@ -1238,10 +1263,9 @@ static struct platform_device *mackerel_devices[] __initdata = {
|
||||
&sdhi0_device,
|
||||
#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
||||
&sdhi1_device,
|
||||
#else
|
||||
&sh_mmcif_device,
|
||||
#endif
|
||||
&sdhi2_device,
|
||||
&sh_mmcif_device,
|
||||
&ceu_device,
|
||||
&mackerel_camera,
|
||||
&hdmi_device,
|
||||
@@ -1348,11 +1372,10 @@ static void __init mackerel_init(void)
|
||||
{ "A3SP", &usbhs0_device, },
|
||||
{ "A3SP", &usbhs1_device, },
|
||||
{ "A3SP", &nand_flash_device, },
|
||||
{ "A3SP", &sh_mmcif_device, },
|
||||
{ "A3SP", &sdhi0_device, },
|
||||
#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
||||
{ "A3SP", &sdhi1_device, },
|
||||
#else
|
||||
{ "A3SP", &sh_mmcif_device, },
|
||||
#endif
|
||||
{ "A3SP", &sdhi2_device, },
|
||||
{ "A4R", &ceu_device, },
|
||||
@@ -1463,35 +1486,11 @@ static void __init mackerel_init(void)
|
||||
/* SDHI0 PORT172 card-detect IRQ26 */
|
||||
gpio_request(GPIO_FN_IRQ26_172, NULL);
|
||||
|
||||
#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
||||
/* enable SDHI1 */
|
||||
gpio_request(GPIO_FN_SDHICMD1, NULL);
|
||||
gpio_request(GPIO_FN_SDHICLK1, NULL);
|
||||
gpio_request(GPIO_FN_SDHID1_3, NULL);
|
||||
gpio_request(GPIO_FN_SDHID1_2, NULL);
|
||||
gpio_request(GPIO_FN_SDHID1_1, NULL);
|
||||
gpio_request(GPIO_FN_SDHID1_0, NULL);
|
||||
#else
|
||||
/* MMCIF */
|
||||
gpio_request(GPIO_FN_MMCD0_0, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_1, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_2, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_3, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_4, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_5, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_6, NULL);
|
||||
gpio_request(GPIO_FN_MMCD0_7, NULL);
|
||||
gpio_request(GPIO_FN_MMCCMD0, NULL);
|
||||
gpio_request(GPIO_FN_MMCCLK0, NULL);
|
||||
#endif
|
||||
/* card detect pin for MMC slot (CN7) */
|
||||
gpio_request_one(41, GPIOF_IN, NULL);
|
||||
|
||||
/* enable SDHI2 */
|
||||
gpio_request(GPIO_FN_SDHICMD2, NULL);
|
||||
gpio_request(GPIO_FN_SDHICLK2, NULL);
|
||||
gpio_request(GPIO_FN_SDHID2_3, NULL);
|
||||
gpio_request(GPIO_FN_SDHID2_2, NULL);
|
||||
gpio_request(GPIO_FN_SDHID2_1, NULL);
|
||||
gpio_request(GPIO_FN_SDHID2_0, NULL);
|
||||
/* card detect pin for microSD slot (CN23) */
|
||||
gpio_request_one(162, GPIOF_IN, NULL);
|
||||
|
||||
/* FLCTL */
|
||||
gpio_request(GPIO_FN_D0_NAF0, NULL);
|
||||
|
||||
Reference in New Issue
Block a user