diff options
author | Kevin Hilman <khilman@ti.com> | 2012-03-05 18:37:04 -0500 |
---|---|---|
committer | Kevin Hilman <khilman@ti.com> | 2012-03-05 18:37:04 -0500 |
commit | 015f1e4297ad32f83251f3f4cee2389ce5516e9e (patch) | |
tree | 1b16e317005dc3d09b0551a4db9182f7f4119f71 /arch/arm/mach-omap2 | |
parent | 1b35af54ee9cbbdd13fed53fd4acb0952ba522e1 (diff) | |
parent | 9cf793f9b8b1ba9414e2a7591b2e911885f85a27 (diff) |
Merge remote-tracking branch 'omap/hsmmc' into for_3.4/cleanup/pm-base
Diffstat (limited to 'arch/arm/mach-omap2')
39 files changed, 259 insertions, 130 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index fc9b238cbc19..bd76394ccaf8 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -11,9 +11,9 @@ hwmod-common = omap_hwmod.o \ | |||
11 | omap_hwmod_common_data.o | 11 | omap_hwmod_common_data.o |
12 | clock-common = clock.o clock_common_data.o \ | 12 | clock-common = clock.o clock_common_data.o \ |
13 | clkt_dpll.o clkt_clksel.o | 13 | clkt_dpll.o clkt_clksel.o |
14 | secure-common = omap-smc.o omap-secure.o | 14 | secure-common = omap-smc.o omap-secure.o |
15 | 15 | ||
16 | obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common) $(secure-common) | 16 | obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common) |
17 | obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common) | 17 | obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common) |
18 | obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common) | 18 | obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common) |
19 | 19 | ||
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 7370983f809f..c8bda62900d8 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
@@ -279,7 +279,7 @@ static void __init omap_2430sdp_init(void) | |||
279 | platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); | 279 | platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); |
280 | omap_serial_init(); | 280 | omap_serial_init(); |
281 | omap_sdrc_init(NULL, NULL); | 281 | omap_sdrc_init(NULL, NULL); |
282 | omap2_hsmmc_init(mmc); | 282 | omap_hsmmc_init(mmc); |
283 | omap2_usbfs_init(&sdp2430_usb_config); | 283 | omap2_usbfs_init(&sdp2430_usb_config); |
284 | 284 | ||
285 | omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); | 285 | omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); |
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 383717ba63b9..da75f239873e 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
@@ -232,11 +232,13 @@ static struct omap2_hsmmc_info mmc[] = { | |||
232 | */ | 232 | */ |
233 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 233 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
234 | .gpio_wp = 4, | 234 | .gpio_wp = 4, |
235 | .deferred = true, | ||
235 | }, | 236 | }, |
236 | { | 237 | { |
237 | .mmc = 2, | 238 | .mmc = 2, |
238 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 239 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
239 | .gpio_wp = 7, | 240 | .gpio_wp = 7, |
241 | .deferred = true, | ||
240 | }, | 242 | }, |
241 | {} /* Terminator */ | 243 | {} /* Terminator */ |
242 | }; | 244 | }; |
@@ -249,7 +251,7 @@ static int sdp3430_twl_gpio_setup(struct device *dev, | |||
249 | */ | 251 | */ |
250 | mmc[0].gpio_cd = gpio + 0; | 252 | mmc[0].gpio_cd = gpio + 0; |
251 | mmc[1].gpio_cd = gpio + 1; | 253 | mmc[1].gpio_cd = gpio + 1; |
252 | omap2_hsmmc_init(mmc); | 254 | omap_hsmmc_late_init(mmc); |
253 | 255 | ||
254 | /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */ | 256 | /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */ |
255 | gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl"); | 257 | gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl"); |
@@ -606,6 +608,7 @@ static void __init omap_3430sdp_init(void) | |||
606 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 608 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); |
607 | omap_board_config = sdp3430_config; | 609 | omap_board_config = sdp3430_config; |
608 | omap_board_config_size = ARRAY_SIZE(sdp3430_config); | 610 | omap_board_config_size = ARRAY_SIZE(sdp3430_config); |
611 | omap_hsmmc_init(mmc); | ||
609 | omap3430_i2c_init(); | 612 | omap3430_i2c_init(); |
610 | omap_display_init(&sdp3430_dss_data); | 613 | omap_display_init(&sdp3430_dss_data); |
611 | if (omap_rev() > OMAP3430_REV_ES1_0) | 614 | if (omap_rev() > OMAP3430_REV_ES1_0) |
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 21fc87648660..09ae257e86fd 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c | |||
@@ -491,9 +491,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
491 | { | 491 | { |
492 | struct omap2_hsmmc_info *c; | 492 | struct omap2_hsmmc_info *c; |
493 | 493 | ||
494 | omap2_hsmmc_init(controllers); | 494 | omap_hsmmc_init(controllers); |
495 | for (c = controllers; c->mmc; c++) | 495 | for (c = controllers; c->mmc; c++) |
496 | omap4_twl6030_hsmmc_set_late_init(c->dev); | 496 | omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev); |
497 | 497 | ||
498 | return 0; | 498 | return 0; |
499 | } | 499 | } |
@@ -814,7 +814,7 @@ static struct omap_dss_board_info sdp4430_dss_data = { | |||
814 | .default_device = &sdp4430_lcd_device, | 814 | .default_device = &sdp4430_lcd_device, |
815 | }; | 815 | }; |
816 | 816 | ||
817 | static void omap_4430sdp_display_init(void) | 817 | static void __init omap_4430sdp_display_init(void) |
818 | { | 818 | { |
819 | int r; | 819 | int r; |
820 | 820 | ||
@@ -851,7 +851,7 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
851 | #define board_mux NULL | 851 | #define board_mux NULL |
852 | #endif | 852 | #endif |
853 | 853 | ||
854 | static void omap4_sdp4430_wifi_mux_init(void) | 854 | static void __init omap4_sdp4430_wifi_mux_init(void) |
855 | { | 855 | { |
856 | omap_mux_init_gpio(GPIO_WIFI_IRQ, OMAP_PIN_INPUT | | 856 | omap_mux_init_gpio(GPIO_WIFI_IRQ, OMAP_PIN_INPUT | |
857 | OMAP_PIN_OFF_WAKEUPENABLE); | 857 | OMAP_PIN_OFF_WAKEUPENABLE); |
@@ -878,12 +878,17 @@ static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = { | |||
878 | .board_tcxo_clock = WL12XX_TCXOCLOCK_26, | 878 | .board_tcxo_clock = WL12XX_TCXOCLOCK_26, |
879 | }; | 879 | }; |
880 | 880 | ||
881 | static void omap4_sdp4430_wifi_init(void) | 881 | static void __init omap4_sdp4430_wifi_init(void) |
882 | { | 882 | { |
883 | int ret; | ||
884 | |||
883 | omap4_sdp4430_wifi_mux_init(); | 885 | omap4_sdp4430_wifi_mux_init(); |
884 | if (wl12xx_set_platform_data(&omap4_sdp4430_wlan_data)) | 886 | ret = wl12xx_set_platform_data(&omap4_sdp4430_wlan_data); |
885 | pr_err("Error setting wl12xx data\n"); | 887 | if (ret) |
886 | platform_device_register(&omap_vwlan_device); | 888 | pr_err("Error setting wl12xx data: %d\n", ret); |
889 | ret = platform_device_register(&omap_vwlan_device); | ||
890 | if (ret) | ||
891 | pr_err("Error registering wl12xx device: %d\n", ret); | ||
887 | } | 892 | } |
888 | 893 | ||
889 | static void __init omap_4430sdp_init(void) | 894 | static void __init omap_4430sdp_init(void) |
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 4b1cfe32e6ba..71138a1271d8 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c | |||
@@ -504,7 +504,7 @@ static void __init am3517_evm_init(void) | |||
504 | am3517_evm_musb_init(); | 504 | am3517_evm_musb_init(); |
505 | 505 | ||
506 | /* MMC init function */ | 506 | /* MMC init function */ |
507 | omap2_hsmmc_init(mmc); | 507 | omap_hsmmc_init(mmc); |
508 | } | 508 | } |
509 | 509 | ||
510 | MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") | 510 | MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index d839c0506d8e..41b0a2fe0b04 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
@@ -412,7 +412,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
412 | .caps = MMC_CAP_4_BIT_DATA, | 412 | .caps = MMC_CAP_4_BIT_DATA, |
413 | .gpio_cd = -EINVAL, | 413 | .gpio_cd = -EINVAL, |
414 | .gpio_wp = -EINVAL, | 414 | .gpio_wp = -EINVAL, |
415 | 415 | .deferred = true, | |
416 | }, | 416 | }, |
417 | { | 417 | { |
418 | .mmc = 2, | 418 | .mmc = 2, |
@@ -436,7 +436,7 @@ static struct usbhs_omap_board_data usbhs_bdata __initdata = { | |||
436 | .reset_gpio_port[2] = -EINVAL | 436 | .reset_gpio_port[2] = -EINVAL |
437 | }; | 437 | }; |
438 | 438 | ||
439 | static void cm_t35_init_usbh(void) | 439 | static void __init cm_t35_init_usbh(void) |
440 | { | 440 | { |
441 | int err; | 441 | int err; |
442 | 442 | ||
@@ -470,7 +470,7 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio, | |||
470 | 470 | ||
471 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 471 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
472 | mmc[0].gpio_cd = gpio + 0; | 472 | mmc[0].gpio_cd = gpio + 0; |
473 | omap2_hsmmc_init(mmc); | 473 | omap_hsmmc_late_init(mmc); |
474 | 474 | ||
475 | return 0; | 475 | return 0; |
476 | } | 476 | } |
@@ -638,6 +638,7 @@ static void __init cm_t3x_common_init(void) | |||
638 | omap_serial_init(); | 638 | omap_serial_init(); |
639 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, | 639 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, |
640 | mt46h32m32lf6_sdrc_params); | 640 | mt46h32m32lf6_sdrc_params); |
641 | omap_hsmmc_init(mmc); | ||
641 | cm_t35_init_i2c(); | 642 | cm_t35_init_i2c(); |
642 | omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); | 643 | omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); |
643 | cm_t35_init_ethernet(); | 644 | cm_t35_init_ethernet(); |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index e873063f4fda..11cd2a806093 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
100 | .mmc = 1, | 100 | .mmc = 1, |
101 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 101 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
102 | .gpio_wp = 29, | 102 | .gpio_wp = 29, |
103 | .deferred = true, | ||
103 | }, | 104 | }, |
104 | {} /* Terminator */ | 105 | {} /* Terminator */ |
105 | }; | 106 | }; |
@@ -228,7 +229,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev, | |||
228 | 229 | ||
229 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 230 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
230 | mmc[0].gpio_cd = gpio + 0; | 231 | mmc[0].gpio_cd = gpio + 0; |
231 | omap2_hsmmc_init(mmc); | 232 | omap_hsmmc_late_init(mmc); |
232 | 233 | ||
233 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | 234 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ |
234 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 235 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; |
@@ -636,6 +637,7 @@ static void __init devkit8000_init(void) | |||
636 | 637 | ||
637 | omap_dm9000_init(); | 638 | omap_dm9000_init(); |
638 | 639 | ||
640 | omap_hsmmc_init(mmc); | ||
639 | devkit8000_i2c_init(); | 641 | devkit8000_i2c_init(); |
640 | platform_add_devices(devkit8000_devices, | 642 | platform_add_devices(devkit8000_devices, |
641 | ARRAY_SIZE(devkit8000_devices)); | 643 | ARRAY_SIZE(devkit8000_devices)); |
diff --git a/arch/arm/mach-omap2/board-flash.c b/arch/arm/mach-omap2/board-flash.c index 30a6f527510c..0349fd2b68d8 100644 --- a/arch/arm/mach-omap2/board-flash.c +++ b/arch/arm/mach-omap2/board-flash.c | |||
@@ -189,7 +189,7 @@ unmap: | |||
189 | * | 189 | * |
190 | * @return - void. | 190 | * @return - void. |
191 | */ | 191 | */ |
192 | void board_flash_init(struct flash_partitions partition_info[], | 192 | void __init board_flash_init(struct flash_partitions partition_info[], |
193 | char chip_sel_board[][GPMC_CS_NUM], int nand_type) | 193 | char chip_sel_board[][GPMC_CS_NUM], int nand_type) |
194 | { | 194 | { |
195 | u8 cs = 0; | 195 | u8 cs = 0; |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index d58756060483..ad497620539b 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/i2c/twl.h> | 17 | #include <linux/i2c/twl.h> |
18 | 18 | ||
19 | #include <mach/hardware.h> | 19 | #include <mach/hardware.h> |
20 | #include <asm/hardware/gic.h> | ||
20 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
21 | 22 | ||
22 | #include <plat/board.h> | 23 | #include <plat/board.h> |
@@ -102,6 +103,7 @@ DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") | |||
102 | .map_io = omap242x_map_io, | 103 | .map_io = omap242x_map_io, |
103 | .init_early = omap2420_init_early, | 104 | .init_early = omap2420_init_early, |
104 | .init_irq = omap2_init_irq, | 105 | .init_irq = omap2_init_irq, |
106 | .handle_irq = omap2_intc_handle_irq, | ||
105 | .init_machine = omap_generic_init, | 107 | .init_machine = omap_generic_init, |
106 | .timer = &omap2_timer, | 108 | .timer = &omap2_timer, |
107 | .dt_compat = omap242x_boards_compat, | 109 | .dt_compat = omap242x_boards_compat, |
@@ -141,6 +143,7 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | |||
141 | .map_io = omap3_map_io, | 143 | .map_io = omap3_map_io, |
142 | .init_early = omap3430_init_early, | 144 | .init_early = omap3430_init_early, |
143 | .init_irq = omap3_init_irq, | 145 | .init_irq = omap3_init_irq, |
146 | .handle_irq = omap3_intc_handle_irq, | ||
144 | .init_machine = omap3_init, | 147 | .init_machine = omap3_init, |
145 | .timer = &omap3_timer, | 148 | .timer = &omap3_timer, |
146 | .dt_compat = omap3_boards_compat, | 149 | .dt_compat = omap3_boards_compat, |
@@ -160,6 +163,7 @@ DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") | |||
160 | .map_io = omap4_map_io, | 163 | .map_io = omap4_map_io, |
161 | .init_early = omap4430_init_early, | 164 | .init_early = omap4430_init_early, |
162 | .init_irq = gic_init_irq, | 165 | .init_irq = gic_init_irq, |
166 | .handle_irq = gic_handle_irq, | ||
163 | .init_machine = omap4_init, | 167 | .init_machine = omap4_init, |
164 | .timer = &omap4_timer, | 168 | .timer = &omap4_timer, |
165 | .dt_compat = omap4_boards_compat, | 169 | .dt_compat = omap4_boards_compat, |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index a59ace0ed560..e558800adfdf 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
@@ -295,6 +295,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
295 | .caps = MMC_CAP_4_BIT_DATA, | 295 | .caps = MMC_CAP_4_BIT_DATA, |
296 | .gpio_cd = -EINVAL, | 296 | .gpio_cd = -EINVAL, |
297 | .gpio_wp = -EINVAL, | 297 | .gpio_wp = -EINVAL, |
298 | .deferred = true, | ||
298 | }, | 299 | }, |
299 | #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE) | 300 | #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE) |
300 | { | 301 | { |
@@ -402,7 +403,7 @@ static int igep_twl_gpio_setup(struct device *dev, | |||
402 | 403 | ||
403 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 404 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
404 | mmc[0].gpio_cd = gpio + 0; | 405 | mmc[0].gpio_cd = gpio + 0; |
405 | omap2_hsmmc_init(mmc); | 406 | omap_hsmmc_late_init(mmc); |
406 | 407 | ||
407 | /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ | 408 | /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ |
408 | #if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE) | 409 | #if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE) |
@@ -639,6 +640,9 @@ static void __init igep_init(void) | |||
639 | 640 | ||
640 | /* Get IGEP2 hardware revision */ | 641 | /* Get IGEP2 hardware revision */ |
641 | igep2_get_revision(); | 642 | igep2_get_revision(); |
643 | |||
644 | omap_hsmmc_init(mmc); | ||
645 | |||
642 | /* Register I2C busses and drivers */ | 646 | /* Register I2C busses and drivers */ |
643 | igep_i2c_init(); | 647 | igep_i2c_init(); |
644 | platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices)); | 648 | platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices)); |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index 2d2a61f7dcbf..b5bc9b2e2862 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
@@ -424,7 +424,7 @@ static void __init omap_ldp_init(void) | |||
424 | board_nand_init(ldp_nand_partitions, | 424 | board_nand_init(ldp_nand_partitions, |
425 | ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); | 425 | ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); |
426 | 426 | ||
427 | omap2_hsmmc_init(mmc); | 427 | omap_hsmmc_init(mmc); |
428 | ldp_display_init(); | 428 | ldp_display_init(); |
429 | } | 429 | } |
430 | 430 | ||
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index a9e983e01199..7ed4a7ba8bc5 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
@@ -370,7 +370,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask) | |||
370 | else | 370 | else |
371 | *openp = 0; | 371 | *openp = 0; |
372 | 372 | ||
373 | #ifdef CONFIG_MMC_OMAP | ||
373 | omap_mmc_notify_cover_event(mmc_device, index, *openp); | 374 | omap_mmc_notify_cover_event(mmc_device, index, *openp); |
375 | #else | ||
376 | pr_warn("MMC: notify cover event not available\n"); | ||
377 | #endif | ||
374 | } | 378 | } |
375 | 379 | ||
376 | static int n8x0_mmc_late_init(struct device *dev) | 380 | static int n8x0_mmc_late_init(struct device *dev) |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 7ffcd2839e7b..7be8d659d91d 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -253,6 +253,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
253 | .mmc = 1, | 253 | .mmc = 1, |
254 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 254 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
255 | .gpio_wp = -EINVAL, | 255 | .gpio_wp = -EINVAL, |
256 | .deferred = true, | ||
256 | }, | 257 | }, |
257 | {} /* Terminator */ | 258 | {} /* Terminator */ |
258 | }; | 259 | }; |
@@ -272,12 +273,10 @@ static int beagle_twl_gpio_setup(struct device *dev, | |||
272 | { | 273 | { |
273 | int r; | 274 | int r; |
274 | 275 | ||
275 | if (beagle_config.mmc1_gpio_wp != -EINVAL) | ||
276 | omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); | ||
277 | mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; | 276 | mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; |
278 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 277 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
279 | mmc[0].gpio_cd = gpio + 0; | 278 | mmc[0].gpio_cd = gpio + 0; |
280 | omap2_hsmmc_init(mmc); | 279 | omap_hsmmc_late_init(mmc); |
281 | 280 | ||
282 | /* | 281 | /* |
283 | * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active | 282 | * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active |
@@ -521,6 +520,11 @@ static void __init omap3_beagle_init(void) | |||
521 | { | 520 | { |
522 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 521 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); |
523 | omap3_beagle_init_rev(); | 522 | omap3_beagle_init_rev(); |
523 | |||
524 | if (beagle_config.mmc1_gpio_wp != -EINVAL) | ||
525 | omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); | ||
526 | omap_hsmmc_init(mmc); | ||
527 | |||
524 | omap3_beagle_i2c_init(); | 528 | omap3_beagle_i2c_init(); |
525 | 529 | ||
526 | gpio_buttons[0].gpio = beagle_config.usr_button_gpio; | 530 | gpio_buttons[0].gpio = beagle_config.usr_button_gpio; |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 003fe34c9343..6b77ad95981d 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
@@ -317,6 +317,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
317 | .caps = MMC_CAP_4_BIT_DATA, | 317 | .caps = MMC_CAP_4_BIT_DATA, |
318 | .gpio_cd = -EINVAL, | 318 | .gpio_cd = -EINVAL, |
319 | .gpio_wp = 63, | 319 | .gpio_wp = 63, |
320 | .deferred = true, | ||
320 | }, | 321 | }, |
321 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 322 | #ifdef CONFIG_WL12XX_PLATFORM_DATA |
322 | { | 323 | { |
@@ -361,9 +362,8 @@ static int omap3evm_twl_gpio_setup(struct device *dev, | |||
361 | int r, lcd_bl_en; | 362 | int r, lcd_bl_en; |
362 | 363 | ||
363 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 364 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
364 | omap_mux_init_gpio(63, OMAP_PIN_INPUT); | ||
365 | mmc[0].gpio_cd = gpio + 0; | 365 | mmc[0].gpio_cd = gpio + 0; |
366 | omap2_hsmmc_init(mmc); | 366 | omap_hsmmc_late_init(mmc); |
367 | 367 | ||
368 | /* | 368 | /* |
369 | * Most GPIOs are for USB OTG. Some are mostly sent to | 369 | * Most GPIOs are for USB OTG. Some are mostly sent to |
@@ -617,6 +617,21 @@ static struct gpio omap3_evm_ehci_gpios[] __initdata = { | |||
617 | { OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" }, | 617 | { OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" }, |
618 | }; | 618 | }; |
619 | 619 | ||
620 | static void __init omap3_evm_wl12xx_init(void) | ||
621 | { | ||
622 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | ||
623 | int ret; | ||
624 | |||
625 | /* WL12xx WLAN Init */ | ||
626 | ret = wl12xx_set_platform_data(&omap3evm_wlan_data); | ||
627 | if (ret) | ||
628 | pr_err("error setting wl12xx data: %d\n", ret); | ||
629 | ret = platform_device_register(&omap3evm_wlan_regulator); | ||
630 | if (ret) | ||
631 | pr_err("error registering wl12xx device: %d\n", ret); | ||
632 | #endif | ||
633 | } | ||
634 | |||
620 | static void __init omap3_evm_init(void) | 635 | static void __init omap3_evm_init(void) |
621 | { | 636 | { |
622 | omap3_evm_get_revision(); | 637 | omap3_evm_get_revision(); |
@@ -629,6 +644,9 @@ static void __init omap3_evm_init(void) | |||
629 | omap_board_config = omap3_evm_config; | 644 | omap_board_config = omap3_evm_config; |
630 | omap_board_config_size = ARRAY_SIZE(omap3_evm_config); | 645 | omap_board_config_size = ARRAY_SIZE(omap3_evm_config); |
631 | 646 | ||
647 | omap_mux_init_gpio(63, OMAP_PIN_INPUT); | ||
648 | omap_hsmmc_init(mmc); | ||
649 | |||
632 | omap3_evm_i2c_init(); | 650 | omap3_evm_i2c_init(); |
633 | 651 | ||
634 | omap_display_init(&omap3_evm_dss_data); | 652 | omap_display_init(&omap3_evm_dss_data); |
@@ -665,13 +683,7 @@ static void __init omap3_evm_init(void) | |||
665 | omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL); | 683 | omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL); |
666 | omap3evm_init_smsc911x(); | 684 | omap3evm_init_smsc911x(); |
667 | omap3_evm_display_init(); | 685 | omap3_evm_display_init(); |
668 | 686 | omap3_evm_wl12xx_init(); | |
669 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | ||
670 | /* WL12xx WLAN Init */ | ||
671 | if (wl12xx_set_platform_data(&omap3evm_wlan_data)) | ||
672 | pr_err("error setting wl12xx data\n"); | ||
673 | platform_device_register(&omap3evm_wlan_regulator); | ||
674 | #endif | ||
675 | } | 687 | } |
676 | 688 | ||
677 | MACHINE_START(OMAP3EVM, "OMAP3 EVM") | 689 | MACHINE_START(OMAP3EVM, "OMAP3 EVM") |
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index 4198dd017d8f..2304ba340e99 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c | |||
@@ -128,7 +128,7 @@ static void __init board_mmc_init(void) | |||
128 | return; | 128 | return; |
129 | } | 129 | } |
130 | 130 | ||
131 | omap2_hsmmc_init(board_mmc_info); | 131 | omap_hsmmc_init(board_mmc_info); |
132 | } | 132 | } |
133 | 133 | ||
134 | static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = { | 134 | static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = { |
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 1644b73017fc..ace466bcd76d 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c | |||
@@ -273,6 +273,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = { | |||
273 | .gpio_cd = -EINVAL, | 273 | .gpio_cd = -EINVAL, |
274 | .gpio_wp = 126, | 274 | .gpio_wp = 126, |
275 | .ext_clock = 0, | 275 | .ext_clock = 0, |
276 | .deferred = true, | ||
276 | }, | 277 | }, |
277 | { | 278 | { |
278 | .mmc = 2, | 279 | .mmc = 2, |
@@ -281,6 +282,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = { | |||
281 | .gpio_wp = 127, | 282 | .gpio_wp = 127, |
282 | .ext_clock = 1, | 283 | .ext_clock = 1, |
283 | .transceiver = true, | 284 | .transceiver = true, |
285 | .deferred = true, | ||
284 | }, | 286 | }, |
285 | { | 287 | { |
286 | .mmc = 3, | 288 | .mmc = 3, |
@@ -300,7 +302,7 @@ static int omap3pandora_twl_gpio_setup(struct device *dev, | |||
300 | /* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */ | 302 | /* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */ |
301 | omap3pandora_mmc[0].gpio_cd = gpio + 0; | 303 | omap3pandora_mmc[0].gpio_cd = gpio + 0; |
302 | omap3pandora_mmc[1].gpio_cd = gpio + 1; | 304 | omap3pandora_mmc[1].gpio_cd = gpio + 1; |
303 | omap2_hsmmc_init(omap3pandora_mmc); | 305 | omap_hsmmc_late_init(omap3pandora_mmc); |
304 | 306 | ||
305 | /* gpio + 13 drives 32kHz buffer for wifi module */ | 307 | /* gpio + 13 drives 32kHz buffer for wifi module */ |
306 | gpio_32khz = gpio + 13; | 308 | gpio_32khz = gpio + 13; |
@@ -580,6 +582,7 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
580 | static void __init omap3pandora_init(void) | 582 | static void __init omap3pandora_init(void) |
581 | { | 583 | { |
582 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 584 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); |
585 | omap_hsmmc_init(omap3pandora_mmc); | ||
583 | omap3pandora_i2c_init(); | 586 | omap3pandora_i2c_init(); |
584 | pandora_wl1251_init(); | 587 | pandora_wl1251_init(); |
585 | platform_add_devices(omap3pandora_devices, | 588 | platform_add_devices(omap3pandora_devices, |
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index cb089a46f62f..641004380795 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
@@ -209,10 +209,11 @@ static struct regulator_init_data omap3stalker_vsim = { | |||
209 | 209 | ||
210 | static struct omap2_hsmmc_info mmc[] = { | 210 | static struct omap2_hsmmc_info mmc[] = { |
211 | { | 211 | { |
212 | .mmc = 1, | 212 | .mmc = 1, |
213 | .caps = MMC_CAP_4_BIT_DATA, | 213 | .caps = MMC_CAP_4_BIT_DATA, |
214 | .gpio_cd = -EINVAL, | 214 | .gpio_cd = -EINVAL, |
215 | .gpio_wp = 23, | 215 | .gpio_wp = 23, |
216 | .deferred = true, | ||
216 | }, | 217 | }, |
217 | {} /* Terminator */ | 218 | {} /* Terminator */ |
218 | }; | 219 | }; |
@@ -282,9 +283,8 @@ omap3stalker_twl_gpio_setup(struct device *dev, | |||
282 | unsigned gpio, unsigned ngpio) | 283 | unsigned gpio, unsigned ngpio) |
283 | { | 284 | { |
284 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 285 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
285 | omap_mux_init_gpio(23, OMAP_PIN_INPUT); | ||
286 | mmc[0].gpio_cd = gpio + 0; | 286 | mmc[0].gpio_cd = gpio + 0; |
287 | omap2_hsmmc_init(mmc); | 287 | omap_hsmmc_late_init(mmc); |
288 | 288 | ||
289 | /* | 289 | /* |
290 | * Most GPIOs are for USB OTG. Some are mostly sent to | 290 | * Most GPIOs are for USB OTG. Some are mostly sent to |
@@ -425,6 +425,9 @@ static void __init omap3_stalker_init(void) | |||
425 | omap_board_config = omap3_stalker_config; | 425 | omap_board_config = omap3_stalker_config; |
426 | omap_board_config_size = ARRAY_SIZE(omap3_stalker_config); | 426 | omap_board_config_size = ARRAY_SIZE(omap3_stalker_config); |
427 | 427 | ||
428 | omap_mux_init_gpio(23, OMAP_PIN_INPUT); | ||
429 | omap_hsmmc_init(mmc); | ||
430 | |||
428 | omap3_stalker_i2c_init(); | 431 | omap3_stalker_i2c_init(); |
429 | 432 | ||
430 | platform_add_devices(omap3_stalker_devices, | 433 | platform_add_devices(omap3_stalker_devices, |
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index a0b851aafcca..8842e04aef01 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c | |||
@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
100 | .mmc = 1, | 100 | .mmc = 1, |
101 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 101 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
102 | .gpio_wp = 29, | 102 | .gpio_wp = 29, |
103 | .deferred = true, | ||
103 | }, | 104 | }, |
104 | {} /* Terminator */ | 105 | {} /* Terminator */ |
105 | }; | 106 | }; |
@@ -117,15 +118,9 @@ static struct gpio_led gpio_leds[]; | |||
117 | static int touchbook_twl_gpio_setup(struct device *dev, | 118 | static int touchbook_twl_gpio_setup(struct device *dev, |
118 | unsigned gpio, unsigned ngpio) | 119 | unsigned gpio, unsigned ngpio) |
119 | { | 120 | { |
120 | if (system_rev >= 0x20 && system_rev <= 0x34301000) { | ||
121 | omap_mux_init_gpio(23, OMAP_PIN_INPUT); | ||
122 | mmc[0].gpio_wp = 23; | ||
123 | } else { | ||
124 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); | ||
125 | } | ||
126 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 121 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
127 | mmc[0].gpio_cd = gpio + 0; | 122 | mmc[0].gpio_cd = gpio + 0; |
128 | omap2_hsmmc_init(mmc); | 123 | omap_hsmmc_late_init(mmc); |
129 | 124 | ||
130 | /* REVISIT: need ehci-omap hooks for external VBUS | 125 | /* REVISIT: need ehci-omap hooks for external VBUS |
131 | * power switch and overcurrent detect | 126 | * power switch and overcurrent detect |
@@ -351,6 +346,14 @@ static void __init omap3_touchbook_init(void) | |||
351 | 346 | ||
352 | pm_power_off = omap3_touchbook_poweroff; | 347 | pm_power_off = omap3_touchbook_poweroff; |
353 | 348 | ||
349 | if (system_rev >= 0x20 && system_rev <= 0x34301000) { | ||
350 | omap_mux_init_gpio(23, OMAP_PIN_INPUT); | ||
351 | mmc[0].gpio_wp = 23; | ||
352 | } else { | ||
353 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); | ||
354 | } | ||
355 | omap_hsmmc_init(mmc); | ||
356 | |||
354 | omap3_touchbook_i2c_init(); | 357 | omap3_touchbook_i2c_init(); |
355 | platform_add_devices(omap3_touchbook_devices, | 358 | platform_add_devices(omap3_touchbook_devices, |
356 | ARRAY_SIZE(omap3_touchbook_devices)); | 359 | ARRAY_SIZE(omap3_touchbook_devices)); |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index b7779c206a90..7ca7a5c474d4 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
@@ -245,9 +245,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
245 | { | 245 | { |
246 | struct omap2_hsmmc_info *c; | 246 | struct omap2_hsmmc_info *c; |
247 | 247 | ||
248 | omap2_hsmmc_init(controllers); | 248 | omap_hsmmc_init(controllers); |
249 | for (c = controllers; c->mmc; c++) | 249 | for (c = controllers; c->mmc; c++) |
250 | omap4_twl6030_hsmmc_set_late_init(c->dev); | 250 | omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev); |
251 | 251 | ||
252 | return 0; | 252 | return 0; |
253 | } | 253 | } |
@@ -461,7 +461,7 @@ static struct omap_dss_board_info omap4_panda_dss_data = { | |||
461 | .default_device = &omap4_panda_dvi_device, | 461 | .default_device = &omap4_panda_dvi_device, |
462 | }; | 462 | }; |
463 | 463 | ||
464 | void omap4_panda_display_init(void) | 464 | void __init omap4_panda_display_init(void) |
465 | { | 465 | { |
466 | int r; | 466 | int r; |
467 | 467 | ||
@@ -488,13 +488,15 @@ void omap4_panda_display_init(void) | |||
488 | static void __init omap4_panda_init(void) | 488 | static void __init omap4_panda_init(void) |
489 | { | 489 | { |
490 | int package = OMAP_PACKAGE_CBS; | 490 | int package = OMAP_PACKAGE_CBS; |
491 | int ret; | ||
491 | 492 | ||
492 | if (omap_rev() == OMAP4430_REV_ES1_0) | 493 | if (omap_rev() == OMAP4430_REV_ES1_0) |
493 | package = OMAP_PACKAGE_CBL; | 494 | package = OMAP_PACKAGE_CBL; |
494 | omap4_mux_init(board_mux, NULL, package); | 495 | omap4_mux_init(board_mux, NULL, package); |
495 | 496 | ||
496 | if (wl12xx_set_platform_data(&omap_panda_wlan_data)) | 497 | ret = wl12xx_set_platform_data(&omap_panda_wlan_data); |
497 | pr_err("error setting wl12xx data\n"); | 498 | if (ret) |
499 | pr_err("error setting wl12xx data: %d\n", ret); | ||
498 | 500 | ||
499 | omap4_panda_i2c_init(); | 501 | omap4_panda_i2c_init(); |
500 | platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); | 502 | platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 52c0cef77165..668533e2a379 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
@@ -407,8 +407,6 @@ static inline void __init overo_init_keys(void) { return; } | |||
407 | static int overo_twl_gpio_setup(struct device *dev, | 407 | static int overo_twl_gpio_setup(struct device *dev, |
408 | unsigned gpio, unsigned ngpio) | 408 | unsigned gpio, unsigned ngpio) |
409 | { | 409 | { |
410 | omap2_hsmmc_init(mmc); | ||
411 | |||
412 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) | 410 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) |
413 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | 411 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ |
414 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 412 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; |
@@ -505,6 +503,7 @@ static void __init overo_init(void) | |||
505 | int ret; | 503 | int ret; |
506 | 504 | ||
507 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 505 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); |
506 | omap_hsmmc_init(mmc); | ||
508 | overo_i2c_init(); | 507 | overo_i2c_init(); |
509 | omap_display_init(&overo_dss_data); | 508 | omap_display_init(&overo_dss_data); |
510 | omap_serial_init(); | 509 | omap_serial_init(); |
diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c index 8678b386c6a2..2d24c98f3d45 100644 --- a/arch/arm/mach-omap2/board-rm680.c +++ b/arch/arm/mach-omap2/board-rm680.c | |||
@@ -120,7 +120,7 @@ static void __init rm680_peripherals_init(void) | |||
120 | ARRAY_SIZE(rm680_peripherals_devices)); | 120 | ARRAY_SIZE(rm680_peripherals_devices)); |
121 | rm680_i2c_init(); | 121 | rm680_i2c_init(); |
122 | gpmc_onenand_init(board_onenand_data); | 122 | gpmc_onenand_init(board_onenand_data); |
123 | omap2_hsmmc_init(mmc); | 123 | omap_hsmmc_init(mmc); |
124 | } | 124 | } |
125 | 125 | ||
126 | #ifdef CONFIG_OMAP_MUX | 126 | #ifdef CONFIG_OMAP_MUX |
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index 0a668916e3c1..0f65c3b202ac 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
@@ -1142,7 +1142,7 @@ void __init rx51_peripherals_init(void) | |||
1142 | 1142 | ||
1143 | partition = omap_mux_get("core"); | 1143 | partition = omap_mux_get("core"); |
1144 | if (partition) | 1144 | if (partition) |
1145 | omap2_hsmmc_init(mmc); | 1145 | omap_hsmmc_init(mmc); |
1146 | 1146 | ||
1147 | rx51_charger_init(); | 1147 | rx51_charger_init(); |
1148 | } | 1148 | } |
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 8d7ce11cfeaf..3d39cdb2e250 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c | |||
@@ -205,6 +205,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
205 | .caps = MMC_CAP_4_BIT_DATA, | 205 | .caps = MMC_CAP_4_BIT_DATA, |
206 | .gpio_wp = -EINVAL, | 206 | .gpio_wp = -EINVAL, |
207 | .power_saving = true, | 207 | .power_saving = true, |
208 | .deferred = true, | ||
208 | }, | 209 | }, |
209 | { | 210 | { |
210 | .name = "internal", | 211 | .name = "internal", |
@@ -233,7 +234,7 @@ static int zoom_twl_gpio_setup(struct device *dev, | |||
233 | 234 | ||
234 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 235 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
235 | mmc[0].gpio_cd = gpio + 0; | 236 | mmc[0].gpio_cd = gpio + 0; |
236 | omap2_hsmmc_init(mmc); | 237 | omap_hsmmc_late_init(mmc); |
237 | 238 | ||
238 | ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, | 239 | ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, |
239 | "lcd enable"); | 240 | "lcd enable"); |
@@ -296,9 +297,12 @@ static void enable_board_wakeup_source(void) | |||
296 | 297 | ||
297 | void __init zoom_peripherals_init(void) | 298 | void __init zoom_peripherals_init(void) |
298 | { | 299 | { |
299 | if (wl12xx_set_platform_data(&omap_zoom_wlan_data)) | 300 | int ret = wl12xx_set_platform_data(&omap_zoom_wlan_data); |
300 | pr_err("error setting wl12xx data\n"); | ||
301 | 301 | ||
302 | if (ret) | ||
303 | pr_err("error setting wl12xx data: %d\n", ret); | ||
304 | |||
305 | omap_hsmmc_init(mmc); | ||
302 | omap_i2c_init(); | 306 | omap_i2c_init(); |
303 | platform_device_register(&omap_vwlan_device); | 307 | platform_device_register(&omap_vwlan_device); |
304 | usb_musb_init(NULL); | 308 | usb_musb_init(NULL); |
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index e13644c11260..71e7df8c413a 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
@@ -276,7 +276,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data | |||
276 | } | 276 | } |
277 | 277 | ||
278 | #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE) | 278 | #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE) |
279 | static inline void omap_init_mbox(void) | 279 | static inline void __init omap_init_mbox(void) |
280 | { | 280 | { |
281 | struct omap_hwmod *oh; | 281 | struct omap_hwmod *oh; |
282 | struct platform_device *pdev; | 282 | struct platform_device *pdev; |
@@ -337,7 +337,7 @@ static inline void omap_init_audio(void) {} | |||
337 | #if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \ | 337 | #if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \ |
338 | defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE) | 338 | defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE) |
339 | 339 | ||
340 | static void omap_init_mcpdm(void) | 340 | static void __init omap_init_mcpdm(void) |
341 | { | 341 | { |
342 | struct omap_hwmod *oh; | 342 | struct omap_hwmod *oh; |
343 | struct platform_device *pdev; | 343 | struct platform_device *pdev; |
@@ -358,7 +358,7 @@ static inline void omap_init_mcpdm(void) {} | |||
358 | #if defined(CONFIG_SND_OMAP_SOC_DMIC) || \ | 358 | #if defined(CONFIG_SND_OMAP_SOC_DMIC) || \ |
359 | defined(CONFIG_SND_OMAP_SOC_DMIC_MODULE) | 359 | defined(CONFIG_SND_OMAP_SOC_DMIC_MODULE) |
360 | 360 | ||
361 | static void omap_init_dmic(void) | 361 | static void __init omap_init_dmic(void) |
362 | { | 362 | { |
363 | struct omap_hwmod *oh; | 363 | struct omap_hwmod *oh; |
364 | struct platform_device *pdev; | 364 | struct platform_device *pdev; |
@@ -380,7 +380,7 @@ static inline void omap_init_dmic(void) {} | |||
380 | 380 | ||
381 | #include <plat/mcspi.h> | 381 | #include <plat/mcspi.h> |
382 | 382 | ||
383 | static int omap_mcspi_init(struct omap_hwmod *oh, void *unused) | 383 | static int __init omap_mcspi_init(struct omap_hwmod *oh, void *unused) |
384 | { | 384 | { |
385 | struct platform_device *pdev; | 385 | struct platform_device *pdev; |
386 | char *name = "omap2_mcspi"; | 386 | char *name = "omap2_mcspi"; |
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index 28d16a4bb615..9706c648bc19 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c | |||
@@ -125,7 +125,7 @@ static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags) | |||
125 | } | 125 | } |
126 | } | 126 | } |
127 | 127 | ||
128 | static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) | 128 | static int __init omap4_dsi_mux_pads(int dsi_id, unsigned lanes) |
129 | { | 129 | { |
130 | u32 enable_mask, enable_shift; | 130 | u32 enable_mask, enable_shift; |
131 | u32 pipd_mask, pipd_shift; | 131 | u32 pipd_mask, pipd_shift; |
@@ -158,7 +158,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) | |||
158 | return 0; | 158 | return 0; |
159 | } | 159 | } |
160 | 160 | ||
161 | int omap_hdmi_init(enum omap_hdmi_flags flags) | 161 | int __init omap_hdmi_init(enum omap_hdmi_flags flags) |
162 | { | 162 | { |
163 | if (cpu_is_omap44xx()) | 163 | if (cpu_is_omap44xx()) |
164 | omap4_hdmi_mux_pads(flags); | 164 | omap4_hdmi_mux_pads(flags); |
@@ -166,7 +166,7 @@ int omap_hdmi_init(enum omap_hdmi_flags flags) | |||
166 | return 0; | 166 | return 0; |
167 | } | 167 | } |
168 | 168 | ||
169 | static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) | 169 | static int __init omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) |
170 | { | 170 | { |
171 | if (cpu_is_omap44xx()) | 171 | if (cpu_is_omap44xx()) |
172 | return omap4_dsi_mux_pads(dsi_id, lane_mask); | 172 | return omap4_dsi_mux_pads(dsi_id, lane_mask); |
@@ -174,7 +174,7 @@ static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) | |||
174 | return 0; | 174 | return 0; |
175 | } | 175 | } |
176 | 176 | ||
177 | static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask) | 177 | static void __init omap_dsi_disable_pads(int dsi_id, unsigned lane_mask) |
178 | { | 178 | { |
179 | if (cpu_is_omap44xx()) | 179 | if (cpu_is_omap44xx()) |
180 | omap4_dsi_mux_pads(dsi_id, 0); | 180 | omap4_dsi_mux_pads(dsi_id, 0); |
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c index 8cbfbc2918ce..64c0caed9516 100644 --- a/arch/arm/mach-omap2/gpio.c +++ b/arch/arm/mach-omap2/gpio.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <plat/omap_hwmod.h> | 24 | #include <plat/omap_hwmod.h> |
25 | #include <plat/omap_device.h> | 25 | #include <plat/omap_device.h> |
26 | 26 | ||
27 | static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | 27 | static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) |
28 | { | 28 | { |
29 | struct platform_device *pdev; | 29 | struct platform_device *pdev; |
30 | struct omap_gpio_platform_data *pdata; | 30 | struct omap_gpio_platform_data *pdata; |
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index ad0adb5a1e0e..a97876da7fad 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c | |||
@@ -428,69 +428,140 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, | |||
428 | return 0; | 428 | return 0; |
429 | } | 429 | } |
430 | 430 | ||
431 | static int omap_hsmmc_done; | ||
432 | |||
433 | void omap_hsmmc_late_init(struct omap2_hsmmc_info *c) | ||
434 | { | ||
435 | struct platform_device *pdev; | ||
436 | struct omap_mmc_platform_data *mmc_pdata; | ||
437 | int res; | ||
438 | |||
439 | if (omap_hsmmc_done != 1) | ||
440 | return; | ||
441 | |||
442 | omap_hsmmc_done++; | ||
443 | |||
444 | for (; c->mmc; c++) { | ||
445 | if (!c->deferred) | ||
446 | continue; | ||
447 | |||
448 | pdev = c->pdev; | ||
449 | if (!pdev) | ||
450 | continue; | ||
451 | |||
452 | mmc_pdata = pdev->dev.platform_data; | ||
453 | if (!mmc_pdata) | ||
454 | continue; | ||
455 | |||
456 | mmc_pdata->slots[0].switch_pin = c->gpio_cd; | ||
457 | mmc_pdata->slots[0].gpio_wp = c->gpio_wp; | ||
458 | |||
459 | res = omap_device_register(pdev); | ||
460 | if (res) | ||
461 | pr_err("Could not late init MMC %s\n", | ||
462 | c->name); | ||
463 | } | ||
464 | } | ||
465 | |||
431 | #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 | 466 | #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 |
432 | 467 | ||
433 | void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) | 468 | static void omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo, |
469 | int ctrl_nr) | ||
434 | { | 470 | { |
435 | struct omap_hwmod *oh; | 471 | struct omap_hwmod *oh; |
472 | struct omap_hwmod *ohs[1]; | ||
473 | struct omap_device *od; | ||
436 | struct platform_device *pdev; | 474 | struct platform_device *pdev; |
437 | char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; | 475 | char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; |
438 | struct omap_mmc_platform_data *mmc_data; | 476 | struct omap_mmc_platform_data *mmc_data; |
439 | struct omap_mmc_dev_attr *mmc_dev_attr; | 477 | struct omap_mmc_dev_attr *mmc_dev_attr; |
440 | char *name; | 478 | char *name; |
441 | int l; | 479 | int res; |
442 | 480 | ||
443 | mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL); | 481 | mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL); |
444 | if (!mmc_data) { | 482 | if (!mmc_data) { |
445 | pr_err("Cannot allocate memory for mmc device!\n"); | 483 | pr_err("Cannot allocate memory for mmc device!\n"); |
446 | goto done; | 484 | return; |
447 | } | 485 | } |
448 | 486 | ||
449 | if (omap_hsmmc_pdata_init(hsmmcinfo, mmc_data) < 0) { | 487 | res = omap_hsmmc_pdata_init(hsmmcinfo, mmc_data); |
450 | pr_err("%s fails!\n", __func__); | 488 | if (res < 0) |
451 | goto done; | 489 | goto free_mmc; |
452 | } | 490 | |
453 | omap_hsmmc_mux(mmc_data, (ctrl_nr - 1)); | 491 | omap_hsmmc_mux(mmc_data, (ctrl_nr - 1)); |
454 | 492 | ||
455 | name = "omap_hsmmc"; | 493 | name = "omap_hsmmc"; |
456 | 494 | res = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN, | |
457 | l = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN, | ||
458 | "mmc%d", ctrl_nr); | 495 | "mmc%d", ctrl_nr); |
459 | WARN(l >= MAX_OMAP_MMC_HWMOD_NAME_LEN, | 496 | WARN(res >= MAX_OMAP_MMC_HWMOD_NAME_LEN, |
460 | "String buffer overflow in MMC%d device setup\n", ctrl_nr); | 497 | "String buffer overflow in MMC%d device setup\n", ctrl_nr); |
498 | |||
461 | oh = omap_hwmod_lookup(oh_name); | 499 | oh = omap_hwmod_lookup(oh_name); |
462 | if (!oh) { | 500 | if (!oh) { |
463 | pr_err("Could not look up %s\n", oh_name); | 501 | pr_err("Could not look up %s\n", oh_name); |
464 | kfree(mmc_data->slots[0].name); | 502 | goto free_name; |
465 | goto done; | ||
466 | } | 503 | } |
467 | 504 | ohs[0] = oh; | |
468 | if (oh->dev_attr != NULL) { | 505 | if (oh->dev_attr != NULL) { |
469 | mmc_dev_attr = oh->dev_attr; | 506 | mmc_dev_attr = oh->dev_attr; |
470 | mmc_data->controller_flags = mmc_dev_attr->flags; | 507 | mmc_data->controller_flags = mmc_dev_attr->flags; |
471 | } | 508 | } |
472 | 509 | ||
473 | pdev = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, | 510 | pdev = platform_device_alloc(name, ctrl_nr - 1); |
474 | sizeof(struct omap_mmc_platform_data), NULL, 0, false); | 511 | if (!pdev) { |
475 | if (IS_ERR(pdev)) { | 512 | pr_err("Could not allocate pdev for %s\n", name); |
476 | WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name); | 513 | goto free_name; |
477 | kfree(mmc_data->slots[0].name); | ||
478 | goto done; | ||
479 | } | 514 | } |
480 | /* | 515 | dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id); |
481 | * return device handle to board setup code | 516 | |
482 | * required to populate for regulator framework structure | 517 | od = omap_device_alloc(pdev, ohs, 1, NULL, 0); |
483 | */ | 518 | if (!od) { |
484 | hsmmcinfo->dev = &pdev->dev; | 519 | pr_err("Could not allocate od for %s\n", name); |
520 | goto put_pdev; | ||
521 | } | ||
522 | |||
523 | res = platform_device_add_data(pdev, mmc_data, | ||
524 | sizeof(struct omap_mmc_platform_data)); | ||
525 | if (res) { | ||
526 | pr_err("Could not add pdata for %s\n", name); | ||
527 | goto put_pdev; | ||
528 | } | ||
529 | |||
530 | hsmmcinfo->pdev = pdev; | ||
531 | |||
532 | if (hsmmcinfo->deferred) | ||
533 | goto free_mmc; | ||
485 | 534 | ||
486 | done: | 535 | res = omap_device_register(pdev); |
536 | if (res) { | ||
537 | pr_err("Could not register od for %s\n", name); | ||
538 | goto free_od; | ||
539 | } | ||
540 | |||
541 | goto free_mmc; | ||
542 | |||
543 | free_od: | ||
544 | omap_device_delete(od); | ||
545 | |||
546 | put_pdev: | ||
547 | platform_device_put(pdev); | ||
548 | |||
549 | free_name: | ||
550 | kfree(mmc_data->slots[0].name); | ||
551 | |||
552 | free_mmc: | ||
487 | kfree(mmc_data); | 553 | kfree(mmc_data); |
488 | } | 554 | } |
489 | 555 | ||
490 | void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) | 556 | void __init omap_hsmmc_init(struct omap2_hsmmc_info *controllers) |
491 | { | 557 | { |
492 | u32 reg; | 558 | u32 reg; |
493 | 559 | ||
560 | if (omap_hsmmc_done) | ||
561 | return; | ||
562 | |||
563 | omap_hsmmc_done = 1; | ||
564 | |||
494 | if (!cpu_is_omap44xx()) { | 565 | if (!cpu_is_omap44xx()) { |
495 | if (cpu_is_omap2430()) { | 566 | if (cpu_is_omap2430()) { |
496 | control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; | 567 | control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; |
@@ -515,7 +586,7 @@ void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
515 | } | 586 | } |
516 | 587 | ||
517 | for (; controllers->mmc; controllers++) | 588 | for (; controllers->mmc; controllers++) |
518 | omap_init_hsmmc(controllers, controllers->mmc); | 589 | omap_hsmmc_init_one(controllers, controllers->mmc); |
519 | 590 | ||
520 | } | 591 | } |
521 | 592 | ||
diff --git a/arch/arm/mach-omap2/hsmmc.h b/arch/arm/mach-omap2/hsmmc.h index c4409730c4bb..07831cc3c171 100644 --- a/arch/arm/mach-omap2/hsmmc.h +++ b/arch/arm/mach-omap2/hsmmc.h | |||
@@ -21,10 +21,11 @@ struct omap2_hsmmc_info { | |||
21 | bool no_off; /* power_saving and power is not to go off */ | 21 | bool no_off; /* power_saving and power is not to go off */ |
22 | bool no_off_init; /* no power off when not in MMC sleep state */ | 22 | bool no_off_init; /* no power off when not in MMC sleep state */ |
23 | bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */ | 23 | bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */ |
24 | bool deferred; /* mmc needs a deferred probe */ | ||
24 | int gpio_cd; /* or -EINVAL */ | 25 | int gpio_cd; /* or -EINVAL */ |
25 | int gpio_wp; /* or -EINVAL */ | 26 | int gpio_wp; /* or -EINVAL */ |
26 | char *name; /* or NULL for default */ | 27 | char *name; /* or NULL for default */ |
27 | struct device *dev; /* returned: pointer to mmc adapter */ | 28 | struct platform_device *pdev; /* mmc controller instance */ |
28 | int ocr_mask; /* temporary HACK */ | 29 | int ocr_mask; /* temporary HACK */ |
29 | /* Remux (pad configuration) when powering on/off */ | 30 | /* Remux (pad configuration) when powering on/off */ |
30 | void (*remux)(struct device *dev, int slot, int power_on); | 31 | void (*remux)(struct device *dev, int slot, int power_on); |
@@ -34,11 +35,16 @@ struct omap2_hsmmc_info { | |||
34 | 35 | ||
35 | #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) | 36 | #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) |
36 | 37 | ||
37 | void omap2_hsmmc_init(struct omap2_hsmmc_info *); | 38 | void omap_hsmmc_init(struct omap2_hsmmc_info *); |
39 | void omap_hsmmc_late_init(struct omap2_hsmmc_info *); | ||
38 | 40 | ||
39 | #else | 41 | #else |
40 | 42 | ||
41 | static inline void omap2_hsmmc_init(struct omap2_hsmmc_info *info) | 43 | static inline void omap_hsmmc_init(struct omap2_hsmmc_info *info) |
44 | { | ||
45 | } | ||
46 | |||
47 | static inline void omap_hsmmc_late_init(struct omap2_hsmmc_info *info) | ||
42 | { | 48 | { |
43 | } | 49 | } |
44 | 50 | ||
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index fb4bcf81a183..5f8a876e4fd2 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c | |||
@@ -122,7 +122,7 @@ static int omap3_enable_st_clock(unsigned int id, bool enable) | |||
122 | return 0; | 122 | return 0; |
123 | } | 123 | } |
124 | 124 | ||
125 | static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) | 125 | static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused) |
126 | { | 126 | { |
127 | int id, count = 1; | 127 | int id, count = 1; |
128 | char *name = "omap-mcbsp"; | 128 | char *name = "omap-mcbsp"; |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index e1cc75d1a57a..f26b2faa1694 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -1094,8 +1094,8 @@ static void omap_mux_init_package(struct omap_mux *superset, | |||
1094 | omap_mux_package_init_balls(package_balls, superset); | 1094 | omap_mux_package_init_balls(package_balls, superset); |
1095 | } | 1095 | } |
1096 | 1096 | ||
1097 | static void omap_mux_init_signals(struct omap_mux_partition *partition, | 1097 | static void __init omap_mux_init_signals(struct omap_mux_partition *partition, |
1098 | struct omap_board_mux *board_mux) | 1098 | struct omap_board_mux *board_mux) |
1099 | { | 1099 | { |
1100 | omap_mux_set_cmdline_signals(); | 1100 | omap_mux_set_cmdline_signals(); |
1101 | omap_mux_write_array(partition, board_mux); | 1101 | omap_mux_write_array(partition, board_mux); |
@@ -1109,8 +1109,8 @@ static void omap_mux_init_package(struct omap_mux *superset, | |||
1109 | { | 1109 | { |
1110 | } | 1110 | } |
1111 | 1111 | ||
1112 | static void omap_mux_init_signals(struct omap_mux_partition *partition, | 1112 | static void __init omap_mux_init_signals(struct omap_mux_partition *partition, |
1113 | struct omap_board_mux *board_mux) | 1113 | struct omap_board_mux *board_mux) |
1114 | { | 1114 | { |
1115 | } | 1115 | } |
1116 | 1116 | ||
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S index b13ef7ef5ef4..503ac777a2ba 100644 --- a/arch/arm/mach-omap2/omap-headsmp.S +++ b/arch/arm/mach-omap2/omap-headsmp.S | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/linkage.h> | 18 | #include <linux/linkage.h> |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | 20 | ||
21 | __CPUINIT | ||
21 | /* | 22 | /* |
22 | * OMAP4 specific entry point for secondary CPU to jump from ROM | 23 | * OMAP4 specific entry point for secondary CPU to jump from ROM |
23 | * code. This routine also provides a holding flag into which | 24 | * code. This routine also provides a holding flag into which |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 5192cabb40ed..eba6cd3816f5 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -1517,8 +1517,8 @@ static int _enable(struct omap_hwmod *oh) | |||
1517 | if (oh->_state != _HWMOD_STATE_INITIALIZED && | 1517 | if (oh->_state != _HWMOD_STATE_INITIALIZED && |
1518 | oh->_state != _HWMOD_STATE_IDLE && | 1518 | oh->_state != _HWMOD_STATE_IDLE && |
1519 | oh->_state != _HWMOD_STATE_DISABLED) { | 1519 | oh->_state != _HWMOD_STATE_DISABLED) { |
1520 | WARN(1, "omap_hwmod: %s: enabled state can only be entered " | 1520 | WARN(1, "omap_hwmod: %s: enabled state can only be entered from initialized, idle, or disabled state\n", |
1521 | "from initialized, idle, or disabled state\n", oh->name); | 1521 | oh->name); |
1522 | return -EINVAL; | 1522 | return -EINVAL; |
1523 | } | 1523 | } |
1524 | 1524 | ||
@@ -1600,8 +1600,8 @@ static int _idle(struct omap_hwmod *oh) | |||
1600 | pr_debug("omap_hwmod: %s: idling\n", oh->name); | 1600 | pr_debug("omap_hwmod: %s: idling\n", oh->name); |
1601 | 1601 | ||
1602 | if (oh->_state != _HWMOD_STATE_ENABLED) { | 1602 | if (oh->_state != _HWMOD_STATE_ENABLED) { |
1603 | WARN(1, "omap_hwmod: %s: idle state can only be entered from " | 1603 | WARN(1, "omap_hwmod: %s: idle state can only be entered from enabled state\n", |
1604 | "enabled state\n", oh->name); | 1604 | oh->name); |
1605 | return -EINVAL; | 1605 | return -EINVAL; |
1606 | } | 1606 | } |
1607 | 1607 | ||
@@ -1682,8 +1682,8 @@ static int _shutdown(struct omap_hwmod *oh) | |||
1682 | 1682 | ||
1683 | if (oh->_state != _HWMOD_STATE_IDLE && | 1683 | if (oh->_state != _HWMOD_STATE_IDLE && |
1684 | oh->_state != _HWMOD_STATE_ENABLED) { | 1684 | oh->_state != _HWMOD_STATE_ENABLED) { |
1685 | WARN(1, "omap_hwmod: %s: disabled state can only be entered " | 1685 | WARN(1, "omap_hwmod: %s: disabled state can only be entered from idle, or enabled state\n", |
1686 | "from idle, or enabled state\n", oh->name); | 1686 | oh->name); |
1687 | return -EINVAL; | 1687 | return -EINVAL; |
1688 | } | 1688 | } |
1689 | 1689 | ||
@@ -2240,8 +2240,8 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh) | |||
2240 | BUG_ON(!oh); | 2240 | BUG_ON(!oh); |
2241 | 2241 | ||
2242 | if (!oh->class->sysc || !oh->class->sysc->sysc_flags) { | 2242 | if (!oh->class->sysc || !oh->class->sysc->sysc_flags) { |
2243 | WARN(1, "omap_device: %s: OCP barrier impossible due to " | 2243 | WARN(1, "omap_device: %s: OCP barrier impossible due to device configuration\n", |
2244 | "device configuration\n", oh->name); | 2244 | oh->name); |
2245 | return; | 2245 | return; |
2246 | } | 2246 | } |
2247 | 2247 | ||
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 1881fe915149..fb9b85bfc308 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | static struct omap_device_pm_latency *pm_lats; | 29 | static struct omap_device_pm_latency *pm_lats; |
30 | 30 | ||
31 | static int _init_omap_device(char *name) | 31 | static int __init _init_omap_device(char *name) |
32 | { | 32 | { |
33 | struct omap_hwmod *oh; | 33 | struct omap_hwmod *oh; |
34 | struct platform_device *pdev; | 34 | struct platform_device *pdev; |
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index bee8bb9111eb..36c587f4981b 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
@@ -81,13 +81,7 @@ static int omap2_fclks_active(void) | |||
81 | f1 = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); | 81 | f1 = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); |
82 | f2 = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); | 82 | f2 = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); |
83 | 83 | ||
84 | /* Ignore UART clocks. These are handled by UART core (serial.c) */ | 84 | return (f1 | f2) ? 1 : 0; |
85 | f1 &= ~(OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_UART2_MASK); | ||
86 | f2 &= ~OMAP24XX_EN_UART3_MASK; | ||
87 | |||
88 | if (f1 | f2) | ||
89 | return 1; | ||
90 | return 0; | ||
91 | } | 85 | } |
92 | 86 | ||
93 | static void omap2_enter_full_retention(void) | 87 | static void omap2_enter_full_retention(void) |
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c index f4c151989c91..eac623c7c3d8 100644 --- a/arch/arm/mach-omap2/prm44xx.c +++ b/arch/arm/mach-omap2/prm44xx.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | 19 | ||
20 | #include <plat/cpu.h> | 20 | #include <plat/cpu.h> |
21 | #include <plat/irqs.h> | ||
21 | #include <plat/prcm.h> | 22 | #include <plat/prcm.h> |
22 | 23 | ||
23 | #include "iomap.h" | 24 | #include "iomap.h" |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 247d89478f24..f590afc1f673 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -107,18 +107,18 @@ static void omap_uart_set_noidle(struct platform_device *pdev) | |||
107 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_NO); | 107 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_NO); |
108 | } | 108 | } |
109 | 109 | ||
110 | static void omap_uart_set_forceidle(struct platform_device *pdev) | 110 | static void omap_uart_set_smartidle(struct platform_device *pdev) |
111 | { | 111 | { |
112 | struct omap_device *od = to_omap_device(pdev); | 112 | struct omap_device *od = to_omap_device(pdev); |
113 | 113 | ||
114 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_FORCE); | 114 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_SMART); |
115 | } | 115 | } |
116 | 116 | ||
117 | #else | 117 | #else |
118 | static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable) | 118 | static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable) |
119 | {} | 119 | {} |
120 | static void omap_uart_set_noidle(struct platform_device *pdev) {} | 120 | static void omap_uart_set_noidle(struct platform_device *pdev) {} |
121 | static void omap_uart_set_forceidle(struct platform_device *pdev) {} | 121 | static void omap_uart_set_smartidle(struct platform_device *pdev) {} |
122 | #endif /* CONFIG_PM */ | 122 | #endif /* CONFIG_PM */ |
123 | 123 | ||
124 | #ifdef CONFIG_OMAP_MUX | 124 | #ifdef CONFIG_OMAP_MUX |
@@ -349,7 +349,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, | |||
349 | omap_up.uartclk = OMAP24XX_BASE_BAUD * 16; | 349 | omap_up.uartclk = OMAP24XX_BASE_BAUD * 16; |
350 | omap_up.flags = UPF_BOOT_AUTOCONF; | 350 | omap_up.flags = UPF_BOOT_AUTOCONF; |
351 | omap_up.get_context_loss_count = omap_pm_get_dev_context_loss_count; | 351 | omap_up.get_context_loss_count = omap_pm_get_dev_context_loss_count; |
352 | omap_up.set_forceidle = omap_uart_set_forceidle; | 352 | omap_up.set_forceidle = omap_uart_set_smartidle; |
353 | omap_up.set_noidle = omap_uart_set_noidle; | 353 | omap_up.set_noidle = omap_uart_set_noidle; |
354 | omap_up.enable_wakeup = omap_uart_enable_wakeup; | 354 | omap_up.enable_wakeup = omap_uart_enable_wakeup; |
355 | omap_up.dma_rx_buf_size = info->dma_rx_buf_size; | 355 | omap_up.dma_rx_buf_size = info->dma_rx_buf_size; |
diff --git a/arch/arm/mach-omap2/sr_device.c b/arch/arm/mach-omap2/sr_device.c index 9f43fcc05d3e..78c9437913ce 100644 --- a/arch/arm/mach-omap2/sr_device.c +++ b/arch/arm/mach-omap2/sr_device.c | |||
@@ -69,7 +69,7 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data, | |||
69 | sr_data->nvalue_count = count; | 69 | sr_data->nvalue_count = count; |
70 | } | 70 | } |
71 | 71 | ||
72 | static int sr_dev_init(struct omap_hwmod *oh, void *user) | 72 | static int __init sr_dev_init(struct omap_hwmod *oh, void *user) |
73 | { | 73 | { |
74 | struct omap_sr_data *sr_data; | 74 | struct omap_sr_data *sr_data; |
75 | struct platform_device *pdev; | 75 | struct platform_device *pdev; |
diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c index 031d116fbf10..175b7d86d86a 100644 --- a/arch/arm/mach-omap2/vc.c +++ b/arch/arm/mach-omap2/vc.c | |||
@@ -247,7 +247,7 @@ static void __init omap4_vc_init_channel(struct voltagedomain *voltdm) | |||
247 | * omap_vc_i2c_init - initialize I2C interface to PMIC | 247 | * omap_vc_i2c_init - initialize I2C interface to PMIC |
248 | * @voltdm: voltage domain containing VC data | 248 | * @voltdm: voltage domain containing VC data |
249 | * | 249 | * |
250 | * Use PMIC supplied seetings for I2C high-speed mode and | 250 | * Use PMIC supplied settings for I2C high-speed mode and |
251 | * master code (if set) and program the VC I2C configuration | 251 | * master code (if set) and program the VC I2C configuration |
252 | * register. | 252 | * register. |
253 | * | 253 | * |
@@ -265,8 +265,8 @@ static void __init omap_vc_i2c_init(struct voltagedomain *voltdm) | |||
265 | 265 | ||
266 | if (initialized) { | 266 | if (initialized) { |
267 | if (voltdm->pmic->i2c_high_speed != i2c_high_speed) | 267 | if (voltdm->pmic->i2c_high_speed != i2c_high_speed) |
268 | pr_warn("%s: I2C config for all channels must match.", | 268 | pr_warn("%s: I2C config for vdd_%s does not match other channels (%u).", |
269 | __func__); | 269 | __func__, voltdm->name, i2c_high_speed); |
270 | return; | 270 | return; |
271 | } | 271 | } |
272 | 272 | ||
@@ -292,9 +292,7 @@ void __init omap_vc_init_channel(struct voltagedomain *voltdm) | |||
292 | u32 val; | 292 | u32 val; |
293 | 293 | ||
294 | if (!voltdm->pmic || !voltdm->pmic->uv_to_vsel) { | 294 | if (!voltdm->pmic || !voltdm->pmic->uv_to_vsel) { |
295 | pr_err("%s: PMIC info requried to configure vc for" | 295 | pr_err("%s: No PMIC info for vdd_%s\n", __func__, voltdm->name); |
296 | "vdd_%s not populated.Hence cannot initialize vc\n", | ||
297 | __func__, voltdm->name); | ||
298 | return; | 296 | return; |
299 | } | 297 | } |
300 | 298 | ||
diff --git a/arch/arm/mach-omap2/vp.c b/arch/arm/mach-omap2/vp.c index 807391d84a9d..0df88820978d 100644 --- a/arch/arm/mach-omap2/vp.c +++ b/arch/arm/mach-omap2/vp.c | |||
@@ -41,6 +41,11 @@ void __init omap_vp_init(struct voltagedomain *voltdm) | |||
41 | u32 val, sys_clk_rate, timeout, waittime; | 41 | u32 val, sys_clk_rate, timeout, waittime; |
42 | u32 vddmin, vddmax, vstepmin, vstepmax; | 42 | u32 vddmin, vddmax, vstepmin, vstepmax; |
43 | 43 | ||
44 | if (!voltdm->pmic || !voltdm->pmic->uv_to_vsel) { | ||
45 | pr_err("%s: No PMIC info for vdd_%s\n", __func__, voltdm->name); | ||
46 | return; | ||
47 | } | ||
48 | |||
44 | if (!voltdm->read || !voltdm->write) { | 49 | if (!voltdm->read || !voltdm->write) { |
45 | pr_err("%s: No read/write API for accessing vdd_%s regs\n", | 50 | pr_err("%s: No read/write API for accessing vdd_%s regs\n", |
46 | __func__, voltdm->name); | 51 | __func__, voltdm->name); |