diff options
Diffstat (limited to 'arch')
35 files changed, 222 insertions, 55 deletions
diff --git a/arch/arm/mach-lpc32xx/include/mach/irqs.h b/arch/arm/mach-lpc32xx/include/mach/irqs.h index 2667f52e3b04..9e3b90df32e1 100644 --- a/arch/arm/mach-lpc32xx/include/mach/irqs.h +++ b/arch/arm/mach-lpc32xx/include/mach/irqs.h | |||
| @@ -61,7 +61,7 @@ | |||
| 61 | */ | 61 | */ |
| 62 | #define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1) | 62 | #define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1) |
| 63 | #define IRQ_LPC32XX_JTAG_COMM_RX LPC32XX_SIC1_IRQ(2) | 63 | #define IRQ_LPC32XX_JTAG_COMM_RX LPC32XX_SIC1_IRQ(2) |
| 64 | #define IRQ_LPC32XX_GPI_11 LPC32XX_SIC1_IRQ(4) | 64 | #define IRQ_LPC32XX_GPI_28 LPC32XX_SIC1_IRQ(4) |
| 65 | #define IRQ_LPC32XX_TS_P LPC32XX_SIC1_IRQ(6) | 65 | #define IRQ_LPC32XX_TS_P LPC32XX_SIC1_IRQ(6) |
| 66 | #define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7) | 66 | #define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7) |
| 67 | #define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8) | 67 | #define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8) |
diff --git a/arch/arm/mach-lpc32xx/irq.c b/arch/arm/mach-lpc32xx/irq.c index 4eae566dfdc7..c74de01ab5b6 100644 --- a/arch/arm/mach-lpc32xx/irq.c +++ b/arch/arm/mach-lpc32xx/irq.c | |||
| @@ -118,6 +118,10 @@ static const struct lpc32xx_event_info lpc32xx_events[NR_IRQS] = { | |||
| 118 | .event_group = &lpc32xx_event_pin_regs, | 118 | .event_group = &lpc32xx_event_pin_regs, |
| 119 | .mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT, | 119 | .mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT, |
| 120 | }, | 120 | }, |
| 121 | [IRQ_LPC32XX_GPI_28] = { | ||
| 122 | .event_group = &lpc32xx_event_pin_regs, | ||
| 123 | .mask = LPC32XX_CLKPWR_EXTSRC_GPI_28_BIT, | ||
| 124 | }, | ||
| 121 | [IRQ_LPC32XX_GPIO_00] = { | 125 | [IRQ_LPC32XX_GPIO_00] = { |
| 122 | .event_group = &lpc32xx_event_int_regs, | 126 | .event_group = &lpc32xx_event_int_regs, |
| 123 | .mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT, | 127 | .mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT, |
| @@ -305,9 +309,18 @@ static int lpc32xx_irq_wake(struct irq_data *d, unsigned int state) | |||
| 305 | 309 | ||
| 306 | if (state) | 310 | if (state) |
| 307 | eventreg |= lpc32xx_events[d->irq].mask; | 311 | eventreg |= lpc32xx_events[d->irq].mask; |
| 308 | else | 312 | else { |
| 309 | eventreg &= ~lpc32xx_events[d->irq].mask; | 313 | eventreg &= ~lpc32xx_events[d->irq].mask; |
| 310 | 314 | ||
| 315 | /* | ||
| 316 | * When disabling the wakeup, clear the latched | ||
| 317 | * event | ||
| 318 | */ | ||
| 319 | __raw_writel(lpc32xx_events[d->irq].mask, | ||
| 320 | lpc32xx_events[d->irq]. | ||
| 321 | event_group->rawstat_reg); | ||
| 322 | } | ||
| 323 | |||
| 311 | __raw_writel(eventreg, | 324 | __raw_writel(eventreg, |
| 312 | lpc32xx_events[d->irq].event_group->enab_reg); | 325 | lpc32xx_events[d->irq].event_group->enab_reg); |
| 313 | 326 | ||
| @@ -380,13 +393,15 @@ void __init lpc32xx_init_irq(void) | |||
| 380 | 393 | ||
| 381 | /* Setup SIC1 */ | 394 | /* Setup SIC1 */ |
| 382 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE)); | 395 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE)); |
| 383 | __raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE)); | 396 | __raw_writel(SIC1_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE)); |
| 384 | __raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE)); | 397 | __raw_writel(SIC1_ATR_DEFAULT, |
| 398 | LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE)); | ||
| 385 | 399 | ||
| 386 | /* Setup SIC2 */ | 400 | /* Setup SIC2 */ |
| 387 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE)); | 401 | __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE)); |
| 388 | __raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE)); | 402 | __raw_writel(SIC2_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE)); |
| 389 | __raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE)); | 403 | __raw_writel(SIC2_ATR_DEFAULT, |
| 404 | LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE)); | ||
| 390 | 405 | ||
| 391 | /* Configure supported IRQ's */ | 406 | /* Configure supported IRQ's */ |
| 392 | for (i = 0; i < NR_IRQS; i++) { | 407 | for (i = 0; i < NR_IRQS; i++) { |
diff --git a/arch/arm/mach-lpc32xx/serial.c b/arch/arm/mach-lpc32xx/serial.c index 429cfdbb2b3d..f2735281616a 100644 --- a/arch/arm/mach-lpc32xx/serial.c +++ b/arch/arm/mach-lpc32xx/serial.c | |||
| @@ -88,6 +88,7 @@ struct uartinit { | |||
| 88 | char *uart_ck_name; | 88 | char *uart_ck_name; |
| 89 | u32 ck_mode_mask; | 89 | u32 ck_mode_mask; |
| 90 | void __iomem *pdiv_clk_reg; | 90 | void __iomem *pdiv_clk_reg; |
| 91 | resource_size_t mapbase; | ||
| 91 | }; | 92 | }; |
| 92 | 93 | ||
| 93 | static struct uartinit uartinit_data[] __initdata = { | 94 | static struct uartinit uartinit_data[] __initdata = { |
| @@ -97,6 +98,7 @@ static struct uartinit uartinit_data[] __initdata = { | |||
| 97 | .ck_mode_mask = | 98 | .ck_mode_mask = |
| 98 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5), | 99 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5), |
| 99 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL, | 100 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL, |
| 101 | .mapbase = LPC32XX_UART5_BASE, | ||
| 100 | }, | 102 | }, |
| 101 | #endif | 103 | #endif |
| 102 | #ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT | 104 | #ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT |
| @@ -105,6 +107,7 @@ static struct uartinit uartinit_data[] __initdata = { | |||
| 105 | .ck_mode_mask = | 107 | .ck_mode_mask = |
| 106 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3), | 108 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3), |
| 107 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL, | 109 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL, |
| 110 | .mapbase = LPC32XX_UART3_BASE, | ||
| 108 | }, | 111 | }, |
| 109 | #endif | 112 | #endif |
| 110 | #ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT | 113 | #ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT |
| @@ -113,6 +116,7 @@ static struct uartinit uartinit_data[] __initdata = { | |||
| 113 | .ck_mode_mask = | 116 | .ck_mode_mask = |
| 114 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4), | 117 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4), |
| 115 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL, | 118 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL, |
| 119 | .mapbase = LPC32XX_UART4_BASE, | ||
| 116 | }, | 120 | }, |
| 117 | #endif | 121 | #endif |
| 118 | #ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT | 122 | #ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT |
| @@ -121,6 +125,7 @@ static struct uartinit uartinit_data[] __initdata = { | |||
| 121 | .ck_mode_mask = | 125 | .ck_mode_mask = |
| 122 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6), | 126 | LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6), |
| 123 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL, | 127 | .pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL, |
| 128 | .mapbase = LPC32XX_UART6_BASE, | ||
| 124 | }, | 129 | }, |
| 125 | #endif | 130 | #endif |
| 126 | }; | 131 | }; |
| @@ -165,11 +170,24 @@ void __init lpc32xx_serial_init(void) | |||
| 165 | 170 | ||
| 166 | /* pre-UART clock divider set to 1 */ | 171 | /* pre-UART clock divider set to 1 */ |
| 167 | __raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg); | 172 | __raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg); |
| 173 | |||
| 174 | /* | ||
| 175 | * Force a flush of the RX FIFOs to work around a | ||
| 176 | * HW bug | ||
| 177 | */ | ||
| 178 | puart = uartinit_data[i].mapbase; | ||
| 179 | __raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart)); | ||
| 180 | __raw_writel(0x00, LPC32XX_UART_DLL_FIFO(puart)); | ||
| 181 | j = LPC32XX_SUART_FIFO_SIZE; | ||
| 182 | while (j--) | ||
| 183 | tmp = __raw_readl( | ||
| 184 | LPC32XX_UART_DLL_FIFO(puart)); | ||
| 185 | __raw_writel(0, LPC32XX_UART_IIR_FCR(puart)); | ||
| 168 | } | 186 | } |
| 169 | 187 | ||
| 170 | /* This needs to be done after all UART clocks are setup */ | 188 | /* This needs to be done after all UART clocks are setup */ |
| 171 | __raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE); | 189 | __raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE); |
| 172 | for (i = 0; i < ARRAY_SIZE(uartinit_data) - 1; i++) { | 190 | for (i = 0; i < ARRAY_SIZE(uartinit_data); i++) { |
| 173 | /* Force a flush of the RX FIFOs to work around a HW bug */ | 191 | /* Force a flush of the RX FIFOs to work around a HW bug */ |
| 174 | puart = serial_std_platform_data[i].mapbase; | 192 | puart = serial_std_platform_data[i].mapbase; |
| 175 | __raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart)); | 193 | __raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart)); |
diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c index 17cb76060125..3588a5584153 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/mtd/partitions.h> | 17 | #include <linux/mtd/partitions.h> |
| 18 | #include <linux/mtd/nand.h> | 18 | #include <linux/mtd/nand.h> |
| 19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
| 20 | #include <linux/gpio.h> | ||
| 21 | 20 | ||
| 22 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 23 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c index 7bc17eaa12eb..ada1213982b4 100644 --- a/arch/arm/mach-mmp/pxa168.c +++ b/arch/arm/mach-mmp/pxa168.c | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | #include <mach/dma.h> | 24 | #include <mach/dma.h> |
| 25 | #include <mach/devices.h> | 25 | #include <mach/devices.h> |
| 26 | #include <mach/mfp.h> | 26 | #include <mach/mfp.h> |
| 27 | #include <linux/platform_device.h> | ||
| 28 | #include <linux/dma-mapping.h> | 27 | #include <linux/dma-mapping.h> |
| 29 | #include <mach/pxa168.h> | 28 | #include <mach/pxa168.h> |
| 30 | 29 | ||
diff --git a/arch/arm/mach-mmp/tavorevb.c b/arch/arm/mach-mmp/tavorevb.c index 8e3b5af04a57..bc97170125bf 100644 --- a/arch/arm/mach-mmp/tavorevb.c +++ b/arch/arm/mach-mmp/tavorevb.c | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
| 13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
| 14 | #include <linux/smc91x.h> | 14 | #include <linux/smc91x.h> |
| 15 | #include <linux/gpio.h> | ||
| 16 | 15 | ||
| 17 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
| 18 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 309369ea6978..be2002f42dea 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c | |||
| @@ -416,13 +416,13 @@ static void __init innovator_init(void) | |||
| 416 | #ifdef CONFIG_ARCH_OMAP15XX | 416 | #ifdef CONFIG_ARCH_OMAP15XX |
| 417 | if (cpu_is_omap1510()) { | 417 | if (cpu_is_omap1510()) { |
| 418 | omap1_usb_init(&innovator1510_usb_config); | 418 | omap1_usb_init(&innovator1510_usb_config); |
| 419 | innovator_config[1].data = &innovator1510_lcd_config; | 419 | innovator_config[0].data = &innovator1510_lcd_config; |
| 420 | } | 420 | } |
| 421 | #endif | 421 | #endif |
| 422 | #ifdef CONFIG_ARCH_OMAP16XX | 422 | #ifdef CONFIG_ARCH_OMAP16XX |
| 423 | if (cpu_is_omap1610()) { | 423 | if (cpu_is_omap1610()) { |
| 424 | omap1_usb_init(&h2_usb_config); | 424 | omap1_usb_init(&h2_usb_config); |
| 425 | innovator_config[1].data = &innovator1610_lcd_config; | 425 | innovator_config[0].data = &innovator1610_lcd_config; |
| 426 | } | 426 | } |
| 427 | #endif | 427 | #endif |
| 428 | omap_board_config = innovator_config; | 428 | omap_board_config = innovator_config; |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index d965da45160e..e20c8ab80b0e 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
| @@ -364,8 +364,8 @@ config OMAP3_SDRC_AC_TIMING | |||
| 364 | going on could result in system crashes; | 364 | going on could result in system crashes; |
| 365 | 365 | ||
| 366 | config OMAP4_ERRATA_I688 | 366 | config OMAP4_ERRATA_I688 |
| 367 | bool "OMAP4 errata: Async Bridge Corruption (BROKEN)" | 367 | bool "OMAP4 errata: Async Bridge Corruption" |
| 368 | depends on ARCH_OMAP4 && BROKEN | 368 | depends on ARCH_OMAP4 |
| 369 | select ARCH_HAS_BARRIERS | 369 | select ARCH_HAS_BARRIERS |
| 370 | help | 370 | help |
| 371 | If a data is stalled inside asynchronous bridge because of back | 371 | If a data is stalled inside asynchronous bridge because of back |
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index 42a4d11fad23..672262717601 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
| @@ -371,7 +371,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask) | |||
| 371 | else | 371 | else |
| 372 | *openp = 0; | 372 | *openp = 0; |
| 373 | 373 | ||
| 374 | #ifdef CONFIG_MMC_OMAP | ||
| 374 | omap_mmc_notify_cover_event(mmc_device, index, *openp); | 375 | omap_mmc_notify_cover_event(mmc_device, index, *openp); |
| 376 | #else | ||
| 377 | pr_warn("MMC: notify cover event not available\n"); | ||
| 378 | #endif | ||
| 375 | } | 379 | } |
| 376 | 380 | ||
| 377 | static int n8x0_mmc_late_init(struct device *dev) | 381 | static int n8x0_mmc_late_init(struct device *dev) |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index c775bead1497..c877236a8442 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
| @@ -381,7 +381,7 @@ static int omap3evm_twl_gpio_setup(struct device *dev, | |||
| 381 | gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI"); | 381 | gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI"); |
| 382 | 382 | ||
| 383 | /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ | 383 | /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ |
| 384 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 384 | gpio_leds[0].gpio = gpio + TWL4030_GPIO_MAX + 1; |
| 385 | 385 | ||
| 386 | platform_device_register(&leds_gpio); | 386 | platform_device_register(&leds_gpio); |
| 387 | 387 | ||
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index febffde2ff10..7e9338e8d684 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
| @@ -132,6 +132,7 @@ void omap3_map_io(void); | |||
| 132 | void am33xx_map_io(void); | 132 | void am33xx_map_io(void); |
| 133 | void omap4_map_io(void); | 133 | void omap4_map_io(void); |
| 134 | void ti81xx_map_io(void); | 134 | void ti81xx_map_io(void); |
| 135 | void omap_barriers_init(void); | ||
| 135 | 136 | ||
| 136 | /** | 137 | /** |
| 137 | * omap_test_timeout - busy-loop, testing a condition | 138 | * omap_test_timeout - busy-loop, testing a condition |
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c index cfdbb86bc84e..72e018b9b260 100644 --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c | |||
| @@ -65,7 +65,6 @@ static int omap4_enter_idle(struct cpuidle_device *dev, | |||
| 65 | struct timespec ts_preidle, ts_postidle, ts_idle; | 65 | struct timespec ts_preidle, ts_postidle, ts_idle; |
| 66 | u32 cpu1_state; | 66 | u32 cpu1_state; |
| 67 | int idle_time; | 67 | int idle_time; |
| 68 | int new_state_idx; | ||
| 69 | int cpu_id = smp_processor_id(); | 68 | int cpu_id = smp_processor_id(); |
| 70 | 69 | ||
| 71 | /* Used to keep track of the total time in idle */ | 70 | /* Used to keep track of the total time in idle */ |
| @@ -84,8 +83,8 @@ static int omap4_enter_idle(struct cpuidle_device *dev, | |||
| 84 | */ | 83 | */ |
| 85 | cpu1_state = pwrdm_read_pwrst(cpu1_pd); | 84 | cpu1_state = pwrdm_read_pwrst(cpu1_pd); |
| 86 | if (cpu1_state != PWRDM_POWER_OFF) { | 85 | if (cpu1_state != PWRDM_POWER_OFF) { |
| 87 | new_state_idx = drv->safe_state_index; | 86 | index = drv->safe_state_index; |
| 88 | cx = cpuidle_get_statedata(&dev->states_usage[new_state_idx]); | 87 | cx = cpuidle_get_statedata(&dev->states_usage[index]); |
| 89 | } | 88 | } |
| 90 | 89 | ||
| 91 | if (index > 0) | 90 | if (index > 0) |
diff --git a/arch/arm/mach-omap2/gpmc-smsc911x.c b/arch/arm/mach-omap2/gpmc-smsc911x.c index 997033129d26..bbb870c04a5e 100644 --- a/arch/arm/mach-omap2/gpmc-smsc911x.c +++ b/arch/arm/mach-omap2/gpmc-smsc911x.c | |||
| @@ -19,6 +19,8 @@ | |||
| 19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
| 20 | #include <linux/io.h> | 20 | #include <linux/io.h> |
| 21 | #include <linux/smsc911x.h> | 21 | #include <linux/smsc911x.h> |
| 22 | #include <linux/regulator/fixed.h> | ||
| 23 | #include <linux/regulator/machine.h> | ||
| 22 | 24 | ||
| 23 | #include <plat/board.h> | 25 | #include <plat/board.h> |
| 24 | #include <plat/gpmc.h> | 26 | #include <plat/gpmc.h> |
| @@ -42,6 +44,50 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = { | |||
| 42 | .flags = SMSC911X_USE_16BIT, | 44 | .flags = SMSC911X_USE_16BIT, |
| 43 | }; | 45 | }; |
| 44 | 46 | ||
| 47 | static struct regulator_consumer_supply gpmc_smsc911x_supply[] = { | ||
| 48 | REGULATOR_SUPPLY("vddvario", "smsc911x.0"), | ||
| 49 | REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), | ||
| 50 | }; | ||
| 51 | |||
| 52 | /* Generic regulator definition to satisfy smsc911x */ | ||
| 53 | static struct regulator_init_data gpmc_smsc911x_reg_init_data = { | ||
| 54 | .constraints = { | ||
| 55 | .min_uV = 3300000, | ||
| 56 | .max_uV = 3300000, | ||
| 57 | .valid_modes_mask = REGULATOR_MODE_NORMAL | ||
| 58 | | REGULATOR_MODE_STANDBY, | ||
| 59 | .valid_ops_mask = REGULATOR_CHANGE_MODE | ||
| 60 | | REGULATOR_CHANGE_STATUS, | ||
| 61 | }, | ||
| 62 | .num_consumer_supplies = ARRAY_SIZE(gpmc_smsc911x_supply), | ||
| 63 | .consumer_supplies = gpmc_smsc911x_supply, | ||
| 64 | }; | ||
| 65 | |||
| 66 | static struct fixed_voltage_config gpmc_smsc911x_fixed_reg_data = { | ||
| 67 | .supply_name = "gpmc_smsc911x", | ||
| 68 | .microvolts = 3300000, | ||
| 69 | .gpio = -EINVAL, | ||
| 70 | .startup_delay = 0, | ||
| 71 | .enable_high = 0, | ||
| 72 | .enabled_at_boot = 1, | ||
| 73 | .init_data = &gpmc_smsc911x_reg_init_data, | ||
| 74 | }; | ||
| 75 | |||
| 76 | /* | ||
| 77 | * Platform device id of 42 is a temporary fix to avoid conflicts | ||
| 78 | * with other reg-fixed-voltage devices. The real fix should | ||
| 79 | * involve the driver core providing a way of dynamically | ||
| 80 | * assigning a unique id on registration for platform devices | ||
| 81 | * in the same name space. | ||
| 82 | */ | ||
| 83 | static struct platform_device gpmc_smsc911x_regulator = { | ||
| 84 | .name = "reg-fixed-voltage", | ||
| 85 | .id = 42, | ||
| 86 | .dev = { | ||
| 87 | .platform_data = &gpmc_smsc911x_fixed_reg_data, | ||
| 88 | }, | ||
| 89 | }; | ||
| 90 | |||
| 45 | /* | 91 | /* |
| 46 | * Initialize smsc911x device connected to the GPMC. Note that we | 92 | * Initialize smsc911x device connected to the GPMC. Note that we |
| 47 | * assume that pin multiplexing is done in the board-*.c file, | 93 | * assume that pin multiplexing is done in the board-*.c file, |
| @@ -55,6 +101,12 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data) | |||
| 55 | 101 | ||
| 56 | gpmc_cfg = board_data; | 102 | gpmc_cfg = board_data; |
| 57 | 103 | ||
| 104 | ret = platform_device_register(&gpmc_smsc911x_regulator); | ||
| 105 | if (ret < 0) { | ||
| 106 | pr_err("Unable to register smsc911x regulators: %d\n", ret); | ||
| 107 | return; | ||
| 108 | } | ||
| 109 | |||
| 58 | if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) { | 110 | if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) { |
| 59 | pr_err("Failed to request GPMC mem region\n"); | 111 | pr_err("Failed to request GPMC mem region\n"); |
| 60 | return; | 112 | return; |
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index b40c28895298..19dd1657245c 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c | |||
| @@ -428,6 +428,7 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, | |||
| 428 | return 0; | 428 | return 0; |
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | static int omap_hsmmc_done; | ||
| 431 | #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 | 432 | #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 |
| 432 | 433 | ||
| 433 | void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) | 434 | void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) |
| @@ -491,6 +492,11 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
| 491 | { | 492 | { |
| 492 | u32 reg; | 493 | u32 reg; |
| 493 | 494 | ||
| 495 | if (omap_hsmmc_done) | ||
| 496 | return; | ||
| 497 | |||
| 498 | omap_hsmmc_done = 1; | ||
| 499 | |||
| 494 | if (!cpu_is_omap44xx()) { | 500 | if (!cpu_is_omap44xx()) { |
| 495 | if (cpu_is_omap2430()) { | 501 | if (cpu_is_omap2430()) { |
| 496 | control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; | 502 | control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index eb50c29fb644..fb11b44fbdec 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
| @@ -307,6 +307,7 @@ void __init omapam33xx_map_common_io(void) | |||
| 307 | void __init omap44xx_map_common_io(void) | 307 | void __init omap44xx_map_common_io(void) |
| 308 | { | 308 | { |
| 309 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); | 309 | iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); |
| 310 | omap_barriers_init(); | ||
| 310 | } | 311 | } |
| 311 | #endif | 312 | #endif |
| 312 | 313 | ||
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index 609ea2ded7e3..2cc1aa004b94 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c | |||
| @@ -281,8 +281,16 @@ static struct omap_mbox mbox_iva_info = { | |||
| 281 | .ops = &omap2_mbox_ops, | 281 | .ops = &omap2_mbox_ops, |
| 282 | .priv = &omap2_mbox_iva_priv, | 282 | .priv = &omap2_mbox_iva_priv, |
| 283 | }; | 283 | }; |
| 284 | #endif | ||
| 284 | 285 | ||
| 285 | struct omap_mbox *omap2_mboxes[] = { &mbox_dsp_info, &mbox_iva_info, NULL }; | 286 | #ifdef CONFIG_ARCH_OMAP2 |
| 287 | struct omap_mbox *omap2_mboxes[] = { | ||
| 288 | &mbox_dsp_info, | ||
| 289 | #ifdef CONFIG_SOC_OMAP2420 | ||
| 290 | &mbox_iva_info, | ||
| 291 | #endif | ||
| 292 | NULL | ||
| 293 | }; | ||
| 286 | #endif | 294 | #endif |
| 287 | 295 | ||
| 288 | #if defined(CONFIG_ARCH_OMAP4) | 296 | #if defined(CONFIG_ARCH_OMAP4) |
| @@ -412,7 +420,8 @@ static void __exit omap2_mbox_exit(void) | |||
| 412 | platform_driver_unregister(&omap2_mbox_driver); | 420 | platform_driver_unregister(&omap2_mbox_driver); |
| 413 | } | 421 | } |
| 414 | 422 | ||
| 415 | module_init(omap2_mbox_init); | 423 | /* must be ready before omap3isp is probed */ |
| 424 | subsys_initcall(omap2_mbox_init); | ||
| 416 | module_exit(omap2_mbox_exit); | 425 | module_exit(omap2_mbox_exit); |
| 417 | 426 | ||
| 418 | MODULE_LICENSE("GPL v2"); | 427 | MODULE_LICENSE("GPL v2"); |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index fb8bc9fa43b1..611a0e3d54ca 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
| @@ -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 __init | 221 | static int |
| 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) |
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 40a8fbc07e4b..ebc595091312 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | #include <plat/irqs.h> | 25 | #include <plat/irqs.h> |
| 26 | #include <plat/sram.h> | 26 | #include <plat/sram.h> |
| 27 | #include <plat/omap-secure.h> | ||
| 27 | 28 | ||
| 28 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
| 29 | #include <mach/omap-wakeupgen.h> | 30 | #include <mach/omap-wakeupgen.h> |
| @@ -43,6 +44,9 @@ static void __iomem *sar_ram_base; | |||
| 43 | 44 | ||
| 44 | void __iomem *dram_sync, *sram_sync; | 45 | void __iomem *dram_sync, *sram_sync; |
| 45 | 46 | ||
| 47 | static phys_addr_t paddr; | ||
| 48 | static u32 size; | ||
| 49 | |||
| 46 | void omap_bus_sync(void) | 50 | void omap_bus_sync(void) |
| 47 | { | 51 | { |
| 48 | if (dram_sync && sram_sync) { | 52 | if (dram_sync && sram_sync) { |
| @@ -52,18 +56,20 @@ void omap_bus_sync(void) | |||
| 52 | } | 56 | } |
| 53 | } | 57 | } |
| 54 | 58 | ||
| 55 | static int __init omap_barriers_init(void) | 59 | /* Steal one page physical memory for barrier implementation */ |
| 60 | int __init omap_barrier_reserve_memblock(void) | ||
| 56 | { | 61 | { |
| 57 | struct map_desc dram_io_desc[1]; | ||
| 58 | phys_addr_t paddr; | ||
| 59 | u32 size; | ||
| 60 | |||
| 61 | if (!cpu_is_omap44xx()) | ||
| 62 | return -ENODEV; | ||
| 63 | 62 | ||
| 64 | size = ALIGN(PAGE_SIZE, SZ_1M); | 63 | size = ALIGN(PAGE_SIZE, SZ_1M); |
| 65 | paddr = arm_memblock_steal(size, SZ_1M); | 64 | paddr = arm_memblock_steal(size, SZ_1M); |
| 66 | 65 | ||
| 66 | return 0; | ||
| 67 | } | ||
| 68 | |||
| 69 | void __init omap_barriers_init(void) | ||
| 70 | { | ||
| 71 | struct map_desc dram_io_desc[1]; | ||
| 72 | |||
| 67 | dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA; | 73 | dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA; |
| 68 | dram_io_desc[0].pfn = __phys_to_pfn(paddr); | 74 | dram_io_desc[0].pfn = __phys_to_pfn(paddr); |
| 69 | dram_io_desc[0].length = size; | 75 | dram_io_desc[0].length = size; |
| @@ -75,9 +81,10 @@ static int __init omap_barriers_init(void) | |||
| 75 | pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n", | 81 | pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n", |
| 76 | (long long) paddr, dram_io_desc[0].virtual); | 82 | (long long) paddr, dram_io_desc[0].virtual); |
| 77 | 83 | ||
| 78 | return 0; | ||
| 79 | } | 84 | } |
| 80 | core_initcall(omap_barriers_init); | 85 | #else |
| 86 | void __init omap_barriers_init(void) | ||
| 87 | {} | ||
| 81 | #endif | 88 | #endif |
| 82 | 89 | ||
| 83 | void __init gic_init_irq(void) | 90 | void __init gic_init_irq(void) |
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 1881fe915149..5a65dd04aa38 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
| @@ -174,14 +174,17 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name, | |||
| 174 | freq = clk->rate; | 174 | freq = clk->rate; |
| 175 | clk_put(clk); | 175 | clk_put(clk); |
| 176 | 176 | ||
| 177 | rcu_read_lock(); | ||
| 177 | opp = opp_find_freq_ceil(dev, &freq); | 178 | opp = opp_find_freq_ceil(dev, &freq); |
| 178 | if (IS_ERR(opp)) { | 179 | if (IS_ERR(opp)) { |
| 180 | rcu_read_unlock(); | ||
| 179 | pr_err("%s: unable to find boot up OPP for vdd_%s\n", | 181 | pr_err("%s: unable to find boot up OPP for vdd_%s\n", |
| 180 | __func__, vdd_name); | 182 | __func__, vdd_name); |
| 181 | goto exit; | 183 | goto exit; |
| 182 | } | 184 | } |
| 183 | 185 | ||
| 184 | bootup_volt = opp_get_voltage(opp); | 186 | bootup_volt = opp_get_voltage(opp); |
| 187 | rcu_read_unlock(); | ||
| 185 | if (!bootup_volt) { | 188 | if (!bootup_volt) { |
| 186 | pr_err("%s: unable to find voltage corresponding " | 189 | pr_err("%s: unable to find voltage corresponding " |
| 187 | "to the bootup OPP for vdd_%s\n", __func__, vdd_name); | 190 | "to the bootup OPP for vdd_%s\n", __func__, vdd_name); |
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c index 771dc781b746..f51348dafafd 100644 --- a/arch/arm/mach-omap2/usb-host.c +++ b/arch/arm/mach-omap2/usb-host.c | |||
| @@ -486,7 +486,7 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode) | |||
| 486 | void __init usbhs_init(const struct usbhs_omap_board_data *pdata) | 486 | void __init usbhs_init(const struct usbhs_omap_board_data *pdata) |
| 487 | { | 487 | { |
| 488 | struct omap_hwmod *oh[2]; | 488 | struct omap_hwmod *oh[2]; |
| 489 | struct omap_device *od; | 489 | struct platform_device *pdev; |
| 490 | int bus_id = -1; | 490 | int bus_id = -1; |
| 491 | int i; | 491 | int i; |
| 492 | 492 | ||
| @@ -522,11 +522,11 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata) | |||
| 522 | return; | 522 | return; |
| 523 | } | 523 | } |
| 524 | 524 | ||
| 525 | od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2, | 525 | pdev = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2, |
| 526 | (void *)&usbhs_data, sizeof(usbhs_data), | 526 | (void *)&usbhs_data, sizeof(usbhs_data), |
| 527 | omap_uhhtll_latency, | 527 | omap_uhhtll_latency, |
| 528 | ARRAY_SIZE(omap_uhhtll_latency), false); | 528 | ARRAY_SIZE(omap_uhhtll_latency), false); |
| 529 | if (IS_ERR(od)) { | 529 | if (IS_ERR(pdev)) { |
| 530 | pr_err("Could not build hwmod devices %s,%s\n", | 530 | pr_err("Could not build hwmod devices %s,%s\n", |
| 531 | USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME); | 531 | USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME); |
| 532 | return; | 532 | return; |
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index fb9b62dcf4ca..208eef1c0485 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c | |||
| @@ -45,6 +45,7 @@ | |||
| 45 | #include <mach/hx4700.h> | 45 | #include <mach/hx4700.h> |
| 46 | #include <mach/irda.h> | 46 | #include <mach/irda.h> |
| 47 | 47 | ||
| 48 | #include <sound/ak4641.h> | ||
| 48 | #include <video/platform_lcd.h> | 49 | #include <video/platform_lcd.h> |
| 49 | #include <video/w100fb.h> | 50 | #include <video/w100fb.h> |
| 50 | 51 | ||
| @@ -765,6 +766,28 @@ static struct i2c_board_info __initdata pi2c_board_info[] = { | |||
| 765 | }; | 766 | }; |
| 766 | 767 | ||
| 767 | /* | 768 | /* |
| 769 | * Asahi Kasei AK4641 on I2C | ||
| 770 | */ | ||
| 771 | |||
| 772 | static struct ak4641_platform_data ak4641_info = { | ||
| 773 | .gpio_power = GPIO27_HX4700_CODEC_ON, | ||
| 774 | .gpio_npdn = GPIO109_HX4700_CODEC_nPDN, | ||
| 775 | }; | ||
| 776 | |||
| 777 | static struct i2c_board_info i2c_board_info[] __initdata = { | ||
| 778 | { | ||
| 779 | I2C_BOARD_INFO("ak4641", 0x12), | ||
| 780 | .platform_data = &ak4641_info, | ||
| 781 | }, | ||
| 782 | }; | ||
| 783 | |||
| 784 | static struct platform_device audio = { | ||
| 785 | .name = "hx4700-audio", | ||
| 786 | .id = -1, | ||
| 787 | }; | ||
| 788 | |||
| 789 | |||
| 790 | /* | ||
| 768 | * PCMCIA | 791 | * PCMCIA |
| 769 | */ | 792 | */ |
| 770 | 793 | ||
| @@ -790,6 +813,7 @@ static struct platform_device *devices[] __initdata = { | |||
| 790 | &gpio_vbus, | 813 | &gpio_vbus, |
| 791 | &power_supply, | 814 | &power_supply, |
| 792 | &strataflash, | 815 | &strataflash, |
| 816 | &audio, | ||
| 793 | &pcmcia, | 817 | &pcmcia, |
| 794 | }; | 818 | }; |
| 795 | 819 | ||
| @@ -827,6 +851,7 @@ static void __init hx4700_init(void) | |||
| 827 | pxa_set_ficp_info(&ficp_info); | 851 | pxa_set_ficp_info(&ficp_info); |
| 828 | pxa27x_set_i2c_power_info(NULL); | 852 | pxa27x_set_i2c_power_info(NULL); |
| 829 | pxa_set_i2c_info(NULL); | 853 | pxa_set_i2c_info(NULL); |
| 854 | i2c_register_board_info(0, ARRAY_AND_SIZE(i2c_board_info)); | ||
| 830 | i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info)); | 855 | i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info)); |
| 831 | pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); | 856 | pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); |
| 832 | spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); | 857 | spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); |
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index 91e4f6c03766..00d6eacab8e4 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/suspend.h> | 25 | #include <linux/suspend.h> |
| 26 | #include <linux/syscore_ops.h> | 26 | #include <linux/syscore_ops.h> |
| 27 | #include <linux/irq.h> | 27 | #include <linux/irq.h> |
| 28 | #include <linux/gpio.h> | ||
| 29 | 28 | ||
| 30 | #include <asm/mach/map.h> | 29 | #include <asm/mach/map.h> |
| 31 | #include <asm/suspend.h> | 30 | #include <asm/suspend.h> |
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index aed6cbcf3866..c1673b3441d4 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
| 24 | #include <linux/i2c/pxa-i2c.h> | 24 | #include <linux/i2c/pxa-i2c.h> |
| 25 | #include <linux/gpio.h> | ||
| 26 | 25 | ||
| 27 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| 28 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
diff --git a/arch/arm/mach-pxa/saarb.c b/arch/arm/mach-pxa/saarb.c index febc809ed5a6..5aded5e6148f 100644 --- a/arch/arm/mach-pxa/saarb.c +++ b/arch/arm/mach-pxa/saarb.c | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/i2c.h> | 15 | #include <linux/i2c.h> |
| 16 | #include <linux/i2c/pxa-i2c.h> | 16 | #include <linux/i2c/pxa-i2c.h> |
| 17 | #include <linux/mfd/88pm860x.h> | 17 | #include <linux/mfd/88pm860x.h> |
| 18 | #include <linux/gpio.h> | ||
| 19 | 18 | ||
| 20 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
| 21 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c index 8d5168d253a9..30989baf7f2a 100644 --- a/arch/arm/mach-pxa/sharpsl_pm.c +++ b/arch/arm/mach-pxa/sharpsl_pm.c | |||
| @@ -168,6 +168,7 @@ struct battery_thresh sharpsl_battery_levels_noac[] = { | |||
| 168 | #define MAXCTRL_SEL_SH 4 | 168 | #define MAXCTRL_SEL_SH 4 |
| 169 | #define MAXCTRL_STR (1u << 7) | 169 | #define MAXCTRL_STR (1u << 7) |
| 170 | 170 | ||
| 171 | extern int max1111_read_channel(int); | ||
| 171 | /* | 172 | /* |
| 172 | * Read MAX1111 ADC | 173 | * Read MAX1111 ADC |
| 173 | */ | 174 | */ |
| @@ -177,8 +178,6 @@ int sharpsl_pm_pxa_read_max1111(int channel) | |||
| 177 | if (machine_is_tosa()) | 178 | if (machine_is_tosa()) |
| 178 | return 0; | 179 | return 0; |
| 179 | 180 | ||
| 180 | extern int max1111_read_channel(int); | ||
| 181 | |||
| 182 | /* max1111 accepts channels from 0-3, however, | 181 | /* max1111 accepts channels from 0-3, however, |
| 183 | * it is encoded from 0-7 here in the code. | 182 | * it is encoded from 0-7 here in the code. |
| 184 | */ | 183 | */ |
diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c index 34cbdac51525..438f02fe122a 100644 --- a/arch/arm/mach-pxa/spitz_pm.c +++ b/arch/arm/mach-pxa/spitz_pm.c | |||
| @@ -172,10 +172,9 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm) | |||
| 172 | static unsigned long spitz_charger_wakeup(void) | 172 | static unsigned long spitz_charger_wakeup(void) |
| 173 | { | 173 | { |
| 174 | unsigned long ret; | 174 | unsigned long ret; |
| 175 | ret = (!gpio_get_value(SPITZ_GPIO_KEY_INT) | 175 | ret = ((!gpio_get_value(SPITZ_GPIO_KEY_INT) |
| 176 | << GPIO_bit(SPITZ_GPIO_KEY_INT)) | 176 | << GPIO_bit(SPITZ_GPIO_KEY_INT)) |
| 177 | | (!gpio_get_value(SPITZ_GPIO_SYNC) | 177 | | gpio_get_value(SPITZ_GPIO_SYNC)); |
| 178 | << GPIO_bit(SPITZ_GPIO_SYNC)); | ||
| 179 | return ret; | 178 | return ret; |
| 180 | } | 179 | } |
| 181 | 180 | ||
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index 06383b51e655..4de7d1e79e73 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c | |||
| @@ -69,6 +69,7 @@ void __init omap_reserve(void) | |||
| 69 | omap_vram_reserve_sdram_memblock(); | 69 | omap_vram_reserve_sdram_memblock(); |
| 70 | omap_dsp_reserve_sdram_memblock(); | 70 | omap_dsp_reserve_sdram_memblock(); |
| 71 | omap_secure_ram_reserve_memblock(); | 71 | omap_secure_ram_reserve_memblock(); |
| 72 | omap_barrier_reserve_memblock(); | ||
| 72 | } | 73 | } |
| 73 | 74 | ||
| 74 | void __init omap_init_consistent_dma_size(void) | 75 | void __init omap_init_consistent_dma_size(void) |
diff --git a/arch/arm/plat-omap/include/plat/omap-secure.h b/arch/arm/plat-omap/include/plat/omap-secure.h index 3047ff923a63..8c7994ce9869 100644 --- a/arch/arm/plat-omap/include/plat/omap-secure.h +++ b/arch/arm/plat-omap/include/plat/omap-secure.h | |||
| @@ -10,4 +10,10 @@ static inline void omap_secure_ram_reserve_memblock(void) | |||
| 10 | { } | 10 | { } |
| 11 | #endif | 11 | #endif |
| 12 | 12 | ||
| 13 | #ifdef CONFIG_OMAP4_ERRATA_I688 | ||
| 14 | extern int omap_barrier_reserve_memblock(void); | ||
| 15 | #else | ||
| 16 | static inline void omap_barrier_reserve_memblock(void) | ||
| 17 | { } | ||
| 18 | #endif | ||
| 13 | #endif /* __OMAP_SECURE_H__ */ | 19 | #endif /* __OMAP_SECURE_H__ */ |
diff --git a/arch/openrisc/include/asm/ptrace.h b/arch/openrisc/include/asm/ptrace.h index 054537c5f9c9..e612ce4512c7 100644 --- a/arch/openrisc/include/asm/ptrace.h +++ b/arch/openrisc/include/asm/ptrace.h | |||
| @@ -77,7 +77,6 @@ struct pt_regs { | |||
| 77 | long syscallno; /* Syscall number (used by strace) */ | 77 | long syscallno; /* Syscall number (used by strace) */ |
| 78 | long dummy; /* Cheap alignment fix */ | 78 | long dummy; /* Cheap alignment fix */ |
| 79 | }; | 79 | }; |
| 80 | #endif /* __ASSEMBLY__ */ | ||
| 81 | 80 | ||
| 82 | /* TODO: Rename this to REDZONE because that's what it is */ | 81 | /* TODO: Rename this to REDZONE because that's what it is */ |
| 83 | #define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */ | 82 | #define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */ |
| @@ -87,6 +86,13 @@ struct pt_regs { | |||
| 87 | #define user_stack_pointer(regs) ((unsigned long)(regs)->sp) | 86 | #define user_stack_pointer(regs) ((unsigned long)(regs)->sp) |
| 88 | #define profile_pc(regs) instruction_pointer(regs) | 87 | #define profile_pc(regs) instruction_pointer(regs) |
| 89 | 88 | ||
| 89 | static inline long regs_return_value(struct pt_regs *regs) | ||
| 90 | { | ||
| 91 | return regs->gpr[11]; | ||
| 92 | } | ||
| 93 | |||
| 94 | #endif /* __ASSEMBLY__ */ | ||
| 95 | |||
| 90 | /* | 96 | /* |
| 91 | * Offsets used by 'ptrace' system call interface. | 97 | * Offsets used by 'ptrace' system call interface. |
| 92 | */ | 98 | */ |
diff --git a/arch/openrisc/kernel/init_task.c b/arch/openrisc/kernel/init_task.c index 45744a384927..ca534082d5f3 100644 --- a/arch/openrisc/kernel/init_task.c +++ b/arch/openrisc/kernel/init_task.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | #include <linux/init_task.h> | 18 | #include <linux/init_task.h> |
| 19 | #include <linux/mqueue.h> | 19 | #include <linux/mqueue.h> |
| 20 | #include <linux/export.h> | ||
| 20 | 21 | ||
| 21 | static struct signal_struct init_signals = INIT_SIGNALS(init_signals); | 22 | static struct signal_struct init_signals = INIT_SIGNALS(init_signals); |
| 22 | static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); | 23 | static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); |
diff --git a/arch/openrisc/kernel/irq.c b/arch/openrisc/kernel/irq.c index 59b302338331..4bfead220956 100644 --- a/arch/openrisc/kernel/irq.c +++ b/arch/openrisc/kernel/irq.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
| 24 | #include <linux/seq_file.h> | 24 | #include <linux/seq_file.h> |
| 25 | #include <linux/kernel_stat.h> | 25 | #include <linux/kernel_stat.h> |
| 26 | #include <linux/export.h> | ||
| 26 | 27 | ||
| 27 | #include <linux/irqflags.h> | 28 | #include <linux/irqflags.h> |
| 28 | 29 | ||
diff --git a/arch/openrisc/kernel/ptrace.c b/arch/openrisc/kernel/ptrace.c index 656b94beab89..7259047d5f9d 100644 --- a/arch/openrisc/kernel/ptrace.c +++ b/arch/openrisc/kernel/ptrace.c | |||
| @@ -188,11 +188,9 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs) | |||
| 188 | */ | 188 | */ |
| 189 | ret = -1L; | 189 | ret = -1L; |
| 190 | 190 | ||
| 191 | /* Are these regs right??? */ | 191 | audit_syscall_entry(audit_arch(), regs->syscallno, |
| 192 | if (unlikely(current->audit_context)) | 192 | regs->gpr[3], regs->gpr[4], |
| 193 | audit_syscall_entry(audit_arch(), regs->syscallno, | 193 | regs->gpr[5], regs->gpr[6]); |
| 194 | regs->gpr[3], regs->gpr[4], | ||
| 195 | regs->gpr[5], regs->gpr[6]); | ||
| 196 | 194 | ||
| 197 | return ret ? : regs->syscallno; | 195 | return ret ? : regs->syscallno; |
| 198 | } | 196 | } |
| @@ -201,9 +199,7 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) | |||
| 201 | { | 199 | { |
| 202 | int step; | 200 | int step; |
| 203 | 201 | ||
| 204 | if (unlikely(current->audit_context)) | 202 | audit_syscall_exit(regs); |
| 205 | audit_syscall_exit(AUDITSC_RESULT(regs->gpr[11]), | ||
| 206 | regs->gpr[11]); | ||
| 207 | 203 | ||
| 208 | step = test_thread_flag(TIF_SINGLESTEP); | 204 | step = test_thread_flag(TIF_SINGLESTEP); |
| 209 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) | 205 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index d1727584230a..6d99a5fcc090 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
| @@ -227,6 +227,9 @@ config COMPAT | |||
| 227 | config SYSVIPC_COMPAT | 227 | config SYSVIPC_COMPAT |
| 228 | def_bool y if COMPAT && SYSVIPC | 228 | def_bool y if COMPAT && SYSVIPC |
| 229 | 229 | ||
| 230 | config KEYS_COMPAT | ||
| 231 | def_bool y if COMPAT && KEYS | ||
| 232 | |||
| 230 | config AUDIT_ARCH | 233 | config AUDIT_ARCH |
| 231 | def_bool y | 234 | def_bool y |
| 232 | 235 | ||
diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c index 39f8fd4438fc..c383ce440d99 100644 --- a/arch/s390/kernel/crash_dump.c +++ b/arch/s390/kernel/crash_dump.c | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/gfp.h> | 12 | #include <linux/gfp.h> |
| 13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
| 14 | #include <linux/crash_dump.h> | ||
| 15 | #include <linux/bootmem.h> | 14 | #include <linux/bootmem.h> |
| 16 | #include <linux/elf.h> | 15 | #include <linux/elf.h> |
| 17 | #include <asm/ipl.h> | 16 | #include <asm/ipl.h> |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 5d633019d8f3..50236610de83 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
| @@ -223,16 +223,38 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
| 223 | #ifdef CONFIG_MEMORY_HOTPLUG | 223 | #ifdef CONFIG_MEMORY_HOTPLUG |
| 224 | int arch_add_memory(int nid, u64 start, u64 size) | 224 | int arch_add_memory(int nid, u64 start, u64 size) |
| 225 | { | 225 | { |
| 226 | struct pglist_data *pgdat; | 226 | unsigned long zone_start_pfn, zone_end_pfn, nr_pages; |
| 227 | unsigned long start_pfn = PFN_DOWN(start); | ||
| 228 | unsigned long size_pages = PFN_DOWN(size); | ||
| 227 | struct zone *zone; | 229 | struct zone *zone; |
| 228 | int rc; | 230 | int rc; |
| 229 | 231 | ||
| 230 | pgdat = NODE_DATA(nid); | ||
| 231 | zone = pgdat->node_zones + ZONE_MOVABLE; | ||
| 232 | rc = vmem_add_mapping(start, size); | 232 | rc = vmem_add_mapping(start, size); |
| 233 | if (rc) | 233 | if (rc) |
| 234 | return rc; | 234 | return rc; |
| 235 | rc = __add_pages(nid, zone, PFN_DOWN(start), PFN_DOWN(size)); | 235 | for_each_zone(zone) { |
| 236 | if (zone_idx(zone) != ZONE_MOVABLE) { | ||
| 237 | /* Add range within existing zone limits */ | ||
| 238 | zone_start_pfn = zone->zone_start_pfn; | ||
| 239 | zone_end_pfn = zone->zone_start_pfn + | ||
| 240 | zone->spanned_pages; | ||
| 241 | } else { | ||
| 242 | /* Add remaining range to ZONE_MOVABLE */ | ||
| 243 | zone_start_pfn = start_pfn; | ||
| 244 | zone_end_pfn = start_pfn + size_pages; | ||
| 245 | } | ||
| 246 | if (start_pfn < zone_start_pfn || start_pfn >= zone_end_pfn) | ||
| 247 | continue; | ||
| 248 | nr_pages = (start_pfn + size_pages > zone_end_pfn) ? | ||
| 249 | zone_end_pfn - start_pfn : size_pages; | ||
| 250 | rc = __add_pages(nid, zone, start_pfn, nr_pages); | ||
| 251 | if (rc) | ||
| 252 | break; | ||
| 253 | start_pfn += nr_pages; | ||
| 254 | size_pages -= nr_pages; | ||
| 255 | if (!size_pages) | ||
| 256 | break; | ||
| 257 | } | ||
| 236 | if (rc) | 258 | if (rc) |
| 237 | vmem_remove_mapping(start, size); | 259 | vmem_remove_mapping(start, size); |
| 238 | return rc; | 260 | return rc; |
