aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-shmobile/setup-r8a7778.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-shmobile/setup-r8a7778.c')
-rw-r--r--arch/arm/mach-shmobile/setup-r8a7778.c99
1 files changed, 85 insertions, 14 deletions
diff --git a/arch/arm/mach-shmobile/setup-r8a7778.c b/arch/arm/mach-shmobile/setup-r8a7778.c
index 30b4a336308f..1b9b7f2a5016 100644
--- a/arch/arm/mach-shmobile/setup-r8a7778.c
+++ b/arch/arm/mach-shmobile/setup-r8a7778.c
@@ -24,6 +24,7 @@
24#include <linux/irqchip/arm-gic.h> 24#include <linux/irqchip/arm-gic.h>
25#include <linux/of.h> 25#include <linux/of.h>
26#include <linux/of_platform.h> 26#include <linux/of_platform.h>
27#include <linux/platform_data/gpio-rcar.h>
27#include <linux/platform_data/irq-renesas-intc-irqpin.h> 28#include <linux/platform_data/irq-renesas-intc-irqpin.h>
28#include <linux/platform_device.h> 29#include <linux/platform_device.h>
29#include <linux/irqchip.h> 30#include <linux/irqchip.h>
@@ -80,12 +81,6 @@ static struct sh_timer_config sh_tmu1_platform_data = {
80 .clocksource_rating = 200, 81 .clocksource_rating = 200,
81}; 82};
82 83
83/* Ether */
84static struct resource ether_resources[] = {
85 DEFINE_RES_MEM(0xfde00000, 0x400),
86 DEFINE_RES_IRQ(gic_iid(0x89)),
87};
88
89#define r8a7778_register_tmu(idx) \ 84#define r8a7778_register_tmu(idx) \
90 platform_device_register_resndata( \ 85 platform_device_register_resndata( \
91 &platform_bus, "sh_tmu", idx, \ 86 &platform_bus, "sh_tmu", idx, \
@@ -94,6 +89,90 @@ static struct resource ether_resources[] = {
94 &sh_tmu##idx##_platform_data, \ 89 &sh_tmu##idx##_platform_data, \
95 sizeof(sh_tmu##idx##_platform_data)) 90 sizeof(sh_tmu##idx##_platform_data))
96 91
92/* Ether */
93static struct resource ether_resources[] = {
94 DEFINE_RES_MEM(0xfde00000, 0x400),
95 DEFINE_RES_IRQ(gic_iid(0x89)),
96};
97
98void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata)
99{
100 platform_device_register_resndata(&platform_bus, "sh_eth", -1,
101 ether_resources,
102 ARRAY_SIZE(ether_resources),
103 pdata, sizeof(*pdata));
104}
105
106/* PFC/GPIO */
107static struct resource pfc_resources[] = {
108 DEFINE_RES_MEM(0xfffc0000, 0x118),
109};
110
111#define R8A7778_GPIO(idx) \
112static struct resource r8a7778_gpio##idx##_resources[] = { \
113 DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \
114 DEFINE_RES_IRQ(gic_iid(0x87)), \
115}; \
116 \
117static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data = { \
118 .gpio_base = 32 * (idx), \
119 .irq_base = GPIO_IRQ_BASE(idx), \
120 .number_of_pins = 32, \
121 .pctl_name = "pfc-r8a7778", \
122}
123
124R8A7778_GPIO(0);
125R8A7778_GPIO(1);
126R8A7778_GPIO(2);
127R8A7778_GPIO(3);
128R8A7778_GPIO(4);
129
130#define r8a7778_register_gpio(idx) \
131 platform_device_register_resndata( \
132 &platform_bus, "gpio_rcar", idx, \
133 r8a7778_gpio##idx##_resources, \
134 ARRAY_SIZE(r8a7778_gpio##idx##_resources), \
135 &r8a7778_gpio##idx##_platform_data, \
136 sizeof(r8a7778_gpio##idx##_platform_data))
137
138void __init r8a7778_pinmux_init(void)
139{
140 platform_device_register_simple(
141 "pfc-r8a7778", -1,
142 pfc_resources,
143 ARRAY_SIZE(pfc_resources));
144
145 r8a7778_register_gpio(0);
146 r8a7778_register_gpio(1);
147 r8a7778_register_gpio(2);
148 r8a7778_register_gpio(3);
149 r8a7778_register_gpio(4);
150};
151
152/* SDHI */
153static struct resource sdhi_resources[] = {
154 /* SDHI0 */
155 DEFINE_RES_MEM(0xFFE4C000, 0x100),
156 DEFINE_RES_IRQ(gic_iid(0x77)),
157 /* SDHI1 */
158 DEFINE_RES_MEM(0xFFE4D000, 0x100),
159 DEFINE_RES_IRQ(gic_iid(0x78)),
160 /* SDHI2 */
161 DEFINE_RES_MEM(0xFFE4F000, 0x100),
162 DEFINE_RES_IRQ(gic_iid(0x76)),
163};
164
165void __init r8a7778_sdhi_init(int id,
166 struct sh_mobile_sdhi_info *info)
167{
168 BUG_ON(id < 0 || id > 2);
169
170 platform_device_register_resndata(
171 &platform_bus, "sh_mobile_sdhi", id,
172 sdhi_resources + (2 * id), 2,
173 info, sizeof(*info));
174}
175
97void __init r8a7778_add_standard_devices(void) 176void __init r8a7778_add_standard_devices(void)
98{ 177{
99 int i; 178 int i;
@@ -118,14 +197,6 @@ void __init r8a7778_add_standard_devices(void)
118 r8a7778_register_tmu(1); 197 r8a7778_register_tmu(1);
119} 198}
120 199
121void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata)
122{
123 platform_device_register_resndata(&platform_bus, "sh_eth", -1,
124 ether_resources,
125 ARRAY_SIZE(ether_resources),
126 pdata, sizeof(*pdata));
127}
128
129static struct renesas_intc_irqpin_config irqpin_platform_data = { 200static struct renesas_intc_irqpin_config irqpin_platform_data = {
130 .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ 201 .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */
131 .sense_bitfield_width = 2, 202 .sense_bitfield_width = 2,