diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-02-29 11:24:39 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-02-29 11:24:39 -0800 | 
| commit | c5f2ac92c69c64ea303a7b28b17143fbf601182d (patch) | |
| tree | 638fb1efb0c14b53876e2002ece72acc1494a311 /arch | |
| parent | 88ebdda6159ffc15699f204c33feb3e431bf9bdc (diff) | |
| parent | f2273ecd9a7405b867522ce03d31a9fee80c2495 (diff) | |
| download | olio-linux-3.10-c5f2ac92c69c64ea303a7b28b17143fbf601182d.tar.xz olio-linux-3.10-c5f2ac92c69c64ea303a7b28b17143fbf601182d.zip  | |
Merge tag 'fixes-3.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Arnd Bergmann says:
 "Another set of arm-soc bug fixes on top of v3.3-rc5.  The few larger
  bits are all for devices that still need to get set up in board code.
  Only three platforms are in this set of fixes: omap2+, pxa and lpc32xx."
* tag 'fixes-3.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (22 commits)
  ARM: LPC32xx: serial.c: Fixed loop limit
  ARM: LPC32xx: serial.c: HW bug workaround
  ARM: LPC32xx: irq.c: Clear latched event
  ARM: LPC32xx: Fix interrupt controller init
  ARM: LPC32xx: Fix irq on GPI_28
  ARM: OMAP2: fix mailbox init code
  ARM: OMAP2+: gpmc-smsc911x: add required smsc911x regulators
  ARM: OMAP1: Fix out-of-bounds array access for Innovator
  OMAP3 EVM: remove out-of-bounds array access of gpio_leds
  ARM: OMAP: Fix build error when mmc_omap is built as module
  ARM: OMAP: Fix kernel panic with HSMMC when twl4030_gpio is a module
  pxa/hx4700: add platform device and I2C info for AK4641 codec
  arch/arm/mach-pxa/: included linux/gpio.h twice
  arch/arm/mach-mmp/: some files include some headers twice
  ARM: pxa: fix error handling in pxa2xx_drv_pcmcia_probe
  ARM: pxa: fix including linux/gpio.h twice
  ARM: pxa: fix mixed declarations and code in sharpsl_pm
  ARM: pxa: fix wrong parsing gpio event on spitz
  ARM: OMAP2+: usb-host: fix compile warning
  ARM: OMAP4: Move the barrier memboclk_steal() as part of reserve callback
  ...
