Commit b8f649f1f531914a30ecb420e7565ee04dccc2ad
1 parent
2cab029228
Exists in
master
and in
20 other branches
ARM: pxa: move PXA_GPIO_TO_IRQ macro
Since PXA_GPIO_TO_IRQ() & MMP_GPIO_TO_IRQ() macro are depended on arch code, move them from gpio driver to platform driver instead. Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org> Acked-by: Linus Walleij <linus.walleij@linaro.org>
Showing 15 changed files with 98 additions and 16 deletions Side-by-side Diff
- arch/arm/mach-mmp/aspenite.c
- arch/arm/mach-mmp/avengers_lite.c
- arch/arm/mach-mmp/brownstone.c
- arch/arm/mach-mmp/flint.c
- arch/arm/mach-mmp/gplugd.c
- arch/arm/mach-mmp/jasper.c
- arch/arm/mach-mmp/tavorevb.c
- arch/arm/mach-mmp/teton_bga.c
- arch/arm/mach-mmp/ttc_dkb.c
- arch/arm/mach-pxa/pxa25x.c
- arch/arm/mach-pxa/pxa27x.c
- arch/arm/mach-pxa/pxa3xx.c
- arch/arm/mach-pxa/pxa930.c
- drivers/gpio/gpio-pxa.c
- include/linux/gpio-pxa.h
arch/arm/mach-mmp/aspenite.c
... | ... | @@ -9,6 +9,7 @@ |
9 | 9 | * publishhed by the Free Software Foundation. |
10 | 10 | */ |
11 | 11 | #include <linux/gpio.h> |
12 | +#include <linux/gpio-pxa.h> | |
12 | 13 | #include <linux/init.h> |
13 | 14 | #include <linux/kernel.h> |
14 | 15 | #include <linux/platform_device.h> |
... | ... | @@ -110,6 +111,10 @@ |
110 | 111 | GPIO121_KP_MKIN4, |
111 | 112 | }; |
112 | 113 | |
114 | +static struct pxa_gpio_platform_data pxa168_gpio_pdata = { | |
115 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
116 | +}; | |
117 | + | |
113 | 118 | static struct smc91x_platdata smc91x_info = { |
114 | 119 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, |
115 | 120 | }; |
... | ... | @@ -248,6 +253,8 @@ |
248 | 253 | pxa168_add_nand(&aspenite_nand_info); |
249 | 254 | pxa168_add_fb(&aspenite_lcd_info); |
250 | 255 | pxa168_add_keypad(&aspenite_keypad_info); |
256 | + platform_device_add_data(&pxa168_device_gpio, &pxa168_gpio_pdata, | |
257 | + sizeof(struct pxa_gpio_platform_data)); | |
251 | 258 | platform_device_register(&pxa168_device_gpio); |
252 | 259 | |
253 | 260 | /* off-chip devices */ |
arch/arm/mach-mmp/avengers_lite.c
... | ... | @@ -12,6 +12,7 @@ |
12 | 12 | |
13 | 13 | #include <linux/init.h> |
14 | 14 | #include <linux/kernel.h> |
15 | +#include <linux/gpio-pxa.h> | |
15 | 16 | #include <linux/platform_device.h> |
16 | 17 | |
17 | 18 | #include <asm/mach-types.h> |
18 | 19 | |
... | ... | @@ -32,12 +33,18 @@ |
32 | 33 | GPIO89_UART2_RXD, |
33 | 34 | }; |
34 | 35 | |
36 | +static struct pxa_gpio_platform_data pxa168_gpio_pdata = { | |
37 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
38 | +}; | |
39 | + | |
35 | 40 | static void __init avengers_lite_init(void) |
36 | 41 | { |
37 | 42 | mfp_config(ARRAY_AND_SIZE(avengers_lite_pin_config_V16F)); |
38 | 43 | |
39 | 44 | /* on-chip devices */ |
40 | 45 | pxa168_add_uart(2); |
46 | + platform_device_add_data(&pxa168_device_gpio, &pxa168_gpio_pdata, | |
47 | + sizeof(struct pxa_gpio_platform_data)); | |
41 | 48 | platform_device_register(&pxa168_device_gpio); |
42 | 49 | } |
43 | 50 |
arch/arm/mach-mmp/brownstone.c
... | ... | @@ -14,6 +14,7 @@ |
14 | 14 | #include <linux/kernel.h> |
15 | 15 | #include <linux/platform_device.h> |
16 | 16 | #include <linux/io.h> |
17 | +#include <linux/gpio-pxa.h> | |
17 | 18 | #include <linux/regulator/machine.h> |
18 | 19 | #include <linux/regulator/max8649.h> |
19 | 20 | #include <linux/regulator/fixed.h> |
... | ... | @@ -104,6 +105,10 @@ |
104 | 105 | GPIO89_GPIO, |
105 | 106 | }; |
106 | 107 | |
108 | +static struct pxa_gpio_platform_data mmp2_gpio_pdata = { | |
109 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
110 | +}; | |
111 | + | |
107 | 112 | static struct regulator_consumer_supply max8649_supply[] = { |
108 | 113 | REGULATOR_SUPPLY("vcc_core", NULL), |
109 | 114 | }; |
... | ... | @@ -202,6 +207,8 @@ |
202 | 207 | /* on-chip devices */ |
203 | 208 | mmp2_add_uart(1); |
204 | 209 | mmp2_add_uart(3); |
210 | + platform_device_add_data(&mmp2_device_gpio, &mmp2_gpio_pdata, | |
211 | + sizeof(struct pxa_gpio_platform_data)); | |
205 | 212 | platform_device_register(&mmp2_device_gpio); |
206 | 213 | mmp2_add_twsi(1, NULL, ARRAY_AND_SIZE(brownstone_twsi1_info)); |
207 | 214 | mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0); /* SD/MMC */ |
arch/arm/mach-mmp/flint.c
... | ... | @@ -16,6 +16,7 @@ |
16 | 16 | #include <linux/smc91x.h> |
17 | 17 | #include <linux/io.h> |
18 | 18 | #include <linux/gpio.h> |
19 | +#include <linux/gpio-pxa.h> | |
19 | 20 | #include <linux/interrupt.h> |
20 | 21 | |
21 | 22 | #include <asm/mach-types.h> |
... | ... | @@ -77,6 +78,10 @@ |
77 | 78 | GPIO160_ND_RDY1, |
78 | 79 | }; |
79 | 80 | |
81 | +static struct pxa_gpio_platform_data mmp2_gpio_pdata = { | |
82 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
83 | +}; | |
84 | + | |
80 | 85 | static struct smc91x_platdata flint_smc91x_info = { |
81 | 86 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, |
82 | 87 | }; |
... | ... | @@ -111,6 +116,8 @@ |
111 | 116 | /* on-chip devices */ |
112 | 117 | mmp2_add_uart(1); |
113 | 118 | mmp2_add_uart(2); |
119 | + platform_device_add_data(&mmp2_device_gpio, &mmp2_gpio_pdata, | |
120 | + sizeof(struct pxa_gpio_platform_data)); | |
114 | 121 | platform_device_register(&mmp2_device_gpio); |
115 | 122 | |
116 | 123 | /* off-chip devices */ |
arch/arm/mach-mmp/gplugd.c
... | ... | @@ -11,6 +11,7 @@ |
11 | 11 | #include <linux/init.h> |
12 | 12 | #include <linux/platform_device.h> |
13 | 13 | #include <linux/gpio.h> |
14 | +#include <linux/gpio-pxa.h> | |
14 | 15 | |
15 | 16 | #include <asm/mach/arch.h> |
16 | 17 | #include <asm/mach-types.h> |
... | ... | @@ -128,6 +129,10 @@ |
128 | 129 | GPIO116_I2S_TXD |
129 | 130 | }; |
130 | 131 | |
132 | +static struct pxa_gpio_platform_data pxa168_gpio_pdata = { | |
133 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
134 | +}; | |
135 | + | |
131 | 136 | static struct i2c_board_info gplugd_i2c_board_info[] = { |
132 | 137 | { |
133 | 138 | .type = "isl1208", |
... | ... | @@ -186,6 +191,8 @@ |
186 | 191 | pxa168_add_uart(3); |
187 | 192 | pxa168_add_ssp(1); |
188 | 193 | pxa168_add_twsi(0, NULL, ARRAY_AND_SIZE(gplugd_i2c_board_info)); |
194 | + platform_device_add_data(&pxa168_device_gpio, &pxa168_gpio_pdata, | |
195 | + sizeof(struct pxa_gpio_platform_data)); | |
189 | 196 | platform_device_register(&pxa168_device_gpio); |
190 | 197 | |
191 | 198 | pxa168_add_eth(&gplugd_eth_platform_data); |
arch/arm/mach-mmp/jasper.c
... | ... | @@ -12,6 +12,7 @@ |
12 | 12 | |
13 | 13 | #include <linux/init.h> |
14 | 14 | #include <linux/kernel.h> |
15 | +#include <linux/gpio-pxa.h> | |
15 | 16 | #include <linux/platform_device.h> |
16 | 17 | #include <linux/io.h> |
17 | 18 | #include <linux/regulator/machine.h> |
... | ... | @@ -99,6 +100,10 @@ |
99 | 100 | GPIO151_MMC3_CLK, |
100 | 101 | }; |
101 | 102 | |
103 | +static struct pxa_gpio_platform_data mmp2_gpio_pdata = { | |
104 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
105 | +}; | |
106 | + | |
102 | 107 | static struct regulator_consumer_supply max8649_supply[] = { |
103 | 108 | REGULATOR_SUPPLY("vcc_core", NULL), |
104 | 109 | }; |
... | ... | @@ -165,6 +170,9 @@ |
165 | 170 | mmp2_add_uart(1); |
166 | 171 | mmp2_add_uart(3); |
167 | 172 | mmp2_add_twsi(1, NULL, ARRAY_AND_SIZE(jasper_twsi1_info)); |
173 | + platform_device_add_data(&mmp2_device_gpio, &mmp2_gpio_pdata, | |
174 | + sizeof(struct pxa_gpio_platform_data)); | |
175 | + platform_device_register(&mmp2_device_gpio); | |
168 | 176 | mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0); /* SD/MMC */ |
169 | 177 | |
170 | 178 | regulator_has_full_constraints(); |
arch/arm/mach-mmp/tavorevb.c
... | ... | @@ -8,6 +8,7 @@ |
8 | 8 | * publishhed by the Free Software Foundation. |
9 | 9 | */ |
10 | 10 | #include <linux/gpio.h> |
11 | +#include <linux/gpio-pxa.h> | |
11 | 12 | #include <linux/init.h> |
12 | 13 | #include <linux/kernel.h> |
13 | 14 | #include <linux/platform_device.h> |
... | ... | @@ -60,6 +61,10 @@ |
60 | 61 | DF_RDY0_DF_RDY0, |
61 | 62 | }; |
62 | 63 | |
64 | +static struct pxa_gpio_platform_data pxa910_gpio_pdata = { | |
65 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
66 | +}; | |
67 | + | |
63 | 68 | static struct smc91x_platdata tavorevb_smc91x_info = { |
64 | 69 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, |
65 | 70 | }; |
... | ... | @@ -93,6 +98,8 @@ |
93 | 98 | |
94 | 99 | /* on-chip devices */ |
95 | 100 | pxa910_add_uart(1); |
101 | + platform_device_add_data(&pxa910_device_gpio, &pxa910_gpio_pdata, | |
102 | + sizeof(struct pxa_gpio_platform_data)); | |
96 | 103 | platform_device_register(&pxa910_device_gpio); |
97 | 104 | |
98 | 105 | /* off-chip devices */ |
arch/arm/mach-mmp/teton_bga.c
... | ... | @@ -16,6 +16,7 @@ |
16 | 16 | #include <linux/kernel.h> |
17 | 17 | #include <linux/platform_device.h> |
18 | 18 | #include <linux/gpio.h> |
19 | +#include <linux/gpio-pxa.h> | |
19 | 20 | #include <linux/input.h> |
20 | 21 | #include <linux/platform_data/keypad-pxa27x.h> |
21 | 22 | #include <linux/i2c.h> |
... | ... | @@ -49,6 +50,10 @@ |
49 | 50 | GPIO78_GPIO, |
50 | 51 | }; |
51 | 52 | |
53 | +static struct pxa_gpio_platform_data pxa168_gpio_pdata = { | |
54 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
55 | +}; | |
56 | + | |
52 | 57 | static unsigned int teton_bga_matrix_key_map[] = { |
53 | 58 | KEY(0, 6, KEY_ESC), |
54 | 59 | KEY(0, 7, KEY_ENTER), |
... | ... | @@ -79,6 +84,8 @@ |
79 | 84 | pxa168_add_uart(1); |
80 | 85 | pxa168_add_keypad(&teton_bga_keypad_info); |
81 | 86 | pxa168_add_twsi(0, NULL, ARRAY_AND_SIZE(teton_bga_i2c_info)); |
87 | + platform_device_add_data(&pxa168_device_gpio, &pxa168_gpio_pdata, | |
88 | + sizeof(struct pxa_gpio_platform_data)); | |
82 | 89 | platform_device_register(&pxa168_device_gpio); |
83 | 90 | } |
84 | 91 |
arch/arm/mach-mmp/ttc_dkb.c
... | ... | @@ -17,6 +17,7 @@ |
17 | 17 | #include <linux/interrupt.h> |
18 | 18 | #include <linux/i2c/pca953x.h> |
19 | 19 | #include <linux/gpio.h> |
20 | +#include <linux/gpio-pxa.h> | |
20 | 21 | #include <linux/mfd/88pm860x.h> |
21 | 22 | #include <linux/platform_data/mv_usb.h> |
22 | 23 | #include <linux/spi/spi.h> |
... | ... | @@ -75,6 +76,10 @@ |
75 | 76 | DF_RDY0_DF_RDY0, |
76 | 77 | }; |
77 | 78 | |
79 | +static struct pxa_gpio_platform_data pxa910_gpio_pdata = { | |
80 | + .irq_base = MMP_GPIO_TO_IRQ(0), | |
81 | +}; | |
82 | + | |
78 | 83 | static struct mtd_partition ttc_dkb_onenand_partitions[] = { |
79 | 84 | { |
80 | 85 | .name = "bootloader", |
... | ... | @@ -284,6 +289,8 @@ |
284 | 289 | |
285 | 290 | /* off-chip devices */ |
286 | 291 | pxa910_add_twsi(0, NULL, ARRAY_AND_SIZE(ttc_dkb_i2c_info)); |
292 | + platform_device_add_data(&pxa910_device_gpio, &pxa910_gpio_pdata, | |
293 | + sizeof(struct pxa_gpio_platform_data)); | |
287 | 294 | platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices)); |
288 | 295 | |
289 | 296 | #ifdef CONFIG_USB_MV_UDC |
arch/arm/mach-pxa/pxa25x.c
... | ... | @@ -344,7 +344,8 @@ |
344 | 344 | } |
345 | 345 | |
346 | 346 | static struct pxa_gpio_platform_data pxa25x_gpio_info __initdata = { |
347 | - .gpio_set_wake = gpio_set_wake, | |
347 | + .irq_base = PXA_GPIO_TO_IRQ(0), | |
348 | + .gpio_set_wake = gpio_set_wake, | |
348 | 349 | }; |
349 | 350 | |
350 | 351 | static struct platform_device *pxa25x_devices[] __initdata = { |
arch/arm/mach-pxa/pxa27x.c
... | ... | @@ -431,7 +431,8 @@ |
431 | 431 | } |
432 | 432 | |
433 | 433 | static struct pxa_gpio_platform_data pxa27x_gpio_info __initdata = { |
434 | - .gpio_set_wake = gpio_set_wake, | |
434 | + .irq_base = PXA_GPIO_TO_IRQ(0), | |
435 | + .gpio_set_wake = gpio_set_wake, | |
435 | 436 | }; |
436 | 437 | |
437 | 438 | static struct platform_device *devices[] __initdata = { |
arch/arm/mach-pxa/pxa3xx.c
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | #include <linux/module.h> |
16 | 16 | #include <linux/kernel.h> |
17 | 17 | #include <linux/init.h> |
18 | +#include <linux/gpio-pxa.h> | |
18 | 19 | #include <linux/pm.h> |
19 | 20 | #include <linux/platform_device.h> |
20 | 21 | #include <linux/irq.h> |
... | ... | @@ -436,6 +437,10 @@ |
436 | 437 | pxa_register_device(&pxa3xx_device_i2c_power, info); |
437 | 438 | } |
438 | 439 | |
440 | +static struct pxa_gpio_platform_data pxa3xx_gpio_pdata = { | |
441 | + .irq_base = PXA_GPIO_TO_IRQ(0), | |
442 | +}; | |
443 | + | |
439 | 444 | static struct platform_device *devices[] __initdata = { |
440 | 445 | &pxa27x_device_udc, |
441 | 446 | &pxa_device_pmu, |
442 | 447 | |
... | ... | @@ -488,8 +493,12 @@ |
488 | 493 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); |
489 | 494 | if (ret) |
490 | 495 | return ret; |
491 | - if (cpu_is_pxa300() || cpu_is_pxa310() || cpu_is_pxa320()) | |
496 | + if (cpu_is_pxa300() || cpu_is_pxa310() || cpu_is_pxa320()) { | |
497 | + platform_device_add_data(&pxa3xx_device_gpio, | |
498 | + &pxa3xx_gpio_pdata, | |
499 | + sizeof(pxa3xx_gpio_pdata)); | |
492 | 500 | ret = platform_device_register(&pxa3xx_device_gpio); |
501 | + } | |
493 | 502 | } |
494 | 503 | |
495 | 504 | return ret; |
arch/arm/mach-pxa/pxa930.c
... | ... | @@ -12,9 +12,10 @@ |
12 | 12 | |
13 | 13 | #include <linux/module.h> |
14 | 14 | #include <linux/kernel.h> |
15 | -#include <linux/platform_device.h> | |
16 | -#include <linux/irq.h> | |
17 | 15 | #include <linux/dma-mapping.h> |
16 | +#include <linux/irq.h> | |
17 | +#include <linux/gpio-pxa.h> | |
18 | +#include <linux/platform_device.h> | |
18 | 19 | |
19 | 20 | #include <mach/pxa930.h> |
20 | 21 | |
... | ... | @@ -192,6 +193,10 @@ |
192 | 193 | MFP_ADDR_END, |
193 | 194 | }; |
194 | 195 | |
196 | +static struct pxa_gpio_platform_data pxa93x_gpio_pdata = { | |
197 | + .irq_base = PXA_GPIO_TO_IRQ(0), | |
198 | +}; | |
199 | + | |
195 | 200 | static int __init pxa930_init(void) |
196 | 201 | { |
197 | 202 | int ret = 0; |
... | ... | @@ -199,6 +204,9 @@ |
199 | 204 | if (cpu_is_pxa93x()) { |
200 | 205 | mfp_init_base(io_p2v(MFPR_BASE)); |
201 | 206 | mfp_init_addr(pxa930_mfp_addr_map); |
207 | + platform_device_add_data(&pxa93x_device_gpio, | |
208 | + &pxa93x_gpio_pdata, | |
209 | + sizeof(pxa93x_gpio_pdata)); | |
202 | 210 | ret = platform_device_register(&pxa93x_device_gpio); |
203 | 211 | } |
204 | 212 |
drivers/gpio/gpio-pxa.c
... | ... | @@ -574,19 +574,18 @@ |
574 | 574 | int gpio, irq, ret, use_of = 0; |
575 | 575 | int irq0 = 0, irq1 = 0, irq_mux, gpio_offset = 0; |
576 | 576 | |
577 | - ret = pxa_gpio_probe_dt(pdev); | |
578 | - if (ret < 0) { | |
577 | + info = dev_get_platdata(&pdev->dev); | |
578 | + if (info) { | |
579 | + irq_base = info->irq_base; | |
580 | + if (irq_base <= 0) | |
581 | + return -EINVAL; | |
579 | 582 | pxa_last_gpio = pxa_gpio_nums(pdev); |
580 | -#ifdef CONFIG_ARCH_PXA | |
581 | - if (gpio_is_pxa_type(gpio_type)) | |
582 | - irq_base = PXA_GPIO_TO_IRQ(0); | |
583 | -#endif | |
584 | -#ifdef CONFIG_ARCH_MMP | |
585 | - if (gpio_is_mmp_type(gpio_type)) | |
586 | - irq_base = MMP_GPIO_TO_IRQ(0); | |
587 | -#endif | |
588 | 583 | } else { |
584 | + irq_base = 0; | |
589 | 585 | use_of = 1; |
586 | + ret = pxa_gpio_probe_dt(pdev); | |
587 | + if (ret < 0) | |
588 | + return -EINVAL; | |
590 | 589 | } |
591 | 590 | |
592 | 591 | if (!pxa_last_gpio) |
... | ... | @@ -623,7 +622,6 @@ |
623 | 622 | } |
624 | 623 | |
625 | 624 | /* Initialize GPIO chips */ |
626 | - info = dev_get_platdata(&pdev->dev); | |
627 | 625 | pxa_init_gpio_chip(pxa_last_gpio, info ? info->gpio_set_wake : NULL); |
628 | 626 | |
629 | 627 | /* clear all GPIO edge detects */ |