diff options
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 | ||
