Commit b8f649f1f531914a30ecb420e7565ee04dccc2ad

Authored by Haojian Zhuang
1 parent 2cab029228

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
... ... @@ -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 */
include/linux/gpio-pxa.h
... ... @@ -14,6 +14,7 @@
14 14 extern int pxa_irq_to_gpio(int irq);
15 15  
16 16 struct pxa_gpio_platform_data {
  17 + int irq_base;
17 18 int (*gpio_set_wake)(unsigned int gpio, unsigned int on);
18 19 };
19 20