diff options
43 files changed, 107 insertions, 359 deletions
diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile index de3cc130ab8e..0b1c07ffa2f1 100644 --- a/arch/arm/mach-omap1/Makefile +++ b/arch/arm/mach-omap1/Makefile | |||
@@ -49,6 +49,12 @@ ifeq ($(CONFIG_ARCH_OMAP15XX),y) | |||
49 | obj-$(CONFIG_MACH_OMAP_INNOVATOR) += fpga.o | 49 | obj-$(CONFIG_MACH_OMAP_INNOVATOR) += fpga.o |
50 | endif | 50 | endif |
51 | 51 | ||
52 | # GPIO | ||
53 | obj-$(CONFIG_ARCH_OMAP730) += gpio7xx.o | ||
54 | obj-$(CONFIG_ARCH_OMAP850) += gpio7xx.o | ||
55 | obj-$(CONFIG_ARCH_OMAP15XX) += gpio15xx.o | ||
56 | obj-$(CONFIG_ARCH_OMAP16XX) += gpio16xx.o | ||
57 | |||
52 | # LEDs support | 58 | # LEDs support |
53 | led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o | 59 | led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o |
54 | led-$(CONFIG_MACH_OMAP_H3) += leds-h2p2-debug.o | 60 | led-$(CONFIG_MACH_OMAP_H3) += leds-h2p2-debug.o |
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 9d97a72c5393..ce4d69ca15fe 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c | |||
@@ -141,7 +141,6 @@ static void __init ams_delta_init_irq(void) | |||
141 | { | 141 | { |
142 | omap1_init_common_hw(); | 142 | omap1_init_common_hw(); |
143 | omap_init_irq(); | 143 | omap_init_irq(); |
144 | omap_gpio_init(); | ||
145 | } | 144 | } |
146 | 145 | ||
147 | static struct map_desc ams_delta_io_desc[] __initdata = { | 146 | static struct map_desc ams_delta_io_desc[] __initdata = { |
diff --git a/arch/arm/mach-omap1/board-fsample.c b/arch/arm/mach-omap1/board-fsample.c index 295ab6713670..0c3f396328bd 100644 --- a/arch/arm/mach-omap1/board-fsample.c +++ b/arch/arm/mach-omap1/board-fsample.c | |||
@@ -327,7 +327,6 @@ static void __init omap_fsample_init_irq(void) | |||
327 | { | 327 | { |
328 | omap1_init_common_hw(); | 328 | omap1_init_common_hw(); |
329 | omap_init_irq(); | 329 | omap_init_irq(); |
330 | omap_gpio_init(); | ||
331 | } | 330 | } |
332 | 331 | ||
333 | /* Only FPGA needs to be mapped here. All others are done with ioremap */ | 332 | /* Only FPGA needs to be mapped here. All others are done with ioremap */ |
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index dd35efdefcf7..082a73ca5564 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c | |||
@@ -374,7 +374,6 @@ static void __init h2_init_irq(void) | |||
374 | { | 374 | { |
375 | omap1_init_common_hw(); | 375 | omap1_init_common_hw(); |
376 | omap_init_irq(); | 376 | omap_init_irq(); |
377 | omap_gpio_init(); | ||
378 | } | 377 | } |
379 | 378 | ||
380 | static struct omap_usb_config h2_usb_config __initdata = { | 379 | static struct omap_usb_config h2_usb_config __initdata = { |
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index 78719198809e..d2cff5022fe5 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c | |||
@@ -437,7 +437,6 @@ static void __init h3_init_irq(void) | |||
437 | { | 437 | { |
438 | omap1_init_common_hw(); | 438 | omap1_init_common_hw(); |
439 | omap_init_irq(); | 439 | omap_init_irq(); |
440 | omap_gpio_init(); | ||
441 | } | 440 | } |
442 | 441 | ||
443 | static void __init h3_map_io(void) | 442 | static void __init h3_map_io(void) |
diff --git a/arch/arm/mach-omap1/board-htcherald.c b/arch/arm/mach-omap1/board-htcherald.c index 071af3e47789..faa344f734dc 100644 --- a/arch/arm/mach-omap1/board-htcherald.c +++ b/arch/arm/mach-omap1/board-htcherald.c | |||
@@ -577,8 +577,6 @@ static void __init htcherald_init(void) | |||
577 | printk(KERN_INFO "HTC Herald init.\n"); | 577 | printk(KERN_INFO "HTC Herald init.\n"); |
578 | 578 | ||
579 | /* Do board initialization before we register all the devices */ | 579 | /* Do board initialization before we register all the devices */ |
580 | omap_gpio_init(); | ||
581 | |||
582 | omap_board_config = htcherald_config; | 580 | omap_board_config = htcherald_config; |
583 | omap_board_config_size = ARRAY_SIZE(htcherald_config); | 581 | omap_board_config_size = ARRAY_SIZE(htcherald_config); |
584 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 582 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 0feaa6731c7e..a051acdc526a 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c | |||
@@ -290,7 +290,6 @@ static void __init innovator_init_irq(void) | |||
290 | { | 290 | { |
291 | omap1_init_common_hw(); | 291 | omap1_init_common_hw(); |
292 | omap_init_irq(); | 292 | omap_init_irq(); |
293 | omap_gpio_init(); | ||
294 | #ifdef CONFIG_ARCH_OMAP15XX | 293 | #ifdef CONFIG_ARCH_OMAP15XX |
295 | if (cpu_is_omap1510()) { | 294 | if (cpu_is_omap1510()) { |
296 | omap1510_fpga_init_irq(); | 295 | omap1510_fpga_init_irq(); |
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index aa8375b2a0a3..605495bbc583 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c | |||
@@ -246,7 +246,6 @@ static void __init omap_nokia770_init(void) | |||
246 | platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices)); | 246 | platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices)); |
247 | spi_register_board_info(nokia770_spi_board_info, | 247 | spi_register_board_info(nokia770_spi_board_info, |
248 | ARRAY_SIZE(nokia770_spi_board_info)); | 248 | ARRAY_SIZE(nokia770_spi_board_info)); |
249 | omap_gpio_init(); | ||
250 | omap_serial_init(); | 249 | omap_serial_init(); |
251 | omap_register_i2c_bus(1, 100, NULL, 0); | 250 | omap_register_i2c_bus(1, 100, NULL, 0); |
252 | hwa742_dev_init(); | 251 | hwa742_dev_init(); |
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index 30bdbdb93636..d44e7172efc2 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c | |||
@@ -283,7 +283,6 @@ static void __init osk_init_irq(void) | |||
283 | { | 283 | { |
284 | omap1_init_common_hw(); | 284 | omap1_init_common_hw(); |
285 | omap_init_irq(); | 285 | omap_init_irq(); |
286 | omap_gpio_init(); | ||
287 | } | 286 | } |
288 | 287 | ||
289 | static struct omap_usb_config osk_usb_config __initdata = { | 288 | static struct omap_usb_config osk_usb_config __initdata = { |
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index f32738b1eb6b..994dc6f50729 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c | |||
@@ -63,7 +63,6 @@ static void __init omap_palmte_init_irq(void) | |||
63 | { | 63 | { |
64 | omap1_init_common_hw(); | 64 | omap1_init_common_hw(); |
65 | omap_init_irq(); | 65 | omap_init_irq(); |
66 | omap_gpio_init(); | ||
67 | } | 66 | } |
68 | 67 | ||
69 | static const int palmte_keymap[] = { | 68 | static const int palmte_keymap[] = { |
diff --git a/arch/arm/mach-omap1/board-palmz71.c b/arch/arm/mach-omap1/board-palmz71.c index d7a245cef9a4..2afac598baee 100644 --- a/arch/arm/mach-omap1/board-palmz71.c +++ b/arch/arm/mach-omap1/board-palmz71.c | |||
@@ -62,7 +62,6 @@ omap_palmz71_init_irq(void) | |||
62 | { | 62 | { |
63 | omap1_init_common_hw(); | 63 | omap1_init_common_hw(); |
64 | omap_init_irq(); | 64 | omap_init_irq(); |
65 | omap_gpio_init(); | ||
66 | } | 65 | } |
67 | 66 | ||
68 | static int palmz71_keymap[] = { | 67 | static int palmz71_keymap[] = { |
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c index 07660be4f228..69fda218fb45 100644 --- a/arch/arm/mach-omap1/board-perseus2.c +++ b/arch/arm/mach-omap1/board-perseus2.c | |||
@@ -295,7 +295,6 @@ static void __init omap_perseus2_init_irq(void) | |||
295 | { | 295 | { |
296 | omap1_init_common_hw(); | 296 | omap1_init_common_hw(); |
297 | omap_init_irq(); | 297 | omap_init_irq(); |
298 | omap_gpio_init(); | ||
299 | } | 298 | } |
300 | /* Only FPGA needs to be mapped here. All others are done with ioremap */ | 299 | /* Only FPGA needs to be mapped here. All others are done with ioremap */ |
301 | static struct map_desc omap_perseus2_io_desc[] __initdata = { | 300 | static struct map_desc omap_perseus2_io_desc[] __initdata = { |
diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c index d25f59e5a773..463862c67819 100644 --- a/arch/arm/mach-omap1/board-sx1.c +++ b/arch/arm/mach-omap1/board-sx1.c | |||
@@ -409,7 +409,6 @@ static void __init omap_sx1_init_irq(void) | |||
409 | { | 409 | { |
410 | omap1_init_common_hw(); | 410 | omap1_init_common_hw(); |
411 | omap_init_irq(); | 411 | omap_init_irq(); |
412 | omap_gpio_init(); | ||
413 | } | 412 | } |
414 | /*----------------------------------------*/ | 413 | /*----------------------------------------*/ |
415 | 414 | ||
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c index f5992c239bcd..789f5bac7359 100644 --- a/arch/arm/mach-omap1/board-voiceblue.c +++ b/arch/arm/mach-omap1/board-voiceblue.c | |||
@@ -158,7 +158,6 @@ static void __init voiceblue_init_irq(void) | |||
158 | { | 158 | { |
159 | omap1_init_common_hw(); | 159 | omap1_init_common_hw(); |
160 | omap_init_irq(); | 160 | omap_init_irq(); |
161 | omap_gpio_init(); | ||
162 | } | 161 | } |
163 | 162 | ||
164 | static void __init voiceblue_init(void) | 163 | static void __init voiceblue_init(void) |
diff --git a/arch/arm/mach-omap1/clock_data.c b/arch/arm/mach-omap1/clock_data.c index af54114b8f08..423d21d8c190 100644 --- a/arch/arm/mach-omap1/clock_data.c +++ b/arch/arm/mach-omap1/clock_data.c | |||
@@ -143,7 +143,7 @@ static struct arm_idlect1_clk armper_ck = { | |||
143 | * activation. [ GPIO code for 1510 ] | 143 | * activation. [ GPIO code for 1510 ] |
144 | */ | 144 | */ |
145 | static struct clk arm_gpio_ck = { | 145 | static struct clk arm_gpio_ck = { |
146 | .name = "arm_gpio_ck", | 146 | .name = "ick", |
147 | .ops = &clkops_generic, | 147 | .ops = &clkops_generic, |
148 | .parent = &ck_dpll1, | 148 | .parent = &ck_dpll1, |
149 | .flags = ENABLE_ON_INIT, | 149 | .flags = ENABLE_ON_INIT, |
@@ -684,7 +684,7 @@ static struct omap_clk omap_clks[] = { | |||
684 | CLK(NULL, "ck_sossi", &sossi_ck, CK_16XX), | 684 | CLK(NULL, "ck_sossi", &sossi_ck, CK_16XX), |
685 | CLK(NULL, "arm_ck", &arm_ck, CK_16XX | CK_1510 | CK_310), | 685 | CLK(NULL, "arm_ck", &arm_ck, CK_16XX | CK_1510 | CK_310), |
686 | CLK(NULL, "armper_ck", &armper_ck.clk, CK_16XX | CK_1510 | CK_310), | 686 | CLK(NULL, "armper_ck", &armper_ck.clk, CK_16XX | CK_1510 | CK_310), |
687 | CLK(NULL, "arm_gpio_ck", &arm_gpio_ck, CK_1510 | CK_310), | 687 | CLK("omap_gpio.0", "ick", &arm_gpio_ck, CK_1510 | CK_310), |
688 | CLK(NULL, "armxor_ck", &armxor_ck.clk, CK_16XX | CK_1510 | CK_310 | CK_7XX), | 688 | CLK(NULL, "armxor_ck", &armxor_ck.clk, CK_16XX | CK_1510 | CK_310 | CK_7XX), |
689 | CLK(NULL, "armtim_ck", &armtim_ck.clk, CK_16XX | CK_1510 | CK_310), | 689 | CLK(NULL, "armtim_ck", &armtim_ck.clk, CK_16XX | CK_1510 | CK_310), |
690 | CLK("omap_wdt", "fck", &armwdt_ck.clk, CK_16XX | CK_1510 | CK_310), | 690 | CLK("omap_wdt", "fck", &armwdt_ck.clk, CK_16XX | CK_1510 | CK_310), |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index ce7b1f017670..fbc87395a025 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | # Common support | 5 | # Common support |
6 | obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o \ | 6 | obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o \ |
7 | common.o | 7 | common.o gpio.o |
8 | 8 | ||
9 | omap-2-3-common = irq.o sdrc.o prm2xxx_3xxx.o | 9 | omap-2-3-common = irq.o sdrc.o prm2xxx_3xxx.o |
10 | hwmod-common = omap_hwmod.o \ | 10 | hwmod-common = omap_hwmod.o \ |
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index b527f8d187ad..0f14001c1641 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
@@ -145,7 +145,6 @@ static void __init omap_2430sdp_init_irq(void) | |||
145 | omap_board_config_size = ARRAY_SIZE(sdp2430_config); | 145 | omap_board_config_size = ARRAY_SIZE(sdp2430_config); |
146 | omap2_init_common_hw(NULL, NULL); | 146 | omap2_init_common_hw(NULL, NULL); |
147 | omap_init_irq(); | 147 | omap_init_irq(); |
148 | omap_gpio_init(); | ||
149 | } | 148 | } |
150 | 149 | ||
151 | static struct twl4030_gpio_platform_data sdp2430_gpio_data = { | 150 | static struct twl4030_gpio_platform_data sdp2430_gpio_data = { |
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 4e3742c512b8..5cb23f3d4fc0 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
@@ -328,7 +328,6 @@ static void __init omap_3430sdp_init_irq(void) | |||
328 | omap3_pm_init_cpuidle(omap3_cpuidle_params_table); | 328 | omap3_pm_init_cpuidle(omap3_cpuidle_params_table); |
329 | omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL); | 329 | omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL); |
330 | omap_init_irq(); | 330 | omap_init_irq(); |
331 | omap_gpio_init(); | ||
332 | } | 331 | } |
333 | 332 | ||
334 | static int sdp3430_batt_table[] = { | 333 | static int sdp3430_batt_table[] = { |
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index bbcf580fa097..b23f401aa6b6 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c | |||
@@ -76,7 +76,6 @@ static void __init omap_sdp_init_irq(void) | |||
76 | omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params, | 76 | omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params, |
77 | h8mbx00u0mer0em_sdrc_params); | 77 | h8mbx00u0mer0em_sdrc_params); |
78 | omap_init_irq(); | 78 | omap_init_irq(); |
79 | omap_gpio_init(); | ||
80 | } | 79 | } |
81 | 80 | ||
82 | #ifdef CONFIG_OMAP_MUX | 81 | #ifdef CONFIG_OMAP_MUX |
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 94d989bee8ad..8842ec5e51e3 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c | |||
@@ -223,7 +223,6 @@ static void __init omap_4430sdp_init_irq(void) | |||
223 | omap2_gp_clockevent_set_gptimer(1); | 223 | omap2_gp_clockevent_set_gptimer(1); |
224 | #endif | 224 | #endif |
225 | gic_init_irq(); | 225 | gic_init_irq(); |
226 | omap_gpio_init(); | ||
227 | } | 226 | } |
228 | 227 | ||
229 | static struct omap_musb_board_data musb_board_data = { | 228 | static struct omap_musb_board_data musb_board_data = { |
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c index 13ead330e389..8ba404770e75 100644 --- a/arch/arm/mach-omap2/board-am3517crane.c +++ b/arch/arm/mach-omap2/board-am3517crane.c | |||
@@ -19,7 +19,6 @@ | |||
19 | 19 | ||
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/gpio.h> | ||
23 | 22 | ||
24 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
25 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
@@ -50,7 +49,6 @@ static void __init am3517_crane_init_irq(void) | |||
50 | 49 | ||
51 | omap2_init_common_hw(NULL, NULL); | 50 | omap2_init_common_hw(NULL, NULL); |
52 | omap_init_irq(); | 51 | omap_init_irq(); |
53 | omap_gpio_init(); | ||
54 | } | 52 | } |
55 | 53 | ||
56 | static void __init am3517_crane_init(void) | 54 | static void __init am3517_crane_init(void) |
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 07399505312b..df6900e8ad5a 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c | |||
@@ -392,7 +392,6 @@ static void __init am3517_evm_init_irq(void) | |||
392 | 392 | ||
393 | omap2_init_common_hw(NULL, NULL); | 393 | omap2_init_common_hw(NULL, NULL); |
394 | omap_init_irq(); | 394 | omap_init_irq(); |
395 | omap_gpio_init(); | ||
396 | } | 395 | } |
397 | 396 | ||
398 | static struct omap_musb_board_data musb_board_data = { | 397 | static struct omap_musb_board_data musb_board_data = { |
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index 6ae777e08896..f51f4f1e07f7 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c | |||
@@ -280,7 +280,6 @@ static void __init omap_apollon_init_irq(void) | |||
280 | omap_board_config_size = ARRAY_SIZE(apollon_config); | 280 | omap_board_config_size = ARRAY_SIZE(apollon_config); |
281 | omap2_init_common_hw(NULL, NULL); | 281 | omap2_init_common_hw(NULL, NULL); |
282 | omap_init_irq(); | 282 | omap_init_irq(); |
283 | omap_gpio_init(); | ||
284 | } | 283 | } |
285 | 284 | ||
286 | static void __init apollon_led_init(void) | 285 | static void __init apollon_led_init(void) |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 63f764e2af3f..78b67fb790bf 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
@@ -686,7 +686,6 @@ static void __init cm_t35_init_irq(void) | |||
686 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, | 686 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, |
687 | mt46h32m32lf6_sdrc_params); | 687 | mt46h32m32lf6_sdrc_params); |
688 | omap_init_irq(); | 688 | omap_init_irq(); |
689 | omap_gpio_init(); | ||
690 | } | 689 | } |
691 | 690 | ||
692 | static struct omap_board_mux board_mux[] __initdata = { | 691 | static struct omap_board_mux board_mux[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index 1dd303e9a267..7ee23dab84fe 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c | |||
@@ -250,7 +250,6 @@ static void __init cm_t3517_init_irq(void) | |||
250 | 250 | ||
251 | omap2_init_common_hw(NULL, NULL); | 251 | omap2_init_common_hw(NULL, NULL); |
252 | omap_init_irq(); | 252 | omap_init_irq(); |
253 | omap_gpio_init(); | ||
254 | } | 253 | } |
255 | 254 | ||
256 | static struct omap_board_mux board_mux[] __initdata = { | 255 | static struct omap_board_mux board_mux[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 53ac762518bd..a30a7fce8cbf 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -450,7 +450,6 @@ static void __init devkit8000_init_irq(void) | |||
450 | #ifdef CONFIG_OMAP_32K_TIMER | 450 | #ifdef CONFIG_OMAP_32K_TIMER |
451 | omap2_gp_clockevent_set_gptimer(12); | 451 | omap2_gp_clockevent_set_gptimer(12); |
452 | #endif | 452 | #endif |
453 | omap_gpio_init(); | ||
454 | } | 453 | } |
455 | 454 | ||
456 | static void __init devkit8000_ads7846_init(void) | 455 | static void __init devkit8000_ads7846_init(void) |
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 929993b4bf26..68e6f4c8e00a 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c | |||
@@ -293,7 +293,6 @@ static void __init omap_h4_init_irq(void) | |||
293 | omap_board_config_size = ARRAY_SIZE(h4_config); | 293 | omap_board_config_size = ARRAY_SIZE(h4_config); |
294 | omap2_init_common_hw(NULL, NULL); | 294 | omap2_init_common_hw(NULL, NULL); |
295 | omap_init_irq(); | 295 | omap_init_irq(); |
296 | omap_gpio_init(); | ||
297 | h4_init_flash(); | 296 | h4_init_flash(); |
298 | } | 297 | } |
299 | 298 | ||
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index fe76b59b13ed..3bda186fe677 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
@@ -484,7 +484,6 @@ static void __init igep2_init_irq(void) | |||
484 | { | 484 | { |
485 | omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params); | 485 | omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params); |
486 | omap_init_irq(); | 486 | omap_init_irq(); |
487 | omap_gpio_init(); | ||
488 | } | 487 | } |
489 | 488 | ||
490 | static struct twl4030_codec_audio_data igep2_audio_data = { | 489 | static struct twl4030_codec_audio_data igep2_audio_data = { |
diff --git a/arch/arm/mach-omap2/board-igep0030.c b/arch/arm/mach-omap2/board-igep0030.c index 22b0b253e16b..c7c57cdf83d6 100644 --- a/arch/arm/mach-omap2/board-igep0030.c +++ b/arch/arm/mach-omap2/board-igep0030.c | |||
@@ -291,7 +291,6 @@ static void __init igep3_init_irq(void) | |||
291 | { | 291 | { |
292 | omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params); | 292 | omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params); |
293 | omap_init_irq(); | 293 | omap_init_irq(); |
294 | omap_gpio_init(); | ||
295 | } | 294 | } |
296 | 295 | ||
297 | static struct twl4030_platform_data igep3_twl4030_pdata = { | 296 | static struct twl4030_platform_data igep3_twl4030_pdata = { |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index 3dab44e3eb42..d97e3caed7c0 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
@@ -294,7 +294,6 @@ static void __init omap_ldp_init_irq(void) | |||
294 | omap_board_config_size = ARRAY_SIZE(ldp_config); | 294 | omap_board_config_size = ARRAY_SIZE(ldp_config); |
295 | omap2_init_common_hw(NULL, NULL); | 295 | omap2_init_common_hw(NULL, NULL); |
296 | omap_init_irq(); | 296 | omap_init_irq(); |
297 | omap_gpio_init(); | ||
298 | } | 297 | } |
299 | 298 | ||
300 | static struct twl4030_usb_data ldp_usb_data = { | 299 | static struct twl4030_usb_data ldp_usb_data = { |
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index e823c7042ab3..d8a489338e0c 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
@@ -641,7 +641,6 @@ static void __init n8x0_init_irq(void) | |||
641 | { | 641 | { |
642 | omap2_init_common_hw(NULL, NULL); | 642 | omap2_init_common_hw(NULL, NULL); |
643 | omap_init_irq(); | 643 | omap_init_irq(); |
644 | omap_gpio_init(); | ||
645 | } | 644 | } |
646 | 645 | ||
647 | #ifdef CONFIG_OMAP_MUX | 646 | #ifdef CONFIG_OMAP_MUX |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 14f42240ae79..a4131bef50fb 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -490,7 +490,6 @@ static void __init omap3_beagle_init_irq(void) | |||
490 | #ifdef CONFIG_OMAP_32K_TIMER | 490 | #ifdef CONFIG_OMAP_32K_TIMER |
491 | omap2_gp_clockevent_set_gptimer(12); | 491 | omap2_gp_clockevent_set_gptimer(12); |
492 | #endif | 492 | #endif |
493 | omap_gpio_init(); | ||
494 | } | 493 | } |
495 | 494 | ||
496 | static struct platform_device *omap3_beagle_devices[] __initdata = { | 495 | static struct platform_device *omap3_beagle_devices[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index b04365c6bb10..5ca02202d608 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
@@ -625,7 +625,6 @@ static void __init omap3_evm_init_irq(void) | |||
625 | omap_board_config_size = ARRAY_SIZE(omap3_evm_config); | 625 | omap_board_config_size = ARRAY_SIZE(omap3_evm_config); |
626 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL); | 626 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL); |
627 | omap_init_irq(); | 627 | omap_init_irq(); |
628 | omap_gpio_init(); | ||
629 | } | 628 | } |
630 | 629 | ||
631 | static struct platform_device *omap3_evm_devices[] __initdata = { | 630 | static struct platform_device *omap3_evm_devices[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index 5f7d2c1e7ef5..263294044c7e 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c | |||
@@ -199,7 +199,6 @@ static void __init omap3logic_init_irq(void) | |||
199 | { | 199 | { |
200 | omap2_init_common_hw(NULL, NULL); | 200 | omap2_init_common_hw(NULL, NULL); |
201 | omap_init_irq(); | 201 | omap_init_irq(); |
202 | omap_gpio_init(); | ||
203 | } | 202 | } |
204 | 203 | ||
205 | #ifdef CONFIG_OMAP_MUX | 204 | #ifdef CONFIG_OMAP_MUX |
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 89ed1be2d62e..1031d7cadb3a 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c | |||
@@ -639,7 +639,6 @@ static void __init omap3pandora_init_irq(void) | |||
639 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, | 639 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, |
640 | mt46h32m32lf6_sdrc_params); | 640 | mt46h32m32lf6_sdrc_params); |
641 | omap_init_irq(); | 641 | omap_init_irq(); |
642 | omap_gpio_init(); | ||
643 | } | 642 | } |
644 | 643 | ||
645 | static void pandora_wl1251_set_power(bool enable) | 644 | static void pandora_wl1251_set_power(bool enable) |
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index f25272125413..ea13e2aeeec5 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
@@ -589,7 +589,6 @@ static void __init omap3_stalker_init_irq(void) | |||
589 | #ifdef CONFIG_OMAP_32K_TIMER | 589 | #ifdef CONFIG_OMAP_32K_TIMER |
590 | omap2_gp_clockevent_set_gptimer(12); | 590 | omap2_gp_clockevent_set_gptimer(12); |
591 | #endif | 591 | #endif |
592 | omap_gpio_init(); | ||
593 | } | 592 | } |
594 | 593 | ||
595 | static struct platform_device *omap3_stalker_devices[] __initdata = { | 594 | static struct platform_device *omap3_stalker_devices[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index 41104bb8774c..2339964058cc 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c | |||
@@ -428,7 +428,6 @@ static void __init omap3_touchbook_init_irq(void) | |||
428 | #ifdef CONFIG_OMAP_32K_TIMER | 428 | #ifdef CONFIG_OMAP_32K_TIMER |
429 | omap2_gp_clockevent_set_gptimer(12); | 429 | omap2_gp_clockevent_set_gptimer(12); |
430 | #endif | 430 | #endif |
431 | omap_gpio_init(); | ||
432 | } | 431 | } |
433 | 432 | ||
434 | static struct platform_device *omap3_touchbook_devices[] __initdata = { | 433 | static struct platform_device *omap3_touchbook_devices[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 801f8146b00c..38f942beb121 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
@@ -79,7 +79,6 @@ static void __init omap4_panda_init_irq(void) | |||
79 | { | 79 | { |
80 | omap2_init_common_hw(NULL, NULL); | 80 | omap2_init_common_hw(NULL, NULL); |
81 | gic_init_irq(); | 81 | gic_init_irq(); |
82 | omap_gpio_init(); | ||
83 | } | 82 | } |
84 | 83 | ||
85 | static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { | 84 | static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 7053bc0b46db..805b78393393 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
@@ -416,7 +416,6 @@ static void __init overo_init_irq(void) | |||
416 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, | 416 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, |
417 | mt46h32m32lf6_sdrc_params); | 417 | mt46h32m32lf6_sdrc_params); |
418 | omap_init_irq(); | 418 | omap_init_irq(); |
419 | omap_gpio_init(); | ||
420 | } | 419 | } |
421 | 420 | ||
422 | static struct platform_device *overo_devices[] __initdata = { | 421 | static struct platform_device *overo_devices[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index 36f2cf4efd57..1c3b0795c6e2 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c | |||
@@ -108,7 +108,6 @@ static void __init rx51_init_irq(void) | |||
108 | sdrc_params = rx51_get_sdram_timings(); | 108 | sdrc_params = rx51_get_sdram_timings(); |
109 | omap2_init_common_hw(sdrc_params, sdrc_params); | 109 | omap2_init_common_hw(sdrc_params, sdrc_params); |
110 | omap_init_irq(); | 110 | omap_init_irq(); |
111 | omap_gpio_init(); | ||
112 | } | 111 | } |
113 | 112 | ||
114 | extern void __init rx51_peripherals_init(void); | 113 | extern void __init rx51_peripherals_init(void); |
diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c index 3da69e4102a4..abd864a50b4e 100644 --- a/arch/arm/mach-omap2/board-zoom.c +++ b/arch/arm/mach-omap2/board-zoom.c | |||
@@ -43,7 +43,6 @@ static void __init omap_zoom_init_irq(void) | |||
43 | h8mbx00u0mer0em_sdrc_params); | 43 | h8mbx00u0mer0em_sdrc_params); |
44 | 44 | ||
45 | omap_init_irq(); | 45 | omap_init_irq(); |
46 | omap_gpio_init(); | ||
47 | } | 46 | } |
48 | 47 | ||
49 | #ifdef CONFIG_OMAP_MUX | 48 | #ifdef CONFIG_OMAP_MUX |
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 2b0d90109828..6f53dee98a91 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -21,6 +21,8 @@ | |||
21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/slab.h> | ||
25 | #include <linux/pm_runtime.h> | ||
24 | 26 | ||
25 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
26 | #include <asm/irq.h> | 28 | #include <asm/irq.h> |
@@ -32,7 +34,6 @@ | |||
32 | /* | 34 | /* |
33 | * OMAP1510 GPIO registers | 35 | * OMAP1510 GPIO registers |
34 | */ | 36 | */ |
35 | #define OMAP1510_GPIO_BASE 0xfffce000 | ||
36 | #define OMAP1510_GPIO_DATA_INPUT 0x00 | 37 | #define OMAP1510_GPIO_DATA_INPUT 0x00 |
37 | #define OMAP1510_GPIO_DATA_OUTPUT 0x04 | 38 | #define OMAP1510_GPIO_DATA_OUTPUT 0x04 |
38 | #define OMAP1510_GPIO_DIR_CONTROL 0x08 | 39 | #define OMAP1510_GPIO_DIR_CONTROL 0x08 |
@@ -46,10 +47,6 @@ | |||
46 | /* | 47 | /* |
47 | * OMAP1610 specific GPIO registers | 48 | * OMAP1610 specific GPIO registers |
48 | */ | 49 | */ |
49 | #define OMAP1610_GPIO1_BASE 0xfffbe400 | ||
50 | #define OMAP1610_GPIO2_BASE 0xfffbec00 | ||
51 | #define OMAP1610_GPIO3_BASE 0xfffbb400 | ||
52 | #define OMAP1610_GPIO4_BASE 0xfffbbc00 | ||
53 | #define OMAP1610_GPIO_REVISION 0x0000 | 50 | #define OMAP1610_GPIO_REVISION 0x0000 |
54 | #define OMAP1610_GPIO_SYSCONFIG 0x0010 | 51 | #define OMAP1610_GPIO_SYSCONFIG 0x0010 |
55 | #define OMAP1610_GPIO_SYSSTATUS 0x0014 | 52 | #define OMAP1610_GPIO_SYSSTATUS 0x0014 |
@@ -71,12 +68,6 @@ | |||
71 | /* | 68 | /* |
72 | * OMAP7XX specific GPIO registers | 69 | * OMAP7XX specific GPIO registers |
73 | */ | 70 | */ |
74 | #define OMAP7XX_GPIO1_BASE 0xfffbc000 | ||
75 | #define OMAP7XX_GPIO2_BASE 0xfffbc800 | ||
76 | #define OMAP7XX_GPIO3_BASE 0xfffbd000 | ||
77 | #define OMAP7XX_GPIO4_BASE 0xfffbd800 | ||
78 | #define OMAP7XX_GPIO5_BASE 0xfffbe000 | ||
79 | #define OMAP7XX_GPIO6_BASE 0xfffbe800 | ||
80 | #define OMAP7XX_GPIO_DATA_INPUT 0x00 | 71 | #define OMAP7XX_GPIO_DATA_INPUT 0x00 |
81 | #define OMAP7XX_GPIO_DATA_OUTPUT 0x04 | 72 | #define OMAP7XX_GPIO_DATA_OUTPUT 0x04 |
82 | #define OMAP7XX_GPIO_DIR_CONTROL 0x08 | 73 | #define OMAP7XX_GPIO_DIR_CONTROL 0x08 |
@@ -84,25 +75,10 @@ | |||
84 | #define OMAP7XX_GPIO_INT_MASK 0x10 | 75 | #define OMAP7XX_GPIO_INT_MASK 0x10 |
85 | #define OMAP7XX_GPIO_INT_STATUS 0x14 | 76 | #define OMAP7XX_GPIO_INT_STATUS 0x14 |
86 | 77 | ||
87 | #define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE | ||
88 | |||
89 | /* | 78 | /* |
90 | * omap24xx specific GPIO registers | 79 | * omap2+ specific GPIO registers |
91 | */ | 80 | */ |
92 | #define OMAP242X_GPIO1_BASE 0x48018000 | ||
93 | #define OMAP242X_GPIO2_BASE 0x4801a000 | ||
94 | #define OMAP242X_GPIO3_BASE 0x4801c000 | ||
95 | #define OMAP242X_GPIO4_BASE 0x4801e000 | ||
96 | |||
97 | #define OMAP243X_GPIO1_BASE 0x4900C000 | ||
98 | #define OMAP243X_GPIO2_BASE 0x4900E000 | ||
99 | #define OMAP243X_GPIO3_BASE 0x49010000 | ||
100 | #define OMAP243X_GPIO4_BASE 0x49012000 | ||
101 | #define OMAP243X_GPIO5_BASE 0x480B6000 | ||
102 | |||
103 | #define OMAP24XX_GPIO_REVISION 0x0000 | 81 | #define OMAP24XX_GPIO_REVISION 0x0000 |
104 | #define OMAP24XX_GPIO_SYSCONFIG 0x0010 | ||
105 | #define OMAP24XX_GPIO_SYSSTATUS 0x0014 | ||
106 | #define OMAP24XX_GPIO_IRQSTATUS1 0x0018 | 82 | #define OMAP24XX_GPIO_IRQSTATUS1 0x0018 |
107 | #define OMAP24XX_GPIO_IRQSTATUS2 0x0028 | 83 | #define OMAP24XX_GPIO_IRQSTATUS2 0x0028 |
108 | #define OMAP24XX_GPIO_IRQENABLE2 0x002c | 84 | #define OMAP24XX_GPIO_IRQENABLE2 0x002c |
@@ -126,7 +102,6 @@ | |||
126 | #define OMAP24XX_GPIO_SETDATAOUT 0x0094 | 102 | #define OMAP24XX_GPIO_SETDATAOUT 0x0094 |
127 | 103 | ||
128 | #define OMAP4_GPIO_REVISION 0x0000 | 104 | #define OMAP4_GPIO_REVISION 0x0000 |
129 | #define OMAP4_GPIO_SYSCONFIG 0x0010 | ||
130 | #define OMAP4_GPIO_EOI 0x0020 | 105 | #define OMAP4_GPIO_EOI 0x0020 |
131 | #define OMAP4_GPIO_IRQSTATUSRAW0 0x0024 | 106 | #define OMAP4_GPIO_IRQSTATUSRAW0 0x0024 |
132 | #define OMAP4_GPIO_IRQSTATUSRAW1 0x0028 | 107 | #define OMAP4_GPIO_IRQSTATUSRAW1 0x0028 |
@@ -138,7 +113,6 @@ | |||
138 | #define OMAP4_GPIO_IRQSTATUSCLR1 0x0040 | 113 | #define OMAP4_GPIO_IRQSTATUSCLR1 0x0040 |
139 | #define OMAP4_GPIO_IRQWAKEN0 0x0044 | 114 | #define OMAP4_GPIO_IRQWAKEN0 0x0044 |
140 | #define OMAP4_GPIO_IRQWAKEN1 0x0048 | 115 | #define OMAP4_GPIO_IRQWAKEN1 0x0048 |
141 | #define OMAP4_GPIO_SYSSTATUS 0x0114 | ||
142 | #define OMAP4_GPIO_IRQENABLE1 0x011c | 116 | #define OMAP4_GPIO_IRQENABLE1 0x011c |
143 | #define OMAP4_GPIO_WAKE_EN 0x0120 | 117 | #define OMAP4_GPIO_WAKE_EN 0x0120 |
144 | #define OMAP4_GPIO_IRQSTATUS2 0x0128 | 118 | #define OMAP4_GPIO_IRQSTATUS2 0x0128 |
@@ -159,26 +133,6 @@ | |||
159 | #define OMAP4_GPIO_SETWKUENA 0x0184 | 133 | #define OMAP4_GPIO_SETWKUENA 0x0184 |
160 | #define OMAP4_GPIO_CLEARDATAOUT 0x0190 | 134 | #define OMAP4_GPIO_CLEARDATAOUT 0x0190 |
161 | #define OMAP4_GPIO_SETDATAOUT 0x0194 | 135 | #define OMAP4_GPIO_SETDATAOUT 0x0194 |
162 | /* | ||
163 | * omap34xx specific GPIO registers | ||
164 | */ | ||
165 | |||
166 | #define OMAP34XX_GPIO1_BASE 0x48310000 | ||
167 | #define OMAP34XX_GPIO2_BASE 0x49050000 | ||
168 | #define OMAP34XX_GPIO3_BASE 0x49052000 | ||
169 | #define OMAP34XX_GPIO4_BASE 0x49054000 | ||
170 | #define OMAP34XX_GPIO5_BASE 0x49056000 | ||
171 | #define OMAP34XX_GPIO6_BASE 0x49058000 | ||
172 | |||
173 | /* | ||
174 | * OMAP44XX specific GPIO registers | ||
175 | */ | ||
176 | #define OMAP44XX_GPIO1_BASE 0x4a310000 | ||
177 | #define OMAP44XX_GPIO2_BASE 0x48055000 | ||
178 | #define OMAP44XX_GPIO3_BASE 0x48057000 | ||
179 | #define OMAP44XX_GPIO4_BASE 0x48059000 | ||
180 | #define OMAP44XX_GPIO5_BASE 0x4805B000 | ||
181 | #define OMAP44XX_GPIO6_BASE 0x4805D000 | ||
182 | 136 | ||
183 | struct gpio_bank { | 137 | struct gpio_bank { |
184 | unsigned long pbase; | 138 | unsigned long pbase; |
@@ -203,97 +157,12 @@ struct gpio_bank { | |||
203 | struct clk *dbck; | 157 | struct clk *dbck; |
204 | u32 mod_usage; | 158 | u32 mod_usage; |
205 | u32 dbck_enable_mask; | 159 | u32 dbck_enable_mask; |
160 | struct device *dev; | ||
161 | bool dbck_flag; | ||
206 | }; | 162 | }; |
207 | 163 | ||
208 | #ifdef CONFIG_ARCH_OMAP16XX | ||
209 | static struct gpio_bank gpio_bank_1610[5] = { | ||
210 | { OMAP1_MPUIO_VBASE, NULL, INT_MPUIO, IH_MPUIO_BASE, | ||
211 | METHOD_MPUIO }, | ||
212 | { OMAP1610_GPIO1_BASE, NULL, INT_GPIO_BANK1, IH_GPIO_BASE, | ||
213 | METHOD_GPIO_1610 }, | ||
214 | { OMAP1610_GPIO2_BASE, NULL, INT_1610_GPIO_BANK2, IH_GPIO_BASE + 16, | ||
215 | METHOD_GPIO_1610 }, | ||
216 | { OMAP1610_GPIO3_BASE, NULL, INT_1610_GPIO_BANK3, IH_GPIO_BASE + 32, | ||
217 | METHOD_GPIO_1610 }, | ||
218 | { OMAP1610_GPIO4_BASE, NULL, INT_1610_GPIO_BANK4, IH_GPIO_BASE + 48, | ||
219 | METHOD_GPIO_1610 }, | ||
220 | }; | ||
221 | #endif | ||
222 | |||
223 | #ifdef CONFIG_ARCH_OMAP15XX | ||
224 | static struct gpio_bank gpio_bank_1510[2] = { | ||
225 | { OMAP1_MPUIO_VBASE, NULL, INT_MPUIO, IH_MPUIO_BASE, | ||
226 | METHOD_MPUIO }, | ||
227 | { OMAP1510_GPIO_BASE, NULL, INT_GPIO_BANK1, IH_GPIO_BASE, | ||
228 | METHOD_GPIO_1510 } | ||
229 | }; | ||
230 | #endif | ||
231 | |||
232 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) | ||
233 | static struct gpio_bank gpio_bank_7xx[7] = { | ||
234 | { OMAP1_MPUIO_VBASE, NULL, INT_7XX_MPUIO, IH_MPUIO_BASE, | ||
235 | METHOD_MPUIO }, | ||
236 | { OMAP7XX_GPIO1_BASE, NULL, INT_7XX_GPIO_BANK1, IH_GPIO_BASE, | ||
237 | METHOD_GPIO_7XX }, | ||
238 | { OMAP7XX_GPIO2_BASE, NULL, INT_7XX_GPIO_BANK2, IH_GPIO_BASE + 32, | ||
239 | METHOD_GPIO_7XX }, | ||
240 | { OMAP7XX_GPIO3_BASE, NULL, INT_7XX_GPIO_BANK3, IH_GPIO_BASE + 64, | ||
241 | METHOD_GPIO_7XX }, | ||
242 | { OMAP7XX_GPIO4_BASE, NULL, INT_7XX_GPIO_BANK4, IH_GPIO_BASE + 96, | ||
243 | METHOD_GPIO_7XX }, | ||
244 | { OMAP7XX_GPIO5_BASE, NULL, INT_7XX_GPIO_BANK5, IH_GPIO_BASE + 128, | ||
245 | METHOD_GPIO_7XX }, | ||
246 | { OMAP7XX_GPIO6_BASE, NULL, INT_7XX_GPIO_BANK6, IH_GPIO_BASE + 160, | ||
247 | METHOD_GPIO_7XX }, | ||
248 | }; | ||
249 | #endif | ||
250 | |||
251 | #ifdef CONFIG_ARCH_OMAP2 | ||
252 | |||
253 | static struct gpio_bank gpio_bank_242x[4] = { | ||
254 | { OMAP242X_GPIO1_BASE, NULL, INT_24XX_GPIO_BANK1, IH_GPIO_BASE, | ||
255 | METHOD_GPIO_24XX }, | ||
256 | { OMAP242X_GPIO2_BASE, NULL, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32, | ||
257 | METHOD_GPIO_24XX }, | ||
258 | { OMAP242X_GPIO3_BASE, NULL, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64, | ||
259 | METHOD_GPIO_24XX }, | ||
260 | { OMAP242X_GPIO4_BASE, NULL, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96, | ||
261 | METHOD_GPIO_24XX }, | ||
262 | }; | ||
263 | |||
264 | static struct gpio_bank gpio_bank_243x[5] = { | ||
265 | { OMAP243X_GPIO1_BASE, NULL, INT_24XX_GPIO_BANK1, IH_GPIO_BASE, | ||
266 | METHOD_GPIO_24XX }, | ||
267 | { OMAP243X_GPIO2_BASE, NULL, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32, | ||
268 | METHOD_GPIO_24XX }, | ||
269 | { OMAP243X_GPIO3_BASE, NULL, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64, | ||
270 | METHOD_GPIO_24XX }, | ||
271 | { OMAP243X_GPIO4_BASE, NULL, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96, | ||
272 | METHOD_GPIO_24XX }, | ||
273 | { OMAP243X_GPIO5_BASE, NULL, INT_24XX_GPIO_BANK5, IH_GPIO_BASE + 128, | ||
274 | METHOD_GPIO_24XX }, | ||
275 | }; | ||
276 | |||
277 | #endif | ||
278 | |||
279 | #ifdef CONFIG_ARCH_OMAP3 | 164 | #ifdef CONFIG_ARCH_OMAP3 |
280 | static struct gpio_bank gpio_bank_34xx[6] = { | ||
281 | { OMAP34XX_GPIO1_BASE, NULL, INT_34XX_GPIO_BANK1, IH_GPIO_BASE, | ||
282 | METHOD_GPIO_24XX }, | ||
283 | { OMAP34XX_GPIO2_BASE, NULL, INT_34XX_GPIO_BANK2, IH_GPIO_BASE + 32, | ||
284 | METHOD_GPIO_24XX }, | ||
285 | { OMAP34XX_GPIO3_BASE, NULL, INT_34XX_GPIO_BANK3, IH_GPIO_BASE + 64, | ||
286 | METHOD_GPIO_24XX }, | ||
287 | { OMAP34XX_GPIO4_BASE, NULL, INT_34XX_GPIO_BANK4, IH_GPIO_BASE + 96, | ||
288 | METHOD_GPIO_24XX }, | ||
289 | { OMAP34XX_GPIO5_BASE, NULL, INT_34XX_GPIO_BANK5, IH_GPIO_BASE + 128, | ||
290 | METHOD_GPIO_24XX }, | ||
291 | { OMAP34XX_GPIO6_BASE, NULL, INT_34XX_GPIO_BANK6, IH_GPIO_BASE + 160, | ||
292 | METHOD_GPIO_24XX }, | ||
293 | }; | ||
294 | |||
295 | struct omap3_gpio_regs { | 165 | struct omap3_gpio_regs { |
296 | u32 sysconfig; | ||
297 | u32 irqenable1; | 166 | u32 irqenable1; |
298 | u32 irqenable2; | 167 | u32 irqenable2; |
299 | u32 wake_en; | 168 | u32 wake_en; |
@@ -309,25 +178,14 @@ struct omap3_gpio_regs { | |||
309 | static struct omap3_gpio_regs gpio_context[OMAP34XX_NR_GPIOS]; | 178 | static struct omap3_gpio_regs gpio_context[OMAP34XX_NR_GPIOS]; |
310 | #endif | 179 | #endif |
311 | 180 | ||
312 | #ifdef CONFIG_ARCH_OMAP4 | 181 | /* |
313 | static struct gpio_bank gpio_bank_44xx[6] = { | 182 | * TODO: Cleanup gpio_bank usage as it is having information |
314 | { OMAP44XX_GPIO1_BASE, NULL, OMAP44XX_IRQ_GPIO1, IH_GPIO_BASE, | 183 | * related to all instances of the device |
315 | METHOD_GPIO_44XX }, | 184 | */ |
316 | { OMAP44XX_GPIO2_BASE, NULL, OMAP44XX_IRQ_GPIO2, IH_GPIO_BASE + 32, | 185 | static struct gpio_bank *gpio_bank; |
317 | METHOD_GPIO_44XX }, | ||
318 | { OMAP44XX_GPIO3_BASE, NULL, OMAP44XX_IRQ_GPIO3, IH_GPIO_BASE + 64, | ||
319 | METHOD_GPIO_44XX }, | ||
320 | { OMAP44XX_GPIO4_BASE, NULL, OMAP44XX_IRQ_GPIO4, IH_GPIO_BASE + 96, | ||
321 | METHOD_GPIO_44XX }, | ||
322 | { OMAP44XX_GPIO5_BASE, NULL, OMAP44XX_IRQ_GPIO5, IH_GPIO_BASE + 128, | ||
323 | METHOD_GPIO_44XX }, | ||
324 | { OMAP44XX_GPIO6_BASE, NULL, OMAP44XX_IRQ_GPIO6, IH_GPIO_BASE + 160, | ||
325 | METHOD_GPIO_44XX }, | ||
326 | }; | ||
327 | 186 | ||
328 | #endif | 187 | static int bank_width; |
329 | 188 | ||
330 | static struct gpio_bank *gpio_bank; | ||
331 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ | 189 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ |
332 | int gpio_bank_count; | 190 | int gpio_bank_count; |
333 | 191 | ||
@@ -634,6 +492,9 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio, | |||
634 | u32 val; | 492 | u32 val; |
635 | u32 l; | 493 | u32 l; |
636 | 494 | ||
495 | if (!bank->dbck_flag) | ||
496 | return; | ||
497 | |||
637 | if (debounce < 32) | 498 | if (debounce < 32) |
638 | debounce = 0x01; | 499 | debounce = 0x01; |
639 | else if (debounce > 7936) | 500 | else if (debounce > 7936) |
@@ -643,7 +504,7 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio, | |||
643 | 504 | ||
644 | l = 1 << get_gpio_index(gpio); | 505 | l = 1 << get_gpio_index(gpio); |
645 | 506 | ||
646 | if (cpu_is_omap44xx()) | 507 | if (bank->method == METHOD_GPIO_44XX) |
647 | reg += OMAP4_GPIO_DEBOUNCINGTIME; | 508 | reg += OMAP4_GPIO_DEBOUNCINGTIME; |
648 | else | 509 | else |
649 | reg += OMAP24XX_GPIO_DEBOUNCE_VAL; | 510 | reg += OMAP24XX_GPIO_DEBOUNCE_VAL; |
@@ -651,7 +512,7 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio, | |||
651 | __raw_writel(debounce, reg); | 512 | __raw_writel(debounce, reg); |
652 | 513 | ||
653 | reg = bank->base; | 514 | reg = bank->base; |
654 | if (cpu_is_omap44xx()) | 515 | if (bank->method == METHOD_GPIO_44XX) |
655 | reg += OMAP4_GPIO_DEBOUNCENABLE; | 516 | reg += OMAP4_GPIO_DEBOUNCENABLE; |
656 | else | 517 | else |
657 | reg += OMAP24XX_GPIO_DEBOUNCE_EN; | 518 | reg += OMAP24XX_GPIO_DEBOUNCE_EN; |
@@ -660,12 +521,10 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio, | |||
660 | 521 | ||
661 | if (debounce) { | 522 | if (debounce) { |
662 | val |= l; | 523 | val |= l; |
663 | if (cpu_is_omap34xx() || cpu_is_omap44xx()) | 524 | clk_enable(bank->dbck); |
664 | clk_enable(bank->dbck); | ||
665 | } else { | 525 | } else { |
666 | val &= ~l; | 526 | val &= ~l; |
667 | if (cpu_is_omap34xx() || cpu_is_omap44xx()) | 527 | clk_disable(bank->dbck); |
668 | clk_disable(bank->dbck); | ||
669 | } | 528 | } |
670 | bank->dbck_enable_mask = val; | 529 | bank->dbck_enable_mask = val; |
671 | 530 | ||
@@ -1537,7 +1396,8 @@ static struct platform_device omap_mpuio_device = { | |||
1537 | 1396 | ||
1538 | static inline void mpuio_init(void) | 1397 | static inline void mpuio_init(void) |
1539 | { | 1398 | { |
1540 | platform_set_drvdata(&omap_mpuio_device, &gpio_bank_1610[0]); | 1399 | struct gpio_bank *bank = get_gpio_bank(OMAP_MPUIO(0)); |
1400 | platform_set_drvdata(&omap_mpuio_device, bank); | ||
1541 | 1401 | ||
1542 | if (platform_driver_register(&omap_mpuio_driver) == 0) | 1402 | if (platform_driver_register(&omap_mpuio_driver) == 0) |
1543 | (void) platform_device_register(&omap_mpuio_device); | 1403 | (void) platform_device_register(&omap_mpuio_device); |
@@ -1642,6 +1502,13 @@ static int gpio_debounce(struct gpio_chip *chip, unsigned offset, | |||
1642 | unsigned long flags; | 1502 | unsigned long flags; |
1643 | 1503 | ||
1644 | bank = container_of(chip, struct gpio_bank, chip); | 1504 | bank = container_of(chip, struct gpio_bank, chip); |
1505 | |||
1506 | if (!bank->dbck) { | ||
1507 | bank->dbck = clk_get(bank->dev, "dbclk"); | ||
1508 | if (IS_ERR(bank->dbck)) | ||
1509 | dev_err(bank->dev, "Could not get gpio dbck\n"); | ||
1510 | } | ||
1511 | |||
1645 | spin_lock_irqsave(&bank->lock, flags); | 1512 | spin_lock_irqsave(&bank->lock, flags); |
1646 | _set_gpio_debounce(bank, offset, debounce); | 1513 | _set_gpio_debounce(bank, offset, debounce); |
1647 | spin_unlock_irqrestore(&bank->lock, flags); | 1514 | spin_unlock_irqrestore(&bank->lock, flags); |
@@ -1670,24 +1537,6 @@ static int gpio_2irq(struct gpio_chip *chip, unsigned offset) | |||
1670 | 1537 | ||
1671 | /*---------------------------------------------------------------------*/ | 1538 | /*---------------------------------------------------------------------*/ |
1672 | 1539 | ||
1673 | static int initialized; | ||
1674 | #if defined(CONFIG_ARCH_OMAP1) || defined(CONFIG_ARCH_OMAP2) | ||
1675 | static struct clk * gpio_ick; | ||
1676 | #endif | ||
1677 | |||
1678 | #if defined(CONFIG_ARCH_OMAP2) | ||
1679 | static struct clk * gpio_fck; | ||
1680 | #endif | ||
1681 | |||
1682 | #if defined(CONFIG_ARCH_OMAP2430) | ||
1683 | static struct clk * gpio5_ick; | ||
1684 | static struct clk * gpio5_fck; | ||
1685 | #endif | ||
1686 | |||
1687 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | ||
1688 | static struct clk *gpio_iclks[OMAP34XX_NR_GPIOS]; | ||
1689 | #endif | ||
1690 | |||
1691 | static void __init omap_gpio_show_rev(struct gpio_bank *bank) | 1540 | static void __init omap_gpio_show_rev(struct gpio_bank *bank) |
1692 | { | 1541 | { |
1693 | u32 rev; | 1542 | u32 rev; |
@@ -1710,6 +1559,19 @@ static void __init omap_gpio_show_rev(struct gpio_bank *bank) | |||
1710 | */ | 1559 | */ |
1711 | static struct lock_class_key gpio_lock_class; | 1560 | static struct lock_class_key gpio_lock_class; |
1712 | 1561 | ||
1562 | static inline int init_gpio_info(struct platform_device *pdev) | ||
1563 | { | ||
1564 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ | ||
1565 | gpio_bank = kzalloc(gpio_bank_count * sizeof(struct gpio_bank), | ||
1566 | GFP_KERNEL); | ||
1567 | if (!gpio_bank) { | ||
1568 | dev_err(&pdev->dev, "Memory alloc failed for gpio_bank\n"); | ||
1569 | return -ENOMEM; | ||
1570 | } | ||
1571 | return 0; | ||
1572 | } | ||
1573 | |||
1574 | /* TODO: Cleanup cpu_is_* checks */ | ||
1713 | static void omap_gpio_mod_init(struct gpio_bank *bank, int id) | 1575 | static void omap_gpio_mod_init(struct gpio_bank *bank, int id) |
1714 | { | 1576 | { |
1715 | if (cpu_class_is_omap2()) { | 1577 | if (cpu_class_is_omap2()) { |
@@ -1773,16 +1635,9 @@ static void omap_gpio_mod_init(struct gpio_bank *bank, int id) | |||
1773 | 1635 | ||
1774 | static void __init omap_gpio_chip_init(struct gpio_bank *bank) | 1636 | static void __init omap_gpio_chip_init(struct gpio_bank *bank) |
1775 | { | 1637 | { |
1776 | int j, bank_width = 16; | 1638 | int j; |
1777 | static int gpio; | 1639 | static int gpio; |
1778 | 1640 | ||
1779 | if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) | ||
1780 | bank_width = 32; /* 7xx has 32-bit GPIOs */ | ||
1781 | |||
1782 | if ((bank->method == METHOD_GPIO_24XX) || | ||
1783 | (bank->method == METHOD_GPIO_44XX)) | ||
1784 | bank_width = 32; | ||
1785 | |||
1786 | bank->mod_usage = 0; | 1641 | bank->mod_usage = 0; |
1787 | /* | 1642 | /* |
1788 | * REVISIT eventually switch from OMAP-specific gpio structs | 1643 | * REVISIT eventually switch from OMAP-specific gpio structs |
@@ -1826,139 +1681,68 @@ static void __init omap_gpio_chip_init(struct gpio_bank *bank) | |||
1826 | set_irq_data(bank->irq, bank); | 1681 | set_irq_data(bank->irq, bank); |
1827 | } | 1682 | } |
1828 | 1683 | ||
1829 | static int __init _omap_gpio_init(void) | 1684 | static int __devinit omap_gpio_probe(struct platform_device *pdev) |
1830 | { | 1685 | { |
1831 | int i; | 1686 | static int gpio_init_done; |
1687 | struct omap_gpio_platform_data *pdata; | ||
1688 | struct resource *res; | ||
1689 | int id; | ||
1832 | struct gpio_bank *bank; | 1690 | struct gpio_bank *bank; |
1833 | int bank_size = SZ_8K; /* Module 4KB + L4 4KB except on omap1 */ | ||
1834 | char clk_name[11]; | ||
1835 | 1691 | ||
1836 | initialized = 1; | 1692 | if (!pdev->dev.platform_data) |
1693 | return -EINVAL; | ||
1837 | 1694 | ||
1838 | #if defined(CONFIG_ARCH_OMAP1) | 1695 | pdata = pdev->dev.platform_data; |
1839 | if (cpu_is_omap15xx()) { | ||
1840 | gpio_ick = clk_get(NULL, "arm_gpio_ck"); | ||
1841 | if (IS_ERR(gpio_ick)) | ||
1842 | printk("Could not get arm_gpio_ck\n"); | ||
1843 | else | ||
1844 | clk_enable(gpio_ick); | ||
1845 | } | ||
1846 | #endif | ||
1847 | #if defined(CONFIG_ARCH_OMAP2) | ||
1848 | if (cpu_class_is_omap2()) { | ||
1849 | gpio_ick = clk_get(NULL, "gpios_ick"); | ||
1850 | if (IS_ERR(gpio_ick)) | ||
1851 | printk("Could not get gpios_ick\n"); | ||
1852 | else | ||
1853 | clk_enable(gpio_ick); | ||
1854 | gpio_fck = clk_get(NULL, "gpios_fck"); | ||
1855 | if (IS_ERR(gpio_fck)) | ||
1856 | printk("Could not get gpios_fck\n"); | ||
1857 | else | ||
1858 | clk_enable(gpio_fck); | ||
1859 | 1696 | ||
1860 | /* | 1697 | if (!gpio_init_done) { |
1861 | * On 2430 & 3430 GPIO 5 uses CORE L4 ICLK | 1698 | int ret; |
1862 | */ | ||
1863 | #if defined(CONFIG_ARCH_OMAP2430) | ||
1864 | if (cpu_is_omap2430()) { | ||
1865 | gpio5_ick = clk_get(NULL, "gpio5_ick"); | ||
1866 | if (IS_ERR(gpio5_ick)) | ||
1867 | printk("Could not get gpio5_ick\n"); | ||
1868 | else | ||
1869 | clk_enable(gpio5_ick); | ||
1870 | gpio5_fck = clk_get(NULL, "gpio5_fck"); | ||
1871 | if (IS_ERR(gpio5_fck)) | ||
1872 | printk("Could not get gpio5_fck\n"); | ||
1873 | else | ||
1874 | clk_enable(gpio5_fck); | ||
1875 | } | ||
1876 | #endif | ||
1877 | } | ||
1878 | #endif | ||
1879 | 1699 | ||
1880 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | 1700 | ret = init_gpio_info(pdev); |
1881 | if (cpu_is_omap34xx() || cpu_is_omap44xx()) { | 1701 | if (ret) |
1882 | for (i = 0; i < OMAP34XX_NR_GPIOS; i++) { | 1702 | return ret; |
1883 | sprintf(clk_name, "gpio%d_ick", i + 1); | ||
1884 | gpio_iclks[i] = clk_get(NULL, clk_name); | ||
1885 | if (IS_ERR(gpio_iclks[i])) | ||
1886 | printk(KERN_ERR "Could not get %s\n", clk_name); | ||
1887 | else | ||
1888 | clk_enable(gpio_iclks[i]); | ||
1889 | } | ||
1890 | } | 1703 | } |
1891 | #endif | ||
1892 | 1704 | ||
1705 | id = pdev->id; | ||
1706 | bank = &gpio_bank[id]; | ||
1893 | 1707 | ||
1894 | #ifdef CONFIG_ARCH_OMAP15XX | 1708 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
1895 | if (cpu_is_omap15xx()) { | 1709 | if (unlikely(!res)) { |
1896 | gpio_bank_count = 2; | 1710 | dev_err(&pdev->dev, "GPIO Bank %i Invalid IRQ resource\n", id); |
1897 | gpio_bank = gpio_bank_1510; | 1711 | return -ENODEV; |
1898 | bank_size = SZ_2K; | ||
1899 | } | ||
1900 | #endif | ||
1901 | #if defined(CONFIG_ARCH_OMAP16XX) | ||
1902 | if (cpu_is_omap16xx()) { | ||
1903 | gpio_bank_count = 5; | ||
1904 | gpio_bank = gpio_bank_1610; | ||
1905 | bank_size = SZ_2K; | ||
1906 | } | ||
1907 | #endif | ||
1908 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) | ||
1909 | if (cpu_is_omap7xx()) { | ||
1910 | gpio_bank_count = 7; | ||
1911 | gpio_bank = gpio_bank_7xx; | ||
1912 | bank_size = SZ_2K; | ||
1913 | } | ||
1914 | #endif | ||
1915 | #ifdef CONFIG_ARCH_OMAP2 | ||
1916 | if (cpu_is_omap242x()) { | ||
1917 | gpio_bank_count = 4; | ||
1918 | gpio_bank = gpio_bank_242x; | ||
1919 | } | ||
1920 | if (cpu_is_omap243x()) { | ||
1921 | gpio_bank_count = 5; | ||
1922 | gpio_bank = gpio_bank_243x; | ||
1923 | } | ||
1924 | #endif | ||
1925 | #ifdef CONFIG_ARCH_OMAP3 | ||
1926 | if (cpu_is_omap34xx()) { | ||
1927 | gpio_bank_count = OMAP34XX_NR_GPIOS; | ||
1928 | gpio_bank = gpio_bank_34xx; | ||
1929 | } | ||
1930 | #endif | ||
1931 | #ifdef CONFIG_ARCH_OMAP4 | ||
1932 | if (cpu_is_omap44xx()) { | ||
1933 | gpio_bank_count = OMAP34XX_NR_GPIOS; | ||
1934 | gpio_bank = gpio_bank_44xx; | ||
1935 | } | 1712 | } |
1936 | #endif | ||
1937 | for (i = 0; i < gpio_bank_count; i++) { | ||
1938 | 1713 | ||
1939 | bank = &gpio_bank[i]; | 1714 | bank->irq = res->start; |
1940 | spin_lock_init(&bank->lock); | 1715 | bank->virtual_irq_start = pdata->virtual_irq_start; |
1716 | bank->method = pdata->bank_type; | ||
1717 | bank->dev = &pdev->dev; | ||
1718 | bank->dbck_flag = pdata->dbck_flag; | ||
1719 | bank_width = pdata->bank_width; | ||
1941 | 1720 | ||
1942 | /* Static mapping, never released */ | 1721 | spin_lock_init(&bank->lock); |
1943 | bank->base = ioremap(bank->pbase, bank_size); | ||
1944 | if (!bank->base) { | ||
1945 | printk(KERN_ERR "Could not ioremap gpio bank%i\n", i); | ||
1946 | continue; | ||
1947 | } | ||
1948 | 1722 | ||
1949 | omap_gpio_mod_init(bank, i); | 1723 | /* Static mapping, never released */ |
1950 | omap_gpio_chip_init(bank); | 1724 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
1725 | if (unlikely(!res)) { | ||
1726 | dev_err(&pdev->dev, "GPIO Bank %i Invalid mem resource\n", id); | ||
1727 | return -ENODEV; | ||
1728 | } | ||
1951 | 1729 | ||
1952 | if (cpu_is_omap34xx() || cpu_is_omap44xx()) { | 1730 | bank->base = ioremap(res->start, resource_size(res)); |
1953 | sprintf(clk_name, "gpio%d_dbck", i + 1); | 1731 | if (!bank->base) { |
1954 | bank->dbck = clk_get(NULL, clk_name); | 1732 | dev_err(&pdev->dev, "Could not ioremap gpio bank%i\n", id); |
1955 | if (IS_ERR(bank->dbck)) | 1733 | return -ENOMEM; |
1956 | printk(KERN_ERR "Could not get %s\n", clk_name); | ||
1957 | } | ||
1958 | } | 1734 | } |
1959 | 1735 | ||
1736 | pm_runtime_enable(bank->dev); | ||
1737 | pm_runtime_get_sync(bank->dev); | ||
1738 | |||
1739 | omap_gpio_mod_init(bank, id); | ||
1740 | omap_gpio_chip_init(bank); | ||
1960 | omap_gpio_show_rev(bank); | 1741 | omap_gpio_show_rev(bank); |
1961 | 1742 | ||
1743 | if (!gpio_init_done) | ||
1744 | gpio_init_done = 1; | ||
1745 | |||
1962 | return 0; | 1746 | return 0; |
1963 | } | 1747 | } |
1964 | 1748 | ||
@@ -2252,8 +2036,6 @@ void omap_gpio_save_context(void) | |||
2252 | /* saving banks from 2-6 only since GPIO1 is in WKUP */ | 2036 | /* saving banks from 2-6 only since GPIO1 is in WKUP */ |
2253 | for (i = 1; i < gpio_bank_count; i++) { | 2037 | for (i = 1; i < gpio_bank_count; i++) { |
2254 | struct gpio_bank *bank = &gpio_bank[i]; | 2038 | struct gpio_bank *bank = &gpio_bank[i]; |
2255 | gpio_context[i].sysconfig = | ||
2256 | __raw_readl(bank->base + OMAP24XX_GPIO_SYSCONFIG); | ||
2257 | gpio_context[i].irqenable1 = | 2039 | gpio_context[i].irqenable1 = |
2258 | __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1); | 2040 | __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1); |
2259 | gpio_context[i].irqenable2 = | 2041 | gpio_context[i].irqenable2 = |
@@ -2284,8 +2066,6 @@ void omap_gpio_restore_context(void) | |||
2284 | 2066 | ||
2285 | for (i = 1; i < gpio_bank_count; i++) { | 2067 | for (i = 1; i < gpio_bank_count; i++) { |
2286 | struct gpio_bank *bank = &gpio_bank[i]; | 2068 | struct gpio_bank *bank = &gpio_bank[i]; |
2287 | __raw_writel(gpio_context[i].sysconfig, | ||
2288 | bank->base + OMAP24XX_GPIO_SYSCONFIG); | ||
2289 | __raw_writel(gpio_context[i].irqenable1, | 2069 | __raw_writel(gpio_context[i].irqenable1, |
2290 | bank->base + OMAP24XX_GPIO_IRQENABLE1); | 2070 | bank->base + OMAP24XX_GPIO_IRQENABLE1); |
2291 | __raw_writel(gpio_context[i].irqenable2, | 2071 | __raw_writel(gpio_context[i].irqenable2, |
@@ -2310,25 +2090,28 @@ void omap_gpio_restore_context(void) | |||
2310 | } | 2090 | } |
2311 | #endif | 2091 | #endif |
2312 | 2092 | ||
2093 | static struct platform_driver omap_gpio_driver = { | ||
2094 | .probe = omap_gpio_probe, | ||
2095 | .driver = { | ||
2096 | .name = "omap_gpio", | ||
2097 | }, | ||
2098 | }; | ||
2099 | |||
2313 | /* | 2100 | /* |
2314 | * This may get called early from board specific init | 2101 | * gpio driver register needs to be done before |
2315 | * for boards that have interrupts routed via FPGA. | 2102 | * machine_init functions access gpio APIs. |
2103 | * Hence omap_gpio_drv_reg() is a postcore_initcall. | ||
2316 | */ | 2104 | */ |
2317 | int __init omap_gpio_init(void) | 2105 | static int __init omap_gpio_drv_reg(void) |
2318 | { | 2106 | { |
2319 | if (!initialized) | 2107 | return platform_driver_register(&omap_gpio_driver); |
2320 | return _omap_gpio_init(); | ||
2321 | else | ||
2322 | return 0; | ||
2323 | } | 2108 | } |
2109 | postcore_initcall(omap_gpio_drv_reg); | ||
2324 | 2110 | ||
2325 | static int __init omap_gpio_sysinit(void) | 2111 | static int __init omap_gpio_sysinit(void) |
2326 | { | 2112 | { |
2327 | int ret = 0; | 2113 | int ret = 0; |
2328 | 2114 | ||
2329 | if (!initialized) | ||
2330 | ret = _omap_gpio_init(); | ||
2331 | |||
2332 | mpuio_init(); | 2115 | mpuio_init(); |
2333 | 2116 | ||
2334 | #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS) | 2117 | #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS) |
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h index 24892a6707c4..5f118ff0d3eb 100644 --- a/arch/arm/plat-omap/include/plat/gpio.h +++ b/arch/arm/plat-omap/include/plat/gpio.h | |||
@@ -94,7 +94,6 @@ struct omap_gpio_platform_data { | |||
94 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ | 94 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ |
95 | extern int gpio_bank_count; | 95 | extern int gpio_bank_count; |
96 | 96 | ||
97 | extern int omap_gpio_init(void); /* Call from board init only */ | ||
98 | extern void omap2_gpio_prepare_for_idle(int power_state); | 97 | extern void omap2_gpio_prepare_for_idle(int power_state); |
99 | extern void omap2_gpio_resume_after_idle(void); | 98 | extern void omap2_gpio_resume_after_idle(void); |
100 | extern void omap_set_gpio_debounce(int gpio, int enable); | 99 | extern void omap_set_gpio_debounce(int gpio, int enable); |