mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-27 17:11:46 +00:00
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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIVAwUAT05lqGCrR//JCVInAQK+lhAAhWkKqdXyIswvg5p5Q1oOQziH1MGmXw87 ufu/XgoKE7W8gr/oDfRgUPtzmlg0LVkm/ObvUr2JgNstvZpE6AU1irxLbhNxCbJt 3UJCqc3XWJL08aC0N4s0fj8j2iYv/2ZmO9litBPH1NOhIk+hm3iVqrnSFpdwtcYm DZhOJg9WXRk93xYZx/CTTjxF+2pnd8XBmz7q6nJFKN6rRslbKuUpHlc6IlfXkQma btayG2EMWxmXsevOUq9oCGkbp9MozlOfuuSHCfZaUeDXVgf+DUfyx+ZppC/ZS14k cz9u7U+yRuhGX2lC+7lRC+Bek/i7c8NPTgVb1lRbvitnEzkUcz/8tkrztlSrC5ws 49dKSZUq3jJMb8tl0xFxzKHIQfE+xTrJ7Mor4Tj72XCwIOEcIhAwMYEOCmjpMzER 4g7IypNM0UFdN6/cywAYHX2X/pjjrQfJC1ridqzzUZjcw4b+FEsaWcp5+IV/Yi+D z41VdlrN0pK3AhDq9IMpDwHtbtOGYJFBl6QdLvLFwR9kEudvDt7cFGHZKT4hsE5L NqpASxZUfrcX5AQraZqnYMH8EJcOmxPOSp/iFWdOe4m3L1goE2R5oxIwg3ptIjYK Im2Ye6RrDVjF3bkyAdXXOxiu0OAo17Jt4vX+FvORug12mfxJGiWsdypSBXFDy5go ozkUx/YTHv0= =ElaK -----END PGP SIGNATURE----- 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 ...
This commit is contained in:
commit
c5f2ac92c6
29 changed files with 181 additions and 49 deletions
|
@ -61,7 +61,7 @@
|
||||||
*/
|
*/
|
||||||
#define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1)
|
#define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1)
|
||||||
#define IRQ_LPC32XX_JTAG_COMM_RX LPC32XX_SIC1_IRQ(2)
|
#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_P LPC32XX_SIC1_IRQ(6)
|
||||||
#define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7)
|
#define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7)
|
||||||
#define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8)
|
#define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8)
|
||||||
|
|
|
@ -118,6 +118,10 @@ static const struct lpc32xx_event_info lpc32xx_events[NR_IRQS] = {
|
||||||
.event_group = &lpc32xx_event_pin_regs,
|
.event_group = &lpc32xx_event_pin_regs,
|
||||||
.mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT,
|
.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] = {
|
[IRQ_LPC32XX_GPIO_00] = {
|
||||||
.event_group = &lpc32xx_event_int_regs,
|
.event_group = &lpc32xx_event_int_regs,
|
||||||
.mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT,
|
.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)
|
if (state)
|
||||||
eventreg |= lpc32xx_events[d->irq].mask;
|
eventreg |= lpc32xx_events[d->irq].mask;
|
||||||
else
|
else {
|
||||||
eventreg &= ~lpc32xx_events[d->irq].mask;
|
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,
|
__raw_writel(eventreg,
|
||||||
lpc32xx_events[d->irq].event_group->enab_reg);
|
lpc32xx_events[d->irq].event_group->enab_reg);
|
||||||
|
|
||||||
|
@ -380,13 +393,15 @@ void __init lpc32xx_init_irq(void)
|
||||||
|
|
||||||
/* Setup SIC1 */
|
/* Setup SIC1 */
|
||||||
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE));
|
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE));
|
||||||
__raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE));
|
__raw_writel(SIC1_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE));
|
||||||
__raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));
|
__raw_writel(SIC1_ATR_DEFAULT,
|
||||||
|
LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));
|
||||||
|
|
||||||
/* Setup SIC2 */
|
/* Setup SIC2 */
|
||||||
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE));
|
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE));
|
||||||
__raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE));
|
__raw_writel(SIC2_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE));
|
||||||
__raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));
|
__raw_writel(SIC2_ATR_DEFAULT,
|
||||||
|
LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));
|
||||||
|
|
||||||
/* Configure supported IRQ's */
|
/* Configure supported IRQ's */
|
||||||
for (i = 0; i < NR_IRQS; i++) {
|
for (i = 0; i < NR_IRQS; i++) {
|
||||||
|
|
|
@ -88,6 +88,7 @@ struct uartinit {
|
||||||
char *uart_ck_name;
|
char *uart_ck_name;
|
||||||
u32 ck_mode_mask;
|
u32 ck_mode_mask;
|
||||||
void __iomem *pdiv_clk_reg;
|
void __iomem *pdiv_clk_reg;
|
||||||
|
resource_size_t mapbase;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct uartinit uartinit_data[] __initdata = {
|
static struct uartinit uartinit_data[] __initdata = {
|
||||||
|
@ -97,6 +98,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART5_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT
|
#ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT
|
||||||
|
@ -105,6 +107,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART3_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT
|
#ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT
|
||||||
|
@ -113,6 +116,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART4_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT
|
#ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT
|
||||||
|
@ -121,6 +125,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART6_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -165,11 +170,24 @@ void __init lpc32xx_serial_init(void)
|
||||||
|
|
||||||
/* pre-UART clock divider set to 1 */
|
/* pre-UART clock divider set to 1 */
|
||||||
__raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg);
|
__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 */
|
/* This needs to be done after all UART clocks are setup */
|
||||||
__raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE);
|
__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 */
|
/* Force a flush of the RX FIFOs to work around a HW bug */
|
||||||
puart = serial_std_platform_data[i].mapbase;
|
puart = serial_std_platform_data[i].mapbase;
|
||||||
__raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
|
__raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <mach/pxa168.h>
|
#include <mach/pxa168.h>
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/smc91x.h>
|
#include <linux/smc91x.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
|
|
@ -416,13 +416,13 @@ static void __init innovator_init(void)
|
||||||
#ifdef CONFIG_ARCH_OMAP15XX
|
#ifdef CONFIG_ARCH_OMAP15XX
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap1510()) {
|
||||||
omap1_usb_init(&innovator1510_usb_config);
|
omap1_usb_init(&innovator1510_usb_config);
|
||||||
innovator_config[1].data = &innovator1510_lcd_config;
|
innovator_config[0].data = &innovator1510_lcd_config;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_OMAP16XX
|
#ifdef CONFIG_ARCH_OMAP16XX
|
||||||
if (cpu_is_omap1610()) {
|
if (cpu_is_omap1610()) {
|
||||||
omap1_usb_init(&h2_usb_config);
|
omap1_usb_init(&h2_usb_config);
|
||||||
innovator_config[1].data = &innovator1610_lcd_config;
|
innovator_config[0].data = &innovator1610_lcd_config;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
omap_board_config = innovator_config;
|
omap_board_config = innovator_config;
|
||||||
|
|
|
@ -364,8 +364,8 @@ config OMAP3_SDRC_AC_TIMING
|
||||||
going on could result in system crashes;
|
going on could result in system crashes;
|
||||||
|
|
||||||
config OMAP4_ERRATA_I688
|
config OMAP4_ERRATA_I688
|
||||||
bool "OMAP4 errata: Async Bridge Corruption (BROKEN)"
|
bool "OMAP4 errata: Async Bridge Corruption"
|
||||||
depends on ARCH_OMAP4 && BROKEN
|
depends on ARCH_OMAP4
|
||||||
select ARCH_HAS_BARRIERS
|
select ARCH_HAS_BARRIERS
|
||||||
help
|
help
|
||||||
If a data is stalled inside asynchronous bridge because of back
|
If a data is stalled inside asynchronous bridge because of back
|
||||||
|
|
|
@ -371,7 +371,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask)
|
||||||
else
|
else
|
||||||
*openp = 0;
|
*openp = 0;
|
||||||
|
|
||||||
|
#ifdef CONFIG_MMC_OMAP
|
||||||
omap_mmc_notify_cover_event(mmc_device, index, *openp);
|
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)
|
static int n8x0_mmc_late_init(struct device *dev)
|
||||||
|
|
|
@ -381,7 +381,7 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
|
||||||
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
|
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
|
||||||
|
|
||||||
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
/* 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);
|
platform_device_register(&leds_gpio);
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,7 @@ void omap3_map_io(void);
|
||||||
void am33xx_map_io(void);
|
void am33xx_map_io(void);
|
||||||
void omap4_map_io(void);
|
void omap4_map_io(void);
|
||||||
void ti81xx_map_io(void);
|
void ti81xx_map_io(void);
|
||||||
|
void omap_barriers_init(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* omap_test_timeout - busy-loop, testing a condition
|
* omap_test_timeout - busy-loop, testing a condition
|
||||||
|
|
|
@ -65,7 +65,6 @@ static int omap4_enter_idle(struct cpuidle_device *dev,
|
||||||
struct timespec ts_preidle, ts_postidle, ts_idle;
|
struct timespec ts_preidle, ts_postidle, ts_idle;
|
||||||
u32 cpu1_state;
|
u32 cpu1_state;
|
||||||
int idle_time;
|
int idle_time;
|
||||||
int new_state_idx;
|
|
||||||
int cpu_id = smp_processor_id();
|
int cpu_id = smp_processor_id();
|
||||||
|
|
||||||
/* Used to keep track of the total time in idle */
|
/* 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);
|
cpu1_state = pwrdm_read_pwrst(cpu1_pd);
|
||||||
if (cpu1_state != PWRDM_POWER_OFF) {
|
if (cpu1_state != PWRDM_POWER_OFF) {
|
||||||
new_state_idx = drv->safe_state_index;
|
index = drv->safe_state_index;
|
||||||
cx = cpuidle_get_statedata(&dev->states_usage[new_state_idx]);
|
cx = cpuidle_get_statedata(&dev->states_usage[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
|
||||||
#include <plat/board.h>
|
#include <plat/board.h>
|
||||||
#include <plat/gpmc.h>
|
#include <plat/gpmc.h>
|
||||||
|
@ -42,6 +44,50 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = {
|
||||||
.flags = SMSC911X_USE_16BIT,
|
.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
|
* Initialize smsc911x device connected to the GPMC. Note that we
|
||||||
* assume that pin multiplexing is done in the board-*.c file,
|
* 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;
|
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) {
|
if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
|
||||||
pr_err("Failed to request GPMC mem region\n");
|
pr_err("Failed to request GPMC mem region\n");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -428,6 +428,7 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int omap_hsmmc_done;
|
||||||
#define MAX_OMAP_MMC_HWMOD_NAME_LEN 16
|
#define MAX_OMAP_MMC_HWMOD_NAME_LEN 16
|
||||||
|
|
||||||
void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)
|
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;
|
u32 reg;
|
||||||
|
|
||||||
|
if (omap_hsmmc_done)
|
||||||
|
return;
|
||||||
|
|
||||||
|
omap_hsmmc_done = 1;
|
||||||
|
|
||||||
if (!cpu_is_omap44xx()) {
|
if (!cpu_is_omap44xx()) {
|
||||||
if (cpu_is_omap2430()) {
|
if (cpu_is_omap2430()) {
|
||||||
control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
|
control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
|
||||||
|
|
|
@ -307,6 +307,7 @@ void __init omapam33xx_map_common_io(void)
|
||||||
void __init omap44xx_map_common_io(void)
|
void __init omap44xx_map_common_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
|
iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
|
||||||
|
omap_barriers_init();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -281,8 +281,16 @@ static struct omap_mbox mbox_iva_info = {
|
||||||
.ops = &omap2_mbox_ops,
|
.ops = &omap2_mbox_ops,
|
||||||
.priv = &omap2_mbox_iva_priv,
|
.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
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_OMAP4)
|
#if defined(CONFIG_ARCH_OMAP4)
|
||||||
|
|
|
@ -218,7 +218,7 @@ static int _omap_mux_get_by_name(struct omap_mux_partition *partition,
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init
|
static int
|
||||||
omap_mux_get_by_name(const char *muxname,
|
omap_mux_get_by_name(const char *muxname,
|
||||||
struct omap_mux_partition **found_partition,
|
struct omap_mux_partition **found_partition,
|
||||||
struct omap_mux **found_mux)
|
struct omap_mux **found_mux)
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include <plat/irqs.h>
|
#include <plat/irqs.h>
|
||||||
#include <plat/sram.h>
|
#include <plat/sram.h>
|
||||||
|
#include <plat/omap-secure.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/omap-wakeupgen.h>
|
#include <mach/omap-wakeupgen.h>
|
||||||
|
@ -43,6 +44,9 @@ static void __iomem *sar_ram_base;
|
||||||
|
|
||||||
void __iomem *dram_sync, *sram_sync;
|
void __iomem *dram_sync, *sram_sync;
|
||||||
|
|
||||||
|
static phys_addr_t paddr;
|
||||||
|
static u32 size;
|
||||||
|
|
||||||
void omap_bus_sync(void)
|
void omap_bus_sync(void)
|
||||||
{
|
{
|
||||||
if (dram_sync && sram_sync) {
|
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);
|
size = ALIGN(PAGE_SIZE, SZ_1M);
|
||||||
paddr = arm_memblock_steal(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].virtual = OMAP4_DRAM_BARRIER_VA;
|
||||||
dram_io_desc[0].pfn = __phys_to_pfn(paddr);
|
dram_io_desc[0].pfn = __phys_to_pfn(paddr);
|
||||||
dram_io_desc[0].length = size;
|
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",
|
pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n",
|
||||||
(long long) paddr, dram_io_desc[0].virtual);
|
(long long) paddr, dram_io_desc[0].virtual);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
core_initcall(omap_barriers_init);
|
#else
|
||||||
|
void __init omap_barriers_init(void)
|
||||||
|
{}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void __init gic_init_irq(void)
|
void __init gic_init_irq(void)
|
||||||
|
|
|
@ -174,14 +174,17 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
|
||||||
freq = clk->rate;
|
freq = clk->rate;
|
||||||
clk_put(clk);
|
clk_put(clk);
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
opp = opp_find_freq_ceil(dev, &freq);
|
opp = opp_find_freq_ceil(dev, &freq);
|
||||||
if (IS_ERR(opp)) {
|
if (IS_ERR(opp)) {
|
||||||
|
rcu_read_unlock();
|
||||||
pr_err("%s: unable to find boot up OPP for vdd_%s\n",
|
pr_err("%s: unable to find boot up OPP for vdd_%s\n",
|
||||||
__func__, vdd_name);
|
__func__, vdd_name);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
bootup_volt = opp_get_voltage(opp);
|
bootup_volt = opp_get_voltage(opp);
|
||||||
|
rcu_read_unlock();
|
||||||
if (!bootup_volt) {
|
if (!bootup_volt) {
|
||||||
pr_err("%s: unable to find voltage corresponding "
|
pr_err("%s: unable to find voltage corresponding "
|
||||||
"to the bootup OPP for vdd_%s\n", __func__, vdd_name);
|
"to the bootup OPP for vdd_%s\n", __func__, vdd_name);
|
||||||
|
|
|
@ -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)
|
void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh[2];
|
struct omap_hwmod *oh[2];
|
||||||
struct omap_device *od;
|
struct platform_device *pdev;
|
||||||
int bus_id = -1;
|
int bus_id = -1;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -522,11 +522,11 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
|
||||||
return;
|
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),
|
(void *)&usbhs_data, sizeof(usbhs_data),
|
||||||
omap_uhhtll_latency,
|
omap_uhhtll_latency,
|
||||||
ARRAY_SIZE(omap_uhhtll_latency), false);
|
ARRAY_SIZE(omap_uhhtll_latency), false);
|
||||||
if (IS_ERR(od)) {
|
if (IS_ERR(pdev)) {
|
||||||
pr_err("Could not build hwmod devices %s,%s\n",
|
pr_err("Could not build hwmod devices %s,%s\n",
|
||||||
USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
|
USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <mach/hx4700.h>
|
#include <mach/hx4700.h>
|
||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
|
|
||||||
|
#include <sound/ak4641.h>
|
||||||
#include <video/platform_lcd.h>
|
#include <video/platform_lcd.h>
|
||||||
#include <video/w100fb.h>
|
#include <video/w100fb.h>
|
||||||
|
|
||||||
|
@ -764,6 +765,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
|
* PCMCIA
|
||||||
*/
|
*/
|
||||||
|
@ -790,6 +813,7 @@ static struct platform_device *devices[] __initdata = {
|
||||||
&gpio_vbus,
|
&gpio_vbus,
|
||||||
&power_supply,
|
&power_supply,
|
||||||
&strataflash,
|
&strataflash,
|
||||||
|
&audio,
|
||||||
&pcmcia,
|
&pcmcia,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -827,6 +851,7 @@ static void __init hx4700_init(void)
|
||||||
pxa_set_ficp_info(&ficp_info);
|
pxa_set_ficp_info(&ficp_info);
|
||||||
pxa27x_set_i2c_power_info(NULL);
|
pxa27x_set_i2c_power_info(NULL);
|
||||||
pxa_set_i2c_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));
|
i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info));
|
||||||
pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
|
pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
|
||||||
spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
|
spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
#include <linux/syscore_ops.h>
|
#include <linux/syscore_ops.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <asm/suspend.h>
|
#include <asm/suspend.h>
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/i2c/pxa-i2c.h>
|
#include <linux/i2c/pxa-i2c.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/i2c/pxa-i2c.h>
|
#include <linux/i2c/pxa-i2c.h>
|
||||||
#include <linux/mfd/88pm860x.h>
|
#include <linux/mfd/88pm860x.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
|
|
@ -168,6 +168,7 @@ struct battery_thresh sharpsl_battery_levels_noac[] = {
|
||||||
#define MAXCTRL_SEL_SH 4
|
#define MAXCTRL_SEL_SH 4
|
||||||
#define MAXCTRL_STR (1u << 7)
|
#define MAXCTRL_STR (1u << 7)
|
||||||
|
|
||||||
|
extern int max1111_read_channel(int);
|
||||||
/*
|
/*
|
||||||
* Read MAX1111 ADC
|
* Read MAX1111 ADC
|
||||||
*/
|
*/
|
||||||
|
@ -177,8 +178,6 @@ int sharpsl_pm_pxa_read_max1111(int channel)
|
||||||
if (machine_is_tosa())
|
if (machine_is_tosa())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
extern int max1111_read_channel(int);
|
|
||||||
|
|
||||||
/* max1111 accepts channels from 0-3, however,
|
/* max1111 accepts channels from 0-3, however,
|
||||||
* it is encoded from 0-7 here in the code.
|
* it is encoded from 0-7 here in the code.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -172,10 +172,9 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm)
|
||||||
static unsigned long spitz_charger_wakeup(void)
|
static unsigned long spitz_charger_wakeup(void)
|
||||||
{
|
{
|
||||||
unsigned long ret;
|
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_bit(SPITZ_GPIO_KEY_INT))
|
||||||
| (!gpio_get_value(SPITZ_GPIO_SYNC)
|
| gpio_get_value(SPITZ_GPIO_SYNC));
|
||||||
<< GPIO_bit(SPITZ_GPIO_SYNC));
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ void __init omap_reserve(void)
|
||||||
omap_vram_reserve_sdram_memblock();
|
omap_vram_reserve_sdram_memblock();
|
||||||
omap_dsp_reserve_sdram_memblock();
|
omap_dsp_reserve_sdram_memblock();
|
||||||
omap_secure_ram_reserve_memblock();
|
omap_secure_ram_reserve_memblock();
|
||||||
|
omap_barrier_reserve_memblock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init omap_init_consistent_dma_size(void)
|
void __init omap_init_consistent_dma_size(void)
|
||||||
|
|
|
@ -10,4 +10,10 @@ static inline void omap_secure_ram_reserve_memblock(void)
|
||||||
{ }
|
{ }
|
||||||
#endif
|
#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__ */
|
#endif /* __OMAP_SECURE_H__ */
|
||||||
|
|
|
@ -328,21 +328,15 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
while (--i >= 0)
|
|
||||||
soc_pcmcia_remove_one(&sinfo->skt[i]);
|
|
||||||
kfree(sinfo);
|
|
||||||
clk_put(clk);
|
|
||||||
} else {
|
|
||||||
pxa2xx_configure_sockets(&dev->dev);
|
pxa2xx_configure_sockets(&dev->dev);
|
||||||
dev_set_drvdata(&dev->dev, sinfo);
|
dev_set_drvdata(&dev->dev, sinfo);
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
while (--i >= 0)
|
while (--i >= 0)
|
||||||
soc_pcmcia_remove_one(&sinfo->skt[i]);
|
soc_pcmcia_remove_one(&sinfo->skt[i]);
|
||||||
|
clk_put(clk);
|
||||||
kfree(sinfo);
|
kfree(sinfo);
|
||||||
err0:
|
err0:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue