diff options
Diffstat (limited to 'arch/arm')
82 files changed, 421 insertions, 224 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 97bf5e443764..3b3de99c2d6c 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -901,6 +901,7 @@ config ARCH_U300 | |||
901 | 901 | ||
902 | config ARCH_U8500 | 902 | config ARCH_U8500 |
903 | bool "ST-Ericsson U8500 Series" | 903 | bool "ST-Ericsson U8500 Series" |
904 | depends on MMU | ||
904 | select CPU_V7 | 905 | select CPU_V7 |
905 | select ARM_AMBA | 906 | select ARM_AMBA |
906 | select GENERIC_CLOCKEVENTS | 907 | select GENERIC_CLOCKEVENTS |
@@ -1577,7 +1578,7 @@ config LOCAL_TIMERS | |||
1577 | config ARCH_NR_GPIO | 1578 | config ARCH_NR_GPIO |
1578 | int | 1579 | int |
1579 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA | 1580 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA |
1580 | default 350 if ARCH_U8500 | 1581 | default 355 if ARCH_U8500 |
1581 | default 0 | 1582 | default 0 |
1582 | help | 1583 | help |
1583 | Maximum number of GPIOs in the system. | 1584 | Maximum number of GPIOs in the system. |
diff --git a/arch/arm/configs/imx_v4_v5_defconfig b/arch/arm/configs/imx_v4_v5_defconfig index d9eddfd77428..b5ac644e12af 100644 --- a/arch/arm/configs/imx_v4_v5_defconfig +++ b/arch/arm/configs/imx_v4_v5_defconfig | |||
@@ -69,6 +69,7 @@ CONFIG_MTD_CFI=y | |||
69 | CONFIG_MTD_CFI_ADV_OPTIONS=y | 69 | CONFIG_MTD_CFI_ADV_OPTIONS=y |
70 | CONFIG_MTD_CFI_GEOMETRY=y | 70 | CONFIG_MTD_CFI_GEOMETRY=y |
71 | # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set | 71 | # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set |
72 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
72 | # CONFIG_MTD_CFI_I2 is not set | 73 | # CONFIG_MTD_CFI_I2 is not set |
73 | CONFIG_MTD_CFI_INTELEXT=y | 74 | CONFIG_MTD_CFI_INTELEXT=y |
74 | CONFIG_MTD_PHYSMAP=y | 75 | CONFIG_MTD_PHYSMAP=y |
diff --git a/arch/arm/mach-davinci/cpufreq.c b/arch/arm/mach-davinci/cpufreq.c index 5bba7070f271..031048fec9f5 100644 --- a/arch/arm/mach-davinci/cpufreq.c +++ b/arch/arm/mach-davinci/cpufreq.c | |||
@@ -95,7 +95,7 @@ static int davinci_target(struct cpufreq_policy *policy, | |||
95 | if (freqs.old == freqs.new) | 95 | if (freqs.old == freqs.new) |
96 | return ret; | 96 | return ret; |
97 | 97 | ||
98 | dev_dbg(&cpufreq.dev, "transition: %u --> %u\n", freqs.old, freqs.new); | 98 | dev_dbg(cpufreq.dev, "transition: %u --> %u\n", freqs.old, freqs.new); |
99 | 99 | ||
100 | ret = cpufreq_frequency_table_target(policy, pdata->freq_table, | 100 | ret = cpufreq_frequency_table_target(policy, pdata->freq_table, |
101 | freqs.new, relation, &idx); | 101 | freqs.new, relation, &idx); |
diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c index 992c4c410185..b44dc844e15e 100644 --- a/arch/arm/mach-davinci/da850.c +++ b/arch/arm/mach-davinci/da850.c | |||
@@ -1026,7 +1026,7 @@ static int da850_round_armrate(struct clk *clk, unsigned long rate) | |||
1026 | } | 1026 | } |
1027 | #endif | 1027 | #endif |
1028 | 1028 | ||
1029 | int da850_register_pm(struct platform_device *pdev) | 1029 | int __init da850_register_pm(struct platform_device *pdev) |
1030 | { | 1030 | { |
1031 | int ret; | 1031 | int ret; |
1032 | struct davinci_pm_config *pdata = pdev->dev.platform_data; | 1032 | struct davinci_pm_config *pdata = pdev->dev.platform_data; |
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c index da90103a313d..fd33919c95d4 100644 --- a/arch/arm/mach-davinci/dma.c +++ b/arch/arm/mach-davinci/dma.c | |||
@@ -1508,12 +1508,8 @@ static int __init edma_probe(struct platform_device *pdev) | |||
1508 | goto fail; | 1508 | goto fail; |
1509 | } | 1509 | } |
1510 | 1510 | ||
1511 | /* Everything lives on transfer controller 1 until otherwise | ||
1512 | * specified. This way, long transfers on the low priority queue | ||
1513 | * started by the codec engine will not cause audio defects. | ||
1514 | */ | ||
1515 | for (i = 0; i < edma_cc[j]->num_channels; i++) | 1511 | for (i = 0; i < edma_cc[j]->num_channels; i++) |
1516 | map_dmach_queue(j, i, EVENTQ_1); | 1512 | map_dmach_queue(j, i, info[j]->default_queue); |
1517 | 1513 | ||
1518 | queue_tc_mapping = info[j]->queue_tc_mapping; | 1514 | queue_tc_mapping = info[j]->queue_tc_mapping; |
1519 | queue_priority_mapping = info[j]->queue_priority_mapping; | 1515 | queue_priority_mapping = info[j]->queue_priority_mapping; |
diff --git a/arch/arm/mach-davinci/include/mach/edma.h b/arch/arm/mach-davinci/include/mach/edma.h index 20c77f29bf0f..7e84c906ceff 100644 --- a/arch/arm/mach-davinci/include/mach/edma.h +++ b/arch/arm/mach-davinci/include/mach/edma.h | |||
@@ -250,6 +250,11 @@ struct edma_soc_info { | |||
250 | unsigned n_slot; | 250 | unsigned n_slot; |
251 | unsigned n_tc; | 251 | unsigned n_tc; |
252 | unsigned n_cc; | 252 | unsigned n_cc; |
253 | /* | ||
254 | * Default queue is expected to be a low-priority queue. | ||
255 | * This way, long transfers on the default queue started | ||
256 | * by the codec engine will not cause audio defects. | ||
257 | */ | ||
253 | enum dma_event_q default_queue; | 258 | enum dma_event_q default_queue; |
254 | 259 | ||
255 | /* Resource reservation for other cores */ | 260 | /* Resource reservation for other cores */ |
diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c index 16f126da9f8f..2f3debe2a113 100644 --- a/arch/arm/mach-imx/mach-pcm038.c +++ b/arch/arm/mach-imx/mach-pcm038.c | |||
@@ -233,7 +233,7 @@ static struct regulator_init_data sdhc1_data = { | |||
233 | 233 | ||
234 | static struct regulator_consumer_supply cam_consumers[] = { | 234 | static struct regulator_consumer_supply cam_consumers[] = { |
235 | { | 235 | { |
236 | .dev = NULL, | 236 | .dev_name = NULL, |
237 | .supply = "imx_cam_vcc", | 237 | .supply = "imx_cam_vcc", |
238 | }, | 238 | }, |
239 | }; | 239 | }; |
diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index 8404ee72555a..6222151f55be 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c | |||
@@ -76,7 +76,7 @@ static void __iomem *imx3_ioremap(unsigned long phys_addr, size_t size, | |||
76 | return __arm_ioremap(phys_addr, size, mtype); | 76 | return __arm_ioremap(phys_addr, size, mtype); |
77 | } | 77 | } |
78 | 78 | ||
79 | void imx3_init_l2x0(void) | 79 | void __init imx3_init_l2x0(void) |
80 | { | 80 | { |
81 | void __iomem *l2x0_base; | 81 | void __iomem *l2x0_base; |
82 | void __iomem *clkctl_base; | 82 | void __iomem *clkctl_base; |
diff --git a/arch/arm/mach-lpc32xx/clock.c b/arch/arm/mach-lpc32xx/clock.c index 47639f31ba38..b7ef51119d37 100644 --- a/arch/arm/mach-lpc32xx/clock.c +++ b/arch/arm/mach-lpc32xx/clock.c | |||
@@ -1129,12 +1129,12 @@ static struct clk_lookup lookups[] = { | |||
1129 | _REGISTER_CLOCK("dev:ssp1", NULL, clk_ssp1) | 1129 | _REGISTER_CLOCK("dev:ssp1", NULL, clk_ssp1) |
1130 | _REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan) | 1130 | _REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan) |
1131 | _REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand) | 1131 | _REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand) |
1132 | _REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc) | ||
1132 | _REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0) | 1133 | _REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0) |
1133 | _REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1) | 1134 | _REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1) |
1134 | _REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc) | ||
1135 | _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) | 1135 | _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) |
1136 | _REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc) | 1136 | _REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc) |
1137 | _REGISTER_CLOCK("lpc-eth.0", NULL, clk_net) | 1137 | _REGISTER_CLOCK("lpc-net.0", NULL, clk_net) |
1138 | _REGISTER_CLOCK("dev:clcd", NULL, clk_lcd) | 1138 | _REGISTER_CLOCK("dev:clcd", NULL, clk_lcd) |
1139 | _REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd) | 1139 | _REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd) |
1140 | _REGISTER_CLOCK("lpc32xx_rtc", NULL, clk_rtc) | 1140 | _REGISTER_CLOCK("lpc32xx_rtc", NULL, clk_rtc) |
diff --git a/arch/arm/mach-lpc32xx/common.h b/arch/arm/mach-lpc32xx/common.h index 23c21905ff89..68e45e8c9486 100644 --- a/arch/arm/mach-lpc32xx/common.h +++ b/arch/arm/mach-lpc32xx/common.h | |||
@@ -69,6 +69,7 @@ extern u32 clk_get_pclk_div(void); | |||
69 | */ | 69 | */ |
70 | extern void lpc32xx_get_uid(u32 devid[4]); | 70 | extern void lpc32xx_get_uid(u32 devid[4]); |
71 | 71 | ||
72 | extern u32 lpc32xx_return_iram_size(void); | ||
72 | /* | 73 | /* |
73 | * Pointers used for sizing and copying suspend function data | 74 | * Pointers used for sizing and copying suspend function data |
74 | */ | 75 | */ |
diff --git a/arch/arm/mach-omap1/io.c b/arch/arm/mach-omap1/io.c index 8e55b6fb3478..55a8f582d04c 100644 --- a/arch/arm/mach-omap1/io.c +++ b/arch/arm/mach-omap1/io.c | |||
@@ -118,7 +118,7 @@ void __init omap16xx_map_io(void) | |||
118 | /* | 118 | /* |
119 | * Common low-level hardware init for omap1. | 119 | * Common low-level hardware init for omap1. |
120 | */ | 120 | */ |
121 | void omap1_init_early(void) | 121 | void __init omap1_init_early(void) |
122 | { | 122 | { |
123 | omap_check_revision(); | 123 | omap_check_revision(); |
124 | 124 | ||
diff --git a/arch/arm/mach-omap1/lcd_dma.c b/arch/arm/mach-omap1/lcd_dma.c index 453809359ba6..4c5ce7d829c2 100644 --- a/arch/arm/mach-omap1/lcd_dma.c +++ b/arch/arm/mach-omap1/lcd_dma.c | |||
@@ -117,7 +117,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_mirror); | |||
117 | void omap_set_lcd_dma_b1_vxres(unsigned long vxres) | 117 | void omap_set_lcd_dma_b1_vxres(unsigned long vxres) |
118 | { | 118 | { |
119 | if (cpu_is_omap15xx()) { | 119 | if (cpu_is_omap15xx()) { |
120 | printk(KERN_ERR "DMA virtual resulotion is not supported " | 120 | printk(KERN_ERR "DMA virtual resolution is not supported " |
121 | "in 1510 mode\n"); | 121 | "in 1510 mode\n"); |
122 | BUG(); | 122 | BUG(); |
123 | } | 123 | } |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 56a6e98652cc..f1096172b9bb 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -265,6 +265,8 @@ obj-y += $(smc91x-m) $(smc91x-y) | |||
265 | 265 | ||
266 | smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o | 266 | smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o |
267 | obj-y += $(smsc911x-m) $(smsc911x-y) | 267 | obj-y += $(smsc911x-m) $(smsc911x-y) |
268 | obj-$(CONFIG_ARCH_OMAP4) += hwspinlock.o | 268 | ifneq ($(CONFIG_HWSPINLOCK_OMAP),) |
269 | obj-y += hwspinlock.o | ||
270 | endif | ||
269 | 271 | ||
270 | obj-y += common-board-devices.o twl-common.o | 272 | obj-y += common-board-devices.o twl-common.o |
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 4e9071589bfb..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 | } |
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 d73316ed4207..49e64057cb67 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
@@ -413,7 +413,7 @@ static struct omap2_hsmmc_info mmc[] = { | |||
413 | .caps = MMC_CAP_4_BIT_DATA, | 413 | .caps = MMC_CAP_4_BIT_DATA, |
414 | .gpio_cd = -EINVAL, | 414 | .gpio_cd = -EINVAL, |
415 | .gpio_wp = -EINVAL, | 415 | .gpio_wp = -EINVAL, |
416 | 416 | .deferred = true, | |
417 | }, | 417 | }, |
418 | { | 418 | { |
419 | .mmc = 2, | 419 | .mmc = 2, |
@@ -471,7 +471,7 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio, | |||
471 | 471 | ||
472 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 472 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
473 | mmc[0].gpio_cd = gpio + 0; | 473 | mmc[0].gpio_cd = gpio + 0; |
474 | omap2_hsmmc_init(mmc); | 474 | omap_hsmmc_late_init(mmc); |
475 | 475 | ||
476 | return 0; | 476 | return 0; |
477 | } | 477 | } |
@@ -639,6 +639,7 @@ static void __init cm_t3x_common_init(void) | |||
639 | omap_serial_init(); | 639 | omap_serial_init(); |
640 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, | 640 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, |
641 | mt46h32m32lf6_sdrc_params); | 641 | mt46h32m32lf6_sdrc_params); |
642 | omap_hsmmc_init(mmc); | ||
642 | cm_t35_init_i2c(); | 643 | cm_t35_init_i2c(); |
643 | omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); | 644 | omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); |
644 | cm_t35_init_ethernet(); | 645 | 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-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..d50a562adfa0 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/io.h> | 27 | #include <linux/io.h> |
28 | #include <linux/smsc911x.h> | 28 | #include <linux/smsc911x.h> |
29 | #include <linux/mmc/host.h> | 29 | #include <linux/mmc/host.h> |
30 | #include <linux/gpio.h> | ||
31 | 30 | ||
32 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
33 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
@@ -424,7 +423,7 @@ static void __init omap_ldp_init(void) | |||
424 | board_nand_init(ldp_nand_partitions, | 423 | board_nand_init(ldp_nand_partitions, |
425 | ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); | 424 | ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); |
426 | 425 | ||
427 | omap2_hsmmc_init(mmc); | 426 | omap_hsmmc_init(mmc); |
428 | ldp_display_init(); | 427 | ldp_display_init(); |
429 | } | 428 | } |
430 | 429 | ||
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index 672262717601..50e40bc3f8f7 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
@@ -36,10 +36,6 @@ | |||
36 | 36 | ||
37 | #include "mux.h" | 37 | #include "mux.h" |
38 | 38 | ||
39 | static int slot1_cover_open; | ||
40 | static int slot2_cover_open; | ||
41 | static struct device *mmc_device; | ||
42 | |||
43 | #define TUSB6010_ASYNC_CS 1 | 39 | #define TUSB6010_ASYNC_CS 1 |
44 | #define TUSB6010_SYNC_CS 4 | 40 | #define TUSB6010_SYNC_CS 4 |
45 | #define TUSB6010_GPIO_INT 58 | 41 | #define TUSB6010_GPIO_INT 58 |
@@ -211,6 +207,10 @@ static struct omap_onenand_platform_data board_onenand_data[] = { | |||
211 | #define N810_EMMC_VSD_GPIO 23 | 207 | #define N810_EMMC_VSD_GPIO 23 |
212 | #define N810_EMMC_VIO_GPIO 9 | 208 | #define N810_EMMC_VIO_GPIO 9 |
213 | 209 | ||
210 | static int slot1_cover_open; | ||
211 | static int slot2_cover_open; | ||
212 | static struct device *mmc_device; | ||
213 | |||
214 | static int n8x0_mmc_switch_slot(struct device *dev, int slot) | 214 | static int n8x0_mmc_switch_slot(struct device *dev, int slot) |
215 | { | 215 | { |
216 | #ifdef CONFIG_MMC_DEBUG | 216 | #ifdef CONFIG_MMC_DEBUG |
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 c877236a8442..a659e198892b 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 |
@@ -644,6 +644,9 @@ static void __init omap3_evm_init(void) | |||
644 | omap_board_config = omap3_evm_config; | 644 | omap_board_config = omap3_evm_config; |
645 | omap_board_config_size = ARRAY_SIZE(omap3_evm_config); | 645 | omap_board_config_size = ARRAY_SIZE(omap3_evm_config); |
646 | 646 | ||
647 | omap_mux_init_gpio(63, OMAP_PIN_INPUT); | ||
648 | omap_hsmmc_init(mmc); | ||
649 | |||
647 | omap3_evm_i2c_init(); | 650 | omap3_evm_i2c_init(); |
648 | 651 | ||
649 | omap_display_init(&omap3_evm_dss_data); | 652 | omap_display_init(&omap3_evm_dss_data); |
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..7184b8b9e38f 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; |
@@ -343,7 +345,7 @@ static struct regulator_consumer_supply pandora_vcc_lcd_supply[] = { | |||
343 | }; | 345 | }; |
344 | 346 | ||
345 | static struct regulator_consumer_supply pandora_usb_phy_supply[] = { | 347 | static struct regulator_consumer_supply pandora_usb_phy_supply[] = { |
346 | REGULATOR_SUPPLY("hsusb0", "ehci-omap.0"), | 348 | REGULATOR_SUPPLY("hsusb1", "ehci-omap.0"), |
347 | }; | 349 | }; |
348 | 350 | ||
349 | /* ads7846 on SPI and 2 nub controllers on I2C */ | 351 | /* ads7846 on SPI and 2 nub controllers on I2C */ |
@@ -561,13 +563,13 @@ static struct platform_device *omap3pandora_devices[] __initdata = { | |||
561 | 563 | ||
562 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { | 564 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { |
563 | 565 | ||
564 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 566 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, |
565 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, | 567 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
566 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | 568 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, |
567 | 569 | ||
568 | .phy_reset = true, | 570 | .phy_reset = true, |
569 | .reset_gpio_port[0] = 16, | 571 | .reset_gpio_port[0] = -EINVAL, |
570 | .reset_gpio_port[1] = -EINVAL, | 572 | .reset_gpio_port[1] = 16, |
571 | .reset_gpio_port[2] = -EINVAL | 573 | .reset_gpio_port[2] = -EINVAL |
572 | }; | 574 | }; |
573 | 575 | ||
@@ -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 28fc271f7031..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 | ||
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 acb4e77b39ef..0e9d89a2048f 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
@@ -1145,7 +1145,7 @@ void __init rx51_peripherals_init(void) | |||
1145 | 1145 | ||
1146 | partition = omap_mux_get("core"); | 1146 | partition = omap_mux_get("core"); |
1147 | if (partition) | 1147 | if (partition) |
1148 | omap2_hsmmc_init(mmc); | 1148 | omap_hsmmc_init(mmc); |
1149 | 1149 | ||
1150 | rx51_charger_init(); | 1150 | rx51_charger_init(); |
1151 | } | 1151 | } |
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index c126461836ac..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"); |
@@ -301,6 +302,7 @@ void __init zoom_peripherals_init(void) | |||
301 | if (ret) | 302 | if (ret) |
302 | pr_err("error setting wl12xx data: %d\n", ret); | 303 | pr_err("error setting wl12xx data: %d\n", ret); |
303 | 304 | ||
305 | omap_hsmmc_init(mmc); | ||
304 | omap_i2c_init(); | 306 | omap_i2c_init(); |
305 | platform_device_register(&omap_vwlan_device); | 307 | platform_device_register(&omap_vwlan_device); |
306 | usb_musb_init(NULL); | 308 | usb_musb_init(NULL); |
diff --git a/arch/arm/mach-omap2/clkt_clksel.c b/arch/arm/mach-omap2/clkt_clksel.c index e25364de028a..04d551b1f7f7 100644 --- a/arch/arm/mach-omap2/clkt_clksel.c +++ b/arch/arm/mach-omap2/clkt_clksel.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include <linux/errno.h> | 43 | #include <linux/errno.h> |
44 | #include <linux/clk.h> | 44 | #include <linux/clk.h> |
45 | #include <linux/io.h> | 45 | #include <linux/io.h> |
46 | #include <linux/bug.h> | ||
46 | 47 | ||
47 | #include <plat/clock.h> | 48 | #include <plat/clock.h> |
48 | 49 | ||
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c index bcb0c5817167..799a617ade30 100644 --- a/arch/arm/mach-omap2/common-board-devices.c +++ b/arch/arm/mach-omap2/common-board-devices.c | |||
@@ -76,13 +76,15 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce, | |||
76 | gpio_set_debounce(gpio_pendown, gpio_debounce); | 76 | gpio_set_debounce(gpio_pendown, gpio_debounce); |
77 | } | 77 | } |
78 | 78 | ||
79 | ads7846_config.gpio_pendown = gpio_pendown; | ||
80 | |||
81 | spi_bi->bus_num = bus_num; | 79 | spi_bi->bus_num = bus_num; |
82 | spi_bi->irq = OMAP_GPIO_IRQ(gpio_pendown); | 80 | spi_bi->irq = OMAP_GPIO_IRQ(gpio_pendown); |
83 | 81 | ||
84 | if (board_pdata) | 82 | if (board_pdata) { |
83 | board_pdata->gpio_pendown = gpio_pendown; | ||
85 | spi_bi->platform_data = board_pdata; | 84 | spi_bi->platform_data = board_pdata; |
85 | } else { | ||
86 | ads7846_config.gpio_pendown = gpio_pendown; | ||
87 | } | ||
86 | 88 | ||
87 | spi_register_board_info(&ads7846_spi_board_info, 1); | 89 | spi_register_board_info(&ads7846_spi_board_info, 1); |
88 | } | 90 | } |
diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h index 0ba68d3764bc..96c4bcc0a75c 100644 --- a/arch/arm/mach-omap2/control.h +++ b/arch/arm/mach-omap2/control.h | |||
@@ -339,6 +339,11 @@ | |||
339 | #define AM35XX_VPFE_PCLK_SW_RST BIT(4) | 339 | #define AM35XX_VPFE_PCLK_SW_RST BIT(4) |
340 | 340 | ||
341 | /* | 341 | /* |
342 | * CONTROL AM33XX STATUS register | ||
343 | */ | ||
344 | #define AM33XX_CONTROL_STATUS 0x040 | ||
345 | |||
346 | /* | ||
342 | * CONTROL OMAP STATUS register to identify OMAP3 features | 347 | * CONTROL OMAP STATUS register to identify OMAP3 features |
343 | */ | 348 | */ |
344 | #define OMAP3_CONTROL_OMAP_STATUS 0x044c | 349 | #define OMAP3_CONTROL_OMAP_STATUS 0x044c |
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 3ffefe275ea0..2bda43629b40 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 3677b1f58b85..62e133ca4314 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c | |||
@@ -124,7 +124,7 @@ static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags) | |||
124 | } | 124 | } |
125 | } | 125 | } |
126 | 126 | ||
127 | static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) | 127 | static int __init omap4_dsi_mux_pads(int dsi_id, unsigned lanes) |
128 | { | 128 | { |
129 | u32 enable_mask, enable_shift; | 129 | u32 enable_mask, enable_shift; |
130 | u32 pipd_mask, pipd_shift; | 130 | u32 pipd_mask, pipd_shift; |
@@ -157,7 +157,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) | |||
157 | return 0; | 157 | return 0; |
158 | } | 158 | } |
159 | 159 | ||
160 | int omap_hdmi_init(enum omap_hdmi_flags flags) | 160 | int __init omap_hdmi_init(enum omap_hdmi_flags flags) |
161 | { | 161 | { |
162 | if (cpu_is_omap44xx()) | 162 | if (cpu_is_omap44xx()) |
163 | omap4_hdmi_mux_pads(flags); | 163 | omap4_hdmi_mux_pads(flags); |
@@ -165,7 +165,7 @@ int omap_hdmi_init(enum omap_hdmi_flags flags) | |||
165 | return 0; | 165 | return 0; |
166 | } | 166 | } |
167 | 167 | ||
168 | static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) | 168 | static int __init omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) |
169 | { | 169 | { |
170 | if (cpu_is_omap44xx()) | 170 | if (cpu_is_omap44xx()) |
171 | return omap4_dsi_mux_pads(dsi_id, lane_mask); | 171 | return omap4_dsi_mux_pads(dsi_id, lane_mask); |
@@ -173,7 +173,7 @@ static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) | |||
173 | return 0; | 173 | return 0; |
174 | } | 174 | } |
175 | 175 | ||
176 | static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask) | 176 | static void __init omap_dsi_disable_pads(int dsi_id, unsigned lane_mask) |
177 | { | 177 | { |
178 | if (cpu_is_omap44xx()) | 178 | if (cpu_is_omap44xx()) |
179 | omap4_dsi_mux_pads(dsi_id, 0); | 179 | omap4_dsi_mux_pads(dsi_id, 0); |
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index a59a45a0096e..b19d8496c16e 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c | |||
@@ -227,7 +227,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) | |||
227 | 227 | ||
228 | dma_stride = OMAP2_DMA_STRIDE; | 228 | dma_stride = OMAP2_DMA_STRIDE; |
229 | dma_common_ch_start = CSDP; | 229 | dma_common_ch_start = CSDP; |
230 | if (cpu_is_omap3630() || cpu_is_omap4430()) | 230 | if (cpu_is_omap3630() || cpu_is_omap44xx()) |
231 | dma_common_ch_end = CCDN; | 231 | dma_common_ch_end = CCDN; |
232 | else | 232 | else |
233 | dma_common_ch_end = CCFN; | 233 | dma_common_ch_end = CCFN; |
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/gpmc-smsc911x.c b/arch/arm/mach-omap2/gpmc-smsc911x.c index bbb870c04a5e..5e5880d6d099 100644 --- a/arch/arm/mach-omap2/gpmc-smsc911x.c +++ b/arch/arm/mach-omap2/gpmc-smsc911x.c | |||
@@ -101,10 +101,13 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data) | |||
101 | 101 | ||
102 | gpmc_cfg = board_data; | 102 | gpmc_cfg = board_data; |
103 | 103 | ||
104 | ret = platform_device_register(&gpmc_smsc911x_regulator); | 104 | if (!gpmc_cfg->id) { |
105 | if (ret < 0) { | 105 | ret = platform_device_register(&gpmc_smsc911x_regulator); |
106 | pr_err("Unable to register smsc911x regulators: %d\n", ret); | 106 | if (ret < 0) { |
107 | return; | 107 | pr_err("Unable to register smsc911x regulators: %d\n", |
108 | ret); | ||
109 | return; | ||
110 | } | ||
108 | } | 111 | } |
109 | 112 | ||
110 | if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) { | 113 | if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) { |
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index dfffbbf4c009..00d510858e28 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -888,6 +888,7 @@ int gpmc_enable_hwecc(int cs, int mode, int dev_width, int ecc_size) | |||
888 | gpmc_write_reg(GPMC_ECC_CONFIG, val); | 888 | gpmc_write_reg(GPMC_ECC_CONFIG, val); |
889 | return 0; | 889 | return 0; |
890 | } | 890 | } |
891 | EXPORT_SYMBOL_GPL(gpmc_enable_hwecc); | ||
891 | 892 | ||
892 | /** | 893 | /** |
893 | * gpmc_calculate_ecc - generate non-inverted ecc bytes | 894 | * gpmc_calculate_ecc - generate non-inverted ecc bytes |
@@ -918,3 +919,4 @@ int gpmc_calculate_ecc(int cs, const u_char *dat, u_char *ecc_code) | |||
918 | gpmc_ecc_used = -EINVAL; | 919 | gpmc_ecc_used = -EINVAL; |
919 | return 0; | 920 | return 0; |
920 | } | 921 | } |
922 | EXPORT_SYMBOL_GPL(gpmc_calculate_ecc); | ||
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index 19dd1657245c..8121720e942f 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c | |||
@@ -293,8 +293,8 @@ static inline void omap_hsmmc_mux(struct omap_mmc_platform_data *mmc_controller, | |||
293 | } | 293 | } |
294 | } | 294 | } |
295 | 295 | ||
296 | static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, | 296 | static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, |
297 | struct omap_mmc_platform_data *mmc) | 297 | struct omap_mmc_platform_data *mmc) |
298 | { | 298 | { |
299 | char *hc_name; | 299 | char *hc_name; |
300 | 300 | ||
@@ -429,66 +429,131 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, | |||
429 | } | 429 | } |
430 | 430 | ||
431 | static int omap_hsmmc_done; | 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 | |||
432 | #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 | 466 | #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 |
433 | 467 | ||
434 | void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) | 468 | static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo, |
469 | int ctrl_nr) | ||
435 | { | 470 | { |
436 | struct omap_hwmod *oh; | 471 | struct omap_hwmod *oh; |
472 | struct omap_hwmod *ohs[1]; | ||
473 | struct omap_device *od; | ||
437 | struct platform_device *pdev; | 474 | struct platform_device *pdev; |
438 | char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; | 475 | char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; |
439 | struct omap_mmc_platform_data *mmc_data; | 476 | struct omap_mmc_platform_data *mmc_data; |
440 | struct omap_mmc_dev_attr *mmc_dev_attr; | 477 | struct omap_mmc_dev_attr *mmc_dev_attr; |
441 | char *name; | 478 | char *name; |
442 | int l; | 479 | int res; |
443 | 480 | ||
444 | mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL); | 481 | mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL); |
445 | if (!mmc_data) { | 482 | if (!mmc_data) { |
446 | pr_err("Cannot allocate memory for mmc device!\n"); | 483 | pr_err("Cannot allocate memory for mmc device!\n"); |
447 | goto done; | 484 | return; |
448 | } | 485 | } |
449 | 486 | ||
450 | if (omap_hsmmc_pdata_init(hsmmcinfo, mmc_data) < 0) { | 487 | res = omap_hsmmc_pdata_init(hsmmcinfo, mmc_data); |
451 | pr_err("%s fails!\n", __func__); | 488 | if (res < 0) |
452 | goto done; | 489 | goto free_mmc; |
453 | } | 490 | |
454 | omap_hsmmc_mux(mmc_data, (ctrl_nr - 1)); | 491 | omap_hsmmc_mux(mmc_data, (ctrl_nr - 1)); |
455 | 492 | ||
456 | name = "omap_hsmmc"; | 493 | name = "omap_hsmmc"; |
457 | 494 | res = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN, | |
458 | l = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN, | ||
459 | "mmc%d", ctrl_nr); | 495 | "mmc%d", ctrl_nr); |
460 | WARN(l >= MAX_OMAP_MMC_HWMOD_NAME_LEN, | 496 | WARN(res >= MAX_OMAP_MMC_HWMOD_NAME_LEN, |
461 | "String buffer overflow in MMC%d device setup\n", ctrl_nr); | 497 | "String buffer overflow in MMC%d device setup\n", ctrl_nr); |
498 | |||
462 | oh = omap_hwmod_lookup(oh_name); | 499 | oh = omap_hwmod_lookup(oh_name); |
463 | if (!oh) { | 500 | if (!oh) { |
464 | pr_err("Could not look up %s\n", oh_name); | 501 | pr_err("Could not look up %s\n", oh_name); |
465 | kfree(mmc_data->slots[0].name); | 502 | goto free_name; |
466 | goto done; | ||
467 | } | 503 | } |
468 | 504 | ohs[0] = oh; | |
469 | if (oh->dev_attr != NULL) { | 505 | if (oh->dev_attr != NULL) { |
470 | mmc_dev_attr = oh->dev_attr; | 506 | mmc_dev_attr = oh->dev_attr; |
471 | mmc_data->controller_flags = mmc_dev_attr->flags; | 507 | mmc_data->controller_flags = mmc_dev_attr->flags; |
472 | } | 508 | } |
473 | 509 | ||
474 | pdev = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, | 510 | pdev = platform_device_alloc(name, ctrl_nr - 1); |
475 | sizeof(struct omap_mmc_platform_data), NULL, 0, false); | 511 | if (!pdev) { |
476 | if (IS_ERR(pdev)) { | 512 | pr_err("Could not allocate pdev for %s\n", name); |
477 | WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name); | 513 | goto free_name; |
478 | kfree(mmc_data->slots[0].name); | ||
479 | goto done; | ||
480 | } | 514 | } |
481 | /* | 515 | dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id); |
482 | * return device handle to board setup code | 516 | |
483 | * required to populate for regulator framework structure | 517 | od = omap_device_alloc(pdev, ohs, 1, NULL, 0); |
484 | */ | 518 | if (!od) { |
485 | 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; | ||
534 | |||
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); | ||
486 | 551 | ||
487 | done: | 552 | free_mmc: |
488 | kfree(mmc_data); | 553 | kfree(mmc_data); |
489 | } | 554 | } |
490 | 555 | ||
491 | void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) | 556 | void __init omap_hsmmc_init(struct omap2_hsmmc_info *controllers) |
492 | { | 557 | { |
493 | u32 reg; | 558 | u32 reg; |
494 | 559 | ||
@@ -521,7 +586,7 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
521 | } | 586 | } |
522 | 587 | ||
523 | for (; controllers->mmc; controllers++) | 588 | for (; controllers->mmc; controllers++) |
524 | omap_init_hsmmc(controllers, controllers->mmc); | 589 | omap_hsmmc_init_one(controllers, controllers->mmc); |
525 | 590 | ||
526 | } | 591 | } |
527 | 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/id.c b/arch/arm/mach-omap2/id.c index 719ee423abe2..613e2c1eeb2f 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -44,6 +44,8 @@ int omap_type(void) | |||
44 | 44 | ||
45 | if (cpu_is_omap24xx()) { | 45 | if (cpu_is_omap24xx()) { |
46 | val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); | 46 | val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); |
47 | } else if (cpu_is_am33xx()) { | ||
48 | val = omap_ctrl_readl(AM33XX_CONTROL_STATUS); | ||
47 | } else if (cpu_is_omap34xx()) { | 49 | } else if (cpu_is_omap34xx()) { |
48 | val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); | 50 | val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); |
49 | } else if (cpu_is_omap44xx()) { | 51 | } else if (cpu_is_omap44xx()) { |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index fb11b44fbdec..24ad0d154519 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -43,14 +43,13 @@ | |||
43 | #include "clockdomain.h" | 43 | #include "clockdomain.h" |
44 | #include <plat/omap_hwmod.h> | 44 | #include <plat/omap_hwmod.h> |
45 | #include <plat/multi.h> | 45 | #include <plat/multi.h> |
46 | #include "common.h" | ||
47 | 46 | ||
48 | /* | 47 | /* |
49 | * The machine specific code may provide the extra mapping besides the | 48 | * The machine specific code may provide the extra mapping besides the |
50 | * default mapping provided here. | 49 | * default mapping provided here. |
51 | */ | 50 | */ |
52 | 51 | ||
53 | #ifdef CONFIG_ARCH_OMAP2 | 52 | #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) |
54 | static struct map_desc omap24xx_io_desc[] __initdata = { | 53 | static struct map_desc omap24xx_io_desc[] __initdata = { |
55 | { | 54 | { |
56 | .virtual = L3_24XX_VIRT, | 55 | .virtual = L3_24XX_VIRT, |
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 611a0e3d54ca..f26b2faa1694 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -100,8 +100,8 @@ void omap_mux_write_array(struct omap_mux_partition *partition, | |||
100 | 100 | ||
101 | static char *omap_mux_options; | 101 | static char *omap_mux_options; |
102 | 102 | ||
103 | static int _omap_mux_init_gpio(struct omap_mux_partition *partition, | 103 | static int __init _omap_mux_init_gpio(struct omap_mux_partition *partition, |
104 | int gpio, int val) | 104 | int gpio, int val) |
105 | { | 105 | { |
106 | struct omap_mux_entry *e; | 106 | struct omap_mux_entry *e; |
107 | struct omap_mux *gpio_mux = NULL; | 107 | struct omap_mux *gpio_mux = NULL; |
@@ -145,7 +145,7 @@ static int _omap_mux_init_gpio(struct omap_mux_partition *partition, | |||
145 | return 0; | 145 | return 0; |
146 | } | 146 | } |
147 | 147 | ||
148 | int omap_mux_init_gpio(int gpio, int val) | 148 | int __init omap_mux_init_gpio(int gpio, int val) |
149 | { | 149 | { |
150 | struct omap_mux_partition *partition; | 150 | struct omap_mux_partition *partition; |
151 | int ret; | 151 | int ret; |
@@ -159,9 +159,9 @@ int omap_mux_init_gpio(int gpio, int val) | |||
159 | return -ENODEV; | 159 | return -ENODEV; |
160 | } | 160 | } |
161 | 161 | ||
162 | static int _omap_mux_get_by_name(struct omap_mux_partition *partition, | 162 | static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition, |
163 | const char *muxname, | 163 | const char *muxname, |
164 | struct omap_mux **found_mux) | 164 | struct omap_mux **found_mux) |
165 | { | 165 | { |
166 | struct omap_mux *mux = NULL; | 166 | struct omap_mux *mux = NULL; |
167 | struct omap_mux_entry *e; | 167 | struct omap_mux_entry *e; |
@@ -218,7 +218,7 @@ static int _omap_mux_get_by_name(struct omap_mux_partition *partition, | |||
218 | return -ENODEV; | 218 | return -ENODEV; |
219 | } | 219 | } |
220 | 220 | ||
221 | static int | 221 | static int __init |
222 | omap_mux_get_by_name(const char *muxname, | 222 | omap_mux_get_by_name(const char *muxname, |
223 | struct omap_mux_partition **found_partition, | 223 | struct omap_mux_partition **found_partition, |
224 | struct omap_mux **found_mux) | 224 | struct omap_mux **found_mux) |
@@ -240,7 +240,7 @@ omap_mux_get_by_name(const char *muxname, | |||
240 | return -ENODEV; | 240 | return -ENODEV; |
241 | } | 241 | } |
242 | 242 | ||
243 | int omap_mux_init_signal(const char *muxname, int val) | 243 | int __init omap_mux_init_signal(const char *muxname, int val) |
244 | { | 244 | { |
245 | struct omap_mux_partition *partition = NULL; | 245 | struct omap_mux_partition *partition = NULL; |
246 | struct omap_mux *mux = NULL; | 246 | struct omap_mux *mux = NULL; |
diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c index adbe4d8c7caf..56c345b8b931 100644 --- a/arch/arm/mach-omap2/omap-hotplug.c +++ b/arch/arm/mach-omap2/omap-hotplug.c | |||
@@ -33,7 +33,7 @@ int platform_cpu_kill(unsigned int cpu) | |||
33 | * platform-specific code to shutdown a CPU | 33 | * platform-specific code to shutdown a CPU |
34 | * Called with IRQs disabled | 34 | * Called with IRQs disabled |
35 | */ | 35 | */ |
36 | void platform_cpu_die(unsigned int cpu) | 36 | void __ref platform_cpu_die(unsigned int cpu) |
37 | { | 37 | { |
38 | unsigned int this_cpu; | 38 | unsigned int this_cpu; |
39 | 39 | ||
diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c index 1d5d01056558..fe9ab7c58fae 100644 --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c | |||
@@ -300,7 +300,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) | |||
300 | * @cpu : CPU ID | 300 | * @cpu : CPU ID |
301 | * @power_state: CPU low power state. | 301 | * @power_state: CPU low power state. |
302 | */ | 302 | */ |
303 | int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) | 303 | int __cpuinit omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) |
304 | { | 304 | { |
305 | unsigned int cpu_state = 0; | 305 | unsigned int cpu_state = 0; |
306 | 306 | ||
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c index d3d8971d7f30..42cd7fb52414 100644 --- a/arch/arm/mach-omap2/omap-wakeupgen.c +++ b/arch/arm/mach-omap2/omap-wakeupgen.c | |||
@@ -43,7 +43,6 @@ | |||
43 | 43 | ||
44 | static void __iomem *wakeupgen_base; | 44 | static void __iomem *wakeupgen_base; |
45 | static void __iomem *sar_base; | 45 | static void __iomem *sar_base; |
46 | static DEFINE_PER_CPU(u32 [NR_REG_BANKS], irqmasks); | ||
47 | static DEFINE_SPINLOCK(wakeupgen_lock); | 46 | static DEFINE_SPINLOCK(wakeupgen_lock); |
48 | static unsigned int irq_target_cpu[NR_IRQS]; | 47 | static unsigned int irq_target_cpu[NR_IRQS]; |
49 | 48 | ||
@@ -67,14 +66,6 @@ static inline void sar_writel(u32 val, u32 offset, u8 idx) | |||
67 | __raw_writel(val, sar_base + offset + (idx * 4)); | 66 | __raw_writel(val, sar_base + offset + (idx * 4)); |
68 | } | 67 | } |
69 | 68 | ||
70 | static void _wakeupgen_set_all(unsigned int cpu, unsigned int reg) | ||
71 | { | ||
72 | u8 i; | ||
73 | |||
74 | for (i = 0; i < NR_REG_BANKS; i++) | ||
75 | wakeupgen_writel(reg, i, cpu); | ||
76 | } | ||
77 | |||
78 | static inline int _wakeupgen_get_irq_info(u32 irq, u32 *bit_posn, u8 *reg_index) | 69 | static inline int _wakeupgen_get_irq_info(u32 irq, u32 *bit_posn, u8 *reg_index) |
79 | { | 70 | { |
80 | unsigned int spi_irq; | 71 | unsigned int spi_irq; |
@@ -130,22 +121,6 @@ static void _wakeupgen_set(unsigned int irq, unsigned int cpu) | |||
130 | wakeupgen_writel(val, i, cpu); | 121 | wakeupgen_writel(val, i, cpu); |
131 | } | 122 | } |
132 | 123 | ||
133 | static void _wakeupgen_save_masks(unsigned int cpu) | ||
134 | { | ||
135 | u8 i; | ||
136 | |||
137 | for (i = 0; i < NR_REG_BANKS; i++) | ||
138 | per_cpu(irqmasks, cpu)[i] = wakeupgen_readl(i, cpu); | ||
139 | } | ||
140 | |||
141 | static void _wakeupgen_restore_masks(unsigned int cpu) | ||
142 | { | ||
143 | u8 i; | ||
144 | |||
145 | for (i = 0; i < NR_REG_BANKS; i++) | ||
146 | wakeupgen_writel(per_cpu(irqmasks, cpu)[i], i, cpu); | ||
147 | } | ||
148 | |||
149 | /* | 124 | /* |
150 | * Architecture specific Mask extension | 125 | * Architecture specific Mask extension |
151 | */ | 126 | */ |
@@ -170,6 +145,33 @@ static void wakeupgen_unmask(struct irq_data *d) | |||
170 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | 145 | spin_unlock_irqrestore(&wakeupgen_lock, flags); |
171 | } | 146 | } |
172 | 147 | ||
148 | #ifdef CONFIG_HOTPLUG_CPU | ||
149 | static DEFINE_PER_CPU(u32 [NR_REG_BANKS], irqmasks); | ||
150 | |||
151 | static void _wakeupgen_save_masks(unsigned int cpu) | ||
152 | { | ||
153 | u8 i; | ||
154 | |||
155 | for (i = 0; i < NR_REG_BANKS; i++) | ||
156 | per_cpu(irqmasks, cpu)[i] = wakeupgen_readl(i, cpu); | ||
157 | } | ||
158 | |||
159 | static void _wakeupgen_restore_masks(unsigned int cpu) | ||
160 | { | ||
161 | u8 i; | ||
162 | |||
163 | for (i = 0; i < NR_REG_BANKS; i++) | ||
164 | wakeupgen_writel(per_cpu(irqmasks, cpu)[i], i, cpu); | ||
165 | } | ||
166 | |||
167 | static void _wakeupgen_set_all(unsigned int cpu, unsigned int reg) | ||
168 | { | ||
169 | u8 i; | ||
170 | |||
171 | for (i = 0; i < NR_REG_BANKS; i++) | ||
172 | wakeupgen_writel(reg, i, cpu); | ||
173 | } | ||
174 | |||
173 | /* | 175 | /* |
174 | * Mask or unmask all interrupts on given CPU. | 176 | * Mask or unmask all interrupts on given CPU. |
175 | * 0 = Mask all interrupts on the 'cpu' | 177 | * 0 = Mask all interrupts on the 'cpu' |
@@ -191,6 +193,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set) | |||
191 | } | 193 | } |
192 | spin_unlock_irqrestore(&wakeupgen_lock, flags); | 194 | spin_unlock_irqrestore(&wakeupgen_lock, flags); |
193 | } | 195 | } |
196 | #endif | ||
194 | 197 | ||
195 | #ifdef CONFIG_CPU_PM | 198 | #ifdef CONFIG_CPU_PM |
196 | /* | 199 | /* |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index ee3624bd1996..08daa5e0eb5f 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <plat/mcspi.h> | 28 | #include <plat/mcspi.h> |
29 | #include <plat/mcbsp.h> | 29 | #include <plat/mcbsp.h> |
30 | #include <plat/mmc.h> | 30 | #include <plat/mmc.h> |
31 | #include <plat/i2c.h> | ||
32 | #include <plat/dmtimer.h> | 31 | #include <plat/dmtimer.h> |
33 | #include <plat/common.h> | 32 | #include <plat/common.h> |
34 | 33 | ||
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 5a65dd04aa38..184ae21feea7 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; |
@@ -49,7 +49,7 @@ static int _init_omap_device(char *name) | |||
49 | /* | 49 | /* |
50 | * Build omap_devices for processors and bus. | 50 | * Build omap_devices for processors and bus. |
51 | */ | 51 | */ |
52 | static void omap2_init_processor_devices(void) | 52 | static void __init omap2_init_processor_devices(void) |
53 | { | 53 | { |
54 | _init_omap_device("mpu"); | 54 | _init_omap_device("mpu"); |
55 | if (omap3_has_iva()) | 55 | if (omap3_has_iva()) |
diff --git a/arch/arm/mach-omap2/powerdomain-common.c b/arch/arm/mach-omap2/powerdomain-common.c index f97afff68d6d..c0aeabfcf009 100644 --- a/arch/arm/mach-omap2/powerdomain-common.c +++ b/arch/arm/mach-omap2/powerdomain-common.c | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/bug.h> | ||
16 | #include "pm.h" | 17 | #include "pm.h" |
17 | #include "cm.h" | 18 | #include "cm.h" |
18 | #include "cm-regbits-34xx.h" | 19 | #include "cm-regbits-34xx.h" |
diff --git a/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c b/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c index 6a17e4ca1d79..0f0a9f1592fe 100644 --- a/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c +++ b/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/bug.h> | ||
18 | 19 | ||
19 | #include <plat/prcm.h> | 20 | #include <plat/prcm.h> |
20 | 21 | ||
diff --git a/arch/arm/mach-omap2/powerdomain44xx.c b/arch/arm/mach-omap2/powerdomain44xx.c index a7880af4b3d9..601325b852a4 100644 --- a/arch/arm/mach-omap2/powerdomain44xx.c +++ b/arch/arm/mach-omap2/powerdomain44xx.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/bug.h> | ||
18 | 19 | ||
19 | #include "powerdomain.h" | 20 | #include "powerdomain.h" |
20 | #include <plat/prcm.h> | 21 | #include <plat/prcm.h> |
diff --git a/arch/arm/mach-omap2/powerdomains3xxx_data.c b/arch/arm/mach-omap2/powerdomains3xxx_data.c index 8ef26daeed68..b7ea468eea32 100644 --- a/arch/arm/mach-omap2/powerdomains3xxx_data.c +++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/bug.h> | ||
16 | 17 | ||
17 | #include <plat/cpu.h> | 18 | #include <plat/cpu.h> |
18 | 19 | ||
diff --git a/arch/arm/mach-omap2/sr_device.c b/arch/arm/mach-omap2/sr_device.c index 60293370a2a7..a503e1e8358c 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 175b7d86d86a..84da34f9a7cf 100644 --- a/arch/arm/mach-omap2/vc.c +++ b/arch/arm/mach-omap2/vc.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
11 | #include <linux/delay.h> | 11 | #include <linux/delay.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/bug.h> | ||
13 | 14 | ||
14 | #include <plat/cpu.h> | 15 | #include <plat/cpu.h> |
15 | 16 | ||
diff --git a/arch/arm/mach-omap2/vp.c b/arch/arm/mach-omap2/vp.c index 0df88820978d..f95c1bad9dc6 100644 --- a/arch/arm/mach-omap2/vp.c +++ b/arch/arm/mach-omap2/vp.c | |||
@@ -61,8 +61,8 @@ void __init omap_vp_init(struct voltagedomain *voltdm) | |||
61 | vddmin = voltdm->pmic->vp_vddmin; | 61 | vddmin = voltdm->pmic->vp_vddmin; |
62 | vddmax = voltdm->pmic->vp_vddmax; | 62 | vddmax = voltdm->pmic->vp_vddmax; |
63 | 63 | ||
64 | waittime = ((voltdm->pmic->step_size / voltdm->pmic->slew_rate) * | 64 | waittime = DIV_ROUND_UP(voltdm->pmic->step_size * sys_clk_rate, |
65 | sys_clk_rate) / 1000; | 65 | 1000 * voltdm->pmic->slew_rate); |
66 | vstepmin = voltdm->pmic->vp_vstepmin; | 66 | vstepmin = voltdm->pmic->vp_vstepmin; |
67 | vstepmax = voltdm->pmic->vp_vstepmax; | 67 | vstepmax = voltdm->pmic->vp_vstepmax; |
68 | 68 | ||
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig index c59e8b892d6b..9ec635812349 100644 --- a/arch/arm/mach-ux500/Kconfig +++ b/arch/arm/mach-ux500/Kconfig | |||
@@ -8,47 +8,55 @@ config UX500_SOC_COMMON | |||
8 | select PL310_ERRATA_753970 | 8 | select PL310_ERRATA_753970 |
9 | select ARM_ERRATA_754322 | 9 | select ARM_ERRATA_754322 |
10 | select ARM_ERRATA_764369 | 10 | select ARM_ERRATA_764369 |
11 | 11 | select CACHE_L2X0 | |
12 | menu "Ux500 SoC" | ||
13 | 12 | ||
14 | config UX500_SOC_DB5500 | 13 | config UX500_SOC_DB5500 |
15 | bool "DB5500" | 14 | bool |
16 | select MFD_DB5500_PRCMU | 15 | select MFD_DB5500_PRCMU |
17 | 16 | ||
18 | config UX500_SOC_DB8500 | 17 | config UX500_SOC_DB8500 |
19 | bool "DB8500" | 18 | bool |
20 | select MFD_DB8500_PRCMU | 19 | select MFD_DB8500_PRCMU |
21 | select REGULATOR_DB8500_PRCMU | 20 | select REGULATOR_DB8500_PRCMU |
22 | 21 | select CPU_FREQ_TABLE if CPU_FREQ | |
23 | endmenu | ||
24 | 22 | ||
25 | menu "Ux500 target platform (boards)" | 23 | menu "Ux500 target platform (boards)" |
26 | 24 | ||
27 | config MACH_U8500 | 25 | config MACH_MOP500 |
28 | bool "U8500 Development platform" | 26 | bool "U8500 Development platform, MOP500 versions" |
29 | depends on UX500_SOC_DB8500 | 27 | select UX500_SOC_DB8500 |
30 | select TPS6105X | 28 | select I2C |
29 | select I2C_NOMADIK | ||
31 | help | 30 | help |
32 | Include support for the mop500 development platform. | 31 | Include support for the MOP500 development platform. |
33 | 32 | ||
34 | config MACH_HREFV60 | 33 | config MACH_HREFV60 |
35 | bool "U85000 Development platform, HREFv60 version" | 34 | bool "U8500 Development platform, HREFv60 version" |
36 | depends on UX500_SOC_DB8500 | 35 | select MACH_MOP500 |
37 | help | 36 | help |
38 | Include support for the HREFv60 new development platform. | 37 | Include support for the HREFv60 new development platform. |
38 | Includes HREFv70, v71 etc. | ||
39 | 39 | ||
40 | config MACH_SNOWBALL | 40 | config MACH_SNOWBALL |
41 | bool "U8500 Snowball platform" | 41 | bool "U8500 Snowball platform" |
42 | depends on UX500_SOC_DB8500 | 42 | select MACH_MOP500 |
43 | select MACH_U8500 | ||
44 | help | 43 | help |
45 | Include support for the snowball development platform. | 44 | Include support for the snowball development platform. |
46 | 45 | ||
47 | config MACH_U5500 | 46 | config MACH_U5500 |
48 | bool "U5500 Development platform" | 47 | bool "U5500 Development platform" |
49 | depends on UX500_SOC_DB5500 | 48 | select UX500_SOC_DB5500 |
50 | help | 49 | help |
51 | Include support for the U5500 development platform. | 50 | Include support for the U5500 development platform. |
51 | |||
52 | config UX500_AUTO_PLATFORM | ||
53 | def_bool y | ||
54 | depends on !MACH_U5500 | ||
55 | select MACH_MOP500 | ||
56 | help | ||
57 | At least one platform needs to be selected in order to build | ||
58 | a working kernel. If everything else is disabled, this | ||
59 | automatically enables MACH_MOP500. | ||
52 | endmenu | 60 | endmenu |
53 | 61 | ||
54 | config UX500_DEBUG_UART | 62 | config UX500_DEBUG_UART |
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile index 6bd2f451c185..8dd75f210d2b 100644 --- a/arch/arm/mach-ux500/Makefile +++ b/arch/arm/mach-ux500/Makefile | |||
@@ -7,7 +7,7 @@ obj-y := clock.o cpu.o devices.o devices-common.o \ | |||
7 | obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o | 7 | obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o |
8 | obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o dma-db5500.o | 8 | obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o dma-db5500.o |
9 | obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o | 9 | obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o |
10 | obj-$(CONFIG_MACH_U8500) += board-mop500.o board-mop500-sdi.o \ | 10 | obj-$(CONFIG_MACH_MOP500) += board-mop500.o board-mop500-sdi.o \ |
11 | board-mop500-regulators.o \ | 11 | board-mop500-regulators.o \ |
12 | board-mop500-uib.o board-mop500-stuib.o \ | 12 | board-mop500-uib.o board-mop500-stuib.o \ |
13 | board-mop500-u8500uib.o \ | 13 | board-mop500-u8500uib.o \ |
diff --git a/arch/arm/mach-ux500/board-mop500-regulators.c b/arch/arm/mach-ux500/board-mop500-regulators.c index 2735d03996cf..52426a425787 100644 --- a/arch/arm/mach-ux500/board-mop500-regulators.c +++ b/arch/arm/mach-ux500/board-mop500-regulators.c | |||
@@ -74,6 +74,26 @@ static struct regulator_consumer_supply ab8500_vtvout_consumers[] = { | |||
74 | REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"), | 74 | REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"), |
75 | }; | 75 | }; |
76 | 76 | ||
77 | static struct regulator_consumer_supply ab8500_vaud_consumers[] = { | ||
78 | /* AB8500 audio-codec main supply */ | ||
79 | REGULATOR_SUPPLY("vaud", "ab8500-codec.0"), | ||
80 | }; | ||
81 | |||
82 | static struct regulator_consumer_supply ab8500_vamic1_consumers[] = { | ||
83 | /* AB8500 audio-codec Mic1 supply */ | ||
84 | REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"), | ||
85 | }; | ||
86 | |||
87 | static struct regulator_consumer_supply ab8500_vamic2_consumers[] = { | ||
88 | /* AB8500 audio-codec Mic2 supply */ | ||
89 | REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"), | ||
90 | }; | ||
91 | |||
92 | static struct regulator_consumer_supply ab8500_vdmic_consumers[] = { | ||
93 | /* AB8500 audio-codec DMic supply */ | ||
94 | REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"), | ||
95 | }; | ||
96 | |||
77 | static struct regulator_consumer_supply ab8500_vintcore_consumers[] = { | 97 | static struct regulator_consumer_supply ab8500_vintcore_consumers[] = { |
78 | /* SoC core supply, no device */ | 98 | /* SoC core supply, no device */ |
79 | REGULATOR_SUPPLY("v-intcore", NULL), | 99 | REGULATOR_SUPPLY("v-intcore", NULL), |
@@ -323,6 +343,8 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = { | |||
323 | .name = "V-AUD", | 343 | .name = "V-AUD", |
324 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | 344 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, |
325 | }, | 345 | }, |
346 | .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers), | ||
347 | .consumer_supplies = ab8500_vaud_consumers, | ||
326 | }, | 348 | }, |
327 | /* supply for v-anamic1 VAMic1-LDO */ | 349 | /* supply for v-anamic1 VAMic1-LDO */ |
328 | [AB8500_LDO_ANAMIC1] = { | 350 | [AB8500_LDO_ANAMIC1] = { |
@@ -330,6 +352,8 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = { | |||
330 | .name = "V-AMIC1", | 352 | .name = "V-AMIC1", |
331 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | 353 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, |
332 | }, | 354 | }, |
355 | .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers), | ||
356 | .consumer_supplies = ab8500_vamic1_consumers, | ||
333 | }, | 357 | }, |
334 | /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */ | 358 | /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */ |
335 | [AB8500_LDO_ANAMIC2] = { | 359 | [AB8500_LDO_ANAMIC2] = { |
@@ -337,6 +361,8 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = { | |||
337 | .name = "V-AMIC2", | 361 | .name = "V-AMIC2", |
338 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | 362 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, |
339 | }, | 363 | }, |
364 | .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers), | ||
365 | .consumer_supplies = ab8500_vamic2_consumers, | ||
340 | }, | 366 | }, |
341 | /* supply for v-dmic, VDMIC LDO */ | 367 | /* supply for v-dmic, VDMIC LDO */ |
342 | [AB8500_LDO_DMIC] = { | 368 | [AB8500_LDO_DMIC] = { |
@@ -344,6 +370,8 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = { | |||
344 | .name = "V-DMIC", | 370 | .name = "V-DMIC", |
345 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | 371 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, |
346 | }, | 372 | }, |
373 | .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers), | ||
374 | .consumer_supplies = ab8500_vdmic_consumers, | ||
347 | }, | 375 | }, |
348 | /* supply for v-intcore12, VINTCORE12 LDO */ | 376 | /* supply for v-intcore12, VINTCORE12 LDO */ |
349 | [AB8500_LDO_INTCORE] = { | 377 | [AB8500_LDO_INTCORE] = { |
diff --git a/arch/arm/mach-ux500/board-mop500-u8500uib.c b/arch/arm/mach-ux500/board-mop500-u8500uib.c index feb5744d98b7..ead91c968ff4 100644 --- a/arch/arm/mach-ux500/board-mop500-u8500uib.c +++ b/arch/arm/mach-ux500/board-mop500-u8500uib.c | |||
@@ -8,7 +8,6 @@ | |||
8 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> |
9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
10 | #include <linux/i2c.h> | 10 | #include <linux/i2c.h> |
11 | #include <linux/gpio.h> | ||
12 | #include <linux/interrupt.h> | 11 | #include <linux/interrupt.h> |
13 | #include <linux/mfd/tc3589x.h> | 12 | #include <linux/mfd/tc3589x.h> |
14 | #include <linux/input/matrix_keypad.h> | 13 | #include <linux/input/matrix_keypad.h> |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index 5c00712907d1..6d672a556df8 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -72,7 +72,7 @@ static struct platform_device snowball_led_dev = { | |||
72 | }; | 72 | }; |
73 | 73 | ||
74 | static struct ab8500_gpio_platform_data ab8500_gpio_pdata = { | 74 | static struct ab8500_gpio_platform_data ab8500_gpio_pdata = { |
75 | .gpio_base = MOP500_AB8500_GPIO(0), | 75 | .gpio_base = MOP500_AB8500_PIN_GPIO(1), |
76 | .irq_base = MOP500_AB8500_VIR_GPIO_IRQ_BASE, | 76 | .irq_base = MOP500_AB8500_VIR_GPIO_IRQ_BASE, |
77 | /* config_reg is the initial configuration of ab8500 pins. | 77 | /* config_reg is the initial configuration of ab8500 pins. |
78 | * The pins can be configured as GPIO or alt functions based | 78 | * The pins can be configured as GPIO or alt functions based |
diff --git a/arch/arm/mach-ux500/board-mop500.h b/arch/arm/mach-ux500/board-mop500.h index f926d3db6207..7ff6cbffc104 100644 --- a/arch/arm/mach-ux500/board-mop500.h +++ b/arch/arm/mach-ux500/board-mop500.h | |||
@@ -63,7 +63,7 @@ | |||
63 | * because the AB8500 GPIO pins are enumbered starting from 1, so the value in | 63 | * because the AB8500 GPIO pins are enumbered starting from 1, so the value in |
64 | * parens matches the GPIO pin number in the data sheet. | 64 | * parens matches the GPIO pin number in the data sheet. |
65 | */ | 65 | */ |
66 | #define MOP500_AB8500_GPIO(x) (MOP500_EGPIO_END + (x) - 1) | 66 | #define MOP500_AB8500_PIN_GPIO(x) (MOP500_EGPIO_END + (x) - 1) |
67 | /*Snowball AB8500 GPIO */ | 67 | /*Snowball AB8500 GPIO */ |
68 | #define SNOWBALL_VSMPS2_1V8_GPIO MOP500_AB8500_PIN_GPIO(1) /* SYSCLKREQ2/GPIO1 */ | 68 | #define SNOWBALL_VSMPS2_1V8_GPIO MOP500_AB8500_PIN_GPIO(1) /* SYSCLKREQ2/GPIO1 */ |
69 | #define SNOWBALL_PM_GPIO1_GPIO MOP500_AB8500_PIN_GPIO(2) /* SYSCLKREQ3/GPIO2 */ | 69 | #define SNOWBALL_PM_GPIO1_GPIO MOP500_AB8500_PIN_GPIO(2) /* SYSCLKREQ3/GPIO2 */ |
diff --git a/arch/arm/mach-ux500/clock.c b/arch/arm/mach-ux500/clock.c index 737907537004..ec35f0aa5665 100644 --- a/arch/arm/mach-ux500/clock.c +++ b/arch/arm/mach-ux500/clock.c | |||
@@ -223,6 +223,13 @@ int clk_set_rate(struct clk *clk, unsigned long rate) | |||
223 | } | 223 | } |
224 | EXPORT_SYMBOL(clk_set_rate); | 224 | EXPORT_SYMBOL(clk_set_rate); |
225 | 225 | ||
226 | int clk_set_parent(struct clk *clk, struct clk *parent) | ||
227 | { | ||
228 | /*TODO*/ | ||
229 | return -ENOSYS; | ||
230 | } | ||
231 | EXPORT_SYMBOL(clk_set_parent); | ||
232 | |||
226 | static void clk_prcmu_enable(struct clk *clk) | 233 | static void clk_prcmu_enable(struct clk *clk) |
227 | { | 234 | { |
228 | void __iomem *cg_set_reg = __io_address(U8500_PRCMU_BASE) | 235 | void __iomem *cg_set_reg = __io_address(U8500_PRCMU_BASE) |
diff --git a/arch/arm/mach-ux500/clock.h b/arch/arm/mach-ux500/clock.h index 074490705229..d776ada08dbf 100644 --- a/arch/arm/mach-ux500/clock.h +++ b/arch/arm/mach-ux500/clock.h | |||
@@ -21,6 +21,7 @@ struct clkops { | |||
21 | void (*enable) (struct clk *); | 21 | void (*enable) (struct clk *); |
22 | void (*disable) (struct clk *); | 22 | void (*disable) (struct clk *); |
23 | unsigned long (*get_rate) (struct clk *); | 23 | unsigned long (*get_rate) (struct clk *); |
24 | int (*set_parent)(struct clk *, struct clk *); | ||
24 | }; | 25 | }; |
25 | 26 | ||
26 | /** | 27 | /** |
diff --git a/arch/arm/mach-ux500/devices-db8500.c b/arch/arm/mach-ux500/devices-db8500.c index a7c6cdc9b11e..6e66d3777ed5 100644 --- a/arch/arm/mach-ux500/devices-db8500.c +++ b/arch/arm/mach-ux500/devices-db8500.c | |||
@@ -101,6 +101,9 @@ static const dma_addr_t dma40_tx_map[DB8500_DMA_NR_DEV] = { | |||
101 | [DB8500_DMA_DEV41_SD_MM3_TX] = -1, | 101 | [DB8500_DMA_DEV41_SD_MM3_TX] = -1, |
102 | [DB8500_DMA_DEV42_SD_MM4_TX] = -1, | 102 | [DB8500_DMA_DEV42_SD_MM4_TX] = -1, |
103 | [DB8500_DMA_DEV43_SD_MM5_TX] = -1, | 103 | [DB8500_DMA_DEV43_SD_MM5_TX] = -1, |
104 | [DB8500_DMA_DEV14_MSP2_TX] = U8500_MSP2_BASE + MSP_TX_RX_REG_OFFSET, | ||
105 | [DB8500_DMA_DEV30_MSP1_TX] = U8500_MSP1_BASE + MSP_TX_RX_REG_OFFSET, | ||
106 | [DB8500_DMA_DEV31_MSP0_TX_SLIM0_CH0_TX] = U8500_MSP0_BASE + MSP_TX_RX_REG_OFFSET, | ||
104 | }; | 107 | }; |
105 | 108 | ||
106 | /* Mapping between source event lines and physical device address */ | 109 | /* Mapping between source event lines and physical device address */ |
@@ -133,6 +136,9 @@ static const dma_addr_t dma40_rx_map[DB8500_DMA_NR_DEV] = { | |||
133 | [DB8500_DMA_DEV41_SD_MM3_RX] = -1, | 136 | [DB8500_DMA_DEV41_SD_MM3_RX] = -1, |
134 | [DB8500_DMA_DEV42_SD_MM4_RX] = -1, | 137 | [DB8500_DMA_DEV42_SD_MM4_RX] = -1, |
135 | [DB8500_DMA_DEV43_SD_MM5_RX] = -1, | 138 | [DB8500_DMA_DEV43_SD_MM5_RX] = -1, |
139 | [DB8500_DMA_DEV14_MSP2_RX] = U8500_MSP2_BASE + MSP_TX_RX_REG_OFFSET, | ||
140 | [DB8500_DMA_DEV30_MSP3_RX] = U8500_MSP3_BASE + MSP_TX_RX_REG_OFFSET, | ||
141 | [DB8500_DMA_DEV31_MSP0_RX_SLIM0_CH0_RX] = U8500_MSP0_BASE + MSP_TX_RX_REG_OFFSET, | ||
136 | }; | 142 | }; |
137 | 143 | ||
138 | /* Reserved event lines for memcpy only */ | 144 | /* Reserved event lines for memcpy only */ |
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h index b6ba26a1367d..d93d6dbef25b 100644 --- a/arch/arm/mach-ux500/include/mach/hardware.h +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
@@ -30,6 +30,8 @@ | |||
30 | #include <mach/db8500-regs.h> | 30 | #include <mach/db8500-regs.h> |
31 | #include <mach/db5500-regs.h> | 31 | #include <mach/db5500-regs.h> |
32 | 32 | ||
33 | #define MSP_TX_RX_REG_OFFSET 0 | ||
34 | |||
33 | #ifndef __ASSEMBLY__ | 35 | #ifndef __ASSEMBLY__ |
34 | 36 | ||
35 | #include <mach/id.h> | 37 | #include <mach/id.h> |
diff --git a/arch/arm/mach-ux500/include/mach/irqs.h b/arch/arm/mach-ux500/include/mach/irqs.h index 9db68d264c5f..c23a6b5f0c4e 100644 --- a/arch/arm/mach-ux500/include/mach/irqs.h +++ b/arch/arm/mach-ux500/include/mach/irqs.h | |||
@@ -43,7 +43,7 @@ | |||
43 | /* This will be overridden by board-specific irq headers */ | 43 | /* This will be overridden by board-specific irq headers */ |
44 | #define IRQ_BOARD_END IRQ_BOARD_START | 44 | #define IRQ_BOARD_END IRQ_BOARD_START |
45 | 45 | ||
46 | #ifdef CONFIG_MACH_U8500 | 46 | #ifdef CONFIG_MACH_MOP500 |
47 | #include <mach/irqs-board-mop500.h> | 47 | #include <mach/irqs-board-mop500.h> |
48 | #endif | 48 | #endif |
49 | 49 | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx25.h b/arch/arm/plat-mxc/include/mach/iomux-mx25.h index f0726d48df22..c61ec0fc10d4 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx25.h +++ b/arch/arm/plat-mxc/include/mach/iomux-mx25.h | |||
@@ -139,15 +139,15 @@ | |||
139 | #define MX25_PAD_NFRB__GPIO_3_31 IOMUX_PAD(0x27c, 0x084, 0x15, 0, 0, NO_PAD_CTRL) | 139 | #define MX25_PAD_NFRB__GPIO_3_31 IOMUX_PAD(0x27c, 0x084, 0x15, 0, 0, NO_PAD_CTRL) |
140 | 140 | ||
141 | #define MX25_PAD_D15__D15 IOMUX_PAD(0x280, 0x088, 0x00, 0, 0, NO_PAD_CTRL) | 141 | #define MX25_PAD_D15__D15 IOMUX_PAD(0x280, 0x088, 0x00, 0, 0, NO_PAD_CTRL) |
142 | #define MX25_PAD_D15__LD16 IOMUX_PAD(0x280, 0x088, 0x01, 0, 0, NO_PAD_CTRL) | 142 | #define MX25_PAD_D15__LD16 IOMUX_PAD(0x280, 0x088, 0x01, 0, 0, PAD_CTL_SRE_FAST) |
143 | #define MX25_PAD_D15__GPIO_4_5 IOMUX_PAD(0x280, 0x088, 0x05, 0, 0, NO_PAD_CTRL) | 143 | #define MX25_PAD_D15__GPIO_4_5 IOMUX_PAD(0x280, 0x088, 0x05, 0, 0, NO_PAD_CTRL) |
144 | 144 | ||
145 | #define MX25_PAD_D14__D14 IOMUX_PAD(0x284, 0x08c, 0x00, 0, 0, NO_PAD_CTRL) | 145 | #define MX25_PAD_D14__D14 IOMUX_PAD(0x284, 0x08c, 0x00, 0, 0, NO_PAD_CTRL) |
146 | #define MX25_PAD_D14__LD17 IOMUX_PAD(0x284, 0x08c, 0x01, 0, 0, NO_PAD_CTRL) | 146 | #define MX25_PAD_D14__LD17 IOMUX_PAD(0x284, 0x08c, 0x01, 0, 0, PAD_CTL_SRE_FAST) |
147 | #define MX25_PAD_D14__GPIO_4_6 IOMUX_PAD(0x284, 0x08c, 0x05, 0, 0, NO_PAD_CTRL) | 147 | #define MX25_PAD_D14__GPIO_4_6 IOMUX_PAD(0x284, 0x08c, 0x05, 0, 0, NO_PAD_CTRL) |
148 | 148 | ||
149 | #define MX25_PAD_D13__D13 IOMUX_PAD(0x288, 0x090, 0x00, 0, 0, NO_PAD_CTRL) | 149 | #define MX25_PAD_D13__D13 IOMUX_PAD(0x288, 0x090, 0x00, 0, 0, NO_PAD_CTRL) |
150 | #define MX25_PAD_D13__LD18 IOMUX_PAD(0x288, 0x090, 0x01, 0, 0, NO_PAD_CTRL) | 150 | #define MX25_PAD_D13__LD18 IOMUX_PAD(0x288, 0x090, 0x01, 0, 0, PAD_CTL_SRE_FAST) |
151 | #define MX25_PAD_D13__GPIO_4_7 IOMUX_PAD(0x288, 0x090, 0x05, 0, 0, NO_PAD_CTRL) | 151 | #define MX25_PAD_D13__GPIO_4_7 IOMUX_PAD(0x288, 0x090, 0x05, 0, 0, NO_PAD_CTRL) |
152 | 152 | ||
153 | #define MX25_PAD_D12__D12 IOMUX_PAD(0x28c, 0x094, 0x00, 0, 0, NO_PAD_CTRL) | 153 | #define MX25_PAD_D12__D12 IOMUX_PAD(0x28c, 0x094, 0x00, 0, 0, NO_PAD_CTRL) |
@@ -192,54 +192,54 @@ | |||
192 | #define MX25_PAD_D0__D0 IOMUX_PAD(0x2bc, 0x0c4, 0x00, 0, 0, NO_PAD_CTRL) | 192 | #define MX25_PAD_D0__D0 IOMUX_PAD(0x2bc, 0x0c4, 0x00, 0, 0, NO_PAD_CTRL) |
193 | #define MX25_PAD_D0__GPIO_4_20 IOMUX_PAD(0x2bc, 0x0c4, 0x05, 0, 0, NO_PAD_CTRL) | 193 | #define MX25_PAD_D0__GPIO_4_20 IOMUX_PAD(0x2bc, 0x0c4, 0x05, 0, 0, NO_PAD_CTRL) |
194 | 194 | ||
195 | #define MX25_PAD_LD0__LD0 IOMUX_PAD(0x2c0, 0x0c8, 0x10, 0, 0, NO_PAD_CTRL) | 195 | #define MX25_PAD_LD0__LD0 IOMUX_PAD(0x2c0, 0x0c8, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
196 | #define MX25_PAD_LD0__CSI_D0 IOMUX_PAD(0x2c0, 0x0c8, 0x12, 0x488, 0, NO_PAD_CTRL) | 196 | #define MX25_PAD_LD0__CSI_D0 IOMUX_PAD(0x2c0, 0x0c8, 0x12, 0x488, 0, NO_PAD_CTRL) |
197 | #define MX25_PAD_LD0__GPIO_2_15 IOMUX_PAD(0x2c0, 0x0c8, 0x15, 0, 0, NO_PAD_CTRL) | 197 | #define MX25_PAD_LD0__GPIO_2_15 IOMUX_PAD(0x2c0, 0x0c8, 0x15, 0, 0, NO_PAD_CTRL) |
198 | 198 | ||
199 | #define MX25_PAD_LD1__LD1 IOMUX_PAD(0x2c4, 0x0cc, 0x10, 0, 0, NO_PAD_CTRL) | 199 | #define MX25_PAD_LD1__LD1 IOMUX_PAD(0x2c4, 0x0cc, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
200 | #define MX25_PAD_LD1__CSI_D1 IOMUX_PAD(0x2c4, 0x0cc, 0x12, 0x48c, 0, NO_PAD_CTRL) | 200 | #define MX25_PAD_LD1__CSI_D1 IOMUX_PAD(0x2c4, 0x0cc, 0x12, 0x48c, 0, NO_PAD_CTRL) |
201 | #define MX25_PAD_LD1__GPIO_2_16 IOMUX_PAD(0x2c4, 0x0cc, 0x15, 0, 0, NO_PAD_CTRL) | 201 | #define MX25_PAD_LD1__GPIO_2_16 IOMUX_PAD(0x2c4, 0x0cc, 0x15, 0, 0, NO_PAD_CTRL) |
202 | 202 | ||
203 | #define MX25_PAD_LD2__LD2 IOMUX_PAD(0x2c8, 0x0d0, 0x10, 0, 0, NO_PAD_CTRL) | 203 | #define MX25_PAD_LD2__LD2 IOMUX_PAD(0x2c8, 0x0d0, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
204 | #define MX25_PAD_LD2__GPIO_2_17 IOMUX_PAD(0x2c8, 0x0d0, 0x15, 0, 0, NO_PAD_CTRL) | 204 | #define MX25_PAD_LD2__GPIO_2_17 IOMUX_PAD(0x2c8, 0x0d0, 0x15, 0, 0, NO_PAD_CTRL) |
205 | 205 | ||
206 | #define MX25_PAD_LD3__LD3 IOMUX_PAD(0x2cc, 0x0d4, 0x10, 0, 0, NO_PAD_CTRL) | 206 | #define MX25_PAD_LD3__LD3 IOMUX_PAD(0x2cc, 0x0d4, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
207 | #define MX25_PAD_LD3__GPIO_2_18 IOMUX_PAD(0x2cc, 0x0d4, 0x15, 0, 0, NO_PAD_CTRL) | 207 | #define MX25_PAD_LD3__GPIO_2_18 IOMUX_PAD(0x2cc, 0x0d4, 0x15, 0, 0, NO_PAD_CTRL) |
208 | 208 | ||
209 | #define MX25_PAD_LD4__LD4 IOMUX_PAD(0x2d0, 0x0d8, 0x10, 0, 0, NO_PAD_CTRL) | 209 | #define MX25_PAD_LD4__LD4 IOMUX_PAD(0x2d0, 0x0d8, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
210 | #define MX25_PAD_LD4__GPIO_2_19 IOMUX_PAD(0x2d0, 0x0d8, 0x15, 0, 0, NO_PAD_CTRL) | 210 | #define MX25_PAD_LD4__GPIO_2_19 IOMUX_PAD(0x2d0, 0x0d8, 0x15, 0, 0, NO_PAD_CTRL) |
211 | 211 | ||
212 | #define MX25_PAD_LD5__LD5 IOMUX_PAD(0x2d4, 0x0dc, 0x10, 0, 0, NO_PAD_CTRL) | 212 | #define MX25_PAD_LD5__LD5 IOMUX_PAD(0x2d4, 0x0dc, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
213 | #define MX25_PAD_LD5__GPIO_1_19 IOMUX_PAD(0x2d4, 0x0dc, 0x15, 0, 0, NO_PAD_CTRL) | 213 | #define MX25_PAD_LD5__GPIO_1_19 IOMUX_PAD(0x2d4, 0x0dc, 0x15, 0, 0, NO_PAD_CTRL) |
214 | 214 | ||
215 | #define MX25_PAD_LD6__LD6 IOMUX_PAD(0x2d8, 0x0e0, 0x10, 0, 0, NO_PAD_CTRL) | 215 | #define MX25_PAD_LD6__LD6 IOMUX_PAD(0x2d8, 0x0e0, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
216 | #define MX25_PAD_LD6__GPIO_1_20 IOMUX_PAD(0x2d8, 0x0e0, 0x15, 0, 0, NO_PAD_CTRL) | 216 | #define MX25_PAD_LD6__GPIO_1_20 IOMUX_PAD(0x2d8, 0x0e0, 0x15, 0, 0, NO_PAD_CTRL) |
217 | 217 | ||
218 | #define MX25_PAD_LD7__LD7 IOMUX_PAD(0x2dc, 0x0e4, 0x10, 0, 0, NO_PAD_CTRL) | 218 | #define MX25_PAD_LD7__LD7 IOMUX_PAD(0x2dc, 0x0e4, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
219 | #define MX25_PAD_LD7__GPIO_1_21 IOMUX_PAD(0x2dc, 0x0e4, 0x15, 0, 0, NO_PAD_CTRL) | 219 | #define MX25_PAD_LD7__GPIO_1_21 IOMUX_PAD(0x2dc, 0x0e4, 0x15, 0, 0, NO_PAD_CTRL) |
220 | 220 | ||
221 | #define MX25_PAD_LD8__LD8 IOMUX_PAD(0x2e0, 0x0e8, 0x10, 0, 0, NO_PAD_CTRL) | 221 | #define MX25_PAD_LD8__LD8 IOMUX_PAD(0x2e0, 0x0e8, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
222 | #define MX25_PAD_LD8__FEC_TX_ERR IOMUX_PAD(0x2e0, 0x0e8, 0x15, 0, 0, NO_PAD_CTRL) | 222 | #define MX25_PAD_LD8__FEC_TX_ERR IOMUX_PAD(0x2e0, 0x0e8, 0x15, 0, 0, NO_PAD_CTRL) |
223 | 223 | ||
224 | #define MX25_PAD_LD9__LD9 IOMUX_PAD(0x2e4, 0x0ec, 0x10, 0, 0, NO_PAD_CTRL) | 224 | #define MX25_PAD_LD9__LD9 IOMUX_PAD(0x2e4, 0x0ec, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
225 | #define MX25_PAD_LD9__FEC_COL IOMUX_PAD(0x2e4, 0x0ec, 0x15, 0x504, 1, NO_PAD_CTRL) | 225 | #define MX25_PAD_LD9__FEC_COL IOMUX_PAD(0x2e4, 0x0ec, 0x15, 0x504, 1, NO_PAD_CTRL) |
226 | 226 | ||
227 | #define MX25_PAD_LD10__LD10 IOMUX_PAD(0x2e8, 0x0f0, 0x10, 0, 0, NO_PAD_CTRL) | 227 | #define MX25_PAD_LD10__LD10 IOMUX_PAD(0x2e8, 0x0f0, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
228 | #define MX25_PAD_LD10__FEC_RX_ER IOMUX_PAD(0x2e8, 0x0f0, 0x15, 0x518, 1, NO_PAD_CTRL) | 228 | #define MX25_PAD_LD10__FEC_RX_ER IOMUX_PAD(0x2e8, 0x0f0, 0x15, 0x518, 1, NO_PAD_CTRL) |
229 | 229 | ||
230 | #define MX25_PAD_LD11__LD11 IOMUX_PAD(0x2ec, 0x0f4, 0x10, 0, 0, NO_PAD_CTRL) | 230 | #define MX25_PAD_LD11__LD11 IOMUX_PAD(0x2ec, 0x0f4, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
231 | #define MX25_PAD_LD11__FEC_RDATA2 IOMUX_PAD(0x2ec, 0x0f4, 0x15, 0x50c, 1, NO_PAD_CTRL) | 231 | #define MX25_PAD_LD11__FEC_RDATA2 IOMUX_PAD(0x2ec, 0x0f4, 0x15, 0x50c, 1, NO_PAD_CTRL) |
232 | 232 | ||
233 | #define MX25_PAD_LD12__LD12 IOMUX_PAD(0x2f0, 0x0f8, 0x10, 0, 0, NO_PAD_CTRL) | 233 | #define MX25_PAD_LD12__LD12 IOMUX_PAD(0x2f0, 0x0f8, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
234 | #define MX25_PAD_LD12__FEC_RDATA3 IOMUX_PAD(0x2f0, 0x0f8, 0x15, 0x510, 1, NO_PAD_CTRL) | 234 | #define MX25_PAD_LD12__FEC_RDATA3 IOMUX_PAD(0x2f0, 0x0f8, 0x15, 0x510, 1, NO_PAD_CTRL) |
235 | 235 | ||
236 | #define MX25_PAD_LD13__LD13 IOMUX_PAD(0x2f4, 0x0fc, 0x10, 0, 0, NO_PAD_CTRL) | 236 | #define MX25_PAD_LD13__LD13 IOMUX_PAD(0x2f4, 0x0fc, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
237 | #define MX25_PAD_LD13__FEC_TDATA2 IOMUX_PAD(0x2f4, 0x0fc, 0x15, 0, 0, NO_PAD_CTRL) | 237 | #define MX25_PAD_LD13__FEC_TDATA2 IOMUX_PAD(0x2f4, 0x0fc, 0x15, 0, 0, NO_PAD_CTRL) |
238 | 238 | ||
239 | #define MX25_PAD_LD14__LD14 IOMUX_PAD(0x2f8, 0x100, 0x10, 0, 0, NO_PAD_CTRL) | 239 | #define MX25_PAD_LD14__LD14 IOMUX_PAD(0x2f8, 0x100, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
240 | #define MX25_PAD_LD14__FEC_TDATA3 IOMUX_PAD(0x2f8, 0x100, 0x15, 0, 0, NO_PAD_CTRL) | 240 | #define MX25_PAD_LD14__FEC_TDATA3 IOMUX_PAD(0x2f8, 0x100, 0x15, 0, 0, NO_PAD_CTRL) |
241 | 241 | ||
242 | #define MX25_PAD_LD15__LD15 IOMUX_PAD(0x2fc, 0x104, 0x10, 0, 0, NO_PAD_CTRL) | 242 | #define MX25_PAD_LD15__LD15 IOMUX_PAD(0x2fc, 0x104, 0x10, 0, 0, PAD_CTL_SRE_FAST) |
243 | #define MX25_PAD_LD15__FEC_RX_CLK IOMUX_PAD(0x2fc, 0x104, 0x15, 0x514, 1, NO_PAD_CTRL) | 243 | #define MX25_PAD_LD15__FEC_RX_CLK IOMUX_PAD(0x2fc, 0x104, 0x15, 0x514, 1, NO_PAD_CTRL) |
244 | 244 | ||
245 | #define MX25_PAD_HSYNC__HSYNC IOMUX_PAD(0x300, 0x108, 0x10, 0, 0, NO_PAD_CTRL) | 245 | #define MX25_PAD_HSYNC__HSYNC IOMUX_PAD(0x300, 0x108, 0x10, 0, 0, NO_PAD_CTRL) |
@@ -468,11 +468,11 @@ | |||
468 | #define MX25_PAD_GPIO_C__CAN2_TX IOMUX_PAD(0x3f8, 0x1fc, 0x16, 0, 0, PAD_CTL_PUS_22K_UP) | 468 | #define MX25_PAD_GPIO_C__CAN2_TX IOMUX_PAD(0x3f8, 0x1fc, 0x16, 0, 0, PAD_CTL_PUS_22K_UP) |
469 | 469 | ||
470 | #define MX25_PAD_GPIO_D__GPIO_D IOMUX_PAD(0x3fc, 0x200, 0x10, 0, 0, NO_PAD_CTRL) | 470 | #define MX25_PAD_GPIO_D__GPIO_D IOMUX_PAD(0x3fc, 0x200, 0x10, 0, 0, NO_PAD_CTRL) |
471 | #define MX25_PAD_GPIO_E__LD16 IOMUX_PAD(0x400, 0x204, 0x02, 0, 0, NO_PAD_CTRL) | 471 | #define MX25_PAD_GPIO_E__LD16 IOMUX_PAD(0x400, 0x204, 0x02, 0, 0, PAD_CTL_SRE_FAST) |
472 | #define MX25_PAD_GPIO_D__CAN2_RX IOMUX_PAD(0x3fc, 0x200, 0x16, 0x484, 1, PAD_CTL_PUS_22K_UP) | 472 | #define MX25_PAD_GPIO_D__CAN2_RX IOMUX_PAD(0x3fc, 0x200, 0x16, 0x484, 1, PAD_CTL_PUS_22K_UP) |
473 | 473 | ||
474 | #define MX25_PAD_GPIO_E__GPIO_E IOMUX_PAD(0x400, 0x204, 0x10, 0, 0, NO_PAD_CTRL) | 474 | #define MX25_PAD_GPIO_E__GPIO_E IOMUX_PAD(0x400, 0x204, 0x10, 0, 0, NO_PAD_CTRL) |
475 | #define MX25_PAD_GPIO_F__LD17 IOMUX_PAD(0x404, 0x208, 0x02, 0, 0, NO_PAD_CTRL) | 475 | #define MX25_PAD_GPIO_F__LD17 IOMUX_PAD(0x404, 0x208, 0x02, 0, 0, PAD_CTL_SRE_FAST) |
476 | #define MX25_PAD_GPIO_E__AUD7_TXD IOMUX_PAD(0x400, 0x204, 0x14, 0, 0, NO_PAD_CTRL) | 476 | #define MX25_PAD_GPIO_E__AUD7_TXD IOMUX_PAD(0x400, 0x204, 0x14, 0, 0, NO_PAD_CTRL) |
477 | 477 | ||
478 | #define MX25_PAD_GPIO_F__GPIO_F IOMUX_PAD(0x404, 0x208, 0x10, 0, 0, NO_PAD_CTRL) | 478 | #define MX25_PAD_GPIO_F__GPIO_F IOMUX_PAD(0x404, 0x208, 0x10, 0, 0, NO_PAD_CTRL) |
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c index 567e4b54f245..56b6f8b7053e 100644 --- a/arch/arm/plat-omap/clock.c +++ b/arch/arm/plat-omap/clock.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <linux/clk.h> | 20 | #include <linux/clk.h> |
21 | #include <linux/mutex.h> | 21 | #include <linux/mutex.h> |
22 | #include <linux/cpufreq.h> | 22 | #include <linux/cpufreq.h> |
23 | #include <linux/debugfs.h> | ||
24 | #include <linux/io.h> | 23 | #include <linux/io.h> |
25 | 24 | ||
26 | #include <plat/clock.h> | 25 | #include <plat/clock.h> |
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 002fb4d96bbc..cb856fe0434a 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -2125,7 +2125,7 @@ static int __devexit omap_system_dma_remove(struct platform_device *pdev) | |||
2125 | 2125 | ||
2126 | static struct platform_driver omap_system_dma_driver = { | 2126 | static struct platform_driver omap_system_dma_driver = { |
2127 | .probe = omap_system_dma_probe, | 2127 | .probe = omap_system_dma_probe, |
2128 | .remove = omap_system_dma_remove, | 2128 | .remove = __devexit_p(omap_system_dma_remove), |
2129 | .driver = { | 2129 | .driver = { |
2130 | .name = "omap_dma_system" | 2130 | .name = "omap_dma_system" |
2131 | }, | 2131 | }, |
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index af3b92be8459..0b77fe87e010 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -80,9 +80,9 @@ static void omap_dm_timer_write_reg(struct omap_dm_timer *timer, u32 reg, | |||
80 | 80 | ||
81 | static void omap_timer_restore_context(struct omap_dm_timer *timer) | 81 | static void omap_timer_restore_context(struct omap_dm_timer *timer) |
82 | { | 82 | { |
83 | omap_dm_timer_write_reg(timer, OMAP_TIMER_OCP_CFG_OFFSET, | 83 | __raw_writel(timer->context.tiocp_cfg, |
84 | timer->context.tiocp_cfg); | 84 | timer->io_base + OMAP_TIMER_OCP_CFG_OFFSET); |
85 | if (timer->revision > 1) | 85 | if (timer->revision == 1) |
86 | __raw_writel(timer->context.tistat, timer->sys_stat); | 86 | __raw_writel(timer->context.tistat, timer->sys_stat); |
87 | 87 | ||
88 | __raw_writel(timer->context.tisr, timer->irq_stat); | 88 | __raw_writel(timer->context.tisr, timer->irq_stat); |
@@ -357,6 +357,19 @@ int omap_dm_timer_stop(struct omap_dm_timer *timer) | |||
357 | 357 | ||
358 | __omap_dm_timer_stop(timer, timer->posted, rate); | 358 | __omap_dm_timer_stop(timer, timer->posted, rate); |
359 | 359 | ||
360 | if (timer->loses_context && timer->get_context_loss_count) | ||
361 | timer->ctx_loss_count = | ||
362 | timer->get_context_loss_count(&timer->pdev->dev); | ||
363 | |||
364 | /* | ||
365 | * Since the register values are computed and written within | ||
366 | * __omap_dm_timer_stop, we need to use read to retrieve the | ||
367 | * context. | ||
368 | */ | ||
369 | timer->context.tclr = | ||
370 | omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG); | ||
371 | timer->context.tisr = __raw_readl(timer->irq_stat); | ||
372 | omap_dm_timer_disable(timer); | ||
360 | return 0; | 373 | return 0; |
361 | } | 374 | } |
362 | EXPORT_SYMBOL_GPL(omap_dm_timer_stop); | 375 | EXPORT_SYMBOL_GPL(omap_dm_timer_stop); |
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 6b51086fce18..4f18eaed4511 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
@@ -250,7 +250,6 @@ IS_AM_SUBCLASS(335x, 0x335) | |||
250 | * cpu_is_omap2423(): True for OMAP2423 | 250 | * cpu_is_omap2423(): True for OMAP2423 |
251 | * cpu_is_omap2430(): True for OMAP2430 | 251 | * cpu_is_omap2430(): True for OMAP2430 |
252 | * cpu_is_omap3430(): True for OMAP3430 | 252 | * cpu_is_omap3430(): True for OMAP3430 |
253 | * cpu_is_omap4430(): True for OMAP4430 | ||
254 | * cpu_is_omap3505(): True for OMAP3505 | 253 | * cpu_is_omap3505(): True for OMAP3505 |
255 | * cpu_is_omap3517(): True for OMAP3517 | 254 | * cpu_is_omap3517(): True for OMAP3517 |
256 | */ | 255 | */ |
@@ -299,7 +298,6 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
299 | #define cpu_is_omap3505() 0 | 298 | #define cpu_is_omap3505() 0 |
300 | #define cpu_is_omap3517() 0 | 299 | #define cpu_is_omap3517() 0 |
301 | #define cpu_is_omap3430() 0 | 300 | #define cpu_is_omap3430() 0 |
302 | #define cpu_is_omap4430() 0 | ||
303 | #define cpu_is_omap3630() 0 | 301 | #define cpu_is_omap3630() 0 |
304 | 302 | ||
305 | /* | 303 | /* |
diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index 51423d2727a5..05f7615b61f0 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h | |||
@@ -100,6 +100,13 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, | |||
100 | struct omap_device_pm_latency *pm_lats, | 100 | struct omap_device_pm_latency *pm_lats, |
101 | int pm_lats_cnt, int is_early_device); | 101 | int pm_lats_cnt, int is_early_device); |
102 | 102 | ||
103 | struct omap_device *omap_device_alloc(struct platform_device *pdev, | ||
104 | struct omap_hwmod **ohs, int oh_cnt, | ||
105 | struct omap_device_pm_latency *pm_lats, | ||
106 | int pm_lats_cnt); | ||
107 | void omap_device_delete(struct omap_device *od); | ||
108 | int omap_device_register(struct platform_device *pdev); | ||
109 | |||
103 | void __iomem *omap_device_get_rt_va(struct omap_device *od); | 110 | void __iomem *omap_device_get_rt_va(struct omap_device *od); |
104 | struct device *omap_device_get_by_hwmod_name(const char *oh_name); | 111 | struct device *omap_device_get_by_hwmod_name(const char *oh_name); |
105 | 112 | ||
diff --git a/arch/arm/plat-omap/include/plat/sram.h b/arch/arm/plat-omap/include/plat/sram.h index 75aa1b2bef51..227ae2657554 100644 --- a/arch/arm/plat-omap/include/plat/sram.h +++ b/arch/arm/plat-omap/include/plat/sram.h | |||
@@ -101,4 +101,5 @@ static inline void omap_push_sram_idle(void) {} | |||
101 | #else | 101 | #else |
102 | #define OMAP4_SRAM_PA 0x40300000 | 102 | #define OMAP4_SRAM_PA 0x40300000 |
103 | #endif | 103 | #endif |
104 | #define AM33XX_SRAM_PA 0x40300000 | ||
104 | #endif | 105 | #endif |
diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c index ad80112c2275..ad32621aa52e 100644 --- a/arch/arm/plat-omap/mailbox.c +++ b/arch/arm/plat-omap/mailbox.c | |||
@@ -307,7 +307,7 @@ static void omap_mbox_fini(struct omap_mbox *mbox) | |||
307 | if (!--mbox->use_count) { | 307 | if (!--mbox->use_count) { |
308 | free_irq(mbox->irq, mbox); | 308 | free_irq(mbox->irq, mbox); |
309 | tasklet_kill(&mbox->txq->tasklet); | 309 | tasklet_kill(&mbox->txq->tasklet); |
310 | flush_work_sync(&mbox->rxq->work); | 310 | flush_work_sync(&mbox->rxq->work); |
311 | mbox_queue_free(mbox->txq); | 311 | mbox_queue_free(mbox->txq); |
312 | mbox_queue_free(mbox->rxq); | 312 | mbox_queue_free(mbox->rxq); |
313 | } | 313 | } |
diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index e8d98693d2dd..2d00ab01d150 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c | |||
@@ -1,3 +1,4 @@ | |||
1 | |||
1 | /* | 2 | /* |
2 | * omap_device implementation | 3 | * omap_device implementation |
3 | * | 4 | * |
@@ -97,14 +98,7 @@ | |||
97 | #define USE_WAKEUP_LAT 0 | 98 | #define USE_WAKEUP_LAT 0 |
98 | #define IGNORE_WAKEUP_LAT 1 | 99 | #define IGNORE_WAKEUP_LAT 1 |
99 | 100 | ||
100 | static int omap_device_register(struct platform_device *pdev); | ||
101 | static int omap_early_device_register(struct platform_device *pdev); | 101 | static int omap_early_device_register(struct platform_device *pdev); |
102 | static struct omap_device *omap_device_alloc(struct platform_device *pdev, | ||
103 | struct omap_hwmod **ohs, int oh_cnt, | ||
104 | struct omap_device_pm_latency *pm_lats, | ||
105 | int pm_lats_cnt); | ||
106 | static void omap_device_delete(struct omap_device *od); | ||
107 | |||
108 | 102 | ||
109 | static struct omap_device_pm_latency omap_default_latency[] = { | 103 | static struct omap_device_pm_latency omap_default_latency[] = { |
110 | { | 104 | { |
@@ -509,7 +503,7 @@ static int omap_device_fill_resources(struct omap_device *od, | |||
509 | * | 503 | * |
510 | * Returns an struct omap_device pointer or ERR_PTR() on error; | 504 | * Returns an struct omap_device pointer or ERR_PTR() on error; |
511 | */ | 505 | */ |
512 | static struct omap_device *omap_device_alloc(struct platform_device *pdev, | 506 | struct omap_device *omap_device_alloc(struct platform_device *pdev, |
513 | struct omap_hwmod **ohs, int oh_cnt, | 507 | struct omap_hwmod **ohs, int oh_cnt, |
514 | struct omap_device_pm_latency *pm_lats, | 508 | struct omap_device_pm_latency *pm_lats, |
515 | int pm_lats_cnt) | 509 | int pm_lats_cnt) |
@@ -591,7 +585,7 @@ oda_exit1: | |||
591 | return ERR_PTR(ret); | 585 | return ERR_PTR(ret); |
592 | } | 586 | } |
593 | 587 | ||
594 | static void omap_device_delete(struct omap_device *od) | 588 | void omap_device_delete(struct omap_device *od) |
595 | { | 589 | { |
596 | if (!od) | 590 | if (!od) |
597 | return; | 591 | return; |
@@ -619,7 +613,7 @@ static void omap_device_delete(struct omap_device *od) | |||
619 | * information. Returns ERR_PTR(-EINVAL) if @oh is NULL; otherwise, | 613 | * information. Returns ERR_PTR(-EINVAL) if @oh is NULL; otherwise, |
620 | * passes along the return value of omap_device_build_ss(). | 614 | * passes along the return value of omap_device_build_ss(). |
621 | */ | 615 | */ |
622 | struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, | 616 | struct platform_device __init *omap_device_build(const char *pdev_name, int pdev_id, |
623 | struct omap_hwmod *oh, void *pdata, | 617 | struct omap_hwmod *oh, void *pdata, |
624 | int pdata_len, | 618 | int pdata_len, |
625 | struct omap_device_pm_latency *pm_lats, | 619 | struct omap_device_pm_latency *pm_lats, |
@@ -652,7 +646,7 @@ struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, | |||
652 | * platform_device record. Returns an ERR_PTR() on error, or passes | 646 | * platform_device record. Returns an ERR_PTR() on error, or passes |
653 | * along the return value of omap_device_register(). | 647 | * along the return value of omap_device_register(). |
654 | */ | 648 | */ |
655 | struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, | 649 | struct platform_device __init *omap_device_build_ss(const char *pdev_name, int pdev_id, |
656 | struct omap_hwmod **ohs, int oh_cnt, | 650 | struct omap_hwmod **ohs, int oh_cnt, |
657 | void *pdata, int pdata_len, | 651 | void *pdata, int pdata_len, |
658 | struct omap_device_pm_latency *pm_lats, | 652 | struct omap_device_pm_latency *pm_lats, |
@@ -717,7 +711,7 @@ odbs_exit: | |||
717 | * platform_early_add_device() on the underlying platform_device. | 711 | * platform_early_add_device() on the underlying platform_device. |
718 | * Returns 0 by default. | 712 | * Returns 0 by default. |
719 | */ | 713 | */ |
720 | static int omap_early_device_register(struct platform_device *pdev) | 714 | static int __init omap_early_device_register(struct platform_device *pdev) |
721 | { | 715 | { |
722 | struct platform_device *devices[1]; | 716 | struct platform_device *devices[1]; |
723 | 717 | ||
@@ -817,7 +811,7 @@ static struct dev_pm_domain omap_device_pm_domain = { | |||
817 | * platform_device_register() on the underlying platform_device. | 811 | * platform_device_register() on the underlying platform_device. |
818 | * Returns the return value of platform_device_register(). | 812 | * Returns the return value of platform_device_register(). |
819 | */ | 813 | */ |
820 | static int omap_device_register(struct platform_device *pdev) | 814 | int omap_device_register(struct platform_device *pdev) |
821 | { | 815 | { |
822 | pr_debug("omap_device: %s: registering\n", pdev->name); | 816 | pr_debug("omap_device: %s: registering\n", pdev->name); |
823 | 817 | ||
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index 4243bdcc87bc..596f2224e15a 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
@@ -86,7 +86,7 @@ static int is_sram_locked(void) | |||
86 | __raw_writel(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */ | 86 | __raw_writel(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */ |
87 | __raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */ | 87 | __raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */ |
88 | } | 88 | } |
89 | if (cpu_is_omap34xx()) { | 89 | if (cpu_is_omap34xx() && !cpu_is_am33xx()) { |
90 | __raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */ | 90 | __raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */ |
91 | __raw_writel(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */ | 91 | __raw_writel(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */ |
92 | __raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */ | 92 | __raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */ |
@@ -124,7 +124,10 @@ static void __init omap_detect_sram(void) | |||
124 | omap_sram_size = 0x800; /* 2K */ | 124 | omap_sram_size = 0x800; /* 2K */ |
125 | } | 125 | } |
126 | } else { | 126 | } else { |
127 | if (cpu_is_omap34xx()) { | 127 | if (cpu_is_am33xx()) { |
128 | omap_sram_start = AM33XX_SRAM_PA; | ||
129 | omap_sram_size = 0x10000; /* 64K */ | ||
130 | } else if (cpu_is_omap34xx()) { | ||
128 | omap_sram_start = OMAP3_SRAM_PA; | 131 | omap_sram_start = OMAP3_SRAM_PA; |
129 | omap_sram_size = 0x10000; /* 64K */ | 132 | omap_sram_size = 0x10000; /* 64K */ |
130 | } else if (cpu_is_omap44xx()) { | 133 | } else if (cpu_is_omap44xx()) { |
@@ -368,6 +371,11 @@ static inline int omap34xx_sram_init(void) | |||
368 | return 0; | 371 | return 0; |
369 | } | 372 | } |
370 | 373 | ||
374 | static inline int am33xx_sram_init(void) | ||
375 | { | ||
376 | return 0; | ||
377 | } | ||
378 | |||
371 | int __init omap_sram_init(void) | 379 | int __init omap_sram_init(void) |
372 | { | 380 | { |
373 | omap_detect_sram(); | 381 | omap_detect_sram(); |
@@ -379,6 +387,8 @@ int __init omap_sram_init(void) | |||
379 | omap242x_sram_init(); | 387 | omap242x_sram_init(); |
380 | else if (cpu_is_omap2430()) | 388 | else if (cpu_is_omap2430()) |
381 | omap243x_sram_init(); | 389 | omap243x_sram_init(); |
390 | else if (cpu_is_am33xx()) | ||
391 | am33xx_sram_init(); | ||
382 | else if (cpu_is_omap34xx()) | 392 | else if (cpu_is_omap34xx()) |
383 | omap34xx_sram_init(); | 393 | omap34xx_sram_init(); |
384 | 394 | ||