diff options
Diffstat (limited to 'arch/arm/mach-mxs/gpio.c')
-rw-r--r-- | arch/arm/mach-mxs/gpio.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/arch/arm/mach-mxs/gpio.c b/arch/arm/mach-mxs/gpio.c index 61991e4dde44..56fa2ed15222 100644 --- a/arch/arm/mach-mxs/gpio.c +++ b/arch/arm/mach-mxs/gpio.c | |||
@@ -182,6 +182,7 @@ static int mxs_gpio_set_wake_irq(struct irq_data *d, unsigned int enable) | |||
182 | } | 182 | } |
183 | 183 | ||
184 | static struct irq_chip gpio_irq_chip = { | 184 | static struct irq_chip gpio_irq_chip = { |
185 | .name = "mxs gpio", | ||
185 | .irq_ack = mxs_gpio_ack_irq, | 186 | .irq_ack = mxs_gpio_ack_irq, |
186 | .irq_mask = mxs_gpio_mask_irq, | 187 | .irq_mask = mxs_gpio_mask_irq, |
187 | .irq_unmask = mxs_gpio_unmask_irq, | 188 | .irq_unmask = mxs_gpio_unmask_irq, |
@@ -289,39 +290,42 @@ int __init mxs_gpio_init(struct mxs_gpio_port *port, int cnt) | |||
289 | return 0; | 290 | return 0; |
290 | } | 291 | } |
291 | 292 | ||
292 | #define DEFINE_MXS_GPIO_PORT(soc, _id) \ | 293 | #define MX23_GPIO_BASE MX23_IO_ADDRESS(MX23_PINCTRL_BASE_ADDR) |
294 | #define MX28_GPIO_BASE MX28_IO_ADDRESS(MX28_PINCTRL_BASE_ADDR) | ||
295 | |||
296 | #define DEFINE_MXS_GPIO_PORT(_base, _irq, _id) \ | ||
293 | { \ | 297 | { \ |
294 | .chip.label = "gpio-" #_id, \ | 298 | .chip.label = "gpio-" #_id, \ |
295 | .id = _id, \ | 299 | .id = _id, \ |
296 | .irq = soc ## _INT_GPIO ## _id, \ | 300 | .irq = _irq, \ |
297 | .base = soc ## _IO_ADDRESS( \ | 301 | .base = _base, \ |
298 | soc ## _PINCTRL ## _BASE_ADDR), \ | ||
299 | .virtual_irq_start = MXS_GPIO_IRQ_START + (_id) * 32, \ | 302 | .virtual_irq_start = MXS_GPIO_IRQ_START + (_id) * 32, \ |
300 | } | 303 | } |
301 | 304 | ||
302 | #define DEFINE_REGISTER_FUNCTION(prefix) \ | ||
303 | int __init prefix ## _register_gpios(void) \ | ||
304 | { \ | ||
305 | return mxs_gpio_init(prefix ## _gpio_ports, \ | ||
306 | ARRAY_SIZE(prefix ## _gpio_ports)); \ | ||
307 | } | ||
308 | |||
309 | #ifdef CONFIG_SOC_IMX23 | 305 | #ifdef CONFIG_SOC_IMX23 |
310 | static struct mxs_gpio_port mx23_gpio_ports[] = { | 306 | static struct mxs_gpio_port mx23_gpio_ports[] = { |
311 | DEFINE_MXS_GPIO_PORT(MX23, 0), | 307 | DEFINE_MXS_GPIO_PORT(MX23_GPIO_BASE, MX23_INT_GPIO0, 0), |
312 | DEFINE_MXS_GPIO_PORT(MX23, 1), | 308 | DEFINE_MXS_GPIO_PORT(MX23_GPIO_BASE, MX23_INT_GPIO1, 1), |
313 | DEFINE_MXS_GPIO_PORT(MX23, 2), | 309 | DEFINE_MXS_GPIO_PORT(MX23_GPIO_BASE, MX23_INT_GPIO2, 2), |
314 | }; | 310 | }; |
315 | DEFINE_REGISTER_FUNCTION(mx23) | 311 | |
312 | int __init mx23_register_gpios(void) | ||
313 | { | ||
314 | return mxs_gpio_init(mx23_gpio_ports, ARRAY_SIZE(mx23_gpio_ports)); | ||
315 | } | ||
316 | #endif | 316 | #endif |
317 | 317 | ||
318 | #ifdef CONFIG_SOC_IMX28 | 318 | #ifdef CONFIG_SOC_IMX28 |
319 | static struct mxs_gpio_port mx28_gpio_ports[] = { | 319 | static struct mxs_gpio_port mx28_gpio_ports[] = { |
320 | DEFINE_MXS_GPIO_PORT(MX28, 0), | 320 | DEFINE_MXS_GPIO_PORT(MX28_GPIO_BASE, MX28_INT_GPIO0, 0), |
321 | DEFINE_MXS_GPIO_PORT(MX28, 1), | 321 | DEFINE_MXS_GPIO_PORT(MX28_GPIO_BASE, MX28_INT_GPIO1, 1), |
322 | DEFINE_MXS_GPIO_PORT(MX28, 2), | 322 | DEFINE_MXS_GPIO_PORT(MX28_GPIO_BASE, MX28_INT_GPIO2, 2), |
323 | DEFINE_MXS_GPIO_PORT(MX28, 3), | 323 | DEFINE_MXS_GPIO_PORT(MX28_GPIO_BASE, MX28_INT_GPIO3, 3), |
324 | DEFINE_MXS_GPIO_PORT(MX28, 4), | 324 | DEFINE_MXS_GPIO_PORT(MX28_GPIO_BASE, MX28_INT_GPIO4, 4), |
325 | }; | 325 | }; |
326 | DEFINE_REGISTER_FUNCTION(mx28) | 326 | |
327 | int __init mx28_register_gpios(void) | ||
328 | { | ||
329 | return mxs_gpio_init(mx28_gpio_ports, ARRAY_SIZE(mx28_gpio_ports)); | ||
330 | } | ||
327 | #endif | 331 | #endif |