diff options
Diffstat (limited to 'arch/arm/mach-shmobile/setup-r8a7778.c')
-rw-r--r-- | arch/arm/mach-shmobile/setup-r8a7778.c | 99 |
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 */ | ||
84 | static 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 */ | ||
93 | static struct resource ether_resources[] = { | ||
94 | DEFINE_RES_MEM(0xfde00000, 0x400), | ||
95 | DEFINE_RES_IRQ(gic_iid(0x89)), | ||
96 | }; | ||
97 | |||
98 | void __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 */ | ||
107 | static struct resource pfc_resources[] = { | ||
108 | DEFINE_RES_MEM(0xfffc0000, 0x118), | ||
109 | }; | ||
110 | |||
111 | #define R8A7778_GPIO(idx) \ | ||
112 | static struct resource r8a7778_gpio##idx##_resources[] = { \ | ||
113 | DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \ | ||
114 | DEFINE_RES_IRQ(gic_iid(0x87)), \ | ||
115 | }; \ | ||
116 | \ | ||
117 | static 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 | |||
124 | R8A7778_GPIO(0); | ||
125 | R8A7778_GPIO(1); | ||
126 | R8A7778_GPIO(2); | ||
127 | R8A7778_GPIO(3); | ||
128 | R8A7778_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 | |||
138 | void __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 */ | ||
153 | static 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 | |||
165 | void __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 | |||
97 | void __init r8a7778_add_standard_devices(void) | 176 | void __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 | ||
121 | void __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 | |||
129 | static struct renesas_intc_irqpin_config irqpin_platform_data = { | 200 | static 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, |