提交 8f4f9d4d 编写于 作者: L Linus Torvalds

Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc

Pull "ARM: SoC fixes" from Olof Johansson:
 * at91, ux500, imx, omap and bcmring:
  - at91 fixes for =m driver build issues, irqdomain fixes and config
    dependency fixes
  - ux500 kconfig dependency fixes and a  smp wakeup bugfix
  - imx idle bugfix and build fix due to irq domain changes
  - omap uart pinmux fixes, softreset regression revert and misc fixes
  - bcmring build error regression fix

 * ux500 and imx had some small defconfig updates in this branch

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (27 commits)
  ARM: bcmring: fix UART declarations
  ARM: imx: Fix imx5 idle logic bug
  ARM: imx27-dt: Fix build due to removal of irq_domain_add_simple()
  ARM: imx_v4_v5_defconfig: Add support for CONFIG_REGULATOR_FIXED_VOLTAGE
  ARM: OMAP1: DMTIMER: fix broken timer clock source selection
  ARM: OMAP: serial: Fix the ocp smart idlemode handling bug
  ARM: OMAP2+: UART: Fix incorrect population of default uart pads
  ARM: OMAP: sram: fix BUG in dpll code for !PM case
  dmaengine: Kconfig: fix Atmel at_hdmac entry
  USB: gadget/at91_udc: add gpio_to_irq() function to vbus interrupt
  USB: ohci-at91: change annotations for probe/remove functions
  leds-atmel-pwm.c: Make pwmled_probe() __devinit
  ARM: at91: fix at91sam9261ek Ethernet dm9000 irq
  ARM: at91: fix rm9200ek flash size
  ARM: at91: remove empty at91_init_serial function
  ARM: at91: fix typo in at91_pmc_base assembly declaration
  ARM: at91: Export at91_matrix_base
  ARM: at91: Export at91_pmc_base
  ARM: at91: Export at91_ramc_base
  ARM: at91: Export at91_st_base
  ...
