Merge branch 'next/fixes-non-critical' into next/drivers
Conflicts: arch/arm/mach-lpc32xx/clock.c arch/arm/mach-pxa/pxa25x.c arch/arm/mach-pxa/pxa27x.c The conflicts with pxa are non-obvious, we have multiple branches adding and removing the same clock settings. According to Haojian Zhuang, removing the sa1100 rtc dummy clock is the correct fix here. Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -7,9 +7,9 @@ Each LED is represented as a sub-node of the gpio-leds device. Each
|
|||||||
node's name represents the name of the corresponding LED.
|
node's name represents the name of the corresponding LED.
|
||||||
|
|
||||||
LED sub-node properties:
|
LED sub-node properties:
|
||||||
- gpios : Should specify the LED's GPIO, see "Specifying GPIO information
|
- gpios : Should specify the LED's GPIO, see "gpios property" in
|
||||||
for devices" in Documentation/devicetree/booting-without-of.txt. Active
|
Documentation/devicetree/gpio.txt. Active low LEDs should be
|
||||||
low LEDs should be indicated using flags in the GPIO specifier.
|
indicated using flags in the GPIO specifier.
|
||||||
- label : (optional) The label for this LED. If omitted, the label is
|
- label : (optional) The label for this LED. If omitted, the label is
|
||||||
taken from the node name (excluding the unit address).
|
taken from the node name (excluding the unit address).
|
||||||
- linux,default-trigger : (optional) This parameter, if present, is a
|
- linux,default-trigger : (optional) This parameter, if present, is a
|
||||||
|
@@ -30,6 +30,7 @@ national National Semiconductor
|
|||||||
nintendo Nintendo
|
nintendo Nintendo
|
||||||
nvidia NVIDIA
|
nvidia NVIDIA
|
||||||
nxp NXP Semiconductors
|
nxp NXP Semiconductors
|
||||||
|
picochip Picochip Ltd
|
||||||
powervr Imagination Technologies
|
powervr Imagination Technologies
|
||||||
qcom Qualcomm, Inc.
|
qcom Qualcomm, Inc.
|
||||||
ramtron Ramtron International
|
ramtron Ramtron International
|
||||||
|
@@ -7,21 +7,29 @@ Supported chips:
|
|||||||
Addresses scanned: I2C 0x18 - 0x1f
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
Datasheets:
|
Datasheets:
|
||||||
http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf
|
http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf
|
||||||
* IDT TSE2002B3, TS3000B3
|
* Atmel AT30TS00
|
||||||
Prefix: 'tse2002b3', 'ts3000b3'
|
Prefix: 'at30ts00'
|
||||||
Addresses scanned: I2C 0x18 - 0x1f
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
Datasheets:
|
Datasheets:
|
||||||
http://www.idt.com/products/getdoc.cfm?docid=18715691
|
http://www.atmel.com/Images/doc8585.pdf
|
||||||
http://www.idt.com/products/getdoc.cfm?docid=18715692
|
* IDT TSE2002B3, TSE2002GB2, TS3000B3, TS3000GB2
|
||||||
|
Prefix: 'tse2002', 'ts3000'
|
||||||
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
|
Datasheets:
|
||||||
|
http://www.idt.com/sites/default/files/documents/IDT_TSE2002B3C_DST_20100512_120303152056.pdf
|
||||||
|
http://www.idt.com/sites/default/files/documents/IDT_TSE2002GB2A1_DST_20111107_120303145914.pdf
|
||||||
|
http://www.idt.com/sites/default/files/documents/IDT_TS3000B3A_DST_20101129_120303152013.pdf
|
||||||
|
http://www.idt.com/sites/default/files/documents/IDT_TS3000GB2A1_DST_20111104_120303151012.pdf
|
||||||
* Maxim MAX6604
|
* Maxim MAX6604
|
||||||
Prefix: 'max6604'
|
Prefix: 'max6604'
|
||||||
Addresses scanned: I2C 0x18 - 0x1f
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
Datasheets:
|
Datasheets:
|
||||||
http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf
|
http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf
|
||||||
* Microchip MCP9805, MCP98242, MCP98243, MCP9843
|
* Microchip MCP9804, MCP9805, MCP98242, MCP98243, MCP9843
|
||||||
Prefixes: 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843'
|
Prefixes: 'mcp9804', 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843'
|
||||||
Addresses scanned: I2C 0x18 - 0x1f
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
Datasheets:
|
Datasheets:
|
||||||
|
http://ww1.microchip.com/downloads/en/DeviceDoc/22203C.pdf
|
||||||
http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf
|
http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf
|
||||||
http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf
|
http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf
|
||||||
http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf
|
http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf
|
||||||
@@ -48,6 +56,12 @@ Supported chips:
|
|||||||
Datasheets:
|
Datasheets:
|
||||||
http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf
|
http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf
|
||||||
http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf
|
http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf
|
||||||
|
* ST Microelectronics STTS2002, STTS3000
|
||||||
|
Prefix: 'stts2002', 'stts3000'
|
||||||
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
|
Datasheets:
|
||||||
|
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00225278.pdf
|
||||||
|
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00270920.pdf
|
||||||
* JEDEC JC 42.4 compliant temperature sensor chips
|
* JEDEC JC 42.4 compliant temperature sensor chips
|
||||||
Prefix: 'jc42'
|
Prefix: 'jc42'
|
||||||
Addresses scanned: I2C 0x18 - 0x1f
|
Addresses scanned: I2C 0x18 - 0x1f
|
||||||
|
@@ -13,7 +13,8 @@ Detection
|
|||||||
|
|
||||||
All ALPS touchpads should respond to the "E6 report" command sequence:
|
All ALPS touchpads should respond to the "E6 report" command sequence:
|
||||||
E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or
|
E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or
|
||||||
00-00-64.
|
00-00-64 if no buttons are pressed. The bits 0-2 of the first byte will be 1s
|
||||||
|
if some buttons are pressed.
|
||||||
|
|
||||||
If the E6 report is successful, the touchpad model is identified using the "E7
|
If the E6 report is successful, the touchpad model is identified using the "E7
|
||||||
report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
|
report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
|
||||||
|
@@ -2211,6 +2211,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
|
|
||||||
default: off.
|
default: off.
|
||||||
|
|
||||||
|
printk.always_kmsg_dump=
|
||||||
|
Trigger kmsg_dump for cases other than kernel oops or
|
||||||
|
panics
|
||||||
|
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
||||||
|
default: disabled
|
||||||
|
|
||||||
printk.time= Show timing data prefixed to each printk message line
|
printk.time= Show timing data prefixed to each printk message line
|
||||||
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
||||||
|
|
||||||
|
@@ -962,7 +962,7 @@ F: drivers/tty/serial/msm_serial.c
|
|||||||
F: drivers/platform/msm/
|
F: drivers/platform/msm/
|
||||||
F: drivers/*/pm8???-*
|
F: drivers/*/pm8???-*
|
||||||
F: include/linux/mfd/pm8xxx/
|
F: include/linux/mfd/pm8xxx/
|
||||||
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/TOSA MACHINE SUPPORT
|
ARM/TOSA MACHINE SUPPORT
|
||||||
@@ -1310,7 +1310,7 @@ F: drivers/atm/
|
|||||||
F: include/linux/atm*
|
F: include/linux/atm*
|
||||||
|
|
||||||
ATMEL AT91 MCI DRIVER
|
ATMEL AT91 MCI DRIVER
|
||||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
M: Ludovic Desroches <ludovic.desroches@atmel.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.atmel.com/products/AT91/
|
W: http://www.atmel.com/products/AT91/
|
||||||
W: http://www.at91.com/
|
W: http://www.at91.com/
|
||||||
@@ -1318,7 +1318,7 @@ S: Maintained
|
|||||||
F: drivers/mmc/host/at91_mci.c
|
F: drivers/mmc/host/at91_mci.c
|
||||||
|
|
||||||
ATMEL AT91 / AT32 MCI DRIVER
|
ATMEL AT91 / AT32 MCI DRIVER
|
||||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
M: Ludovic Desroches <ludovic.desroches@atmel.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/mmc/host/atmel-mci.c
|
F: drivers/mmc/host/atmel-mci.c
|
||||||
F: drivers/mmc/host/atmel-mci-regs.h
|
F: drivers/mmc/host/atmel-mci-regs.h
|
||||||
|
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 3
|
PATCHLEVEL = 3
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc6
|
EXTRAVERSION = -rc7
|
||||||
NAME = Saber-toothed Squirrel
|
NAME = Saber-toothed Squirrel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@@ -108,7 +108,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|||||||
" lda $31,3b-2b(%0)\n"
|
" lda $31,3b-2b(%0)\n"
|
||||||
" .previous\n"
|
" .previous\n"
|
||||||
: "+r"(ret), "=&r"(prev), "=&r"(cmp)
|
: "+r"(ret), "=&r"(prev), "=&r"(cmp)
|
||||||
: "r"(uaddr), "r"((long)oldval), "r"(newval)
|
: "r"(uaddr), "r"((long)(int)oldval), "r"(newval)
|
||||||
: "memory");
|
: "memory");
|
||||||
|
|
||||||
*uval = prev;
|
*uval = prev;
|
||||||
|
@@ -901,6 +901,7 @@ config ARCH_U300
|
|||||||
|
|
||||||
config ARCH_U8500
|
config ARCH_U8500
|
||||||
bool "ST-Ericsson U8500 Series"
|
bool "ST-Ericsson U8500 Series"
|
||||||
|
depends on MMU
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
@@ -1280,7 +1281,7 @@ config ARM_ERRATA_743622
|
|||||||
depends on CPU_V7
|
depends on CPU_V7
|
||||||
help
|
help
|
||||||
This option enables the workaround for the 743622 Cortex-A9
|
This option enables the workaround for the 743622 Cortex-A9
|
||||||
(r2p0..r2p2) erratum. Under very rare conditions, a faulty
|
(r2p*) erratum. Under very rare conditions, a faulty
|
||||||
optimisation in the Cortex-A9 Store Buffer may lead to data
|
optimisation in the Cortex-A9 Store Buffer may lead to data
|
||||||
corruption. This workaround sets a specific bit in the diagnostic
|
corruption. This workaround sets a specific bit in the diagnostic
|
||||||
register of the Cortex-A9 which disables the Store Buffer
|
register of the Cortex-A9 which disables the Store Buffer
|
||||||
@@ -1577,7 +1578,7 @@ config LOCAL_TIMERS
|
|||||||
config ARCH_NR_GPIO
|
config ARCH_NR_GPIO
|
||||||
int
|
int
|
||||||
default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
|
default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
|
||||||
default 350 if ARCH_U8500
|
default 355 if ARCH_U8500
|
||||||
default 0
|
default 0
|
||||||
help
|
help
|
||||||
Maximum number of GPIOs in the system.
|
Maximum number of GPIOs in the system.
|
||||||
|
1
arch/arm/boot/.gitignore
vendored
1
arch/arm/boot/.gitignore
vendored
@@ -3,3 +3,4 @@ zImage
|
|||||||
xipImage
|
xipImage
|
||||||
bootpImage
|
bootpImage
|
||||||
uImage
|
uImage
|
||||||
|
*.dtb
|
||||||
|
@@ -69,6 +69,7 @@ CONFIG_MTD_CFI=y
|
|||||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||||
CONFIG_MTD_CFI_GEOMETRY=y
|
CONFIG_MTD_CFI_GEOMETRY=y
|
||||||
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
|
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||||
# CONFIG_MTD_CFI_I2 is not set
|
# CONFIG_MTD_CFI_I2 is not set
|
||||||
CONFIG_MTD_CFI_INTELEXT=y
|
CONFIG_MTD_CFI_INTELEXT=y
|
||||||
CONFIG_MTD_PHYSMAP=y
|
CONFIG_MTD_PHYSMAP=y
|
||||||
|
145
arch/arm/configs/lpc32xx_defconfig
Normal file
145
arch/arm/configs/lpc32xx_defconfig
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_IKCONFIG=y
|
||||||
|
CONFIG_IKCONFIG_PROC=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
|
CONFIG_SYSCTL_SYSCALL=y
|
||||||
|
CONFIG_EMBEDDED=y
|
||||||
|
CONFIG_SLAB=y
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
|
CONFIG_ARCH_LPC32XX=y
|
||||||
|
CONFIG_NO_HZ=y
|
||||||
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
CONFIG_PREEMPT=y
|
||||||
|
CONFIG_AEABI=y
|
||||||
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
|
CONFIG_CMDLINE="console=ttyS0,115200n81 root=/dev/ram0"
|
||||||
|
CONFIG_CPU_IDLE=y
|
||||||
|
CONFIG_FPE_NWFPE=y
|
||||||
|
CONFIG_VFP=y
|
||||||
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
|
CONFIG_BINFMT_AOUT=y
|
||||||
|
CONFIG_NET=y
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_INET=y
|
||||||
|
CONFIG_IP_MULTICAST=y
|
||||||
|
CONFIG_IP_PNP=y
|
||||||
|
CONFIG_IP_PNP_DHCP=y
|
||||||
|
CONFIG_IP_PNP_BOOTP=y
|
||||||
|
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||||
|
# CONFIG_INET_LRO is not set
|
||||||
|
# CONFIG_INET_DIAG is not set
|
||||||
|
# CONFIG_IPV6 is not set
|
||||||
|
# CONFIG_WIRELESS is not set
|
||||||
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
# CONFIG_FW_LOADER is not set
|
||||||
|
CONFIG_MTD=y
|
||||||
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
|
CONFIG_MTD_CHAR=y
|
||||||
|
CONFIG_MTD_BLOCK=y
|
||||||
|
CONFIG_MTD_NAND=y
|
||||||
|
CONFIG_MTD_NAND_MUSEUM_IDS=y
|
||||||
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
|
CONFIG_BLK_DEV_CRYPTOLOOP=y
|
||||||
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
CONFIG_BLK_DEV_RAM_COUNT=1
|
||||||
|
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||||
|
CONFIG_MISC_DEVICES=y
|
||||||
|
CONFIG_EEPROM_AT25=y
|
||||||
|
CONFIG_SCSI=y
|
||||||
|
CONFIG_BLK_DEV_SD=y
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
CONFIG_PHYLIB=y
|
||||||
|
CONFIG_SMSC_PHY=y
|
||||||
|
# CONFIG_WLAN is not set
|
||||||
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
|
||||||
|
CONFIG_INPUT_EVDEV=y
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
CONFIG_INPUT_TOUCHSCREEN=y
|
||||||
|
CONFIG_TOUCHSCREEN_LPC32XX=y
|
||||||
|
# CONFIG_LEGACY_PTYS is not set
|
||||||
|
CONFIG_SERIAL_8250=y
|
||||||
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
|
CONFIG_I2C=y
|
||||||
|
CONFIG_I2C_CHARDEV=y
|
||||||
|
CONFIG_I2C_PNX=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_SPI_PL022=y
|
||||||
|
CONFIG_GPIO_SYSFS=y
|
||||||
|
# CONFIG_HWMON is not set
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
CONFIG_PNX4008_WATCHDOG=y
|
||||||
|
CONFIG_FB=y
|
||||||
|
CONFIG_FB_ARMCLCD=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
|
CONFIG_LOGO=y
|
||||||
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
|
CONFIG_SOUND=y
|
||||||
|
CONFIG_SND=y
|
||||||
|
CONFIG_SND_SEQUENCER=y
|
||||||
|
CONFIG_SND_MIXER_OSS=y
|
||||||
|
CONFIG_SND_PCM_OSS=y
|
||||||
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
|
CONFIG_SND_DYNAMIC_MINORS=y
|
||||||
|
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||||
|
# CONFIG_SND_DRIVERS is not set
|
||||||
|
# CONFIG_SND_ARM is not set
|
||||||
|
# CONFIG_SND_SPI is not set
|
||||||
|
CONFIG_SND_SOC=y
|
||||||
|
# CONFIG_HID_SUPPORT is not set
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_STORAGE=y
|
||||||
|
CONFIG_USB_LIBUSUAL=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
# CONFIG_MMC_BLOCK_BOUNCE is not set
|
||||||
|
CONFIG_MMC_ARMMMCI=y
|
||||||
|
CONFIG_NEW_LEDS=y
|
||||||
|
CONFIG_LEDS_CLASS=y
|
||||||
|
CONFIG_LEDS_GPIO=y
|
||||||
|
CONFIG_LEDS_TRIGGERS=y
|
||||||
|
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||||
|
CONFIG_RTC_CLASS=y
|
||||||
|
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
|
||||||
|
CONFIG_RTC_DRV_LPC32XX=y
|
||||||
|
CONFIG_EXT2_FS=y
|
||||||
|
CONFIG_AUTOFS4_FS=y
|
||||||
|
CONFIG_MSDOS_FS=y
|
||||||
|
CONFIG_VFAT_FS=y
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
CONFIG_JFFS2_FS=y
|
||||||
|
CONFIG_JFFS2_FS_WBUF_VERIFY=y
|
||||||
|
CONFIG_CRAMFS=y
|
||||||
|
CONFIG_NFS_FS=y
|
||||||
|
CONFIG_NFS_V3=y
|
||||||
|
CONFIG_ROOT_NFS=y
|
||||||
|
CONFIG_NLS_CODEPAGE_437=y
|
||||||
|
CONFIG_NLS_ASCII=y
|
||||||
|
CONFIG_NLS_ISO8859_1=y
|
||||||
|
CONFIG_NLS_UTF8=y
|
||||||
|
# CONFIG_SCHED_DEBUG is not set
|
||||||
|
# CONFIG_DEBUG_PREEMPT is not set
|
||||||
|
CONFIG_DEBUG_INFO=y
|
||||||
|
# CONFIG_FTRACE is not set
|
||||||
|
# CONFIG_ARM_UNWIND is not set
|
||||||
|
CONFIG_DEBUG_LL=y
|
||||||
|
CONFIG_EARLY_PRINTK=y
|
||||||
|
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||||
|
# CONFIG_CRYPTO_HW is not set
|
||||||
|
CONFIG_CRC_CCITT=y
|
@@ -134,7 +134,7 @@ int __init armpmu_register(struct arm_pmu *armpmu, char *name, int type);
|
|||||||
|
|
||||||
u64 armpmu_event_update(struct perf_event *event,
|
u64 armpmu_event_update(struct perf_event *event,
|
||||||
struct hw_perf_event *hwc,
|
struct hw_perf_event *hwc,
|
||||||
int idx, int overflow);
|
int idx);
|
||||||
|
|
||||||
int armpmu_event_set_period(struct perf_event *event,
|
int armpmu_event_set_period(struct perf_event *event,
|
||||||
struct hw_perf_event *hwc,
|
struct hw_perf_event *hwc,
|
||||||
|
@@ -242,6 +242,7 @@ static void ecard_init_pgtables(struct mm_struct *mm)
|
|||||||
|
|
||||||
memcpy(dst_pgd, src_pgd, sizeof(pgd_t) * (EASI_SIZE / PGDIR_SIZE));
|
memcpy(dst_pgd, src_pgd, sizeof(pgd_t) * (EASI_SIZE / PGDIR_SIZE));
|
||||||
|
|
||||||
|
vma.vm_flags = VM_EXEC;
|
||||||
vma.vm_mm = mm;
|
vma.vm_mm = mm;
|
||||||
|
|
||||||
flush_tlb_range(&vma, IO_START, IO_START + IO_SIZE);
|
flush_tlb_range(&vma, IO_START, IO_START + IO_SIZE);
|
||||||
|
@@ -180,7 +180,7 @@ armpmu_event_set_period(struct perf_event *event,
|
|||||||
u64
|
u64
|
||||||
armpmu_event_update(struct perf_event *event,
|
armpmu_event_update(struct perf_event *event,
|
||||||
struct hw_perf_event *hwc,
|
struct hw_perf_event *hwc,
|
||||||
int idx, int overflow)
|
int idx)
|
||||||
{
|
{
|
||||||
struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
|
struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
|
||||||
u64 delta, prev_raw_count, new_raw_count;
|
u64 delta, prev_raw_count, new_raw_count;
|
||||||
@@ -193,13 +193,7 @@ again:
|
|||||||
new_raw_count) != prev_raw_count)
|
new_raw_count) != prev_raw_count)
|
||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
new_raw_count &= armpmu->max_period;
|
delta = (new_raw_count - prev_raw_count) & armpmu->max_period;
|
||||||
prev_raw_count &= armpmu->max_period;
|
|
||||||
|
|
||||||
if (overflow)
|
|
||||||
delta = armpmu->max_period - prev_raw_count + new_raw_count + 1;
|
|
||||||
else
|
|
||||||
delta = new_raw_count - prev_raw_count;
|
|
||||||
|
|
||||||
local64_add(delta, &event->count);
|
local64_add(delta, &event->count);
|
||||||
local64_sub(delta, &hwc->period_left);
|
local64_sub(delta, &hwc->period_left);
|
||||||
@@ -216,7 +210,7 @@ armpmu_read(struct perf_event *event)
|
|||||||
if (hwc->idx < 0)
|
if (hwc->idx < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
armpmu_event_update(event, hwc, hwc->idx, 0);
|
armpmu_event_update(event, hwc, hwc->idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -232,7 +226,7 @@ armpmu_stop(struct perf_event *event, int flags)
|
|||||||
if (!(hwc->state & PERF_HES_STOPPED)) {
|
if (!(hwc->state & PERF_HES_STOPPED)) {
|
||||||
armpmu->disable(hwc, hwc->idx);
|
armpmu->disable(hwc, hwc->idx);
|
||||||
barrier(); /* why? */
|
barrier(); /* why? */
|
||||||
armpmu_event_update(event, hwc, hwc->idx, 0);
|
armpmu_event_update(event, hwc, hwc->idx);
|
||||||
hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
|
hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -518,7 +512,13 @@ __hw_perf_event_init(struct perf_event *event)
|
|||||||
hwc->config_base |= (unsigned long)mapping;
|
hwc->config_base |= (unsigned long)mapping;
|
||||||
|
|
||||||
if (!hwc->sample_period) {
|
if (!hwc->sample_period) {
|
||||||
hwc->sample_period = armpmu->max_period;
|
/*
|
||||||
|
* For non-sampling runs, limit the sample_period to half
|
||||||
|
* of the counter width. That way, the new counter value
|
||||||
|
* is far less likely to overtake the previous one unless
|
||||||
|
* you have some serious IRQ latency issues.
|
||||||
|
*/
|
||||||
|
hwc->sample_period = armpmu->max_period >> 1;
|
||||||
hwc->last_period = hwc->sample_period;
|
hwc->last_period = hwc->sample_period;
|
||||||
local64_set(&hwc->period_left, hwc->sample_period);
|
local64_set(&hwc->period_left, hwc->sample_period);
|
||||||
}
|
}
|
||||||
@@ -679,6 +679,28 @@ static void __init cpu_pmu_init(struct arm_pmu *armpmu)
|
|||||||
armpmu->type = ARM_PMU_DEVICE_CPU;
|
armpmu->type = ARM_PMU_DEVICE_CPU;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PMU hardware loses all context when a CPU goes offline.
|
||||||
|
* When a CPU is hotplugged back in, since some hardware registers are
|
||||||
|
* UNKNOWN at reset, the PMU must be explicitly reset to avoid reading
|
||||||
|
* junk values out of them.
|
||||||
|
*/
|
||||||
|
static int __cpuinit pmu_cpu_notify(struct notifier_block *b,
|
||||||
|
unsigned long action, void *hcpu)
|
||||||
|
{
|
||||||
|
if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING)
|
||||||
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
|
if (cpu_pmu && cpu_pmu->reset)
|
||||||
|
cpu_pmu->reset(NULL);
|
||||||
|
|
||||||
|
return NOTIFY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct notifier_block __cpuinitdata pmu_cpu_notifier = {
|
||||||
|
.notifier_call = pmu_cpu_notify,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CPU PMU identification and registration.
|
* CPU PMU identification and registration.
|
||||||
*/
|
*/
|
||||||
@@ -730,6 +752,7 @@ init_hw_perf_events(void)
|
|||||||
pr_info("enabled with %s PMU driver, %d counters available\n",
|
pr_info("enabled with %s PMU driver, %d counters available\n",
|
||||||
cpu_pmu->name, cpu_pmu->num_events);
|
cpu_pmu->name, cpu_pmu->num_events);
|
||||||
cpu_pmu_init(cpu_pmu);
|
cpu_pmu_init(cpu_pmu);
|
||||||
|
register_cpu_notifier(&pmu_cpu_notifier);
|
||||||
armpmu_register(cpu_pmu, "cpu", PERF_TYPE_RAW);
|
armpmu_register(cpu_pmu, "cpu", PERF_TYPE_RAW);
|
||||||
} else {
|
} else {
|
||||||
pr_info("no hardware support available\n");
|
pr_info("no hardware support available\n");
|
||||||
|
@@ -467,23 +467,6 @@ armv6pmu_enable_event(struct hw_perf_event *hwc,
|
|||||||
raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
|
raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int counter_is_active(unsigned long pmcr, int idx)
|
|
||||||
{
|
|
||||||
unsigned long mask = 0;
|
|
||||||
if (idx == ARMV6_CYCLE_COUNTER)
|
|
||||||
mask = ARMV6_PMCR_CCOUNT_IEN;
|
|
||||||
else if (idx == ARMV6_COUNTER0)
|
|
||||||
mask = ARMV6_PMCR_COUNT0_IEN;
|
|
||||||
else if (idx == ARMV6_COUNTER1)
|
|
||||||
mask = ARMV6_PMCR_COUNT1_IEN;
|
|
||||||
|
|
||||||
if (mask)
|
|
||||||
return pmcr & mask;
|
|
||||||
|
|
||||||
WARN_ONCE(1, "invalid counter number (%d)\n", idx);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static irqreturn_t
|
static irqreturn_t
|
||||||
armv6pmu_handle_irq(int irq_num,
|
armv6pmu_handle_irq(int irq_num,
|
||||||
void *dev)
|
void *dev)
|
||||||
@@ -513,7 +496,8 @@ armv6pmu_handle_irq(int irq_num,
|
|||||||
struct perf_event *event = cpuc->events[idx];
|
struct perf_event *event = cpuc->events[idx];
|
||||||
struct hw_perf_event *hwc;
|
struct hw_perf_event *hwc;
|
||||||
|
|
||||||
if (!counter_is_active(pmcr, idx))
|
/* Ignore if we don't have an event. */
|
||||||
|
if (!event)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -524,7 +508,7 @@ armv6pmu_handle_irq(int irq_num,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
hwc = &event->hw;
|
hwc = &event->hw;
|
||||||
armpmu_event_update(event, hwc, idx, 1);
|
armpmu_event_update(event, hwc, idx);
|
||||||
data.period = event->hw.last_period;
|
data.period = event->hw.last_period;
|
||||||
if (!armpmu_event_set_period(event, hwc, idx))
|
if (!armpmu_event_set_period(event, hwc, idx))
|
||||||
continue;
|
continue;
|
||||||
|
@@ -809,6 +809,11 @@ static inline int armv7_pmnc_disable_intens(int idx)
|
|||||||
|
|
||||||
counter = ARMV7_IDX_TO_COUNTER(idx);
|
counter = ARMV7_IDX_TO_COUNTER(idx);
|
||||||
asm volatile("mcr p15, 0, %0, c9, c14, 2" : : "r" (BIT(counter)));
|
asm volatile("mcr p15, 0, %0, c9, c14, 2" : : "r" (BIT(counter)));
|
||||||
|
isb();
|
||||||
|
/* Clear the overflow flag in case an interrupt is pending. */
|
||||||
|
asm volatile("mcr p15, 0, %0, c9, c12, 3" : : "r" (BIT(counter)));
|
||||||
|
isb();
|
||||||
|
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -955,6 +960,10 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
|
|||||||
struct perf_event *event = cpuc->events[idx];
|
struct perf_event *event = cpuc->events[idx];
|
||||||
struct hw_perf_event *hwc;
|
struct hw_perf_event *hwc;
|
||||||
|
|
||||||
|
/* Ignore if we don't have an event. */
|
||||||
|
if (!event)
|
||||||
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We have a single interrupt for all counters. Check that
|
* We have a single interrupt for all counters. Check that
|
||||||
* each counter has overflowed before we process it.
|
* each counter has overflowed before we process it.
|
||||||
@@ -963,7 +972,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
hwc = &event->hw;
|
hwc = &event->hw;
|
||||||
armpmu_event_update(event, hwc, idx, 1);
|
armpmu_event_update(event, hwc, idx);
|
||||||
data.period = event->hw.last_period;
|
data.period = event->hw.last_period;
|
||||||
if (!armpmu_event_set_period(event, hwc, idx))
|
if (!armpmu_event_set_period(event, hwc, idx))
|
||||||
continue;
|
continue;
|
||||||
|
@@ -255,11 +255,14 @@ xscale1pmu_handle_irq(int irq_num, void *dev)
|
|||||||
struct perf_event *event = cpuc->events[idx];
|
struct perf_event *event = cpuc->events[idx];
|
||||||
struct hw_perf_event *hwc;
|
struct hw_perf_event *hwc;
|
||||||
|
|
||||||
|
if (!event)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!xscale1_pmnc_counter_has_overflowed(pmnc, idx))
|
if (!xscale1_pmnc_counter_has_overflowed(pmnc, idx))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
hwc = &event->hw;
|
hwc = &event->hw;
|
||||||
armpmu_event_update(event, hwc, idx, 1);
|
armpmu_event_update(event, hwc, idx);
|
||||||
data.period = event->hw.last_period;
|
data.period = event->hw.last_period;
|
||||||
if (!armpmu_event_set_period(event, hwc, idx))
|
if (!armpmu_event_set_period(event, hwc, idx))
|
||||||
continue;
|
continue;
|
||||||
@@ -592,11 +595,14 @@ xscale2pmu_handle_irq(int irq_num, void *dev)
|
|||||||
struct perf_event *event = cpuc->events[idx];
|
struct perf_event *event = cpuc->events[idx];
|
||||||
struct hw_perf_event *hwc;
|
struct hw_perf_event *hwc;
|
||||||
|
|
||||||
if (!xscale2_pmnc_counter_has_overflowed(pmnc, idx))
|
if (!event)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!xscale2_pmnc_counter_has_overflowed(of_flags, idx))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
hwc = &event->hw;
|
hwc = &event->hw;
|
||||||
armpmu_event_update(event, hwc, idx, 1);
|
armpmu_event_update(event, hwc, idx);
|
||||||
data.period = event->hw.last_period;
|
data.period = event->hw.last_period;
|
||||||
if (!armpmu_event_set_period(event, hwc, idx))
|
if (!armpmu_event_set_period(event, hwc, idx))
|
||||||
continue;
|
continue;
|
||||||
@@ -663,7 +669,7 @@ xscale2pmu_enable_event(struct hw_perf_event *hwc, int idx)
|
|||||||
static void
|
static void
|
||||||
xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
|
xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
|
||||||
{
|
{
|
||||||
unsigned long flags, ien, evtsel;
|
unsigned long flags, ien, evtsel, of_flags;
|
||||||
struct pmu_hw_events *events = cpu_pmu->get_hw_events();
|
struct pmu_hw_events *events = cpu_pmu->get_hw_events();
|
||||||
|
|
||||||
ien = xscale2pmu_read_int_enable();
|
ien = xscale2pmu_read_int_enable();
|
||||||
@@ -672,26 +678,31 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
|
|||||||
switch (idx) {
|
switch (idx) {
|
||||||
case XSCALE_CYCLE_COUNTER:
|
case XSCALE_CYCLE_COUNTER:
|
||||||
ien &= ~XSCALE2_CCOUNT_INT_EN;
|
ien &= ~XSCALE2_CCOUNT_INT_EN;
|
||||||
|
of_flags = XSCALE2_CCOUNT_OVERFLOW;
|
||||||
break;
|
break;
|
||||||
case XSCALE_COUNTER0:
|
case XSCALE_COUNTER0:
|
||||||
ien &= ~XSCALE2_COUNT0_INT_EN;
|
ien &= ~XSCALE2_COUNT0_INT_EN;
|
||||||
evtsel &= ~XSCALE2_COUNT0_EVT_MASK;
|
evtsel &= ~XSCALE2_COUNT0_EVT_MASK;
|
||||||
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT0_EVT_SHFT;
|
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT0_EVT_SHFT;
|
||||||
|
of_flags = XSCALE2_COUNT0_OVERFLOW;
|
||||||
break;
|
break;
|
||||||
case XSCALE_COUNTER1:
|
case XSCALE_COUNTER1:
|
||||||
ien &= ~XSCALE2_COUNT1_INT_EN;
|
ien &= ~XSCALE2_COUNT1_INT_EN;
|
||||||
evtsel &= ~XSCALE2_COUNT1_EVT_MASK;
|
evtsel &= ~XSCALE2_COUNT1_EVT_MASK;
|
||||||
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT1_EVT_SHFT;
|
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT1_EVT_SHFT;
|
||||||
|
of_flags = XSCALE2_COUNT1_OVERFLOW;
|
||||||
break;
|
break;
|
||||||
case XSCALE_COUNTER2:
|
case XSCALE_COUNTER2:
|
||||||
ien &= ~XSCALE2_COUNT2_INT_EN;
|
ien &= ~XSCALE2_COUNT2_INT_EN;
|
||||||
evtsel &= ~XSCALE2_COUNT2_EVT_MASK;
|
evtsel &= ~XSCALE2_COUNT2_EVT_MASK;
|
||||||
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT2_EVT_SHFT;
|
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT2_EVT_SHFT;
|
||||||
|
of_flags = XSCALE2_COUNT2_OVERFLOW;
|
||||||
break;
|
break;
|
||||||
case XSCALE_COUNTER3:
|
case XSCALE_COUNTER3:
|
||||||
ien &= ~XSCALE2_COUNT3_INT_EN;
|
ien &= ~XSCALE2_COUNT3_INT_EN;
|
||||||
evtsel &= ~XSCALE2_COUNT3_EVT_MASK;
|
evtsel &= ~XSCALE2_COUNT3_EVT_MASK;
|
||||||
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT3_EVT_SHFT;
|
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT3_EVT_SHFT;
|
||||||
|
of_flags = XSCALE2_COUNT3_OVERFLOW;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN_ONCE(1, "invalid counter number (%d)\n", idx);
|
WARN_ONCE(1, "invalid counter number (%d)\n", idx);
|
||||||
@@ -701,6 +712,7 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
|
|||||||
raw_spin_lock_irqsave(&events->pmu_lock, flags);
|
raw_spin_lock_irqsave(&events->pmu_lock, flags);
|
||||||
xscale2pmu_write_event_select(evtsel);
|
xscale2pmu_write_event_select(evtsel);
|
||||||
xscale2pmu_write_int_enable(ien);
|
xscale2pmu_write_int_enable(ien);
|
||||||
|
xscale2pmu_write_overflow_flags(of_flags);
|
||||||
raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
|
raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -95,7 +95,7 @@ static int davinci_target(struct cpufreq_policy *policy,
|
|||||||
if (freqs.old == freqs.new)
|
if (freqs.old == freqs.new)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
dev_dbg(&cpufreq.dev, "transition: %u --> %u\n", freqs.old, freqs.new);
|
dev_dbg(cpufreq.dev, "transition: %u --> %u\n", freqs.old, freqs.new);
|
||||||
|
|
||||||
ret = cpufreq_frequency_table_target(policy, pdata->freq_table,
|
ret = cpufreq_frequency_table_target(policy, pdata->freq_table,
|
||||||
freqs.new, relation, &idx);
|
freqs.new, relation, &idx);
|
||||||
|
@@ -1026,7 +1026,7 @@ static int da850_round_armrate(struct clk *clk, unsigned long rate)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int da850_register_pm(struct platform_device *pdev)
|
int __init da850_register_pm(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct davinci_pm_config *pdata = pdev->dev.platform_data;
|
struct davinci_pm_config *pdata = pdev->dev.platform_data;
|
||||||
|
@@ -1508,12 +1508,8 @@ static int __init edma_probe(struct platform_device *pdev)
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Everything lives on transfer controller 1 until otherwise
|
|
||||||
* specified. This way, long transfers on the low priority queue
|
|
||||||
* started by the codec engine will not cause audio defects.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < edma_cc[j]->num_channels; i++)
|
for (i = 0; i < edma_cc[j]->num_channels; i++)
|
||||||
map_dmach_queue(j, i, EVENTQ_1);
|
map_dmach_queue(j, i, info[j]->default_queue);
|
||||||
|
|
||||||
queue_tc_mapping = info[j]->queue_tc_mapping;
|
queue_tc_mapping = info[j]->queue_tc_mapping;
|
||||||
queue_priority_mapping = info[j]->queue_priority_mapping;
|
queue_priority_mapping = info[j]->queue_priority_mapping;
|
||||||
|
@@ -250,6 +250,11 @@ struct edma_soc_info {
|
|||||||
unsigned n_slot;
|
unsigned n_slot;
|
||||||
unsigned n_tc;
|
unsigned n_tc;
|
||||||
unsigned n_cc;
|
unsigned n_cc;
|
||||||
|
/*
|
||||||
|
* Default queue is expected to be a low-priority queue.
|
||||||
|
* This way, long transfers on the default queue started
|
||||||
|
* by the codec engine will not cause audio defects.
|
||||||
|
*/
|
||||||
enum dma_event_q default_queue;
|
enum dma_event_q default_queue;
|
||||||
|
|
||||||
/* Resource reservation for other cores */
|
/* Resource reservation for other cores */
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include <mach/ep93xx_spi.h>
|
#include <mach/ep93xx_spi.h>
|
||||||
#include <mach/gpio-ep93xx.h>
|
#include <mach/gpio-ep93xx.h>
|
||||||
|
|
||||||
|
#include <asm/hardware/vic.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
@@ -361,6 +362,7 @@ MACHINE_START(VISION_EP9307, "Vision Engraving Systems EP9307")
|
|||||||
.atag_offset = 0x100,
|
.atag_offset = 0x100,
|
||||||
.map_io = vision_map_io,
|
.map_io = vision_map_io,
|
||||||
.init_irq = ep93xx_init_irq,
|
.init_irq = ep93xx_init_irq,
|
||||||
|
.handle_irq = vic_handle_irq,
|
||||||
.timer = &ep93xx_timer,
|
.timer = &ep93xx_timer,
|
||||||
.init_machine = vision_init_machine,
|
.init_machine = vision_init_machine,
|
||||||
.restart = ep93xx_restart,
|
.restart = ep93xx_restart,
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/interrupt.h>
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <linux/mfd/max8998.h>
|
#include <linux/mfd/max8998.h>
|
||||||
#include <linux/regulator/machine.h>
|
#include <linux/regulator/machine.h>
|
||||||
@@ -595,6 +596,7 @@ static struct mxt_platform_data qt602240_platform_data = {
|
|||||||
.threshold = 0x28,
|
.threshold = 0x28,
|
||||||
.voltage = 2800000, /* 2.8V */
|
.voltage = 2800000, /* 2.8V */
|
||||||
.orient = MXT_DIAGONAL,
|
.orient = MXT_DIAGONAL,
|
||||||
|
.irqflags = IRQF_TRIGGER_FALLING,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct i2c_board_info i2c3_devs[] __initdata = {
|
static struct i2c_board_info i2c3_devs[] __initdata = {
|
||||||
|
@@ -233,7 +233,7 @@ static struct regulator_init_data sdhc1_data = {
|
|||||||
|
|
||||||
static struct regulator_consumer_supply cam_consumers[] = {
|
static struct regulator_consumer_supply cam_consumers[] = {
|
||||||
{
|
{
|
||||||
.dev = NULL,
|
.dev_name = NULL,
|
||||||
.supply = "imx_cam_vcc",
|
.supply = "imx_cam_vcc",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@@ -76,7 +76,7 @@ static void __iomem *imx3_ioremap(unsigned long phys_addr, size_t size,
|
|||||||
return __arm_ioremap(phys_addr, size, mtype);
|
return __arm_ioremap(phys_addr, size, mtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
void imx3_init_l2x0(void)
|
void __init imx3_init_l2x0(void)
|
||||||
{
|
{
|
||||||
void __iomem *l2x0_base;
|
void __iomem *l2x0_base;
|
||||||
void __iomem *clkctl_base;
|
void __iomem *clkctl_base;
|
||||||
|
@@ -82,6 +82,7 @@
|
|||||||
* will also impact the individual peripheral rates.
|
* will also impact the individual peripheral rates.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
@@ -97,9 +98,10 @@
|
|||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
static DEFINE_SPINLOCK(global_clkregs_lock);
|
||||||
|
|
||||||
static struct clk clk_armpll;
|
static struct clk clk_armpll;
|
||||||
static struct clk clk_usbpll;
|
static struct clk clk_usbpll;
|
||||||
static DEFINE_MUTEX(clkm_lock);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Post divider values for PLLs based on selected register value
|
* Post divider values for PLLs based on selected register value
|
||||||
@@ -127,7 +129,7 @@ static struct clk osc_32KHz = {
|
|||||||
static int local_pll397_enable(struct clk *clk, int enable)
|
static int local_pll397_enable(struct clk *clk, int enable)
|
||||||
{
|
{
|
||||||
u32 reg;
|
u32 reg;
|
||||||
unsigned long timeout = 1 + msecs_to_jiffies(10);
|
unsigned long timeout = jiffies + msecs_to_jiffies(10);
|
||||||
|
|
||||||
reg = __raw_readl(LPC32XX_CLKPWR_PLL397_CTRL);
|
reg = __raw_readl(LPC32XX_CLKPWR_PLL397_CTRL);
|
||||||
|
|
||||||
@@ -142,7 +144,7 @@ static int local_pll397_enable(struct clk *clk, int enable)
|
|||||||
/* Wait for PLL397 lock */
|
/* Wait for PLL397 lock */
|
||||||
while (((__raw_readl(LPC32XX_CLKPWR_PLL397_CTRL) &
|
while (((__raw_readl(LPC32XX_CLKPWR_PLL397_CTRL) &
|
||||||
LPC32XX_CLKPWR_SYSCTRL_PLL397_STS) == 0) &&
|
LPC32XX_CLKPWR_SYSCTRL_PLL397_STS) == 0) &&
|
||||||
(timeout > jiffies))
|
time_before(jiffies, timeout))
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
|
||||||
if ((__raw_readl(LPC32XX_CLKPWR_PLL397_CTRL) &
|
if ((__raw_readl(LPC32XX_CLKPWR_PLL397_CTRL) &
|
||||||
@@ -156,7 +158,7 @@ static int local_pll397_enable(struct clk *clk, int enable)
|
|||||||
static int local_oscmain_enable(struct clk *clk, int enable)
|
static int local_oscmain_enable(struct clk *clk, int enable)
|
||||||
{
|
{
|
||||||
u32 reg;
|
u32 reg;
|
||||||
unsigned long timeout = 1 + msecs_to_jiffies(10);
|
unsigned long timeout = jiffies + msecs_to_jiffies(10);
|
||||||
|
|
||||||
reg = __raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL);
|
reg = __raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL);
|
||||||
|
|
||||||
@@ -171,7 +173,7 @@ static int local_oscmain_enable(struct clk *clk, int enable)
|
|||||||
/* Wait for main oscillator to start */
|
/* Wait for main oscillator to start */
|
||||||
while (((__raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL) &
|
while (((__raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL) &
|
||||||
LPC32XX_CLKPWR_MOSC_DISABLE) != 0) &&
|
LPC32XX_CLKPWR_MOSC_DISABLE) != 0) &&
|
||||||
(timeout > jiffies))
|
time_before(jiffies, timeout))
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
|
||||||
if ((__raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL) &
|
if ((__raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL) &
|
||||||
@@ -383,7 +385,7 @@ static int local_usbpll_enable(struct clk *clk, int enable)
|
|||||||
{
|
{
|
||||||
u32 reg;
|
u32 reg;
|
||||||
int ret = -ENODEV;
|
int ret = -ENODEV;
|
||||||
unsigned long timeout = 1 + msecs_to_jiffies(10);
|
unsigned long timeout = jiffies + msecs_to_jiffies(10);
|
||||||
|
|
||||||
reg = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);
|
reg = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);
|
||||||
|
|
||||||
@@ -396,7 +398,7 @@ static int local_usbpll_enable(struct clk *clk, int enable)
|
|||||||
__raw_writel(reg, LPC32XX_CLKPWR_USB_CTRL);
|
__raw_writel(reg, LPC32XX_CLKPWR_USB_CTRL);
|
||||||
|
|
||||||
/* Wait for PLL lock */
|
/* Wait for PLL lock */
|
||||||
while ((timeout > jiffies) & (ret == -ENODEV)) {
|
while (time_before(jiffies, timeout) && (ret == -ENODEV)) {
|
||||||
reg = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);
|
reg = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);
|
||||||
if (reg & LPC32XX_CLKPWR_USBCTRL_PLL_STS)
|
if (reg & LPC32XX_CLKPWR_USBCTRL_PLL_STS)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@@ -926,20 +928,8 @@ static struct clk clk_lcd = {
|
|||||||
.enable_mask = LPC32XX_CLKPWR_LCDCTRL_CLK_EN,
|
.enable_mask = LPC32XX_CLKPWR_LCDCTRL_CLK_EN,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void clk_lock(void)
|
|
||||||
{
|
|
||||||
mutex_lock(&clkm_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void clk_unlock(void)
|
|
||||||
{
|
|
||||||
mutex_unlock(&clkm_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void local_clk_disable(struct clk *clk)
|
static void local_clk_disable(struct clk *clk)
|
||||||
{
|
{
|
||||||
WARN_ON(clk->usecount == 0);
|
|
||||||
|
|
||||||
/* Don't attempt to disable clock if it has no users */
|
/* Don't attempt to disable clock if it has no users */
|
||||||
if (clk->usecount > 0) {
|
if (clk->usecount > 0) {
|
||||||
clk->usecount--;
|
clk->usecount--;
|
||||||
@@ -982,10 +972,11 @@ static int local_clk_enable(struct clk *clk)
|
|||||||
int clk_enable(struct clk *clk)
|
int clk_enable(struct clk *clk)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
clk_lock();
|
spin_lock_irqsave(&global_clkregs_lock, flags);
|
||||||
ret = local_clk_enable(clk);
|
ret = local_clk_enable(clk);
|
||||||
clk_unlock();
|
spin_unlock_irqrestore(&global_clkregs_lock, flags);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -996,9 +987,11 @@ EXPORT_SYMBOL(clk_enable);
|
|||||||
*/
|
*/
|
||||||
void clk_disable(struct clk *clk)
|
void clk_disable(struct clk *clk)
|
||||||
{
|
{
|
||||||
clk_lock();
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&global_clkregs_lock, flags);
|
||||||
local_clk_disable(clk);
|
local_clk_disable(clk);
|
||||||
clk_unlock();
|
spin_unlock_irqrestore(&global_clkregs_lock, flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clk_disable);
|
EXPORT_SYMBOL(clk_disable);
|
||||||
|
|
||||||
@@ -1007,13 +1000,7 @@ EXPORT_SYMBOL(clk_disable);
|
|||||||
*/
|
*/
|
||||||
unsigned long clk_get_rate(struct clk *clk)
|
unsigned long clk_get_rate(struct clk *clk)
|
||||||
{
|
{
|
||||||
unsigned long rate;
|
return clk->get_rate(clk);
|
||||||
|
|
||||||
clk_lock();
|
|
||||||
rate = clk->get_rate(clk);
|
|
||||||
clk_unlock();
|
|
||||||
|
|
||||||
return rate;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clk_get_rate);
|
EXPORT_SYMBOL(clk_get_rate);
|
||||||
|
|
||||||
@@ -1029,11 +1016,8 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
|
|||||||
* the actual rate set as part of the peripheral dividers
|
* the actual rate set as part of the peripheral dividers
|
||||||
* instead of high level clock control
|
* instead of high level clock control
|
||||||
*/
|
*/
|
||||||
if (clk->set_rate) {
|
if (clk->set_rate)
|
||||||
clk_lock();
|
|
||||||
ret = clk->set_rate(clk, rate);
|
ret = clk->set_rate(clk, rate);
|
||||||
clk_unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -1044,15 +1028,11 @@ EXPORT_SYMBOL(clk_set_rate);
|
|||||||
*/
|
*/
|
||||||
long clk_round_rate(struct clk *clk, unsigned long rate)
|
long clk_round_rate(struct clk *clk, unsigned long rate)
|
||||||
{
|
{
|
||||||
clk_lock();
|
|
||||||
|
|
||||||
if (clk->round_rate)
|
if (clk->round_rate)
|
||||||
rate = clk->round_rate(clk, rate);
|
rate = clk->round_rate(clk, rate);
|
||||||
else
|
else
|
||||||
rate = clk->get_rate(clk);
|
rate = clk->get_rate(clk);
|
||||||
|
|
||||||
clk_unlock();
|
|
||||||
|
|
||||||
return rate;
|
return rate;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clk_round_rate);
|
EXPORT_SYMBOL(clk_round_rate);
|
||||||
@@ -1111,10 +1091,10 @@ static struct clk_lookup lookups[] = {
|
|||||||
_REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan)
|
_REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan)
|
||||||
_REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand)
|
_REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand)
|
||||||
_REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc)
|
_REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc)
|
||||||
_REGISTER_CLOCK("tbd", "i2s0_ck", clk_i2s0)
|
_REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0)
|
||||||
_REGISTER_CLOCK("tbd", "i2s1_ck", clk_i2s1)
|
_REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1)
|
||||||
_REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc)
|
_REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc)
|
||||||
_REGISTER_CLOCK("dev:mmc0", "MCLK", clk_mmc)
|
_REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc)
|
||||||
_REGISTER_CLOCK("lpc-net.0", NULL, clk_net)
|
_REGISTER_CLOCK("lpc-net.0", NULL, clk_net)
|
||||||
_REGISTER_CLOCK("dev:clcd", NULL, clk_lcd)
|
_REGISTER_CLOCK("dev:clcd", NULL, clk_lcd)
|
||||||
_REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd)
|
_REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd)
|
||||||
|
@@ -66,7 +66,6 @@ extern u32 clk_get_pclk_div(void);
|
|||||||
*/
|
*/
|
||||||
extern void lpc32xx_get_uid(u32 devid[4]);
|
extern void lpc32xx_get_uid(u32 devid[4]);
|
||||||
|
|
||||||
extern void lpc32xx_watchdog_reset(void);
|
|
||||||
extern u32 lpc32xx_return_iram_size(void);
|
extern u32 lpc32xx_return_iram_size(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -591,42 +591,42 @@
|
|||||||
/*
|
/*
|
||||||
* Timer/counter register offsets
|
* Timer/counter register offsets
|
||||||
*/
|
*/
|
||||||
#define LCP32XX_TIMER_IR(x) io_p2v((x) + 0x00)
|
#define LPC32XX_TIMER_IR(x) io_p2v((x) + 0x00)
|
||||||
#define LCP32XX_TIMER_TCR(x) io_p2v((x) + 0x04)
|
#define LPC32XX_TIMER_TCR(x) io_p2v((x) + 0x04)
|
||||||
#define LCP32XX_TIMER_TC(x) io_p2v((x) + 0x08)
|
#define LPC32XX_TIMER_TC(x) io_p2v((x) + 0x08)
|
||||||
#define LCP32XX_TIMER_PR(x) io_p2v((x) + 0x0C)
|
#define LPC32XX_TIMER_PR(x) io_p2v((x) + 0x0C)
|
||||||
#define LCP32XX_TIMER_PC(x) io_p2v((x) + 0x10)
|
#define LPC32XX_TIMER_PC(x) io_p2v((x) + 0x10)
|
||||||
#define LCP32XX_TIMER_MCR(x) io_p2v((x) + 0x14)
|
#define LPC32XX_TIMER_MCR(x) io_p2v((x) + 0x14)
|
||||||
#define LCP32XX_TIMER_MR0(x) io_p2v((x) + 0x18)
|
#define LPC32XX_TIMER_MR0(x) io_p2v((x) + 0x18)
|
||||||
#define LCP32XX_TIMER_MR1(x) io_p2v((x) + 0x1C)
|
#define LPC32XX_TIMER_MR1(x) io_p2v((x) + 0x1C)
|
||||||
#define LCP32XX_TIMER_MR2(x) io_p2v((x) + 0x20)
|
#define LPC32XX_TIMER_MR2(x) io_p2v((x) + 0x20)
|
||||||
#define LCP32XX_TIMER_MR3(x) io_p2v((x) + 0x24)
|
#define LPC32XX_TIMER_MR3(x) io_p2v((x) + 0x24)
|
||||||
#define LCP32XX_TIMER_CCR(x) io_p2v((x) + 0x28)
|
#define LPC32XX_TIMER_CCR(x) io_p2v((x) + 0x28)
|
||||||
#define LCP32XX_TIMER_CR0(x) io_p2v((x) + 0x2C)
|
#define LPC32XX_TIMER_CR0(x) io_p2v((x) + 0x2C)
|
||||||
#define LCP32XX_TIMER_CR1(x) io_p2v((x) + 0x30)
|
#define LPC32XX_TIMER_CR1(x) io_p2v((x) + 0x30)
|
||||||
#define LCP32XX_TIMER_CR2(x) io_p2v((x) + 0x34)
|
#define LPC32XX_TIMER_CR2(x) io_p2v((x) + 0x34)
|
||||||
#define LCP32XX_TIMER_CR3(x) io_p2v((x) + 0x38)
|
#define LPC32XX_TIMER_CR3(x) io_p2v((x) + 0x38)
|
||||||
#define LCP32XX_TIMER_EMR(x) io_p2v((x) + 0x3C)
|
#define LPC32XX_TIMER_EMR(x) io_p2v((x) + 0x3C)
|
||||||
#define LCP32XX_TIMER_CTCR(x) io_p2v((x) + 0x70)
|
#define LPC32XX_TIMER_CTCR(x) io_p2v((x) + 0x70)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ir register definitions
|
* ir register definitions
|
||||||
*/
|
*/
|
||||||
#define LCP32XX_TIMER_CNTR_MTCH_BIT(n) (1 << ((n) & 0x3))
|
#define LPC32XX_TIMER_CNTR_MTCH_BIT(n) (1 << ((n) & 0x3))
|
||||||
#define LCP32XX_TIMER_CNTR_CAPT_BIT(n) (1 << (4 + ((n) & 0x3)))
|
#define LPC32XX_TIMER_CNTR_CAPT_BIT(n) (1 << (4 + ((n) & 0x3)))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tcr register definitions
|
* tcr register definitions
|
||||||
*/
|
*/
|
||||||
#define LCP32XX_TIMER_CNTR_TCR_EN 0x1
|
#define LPC32XX_TIMER_CNTR_TCR_EN 0x1
|
||||||
#define LCP32XX_TIMER_CNTR_TCR_RESET 0x2
|
#define LPC32XX_TIMER_CNTR_TCR_RESET 0x2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mcr register definitions
|
* mcr register definitions
|
||||||
*/
|
*/
|
||||||
#define LCP32XX_TIMER_CNTR_MCR_MTCH(n) (0x1 << ((n) * 3))
|
#define LPC32XX_TIMER_CNTR_MCR_MTCH(n) (0x1 << ((n) * 3))
|
||||||
#define LCP32XX_TIMER_CNTR_MCR_RESET(n) (0x1 << (((n) * 3) + 1))
|
#define LPC32XX_TIMER_CNTR_MCR_RESET(n) (0x1 << (((n) * 3) + 1))
|
||||||
#define LCP32XX_TIMER_CNTR_MCR_STOP(n) (0x1 << (((n) * 3) + 2))
|
#define LPC32XX_TIMER_CNTR_MCR_STOP(n) (0x1 << (((n) * 3) + 2))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Standard UART register offsets
|
* Standard UART register offsets
|
||||||
@@ -690,5 +690,8 @@
|
|||||||
#define LPC32XX_GPIO_P1_MUX_SET _GPREG(0x130)
|
#define LPC32XX_GPIO_P1_MUX_SET _GPREG(0x130)
|
||||||
#define LPC32XX_GPIO_P1_MUX_CLR _GPREG(0x134)
|
#define LPC32XX_GPIO_P1_MUX_CLR _GPREG(0x134)
|
||||||
#define LPC32XX_GPIO_P1_MUX_STATE _GPREG(0x138)
|
#define LPC32XX_GPIO_P1_MUX_STATE _GPREG(0x138)
|
||||||
|
#define LPC32XX_GPIO_P2_MUX_SET _GPREG(0x028)
|
||||||
|
#define LPC32XX_GPIO_P2_MUX_CLR _GPREG(0x02C)
|
||||||
|
#define LPC32XX_GPIO_P2_MUX_STATE _GPREG(0x030)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -247,6 +247,8 @@ static struct platform_device lpc32xx_gpio_led_device = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device *phy3250_devs[] __initdata = {
|
static struct platform_device *phy3250_devs[] __initdata = {
|
||||||
|
&lpc32xx_rtc_device,
|
||||||
|
&lpc32xx_tsc_device,
|
||||||
&lpc32xx_i2c0_device,
|
&lpc32xx_i2c0_device,
|
||||||
&lpc32xx_i2c1_device,
|
&lpc32xx_i2c1_device,
|
||||||
&lpc32xx_i2c2_device,
|
&lpc32xx_i2c2_device,
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
/*
|
/*
|
||||||
* LPC32XX CPU and system power management
|
* LPC32XX CPU and system power management
|
||||||
*
|
*
|
||||||
* The LCP32XX has three CPU modes for controlling system power: run,
|
* The LPC32XX has three CPU modes for controlling system power: run,
|
||||||
* direct-run, and halt modes. When switching between halt and run modes,
|
* direct-run, and halt modes. When switching between halt and run modes,
|
||||||
* the CPU transistions through direct-run mode. For Linux, direct-run
|
* the CPU transistions through direct-run mode. For Linux, direct-run
|
||||||
* mode is not used in normal operation. Halt mode is used when the
|
* mode is not used in normal operation. Halt mode is used when the
|
||||||
|
@@ -34,11 +34,11 @@
|
|||||||
static int lpc32xx_clkevt_next_event(unsigned long delta,
|
static int lpc32xx_clkevt_next_event(unsigned long delta,
|
||||||
struct clock_event_device *dev)
|
struct clock_event_device *dev)
|
||||||
{
|
{
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_TCR_RESET,
|
__raw_writel(LPC32XX_TIMER_CNTR_TCR_RESET,
|
||||||
LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
||||||
__raw_writel(delta, LCP32XX_TIMER_PR(LPC32XX_TIMER0_BASE));
|
__raw_writel(delta, LPC32XX_TIMER_PR(LPC32XX_TIMER0_BASE));
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_TCR_EN,
|
__raw_writel(LPC32XX_TIMER_CNTR_TCR_EN,
|
||||||
LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@ static void lpc32xx_clkevt_mode(enum clock_event_mode mode,
|
|||||||
* disable the timer to wait for the first call to
|
* disable the timer to wait for the first call to
|
||||||
* set_next_event().
|
* set_next_event().
|
||||||
*/
|
*/
|
||||||
__raw_writel(0, LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
__raw_writel(0, LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLOCK_EVT_MODE_UNUSED:
|
case CLOCK_EVT_MODE_UNUSED:
|
||||||
@@ -81,8 +81,8 @@ static irqreturn_t lpc32xx_timer_interrupt(int irq, void *dev_id)
|
|||||||
struct clock_event_device *evt = &lpc32xx_clkevt;
|
struct clock_event_device *evt = &lpc32xx_clkevt;
|
||||||
|
|
||||||
/* Clear match */
|
/* Clear match */
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_MTCH_BIT(0),
|
__raw_writel(LPC32XX_TIMER_CNTR_MTCH_BIT(0),
|
||||||
LCP32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
|
LPC32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
|
||||||
|
|
||||||
evt->event_handler(evt);
|
evt->event_handler(evt);
|
||||||
|
|
||||||
@@ -128,14 +128,14 @@ static void __init lpc32xx_timer_init(void)
|
|||||||
clkrate = clkrate / clk_get_pclk_div();
|
clkrate = clkrate / clk_get_pclk_div();
|
||||||
|
|
||||||
/* Initial timer setup */
|
/* Initial timer setup */
|
||||||
__raw_writel(0, LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
__raw_writel(0, LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_MTCH_BIT(0),
|
__raw_writel(LPC32XX_TIMER_CNTR_MTCH_BIT(0),
|
||||||
LCP32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
|
LPC32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
|
||||||
__raw_writel(1, LCP32XX_TIMER_MR0(LPC32XX_TIMER0_BASE));
|
__raw_writel(1, LPC32XX_TIMER_MR0(LPC32XX_TIMER0_BASE));
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_MCR_MTCH(0) |
|
__raw_writel(LPC32XX_TIMER_CNTR_MCR_MTCH(0) |
|
||||||
LCP32XX_TIMER_CNTR_MCR_STOP(0) |
|
LPC32XX_TIMER_CNTR_MCR_STOP(0) |
|
||||||
LCP32XX_TIMER_CNTR_MCR_RESET(0),
|
LPC32XX_TIMER_CNTR_MCR_RESET(0),
|
||||||
LCP32XX_TIMER_MCR(LPC32XX_TIMER0_BASE));
|
LPC32XX_TIMER_MCR(LPC32XX_TIMER0_BASE));
|
||||||
|
|
||||||
/* Setup tick interrupt */
|
/* Setup tick interrupt */
|
||||||
setup_irq(IRQ_LPC32XX_TIMER0, &lpc32xx_timer_irq);
|
setup_irq(IRQ_LPC32XX_TIMER0, &lpc32xx_timer_irq);
|
||||||
@@ -151,14 +151,14 @@ static void __init lpc32xx_timer_init(void)
|
|||||||
clockevents_register_device(&lpc32xx_clkevt);
|
clockevents_register_device(&lpc32xx_clkevt);
|
||||||
|
|
||||||
/* Use timer1 as clock source. */
|
/* Use timer1 as clock source. */
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_TCR_RESET,
|
__raw_writel(LPC32XX_TIMER_CNTR_TCR_RESET,
|
||||||
LCP32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
|
LPC32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
|
||||||
__raw_writel(0, LCP32XX_TIMER_PR(LPC32XX_TIMER1_BASE));
|
__raw_writel(0, LPC32XX_TIMER_PR(LPC32XX_TIMER1_BASE));
|
||||||
__raw_writel(0, LCP32XX_TIMER_MCR(LPC32XX_TIMER1_BASE));
|
__raw_writel(0, LPC32XX_TIMER_MCR(LPC32XX_TIMER1_BASE));
|
||||||
__raw_writel(LCP32XX_TIMER_CNTR_TCR_EN,
|
__raw_writel(LPC32XX_TIMER_CNTR_TCR_EN,
|
||||||
LCP32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
|
LPC32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
|
||||||
|
|
||||||
clocksource_mmio_init(LCP32XX_TIMER_TC(LPC32XX_TIMER1_BASE),
|
clocksource_mmio_init(LPC32XX_TIMER_TC(LPC32XX_TIMER1_BASE),
|
||||||
"lpc32xx_clksrc", clkrate, 300, 32, clocksource_mmio_readl_up);
|
"lpc32xx_clksrc", clkrate, 300, 32, clocksource_mmio_readl_up);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,7 +118,7 @@ void __init omap16xx_map_io(void)
|
|||||||
/*
|
/*
|
||||||
* Common low-level hardware init for omap1.
|
* Common low-level hardware init for omap1.
|
||||||
*/
|
*/
|
||||||
void omap1_init_early(void)
|
void __init omap1_init_early(void)
|
||||||
{
|
{
|
||||||
omap_check_revision();
|
omap_check_revision();
|
||||||
|
|
||||||
|
@@ -117,7 +117,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_mirror);
|
|||||||
void omap_set_lcd_dma_b1_vxres(unsigned long vxres)
|
void omap_set_lcd_dma_b1_vxres(unsigned long vxres)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap15xx()) {
|
if (cpu_is_omap15xx()) {
|
||||||
printk(KERN_ERR "DMA virtual resulotion is not supported "
|
printk(KERN_ERR "DMA virtual resolution is not supported "
|
||||||
"in 1510 mode\n");
|
"in 1510 mode\n");
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
@@ -265,6 +265,8 @@ obj-y += $(smc91x-m) $(smc91x-y)
|
|||||||
|
|
||||||
smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
|
smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
|
||||||
obj-y += $(smsc911x-m) $(smsc911x-y)
|
obj-y += $(smsc911x-m) $(smsc911x-y)
|
||||||
obj-$(CONFIG_ARCH_OMAP4) += hwspinlock.o
|
ifneq ($(CONFIG_HWSPINLOCK_OMAP),)
|
||||||
|
obj-y += hwspinlock.o
|
||||||
|
endif
|
||||||
|
|
||||||
obj-y += common-board-devices.o twl-common.o
|
obj-y += common-board-devices.o twl-common.o
|
||||||
|
@@ -279,7 +279,7 @@ static void __init omap_2430sdp_init(void)
|
|||||||
platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
|
platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
|
||||||
omap_serial_init();
|
omap_serial_init();
|
||||||
omap_sdrc_init(NULL, NULL);
|
omap_sdrc_init(NULL, NULL);
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_init(mmc);
|
||||||
omap2_usbfs_init(&sdp2430_usb_config);
|
omap2_usbfs_init(&sdp2430_usb_config);
|
||||||
|
|
||||||
omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
|
omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
|
||||||
|
@@ -232,11 +232,13 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
*/
|
*/
|
||||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||||
.gpio_wp = 4,
|
.gpio_wp = 4,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mmc = 2,
|
.mmc = 2,
|
||||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||||
.gpio_wp = 7,
|
.gpio_wp = 7,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{} /* Terminator */
|
{} /* Terminator */
|
||||||
};
|
};
|
||||||
@@ -249,7 +251,7 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
|
|||||||
*/
|
*/
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
mmc[1].gpio_cd = gpio + 1;
|
mmc[1].gpio_cd = gpio + 1;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
|
/* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
|
||||||
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
|
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
|
||||||
@@ -606,6 +608,7 @@ static void __init omap_3430sdp_init(void)
|
|||||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||||
omap_board_config = sdp3430_config;
|
omap_board_config = sdp3430_config;
|
||||||
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
|
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
omap3430_i2c_init();
|
omap3430_i2c_init();
|
||||||
omap_display_init(&sdp3430_dss_data);
|
omap_display_init(&sdp3430_dss_data);
|
||||||
if (omap_rev() > OMAP3430_REV_ES1_0)
|
if (omap_rev() > OMAP3430_REV_ES1_0)
|
||||||
|
@@ -491,9 +491,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
|
|||||||
{
|
{
|
||||||
struct omap2_hsmmc_info *c;
|
struct omap2_hsmmc_info *c;
|
||||||
|
|
||||||
omap2_hsmmc_init(controllers);
|
omap_hsmmc_init(controllers);
|
||||||
for (c = controllers; c->mmc; c++)
|
for (c = controllers; c->mmc; c++)
|
||||||
omap4_twl6030_hsmmc_set_late_init(c->dev);
|
omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -504,7 +504,7 @@ static void __init am3517_evm_init(void)
|
|||||||
am3517_evm_musb_init();
|
am3517_evm_musb_init();
|
||||||
|
|
||||||
/* MMC init function */
|
/* MMC init function */
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_init(mmc);
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
|
MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
|
||||||
|
@@ -413,7 +413,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA,
|
||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.gpio_wp = -EINVAL,
|
.gpio_wp = -EINVAL,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mmc = 2,
|
.mmc = 2,
|
||||||
@@ -471,7 +471,7 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
|
|||||||
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -639,6 +639,7 @@ static void __init cm_t3x_common_init(void)
|
|||||||
omap_serial_init();
|
omap_serial_init();
|
||||||
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
|
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
|
||||||
mt46h32m32lf6_sdrc_params);
|
mt46h32m32lf6_sdrc_params);
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
cm_t35_init_i2c();
|
cm_t35_init_i2c();
|
||||||
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
|
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
|
||||||
cm_t35_init_ethernet();
|
cm_t35_init_ethernet();
|
||||||
|
@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||||
.gpio_wp = 29,
|
.gpio_wp = 29,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{} /* Terminator */
|
{} /* Terminator */
|
||||||
};
|
};
|
||||||
@@ -228,7 +229,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
|
|||||||
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||||
@@ -636,6 +637,7 @@ static void __init devkit8000_init(void)
|
|||||||
|
|
||||||
omap_dm9000_init();
|
omap_dm9000_init();
|
||||||
|
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
devkit8000_i2c_init();
|
devkit8000_i2c_init();
|
||||||
platform_add_devices(devkit8000_devices,
|
platform_add_devices(devkit8000_devices,
|
||||||
ARRAY_SIZE(devkit8000_devices));
|
ARRAY_SIZE(devkit8000_devices));
|
||||||
|
@@ -189,7 +189,7 @@ unmap:
|
|||||||
*
|
*
|
||||||
* @return - void.
|
* @return - void.
|
||||||
*/
|
*/
|
||||||
void board_flash_init(struct flash_partitions partition_info[],
|
void __init board_flash_init(struct flash_partitions partition_info[],
|
||||||
char chip_sel_board[][GPMC_CS_NUM], int nand_type)
|
char chip_sel_board[][GPMC_CS_NUM], int nand_type)
|
||||||
{
|
{
|
||||||
u8 cs = 0;
|
u8 cs = 0;
|
||||||
|
@@ -295,6 +295,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA,
|
||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.gpio_wp = -EINVAL,
|
.gpio_wp = -EINVAL,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
|
#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
|
||||||
{
|
{
|
||||||
@@ -402,7 +403,7 @@ static int igep_twl_gpio_setup(struct device *dev,
|
|||||||
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
||||||
#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
|
#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
|
||||||
@@ -639,6 +640,9 @@ static void __init igep_init(void)
|
|||||||
|
|
||||||
/* Get IGEP2 hardware revision */
|
/* Get IGEP2 hardware revision */
|
||||||
igep2_get_revision();
|
igep2_get_revision();
|
||||||
|
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
|
|
||||||
/* Register I2C busses and drivers */
|
/* Register I2C busses and drivers */
|
||||||
igep_i2c_init();
|
igep_i2c_init();
|
||||||
platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));
|
platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));
|
||||||
|
@@ -27,7 +27,6 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
@@ -424,7 +423,7 @@ static void __init omap_ldp_init(void)
|
|||||||
board_nand_init(ldp_nand_partitions,
|
board_nand_init(ldp_nand_partitions,
|
||||||
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
|
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
|
||||||
|
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_init(mmc);
|
||||||
ldp_display_init();
|
ldp_display_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -36,10 +36,6 @@
|
|||||||
|
|
||||||
#include "mux.h"
|
#include "mux.h"
|
||||||
|
|
||||||
static int slot1_cover_open;
|
|
||||||
static int slot2_cover_open;
|
|
||||||
static struct device *mmc_device;
|
|
||||||
|
|
||||||
#define TUSB6010_ASYNC_CS 1
|
#define TUSB6010_ASYNC_CS 1
|
||||||
#define TUSB6010_SYNC_CS 4
|
#define TUSB6010_SYNC_CS 4
|
||||||
#define TUSB6010_GPIO_INT 58
|
#define TUSB6010_GPIO_INT 58
|
||||||
@@ -211,6 +207,10 @@ static struct omap_onenand_platform_data board_onenand_data[] = {
|
|||||||
#define N810_EMMC_VSD_GPIO 23
|
#define N810_EMMC_VSD_GPIO 23
|
||||||
#define N810_EMMC_VIO_GPIO 9
|
#define N810_EMMC_VIO_GPIO 9
|
||||||
|
|
||||||
|
static int slot1_cover_open;
|
||||||
|
static int slot2_cover_open;
|
||||||
|
static struct device *mmc_device;
|
||||||
|
|
||||||
static int n8x0_mmc_switch_slot(struct device *dev, int slot)
|
static int n8x0_mmc_switch_slot(struct device *dev, int slot)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MMC_DEBUG
|
#ifdef CONFIG_MMC_DEBUG
|
||||||
|
@@ -253,6 +253,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||||
.gpio_wp = -EINVAL,
|
.gpio_wp = -EINVAL,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{} /* Terminator */
|
{} /* Terminator */
|
||||||
};
|
};
|
||||||
@@ -272,12 +273,10 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
|||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (beagle_config.mmc1_gpio_wp != -EINVAL)
|
|
||||||
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
|
||||||
mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
|
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
|
||||||
@@ -521,6 +520,11 @@ static void __init omap3_beagle_init(void)
|
|||||||
{
|
{
|
||||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||||
omap3_beagle_init_rev();
|
omap3_beagle_init_rev();
|
||||||
|
|
||||||
|
if (beagle_config.mmc1_gpio_wp != -EINVAL)
|
||||||
|
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
|
|
||||||
omap3_beagle_i2c_init();
|
omap3_beagle_i2c_init();
|
||||||
|
|
||||||
gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
|
gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
|
||||||
|
@@ -317,6 +317,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA,
|
||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.gpio_wp = 63,
|
.gpio_wp = 63,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
#ifdef CONFIG_WL12XX_PLATFORM_DATA
|
#ifdef CONFIG_WL12XX_PLATFORM_DATA
|
||||||
{
|
{
|
||||||
@@ -361,9 +362,8 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
|
|||||||
int r, lcd_bl_en;
|
int r, lcd_bl_en;
|
||||||
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
omap_mux_init_gpio(63, OMAP_PIN_INPUT);
|
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Most GPIOs are for USB OTG. Some are mostly sent to
|
* Most GPIOs are for USB OTG. Some are mostly sent to
|
||||||
@@ -644,6 +644,9 @@ static void __init omap3_evm_init(void)
|
|||||||
omap_board_config = omap3_evm_config;
|
omap_board_config = omap3_evm_config;
|
||||||
omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
|
omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
|
||||||
|
|
||||||
|
omap_mux_init_gpio(63, OMAP_PIN_INPUT);
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
|
|
||||||
omap3_evm_i2c_init();
|
omap3_evm_i2c_init();
|
||||||
|
|
||||||
omap_display_init(&omap3_evm_dss_data);
|
omap_display_init(&omap3_evm_dss_data);
|
||||||
|
@@ -128,7 +128,7 @@ static void __init board_mmc_init(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
omap2_hsmmc_init(board_mmc_info);
|
omap_hsmmc_init(board_mmc_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
|
static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
|
||||||
|
@@ -273,6 +273,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
|
|||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.gpio_wp = 126,
|
.gpio_wp = 126,
|
||||||
.ext_clock = 0,
|
.ext_clock = 0,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mmc = 2,
|
.mmc = 2,
|
||||||
@@ -281,6 +282,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
|
|||||||
.gpio_wp = 127,
|
.gpio_wp = 127,
|
||||||
.ext_clock = 1,
|
.ext_clock = 1,
|
||||||
.transceiver = true,
|
.transceiver = true,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mmc = 3,
|
.mmc = 3,
|
||||||
@@ -300,7 +302,7 @@ static int omap3pandora_twl_gpio_setup(struct device *dev,
|
|||||||
/* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */
|
/* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */
|
||||||
omap3pandora_mmc[0].gpio_cd = gpio + 0;
|
omap3pandora_mmc[0].gpio_cd = gpio + 0;
|
||||||
omap3pandora_mmc[1].gpio_cd = gpio + 1;
|
omap3pandora_mmc[1].gpio_cd = gpio + 1;
|
||||||
omap2_hsmmc_init(omap3pandora_mmc);
|
omap_hsmmc_late_init(omap3pandora_mmc);
|
||||||
|
|
||||||
/* gpio + 13 drives 32kHz buffer for wifi module */
|
/* gpio + 13 drives 32kHz buffer for wifi module */
|
||||||
gpio_32khz = gpio + 13;
|
gpio_32khz = gpio + 13;
|
||||||
@@ -343,7 +345,7 @@ static struct regulator_consumer_supply pandora_vcc_lcd_supply[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct regulator_consumer_supply pandora_usb_phy_supply[] = {
|
static struct regulator_consumer_supply pandora_usb_phy_supply[] = {
|
||||||
REGULATOR_SUPPLY("hsusb0", "ehci-omap.0"),
|
REGULATOR_SUPPLY("hsusb1", "ehci-omap.0"),
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ads7846 on SPI and 2 nub controllers on I2C */
|
/* ads7846 on SPI and 2 nub controllers on I2C */
|
||||||
@@ -561,13 +563,13 @@ static struct platform_device *omap3pandora_devices[] __initdata = {
|
|||||||
|
|
||||||
static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
|
static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
|
||||||
|
|
||||||
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
|
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
|
||||||
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
|
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
|
||||||
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
|
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
|
||||||
|
|
||||||
.phy_reset = true,
|
.phy_reset = true,
|
||||||
.reset_gpio_port[0] = 16,
|
.reset_gpio_port[0] = -EINVAL,
|
||||||
.reset_gpio_port[1] = -EINVAL,
|
.reset_gpio_port[1] = 16,
|
||||||
.reset_gpio_port[2] = -EINVAL
|
.reset_gpio_port[2] = -EINVAL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -580,6 +582,7 @@ static struct omap_board_mux board_mux[] __initdata = {
|
|||||||
static void __init omap3pandora_init(void)
|
static void __init omap3pandora_init(void)
|
||||||
{
|
{
|
||||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||||
|
omap_hsmmc_init(omap3pandora_mmc);
|
||||||
omap3pandora_i2c_init();
|
omap3pandora_i2c_init();
|
||||||
pandora_wl1251_init();
|
pandora_wl1251_init();
|
||||||
platform_add_devices(omap3pandora_devices,
|
platform_add_devices(omap3pandora_devices,
|
||||||
|
@@ -209,10 +209,11 @@ static struct regulator_init_data omap3stalker_vsim = {
|
|||||||
|
|
||||||
static struct omap2_hsmmc_info mmc[] = {
|
static struct omap2_hsmmc_info mmc[] = {
|
||||||
{
|
{
|
||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA,
|
||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.gpio_wp = 23,
|
.gpio_wp = 23,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{} /* Terminator */
|
{} /* Terminator */
|
||||||
};
|
};
|
||||||
@@ -282,9 +283,8 @@ omap3stalker_twl_gpio_setup(struct device *dev,
|
|||||||
unsigned gpio, unsigned ngpio)
|
unsigned gpio, unsigned ngpio)
|
||||||
{
|
{
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
|
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Most GPIOs are for USB OTG. Some are mostly sent to
|
* Most GPIOs are for USB OTG. Some are mostly sent to
|
||||||
@@ -425,6 +425,9 @@ static void __init omap3_stalker_init(void)
|
|||||||
omap_board_config = omap3_stalker_config;
|
omap_board_config = omap3_stalker_config;
|
||||||
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
|
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
|
||||||
|
|
||||||
|
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
|
|
||||||
omap3_stalker_i2c_init();
|
omap3_stalker_i2c_init();
|
||||||
|
|
||||||
platform_add_devices(omap3_stalker_devices,
|
platform_add_devices(omap3_stalker_devices,
|
||||||
|
@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||||
.gpio_wp = 29,
|
.gpio_wp = 29,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{} /* Terminator */
|
{} /* Terminator */
|
||||||
};
|
};
|
||||||
@@ -117,15 +118,9 @@ static struct gpio_led gpio_leds[];
|
|||||||
static int touchbook_twl_gpio_setup(struct device *dev,
|
static int touchbook_twl_gpio_setup(struct device *dev,
|
||||||
unsigned gpio, unsigned ngpio)
|
unsigned gpio, unsigned ngpio)
|
||||||
{
|
{
|
||||||
if (system_rev >= 0x20 && system_rev <= 0x34301000) {
|
|
||||||
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
|
|
||||||
mmc[0].gpio_wp = 23;
|
|
||||||
} else {
|
|
||||||
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
|
|
||||||
}
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
/* REVISIT: need ehci-omap hooks for external VBUS
|
/* REVISIT: need ehci-omap hooks for external VBUS
|
||||||
* power switch and overcurrent detect
|
* power switch and overcurrent detect
|
||||||
@@ -351,6 +346,14 @@ static void __init omap3_touchbook_init(void)
|
|||||||
|
|
||||||
pm_power_off = omap3_touchbook_poweroff;
|
pm_power_off = omap3_touchbook_poweroff;
|
||||||
|
|
||||||
|
if (system_rev >= 0x20 && system_rev <= 0x34301000) {
|
||||||
|
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
|
||||||
|
mmc[0].gpio_wp = 23;
|
||||||
|
} else {
|
||||||
|
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
|
||||||
|
}
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
|
|
||||||
omap3_touchbook_i2c_init();
|
omap3_touchbook_i2c_init();
|
||||||
platform_add_devices(omap3_touchbook_devices,
|
platform_add_devices(omap3_touchbook_devices,
|
||||||
ARRAY_SIZE(omap3_touchbook_devices));
|
ARRAY_SIZE(omap3_touchbook_devices));
|
||||||
|
@@ -245,9 +245,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
|
|||||||
{
|
{
|
||||||
struct omap2_hsmmc_info *c;
|
struct omap2_hsmmc_info *c;
|
||||||
|
|
||||||
omap2_hsmmc_init(controllers);
|
omap_hsmmc_init(controllers);
|
||||||
for (c = controllers; c->mmc; c++)
|
for (c = controllers; c->mmc; c++)
|
||||||
omap4_twl6030_hsmmc_set_late_init(c->dev);
|
omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -461,7 +461,7 @@ static struct omap_dss_board_info omap4_panda_dss_data = {
|
|||||||
.default_device = &omap4_panda_dvi_device,
|
.default_device = &omap4_panda_dvi_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
void omap4_panda_display_init(void)
|
void __init omap4_panda_display_init(void)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@@ -407,8 +407,6 @@ static inline void __init overo_init_keys(void) { return; }
|
|||||||
static int overo_twl_gpio_setup(struct device *dev,
|
static int overo_twl_gpio_setup(struct device *dev,
|
||||||
unsigned gpio, unsigned ngpio)
|
unsigned gpio, unsigned ngpio)
|
||||||
{
|
{
|
||||||
omap2_hsmmc_init(mmc);
|
|
||||||
|
|
||||||
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||||
@@ -505,6 +503,7 @@ static void __init overo_init(void)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
overo_i2c_init();
|
overo_i2c_init();
|
||||||
omap_display_init(&overo_dss_data);
|
omap_display_init(&overo_dss_data);
|
||||||
omap_serial_init();
|
omap_serial_init();
|
||||||
|
@@ -120,7 +120,7 @@ static void __init rm680_peripherals_init(void)
|
|||||||
ARRAY_SIZE(rm680_peripherals_devices));
|
ARRAY_SIZE(rm680_peripherals_devices));
|
||||||
rm680_i2c_init();
|
rm680_i2c_init();
|
||||||
gpmc_onenand_init(board_onenand_data);
|
gpmc_onenand_init(board_onenand_data);
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_init(mmc);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OMAP_MUX
|
#ifdef CONFIG_OMAP_MUX
|
||||||
|
@@ -1145,7 +1145,7 @@ void __init rx51_peripherals_init(void)
|
|||||||
|
|
||||||
partition = omap_mux_get("core");
|
partition = omap_mux_get("core");
|
||||||
if (partition)
|
if (partition)
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_init(mmc);
|
||||||
|
|
||||||
rx51_charger_init();
|
rx51_charger_init();
|
||||||
}
|
}
|
||||||
|
@@ -205,6 +205,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA,
|
||||||
.gpio_wp = -EINVAL,
|
.gpio_wp = -EINVAL,
|
||||||
.power_saving = true,
|
.power_saving = true,
|
||||||
|
.deferred = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "internal",
|
.name = "internal",
|
||||||
@@ -233,7 +234,7 @@ static int zoom_twl_gpio_setup(struct device *dev,
|
|||||||
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap_hsmmc_late_init(mmc);
|
||||||
|
|
||||||
ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
|
ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
|
||||||
"lcd enable");
|
"lcd enable");
|
||||||
@@ -301,6 +302,7 @@ void __init zoom_peripherals_init(void)
|
|||||||
if (ret)
|
if (ret)
|
||||||
pr_err("error setting wl12xx data: %d\n", ret);
|
pr_err("error setting wl12xx data: %d\n", ret);
|
||||||
|
|
||||||
|
omap_hsmmc_init(mmc);
|
||||||
omap_i2c_init();
|
omap_i2c_init();
|
||||||
platform_device_register(&omap_vwlan_device);
|
platform_device_register(&omap_vwlan_device);
|
||||||
usb_musb_init(NULL);
|
usb_musb_init(NULL);
|
||||||
|
@@ -43,6 +43,7 @@
|
|||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
|
|
||||||
#include <plat/clock.h>
|
#include <plat/clock.h>
|
||||||
|
|
||||||
|
@@ -76,13 +76,15 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
|
|||||||
gpio_set_debounce(gpio_pendown, gpio_debounce);
|
gpio_set_debounce(gpio_pendown, gpio_debounce);
|
||||||
}
|
}
|
||||||
|
|
||||||
ads7846_config.gpio_pendown = gpio_pendown;
|
|
||||||
|
|
||||||
spi_bi->bus_num = bus_num;
|
spi_bi->bus_num = bus_num;
|
||||||
spi_bi->irq = OMAP_GPIO_IRQ(gpio_pendown);
|
spi_bi->irq = OMAP_GPIO_IRQ(gpio_pendown);
|
||||||
|
|
||||||
if (board_pdata)
|
if (board_pdata) {
|
||||||
|
board_pdata->gpio_pendown = gpio_pendown;
|
||||||
spi_bi->platform_data = board_pdata;
|
spi_bi->platform_data = board_pdata;
|
||||||
|
} else {
|
||||||
|
ads7846_config.gpio_pendown = gpio_pendown;
|
||||||
|
}
|
||||||
|
|
||||||
spi_register_board_info(&ads7846_spi_board_info, 1);
|
spi_register_board_info(&ads7846_spi_board_info, 1);
|
||||||
}
|
}
|
||||||
|
@@ -338,6 +338,11 @@
|
|||||||
#define AM35XX_HECC_SW_RST BIT(3)
|
#define AM35XX_HECC_SW_RST BIT(3)
|
||||||
#define AM35XX_VPFE_PCLK_SW_RST BIT(4)
|
#define AM35XX_VPFE_PCLK_SW_RST BIT(4)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONTROL AM33XX STATUS register
|
||||||
|
*/
|
||||||
|
#define AM33XX_CONTROL_STATUS 0x040
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CONTROL OMAP STATUS register to identify OMAP3 features
|
* CONTROL OMAP STATUS register to identify OMAP3 features
|
||||||
*/
|
*/
|
||||||
|
@@ -276,7 +276,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
|
#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
|
||||||
static inline void omap_init_mbox(void)
|
static inline void __init omap_init_mbox(void)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh;
|
struct omap_hwmod *oh;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
@@ -337,7 +337,7 @@ static inline void omap_init_audio(void) {}
|
|||||||
#if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \
|
#if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \
|
||||||
defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE)
|
defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE)
|
||||||
|
|
||||||
static void omap_init_mcpdm(void)
|
static void __init omap_init_mcpdm(void)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh;
|
struct omap_hwmod *oh;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
@@ -358,7 +358,7 @@ static inline void omap_init_mcpdm(void) {}
|
|||||||
#if defined(CONFIG_SND_OMAP_SOC_DMIC) || \
|
#if defined(CONFIG_SND_OMAP_SOC_DMIC) || \
|
||||||
defined(CONFIG_SND_OMAP_SOC_DMIC_MODULE)
|
defined(CONFIG_SND_OMAP_SOC_DMIC_MODULE)
|
||||||
|
|
||||||
static void omap_init_dmic(void)
|
static void __init omap_init_dmic(void)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh;
|
struct omap_hwmod *oh;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
@@ -380,7 +380,7 @@ static inline void omap_init_dmic(void) {}
|
|||||||
|
|
||||||
#include <plat/mcspi.h>
|
#include <plat/mcspi.h>
|
||||||
|
|
||||||
static int omap_mcspi_init(struct omap_hwmod *oh, void *unused)
|
static int __init omap_mcspi_init(struct omap_hwmod *oh, void *unused)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
char *name = "omap2_mcspi";
|
char *name = "omap2_mcspi";
|
||||||
|
@@ -124,7 +124,7 @@ static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
|
static int __init omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
|
||||||
{
|
{
|
||||||
u32 enable_mask, enable_shift;
|
u32 enable_mask, enable_shift;
|
||||||
u32 pipd_mask, pipd_shift;
|
u32 pipd_mask, pipd_shift;
|
||||||
@@ -157,7 +157,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int omap_hdmi_init(enum omap_hdmi_flags flags)
|
int __init omap_hdmi_init(enum omap_hdmi_flags flags)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap44xx())
|
if (cpu_is_omap44xx())
|
||||||
omap4_hdmi_mux_pads(flags);
|
omap4_hdmi_mux_pads(flags);
|
||||||
@@ -165,7 +165,7 @@ int omap_hdmi_init(enum omap_hdmi_flags flags)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
|
static int __init omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap44xx())
|
if (cpu_is_omap44xx())
|
||||||
return omap4_dsi_mux_pads(dsi_id, lane_mask);
|
return omap4_dsi_mux_pads(dsi_id, lane_mask);
|
||||||
@@ -173,7 +173,7 @@ static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask)
|
static void __init omap_dsi_disable_pads(int dsi_id, unsigned lane_mask)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap44xx())
|
if (cpu_is_omap44xx())
|
||||||
omap4_dsi_mux_pads(dsi_id, 0);
|
omap4_dsi_mux_pads(dsi_id, 0);
|
||||||
|
@@ -227,7 +227,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
|
|||||||
|
|
||||||
dma_stride = OMAP2_DMA_STRIDE;
|
dma_stride = OMAP2_DMA_STRIDE;
|
||||||
dma_common_ch_start = CSDP;
|
dma_common_ch_start = CSDP;
|
||||||
if (cpu_is_omap3630() || cpu_is_omap4430())
|
if (cpu_is_omap3630() || cpu_is_omap44xx())
|
||||||
dma_common_ch_end = CCDN;
|
dma_common_ch_end = CCDN;
|
||||||
else
|
else
|
||||||
dma_common_ch_end = CCFN;
|
dma_common_ch_end = CCFN;
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
#include <plat/omap_hwmod.h>
|
#include <plat/omap_hwmod.h>
|
||||||
#include <plat/omap_device.h>
|
#include <plat/omap_device.h>
|
||||||
|
|
||||||
static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
|
static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
struct omap_gpio_platform_data *pdata;
|
struct omap_gpio_platform_data *pdata;
|
||||||
|
@@ -101,10 +101,13 @@ 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 (!gpmc_cfg->id) {
|
||||||
if (ret < 0) {
|
ret = platform_device_register(&gpmc_smsc911x_regulator);
|
||||||
pr_err("Unable to register smsc911x regulators: %d\n", ret);
|
if (ret < 0) {
|
||||||
return;
|
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) {
|
||||||
|
@@ -888,6 +888,7 @@ int gpmc_enable_hwecc(int cs, int mode, int dev_width, int ecc_size)
|
|||||||
gpmc_write_reg(GPMC_ECC_CONFIG, val);
|
gpmc_write_reg(GPMC_ECC_CONFIG, val);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(gpmc_enable_hwecc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gpmc_calculate_ecc - generate non-inverted ecc bytes
|
* gpmc_calculate_ecc - generate non-inverted ecc bytes
|
||||||
@@ -918,3 +919,4 @@ int gpmc_calculate_ecc(int cs, const u_char *dat, u_char *ecc_code)
|
|||||||
gpmc_ecc_used = -EINVAL;
|
gpmc_ecc_used = -EINVAL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(gpmc_calculate_ecc);
|
||||||
|
@@ -293,8 +293,8 @@ static inline void omap_hsmmc_mux(struct omap_mmc_platform_data *mmc_controller,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
||||||
struct omap_mmc_platform_data *mmc)
|
struct omap_mmc_platform_data *mmc)
|
||||||
{
|
{
|
||||||
char *hc_name;
|
char *hc_name;
|
||||||
|
|
||||||
@@ -429,66 +429,131 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int omap_hsmmc_done;
|
static int omap_hsmmc_done;
|
||||||
|
|
||||||
|
void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
||||||
|
{
|
||||||
|
struct platform_device *pdev;
|
||||||
|
struct omap_mmc_platform_data *mmc_pdata;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
if (omap_hsmmc_done != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
omap_hsmmc_done++;
|
||||||
|
|
||||||
|
for (; c->mmc; c++) {
|
||||||
|
if (!c->deferred)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pdev = c->pdev;
|
||||||
|
if (!pdev)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mmc_pdata = pdev->dev.platform_data;
|
||||||
|
if (!mmc_pdata)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mmc_pdata->slots[0].switch_pin = c->gpio_cd;
|
||||||
|
mmc_pdata->slots[0].gpio_wp = c->gpio_wp;
|
||||||
|
|
||||||
|
res = omap_device_register(pdev);
|
||||||
|
if (res)
|
||||||
|
pr_err("Could not late init MMC %s\n",
|
||||||
|
c->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#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)
|
static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
||||||
|
int ctrl_nr)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh;
|
struct omap_hwmod *oh;
|
||||||
|
struct omap_hwmod *ohs[1];
|
||||||
|
struct omap_device *od;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN];
|
char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN];
|
||||||
struct omap_mmc_platform_data *mmc_data;
|
struct omap_mmc_platform_data *mmc_data;
|
||||||
struct omap_mmc_dev_attr *mmc_dev_attr;
|
struct omap_mmc_dev_attr *mmc_dev_attr;
|
||||||
char *name;
|
char *name;
|
||||||
int l;
|
int res;
|
||||||
|
|
||||||
mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL);
|
mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL);
|
||||||
if (!mmc_data) {
|
if (!mmc_data) {
|
||||||
pr_err("Cannot allocate memory for mmc device!\n");
|
pr_err("Cannot allocate memory for mmc device!\n");
|
||||||
goto done;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (omap_hsmmc_pdata_init(hsmmcinfo, mmc_data) < 0) {
|
res = omap_hsmmc_pdata_init(hsmmcinfo, mmc_data);
|
||||||
pr_err("%s fails!\n", __func__);
|
if (res < 0)
|
||||||
goto done;
|
goto free_mmc;
|
||||||
}
|
|
||||||
omap_hsmmc_mux(mmc_data, (ctrl_nr - 1));
|
omap_hsmmc_mux(mmc_data, (ctrl_nr - 1));
|
||||||
|
|
||||||
name = "omap_hsmmc";
|
name = "omap_hsmmc";
|
||||||
|
res = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN,
|
||||||
l = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN,
|
|
||||||
"mmc%d", ctrl_nr);
|
"mmc%d", ctrl_nr);
|
||||||
WARN(l >= MAX_OMAP_MMC_HWMOD_NAME_LEN,
|
WARN(res >= MAX_OMAP_MMC_HWMOD_NAME_LEN,
|
||||||
"String buffer overflow in MMC%d device setup\n", ctrl_nr);
|
"String buffer overflow in MMC%d device setup\n", ctrl_nr);
|
||||||
|
|
||||||
oh = omap_hwmod_lookup(oh_name);
|
oh = omap_hwmod_lookup(oh_name);
|
||||||
if (!oh) {
|
if (!oh) {
|
||||||
pr_err("Could not look up %s\n", oh_name);
|
pr_err("Could not look up %s\n", oh_name);
|
||||||
kfree(mmc_data->slots[0].name);
|
goto free_name;
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
|
ohs[0] = oh;
|
||||||
if (oh->dev_attr != NULL) {
|
if (oh->dev_attr != NULL) {
|
||||||
mmc_dev_attr = oh->dev_attr;
|
mmc_dev_attr = oh->dev_attr;
|
||||||
mmc_data->controller_flags = mmc_dev_attr->flags;
|
mmc_data->controller_flags = mmc_dev_attr->flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdev = omap_device_build(name, ctrl_nr - 1, oh, mmc_data,
|
pdev = platform_device_alloc(name, ctrl_nr - 1);
|
||||||
sizeof(struct omap_mmc_platform_data), NULL, 0, false);
|
if (!pdev) {
|
||||||
if (IS_ERR(pdev)) {
|
pr_err("Could not allocate pdev for %s\n", name);
|
||||||
WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name);
|
goto free_name;
|
||||||
kfree(mmc_data->slots[0].name);
|
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
/*
|
dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
|
||||||
* return device handle to board setup code
|
|
||||||
* required to populate for regulator framework structure
|
|
||||||
*/
|
|
||||||
hsmmcinfo->dev = &pdev->dev;
|
|
||||||
|
|
||||||
done:
|
od = omap_device_alloc(pdev, ohs, 1, NULL, 0);
|
||||||
|
if (!od) {
|
||||||
|
pr_err("Could not allocate od for %s\n", name);
|
||||||
|
goto put_pdev;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = platform_device_add_data(pdev, mmc_data,
|
||||||
|
sizeof(struct omap_mmc_platform_data));
|
||||||
|
if (res) {
|
||||||
|
pr_err("Could not add pdata for %s\n", name);
|
||||||
|
goto put_pdev;
|
||||||
|
}
|
||||||
|
|
||||||
|
hsmmcinfo->pdev = pdev;
|
||||||
|
|
||||||
|
if (hsmmcinfo->deferred)
|
||||||
|
goto free_mmc;
|
||||||
|
|
||||||
|
res = omap_device_register(pdev);
|
||||||
|
if (res) {
|
||||||
|
pr_err("Could not register od for %s\n", name);
|
||||||
|
goto free_od;
|
||||||
|
}
|
||||||
|
|
||||||
|
goto free_mmc;
|
||||||
|
|
||||||
|
free_od:
|
||||||
|
omap_device_delete(od);
|
||||||
|
|
||||||
|
put_pdev:
|
||||||
|
platform_device_put(pdev);
|
||||||
|
|
||||||
|
free_name:
|
||||||
|
kfree(mmc_data->slots[0].name);
|
||||||
|
|
||||||
|
free_mmc:
|
||||||
kfree(mmc_data);
|
kfree(mmc_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
|
void __init omap_hsmmc_init(struct omap2_hsmmc_info *controllers)
|
||||||
{
|
{
|
||||||
u32 reg;
|
u32 reg;
|
||||||
|
|
||||||
@@ -521,7 +586,7 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (; controllers->mmc; controllers++)
|
for (; controllers->mmc; controllers++)
|
||||||
omap_init_hsmmc(controllers, controllers->mmc);
|
omap_hsmmc_init_one(controllers, controllers->mmc);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,10 +21,11 @@ struct omap2_hsmmc_info {
|
|||||||
bool no_off; /* power_saving and power is not to go off */
|
bool no_off; /* power_saving and power is not to go off */
|
||||||
bool no_off_init; /* no power off when not in MMC sleep state */
|
bool no_off_init; /* no power off when not in MMC sleep state */
|
||||||
bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */
|
bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */
|
||||||
|
bool deferred; /* mmc needs a deferred probe */
|
||||||
int gpio_cd; /* or -EINVAL */
|
int gpio_cd; /* or -EINVAL */
|
||||||
int gpio_wp; /* or -EINVAL */
|
int gpio_wp; /* or -EINVAL */
|
||||||
char *name; /* or NULL for default */
|
char *name; /* or NULL for default */
|
||||||
struct device *dev; /* returned: pointer to mmc adapter */
|
struct platform_device *pdev; /* mmc controller instance */
|
||||||
int ocr_mask; /* temporary HACK */
|
int ocr_mask; /* temporary HACK */
|
||||||
/* Remux (pad configuration) when powering on/off */
|
/* Remux (pad configuration) when powering on/off */
|
||||||
void (*remux)(struct device *dev, int slot, int power_on);
|
void (*remux)(struct device *dev, int slot, int power_on);
|
||||||
@@ -34,11 +35,16 @@ struct omap2_hsmmc_info {
|
|||||||
|
|
||||||
#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
|
#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
|
||||||
|
|
||||||
void omap2_hsmmc_init(struct omap2_hsmmc_info *);
|
void omap_hsmmc_init(struct omap2_hsmmc_info *);
|
||||||
|
void omap_hsmmc_late_init(struct omap2_hsmmc_info *);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static inline void omap2_hsmmc_init(struct omap2_hsmmc_info *info)
|
static inline void omap_hsmmc_init(struct omap2_hsmmc_info *info)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void omap_hsmmc_late_init(struct omap2_hsmmc_info *info)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -44,6 +44,8 @@ int omap_type(void)
|
|||||||
|
|
||||||
if (cpu_is_omap24xx()) {
|
if (cpu_is_omap24xx()) {
|
||||||
val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
|
val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
|
||||||
|
} else if (cpu_is_am33xx()) {
|
||||||
|
val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
|
||||||
} else if (cpu_is_omap34xx()) {
|
} else if (cpu_is_omap34xx()) {
|
||||||
val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
|
val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
|
||||||
} else if (cpu_is_omap44xx()) {
|
} else if (cpu_is_omap44xx()) {
|
||||||
@@ -343,6 +345,7 @@ static void __init omap3_check_revision(const char **cpu_rev)
|
|||||||
case 0xb944:
|
case 0xb944:
|
||||||
omap_revision = AM335X_REV_ES1_0;
|
omap_revision = AM335X_REV_ES1_0;
|
||||||
*cpu_rev = "1.0";
|
*cpu_rev = "1.0";
|
||||||
|
break;
|
||||||
case 0xb8f2:
|
case 0xb8f2:
|
||||||
switch (rev) {
|
switch (rev) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@@ -43,14 +43,13 @@
|
|||||||
#include "clockdomain.h"
|
#include "clockdomain.h"
|
||||||
#include <plat/omap_hwmod.h>
|
#include <plat/omap_hwmod.h>
|
||||||
#include <plat/multi.h>
|
#include <plat/multi.h>
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The machine specific code may provide the extra mapping besides the
|
* The machine specific code may provide the extra mapping besides the
|
||||||
* default mapping provided here.
|
* default mapping provided here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_OMAP2
|
#if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430)
|
||||||
static struct map_desc omap24xx_io_desc[] __initdata = {
|
static struct map_desc omap24xx_io_desc[] __initdata = {
|
||||||
{
|
{
|
||||||
.virtual = L3_24XX_VIRT,
|
.virtual = L3_24XX_VIRT,
|
||||||
|
@@ -420,8 +420,7 @@ static void __exit omap2_mbox_exit(void)
|
|||||||
platform_driver_unregister(&omap2_mbox_driver);
|
platform_driver_unregister(&omap2_mbox_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* must be ready before omap3isp is probed */
|
module_init(omap2_mbox_init);
|
||||||
subsys_initcall(omap2_mbox_init);
|
|
||||||
module_exit(omap2_mbox_exit);
|
module_exit(omap2_mbox_exit);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
|
@@ -122,7 +122,7 @@ static int omap3_enable_st_clock(unsigned int id, bool enable)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
|
static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
|
||||||
{
|
{
|
||||||
int id, count = 1;
|
int id, count = 1;
|
||||||
char *name = "omap-mcbsp";
|
char *name = "omap-mcbsp";
|
||||||
|
@@ -100,8 +100,8 @@ void omap_mux_write_array(struct omap_mux_partition *partition,
|
|||||||
|
|
||||||
static char *omap_mux_options;
|
static char *omap_mux_options;
|
||||||
|
|
||||||
static int _omap_mux_init_gpio(struct omap_mux_partition *partition,
|
static int __init _omap_mux_init_gpio(struct omap_mux_partition *partition,
|
||||||
int gpio, int val)
|
int gpio, int val)
|
||||||
{
|
{
|
||||||
struct omap_mux_entry *e;
|
struct omap_mux_entry *e;
|
||||||
struct omap_mux *gpio_mux = NULL;
|
struct omap_mux *gpio_mux = NULL;
|
||||||
@@ -145,7 +145,7 @@ static int _omap_mux_init_gpio(struct omap_mux_partition *partition,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int omap_mux_init_gpio(int gpio, int val)
|
int __init omap_mux_init_gpio(int gpio, int val)
|
||||||
{
|
{
|
||||||
struct omap_mux_partition *partition;
|
struct omap_mux_partition *partition;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -159,9 +159,9 @@ int omap_mux_init_gpio(int gpio, int val)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _omap_mux_get_by_name(struct omap_mux_partition *partition,
|
static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition,
|
||||||
const char *muxname,
|
const char *muxname,
|
||||||
struct omap_mux **found_mux)
|
struct omap_mux **found_mux)
|
||||||
{
|
{
|
||||||
struct omap_mux *mux = NULL;
|
struct omap_mux *mux = NULL;
|
||||||
struct omap_mux_entry *e;
|
struct omap_mux_entry *e;
|
||||||
@@ -218,7 +218,7 @@ static int _omap_mux_get_by_name(struct omap_mux_partition *partition,
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int __init
|
||||||
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)
|
||||||
@@ -240,7 +240,7 @@ omap_mux_get_by_name(const char *muxname,
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
int omap_mux_init_signal(const char *muxname, int val)
|
int __init omap_mux_init_signal(const char *muxname, int val)
|
||||||
{
|
{
|
||||||
struct omap_mux_partition *partition = NULL;
|
struct omap_mux_partition *partition = NULL;
|
||||||
struct omap_mux *mux = NULL;
|
struct omap_mux *mux = NULL;
|
||||||
|
@@ -33,7 +33,7 @@ int platform_cpu_kill(unsigned int cpu)
|
|||||||
* platform-specific code to shutdown a CPU
|
* platform-specific code to shutdown a CPU
|
||||||
* Called with IRQs disabled
|
* Called with IRQs disabled
|
||||||
*/
|
*/
|
||||||
void platform_cpu_die(unsigned int cpu)
|
void __ref platform_cpu_die(unsigned int cpu)
|
||||||
{
|
{
|
||||||
unsigned int this_cpu;
|
unsigned int this_cpu;
|
||||||
|
|
||||||
|
@@ -150,7 +150,8 @@ err_out:
|
|||||||
platform_device_put(omap_iommu_pdev[i]);
|
platform_device_put(omap_iommu_pdev[i]);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
module_init(omap_iommu_init);
|
/* must be ready before omap3isp is probed */
|
||||||
|
subsys_initcall(omap_iommu_init);
|
||||||
|
|
||||||
static void __exit omap_iommu_exit(void)
|
static void __exit omap_iommu_exit(void)
|
||||||
{
|
{
|
||||||
|
@@ -300,7 +300,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
|
|||||||
* @cpu : CPU ID
|
* @cpu : CPU ID
|
||||||
* @power_state: CPU low power state.
|
* @power_state: CPU low power state.
|
||||||
*/
|
*/
|
||||||
int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state)
|
int __cpuinit omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state)
|
||||||
{
|
{
|
||||||
unsigned int cpu_state = 0;
|
unsigned int cpu_state = 0;
|
||||||
|
|
||||||
|
@@ -43,7 +43,6 @@
|
|||||||
|
|
||||||
static void __iomem *wakeupgen_base;
|
static void __iomem *wakeupgen_base;
|
||||||
static void __iomem *sar_base;
|
static void __iomem *sar_base;
|
||||||
static DEFINE_PER_CPU(u32 [NR_REG_BANKS], irqmasks);
|
|
||||||
static DEFINE_SPINLOCK(wakeupgen_lock);
|
static DEFINE_SPINLOCK(wakeupgen_lock);
|
||||||
static unsigned int irq_target_cpu[NR_IRQS];
|
static unsigned int irq_target_cpu[NR_IRQS];
|
||||||
|
|
||||||
@@ -67,14 +66,6 @@ static inline void sar_writel(u32 val, u32 offset, u8 idx)
|
|||||||
__raw_writel(val, sar_base + offset + (idx * 4));
|
__raw_writel(val, sar_base + offset + (idx * 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _wakeupgen_set_all(unsigned int cpu, unsigned int reg)
|
|
||||||
{
|
|
||||||
u8 i;
|
|
||||||
|
|
||||||
for (i = 0; i < NR_REG_BANKS; i++)
|
|
||||||
wakeupgen_writel(reg, i, cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int _wakeupgen_get_irq_info(u32 irq, u32 *bit_posn, u8 *reg_index)
|
static inline int _wakeupgen_get_irq_info(u32 irq, u32 *bit_posn, u8 *reg_index)
|
||||||
{
|
{
|
||||||
unsigned int spi_irq;
|
unsigned int spi_irq;
|
||||||
@@ -130,22 +121,6 @@ static void _wakeupgen_set(unsigned int irq, unsigned int cpu)
|
|||||||
wakeupgen_writel(val, i, cpu);
|
wakeupgen_writel(val, i, cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _wakeupgen_save_masks(unsigned int cpu)
|
|
||||||
{
|
|
||||||
u8 i;
|
|
||||||
|
|
||||||
for (i = 0; i < NR_REG_BANKS; i++)
|
|
||||||
per_cpu(irqmasks, cpu)[i] = wakeupgen_readl(i, cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _wakeupgen_restore_masks(unsigned int cpu)
|
|
||||||
{
|
|
||||||
u8 i;
|
|
||||||
|
|
||||||
for (i = 0; i < NR_REG_BANKS; i++)
|
|
||||||
wakeupgen_writel(per_cpu(irqmasks, cpu)[i], i, cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Architecture specific Mask extension
|
* Architecture specific Mask extension
|
||||||
*/
|
*/
|
||||||
@@ -170,6 +145,33 @@ static void wakeupgen_unmask(struct irq_data *d)
|
|||||||
spin_unlock_irqrestore(&wakeupgen_lock, flags);
|
spin_unlock_irqrestore(&wakeupgen_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
static DEFINE_PER_CPU(u32 [NR_REG_BANKS], irqmasks);
|
||||||
|
|
||||||
|
static void _wakeupgen_save_masks(unsigned int cpu)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
for (i = 0; i < NR_REG_BANKS; i++)
|
||||||
|
per_cpu(irqmasks, cpu)[i] = wakeupgen_readl(i, cpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _wakeupgen_restore_masks(unsigned int cpu)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
for (i = 0; i < NR_REG_BANKS; i++)
|
||||||
|
wakeupgen_writel(per_cpu(irqmasks, cpu)[i], i, cpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _wakeupgen_set_all(unsigned int cpu, unsigned int reg)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
for (i = 0; i < NR_REG_BANKS; i++)
|
||||||
|
wakeupgen_writel(reg, i, cpu);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mask or unmask all interrupts on given CPU.
|
* Mask or unmask all interrupts on given CPU.
|
||||||
* 0 = Mask all interrupts on the 'cpu'
|
* 0 = Mask all interrupts on the 'cpu'
|
||||||
@@ -191,6 +193,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set)
|
|||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&wakeupgen_lock, flags);
|
spin_unlock_irqrestore(&wakeupgen_lock, flags);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_PM
|
#ifdef CONFIG_CPU_PM
|
||||||
/*
|
/*
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "omap4-sar-layout.h"
|
#include "omap4-sar-layout.h"
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#ifdef CONFIG_CACHE_L2X0
|
#ifdef CONFIG_CACHE_L2X0
|
||||||
static void __iomem *l2cache_base;
|
static void __iomem *l2cache_base;
|
||||||
@@ -55,6 +56,7 @@ void omap_bus_sync(void)
|
|||||||
isb();
|
isb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(omap_bus_sync);
|
||||||
|
|
||||||
/* Steal one page physical memory for barrier implementation */
|
/* Steal one page physical memory for barrier implementation */
|
||||||
int __init omap_barrier_reserve_memblock(void)
|
int __init omap_barrier_reserve_memblock(void)
|
||||||
|
@@ -28,7 +28,6 @@
|
|||||||
#include <plat/mcspi.h>
|
#include <plat/mcspi.h>
|
||||||
#include <plat/mcbsp.h>
|
#include <plat/mcbsp.h>
|
||||||
#include <plat/mmc.h>
|
#include <plat/mmc.h>
|
||||||
#include <plat/i2c.h>
|
|
||||||
#include <plat/dmtimer.h>
|
#include <plat/dmtimer.h>
|
||||||
#include <plat/common.h>
|
#include <plat/common.h>
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
static struct omap_device_pm_latency *pm_lats;
|
static struct omap_device_pm_latency *pm_lats;
|
||||||
|
|
||||||
static int _init_omap_device(char *name)
|
static int __init _init_omap_device(char *name)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh;
|
struct omap_hwmod *oh;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
@@ -49,7 +49,7 @@ static int _init_omap_device(char *name)
|
|||||||
/*
|
/*
|
||||||
* Build omap_devices for processors and bus.
|
* Build omap_devices for processors and bus.
|
||||||
*/
|
*/
|
||||||
static void omap2_init_processor_devices(void)
|
static void __init omap2_init_processor_devices(void)
|
||||||
{
|
{
|
||||||
_init_omap_device("mpu");
|
_init_omap_device("mpu");
|
||||||
if (omap3_has_iva())
|
if (omap3_has_iva())
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
#include "pm.h"
|
#include "pm.h"
|
||||||
#include "cm.h"
|
#include "cm.h"
|
||||||
#include "cm-regbits-34xx.h"
|
#include "cm-regbits-34xx.h"
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
|
|
||||||
#include <plat/prcm.h>
|
#include <plat/prcm.h>
|
||||||
|
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
|
|
||||||
#include "powerdomain.h"
|
#include "powerdomain.h"
|
||||||
#include <plat/prcm.h>
|
#include <plat/prcm.h>
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
|
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
|
|
||||||
|
@@ -69,7 +69,7 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
|
|||||||
sr_data->nvalue_count = count;
|
sr_data->nvalue_count = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sr_dev_init(struct omap_hwmod *oh, void *user)
|
static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
|
||||||
{
|
{
|
||||||
struct omap_sr_data *sr_data;
|
struct omap_sr_data *sr_data;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
|
@@ -270,7 +270,6 @@ static struct regulator_init_data omap4_vusb_idata = {
|
|||||||
.constraints = {
|
.constraints = {
|
||||||
.min_uV = 3300000,
|
.min_uV = 3300000,
|
||||||
.max_uV = 3300000,
|
.max_uV = 3300000,
|
||||||
.apply_uV = true,
|
|
||||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||||
| REGULATOR_MODE_STANDBY,
|
| REGULATOR_MODE_STANDBY,
|
||||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
|
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
|
|
||||||
|
@@ -61,8 +61,8 @@ void __init omap_vp_init(struct voltagedomain *voltdm)
|
|||||||
vddmin = voltdm->pmic->vp_vddmin;
|
vddmin = voltdm->pmic->vp_vddmin;
|
||||||
vddmax = voltdm->pmic->vp_vddmax;
|
vddmax = voltdm->pmic->vp_vddmax;
|
||||||
|
|
||||||
waittime = ((voltdm->pmic->step_size / voltdm->pmic->slew_rate) *
|
waittime = DIV_ROUND_UP(voltdm->pmic->step_size * sys_clk_rate,
|
||||||
sys_clk_rate) / 1000;
|
1000 * voltdm->pmic->slew_rate);
|
||||||
vstepmin = voltdm->pmic->vp_vstepmin;
|
vstepmin = voltdm->pmic->vp_vstepmin;
|
||||||
vstepmax = voltdm->pmic->vp_vstepmax;
|
vstepmax = voltdm->pmic->vp_vstepmax;
|
||||||
|
|
||||||
|
@@ -49,7 +49,6 @@ extern unsigned pxa3xx_get_clk_frequency_khz(int);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern struct syscore_ops pxa_irq_syscore_ops;
|
extern struct syscore_ops pxa_irq_syscore_ops;
|
||||||
extern struct syscore_ops pxa_gpio_syscore_ops;
|
|
||||||
extern struct syscore_ops pxa2xx_mfp_syscore_ops;
|
extern struct syscore_ops pxa2xx_mfp_syscore_ops;
|
||||||
extern struct syscore_ops pxa3xx_mfp_syscore_ops;
|
extern struct syscore_ops pxa3xx_mfp_syscore_ops;
|
||||||
|
|
||||||
|
@@ -226,6 +226,12 @@ static void __init pxa25x_mfp_init(void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
/* running before pxa_gpio_probe() */
|
||||||
|
#ifdef CONFIG_CPU_PXA26x
|
||||||
|
pxa_last_gpio = 89;
|
||||||
|
#else
|
||||||
|
pxa_last_gpio = 84;
|
||||||
|
#endif
|
||||||
for (i = 0; i <= pxa_last_gpio; i++)
|
for (i = 0; i <= pxa_last_gpio; i++)
|
||||||
gpio_desc[i].valid = 1;
|
gpio_desc[i].valid = 1;
|
||||||
|
|
||||||
@@ -295,6 +301,7 @@ static void __init pxa27x_mfp_init(void)
|
|||||||
{
|
{
|
||||||
int i, gpio;
|
int i, gpio;
|
||||||
|
|
||||||
|
pxa_last_gpio = 120; /* running before pxa_gpio_probe() */
|
||||||
for (i = 0; i <= pxa_last_gpio; i++) {
|
for (i = 0; i <= pxa_last_gpio; i++) {
|
||||||
/* skip GPIO2, 5, 6, 7, 8, they are not
|
/* skip GPIO2, 5, 6, 7, 8, they are not
|
||||||
* valid pins allow configuration
|
* valid pins allow configuration
|
||||||
|
@@ -208,7 +208,7 @@ static struct clk_lookup pxa25x_clkregs[] = {
|
|||||||
INIT_CLKREG(&clk_pxa25x_gpio11, NULL, "GPIO11_CLK"),
|
INIT_CLKREG(&clk_pxa25x_gpio11, NULL, "GPIO11_CLK"),
|
||||||
INIT_CLKREG(&clk_pxa25x_gpio12, NULL, "GPIO12_CLK"),
|
INIT_CLKREG(&clk_pxa25x_gpio12, NULL, "GPIO12_CLK"),
|
||||||
INIT_CLKREG(&clk_pxa25x_mem, "pxa2xx-pcmcia", NULL),
|
INIT_CLKREG(&clk_pxa25x_mem, "pxa2xx-pcmcia", NULL),
|
||||||
INIT_CLKREG(&clk_dummy, "sa1100-rtc", NULL),
|
INIT_CLKREG(&clk_dummy, "pxa-gpio", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_lookup pxa25x_hwuart_clkreg =
|
static struct clk_lookup pxa25x_hwuart_clkreg =
|
||||||
@@ -368,7 +368,6 @@ static int __init pxa25x_init(void)
|
|||||||
|
|
||||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||||
register_syscore_ops(&pxa2xx_mfp_syscore_ops);
|
register_syscore_ops(&pxa2xx_mfp_syscore_ops);
|
||||||
register_syscore_ops(&pxa_gpio_syscore_ops);
|
|
||||||
register_syscore_ops(&pxa2xx_clock_syscore_ops);
|
register_syscore_ops(&pxa2xx_clock_syscore_ops);
|
||||||
|
|
||||||
ret = platform_add_devices(pxa25x_devices,
|
ret = platform_add_devices(pxa25x_devices,
|
||||||
|
@@ -229,7 +229,7 @@ static struct clk_lookup pxa27x_clkregs[] = {
|
|||||||
INIT_CLKREG(&clk_pxa27x_im, NULL, "IMCLK"),
|
INIT_CLKREG(&clk_pxa27x_im, NULL, "IMCLK"),
|
||||||
INIT_CLKREG(&clk_pxa27x_memc, NULL, "MEMCLK"),
|
INIT_CLKREG(&clk_pxa27x_memc, NULL, "MEMCLK"),
|
||||||
INIT_CLKREG(&clk_pxa27x_mem, "pxa2xx-pcmcia", NULL),
|
INIT_CLKREG(&clk_pxa27x_mem, "pxa2xx-pcmcia", NULL),
|
||||||
INIT_CLKREG(&clk_dummy, "sa1100-rtc", NULL),
|
INIT_CLKREG(&clk_dummy, "pxa-gpio", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
@@ -456,7 +456,6 @@ static int __init pxa27x_init(void)
|
|||||||
|
|
||||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||||
register_syscore_ops(&pxa2xx_mfp_syscore_ops);
|
register_syscore_ops(&pxa2xx_mfp_syscore_ops);
|
||||||
register_syscore_ops(&pxa_gpio_syscore_ops);
|
|
||||||
register_syscore_ops(&pxa2xx_clock_syscore_ops);
|
register_syscore_ops(&pxa2xx_clock_syscore_ops);
|
||||||
|
|
||||||
ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
|
@@ -463,7 +463,6 @@ static int __init pxa3xx_init(void)
|
|||||||
|
|
||||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||||
register_syscore_ops(&pxa3xx_mfp_syscore_ops);
|
register_syscore_ops(&pxa3xx_mfp_syscore_ops);
|
||||||
register_syscore_ops(&pxa_gpio_syscore_ops);
|
|
||||||
register_syscore_ops(&pxa3xx_clock_syscore_ops);
|
register_syscore_ops(&pxa3xx_clock_syscore_ops);
|
||||||
|
|
||||||
ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
|
@@ -284,7 +284,6 @@ static int __init pxa95x_init(void)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
register_syscore_ops(&pxa_irq_syscore_ops);
|
register_syscore_ops(&pxa_irq_syscore_ops);
|
||||||
register_syscore_ops(&pxa_gpio_syscore_ops);
|
|
||||||
register_syscore_ops(&pxa3xx_clock_syscore_ops);
|
register_syscore_ops(&pxa3xx_clock_syscore_ops);
|
||||||
|
|
||||||
ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
|
@@ -12,6 +12,6 @@
|
|||||||
#ifndef __ARCH_ARM_MACH_S3C2440_COMMON_H
|
#ifndef __ARCH_ARM_MACH_S3C2440_COMMON_H
|
||||||
#define __ARCH_ARM_MACH_S3C2440_COMMON_H
|
#define __ARCH_ARM_MACH_S3C2440_COMMON_H
|
||||||
|
|
||||||
void s3c2440_restart(char mode, const char *cmd);
|
void s3c244x_restart(char mode, const char *cmd);
|
||||||
|
|
||||||
#endif /* __ARCH_ARM_MACH_S3C2440_COMMON_H */
|
#endif /* __ARCH_ARM_MACH_S3C2440_COMMON_H */
|
||||||
|
@@ -487,5 +487,5 @@ MACHINE_START(ANUBIS, "Simtec-Anubis")
|
|||||||
.init_machine = anubis_init,
|
.init_machine = anubis_init,
|
||||||
.init_irq = s3c24xx_init_irq,
|
.init_irq = s3c24xx_init_irq,
|
||||||
.timer = &s3c24xx_timer,
|
.timer = &s3c24xx_timer,
|
||||||
.restart = s3c2440_restart,
|
.restart = s3c244x_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
@@ -222,5 +222,5 @@ MACHINE_START(AT2440EVB, "AT2440EVB")
|
|||||||
.init_machine = at2440evb_init,
|
.init_machine = at2440evb_init,
|
||||||
.init_irq = s3c24xx_init_irq,
|
.init_irq = s3c24xx_init_irq,
|
||||||
.timer = &s3c24xx_timer,
|
.timer = &s3c24xx_timer,
|
||||||
.restart = s3c2440_restart,
|
.restart = s3c244x_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
@@ -601,5 +601,5 @@ MACHINE_START(NEO1973_GTA02, "GTA02")
|
|||||||
.init_irq = s3c24xx_init_irq,
|
.init_irq = s3c24xx_init_irq,
|
||||||
.init_machine = gta02_machine_init,
|
.init_machine = gta02_machine_init,
|
||||||
.timer = &s3c24xx_timer,
|
.timer = &s3c24xx_timer,
|
||||||
.restart = s3c2440_restart,
|
.restart = s3c244x_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
@@ -701,5 +701,5 @@ MACHINE_START(MINI2440, "MINI2440")
|
|||||||
.init_machine = mini2440_init,
|
.init_machine = mini2440_init,
|
||||||
.init_irq = s3c24xx_init_irq,
|
.init_irq = s3c24xx_init_irq,
|
||||||
.timer = &s3c24xx_timer,
|
.timer = &s3c24xx_timer,
|
||||||
.restart = s3c2440_restart,
|
.restart = s3c244x_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
@@ -158,5 +158,5 @@ MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440")
|
|||||||
.init_machine = nexcoder_init,
|
.init_machine = nexcoder_init,
|
||||||
.init_irq = s3c24xx_init_irq,
|
.init_irq = s3c24xx_init_irq,
|
||||||
.timer = &s3c24xx_timer,
|
.timer = &s3c24xx_timer,
|
||||||
.restart = s3c2440_restart,
|
.restart = s3c244x_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
@@ -436,5 +436,5 @@ MACHINE_START(OSIRIS, "Simtec-OSIRIS")
|
|||||||
.init_irq = s3c24xx_init_irq,
|
.init_irq = s3c24xx_init_irq,
|
||||||
.init_machine = osiris_init,
|
.init_machine = osiris_init,
|
||||||
.timer = &s3c24xx_timer,
|
.timer = &s3c24xx_timer,
|
||||||
.restart = s3c2440_restart,
|
.restart = s3c244x_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user