Diffstat (limited to 'arch')
28 files changed, 178 insertions, 40 deletions
diff --git a/arch/arm/mach-lpc32xx/include/mach/irqs.h b/arch/arm/mach-lpc32xx/include/mach/irqs.h index 2667f52e3b0..9e3b90df32e 100644 --- a/arch/arm/mach-lpc32xx/include/mach/irqs.h +++ b/arch/arm/mach-lpc32xx/include/mach/irqs.h @@ -61,7 +61,7 @@   */  #define IRQ_LPC32XX_JTAG_COMM_TX	LPC32XX_SIC1_IRQ(1)  #define IRQ_LPC32XX_JTAG_COMM_RX	LPC32XX_SIC1_IRQ(2) -#define IRQ_LPC32XX_GPI_11		LPC32XX_SIC1_IRQ(4) +#define IRQ_LPC32XX_GPI_28		LPC32XX_SIC1_IRQ(4)  #define IRQ_LPC32XX_TS_P		LPC32XX_SIC1_IRQ(6)  #define IRQ_LPC32XX_TS_IRQ		LPC32XX_SIC1_IRQ(7)  #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 4eae566dfdc..c74de01ab5b 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] = {  		.event_group = &lpc32xx_event_pin_regs,  		.mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT,  	}, +	[IRQ_LPC32XX_GPI_28] = { +		.event_group = &lpc32xx_event_pin_regs, +		.mask = LPC32XX_CLKPWR_EXTSRC_GPI_28_BIT, +	},  	[IRQ_LPC32XX_GPIO_00] = {  		.event_group = &lpc32xx_event_int_regs,  		.mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT, @@ -305,9 +309,18 @@ static int lpc32xx_irq_wake(struct irq_data *d, unsigned int state)  		if (state)  			eventreg |= lpc32xx_events[d->irq].mask; -		else +		else {  			eventreg &= ~lpc32xx_events[d->irq].mask; +			/* +			 * When disabling the wakeup, clear the latched +			 * event +			 */ +			__raw_writel(lpc32xx_events[d->irq].mask, +				lpc32xx_events[d->irq]. +				event_group->rawstat_reg); +		} +  		__raw_writel(eventreg,  			lpc32xx_events[d->irq].event_group->enab_reg); @@ -380,13 +393,15 @@ void __init lpc32xx_init_irq(void)  	/* Setup SIC1 */  	__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE)); -	__raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE)); -	__raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE)); +	__raw_writel(SIC1_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE)); +	__raw_writel(SIC1_ATR_DEFAULT, +				LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));  	/* Setup SIC2 */  	__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE)); -	__raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE)); -	__raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE)); +	__raw_writel(SIC2_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE)); +	__raw_writel(SIC2_ATR_DEFAULT, +				LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));  	/* Configure supported IRQ's */  	for (i = 0; i < NR_IRQS; i++) { diff --git a/arch/arm/mach-lpc32xx/serial.c b/arch/arm/mach-lpc32xx/serial.c index 429cfdbb2b3..f2735281616 100644 --- a/arch/arm/mach-lpc32xx/serial.c +++ b/arch/arm/mach-lpc32xx/serial.c @@ -88,6 +88,7 @@ struct uartinit {  	char *uart_ck_name;  	u32 ck_mode_mask;  	void __iomem *pdiv_clk_reg; +	resource_size_t mapbase;  };  static struct uartinit uartinit_data[] __initdata = { @@ -97,6 +98,7 @@ static struct uartinit uartinit_data[] __initdata = {  		.ck_mode_mask =  			LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5),  		.pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL, +		.mapbase = LPC32XX_UART5_BASE,  	},  #endif  #ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT @@ -105,6 +107,7 @@ static struct uartinit uartinit_data[] __initdata = {  		.ck_mode_mask =  			LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3),  		.pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL, +		.mapbase = LPC32XX_UART3_BASE,  	},  #endif  #ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT @@ -113,6 +116,7 @@ static struct uartinit uartinit_data[] __initdata = {  		.ck_mode_mask =  			LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4),  		.pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL, +		.mapbase = LPC32XX_UART4_BASE,  	},  #endif  #ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT @@ -121,6 +125,7 @@ static struct uartinit uartinit_data[] __initdata = {  		.ck_mode_mask =  			LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6),  		.pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL, +		.mapbase = LPC32XX_UART6_BASE,  	},  #endif  }; @@ -165,11 +170,24 @@ void __init lpc32xx_serial_init(void)  		/* pre-UART clock divider set to 1 */  		__raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg); + +		/* +		 * Force a flush of the RX FIFOs to work around a +		 * HW bug +		 */ +		puart = uartinit_data[i].mapbase; +		__raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart)); +		__raw_writel(0x00, LPC32XX_UART_DLL_FIFO(puart)); +		j = LPC32XX_SUART_FIFO_SIZE; +		while (j--) +			tmp = __raw_readl( +				LPC32XX_UART_DLL_FIFO(puart)); +		__raw_writel(0, LPC32XX_UART_IIR_FCR(puart));  	}  	/* This needs to be done after all UART clocks are setup */  	__raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE); -	for (i = 0; i < ARRAY_SIZE(uartinit_data) - 1; i++) { +	for (i = 0; i < ARRAY_SIZE(uartinit_data); i++) {  		/* Force a flush of the RX FIFOs to work around a HW bug */  		puart = serial_std_platform_data[i].mapbase;  		__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 17cb7606012..3588a558415 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c @@ -17,7 +17,6 @@  #include <linux/mtd/partitions.h>  #include <linux/mtd/nand.h>  #include <linux/interrupt.h> -#include <linux/gpio.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c index 7bc17eaa12e..ada1213982b 100644 --- a/arch/arm/mach-mmp/pxa168.c +++ b/arch/arm/mach-mmp/pxa168.c @@ -24,7 +24,6 @@  #include <mach/dma.h>  #include <mach/devices.h>  #include <mach/mfp.h> -#include <linux/platform_device.h>  #include <linux/dma-mapping.h>  #include <mach/pxa168.h> diff --git a/arch/arm/mach-mmp/tavorevb.c b/arch/arm/mach-mmp/tavorevb.c index 8e3b5af04a5..bc97170125b 100644 --- a/arch/arm/mach-mmp/tavorevb.c +++ b/arch/arm/mach-mmp/tavorevb.c @@ -12,7 +12,6 @@  #include <linux/kernel.h>  #include <linux/platform_device.h>  #include <linux/smc91x.h> -#include <linux/gpio.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 309369ea697..be2002f42de 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)  #ifdef CONFIG_ARCH_OMAP15XX  	if (cpu_is_omap1510()) {  		omap1_usb_init(&innovator1510_usb_config); -		innovator_config[1].data = &innovator1510_lcd_config; +		innovator_config[0].data = &innovator1510_lcd_config;  	}  #endif  #ifdef CONFIG_ARCH_OMAP16XX  	if (cpu_is_omap1610()) {  		omap1_usb_init(&h2_usb_config); -		innovator_config[1].data = &innovator1610_lcd_config; +		innovator_config[0].data = &innovator1610_lcd_config;  	}  #endif  	omap_board_config = innovator_config; diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index d965da45160..e20c8ab80b0 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -364,8 +364,8 @@ config OMAP3_SDRC_AC_TIMING  	  going on could result in system crashes;  config OMAP4_ERRATA_I688 -	bool "OMAP4 errata: Async Bridge Corruption (BROKEN)" -	depends on ARCH_OMAP4 && BROKEN +	bool "OMAP4 errata: Async Bridge Corruption" +	depends on ARCH_OMAP4  	select ARCH_HAS_BARRIERS  	help  	  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 42a4d11fad2..67226271760 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)  	else  		*openp = 0; +#ifdef CONFIG_MMC_OMAP  	omap_mmc_notify_cover_event(mmc_device, index, *openp); +#else +	pr_warn("MMC: notify cover event not available\n"); +#endif  }  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 c775bead149..c877236a844 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,  	gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");  	/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ -	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; +	gpio_leds[0].gpio = gpio + TWL4030_GPIO_MAX + 1;  	platform_device_register(&leds_gpio); diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index febffde2ff1..7e9338e8d68 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -132,6 +132,7 @@ void omap3_map_io(void);  void am33xx_map_io(void);  void omap4_map_io(void);  void ti81xx_map_io(void); +void omap_barriers_init(void);  /**   * 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 cfdbb86bc84..72e018b9b26 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,  	struct timespec ts_preidle, ts_postidle, ts_idle;  	u32 cpu1_state;  	int idle_time; -	int new_state_idx;  	int cpu_id = smp_processor_id();  	/* Used to keep track of the total time in idle */ @@ -84,8 +83,8 @@ static int omap4_enter_idle(struct cpuidle_device *dev,  	 */  	cpu1_state = pwrdm_read_pwrst(cpu1_pd);  	if (cpu1_state != PWRDM_POWER_OFF) { -		new_state_idx = drv->safe_state_index; -		cx = cpuidle_get_statedata(&dev->states_usage[new_state_idx]); +		index = drv->safe_state_index; +		cx = cpuidle_get_statedata(&dev->states_usage[index]);  	}  	if (index > 0) diff --git a/arch/arm/mach-omap2/gpmc-smsc911x.c b/arch/arm/mach-omap2/gpmc-smsc911x.c index 997033129d2..bbb870c04a5 100644 --- a/arch/arm/mach-omap2/gpmc-smsc911x.c +++ b/arch/arm/mach-omap2/gpmc-smsc911x.c @@ -19,6 +19,8 @@  #include <linux/interrupt.h>  #include <linux/io.h>  #include <linux/smsc911x.h> +#include <linux/regulator/fixed.h> +#include <linux/regulator/machine.h>  #include <plat/board.h>  #include <plat/gpmc.h> @@ -42,6 +44,50 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = {  	.flags		= SMSC911X_USE_16BIT,  }; +static struct regulator_consumer_supply gpmc_smsc911x_supply[] = { +	REGULATOR_SUPPLY("vddvario", "smsc911x.0"), +	REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), +}; + +/* Generic regulator definition to satisfy smsc911x */ +static struct regulator_init_data gpmc_smsc911x_reg_init_data = { +	.constraints = { +		.min_uV			= 3300000, +		.max_uV			= 3300000, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +	.num_consumer_supplies	= ARRAY_SIZE(gpmc_smsc911x_supply), +	.consumer_supplies	= gpmc_smsc911x_supply, +}; + +static struct fixed_voltage_config gpmc_smsc911x_fixed_reg_data = { +	.supply_name		= "gpmc_smsc911x", +	.microvolts		= 3300000, +	.gpio			= -EINVAL, +	.startup_delay		= 0, +	.enable_high		= 0, +	.enabled_at_boot	= 1, +	.init_data		= &gpmc_smsc911x_reg_init_data, +}; + +/* + * Platform device id of 42 is a temporary fix to avoid conflicts + * with other reg-fixed-voltage devices. The real fix should + * involve the driver core providing a way of dynamically + * assigning a unique id on registration for platform devices + * in the same name space. + */ +static struct platform_device gpmc_smsc911x_regulator = { +	.name		= "reg-fixed-voltage", +	.id		= 42, +	.dev = { +		.platform_data	= &gpmc_smsc911x_fixed_reg_data, +	}, +}; +  /*   * Initialize smsc911x device connected to the GPMC. Note that we   * 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)  	gpmc_cfg = board_data; +	ret = platform_device_register(&gpmc_smsc911x_regulator); +	if (ret < 0) { +		pr_err("Unable to register smsc911x regulators: %d\n", ret); +		return; +	} +  	if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {  		pr_err("Failed to request GPMC mem region\n");  		return; diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index b40c2889529..19dd1657245 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,  	return 0;  } +static int omap_hsmmc_done;  #define MAX_OMAP_MMC_HWMOD_NAME_LEN		16  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)  {  	u32 reg; +	if (omap_hsmmc_done) +		return; + +	omap_hsmmc_done = 1; +  	if (!cpu_is_omap44xx()) {  		if (cpu_is_omap2430()) {  			control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index eb50c29fb64..fb11b44fbde 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)  void __init omap44xx_map_common_io(void)  {  	iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); +	omap_barriers_init();  }  #endif diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index a6db1e4f7b6..2cc1aa004b9 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 = {  	.ops	= &omap2_mbox_ops,  	.priv	= &omap2_mbox_iva_priv,  }; +#endif -struct omap_mbox *omap2_mboxes[] = { &mbox_dsp_info, &mbox_iva_info, NULL }; +#ifdef CONFIG_ARCH_OMAP2 +struct omap_mbox *omap2_mboxes[] = { +	&mbox_dsp_info, +#ifdef CONFIG_SOC_OMAP2420 +	&mbox_iva_info, +#endif +	NULL +};  #endif  #if defined(CONFIG_ARCH_OMAP4) diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index fb8bc9fa43b..611a0e3d54c 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,  	return -ENODEV;  } -static int __init +static int  omap_mux_get_by_name(const char *muxname,  			struct omap_mux_partition **found_partition,  			struct omap_mux **found_mux) diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 40a8fbc07e4..ebc59509131 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -24,6 +24,7 @@  #include <plat/irqs.h>  #include <plat/sram.h> +#include <plat/omap-secure.h>  #include <mach/hardware.h>  #include <mach/omap-wakeupgen.h> @@ -43,6 +44,9 @@ static void __iomem *sar_ram_base;  void __iomem *dram_sync, *sram_sync; +static phys_addr_t paddr; +static u32 size; +  void omap_bus_sync(void)  {  	if (dram_sync && sram_sync) { @@ -52,18 +56,20 @@ void omap_bus_sync(void)  	}  } -static int __init omap_barriers_init(void) +/* Steal one page physical memory for barrier implementation */ +int __init omap_barrier_reserve_memblock(void)  { -	struct map_desc dram_io_desc[1]; -	phys_addr_t paddr; -	u32 size; - -	if (!cpu_is_omap44xx()) -		return -ENODEV;  	size = ALIGN(PAGE_SIZE, SZ_1M);  	paddr = arm_memblock_steal(size, SZ_1M); +	return 0; +} + +void __init omap_barriers_init(void) +{ +	struct map_desc dram_io_desc[1]; +  	dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA;  	dram_io_desc[0].pfn = __phys_to_pfn(paddr);  	dram_io_desc[0].length = size; @@ -75,9 +81,10 @@ static int __init omap_barriers_init(void)  	pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n",  		(long long) paddr, dram_io_desc[0].virtual); -	return 0;  } -core_initcall(omap_barriers_init); +#else +void __init omap_barriers_init(void) +{}  #endif  void __init gic_init_irq(void) diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 1881fe91514..5a65dd04aa3 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,  	freq = clk->rate;  	clk_put(clk); +	rcu_read_lock();  	opp = opp_find_freq_ceil(dev, &freq);  	if (IS_ERR(opp)) { +		rcu_read_unlock();  		pr_err("%s: unable to find boot up OPP for vdd_%s\n",  			__func__, vdd_name);  		goto exit;  	}  	bootup_volt = opp_get_voltage(opp); +	rcu_read_unlock();  	if (!bootup_volt) {  		pr_err("%s: unable to find voltage corresponding "  			"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 771dc781b74..f51348dafaf 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)  void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  {  	struct omap_hwmod	*oh[2]; -	struct omap_device	*od; +	struct platform_device	*pdev;  	int			bus_id = -1;  	int			i; @@ -522,11 +522,11 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  		return;  	} -	od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2, +	pdev = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,  				(void *)&usbhs_data, sizeof(usbhs_data),  				omap_uhhtll_latency,  				ARRAY_SIZE(omap_uhhtll_latency), false); -	if (IS_ERR(od)) { +	if (IS_ERR(pdev)) {  		pr_err("Could not build hwmod devices %s,%s\n",  			USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);  		return; diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index fb9b62dcf4c..208eef1c048 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c @@ -45,6 +45,7 @@  #include <mach/hx4700.h>  #include <mach/irda.h> +#include <sound/ak4641.h>  #include <video/platform_lcd.h>  #include <video/w100fb.h> @@ -765,6 +766,28 @@ static struct i2c_board_info __initdata pi2c_board_info[] = {  };  /* + * Asahi Kasei AK4641 on I2C + */ + +static struct ak4641_platform_data ak4641_info = { +	.gpio_power = GPIO27_HX4700_CODEC_ON, +	.gpio_npdn  = GPIO109_HX4700_CODEC_nPDN, +}; + +static struct i2c_board_info i2c_board_info[] __initdata = { +	{ +		I2C_BOARD_INFO("ak4641", 0x12), +		.platform_data = &ak4641_info, +	}, +}; + +static struct platform_device audio = { +	.name	= "hx4700-audio", +	.id	= -1, +}; + + +/*   * PCMCIA   */ @@ -790,6 +813,7 @@ static struct platform_device *devices[] __initdata = {  	&gpio_vbus,  	&power_supply,  	&strataflash, +	&audio,  	&pcmcia,  }; @@ -827,6 +851,7 @@ static void __init hx4700_init(void)  	pxa_set_ficp_info(&ficp_info);  	pxa27x_set_i2c_power_info(NULL);  	pxa_set_i2c_info(NULL); +	i2c_register_board_info(0, ARRAY_AND_SIZE(i2c_board_info));  	i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info));  	pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);  	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 91e4f6c0376..00d6eacab8e 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c @@ -25,7 +25,6 @@  #include <linux/suspend.h>  #include <linux/syscore_ops.h>  #include <linux/irq.h> -#include <linux/gpio.h>  #include <asm/mach/map.h>  #include <asm/suspend.h> diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index aed6cbcf386..c1673b3441d 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c @@ -22,7 +22,6 @@  #include <linux/io.h>  #include <linux/irq.h>  #include <linux/i2c/pxa-i2c.h> -#include <linux/gpio.h>  #include <asm/mach/map.h>  #include <mach/hardware.h> diff --git a/arch/arm/mach-pxa/saarb.c b/arch/arm/mach-pxa/saarb.c index febc809ed5a..5aded5e6148 100644 --- a/arch/arm/mach-pxa/saarb.c +++ b/arch/arm/mach-pxa/saarb.c @@ -15,7 +15,6 @@  #include <linux/i2c.h>  #include <linux/i2c/pxa-i2c.h>  #include <linux/mfd/88pm860x.h> -#include <linux/gpio.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c index 8d5168d253a..30989baf7f2 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[] = {  #define MAXCTRL_SEL_SH   4  #define MAXCTRL_STR      (1u << 7) +extern int max1111_read_channel(int);  /*   * Read MAX1111 ADC   */ @@ -177,8 +178,6 @@ int sharpsl_pm_pxa_read_max1111(int channel)  	if (machine_is_tosa())  	    return 0; -	extern int max1111_read_channel(int); -  	/* max1111 accepts channels from 0-3, however,  	 * it is encoded from 0-7 here in the code.  	 */ diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c index 34cbdac5152..438f02fe122 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)  static unsigned long spitz_charger_wakeup(void)  {  	unsigned long ret; -	ret = (!gpio_get_value(SPITZ_GPIO_KEY_INT) +	ret = ((!gpio_get_value(SPITZ_GPIO_KEY_INT)  		<< GPIO_bit(SPITZ_GPIO_KEY_INT)) -		| (!gpio_get_value(SPITZ_GPIO_SYNC) -		<< GPIO_bit(SPITZ_GPIO_SYNC)); +		| gpio_get_value(SPITZ_GPIO_SYNC));  	return ret;  } diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index 06383b51e65..4de7d1e79e7 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c @@ -69,6 +69,7 @@ void __init omap_reserve(void)  	omap_vram_reserve_sdram_memblock();  	omap_dsp_reserve_sdram_memblock();  	omap_secure_ram_reserve_memblock(); +	omap_barrier_reserve_memblock();  }  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 3047ff923a6..8c7994ce986 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)  { }  #endif +#ifdef CONFIG_OMAP4_ERRATA_I688 +extern int omap_barrier_reserve_memblock(void); +#else +static inline void omap_barrier_reserve_memblock(void) +{ } +#endif  #endif /* __OMAP_SECURE_H__ */  |