Commit 065c8012 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull arm-soc fixes from Arnd Bergmann:
 "Bug fixes for a number of ARM platforms, mostly OMAP, imx and at91.

  These come a little later than I had hoped but unfortunately we had a
  few of these patches cause regressions themselves and had to work out
  how to deal with those in the meantime."

* tag 'fixes-for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (38 commits)
  Revert "ARM i.MX25: Fix PWM per clock lookups"
  ARM: versatile: fix versatile_defconfig
  ARM: mvebu: update defconfig with 3.7 changes
  ARM: at91: fix at91x40 build
  ARM: socfpga: Fix socfpga compilation with early_printk() enabled
  ARM: SPEAr: Remove unused empty files
  MAINTAINERS: Add arm-soc tree entry
  ARM: dts: mxs: add the "clock-names" for gpmi-nand
  ARM: ux500: Correct SDI5 address and add some format changes
  ARM: ux500: Specify AMBA Primecell IDs for Nomadik I2C in DT
  ARM: ux500: Fix build error relating to IRQCHIP_SKIP_SET_WAKE
  ARM: at91: drop duplicated config SOC_AT91SAM9 entry
  ARM: at91/i2c: change id to let i2c-at91 work
  ARM: at91/i2c: change id to let i2c-gpio work
  ARM: at91/dts: at91sam9g20ek_common: Fix typos in buttons labels.
  ARM: at91: fix external interrupt specification in board code
  ARM: at91: fix external interrupts in non-DT case
  ARM: at91: at91sam9g10: fix SOC type detection
  ARM: at91/tc: fix typo in the DT document
  ARM: AM33XX: Fix configuration of dmtimer parent clock by dmtimer driverDate:Wed, 17 Oct 2012 13:55:55 -0500
  ...
