aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2013-07-10 04:13:08 -0400
committerSimon Horman <horms+renesas@verge.net.au>2013-07-25 01:46:37 -0400
commit8711613252ed931037f9e9f8646935519dd8f362 (patch)
treea26ddcbdbfb9997310aa431ee0ad5d3aa3d4fe13
parentc9996e51e45df0630cf5493fa0359a257a191eee (diff)
ARM: shmobile: ape6evm: add MMCIF support
Add MMCIF support to the APE6EVM board in PIO mode only. Power supply is fixed for now, eventually support for the tps80032 regulator, also supplying both VDD and VccQ to the MMCIF slot should be added to APE6EVM. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski+renesas@gmail.com> Acked-by: Magnus Damm <damm@opensource.se> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
-rw-r--r--arch/arm/mach-shmobile/board-ape6evm.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/board-ape6evm.c b/arch/arm/mach-shmobile/board-ape6evm.c
index af6dd39d3758..8c7529cc4860 100644
--- a/arch/arm/mach-shmobile/board-ape6evm.c
+++ b/arch/arm/mach-shmobile/board-ape6evm.c
@@ -21,6 +21,8 @@
21#include <linux/gpio.h> 21#include <linux/gpio.h>
22#include <linux/interrupt.h> 22#include <linux/interrupt.h>
23#include <linux/kernel.h> 23#include <linux/kernel.h>
24#include <linux/mmc/host.h>
25#include <linux/mmc/sh_mmcif.h>
24#include <linux/pinctrl/machine.h> 26#include <linux/pinctrl/machine.h>
25#include <linux/platform_device.h> 27#include <linux/platform_device.h>
26#include <linux/regulator/fixed.h> 28#include <linux/regulator/fixed.h>
@@ -54,6 +56,25 @@ static const struct smsc911x_platform_config lan9220_data = {
54 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH, 56 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH,
55}; 57};
56 58
59/*
60 * On APE6EVM power is supplied to MMCIF by a tps80032 regulator. For now we
61 * model a VDD supply to MMCIF, using a fixed 3.3V regulator.
62 */
63static struct regulator_consumer_supply fixed3v3_power_consumers[] =
64{
65 REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
66};
67
68/* MMCIF */
69static struct sh_mmcif_plat_data mmcif0_pdata = {
70 .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE,
71};
72
73static struct resource mmcif0_resources[] = {
74 DEFINE_RES_MEM_NAMED(0xee200000, 0x100, "MMCIF0"),
75 DEFINE_RES_IRQ(gic_spi(169)),
76};
77
57static const struct pinctrl_map ape6evm_pinctrl_map[] = { 78static const struct pinctrl_map ape6evm_pinctrl_map[] = {
58 /* SCIFA0 console */ 79 /* SCIFA0 console */
59 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a73a4", 80 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a73a4",
@@ -61,6 +82,11 @@ static const struct pinctrl_map ape6evm_pinctrl_map[] = {
61 /* SMSC */ 82 /* SMSC */
62 PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-r8a73a4", 83 PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-r8a73a4",
63 "irqc_irq40", "irqc"), 84 "irqc_irq40", "irqc"),
85 /* MMCIF0 */
86 PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-r8a73a4",
87 "mmc0_data8", "mmc0"),
88 PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-r8a73a4",
89 "mmc0_ctrl", "mmc0"),
64}; 90};
65 91
66static void __init ape6evm_add_standard_devices(void) 92static void __init ape6evm_add_standard_devices(void)
@@ -93,6 +119,11 @@ static void __init ape6evm_add_standard_devices(void)
93 platform_device_register_resndata(&platform_bus, "smsc911x", -1, 119 platform_device_register_resndata(&platform_bus, "smsc911x", -1,
94 lan9220_res, ARRAY_SIZE(lan9220_res), 120 lan9220_res, ARRAY_SIZE(lan9220_res),
95 &lan9220_data, sizeof(lan9220_data)); 121 &lan9220_data, sizeof(lan9220_data));
122 regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers,
123 ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
124 platform_device_register_resndata(&platform_bus, "sh_mmcif", 0,
125 mmcif0_resources, ARRAY_SIZE(mmcif0_resources),
126 &mmcif0_pdata, sizeof(mmcif0_pdata));
96} 127}
97 128
98static const char *ape6evm_boards_compat_dt[] __initdata = { 129static const char *ape6evm_boards_compat_dt[] __initdata = {