...@@ -112,6 +112,7 @@ CONFIG_WATCHDOG=y ...@@ -112,6 +112,7 @@ CONFIG_WATCHDOG=y
CONFIG_IMX2_WDT=y CONFIG_IMX2_WDT=y
CONFIG_MFD_MC13XXX=y CONFIG_MFD_MC13XXX=y
CONFIG_REGULATOR=y CONFIG_REGULATOR=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_MC13783=y CONFIG_REGULATOR_MC13783=y
CONFIG_REGULATOR_MC13892=y CONFIG_REGULATOR_MC13892=y
CONFIG_FB=y CONFIG_FB=y
......
...@@ -8,8 +8,6 @@ CONFIG_MODULE_UNLOAD=y ...@@ -8,8 +8,6 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_LBDAF is not set # CONFIG_LBDAF is not set
# CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_BSG is not set
CONFIG_ARCH_U8500=y CONFIG_ARCH_U8500=y
CONFIG_UX500_SOC_DB5500=y
CONFIG_UX500_SOC_DB8500=y
CONFIG_MACH_HREFV60=y CONFIG_MACH_HREFV60=y
CONFIG_MACH_SNOWBALL=y CONFIG_MACH_SNOWBALL=y
CONFIG_MACH_U5500=y CONFIG_MACH_U5500=y
...@@ -39,7 +37,6 @@ CONFIG_CAIF=y ...@@ -39,7 +37,6 @@ CONFIG_CAIF=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=65536 CONFIG_BLK_DEV_RAM_SIZE=65536
CONFIG_MISC_DEVICES=y
CONFIG_AB8500_PWM=y CONFIG_AB8500_PWM=y
CONFIG_SENSORS_BH1780=y CONFIG_SENSORS_BH1780=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
...@@ -65,16 +62,18 @@ CONFIG_SERIAL_AMBA_PL011=y ...@@ -65,16 +62,18 @@ CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_NOMADIK=y CONFIG_HW_RANDOM_NOMADIK=y
CONFIG_I2C=y
CONFIG_I2C_NOMADIK=y
CONFIG_SPI=y CONFIG_SPI=y
CONFIG_SPI_PL022=y CONFIG_SPI_PL022=y
CONFIG_GPIO_STMPE=y CONFIG_GPIO_STMPE=y
CONFIG_GPIO_TC3589X=y CONFIG_GPIO_TC3589X=y
CONFIG_POWER_SUPPLY=y
CONFIG_AB8500_BM=y
CONFIG_AB8500_BATTERY_THERM_ON_BATCTRL=y
CONFIG_MFD_STMPE=y CONFIG_MFD_STMPE=y
CONFIG_MFD_TC3589X=y CONFIG_MFD_TC3589X=y
CONFIG_AB5500_CORE=y CONFIG_AB5500_CORE=y
CONFIG_AB8500_CORE=y CONFIG_AB8500_CORE=y
CONFIG_REGULATOR=y
CONFIG_REGULATOR_AB8500=y CONFIG_REGULATOR_AB8500=y
# CONFIG_HID_SUPPORT is not set # CONFIG_HID_SUPPORT is not set
CONFIG_USB_GADGET=y CONFIG_USB_GADGET=y
......
...@@ -1173,7 +1173,6 @@ void __init at91_add_device_serial(void) ...@@ -1173,7 +1173,6 @@ void __init at91_add_device_serial(void)
printk(KERN_INFO "AT91: No default serial console defined.\n"); printk(KERN_INFO "AT91: No default serial console defined.\n");
} }
#else #else
void __init __deprecated at91_init_serial(struct at91_uart_config *config) {}
void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {}
void __init at91_set_serial_console(unsigned portnr) {} void __init at91_set_serial_console(unsigned portnr) {}
void __init at91_add_device_serial(void) {} void __init at91_add_device_serial(void) {}
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/export.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
...@@ -176,6 +177,7 @@ static struct clock_event_device clkevt = { ...@@ -176,6 +177,7 @@ static struct clock_event_device clkevt = {
}; };
void __iomem *at91_st_base; void __iomem *at91_st_base;
EXPORT_SYMBOL_GPL(at91_st_base);
void __init at91rm9200_ioremap_st(u32 addr) void __init at91rm9200_ioremap_st(u32 addr)
{ {
......
...@@ -117,7 +117,7 @@ static struct i2c_board_info __initdata ek_i2c_devices[] = { ...@@ -117,7 +117,7 @@ static struct i2c_board_info __initdata ek_i2c_devices[] = {
}; };
#define EK_FLASH_BASE AT91_CHIPSELECT_0 #define EK_FLASH_BASE AT91_CHIPSELECT_0
#define EK_FLASH_SIZE SZ_2M #define EK_FLASH_SIZE SZ_8M
static struct physmap_flash_data ek_flash_data = { static struct physmap_flash_data ek_flash_data = {
.width = 2, .width = 2,
......
...@@ -85,8 +85,6 @@ static struct resource dm9000_resource[] = { ...@@ -85,8 +85,6 @@ static struct resource dm9000_resource[] = {
.flags = IORESOURCE_MEM .flags = IORESOURCE_MEM
}, },
[2] = { [2] = {
.start = AT91_PIN_PC11,
.end = AT91_PIN_PC11,
.flags = IORESOURCE_IRQ .flags = IORESOURCE_IRQ
| IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE, | IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE,
} }
...@@ -130,6 +128,8 @@ static struct sam9_smc_config __initdata dm9000_smc_config = { ...@@ -130,6 +128,8 @@ static struct sam9_smc_config __initdata dm9000_smc_config = {
static void __init ek_add_device_dm9000(void) static void __init ek_add_device_dm9000(void)
{ {
struct resource *r = &dm9000_resource[2];
/* Configure chip-select 2 (DM9000) */ /* Configure chip-select 2 (DM9000) */
sam9_smc_configure(0, 2, &dm9000_smc_config); sam9_smc_configure(0, 2, &dm9000_smc_config);
...@@ -139,6 +139,7 @@ static void __init ek_add_device_dm9000(void) ...@@ -139,6 +139,7 @@ static void __init ek_add_device_dm9000(void)
/* Configure Interrupt pin as input, no pull-up */ /* Configure Interrupt pin as input, no pull-up */
at91_set_gpio_input(AT91_PIN_PC11, 0); at91_set_gpio_input(AT91_PIN_PC11, 0);
r->start = r->end = gpio_to_irq(AT91_PIN_PC11);
platform_device_register(&dm9000_device); platform_device_register(&dm9000_device);
} }
#else #else
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include "generic.h" #include "generic.h"
void __iomem *at91_pmc_base; void __iomem *at91_pmc_base;
EXPORT_SYMBOL_GPL(at91_pmc_base);
/* /*
* There's a lot more which can be done with clocks, including cpufreq * There's a lot more which can be done with clocks, including cpufreq
......
...@@ -25,7 +25,7 @@ extern void __iomem *at91_pmc_base; ...@@ -25,7 +25,7 @@ extern void __iomem *at91_pmc_base;
#define at91_pmc_write(field, value) \ #define at91_pmc_write(field, value) \
__raw_writel(value, at91_pmc_base + field) __raw_writel(value, at91_pmc_base + field)
#else #else
.extern at91_aic_base .extern at91_pmc_base
#endif #endif
#define AT91_PMC_SCER 0x00 /* System Clock Enable Register */ #define AT91_PMC_SCER 0x00 /* System Clock Enable Register */
......
...@@ -54,6 +54,7 @@ void __init at91_init_interrupts(unsigned int *priority) ...@@ -54,6 +54,7 @@ void __init at91_init_interrupts(unsigned int *priority)
} }
void __iomem *at91_ramc_base[2]; void __iomem *at91_ramc_base[2];
EXPORT_SYMBOL_GPL(at91_ramc_base);
void __init at91_ioremap_ramc(int id, u32 addr, u32 size) void __init at91_ioremap_ramc(int id, u32 addr, u32 size)
{ {
...@@ -292,6 +293,7 @@ void __init at91_ioremap_rstc(u32 base_addr) ...@@ -292,6 +293,7 @@ void __init at91_ioremap_rstc(u32 base_addr)
} }
void __iomem *at91_matrix_base; void __iomem *at91_matrix_base;
EXPORT_SYMBOL_GPL(at91_matrix_base);
void __init at91_ioremap_matrix(u32 base_addr) void __init at91_ioremap_matrix(u32 base_addr)
{ {
......
...@@ -52,8 +52,8 @@ ...@@ -52,8 +52,8 @@
#include <mach/csp/chipcHw_inline.h> #include <mach/csp/chipcHw_inline.h>
#include <mach/csp/tmrHw_reg.h> #include <mach/csp/tmrHw_reg.h>
static AMBA_APB_DEVICE(uartA, "uarta", MM_ADDR_IO_UARTA, { IRQ_UARTA }, NULL); static AMBA_APB_DEVICE(uartA, "uartA", 0, MM_ADDR_IO_UARTA, {IRQ_UARTA}, NULL);
static AMBA_APB_DEVICE(uartB, "uartb", MM_ADDR_IO_UARTB, { IRQ_UARTB }, NULL); static AMBA_APB_DEVICE(uartB, "uartB", 0, MM_ADDR_IO_UARTB, {IRQ_UARTB}, NULL);
static struct clk pll1_clk = { static struct clk pll1_clk = {
.name = "PLL1", .name = "PLL1",
......
...@@ -35,7 +35,7 @@ static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = { ...@@ -35,7 +35,7 @@ static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = {
static int __init imx27_avic_add_irq_domain(struct device_node *np, static int __init imx27_avic_add_irq_domain(struct device_node *np,
struct device_node *interrupt_parent) struct device_node *interrupt_parent)
{ {
irq_domain_add_simple(np, 0); irq_domain_add_legacy(np, 64, 0, 0, &irq_domain_simple_ops, NULL);
return 0; return 0;
} }
...@@ -44,7 +44,9 @@ static int __init imx27_gpio_add_irq_domain(struct device_node *np, ...@@ -44,7 +44,9 @@ static int __init imx27_gpio_add_irq_domain(struct device_node *np,
{ {
static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS; static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS;
irq_domain_add_simple(np, gpio_irq_base); gpio_irq_base -= 32;
irq_domain_add_legacy(np, 32, gpio_irq_base, 0, &irq_domain_simple_ops,
NULL);
return 0; return 0;
} }
......
...@@ -35,7 +35,7 @@ static void imx5_idle(void) ...@@ -35,7 +35,7 @@ static void imx5_idle(void)
} }
clk_enable(gpc_dvfs_clk); clk_enable(gpc_dvfs_clk);
mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF); mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
if (tzic_enable_wake() != 0) if (!tzic_enable_wake())
cpu_do_idle(); cpu_do_idle();
clk_disable(gpc_dvfs_clk); clk_disable(gpc_dvfs_clk);
} }
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <mach/hardware.h>
#include <plat/mux.h> #include <plat/mux.h>
......
...@@ -47,9 +47,9 @@ static int omap1_dm_timer_set_src(struct platform_device *pdev, ...@@ -47,9 +47,9 @@ static int omap1_dm_timer_set_src(struct platform_device *pdev,
int n = (pdev->id - 1) << 1; int n = (pdev->id - 1) << 1;
u32 l; u32 l;
l = __raw_readl(MOD_CONF_CTRL_1) & ~(0x03 << n); l = omap_readl(MOD_CONF_CTRL_1) & ~(0x03 << n);
l |= source << n; l |= source << n;
__raw_writel(l, MOD_CONF_CTRL_1); omap_writel(l, MOD_CONF_CTRL_1);
return 0; return 0;
} }
......
...@@ -1422,6 +1422,9 @@ static int _ocp_softreset(struct omap_hwmod *oh) ...@@ -1422,6 +1422,9 @@ static int _ocp_softreset(struct omap_hwmod *oh)
goto dis_opt_clks; goto dis_opt_clks;
_write_sysconfig(v, oh); _write_sysconfig(v, oh);
if (oh->class->sysc->srst_udelay)
udelay(oh->class->sysc->srst_udelay);
if (oh->class->sysc->sysc_flags & SYSS_HAS_RESET_STATUS) if (oh->class->sysc->sysc_flags & SYSS_HAS_RESET_STATUS)
omap_test_timeout((omap_hwmod_read(oh, omap_test_timeout((omap_hwmod_read(oh,
oh->class->sysc->syss_offs) oh->class->sysc->syss_offs)
...@@ -1903,10 +1906,20 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs) ...@@ -1903,10 +1906,20 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs)
*/ */
int omap_hwmod_softreset(struct omap_hwmod *oh) int omap_hwmod_softreset(struct omap_hwmod *oh)
{ {
if (!oh) u32 v;
int ret;
if (!oh || !(oh->_sysc_cache))
return -EINVAL; return -EINVAL;
return _ocp_softreset(oh); v = oh->_sysc_cache;
ret = _set_softreset(oh, &v);
if (ret)
goto error;
_write_sysconfig(v, oh);
error:
return ret;
} }
/** /**
......
...@@ -1000,7 +1000,6 @@ static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = { ...@@ -1000,7 +1000,6 @@ static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
.flags = OMAP_FIREWALL_L4, .flags = OMAP_FIREWALL_L4,
} }
}, },
.flags = OCPIF_SWSUP_IDLE,
.user = OCP_USER_MPU | OCP_USER_SDMA, .user = OCP_USER_MPU | OCP_USER_SDMA,
}; };
......
...@@ -1049,7 +1049,6 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = { ...@@ -1049,7 +1049,6 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
.slave = &omap2430_dss_venc_hwmod, .slave = &omap2430_dss_venc_hwmod,
.clk = "dss_ick", .clk = "dss_ick",
.addr = omap2_dss_venc_addrs, .addr = omap2_dss_venc_addrs,
.flags = OCPIF_SWSUP_IDLE,
.user = OCP_USER_MPU | OCP_USER_SDMA, .user = OCP_USER_MPU | OCP_USER_SDMA,
}; };
......
...@@ -1676,7 +1676,6 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = { ...@@ -1676,7 +1676,6 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
.flags = OMAP_FIREWALL_L4, .flags = OMAP_FIREWALL_L4,
} }
}, },
.flags = OCPIF_SWSUP_IDLE,
.user = OCP_USER_MPU | OCP_USER_SDMA, .user = OCP_USER_MPU | OCP_USER_SDMA,
}; };
......
...@@ -2594,6 +2594,15 @@ static struct omap_hwmod omap44xx_ipu_hwmod = { ...@@ -2594,6 +2594,15 @@ static struct omap_hwmod omap44xx_ipu_hwmod = {
static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = { static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
.rev_offs = 0x0000, .rev_offs = 0x0000,
.sysc_offs = 0x0010, .sysc_offs = 0x0010,
/*
* ISS needs 100 OCP clk cycles delay after a softreset before
* accessing sysconfig again.
* The lowest frequency at the moment for L3 bus is 100 MHz, so
* 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
*
* TODO: Indicate errata when available.
*/
.srst_udelay = 2,
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS | .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET), SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
......
...@@ -108,8 +108,14 @@ static void omap_uart_set_noidle(struct platform_device *pdev) ...@@ -108,8 +108,14 @@ static void omap_uart_set_noidle(struct platform_device *pdev)
static void omap_uart_set_smartidle(struct platform_device *pdev) static void omap_uart_set_smartidle(struct platform_device *pdev)
{ {
struct omap_device *od = to_omap_device(pdev); struct omap_device *od = to_omap_device(pdev);
u8 idlemode;
omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_SMART); if (od->hwmods[0]->class->sysc->idlemodes & SIDLE_SMART_WKUP)
idlemode = HWMOD_IDLEMODE_SMART_WKUP;
else
idlemode = HWMOD_IDLEMODE_SMART;
omap_hwmod_set_slave_idlemode(od->hwmods[0], idlemode);
} }
#else #else
...@@ -120,124 +126,8 @@ static void omap_uart_set_smartidle(struct platform_device *pdev) {} ...@@ -120,124 +126,8 @@ static void omap_uart_set_smartidle(struct platform_device *pdev) {}
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_device_pad default_uart1_pads[] __initdata = {
{
.name = "uart1_cts.uart1_cts",
.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
},
{
.name = "uart1_rts.uart1_rts",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart1_tx.uart1_tx",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart1_rx.uart1_rx",
.flags = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
.idle = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
},
};
static struct omap_device_pad default_uart2_pads[] __initdata = {
{
.name = "uart2_cts.uart2_cts",
.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
},
{
.name = "uart2_rts.uart2_rts",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart2_tx.uart2_tx",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart2_rx.uart2_rx",
.flags = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
.idle = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
},
};
static struct omap_device_pad default_uart3_pads[] __initdata = {
{
.name = "uart3_cts_rctx.uart3_cts_rctx",
.enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
},
{
.name = "uart3_rts_sd.uart3_rts_sd",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart3_tx_irtx.uart3_tx_irtx",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart3_rx_irrx.uart3_rx_irrx",
.flags = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
.enable = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
.idle = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
},
};
static struct omap_device_pad default_omap36xx_uart4_pads[] __initdata = {
{
.name = "gpmc_wait2.uart4_tx",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "gpmc_wait3.uart4_rx",
.flags = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
.enable = OMAP_PIN_INPUT | OMAP_MUX_MODE2,
.idle = OMAP_PIN_INPUT | OMAP_MUX_MODE2,
},
};
static struct omap_device_pad default_omap4_uart4_pads[] __initdata = {
{
.name = "uart4_tx.uart4_tx",
.enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
},
{
.name = "uart4_rx.uart4_rx",
.flags = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
.enable = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
.idle = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
},
};
static void omap_serial_fill_default_pads(struct omap_board_data *bdata) static void omap_serial_fill_default_pads(struct omap_board_data *bdata)
{ {
switch (bdata->id) {
case 0:
bdata->pads = default_uart1_pads;
bdata->pads_cnt = ARRAY_SIZE(default_uart1_pads);
break;
case 1:
bdata->pads = default_uart2_pads;
bdata->pads_cnt = ARRAY_SIZE(default_uart2_pads);
break;
case 2:
bdata->pads = default_uart3_pads;
bdata->pads_cnt = ARRAY_SIZE(default_uart3_pads);
break;
case 3:
if (cpu_is_omap44xx()) {
bdata->pads = default_omap4_uart4_pads;
bdata->pads_cnt =
ARRAY_SIZE(default_omap4_uart4_pads);
} else if (cpu_is_omap3630()) {
bdata->pads = default_omap36xx_uart4_pads;
bdata->pads_cnt =
ARRAY_SIZE(default_omap36xx_uart4_pads);
}
break;
default:
break;
}
} }
#else #else
static void omap_serial_fill_default_pads(struct omap_board_data *bdata) {} static void omap_serial_fill_default_pads(struct omap_board_data *bdata) {}
......
...@@ -17,6 +17,7 @@ config UX500_SOC_DB5500 ...@@ -17,6 +17,7 @@ config UX500_SOC_DB5500
config UX500_SOC_DB8500 config UX500_SOC_DB8500
bool bool
select MFD_DB8500_PRCMU select MFD_DB8500_PRCMU
select REGULATOR
select REGULATOR_DB8500_PRCMU select REGULATOR_DB8500_PRCMU
select CPU_FREQ_TABLE if CPU_FREQ select CPU_FREQ_TABLE if CPU_FREQ
......
...@@ -99,7 +99,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -99,7 +99,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
*/ */
write_pen_release(cpu_logical_map(cpu)); write_pen_release(cpu_logical_map(cpu));
gic_raise_softirq(cpumask_of(cpu), 1); smp_send_reschedule(cpu);
timeout = jiffies + (1 * HZ); timeout = jiffies + (1 * HZ);
while (time_before(jiffies, timeout)) { while (time_before(jiffies, timeout)) {
......
...@@ -305,6 +305,7 @@ struct omap_hwmod_sysc_fields { ...@@ -305,6 +305,7 @@ struct omap_hwmod_sysc_fields {
* @rev_offs: IP block revision register offset (from module base addr) * @rev_offs: IP block revision register offset (from module base addr)
* @sysc_offs: OCP_SYSCONFIG register offset (from module base addr) * @sysc_offs: OCP_SYSCONFIG register offset (from module base addr)
* @syss_offs: OCP_SYSSTATUS register offset (from module base addr) * @syss_offs: OCP_SYSSTATUS register offset (from module base addr)
* @srst_udelay: Delay needed after doing a softreset in usecs
* @idlemodes: One or more of {SIDLE,MSTANDBY}_{OFF,FORCE,SMART} * @idlemodes: One or more of {SIDLE,MSTANDBY}_{OFF,FORCE,SMART}
* @sysc_flags: SYS{C,S}_HAS* flags indicating SYSCONFIG bits supported * @sysc_flags: SYS{C,S}_HAS* flags indicating SYSCONFIG bits supported
* @clockact: the default value of the module CLOCKACTIVITY bits * @clockact: the default value of the module CLOCKACTIVITY bits
...@@ -330,9 +331,10 @@ struct omap_hwmod_class_sysconfig { ...@@ -330,9 +331,10 @@ struct omap_hwmod_class_sysconfig {
u16 sysc_offs; u16 sysc_offs;
u16 syss_offs; u16 syss_offs;
u16 sysc_flags; u16 sysc_flags;
struct omap_hwmod_sysc_fields *sysc_fields;
u8 srst_udelay;
u8 idlemodes; u8 idlemodes;
u8 clockact; u8 clockact;
struct omap_hwmod_sysc_fields *sysc_fields;
}; };
/** /**
......
...@@ -348,7 +348,6 @@ u32 omap3_configure_core_dpll(u32 m2, u32 unlock_dll, u32 f, u32 inc, ...@@ -348,7 +348,6 @@ u32 omap3_configure_core_dpll(u32 m2, u32 unlock_dll, u32 f, u32 inc,
sdrc_actim_ctrl_b_1, sdrc_mr_1); sdrc_actim_ctrl_b_1, sdrc_mr_1);
} }
#ifdef CONFIG_PM
void omap3_sram_restore_context(void) void omap3_sram_restore_context(void)
{ {
omap_sram_ceil = omap_sram_base + omap_sram_size; omap_sram_ceil = omap_sram_base + omap_sram_size;
...@@ -358,17 +357,18 @@ void omap3_sram_restore_context(void) ...@@ -358,17 +357,18 @@ void omap3_sram_restore_context(void)
omap3_sram_configure_core_dpll_sz); omap3_sram_configure_core_dpll_sz);
omap_push_sram_idle(); omap_push_sram_idle();
} }
#endif /* CONFIG_PM */
#endif /* CONFIG_ARCH_OMAP3 */
static inline int omap34xx_sram_init(void) static inline int omap34xx_sram_init(void)
{ {
#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
omap3_sram_restore_context(); omap3_sram_restore_context();
#endif
return 0; return 0;
} }
#else
static inline int omap34xx_sram_init(void)
{
return 0;
}
#endif /* CONFIG_ARCH_OMAP3 */
static inline int am33xx_sram_init(void) static inline int am33xx_sram_init(void)
{ {
......
...@@ -91,11 +91,10 @@ config DW_DMAC ...@@ -91,11 +91,10 @@ config DW_DMAC
config AT_HDMAC config AT_HDMAC
tristate "Atmel AHB DMA support" tristate "Atmel AHB DMA support"
depends on ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 depends on ARCH_AT91
select DMA_ENGINE select DMA_ENGINE
help help
Support the Atmel AHB DMA controller. This can be integrated in Support the Atmel AHB DMA controller.
chips such as the Atmel AT91SAM9RL.
config FSL_DMA config FSL_DMA
tristate "Freescale Elo and Elo Plus DMA support" tristate "Freescale Elo and Elo Plus DMA support"
......
...@@ -35,7 +35,7 @@ static void pwmled_brightness(struct led_classdev *cdev, enum led_brightness b) ...@@ -35,7 +35,7 @@ static void pwmled_brightness(struct led_classdev *cdev, enum led_brightness b)
* NOTE: we reuse the platform_data structure of GPIO leds, * NOTE: we reuse the platform_data structure of GPIO leds,
* but repurpose its "gpio" number as a PWM channel number. * but repurpose its "gpio" number as a PWM channel number.
*/ */
static int __init pwmled_probe(struct platform_device *pdev) static int __devinit pwmled_probe(struct platform_device *pdev)
{ {
const struct gpio_led_platform_data *pdata; const struct gpio_led_platform_data *pdata;
struct pwmled *leds; struct pwmled *leds;
......
...@@ -1863,8 +1863,8 @@ static int __devinit at91udc_probe(struct platform_device *pdev) ...@@ -1863,8 +1863,8 @@ static int __devinit at91udc_probe(struct platform_device *pdev)
mod_timer(&udc->vbus_timer, mod_timer(&udc->vbus_timer,
jiffies + VBUS_POLL_TIMEOUT); jiffies + VBUS_POLL_TIMEOUT);
} else { } else {
if (request_irq(udc->board.vbus_pin, at91_vbus_irq, if (request_irq(gpio_to_irq(udc->board.vbus_pin),
0, driver_name, udc)) { at91_vbus_irq, 0, driver_name, udc)) {
DBG("request vbus irq %d failed\n", DBG("request vbus irq %d failed\n",
udc->board.vbus_pin); udc->board.vbus_pin);
retval = -EBUSY; retval = -EBUSY;
...@@ -1886,7 +1886,7 @@ static int __devinit at91udc_probe(struct platform_device *pdev) ...@@ -1886,7 +1886,7 @@ static int __devinit at91udc_probe(struct platform_device *pdev)
return 0; return 0;
fail4: fail4:
if (gpio_is_valid(udc->board.vbus_pin) && !udc->board.vbus_polled) if (gpio_is_valid(udc->board.vbus_pin) && !udc->board.vbus_polled)
free_irq(udc->board.vbus_pin, udc); free_irq(gpio_to_irq(udc->board.vbus_pin), udc);
fail3: fail3:
if (gpio_is_valid(udc->board.vbus_pin)) if (gpio_is_valid(udc->board.vbus_pin))
gpio_free(udc->board.vbus_pin); gpio_free(udc->board.vbus_pin);
...@@ -1924,7 +1924,7 @@ static int __exit at91udc_remove(struct platform_device *pdev) ...@@ -1924,7 +1924,7 @@ static int __exit at91udc_remove(struct platform_device *pdev)
device_init_wakeup(&pdev->dev, 0); device_init_wakeup(&pdev->dev, 0);
remove_debug_file(udc); remove_debug_file(udc);
if (gpio_is_valid(udc->board.vbus_pin)) { if (gpio_is_valid(udc->board.vbus_pin)) {
free_irq(udc->board.vbus_pin, udc); free_irq(gpio_to_irq(udc->board.vbus_pin), udc);
gpio_free(udc->board.vbus_pin); gpio_free(udc->board.vbus_pin);
} }
free_irq(udc->udp_irq, udc); free_irq(udc->udp_irq, udc);
......
...@@ -94,7 +94,7 @@ static void at91_stop_hc(struct platform_device *pdev) ...@@ -94,7 +94,7 @@ static void at91_stop_hc(struct platform_device *pdev)
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
static void usb_hcd_at91_remove (struct usb_hcd *, struct platform_device *); static void __devexit usb_hcd_at91_remove (struct usb_hcd *, struct platform_device *);
/* configure so an HC device and id are always provided */ /* configure so an HC device and id are always provided */
/* always called with process context; sleeping is OK */ /* always called with process context; sleeping is OK */
...@@ -108,7 +108,7 @@ static void usb_hcd_at91_remove (struct usb_hcd *, struct platform_device *); ...@@ -108,7 +108,7 @@ static void usb_hcd_at91_remove (struct usb_hcd *, struct platform_device *);
* then invokes the start() method for the HCD associated with it * then invokes the start() method for the HCD associated with it
* through the hotplug entry's driver_data. * through the hotplug entry's driver_data.
*/ */
static int usb_hcd_at91_probe(const struct hc_driver *driver, static int __devinit usb_hcd_at91_probe(const struct hc_driver *driver,
struct platform_device *pdev) struct platform_device *pdev)
{ {
int retval; int retval;
...@@ -203,7 +203,7 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver, ...@@ -203,7 +203,7 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
* context, "rmmod" or something similar. * context, "rmmod" or something similar.
* *
*/ */
static void usb_hcd_at91_remove(struct usb_hcd *hcd, static void __devexit usb_hcd_at91_remove(struct usb_hcd *hcd,
struct platform_device *pdev) struct platform_device *pdev)
{ {
usb_remove_hcd(hcd); usb_remove_hcd(hcd);
...@@ -545,7 +545,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev) ...@@ -545,7 +545,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) static int __devinit ohci_hcd_at91_drv_probe(struct platform_device *pdev)
{ {
struct at91_usbh_data *pdata; struct at91_usbh_data *pdata;
int i; int i;
...@@ -620,7 +620,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) ...@@ -620,7 +620,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev); return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev);
} }
static int ohci_hcd_at91_drv_remove(struct platform_device *pdev) static int __devexit ohci_hcd_at91_drv_remove(struct platform_device *pdev)
{ {
struct at91_usbh_data *pdata = pdev->dev.platform_data; struct at91_usbh_data *pdata = pdev->dev.platform_data;
int i; int i;
...@@ -696,7 +696,7 @@ MODULE_ALIAS("platform:at91_ohci"); ...@@ -696,7 +696,7 @@ MODULE_ALIAS("platform:at91_ohci");
static struct platform_driver ohci_hcd_at91_driver = { static struct platform_driver ohci_hcd_at91_driver = {
.probe = ohci_hcd_at91_drv_probe, .probe = ohci_hcd_at91_drv_probe,
.remove = ohci_hcd_at91_drv_remove, .remove = __devexit_p(ohci_hcd_at91_drv_remove),
.shutdown = usb_hcd_platform_shutdown, .shutdown = usb_hcd_platform_shutdown,
.suspend = ohci_hcd_at91_drv_suspend, .suspend = ohci_hcd_at91_drv_suspend,
.resume = ohci_hcd_at91_drv_resume, .resume = ohci_hcd_at91_drv_resume,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册