parents 1a25b1c4 943bb487
...@@ -8,7 +8,7 @@ PIT Timer required properties: ...@@ -8,7 +8,7 @@ PIT Timer required properties:
shared across all System Controller members. shared across all System Controller members.
TC/TCLIB Timer required properties: TC/TCLIB Timer required properties:
- compatible: Should be "atmel,<chip>-pit". - compatible: Should be "atmel,<chip>-tcb".
<chip> can be "at91rm9200" or "at91sam9x5" <chip> can be "at91rm9200" or "at91sam9x5"
- reg: Should contain registers location and length - reg: Should contain registers location and length
- interrupts: Should contain all interrupts for the TC block - interrupts: Should contain all interrupts for the TC block
......
...@@ -637,6 +637,13 @@ W: http://www.arm.linux.org.uk/ ...@@ -637,6 +637,13 @@ W: http://www.arm.linux.org.uk/
S: Maintained S: Maintained
F: arch/arm/ F: arch/arm/
ARM SUB-ARCHITECTURES
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: MAINTAINED
F: arch/arm/mach-*/
F: arch/arm/plat-*/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git
ARM PRIMECELL AACI PL041 DRIVER ARM PRIMECELL AACI PL041 DRIVER
M: Russell King <linux@arm.linux.org.uk> M: Russell King <linux@arm.linux.org.uk>
S: Maintained S: Maintained
......
...@@ -126,14 +126,14 @@ gpio_keys { ...@@ -126,14 +126,14 @@ gpio_keys {
#size-cells = <0>; #size-cells = <0>;
btn3 { btn3 {
label = "Buttin 3"; label = "Button 3";
gpios = <&pioA 30 1>; gpios = <&pioA 30 1>;
linux,code = <0x103>; linux,code = <0x103>;
gpio-key,wakeup; gpio-key,wakeup;
}; };
btn4 { btn4 {
label = "Buttin 4"; label = "Button 4";
gpios = <&pioA 31 1>; gpios = <&pioA 31 1>;
linux,code = <0x104>; linux,code = <0x104>;
gpio-key,wakeup; gpio-key,wakeup;
......
...@@ -483,6 +483,8 @@ i2c@80004000 { ...@@ -483,6 +483,8 @@ i2c@80004000 {
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell"; compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell";
reg = <0x80004000 0x1000>; reg = <0x80004000 0x1000>;
interrupts = <0 21 0x4>; interrupts = <0 21 0x4>;
arm,primecell-periphid = <0x180024>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
v-i2c-supply = <&db8500_vape_reg>; v-i2c-supply = <&db8500_vape_reg>;
...@@ -494,6 +496,8 @@ i2c@80122000 { ...@@ -494,6 +496,8 @@ i2c@80122000 {
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell"; compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell";
reg = <0x80122000 0x1000>; reg = <0x80122000 0x1000>;
interrupts = <0 22 0x4>; interrupts = <0 22 0x4>;
arm,primecell-periphid = <0x180024>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
v-i2c-supply = <&db8500_vape_reg>; v-i2c-supply = <&db8500_vape_reg>;
...@@ -505,6 +509,8 @@ i2c@80128000 { ...@@ -505,6 +509,8 @@ i2c@80128000 {
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell"; compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell";
reg = <0x80128000 0x1000>; reg = <0x80128000 0x1000>;
interrupts = <0 55 0x4>; interrupts = <0 55 0x4>;
arm,primecell-periphid = <0x180024>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
v-i2c-supply = <&db8500_vape_reg>; v-i2c-supply = <&db8500_vape_reg>;
...@@ -516,6 +522,8 @@ i2c@80110000 { ...@@ -516,6 +522,8 @@ i2c@80110000 {
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell"; compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell";
reg = <0x80110000 0x1000>; reg = <0x80110000 0x1000>;
interrupts = <0 12 0x4>; interrupts = <0 12 0x4>;
arm,primecell-periphid = <0x180024>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
v-i2c-supply = <&db8500_vape_reg>; v-i2c-supply = <&db8500_vape_reg>;
...@@ -527,6 +535,8 @@ i2c@8012a000 { ...@@ -527,6 +535,8 @@ i2c@8012a000 {
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell"; compatible = "stericsson,db8500-i2c", "st,nomadik-i2c", "arm,primecell";
reg = <0x8012a000 0x1000>; reg = <0x8012a000 0x1000>;
interrupts = <0 51 0x4>; interrupts = <0 51 0x4>;
arm,primecell-periphid = <0x180024>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
v-i2c-supply = <&db8500_vape_reg>; v-i2c-supply = <&db8500_vape_reg>;
...@@ -573,33 +583,38 @@ sdi@80126000 { ...@@ -573,33 +583,38 @@ sdi@80126000 {
interrupts = <0 60 0x4>; interrupts = <0 60 0x4>;
status = "disabled"; status = "disabled";
}; };
sdi@80118000 { sdi@80118000 {
compatible = "arm,pl18x", "arm,primecell"; compatible = "arm,pl18x", "arm,primecell";
reg = <0x80118000 0x1000>; reg = <0x80118000 0x1000>;
interrupts = <0 50 0x4>; interrupts = <0 50 0x4>;
status = "disabled"; status = "disabled";
}; };
sdi@80005000 { sdi@80005000 {
compatible = "arm,pl18x", "arm,primecell"; compatible = "arm,pl18x", "arm,primecell";
reg = <0x80005000 0x1000>; reg = <0x80005000 0x1000>;
interrupts = <0 41 0x4>; interrupts = <0 41 0x4>;
status = "disabled"; status = "disabled";
}; };
sdi@80119000 { sdi@80119000 {
compatible = "arm,pl18x", "arm,primecell"; compatible = "arm,pl18x", "arm,primecell";
reg = <0x80119000 0x1000>; reg = <0x80119000 0x1000>;
interrupts = <0 59 0x4>; interrupts = <0 59 0x4>;
status = "disabled"; status = "disabled";
}; };
sdi@80114000 { sdi@80114000 {
compatible = "arm,pl18x", "arm,primecell"; compatible = "arm,pl18x", "arm,primecell";
reg = <0x80114000 0x1000>; reg = <0x80114000 0x1000>;
interrupts = <0 99 0x4>; interrupts = <0 99 0x4>;
status = "disabled"; status = "disabled";
}; };
sdi@80008000 { sdi@80008000 {
compatible = "arm,pl18x", "arm,primecell"; compatible = "arm,pl18x", "arm,primecell";
reg = <0x80114000 0x1000>; reg = <0x80008000 0x1000>;
interrupts = <0 100 0x4>; interrupts = <0 100 0x4>;
status = "disabled"; status = "disabled";
}; };
......
...@@ -20,8 +20,10 @@ / { ...@@ -20,8 +20,10 @@ / {
compatible = "samsung,trats", "samsung,exynos4210"; compatible = "samsung,trats", "samsung,exynos4210";
memory { memory {
reg = <0x40000000 0x20000000 reg = <0x40000000 0x10000000
0x60000000 0x20000000>; 0x50000000 0x10000000
0x60000000 0x10000000
0x70000000 0x10000000>;
}; };
chosen { chosen {
......
...@@ -69,6 +69,7 @@ gpmi-nand@8000c000 { ...@@ -69,6 +69,7 @@ gpmi-nand@8000c000 {
interrupts = <13>, <56>; interrupts = <13>, <56>;
interrupt-names = "gpmi-dma", "bch"; interrupt-names = "gpmi-dma", "bch";
clocks = <&clks 34>; clocks = <&clks 34>;
clock-names = "gpmi_io";
fsl,gpmi-dma-channel = <4>; fsl,gpmi-dma-channel = <4>;
status = "disabled"; status = "disabled";
}; };
......
...@@ -85,6 +85,7 @@ gpmi-nand@8000c000 { ...@@ -85,6 +85,7 @@ gpmi-nand@8000c000 {
interrupts = <88>, <41>; interrupts = <88>, <41>;
interrupt-names = "gpmi-dma", "bch"; interrupt-names = "gpmi-dma", "bch";
clocks = <&clks 50>; clocks = <&clks 50>;
clock-names = "gpmi_io";
fsl,gpmi-dma-channel = <4>; fsl,gpmi-dma-channel = <4>;
status = "disabled"; status = "disabled";
}; };
......
...@@ -257,7 +257,7 @@ mcbsp2: mcbsp@49022000 { ...@@ -257,7 +257,7 @@ mcbsp2: mcbsp@49022000 {
interrupt-names = "common", "tx", "rx", "sidetone"; interrupt-names = "common", "tx", "rx", "sidetone";
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
ti,buffer-size = <1280>; ti,buffer-size = <1280>;
ti,hwmods = "mcbsp2"; ti,hwmods = "mcbsp2", "mcbsp2_sidetone";
}; };
mcbsp3: mcbsp@49024000 { mcbsp3: mcbsp@49024000 {
...@@ -272,7 +272,7 @@ mcbsp3: mcbsp@49024000 { ...@@ -272,7 +272,7 @@ mcbsp3: mcbsp@49024000 {
interrupt-names = "common", "tx", "rx", "sidetone"; interrupt-names = "common", "tx", "rx", "sidetone";
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
ti,buffer-size = <128>; ti,buffer-size = <128>;
ti,hwmods = "mcbsp3"; ti,hwmods = "mcbsp3", "mcbsp3_sidetone";
}; };
mcbsp4: mcbsp@49026000 { mcbsp4: mcbsp@49026000 {
......
...@@ -139,6 +139,7 @@ CONFIG_I2C_IMX=y ...@@ -139,6 +139,7 @@ CONFIG_I2C_IMX=y
CONFIG_SPI=y CONFIG_SPI=y
CONFIG_SPI_IMX=y CONFIG_SPI_IMX=y
CONFIG_GPIO_SYSFS=y CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_MC9S08DZ60=y
# CONFIG_HWMON is not set # CONFIG_HWMON is not set
CONFIG_WATCHDOG=y CONFIG_WATCHDOG=y
CONFIG_IMX2_WDT=y CONFIG_IMX2_WDT=y
...@@ -155,6 +156,7 @@ CONFIG_SOC_CAMERA=y ...@@ -155,6 +156,7 @@ CONFIG_SOC_CAMERA=y
CONFIG_SOC_CAMERA_OV2640=y CONFIG_SOC_CAMERA_OV2640=y
CONFIG_VIDEO_MX3=y CONFIG_VIDEO_MX3=y
CONFIG_FB=y CONFIG_FB=y
CONFIG_LCD_PLATFORM=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=y CONFIG_LCD_L4F00242T03=y
......
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_NO_HZ=y CONFIG_IRQ_DOMAIN_DEBUG=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_LOG_BUF_SHIFT=14 CONFIG_LOG_BUF_SHIFT=14
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
...@@ -9,10 +9,12 @@ CONFIG_SLAB=y ...@@ -9,10 +9,12 @@ CONFIG_SLAB=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
CONFIG_ARCH_MVEBU=y CONFIG_ARCH_MVEBU=y
CONFIG_MACH_ARMADA_370_XP=y CONFIG_MACH_ARMADA_370=y
CONFIG_MACH_ARMADA_XP=y
# CONFIG_CACHE_L2X0 is not set
CONFIG_AEABI=y CONFIG_AEABI=y
CONFIG_HIGHMEM=y CONFIG_HIGHMEM=y
CONFIG_USE_OF=y # CONFIG_COMPACTION is not set
CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0 CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_ARM_APPENDED_DTB=y CONFIG_ARM_APPENDED_DTB=y
...@@ -23,6 +25,8 @@ CONFIG_SERIAL_8250_CONSOLE=y ...@@ -23,6 +25,8 @@ CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_GPIOLIB=y CONFIG_GPIOLIB=y
CONFIG_GPIO_SYSFS=y CONFIG_GPIO_SYSFS=y
# CONFIG_USB_SUPPORT is not set
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_FS_XATTR is not set # CONFIG_EXT3_FS_XATTR is not set
......
CONFIG_ARCH_VERSATILE=y
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
......
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Derived from arch/arm/mach-davinci/include/mach/debug-macro.S to use 32-bit
* accesses to the 8250.
*/
#include <linux/serial_reg.h>
.macro senduart,rd,rx
str \rd, [\rx, #UART_TX << UART_SHIFT]
.endm
.macro busyuart,rd,rx
1002: ldr \rd, [\rx, #UART_LSR << UART_SHIFT]
and \rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE
teq \rd, #UART_LSR_TEMT | UART_LSR_THRE
bne 1002b
.endm
/* The UART's don't have any flow control IO's wired up. */
.macro waituart,rd,rx
.endm
...@@ -5,10 +5,7 @@ ...@@ -5,10 +5,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
* Derived from arch/arm/mach-davinci/include/mach/debug-macro.S to use 32-bit
* accesses to the 8250.
*/ */
#include <linux/serial_reg.h>
#define UART_SHIFT 2 #define UART_SHIFT 2
#define PICOXCELL_UART1_BASE 0x80230000 #define PICOXCELL_UART1_BASE 0x80230000
...@@ -19,17 +16,4 @@ ...@@ -19,17 +16,4 @@
ldr \rp, =PICOXCELL_UART1_BASE ldr \rp, =PICOXCELL_UART1_BASE
.endm .endm
.macro senduart,rd,rx #include "8250_32.S"
str \rd, [\rx, #UART_TX << UART_SHIFT]
.endm
.macro busyuart,rd,rx
1002: ldr \rd, [\rx, #UART_LSR << UART_SHIFT]
and \rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE
teq \rd, #UART_LSR_TEMT | UART_LSR_THRE
bne 1002b
.endm
/* The UART's don't have any flow control IO's wired up. */
.macro waituart,rd,rx
.endm
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#define UART_SHIFT 2
#define DEBUG_LL_UART_OFFSET 0x00002000
.macro addruart, rp, rv, tmp .macro addruart, rp, rv, tmp
mov \rp, #DEBUG_LL_UART_OFFSET mov \rp, #DEBUG_LL_UART_OFFSET
orr \rp, \rp, #0x00c00000 orr \rp, \rp, #0x00c00000
...@@ -14,3 +17,5 @@ ...@@ -14,3 +17,5 @@
orr \rp, \rp, #0xff000000 @ physical base orr \rp, \rp, #0xff000000 @ physical base
.endm .endm
#include "8250_32.S"
...@@ -21,19 +21,13 @@ config SOC_AT91SAM9 ...@@ -21,19 +21,13 @@ config SOC_AT91SAM9
bool bool
select CPU_ARM926T select CPU_ARM926T
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select MULTI_IRQ_HANDLER
select SPARSE_IRQ
menu "Atmel AT91 System-on-Chip" menu "Atmel AT91 System-on-Chip"
comment "Atmel AT91 Processor" comment "Atmel AT91 Processor"
config SOC_AT91SAM9
bool
select AT91_SAM9_SMC
select AT91_SAM9_TIME
select CPU_ARM926T
select MULTI_IRQ_HANDLER
select SPARSE_IRQ
config SOC_AT91RM9200 config SOC_AT91RM9200
bool "AT91RM9200" bool "AT91RM9200"
select CPU_ARM920T select CPU_ARM920T
......
...@@ -187,7 +187,7 @@ static struct clk_lookup periph_clocks_lookups[] = { ...@@ -187,7 +187,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
CLKDEV_CON_DEV_ID(NULL, "i2c-at91rm9200", &twi_clk), CLKDEV_CON_DEV_ID(NULL, "i2c-at91rm9200.0", &twi_clk),
/* fake hclk clock */ /* fake hclk clock */
CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
CLKDEV_CON_ID("pioA", &pioA_clk), CLKDEV_CON_ID("pioA", &pioA_clk),
......
...@@ -479,7 +479,7 @@ static struct i2c_gpio_platform_data pdata = { ...@@ -479,7 +479,7 @@ static struct i2c_gpio_platform_data pdata = {
static struct platform_device at91rm9200_twi_device = { static struct platform_device at91rm9200_twi_device = {
.name = "i2c-gpio", .name = "i2c-gpio",
.id = -1, .id = 0,
.dev.platform_data = &pdata, .dev.platform_data = &pdata,
}; };
...@@ -512,7 +512,7 @@ static struct resource twi_resources[] = { ...@@ -512,7 +512,7 @@ static struct resource twi_resources[] = {
static struct platform_device at91rm9200_twi_device = { static struct platform_device at91rm9200_twi_device = {
.name = "i2c-at91rm9200", .name = "i2c-at91rm9200",
.id = -1, .id = 0,
.resource = twi_resources, .resource = twi_resources,
.num_resources = ARRAY_SIZE(twi_resources), .num_resources = ARRAY_SIZE(twi_resources),
}; };
......
...@@ -211,8 +211,8 @@ static struct clk_lookup periph_clocks_lookups[] = { ...@@ -211,8 +211,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk), CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk),
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk), CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk),
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc_clk),
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260", &twi_clk), CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260.0", &twi_clk),
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20", &twi_clk), CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.0", &twi_clk),
/* more usart lookup table for DT entries */ /* more usart lookup table for DT entries */
CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck), CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck),
CLKDEV_CON_DEV_ID("usart", "fffb0000.serial", &usart0_clk), CLKDEV_CON_DEV_ID("usart", "fffb0000.serial", &usart0_clk),
......
...@@ -389,7 +389,7 @@ static struct i2c_gpio_platform_data pdata = { ...@@ -389,7 +389,7 @@ static struct i2c_gpio_platform_data pdata = {
static struct platform_device at91sam9260_twi_device = { static struct platform_device at91sam9260_twi_device = {
.name = "i2c-gpio", .name = "i2c-gpio",
.id = -1, .id = 0,
.dev.platform_data = &pdata, .dev.platform_data = &pdata,
}; };
...@@ -421,7 +421,7 @@ static struct resource twi_resources[] = { ...@@ -421,7 +421,7 @@ static struct resource twi_resources[] = {
}; };
static struct platform_device at91sam9260_twi_device = { static struct platform_device at91sam9260_twi_device = {
.id = -1, .id = 0,
.resource = twi_resources, .resource = twi_resources,
.num_resources = ARRAY_SIZE(twi_resources), .num_resources = ARRAY_SIZE(twi_resources),
}; };
......
...@@ -178,8 +178,8 @@ static struct clk_lookup periph_clocks_lookups[] = { ...@@ -178,8 +178,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0), CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0),
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9261", &twi_clk), CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9261.0", &twi_clk),
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10", &twi_clk), CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.0", &twi_clk),
CLKDEV_CON_ID("pioA", &pioA_clk), CLKDEV_CON_ID("pioA", &pioA_clk),
CLKDEV_CON_ID("pioB", &pioB_clk), CLKDEV_CON_ID("pioB", &pioB_clk),
CLKDEV_CON_ID("pioC", &pioC_clk), CLKDEV_CON_ID("pioC", &pioC_clk),
......
...@@ -285,7 +285,7 @@ static struct i2c_gpio_platform_data pdata = { ...@@ -285,7 +285,7 @@ static struct i2c_gpio_platform_data pdata = {
static struct platform_device at91sam9261_twi_device = { static struct platform_device at91sam9261_twi_device = {
.name = "i2c-gpio", .name = "i2c-gpio",
.id = -1, .id = 0,
.dev.platform_data = &pdata, .dev.platform_data = &pdata,
}; };
...@@ -317,7 +317,7 @@ static struct resource twi_resources[] = { ...@@ -317,7 +317,7 @@ static struct resource twi_resources[] = {
}; };
static struct platform_device at91sam9261_twi_device = { static struct platform_device at91sam9261_twi_device = {
.id = -1, .id = 0,
.resource = twi_resources, .resource = twi_resources,
.num_resources = ARRAY_SIZE(twi_resources), .num_resources = ARRAY_SIZE(twi_resources),
}; };
......
...@@ -193,7 +193,7 @@ static struct clk_lookup periph_clocks_lookups[] = { ...@@ -193,7 +193,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk),
CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260", &twi_clk), CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260.0", &twi_clk),
/* fake hclk clock */ /* fake hclk clock */
CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
CLKDEV_CON_ID("pioA", &pioA_clk), CLKDEV_CON_ID("pioA", &pioA_clk),
......
...@@ -567,7 +567,7 @@ static struct i2c_gpio_platform_data pdata = { ...@@ -567,7 +567,7 @@ static struct i2c_gpio_platform_data pdata = {
static struct platform_device at91sam9263_twi_device = { static struct platform_device at91sam9263_twi_device = {
.name = "i2c-gpio", .name = "i2c-gpio",
.id = -1, .id = 0,
.dev.platform_data = &pdata, .dev.platform_data = &pdata,
}; };
...@@ -600,7 +600,7 @@ static struct resource twi_resources[] = { ...@@ -600,7 +600,7 @@ static struct resource twi_resources[] = {
static struct platform_device at91sam9263_twi_device = { static struct platform_device at91sam9263_twi_device = {
.name = "i2c-at91sam9260", .name = "i2c-at91sam9260",
.id = -1, .id = 0,
.resource = twi_resources, .resource = twi_resources,
.num_resources = ARRAY_SIZE(twi_resources), .num_resources = ARRAY_SIZE(twi_resources),
}; };
......
...@@ -314,7 +314,7 @@ static struct i2c_gpio_platform_data pdata = { ...@@ -314,7 +314,7 @@ static struct i2c_gpio_platform_data pdata = {
static struct platform_device at91sam9rl_twi_device = { static struct platform_device at91sam9rl_twi_device = {
.name = "i2c-gpio", .name = "i2c-gpio",
.id = -1, .id = 0,
.dev.platform_data = &pdata, .dev.platform_data = &pdata,
}; };
...@@ -347,7 +347,7 @@ static struct resource twi_resources[] = { ...@@ -347,7 +347,7 @@ static struct resource twi_resources[] = {
static struct platform_device at91sam9rl_twi_device = { static struct platform_device at91sam9rl_twi_device = {
.name = "i2c-at91sam9g20", .name = "i2c-at91sam9g20",
.id = -1, .id = 0,
.resource = twi_resources, .resource = twi_resources,
.num_resources = ARRAY_SIZE(twi_resources), .num_resources = ARRAY_SIZE(twi_resources),
}; };
......
...@@ -88,6 +88,6 @@ void __init at91x40_init_interrupts(unsigned int priority[NR_AIC_IRQS]) ...@@ -88,6 +88,6 @@ void __init at91x40_init_interrupts(unsigned int priority[NR_AIC_IRQS])
if (!priority) if (!priority)
priority = at91x40_default_irq_priority; priority = at91x40_default_irq_priority;
at91_aic_init(priority); at91_aic_init(priority, at91_extern_irq);
} }
...@@ -129,7 +129,7 @@ static struct spi_board_info neocore926_spi_devices[] = { ...@@ -129,7 +129,7 @@ static struct spi_board_info neocore926_spi_devices[] = {
.max_speed_hz = 125000 * 16, .max_speed_hz = 125000 * 16,
.bus_num = 0, .bus_num = 0,
.platform_data = &ads_info, .platform_data = &ads_info,
.irq = AT91SAM9263_ID_IRQ1, .irq = NR_IRQS_LEGACY + AT91SAM9263_ID_IRQ1,
}, },
#endif #endif
}; };
......
...@@ -309,7 +309,7 @@ static struct spi_board_info ek_spi_devices[] = { ...@@ -309,7 +309,7 @@ static struct spi_board_info ek_spi_devices[] = {
.max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */ .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */
.bus_num = 0, .bus_num = 0,
.platform_data = &ads_info, .platform_data = &ads_info,
.irq = AT91SAM9261_ID_IRQ0, .irq = NR_IRQS_LEGACY + AT91SAM9261_ID_IRQ0,
.controller_data = (void *) AT91_PIN_PA28, /* CS pin */ .controller_data = (void *) AT91_PIN_PA28, /* CS pin */
}, },
#endif #endif
......
...@@ -132,7 +132,7 @@ static struct spi_board_info ek_spi_devices[] = { ...@@ -132,7 +132,7 @@ static struct spi_board_info ek_spi_devices[] = {
.max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */ .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */
.bus_num = 0, .bus_num = 0,
.platform_data = &ads_info, .platform_data = &ads_info,
.irq = AT91SAM9263_ID_IRQ1, .irq = NR_IRQS_LEGACY + AT91SAM9263_ID_IRQ1,
}, },
#endif #endif
}; };
......
...@@ -26,7 +26,8 @@ extern void __init at91_dt_initialize(void); ...@@ -26,7 +26,8 @@ extern void __init at91_dt_initialize(void);
extern void __init at91_init_irq_default(void); extern void __init at91_init_irq_default(void);
extern void __init at91_init_interrupts(unsigned int priority[]); extern void __init at91_init_interrupts(unsigned int priority[]);
extern void __init at91x40_init_interrupts(unsigned int priority[]); extern void __init at91x40_init_interrupts(unsigned int priority[]);
extern void __init at91_aic_init(unsigned int priority[]); extern void __init at91_aic_init(unsigned int priority[],
unsigned int ext_irq_mask);
extern int __init at91_aic_of_init(struct device_node *node, extern int __init at91_aic_of_init(struct device_node *node,
struct device_node *parent); struct device_node *parent);
extern int __init at91_aic5_of_init(struct device_node *node, extern int __init at91_aic5_of_init(struct device_node *node,
......
...@@ -502,14 +502,19 @@ int __init at91_aic5_of_init(struct device_node *node, ...@@ -502,14 +502,19 @@ int __init at91_aic5_of_init(struct device_node *node,
/* /*
* Initialize the AIC interrupt controller. * Initialize the AIC interrupt controller.
*/ */
void __init at91_aic_init(unsigned int *priority) void __init at91_aic_init(unsigned int *priority, unsigned int ext_irq_mask)
{ {
unsigned int i; unsigned int i;
int irq_base; int irq_base;
if (at91_aic_pm_init()) at91_extern_irq = kzalloc(BITS_TO_LONGS(n_irqs)
* sizeof(*at91_extern_irq), GFP_KERNEL);
if (at91_aic_pm_init() || at91_extern_irq == NULL)
panic("Unable to allocate bit maps\n"); panic("Unable to allocate bit maps\n");
*at91_extern_irq = ext_irq_mask;
at91_aic_base = ioremap(AT91_AIC, 512); at91_aic_base = ioremap(AT91_AIC, 512);
if (!at91_aic_base) if (!at91_aic_base)
panic("Unable to ioremap AIC registers\n"); panic("Unable to ioremap AIC registers\n");
......
...@@ -47,7 +47,7 @@ void __init at91_init_irq_default(void) ...@@ -47,7 +47,7 @@ void __init at91_init_irq_default(void)
void __init at91_init_interrupts(unsigned int *priority) void __init at91_init_interrupts(unsigned int *priority)
{ {
/* Initialize the AIC interrupt controller */ /* Initialize the AIC interrupt controller */
at91_aic_init(priority); at91_aic_init(priority, at91_extern_irq);
/* Enable GPIO interrupts */ /* Enable GPIO interrupts */
at91_gpio_irq_setup(); at91_gpio_irq_setup();
...@@ -151,7 +151,7 @@ static void __init soc_detect(u32 dbgu_base) ...@@ -151,7 +151,7 @@ static void __init soc_detect(u32 dbgu_base)
} }
/* at91sam9g10 */ /* at91sam9g10 */
if ((cidr & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) { if ((socid & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) {
at91_soc_initdata.type = AT91_SOC_SAM9G10; at91_soc_initdata.type = AT91_SOC_SAM9G10;
at91_boot_soc = at91sam9261_soc; at91_boot_soc = at91sam9261_soc;
} }
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include <plat/fimc-core.h> #include <plat/fimc-core.h>
#include <plat/iic-core.h> #include <plat/iic-core.h>
#include <plat/tv-core.h> #include <plat/tv-core.h>
#include <plat/spi-core.h>
#include <plat/regs-serial.h> #include <plat/regs-serial.h>
#include "common.h" #include "common.h"
...@@ -346,6 +347,8 @@ static void __init exynos4_map_io(void) ...@@ -346,6 +347,8 @@ static void __init exynos4_map_io(void)
s5p_fb_setname(0, "exynos4-fb"); s5p_fb_setname(0, "exynos4-fb");
s5p_hdmi_setname("exynos4-hdmi"); s5p_hdmi_setname("exynos4-hdmi");
s3c64xx_spi_setname("exynos4210-spi");
} }
static void __init exynos5_map_io(void) static void __init exynos5_map_io(void)
...@@ -366,6 +369,8 @@ static void __init exynos5_map_io(void) ...@@ -366,6 +369,8 @@ static void __init exynos5_map_io(void)
s3c_i2c0_setname("s3c2440-i2c"); s3c_i2c0_setname("s3c2440-i2c");
s3c_i2c1_setname("s3c2440-i2c"); s3c_i2c1_setname("s3c2440-i2c");
s3c_i2c2_setname("s3c2440-i2c"); s3c_i2c2_setname("s3c2440-i2c");
s3c64xx_spi_setname("exynos4210-spi");
} }
static void __init exynos4_init_clocks(int xtal) static void __init exynos4_init_clocks(int xtal)
......
...@@ -99,6 +99,7 @@ static char const *exynos4_dt_compat[] __initdata = { ...@@ -99,6 +99,7 @@ static char const *exynos4_dt_compat[] __initdata = {
DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)") DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)")
/* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */ /* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */
.smp = smp_ops(exynos_smp_ops),
.init_irq = exynos4_init_irq, .init_irq = exynos4_init_irq,
.map_io = exynos4_dt_map_io, .map_io = exynos4_dt_map_io,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
......
...@@ -108,7 +108,7 @@ struct clk *imx_clk_busy_divider(const char *name, const char *parent_name, ...@@ -108,7 +108,7 @@ struct clk *imx_clk_busy_divider(const char *name, const char *parent_name,
busy->div.hw.init = &init; busy->div.hw.init = &init;
clk = clk_register(NULL, &busy->div.hw); clk = clk_register(NULL, &busy->div.hw);
if (!clk) if (IS_ERR(clk))
kfree(busy); kfree(busy);
return clk; return clk;
......
...@@ -127,8 +127,8 @@ int __init mx25_clocks_init(void) ...@@ -127,8 +127,8 @@ int __init mx25_clocks_init(void)
clk[esdhc2_ipg_per] = imx_clk_gate("esdhc2_ipg_per", "per4", ccm(CCM_CGCR0), 4); clk[esdhc2_ipg_per] = imx_clk_gate("esdhc2_ipg_per", "per4", ccm(CCM_CGCR0), 4);
clk[gpt_ipg_per] = imx_clk_gate("gpt_ipg_per", "per5", ccm(CCM_CGCR0), 5); clk[gpt_ipg_per] = imx_clk_gate("gpt_ipg_per", "per5", ccm(CCM_CGCR0), 5);
clk[i2c_ipg_per] = imx_clk_gate("i2c_ipg_per", "per6", ccm(CCM_CGCR0), 6); clk[i2c_ipg_per] = imx_clk_gate("i2c_ipg_per", "per6", ccm(CCM_CGCR0), 6);
clk[lcdc_ipg_per] = imx_clk_gate("lcdc_ipg_per", "per8", ccm(CCM_CGCR0), 7); clk[lcdc_ipg_per] = imx_clk_gate("lcdc_ipg_per", "per7", ccm(CCM_CGCR0), 7);
clk[nfc_ipg_per] = imx_clk_gate("nfc_ipg_per", "ipg_per", ccm(CCM_CGCR0), 8); clk[nfc_ipg_per] = imx_clk_gate("nfc_ipg_per", "per8", ccm(CCM_CGCR0), 8);
clk[ssi1_ipg_per] = imx_clk_gate("ssi1_ipg_per", "per13", ccm(CCM_CGCR0), 13); clk[ssi1_ipg_per] = imx_clk_gate("ssi1_ipg_per", "per13", ccm(CCM_CGCR0), 13);
clk[ssi2_ipg_per] = imx_clk_gate("ssi2_ipg_per", "per14", ccm(CCM_CGCR0), 14); clk[ssi2_ipg_per] = imx_clk_gate("ssi2_ipg_per", "per14", ccm(CCM_CGCR0), 14);
clk[uart_ipg_per] = imx_clk_gate("uart_ipg_per", "per15", ccm(CCM_CGCR0), 15); clk[uart_ipg_per] = imx_clk_gate("uart_ipg_per", "per15", ccm(CCM_CGCR0), 15);
......
...@@ -109,7 +109,7 @@ int __init mx27_clocks_init(unsigned long fref) ...@@ -109,7 +109,7 @@ int __init mx27_clocks_init(unsigned long fref)
clk[per3_div] = imx_clk_divider("per3_div", "mpll_main2", CCM_PCDR1, 16, 6); clk[per3_div] = imx_clk_divider("per3_div", "mpll_main2", CCM_PCDR1, 16, 6);
clk[per4_div] = imx_clk_divider("per4_div", "mpll_main2", CCM_PCDR1, 24, 6); clk[per4_div] = imx_clk_divider("per4_div", "mpll_main2", CCM_PCDR1, 24, 6);
clk[vpu_sel] = imx_clk_mux("vpu_sel", CCM_CSCR, 21, 1, vpu_sel_clks, ARRAY_SIZE(vpu_sel_clks)); clk[vpu_sel] = imx_clk_mux("vpu_sel", CCM_CSCR, 21, 1, vpu_sel_clks, ARRAY_SIZE(vpu_sel_clks));
clk[vpu_div] = imx_clk_divider("vpu_div", "vpu_sel", CCM_PCDR0, 10, 3); clk[vpu_div] = imx_clk_divider("vpu_div", "vpu_sel", CCM_PCDR0, 10, 6);
clk[usb_div] = imx_clk_divider("usb_div", "spll", CCM_CSCR, 28, 3); clk[usb_div] = imx_clk_divider("usb_div", "spll", CCM_CSCR, 28, 3);
clk[cpu_sel] = imx_clk_mux("cpu_sel", CCM_CSCR, 15, 1, cpu_sel_clks, ARRAY_SIZE(cpu_sel_clks)); clk[cpu_sel] = imx_clk_mux("cpu_sel", CCM_CSCR, 15, 1, cpu_sel_clks, ARRAY_SIZE(cpu_sel_clks));
clk[clko_sel] = imx_clk_mux("clko_sel", CCM_CCSR, 0, 5, clko_sel_clks, ARRAY_SIZE(clko_sel_clks)); clk[clko_sel] = imx_clk_mux("clko_sel", CCM_CCSR, 0, 5, clko_sel_clks, ARRAY_SIZE(clko_sel_clks));
...@@ -121,7 +121,7 @@ int __init mx27_clocks_init(unsigned long fref) ...@@ -121,7 +121,7 @@ int __init mx27_clocks_init(unsigned long fref)
clk[ssi1_sel] = imx_clk_mux("ssi1_sel", CCM_CSCR, 22, 1, ssi_sel_clks, ARRAY_SIZE(ssi_sel_clks)); clk[ssi1_sel] = imx_clk_mux("ssi1_sel", CCM_CSCR, 22, 1, ssi_sel_clks, ARRAY_SIZE(ssi_sel_clks));
clk[ssi2_sel] = imx_clk_mux("ssi2_sel", CCM_CSCR, 23, 1, ssi_sel_clks, ARRAY_SIZE(ssi_sel_clks)); clk[ssi2_sel] = imx_clk_mux("ssi2_sel", CCM_CSCR, 23, 1, ssi_sel_clks, ARRAY_SIZE(ssi_sel_clks));
clk[ssi1_div] = imx_clk_divider("ssi1_div", "ssi1_sel", CCM_PCDR0, 16, 6); clk[ssi1_div] = imx_clk_divider("ssi1_div", "ssi1_sel", CCM_PCDR0, 16, 6);
clk[ssi2_div] = imx_clk_divider("ssi2_div", "ssi2_sel", CCM_PCDR0, 26, 3); clk[ssi2_div] = imx_clk_divider("ssi2_div", "ssi2_sel", CCM_PCDR0, 26, 6);
clk[clko_en] = imx_clk_gate("clko_en", "clko_div", CCM_PCCR0, 0); clk[clko_en] = imx_clk_gate("clko_en", "clko_div", CCM_PCCR0, 0);
clk[ssi2_ipg_gate] = imx_clk_gate("ssi2_ipg_gate", "ipg", CCM_PCCR0, 0); clk[ssi2_ipg_gate] = imx_clk_gate("ssi2_ipg_gate", "ipg", CCM_PCCR0, 0);
clk[ssi1_ipg_gate] = imx_clk_gate("ssi1_ipg_gate", "ipg", CCM_PCCR0, 1); clk[ssi1_ipg_gate] = imx_clk_gate("ssi1_ipg_gate", "ipg", CCM_PCCR0, 1);
......
...@@ -108,9 +108,8 @@ void __init imx3_init_l2x0(void) ...@@ -108,9 +108,8 @@ void __init imx3_init_l2x0(void)
} }
l2x0_base = ioremap(MX3x_L2CC_BASE_ADDR, 4096); l2x0_base = ioremap(MX3x_L2CC_BASE_ADDR, 4096);
if (IS_ERR(l2x0_base)) { if (!l2x0_base) {
printk(KERN_ERR "remapping L2 cache area failed with %ld\n", printk(KERN_ERR "remapping L2 cache area failed\n");
PTR_ERR(l2x0_base));
return; return;
} }
......
...@@ -11,7 +11,6 @@ config ARCH_OMAP2PLUS_TYPICAL ...@@ -11,7 +11,6 @@ config ARCH_OMAP2PLUS_TYPICAL
select I2C_OMAP select I2C_OMAP
select MENELAUS if ARCH_OMAP2 select MENELAUS if ARCH_OMAP2
select NEON if ARCH_OMAP3 || ARCH_OMAP4 || SOC_OMAP5 select NEON if ARCH_OMAP3 || ARCH_OMAP4 || SOC_OMAP5
select PINCTRL
select PM_RUNTIME select PM_RUNTIME
select REGULATOR select REGULATOR
select SERIAL_OMAP select SERIAL_OMAP
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/opp.h> #include <linux/opp.h>
#include <linux/cpu.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
...@@ -444,27 +445,31 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -444,27 +445,31 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static void __init beagle_opp_init(void) static int __init beagle_opp_init(void)
{ {
int r = 0; int r = 0;
/* Initialize the omap3 opp table */ if (!machine_is_omap3_beagle())
if (omap3_opp_init()) { return 0;
/* Initialize the omap3 opp table if not already created. */
r = omap3_opp_init();
if (IS_ERR_VALUE(r) && (r != -EEXIST)) {
pr_err("%s: opp default init failed\n", __func__); pr_err("%s: opp default init failed\n", __func__);
return; return r;
} }
/* Custom OPP enabled for all xM versions */ /* Custom OPP enabled for all xM versions */
if (cpu_is_omap3630()) { if (cpu_is_omap3630()) {
struct device *mpu_dev, *iva_dev; struct device *mpu_dev, *iva_dev;
mpu_dev = omap_device_get_by_hwmod_name("mpu"); mpu_dev = get_cpu_device(0);
iva_dev = omap_device_get_by_hwmod_name("iva"); iva_dev = omap_device_get_by_hwmod_name("iva");
if (IS_ERR(mpu_dev) || IS_ERR(iva_dev)) { if (IS_ERR(mpu_dev) || IS_ERR(iva_dev)) {
pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n", pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
__func__, mpu_dev, iva_dev); __func__, mpu_dev, iva_dev);
return; return -ENODEV;
} }
/* Enable MPU 1GHz and lower opps */ /* Enable MPU 1GHz and lower opps */
r = opp_enable(mpu_dev, 800000000); r = opp_enable(mpu_dev, 800000000);
...@@ -484,8 +489,9 @@ static void __init beagle_opp_init(void) ...@@ -484,8 +489,9 @@ static void __init beagle_opp_init(void)
opp_disable(iva_dev, 660000000); opp_disable(iva_dev, 660000000);
} }
} }
return; return 0;
} }
device_initcall(beagle_opp_init);
static void __init omap3_beagle_init(void) static void __init omap3_beagle_init(void)
{ {
...@@ -522,8 +528,6 @@ static void __init omap3_beagle_init(void) ...@@ -522,8 +528,6 @@ static void __init omap3_beagle_init(void)
/* Ensure SDRC pins are mux'd for self-refresh */ /* Ensure SDRC pins are mux'd for self-refresh */
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
beagle_opp_init();
} }
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
......
...@@ -1073,6 +1073,8 @@ static struct omap_clk am33xx_clks[] = { ...@@ -1073,6 +1073,8 @@ static struct omap_clk am33xx_clks[] = {
CLK(NULL, "gfx_fck_div_ck", &gfx_fck_div_ck, CK_AM33XX), CLK(NULL, "gfx_fck_div_ck", &gfx_fck_div_ck, CK_AM33XX),
CLK(NULL, "sysclkout_pre_ck", &sysclkout_pre_ck, CK_AM33XX), CLK(NULL, "sysclkout_pre_ck", &sysclkout_pre_ck, CK_AM33XX),
CLK(NULL, "clkout2_ck", &clkout2_ck, CK_AM33XX), CLK(NULL, "clkout2_ck", &clkout2_ck, CK_AM33XX),
CLK(NULL, "timer_32k_ck", &clkdiv32k_ick, CK_AM33XX),
CLK(NULL, "timer_sys_ck", &sys_clkin_ck, CK_AM33XX),
}; };
int __init am33xx_clk_init(void) int __init am33xx_clk_init(void)
......
...@@ -614,16 +614,16 @@ static struct omap_mux __initdata omap3_muxmodes[] = { ...@@ -614,16 +614,16 @@ static struct omap_mux __initdata omap3_muxmodes[] = {
"sys_off_mode", NULL, NULL, NULL, "sys_off_mode", NULL, NULL, NULL,
"gpio_9", NULL, NULL, "safe_mode"), "gpio_9", NULL, NULL, "safe_mode"),
_OMAP3_MUXENTRY(UART1_CTS, 150, _OMAP3_MUXENTRY(UART1_CTS, 150,
"uart1_cts", NULL, NULL, NULL, "uart1_cts", "ssi1_rdy_tx", NULL, NULL,
"gpio_150", "hsusb3_tll_clk", NULL, "safe_mode"), "gpio_150", "hsusb3_tll_clk", NULL, "safe_mode"),
_OMAP3_MUXENTRY(UART1_RTS, 149, _OMAP3_MUXENTRY(UART1_RTS, 149,
"uart1_rts", NULL, NULL, NULL, "uart1_rts", "ssi1_flag_tx", NULL, NULL,
"gpio_149", NULL, NULL, "safe_mode"), "gpio_149", NULL, NULL, "safe_mode"),
_OMAP3_MUXENTRY(UART1_RX, 151, _OMAP3_MUXENTRY(UART1_RX, 151,
"uart1_rx", NULL, "mcbsp1_clkr", "mcspi4_clk", "uart1_rx", "ss1_wake_tx", "mcbsp1_clkr", "mcspi4_clk",
"gpio_151", NULL, NULL, "safe_mode"), "gpio_151", NULL, NULL, "safe_mode"),
_OMAP3_MUXENTRY(UART1_TX, 148, _OMAP3_MUXENTRY(UART1_TX, 148,
"uart1_tx", NULL, NULL, NULL, "uart1_tx", "ssi1_dat_tx", NULL, NULL,
"gpio_148", NULL, NULL, "safe_mode"), "gpio_148", NULL, NULL, "safe_mode"),
_OMAP3_MUXENTRY(UART2_CTS, 144, _OMAP3_MUXENTRY(UART2_CTS, 144,
"uart2_cts", "mcbsp3_dx", "gpt9_pwm_evt", NULL, "uart2_cts", "mcbsp3_dx", "gpt9_pwm_evt", NULL,
......
...@@ -91,6 +91,7 @@ extern void omap3_save_scratchpad_contents(void); ...@@ -91,6 +91,7 @@ extern void omap3_save_scratchpad_contents(void);
#define PM_RTA_ERRATUM_i608 (1 << 0) #define PM_RTA_ERRATUM_i608 (1 << 0)
#define PM_SDRC_WAKEUP_ERRATUM_i583 (1 << 1) #define PM_SDRC_WAKEUP_ERRATUM_i583 (1 << 1)
#define PM_PER_MEMORIES_ERRATUM_i582 (1 << 2)
#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3)
extern u16 pm34xx_errata; extern u16 pm34xx_errata;
......
...@@ -652,14 +652,17 @@ static void __init pm_errata_configure(void) ...@@ -652,14 +652,17 @@ static void __init pm_errata_configure(void)
/* Enable the l2 cache toggling in sleep logic */ /* Enable the l2 cache toggling in sleep logic */
enable_omap3630_toggle_l2_on_restore(); enable_omap3630_toggle_l2_on_restore();
if (omap_rev() < OMAP3630_REV_ES1_2) if (omap_rev() < OMAP3630_REV_ES1_2)
pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583; pm34xx_errata |= (PM_SDRC_WAKEUP_ERRATUM_i583 |
PM_PER_MEMORIES_ERRATUM_i582);
} else if (cpu_is_omap34xx()) {
pm34xx_errata |= PM_PER_MEMORIES_ERRATUM_i582;
} }
} }
int __init omap3_pm_init(void) int __init omap3_pm_init(void)
{ {
struct power_state *pwrst, *tmp; struct power_state *pwrst, *tmp;
struct clockdomain *neon_clkdm, *mpu_clkdm; struct clockdomain *neon_clkdm, *mpu_clkdm, *per_clkdm, *wkup_clkdm;
int ret; int ret;
if (!omap3_has_io_chain_ctrl()) if (!omap3_has_io_chain_ctrl())
...@@ -711,6 +714,8 @@ int __init omap3_pm_init(void) ...@@ -711,6 +714,8 @@ int __init omap3_pm_init(void)
neon_clkdm = clkdm_lookup("neon_clkdm"); neon_clkdm = clkdm_lookup("neon_clkdm");
mpu_clkdm = clkdm_lookup("mpu_clkdm"); mpu_clkdm = clkdm_lookup("mpu_clkdm");
per_clkdm = clkdm_lookup("per_clkdm");
wkup_clkdm = clkdm_lookup("wkup_clkdm");
#ifdef CONFIG_SUSPEND #ifdef CONFIG_SUSPEND
omap_pm_suspend = omap3_pm_suspend; omap_pm_suspend = omap3_pm_suspend;
...@@ -727,6 +732,27 @@ int __init omap3_pm_init(void) ...@@ -727,6 +732,27 @@ int __init omap3_pm_init(void)
if (IS_PM34XX_ERRATUM(PM_RTA_ERRATUM_i608)) if (IS_PM34XX_ERRATUM(PM_RTA_ERRATUM_i608))
omap3630_ctrl_disable_rta(); omap3630_ctrl_disable_rta();
/*
* The UART3/4 FIFO and the sidetone memory in McBSP2/3 are
* not correctly reset when the PER powerdomain comes back
* from OFF or OSWR when the CORE powerdomain is kept active.
* See OMAP36xx Erratum i582 "PER Domain reset issue after
* Domain-OFF/OSWR Wakeup". This wakeup dependency is not a
* complete workaround. The kernel must also prevent the PER
* powerdomain from going to OSWR/OFF while the CORE
* powerdomain is not going to OSWR/OFF. And if PER last
* power state was off while CORE last power state was ON, the
* UART3/4 and McBSP2/3 SIDETONE devices need to run a
* self-test using their loopback tests; if that fails, those
* devices are unusable until the PER/CORE can complete a transition
* from ON to OSWR/OFF and then back to ON.
*
* XXX Technically this workaround is only needed if off-mode
* or OSWR is enabled.
*/
if (IS_PM34XX_ERRATUM(PM_PER_MEMORIES_ERRATUM_i582))
clkdm_add_wkdep(per_clkdm, wkup_clkdm);
clkdm_add_wkdep(neon_clkdm, mpu_clkdm); clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
if (omap_type() != OMAP2_DEVICE_TYPE_GP) { if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
omap3_secure_ram_storage = omap3_secure_ram_storage =
......
...@@ -329,6 +329,11 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, ...@@ -329,6 +329,11 @@ void __init omap_serial_init_port(struct omap_board_data *bdata,
oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt); oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
if (console_uart_id == bdata->id) {
omap_device_enable(pdev);
pm_runtime_set_active(&pdev->dev);
}
oh->dev_attr = uart; oh->dev_attr = uart;
if (((cpu_is_omap34xx() || cpu_is_omap44xx()) && bdata->pads) if (((cpu_is_omap34xx() || cpu_is_omap44xx()) && bdata->pads)
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
#include <plat/nand-core.h> #include <plat/nand-core.h>
#include <plat/adc-core.h> #include <plat/adc-core.h>
#include <plat/rtc-core.h> #include <plat/rtc-core.h>
#include <plat/spi-core.h>
static struct map_desc s3c2416_iodesc[] __initdata = { static struct map_desc s3c2416_iodesc[] __initdata = {
IODESC_ENT(WATCHDOG), IODESC_ENT(WATCHDOG),
...@@ -132,6 +133,7 @@ void __init s3c2416_map_io(void) ...@@ -132,6 +133,7 @@ void __init s3c2416_map_io(void)
/* initialize device information early */ /* initialize device information early */
s3c2416_default_sdhci0(); s3c2416_default_sdhci0();
s3c2416_default_sdhci1(); s3c2416_default_sdhci1();
s3c64xx_spi_setname("s3c2443-spi");
iotable_init(s3c2416_iodesc, ARRAY_SIZE(s3c2416_iodesc)); iotable_init(s3c2416_iodesc, ARRAY_SIZE(s3c2416_iodesc));
} }
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <plat/nand-core.h> #include <plat/nand-core.h>
#include <plat/adc-core.h> #include <plat/adc-core.h>
#include <plat/rtc-core.h> #include <plat/rtc-core.h>
#include <plat/spi-core.h>
static struct map_desc s3c2443_iodesc[] __initdata = { static struct map_desc s3c2443_iodesc[] __initdata = {
IODESC_ENT(WATCHDOG), IODESC_ENT(WATCHDOG),
...@@ -100,6 +101,9 @@ void __init s3c2443_map_io(void) ...@@ -100,6 +101,9 @@ void __init s3c2443_map_io(void)
s3c24xx_gpiocfg_default.set_pull = s3c2443_gpio_setpull; s3c24xx_gpiocfg_default.set_pull = s3c2443_gpio_setpull;
s3c24xx_gpiocfg_default.get_pull = s3c2443_gpio_getpull; s3c24xx_gpiocfg_default.get_pull = s3c2443_gpio_getpull;
/* initialize device information early */
s3c64xx_spi_setname("s3c2443-spi");
iotable_init(s3c2443_iodesc, ARRAY_SIZE(s3c2443_iodesc)); iotable_init(s3c2443_iodesc, ARRAY_SIZE(s3c2443_iodesc));
} }
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include <plat/sdhci.h> #include <plat/sdhci.h>
#include <plat/adc-core.h> #include <plat/adc-core.h>
#include <plat/fb-core.h> #include <plat/fb-core.h>
#include <plat/spi-core.h>
#include <plat/gpio-cfg.h> #include <plat/gpio-cfg.h>
#include <plat/regs-irqtype.h> #include <plat/regs-irqtype.h>
#include <plat/regs-serial.h> #include <plat/regs-serial.h>
...@@ -179,6 +180,7 @@ void __init s5p6440_map_io(void) ...@@ -179,6 +180,7 @@ void __init s5p6440_map_io(void)
/* initialize any device information early */ /* initialize any device information early */
s3c_adc_setname("s3c64xx-adc"); s3c_adc_setname("s3c64xx-adc");
s3c_fb_setname("s5p64x0-fb"); s3c_fb_setname("s5p64x0-fb");
s3c64xx_spi_setname("s5p64x0-spi");
s5p64x0_default_sdhci0(); s5p64x0_default_sdhci0();
s5p64x0_default_sdhci1(); s5p64x0_default_sdhci1();
...@@ -193,6 +195,7 @@ void __init s5p6450_map_io(void) ...@@ -193,6 +195,7 @@ void __init s5p6450_map_io(void)
/* initialize any device information early */ /* initialize any device information early */
s3c_adc_setname("s3c64xx-adc"); s3c_adc_setname("s3c64xx-adc");
s3c_fb_setname("s5p64x0-fb"); s3c_fb_setname("s5p64x0-fb");
s3c64xx_spi_setname("s5p64x0-spi");
s5p64x0_default_sdhci0(); s5p64x0_default_sdhci0();
s5p64x0_default_sdhci1(); s5p64x0_default_sdhci1();
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#include <plat/fb-core.h> #include <plat/fb-core.h>
#include <plat/iic-core.h> #include <plat/iic-core.h>
#include <plat/onenand-core.h> #include <plat/onenand-core.h>
#include <plat/spi-core.h>
#include <plat/regs-serial.h> #include <plat/regs-serial.h>
#include <plat/watchdog-reset.h> #include <plat/watchdog-reset.h>
...@@ -165,6 +166,8 @@ void __init s5pc100_map_io(void) ...@@ -165,6 +166,8 @@ void __init s5pc100_map_io(void)
s3c_onenand_setname("s5pc100-onenand"); s3c_onenand_setname("s5pc100-onenand");
s3c_fb_setname("s5pc100-fb"); s3c_fb_setname("s5pc100-fb");
s3c_cfcon_setname("s5pc100-pata"); s3c_cfcon_setname("s5pc100-pata");
s3c64xx_spi_setname("s5pc100-spi");
} }
void __init s5pc100_init_clocks(int xtal) void __init s5pc100_init_clocks(int xtal)
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <plat/iic-core.h> #include <plat/iic-core.h>
#include <plat/keypad-core.h> #include <plat/keypad-core.h>
#include <plat/tv-core.h> #include <plat/tv-core.h>
#include <plat/spi-core.h>
#include <plat/regs-serial.h> #include <plat/regs-serial.h>
#include "common.h" #include "common.h"
...@@ -196,6 +197,8 @@ void __init s5pv210_map_io(void) ...@@ -196,6 +197,8 @@ void __init s5pv210_map_io(void)
/* setup TV devices */ /* setup TV devices */
s5p_hdmi_setname("s5pv210-hdmi"); s5p_hdmi_setname("s5pv210-hdmi");
s3c64xx_spi_setname("s5pv210-spi");
} }
void __init s5pv210_init_clocks(int xtal) void __init s5pv210_init_clocks(int xtal)
......
...@@ -247,7 +247,7 @@ void __init r8a7779_add_standard_devices(void) ...@@ -247,7 +247,7 @@ void __init r8a7779_add_standard_devices(void)
{ {
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0
/* Early BRESP enable, Shared attribute override enable, 64K*16way */ /* Early BRESP enable, Shared attribute override enable, 64K*16way */
l2x0_init((void __iomem __force *)(0xf0100000), 0x40470000, 0x82000fff); l2x0_init(IOMEM(0xf0100000), 0x40470000, 0x82000fff);
#endif #endif
r8a7779_pm_init(); r8a7779_pm_init();
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/irq.h>
#include <linux/platform_data/clk-ux500.h> #include <linux/platform_data/clk-ux500.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
......
...@@ -55,7 +55,7 @@ struct platform_device *__init imx_add_mxc_mmc( ...@@ -55,7 +55,7 @@ struct platform_device *__init imx_add_mxc_mmc(
struct resource res[] = { struct resource res[] = {
{ {
.start = data->iobase, .start = data->iobase,
.end = data->iobase + SZ_4K - 1, .end = data->iobase + data->iosize - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, { }, {
.start = data->irq, .start = data->irq,
......
...@@ -26,6 +26,7 @@ config ARCH_OMAP2PLUS ...@@ -26,6 +26,7 @@ config ARCH_OMAP2PLUS
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select OMAP_DM_TIMER select OMAP_DM_TIMER
select PINCTRL
select PROC_DEVICETREE if PROC_FS select PROC_DEVICETREE if PROC_FS
select SPARSE_IRQ select SPARSE_IRQ
select USE_OF select USE_OF
......
/*
* Copyright (C) 2012 Heiko Stuebner <heiko@sntech.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __PLAT_S3C_SPI_CORE_H
#define __PLAT_S3C_SPI_CORE_H
/* These functions are only for use with the core support code, such as
* the cpu specific initialisation code
*/
/* re-define device name depending on support. */
static inline void s3c64xx_spi_setname(char *name)
{
#ifdef CONFIG_S3C64XX_DEV_SPI0
s3c64xx_device_spi0.name = name;
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI1
s3c64xx_device_spi1.name = name;
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI2
s3c64xx_device_spi2.name = name;
#endif
}
#endif /* __PLAT_S3C_SPI_CORE_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment