aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-09-07 02:19:51 -0400
committerIngo Molnar <mingo@elte.hu>2009-09-07 02:19:51 -0400
commita1922ed661ab2c1637d0b10cde933bd9cd33d965 (patch)
tree0f1777542b385ebefd30b3586d830fd8ed6fda5b /arch/arm
parent75e33751ca8bbb72dd6f1a74d2810ddc8cbe4bdf (diff)
parentd28daf923ac5e4a0d7cecebae56f3e339189366b (diff)
Merge branch 'tracing/core' into tracing/hw-breakpoints
Conflicts: arch/Kconfig kernel/trace/trace.h Merge reason: resolve the conflicts, plus adopt to the new ring-buffer APIs. Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Kconfig6
-rw-r--r--arch/arm/Kconfig.debug8
-rw-r--r--arch/arm/boot/compressed/head.S9
-rw-r--r--arch/arm/boot/compressed/misc.c1
-rw-r--r--arch/arm/common/clkdev.c1
-rw-r--r--arch/arm/common/gic.c2
-rw-r--r--arch/arm/common/vic.c8
-rw-r--r--arch/arm/configs/kb9202_defconfig1158
-rw-r--r--arch/arm/configs/kirkwood_defconfig2
-rw-r--r--arch/arm/configs/mini2440_defconfig2097
-rw-r--r--arch/arm/configs/mx27_defconfig270
-rw-r--r--arch/arm/configs/mx3_defconfig151
-rw-r--r--arch/arm/configs/omap3_evm_defconfig2
-rw-r--r--arch/arm/configs/rx51_defconfig7
-rw-r--r--arch/arm/configs/s3c2410_defconfig2
-rw-r--r--arch/arm/configs/s3c6400_defconfig1
-rw-r--r--arch/arm/configs/tct_hammer_defconfig1
-rw-r--r--arch/arm/configs/u300_defconfig96
-rw-r--r--arch/arm/include/asm/atomic.h2
-rw-r--r--arch/arm/include/asm/page.h2
-rw-r--r--arch/arm/include/asm/pci.h13
-rw-r--r--arch/arm/include/asm/pgtable.h53
-rw-r--r--arch/arm/include/asm/setup.h3
-rw-r--r--arch/arm/include/asm/thread_info.h2
-rw-r--r--arch/arm/include/asm/tlb.h4
-rw-r--r--arch/arm/include/asm/unistd.h2
-rw-r--r--arch/arm/kernel/calls.S2
-rw-r--r--arch/arm/kernel/entry-common.S2
-rw-r--r--arch/arm/kernel/irq.c28
-rw-r--r--arch/arm/kernel/process.c77
-rw-r--r--arch/arm/kernel/signal.c4
-rw-r--r--arch/arm/kernel/unwind.c19
-rw-r--r--arch/arm/kernel/vmlinux.lds.S23
-rw-r--r--arch/arm/mach-at91/board-sam9g20ek.c54
-rw-r--r--arch/arm/mach-at91/board-sam9rlek.c6
-rw-r--r--arch/arm/mach-at91/include/mach/at_hdmac.h102
-rw-r--r--arch/arm/mach-davinci/board-dm355-evm.c1
-rw-r--r--arch/arm/mach-davinci/board-dm355-leopard.c1
-rw-r--r--arch/arm/mach-davinci/board-dm644x-evm.c1
-rw-r--r--arch/arm/mach-davinci/board-dm646x-evm.c1
-rw-r--r--arch/arm/mach-davinci/board-sffsdr.c1
-rw-r--r--arch/arm/mach-davinci/include/mach/nand.h8
-rw-r--r--arch/arm/mach-ep93xx/dma-m2p.c1
-rw-r--r--arch/arm/mach-ep93xx/include/mach/ep93xx_keypad.h42
-rw-r--r--arch/arm/mach-ep93xx/include/mach/ts72xx.h3
-rw-r--r--arch/arm/mach-ep93xx/ts72xx.c18
-rw-r--r--arch/arm/mach-ixp4xx/include/mach/io.h2
-rw-r--r--arch/arm/mach-kirkwood/mpp.h2
-rw-r--r--arch/arm/mach-kirkwood/ts219-setup.c9
-rw-r--r--arch/arm/mach-ks8695/include/mach/hardware.h5
-rw-r--r--arch/arm/mach-ks8695/include/mach/timex.h5
-rw-r--r--arch/arm/mach-ks8695/pci.c3
-rw-r--r--arch/arm/mach-mx3/Kconfig8
-rw-r--r--arch/arm/mach-mx3/Makefile1
-rw-r--r--arch/arm/mach-mx3/armadillo5x0.c63
-rw-r--r--arch/arm/mach-mx3/devices.c1
-rw-r--r--arch/arm/mach-mx3/mx31moboard-devboard.c2
-rw-r--r--arch/arm/mach-mx3/mx31moboard-marxbot.c2
-rw-r--r--arch/arm/mach-mx3/mx31moboard.c2
-rw-r--r--arch/arm/mach-mx3/pcm037.c183
-rw-r--r--arch/arm/mach-mx3/pcm037.h11
-rw-r--r--arch/arm/mach-mx3/pcm037_eet.c195
-rw-r--r--arch/arm/mach-omap1/board-nokia770.c3
-rw-r--r--arch/arm/mach-omap1/mailbox.c2
-rw-r--r--arch/arm/mach-omap1/mcbsp.c1
-rw-r--r--arch/arm/mach-omap2/board-2430sdp.c2
-rw-r--r--arch/arm/mach-omap2/board-3430sdp.c2
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c2
-rw-r--r--arch/arm/mach-omap2/board-apollon.c2
-rw-r--r--arch/arm/mach-omap2/board-generic.c2
-rw-r--r--arch/arm/mach-omap2/board-h4.c2
-rw-r--r--arch/arm/mach-omap2/board-ldp.c2
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c7
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c7
-rw-r--r--arch/arm/mach-omap2/board-omap3pandora.c8
-rw-r--r--arch/arm/mach-omap2/board-overo.c11
-rw-r--r--arch/arm/mach-omap2/board-rx51-peripherals.c6
-rw-r--r--arch/arm/mach-omap2/board-rx51.c6
-rw-r--r--arch/arm/mach-omap2/board-zoom2.c2
-rw-r--r--arch/arm/mach-omap2/clock.c156
-rw-r--r--arch/arm/mach-omap2/clock.h6
-rw-r--r--arch/arm/mach-omap2/clock24xx.c37
-rw-r--r--arch/arm/mach-omap2/clock24xx.h4
-rw-r--r--arch/arm/mach-omap2/clock34xx.c193
-rw-r--r--arch/arm/mach-omap2/clock34xx.h85
-rw-r--r--arch/arm/mach-omap2/cm.h6
-rw-r--r--arch/arm/mach-omap2/gpmc-onenand.c21
-rw-r--r--arch/arm/mach-omap2/id.c22
-rw-r--r--arch/arm/mach-omap2/io.c41
-rw-r--r--arch/arm/mach-omap2/mailbox.c6
-rw-r--r--arch/arm/mach-omap2/mcbsp.c1
-rw-r--r--arch/arm/mach-omap2/mmc-twl4030.c19
-rw-r--r--arch/arm/mach-omap2/mux.c6
-rw-r--r--arch/arm/mach-omap2/pm.h3
-rw-r--r--arch/arm/mach-omap2/pm24xx.c2
-rw-r--r--arch/arm/mach-omap2/pm34xx.c51
-rw-r--r--arch/arm/mach-omap2/powerdomain.c2
-rw-r--r--arch/arm/mach-omap2/prcm.c43
-rw-r--r--arch/arm/mach-omap2/sdrc.c68
-rw-r--r--arch/arm/mach-omap2/serial.c197
-rw-r--r--arch/arm/mach-omap2/sram34xx.S224
-rw-r--r--arch/arm/mach-omap2/usb-musb.c21
-rw-r--r--arch/arm/mach-orion5x/addr-map.c2
-rw-r--r--arch/arm/mach-orion5x/common.c10
-rw-r--r--arch/arm/mach-orion5x/common.h1
-rw-r--r--arch/arm/mach-pxa/Kconfig10
-rw-r--r--arch/arm/mach-pxa/Makefile1
-rw-r--r--arch/arm/mach-pxa/corgi.c6
-rw-r--r--arch/arm/mach-pxa/em-x270.c67
-rw-r--r--arch/arm/mach-pxa/hx4700.c41
-rw-r--r--arch/arm/mach-pxa/include/mach/mfp-pxa300.h6
-rw-r--r--arch/arm/mach-pxa/include/mach/palmz72.h5
-rw-r--r--arch/arm/mach-pxa/include/mach/treo680.h49
-rw-r--r--arch/arm/mach-pxa/mioa701.c42
-rw-r--r--arch/arm/mach-pxa/palmld.c4
-rw-r--r--arch/arm/mach-pxa/palmt5.c4
-rw-r--r--arch/arm/mach-pxa/palmtx.c4
-rw-r--r--arch/arm/mach-pxa/palmz72.c65
-rw-r--r--arch/arm/mach-pxa/poodle.c6
-rw-r--r--arch/arm/mach-pxa/pxa3xx.c2
-rw-r--r--arch/arm/mach-pxa/treo680.c612
-rw-r--r--arch/arm/mach-pxa/zylonite_pxa300.c2
-rw-r--r--arch/arm/mach-pxa/zylonite_pxa320.c2
-rw-r--r--arch/arm/mach-realview/core.c3
-rw-r--r--arch/arm/mach-realview/realview_pbx.c1
-rw-r--r--arch/arm/mach-s3c2410/include/mach/gpio-core.h2
-rw-r--r--arch/arm/mach-s3c2410/usb-simtec.c1
-rw-r--r--arch/arm/mach-s3c2440/Kconfig10
-rw-r--r--arch/arm/mach-s3c2440/Makefile1
-rw-r--r--arch/arm/mach-s3c2440/mach-mini2440.c702
-rw-r--r--arch/arm/mach-s3c2442/Kconfig12
-rw-r--r--arch/arm/mach-s3c2442/Makefile2
-rw-r--r--arch/arm/mach-s3c2442/include/mach/gta02.h84
-rw-r--r--arch/arm/mach-s3c2442/mach-gta02.c645
-rw-r--r--arch/arm/mach-u300/clock.c121
-rw-r--r--arch/arm/mach-u300/core.c6
-rw-r--r--arch/arm/mach-versatile/core.c3
-rw-r--r--arch/arm/mm/alignment.c139
-rw-r--r--arch/arm/mm/fault.c2
-rw-r--r--arch/arm/mm/init.c118
-rw-r--r--arch/arm/mm/mmu.c16
-rw-r--r--arch/arm/mm/proc-syms.c1
-rw-r--r--arch/arm/plat-mxc/include/mach/iomux-mx3.h2
-rw-r--r--arch/arm/plat-omap/cpu-omap.c8
-rw-r--r--arch/arm/plat-omap/dma.c17
-rw-r--r--arch/arm/plat-omap/gpio.c128
-rw-r--r--arch/arm/plat-omap/include/mach/clock.h2
-rw-r--r--arch/arm/plat-omap/include/mach/cpu.h27
-rw-r--r--arch/arm/plat-omap/include/mach/dma.h15
-rw-r--r--arch/arm/plat-omap/include/mach/io.h5
-rw-r--r--arch/arm/plat-omap/include/mach/mux.h4
-rw-r--r--arch/arm/plat-omap/include/mach/prcm.h1
-rw-r--r--arch/arm/plat-omap/include/mach/sdrc.h11
-rw-r--r--arch/arm/plat-omap/include/mach/serial.h1
-rw-r--r--arch/arm/plat-omap/include/mach/sram.h21
-rw-r--r--arch/arm/plat-omap/iommu.c2
-rw-r--r--arch/arm/plat-omap/sram.c39
-rw-r--r--arch/arm/plat-orion/include/plat/gpio.h2
-rw-r--r--arch/arm/plat-pxa/gpio.c9
-rw-r--r--arch/arm/plat-s3c/Makefile1
-rw-r--r--arch/arm/plat-s3c/dev-audio.c68
-rw-r--r--arch/arm/plat-s3c/gpio-config.c2
-rw-r--r--arch/arm/plat-s3c/include/plat/devs.h6
-rw-r--r--arch/arm/plat-s3c/include/plat/nand.h31
-rw-r--r--arch/arm/plat-s3c24xx/Makefile2
-rw-r--r--arch/arm/plat-s3c24xx/clock-dclk.c2
-rw-r--r--arch/arm/plat-s3c24xx/pwm.c4
-rw-r--r--arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c3
-rw-r--r--arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c3
-rw-r--r--arch/arm/plat-s3c64xx/Makefile1
-rw-r--r--arch/arm/plat-s3c64xx/clock.c2
-rw-r--r--arch/arm/plat-s3c64xx/cpufreq.c262
-rw-r--r--arch/arm/plat-s3c64xx/gpiolib.c6
-rw-r--r--arch/arm/plat-s3c64xx/include/plat/regs-clock.h10
-rw-r--r--arch/arm/plat-s3c64xx/pm.c2
-rw-r--r--arch/arm/plat-s3c64xx/s3c6400-clock.c4
-rw-r--r--arch/arm/plat-stmp3xxx/pinmux.c1
-rw-r--r--arch/arm/tools/mach-types39
178 files changed, 8398 insertions, 1227 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 29475101a7b3..aef63c8e3d2d 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1241,7 +1241,7 @@ endmenu
1241 1241
1242menu "CPU Power Management" 1242menu "CPU Power Management"
1243 1243
1244if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA) 1244if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA || ARCH_S3C64XX)
1245 1245
1246source "drivers/cpufreq/Kconfig" 1246source "drivers/cpufreq/Kconfig"
1247 1247
@@ -1272,6 +1272,10 @@ config CPU_FREQ_PXA
1272 default y 1272 default y
1273 select CPU_FREQ_DEFAULT_GOV_USERSPACE 1273 select CPU_FREQ_DEFAULT_GOV_USERSPACE
1274 1274
1275config CPU_FREQ_S3C64XX
1276 bool "CPUfreq support for Samsung S3C64XX CPUs"
1277 depends on CPU_FREQ && CPU_S3C6410
1278
1275endif 1279endif
1276 1280
1277source "drivers/cpuidle/Kconfig" 1281source "drivers/cpuidle/Kconfig"
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index a71fd941ade7..a89e4734b8f0 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -99,14 +99,6 @@ config DEBUG_CLPS711X_UART2
99 output to the second serial port on these devices. Saying N will 99 output to the second serial port on these devices. Saying N will
100 cause the debug messages to appear on the first serial port. 100 cause the debug messages to appear on the first serial port.
101 101
102config DEBUG_S3C_PORT
103 depends on DEBUG_LL && PLAT_S3C
104 bool "Kernel low-level debugging messages via S3C UART"
105 help
106 Say Y here if you want debug print routines to go to one of the
107 S3C internal UARTs. The chosen UART must have been configured
108 before it is used.
109
110config DEBUG_S3C_UART 102config DEBUG_S3C_UART
111 depends on PLAT_S3C 103 depends on PLAT_S3C
112 int "S3C UART to use for low-level debug" 104 int "S3C UART to use for low-level debug"
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 01d49be3b2ca..4515728c5345 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -674,6 +674,15 @@ proc_types:
674 b __armv4_mmu_cache_off 674 b __armv4_mmu_cache_off
675 b __armv5tej_mmu_cache_flush 675 b __armv5tej_mmu_cache_flush
676 676
677#ifdef CONFIG_CPU_FEROCEON_OLD_ID
678 /* this conflicts with the standard ARMv5TE entry */
679 .long 0x41009260 @ Old Feroceon
680 .long 0xff00fff0
681 b __armv4_mmu_cache_on
682 b __armv4_mmu_cache_off
683 b __armv5tej_mmu_cache_flush
684#endif
685
677 .word 0x66015261 @ FA526 686 .word 0x66015261 @ FA526
678 .word 0xff01fff1 687 .word 0xff01fff1
679 b __fa526_cache_on 688 b __fa526_cache_on
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c
index 9e6e512f0117..17153b54613b 100644
--- a/arch/arm/boot/compressed/misc.c
+++ b/arch/arm/boot/compressed/misc.c
@@ -29,7 +29,6 @@ unsigned int __machine_arch_type;
29 29
30static void putstr(const char *ptr); 30static void putstr(const char *ptr);
31 31
32#include <linux/compiler.h>
33#include <mach/uncompress.h> 32#include <mach/uncompress.h>
34 33
35#ifdef CONFIG_DEBUG_ICEDCC 34#ifdef CONFIG_DEBUG_ICEDCC
diff --git a/arch/arm/common/clkdev.c b/arch/arm/common/clkdev.c
index f37afd9422f3..aae5bc01acc8 100644
--- a/arch/arm/common/clkdev.c
+++ b/arch/arm/common/clkdev.c
@@ -17,6 +17,7 @@
17#include <linux/err.h> 17#include <linux/err.h>
18#include <linux/string.h> 18#include <linux/string.h>
19#include <linux/mutex.h> 19#include <linux/mutex.h>
20#include <linux/clk.h>
20 21
21#include <asm/clkdev.h> 22#include <asm/clkdev.h>
22#include <mach/clkdev.h> 23#include <mach/clkdev.h>
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c
index 664c7b8b1ba8..337741f734ac 100644
--- a/arch/arm/common/gic.c
+++ b/arch/arm/common/gic.c
@@ -117,7 +117,7 @@ static int gic_set_cpu(unsigned int irq, const struct cpumask *mask_val)
117 u32 val; 117 u32 val;
118 118
119 spin_lock(&irq_controller_lock); 119 spin_lock(&irq_controller_lock);
120 irq_desc[irq].cpu = cpu; 120 irq_desc[irq].node = cpu;
121 val = readl(reg) & ~(0xff << shift); 121 val = readl(reg) & ~(0xff << shift);
122 val |= 1 << (cpu + shift); 122 val |= 1 << (cpu + shift);
123 writel(val, reg); 123 writel(val, reg);
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c
index 887c6eb3a18a..6ed89836e908 100644
--- a/arch/arm/common/vic.c
+++ b/arch/arm/common/vic.c
@@ -229,14 +229,18 @@ static int vic_set_wake(unsigned int irq, unsigned int on)
229{ 229{
230 struct vic_device *v = vic_from_irq(irq); 230 struct vic_device *v = vic_from_irq(irq);
231 unsigned int off = irq & 31; 231 unsigned int off = irq & 31;
232 u32 bit = 1 << off;
232 233
233 if (!v) 234 if (!v)
234 return -EINVAL; 235 return -EINVAL;
235 236
237 if (!(bit & v->resume_sources))
238 return -EINVAL;
239
236 if (on) 240 if (on)
237 v->resume_irqs |= 1 << off; 241 v->resume_irqs |= bit;
238 else 242 else
239 v->resume_irqs &= ~(1 << off); 243 v->resume_irqs &= ~bit;
240 244
241 return 0; 245 return 0;
242} 246}
diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig
index 8e74c66f239d..605a8462f172 100644
--- a/arch/arm/configs/kb9202_defconfig
+++ b/arch/arm/configs/kb9202_defconfig
@@ -1,109 +1,246 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.13-rc2 3# Linux kernel version: 2.6.30-rc8
4# Sun Aug 14 19:26:59 2005 4# Wed Jun 3 13:52:33 2009
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y
7CONFIG_MMU=y 11CONFIG_MMU=y
8CONFIG_UID16=y 12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_HAVE_LATENCYTOP_SUPPORT=y
16CONFIG_LOCKDEP_SUPPORT=y
17CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 20CONFIG_RWSEM_GENERIC_SPINLOCK=y
21# CONFIG_ARCH_HAS_ILOG2_U32 is not set
22# CONFIG_ARCH_HAS_ILOG2_U64 is not set
23CONFIG_GENERIC_HWEIGHT=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 24CONFIG_GENERIC_CALIBRATE_DELAY=y
25CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
26CONFIG_VECTORS_BASE=0xffff0000
27CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
11 28
12# 29#
13# Code maturity level options 30# General setup
14# 31#
15# CONFIG_EXPERIMENTAL is not set 32CONFIG_EXPERIMENTAL=y
16CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN_ON_SMP=y 33CONFIG_BROKEN_ON_SMP=y
34CONFIG_LOCK_KERNEL=y
18CONFIG_INIT_ENV_ARG_LIMIT=32 35CONFIG_INIT_ENV_ARG_LIMIT=32
19
20#
21# General setup
22#
23CONFIG_LOCALVERSION="" 36CONFIG_LOCALVERSION=""
37CONFIG_LOCALVERSION_AUTO=y
24# CONFIG_SWAP is not set 38# CONFIG_SWAP is not set
25# CONFIG_SYSVIPC is not set 39CONFIG_SYSVIPC=y
26# CONFIG_BSD_PROCESS_ACCT is not set 40CONFIG_SYSVIPC_SYSCTL=y
41CONFIG_POSIX_MQUEUE=y
42CONFIG_POSIX_MQUEUE_SYSCTL=y
43CONFIG_BSD_PROCESS_ACCT=y
44# CONFIG_BSD_PROCESS_ACCT_V3 is not set
45# CONFIG_TASKSTATS is not set
46CONFIG_AUDIT=y
47
48#
49# RCU Subsystem
50#
51CONFIG_CLASSIC_RCU=y
52# CONFIG_TREE_RCU is not set
53# CONFIG_PREEMPT_RCU is not set
54# CONFIG_TREE_RCU_TRACE is not set
55# CONFIG_PREEMPT_RCU_TRACE is not set
56CONFIG_IKCONFIG=y
57CONFIG_IKCONFIG_PROC=y
58CONFIG_LOG_BUF_SHIFT=17
59# CONFIG_GROUP_SCHED is not set
60# CONFIG_CGROUPS is not set
61# CONFIG_SYSFS_DEPRECATED_V2 is not set
62# CONFIG_RELAY is not set
63CONFIG_NAMESPACES=y
64# CONFIG_UTS_NS is not set
65# CONFIG_IPC_NS is not set
66# CONFIG_USER_NS is not set
67# CONFIG_PID_NS is not set
68# CONFIG_NET_NS is not set
69CONFIG_BLK_DEV_INITRD=y
70CONFIG_INITRAMFS_SOURCE=""
71CONFIG_RD_GZIP=y
72CONFIG_RD_BZIP2=y
73CONFIG_RD_LZMA=y
74CONFIG_CC_OPTIMIZE_FOR_SIZE=y
27CONFIG_SYSCTL=y 75CONFIG_SYSCTL=y
28# CONFIG_AUDIT is not set 76CONFIG_ANON_INODES=y
29CONFIG_HOTPLUG=y
30# CONFIG_KOBJECT_UEVENT is not set
31# CONFIG_IKCONFIG is not set
32# CONFIG_EMBEDDED is not set 77# CONFIG_EMBEDDED is not set
78CONFIG_UID16=y
79CONFIG_SYSCTL_SYSCALL=y
33CONFIG_KALLSYMS=y 80CONFIG_KALLSYMS=y
34# CONFIG_KALLSYMS_ALL is not set 81# CONFIG_KALLSYMS_ALL is not set
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 82CONFIG_KALLSYMS_EXTRA_PASS=y
83# CONFIG_STRIP_ASM_SYMS is not set
84CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 85CONFIG_PRINTK=y
37CONFIG_BUG=y 86CONFIG_BUG=y
87CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 88CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 89CONFIG_FUTEX=y
40CONFIG_EPOLL=y 90CONFIG_EPOLL=y
41CONFIG_CC_OPTIMIZE_FOR_SIZE=y 91CONFIG_SIGNALFD=y
92CONFIG_TIMERFD=y
93CONFIG_EVENTFD=y
42CONFIG_SHMEM=y 94CONFIG_SHMEM=y
43CONFIG_CC_ALIGN_FUNCTIONS=0 95CONFIG_AIO=y
44CONFIG_CC_ALIGN_LABELS=0 96CONFIG_VM_EVENT_COUNTERS=y
45CONFIG_CC_ALIGN_LOOPS=0 97CONFIG_SLUB_DEBUG=y
46CONFIG_CC_ALIGN_JUMPS=0 98CONFIG_COMPAT_BRK=y
47# CONFIG_TINY_SHMEM is not set 99# CONFIG_SLAB is not set
100CONFIG_SLUB=y
101# CONFIG_SLOB is not set
102# CONFIG_PROFILING is not set
103CONFIG_TRACEPOINTS=y
104CONFIG_MARKERS=y
105CONFIG_HAVE_OPROFILE=y
106# CONFIG_KPROBES is not set
107CONFIG_HAVE_KPROBES=y
108CONFIG_HAVE_KRETPROBES=y
109CONFIG_HAVE_CLK=y
110# CONFIG_SLOW_WORK is not set
111CONFIG_HAVE_GENERIC_DMA_COHERENT=y
112CONFIG_SLABINFO=y
113CONFIG_RT_MUTEXES=y
48CONFIG_BASE_SMALL=0 114CONFIG_BASE_SMALL=0
115CONFIG_MODULES=y
116# CONFIG_MODULE_FORCE_LOAD is not set
117CONFIG_MODULE_UNLOAD=y
118# CONFIG_MODULE_FORCE_UNLOAD is not set
119CONFIG_MODVERSIONS=y
120CONFIG_MODULE_SRCVERSION_ALL=y
121CONFIG_BLOCK=y
122# CONFIG_LBD is not set
123# CONFIG_BLK_DEV_BSG is not set
124# CONFIG_BLK_DEV_INTEGRITY is not set
49 125
50# 126#
51# Loadable module support 127# IO Schedulers
52# 128#
53CONFIG_MODULES=y 129CONFIG_IOSCHED_NOOP=y
54CONFIG_MODULE_UNLOAD=y 130# CONFIG_IOSCHED_AS is not set
55CONFIG_OBSOLETE_MODPARM=y 131# CONFIG_IOSCHED_DEADLINE is not set
56# CONFIG_MODULE_SRCVERSION_ALL is not set 132CONFIG_IOSCHED_CFQ=y
57CONFIG_KMOD=y 133# CONFIG_DEFAULT_AS is not set
134# CONFIG_DEFAULT_DEADLINE is not set
135CONFIG_DEFAULT_CFQ=y
136# CONFIG_DEFAULT_NOOP is not set
137CONFIG_DEFAULT_IOSCHED="cfq"
138# CONFIG_FREEZER is not set
58 139
59# 140#
60# System Type 141# System Type
61# 142#
62# CONFIG_ARCH_CLPS7500 is not set 143# CONFIG_ARCH_AAEC2000 is not set
144# CONFIG_ARCH_INTEGRATOR is not set
145# CONFIG_ARCH_REALVIEW is not set
146# CONFIG_ARCH_VERSATILE is not set
147CONFIG_ARCH_AT91=y
63# CONFIG_ARCH_CLPS711X is not set 148# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 149# CONFIG_ARCH_EBSA110 is not set
150# CONFIG_ARCH_EP93XX is not set
151# CONFIG_ARCH_GEMINI is not set
66# CONFIG_ARCH_FOOTBRIDGE is not set 152# CONFIG_ARCH_FOOTBRIDGE is not set
67# CONFIG_ARCH_INTEGRATOR is not set 153# CONFIG_ARCH_NETX is not set
68# CONFIG_ARCH_IOP3XX is not set 154# CONFIG_ARCH_H720X is not set
69# CONFIG_ARCH_IXP4XX is not set 155# CONFIG_ARCH_IMX is not set
156# CONFIG_ARCH_IOP13XX is not set
157# CONFIG_ARCH_IOP32X is not set
158# CONFIG_ARCH_IOP33X is not set
159# CONFIG_ARCH_IXP23XX is not set
70# CONFIG_ARCH_IXP2000 is not set 160# CONFIG_ARCH_IXP2000 is not set
161# CONFIG_ARCH_IXP4XX is not set
71# CONFIG_ARCH_L7200 is not set 162# CONFIG_ARCH_L7200 is not set
163# CONFIG_ARCH_KIRKWOOD is not set
164# CONFIG_ARCH_KS8695 is not set
165# CONFIG_ARCH_NS9XXX is not set
166# CONFIG_ARCH_LOKI is not set
167# CONFIG_ARCH_MV78XX0 is not set
168# CONFIG_ARCH_MXC is not set
169# CONFIG_ARCH_ORION5X is not set
170# CONFIG_ARCH_PNX4008 is not set
72# CONFIG_ARCH_PXA is not set 171# CONFIG_ARCH_PXA is not set
172# CONFIG_ARCH_MMP is not set
73# CONFIG_ARCH_RPC is not set 173# CONFIG_ARCH_RPC is not set
74# CONFIG_ARCH_SA1100 is not set 174# CONFIG_ARCH_SA1100 is not set
75# CONFIG_ARCH_S3C2410 is not set 175# CONFIG_ARCH_S3C2410 is not set
176# CONFIG_ARCH_S3C64XX is not set
76# CONFIG_ARCH_SHARK is not set 177# CONFIG_ARCH_SHARK is not set
77# CONFIG_ARCH_LH7A40X is not set 178# CONFIG_ARCH_LH7A40X is not set
179# CONFIG_ARCH_DAVINCI is not set
78# CONFIG_ARCH_OMAP is not set 180# CONFIG_ARCH_OMAP is not set
79# CONFIG_ARCH_VERSATILE is not set 181# CONFIG_ARCH_MSM is not set
80# CONFIG_ARCH_IMX is not set 182# CONFIG_ARCH_W90X900 is not set
81# CONFIG_ARCH_H720X is not set 183
82# CONFIG_ARCH_AAEC2000 is not set 184#
83CONFIG_ARCH_AT91=y 185# Atmel AT91 System-on-Chip
186#
84CONFIG_ARCH_AT91RM9200=y 187CONFIG_ARCH_AT91RM9200=y
188# CONFIG_ARCH_AT91SAM9260 is not set
189# CONFIG_ARCH_AT91SAM9261 is not set
190# CONFIG_ARCH_AT91SAM9263 is not set
191# CONFIG_ARCH_AT91SAM9RL is not set
192# CONFIG_ARCH_AT91SAM9G20 is not set
193# CONFIG_ARCH_AT91CAP9 is not set
194# CONFIG_ARCH_AT91X40 is not set
195CONFIG_AT91_PMC_UNIT=y
85 196
86# 197#
87# AT91RM9200 Implementations 198# AT91RM9200 Board Type
88# 199#
200# CONFIG_MACH_ONEARM is not set
89# CONFIG_ARCH_AT91RM9200DK is not set 201# CONFIG_ARCH_AT91RM9200DK is not set
90# CONFIG_MACH_AT91RM9200EK is not set 202# CONFIG_MACH_AT91RM9200EK is not set
91# CONFIG_MACH_CSB337 is not set 203# CONFIG_MACH_CSB337 is not set
92# CONFIG_MACH_CSB637 is not set 204# CONFIG_MACH_CSB637 is not set
93# CONFIG_MACH_CARMEVA is not set 205# CONFIG_MACH_CARMEVA is not set
206# CONFIG_MACH_ATEB9200 is not set
94CONFIG_MACH_KB9200=y 207CONFIG_MACH_KB9200=y
208# CONFIG_MACH_PICOTUX2XX is not set
209# CONFIG_MACH_KAFA is not set
210# CONFIG_MACH_ECBAT91 is not set
211# CONFIG_MACH_YL9200 is not set
212
213#
214# AT91 Board Options
215#
216
217#
218# AT91 Feature Selections
219#
220CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
221CONFIG_AT91_TIMER_HZ=128
222CONFIG_AT91_EARLY_DBGU=y
223# CONFIG_AT91_EARLY_USART0 is not set
224# CONFIG_AT91_EARLY_USART1 is not set
225# CONFIG_AT91_EARLY_USART2 is not set
226# CONFIG_AT91_EARLY_USART3 is not set
227# CONFIG_AT91_EARLY_USART4 is not set
228# CONFIG_AT91_EARLY_USART5 is not set
95 229
96# 230#
97# Processor Type 231# Processor Type
98# 232#
99CONFIG_CPU_32=y 233CONFIG_CPU_32=y
100CONFIG_CPU_ARM920T=y 234CONFIG_CPU_ARM920T=y
101CONFIG_CPU_32v4=y 235CONFIG_CPU_32v4T=y
102CONFIG_CPU_ABRT_EV4T=y 236CONFIG_CPU_ABRT_EV4T=y
237CONFIG_CPU_PABRT_NOIFAR=y
103CONFIG_CPU_CACHE_V4WT=y 238CONFIG_CPU_CACHE_V4WT=y
104CONFIG_CPU_CACHE_VIVT=y 239CONFIG_CPU_CACHE_VIVT=y
105CONFIG_CPU_COPY_V4WB=y 240CONFIG_CPU_COPY_V4WB=y
106CONFIG_CPU_TLB_V4WBI=y 241CONFIG_CPU_TLB_V4WBI=y
242CONFIG_CPU_CP15=y
243CONFIG_CPU_CP15_MMU=y
107 244
108# 245#
109# Processor Features 246# Processor Features
@@ -112,23 +249,48 @@ CONFIG_ARM_THUMB=y
112# CONFIG_CPU_ICACHE_DISABLE is not set 249# CONFIG_CPU_ICACHE_DISABLE is not set
113# CONFIG_CPU_DCACHE_DISABLE is not set 250# CONFIG_CPU_DCACHE_DISABLE is not set
114# CONFIG_CPU_DCACHE_WRITETHROUGH is not set 251# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
252# CONFIG_OUTER_CACHE is not set
115 253
116# 254#
117# Bus support 255# Bus support
118# 256#
119CONFIG_ISA_DMA_API=y 257# CONFIG_PCI_SYSCALL is not set
120 258# CONFIG_ARCH_SUPPORTS_MSI is not set
121#
122# PCCARD (PCMCIA/CardBus) support
123#
124# CONFIG_PCCARD is not set 259# CONFIG_PCCARD is not set
125 260
126# 261#
127# Kernel Features 262# Kernel Features
128# 263#
129# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set 264CONFIG_TICK_ONESHOT=y
265CONFIG_NO_HZ=y
266CONFIG_HIGH_RES_TIMERS=y
267CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
268CONFIG_VMSPLIT_3G=y
269# CONFIG_VMSPLIT_2G is not set
270# CONFIG_VMSPLIT_1G is not set
271CONFIG_PAGE_OFFSET=0xC0000000
272CONFIG_PREEMPT=y
273CONFIG_HZ=128
274CONFIG_AEABI=y
275CONFIG_OABI_COMPAT=y
276# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
277# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
278# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
279# CONFIG_HIGHMEM is not set
280CONFIG_SELECT_MEMORY_MODEL=y
281CONFIG_FLATMEM_MANUAL=y
282# CONFIG_DISCONTIGMEM_MANUAL is not set
283# CONFIG_SPARSEMEM_MANUAL is not set
130CONFIG_FLATMEM=y 284CONFIG_FLATMEM=y
131CONFIG_FLAT_NODE_MEM_MAP=y 285CONFIG_FLAT_NODE_MEM_MAP=y
286CONFIG_PAGEFLAGS_EXTENDED=y
287CONFIG_SPLIT_PTLOCK_CPUS=4096
288# CONFIG_PHYS_ADDR_T_64BIT is not set
289CONFIG_ZONE_DMA_FLAG=0
290CONFIG_VIRT_TO_BUS=y
291CONFIG_UNEVICTABLE_LRU=y
292CONFIG_HAVE_MLOCK=y
293CONFIG_HAVE_MLOCKED_PAGE_BIT=y
132# CONFIG_LEDS is not set 294# CONFIG_LEDS is not set
133CONFIG_ALIGNMENT_TRAP=y 295CONFIG_ALIGNMENT_TRAP=y
134 296
@@ -137,8 +299,16 @@ CONFIG_ALIGNMENT_TRAP=y
137# 299#
138CONFIG_ZBOOT_ROM_TEXT=0x10000000 300CONFIG_ZBOOT_ROM_TEXT=0x10000000
139CONFIG_ZBOOT_ROM_BSS=0x20040000 301CONFIG_ZBOOT_ROM_BSS=0x20040000
140CONFIG_ZBOOT_ROM=y 302# CONFIG_ZBOOT_ROM is not set
141CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933" 303CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M"
304# CONFIG_XIP_KERNEL is not set
305CONFIG_KEXEC=y
306CONFIG_ATAGS_PROC=y
307
308#
309# CPU Power Management
310#
311# CONFIG_CPU_IDLE is not set
142 312
143# 313#
144# Floating point emulation 314# Floating point emulation
@@ -149,74 +319,251 @@ CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
149# 319#
150CONFIG_FPE_NWFPE=y 320CONFIG_FPE_NWFPE=y
151# CONFIG_FPE_NWFPE_XP is not set 321# CONFIG_FPE_NWFPE_XP is not set
322# CONFIG_FPE_FASTFPE is not set
152 323
153# 324#
154# Userspace binary formats 325# Userspace binary formats
155# 326#
156CONFIG_BINFMT_ELF=y 327CONFIG_BINFMT_ELF=y
157CONFIG_BINFMT_AOUT=y 328# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
329CONFIG_HAVE_AOUT=y
330# CONFIG_BINFMT_AOUT is not set
158CONFIG_BINFMT_MISC=y 331CONFIG_BINFMT_MISC=y
159# CONFIG_ARTHUR is not set
160 332
161# 333#
162# Power management options 334# Power management options
163# 335#
164# CONFIG_PM is not set 336# CONFIG_PM is not set
337CONFIG_ARCH_SUSPEND_POSSIBLE=y
338CONFIG_NET=y
165 339
166# 340#
167# Device Drivers 341# Networking options
168# 342#
343CONFIG_PACKET=y
344# CONFIG_PACKET_MMAP is not set
345CONFIG_UNIX=y
346# CONFIG_NET_KEY is not set
347CONFIG_INET=y
348# CONFIG_IP_MULTICAST is not set
349# CONFIG_IP_ADVANCED_ROUTER is not set
350CONFIG_IP_FIB_HASH=y
351CONFIG_IP_PNP=y
352CONFIG_IP_PNP_DHCP=y
353CONFIG_IP_PNP_BOOTP=y
354# CONFIG_IP_PNP_RARP is not set
355# CONFIG_NET_IPIP is not set
356# CONFIG_NET_IPGRE is not set
357# CONFIG_ARPD is not set
358# CONFIG_SYN_COOKIES is not set
359# CONFIG_INET_AH is not set
360# CONFIG_INET_ESP is not set
361# CONFIG_INET_IPCOMP is not set
362# CONFIG_INET_XFRM_TUNNEL is not set
363# CONFIG_INET_TUNNEL is not set
364# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
365# CONFIG_INET_XFRM_MODE_TUNNEL is not set
366# CONFIG_INET_XFRM_MODE_BEET is not set
367# CONFIG_INET_LRO is not set
368# CONFIG_INET_DIAG is not set
369# CONFIG_TCP_CONG_ADVANCED is not set
370CONFIG_TCP_CONG_CUBIC=y
371CONFIG_DEFAULT_TCP_CONG="cubic"
372# CONFIG_TCP_MD5SIG is not set
373# CONFIG_IPV6 is not set
374# CONFIG_NETWORK_SECMARK is not set
375# CONFIG_NETFILTER is not set
376# CONFIG_IP_DCCP is not set
377# CONFIG_IP_SCTP is not set
378# CONFIG_TIPC is not set
379# CONFIG_ATM is not set
380# CONFIG_BRIDGE is not set
381# CONFIG_NET_DSA is not set
382# CONFIG_VLAN_8021Q is not set
383# CONFIG_DECNET is not set
384# CONFIG_LLC2 is not set
385# CONFIG_IPX is not set
386# CONFIG_ATALK is not set
387# CONFIG_X25 is not set
388# CONFIG_LAPB is not set
389# CONFIG_ECONET is not set
390# CONFIG_WAN_ROUTER is not set
391# CONFIG_PHONET is not set
392# CONFIG_NET_SCHED is not set
393# CONFIG_DCB is not set
169 394
170# 395#
171# Generic Driver Options 396# Network testing
172# 397#
173CONFIG_STANDALONE=y 398# CONFIG_NET_PKTGEN is not set
174CONFIG_PREVENT_FIRMWARE_BUILD=y 399# CONFIG_NET_DROP_MONITOR is not set
175# CONFIG_FW_LOADER is not set 400# CONFIG_HAMRADIO is not set
176CONFIG_DEBUG_DRIVER=y 401# CONFIG_CAN is not set
402# CONFIG_IRDA is not set
403# CONFIG_BT is not set
404# CONFIG_AF_RXRPC is not set
405# CONFIG_WIRELESS is not set
406# CONFIG_WIMAX is not set
407# CONFIG_RFKILL is not set
408# CONFIG_NET_9P is not set
177 409
178# 410#
179# Memory Technology Devices (MTD) 411# Device Drivers
180# 412#
181# CONFIG_MTD is not set
182 413
183# 414#
184# Parallel port support 415# Generic Driver Options
185# 416#
417CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
418CONFIG_STANDALONE=y
419CONFIG_PREVENT_FIRMWARE_BUILD=y
420CONFIG_FW_LOADER=y
421# CONFIG_FIRMWARE_IN_KERNEL is not set
422CONFIG_EXTRA_FIRMWARE=""
423# CONFIG_DEBUG_DRIVER is not set
424# CONFIG_DEBUG_DEVRES is not set
425# CONFIG_SYS_HYPERVISOR is not set
426# CONFIG_CONNECTOR is not set
427CONFIG_MTD=y
428# CONFIG_MTD_DEBUG is not set
429CONFIG_MTD_CONCAT=y
430CONFIG_MTD_PARTITIONS=y
431# CONFIG_MTD_TESTS is not set
432# CONFIG_MTD_REDBOOT_PARTS is not set
433CONFIG_MTD_CMDLINE_PARTS=y
434# CONFIG_MTD_AFS_PARTS is not set
435# CONFIG_MTD_AR7_PARTS is not set
436
437#
438# User Modules And Translation Layers
439#
440CONFIG_MTD_CHAR=y
441CONFIG_MTD_BLKDEVS=y
442CONFIG_MTD_BLOCK=y
443# CONFIG_FTL is not set
444# CONFIG_NFTL is not set
445# CONFIG_INFTL is not set
446# CONFIG_RFD_FTL is not set
447# CONFIG_SSFDC is not set
448# CONFIG_MTD_OOPS is not set
449
450#
451# RAM/ROM/Flash chip drivers
452#
453CONFIG_MTD_CFI=y
454# CONFIG_MTD_JEDECPROBE is not set
455CONFIG_MTD_GEN_PROBE=y
456# CONFIG_MTD_CFI_ADV_OPTIONS is not set
457CONFIG_MTD_MAP_BANK_WIDTH_1=y
458CONFIG_MTD_MAP_BANK_WIDTH_2=y
459CONFIG_MTD_MAP_BANK_WIDTH_4=y
460# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
461# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
462# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
463CONFIG_MTD_CFI_I1=y
464CONFIG_MTD_CFI_I2=y
465# CONFIG_MTD_CFI_I4 is not set
466# CONFIG_MTD_CFI_I8 is not set
467CONFIG_MTD_CFI_INTELEXT=y
468# CONFIG_MTD_CFI_AMDSTD is not set
469# CONFIG_MTD_CFI_STAA is not set
470CONFIG_MTD_CFI_UTIL=y
471# CONFIG_MTD_RAM is not set
472# CONFIG_MTD_ROM is not set
473# CONFIG_MTD_ABSENT is not set
474
475#
476# Mapping drivers for chip access
477#
478CONFIG_MTD_COMPLEX_MAPPINGS=y
479CONFIG_MTD_PHYSMAP=y
480# CONFIG_MTD_PHYSMAP_COMPAT is not set
481# CONFIG_MTD_ARM_INTEGRATOR is not set
482# CONFIG_MTD_PLATRAM is not set
483
484#
485# Self-contained MTD device drivers
486#
487# CONFIG_MTD_SLRAM is not set
488# CONFIG_MTD_PHRAM is not set
489# CONFIG_MTD_MTDRAM is not set
490# CONFIG_MTD_BLOCK2MTD is not set
491
492#
493# Disk-On-Chip Device Drivers
494#
495# CONFIG_MTD_DOC2000 is not set
496# CONFIG_MTD_DOC2001 is not set
497# CONFIG_MTD_DOC2001PLUS is not set
498CONFIG_MTD_NAND=y
499# CONFIG_MTD_NAND_VERIFY_WRITE is not set
500# CONFIG_MTD_NAND_ECC_SMC is not set
501# CONFIG_MTD_NAND_MUSEUM_IDS is not set
502# CONFIG_MTD_NAND_GPIO is not set
503CONFIG_MTD_NAND_IDS=y
504# CONFIG_MTD_NAND_DISKONCHIP is not set
505CONFIG_MTD_NAND_ATMEL=y
506# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
507CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
508# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
509# CONFIG_MTD_NAND_NANDSIM is not set
510# CONFIG_MTD_NAND_PLATFORM is not set
511# CONFIG_MTD_ALAUDA is not set
512# CONFIG_MTD_ONENAND is not set
513
514#
515# LPDDR flash memory drivers
516#
517# CONFIG_MTD_LPDDR is not set
518
519#
520# UBI - Unsorted block images
521#
522CONFIG_MTD_UBI=y
523CONFIG_MTD_UBI_WL_THRESHOLD=4096
524CONFIG_MTD_UBI_BEB_RESERVE=1
525CONFIG_MTD_UBI_GLUEBI=y
526
527#
528# UBI debugging options
529#
530# CONFIG_MTD_UBI_DEBUG is not set
186# CONFIG_PARPORT is not set 531# CONFIG_PARPORT is not set
187 532CONFIG_BLK_DEV=y
188#
189# Plug and Play support
190#
191
192#
193# Block devices
194#
195# CONFIG_BLK_DEV_COW_COMMON is not set 533# CONFIG_BLK_DEV_COW_COMMON is not set
196CONFIG_BLK_DEV_LOOP=y 534CONFIG_BLK_DEV_LOOP=y
197# CONFIG_BLK_DEV_CRYPTOLOOP is not set 535# CONFIG_BLK_DEV_CRYPTOLOOP is not set
198CONFIG_BLK_DEV_NBD=y 536# CONFIG_BLK_DEV_NBD is not set
199# CONFIG_BLK_DEV_UB is not set 537# CONFIG_BLK_DEV_UB is not set
200CONFIG_BLK_DEV_RAM=y 538CONFIG_BLK_DEV_RAM=y
201CONFIG_BLK_DEV_RAM_COUNT=16 539CONFIG_BLK_DEV_RAM_COUNT=16
202CONFIG_BLK_DEV_RAM_SIZE=4096 540CONFIG_BLK_DEV_RAM_SIZE=16384
203CONFIG_BLK_DEV_INITRD=y 541# CONFIG_BLK_DEV_XIP is not set
204CONFIG_INITRAMFS_SOURCE=""
205# CONFIG_CDROM_PKTCDVD is not set 542# CONFIG_CDROM_PKTCDVD is not set
543# CONFIG_ATA_OVER_ETH is not set
544CONFIG_MISC_DEVICES=y
545CONFIG_ATMEL_TCLIB=y
546CONFIG_ATMEL_TCB_CLKSRC=y
547CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
548CONFIG_ATMEL_SSC=y
549# CONFIG_ENCLOSURE_SERVICES is not set
550# CONFIG_C2PORT is not set
206 551
207# 552#
208# IO Schedulers 553# EEPROM support
209# 554#
210CONFIG_IOSCHED_NOOP=y 555# CONFIG_EEPROM_93CX6 is not set
211CONFIG_IOSCHED_AS=y 556CONFIG_HAVE_IDE=y
212CONFIG_IOSCHED_DEADLINE=y 557# CONFIG_IDE is not set
213CONFIG_IOSCHED_CFQ=y
214# CONFIG_ATA_OVER_ETH is not set
215 558
216# 559#
217# SCSI device support 560# SCSI device support
218# 561#
562# CONFIG_RAID_ATTRS is not set
219CONFIG_SCSI=y 563CONFIG_SCSI=y
564CONFIG_SCSI_DMA=y
565# CONFIG_SCSI_TGT is not set
566# CONFIG_SCSI_NETLINK is not set
220CONFIG_SCSI_PROC_FS=y 567CONFIG_SCSI_PROC_FS=y
221 568
222# 569#
@@ -232,145 +579,87 @@ CONFIG_CHR_DEV_SG=y
232# 579#
233# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 580# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
234# 581#
235# CONFIG_SCSI_MULTI_LUN is not set 582CONFIG_SCSI_MULTI_LUN=y
236# CONFIG_SCSI_CONSTANTS is not set 583CONFIG_SCSI_CONSTANTS=y
237# CONFIG_SCSI_LOGGING is not set 584CONFIG_SCSI_LOGGING=y
585# CONFIG_SCSI_SCAN_ASYNC is not set
586CONFIG_SCSI_WAIT_SCAN=m
238 587
239# 588#
240# SCSI Transport Attributes 589# SCSI Transports
241# 590#
242# CONFIG_SCSI_SPI_ATTRS is not set 591CONFIG_SCSI_SPI_ATTRS=m
243# CONFIG_SCSI_FC_ATTRS is not set 592# CONFIG_SCSI_FC_ATTRS is not set
244# CONFIG_SCSI_ISCSI_ATTRS is not set 593# CONFIG_SCSI_ISCSI_ATTRS is not set
245 594# CONFIG_SCSI_SAS_LIBSAS is not set
246# 595# CONFIG_SCSI_SRP_ATTRS is not set
247# SCSI low-level drivers 596# CONFIG_SCSI_LOWLEVEL is not set
248# 597# CONFIG_SCSI_DH is not set
249# CONFIG_SCSI_SATA is not set 598# CONFIG_SCSI_OSD_INITIATOR is not set
250# CONFIG_SCSI_DEBUG is not set 599# CONFIG_ATA is not set
251
252#
253# Multi-device support (RAID and LVM)
254#
255# CONFIG_MD is not set 600# CONFIG_MD is not set
256
257#
258# Fusion MPT device support
259#
260# CONFIG_FUSION is not set
261
262#
263# IEEE 1394 (FireWire) support
264#
265
266#
267# I2O device support
268#
269
270#
271# Networking support
272#
273CONFIG_NET=y
274
275#
276# Networking options
277#
278CONFIG_PACKET=y
279# CONFIG_PACKET_MMAP is not set
280CONFIG_UNIX=y
281# CONFIG_NET_KEY is not set
282CONFIG_INET=y
283CONFIG_IP_MULTICAST=y
284# CONFIG_IP_ADVANCED_ROUTER is not set
285CONFIG_IP_FIB_HASH=y
286CONFIG_IP_PNP=y
287CONFIG_IP_PNP_DHCP=y
288# CONFIG_IP_PNP_BOOTP is not set
289# CONFIG_IP_PNP_RARP is not set
290# CONFIG_NET_IPIP is not set
291# CONFIG_NET_IPGRE is not set
292# CONFIG_IP_MROUTE is not set
293# CONFIG_SYN_COOKIES is not set
294# CONFIG_INET_AH is not set
295# CONFIG_INET_ESP is not set
296# CONFIG_INET_IPCOMP is not set
297# CONFIG_INET_TUNNEL is not set
298# CONFIG_IP_TCPDIAG is not set
299# CONFIG_IP_TCPDIAG_IPV6 is not set
300# CONFIG_TCP_CONG_ADVANCED is not set
301CONFIG_TCP_CONG_BIC=y
302# CONFIG_IPV6 is not set
303# CONFIG_NETFILTER is not set
304# CONFIG_BRIDGE is not set
305# CONFIG_VLAN_8021Q is not set
306# CONFIG_DECNET is not set
307# CONFIG_LLC2 is not set
308# CONFIG_IPX is not set
309# CONFIG_ATALK is not set
310
311#
312# QoS and/or fair queueing
313#
314# CONFIG_NET_SCHED is not set
315# CONFIG_NET_CLS_ROUTE is not set
316
317#
318# Network testing
319#
320# CONFIG_NET_PKTGEN is not set
321# CONFIG_NETPOLL is not set
322# CONFIG_NET_POLL_CONTROLLER is not set
323# CONFIG_HAMRADIO is not set
324# CONFIG_IRDA is not set
325# CONFIG_BT is not set
326CONFIG_NETDEVICES=y 601CONFIG_NETDEVICES=y
602CONFIG_COMPAT_NET_DEV_OPS=y
327# CONFIG_DUMMY is not set 603# CONFIG_DUMMY is not set
328# CONFIG_BONDING is not set 604# CONFIG_BONDING is not set
605# CONFIG_MACVLAN is not set
329# CONFIG_EQUALIZER is not set 606# CONFIG_EQUALIZER is not set
330# CONFIG_TUN is not set 607# CONFIG_TUN is not set
331 608# CONFIG_VETH is not set
332# 609# CONFIG_PHYLIB is not set
333# Ethernet (10 or 100Mbit)
334#
335CONFIG_NET_ETHERNET=y 610CONFIG_NET_ETHERNET=y
336CONFIG_MII=y 611CONFIG_MII=y
337CONFIG_ARM_AT91_ETHER=y 612CONFIG_ARM_AT91_ETHER=y
613# CONFIG_AX88796 is not set
338# CONFIG_SMC91X is not set 614# CONFIG_SMC91X is not set
339# CONFIG_DM9000 is not set 615# CONFIG_DM9000 is not set
616# CONFIG_ETHOC is not set
617# CONFIG_SMC911X is not set
618# CONFIG_SMSC911X is not set
619# CONFIG_DNET is not set
620# CONFIG_IBM_NEW_EMAC_ZMII is not set
621# CONFIG_IBM_NEW_EMAC_RGMII is not set
622# CONFIG_IBM_NEW_EMAC_TAH is not set
623# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
624# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
625# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
626# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
627# CONFIG_B44 is not set
628# CONFIG_NETDEV_1000 is not set
629# CONFIG_NETDEV_10000 is not set
340 630
341# 631#
342# Ethernet (1000 Mbit) 632# Wireless LAN
343#
344
345#
346# Ethernet (10000 Mbit)
347#
348
349#
350# Token Ring devices
351# 633#
634# CONFIG_WLAN_PRE80211 is not set
635# CONFIG_WLAN_80211 is not set
352 636
353# 637#
354# Wireless LAN (non-hamradio) 638# Enable WiMAX (Networking options) to see the WiMAX drivers
355# 639#
356# CONFIG_NET_RADIO is not set
357 640
358# 641#
359# Wan interfaces 642# USB Network Adapters
360# 643#
644# CONFIG_USB_CATC is not set
645# CONFIG_USB_KAWETH is not set
646# CONFIG_USB_PEGASUS is not set
647# CONFIG_USB_RTL8150 is not set
648# CONFIG_USB_USBNET is not set
361# CONFIG_WAN is not set 649# CONFIG_WAN is not set
362# CONFIG_PPP is not set 650# CONFIG_PPP is not set
363# CONFIG_SLIP is not set 651# CONFIG_SLIP is not set
364 652# CONFIG_NETCONSOLE is not set
365# 653# CONFIG_NETPOLL is not set
366# ISDN subsystem 654# CONFIG_NET_POLL_CONTROLLER is not set
367#
368# CONFIG_ISDN is not set 655# CONFIG_ISDN is not set
369 656
370# 657#
371# Input device support 658# Input device support
372# 659#
373CONFIG_INPUT=y 660CONFIG_INPUT=y
661# CONFIG_INPUT_FF_MEMLESS is not set
662# CONFIG_INPUT_POLLDEV is not set
374 663
375# 664#
376# Userland interfaces 665# Userland interfaces
@@ -380,7 +669,6 @@ CONFIG_INPUT_MOUSEDEV=y
380CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 669CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
381CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 670CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
382# CONFIG_INPUT_JOYDEV is not set 671# CONFIG_INPUT_JOYDEV is not set
383# CONFIG_INPUT_TSDEV is not set
384# CONFIG_INPUT_EVDEV is not set 672# CONFIG_INPUT_EVDEV is not set
385# CONFIG_INPUT_EVBUG is not set 673# CONFIG_INPUT_EVBUG is not set
386 674
@@ -390,23 +678,25 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
390# CONFIG_INPUT_KEYBOARD is not set 678# CONFIG_INPUT_KEYBOARD is not set
391# CONFIG_INPUT_MOUSE is not set 679# CONFIG_INPUT_MOUSE is not set
392# CONFIG_INPUT_JOYSTICK is not set 680# CONFIG_INPUT_JOYSTICK is not set
681# CONFIG_INPUT_TABLET is not set
393# CONFIG_INPUT_TOUCHSCREEN is not set 682# CONFIG_INPUT_TOUCHSCREEN is not set
394# CONFIG_INPUT_MISC is not set 683# CONFIG_INPUT_MISC is not set
395 684
396# 685#
397# Hardware I/O ports 686# Hardware I/O ports
398# 687#
399CONFIG_SERIO=y 688# CONFIG_SERIO is not set
400# CONFIG_SERIO_SERPORT is not set
401# CONFIG_SERIO_RAW is not set
402# CONFIG_GAMEPORT is not set 689# CONFIG_GAMEPORT is not set
403 690
404# 691#
405# Character devices 692# Character devices
406# 693#
407CONFIG_VT=y 694CONFIG_VT=y
695CONFIG_CONSOLE_TRANSLATIONS=y
408CONFIG_VT_CONSOLE=y 696CONFIG_VT_CONSOLE=y
409CONFIG_HW_CONSOLE=y 697CONFIG_HW_CONSOLE=y
698# CONFIG_VT_HW_CONSOLE_BINDING is not set
699CONFIG_DEVKMEM=y
410# CONFIG_SERIAL_NONSTANDARD is not set 700# CONFIG_SERIAL_NONSTANDARD is not set
411 701
412# 702#
@@ -419,215 +709,362 @@ CONFIG_HW_CONSOLE=y
419# 709#
420CONFIG_SERIAL_ATMEL=y 710CONFIG_SERIAL_ATMEL=y
421CONFIG_SERIAL_ATMEL_CONSOLE=y 711CONFIG_SERIAL_ATMEL_CONSOLE=y
712CONFIG_SERIAL_ATMEL_PDC=y
713# CONFIG_SERIAL_ATMEL_TTYAT is not set
422CONFIG_SERIAL_CORE=y 714CONFIG_SERIAL_CORE=y
423CONFIG_SERIAL_CORE_CONSOLE=y 715CONFIG_SERIAL_CORE_CONSOLE=y
424CONFIG_UNIX98_PTYS=y 716CONFIG_UNIX98_PTYS=y
425CONFIG_LEGACY_PTYS=y 717# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
426CONFIG_LEGACY_PTY_COUNT=256 718# CONFIG_LEGACY_PTYS is not set
719# CONFIG_IPMI_HANDLER is not set
720# CONFIG_HW_RANDOM is not set
721# CONFIG_R3964 is not set
722# CONFIG_RAW_DRIVER is not set
723# CONFIG_TCG_TPM is not set
724# CONFIG_I2C is not set
725# CONFIG_SPI is not set
726CONFIG_ARCH_REQUIRE_GPIOLIB=y
727CONFIG_GPIOLIB=y
728# CONFIG_DEBUG_GPIO is not set
729# CONFIG_GPIO_SYSFS is not set
427 730
428# 731#
429# IPMI 732# Memory mapped GPIO expanders:
430# 733#
431# CONFIG_IPMI_HANDLER is not set
432 734
433# 735#
434# Watchdog Cards 736# I2C GPIO expanders:
435# 737#
436# CONFIG_WATCHDOG is not set
437# CONFIG_NVRAM is not set
438# CONFIG_RTC is not set
439# CONFIG_AT91RM9200_RTC is not set
440# CONFIG_DTLK is not set
441# CONFIG_R3964 is not set
442 738
443# 739#
444# Ftape, the floppy tape device driver 740# PCI GPIO expanders:
445# 741#
446# CONFIG_RAW_DRIVER is not set
447 742
448# 743#
449# TPM devices 744# SPI GPIO expanders:
450# 745#
451# CONFIG_AT91_SPI is not set 746# CONFIG_W1 is not set
747# CONFIG_POWER_SUPPLY is not set
748# CONFIG_HWMON is not set
749# CONFIG_THERMAL is not set
750# CONFIG_THERMAL_HWMON is not set
751CONFIG_WATCHDOG=y
752# CONFIG_WATCHDOG_NOWAYOUT is not set
452 753
453# 754#
454# I2C support 755# Watchdog Device Drivers
455# 756#
456# CONFIG_I2C is not set 757# CONFIG_SOFT_WATCHDOG is not set
758CONFIG_AT91RM9200_WATCHDOG=y
759
760#
761# USB-based Watchdog Cards
762#
763# CONFIG_USBPCWATCHDOG is not set
764CONFIG_SSB_POSSIBLE=y
457 765
458# 766#
459# Misc devices 767# Sonics Silicon Backplane
460# 768#
769# CONFIG_SSB is not set
770
771#
772# Multifunction device drivers
773#
774# CONFIG_MFD_CORE is not set
775# CONFIG_MFD_SM501 is not set
776# CONFIG_MFD_ASIC3 is not set
777# CONFIG_HTC_EGPIO is not set
778# CONFIG_HTC_PASIC3 is not set
779# CONFIG_MFD_TMIO is not set
780# CONFIG_MFD_T7L66XB is not set
781# CONFIG_MFD_TC6387XB is not set
782# CONFIG_MFD_TC6393XB is not set
461 783
462# 784#
463# Multimedia devices 785# Multimedia devices
464# 786#
787
788#
789# Multimedia core support
790#
465# CONFIG_VIDEO_DEV is not set 791# CONFIG_VIDEO_DEV is not set
792# CONFIG_DVB_CORE is not set
793# CONFIG_VIDEO_MEDIA is not set
466 794
467# 795#
468# Digital Video Broadcasting Devices 796# Multimedia drivers
469# 797#
470# CONFIG_DVB is not set 798# CONFIG_DAB is not set
471 799
472# 800#
473# Graphics support 801# Graphics support
474# 802#
475# CONFIG_FB is not set 803# CONFIG_VGASTATE is not set
804# CONFIG_VIDEO_OUTPUT_CONTROL is not set
805CONFIG_FB=y
806# CONFIG_FIRMWARE_EDID is not set
807# CONFIG_FB_DDC is not set
808# CONFIG_FB_BOOT_VESA_SUPPORT is not set
809# CONFIG_FB_CFB_FILLRECT is not set
810# CONFIG_FB_CFB_COPYAREA is not set
811# CONFIG_FB_CFB_IMAGEBLIT is not set
812# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
813# CONFIG_FB_SYS_FILLRECT is not set
814# CONFIG_FB_SYS_COPYAREA is not set
815# CONFIG_FB_SYS_IMAGEBLIT is not set
816# CONFIG_FB_FOREIGN_ENDIAN is not set
817# CONFIG_FB_SYS_FOPS is not set
818# CONFIG_FB_SVGALIB is not set
819# CONFIG_FB_MACMODES is not set
820# CONFIG_FB_BACKLIGHT is not set
821CONFIG_FB_MODE_HELPERS=y
822CONFIG_FB_TILEBLITTING=y
823
824#
825# Frame buffer hardware drivers
826#
827# CONFIG_FB_S1D13XXX is not set
828# CONFIG_FB_VIRTUAL is not set
829# CONFIG_FB_METRONOME is not set
830# CONFIG_FB_MB862XX is not set
831# CONFIG_FB_BROADSHEET is not set
832CONFIG_BACKLIGHT_LCD_SUPPORT=y
833# CONFIG_LCD_CLASS_DEVICE is not set
834CONFIG_BACKLIGHT_CLASS_DEVICE=y
835# CONFIG_BACKLIGHT_GENERIC is not set
836
837#
838# Display device support
839#
840# CONFIG_DISPLAY_SUPPORT is not set
476 841
477# 842#
478# Console display driver support 843# Console display driver support
479# 844#
480# CONFIG_VGA_CONSOLE is not set 845# CONFIG_VGA_CONSOLE is not set
481CONFIG_DUMMY_CONSOLE=y 846CONFIG_DUMMY_CONSOLE=y
482 847CONFIG_FRAMEBUFFER_CONSOLE=y
483# 848# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
484# Sound 849# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
485# 850CONFIG_FONTS=y
851# CONFIG_FONT_8x8 is not set
852# CONFIG_FONT_8x16 is not set
853# CONFIG_FONT_6x11 is not set
854# CONFIG_FONT_7x14 is not set
855# CONFIG_FONT_PEARL_8x8 is not set
856# CONFIG_FONT_ACORN_8x8 is not set
857CONFIG_FONT_MINI_4x6=y
858# CONFIG_FONT_SUN8x16 is not set
859# CONFIG_FONT_SUN12x22 is not set
860# CONFIG_FONT_10x18 is not set
861# CONFIG_LOGO is not set
486# CONFIG_SOUND is not set 862# CONFIG_SOUND is not set
487 863# CONFIG_HID_SUPPORT is not set
488# 864CONFIG_USB_SUPPORT=y
489# USB support
490#
491CONFIG_USB_ARCH_HAS_HCD=y 865CONFIG_USB_ARCH_HAS_HCD=y
492CONFIG_USB_ARCH_HAS_OHCI=y 866CONFIG_USB_ARCH_HAS_OHCI=y
867# CONFIG_USB_ARCH_HAS_EHCI is not set
493CONFIG_USB=y 868CONFIG_USB=y
494CONFIG_USB_DEBUG=y 869# CONFIG_USB_DEBUG is not set
870# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
495 871
496# 872#
497# Miscellaneous USB options 873# Miscellaneous USB options
498# 874#
499CONFIG_USB_DEVICEFS=y 875CONFIG_USB_DEVICEFS=y
876CONFIG_USB_DEVICE_CLASS=y
877# CONFIG_USB_DYNAMIC_MINORS is not set
878# CONFIG_USB_OTG is not set
879# CONFIG_USB_MON is not set
880# CONFIG_USB_WUSB is not set
881# CONFIG_USB_WUSB_CBAF is not set
500 882
501# 883#
502# USB Host Controller Drivers 884# USB Host Controller Drivers
503# 885#
886# CONFIG_USB_C67X00_HCD is not set
887# CONFIG_USB_OXU210HP_HCD is not set
504# CONFIG_USB_ISP116X_HCD is not set 888# CONFIG_USB_ISP116X_HCD is not set
889# CONFIG_USB_ISP1760_HCD is not set
505CONFIG_USB_OHCI_HCD=y 890CONFIG_USB_OHCI_HCD=y
506# CONFIG_USB_OHCI_BIG_ENDIAN is not set 891# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
892# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
507CONFIG_USB_OHCI_LITTLE_ENDIAN=y 893CONFIG_USB_OHCI_LITTLE_ENDIAN=y
508# CONFIG_USB_SL811_HCD is not set 894# CONFIG_USB_SL811_HCD is not set
895# CONFIG_USB_R8A66597_HCD is not set
896# CONFIG_USB_HWA_HCD is not set
897# CONFIG_USB_MUSB_HDRC is not set
509 898
510# 899#
511# USB Device Class drivers 900# USB Device Class drivers
512# 901#
513# CONFIG_USB_BLUETOOTH_TTY is not set
514# CONFIG_USB_ACM is not set 902# CONFIG_USB_ACM is not set
515# CONFIG_USB_PRINTER is not set 903# CONFIG_USB_PRINTER is not set
904# CONFIG_USB_WDM is not set
905# CONFIG_USB_TMC is not set
516 906
517# 907#
518# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 908# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
519# 909#
520CONFIG_USB_STORAGE=y
521CONFIG_USB_STORAGE_DEBUG=y
522# CONFIG_USB_STORAGE_FREECOM is not set
523# CONFIG_USB_STORAGE_DPCM is not set
524
525#
526# USB Input Devices
527#
528# CONFIG_USB_HID is not set
529 910
530# 911#
531# USB HID Boot Protocol drivers 912# also be needed; see USB_STORAGE Help for more info
532# 913#
533# CONFIG_USB_KBD is not set 914CONFIG_USB_STORAGE=y
534# CONFIG_USB_MOUSE is not set 915# CONFIG_USB_STORAGE_DEBUG is not set
535# CONFIG_USB_AIPTEK is not set 916# CONFIG_USB_STORAGE_DATAFAB is not set
536# CONFIG_USB_WACOM is not set 917# CONFIG_USB_STORAGE_FREECOM is not set
537# CONFIG_USB_ACECAD is not set 918# CONFIG_USB_STORAGE_ISD200 is not set
538# CONFIG_USB_KBTAB is not set 919# CONFIG_USB_STORAGE_USBAT is not set
539# CONFIG_USB_POWERMATE is not set 920# CONFIG_USB_STORAGE_SDDR09 is not set
540# CONFIG_USB_MTOUCH is not set 921# CONFIG_USB_STORAGE_SDDR55 is not set
541# CONFIG_USB_ITMTOUCH is not set 922# CONFIG_USB_STORAGE_JUMPSHOT is not set
542# CONFIG_USB_EGALAX is not set 923# CONFIG_USB_STORAGE_ALAUDA is not set
543# CONFIG_USB_XPAD is not set 924# CONFIG_USB_STORAGE_ONETOUCH is not set
544# CONFIG_USB_ATI_REMOTE is not set 925# CONFIG_USB_STORAGE_KARMA is not set
926# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
927CONFIG_USB_LIBUSUAL=y
545 928
546# 929#
547# USB Imaging devices 930# USB Imaging devices
548# 931#
932# CONFIG_USB_MDC800 is not set
549# CONFIG_USB_MICROTEK is not set 933# CONFIG_USB_MICROTEK is not set
550 934
551# 935#
552# USB Multimedia devices 936# USB port drivers
553# 937#
554# CONFIG_USB_DABUSB is not set 938# CONFIG_USB_SERIAL is not set
555 939
556# 940#
557# Video4Linux support is needed for USB Multimedia device support 941# USB Miscellaneous drivers
558# 942#
943# CONFIG_USB_EMI62 is not set
944# CONFIG_USB_EMI26 is not set
945# CONFIG_USB_ADUTUX is not set
946# CONFIG_USB_SEVSEG is not set
947# CONFIG_USB_RIO500 is not set
948# CONFIG_USB_LEGOTOWER is not set
949# CONFIG_USB_LCD is not set
950# CONFIG_USB_BERRY_CHARGE is not set
951# CONFIG_USB_LED is not set
952# CONFIG_USB_CYPRESS_CY7C63 is not set
953# CONFIG_USB_CYTHERM is not set
954# CONFIG_USB_IDMOUSE is not set
955# CONFIG_USB_FTDI_ELAN is not set
956# CONFIG_USB_APPLEDISPLAY is not set
957# CONFIG_USB_LD is not set
958# CONFIG_USB_TRANCEVIBRATOR is not set
959# CONFIG_USB_IOWARRIOR is not set
960# CONFIG_USB_TEST is not set
961# CONFIG_USB_ISIGHTFW is not set
962# CONFIG_USB_VST is not set
963# CONFIG_USB_GADGET is not set
559 964
560# 965#
561# USB Network Adapters 966# OTG and related infrastructure
562# 967#
563# CONFIG_USB_KAWETH is not set 968# CONFIG_USB_GPIO_VBUS is not set
564# CONFIG_USB_PEGASUS is not set 969# CONFIG_NOP_USB_XCEIV is not set
565# CONFIG_USB_USBNET is not set 970CONFIG_MMC=y
566# CONFIG_USB_MON is not set 971# CONFIG_MMC_DEBUG is not set
972# CONFIG_MMC_UNSAFE_RESUME is not set
567 973
568# 974#
569# USB port drivers 975# MMC/SD/SDIO Card Drivers
570# 976#
977CONFIG_MMC_BLOCK=y
978CONFIG_MMC_BLOCK_BOUNCE=y
979# CONFIG_SDIO_UART is not set
980# CONFIG_MMC_TEST is not set
571 981
572# 982#
573# USB Serial Converter support 983# MMC/SD/SDIO Host Controller Drivers
574# 984#
575# CONFIG_USB_SERIAL is not set 985# CONFIG_MMC_SDHCI is not set
986CONFIG_MMC_AT91=y
987# CONFIG_MEMSTICK is not set
988# CONFIG_ACCESSIBILITY is not set
989# CONFIG_NEW_LEDS is not set
990CONFIG_RTC_LIB=y
991CONFIG_RTC_CLASS=y
992CONFIG_RTC_HCTOSYS=y
993CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
994# CONFIG_RTC_DEBUG is not set
576 995
577# 996#
578# USB Miscellaneous drivers 997# RTC interfaces
579# 998#
580# CONFIG_USB_EMI62 is not set 999CONFIG_RTC_INTF_SYSFS=y
581# CONFIG_USB_EMI26 is not set 1000CONFIG_RTC_INTF_PROC=y
582# CONFIG_USB_LCD is not set 1001CONFIG_RTC_INTF_DEV=y
583# CONFIG_USB_LED is not set 1002# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
584# CONFIG_USB_CYTHERM is not set 1003# CONFIG_RTC_DRV_TEST is not set
585# CONFIG_USB_PHIDGETKIT is not set
586# CONFIG_USB_PHIDGETSERVO is not set
587# CONFIG_USB_IDMOUSE is not set
588 1004
589# 1005#
590# USB DSL modem support 1006# SPI RTC drivers
591# 1007#
592 1008
593# 1009#
594# USB Gadget Support 1010# Platform RTC drivers
595# 1011#
596# CONFIG_USB_GADGET is not set 1012# CONFIG_RTC_DRV_CMOS is not set
1013# CONFIG_RTC_DRV_DS1286 is not set
1014# CONFIG_RTC_DRV_DS1511 is not set
1015# CONFIG_RTC_DRV_DS1553 is not set
1016# CONFIG_RTC_DRV_DS1742 is not set
1017# CONFIG_RTC_DRV_STK17TA8 is not set
1018# CONFIG_RTC_DRV_M48T86 is not set
1019# CONFIG_RTC_DRV_M48T35 is not set
1020# CONFIG_RTC_DRV_M48T59 is not set
1021# CONFIG_RTC_DRV_BQ4802 is not set
1022# CONFIG_RTC_DRV_V3020 is not set
597 1023
598# 1024#
599# MMC/SD Card support 1025# on-CPU RTC drivers
600# 1026#
601# CONFIG_MMC is not set 1027CONFIG_RTC_DRV_AT91RM9200=y
1028# CONFIG_DMADEVICES is not set
1029# CONFIG_AUXDISPLAY is not set
1030# CONFIG_REGULATOR is not set
1031# CONFIG_UIO is not set
1032# CONFIG_STAGING is not set
602 1033
603# 1034#
604# File systems 1035# File systems
605# 1036#
606CONFIG_EXT2_FS=y 1037CONFIG_EXT2_FS=y
607CONFIG_EXT2_FS_XATTR=y 1038# CONFIG_EXT2_FS_XATTR is not set
608# CONFIG_EXT2_FS_POSIX_ACL is not set
609# CONFIG_EXT2_FS_SECURITY is not set
610# CONFIG_EXT2_FS_XIP is not set 1039# CONFIG_EXT2_FS_XIP is not set
611CONFIG_EXT3_FS=y 1040CONFIG_EXT3_FS=y
1041# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
612CONFIG_EXT3_FS_XATTR=y 1042CONFIG_EXT3_FS_XATTR=y
613# CONFIG_EXT3_FS_POSIX_ACL is not set 1043# CONFIG_EXT3_FS_POSIX_ACL is not set
614# CONFIG_EXT3_FS_SECURITY is not set 1044# CONFIG_EXT3_FS_SECURITY is not set
1045# CONFIG_EXT4_FS is not set
615CONFIG_JBD=y 1046CONFIG_JBD=y
616# CONFIG_JBD_DEBUG is not set 1047# CONFIG_JBD_DEBUG is not set
617CONFIG_FS_MBCACHE=y 1048CONFIG_FS_MBCACHE=y
618# CONFIG_REISERFS_FS is not set 1049# CONFIG_REISERFS_FS is not set
619# CONFIG_JFS_FS is not set 1050# CONFIG_JFS_FS is not set
1051# CONFIG_FS_POSIX_ACL is not set
1052CONFIG_FILE_LOCKING=y
1053# CONFIG_XFS_FS is not set
1054# CONFIG_OCFS2_FS is not set
1055# CONFIG_BTRFS_FS is not set
1056# CONFIG_DNOTIFY is not set
1057CONFIG_INOTIFY=y
1058CONFIG_INOTIFY_USER=y
1059# CONFIG_QUOTA is not set
1060# CONFIG_AUTOFS_FS is not set
1061# CONFIG_AUTOFS4_FS is not set
1062# CONFIG_FUSE_FS is not set
620 1063
621# 1064#
622# XFS support 1065# Caches
623# 1066#
624# CONFIG_XFS_FS is not set 1067# CONFIG_FSCACHE is not set
625# CONFIG_MINIX_FS is not set
626# CONFIG_ROMFS_FS is not set
627# CONFIG_QUOTA is not set
628CONFIG_DNOTIFY=y
629CONFIG_AUTOFS_FS=y
630CONFIG_AUTOFS4_FS=y
631 1068
632# 1069#
633# CD-ROM/DVD Filesystems 1070# CD-ROM/DVD Filesystems
@@ -639,7 +1076,7 @@ CONFIG_AUTOFS4_FS=y
639# DOS/FAT/NT Filesystems 1076# DOS/FAT/NT Filesystems
640# 1077#
641CONFIG_FAT_FS=y 1078CONFIG_FAT_FS=y
642CONFIG_MSDOS_FS=y 1079# CONFIG_MSDOS_FS is not set
643CONFIG_VFAT_FS=y 1080CONFIG_VFAT_FS=y
644CONFIG_FAT_DEFAULT_CODEPAGE=437 1081CONFIG_FAT_DEFAULT_CODEPAGE=437
645CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 1082CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
@@ -649,53 +1086,70 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
649# Pseudo filesystems 1086# Pseudo filesystems
650# 1087#
651CONFIG_PROC_FS=y 1088CONFIG_PROC_FS=y
1089CONFIG_PROC_SYSCTL=y
1090CONFIG_PROC_PAGE_MONITOR=y
652CONFIG_SYSFS=y 1091CONFIG_SYSFS=y
653CONFIG_DEVPTS_FS_XATTR=y
654# CONFIG_DEVPTS_FS_SECURITY is not set
655CONFIG_TMPFS=y 1092CONFIG_TMPFS=y
656# CONFIG_TMPFS_XATTR is not set 1093# CONFIG_TMPFS_POSIX_ACL is not set
657# CONFIG_HUGETLB_PAGE is not set 1094# CONFIG_HUGETLB_PAGE is not set
658CONFIG_RAMFS=y 1095CONFIG_CONFIGFS_FS=y
659 1096CONFIG_MISC_FILESYSTEMS=y
660# 1097# CONFIG_ADFS_FS is not set
661# Miscellaneous filesystems 1098# CONFIG_AFFS_FS is not set
662# 1099# CONFIG_HFS_FS is not set
663# CONFIG_HFSPLUS_FS is not set 1100# CONFIG_HFSPLUS_FS is not set
1101# CONFIG_BEFS_FS is not set
1102# CONFIG_BFS_FS is not set
1103# CONFIG_EFS_FS is not set
1104CONFIG_JFFS2_FS=y
1105CONFIG_JFFS2_FS_DEBUG=0
1106CONFIG_JFFS2_FS_WRITEBUFFER=y
1107# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1108# CONFIG_JFFS2_SUMMARY is not set
1109# CONFIG_JFFS2_FS_XATTR is not set
1110# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1111CONFIG_JFFS2_ZLIB=y
1112# CONFIG_JFFS2_LZO is not set
1113CONFIG_JFFS2_RTIME=y
1114# CONFIG_JFFS2_RUBIN is not set
1115# CONFIG_UBIFS_FS is not set
664# CONFIG_CRAMFS is not set 1116# CONFIG_CRAMFS is not set
1117# CONFIG_SQUASHFS is not set
665# CONFIG_VXFS_FS is not set 1118# CONFIG_VXFS_FS is not set
1119# CONFIG_MINIX_FS is not set
1120# CONFIG_OMFS_FS is not set
666# CONFIG_HPFS_FS is not set 1121# CONFIG_HPFS_FS is not set
667# CONFIG_QNX4FS_FS is not set 1122# CONFIG_QNX4FS_FS is not set
1123# CONFIG_ROMFS_FS is not set
668# CONFIG_SYSV_FS is not set 1124# CONFIG_SYSV_FS is not set
669# CONFIG_UFS_FS is not set 1125# CONFIG_UFS_FS is not set
670 1126# CONFIG_NILFS2_FS is not set
671# 1127CONFIG_NETWORK_FILESYSTEMS=y
672# Network File Systems
673#
674CONFIG_NFS_FS=y 1128CONFIG_NFS_FS=y
675CONFIG_NFS_V3=y 1129CONFIG_NFS_V3=y
676# CONFIG_NFS_V3_ACL is not set 1130# CONFIG_NFS_V3_ACL is not set
677# CONFIG_NFSD is not set 1131# CONFIG_NFS_V4 is not set
678CONFIG_ROOT_NFS=y 1132CONFIG_ROOT_NFS=y
1133# CONFIG_NFSD is not set
679CONFIG_LOCKD=y 1134CONFIG_LOCKD=y
680CONFIG_LOCKD_V4=y 1135CONFIG_LOCKD_V4=y
681CONFIG_NFS_COMMON=y 1136CONFIG_NFS_COMMON=y
682CONFIG_SUNRPC=y 1137CONFIG_SUNRPC=y
1138# CONFIG_RPCSEC_GSS_KRB5 is not set
1139# CONFIG_RPCSEC_GSS_SPKM3 is not set
683# CONFIG_SMB_FS is not set 1140# CONFIG_SMB_FS is not set
684# CONFIG_CIFS is not set 1141# CONFIG_CIFS is not set
685# CONFIG_NCP_FS is not set 1142# CONFIG_NCP_FS is not set
686# CONFIG_CODA_FS is not set 1143# CONFIG_CODA_FS is not set
1144# CONFIG_AFS_FS is not set
687 1145
688# 1146#
689# Partition Types 1147# Partition Types
690# 1148#
691# CONFIG_PARTITION_ADVANCED is not set 1149# CONFIG_PARTITION_ADVANCED is not set
692CONFIG_MSDOS_PARTITION=y 1150CONFIG_MSDOS_PARTITION=y
693
694#
695# Native Language Support
696#
697CONFIG_NLS=y 1151CONFIG_NLS=y
698CONFIG_NLS_DEFAULT="utf8" 1152CONFIG_NLS_DEFAULT="iso8859-1"
699CONFIG_NLS_CODEPAGE_437=y 1153CONFIG_NLS_CODEPAGE_437=y
700# CONFIG_NLS_CODEPAGE_737 is not set 1154# CONFIG_NLS_CODEPAGE_737 is not set
701# CONFIG_NLS_CODEPAGE_775 is not set 1155# CONFIG_NLS_CODEPAGE_775 is not set
@@ -719,7 +1173,7 @@ CONFIG_NLS_CODEPAGE_437=y
719# CONFIG_NLS_ISO8859_8 is not set 1173# CONFIG_NLS_ISO8859_8 is not set
720# CONFIG_NLS_CODEPAGE_1250 is not set 1174# CONFIG_NLS_CODEPAGE_1250 is not set
721# CONFIG_NLS_CODEPAGE_1251 is not set 1175# CONFIG_NLS_CODEPAGE_1251 is not set
722CONFIG_NLS_ASCII=y 1176# CONFIG_NLS_ASCII is not set
723# CONFIG_NLS_ISO8859_1 is not set 1177# CONFIG_NLS_ISO8859_1 is not set
724# CONFIG_NLS_ISO8859_2 is not set 1178# CONFIG_NLS_ISO8859_2 is not set
725# CONFIG_NLS_ISO8859_3 is not set 1179# CONFIG_NLS_ISO8859_3 is not set
@@ -733,47 +1187,119 @@ CONFIG_NLS_ASCII=y
733# CONFIG_NLS_ISO8859_15 is not set 1187# CONFIG_NLS_ISO8859_15 is not set
734# CONFIG_NLS_KOI8_R is not set 1188# CONFIG_NLS_KOI8_R is not set
735# CONFIG_NLS_KOI8_U is not set 1189# CONFIG_NLS_KOI8_U is not set
736# CONFIG_NLS_UTF8 is not set 1190CONFIG_NLS_UTF8=y
1191# CONFIG_DLM is not set
737 1192
738# 1193#
739# Kernel hacking 1194# Kernel hacking
740# 1195#
741# CONFIG_PRINTK_TIME is not set 1196# CONFIG_PRINTK_TIME is not set
1197CONFIG_ENABLE_WARN_DEPRECATED=y
1198CONFIG_ENABLE_MUST_CHECK=y
1199CONFIG_FRAME_WARN=1024
1200CONFIG_MAGIC_SYSRQ=y
1201# CONFIG_UNUSED_SYMBOLS is not set
1202CONFIG_DEBUG_FS=y
1203# CONFIG_HEADERS_CHECK is not set
742CONFIG_DEBUG_KERNEL=y 1204CONFIG_DEBUG_KERNEL=y
743# CONFIG_MAGIC_SYSRQ is not set 1205# CONFIG_DEBUG_SHIRQ is not set
744CONFIG_LOG_BUF_SHIFT=14 1206CONFIG_DETECT_SOFTLOCKUP=y
1207# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
1208CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
1209CONFIG_DETECT_HUNG_TASK=y
1210# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
1211CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
1212# CONFIG_SCHED_DEBUG is not set
745# CONFIG_SCHEDSTATS is not set 1213# CONFIG_SCHEDSTATS is not set
746# CONFIG_DEBUG_SLAB is not set 1214# CONFIG_TIMER_STATS is not set
1215# CONFIG_DEBUG_OBJECTS is not set
1216# CONFIG_SLUB_DEBUG_ON is not set
1217# CONFIG_SLUB_STATS is not set
1218# CONFIG_DEBUG_PREEMPT is not set
1219# CONFIG_DEBUG_RT_MUTEXES is not set
1220# CONFIG_RT_MUTEX_TESTER is not set
747# CONFIG_DEBUG_SPINLOCK is not set 1221# CONFIG_DEBUG_SPINLOCK is not set
1222# CONFIG_DEBUG_MUTEXES is not set
1223# CONFIG_DEBUG_LOCK_ALLOC is not set
1224# CONFIG_PROVE_LOCKING is not set
1225# CONFIG_LOCK_STAT is not set
748# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1226# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1227# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
749# CONFIG_DEBUG_KOBJECT is not set 1228# CONFIG_DEBUG_KOBJECT is not set
750CONFIG_DEBUG_BUGVERBOSE=y 1229CONFIG_DEBUG_BUGVERBOSE=y
751# CONFIG_DEBUG_INFO is not set 1230# CONFIG_DEBUG_INFO is not set
752# CONFIG_DEBUG_FS is not set 1231# CONFIG_DEBUG_VM is not set
753CONFIG_FRAME_POINTER=y 1232# CONFIG_DEBUG_WRITECOUNT is not set
754CONFIG_DEBUG_USER=y 1233CONFIG_DEBUG_MEMORY_INIT=y
755CONFIG_DEBUG_ERRORS=y 1234# CONFIG_DEBUG_LIST is not set
756CONFIG_DEBUG_LL=y 1235# CONFIG_DEBUG_SG is not set
757# CONFIG_DEBUG_ICEDCC is not set 1236# CONFIG_DEBUG_NOTIFIERS is not set
1237# CONFIG_BOOT_PRINTK_DELAY is not set
1238# CONFIG_RCU_TORTURE_TEST is not set
1239# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1240# CONFIG_BACKTRACE_SELF_TEST is not set
1241# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
1242# CONFIG_FAULT_INJECTION is not set
1243# CONFIG_LATENCYTOP is not set
1244# CONFIG_SYSCTL_SYSCALL_CHECK is not set
1245# CONFIG_PAGE_POISONING is not set
1246CONFIG_HAVE_FUNCTION_TRACER=y
1247CONFIG_TRACING_SUPPORT=y
1248
1249#
1250# Tracers
1251#
1252# CONFIG_FUNCTION_TRACER is not set
1253# CONFIG_IRQSOFF_TRACER is not set
1254# CONFIG_PREEMPT_TRACER is not set
1255# CONFIG_SCHED_TRACER is not set
1256# CONFIG_CONTEXT_SWITCH_TRACER is not set
1257# CONFIG_EVENT_TRACER is not set
1258# CONFIG_BOOT_TRACER is not set
1259# CONFIG_TRACE_BRANCH_PROFILING is not set
1260# CONFIG_STACK_TRACER is not set
1261# CONFIG_KMEMTRACE is not set
1262# CONFIG_WORKQUEUE_TRACER is not set
1263# CONFIG_BLK_DEV_IO_TRACE is not set
1264# CONFIG_DYNAMIC_DEBUG is not set
1265# CONFIG_SAMPLES is not set
1266CONFIG_HAVE_ARCH_KGDB=y
1267# CONFIG_KGDB is not set
1268CONFIG_ARM_UNWIND=y
1269# CONFIG_DEBUG_USER is not set
1270# CONFIG_DEBUG_ERRORS is not set
1271# CONFIG_DEBUG_STACK_USAGE is not set
1272# CONFIG_DEBUG_LL is not set
758 1273
759# 1274#
760# Security options 1275# Security options
761# 1276#
762# CONFIG_KEYS is not set 1277# CONFIG_KEYS is not set
763# CONFIG_SECURITY is not set 1278# CONFIG_SECURITY is not set
764 1279# CONFIG_SECURITYFS is not set
765# 1280# CONFIG_SECURITY_FILE_CAPABILITIES is not set
766# Cryptographic options
767#
768# CONFIG_CRYPTO is not set 1281# CONFIG_CRYPTO is not set
769 1282# CONFIG_BINARY_PRINTF is not set
770#
771# Hardware crypto devices
772#
773 1283
774# 1284#
775# Library routines 1285# Library routines
776# 1286#
1287CONFIG_BITREVERSE=y
1288CONFIG_GENERIC_FIND_LAST_BIT=y
777# CONFIG_CRC_CCITT is not set 1289# CONFIG_CRC_CCITT is not set
1290# CONFIG_CRC16 is not set
1291# CONFIG_CRC_T10DIF is not set
1292# CONFIG_CRC_ITU_T is not set
778CONFIG_CRC32=y 1293CONFIG_CRC32=y
1294# CONFIG_CRC7 is not set
779# CONFIG_LIBCRC32C is not set 1295# CONFIG_LIBCRC32C is not set
1296CONFIG_AUDIT_GENERIC=y
1297CONFIG_ZLIB_INFLATE=y
1298CONFIG_ZLIB_DEFLATE=y
1299CONFIG_DECOMPRESS_GZIP=y
1300CONFIG_DECOMPRESS_BZIP2=y
1301CONFIG_DECOMPRESS_LZMA=y
1302CONFIG_HAS_IOMEM=y
1303CONFIG_HAS_IOPORT=y
1304CONFIG_HAS_DMA=y
1305CONFIG_NLATTR=y
diff --git a/arch/arm/configs/kirkwood_defconfig b/arch/arm/configs/kirkwood_defconfig
index 0a1abb978d7e..af74cc2de8b6 100644
--- a/arch/arm/configs/kirkwood_defconfig
+++ b/arch/arm/configs/kirkwood_defconfig
@@ -629,7 +629,7 @@ CONFIG_SCSI_LOWLEVEL=y
629CONFIG_ATA=y 629CONFIG_ATA=y
630# CONFIG_ATA_NONSTANDARD is not set 630# CONFIG_ATA_NONSTANDARD is not set
631CONFIG_SATA_PMP=y 631CONFIG_SATA_PMP=y
632# CONFIG_SATA_AHCI is not set 632CONFIG_SATA_AHCI=y
633# CONFIG_SATA_SIL24 is not set 633# CONFIG_SATA_SIL24 is not set
634CONFIG_ATA_SFF=y 634CONFIG_ATA_SFF=y
635# CONFIG_SATA_SVW is not set 635# CONFIG_SATA_SVW is not set
diff --git a/arch/arm/configs/mini2440_defconfig b/arch/arm/configs/mini2440_defconfig
new file mode 100644
index 000000000000..e49ed40f3be7
--- /dev/null
+++ b/arch/arm/configs/mini2440_defconfig
@@ -0,0 +1,2097 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.30-rc6
4# Wed May 20 12:29:51 2009
5#
6CONFIG_ARM=y
7CONFIG_HAVE_PWM=y
8CONFIG_SYS_SUPPORTS_APM_EMULATION=y
9CONFIG_GENERIC_GPIO=y
10# CONFIG_GENERIC_TIME is not set
11# CONFIG_GENERIC_CLOCKEVENTS is not set
12CONFIG_MMU=y
13CONFIG_NO_IOPORT=y
14CONFIG_GENERIC_HARDIRQS=y
15CONFIG_STACKTRACE_SUPPORT=y
16CONFIG_HAVE_LATENCYTOP_SUPPORT=y
17CONFIG_LOCKDEP_SUPPORT=y
18CONFIG_TRACE_IRQFLAGS_SUPPORT=y
19CONFIG_HARDIRQS_SW_RESEND=y
20CONFIG_GENERIC_IRQ_PROBE=y
21CONFIG_RWSEM_GENERIC_SPINLOCK=y
22# CONFIG_ARCH_HAS_ILOG2_U32 is not set
23# CONFIG_ARCH_HAS_ILOG2_U64 is not set
24CONFIG_GENERIC_HWEIGHT=y
25CONFIG_GENERIC_CALIBRATE_DELAY=y
26CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
27CONFIG_VECTORS_BASE=0xffff0000
28CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
29
30#
31# General setup
32#
33CONFIG_EXPERIMENTAL=y
34CONFIG_BROKEN_ON_SMP=y
35CONFIG_INIT_ENV_ARG_LIMIT=32
36CONFIG_LOCALVERSION=""
37# CONFIG_LOCALVERSION_AUTO is not set
38CONFIG_SWAP=y
39CONFIG_SYSVIPC=y
40CONFIG_SYSVIPC_SYSCTL=y
41CONFIG_POSIX_MQUEUE=y
42CONFIG_POSIX_MQUEUE_SYSCTL=y
43# CONFIG_BSD_PROCESS_ACCT is not set
44# CONFIG_TASKSTATS is not set
45# CONFIG_AUDIT is not set
46
47#
48# RCU Subsystem
49#
50CONFIG_CLASSIC_RCU=y
51# CONFIG_TREE_RCU is not set
52# CONFIG_PREEMPT_RCU is not set
53# CONFIG_TREE_RCU_TRACE is not set
54# CONFIG_PREEMPT_RCU_TRACE is not set
55# CONFIG_IKCONFIG is not set
56CONFIG_LOG_BUF_SHIFT=17
57# CONFIG_GROUP_SCHED is not set
58# CONFIG_CGROUPS is not set
59# CONFIG_SYSFS_DEPRECATED_V2 is not set
60CONFIG_RELAY=y
61CONFIG_NAMESPACES=y
62CONFIG_UTS_NS=y
63CONFIG_IPC_NS=y
64# CONFIG_USER_NS is not set
65# CONFIG_PID_NS is not set
66# CONFIG_NET_NS is not set
67CONFIG_BLK_DEV_INITRD=y
68CONFIG_INITRAMFS_SOURCE=""
69CONFIG_RD_GZIP=y
70CONFIG_RD_BZIP2=y
71CONFIG_RD_LZMA=y
72CONFIG_CC_OPTIMIZE_FOR_SIZE=y
73CONFIG_SYSCTL=y
74CONFIG_ANON_INODES=y
75# CONFIG_EMBEDDED is not set
76CONFIG_UID16=y
77CONFIG_SYSCTL_SYSCALL=y
78CONFIG_KALLSYMS=y
79# CONFIG_KALLSYMS_ALL is not set
80# CONFIG_KALLSYMS_EXTRA_PASS is not set
81CONFIG_STRIP_ASM_SYMS=y
82CONFIG_HOTPLUG=y
83CONFIG_PRINTK=y
84CONFIG_BUG=y
85CONFIG_ELF_CORE=y
86CONFIG_BASE_FULL=y
87CONFIG_FUTEX=y
88CONFIG_EPOLL=y
89CONFIG_SIGNALFD=y
90CONFIG_TIMERFD=y
91CONFIG_EVENTFD=y
92CONFIG_SHMEM=y
93CONFIG_AIO=y
94CONFIG_VM_EVENT_COUNTERS=y
95CONFIG_SLUB_DEBUG=y
96# CONFIG_COMPAT_BRK is not set
97# CONFIG_SLAB is not set
98CONFIG_SLUB=y
99# CONFIG_SLOB is not set
100# CONFIG_PROFILING is not set
101# CONFIG_MARKERS is not set
102CONFIG_HAVE_OPROFILE=y
103# CONFIG_KPROBES is not set
104CONFIG_HAVE_KPROBES=y
105CONFIG_HAVE_KRETPROBES=y
106CONFIG_HAVE_CLK=y
107# CONFIG_SLOW_WORK is not set
108CONFIG_HAVE_GENERIC_DMA_COHERENT=y
109CONFIG_SLABINFO=y
110CONFIG_RT_MUTEXES=y
111CONFIG_BASE_SMALL=0
112CONFIG_MODULES=y
113CONFIG_MODULE_FORCE_LOAD=y
114CONFIG_MODULE_UNLOAD=y
115CONFIG_MODULE_FORCE_UNLOAD=y
116# CONFIG_MODVERSIONS is not set
117# CONFIG_MODULE_SRCVERSION_ALL is not set
118CONFIG_BLOCK=y
119CONFIG_LBD=y
120# CONFIG_BLK_DEV_BSG is not set
121CONFIG_BLK_DEV_INTEGRITY=y
122
123#
124# IO Schedulers
125#
126CONFIG_IOSCHED_NOOP=y
127CONFIG_IOSCHED_AS=y
128CONFIG_IOSCHED_DEADLINE=y
129CONFIG_IOSCHED_CFQ=y
130CONFIG_DEFAULT_AS=y
131# CONFIG_DEFAULT_DEADLINE is not set
132# CONFIG_DEFAULT_CFQ is not set
133# CONFIG_DEFAULT_NOOP is not set
134CONFIG_DEFAULT_IOSCHED="anticipatory"
135CONFIG_FREEZER=y
136
137#
138# System Type
139#
140# CONFIG_ARCH_AAEC2000 is not set
141# CONFIG_ARCH_INTEGRATOR is not set
142# CONFIG_ARCH_REALVIEW is not set
143# CONFIG_ARCH_VERSATILE is not set
144# CONFIG_ARCH_AT91 is not set
145# CONFIG_ARCH_CLPS711X is not set
146# CONFIG_ARCH_EBSA110 is not set
147# CONFIG_ARCH_EP93XX is not set
148# CONFIG_ARCH_GEMINI is not set
149# CONFIG_ARCH_FOOTBRIDGE is not set
150# CONFIG_ARCH_NETX is not set
151# CONFIG_ARCH_H720X is not set
152# CONFIG_ARCH_IMX is not set
153# CONFIG_ARCH_IOP13XX is not set
154# CONFIG_ARCH_IOP32X is not set
155# CONFIG_ARCH_IOP33X is not set
156# CONFIG_ARCH_IXP23XX is not set
157# CONFIG_ARCH_IXP2000 is not set
158# CONFIG_ARCH_IXP4XX is not set
159# CONFIG_ARCH_L7200 is not set
160# CONFIG_ARCH_KIRKWOOD is not set
161# CONFIG_ARCH_KS8695 is not set
162# CONFIG_ARCH_NS9XXX is not set
163# CONFIG_ARCH_LOKI is not set
164# CONFIG_ARCH_MV78XX0 is not set
165# CONFIG_ARCH_MXC is not set
166# CONFIG_ARCH_ORION5X is not set
167# CONFIG_ARCH_PNX4008 is not set
168# CONFIG_ARCH_PXA is not set
169# CONFIG_ARCH_MMP is not set
170# CONFIG_ARCH_RPC is not set
171# CONFIG_ARCH_SA1100 is not set
172CONFIG_ARCH_S3C2410=y
173# CONFIG_ARCH_S3C64XX is not set
174# CONFIG_ARCH_SHARK is not set
175# CONFIG_ARCH_LH7A40X is not set
176# CONFIG_ARCH_DAVINCI is not set
177# CONFIG_ARCH_OMAP is not set
178# CONFIG_ARCH_MSM is not set
179# CONFIG_ARCH_W90X900 is not set
180CONFIG_PLAT_S3C24XX=y
181CONFIG_S3C2410_CLOCK=y
182CONFIG_CPU_S3C244X=y
183CONFIG_S3C24XX_PWM=y
184CONFIG_S3C24XX_GPIO_EXTRA=0
185CONFIG_S3C2410_DMA=y
186# CONFIG_S3C2410_DMA_DEBUG is not set
187CONFIG_S3C24XX_ADC=y
188CONFIG_PLAT_S3C=y
189CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y
190CONFIG_CPU_LLSERIAL_S3C2440=y
191
192#
193# Boot options
194#
195# CONFIG_S3C_BOOT_WATCHDOG is not set
196# CONFIG_S3C_BOOT_ERROR_RESET is not set
197CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
198
199#
200# Power management
201#
202# CONFIG_S3C2410_PM_DEBUG is not set
203# CONFIG_S3C2410_PM_CHECK is not set
204CONFIG_S3C_LOWLEVEL_UART_PORT=0
205CONFIG_S3C_GPIO_SPACE=0
206
207#
208# S3C2400 Machines
209#
210CONFIG_S3C2410_PM=y
211CONFIG_S3C2410_GPIO=y
212
213#
214# S3C2410 Machines
215#
216# CONFIG_ARCH_SMDK2410 is not set
217# CONFIG_ARCH_H1940 is not set
218# CONFIG_MACH_N30 is not set
219# CONFIG_ARCH_BAST is not set
220# CONFIG_MACH_OTOM is not set
221# CONFIG_MACH_AML_M5900 is not set
222# CONFIG_MACH_TCT_HAMMER is not set
223# CONFIG_MACH_VR1000 is not set
224# CONFIG_MACH_QT2410 is not set
225
226#
227# S3C2412 Machines
228#
229# CONFIG_MACH_JIVE is not set
230# CONFIG_MACH_SMDK2413 is not set
231# CONFIG_MACH_SMDK2412 is not set
232# CONFIG_MACH_VSTMS is not set
233CONFIG_CPU_S3C2440=y
234CONFIG_S3C2440_DMA=y
235
236#
237# S3C2440 Machines
238#
239# CONFIG_MACH_ANUBIS is not set
240# CONFIG_MACH_OSIRIS is not set
241# CONFIG_MACH_RX3715 is not set
242# CONFIG_ARCH_S3C2440 is not set
243# CONFIG_MACH_NEXCODER_2440 is not set
244# CONFIG_MACH_AT2440EVB is not set
245CONFIG_MACH_MINI2440=y
246
247#
248# S3C2442 Machines
249#
250
251#
252# S3C2443 Machines
253#
254# CONFIG_MACH_SMDK2443 is not set
255
256#
257# Processor Type
258#
259CONFIG_CPU_32=y
260CONFIG_CPU_ARM920T=y
261CONFIG_CPU_32v4T=y
262CONFIG_CPU_ABRT_EV4T=y
263CONFIG_CPU_PABRT_NOIFAR=y
264CONFIG_CPU_CACHE_V4WT=y
265CONFIG_CPU_CACHE_VIVT=y
266CONFIG_CPU_COPY_V4WB=y
267CONFIG_CPU_TLB_V4WBI=y
268CONFIG_CPU_CP15=y
269CONFIG_CPU_CP15_MMU=y
270
271#
272# Processor Features
273#
274CONFIG_ARM_THUMB=y
275# CONFIG_CPU_ICACHE_DISABLE is not set
276# CONFIG_CPU_DCACHE_DISABLE is not set
277# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
278# CONFIG_OUTER_CACHE is not set
279
280#
281# Bus support
282#
283# CONFIG_PCI_SYSCALL is not set
284# CONFIG_ARCH_SUPPORTS_MSI is not set
285# CONFIG_PCCARD is not set
286
287#
288# Kernel Features
289#
290CONFIG_VMSPLIT_3G=y
291# CONFIG_VMSPLIT_2G is not set
292# CONFIG_VMSPLIT_1G is not set
293CONFIG_PAGE_OFFSET=0xC0000000
294# CONFIG_PREEMPT is not set
295CONFIG_HZ=200
296CONFIG_AEABI=y
297# CONFIG_OABI_COMPAT is not set
298CONFIG_ARCH_FLATMEM_HAS_HOLES=y
299# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
300# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
301# CONFIG_HIGHMEM is not set
302CONFIG_SELECT_MEMORY_MODEL=y
303CONFIG_FLATMEM_MANUAL=y
304# CONFIG_DISCONTIGMEM_MANUAL is not set
305# CONFIG_SPARSEMEM_MANUAL is not set
306CONFIG_FLATMEM=y
307CONFIG_FLAT_NODE_MEM_MAP=y
308CONFIG_PAGEFLAGS_EXTENDED=y
309CONFIG_SPLIT_PTLOCK_CPUS=4096
310# CONFIG_PHYS_ADDR_T_64BIT is not set
311CONFIG_ZONE_DMA_FLAG=0
312CONFIG_VIRT_TO_BUS=y
313CONFIG_UNEVICTABLE_LRU=y
314CONFIG_HAVE_MLOCK=y
315CONFIG_HAVE_MLOCKED_PAGE_BIT=y
316CONFIG_ALIGNMENT_TRAP=y
317
318#
319# Boot options
320#
321CONFIG_ZBOOT_ROM_TEXT=0
322CONFIG_ZBOOT_ROM_BSS=0
323CONFIG_CMDLINE=""
324# CONFIG_XIP_KERNEL is not set
325CONFIG_KEXEC=y
326CONFIG_ATAGS_PROC=y
327
328#
329# CPU Power Management
330#
331CONFIG_CPU_IDLE=y
332CONFIG_CPU_IDLE_GOV_LADDER=y
333
334#
335# Floating point emulation
336#
337
338#
339# At least one emulation must be selected
340#
341
342#
343# Userspace binary formats
344#
345CONFIG_BINFMT_ELF=y
346# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
347CONFIG_HAVE_AOUT=y
348CONFIG_BINFMT_AOUT=m
349CONFIG_BINFMT_MISC=m
350
351#
352# Power management options
353#
354CONFIG_PM=y
355# CONFIG_PM_DEBUG is not set
356CONFIG_PM_SLEEP=y
357CONFIG_SUSPEND=y
358CONFIG_SUSPEND_FREEZER=y
359CONFIG_APM_EMULATION=y
360CONFIG_ARCH_SUSPEND_POSSIBLE=y
361CONFIG_NET=y
362
363#
364# Networking options
365#
366CONFIG_PACKET=y
367CONFIG_PACKET_MMAP=y
368CONFIG_UNIX=y
369CONFIG_XFRM=y
370CONFIG_XFRM_USER=m
371# CONFIG_XFRM_SUB_POLICY is not set
372# CONFIG_XFRM_MIGRATE is not set
373# CONFIG_XFRM_STATISTICS is not set
374CONFIG_NET_KEY=m
375# CONFIG_NET_KEY_MIGRATE is not set
376CONFIG_INET=y
377CONFIG_IP_MULTICAST=y
378CONFIG_IP_ADVANCED_ROUTER=y
379CONFIG_ASK_IP_FIB_HASH=y
380# CONFIG_IP_FIB_TRIE is not set
381CONFIG_IP_FIB_HASH=y
382CONFIG_IP_MULTIPLE_TABLES=y
383CONFIG_IP_ROUTE_MULTIPATH=y
384CONFIG_IP_ROUTE_VERBOSE=y
385CONFIG_IP_PNP=y
386CONFIG_IP_PNP_DHCP=y
387CONFIG_IP_PNP_BOOTP=y
388CONFIG_IP_PNP_RARP=y
389# CONFIG_NET_IPIP is not set
390# CONFIG_NET_IPGRE is not set
391CONFIG_IP_MROUTE=y
392CONFIG_IP_PIMSM_V1=y
393CONFIG_IP_PIMSM_V2=y
394# CONFIG_ARPD is not set
395CONFIG_SYN_COOKIES=y
396# CONFIG_INET_AH is not set
397# CONFIG_INET_ESP is not set
398# CONFIG_INET_IPCOMP is not set
399# CONFIG_INET_XFRM_TUNNEL is not set
400# CONFIG_INET_TUNNEL is not set
401# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
402# CONFIG_INET_XFRM_MODE_TUNNEL is not set
403# CONFIG_INET_XFRM_MODE_BEET is not set
404# CONFIG_INET_LRO is not set
405CONFIG_INET_DIAG=m
406CONFIG_INET_TCP_DIAG=m
407# CONFIG_TCP_CONG_ADVANCED is not set
408CONFIG_TCP_CONG_CUBIC=y
409CONFIG_DEFAULT_TCP_CONG="cubic"
410# CONFIG_TCP_MD5SIG is not set
411# CONFIG_IPV6 is not set
412# CONFIG_NETWORK_SECMARK is not set
413CONFIG_NETFILTER=y
414# CONFIG_NETFILTER_DEBUG is not set
415CONFIG_NETFILTER_ADVANCED=y
416CONFIG_BRIDGE_NETFILTER=y
417
418#
419# Core Netfilter Configuration
420#
421# CONFIG_NETFILTER_NETLINK_QUEUE is not set
422# CONFIG_NETFILTER_NETLINK_LOG is not set
423# CONFIG_NF_CONNTRACK is not set
424# CONFIG_NETFILTER_XTABLES is not set
425# CONFIG_IP_VS is not set
426
427#
428# IP: Netfilter Configuration
429#
430# CONFIG_NF_DEFRAG_IPV4 is not set
431# CONFIG_IP_NF_QUEUE is not set
432# CONFIG_IP_NF_IPTABLES is not set
433# CONFIG_IP_NF_ARPTABLES is not set
434# CONFIG_BRIDGE_NF_EBTABLES is not set
435# CONFIG_IP_DCCP is not set
436# CONFIG_IP_SCTP is not set
437# CONFIG_TIPC is not set
438# CONFIG_ATM is not set
439CONFIG_STP=m
440CONFIG_GARP=m
441CONFIG_BRIDGE=m
442# CONFIG_NET_DSA is not set
443CONFIG_VLAN_8021Q=m
444CONFIG_VLAN_8021Q_GVRP=y
445# CONFIG_DECNET is not set
446CONFIG_LLC=m
447# CONFIG_LLC2 is not set
448# CONFIG_IPX is not set
449# CONFIG_ATALK is not set
450# CONFIG_X25 is not set
451# CONFIG_LAPB is not set
452# CONFIG_ECONET is not set
453# CONFIG_WAN_ROUTER is not set
454# CONFIG_PHONET is not set
455# CONFIG_NET_SCHED is not set
456# CONFIG_DCB is not set
457
458#
459# Network testing
460#
461CONFIG_NET_PKTGEN=m
462# CONFIG_HAMRADIO is not set
463# CONFIG_CAN is not set
464# CONFIG_IRDA is not set
465CONFIG_BT=m
466CONFIG_BT_L2CAP=m
467CONFIG_BT_SCO=m
468CONFIG_BT_RFCOMM=m
469CONFIG_BT_RFCOMM_TTY=y
470CONFIG_BT_BNEP=m
471CONFIG_BT_BNEP_MC_FILTER=y
472CONFIG_BT_BNEP_PROTO_FILTER=y
473CONFIG_BT_HIDP=m
474
475#
476# Bluetooth device drivers
477#
478CONFIG_BT_HCIBTUSB=m
479CONFIG_BT_HCIBTSDIO=m
480CONFIG_BT_HCIUART=m
481CONFIG_BT_HCIUART_H4=y
482CONFIG_BT_HCIUART_BCSP=y
483CONFIG_BT_HCIUART_LL=y
484CONFIG_BT_HCIBCM203X=m
485CONFIG_BT_HCIBPA10X=m
486CONFIG_BT_HCIBFUSB=m
487CONFIG_BT_HCIVHCI=m
488# CONFIG_AF_RXRPC is not set
489CONFIG_FIB_RULES=y
490CONFIG_WIRELESS=y
491CONFIG_CFG80211=m
492CONFIG_CFG80211_REG_DEBUG=y
493CONFIG_WIRELESS_OLD_REGULATORY=y
494CONFIG_WIRELESS_EXT=y
495CONFIG_WIRELESS_EXT_SYSFS=y
496CONFIG_LIB80211=m
497CONFIG_LIB80211_CRYPT_WEP=m
498CONFIG_LIB80211_CRYPT_CCMP=m
499CONFIG_LIB80211_CRYPT_TKIP=m
500# CONFIG_LIB80211_DEBUG is not set
501CONFIG_MAC80211=m
502
503#
504# Rate control algorithm selection
505#
506CONFIG_MAC80211_RC_MINSTREL=y
507# CONFIG_MAC80211_RC_DEFAULT_PID is not set
508CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
509CONFIG_MAC80211_RC_DEFAULT="minstrel"
510CONFIG_MAC80211_MESH=y
511CONFIG_MAC80211_LEDS=y
512# CONFIG_MAC80211_DEBUGFS is not set
513# CONFIG_MAC80211_DEBUG_MENU is not set
514# CONFIG_WIMAX is not set
515# CONFIG_RFKILL is not set
516# CONFIG_NET_9P is not set
517
518#
519# Device Drivers
520#
521
522#
523# Generic Driver Options
524#
525CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
526CONFIG_STANDALONE=y
527CONFIG_PREVENT_FIRMWARE_BUILD=y
528CONFIG_FW_LOADER=y
529# CONFIG_FIRMWARE_IN_KERNEL is not set
530CONFIG_EXTRA_FIRMWARE=""
531# CONFIG_DEBUG_DRIVER is not set
532# CONFIG_DEBUG_DEVRES is not set
533# CONFIG_SYS_HYPERVISOR is not set
534CONFIG_CONNECTOR=m
535CONFIG_MTD=y
536# CONFIG_MTD_DEBUG is not set
537CONFIG_MTD_CONCAT=y
538CONFIG_MTD_PARTITIONS=y
539# CONFIG_MTD_TESTS is not set
540# CONFIG_MTD_REDBOOT_PARTS is not set
541CONFIG_MTD_CMDLINE_PARTS=y
542# CONFIG_MTD_AFS_PARTS is not set
543# CONFIG_MTD_AR7_PARTS is not set
544
545#
546# User Modules And Translation Layers
547#
548CONFIG_MTD_CHAR=y
549CONFIG_MTD_BLKDEVS=y
550CONFIG_MTD_BLOCK=y
551CONFIG_FTL=y
552CONFIG_NFTL=y
553CONFIG_NFTL_RW=y
554CONFIG_INFTL=y
555CONFIG_RFD_FTL=y
556# CONFIG_SSFDC is not set
557# CONFIG_MTD_OOPS is not set
558
559#
560# RAM/ROM/Flash chip drivers
561#
562CONFIG_MTD_CFI=y
563CONFIG_MTD_JEDECPROBE=y
564CONFIG_MTD_GEN_PROBE=y
565# CONFIG_MTD_CFI_ADV_OPTIONS is not set
566CONFIG_MTD_MAP_BANK_WIDTH_1=y
567CONFIG_MTD_MAP_BANK_WIDTH_2=y
568CONFIG_MTD_MAP_BANK_WIDTH_4=y
569# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
570# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
571# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
572CONFIG_MTD_CFI_I1=y
573CONFIG_MTD_CFI_I2=y
574# CONFIG_MTD_CFI_I4 is not set
575# CONFIG_MTD_CFI_I8 is not set
576# CONFIG_MTD_CFI_INTELEXT is not set
577CONFIG_MTD_CFI_AMDSTD=y
578CONFIG_MTD_CFI_STAA=y
579CONFIG_MTD_CFI_UTIL=y
580CONFIG_MTD_RAM=y
581CONFIG_MTD_ROM=y
582# CONFIG_MTD_ABSENT is not set
583
584#
585# Mapping drivers for chip access
586#
587# CONFIG_MTD_COMPLEX_MAPPINGS is not set
588# CONFIG_MTD_PHYSMAP is not set
589# CONFIG_MTD_ARM_INTEGRATOR is not set
590# CONFIG_MTD_IMPA7 is not set
591# CONFIG_MTD_PLATRAM is not set
592
593#
594# Self-contained MTD device drivers
595#
596# CONFIG_MTD_DATAFLASH is not set
597# CONFIG_MTD_M25P80 is not set
598# CONFIG_MTD_SLRAM is not set
599# CONFIG_MTD_PHRAM is not set
600# CONFIG_MTD_MTDRAM is not set
601# CONFIG_MTD_BLOCK2MTD is not set
602
603#
604# Disk-On-Chip Device Drivers
605#
606# CONFIG_MTD_DOC2000 is not set
607# CONFIG_MTD_DOC2001 is not set
608# CONFIG_MTD_DOC2001PLUS is not set
609CONFIG_MTD_NAND=y
610CONFIG_MTD_NAND_VERIFY_WRITE=y
611# CONFIG_MTD_NAND_ECC_SMC is not set
612# CONFIG_MTD_NAND_MUSEUM_IDS is not set
613# CONFIG_MTD_NAND_GPIO is not set
614CONFIG_MTD_NAND_IDS=y
615CONFIG_MTD_NAND_S3C2410=y
616# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
617# CONFIG_MTD_NAND_S3C2410_HWECC is not set
618# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
619# CONFIG_MTD_NAND_DISKONCHIP is not set
620# CONFIG_MTD_NAND_NANDSIM is not set
621CONFIG_MTD_NAND_PLATFORM=y
622# CONFIG_MTD_ALAUDA is not set
623# CONFIG_MTD_ONENAND is not set
624
625#
626# LPDDR flash memory drivers
627#
628CONFIG_MTD_LPDDR=y
629CONFIG_MTD_QINFO_PROBE=y
630
631#
632# UBI - Unsorted block images
633#
634# CONFIG_MTD_UBI is not set
635# CONFIG_PARPORT is not set
636CONFIG_BLK_DEV=y
637# CONFIG_BLK_DEV_COW_COMMON is not set
638CONFIG_BLK_DEV_LOOP=m
639# CONFIG_BLK_DEV_CRYPTOLOOP is not set
640CONFIG_BLK_DEV_NBD=m
641# CONFIG_BLK_DEV_UB is not set
642CONFIG_BLK_DEV_RAM=y
643CONFIG_BLK_DEV_RAM_COUNT=16
644CONFIG_BLK_DEV_RAM_SIZE=65536
645# CONFIG_BLK_DEV_XIP is not set
646CONFIG_CDROM_PKTCDVD=m
647CONFIG_CDROM_PKTCDVD_BUFFERS=8
648# CONFIG_CDROM_PKTCDVD_WCACHE is not set
649# CONFIG_ATA_OVER_ETH is not set
650CONFIG_MISC_DEVICES=y
651# CONFIG_ICS932S401 is not set
652# CONFIG_ENCLOSURE_SERVICES is not set
653# CONFIG_ISL29003 is not set
654# CONFIG_C2PORT is not set
655
656#
657# EEPROM support
658#
659CONFIG_EEPROM_AT24=y
660# CONFIG_EEPROM_AT25 is not set
661# CONFIG_EEPROM_LEGACY is not set
662# CONFIG_EEPROM_93CX6 is not set
663CONFIG_HAVE_IDE=y
664# CONFIG_IDE is not set
665
666#
667# SCSI device support
668#
669# CONFIG_RAID_ATTRS is not set
670CONFIG_SCSI=m
671CONFIG_SCSI_DMA=y
672# CONFIG_SCSI_TGT is not set
673# CONFIG_SCSI_NETLINK is not set
674# CONFIG_SCSI_PROC_FS is not set
675
676#
677# SCSI support type (disk, tape, CD-ROM)
678#
679CONFIG_BLK_DEV_SD=m
680# CONFIG_CHR_DEV_ST is not set
681# CONFIG_CHR_DEV_OSST is not set
682# CONFIG_BLK_DEV_SR is not set
683CONFIG_CHR_DEV_SG=m
684# CONFIG_CHR_DEV_SCH is not set
685
686#
687# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
688#
689# CONFIG_SCSI_MULTI_LUN is not set
690# CONFIG_SCSI_CONSTANTS is not set
691# CONFIG_SCSI_LOGGING is not set
692# CONFIG_SCSI_SCAN_ASYNC is not set
693CONFIG_SCSI_WAIT_SCAN=m
694
695#
696# SCSI Transports
697#
698# CONFIG_SCSI_SPI_ATTRS is not set
699# CONFIG_SCSI_FC_ATTRS is not set
700# CONFIG_SCSI_ISCSI_ATTRS is not set
701# CONFIG_SCSI_SAS_LIBSAS is not set
702# CONFIG_SCSI_SRP_ATTRS is not set
703# CONFIG_SCSI_LOWLEVEL is not set
704# CONFIG_SCSI_DH is not set
705# CONFIG_SCSI_OSD_INITIATOR is not set
706# CONFIG_ATA is not set
707# CONFIG_MD is not set
708CONFIG_NETDEVICES=y
709CONFIG_COMPAT_NET_DEV_OPS=y
710# CONFIG_DUMMY is not set
711# CONFIG_BONDING is not set
712# CONFIG_MACVLAN is not set
713# CONFIG_EQUALIZER is not set
714CONFIG_TUN=m
715# CONFIG_VETH is not set
716# CONFIG_PHYLIB is not set
717CONFIG_NET_ETHERNET=y
718CONFIG_MII=y
719# CONFIG_AX88796 is not set
720# CONFIG_SMC91X is not set
721CONFIG_DM9000=y
722CONFIG_DM9000_DEBUGLEVEL=4
723# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
724# CONFIG_ENC28J60 is not set
725# CONFIG_ETHOC is not set
726# CONFIG_SMC911X is not set
727# CONFIG_SMSC911X is not set
728# CONFIG_DNET is not set
729# CONFIG_IBM_NEW_EMAC_ZMII is not set
730# CONFIG_IBM_NEW_EMAC_RGMII is not set
731# CONFIG_IBM_NEW_EMAC_TAH is not set
732# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
733# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
734# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
735# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
736# CONFIG_B44 is not set
737# CONFIG_NETDEV_1000 is not set
738# CONFIG_NETDEV_10000 is not set
739
740#
741# Wireless LAN
742#
743# CONFIG_WLAN_PRE80211 is not set
744CONFIG_WLAN_80211=y
745CONFIG_LIBERTAS=m
746# CONFIG_LIBERTAS_USB is not set
747CONFIG_LIBERTAS_SDIO=m
748# CONFIG_LIBERTAS_SPI is not set
749# CONFIG_LIBERTAS_DEBUG is not set
750# CONFIG_LIBERTAS_THINFIRM is not set
751# CONFIG_AT76C50X_USB is not set
752# CONFIG_USB_ZD1201 is not set
753# CONFIG_USB_NET_RNDIS_WLAN is not set
754# CONFIG_RTL8187 is not set
755# CONFIG_MAC80211_HWSIM is not set
756# CONFIG_P54_COMMON is not set
757# CONFIG_AR9170_USB is not set
758CONFIG_HOSTAP=m
759CONFIG_HOSTAP_FIRMWARE=y
760CONFIG_HOSTAP_FIRMWARE_NVRAM=y
761# CONFIG_B43 is not set
762# CONFIG_B43LEGACY is not set
763CONFIG_ZD1211RW=m
764CONFIG_ZD1211RW_DEBUG=y
765# CONFIG_RT2X00 is not set
766
767#
768# Enable WiMAX (Networking options) to see the WiMAX drivers
769#
770
771#
772# USB Network Adapters
773#
774# CONFIG_USB_CATC is not set
775# CONFIG_USB_KAWETH is not set
776# CONFIG_USB_PEGASUS is not set
777# CONFIG_USB_RTL8150 is not set
778# CONFIG_USB_USBNET is not set
779# CONFIG_WAN is not set
780CONFIG_PPP=m
781CONFIG_PPP_MULTILINK=y
782CONFIG_PPP_FILTER=y
783CONFIG_PPP_ASYNC=m
784CONFIG_PPP_SYNC_TTY=m
785CONFIG_PPP_DEFLATE=m
786CONFIG_PPP_BSDCOMP=m
787CONFIG_PPP_MPPE=m
788# CONFIG_PPPOE is not set
789# CONFIG_PPPOL2TP is not set
790# CONFIG_SLIP is not set
791CONFIG_SLHC=m
792# CONFIG_NETCONSOLE is not set
793# CONFIG_NETPOLL is not set
794# CONFIG_NET_POLL_CONTROLLER is not set
795# CONFIG_ISDN is not set
796
797#
798# Input device support
799#
800CONFIG_INPUT=y
801CONFIG_INPUT_FF_MEMLESS=y
802# CONFIG_INPUT_POLLDEV is not set
803
804#
805# Userland interfaces
806#
807CONFIG_INPUT_MOUSEDEV=y
808CONFIG_INPUT_MOUSEDEV_PSAUX=y
809CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
810CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
811# CONFIG_INPUT_JOYDEV is not set
812CONFIG_INPUT_EVDEV=y
813CONFIG_INPUT_EVBUG=m
814
815#
816# Input Device Drivers
817#
818CONFIG_INPUT_KEYBOARD=y
819# CONFIG_KEYBOARD_ATKBD is not set
820# CONFIG_KEYBOARD_SUNKBD is not set
821# CONFIG_KEYBOARD_LKKBD is not set
822# CONFIG_KEYBOARD_XTKBD is not set
823# CONFIG_KEYBOARD_NEWTON is not set
824# CONFIG_KEYBOARD_STOWAWAY is not set
825CONFIG_KEYBOARD_GPIO=y
826CONFIG_INPUT_MOUSE=y
827CONFIG_MOUSE_PS2=y
828CONFIG_MOUSE_PS2_ALPS=y
829CONFIG_MOUSE_PS2_LOGIPS2PP=y
830CONFIG_MOUSE_PS2_SYNAPTICS=y
831CONFIG_MOUSE_PS2_TRACKPOINT=y
832# CONFIG_MOUSE_PS2_ELANTECH is not set
833# CONFIG_MOUSE_PS2_TOUCHKIT is not set
834# CONFIG_MOUSE_SERIAL is not set
835# CONFIG_MOUSE_APPLETOUCH is not set
836# CONFIG_MOUSE_BCM5974 is not set
837# CONFIG_MOUSE_VSXXXAA is not set
838# CONFIG_MOUSE_GPIO is not set
839# CONFIG_INPUT_JOYSTICK is not set
840# CONFIG_INPUT_TABLET is not set
841CONFIG_INPUT_TOUCHSCREEN=y
842# CONFIG_TOUCHSCREEN_ADS7846 is not set
843# CONFIG_TOUCHSCREEN_AD7877 is not set
844# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
845# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
846# CONFIG_TOUCHSCREEN_AD7879 is not set
847# CONFIG_TOUCHSCREEN_FUJITSU is not set
848# CONFIG_TOUCHSCREEN_GUNZE is not set
849# CONFIG_TOUCHSCREEN_ELO is not set
850# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
851# CONFIG_TOUCHSCREEN_MTOUCH is not set
852# CONFIG_TOUCHSCREEN_INEXIO is not set
853# CONFIG_TOUCHSCREEN_MK712 is not set
854# CONFIG_TOUCHSCREEN_PENMOUNT is not set
855# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
856# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
857# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
858# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
859# CONFIG_TOUCHSCREEN_TSC2007 is not set
860# CONFIG_INPUT_MISC is not set
861
862#
863# Hardware I/O ports
864#
865CONFIG_SERIO=y
866CONFIG_SERIO_SERPORT=y
867CONFIG_SERIO_LIBPS2=y
868CONFIG_SERIO_RAW=y
869# CONFIG_GAMEPORT is not set
870
871#
872# Character devices
873#
874CONFIG_VT=y
875CONFIG_CONSOLE_TRANSLATIONS=y
876CONFIG_VT_CONSOLE=y
877CONFIG_HW_CONSOLE=y
878CONFIG_VT_HW_CONSOLE_BINDING=y
879CONFIG_DEVKMEM=y
880# CONFIG_SERIAL_NONSTANDARD is not set
881
882#
883# Serial drivers
884#
885# CONFIG_SERIAL_8250 is not set
886
887#
888# Non-8250 serial port support
889#
890CONFIG_SERIAL_SAMSUNG=y
891CONFIG_SERIAL_SAMSUNG_UARTS=3
892CONFIG_SERIAL_SAMSUNG_CONSOLE=y
893CONFIG_SERIAL_S3C2440=y
894# CONFIG_SERIAL_MAX3100 is not set
895CONFIG_SERIAL_CORE=y
896CONFIG_SERIAL_CORE_CONSOLE=y
897CONFIG_UNIX98_PTYS=y
898# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
899CONFIG_LEGACY_PTYS=y
900CONFIG_LEGACY_PTY_COUNT=128
901CONFIG_IPMI_HANDLER=m
902# CONFIG_IPMI_PANIC_EVENT is not set
903CONFIG_IPMI_DEVICE_INTERFACE=m
904CONFIG_IPMI_SI=m
905CONFIG_IPMI_WATCHDOG=m
906CONFIG_IPMI_POWEROFF=m
907CONFIG_HW_RANDOM=y
908# CONFIG_HW_RANDOM_TIMERIOMEM is not set
909# CONFIG_R3964 is not set
910# CONFIG_RAW_DRIVER is not set
911# CONFIG_TCG_TPM is not set
912CONFIG_I2C=y
913CONFIG_I2C_BOARDINFO=y
914CONFIG_I2C_CHARDEV=y
915CONFIG_I2C_HELPER_AUTO=y
916CONFIG_I2C_ALGOBIT=y
917
918#
919# I2C Hardware Bus support
920#
921
922#
923# I2C system bus drivers (mostly embedded / system-on-chip)
924#
925# CONFIG_I2C_GPIO is not set
926# CONFIG_I2C_OCORES is not set
927CONFIG_I2C_S3C2410=y
928CONFIG_I2C_SIMTEC=y
929
930#
931# External I2C/SMBus adapter drivers
932#
933# CONFIG_I2C_PARPORT_LIGHT is not set
934# CONFIG_I2C_TAOS_EVM is not set
935# CONFIG_I2C_TINY_USB is not set
936
937#
938# Other I2C/SMBus bus drivers
939#
940# CONFIG_I2C_PCA_PLATFORM is not set
941# CONFIG_I2C_STUB is not set
942
943#
944# Miscellaneous I2C Chip support
945#
946# CONFIG_DS1682 is not set
947# CONFIG_SENSORS_PCF8574 is not set
948# CONFIG_PCF8575 is not set
949# CONFIG_SENSORS_PCA9539 is not set
950# CONFIG_SENSORS_MAX6875 is not set
951CONFIG_SENSORS_TSL2550=m
952# CONFIG_I2C_DEBUG_CORE is not set
953# CONFIG_I2C_DEBUG_ALGO is not set
954# CONFIG_I2C_DEBUG_BUS is not set
955# CONFIG_I2C_DEBUG_CHIP is not set
956CONFIG_SPI=y
957# CONFIG_SPI_DEBUG is not set
958CONFIG_SPI_MASTER=y
959
960#
961# SPI Master Controller Drivers
962#
963CONFIG_SPI_BITBANG=y
964# CONFIG_SPI_GPIO is not set
965CONFIG_SPI_S3C24XX=y
966# CONFIG_SPI_S3C24XX_GPIO is not set
967
968#
969# SPI Protocol Masters
970#
971CONFIG_SPI_SPIDEV=y
972# CONFIG_SPI_TLE62X0 is not set
973CONFIG_ARCH_REQUIRE_GPIOLIB=y
974CONFIG_GPIOLIB=y
975# CONFIG_DEBUG_GPIO is not set
976CONFIG_GPIO_SYSFS=y
977
978#
979# Memory mapped GPIO expanders:
980#
981
982#
983# I2C GPIO expanders:
984#
985# CONFIG_GPIO_MAX732X is not set
986# CONFIG_GPIO_PCA953X is not set
987# CONFIG_GPIO_PCF857X is not set
988
989#
990# PCI GPIO expanders:
991#
992
993#
994# SPI GPIO expanders:
995#
996# CONFIG_GPIO_MAX7301 is not set
997# CONFIG_GPIO_MCP23S08 is not set
998# CONFIG_W1 is not set
999# CONFIG_POWER_SUPPLY is not set
1000CONFIG_HWMON=y
1001# CONFIG_HWMON_VID is not set
1002# CONFIG_SENSORS_AD7414 is not set
1003# CONFIG_SENSORS_AD7418 is not set
1004# CONFIG_SENSORS_ADCXX is not set
1005# CONFIG_SENSORS_ADM1021 is not set
1006# CONFIG_SENSORS_ADM1025 is not set
1007# CONFIG_SENSORS_ADM1026 is not set
1008# CONFIG_SENSORS_ADM1029 is not set
1009# CONFIG_SENSORS_ADM1031 is not set
1010# CONFIG_SENSORS_ADM9240 is not set
1011# CONFIG_SENSORS_ADT7462 is not set
1012# CONFIG_SENSORS_ADT7470 is not set
1013# CONFIG_SENSORS_ADT7473 is not set
1014# CONFIG_SENSORS_ADT7475 is not set
1015# CONFIG_SENSORS_ATXP1 is not set
1016# CONFIG_SENSORS_DS1621 is not set
1017# CONFIG_SENSORS_F71805F is not set
1018# CONFIG_SENSORS_F71882FG is not set
1019# CONFIG_SENSORS_F75375S is not set
1020# CONFIG_SENSORS_G760A is not set
1021# CONFIG_SENSORS_GL518SM is not set
1022# CONFIG_SENSORS_GL520SM is not set
1023# CONFIG_SENSORS_IBMAEM is not set
1024# CONFIG_SENSORS_IBMPEX is not set
1025# CONFIG_SENSORS_IT87 is not set
1026# CONFIG_SENSORS_LM63 is not set
1027# CONFIG_SENSORS_LM70 is not set
1028CONFIG_SENSORS_LM75=y
1029# CONFIG_SENSORS_LM77 is not set
1030# CONFIG_SENSORS_LM78 is not set
1031# CONFIG_SENSORS_LM80 is not set
1032# CONFIG_SENSORS_LM83 is not set
1033# CONFIG_SENSORS_LM85 is not set
1034# CONFIG_SENSORS_LM87 is not set
1035# CONFIG_SENSORS_LM90 is not set
1036# CONFIG_SENSORS_LM92 is not set
1037# CONFIG_SENSORS_LM93 is not set
1038# CONFIG_SENSORS_LTC4215 is not set
1039# CONFIG_SENSORS_LTC4245 is not set
1040# CONFIG_SENSORS_LM95241 is not set
1041# CONFIG_SENSORS_MAX1111 is not set
1042# CONFIG_SENSORS_MAX1619 is not set
1043# CONFIG_SENSORS_MAX6650 is not set
1044# CONFIG_SENSORS_PC87360 is not set
1045# CONFIG_SENSORS_PC87427 is not set
1046# CONFIG_SENSORS_PCF8591 is not set
1047# CONFIG_SENSORS_SHT15 is not set
1048# CONFIG_SENSORS_DME1737 is not set
1049# CONFIG_SENSORS_SMSC47M1 is not set
1050# CONFIG_SENSORS_SMSC47M192 is not set
1051# CONFIG_SENSORS_SMSC47B397 is not set
1052# CONFIG_SENSORS_ADS7828 is not set
1053# CONFIG_SENSORS_THMC50 is not set
1054# CONFIG_SENSORS_VT1211 is not set
1055# CONFIG_SENSORS_W83781D is not set
1056# CONFIG_SENSORS_W83791D is not set
1057# CONFIG_SENSORS_W83792D is not set
1058# CONFIG_SENSORS_W83793 is not set
1059# CONFIG_SENSORS_W83L785TS is not set
1060# CONFIG_SENSORS_W83L786NG is not set
1061# CONFIG_SENSORS_W83627HF is not set
1062# CONFIG_SENSORS_W83627EHF is not set
1063# CONFIG_SENSORS_LIS3_SPI is not set
1064# CONFIG_HWMON_DEBUG_CHIP is not set
1065CONFIG_THERMAL=m
1066# CONFIG_THERMAL_HWMON is not set
1067CONFIG_WATCHDOG=y
1068# CONFIG_WATCHDOG_NOWAYOUT is not set
1069
1070#
1071# Watchdog Device Drivers
1072#
1073# CONFIG_SOFT_WATCHDOG is not set
1074CONFIG_S3C2410_WATCHDOG=y
1075
1076#
1077# USB-based Watchdog Cards
1078#
1079# CONFIG_USBPCWATCHDOG is not set
1080CONFIG_SSB_POSSIBLE=y
1081
1082#
1083# Sonics Silicon Backplane
1084#
1085# CONFIG_SSB is not set
1086
1087#
1088# Multifunction device drivers
1089#
1090# CONFIG_MFD_CORE is not set
1091# CONFIG_MFD_SM501 is not set
1092# CONFIG_MFD_ASIC3 is not set
1093# CONFIG_HTC_EGPIO is not set
1094# CONFIG_HTC_PASIC3 is not set
1095# CONFIG_TPS65010 is not set
1096# CONFIG_TWL4030_CORE is not set
1097# CONFIG_MFD_TMIO is not set
1098# CONFIG_MFD_T7L66XB is not set
1099# CONFIG_MFD_TC6387XB is not set
1100# CONFIG_MFD_TC6393XB is not set
1101# CONFIG_PMIC_DA903X is not set
1102# CONFIG_MFD_WM8400 is not set
1103# CONFIG_MFD_WM8350_I2C is not set
1104# CONFIG_MFD_PCF50633 is not set
1105
1106#
1107# Multimedia devices
1108#
1109
1110#
1111# Multimedia core support
1112#
1113CONFIG_VIDEO_DEV=m
1114CONFIG_VIDEO_V4L2_COMMON=m
1115CONFIG_VIDEO_ALLOW_V4L1=y
1116CONFIG_VIDEO_V4L1_COMPAT=y
1117CONFIG_DVB_CORE=m
1118CONFIG_VIDEO_MEDIA=m
1119
1120#
1121# Multimedia drivers
1122#
1123# CONFIG_MEDIA_ATTACH is not set
1124CONFIG_MEDIA_TUNER=m
1125# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
1126CONFIG_MEDIA_TUNER_SIMPLE=m
1127CONFIG_MEDIA_TUNER_TDA8290=m
1128CONFIG_MEDIA_TUNER_TDA9887=m
1129CONFIG_MEDIA_TUNER_TEA5761=m
1130CONFIG_MEDIA_TUNER_TEA5767=m
1131CONFIG_MEDIA_TUNER_MT20XX=m
1132CONFIG_MEDIA_TUNER_XC2028=m
1133CONFIG_MEDIA_TUNER_XC5000=m
1134CONFIG_MEDIA_TUNER_MC44S803=m
1135CONFIG_VIDEO_V4L2=m
1136CONFIG_VIDEO_V4L1=m
1137CONFIG_VIDEOBUF_GEN=m
1138CONFIG_VIDEO_CAPTURE_DRIVERS=y
1139# CONFIG_VIDEO_ADV_DEBUG is not set
1140# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
1141CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
1142# CONFIG_VIDEO_VIVI is not set
1143# CONFIG_VIDEO_CPIA is not set
1144# CONFIG_VIDEO_CPIA2 is not set
1145# CONFIG_VIDEO_SAA5246A is not set
1146# CONFIG_VIDEO_SAA5249 is not set
1147# CONFIG_VIDEO_AU0828 is not set
1148CONFIG_SOC_CAMERA=m
1149# CONFIG_SOC_CAMERA_MT9M001 is not set
1150# CONFIG_SOC_CAMERA_MT9M111 is not set
1151# CONFIG_SOC_CAMERA_MT9T031 is not set
1152# CONFIG_SOC_CAMERA_MT9V022 is not set
1153# CONFIG_SOC_CAMERA_TW9910 is not set
1154CONFIG_SOC_CAMERA_PLATFORM=m
1155# CONFIG_SOC_CAMERA_OV772X is not set
1156# CONFIG_VIDEO_SH_MOBILE_CEU is not set
1157CONFIG_V4L_USB_DRIVERS=y
1158# CONFIG_USB_VIDEO_CLASS is not set
1159CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
1160CONFIG_USB_GSPCA=m
1161# CONFIG_USB_M5602 is not set
1162# CONFIG_USB_STV06XX is not set
1163# CONFIG_USB_GSPCA_CONEX is not set
1164# CONFIG_USB_GSPCA_ETOMS is not set
1165# CONFIG_USB_GSPCA_FINEPIX is not set
1166# CONFIG_USB_GSPCA_MARS is not set
1167# CONFIG_USB_GSPCA_MR97310A is not set
1168# CONFIG_USB_GSPCA_OV519 is not set
1169# CONFIG_USB_GSPCA_OV534 is not set
1170# CONFIG_USB_GSPCA_PAC207 is not set
1171# CONFIG_USB_GSPCA_PAC7311 is not set
1172# CONFIG_USB_GSPCA_SONIXB is not set
1173# CONFIG_USB_GSPCA_SONIXJ is not set
1174# CONFIG_USB_GSPCA_SPCA500 is not set
1175# CONFIG_USB_GSPCA_SPCA501 is not set
1176# CONFIG_USB_GSPCA_SPCA505 is not set
1177# CONFIG_USB_GSPCA_SPCA506 is not set
1178# CONFIG_USB_GSPCA_SPCA508 is not set
1179# CONFIG_USB_GSPCA_SPCA561 is not set
1180# CONFIG_USB_GSPCA_SQ905 is not set
1181# CONFIG_USB_GSPCA_SQ905C is not set
1182# CONFIG_USB_GSPCA_STK014 is not set
1183# CONFIG_USB_GSPCA_SUNPLUS is not set
1184# CONFIG_USB_GSPCA_T613 is not set
1185# CONFIG_USB_GSPCA_TV8532 is not set
1186# CONFIG_USB_GSPCA_VC032X is not set
1187CONFIG_USB_GSPCA_ZC3XX=m
1188# CONFIG_VIDEO_PVRUSB2 is not set
1189# CONFIG_VIDEO_HDPVR is not set
1190# CONFIG_VIDEO_EM28XX is not set
1191# CONFIG_VIDEO_CX231XX is not set
1192# CONFIG_VIDEO_USBVISION is not set
1193# CONFIG_USB_VICAM is not set
1194# CONFIG_USB_IBMCAM is not set
1195# CONFIG_USB_KONICAWC is not set
1196# CONFIG_USB_QUICKCAM_MESSENGER is not set
1197# CONFIG_USB_ET61X251 is not set
1198# CONFIG_VIDEO_OVCAMCHIP is not set
1199# CONFIG_USB_OV511 is not set
1200# CONFIG_USB_SE401 is not set
1201# CONFIG_USB_SN9C102 is not set
1202# CONFIG_USB_STV680 is not set
1203# CONFIG_USB_ZC0301 is not set
1204# CONFIG_USB_PWC is not set
1205# CONFIG_USB_PWC_INPUT_EVDEV is not set
1206# CONFIG_USB_ZR364XX is not set
1207# CONFIG_USB_STKWEBCAM is not set
1208# CONFIG_USB_S2255 is not set
1209CONFIG_RADIO_ADAPTERS=y
1210# CONFIG_USB_DSBR is not set
1211# CONFIG_USB_SI470X is not set
1212# CONFIG_USB_MR800 is not set
1213# CONFIG_RADIO_TEA5764 is not set
1214# CONFIG_DVB_DYNAMIC_MINORS is not set
1215CONFIG_DVB_CAPTURE_DRIVERS=y
1216# CONFIG_TTPCI_EEPROM is not set
1217
1218#
1219# Supported USB Adapters
1220#
1221# CONFIG_DVB_USB is not set
1222# CONFIG_DVB_SIANO_SMS1XXX is not set
1223
1224#
1225# Supported FlexCopII (B2C2) Adapters
1226#
1227# CONFIG_DVB_B2C2_FLEXCOP is not set
1228
1229#
1230# Supported DVB Frontends
1231#
1232# CONFIG_DVB_FE_CUSTOMISE is not set
1233# CONFIG_DAB is not set
1234
1235#
1236# Graphics support
1237#
1238# CONFIG_VGASTATE is not set
1239CONFIG_VIDEO_OUTPUT_CONTROL=y
1240CONFIG_FB=y
1241CONFIG_FIRMWARE_EDID=y
1242# CONFIG_FB_DDC is not set
1243# CONFIG_FB_BOOT_VESA_SUPPORT is not set
1244CONFIG_FB_CFB_FILLRECT=y
1245CONFIG_FB_CFB_COPYAREA=y
1246CONFIG_FB_CFB_IMAGEBLIT=y
1247# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
1248# CONFIG_FB_SYS_FILLRECT is not set
1249# CONFIG_FB_SYS_COPYAREA is not set
1250# CONFIG_FB_SYS_IMAGEBLIT is not set
1251# CONFIG_FB_FOREIGN_ENDIAN is not set
1252# CONFIG_FB_SYS_FOPS is not set
1253# CONFIG_FB_SVGALIB is not set
1254# CONFIG_FB_MACMODES is not set
1255# CONFIG_FB_BACKLIGHT is not set
1256CONFIG_FB_MODE_HELPERS=y
1257CONFIG_FB_TILEBLITTING=y
1258
1259#
1260# Frame buffer hardware drivers
1261#
1262# CONFIG_FB_UVESA is not set
1263# CONFIG_FB_S1D13XXX is not set
1264CONFIG_FB_S3C2410=y
1265# CONFIG_FB_S3C2410_DEBUG is not set
1266# CONFIG_FB_VIRTUAL is not set
1267# CONFIG_FB_METRONOME is not set
1268# CONFIG_FB_MB862XX is not set
1269# CONFIG_FB_BROADSHEET is not set
1270CONFIG_BACKLIGHT_LCD_SUPPORT=y
1271CONFIG_LCD_CLASS_DEVICE=y
1272# CONFIG_LCD_LTV350QV is not set
1273# CONFIG_LCD_ILI9320 is not set
1274# CONFIG_LCD_TDO24M is not set
1275# CONFIG_LCD_VGG2432A4 is not set
1276CONFIG_LCD_PLATFORM=y
1277CONFIG_BACKLIGHT_CLASS_DEVICE=y
1278# CONFIG_BACKLIGHT_GENERIC is not set
1279CONFIG_BACKLIGHT_PWM=y
1280
1281#
1282# Display device support
1283#
1284CONFIG_DISPLAY_SUPPORT=y
1285
1286#
1287# Display hardware drivers
1288#
1289
1290#
1291# Console display driver support
1292#
1293# CONFIG_VGA_CONSOLE is not set
1294CONFIG_DUMMY_CONSOLE=y
1295CONFIG_FRAMEBUFFER_CONSOLE=y
1296CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
1297CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
1298CONFIG_FONTS=y
1299CONFIG_FONT_8x8=y
1300# CONFIG_FONT_8x16 is not set
1301# CONFIG_FONT_6x11 is not set
1302# CONFIG_FONT_7x14 is not set
1303# CONFIG_FONT_PEARL_8x8 is not set
1304# CONFIG_FONT_ACORN_8x8 is not set
1305CONFIG_FONT_MINI_4x6=y
1306# CONFIG_FONT_SUN8x16 is not set
1307# CONFIG_FONT_SUN12x22 is not set
1308# CONFIG_FONT_10x18 is not set
1309CONFIG_LOGO=y
1310# CONFIG_LOGO_LINUX_MONO is not set
1311# CONFIG_LOGO_LINUX_VGA16 is not set
1312CONFIG_LOGO_LINUX_CLUT224=y
1313CONFIG_SOUND=y
1314CONFIG_SOUND_OSS_CORE=y
1315CONFIG_SND=y
1316CONFIG_SND_TIMER=y
1317CONFIG_SND_PCM=y
1318CONFIG_SND_HWDEP=m
1319CONFIG_SND_RAWMIDI=m
1320CONFIG_SND_JACK=y
1321CONFIG_SND_SEQUENCER=m
1322CONFIG_SND_SEQ_DUMMY=m
1323CONFIG_SND_OSSEMUL=y
1324CONFIG_SND_MIXER_OSS=m
1325CONFIG_SND_PCM_OSS=m
1326CONFIG_SND_PCM_OSS_PLUGINS=y
1327CONFIG_SND_SEQUENCER_OSS=y
1328CONFIG_SND_DYNAMIC_MINORS=y
1329CONFIG_SND_SUPPORT_OLD_API=y
1330CONFIG_SND_VERBOSE_PROCFS=y
1331# CONFIG_SND_VERBOSE_PRINTK is not set
1332# CONFIG_SND_DEBUG is not set
1333# CONFIG_SND_DRIVERS is not set
1334# CONFIG_SND_ARM is not set
1335# CONFIG_SND_SPI is not set
1336CONFIG_SND_USB=y
1337CONFIG_SND_USB_AUDIO=m
1338CONFIG_SND_USB_CAIAQ=m
1339CONFIG_SND_USB_CAIAQ_INPUT=y
1340CONFIG_SND_SOC=y
1341CONFIG_SND_S3C24XX_SOC=y
1342CONFIG_SND_S3C24XX_SOC_I2S=y
1343# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set
1344CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X=y
1345CONFIG_SND_SOC_I2C_AND_SPI=y
1346# CONFIG_SND_SOC_ALL_CODECS is not set
1347CONFIG_SND_SOC_L3=y
1348CONFIG_SND_SOC_UDA134X=y
1349# CONFIG_SOUND_PRIME is not set
1350CONFIG_HID_SUPPORT=y
1351CONFIG_HID=y
1352# CONFIG_HID_DEBUG is not set
1353CONFIG_HIDRAW=y
1354
1355#
1356# USB Input Devices
1357#
1358CONFIG_USB_HID=y
1359CONFIG_HID_PID=y
1360CONFIG_USB_HIDDEV=y
1361
1362#
1363# Special HID drivers
1364#
1365CONFIG_HID_A4TECH=y
1366CONFIG_HID_APPLE=y
1367CONFIG_HID_BELKIN=y
1368CONFIG_HID_CHERRY=y
1369CONFIG_HID_CHICONY=y
1370CONFIG_HID_CYPRESS=y
1371# CONFIG_DRAGONRISE_FF is not set
1372CONFIG_HID_EZKEY=y
1373CONFIG_HID_KYE=y
1374CONFIG_HID_GYRATION=y
1375CONFIG_HID_KENSINGTON=y
1376CONFIG_HID_LOGITECH=y
1377# CONFIG_LOGITECH_FF is not set
1378# CONFIG_LOGIRUMBLEPAD2_FF is not set
1379CONFIG_HID_MICROSOFT=y
1380CONFIG_HID_MONTEREY=y
1381CONFIG_HID_NTRIG=y
1382CONFIG_HID_PANTHERLORD=y
1383# CONFIG_PANTHERLORD_FF is not set
1384CONFIG_HID_PETALYNX=y
1385CONFIG_HID_SAMSUNG=y
1386CONFIG_HID_SONY=y
1387CONFIG_HID_SUNPLUS=y
1388# CONFIG_GREENASIA_FF is not set
1389CONFIG_HID_TOPSEED=y
1390# CONFIG_THRUSTMASTER_FF is not set
1391# CONFIG_ZEROPLUS_FF is not set
1392CONFIG_USB_SUPPORT=y
1393CONFIG_USB_ARCH_HAS_HCD=y
1394CONFIG_USB_ARCH_HAS_OHCI=y
1395# CONFIG_USB_ARCH_HAS_EHCI is not set
1396CONFIG_USB=y
1397# CONFIG_USB_DEBUG is not set
1398# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1399
1400#
1401# Miscellaneous USB options
1402#
1403CONFIG_USB_DEVICEFS=y
1404# CONFIG_USB_DEVICE_CLASS is not set
1405# CONFIG_USB_DYNAMIC_MINORS is not set
1406# CONFIG_USB_SUSPEND is not set
1407# CONFIG_USB_OTG is not set
1408# CONFIG_USB_MON is not set
1409# CONFIG_USB_WUSB is not set
1410# CONFIG_USB_WUSB_CBAF is not set
1411
1412#
1413# USB Host Controller Drivers
1414#
1415# CONFIG_USB_C67X00_HCD is not set
1416# CONFIG_USB_OXU210HP_HCD is not set
1417# CONFIG_USB_ISP116X_HCD is not set
1418# CONFIG_USB_ISP1760_HCD is not set
1419CONFIG_USB_OHCI_HCD=y
1420# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1421# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1422CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1423# CONFIG_USB_SL811_HCD is not set
1424# CONFIG_USB_R8A66597_HCD is not set
1425# CONFIG_USB_HWA_HCD is not set
1426# CONFIG_USB_MUSB_HDRC is not set
1427# CONFIG_USB_GADGET_MUSB_HDRC is not set
1428
1429#
1430# USB Device Class drivers
1431#
1432CONFIG_USB_ACM=m
1433# CONFIG_USB_PRINTER is not set
1434CONFIG_USB_WDM=m
1435# CONFIG_USB_TMC is not set
1436
1437#
1438# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1439#
1440
1441#
1442# also be needed; see USB_STORAGE Help for more info
1443#
1444CONFIG_USB_STORAGE=m
1445# CONFIG_USB_STORAGE_DEBUG is not set
1446CONFIG_USB_STORAGE_DATAFAB=m
1447# CONFIG_USB_STORAGE_FREECOM is not set
1448CONFIG_USB_STORAGE_ISD200=m
1449CONFIG_USB_STORAGE_USBAT=m
1450CONFIG_USB_STORAGE_SDDR09=m
1451CONFIG_USB_STORAGE_SDDR55=m
1452CONFIG_USB_STORAGE_JUMPSHOT=m
1453CONFIG_USB_STORAGE_ALAUDA=m
1454# CONFIG_USB_STORAGE_ONETOUCH is not set
1455# CONFIG_USB_STORAGE_KARMA is not set
1456# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1457CONFIG_USB_LIBUSUAL=y
1458
1459#
1460# USB Imaging devices
1461#
1462# CONFIG_USB_MDC800 is not set
1463# CONFIG_USB_MICROTEK is not set
1464
1465#
1466# USB port drivers
1467#
1468CONFIG_USB_SERIAL=m
1469# CONFIG_USB_EZUSB is not set
1470# CONFIG_USB_SERIAL_GENERIC is not set
1471# CONFIG_USB_SERIAL_AIRCABLE is not set
1472# CONFIG_USB_SERIAL_ARK3116 is not set
1473# CONFIG_USB_SERIAL_BELKIN is not set
1474# CONFIG_USB_SERIAL_CH341 is not set
1475# CONFIG_USB_SERIAL_WHITEHEAT is not set
1476# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
1477CONFIG_USB_SERIAL_CP210X=m
1478# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
1479# CONFIG_USB_SERIAL_EMPEG is not set
1480CONFIG_USB_SERIAL_FTDI_SIO=m
1481# CONFIG_USB_SERIAL_FUNSOFT is not set
1482# CONFIG_USB_SERIAL_VISOR is not set
1483# CONFIG_USB_SERIAL_IPAQ is not set
1484# CONFIG_USB_SERIAL_IR is not set
1485# CONFIG_USB_SERIAL_EDGEPORT is not set
1486# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
1487# CONFIG_USB_SERIAL_GARMIN is not set
1488# CONFIG_USB_SERIAL_IPW is not set
1489# CONFIG_USB_SERIAL_IUU is not set
1490# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
1491# CONFIG_USB_SERIAL_KEYSPAN is not set
1492# CONFIG_USB_SERIAL_KLSI is not set
1493# CONFIG_USB_SERIAL_KOBIL_SCT is not set
1494# CONFIG_USB_SERIAL_MCT_U232 is not set
1495# CONFIG_USB_SERIAL_MOS7720 is not set
1496# CONFIG_USB_SERIAL_MOS7840 is not set
1497# CONFIG_USB_SERIAL_MOTOROLA is not set
1498# CONFIG_USB_SERIAL_NAVMAN is not set
1499# CONFIG_USB_SERIAL_PL2303 is not set
1500# CONFIG_USB_SERIAL_OTI6858 is not set
1501# CONFIG_USB_SERIAL_QUALCOMM is not set
1502CONFIG_USB_SERIAL_SPCP8X5=m
1503# CONFIG_USB_SERIAL_HP4X is not set
1504# CONFIG_USB_SERIAL_SAFE is not set
1505# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
1506# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
1507# CONFIG_USB_SERIAL_SYMBOL is not set
1508# CONFIG_USB_SERIAL_TI is not set
1509# CONFIG_USB_SERIAL_CYBERJACK is not set
1510# CONFIG_USB_SERIAL_XIRCOM is not set
1511# CONFIG_USB_SERIAL_OPTION is not set
1512# CONFIG_USB_SERIAL_OMNINET is not set
1513# CONFIG_USB_SERIAL_OPTICON is not set
1514# CONFIG_USB_SERIAL_DEBUG is not set
1515
1516#
1517# USB Miscellaneous drivers
1518#
1519# CONFIG_USB_EMI62 is not set
1520# CONFIG_USB_EMI26 is not set
1521# CONFIG_USB_ADUTUX is not set
1522# CONFIG_USB_SEVSEG is not set
1523# CONFIG_USB_RIO500 is not set
1524# CONFIG_USB_LEGOTOWER is not set
1525# CONFIG_USB_LCD is not set
1526# CONFIG_USB_BERRY_CHARGE is not set
1527# CONFIG_USB_LED is not set
1528# CONFIG_USB_CYPRESS_CY7C63 is not set
1529# CONFIG_USB_CYTHERM is not set
1530# CONFIG_USB_IDMOUSE is not set
1531# CONFIG_USB_FTDI_ELAN is not set
1532# CONFIG_USB_APPLEDISPLAY is not set
1533# CONFIG_USB_LD is not set
1534# CONFIG_USB_TRANCEVIBRATOR is not set
1535# CONFIG_USB_IOWARRIOR is not set
1536# CONFIG_USB_TEST is not set
1537# CONFIG_USB_ISIGHTFW is not set
1538# CONFIG_USB_VST is not set
1539CONFIG_USB_GADGET=y
1540# CONFIG_USB_GADGET_DEBUG is not set
1541# CONFIG_USB_GADGET_DEBUG_FILES is not set
1542# CONFIG_USB_GADGET_DEBUG_FS is not set
1543CONFIG_USB_GADGET_VBUS_DRAW=2
1544CONFIG_USB_GADGET_SELECTED=y
1545# CONFIG_USB_GADGET_AT91 is not set
1546# CONFIG_USB_GADGET_ATMEL_USBA is not set
1547# CONFIG_USB_GADGET_FSL_USB2 is not set
1548# CONFIG_USB_GADGET_LH7A40X is not set
1549# CONFIG_USB_GADGET_OMAP is not set
1550# CONFIG_USB_GADGET_PXA25X is not set
1551# CONFIG_USB_GADGET_PXA27X is not set
1552CONFIG_USB_GADGET_S3C2410=y
1553CONFIG_USB_S3C2410=y
1554# CONFIG_USB_S3C2410_DEBUG is not set
1555# CONFIG_USB_GADGET_IMX is not set
1556# CONFIG_USB_GADGET_M66592 is not set
1557# CONFIG_USB_GADGET_AMD5536UDC is not set
1558# CONFIG_USB_GADGET_FSL_QE is not set
1559# CONFIG_USB_GADGET_CI13XXX is not set
1560# CONFIG_USB_GADGET_NET2280 is not set
1561# CONFIG_USB_GADGET_GOKU is not set
1562# CONFIG_USB_GADGET_DUMMY_HCD is not set
1563# CONFIG_USB_GADGET_DUALSPEED is not set
1564CONFIG_USB_ZERO=m
1565CONFIG_USB_ETH=m
1566CONFIG_USB_ETH_RNDIS=y
1567CONFIG_USB_GADGETFS=m
1568CONFIG_USB_FILE_STORAGE=m
1569# CONFIG_USB_FILE_STORAGE_TEST is not set
1570CONFIG_USB_G_SERIAL=m
1571# CONFIG_USB_MIDI_GADGET is not set
1572# CONFIG_USB_G_PRINTER is not set
1573CONFIG_USB_CDC_COMPOSITE=m
1574
1575#
1576# OTG and related infrastructure
1577#
1578# CONFIG_USB_GPIO_VBUS is not set
1579# CONFIG_NOP_USB_XCEIV is not set
1580CONFIG_MMC=y
1581# CONFIG_MMC_DEBUG is not set
1582# CONFIG_MMC_UNSAFE_RESUME is not set
1583
1584#
1585# MMC/SD/SDIO Card Drivers
1586#
1587CONFIG_MMC_BLOCK=y
1588CONFIG_MMC_BLOCK_BOUNCE=y
1589CONFIG_SDIO_UART=y
1590# CONFIG_MMC_TEST is not set
1591
1592#
1593# MMC/SD/SDIO Host Controller Drivers
1594#
1595CONFIG_MMC_SDHCI=y
1596CONFIG_MMC_SPI=y
1597CONFIG_MMC_S3C=y
1598# CONFIG_MEMSTICK is not set
1599# CONFIG_ACCESSIBILITY is not set
1600CONFIG_NEW_LEDS=y
1601CONFIG_LEDS_CLASS=y
1602
1603#
1604# LED drivers
1605#
1606CONFIG_LEDS_S3C24XX=y
1607# CONFIG_LEDS_PCA9532 is not set
1608CONFIG_LEDS_GPIO=y
1609CONFIG_LEDS_GPIO_PLATFORM=y
1610# CONFIG_LEDS_LP5521 is not set
1611# CONFIG_LEDS_PCA955X is not set
1612# CONFIG_LEDS_DAC124S085 is not set
1613# CONFIG_LEDS_PWM is not set
1614# CONFIG_LEDS_BD2802 is not set
1615
1616#
1617# LED Triggers
1618#
1619CONFIG_LEDS_TRIGGERS=y
1620CONFIG_LEDS_TRIGGER_TIMER=y
1621CONFIG_LEDS_TRIGGER_HEARTBEAT=y
1622CONFIG_LEDS_TRIGGER_BACKLIGHT=y
1623CONFIG_LEDS_TRIGGER_GPIO=y
1624CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
1625
1626#
1627# iptables trigger is under Netfilter config (LED target)
1628#
1629CONFIG_RTC_LIB=y
1630CONFIG_RTC_CLASS=y
1631CONFIG_RTC_HCTOSYS=y
1632CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1633# CONFIG_RTC_DEBUG is not set
1634
1635#
1636# RTC interfaces
1637#
1638CONFIG_RTC_INTF_SYSFS=y
1639CONFIG_RTC_INTF_PROC=y
1640CONFIG_RTC_INTF_DEV=y
1641CONFIG_RTC_INTF_DEV_UIE_EMUL=y
1642# CONFIG_RTC_DRV_TEST is not set
1643
1644#
1645# I2C RTC drivers
1646#
1647# CONFIG_RTC_DRV_DS1307 is not set
1648# CONFIG_RTC_DRV_DS1374 is not set
1649# CONFIG_RTC_DRV_DS1672 is not set
1650# CONFIG_RTC_DRV_MAX6900 is not set
1651# CONFIG_RTC_DRV_RS5C372 is not set
1652# CONFIG_RTC_DRV_ISL1208 is not set
1653# CONFIG_RTC_DRV_X1205 is not set
1654# CONFIG_RTC_DRV_PCF8563 is not set
1655# CONFIG_RTC_DRV_PCF8583 is not set
1656# CONFIG_RTC_DRV_M41T80 is not set
1657# CONFIG_RTC_DRV_S35390A is not set
1658# CONFIG_RTC_DRV_FM3130 is not set
1659# CONFIG_RTC_DRV_RX8581 is not set
1660
1661#
1662# SPI RTC drivers
1663#
1664# CONFIG_RTC_DRV_M41T94 is not set
1665# CONFIG_RTC_DRV_DS1305 is not set
1666# CONFIG_RTC_DRV_DS1390 is not set
1667# CONFIG_RTC_DRV_MAX6902 is not set
1668# CONFIG_RTC_DRV_R9701 is not set
1669# CONFIG_RTC_DRV_RS5C348 is not set
1670# CONFIG_RTC_DRV_DS3234 is not set
1671
1672#
1673# Platform RTC drivers
1674#
1675# CONFIG_RTC_DRV_CMOS is not set
1676# CONFIG_RTC_DRV_DS1286 is not set
1677# CONFIG_RTC_DRV_DS1511 is not set
1678# CONFIG_RTC_DRV_DS1553 is not set
1679# CONFIG_RTC_DRV_DS1742 is not set
1680# CONFIG_RTC_DRV_STK17TA8 is not set
1681# CONFIG_RTC_DRV_M48T86 is not set
1682# CONFIG_RTC_DRV_M48T35 is not set
1683# CONFIG_RTC_DRV_M48T59 is not set
1684# CONFIG_RTC_DRV_BQ4802 is not set
1685# CONFIG_RTC_DRV_V3020 is not set
1686
1687#
1688# on-CPU RTC drivers
1689#
1690CONFIG_RTC_DRV_S3C=y
1691CONFIG_DMADEVICES=y
1692
1693#
1694# DMA Devices
1695#
1696# CONFIG_AUXDISPLAY is not set
1697# CONFIG_REGULATOR is not set
1698# CONFIG_UIO is not set
1699# CONFIG_STAGING is not set
1700
1701#
1702# File systems
1703#
1704CONFIG_EXT2_FS=m
1705CONFIG_EXT2_FS_XATTR=y
1706CONFIG_EXT2_FS_POSIX_ACL=y
1707CONFIG_EXT2_FS_SECURITY=y
1708# CONFIG_EXT2_FS_XIP is not set
1709CONFIG_EXT3_FS=y
1710# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
1711CONFIG_EXT3_FS_XATTR=y
1712CONFIG_EXT3_FS_POSIX_ACL=y
1713CONFIG_EXT3_FS_SECURITY=y
1714# CONFIG_EXT4_FS is not set
1715CONFIG_JBD=y
1716# CONFIG_JBD_DEBUG is not set
1717CONFIG_FS_MBCACHE=y
1718# CONFIG_REISERFS_FS is not set
1719# CONFIG_JFS_FS is not set
1720CONFIG_FS_POSIX_ACL=y
1721CONFIG_FILE_LOCKING=y
1722# CONFIG_XFS_FS is not set
1723# CONFIG_GFS2_FS is not set
1724# CONFIG_OCFS2_FS is not set
1725# CONFIG_BTRFS_FS is not set
1726CONFIG_DNOTIFY=y
1727CONFIG_INOTIFY=y
1728CONFIG_INOTIFY_USER=y
1729# CONFIG_QUOTA is not set
1730CONFIG_AUTOFS_FS=y
1731CONFIG_AUTOFS4_FS=y
1732# CONFIG_FUSE_FS is not set
1733CONFIG_GENERIC_ACL=y
1734
1735#
1736# Caches
1737#
1738# CONFIG_FSCACHE is not set
1739
1740#
1741# CD-ROM/DVD Filesystems
1742#
1743# CONFIG_ISO9660_FS is not set
1744# CONFIG_UDF_FS is not set
1745
1746#
1747# DOS/FAT/NT Filesystems
1748#
1749CONFIG_FAT_FS=y
1750CONFIG_MSDOS_FS=y
1751CONFIG_VFAT_FS=y
1752CONFIG_FAT_DEFAULT_CODEPAGE=437
1753CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1754# CONFIG_NTFS_FS is not set
1755
1756#
1757# Pseudo filesystems
1758#
1759CONFIG_PROC_FS=y
1760CONFIG_PROC_SYSCTL=y
1761CONFIG_PROC_PAGE_MONITOR=y
1762CONFIG_SYSFS=y
1763CONFIG_TMPFS=y
1764CONFIG_TMPFS_POSIX_ACL=y
1765# CONFIG_HUGETLB_PAGE is not set
1766CONFIG_CONFIGFS_FS=m
1767CONFIG_MISC_FILESYSTEMS=y
1768# CONFIG_ADFS_FS is not set
1769# CONFIG_AFFS_FS is not set
1770# CONFIG_ECRYPT_FS is not set
1771# CONFIG_HFS_FS is not set
1772# CONFIG_HFSPLUS_FS is not set
1773# CONFIG_BEFS_FS is not set
1774# CONFIG_BFS_FS is not set
1775# CONFIG_EFS_FS is not set
1776CONFIG_JFFS2_FS=y
1777CONFIG_JFFS2_FS_DEBUG=0
1778CONFIG_JFFS2_FS_WRITEBUFFER=y
1779# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1780# CONFIG_JFFS2_SUMMARY is not set
1781# CONFIG_JFFS2_FS_XATTR is not set
1782# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1783CONFIG_JFFS2_ZLIB=y
1784# CONFIG_JFFS2_LZO is not set
1785CONFIG_JFFS2_RTIME=y
1786# CONFIG_JFFS2_RUBIN is not set
1787CONFIG_CRAMFS=y
1788# CONFIG_SQUASHFS is not set
1789# CONFIG_VXFS_FS is not set
1790# CONFIG_MINIX_FS is not set
1791# CONFIG_OMFS_FS is not set
1792# CONFIG_HPFS_FS is not set
1793# CONFIG_QNX4FS_FS is not set
1794CONFIG_ROMFS_FS=y
1795# CONFIG_ROMFS_BACKED_BY_BLOCK is not set
1796# CONFIG_ROMFS_BACKED_BY_MTD is not set
1797CONFIG_ROMFS_BACKED_BY_BOTH=y
1798CONFIG_ROMFS_ON_BLOCK=y
1799CONFIG_ROMFS_ON_MTD=y
1800# CONFIG_SYSV_FS is not set
1801# CONFIG_UFS_FS is not set
1802# CONFIG_NILFS2_FS is not set
1803CONFIG_NETWORK_FILESYSTEMS=y
1804CONFIG_NFS_FS=y
1805CONFIG_NFS_V3=y
1806CONFIG_NFS_V3_ACL=y
1807CONFIG_NFS_V4=y
1808CONFIG_ROOT_NFS=y
1809# CONFIG_NFSD is not set
1810CONFIG_LOCKD=y
1811CONFIG_LOCKD_V4=y
1812CONFIG_NFS_ACL_SUPPORT=y
1813CONFIG_NFS_COMMON=y
1814CONFIG_SUNRPC=y
1815CONFIG_SUNRPC_GSS=y
1816CONFIG_RPCSEC_GSS_KRB5=y
1817# CONFIG_RPCSEC_GSS_SPKM3 is not set
1818# CONFIG_SMB_FS is not set
1819# CONFIG_CIFS is not set
1820# CONFIG_NCP_FS is not set
1821# CONFIG_CODA_FS is not set
1822# CONFIG_AFS_FS is not set
1823
1824#
1825# Partition Types
1826#
1827CONFIG_PARTITION_ADVANCED=y
1828# CONFIG_ACORN_PARTITION is not set
1829# CONFIG_OSF_PARTITION is not set
1830# CONFIG_AMIGA_PARTITION is not set
1831# CONFIG_ATARI_PARTITION is not set
1832# CONFIG_MAC_PARTITION is not set
1833CONFIG_MSDOS_PARTITION=y
1834CONFIG_BSD_DISKLABEL=y
1835CONFIG_MINIX_SUBPARTITION=y
1836CONFIG_SOLARIS_X86_PARTITION=y
1837CONFIG_UNIXWARE_DISKLABEL=y
1838CONFIG_LDM_PARTITION=y
1839# CONFIG_LDM_DEBUG is not set
1840# CONFIG_SGI_PARTITION is not set
1841# CONFIG_ULTRIX_PARTITION is not set
1842# CONFIG_SUN_PARTITION is not set
1843# CONFIG_KARMA_PARTITION is not set
1844CONFIG_EFI_PARTITION=y
1845# CONFIG_SYSV68_PARTITION is not set
1846CONFIG_NLS=y
1847CONFIG_NLS_DEFAULT="cp437"
1848CONFIG_NLS_CODEPAGE_437=m
1849CONFIG_NLS_CODEPAGE_737=m
1850CONFIG_NLS_CODEPAGE_775=m
1851CONFIG_NLS_CODEPAGE_850=m
1852CONFIG_NLS_CODEPAGE_852=m
1853CONFIG_NLS_CODEPAGE_855=m
1854CONFIG_NLS_CODEPAGE_857=m
1855CONFIG_NLS_CODEPAGE_860=m
1856CONFIG_NLS_CODEPAGE_861=m
1857CONFIG_NLS_CODEPAGE_862=m
1858CONFIG_NLS_CODEPAGE_863=m
1859CONFIG_NLS_CODEPAGE_864=m
1860CONFIG_NLS_CODEPAGE_865=m
1861CONFIG_NLS_CODEPAGE_866=m
1862CONFIG_NLS_CODEPAGE_869=m
1863CONFIG_NLS_CODEPAGE_936=m
1864CONFIG_NLS_CODEPAGE_950=m
1865CONFIG_NLS_CODEPAGE_932=m
1866CONFIG_NLS_CODEPAGE_949=m
1867CONFIG_NLS_CODEPAGE_874=m
1868CONFIG_NLS_ISO8859_8=m
1869CONFIG_NLS_CODEPAGE_1250=m
1870CONFIG_NLS_CODEPAGE_1251=m
1871CONFIG_NLS_ASCII=m
1872CONFIG_NLS_ISO8859_1=m
1873CONFIG_NLS_ISO8859_2=m
1874CONFIG_NLS_ISO8859_3=m
1875CONFIG_NLS_ISO8859_4=m
1876CONFIG_NLS_ISO8859_5=m
1877CONFIG_NLS_ISO8859_6=m
1878CONFIG_NLS_ISO8859_7=m
1879CONFIG_NLS_ISO8859_9=m
1880CONFIG_NLS_ISO8859_13=m
1881CONFIG_NLS_ISO8859_14=m
1882CONFIG_NLS_ISO8859_15=m
1883CONFIG_NLS_KOI8_R=m
1884CONFIG_NLS_KOI8_U=m
1885CONFIG_NLS_UTF8=m
1886# CONFIG_DLM is not set
1887
1888#
1889# Kernel hacking
1890#
1891# CONFIG_PRINTK_TIME is not set
1892# CONFIG_ENABLE_WARN_DEPRECATED is not set
1893# CONFIG_ENABLE_MUST_CHECK is not set
1894CONFIG_FRAME_WARN=1024
1895# CONFIG_MAGIC_SYSRQ is not set
1896# CONFIG_UNUSED_SYMBOLS is not set
1897CONFIG_DEBUG_FS=y
1898# CONFIG_HEADERS_CHECK is not set
1899CONFIG_DEBUG_KERNEL=y
1900# CONFIG_DEBUG_SHIRQ is not set
1901CONFIG_DETECT_SOFTLOCKUP=y
1902# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
1903CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
1904CONFIG_DETECT_HUNG_TASK=y
1905# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
1906CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
1907# CONFIG_SCHED_DEBUG is not set
1908# CONFIG_SCHEDSTATS is not set
1909# CONFIG_TIMER_STATS is not set
1910# CONFIG_DEBUG_OBJECTS is not set
1911# CONFIG_SLUB_DEBUG_ON is not set
1912# CONFIG_SLUB_STATS is not set
1913# CONFIG_DEBUG_RT_MUTEXES is not set
1914# CONFIG_RT_MUTEX_TESTER is not set
1915# CONFIG_DEBUG_SPINLOCK is not set
1916# CONFIG_DEBUG_MUTEXES is not set
1917# CONFIG_DEBUG_LOCK_ALLOC is not set
1918# CONFIG_PROVE_LOCKING is not set
1919# CONFIG_LOCK_STAT is not set
1920# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1921# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1922# CONFIG_DEBUG_KOBJECT is not set
1923CONFIG_DEBUG_BUGVERBOSE=y
1924CONFIG_DEBUG_INFO=y
1925# CONFIG_DEBUG_VM is not set
1926# CONFIG_DEBUG_WRITECOUNT is not set
1927CONFIG_DEBUG_MEMORY_INIT=y
1928# CONFIG_DEBUG_LIST is not set
1929# CONFIG_DEBUG_SG is not set
1930# CONFIG_DEBUG_NOTIFIERS is not set
1931# CONFIG_BOOT_PRINTK_DELAY is not set
1932# CONFIG_RCU_TORTURE_TEST is not set
1933# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1934# CONFIG_BACKTRACE_SELF_TEST is not set
1935# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
1936# CONFIG_FAULT_INJECTION is not set
1937# CONFIG_LATENCYTOP is not set
1938CONFIG_SYSCTL_SYSCALL_CHECK=y
1939# CONFIG_PAGE_POISONING is not set
1940CONFIG_HAVE_FUNCTION_TRACER=y
1941CONFIG_TRACING_SUPPORT=y
1942
1943#
1944# Tracers
1945#
1946# CONFIG_FUNCTION_TRACER is not set
1947# CONFIG_SCHED_TRACER is not set
1948# CONFIG_CONTEXT_SWITCH_TRACER is not set
1949# CONFIG_EVENT_TRACER is not set
1950# CONFIG_BOOT_TRACER is not set
1951# CONFIG_TRACE_BRANCH_PROFILING is not set
1952# CONFIG_STACK_TRACER is not set
1953# CONFIG_KMEMTRACE is not set
1954# CONFIG_WORKQUEUE_TRACER is not set
1955# CONFIG_BLK_DEV_IO_TRACE is not set
1956# CONFIG_DYNAMIC_DEBUG is not set
1957# CONFIG_SAMPLES is not set
1958CONFIG_HAVE_ARCH_KGDB=y
1959# CONFIG_KGDB is not set
1960CONFIG_ARM_UNWIND=y
1961CONFIG_DEBUG_USER=y
1962# CONFIG_DEBUG_ERRORS is not set
1963# CONFIG_DEBUG_STACK_USAGE is not set
1964# CONFIG_DEBUG_LL is not set
1965CONFIG_DEBUG_S3C_UART=0
1966
1967#
1968# Security options
1969#
1970CONFIG_KEYS=y
1971# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
1972# CONFIG_SECURITY is not set
1973# CONFIG_SECURITYFS is not set
1974CONFIG_SECURITY_FILE_CAPABILITIES=y
1975CONFIG_CRYPTO=y
1976
1977#
1978# Crypto core or helper
1979#
1980CONFIG_CRYPTO_FIPS=y
1981CONFIG_CRYPTO_ALGAPI=y
1982CONFIG_CRYPTO_ALGAPI2=y
1983CONFIG_CRYPTO_AEAD=m
1984CONFIG_CRYPTO_AEAD2=y
1985CONFIG_CRYPTO_BLKCIPHER=y
1986CONFIG_CRYPTO_BLKCIPHER2=y
1987CONFIG_CRYPTO_HASH=y
1988CONFIG_CRYPTO_HASH2=y
1989CONFIG_CRYPTO_RNG=m
1990CONFIG_CRYPTO_RNG2=y
1991CONFIG_CRYPTO_PCOMP=y
1992CONFIG_CRYPTO_MANAGER=y
1993CONFIG_CRYPTO_MANAGER2=y
1994CONFIG_CRYPTO_GF128MUL=m
1995CONFIG_CRYPTO_NULL=m
1996CONFIG_CRYPTO_WORKQUEUE=y
1997CONFIG_CRYPTO_CRYPTD=m
1998CONFIG_CRYPTO_AUTHENC=m
1999CONFIG_CRYPTO_TEST=m
2000
2001#
2002# Authenticated Encryption with Associated Data
2003#
2004CONFIG_CRYPTO_CCM=m
2005CONFIG_CRYPTO_GCM=m
2006CONFIG_CRYPTO_SEQIV=m
2007
2008#
2009# Block modes
2010#
2011CONFIG_CRYPTO_CBC=y
2012CONFIG_CRYPTO_CTR=m
2013CONFIG_CRYPTO_CTS=m
2014CONFIG_CRYPTO_ECB=y
2015CONFIG_CRYPTO_LRW=m
2016CONFIG_CRYPTO_PCBC=m
2017CONFIG_CRYPTO_XTS=m
2018
2019#
2020# Hash modes
2021#
2022CONFIG_CRYPTO_HMAC=y
2023CONFIG_CRYPTO_XCBC=m
2024
2025#
2026# Digest
2027#
2028CONFIG_CRYPTO_CRC32C=m
2029CONFIG_CRYPTO_MD4=m
2030CONFIG_CRYPTO_MD5=y
2031CONFIG_CRYPTO_MICHAEL_MIC=y
2032CONFIG_CRYPTO_RMD128=m
2033CONFIG_CRYPTO_RMD160=m
2034CONFIG_CRYPTO_RMD256=m
2035CONFIG_CRYPTO_RMD320=m
2036CONFIG_CRYPTO_SHA1=m
2037CONFIG_CRYPTO_SHA256=m
2038CONFIG_CRYPTO_SHA512=m
2039CONFIG_CRYPTO_TGR192=m
2040CONFIG_CRYPTO_WP512=m
2041
2042#
2043# Ciphers
2044#
2045CONFIG_CRYPTO_AES=y
2046CONFIG_CRYPTO_ANUBIS=m
2047CONFIG_CRYPTO_ARC4=y
2048CONFIG_CRYPTO_BLOWFISH=m
2049CONFIG_CRYPTO_CAMELLIA=m
2050CONFIG_CRYPTO_CAST5=m
2051CONFIG_CRYPTO_CAST6=m
2052CONFIG_CRYPTO_DES=y
2053CONFIG_CRYPTO_FCRYPT=m
2054CONFIG_CRYPTO_KHAZAD=m
2055CONFIG_CRYPTO_SALSA20=m
2056CONFIG_CRYPTO_SEED=m
2057CONFIG_CRYPTO_SERPENT=m
2058CONFIG_CRYPTO_TEA=m
2059CONFIG_CRYPTO_TWOFISH=m
2060CONFIG_CRYPTO_TWOFISH_COMMON=m
2061
2062#
2063# Compression
2064#
2065CONFIG_CRYPTO_DEFLATE=m
2066CONFIG_CRYPTO_ZLIB=m
2067CONFIG_CRYPTO_LZO=m
2068
2069#
2070# Random Number Generation
2071#
2072CONFIG_CRYPTO_ANSI_CPRNG=m
2073CONFIG_CRYPTO_HW=y
2074# CONFIG_BINARY_PRINTF is not set
2075
2076#
2077# Library routines
2078#
2079CONFIG_BITREVERSE=y
2080CONFIG_GENERIC_FIND_LAST_BIT=y
2081CONFIG_CRC_CCITT=m
2082CONFIG_CRC16=m
2083CONFIG_CRC_T10DIF=y
2084CONFIG_CRC_ITU_T=y
2085CONFIG_CRC32=y
2086CONFIG_CRC7=y
2087CONFIG_LIBCRC32C=m
2088CONFIG_ZLIB_INFLATE=y
2089CONFIG_ZLIB_DEFLATE=y
2090CONFIG_LZO_COMPRESS=m
2091CONFIG_LZO_DECOMPRESS=m
2092CONFIG_DECOMPRESS_GZIP=y
2093CONFIG_DECOMPRESS_BZIP2=y
2094CONFIG_DECOMPRESS_LZMA=y
2095CONFIG_HAS_IOMEM=y
2096CONFIG_HAS_DMA=y
2097CONFIG_NLATTR=y
diff --git a/arch/arm/configs/mx27_defconfig b/arch/arm/configs/mx27_defconfig
index 083516cd0d7f..75263a83741c 100644
--- a/arch/arm/configs/mx27_defconfig
+++ b/arch/arm/configs/mx27_defconfig
@@ -1,15 +1,15 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.30-rc1 3# Linux kernel version: 2.6.31-rc4
4# Wed Apr 8 10:18:06 2009 4# Fri Jul 24 16:08:06 2009
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_HAVE_PWM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y 8CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y 9CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y 10CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y 11CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y 12CONFIG_MMU=y
12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y 13CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y 14CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_HAVE_LATENCYTOP_SUPPORT=y 15CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -18,14 +18,13 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y 18CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y 19CONFIG_GENERIC_IRQ_PROBE=y
20CONFIG_RWSEM_GENERIC_SPINLOCK=y 20CONFIG_RWSEM_GENERIC_SPINLOCK=y
21# CONFIG_ARCH_HAS_ILOG2_U32 is not set
22# CONFIG_ARCH_HAS_ILOG2_U64 is not set
23CONFIG_GENERIC_HWEIGHT=y 21CONFIG_GENERIC_HWEIGHT=y
24CONFIG_GENERIC_CALIBRATE_DELAY=y 22CONFIG_GENERIC_CALIBRATE_DELAY=y
25CONFIG_ARCH_MTD_XIP=y 23CONFIG_ARCH_MTD_XIP=y
26CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
27CONFIG_VECTORS_BASE=0xffff0000 25CONFIG_VECTORS_BASE=0xffff0000
28CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 26CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
27CONFIG_CONSTRUCTORS=y
29 28
30# 29#
31# General setup 30# General setup
@@ -85,7 +84,12 @@ CONFIG_TIMERFD=y
85CONFIG_EVENTFD=y 84CONFIG_EVENTFD=y
86CONFIG_SHMEM=y 85CONFIG_SHMEM=y
87CONFIG_AIO=y 86CONFIG_AIO=y
87
88#
89# Performance Counters
90#
88CONFIG_VM_EVENT_COUNTERS=y 91CONFIG_VM_EVENT_COUNTERS=y
92# CONFIG_STRIP_ASM_SYMS is not set
89# CONFIG_COMPAT_BRK is not set 93# CONFIG_COMPAT_BRK is not set
90CONFIG_SLAB=y 94CONFIG_SLAB=y
91# CONFIG_SLUB is not set 95# CONFIG_SLUB is not set
@@ -99,6 +103,12 @@ CONFIG_KPROBES=y
99CONFIG_KRETPROBES=y 103CONFIG_KRETPROBES=y
100CONFIG_HAVE_KPROBES=y 104CONFIG_HAVE_KPROBES=y
101CONFIG_HAVE_KRETPROBES=y 105CONFIG_HAVE_KRETPROBES=y
106CONFIG_HAVE_CLK=y
107
108#
109# GCOV-based kernel profiling
110#
111# CONFIG_GCOV_KERNEL is not set
102# CONFIG_SLOW_WORK is not set 112# CONFIG_SLOW_WORK is not set
103CONFIG_HAVE_GENERIC_DMA_COHERENT=y 113CONFIG_HAVE_GENERIC_DMA_COHERENT=y
104CONFIG_SLABINFO=y 114CONFIG_SLABINFO=y
@@ -111,7 +121,7 @@ CONFIG_MODULE_UNLOAD=y
111# CONFIG_MODVERSIONS is not set 121# CONFIG_MODVERSIONS is not set
112# CONFIG_MODULE_SRCVERSION_ALL is not set 122# CONFIG_MODULE_SRCVERSION_ALL is not set
113CONFIG_BLOCK=y 123CONFIG_BLOCK=y
114# CONFIG_LBD is not set 124CONFIG_LBDAF=y
115# CONFIG_BLK_DEV_BSG is not set 125# CONFIG_BLK_DEV_BSG is not set
116# CONFIG_BLK_DEV_INTEGRITY is not set 126# CONFIG_BLK_DEV_INTEGRITY is not set
117 127
@@ -138,13 +148,14 @@ CONFIG_FREEZER=y
138# CONFIG_ARCH_VERSATILE is not set 148# CONFIG_ARCH_VERSATILE is not set
139# CONFIG_ARCH_AT91 is not set 149# CONFIG_ARCH_AT91 is not set
140# CONFIG_ARCH_CLPS711X is not set 150# CONFIG_ARCH_CLPS711X is not set
151# CONFIG_ARCH_GEMINI is not set
141# CONFIG_ARCH_EBSA110 is not set 152# CONFIG_ARCH_EBSA110 is not set
142# CONFIG_ARCH_EP93XX is not set 153# CONFIG_ARCH_EP93XX is not set
143# CONFIG_ARCH_GEMINI is not set
144# CONFIG_ARCH_FOOTBRIDGE is not set 154# CONFIG_ARCH_FOOTBRIDGE is not set
155CONFIG_ARCH_MXC=y
156# CONFIG_ARCH_STMP3XXX is not set
145# CONFIG_ARCH_NETX is not set 157# CONFIG_ARCH_NETX is not set
146# CONFIG_ARCH_H720X is not set 158# CONFIG_ARCH_H720X is not set
147# CONFIG_ARCH_IMX is not set
148# CONFIG_ARCH_IOP13XX is not set 159# CONFIG_ARCH_IOP13XX is not set
149# CONFIG_ARCH_IOP32X is not set 160# CONFIG_ARCH_IOP32X is not set
150# CONFIG_ARCH_IOP33X is not set 161# CONFIG_ARCH_IOP33X is not set
@@ -153,25 +164,25 @@ CONFIG_FREEZER=y
153# CONFIG_ARCH_IXP4XX is not set 164# CONFIG_ARCH_IXP4XX is not set
154# CONFIG_ARCH_L7200 is not set 165# CONFIG_ARCH_L7200 is not set
155# CONFIG_ARCH_KIRKWOOD is not set 166# CONFIG_ARCH_KIRKWOOD is not set
156# CONFIG_ARCH_KS8695 is not set
157# CONFIG_ARCH_NS9XXX is not set
158# CONFIG_ARCH_LOKI is not set 167# CONFIG_ARCH_LOKI is not set
159# CONFIG_ARCH_MV78XX0 is not set 168# CONFIG_ARCH_MV78XX0 is not set
160CONFIG_ARCH_MXC=y
161# CONFIG_ARCH_ORION5X is not set 169# CONFIG_ARCH_ORION5X is not set
170# CONFIG_ARCH_MMP is not set
171# CONFIG_ARCH_KS8695 is not set
172# CONFIG_ARCH_NS9XXX is not set
173# CONFIG_ARCH_W90X900 is not set
162# CONFIG_ARCH_PNX4008 is not set 174# CONFIG_ARCH_PNX4008 is not set
163# CONFIG_ARCH_PXA is not set 175# CONFIG_ARCH_PXA is not set
164# CONFIG_ARCH_MMP is not set 176# CONFIG_ARCH_MSM is not set
165# CONFIG_ARCH_RPC is not set 177# CONFIG_ARCH_RPC is not set
166# CONFIG_ARCH_SA1100 is not set 178# CONFIG_ARCH_SA1100 is not set
167# CONFIG_ARCH_S3C2410 is not set 179# CONFIG_ARCH_S3C2410 is not set
168# CONFIG_ARCH_S3C64XX is not set 180# CONFIG_ARCH_S3C64XX is not set
169# CONFIG_ARCH_SHARK is not set 181# CONFIG_ARCH_SHARK is not set
170# CONFIG_ARCH_LH7A40X is not set 182# CONFIG_ARCH_LH7A40X is not set
183# CONFIG_ARCH_U300 is not set
171# CONFIG_ARCH_DAVINCI is not set 184# CONFIG_ARCH_DAVINCI is not set
172# CONFIG_ARCH_OMAP is not set 185# CONFIG_ARCH_OMAP is not set
173# CONFIG_ARCH_MSM is not set
174# CONFIG_ARCH_W90X900 is not set
175 186
176# 187#
177# Freescale MXC Implementations 188# Freescale MXC Implementations
@@ -188,6 +199,8 @@ CONFIG_MACH_MX27=y
188CONFIG_MACH_MX27ADS=y 199CONFIG_MACH_MX27ADS=y
189CONFIG_MACH_PCM038=y 200CONFIG_MACH_PCM038=y
190CONFIG_MACH_PCM970_BASEBOARD=y 201CONFIG_MACH_PCM970_BASEBOARD=y
202CONFIG_MACH_MX27_3DS=y
203CONFIG_MACH_MX27LITE=y
191CONFIG_MXC_IRQ_PRIOR=y 204CONFIG_MXC_IRQ_PRIOR=y
192CONFIG_MXC_PWM=y 205CONFIG_MXC_PWM=y
193 206
@@ -213,7 +226,6 @@ CONFIG_ARM_THUMB=y
213# CONFIG_CPU_DCACHE_DISABLE is not set 226# CONFIG_CPU_DCACHE_DISABLE is not set
214# CONFIG_CPU_DCACHE_WRITETHROUGH is not set 227# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
215# CONFIG_CPU_CACHE_ROUND_ROBIN is not set 228# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
216# CONFIG_OUTER_CACHE is not set
217CONFIG_COMMON_CLKDEV=y 229CONFIG_COMMON_CLKDEV=y
218 230
219# 231#
@@ -238,7 +250,6 @@ CONFIG_PREEMPT=y
238CONFIG_HZ=100 250CONFIG_HZ=100
239CONFIG_AEABI=y 251CONFIG_AEABI=y
240CONFIG_OABI_COMPAT=y 252CONFIG_OABI_COMPAT=y
241CONFIG_ARCH_FLATMEM_HAS_HOLES=y
242# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set 253# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
243# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set 254# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
244# CONFIG_HIGHMEM is not set 255# CONFIG_HIGHMEM is not set
@@ -253,10 +264,11 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
253# CONFIG_PHYS_ADDR_T_64BIT is not set 264# CONFIG_PHYS_ADDR_T_64BIT is not set
254CONFIG_ZONE_DMA_FLAG=0 265CONFIG_ZONE_DMA_FLAG=0
255CONFIG_VIRT_TO_BUS=y 266CONFIG_VIRT_TO_BUS=y
256CONFIG_UNEVICTABLE_LRU=y
257CONFIG_HAVE_MLOCK=y 267CONFIG_HAVE_MLOCK=y
258CONFIG_HAVE_MLOCKED_PAGE_BIT=y 268CONFIG_HAVE_MLOCKED_PAGE_BIT=y
269CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
259CONFIG_ALIGNMENT_TRAP=y 270CONFIG_ALIGNMENT_TRAP=y
271# CONFIG_UACCESS_WITH_MEMCPY is not set
260 272
261# 273#
262# Boot options 274# Boot options
@@ -361,6 +373,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
361# CONFIG_ECONET is not set 373# CONFIG_ECONET is not set
362# CONFIG_WAN_ROUTER is not set 374# CONFIG_WAN_ROUTER is not set
363# CONFIG_PHONET is not set 375# CONFIG_PHONET is not set
376# CONFIG_IEEE802154 is not set
364# CONFIG_NET_SCHED is not set 377# CONFIG_NET_SCHED is not set
365# CONFIG_DCB is not set 378# CONFIG_DCB is not set
366 379
@@ -474,7 +487,16 @@ CONFIG_MTD_PHYSMAP=y
474# CONFIG_MTD_DOC2000 is not set 487# CONFIG_MTD_DOC2000 is not set
475# CONFIG_MTD_DOC2001 is not set 488# CONFIG_MTD_DOC2001 is not set
476# CONFIG_MTD_DOC2001PLUS is not set 489# CONFIG_MTD_DOC2001PLUS is not set
477# CONFIG_MTD_NAND is not set 490CONFIG_MTD_NAND=y
491# CONFIG_MTD_NAND_VERIFY_WRITE is not set
492# CONFIG_MTD_NAND_ECC_SMC is not set
493# CONFIG_MTD_NAND_MUSEUM_IDS is not set
494# CONFIG_MTD_NAND_GPIO is not set
495CONFIG_MTD_NAND_IDS=y
496# CONFIG_MTD_NAND_DISKONCHIP is not set
497# CONFIG_MTD_NAND_NANDSIM is not set
498# CONFIG_MTD_NAND_PLATFORM is not set
499CONFIG_MTD_NAND_MXC=y
478# CONFIG_MTD_ONENAND is not set 500# CONFIG_MTD_ONENAND is not set
479 501
480# 502#
@@ -485,7 +507,15 @@ CONFIG_MTD_PHYSMAP=y
485# 507#
486# UBI - Unsorted block images 508# UBI - Unsorted block images
487# 509#
488# CONFIG_MTD_UBI is not set 510CONFIG_MTD_UBI=y
511CONFIG_MTD_UBI_WL_THRESHOLD=4096
512CONFIG_MTD_UBI_BEB_RESERVE=1
513# CONFIG_MTD_UBI_GLUEBI is not set
514
515#
516# UBI debugging options
517#
518# CONFIG_MTD_UBI_DEBUG is not set
489# CONFIG_PARPORT is not set 519# CONFIG_PARPORT is not set
490CONFIG_BLK_DEV=y 520CONFIG_BLK_DEV=y
491# CONFIG_BLK_DEV_COW_COMMON is not set 521# CONFIG_BLK_DEV_COW_COMMON is not set
@@ -494,7 +524,21 @@ CONFIG_BLK_DEV=y
494# CONFIG_BLK_DEV_RAM is not set 524# CONFIG_BLK_DEV_RAM is not set
495# CONFIG_CDROM_PKTCDVD is not set 525# CONFIG_CDROM_PKTCDVD is not set
496# CONFIG_ATA_OVER_ETH is not set 526# CONFIG_ATA_OVER_ETH is not set
497# CONFIG_MISC_DEVICES is not set 527# CONFIG_MG_DISK is not set
528CONFIG_MISC_DEVICES=y
529# CONFIG_ICS932S401 is not set
530# CONFIG_ENCLOSURE_SERVICES is not set
531# CONFIG_ISL29003 is not set
532# CONFIG_C2PORT is not set
533
534#
535# EEPROM support
536#
537CONFIG_EEPROM_AT24=y
538# CONFIG_EEPROM_AT25 is not set
539# CONFIG_EEPROM_LEGACY is not set
540# CONFIG_EEPROM_MAX6875 is not set
541# CONFIG_EEPROM_93CX6 is not set
498CONFIG_HAVE_IDE=y 542CONFIG_HAVE_IDE=y
499# CONFIG_IDE is not set 543# CONFIG_IDE is not set
500 544
@@ -508,7 +552,6 @@ CONFIG_HAVE_IDE=y
508# CONFIG_ATA is not set 552# CONFIG_ATA is not set
509# CONFIG_MD is not set 553# CONFIG_MD is not set
510CONFIG_NETDEVICES=y 554CONFIG_NETDEVICES=y
511CONFIG_COMPAT_NET_DEV_OPS=y
512# CONFIG_DUMMY is not set 555# CONFIG_DUMMY is not set
513# CONFIG_BONDING is not set 556# CONFIG_BONDING is not set
514# CONFIG_MACVLAN is not set 557# CONFIG_MACVLAN is not set
@@ -534,6 +577,8 @@ CONFIG_NET_ETHERNET=y
534# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set 577# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
535# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set 578# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
536# CONFIG_B44 is not set 579# CONFIG_B44 is not set
580# CONFIG_KS8842 is not set
581# CONFIG_KS8851 is not set
537CONFIG_FEC=y 582CONFIG_FEC=y
538# CONFIG_FEC2 is not set 583# CONFIG_FEC2 is not set
539# CONFIG_NETDEV_1000 is not set 584# CONFIG_NETDEV_1000 is not set
@@ -580,6 +625,11 @@ CONFIG_INPUT_EVDEV=y
580# CONFIG_INPUT_TABLET is not set 625# CONFIG_INPUT_TABLET is not set
581CONFIG_INPUT_TOUCHSCREEN=y 626CONFIG_INPUT_TOUCHSCREEN=y
582# CONFIG_TOUCHSCREEN_ADS7846 is not set 627# CONFIG_TOUCHSCREEN_ADS7846 is not set
628# CONFIG_TOUCHSCREEN_AD7877 is not set
629# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
630# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
631# CONFIG_TOUCHSCREEN_AD7879 is not set
632# CONFIG_TOUCHSCREEN_EETI is not set
583# CONFIG_TOUCHSCREEN_FUJITSU is not set 633# CONFIG_TOUCHSCREEN_FUJITSU is not set
584# CONFIG_TOUCHSCREEN_GUNZE is not set 634# CONFIG_TOUCHSCREEN_GUNZE is not set
585# CONFIG_TOUCHSCREEN_ELO is not set 635# CONFIG_TOUCHSCREEN_ELO is not set
@@ -592,6 +642,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
592# CONFIG_TOUCHSCREEN_TOUCHWIN is not set 642# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
593# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set 643# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
594# CONFIG_TOUCHSCREEN_TSC2007 is not set 644# CONFIG_TOUCHSCREEN_TSC2007 is not set
645# CONFIG_TOUCHSCREEN_W90X900 is not set
595# CONFIG_INPUT_MISC is not set 646# CONFIG_INPUT_MISC is not set
596 647
597# 648#
@@ -644,6 +695,7 @@ CONFIG_I2C_HELPER_AUTO=y
644# 695#
645# I2C system bus drivers (mostly embedded / system-on-chip) 696# I2C system bus drivers (mostly embedded / system-on-chip)
646# 697#
698# CONFIG_I2C_DESIGNWARE is not set
647# CONFIG_I2C_GPIO is not set 699# CONFIG_I2C_GPIO is not set
648CONFIG_I2C_IMX=y 700CONFIG_I2C_IMX=y
649# CONFIG_I2C_OCORES is not set 701# CONFIG_I2C_OCORES is not set
@@ -668,7 +720,6 @@ CONFIG_I2C_IMX=y
668# CONFIG_SENSORS_PCF8574 is not set 720# CONFIG_SENSORS_PCF8574 is not set
669# CONFIG_PCF8575 is not set 721# CONFIG_PCF8575 is not set
670# CONFIG_SENSORS_PCA9539 is not set 722# CONFIG_SENSORS_PCA9539 is not set
671# CONFIG_SENSORS_MAX6875 is not set
672# CONFIG_SENSORS_TSL2550 is not set 723# CONFIG_SENSORS_TSL2550 is not set
673# CONFIG_I2C_DEBUG_CORE is not set 724# CONFIG_I2C_DEBUG_CORE is not set
674# CONFIG_I2C_DEBUG_ALGO is not set 725# CONFIG_I2C_DEBUG_ALGO is not set
@@ -719,6 +770,7 @@ CONFIG_W1=y
719# 770#
720# CONFIG_W1_MASTER_DS2482 is not set 771# CONFIG_W1_MASTER_DS2482 is not set
721CONFIG_W1_MASTER_MXC=y 772CONFIG_W1_MASTER_MXC=y
773# CONFIG_W1_MASTER_DS1WM is not set
722# CONFIG_W1_MASTER_GPIO is not set 774# CONFIG_W1_MASTER_GPIO is not set
723 775
724# 776#
@@ -753,54 +805,16 @@ CONFIG_SSB_POSSIBLE=y
753# CONFIG_TPS65010 is not set 805# CONFIG_TPS65010 is not set
754# CONFIG_TWL4030_CORE is not set 806# CONFIG_TWL4030_CORE is not set
755# CONFIG_MFD_TMIO is not set 807# CONFIG_MFD_TMIO is not set
808# CONFIG_MFD_T7L66XB is not set
809# CONFIG_MFD_TC6387XB is not set
756# CONFIG_MFD_TC6393XB is not set 810# CONFIG_MFD_TC6393XB is not set
757# CONFIG_PMIC_DA903X is not set 811# CONFIG_PMIC_DA903X is not set
758# CONFIG_MFD_WM8400 is not set 812# CONFIG_MFD_WM8400 is not set
759# CONFIG_MFD_WM8350_I2C is not set 813# CONFIG_MFD_WM8350_I2C is not set
760# CONFIG_MFD_PCF50633 is not set 814# CONFIG_MFD_PCF50633 is not set
761 815# CONFIG_AB3100_CORE is not set
762# 816# CONFIG_EZX_PCAP is not set
763# Multimedia devices 817# CONFIG_MEDIA_SUPPORT is not set
764#
765
766#
767# Multimedia core support
768#
769CONFIG_VIDEO_DEV=y
770CONFIG_VIDEO_V4L2_COMMON=y
771CONFIG_VIDEO_ALLOW_V4L1=y
772CONFIG_VIDEO_V4L1_COMPAT=y
773# CONFIG_DVB_CORE is not set
774CONFIG_VIDEO_MEDIA=y
775
776#
777# Multimedia drivers
778#
779# CONFIG_MEDIA_ATTACH is not set
780CONFIG_MEDIA_TUNER=y
781# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
782CONFIG_MEDIA_TUNER_SIMPLE=y
783CONFIG_MEDIA_TUNER_TDA8290=y
784CONFIG_MEDIA_TUNER_TDA9887=y
785CONFIG_MEDIA_TUNER_TEA5761=y
786CONFIG_MEDIA_TUNER_TEA5767=y
787CONFIG_MEDIA_TUNER_MT20XX=y
788CONFIG_MEDIA_TUNER_XC2028=y
789CONFIG_MEDIA_TUNER_XC5000=y
790CONFIG_MEDIA_TUNER_MC44S803=y
791CONFIG_VIDEO_V4L2=y
792CONFIG_VIDEO_V4L1=y
793CONFIG_VIDEO_CAPTURE_DRIVERS=y
794# CONFIG_VIDEO_ADV_DEBUG is not set
795# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
796CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
797# CONFIG_VIDEO_VIVI is not set
798# CONFIG_VIDEO_CPIA is not set
799# CONFIG_VIDEO_SAA5246A is not set
800# CONFIG_VIDEO_SAA5249 is not set
801# CONFIG_SOC_CAMERA is not set
802# CONFIG_RADIO_ADAPTERS is not set
803# CONFIG_DAB is not set
804 818
805# 819#
806# Graphics support 820# Graphics support
@@ -917,6 +931,7 @@ CONFIG_RTC_DRV_PCF8563=y
917# CONFIG_RTC_DRV_S35390A is not set 931# CONFIG_RTC_DRV_S35390A is not set
918# CONFIG_RTC_DRV_FM3130 is not set 932# CONFIG_RTC_DRV_FM3130 is not set
919# CONFIG_RTC_DRV_RX8581 is not set 933# CONFIG_RTC_DRV_RX8581 is not set
934# CONFIG_RTC_DRV_RX8025 is not set
920 935
921# 936#
922# SPI RTC drivers 937# SPI RTC drivers
@@ -962,12 +977,15 @@ CONFIG_RTC_DRV_PCF8563=y
962# CONFIG_REISERFS_FS is not set 977# CONFIG_REISERFS_FS is not set
963# CONFIG_JFS_FS is not set 978# CONFIG_JFS_FS is not set
964# CONFIG_FS_POSIX_ACL is not set 979# CONFIG_FS_POSIX_ACL is not set
965CONFIG_FILE_LOCKING=y
966# CONFIG_XFS_FS is not set 980# CONFIG_XFS_FS is not set
981# CONFIG_GFS2_FS is not set
967# CONFIG_OCFS2_FS is not set 982# CONFIG_OCFS2_FS is not set
968# CONFIG_BTRFS_FS is not set 983# CONFIG_BTRFS_FS is not set
984CONFIG_FILE_LOCKING=y
985CONFIG_FSNOTIFY=y
969# CONFIG_DNOTIFY is not set 986# CONFIG_DNOTIFY is not set
970# CONFIG_INOTIFY is not set 987# CONFIG_INOTIFY is not set
988CONFIG_INOTIFY_USER=y
971# CONFIG_QUOTA is not set 989# CONFIG_QUOTA is not set
972# CONFIG_AUTOFS_FS is not set 990# CONFIG_AUTOFS_FS is not set
973# CONFIG_AUTOFS4_FS is not set 991# CONFIG_AUTOFS4_FS is not set
@@ -1021,6 +1039,12 @@ CONFIG_JFFS2_ZLIB=y
1021# CONFIG_JFFS2_LZO is not set 1039# CONFIG_JFFS2_LZO is not set
1022CONFIG_JFFS2_RTIME=y 1040CONFIG_JFFS2_RTIME=y
1023# CONFIG_JFFS2_RUBIN is not set 1041# CONFIG_JFFS2_RUBIN is not set
1042CONFIG_UBIFS_FS=y
1043# CONFIG_UBIFS_FS_XATTR is not set
1044# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
1045CONFIG_UBIFS_FS_LZO=y
1046CONFIG_UBIFS_FS_ZLIB=y
1047# CONFIG_UBIFS_FS_DEBUG is not set
1024# CONFIG_CRAMFS is not set 1048# CONFIG_CRAMFS is not set
1025# CONFIG_SQUASHFS is not set 1049# CONFIG_SQUASHFS is not set
1026# CONFIG_VXFS_FS is not set 1050# CONFIG_VXFS_FS is not set
@@ -1119,25 +1143,11 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y
1119CONFIG_NOP_TRACER=y 1143CONFIG_NOP_TRACER=y
1120CONFIG_HAVE_FUNCTION_TRACER=y 1144CONFIG_HAVE_FUNCTION_TRACER=y
1121CONFIG_RING_BUFFER=y 1145CONFIG_RING_BUFFER=y
1146CONFIG_EVENT_TRACING=y
1147CONFIG_CONTEXT_SWITCH_TRACER=y
1122CONFIG_TRACING=y 1148CONFIG_TRACING=y
1123CONFIG_TRACING_SUPPORT=y 1149CONFIG_TRACING_SUPPORT=y
1124 1150# CONFIG_FTRACE is not set
1125#
1126# Tracers
1127#
1128# CONFIG_FUNCTION_TRACER is not set
1129# CONFIG_IRQSOFF_TRACER is not set
1130# CONFIG_PREEMPT_TRACER is not set
1131# CONFIG_SCHED_TRACER is not set
1132# CONFIG_CONTEXT_SWITCH_TRACER is not set
1133# CONFIG_EVENT_TRACER is not set
1134# CONFIG_BOOT_TRACER is not set
1135# CONFIG_TRACE_BRANCH_PROFILING is not set
1136# CONFIG_STACK_TRACER is not set
1137# CONFIG_KMEMTRACE is not set
1138# CONFIG_WORKQUEUE_TRACER is not set
1139# CONFIG_BLK_DEV_IO_TRACE is not set
1140# CONFIG_FTRACE_STARTUP_TEST is not set
1141# CONFIG_DYNAMIC_DEBUG is not set 1151# CONFIG_DYNAMIC_DEBUG is not set
1142# CONFIG_SAMPLES is not set 1152# CONFIG_SAMPLES is not set
1143CONFIG_HAVE_ARCH_KGDB=y 1153CONFIG_HAVE_ARCH_KGDB=y
@@ -1151,16 +1161,104 @@ CONFIG_ARM_UNWIND=y
1151# CONFIG_SECURITY is not set 1161# CONFIG_SECURITY is not set
1152# CONFIG_SECURITYFS is not set 1162# CONFIG_SECURITYFS is not set
1153# CONFIG_SECURITY_FILE_CAPABILITIES is not set 1163# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1154# CONFIG_CRYPTO is not set 1164CONFIG_CRYPTO=y
1165
1166#
1167# Crypto core or helper
1168#
1169# CONFIG_CRYPTO_FIPS is not set
1170CONFIG_CRYPTO_ALGAPI=y
1171CONFIG_CRYPTO_ALGAPI2=y
1172# CONFIG_CRYPTO_MANAGER is not set
1173# CONFIG_CRYPTO_MANAGER2 is not set
1174# CONFIG_CRYPTO_GF128MUL is not set
1175# CONFIG_CRYPTO_NULL is not set
1176# CONFIG_CRYPTO_CRYPTD is not set
1177# CONFIG_CRYPTO_AUTHENC is not set
1178# CONFIG_CRYPTO_TEST is not set
1179
1180#
1181# Authenticated Encryption with Associated Data
1182#
1183# CONFIG_CRYPTO_CCM is not set
1184# CONFIG_CRYPTO_GCM is not set
1185# CONFIG_CRYPTO_SEQIV is not set
1186
1187#
1188# Block modes
1189#
1190# CONFIG_CRYPTO_CBC is not set
1191# CONFIG_CRYPTO_CTR is not set
1192# CONFIG_CRYPTO_CTS is not set
1193# CONFIG_CRYPTO_ECB is not set
1194# CONFIG_CRYPTO_LRW is not set
1195# CONFIG_CRYPTO_PCBC is not set
1196# CONFIG_CRYPTO_XTS is not set
1197
1198#
1199# Hash modes
1200#
1201# CONFIG_CRYPTO_HMAC is not set
1202# CONFIG_CRYPTO_XCBC is not set
1203
1204#
1205# Digest
1206#
1207# CONFIG_CRYPTO_CRC32C is not set
1208# CONFIG_CRYPTO_MD4 is not set
1209# CONFIG_CRYPTO_MD5 is not set
1210# CONFIG_CRYPTO_MICHAEL_MIC is not set
1211# CONFIG_CRYPTO_RMD128 is not set
1212# CONFIG_CRYPTO_RMD160 is not set
1213# CONFIG_CRYPTO_RMD256 is not set
1214# CONFIG_CRYPTO_RMD320 is not set
1215# CONFIG_CRYPTO_SHA1 is not set
1216# CONFIG_CRYPTO_SHA256 is not set
1217# CONFIG_CRYPTO_SHA512 is not set
1218# CONFIG_CRYPTO_TGR192 is not set
1219# CONFIG_CRYPTO_WP512 is not set
1220
1221#
1222# Ciphers
1223#
1224# CONFIG_CRYPTO_AES is not set
1225# CONFIG_CRYPTO_ANUBIS is not set
1226# CONFIG_CRYPTO_ARC4 is not set
1227# CONFIG_CRYPTO_BLOWFISH is not set
1228# CONFIG_CRYPTO_CAMELLIA is not set
1229# CONFIG_CRYPTO_CAST5 is not set
1230# CONFIG_CRYPTO_CAST6 is not set
1231# CONFIG_CRYPTO_DES is not set
1232# CONFIG_CRYPTO_FCRYPT is not set
1233# CONFIG_CRYPTO_KHAZAD is not set
1234# CONFIG_CRYPTO_SALSA20 is not set
1235# CONFIG_CRYPTO_SEED is not set
1236# CONFIG_CRYPTO_SERPENT is not set
1237# CONFIG_CRYPTO_TEA is not set
1238# CONFIG_CRYPTO_TWOFISH is not set
1239
1240#
1241# Compression
1242#
1243CONFIG_CRYPTO_DEFLATE=y
1244# CONFIG_CRYPTO_ZLIB is not set
1245CONFIG_CRYPTO_LZO=y
1246
1247#
1248# Random Number Generation
1249#
1250# CONFIG_CRYPTO_ANSI_CPRNG is not set
1251CONFIG_CRYPTO_HW=y
1155CONFIG_BINARY_PRINTF=y 1252CONFIG_BINARY_PRINTF=y
1156 1253
1157# 1254#
1158# Library routines 1255# Library routines
1159# 1256#
1160CONFIG_BITREVERSE=y 1257CONFIG_BITREVERSE=y
1258CONFIG_RATIONAL=y
1161CONFIG_GENERIC_FIND_LAST_BIT=y 1259CONFIG_GENERIC_FIND_LAST_BIT=y
1162# CONFIG_CRC_CCITT is not set 1260# CONFIG_CRC_CCITT is not set
1163# CONFIG_CRC16 is not set 1261CONFIG_CRC16=y
1164# CONFIG_CRC_T10DIF is not set 1262# CONFIG_CRC_T10DIF is not set
1165# CONFIG_CRC_ITU_T is not set 1263# CONFIG_CRC_ITU_T is not set
1166CONFIG_CRC32=y 1264CONFIG_CRC32=y
@@ -1168,6 +1266,8 @@ CONFIG_CRC32=y
1168# CONFIG_LIBCRC32C is not set 1266# CONFIG_LIBCRC32C is not set
1169CONFIG_ZLIB_INFLATE=y 1267CONFIG_ZLIB_INFLATE=y
1170CONFIG_ZLIB_DEFLATE=y 1268CONFIG_ZLIB_DEFLATE=y
1269CONFIG_LZO_COMPRESS=y
1270CONFIG_LZO_DECOMPRESS=y
1171CONFIG_HAS_IOMEM=y 1271CONFIG_HAS_IOMEM=y
1172CONFIG_HAS_IOPORT=y 1272CONFIG_HAS_IOPORT=y
1173CONFIG_HAS_DMA=y 1273CONFIG_HAS_DMA=y
diff --git a/arch/arm/configs/mx3_defconfig b/arch/arm/configs/mx3_defconfig
index 20ada526f6de..a4f9a2a8149c 100644
--- a/arch/arm/configs/mx3_defconfig
+++ b/arch/arm/configs/mx3_defconfig
@@ -1,15 +1,15 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.30-rc1 3# Linux kernel version: 2.6.31-rc4
4# Wed Apr 8 11:06:37 2009 4# Tue Jul 28 14:11:34 2009
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_HAVE_PWM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y 8CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y 9CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y 10CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y 11CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y 12CONFIG_MMU=y
12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y 13CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y 14CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_HAVE_LATENCYTOP_SUPPORT=y 15CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -18,14 +18,13 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y 18CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y 19CONFIG_GENERIC_IRQ_PROBE=y
20CONFIG_RWSEM_GENERIC_SPINLOCK=y 20CONFIG_RWSEM_GENERIC_SPINLOCK=y
21# CONFIG_ARCH_HAS_ILOG2_U32 is not set
22# CONFIG_ARCH_HAS_ILOG2_U64 is not set
23CONFIG_GENERIC_HWEIGHT=y 21CONFIG_GENERIC_HWEIGHT=y
24CONFIG_GENERIC_CALIBRATE_DELAY=y 22CONFIG_GENERIC_CALIBRATE_DELAY=y
25CONFIG_ARCH_MTD_XIP=y 23CONFIG_ARCH_MTD_XIP=y
26CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
27CONFIG_VECTORS_BASE=0xffff0000 25CONFIG_VECTORS_BASE=0xffff0000
28CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 26CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
27CONFIG_CONSTRUCTORS=y
29 28
30# 29#
31# General setup 30# General setup
@@ -86,7 +85,12 @@ CONFIG_TIMERFD=y
86CONFIG_EVENTFD=y 85CONFIG_EVENTFD=y
87CONFIG_SHMEM=y 86CONFIG_SHMEM=y
88CONFIG_AIO=y 87CONFIG_AIO=y
88
89#
90# Performance Counters
91#
89CONFIG_VM_EVENT_COUNTERS=y 92CONFIG_VM_EVENT_COUNTERS=y
93# CONFIG_STRIP_ASM_SYMS is not set
90CONFIG_COMPAT_BRK=y 94CONFIG_COMPAT_BRK=y
91CONFIG_SLAB=y 95CONFIG_SLAB=y
92# CONFIG_SLUB is not set 96# CONFIG_SLUB is not set
@@ -97,6 +101,11 @@ CONFIG_HAVE_OPROFILE=y
97# CONFIG_KPROBES is not set 101# CONFIG_KPROBES is not set
98CONFIG_HAVE_KPROBES=y 102CONFIG_HAVE_KPROBES=y
99CONFIG_HAVE_KRETPROBES=y 103CONFIG_HAVE_KRETPROBES=y
104CONFIG_HAVE_CLK=y
105
106#
107# GCOV-based kernel profiling
108#
100# CONFIG_SLOW_WORK is not set 109# CONFIG_SLOW_WORK is not set
101CONFIG_HAVE_GENERIC_DMA_COHERENT=y 110CONFIG_HAVE_GENERIC_DMA_COHERENT=y
102CONFIG_SLABINFO=y 111CONFIG_SLABINFO=y
@@ -109,7 +118,7 @@ CONFIG_MODULE_FORCE_UNLOAD=y
109CONFIG_MODVERSIONS=y 118CONFIG_MODVERSIONS=y
110# CONFIG_MODULE_SRCVERSION_ALL is not set 119# CONFIG_MODULE_SRCVERSION_ALL is not set
111CONFIG_BLOCK=y 120CONFIG_BLOCK=y
112# CONFIG_LBD is not set 121CONFIG_LBDAF=y
113# CONFIG_BLK_DEV_BSG is not set 122# CONFIG_BLK_DEV_BSG is not set
114# CONFIG_BLK_DEV_INTEGRITY is not set 123# CONFIG_BLK_DEV_INTEGRITY is not set
115 124
@@ -136,13 +145,14 @@ CONFIG_FREEZER=y
136# CONFIG_ARCH_VERSATILE is not set 145# CONFIG_ARCH_VERSATILE is not set
137# CONFIG_ARCH_AT91 is not set 146# CONFIG_ARCH_AT91 is not set
138# CONFIG_ARCH_CLPS711X is not set 147# CONFIG_ARCH_CLPS711X is not set
148# CONFIG_ARCH_GEMINI is not set
139# CONFIG_ARCH_EBSA110 is not set 149# CONFIG_ARCH_EBSA110 is not set
140# CONFIG_ARCH_EP93XX is not set 150# CONFIG_ARCH_EP93XX is not set
141# CONFIG_ARCH_GEMINI is not set
142# CONFIG_ARCH_FOOTBRIDGE is not set 151# CONFIG_ARCH_FOOTBRIDGE is not set
152CONFIG_ARCH_MXC=y
153# CONFIG_ARCH_STMP3XXX is not set
143# CONFIG_ARCH_NETX is not set 154# CONFIG_ARCH_NETX is not set
144# CONFIG_ARCH_H720X is not set 155# CONFIG_ARCH_H720X is not set
145# CONFIG_ARCH_IMX is not set
146# CONFIG_ARCH_IOP13XX is not set 156# CONFIG_ARCH_IOP13XX is not set
147# CONFIG_ARCH_IOP32X is not set 157# CONFIG_ARCH_IOP32X is not set
148# CONFIG_ARCH_IOP33X is not set 158# CONFIG_ARCH_IOP33X is not set
@@ -151,25 +161,25 @@ CONFIG_FREEZER=y
151# CONFIG_ARCH_IXP4XX is not set 161# CONFIG_ARCH_IXP4XX is not set
152# CONFIG_ARCH_L7200 is not set 162# CONFIG_ARCH_L7200 is not set
153# CONFIG_ARCH_KIRKWOOD is not set 163# CONFIG_ARCH_KIRKWOOD is not set
154# CONFIG_ARCH_KS8695 is not set
155# CONFIG_ARCH_NS9XXX is not set
156# CONFIG_ARCH_LOKI is not set 164# CONFIG_ARCH_LOKI is not set
157# CONFIG_ARCH_MV78XX0 is not set 165# CONFIG_ARCH_MV78XX0 is not set
158CONFIG_ARCH_MXC=y
159# CONFIG_ARCH_ORION5X is not set 166# CONFIG_ARCH_ORION5X is not set
167# CONFIG_ARCH_MMP is not set
168# CONFIG_ARCH_KS8695 is not set
169# CONFIG_ARCH_NS9XXX is not set
170# CONFIG_ARCH_W90X900 is not set
160# CONFIG_ARCH_PNX4008 is not set 171# CONFIG_ARCH_PNX4008 is not set
161# CONFIG_ARCH_PXA is not set 172# CONFIG_ARCH_PXA is not set
162# CONFIG_ARCH_MMP is not set 173# CONFIG_ARCH_MSM is not set
163# CONFIG_ARCH_RPC is not set 174# CONFIG_ARCH_RPC is not set
164# CONFIG_ARCH_SA1100 is not set 175# CONFIG_ARCH_SA1100 is not set
165# CONFIG_ARCH_S3C2410 is not set 176# CONFIG_ARCH_S3C2410 is not set
166# CONFIG_ARCH_S3C64XX is not set 177# CONFIG_ARCH_S3C64XX is not set
167# CONFIG_ARCH_SHARK is not set 178# CONFIG_ARCH_SHARK is not set
168# CONFIG_ARCH_LH7A40X is not set 179# CONFIG_ARCH_LH7A40X is not set
180# CONFIG_ARCH_U300 is not set
169# CONFIG_ARCH_DAVINCI is not set 181# CONFIG_ARCH_DAVINCI is not set
170# CONFIG_ARCH_OMAP is not set 182# CONFIG_ARCH_OMAP is not set
171# CONFIG_ARCH_MSM is not set
172# CONFIG_ARCH_W90X900 is not set
173 183
174# 184#
175# Freescale MXC Implementations 185# Freescale MXC Implementations
@@ -178,6 +188,7 @@ CONFIG_ARCH_MXC=y
178# CONFIG_ARCH_MX2 is not set 188# CONFIG_ARCH_MX2 is not set
179CONFIG_ARCH_MX3=y 189CONFIG_ARCH_MX3=y
180CONFIG_ARCH_MX31=y 190CONFIG_ARCH_MX31=y
191CONFIG_ARCH_MX35=y
181 192
182# 193#
183# MX3 platforms: 194# MX3 platforms:
@@ -185,12 +196,19 @@ CONFIG_ARCH_MX31=y
185CONFIG_MACH_MX31ADS=y 196CONFIG_MACH_MX31ADS=y
186CONFIG_MACH_MX31ADS_WM1133_EV1=y 197CONFIG_MACH_MX31ADS_WM1133_EV1=y
187CONFIG_MACH_PCM037=y 198CONFIG_MACH_PCM037=y
199CONFIG_MACH_PCM037_EET=y
188CONFIG_MACH_MX31LITE=y 200CONFIG_MACH_MX31LITE=y
189CONFIG_MACH_MX31_3DS=y 201CONFIG_MACH_MX31_3DS=y
190CONFIG_MACH_MX31MOBOARD=y 202CONFIG_MACH_MX31MOBOARD=y
203CONFIG_MACH_MX31LILLY=y
191CONFIG_MACH_QONG=y 204CONFIG_MACH_QONG=y
205CONFIG_MACH_PCM043=y
206CONFIG_MACH_ARMADILLO5X0=y
207CONFIG_MACH_MX35_3DS=y
192CONFIG_MXC_IRQ_PRIOR=y 208CONFIG_MXC_IRQ_PRIOR=y
193CONFIG_MXC_PWM=y 209CONFIG_MXC_PWM=y
210CONFIG_ARCH_HAS_RNGA=y
211CONFIG_ARCH_MXC_IOMUX_V3=y
194 212
195# 213#
196# Processor Type 214# Processor Type
@@ -218,6 +236,7 @@ CONFIG_ARM_THUMB=y
218# CONFIG_CPU_BPREDICT_DISABLE is not set 236# CONFIG_CPU_BPREDICT_DISABLE is not set
219CONFIG_OUTER_CACHE=y 237CONFIG_OUTER_CACHE=y
220CONFIG_CACHE_L2X0=y 238CONFIG_CACHE_L2X0=y
239# CONFIG_ARM_ERRATA_411920 is not set
221CONFIG_COMMON_CLKDEV=y 240CONFIG_COMMON_CLKDEV=y
222 241
223# 242#
@@ -242,7 +261,6 @@ CONFIG_PREEMPT=y
242CONFIG_HZ=100 261CONFIG_HZ=100
243CONFIG_AEABI=y 262CONFIG_AEABI=y
244CONFIG_OABI_COMPAT=y 263CONFIG_OABI_COMPAT=y
245CONFIG_ARCH_FLATMEM_HAS_HOLES=y
246# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set 264# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
247# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set 265# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
248# CONFIG_HIGHMEM is not set 266# CONFIG_HIGHMEM is not set
@@ -257,10 +275,11 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
257# CONFIG_PHYS_ADDR_T_64BIT is not set 275# CONFIG_PHYS_ADDR_T_64BIT is not set
258CONFIG_ZONE_DMA_FLAG=0 276CONFIG_ZONE_DMA_FLAG=0
259CONFIG_VIRT_TO_BUS=y 277CONFIG_VIRT_TO_BUS=y
260CONFIG_UNEVICTABLE_LRU=y
261CONFIG_HAVE_MLOCK=y 278CONFIG_HAVE_MLOCK=y
262CONFIG_HAVE_MLOCKED_PAGE_BIT=y 279CONFIG_HAVE_MLOCKED_PAGE_BIT=y
280CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
263CONFIG_ALIGNMENT_TRAP=y 281CONFIG_ALIGNMENT_TRAP=y
282# CONFIG_UACCESS_WITH_MEMCPY is not set
264 283
265# 284#
266# Boot options 285# Boot options
@@ -362,6 +381,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
362# CONFIG_ECONET is not set 381# CONFIG_ECONET is not set
363# CONFIG_WAN_ROUTER is not set 382# CONFIG_WAN_ROUTER is not set
364# CONFIG_PHONET is not set 383# CONFIG_PHONET is not set
384# CONFIG_IEEE802154 is not set
365# CONFIG_NET_SCHED is not set 385# CONFIG_NET_SCHED is not set
366# CONFIG_DCB is not set 386# CONFIG_DCB is not set
367 387
@@ -465,7 +485,16 @@ CONFIG_MTD_PHYSMAP=y
465# CONFIG_MTD_DOC2000 is not set 485# CONFIG_MTD_DOC2000 is not set
466# CONFIG_MTD_DOC2001 is not set 486# CONFIG_MTD_DOC2001 is not set
467# CONFIG_MTD_DOC2001PLUS is not set 487# CONFIG_MTD_DOC2001PLUS is not set
468# CONFIG_MTD_NAND is not set 488CONFIG_MTD_NAND=y
489# CONFIG_MTD_NAND_VERIFY_WRITE is not set
490# CONFIG_MTD_NAND_ECC_SMC is not set
491# CONFIG_MTD_NAND_MUSEUM_IDS is not set
492# CONFIG_MTD_NAND_GPIO is not set
493CONFIG_MTD_NAND_IDS=y
494# CONFIG_MTD_NAND_DISKONCHIP is not set
495# CONFIG_MTD_NAND_NANDSIM is not set
496# CONFIG_MTD_NAND_PLATFORM is not set
497CONFIG_MTD_NAND_MXC=y
469# CONFIG_MTD_ONENAND is not set 498# CONFIG_MTD_ONENAND is not set
470 499
471# 500#
@@ -476,10 +505,30 @@ CONFIG_MTD_PHYSMAP=y
476# 505#
477# UBI - Unsorted block images 506# UBI - Unsorted block images
478# 507#
479# CONFIG_MTD_UBI is not set 508CONFIG_MTD_UBI=y
509CONFIG_MTD_UBI_WL_THRESHOLD=4096
510CONFIG_MTD_UBI_BEB_RESERVE=1
511# CONFIG_MTD_UBI_GLUEBI is not set
512
513#
514# UBI debugging options
515#
516# CONFIG_MTD_UBI_DEBUG is not set
480# CONFIG_PARPORT is not set 517# CONFIG_PARPORT is not set
481# CONFIG_BLK_DEV is not set 518# CONFIG_BLK_DEV is not set
482# CONFIG_MISC_DEVICES is not set 519CONFIG_MISC_DEVICES=y
520# CONFIG_ICS932S401 is not set
521# CONFIG_ENCLOSURE_SERVICES is not set
522# CONFIG_ISL29003 is not set
523# CONFIG_C2PORT is not set
524
525#
526# EEPROM support
527#
528CONFIG_EEPROM_AT24=y
529# CONFIG_EEPROM_LEGACY is not set
530# CONFIG_EEPROM_MAX6875 is not set
531# CONFIG_EEPROM_93CX6 is not set
483CONFIG_HAVE_IDE=y 532CONFIG_HAVE_IDE=y
484# CONFIG_IDE is not set 533# CONFIG_IDE is not set
485 534
@@ -493,7 +542,6 @@ CONFIG_HAVE_IDE=y
493# CONFIG_ATA is not set 542# CONFIG_ATA is not set
494# CONFIG_MD is not set 543# CONFIG_MD is not set
495CONFIG_NETDEVICES=y 544CONFIG_NETDEVICES=y
496CONFIG_COMPAT_NET_DEV_OPS=y
497# CONFIG_DUMMY is not set 545# CONFIG_DUMMY is not set
498# CONFIG_BONDING is not set 546# CONFIG_BONDING is not set
499# CONFIG_MACVLAN is not set 547# CONFIG_MACVLAN is not set
@@ -528,7 +576,7 @@ CONFIG_MII=y
528# CONFIG_ETHOC is not set 576# CONFIG_ETHOC is not set
529# CONFIG_SMC911X is not set 577# CONFIG_SMC911X is not set
530CONFIG_SMSC911X=y 578CONFIG_SMSC911X=y
531# CONFIG_DNET is not set 579CONFIG_DNET=y
532# CONFIG_IBM_NEW_EMAC_ZMII is not set 580# CONFIG_IBM_NEW_EMAC_ZMII is not set
533# CONFIG_IBM_NEW_EMAC_RGMII is not set 581# CONFIG_IBM_NEW_EMAC_RGMII is not set
534# CONFIG_IBM_NEW_EMAC_TAH is not set 582# CONFIG_IBM_NEW_EMAC_TAH is not set
@@ -537,8 +585,10 @@ CONFIG_SMSC911X=y
537# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set 585# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
538# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set 586# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
539# CONFIG_B44 is not set 587# CONFIG_B44 is not set
540CONFIG_CS89x0=y 588# CONFIG_CS89x0 is not set
541CONFIG_CS89x0_NONISA_IRQ=y 589# CONFIG_KS8842 is not set
590CONFIG_FEC=y
591# CONFIG_FEC2 is not set
542# CONFIG_NETDEV_1000 is not set 592# CONFIG_NETDEV_1000 is not set
543# CONFIG_NETDEV_10000 is not set 593# CONFIG_NETDEV_10000 is not set
544 594
@@ -609,6 +659,7 @@ CONFIG_I2C_HELPER_AUTO=y
609# 659#
610# I2C system bus drivers (mostly embedded / system-on-chip) 660# I2C system bus drivers (mostly embedded / system-on-chip)
611# 661#
662# CONFIG_I2C_DESIGNWARE is not set
612# CONFIG_I2C_GPIO is not set 663# CONFIG_I2C_GPIO is not set
613CONFIG_I2C_IMX=y 664CONFIG_I2C_IMX=y
614# CONFIG_I2C_OCORES is not set 665# CONFIG_I2C_OCORES is not set
@@ -633,7 +684,6 @@ CONFIG_I2C_IMX=y
633# CONFIG_SENSORS_PCF8574 is not set 684# CONFIG_SENSORS_PCF8574 is not set
634# CONFIG_PCF8575 is not set 685# CONFIG_PCF8575 is not set
635# CONFIG_SENSORS_PCA9539 is not set 686# CONFIG_SENSORS_PCA9539 is not set
636# CONFIG_SENSORS_MAX6875 is not set
637# CONFIG_SENSORS_TSL2550 is not set 687# CONFIG_SENSORS_TSL2550 is not set
638# CONFIG_I2C_DEBUG_CORE is not set 688# CONFIG_I2C_DEBUG_CORE is not set
639# CONFIG_I2C_DEBUG_ALGO is not set 689# CONFIG_I2C_DEBUG_ALGO is not set
@@ -669,6 +719,7 @@ CONFIG_W1=y
669# 719#
670# CONFIG_W1_MASTER_DS2482 is not set 720# CONFIG_W1_MASTER_DS2482 is not set
671CONFIG_W1_MASTER_MXC=y 721CONFIG_W1_MASTER_MXC=y
722# CONFIG_W1_MASTER_DS1WM is not set
672# CONFIG_W1_MASTER_GPIO is not set 723# CONFIG_W1_MASTER_GPIO is not set
673 724
674# 725#
@@ -703,6 +754,8 @@ CONFIG_SSB_POSSIBLE=y
703# CONFIG_TPS65010 is not set 754# CONFIG_TPS65010 is not set
704# CONFIG_TWL4030_CORE is not set 755# CONFIG_TWL4030_CORE is not set
705# CONFIG_MFD_TMIO is not set 756# CONFIG_MFD_TMIO is not set
757# CONFIG_MFD_T7L66XB is not set
758# CONFIG_MFD_TC6387XB is not set
706# CONFIG_MFD_TC6393XB is not set 759# CONFIG_MFD_TC6393XB is not set
707# CONFIG_PMIC_DA903X is not set 760# CONFIG_PMIC_DA903X is not set
708# CONFIG_MFD_WM8400 is not set 761# CONFIG_MFD_WM8400 is not set
@@ -711,10 +764,8 @@ CONFIG_MFD_WM8350_CONFIG_MODE_0=y
711CONFIG_MFD_WM8352_CONFIG_MODE_0=y 764CONFIG_MFD_WM8352_CONFIG_MODE_0=y
712CONFIG_MFD_WM8350_I2C=y 765CONFIG_MFD_WM8350_I2C=y
713# CONFIG_MFD_PCF50633 is not set 766# CONFIG_MFD_PCF50633 is not set
714 767# CONFIG_AB3100_CORE is not set
715# 768CONFIG_MEDIA_SUPPORT=y
716# Multimedia devices
717#
718 769
719# 770#
720# Multimedia core support 771# Multimedia core support
@@ -758,8 +809,10 @@ CONFIG_SOC_CAMERA_MT9T031=y
758CONFIG_SOC_CAMERA_MT9V022=y 809CONFIG_SOC_CAMERA_MT9V022=y
759CONFIG_SOC_CAMERA_TW9910=y 810CONFIG_SOC_CAMERA_TW9910=y
760# CONFIG_SOC_CAMERA_PLATFORM is not set 811# CONFIG_SOC_CAMERA_PLATFORM is not set
761# CONFIG_SOC_CAMERA_OV772X is not set 812CONFIG_SOC_CAMERA_OV772X=y
813CONFIG_MX3_VIDEO=y
762CONFIG_VIDEO_MX3=y 814CONFIG_VIDEO_MX3=y
815# CONFIG_VIDEO_SH_MOBILE_CEU is not set
763# CONFIG_RADIO_ADAPTERS is not set 816# CONFIG_RADIO_ADAPTERS is not set
764# CONFIG_DAB is not set 817# CONFIG_DAB is not set
765 818
@@ -847,8 +900,11 @@ CONFIG_REGULATOR=y
847# CONFIG_REGULATOR_DEBUG is not set 900# CONFIG_REGULATOR_DEBUG is not set
848# CONFIG_REGULATOR_FIXED_VOLTAGE is not set 901# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
849# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set 902# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
903# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
850# CONFIG_REGULATOR_BQ24022 is not set 904# CONFIG_REGULATOR_BQ24022 is not set
905# CONFIG_REGULATOR_MAX1586 is not set
851CONFIG_REGULATOR_WM8350=y 906CONFIG_REGULATOR_WM8350=y
907# CONFIG_REGULATOR_LP3971 is not set
852# CONFIG_UIO is not set 908# CONFIG_UIO is not set
853# CONFIG_STAGING is not set 909# CONFIG_STAGING is not set
854 910
@@ -861,10 +917,12 @@ CONFIG_REGULATOR_WM8350=y
861# CONFIG_REISERFS_FS is not set 917# CONFIG_REISERFS_FS is not set
862# CONFIG_JFS_FS is not set 918# CONFIG_JFS_FS is not set
863# CONFIG_FS_POSIX_ACL is not set 919# CONFIG_FS_POSIX_ACL is not set
864CONFIG_FILE_LOCKING=y
865# CONFIG_XFS_FS is not set 920# CONFIG_XFS_FS is not set
921# CONFIG_GFS2_FS is not set
866# CONFIG_OCFS2_FS is not set 922# CONFIG_OCFS2_FS is not set
867# CONFIG_BTRFS_FS is not set 923# CONFIG_BTRFS_FS is not set
924CONFIG_FILE_LOCKING=y
925CONFIG_FSNOTIFY=y
868# CONFIG_DNOTIFY is not set 926# CONFIG_DNOTIFY is not set
869CONFIG_INOTIFY=y 927CONFIG_INOTIFY=y
870CONFIG_INOTIFY_USER=y 928CONFIG_INOTIFY_USER=y
@@ -921,6 +979,12 @@ CONFIG_JFFS2_ZLIB=y
921# CONFIG_JFFS2_LZO is not set 979# CONFIG_JFFS2_LZO is not set
922CONFIG_JFFS2_RTIME=y 980CONFIG_JFFS2_RTIME=y
923# CONFIG_JFFS2_RUBIN is not set 981# CONFIG_JFFS2_RUBIN is not set
982CONFIG_UBIFS_FS=y
983# CONFIG_UBIFS_FS_XATTR is not set
984# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
985CONFIG_UBIFS_FS_LZO=y
986CONFIG_UBIFS_FS_ZLIB=y
987# CONFIG_UBIFS_FS_DEBUG is not set
924# CONFIG_CRAMFS is not set 988# CONFIG_CRAMFS is not set
925# CONFIG_SQUASHFS is not set 989# CONFIG_SQUASHFS is not set
926# CONFIG_VXFS_FS is not set 990# CONFIG_VXFS_FS is not set
@@ -937,6 +1001,7 @@ CONFIG_NFS_FS=y
937CONFIG_NFS_V3=y 1001CONFIG_NFS_V3=y
938# CONFIG_NFS_V3_ACL is not set 1002# CONFIG_NFS_V3_ACL is not set
939CONFIG_NFS_V4=y 1003CONFIG_NFS_V4=y
1004# CONFIG_NFS_V4_1 is not set
940CONFIG_ROOT_NFS=y 1005CONFIG_ROOT_NFS=y
941# CONFIG_NFSD is not set 1006# CONFIG_NFSD is not set
942CONFIG_LOCKD=y 1007CONFIG_LOCKD=y
@@ -979,22 +1044,7 @@ CONFIG_FRAME_WARN=1024
979CONFIG_SYSCTL_SYSCALL_CHECK=y 1044CONFIG_SYSCTL_SYSCALL_CHECK=y
980CONFIG_HAVE_FUNCTION_TRACER=y 1045CONFIG_HAVE_FUNCTION_TRACER=y
981CONFIG_TRACING_SUPPORT=y 1046CONFIG_TRACING_SUPPORT=y
982 1047# CONFIG_FTRACE is not set
983#
984# Tracers
985#
986# CONFIG_FUNCTION_TRACER is not set
987# CONFIG_IRQSOFF_TRACER is not set
988# CONFIG_PREEMPT_TRACER is not set
989# CONFIG_SCHED_TRACER is not set
990# CONFIG_CONTEXT_SWITCH_TRACER is not set
991# CONFIG_EVENT_TRACER is not set
992# CONFIG_BOOT_TRACER is not set
993# CONFIG_TRACE_BRANCH_PROFILING is not set
994# CONFIG_STACK_TRACER is not set
995# CONFIG_KMEMTRACE is not set
996# CONFIG_WORKQUEUE_TRACER is not set
997# CONFIG_BLK_DEV_IO_TRACE is not set
998# CONFIG_SAMPLES is not set 1048# CONFIG_SAMPLES is not set
999CONFIG_HAVE_ARCH_KGDB=y 1049CONFIG_HAVE_ARCH_KGDB=y
1000CONFIG_ARM_UNWIND=y 1050CONFIG_ARM_UNWIND=y
@@ -1094,9 +1144,9 @@ CONFIG_CRYPTO_DES=y
1094# 1144#
1095# Compression 1145# Compression
1096# 1146#
1097# CONFIG_CRYPTO_DEFLATE is not set 1147CONFIG_CRYPTO_DEFLATE=y
1098# CONFIG_CRYPTO_ZLIB is not set 1148# CONFIG_CRYPTO_ZLIB is not set
1099# CONFIG_CRYPTO_LZO is not set 1149CONFIG_CRYPTO_LZO=y
1100 1150
1101# 1151#
1102# Random Number Generation 1152# Random Number Generation
@@ -1109,9 +1159,10 @@ CONFIG_CRYPTO_HW=y
1109# Library routines 1159# Library routines
1110# 1160#
1111CONFIG_BITREVERSE=y 1161CONFIG_BITREVERSE=y
1162CONFIG_RATIONAL=y
1112CONFIG_GENERIC_FIND_LAST_BIT=y 1163CONFIG_GENERIC_FIND_LAST_BIT=y
1113# CONFIG_CRC_CCITT is not set 1164# CONFIG_CRC_CCITT is not set
1114# CONFIG_CRC16 is not set 1165CONFIG_CRC16=y
1115# CONFIG_CRC_T10DIF is not set 1166# CONFIG_CRC_T10DIF is not set
1116# CONFIG_CRC_ITU_T is not set 1167# CONFIG_CRC_ITU_T is not set
1117CONFIG_CRC32=y 1168CONFIG_CRC32=y
@@ -1119,6 +1170,8 @@ CONFIG_CRC32=y
1119# CONFIG_LIBCRC32C is not set 1170# CONFIG_LIBCRC32C is not set
1120CONFIG_ZLIB_INFLATE=y 1171CONFIG_ZLIB_INFLATE=y
1121CONFIG_ZLIB_DEFLATE=y 1172CONFIG_ZLIB_DEFLATE=y
1173CONFIG_LZO_COMPRESS=y
1174CONFIG_LZO_DECOMPRESS=y
1122CONFIG_HAS_IOMEM=y 1175CONFIG_HAS_IOMEM=y
1123CONFIG_HAS_IOPORT=y 1176CONFIG_HAS_IOPORT=y
1124CONFIG_HAS_DMA=y 1177CONFIG_HAS_DMA=y
diff --git a/arch/arm/configs/omap3_evm_defconfig b/arch/arm/configs/omap3_evm_defconfig
index 28be17fbc157..d5ff4776cd0a 100644
--- a/arch/arm/configs/omap3_evm_defconfig
+++ b/arch/arm/configs/omap3_evm_defconfig
@@ -1107,7 +1107,7 @@ CONFIG_USB_ZERO=m
1107CONFIG_USB_OTG_UTILS=y 1107CONFIG_USB_OTG_UTILS=y
1108# CONFIG_USB_GPIO_VBUS is not set 1108# CONFIG_USB_GPIO_VBUS is not set
1109# CONFIG_ISP1301_OMAP is not set 1109# CONFIG_ISP1301_OMAP is not set
1110CONFIG_TWL4030_USB=y 1110# CONFIG_TWL4030_USB is not set
1111# CONFIG_NOP_USB_XCEIV is not set 1111# CONFIG_NOP_USB_XCEIV is not set
1112CONFIG_MMC=y 1112CONFIG_MMC=y
1113# CONFIG_MMC_DEBUG is not set 1113# CONFIG_MMC_DEBUG is not set
diff --git a/arch/arm/configs/rx51_defconfig b/arch/arm/configs/rx51_defconfig
index eb2cb31825c0..f238df66efd4 100644
--- a/arch/arm/configs/rx51_defconfig
+++ b/arch/arm/configs/rx51_defconfig
@@ -282,7 +282,7 @@ CONFIG_ALIGNMENT_TRAP=y
282# 282#
283CONFIG_ZBOOT_ROM_TEXT=0x0 283CONFIG_ZBOOT_ROM_TEXT=0x0
284CONFIG_ZBOOT_ROM_BSS=0x0 284CONFIG_ZBOOT_ROM_BSS=0x0
285CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=rootfs root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,no_chk_data_crc rw console=ttyMTD,log console=tty0" 285CONFIG_CMDLINE="init=/sbin/preinit ubi.mtd=rootfs root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,no_chk_data_crc rw console=ttyMTD,log console=tty0 console=ttyS2,115200n8"
286# CONFIG_XIP_KERNEL is not set 286# CONFIG_XIP_KERNEL is not set
287# CONFIG_KEXEC is not set 287# CONFIG_KEXEC is not set
288 288
@@ -1354,7 +1354,7 @@ CONFIG_USB_OTG_UTILS=y
1354# CONFIG_USB_GPIO_VBUS is not set 1354# CONFIG_USB_GPIO_VBUS is not set
1355# CONFIG_ISP1301_OMAP is not set 1355# CONFIG_ISP1301_OMAP is not set
1356CONFIG_TWL4030_USB=y 1356CONFIG_TWL4030_USB=y
1357CONFIG_MMC=m 1357CONFIG_MMC=y
1358# CONFIG_MMC_DEBUG is not set 1358# CONFIG_MMC_DEBUG is not set
1359# CONFIG_MMC_UNSAFE_RESUME is not set 1359# CONFIG_MMC_UNSAFE_RESUME is not set
1360 1360
@@ -1449,7 +1449,8 @@ CONFIG_RTC_DRV_TWL4030=m
1449# on-CPU RTC drivers 1449# on-CPU RTC drivers
1450# 1450#
1451# CONFIG_DMADEVICES is not set 1451# CONFIG_DMADEVICES is not set
1452# CONFIG_REGULATOR is not set 1452CONFIG_REGULATOR=y
1453CONFIG_REGULATOR_TWL4030=y
1453# CONFIG_UIO is not set 1454# CONFIG_UIO is not set
1454# CONFIG_STAGING is not set 1455# CONFIG_STAGING is not set
1455 1456
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig
index 2d58b8fe59be..b49810461e41 100644
--- a/arch/arm/configs/s3c2410_defconfig
+++ b/arch/arm/configs/s3c2410_defconfig
@@ -260,6 +260,7 @@ CONFIG_MACH_NEXCODER_2440=y
260CONFIG_SMDK2440_CPU2440=y 260CONFIG_SMDK2440_CPU2440=y
261CONFIG_MACH_AT2440EVB=y 261CONFIG_MACH_AT2440EVB=y
262CONFIG_CPU_S3C2442=y 262CONFIG_CPU_S3C2442=y
263CONFIG_MACH_MINI2440=y
263 264
264# 265#
265# S3C2442 Machines 266# S3C2442 Machines
@@ -2298,7 +2299,6 @@ CONFIG_DEBUG_ERRORS=y
2298# CONFIG_DEBUG_STACK_USAGE is not set 2299# CONFIG_DEBUG_STACK_USAGE is not set
2299CONFIG_DEBUG_LL=y 2300CONFIG_DEBUG_LL=y
2300# CONFIG_DEBUG_ICEDCC is not set 2301# CONFIG_DEBUG_ICEDCC is not set
2301CONFIG_DEBUG_S3C_PORT=y
2302CONFIG_DEBUG_S3C_UART=0 2302CONFIG_DEBUG_S3C_UART=0
2303 2303
2304# 2304#
diff --git a/arch/arm/configs/s3c6400_defconfig b/arch/arm/configs/s3c6400_defconfig
index 2e8fa50e9a09..32860609e057 100644
--- a/arch/arm/configs/s3c6400_defconfig
+++ b/arch/arm/configs/s3c6400_defconfig
@@ -816,7 +816,6 @@ CONFIG_DEBUG_ERRORS=y
816# CONFIG_DEBUG_STACK_USAGE is not set 816# CONFIG_DEBUG_STACK_USAGE is not set
817CONFIG_DEBUG_LL=y 817CONFIG_DEBUG_LL=y
818# CONFIG_DEBUG_ICEDCC is not set 818# CONFIG_DEBUG_ICEDCC is not set
819CONFIG_DEBUG_S3C_PORT=y
820CONFIG_DEBUG_S3C_UART=0 819CONFIG_DEBUG_S3C_UART=0
821 820
822# 821#
diff --git a/arch/arm/configs/tct_hammer_defconfig b/arch/arm/configs/tct_hammer_defconfig
index 07dfb98df4f0..9d32faef05f6 100644
--- a/arch/arm/configs/tct_hammer_defconfig
+++ b/arch/arm/configs/tct_hammer_defconfig
@@ -857,7 +857,6 @@ CONFIG_DEBUG_ERRORS=y
857# CONFIG_DEBUG_STACK_USAGE is not set 857# CONFIG_DEBUG_STACK_USAGE is not set
858CONFIG_DEBUG_LL=y 858CONFIG_DEBUG_LL=y
859# CONFIG_DEBUG_ICEDCC is not set 859# CONFIG_DEBUG_ICEDCC is not set
860# CONFIG_DEBUG_S3C_PORT is not set
861CONFIG_DEBUG_S3C_UART=0 860CONFIG_DEBUG_S3C_UART=0
862 861
863# 862#
diff --git a/arch/arm/configs/u300_defconfig b/arch/arm/configs/u300_defconfig
index 2d827e121147..7d61ae6e75da 100644
--- a/arch/arm/configs/u300_defconfig
+++ b/arch/arm/configs/u300_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.30-rc6 3# Linux kernel version: 2.6.31-rc3
4# Mon Jun 1 09:18:22 2009 4# Thu Jul 16 23:36:10 2009
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y 7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -9,7 +9,6 @@ CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y 9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y 10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y 11CONFIG_MMU=y
12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y 12CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y 13CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_HAVE_LATENCYTOP_SUPPORT=y 14CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -18,13 +17,12 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y 17CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y 18CONFIG_GENERIC_IRQ_PROBE=y
20CONFIG_RWSEM_GENERIC_SPINLOCK=y 19CONFIG_RWSEM_GENERIC_SPINLOCK=y
21# CONFIG_ARCH_HAS_ILOG2_U32 is not set
22# CONFIG_ARCH_HAS_ILOG2_U64 is not set
23CONFIG_GENERIC_HWEIGHT=y 20CONFIG_GENERIC_HWEIGHT=y
24CONFIG_GENERIC_CALIBRATE_DELAY=y 21CONFIG_GENERIC_CALIBRATE_DELAY=y
25CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 22CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
26CONFIG_VECTORS_BASE=0xffff0000 23CONFIG_VECTORS_BASE=0xffff0000
27CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 24CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
25CONFIG_CONSTRUCTORS=y
28 26
29# 27#
30# General setup 28# General setup
@@ -68,7 +66,6 @@ CONFIG_SYSCTL_SYSCALL=y
68CONFIG_KALLSYMS=y 66CONFIG_KALLSYMS=y
69# CONFIG_KALLSYMS_ALL is not set 67# CONFIG_KALLSYMS_ALL is not set
70# CONFIG_KALLSYMS_EXTRA_PASS is not set 68# CONFIG_KALLSYMS_EXTRA_PASS is not set
71# CONFIG_STRIP_ASM_SYMS is not set
72CONFIG_HOTPLUG=y 69CONFIG_HOTPLUG=y
73CONFIG_PRINTK=y 70CONFIG_PRINTK=y
74CONFIG_BUG=y 71CONFIG_BUG=y
@@ -81,8 +78,13 @@ CONFIG_TIMERFD=y
81CONFIG_EVENTFD=y 78CONFIG_EVENTFD=y
82CONFIG_SHMEM=y 79CONFIG_SHMEM=y
83# CONFIG_AIO is not set 80# CONFIG_AIO is not set
81
82#
83# Performance Counters
84#
84# CONFIG_VM_EVENT_COUNTERS is not set 85# CONFIG_VM_EVENT_COUNTERS is not set
85CONFIG_SLUB_DEBUG=y 86CONFIG_SLUB_DEBUG=y
87# CONFIG_STRIP_ASM_SYMS is not set
86CONFIG_COMPAT_BRK=y 88CONFIG_COMPAT_BRK=y
87# CONFIG_SLAB is not set 89# CONFIG_SLAB is not set
88CONFIG_SLUB=y 90CONFIG_SLUB=y
@@ -94,6 +96,10 @@ CONFIG_HAVE_OPROFILE=y
94CONFIG_HAVE_KPROBES=y 96CONFIG_HAVE_KPROBES=y
95CONFIG_HAVE_KRETPROBES=y 97CONFIG_HAVE_KRETPROBES=y
96CONFIG_HAVE_CLK=y 98CONFIG_HAVE_CLK=y
99
100#
101# GCOV-based kernel profiling
102#
97# CONFIG_SLOW_WORK is not set 103# CONFIG_SLOW_WORK is not set
98CONFIG_HAVE_GENERIC_DMA_COHERENT=y 104CONFIG_HAVE_GENERIC_DMA_COHERENT=y
99CONFIG_SLABINFO=y 105CONFIG_SLABINFO=y
@@ -106,7 +112,7 @@ CONFIG_MODULE_UNLOAD=y
106# CONFIG_MODVERSIONS is not set 112# CONFIG_MODVERSIONS is not set
107# CONFIG_MODULE_SRCVERSION_ALL is not set 113# CONFIG_MODULE_SRCVERSION_ALL is not set
108CONFIG_BLOCK=y 114CONFIG_BLOCK=y
109# CONFIG_LBD is not set 115# CONFIG_LBDAF is not set
110# CONFIG_BLK_DEV_BSG is not set 116# CONFIG_BLK_DEV_BSG is not set
111# CONFIG_BLK_DEV_INTEGRITY is not set 117# CONFIG_BLK_DEV_INTEGRITY is not set
112 118
@@ -138,9 +144,9 @@ CONFIG_DEFAULT_IOSCHED="deadline"
138# CONFIG_ARCH_EP93XX is not set 144# CONFIG_ARCH_EP93XX is not set
139# CONFIG_ARCH_FOOTBRIDGE is not set 145# CONFIG_ARCH_FOOTBRIDGE is not set
140# CONFIG_ARCH_MXC is not set 146# CONFIG_ARCH_MXC is not set
147# CONFIG_ARCH_STMP3XXX is not set
141# CONFIG_ARCH_NETX is not set 148# CONFIG_ARCH_NETX is not set
142# CONFIG_ARCH_H720X is not set 149# CONFIG_ARCH_H720X is not set
143# CONFIG_ARCH_IMX is not set
144# CONFIG_ARCH_IOP13XX is not set 150# CONFIG_ARCH_IOP13XX is not set
145# CONFIG_ARCH_IOP32X is not set 151# CONFIG_ARCH_IOP32X is not set
146# CONFIG_ARCH_IOP33X is not set 152# CONFIG_ARCH_IOP33X is not set
@@ -216,8 +222,8 @@ CONFIG_ARM_THUMB=y
216# CONFIG_CPU_DCACHE_DISABLE is not set 222# CONFIG_CPU_DCACHE_DISABLE is not set
217# CONFIG_CPU_DCACHE_WRITETHROUGH is not set 223# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
218# CONFIG_CPU_CACHE_ROUND_ROBIN is not set 224# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
219# CONFIG_OUTER_CACHE is not set
220CONFIG_ARM_VIC=y 225CONFIG_ARM_VIC=y
226CONFIG_ARM_VIC_NR=2
221CONFIG_COMMON_CLKDEV=y 227CONFIG_COMMON_CLKDEV=y
222 228
223# 229#
@@ -243,7 +249,6 @@ CONFIG_PREEMPT=y
243CONFIG_HZ=100 249CONFIG_HZ=100
244CONFIG_AEABI=y 250CONFIG_AEABI=y
245CONFIG_OABI_COMPAT=y 251CONFIG_OABI_COMPAT=y
246CONFIG_ARCH_FLATMEM_HAS_HOLES=y
247# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set 252# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
248# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set 253# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
249# CONFIG_HIGHMEM is not set 254# CONFIG_HIGHMEM is not set
@@ -258,17 +263,18 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
258# CONFIG_PHYS_ADDR_T_64BIT is not set 263# CONFIG_PHYS_ADDR_T_64BIT is not set
259CONFIG_ZONE_DMA_FLAG=0 264CONFIG_ZONE_DMA_FLAG=0
260CONFIG_VIRT_TO_BUS=y 265CONFIG_VIRT_TO_BUS=y
261CONFIG_UNEVICTABLE_LRU=y
262CONFIG_HAVE_MLOCK=y 266CONFIG_HAVE_MLOCK=y
263CONFIG_HAVE_MLOCKED_PAGE_BIT=y 267CONFIG_HAVE_MLOCKED_PAGE_BIT=y
268CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
264CONFIG_ALIGNMENT_TRAP=y 269CONFIG_ALIGNMENT_TRAP=y
270# CONFIG_UACCESS_WITH_MEMCPY is not set
265 271
266# 272#
267# Boot options 273# Boot options
268# 274#
269CONFIG_ZBOOT_ROM_TEXT=0x0 275CONFIG_ZBOOT_ROM_TEXT=0x0
270CONFIG_ZBOOT_ROM_BSS=0x0 276CONFIG_ZBOOT_ROM_BSS=0x0
271CONFIG_CMDLINE="root=/dev/mtdblock2 rw rootfstype=yaffs2 console=ttyAMA0,115200n8 ab3100.force=0,0x48 mtdparts=u300nand:128k@0x0(bootrecords)ro,8064k@128k(free)ro,253952k@8192k(platform) lpj=515072" 277CONFIG_CMDLINE="root=/dev/ram0 rw rootfstype=rootfs console=ttyAMA0,115200n8 lpj=515072"
272# CONFIG_XIP_KERNEL is not set 278# CONFIG_XIP_KERNEL is not set
273# CONFIG_KEXEC is not set 279# CONFIG_KEXEC is not set
274 280
@@ -359,6 +365,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
359# CONFIG_ECONET is not set 365# CONFIG_ECONET is not set
360# CONFIG_WAN_ROUTER is not set 366# CONFIG_WAN_ROUTER is not set
361# CONFIG_PHONET is not set 367# CONFIG_PHONET is not set
368# CONFIG_IEEE802154 is not set
362# CONFIG_NET_SCHED is not set 369# CONFIG_NET_SCHED is not set
363# CONFIG_DCB is not set 370# CONFIG_DCB is not set
364 371
@@ -497,6 +504,7 @@ CONFIG_MISC_DEVICES=y
497# CONFIG_EEPROM_AT24 is not set 504# CONFIG_EEPROM_AT24 is not set
498# CONFIG_EEPROM_AT25 is not set 505# CONFIG_EEPROM_AT25 is not set
499# CONFIG_EEPROM_LEGACY is not set 506# CONFIG_EEPROM_LEGACY is not set
507# CONFIG_EEPROM_MAX6875 is not set
500# CONFIG_EEPROM_93CX6 is not set 508# CONFIG_EEPROM_93CX6 is not set
501CONFIG_HAVE_IDE=y 509CONFIG_HAVE_IDE=y
502# CONFIG_IDE is not set 510# CONFIG_IDE is not set
@@ -533,12 +541,14 @@ CONFIG_INPUT_EVDEV=y
533# 541#
534CONFIG_INPUT_KEYBOARD=y 542CONFIG_INPUT_KEYBOARD=y
535# CONFIG_KEYBOARD_ATKBD is not set 543# CONFIG_KEYBOARD_ATKBD is not set
536# CONFIG_KEYBOARD_SUNKBD is not set
537# CONFIG_KEYBOARD_LKKBD is not set 544# CONFIG_KEYBOARD_LKKBD is not set
538# CONFIG_KEYBOARD_XTKBD is not set 545# CONFIG_KEYBOARD_GPIO is not set
546# CONFIG_KEYBOARD_MATRIX is not set
547# CONFIG_KEYBOARD_LM8323 is not set
539# CONFIG_KEYBOARD_NEWTON is not set 548# CONFIG_KEYBOARD_NEWTON is not set
540# CONFIG_KEYBOARD_STOWAWAY is not set 549# CONFIG_KEYBOARD_STOWAWAY is not set
541# CONFIG_KEYBOARD_GPIO is not set 550# CONFIG_KEYBOARD_SUNKBD is not set
551# CONFIG_KEYBOARD_XTKBD is not set
542# CONFIG_INPUT_MOUSE is not set 552# CONFIG_INPUT_MOUSE is not set
543# CONFIG_INPUT_JOYSTICK is not set 553# CONFIG_INPUT_JOYSTICK is not set
544# CONFIG_INPUT_TABLET is not set 554# CONFIG_INPUT_TABLET is not set
@@ -597,9 +607,11 @@ CONFIG_I2C_HELPER_AUTO=y
597# 607#
598# I2C system bus drivers (mostly embedded / system-on-chip) 608# I2C system bus drivers (mostly embedded / system-on-chip)
599# 609#
610# CONFIG_I2C_DESIGNWARE is not set
600# CONFIG_I2C_GPIO is not set 611# CONFIG_I2C_GPIO is not set
601# CONFIG_I2C_OCORES is not set 612# CONFIG_I2C_OCORES is not set
602# CONFIG_I2C_SIMTEC is not set 613# CONFIG_I2C_SIMTEC is not set
614CONFIG_I2C_STU300=y
603 615
604# 616#
605# External I2C/SMBus adapter drivers 617# External I2C/SMBus adapter drivers
@@ -620,7 +632,6 @@ CONFIG_I2C_HELPER_AUTO=y
620# CONFIG_SENSORS_PCF8574 is not set 632# CONFIG_SENSORS_PCF8574 is not set
621# CONFIG_PCF8575 is not set 633# CONFIG_PCF8575 is not set
622# CONFIG_SENSORS_PCA9539 is not set 634# CONFIG_SENSORS_PCA9539 is not set
623# CONFIG_SENSORS_MAX6875 is not set
624# CONFIG_SENSORS_TSL2550 is not set 635# CONFIG_SENSORS_TSL2550 is not set
625# CONFIG_I2C_DEBUG_CORE is not set 636# CONFIG_I2C_DEBUG_CORE is not set
626# CONFIG_I2C_DEBUG_ALGO is not set 637# CONFIG_I2C_DEBUG_ALGO is not set
@@ -635,6 +646,7 @@ CONFIG_SPI_MASTER=y
635# 646#
636# CONFIG_SPI_BITBANG is not set 647# CONFIG_SPI_BITBANG is not set
637# CONFIG_SPI_GPIO is not set 648# CONFIG_SPI_GPIO is not set
649CONFIG_SPI_PL022=y
638 650
639# 651#
640# SPI Protocol Masters 652# SPI Protocol Masters
@@ -647,6 +659,7 @@ CONFIG_POWER_SUPPLY=y
647# CONFIG_PDA_POWER is not set 659# CONFIG_PDA_POWER is not set
648# CONFIG_BATTERY_DS2760 is not set 660# CONFIG_BATTERY_DS2760 is not set
649# CONFIG_BATTERY_BQ27x00 is not set 661# CONFIG_BATTERY_BQ27x00 is not set
662# CONFIG_BATTERY_MAX17040 is not set
650# CONFIG_HWMON is not set 663# CONFIG_HWMON is not set
651# CONFIG_THERMAL is not set 664# CONFIG_THERMAL is not set
652# CONFIG_THERMAL_HWMON is not set 665# CONFIG_THERMAL_HWMON is not set
@@ -657,6 +670,7 @@ CONFIG_WATCHDOG=y
657# Watchdog Device Drivers 670# Watchdog Device Drivers
658# 671#
659# CONFIG_SOFT_WATCHDOG is not set 672# CONFIG_SOFT_WATCHDOG is not set
673CONFIG_COH901327_WATCHDOG=y
660CONFIG_SSB_POSSIBLE=y 674CONFIG_SSB_POSSIBLE=y
661 675
662# 676#
@@ -678,22 +692,9 @@ CONFIG_SSB_POSSIBLE=y
678# CONFIG_MFD_WM8400 is not set 692# CONFIG_MFD_WM8400 is not set
679# CONFIG_MFD_WM8350_I2C is not set 693# CONFIG_MFD_WM8350_I2C is not set
680# CONFIG_MFD_PCF50633 is not set 694# CONFIG_MFD_PCF50633 is not set
681 695CONFIG_AB3100_CORE=y
682# 696# CONFIG_EZX_PCAP is not set
683# Multimedia devices 697# CONFIG_MEDIA_SUPPORT is not set
684#
685
686#
687# Multimedia core support
688#
689# CONFIG_VIDEO_DEV is not set
690# CONFIG_DVB_CORE is not set
691# CONFIG_VIDEO_MEDIA is not set
692
693#
694# Multimedia drivers
695#
696# CONFIG_DAB is not set
697 698
698# 699#
699# Graphics support 700# Graphics support
@@ -760,6 +761,11 @@ CONFIG_SND_JACK=y
760# CONFIG_SND_VERBOSE_PROCFS is not set 761# CONFIG_SND_VERBOSE_PROCFS is not set
761# CONFIG_SND_VERBOSE_PRINTK is not set 762# CONFIG_SND_VERBOSE_PRINTK is not set
762# CONFIG_SND_DEBUG is not set 763# CONFIG_SND_DEBUG is not set
764# CONFIG_SND_RAWMIDI_SEQ is not set
765# CONFIG_SND_OPL3_LIB_SEQ is not set
766# CONFIG_SND_OPL4_LIB_SEQ is not set
767# CONFIG_SND_SBAWE_SEQ is not set
768# CONFIG_SND_EMU10K1_SEQ is not set
763# CONFIG_SND_DRIVERS is not set 769# CONFIG_SND_DRIVERS is not set
764# CONFIG_SND_ARM is not set 770# CONFIG_SND_ARM is not set
765# CONFIG_SND_SPI is not set 771# CONFIG_SND_SPI is not set
@@ -770,7 +776,7 @@ CONFIG_SND_SOC_I2C_AND_SPI=y
770# CONFIG_HID_SUPPORT is not set 776# CONFIG_HID_SUPPORT is not set
771# CONFIG_USB_SUPPORT is not set 777# CONFIG_USB_SUPPORT is not set
772CONFIG_MMC=y 778CONFIG_MMC=y
773# CONFIG_MMC_DEBUG is not set 779CONFIG_MMC_DEBUG=y
774# CONFIG_MMC_UNSAFE_RESUME is not set 780# CONFIG_MMC_UNSAFE_RESUME is not set
775 781
776# 782#
@@ -797,7 +803,7 @@ CONFIG_LEDS_CLASS=y
797# 803#
798# CONFIG_LEDS_PCA9532 is not set 804# CONFIG_LEDS_PCA9532 is not set
799# CONFIG_LEDS_GPIO is not set 805# CONFIG_LEDS_GPIO is not set
800# CONFIG_LEDS_LP5521 is not set 806# CONFIG_LEDS_LP3944 is not set
801# CONFIG_LEDS_PCA955X is not set 807# CONFIG_LEDS_PCA955X is not set
802# CONFIG_LEDS_DAC124S085 is not set 808# CONFIG_LEDS_DAC124S085 is not set
803# CONFIG_LEDS_BD2802 is not set 809# CONFIG_LEDS_BD2802 is not set
@@ -845,6 +851,7 @@ CONFIG_RTC_INTF_DEV=y
845# CONFIG_RTC_DRV_S35390A is not set 851# CONFIG_RTC_DRV_S35390A is not set
846# CONFIG_RTC_DRV_FM3130 is not set 852# CONFIG_RTC_DRV_FM3130 is not set
847# CONFIG_RTC_DRV_RX8581 is not set 853# CONFIG_RTC_DRV_RX8581 is not set
854# CONFIG_RTC_DRV_RX8025 is not set
848 855
849# 856#
850# SPI RTC drivers 857# SPI RTC drivers
@@ -887,7 +894,10 @@ CONFIG_REGULATOR=y
887# CONFIG_REGULATOR_DEBUG is not set 894# CONFIG_REGULATOR_DEBUG is not set
888# CONFIG_REGULATOR_FIXED_VOLTAGE is not set 895# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
889# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set 896# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
897# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
890# CONFIG_REGULATOR_BQ24022 is not set 898# CONFIG_REGULATOR_BQ24022 is not set
899# CONFIG_REGULATOR_MAX1586 is not set
900# CONFIG_REGULATOR_LP3971 is not set
891# CONFIG_UIO is not set 901# CONFIG_UIO is not set
892# CONFIG_STAGING is not set 902# CONFIG_STAGING is not set
893 903
@@ -900,16 +910,19 @@ CONFIG_REGULATOR=y
900# CONFIG_REISERFS_FS is not set 910# CONFIG_REISERFS_FS is not set
901# CONFIG_JFS_FS is not set 911# CONFIG_JFS_FS is not set
902# CONFIG_FS_POSIX_ACL is not set 912# CONFIG_FS_POSIX_ACL is not set
903CONFIG_FILE_LOCKING=y
904# CONFIG_XFS_FS is not set 913# CONFIG_XFS_FS is not set
905# CONFIG_OCFS2_FS is not set 914# CONFIG_OCFS2_FS is not set
906# CONFIG_BTRFS_FS is not set 915# CONFIG_BTRFS_FS is not set
916CONFIG_FILE_LOCKING=y
917CONFIG_FSNOTIFY=y
907# CONFIG_DNOTIFY is not set 918# CONFIG_DNOTIFY is not set
908# CONFIG_INOTIFY is not set 919# CONFIG_INOTIFY is not set
920CONFIG_INOTIFY_USER=y
909# CONFIG_QUOTA is not set 921# CONFIG_QUOTA is not set
910# CONFIG_AUTOFS_FS is not set 922# CONFIG_AUTOFS_FS is not set
911# CONFIG_AUTOFS4_FS is not set 923# CONFIG_AUTOFS4_FS is not set
912CONFIG_FUSE_FS=y 924CONFIG_FUSE_FS=y
925# CONFIG_CUSE is not set
913 926
914# 927#
915# Caches 928# Caches
@@ -1033,6 +1046,7 @@ CONFIG_TIMER_STATS=y
1033# CONFIG_DEBUG_OBJECTS is not set 1046# CONFIG_DEBUG_OBJECTS is not set
1034# CONFIG_SLUB_DEBUG_ON is not set 1047# CONFIG_SLUB_DEBUG_ON is not set
1035# CONFIG_SLUB_STATS is not set 1048# CONFIG_SLUB_STATS is not set
1049# CONFIG_DEBUG_KMEMLEAK is not set
1036# CONFIG_DEBUG_PREEMPT is not set 1050# CONFIG_DEBUG_PREEMPT is not set
1037# CONFIG_DEBUG_RT_MUTEXES is not set 1051# CONFIG_DEBUG_RT_MUTEXES is not set
1038# CONFIG_RT_MUTEX_TESTER is not set 1052# CONFIG_RT_MUTEX_TESTER is not set
@@ -1063,18 +1077,16 @@ CONFIG_DEBUG_INFO=y
1063# CONFIG_PAGE_POISONING is not set 1077# CONFIG_PAGE_POISONING is not set
1064CONFIG_HAVE_FUNCTION_TRACER=y 1078CONFIG_HAVE_FUNCTION_TRACER=y
1065CONFIG_TRACING_SUPPORT=y 1079CONFIG_TRACING_SUPPORT=y
1066 1080CONFIG_FTRACE=y
1067#
1068# Tracers
1069#
1070# CONFIG_FUNCTION_TRACER is not set 1081# CONFIG_FUNCTION_TRACER is not set
1071# CONFIG_IRQSOFF_TRACER is not set 1082# CONFIG_IRQSOFF_TRACER is not set
1072# CONFIG_PREEMPT_TRACER is not set 1083# CONFIG_PREEMPT_TRACER is not set
1073# CONFIG_SCHED_TRACER is not set 1084# CONFIG_SCHED_TRACER is not set
1074# CONFIG_CONTEXT_SWITCH_TRACER is not set 1085# CONFIG_ENABLE_DEFAULT_TRACERS is not set
1075# CONFIG_EVENT_TRACER is not set
1076# CONFIG_BOOT_TRACER is not set 1086# CONFIG_BOOT_TRACER is not set
1077# CONFIG_TRACE_BRANCH_PROFILING is not set 1087CONFIG_BRANCH_PROFILE_NONE=y
1088# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
1089# CONFIG_PROFILE_ALL_BRANCHES is not set
1078# CONFIG_STACK_TRACER is not set 1090# CONFIG_STACK_TRACER is not set
1079# CONFIG_KMEMTRACE is not set 1091# CONFIG_KMEMTRACE is not set
1080# CONFIG_WORKQUEUE_TRACER is not set 1092# CONFIG_WORKQUEUE_TRACER is not set
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
index 9e07fe507029..9ed2377fe8e5 100644
--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -159,8 +159,6 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
159 159
160#else /* ARM_ARCH_6 */ 160#else /* ARM_ARCH_6 */
161 161
162#include <asm/system.h>
163
164#ifdef CONFIG_SMP 162#ifdef CONFIG_SMP
165#error SMP not supported on pre-ARMv6 CPUs 163#error SMP not supported on pre-ARMv6 CPUs
166#endif 164#endif
diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
index be962c1349c4..9c746af1bf6e 100644
--- a/arch/arm/include/asm/page.h
+++ b/arch/arm/include/asm/page.h
@@ -12,7 +12,7 @@
12 12
13/* PAGE_SHIFT determines the page size */ 13/* PAGE_SHIFT determines the page size */
14#define PAGE_SHIFT 12 14#define PAGE_SHIFT 12
15#define PAGE_SIZE (1UL << PAGE_SHIFT) 15#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
16#define PAGE_MASK (~(PAGE_SIZE-1)) 16#define PAGE_MASK (~(PAGE_SIZE-1))
17 17
18#ifndef __ASSEMBLY__ 18#ifndef __ASSEMBLY__
diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h
index 918d0cbbf064..0abf386ba3d3 100644
--- a/arch/arm/include/asm/pci.h
+++ b/arch/arm/include/asm/pci.h
@@ -65,19 +65,6 @@ extern void
65pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, 65pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
66 struct pci_bus_region *region); 66 struct pci_bus_region *region);
67 67
68static inline struct resource *
69pcibios_select_root(struct pci_dev *pdev, struct resource *res)
70{
71 struct resource *root = NULL;
72
73 if (res->flags & IORESOURCE_IO)
74 root = &ioport_resource;
75 if (res->flags & IORESOURCE_MEM)
76 root = &iomem_resource;
77
78 return root;
79}
80
81/* 68/*
82 * Dummy implementation; always return 0. 69 * Dummy implementation; always return 0.
83 */ 70 */
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
index 1cd2d6416bda..c433c6c73112 100644
--- a/arch/arm/include/asm/pgtable.h
+++ b/arch/arm/include/asm/pgtable.h
@@ -285,15 +285,6 @@ extern struct page *empty_zero_page;
285#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) 285#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG)
286#define pte_special(pte) (0) 286#define pte_special(pte) (0)
287 287
288/*
289 * The following only works if pte_present() is not true.
290 */
291#define pte_file(pte) (pte_val(pte) & L_PTE_FILE)
292#define pte_to_pgoff(x) (pte_val(x) >> 2)
293#define pgoff_to_pte(x) __pte(((x) << 2) | L_PTE_FILE)
294
295#define PTE_FILE_MAX_BITS 30
296
297#define PTE_BIT_FUNC(fn,op) \ 288#define PTE_BIT_FUNC(fn,op) \
298static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } 289static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
299 290
@@ -384,16 +375,50 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
384 375
385extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; 376extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
386 377
387/* Encode and decode a swap entry. 378/*
379 * Encode and decode a swap entry. Swap entries are stored in the Linux
380 * page tables as follows:
388 * 381 *
389 * We support up to 32GB of swap on 4k machines 382 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
383 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
384 * <--------------- offset --------------------> <--- type --> 0 0
385 *
386 * This gives us up to 127 swap files and 32GB per swap file. Note that
387 * the offset field is always non-zero.
390 */ 388 */
391#define __swp_type(x) (((x).val >> 2) & 0x7f) 389#define __SWP_TYPE_SHIFT 2
392#define __swp_offset(x) ((x).val >> 9) 390#define __SWP_TYPE_BITS 7
393#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 9) }) 391#define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1)
392#define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)
393
394#define __swp_type(x) (((x).val >> __SWP_TYPE_SHIFT) & __SWP_TYPE_MASK)
395#define __swp_offset(x) ((x).val >> __SWP_OFFSET_SHIFT)
396#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << __SWP_TYPE_SHIFT) | ((offset) << __SWP_OFFSET_SHIFT) })
397
394#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) 398#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
395#define __swp_entry_to_pte(swp) ((pte_t) { (swp).val }) 399#define __swp_entry_to_pte(swp) ((pte_t) { (swp).val })
396 400
401/*
402 * It is an error for the kernel to have more swap files than we can
403 * encode in the PTEs. This ensures that we know when MAX_SWAPFILES
404 * is increased beyond what we presently support.
405 */
406#define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS)
407
408/*
409 * Encode and decode a file entry. File entries are stored in the Linux
410 * page tables as follows:
411 *
412 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
413 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
414 * <------------------------ offset -------------------------> 1 0
415 */
416#define pte_file(pte) (pte_val(pte) & L_PTE_FILE)
417#define pte_to_pgoff(x) (pte_val(x) >> 2)
418#define pgoff_to_pte(x) __pte(((x) << 2) | L_PTE_FILE)
419
420#define PTE_FILE_MAX_BITS 30
421
397/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ 422/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
398/* FIXME: this is not correct */ 423/* FIXME: this is not correct */
399#define kern_addr_valid(addr) (1) 424#define kern_addr_valid(addr) (1)
diff --git a/arch/arm/include/asm/setup.h b/arch/arm/include/asm/setup.h
index ee1304f22f94..5ccce0a9b03c 100644
--- a/arch/arm/include/asm/setup.h
+++ b/arch/arm/include/asm/setup.h
@@ -201,7 +201,8 @@ static struct tagtable __tagtable_##fn __tag = { tag, fn }
201struct membank { 201struct membank {
202 unsigned long start; 202 unsigned long start;
203 unsigned long size; 203 unsigned long size;
204 int node; 204 unsigned short node;
205 unsigned short highmem;
205}; 206};
206 207
207struct meminfo { 208struct meminfo {
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index 4f8848260ee2..73394e50cbca 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -73,7 +73,7 @@ struct thread_info {
73 .task = &tsk, \ 73 .task = &tsk, \
74 .exec_domain = &default_exec_domain, \ 74 .exec_domain = &default_exec_domain, \
75 .flags = 0, \ 75 .flags = 0, \
76 .preempt_count = 1, \ 76 .preempt_count = INIT_PREEMPT_COUNT, \
77 .addr_limit = KERNEL_DS, \ 77 .addr_limit = KERNEL_DS, \
78 .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \ 78 .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \
79 domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \ 79 domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h
index 321c83e43a1e..f41a6f57cd12 100644
--- a/arch/arm/include/asm/tlb.h
+++ b/arch/arm/include/asm/tlb.h
@@ -102,8 +102,8 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
102} 102}
103 103
104#define tlb_remove_page(tlb,page) free_page_and_swap_cache(page) 104#define tlb_remove_page(tlb,page) free_page_and_swap_cache(page)
105#define pte_free_tlb(tlb, ptep) pte_free((tlb)->mm, ptep) 105#define pte_free_tlb(tlb, ptep, addr) pte_free((tlb)->mm, ptep)
106#define pmd_free_tlb(tlb, pmdp) pmd_free((tlb)->mm, pmdp) 106#define pmd_free_tlb(tlb, pmdp, addr) pmd_free((tlb)->mm, pmdp)
107 107
108#define tlb_migrate_finish(mm) do { } while (0) 108#define tlb_migrate_finish(mm) do { } while (0)
109 109
diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h
index 94cc58ef61ae..0e97b8cb77d5 100644
--- a/arch/arm/include/asm/unistd.h
+++ b/arch/arm/include/asm/unistd.h
@@ -389,6 +389,8 @@
389#define __NR_inotify_init1 (__NR_SYSCALL_BASE+360) 389#define __NR_inotify_init1 (__NR_SYSCALL_BASE+360)
390#define __NR_preadv (__NR_SYSCALL_BASE+361) 390#define __NR_preadv (__NR_SYSCALL_BASE+361)
391#define __NR_pwritev (__NR_SYSCALL_BASE+362) 391#define __NR_pwritev (__NR_SYSCALL_BASE+362)
392#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
393#define __NR_perf_counter_open (__NR_SYSCALL_BASE+364)
392 394
393/* 395/*
394 * The following SWIs are ARM private. 396 * The following SWIs are ARM private.
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
index 1680e9e9c831..f776e72a4cb8 100644
--- a/arch/arm/kernel/calls.S
+++ b/arch/arm/kernel/calls.S
@@ -372,6 +372,8 @@
372/* 360 */ CALL(sys_inotify_init1) 372/* 360 */ CALL(sys_inotify_init1)
373 CALL(sys_preadv) 373 CALL(sys_preadv)
374 CALL(sys_pwritev) 374 CALL(sys_pwritev)
375 CALL(sys_rt_tgsigqueueinfo)
376 CALL(sys_perf_counter_open)
375#ifndef syscalls_counted 377#ifndef syscalls_counted
376.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls 378.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
377#define syscalls_counted 379#define syscalls_counted
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index 366e5097a41a..8c3de1a350b5 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -148,7 +148,7 @@ trace:
148 sub r0, r0, #MCOUNT_INSN_SIZE 148 sub r0, r0, #MCOUNT_INSN_SIZE
149 mov lr, pc 149 mov lr, pc
150 mov pc, r2 150 mov pc, r2
151 mov lr, r1 @ restore lr 151 ldr lr, [fp, #-4] @ restore lr
152 ldmia sp!, {r0-r3, pc} 152 ldmia sp!, {r0-r3, pc}
153 153
154#endif /* CONFIG_DYNAMIC_FTRACE */ 154#endif /* CONFIG_DYNAMIC_FTRACE */
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index 6874c7dca75a..b7c3490eaa24 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -98,17 +98,6 @@ unlock:
98 return 0; 98 return 0;
99} 99}
100 100
101/* Handle bad interrupts */
102static struct irq_desc bad_irq_desc = {
103 .handle_irq = handle_bad_irq,
104 .lock = __SPIN_LOCK_UNLOCKED(bad_irq_desc.lock),
105};
106
107#ifdef CONFIG_CPUMASK_OFFSTACK
108/* We are not allocating bad_irq_desc.affinity or .pending_mask */
109#error "ARM architecture does not support CONFIG_CPUMASK_OFFSTACK."
110#endif
111
112/* 101/*
113 * do_IRQ handles all hardware IRQ's. Decoded IRQs should not 102 * do_IRQ handles all hardware IRQ's. Decoded IRQs should not
114 * come via this function. Instead, they should provide their 103 * come via this function. Instead, they should provide their
@@ -124,10 +113,13 @@ asmlinkage void __exception asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
124 * Some hardware gives randomly wrong interrupts. Rather 113 * Some hardware gives randomly wrong interrupts. Rather
125 * than crashing, do something sensible. 114 * than crashing, do something sensible.
126 */ 115 */
127 if (irq >= NR_IRQS) 116 if (unlikely(irq >= NR_IRQS)) {
128 handle_bad_irq(irq, &bad_irq_desc); 117 if (printk_ratelimit())
129 else 118 printk(KERN_WARNING "Bad IRQ%u\n", irq);
119 ack_bad_irq(irq);
120 } else {
130 generic_handle_irq(irq); 121 generic_handle_irq(irq);
122 }
131 123
132 /* AT91 specific workaround */ 124 /* AT91 specific workaround */
133 irq_finish(irq); 125 irq_finish(irq);
@@ -165,10 +157,6 @@ void __init init_IRQ(void)
165 for (irq = 0; irq < NR_IRQS; irq++) 157 for (irq = 0; irq < NR_IRQS; irq++)
166 irq_desc[irq].status |= IRQ_NOREQUEST | IRQ_NOPROBE; 158 irq_desc[irq].status |= IRQ_NOREQUEST | IRQ_NOPROBE;
167 159
168#ifdef CONFIG_SMP
169 cpumask_setall(bad_irq_desc.affinity);
170 bad_irq_desc.cpu = smp_processor_id();
171#endif
172 init_arch_irq(); 160 init_arch_irq();
173} 161}
174 162
@@ -176,7 +164,7 @@ void __init init_IRQ(void)
176 164
177static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) 165static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu)
178{ 166{
179 pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->cpu, cpu); 167 pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu);
180 168
181 spin_lock_irq(&desc->lock); 169 spin_lock_irq(&desc->lock);
182 desc->chip->set_affinity(irq, cpumask_of(cpu)); 170 desc->chip->set_affinity(irq, cpumask_of(cpu));
@@ -195,7 +183,7 @@ void migrate_irqs(void)
195 for (i = 0; i < NR_IRQS; i++) { 183 for (i = 0; i < NR_IRQS; i++) {
196 struct irq_desc *desc = irq_desc + i; 184 struct irq_desc *desc = irq_desc + i;
197 185
198 if (desc->cpu == cpu) { 186 if (desc->node == cpu) {
199 unsigned int newcpu = cpumask_any_and(desc->affinity, 187 unsigned int newcpu = cpumask_any_and(desc->affinity,
200 cpu_online_mask); 188 cpu_online_mask);
201 if (newcpu >= nr_cpu_ids) { 189 if (newcpu >= nr_cpu_ids) {
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 1585423699ee..39196dff478c 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -114,9 +114,6 @@ void arm_machine_restart(char mode, const char *cmd)
114/* 114/*
115 * Function pointers to optional machine specific functions 115 * Function pointers to optional machine specific functions
116 */ 116 */
117void (*pm_idle)(void);
118EXPORT_SYMBOL(pm_idle);
119
120void (*pm_power_off)(void); 117void (*pm_power_off)(void);
121EXPORT_SYMBOL(pm_power_off); 118EXPORT_SYMBOL(pm_power_off);
122 119
@@ -130,20 +127,19 @@ EXPORT_SYMBOL_GPL(arm_pm_restart);
130 */ 127 */
131static void default_idle(void) 128static void default_idle(void)
132{ 129{
133 if (hlt_counter) 130 if (!need_resched())
134 cpu_relax(); 131 arch_idle();
135 else { 132 local_irq_enable();
136 local_irq_disable();
137 if (!need_resched())
138 arch_idle();
139 local_irq_enable();
140 }
141} 133}
142 134
135void (*pm_idle)(void) = default_idle;
136EXPORT_SYMBOL(pm_idle);
137
143/* 138/*
144 * The idle thread. We try to conserve power, while trying to keep 139 * The idle thread, has rather strange semantics for calling pm_idle,
145 * overall latency low. The architecture specific idle is passed 140 * but this is what x86 does and we need to do the same, so that
146 * a value to indicate the level of "idleness" of the system. 141 * things like cpuidle get called in the same way. The only difference
142 * is that we always respect 'hlt_counter' to prevent low power idle.
147 */ 143 */
148void cpu_idle(void) 144void cpu_idle(void)
149{ 145{
@@ -151,21 +147,31 @@ void cpu_idle(void)
151 147
152 /* endless idle loop with no priority at all */ 148 /* endless idle loop with no priority at all */
153 while (1) { 149 while (1) {
154 void (*idle)(void) = pm_idle; 150 tick_nohz_stop_sched_tick(1);
155 151 leds_event(led_idle_start);
152 while (!need_resched()) {
156#ifdef CONFIG_HOTPLUG_CPU 153#ifdef CONFIG_HOTPLUG_CPU
157 if (cpu_is_offline(smp_processor_id())) { 154 if (cpu_is_offline(smp_processor_id()))
158 leds_event(led_idle_start); 155 cpu_die();
159 cpu_die();
160 }
161#endif 156#endif
162 157
163 if (!idle) 158 local_irq_disable();
164 idle = default_idle; 159 if (hlt_counter) {
165 leds_event(led_idle_start); 160 local_irq_enable();
166 tick_nohz_stop_sched_tick(1); 161 cpu_relax();
167 while (!need_resched()) 162 } else {
168 idle(); 163 stop_critical_timings();
164 pm_idle();
165 start_critical_timings();
166 /*
167 * This will eventually be removed - pm_idle
168 * functions should always return with IRQs
169 * enabled.
170 */
171 WARN_ON(irqs_disabled());
172 local_irq_enable();
173 }
174 }
169 leds_event(led_idle_end); 175 leds_event(led_idle_end);
170 tick_nohz_restart_sched_tick(); 176 tick_nohz_restart_sched_tick();
171 preempt_enable_no_resched(); 177 preempt_enable_no_resched();
@@ -352,6 +358,23 @@ asm( ".section .text\n"
352" .size kernel_thread_helper, . - kernel_thread_helper\n" 358" .size kernel_thread_helper, . - kernel_thread_helper\n"
353" .previous"); 359" .previous");
354 360
361#ifdef CONFIG_ARM_UNWIND
362extern void kernel_thread_exit(long code);
363asm( ".section .text\n"
364" .align\n"
365" .type kernel_thread_exit, #function\n"
366"kernel_thread_exit:\n"
367" .fnstart\n"
368" .cantunwind\n"
369" bl do_exit\n"
370" nop\n"
371" .fnend\n"
372" .size kernel_thread_exit, . - kernel_thread_exit\n"
373" .previous");
374#else
375#define kernel_thread_exit do_exit
376#endif
377
355/* 378/*
356 * Create a kernel thread. 379 * Create a kernel thread.
357 */ 380 */
@@ -363,7 +386,7 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
363 386
364 regs.ARM_r1 = (unsigned long)arg; 387 regs.ARM_r1 = (unsigned long)arg;
365 regs.ARM_r2 = (unsigned long)fn; 388 regs.ARM_r2 = (unsigned long)fn;
366 regs.ARM_r3 = (unsigned long)do_exit; 389 regs.ARM_r3 = (unsigned long)kernel_thread_exit;
367 regs.ARM_pc = (unsigned long)kernel_thread_helper; 390 regs.ARM_pc = (unsigned long)kernel_thread_helper;
368 regs.ARM_cpsr = SVC_MODE | PSR_ENDSTATE; 391 regs.ARM_cpsr = SVC_MODE | PSR_ENDSTATE;
369 392
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 93bb4247b7ed..f6bc5d442782 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -133,7 +133,7 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
133} 133}
134 134
135#ifdef CONFIG_CRUNCH 135#ifdef CONFIG_CRUNCH
136static int preserve_crunch_context(struct crunch_sigframe *frame) 136static int preserve_crunch_context(struct crunch_sigframe __user *frame)
137{ 137{
138 char kbuf[sizeof(*frame) + 8]; 138 char kbuf[sizeof(*frame) + 8];
139 struct crunch_sigframe *kframe; 139 struct crunch_sigframe *kframe;
@@ -146,7 +146,7 @@ static int preserve_crunch_context(struct crunch_sigframe *frame)
146 return __copy_to_user(frame, kframe, sizeof(*frame)); 146 return __copy_to_user(frame, kframe, sizeof(*frame));
147} 147}
148 148
149static int restore_crunch_context(struct crunch_sigframe *frame) 149static int restore_crunch_context(struct crunch_sigframe __user *frame)
150{ 150{
151 char kbuf[sizeof(*frame) + 8]; 151 char kbuf[sizeof(*frame) + 8];
152 struct crunch_sigframe *kframe; 152 struct crunch_sigframe *kframe;
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c
index 1dedc2c7ff49..dd56e11f339a 100644
--- a/arch/arm/kernel/unwind.c
+++ b/arch/arm/kernel/unwind.c
@@ -212,7 +212,8 @@ static int unwind_exec_insn(struct unwind_ctrl_block *ctrl)
212 ctrl->vrs[14] = *vsp++; 212 ctrl->vrs[14] = *vsp++;
213 ctrl->vrs[SP] = (unsigned long)vsp; 213 ctrl->vrs[SP] = (unsigned long)vsp;
214 } else if (insn == 0xb0) { 214 } else if (insn == 0xb0) {
215 ctrl->vrs[PC] = ctrl->vrs[LR]; 215 if (ctrl->vrs[PC] == 0)
216 ctrl->vrs[PC] = ctrl->vrs[LR];
216 /* no further processing */ 217 /* no further processing */
217 ctrl->entries = 0; 218 ctrl->entries = 0;
218 } else if (insn == 0xb1) { 219 } else if (insn == 0xb1) {
@@ -309,18 +310,20 @@ int unwind_frame(struct stackframe *frame)
309 } 310 }
310 311
311 while (ctrl.entries > 0) { 312 while (ctrl.entries > 0) {
312 int urc; 313 int urc = unwind_exec_insn(&ctrl);
313
314 if (ctrl.vrs[SP] < low || ctrl.vrs[SP] >= high)
315 return -URC_FAILURE;
316 urc = unwind_exec_insn(&ctrl);
317 if (urc < 0) 314 if (urc < 0)
318 return urc; 315 return urc;
316 if (ctrl.vrs[SP] < low || ctrl.vrs[SP] >= high)
317 return -URC_FAILURE;
319 } 318 }
320 319
321 if (ctrl.vrs[PC] == 0) 320 if (ctrl.vrs[PC] == 0)
322 ctrl.vrs[PC] = ctrl.vrs[LR]; 321 ctrl.vrs[PC] = ctrl.vrs[LR];
323 322
323 /* check for infinite loop */
324 if (frame->pc == ctrl.vrs[PC])
325 return -URC_FAILURE;
326
324 frame->fp = ctrl.vrs[FP]; 327 frame->fp = ctrl.vrs[FP];
325 frame->sp = ctrl.vrs[SP]; 328 frame->sp = ctrl.vrs[SP];
326 frame->lr = ctrl.vrs[LR]; 329 frame->lr = ctrl.vrs[LR];
@@ -332,7 +335,6 @@ int unwind_frame(struct stackframe *frame)
332void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk) 335void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
333{ 336{
334 struct stackframe frame; 337 struct stackframe frame;
335 unsigned long high, low;
336 register unsigned long current_sp asm ("sp"); 338 register unsigned long current_sp asm ("sp");
337 339
338 pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); 340 pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);
@@ -362,9 +364,6 @@ void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
362 frame.pc = thread_saved_pc(tsk); 364 frame.pc = thread_saved_pc(tsk);
363 } 365 }
364 366
365 low = frame.sp & ~(THREAD_SIZE - 1);
366 high = low + THREAD_SIZE;
367
368 while (1) { 367 while (1) {
369 int urc; 368 int urc;
370 unsigned long where = frame.pc; 369 unsigned long where = frame.pc;
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 6c0779792546..69371028a202 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -6,6 +6,7 @@
6#include <asm-generic/vmlinux.lds.h> 6#include <asm-generic/vmlinux.lds.h>
7#include <asm/thread_info.h> 7#include <asm/thread_info.h>
8#include <asm/memory.h> 8#include <asm/memory.h>
9#include <asm/page.h>
9 10
10OUTPUT_ARCH(arm) 11OUTPUT_ARCH(arm)
11ENTRY(stext) 12ENTRY(stext)
@@ -63,7 +64,7 @@ SECTIONS
63 usr/built-in.o(.init.ramfs) 64 usr/built-in.o(.init.ramfs)
64 __initramfs_end = .; 65 __initramfs_end = .;
65#endif 66#endif
66 . = ALIGN(4096); 67 . = ALIGN(PAGE_SIZE);
67 __per_cpu_load = .; 68 __per_cpu_load = .;
68 __per_cpu_start = .; 69 __per_cpu_start = .;
69 *(.data.percpu.page_aligned) 70 *(.data.percpu.page_aligned)
@@ -73,7 +74,7 @@ SECTIONS
73#ifndef CONFIG_XIP_KERNEL 74#ifndef CONFIG_XIP_KERNEL
74 __init_begin = _stext; 75 __init_begin = _stext;
75 INIT_DATA 76 INIT_DATA
76 . = ALIGN(4096); 77 . = ALIGN(PAGE_SIZE);
77 __init_end = .; 78 __init_end = .;
78#endif 79#endif
79 } 80 }
@@ -84,6 +85,14 @@ SECTIONS
84 *(.exitcall.exit) 85 *(.exitcall.exit)
85 *(.ARM.exidx.exit.text) 86 *(.ARM.exidx.exit.text)
86 *(.ARM.extab.exit.text) 87 *(.ARM.extab.exit.text)
88#ifndef CONFIG_HOTPLUG_CPU
89 *(.ARM.exidx.cpuexit.text)
90 *(.ARM.extab.cpuexit.text)
91#endif
92#ifndef CONFIG_HOTPLUG
93 *(.ARM.exidx.devexit.text)
94 *(.ARM.extab.devexit.text)
95#endif
87#ifndef CONFIG_MMU 96#ifndef CONFIG_MMU
88 *(.fixup) 97 *(.fixup)
89 *(__ex_table) 98 *(__ex_table)
@@ -110,7 +119,7 @@ SECTIONS
110 *(.got) /* Global offset table */ 119 *(.got) /* Global offset table */
111 } 120 }
112 121
113 RODATA 122 RO_DATA(PAGE_SIZE)
114 123
115 _etext = .; /* End of text and rodata section */ 124 _etext = .; /* End of text and rodata section */
116 125
@@ -150,17 +159,17 @@ SECTIONS
150 *(.data.init_task) 159 *(.data.init_task)
151 160
152#ifdef CONFIG_XIP_KERNEL 161#ifdef CONFIG_XIP_KERNEL
153 . = ALIGN(4096); 162 . = ALIGN(PAGE_SIZE);
154 __init_begin = .; 163 __init_begin = .;
155 INIT_DATA 164 INIT_DATA
156 . = ALIGN(4096); 165 . = ALIGN(PAGE_SIZE);
157 __init_end = .; 166 __init_end = .;
158#endif 167#endif
159 168
160 . = ALIGN(4096); 169 . = ALIGN(PAGE_SIZE);
161 __nosave_begin = .; 170 __nosave_begin = .;
162 *(.data.nosave) 171 *(.data.nosave)
163 . = ALIGN(4096); 172 . = ALIGN(PAGE_SIZE);
164 __nosave_end = .; 173 __nosave_end = .;
165 174
166 /* 175 /*
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c
index cc270beadd5d..a55398ed1211 100644
--- a/arch/arm/mach-at91/board-sam9g20ek.c
+++ b/arch/arm/mach-at91/board-sam9g20ek.c
@@ -24,6 +24,8 @@
24#include <linux/platform_device.h> 24#include <linux/platform_device.h>
25#include <linux/spi/spi.h> 25#include <linux/spi/spi.h>
26#include <linux/spi/at73c213.h> 26#include <linux/spi/at73c213.h>
27#include <linux/gpio_keys.h>
28#include <linux/input.h>
27#include <linux/clk.h> 29#include <linux/clk.h>
28 30
29#include <mach/hardware.h> 31#include <mach/hardware.h>
@@ -218,6 +220,56 @@ static struct gpio_led ek_leds[] = {
218 } 220 }
219}; 221};
220 222
223
224/*
225 * GPIO Buttons
226 */
227#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
228static struct gpio_keys_button ek_buttons[] = {
229 {
230 .gpio = AT91_PIN_PA30,
231 .code = BTN_3,
232 .desc = "Button 3",
233 .active_low = 1,
234 .wakeup = 1,
235 },
236 {
237 .gpio = AT91_PIN_PA31,
238 .code = BTN_4,
239 .desc = "Button 4",
240 .active_low = 1,
241 .wakeup = 1,
242 }
243};
244
245static struct gpio_keys_platform_data ek_button_data = {
246 .buttons = ek_buttons,
247 .nbuttons = ARRAY_SIZE(ek_buttons),
248};
249
250static struct platform_device ek_button_device = {
251 .name = "gpio-keys",
252 .id = -1,
253 .num_resources = 0,
254 .dev = {
255 .platform_data = &ek_button_data,
256 }
257};
258
259static void __init ek_add_device_buttons(void)
260{
261 at91_set_gpio_input(AT91_PIN_PA30, 1); /* btn3 */
262 at91_set_deglitch(AT91_PIN_PA30, 1);
263 at91_set_gpio_input(AT91_PIN_PA31, 1); /* btn4 */
264 at91_set_deglitch(AT91_PIN_PA31, 1);
265
266 platform_device_register(&ek_button_device);
267}
268#else
269static void __init ek_add_device_buttons(void) {}
270#endif
271
272
221static struct i2c_board_info __initdata ek_i2c_devices[] = { 273static struct i2c_board_info __initdata ek_i2c_devices[] = {
222 { 274 {
223 I2C_BOARD_INFO("24c512", 0x50), 275 I2C_BOARD_INFO("24c512", 0x50),
@@ -245,6 +297,8 @@ static void __init ek_board_init(void)
245 at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); 297 at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
246 /* LEDs */ 298 /* LEDs */
247 at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); 299 at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
300 /* Push Buttons */
301 ek_add_device_buttons();
248 /* PCK0 provides MCLK to the WM8731 */ 302 /* PCK0 provides MCLK to the WM8731 */
249 at91_set_B_periph(AT91_PIN_PC1, 0); 303 at91_set_B_periph(AT91_PIN_PC1, 0);
250 /* SSC (for WM8731) */ 304 /* SSC (for WM8731) */
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c
index 35e12a49d1a6..f6b5672cabd6 100644
--- a/arch/arm/mach-at91/board-sam9rlek.c
+++ b/arch/arm/mach-at91/board-sam9rlek.c
@@ -186,19 +186,21 @@ static struct fb_monspecs at91fb_default_monspecs = {
186static void at91_lcdc_power_control(int on) 186static void at91_lcdc_power_control(int on)
187{ 187{
188 if (on) 188 if (on)
189 at91_set_gpio_value(AT91_PIN_PA30, 0); /* power up */ 189 at91_set_gpio_value(AT91_PIN_PC1, 0); /* power up */
190 else 190 else
191 at91_set_gpio_value(AT91_PIN_PA30, 1); /* power down */ 191 at91_set_gpio_value(AT91_PIN_PC1, 1); /* power down */
192} 192}
193 193
194/* Driver datas */ 194/* Driver datas */
195static struct atmel_lcdfb_info __initdata ek_lcdc_data = { 195static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
196 .lcdcon_is_backlight = true,
196 .default_bpp = 16, 197 .default_bpp = 16,
197 .default_dmacon = ATMEL_LCDC_DMAEN, 198 .default_dmacon = ATMEL_LCDC_DMAEN,
198 .default_lcdcon2 = AT91SAM9RL_DEFAULT_LCDCON2, 199 .default_lcdcon2 = AT91SAM9RL_DEFAULT_LCDCON2,
199 .default_monspecs = &at91fb_default_monspecs, 200 .default_monspecs = &at91fb_default_monspecs,
200 .atmel_lcdfb_power_control = at91_lcdc_power_control, 201 .atmel_lcdfb_power_control = at91_lcdc_power_control,
201 .guard_time = 1, 202 .guard_time = 1,
203 .lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB,
202}; 204};
203 205
204#else 206#else
diff --git a/arch/arm/mach-at91/include/mach/at_hdmac.h b/arch/arm/mach-at91/include/mach/at_hdmac.h
new file mode 100644
index 000000000000..187cb58345c0
--- /dev/null
+++ b/arch/arm/mach-at91/include/mach/at_hdmac.h
@@ -0,0 +1,102 @@
1/*
2 * Header file for the Atmel AHB DMA Controller driver
3 *
4 * Copyright (C) 2008 Atmel Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 */
11#ifndef AT_HDMAC_H
12#define AT_HDMAC_H
13
14#include <linux/dmaengine.h>
15
16/**
17 * struct at_dma_platform_data - Controller configuration parameters
18 * @nr_channels: Number of channels supported by hardware (max 8)
19 * @cap_mask: dma_capability flags supported by the platform
20 */
21struct at_dma_platform_data {
22 unsigned int nr_channels;
23 dma_cap_mask_t cap_mask;
24};
25
26/**
27 * enum at_dma_slave_width - DMA slave register access width.
28 * @AT_DMA_SLAVE_WIDTH_8BIT: Do 8-bit slave register accesses
29 * @AT_DMA_SLAVE_WIDTH_16BIT: Do 16-bit slave register accesses
30 * @AT_DMA_SLAVE_WIDTH_32BIT: Do 32-bit slave register accesses
31 */
32enum at_dma_slave_width {
33 AT_DMA_SLAVE_WIDTH_8BIT = 0,
34 AT_DMA_SLAVE_WIDTH_16BIT,
35 AT_DMA_SLAVE_WIDTH_32BIT,
36};
37
38/**
39 * struct at_dma_slave - Controller-specific information about a slave
40 * @dma_dev: required DMA master device
41 * @tx_reg: physical address of data register used for
42 * memory-to-peripheral transfers
43 * @rx_reg: physical address of data register used for
44 * peripheral-to-memory transfers
45 * @reg_width: peripheral register width
46 * @cfg: Platform-specific initializer for the CFG register
47 * @ctrla: Platform-specific initializer for the CTRLA register
48 */
49struct at_dma_slave {
50 struct device *dma_dev;
51 dma_addr_t tx_reg;
52 dma_addr_t rx_reg;
53 enum at_dma_slave_width reg_width;
54 u32 cfg;
55 u32 ctrla;
56};
57
58
59/* Platform-configurable bits in CFG */
60#define ATC_SRC_PER(h) (0xFU & (h)) /* Channel src rq associated with periph handshaking ifc h */
61#define ATC_DST_PER(h) ((0xFU & (h)) << 4) /* Channel dst rq associated with periph handshaking ifc h */
62#define ATC_SRC_REP (0x1 << 8) /* Source Replay Mod */
63#define ATC_SRC_H2SEL (0x1 << 9) /* Source Handshaking Mod */
64#define ATC_SRC_H2SEL_SW (0x0 << 9)
65#define ATC_SRC_H2SEL_HW (0x1 << 9)
66#define ATC_DST_REP (0x1 << 12) /* Destination Replay Mod */
67#define ATC_DST_H2SEL (0x1 << 13) /* Destination Handshaking Mod */
68#define ATC_DST_H2SEL_SW (0x0 << 13)
69#define ATC_DST_H2SEL_HW (0x1 << 13)
70#define ATC_SOD (0x1 << 16) /* Stop On Done */
71#define ATC_LOCK_IF (0x1 << 20) /* Interface Lock */
72#define ATC_LOCK_B (0x1 << 21) /* AHB Bus Lock */
73#define ATC_LOCK_IF_L (0x1 << 22) /* Master Interface Arbiter Lock */
74#define ATC_LOCK_IF_L_CHUNK (0x0 << 22)
75#define ATC_LOCK_IF_L_BUFFER (0x1 << 22)
76#define ATC_AHB_PROT_MASK (0x7 << 24) /* AHB Protection */
77#define ATC_FIFOCFG_MASK (0x3 << 28) /* FIFO Request Configuration */
78#define ATC_FIFOCFG_LARGESTBURST (0x0 << 28)
79#define ATC_FIFOCFG_HALFFIFO (0x1 << 28)
80#define ATC_FIFOCFG_ENOUGHSPACE (0x2 << 28)
81
82/* Platform-configurable bits in CTRLA */
83#define ATC_SCSIZE_MASK (0x7 << 16) /* Source Chunk Transfer Size */
84#define ATC_SCSIZE_1 (0x0 << 16)
85#define ATC_SCSIZE_4 (0x1 << 16)
86#define ATC_SCSIZE_8 (0x2 << 16)
87#define ATC_SCSIZE_16 (0x3 << 16)
88#define ATC_SCSIZE_32 (0x4 << 16)
89#define ATC_SCSIZE_64 (0x5 << 16)
90#define ATC_SCSIZE_128 (0x6 << 16)
91#define ATC_SCSIZE_256 (0x7 << 16)
92#define ATC_DCSIZE_MASK (0x7 << 20) /* Destination Chunk Transfer Size */
93#define ATC_DCSIZE_1 (0x0 << 20)
94#define ATC_DCSIZE_4 (0x1 << 20)
95#define ATC_DCSIZE_8 (0x2 << 20)
96#define ATC_DCSIZE_16 (0x3 << 20)
97#define ATC_DCSIZE_32 (0x4 << 20)
98#define ATC_DCSIZE_64 (0x5 << 20)
99#define ATC_DCSIZE_128 (0x6 << 20)
100#define ATC_DCSIZE_256 (0x7 << 20)
101
102#endif /* AT_HDMAC_H */
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c
index 5ac2f565d860..d6ab64ccd496 100644
--- a/arch/arm/mach-davinci/board-dm355-evm.c
+++ b/arch/arm/mach-davinci/board-dm355-evm.c
@@ -37,7 +37,6 @@
37#include <mach/serial.h> 37#include <mach/serial.h>
38#include <mach/nand.h> 38#include <mach/nand.h>
39#include <mach/mmc.h> 39#include <mach/mmc.h>
40#include <mach/common.h>
41 40
42#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000 41#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000
43#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 42#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c
index 28c9008df4f4..84ad5d161a87 100644
--- a/arch/arm/mach-davinci/board-dm355-leopard.c
+++ b/arch/arm/mach-davinci/board-dm355-leopard.c
@@ -36,7 +36,6 @@
36#include <mach/serial.h> 36#include <mach/serial.h>
37#include <mach/nand.h> 37#include <mach/nand.h>
38#include <mach/mmc.h> 38#include <mach/mmc.h>
39#include <mach/common.h>
40 39
41#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000 40#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000
42#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 41#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index d9d40450bdc5..56c8cd01de9a 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -45,7 +45,6 @@
45#include <mach/nand.h> 45#include <mach/nand.h>
46#include <mach/mmc.h> 46#include <mach/mmc.h>
47#include <mach/emac.h> 47#include <mach/emac.h>
48#include <mach/common.h>
49 48
50#define DM644X_EVM_PHY_MASK (0x2) 49#define DM644X_EVM_PHY_MASK (0x2)
51#define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ 50#define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
index e17de6352624..8657e72debc1 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -47,7 +47,6 @@
47#include <mach/i2c.h> 47#include <mach/i2c.h>
48#include <mach/mmc.h> 48#include <mach/mmc.h>
49#include <mach/emac.h> 49#include <mach/emac.h>
50#include <mach/common.h>
51 50
52#define DM646X_EVM_PHY_MASK (0x2) 51#define DM646X_EVM_PHY_MASK (0x2)
53#define DM646X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ 52#define DM646X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c
index 748a8e48541e..7acdfd8ac071 100644
--- a/arch/arm/mach-davinci/board-sffsdr.c
+++ b/arch/arm/mach-davinci/board-sffsdr.c
@@ -52,7 +52,6 @@
52#include <mach/serial.h> 52#include <mach/serial.h>
53#include <mach/psc.h> 53#include <mach/psc.h>
54#include <mach/mux.h> 54#include <mach/mux.h>
55#include <mach/common.h>
56 55
57#define SFFSDR_PHY_MASK (0x2) 56#define SFFSDR_PHY_MASK (0x2)
58#define SFFSDR_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ 57#define SFFSDR_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h
index aa482841270b..b520c4b5678a 100644
--- a/arch/arm/mach-davinci/include/mach/nand.h
+++ b/arch/arm/mach-davinci/include/mach/nand.h
@@ -68,10 +68,14 @@ struct davinci_nand_pdata { /* platform_data */
68 68
69 /* none == NAND_ECC_NONE (strongly *not* advised!!) 69 /* none == NAND_ECC_NONE (strongly *not* advised!!)
70 * soft == NAND_ECC_SOFT 70 * soft == NAND_ECC_SOFT
71 * 1-bit == NAND_ECC_HW 71 * else == NAND_ECC_HW, according to ecc_bits
72 * 4-bit == NAND_ECC_HW_SYNDROME (not on all chips) 72 *
73 * All DaVinci-family chips support 1-bit hardware ECC.
74 * Newer ones also support 4-bit ECC, but are awkward
75 * using it with large page chips.
73 */ 76 */
74 nand_ecc_modes_t ecc_mode; 77 nand_ecc_modes_t ecc_mode;
78 u8 ecc_bits;
75 79
76 /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ 80 /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
77 unsigned options; 81 unsigned options;
diff --git a/arch/arm/mach-ep93xx/dma-m2p.c b/arch/arm/mach-ep93xx/dma-m2p.c
index a2df5bb7dff0..dbcac9c40a28 100644
--- a/arch/arm/mach-ep93xx/dma-m2p.c
+++ b/arch/arm/mach-ep93xx/dma-m2p.c
@@ -33,6 +33,7 @@
33#include <linux/err.h> 33#include <linux/err.h>
34#include <linux/interrupt.h> 34#include <linux/interrupt.h>
35#include <linux/module.h> 35#include <linux/module.h>
36#include <linux/io.h>
36 37
37#include <mach/dma.h> 38#include <mach/dma.h>
38#include <mach/hardware.h> 39#include <mach/hardware.h>
diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx_keypad.h b/arch/arm/mach-ep93xx/include/mach/ep93xx_keypad.h
new file mode 100644
index 000000000000..83f31cd0a274
--- /dev/null
+++ b/arch/arm/mach-ep93xx/include/mach/ep93xx_keypad.h
@@ -0,0 +1,42 @@
1/*
2 * arch/arm/mach-ep93xx/include/mach/ep93xx_keypad.h
3 */
4
5#ifndef __ASM_ARCH_EP93XX_KEYPAD_H
6#define __ASM_ARCH_EP93XX_KEYPAD_H
7
8#define MAX_MATRIX_KEY_ROWS (8)
9#define MAX_MATRIX_KEY_COLS (8)
10
11/* flags for the ep93xx_keypad driver */
12#define EP93XX_KEYPAD_DISABLE_3_KEY (1<<0) /* disable 3-key reset */
13#define EP93XX_KEYPAD_DIAG_MODE (1<<1) /* diagnostic mode */
14#define EP93XX_KEYPAD_BACK_DRIVE (1<<2) /* back driving mode */
15#define EP93XX_KEYPAD_TEST_MODE (1<<3) /* scan only column 0 */
16#define EP93XX_KEYPAD_KDIV (1<<4) /* 1/4 clock or 1/16 clock */
17#define EP93XX_KEYPAD_AUTOREPEAT (1<<5) /* enable key autorepeat */
18
19/**
20 * struct ep93xx_keypad_platform_data - platform specific device structure
21 * @matrix_key_rows: number of rows in the keypad matrix
22 * @matrix_key_cols: number of columns in the keypad matrix
23 * @matrix_key_map: array of keycodes defining the keypad matrix
24 * @matrix_key_map_size: ARRAY_SIZE(matrix_key_map)
25 * @debounce: debounce start count; terminal count is 0xff
26 * @prescale: row/column counter pre-scaler load value
27 * @flags: see above
28 */
29struct ep93xx_keypad_platform_data {
30 unsigned int matrix_key_rows;
31 unsigned int matrix_key_cols;
32 unsigned int *matrix_key_map;
33 int matrix_key_map_size;
34 unsigned int debounce;
35 unsigned int prescale;
36 unsigned int flags;
37};
38
39/* macro for creating the matrix_key_map table */
40#define KEY(row, col, val) (((row) << 28) | ((col) << 24) | (val))
41
42#endif /* __ASM_ARCH_EP93XX_KEYPAD_H */
diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
index 34ddec081c40..411734422c1d 100644
--- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h
+++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h
@@ -41,9 +41,6 @@
41#define TS72XX_OPTIONS2_TS9420_BOOT 0x02 41#define TS72XX_OPTIONS2_TS9420_BOOT 0x02
42 42
43 43
44#define TS72XX_NOR_PHYS_BASE 0x60000000
45#define TS72XX_NOR2_PHYS_BASE 0x62000000
46
47#define TS72XX_NAND1_DATA_PHYS_BASE 0x60000000 44#define TS72XX_NAND1_DATA_PHYS_BASE 0x60000000
48#define TS72XX_NAND2_DATA_PHYS_BASE 0x70000000 45#define TS72XX_NAND2_DATA_PHYS_BASE 0x70000000
49#define TS72XX_NAND_DATA_VIRT_BASE 0xfebfc000 46#define TS72XX_NAND_DATA_VIRT_BASE 0xfebfc000
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
index 7ee024d34829..aaf1371412af 100644
--- a/arch/arm/mach-ep93xx/ts72xx.c
+++ b/arch/arm/mach-ep93xx/ts72xx.c
@@ -112,13 +112,16 @@ static void __init ts72xx_map_io(void)
112 } 112 }
113} 113}
114 114
115/*************************************************************************
116 * NOR flash (TS-7200 only)
117 *************************************************************************/
115static struct physmap_flash_data ts72xx_flash_data = { 118static struct physmap_flash_data ts72xx_flash_data = {
116 .width = 1, 119 .width = 2,
117}; 120};
118 121
119static struct resource ts72xx_flash_resource = { 122static struct resource ts72xx_flash_resource = {
120 .start = TS72XX_NOR_PHYS_BASE, 123 .start = EP93XX_CS6_PHYS_BASE,
121 .end = TS72XX_NOR_PHYS_BASE + SZ_16M - 1, 124 .end = EP93XX_CS6_PHYS_BASE + SZ_16M - 1,
122 .flags = IORESOURCE_MEM, 125 .flags = IORESOURCE_MEM,
123}; 126};
124 127
@@ -132,6 +135,12 @@ static struct platform_device ts72xx_flash = {
132 .resource = &ts72xx_flash_resource, 135 .resource = &ts72xx_flash_resource,
133}; 136};
134 137
138static void __init ts72xx_register_flash(void)
139{
140 if (board_is_ts7200())
141 platform_device_register(&ts72xx_flash);
142}
143
135static unsigned char ts72xx_rtc_readbyte(unsigned long addr) 144static unsigned char ts72xx_rtc_readbyte(unsigned long addr)
136{ 145{
137 __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE); 146 __raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
@@ -165,8 +174,7 @@ static struct ep93xx_eth_data ts72xx_eth_data = {
165static void __init ts72xx_init_machine(void) 174static void __init ts72xx_init_machine(void)
166{ 175{
167 ep93xx_init_devices(); 176 ep93xx_init_devices();
168 if (board_is_ts7200()) 177 ts72xx_register_flash();
169 platform_device_register(&ts72xx_flash);
170 platform_device_register(&ts72xx_rtc_device); 178 platform_device_register(&ts72xx_rtc_device);
171 179
172 ep93xx_register_eth(&ts72xx_eth_data, 1); 180 ep93xx_register_eth(&ts72xx_eth_data, 1);
diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h
index ce63048d45eb..8a947d42a6f1 100644
--- a/arch/arm/mach-ixp4xx/include/mach/io.h
+++ b/arch/arm/mach-ixp4xx/include/mach/io.h
@@ -17,7 +17,7 @@
17 17
18#include <mach/hardware.h> 18#include <mach/hardware.h>
19 19
20#define IO_SPACE_LIMIT 0xffff0000 20#define IO_SPACE_LIMIT 0x0000ffff
21 21
22extern int (*ixp4xx_pci_read)(u32 addr, u32 cmd, u32* data); 22extern int (*ixp4xx_pci_read)(u32 addr, u32 cmd, u32* data);
23extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data); 23extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data);
diff --git a/arch/arm/mach-kirkwood/mpp.h b/arch/arm/mach-kirkwood/mpp.h
index e021a80c2caf..bc74278ed311 100644
--- a/arch/arm/mach-kirkwood/mpp.h
+++ b/arch/arm/mach-kirkwood/mpp.h
@@ -289,7 +289,7 @@
289 289
290#define MPP48_GPIO MPP( 48, 0x0, 1, 1, 0, 0, 0, 1 ) 290#define MPP48_GPIO MPP( 48, 0x0, 1, 1, 0, 0, 0, 1 )
291#define MPP48_TSMP12 MPP( 48, 0x1, 1, 1, 0, 0, 0, 1 ) 291#define MPP48_TSMP12 MPP( 48, 0x1, 1, 1, 0, 0, 0, 1 )
292#define MPP48_TDM_DTX MPP( 48. 0x2, 0, 1, 0, 0, 0, 1 ) 292#define MPP48_TDM_DTX MPP( 48, 0x2, 0, 1, 0, 0, 0, 1 )
293 293
294#define MPP49_GPIO MPP( 49, 0x0, 1, 1, 0, 0, 0, 1 ) 294#define MPP49_GPIO MPP( 49, 0x0, 1, 1, 0, 0, 0, 1 )
295#define MPP49_TSMP9 MPP( 49, 0x1, 1, 1, 0, 0, 0, 1 ) 295#define MPP49_TSMP9 MPP( 49, 0x1, 1, 1, 0, 0, 0, 1 )
diff --git a/arch/arm/mach-kirkwood/ts219-setup.c b/arch/arm/mach-kirkwood/ts219-setup.c
index 01aa213c0a6f..ec1a64f263d2 100644
--- a/arch/arm/mach-kirkwood/ts219-setup.c
+++ b/arch/arm/mach-kirkwood/ts219-setup.c
@@ -206,6 +206,15 @@ static void __init qnap_ts219_init(void)
206 206
207} 207}
208 208
209static int __init ts219_pci_init(void)
210{
211 if (machine_is_ts219())
212 kirkwood_pcie_init();
213
214 return 0;
215}
216subsys_initcall(ts219_pci_init);
217
209MACHINE_START(TS219, "QNAP TS-119/TS-219") 218MACHINE_START(TS219, "QNAP TS-119/TS-219")
210 /* Maintainer: Martin Michlmayr <tbm@cyrius.com> */ 219 /* Maintainer: Martin Michlmayr <tbm@cyrius.com> */
211 .phys_io = KIRKWOOD_REGS_PHYS_BASE, 220 .phys_io = KIRKWOOD_REGS_PHYS_BASE,
diff --git a/arch/arm/mach-ks8695/include/mach/hardware.h b/arch/arm/mach-ks8695/include/mach/hardware.h
index 1d640d075b7e..e0f911d9e021 100644
--- a/arch/arm/mach-ks8695/include/mach/hardware.h
+++ b/arch/arm/mach-ks8695/include/mach/hardware.h
@@ -17,6 +17,11 @@
17#include <asm/sizes.h> 17#include <asm/sizes.h>
18 18
19/* 19/*
20 * Clocks are derived from MCLK, which is 25Mhz
21 */
22#define KS8695_CLOCK_RATE 25000000
23
24/*
20 * Physical RAM address. 25 * Physical RAM address.
21 */ 26 */
22#define KS8695_SDRAM_PA 0x00000000 27#define KS8695_SDRAM_PA 0x00000000
diff --git a/arch/arm/mach-ks8695/include/mach/timex.h b/arch/arm/mach-ks8695/include/mach/timex.h
index 4682e350369b..10f716371bd3 100644
--- a/arch/arm/mach-ks8695/include/mach/timex.h
+++ b/arch/arm/mach-ks8695/include/mach/timex.h
@@ -14,7 +14,8 @@
14#ifndef __ASM_ARCH_TIMEX_H 14#ifndef __ASM_ARCH_TIMEX_H
15#define __ASM_ARCH_TIMEX_H 15#define __ASM_ARCH_TIMEX_H
16 16
17/* timers are derived from MCLK, which is 25MHz */ 17#include <mach/hardware.h>
18#define CLOCK_TICK_RATE 25000000 18
19#define CLOCK_TICK_RATE KS8695_CLOCK_RATE
19 20
20#endif 21#endif
diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c
index f5ebcc0fcab9..78499667eb7b 100644
--- a/arch/arm/mach-ks8695/pci.c
+++ b/arch/arm/mach-ks8695/pci.c
@@ -245,6 +245,9 @@ static int ks8695_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs
245 245
246static void __init ks8695_pci_preinit(void) 246static void __init ks8695_pci_preinit(void)
247{ 247{
248 /* make software reset to avoid freeze if PCI bus was messed up */
249 __raw_writel(0x80000000, KS8695_PCI_VA + KS8695_PBCS);
250
248 /* stage 1 initialization, subid, subdevice = 0x0001 */ 251 /* stage 1 initialization, subid, subdevice = 0x0001 */
249 __raw_writel(0x00010001, KS8695_PCI_VA + KS8695_CRCSID); 252 __raw_writel(0x00010001, KS8695_PCI_VA + KS8695_CRCSID);
250 253
diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig
index 17a21a291e2f..851f2458bf65 100644
--- a/arch/arm/mach-mx3/Kconfig
+++ b/arch/arm/mach-mx3/Kconfig
@@ -36,6 +36,14 @@ config MACH_PCM037
36 Include support for Phytec pcm037 platform. This includes 36 Include support for Phytec pcm037 platform. This includes
37 specific configurations for the board and its peripherals. 37 specific configurations for the board and its peripherals.
38 38
39config MACH_PCM037_EET
40 bool "Support pcm037 EET board extensions"
41 depends on MACH_PCM037
42 help
43 Add support for PCM037 EET baseboard extensions. If you are using the
44 OLED display with EET, use "video=mx3fb:CMEL-OLED" kernel
45 command-line parameter.
46
39config MACH_MX31LITE 47config MACH_MX31LITE
40 bool "Support MX31 LITEKIT (LogicPD)" 48 bool "Support MX31 LITEKIT (LogicPD)"
41 select ARCH_MX31 49 select ARCH_MX31
diff --git a/arch/arm/mach-mx3/Makefile b/arch/arm/mach-mx3/Makefile
index 0322696bd11a..6b9775471be6 100644
--- a/arch/arm/mach-mx3/Makefile
+++ b/arch/arm/mach-mx3/Makefile
@@ -11,6 +11,7 @@ obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o
11obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o 11obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o
12obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o 12obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o
13obj-$(CONFIG_MACH_PCM037) += pcm037.o 13obj-$(CONFIG_MACH_PCM037) += pcm037.o
14obj-$(CONFIG_MACH_PCM037_EET) += pcm037_eet.o
14obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o 15obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o
15obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ 16obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \
16 mx31moboard-marxbot.o 17 mx31moboard-marxbot.o
diff --git a/arch/arm/mach-mx3/armadillo5x0.c b/arch/arm/mach-mx3/armadillo5x0.c
index 541181090b37..ee331fd6b1bd 100644
--- a/arch/arm/mach-mx3/armadillo5x0.c
+++ b/arch/arm/mach-mx3/armadillo5x0.c
@@ -31,6 +31,8 @@
31#include <linux/smsc911x.h> 31#include <linux/smsc911x.h>
32#include <linux/interrupt.h> 32#include <linux/interrupt.h>
33#include <linux/irq.h> 33#include <linux/irq.h>
34#include <linux/mtd/physmap.h>
35#include <linux/io.h>
34 36
35#include <mach/hardware.h> 37#include <mach/hardware.h>
36#include <asm/mach-types.h> 38#include <asm/mach-types.h>
@@ -46,8 +48,10 @@
46#include <mach/mmc.h> 48#include <mach/mmc.h>
47#include <mach/ipu.h> 49#include <mach/ipu.h>
48#include <mach/mx3fb.h> 50#include <mach/mx3fb.h>
51#include <mach/mxc_nand.h>
49 52
50#include "devices.h" 53#include "devices.h"
54#include "crm_regs.h"
51 55
52static int armadillo5x0_pins[] = { 56static int armadillo5x0_pins[] = {
53 /* UART1 */ 57 /* UART1 */
@@ -93,7 +97,56 @@ static int armadillo5x0_pins[] = {
93 MX31_PIN_FPSHIFT__FPSHIFT, 97 MX31_PIN_FPSHIFT__FPSHIFT,
94 MX31_PIN_DRDY0__DRDY0, 98 MX31_PIN_DRDY0__DRDY0,
95 IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ 99 IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/
100};
96 101
102/*
103 * NAND Flash
104 */
105static struct mxc_nand_platform_data armadillo5x0_nand_flash_pdata = {
106 .width = 1,
107 .hw_ecc = 1,
108};
109
110/*
111 * MTD NOR Flash
112 */
113static struct mtd_partition armadillo5x0_nor_flash_partitions[] = {
114 {
115 .name = "nor.bootloader",
116 .offset = 0x00000000,
117 .size = 4*32*1024,
118 }, {
119 .name = "nor.kernel",
120 .offset = MTDPART_OFS_APPEND,
121 .size = 16*128*1024,
122 }, {
123 .name = "nor.userland",
124 .offset = MTDPART_OFS_APPEND,
125 .size = 110*128*1024,
126 }, {
127 .name = "nor.config",
128 .offset = MTDPART_OFS_APPEND,
129 .size = 1*128*1024,
130 },
131};
132
133static struct physmap_flash_data armadillo5x0_nor_flash_pdata = {
134 .width = 2,
135 .parts = armadillo5x0_nor_flash_partitions,
136 .nr_parts = ARRAY_SIZE(armadillo5x0_nor_flash_partitions),
137};
138
139static struct resource armadillo5x0_nor_flash_resource = {
140 .flags = IORESOURCE_MEM,
141 .start = CS0_BASE_ADDR,
142 .end = CS0_BASE_ADDR + SZ_64M - 1,
143};
144
145static struct platform_device armadillo5x0_nor_flash = {
146 .name = "physmap-flash",
147 .id = -1,
148 .num_resources = 1,
149 .resource = &armadillo5x0_nor_flash_resource,
97}; 150};
98 151
99/* 152/*
@@ -272,6 +325,16 @@ static void __init armadillo5x0_init(void)
272 /* Register FB */ 325 /* Register FB */
273 mxc_register_device(&mx3_ipu, &mx3_ipu_data); 326 mxc_register_device(&mx3_ipu, &mx3_ipu_data);
274 mxc_register_device(&mx3_fb, &mx3fb_pdata); 327 mxc_register_device(&mx3_fb, &mx3fb_pdata);
328
329 /* Register NOR Flash */
330 mxc_register_device(&armadillo5x0_nor_flash,
331 &armadillo5x0_nor_flash_pdata);
332
333 /* Register NAND Flash */
334 mxc_register_device(&mxc_nand_device, &armadillo5x0_nand_flash_pdata);
335
336 /* set NAND page size to 2k if not configured via boot mode pins */
337 __raw_writel(__raw_readl(MXC_CCM_RCSR) | (1 << 30), MXC_CCM_RCSR);
275} 338}
276 339
277static void __init armadillo5x0_timer_init(void) 340static void __init armadillo5x0_timer_init(void)
diff --git a/arch/arm/mach-mx3/devices.c b/arch/arm/mach-mx3/devices.c
index d927eddcad46..9e87e08fb121 100644
--- a/arch/arm/mach-mx3/devices.c
+++ b/arch/arm/mach-mx3/devices.c
@@ -22,7 +22,6 @@
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23#include <linux/serial.h> 23#include <linux/serial.h>
24#include <linux/gpio.h> 24#include <linux/gpio.h>
25#include <linux/dma-mapping.h>
26#include <mach/hardware.h> 25#include <mach/hardware.h>
27#include <mach/irqs.h> 26#include <mach/irqs.h>
28#include <mach/common.h> 27#include <mach/common.h>
diff --git a/arch/arm/mach-mx3/mx31moboard-devboard.c b/arch/arm/mach-mx3/mx31moboard-devboard.c
index 4704405165a1..b48581e7dedd 100644
--- a/arch/arm/mach-mx3/mx31moboard-devboard.c
+++ b/arch/arm/mach-mx3/mx31moboard-devboard.c
@@ -63,7 +63,7 @@ static struct imxuart_platform_data uart_pdata = {
63 63
64static int devboard_sdhc2_get_ro(struct device *dev) 64static int devboard_sdhc2_get_ro(struct device *dev)
65{ 65{
66 return gpio_get_value(SDHC2_WP); 66 return !gpio_get_value(SDHC2_WP);
67} 67}
68 68
69static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq, 69static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
diff --git a/arch/arm/mach-mx3/mx31moboard-marxbot.c b/arch/arm/mach-mx3/mx31moboard-marxbot.c
index 641c3d6153ae..901fb0166c0e 100644
--- a/arch/arm/mach-mx3/mx31moboard-marxbot.c
+++ b/arch/arm/mach-mx3/mx31moboard-marxbot.c
@@ -67,7 +67,7 @@ static unsigned int marxbot_pins[] = {
67 67
68static int marxbot_sdhc2_get_ro(struct device *dev) 68static int marxbot_sdhc2_get_ro(struct device *dev)
69{ 69{
70 return gpio_get_value(SDHC2_WP); 70 return !gpio_get_value(SDHC2_WP);
71} 71}
72 72
73static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq, 73static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
diff --git a/arch/arm/mach-mx3/mx31moboard.c b/arch/arm/mach-mx3/mx31moboard.c
index a17f2e411609..2a2da4739ecf 100644
--- a/arch/arm/mach-mx3/mx31moboard.c
+++ b/arch/arm/mach-mx3/mx31moboard.c
@@ -94,7 +94,7 @@ static struct imxi2c_platform_data moboard_i2c1_pdata = {
94 94
95static int moboard_sdhc1_get_ro(struct device *dev) 95static int moboard_sdhc1_get_ro(struct device *dev)
96{ 96{
97 return gpio_get_value(SDHC1_WP); 97 return !gpio_get_value(SDHC1_WP);
98} 98}
99 99
100static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq, 100static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c
index c6f61a1f06c8..840cfda341d0 100644
--- a/arch/arm/mach-mx3/pcm037.c
+++ b/arch/arm/mach-mx3/pcm037.c
@@ -18,7 +18,7 @@
18 18
19#include <linux/types.h> 19#include <linux/types.h>
20#include <linux/init.h> 20#include <linux/init.h>
21 21#include <linux/dma-mapping.h>
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23#include <linux/mtd/physmap.h> 23#include <linux/mtd/physmap.h>
24#include <linux/mtd/plat-ram.h> 24#include <linux/mtd/plat-ram.h>
@@ -33,29 +33,67 @@
33#include <linux/irq.h> 33#include <linux/irq.h>
34#include <linux/fsl_devices.h> 34#include <linux/fsl_devices.h>
35 35
36#include <mach/hardware.h> 36#include <media/soc_camera.h>
37
37#include <asm/mach-types.h> 38#include <asm/mach-types.h>
38#include <asm/mach/arch.h> 39#include <asm/mach/arch.h>
39#include <asm/mach/time.h> 40#include <asm/mach/time.h>
40#include <asm/mach/map.h> 41#include <asm/mach/map.h>
42#include <mach/board-pcm037.h>
41#include <mach/common.h> 43#include <mach/common.h>
44#include <mach/hardware.h>
45#include <mach/i2c.h>
42#include <mach/imx-uart.h> 46#include <mach/imx-uart.h>
43#include <mach/iomux-mx3.h> 47#include <mach/iomux-mx3.h>
44#include <mach/ipu.h> 48#include <mach/ipu.h>
45#include <mach/board-pcm037.h> 49#include <mach/mmc.h>
50#include <mach/mx3_camera.h>
46#include <mach/mx3fb.h> 51#include <mach/mx3fb.h>
47#include <mach/mxc_nand.h> 52#include <mach/mxc_nand.h>
48#include <mach/mmc.h>
49#ifdef CONFIG_I2C_IMX
50#include <mach/i2c.h>
51#endif
52 53
53#include "devices.h" 54#include "devices.h"
55#include "pcm037.h"
56
57static enum pcm037_board_variant pcm037_instance = PCM037_PCM970;
58
59static int __init pcm037_variant_setup(char *str)
60{
61 if (!strcmp("eet", str))
62 pcm037_instance = PCM037_EET;
63 else if (strcmp("pcm970", str))
64 pr_warning("Unknown pcm037 baseboard variant %s\n", str);
65
66 return 1;
67}
68
69/* Supported values: "pcm970" (default) and "eet" */
70__setup("pcm037_variant=", pcm037_variant_setup);
71
72enum pcm037_board_variant pcm037_variant(void)
73{
74 return pcm037_instance;
75}
76
77/* UART1 with RTS/CTS handshake signals */
78static unsigned int pcm037_uart1_handshake_pins[] = {
79 MX31_PIN_CTS1__CTS1,
80 MX31_PIN_RTS1__RTS1,
81 MX31_PIN_TXD1__TXD1,
82 MX31_PIN_RXD1__RXD1,
83};
84
85/* UART1 without RTS/CTS handshake signals */
86static unsigned int pcm037_uart1_pins[] = {
87 MX31_PIN_TXD1__TXD1,
88 MX31_PIN_RXD1__RXD1,
89};
54 90
55static unsigned int pcm037_pins[] = { 91static unsigned int pcm037_pins[] = {
56 /* I2C */ 92 /* I2C */
57 MX31_PIN_CSPI2_MOSI__SCL, 93 MX31_PIN_CSPI2_MOSI__SCL,
58 MX31_PIN_CSPI2_MISO__SDA, 94 MX31_PIN_CSPI2_MISO__SDA,
95 MX31_PIN_CSPI2_SS2__I2C3_SDA,
96 MX31_PIN_CSPI2_SCLK__I2C3_SCL,
59 /* SDHC1 */ 97 /* SDHC1 */
60 MX31_PIN_SD1_DATA3__SD1_DATA3, 98 MX31_PIN_SD1_DATA3__SD1_DATA3,
61 MX31_PIN_SD1_DATA2__SD1_DATA2, 99 MX31_PIN_SD1_DATA2__SD1_DATA2,
@@ -73,11 +111,6 @@ static unsigned int pcm037_pins[] = {
73 MX31_PIN_CSPI1_SS0__SS0, 111 MX31_PIN_CSPI1_SS0__SS0,
74 MX31_PIN_CSPI1_SS1__SS1, 112 MX31_PIN_CSPI1_SS1__SS1,
75 MX31_PIN_CSPI1_SS2__SS2, 113 MX31_PIN_CSPI1_SS2__SS2,
76 /* UART1 */
77 MX31_PIN_CTS1__CTS1,
78 MX31_PIN_RTS1__RTS1,
79 MX31_PIN_TXD1__TXD1,
80 MX31_PIN_RXD1__RXD1,
81 /* UART2 */ 114 /* UART2 */
82 MX31_PIN_TXD2__TXD2, 115 MX31_PIN_TXD2__TXD2,
83 MX31_PIN_RXD2__RXD2, 116 MX31_PIN_RXD2__RXD2,
@@ -120,6 +153,22 @@ static unsigned int pcm037_pins[] = {
120 MX31_PIN_D3_SPL__D3_SPL, 153 MX31_PIN_D3_SPL__D3_SPL,
121 MX31_PIN_D3_CLS__D3_CLS, 154 MX31_PIN_D3_CLS__D3_CLS,
122 MX31_PIN_LCS0__GPI03_23, 155 MX31_PIN_LCS0__GPI03_23,
156 /* CSI */
157 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_GPIO),
158 MX31_PIN_CSI_D6__CSI_D6,
159 MX31_PIN_CSI_D7__CSI_D7,
160 MX31_PIN_CSI_D8__CSI_D8,
161 MX31_PIN_CSI_D9__CSI_D9,
162 MX31_PIN_CSI_D10__CSI_D10,
163 MX31_PIN_CSI_D11__CSI_D11,
164 MX31_PIN_CSI_D12__CSI_D12,
165 MX31_PIN_CSI_D13__CSI_D13,
166 MX31_PIN_CSI_D14__CSI_D14,
167 MX31_PIN_CSI_D15__CSI_D15,
168 MX31_PIN_CSI_HSYNC__CSI_HSYNC,
169 MX31_PIN_CSI_MCLK__CSI_MCLK,
170 MX31_PIN_CSI_PIXCLK__CSI_PIXCLK,
171 MX31_PIN_CSI_VSYNC__CSI_VSYNC,
123}; 172};
124 173
125static struct physmap_flash_data pcm037_flash_data = { 174static struct physmap_flash_data pcm037_flash_data = {
@@ -250,19 +299,43 @@ static struct mxc_nand_platform_data pcm037_nand_board_info = {
250 .hw_ecc = 1, 299 .hw_ecc = 1,
251}; 300};
252 301
253#ifdef CONFIG_I2C_IMX
254static struct imxi2c_platform_data pcm037_i2c_1_data = { 302static struct imxi2c_platform_data pcm037_i2c_1_data = {
255 .bitrate = 100000, 303 .bitrate = 100000,
256}; 304};
257 305
306static struct imxi2c_platform_data pcm037_i2c_2_data = {
307 .bitrate = 20000,
308};
309
258static struct at24_platform_data board_eeprom = { 310static struct at24_platform_data board_eeprom = {
259 .byte_len = 4096, 311 .byte_len = 4096,
260 .page_size = 32, 312 .page_size = 32,
261 .flags = AT24_FLAG_ADDR16, 313 .flags = AT24_FLAG_ADDR16,
262}; 314};
263 315
316static int pcm037_camera_power(struct device *dev, int on)
317{
318 /* disable or enable the camera in X7 or X8 PCM970 connector */
319 gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), !on);
320 return 0;
321}
322
323static struct i2c_board_info pcm037_i2c_2_devices[] = {
324 {
325 I2C_BOARD_INFO("mt9t031", 0x5d),
326 },
327};
328
329static struct soc_camera_link iclink = {
330 .bus_id = 0, /* Must match with the camera ID */
331 .power = pcm037_camera_power,
332 .board_info = &pcm037_i2c_2_devices[0],
333 .i2c_adapter_id = 2,
334 .module_name = "mt9t031",
335};
336
264static struct i2c_board_info pcm037_i2c_devices[] = { 337static struct i2c_board_info pcm037_i2c_devices[] = {
265 { 338 {
266 I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ 339 I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */
267 .platform_data = &board_eeprom, 340 .platform_data = &board_eeprom,
268 }, { 341 }, {
@@ -270,7 +343,14 @@ static struct i2c_board_info pcm037_i2c_devices[] = {
270 .type = "pcf8563", 343 .type = "pcf8563",
271 } 344 }
272}; 345};
273#endif 346
347static struct platform_device pcm037_camera = {
348 .name = "soc-camera-pdrv",
349 .id = 0,
350 .dev = {
351 .platform_data = &iclink,
352 },
353};
274 354
275/* Not connected by default */ 355/* Not connected by default */
276#ifdef PCM970_SDHC_RW_SWITCH 356#ifdef PCM970_SDHC_RW_SWITCH
@@ -334,9 +414,41 @@ static struct imxmmc_platform_data sdhc_pdata = {
334 .exit = pcm970_sdhc1_exit, 414 .exit = pcm970_sdhc1_exit,
335}; 415};
336 416
417struct mx3_camera_pdata camera_pdata = {
418 .dma_dev = &mx3_ipu.dev,
419 .flags = MX3_CAMERA_DATAWIDTH_8 | MX3_CAMERA_DATAWIDTH_10,
420 .mclk_10khz = 2000,
421};
422
423static int __init pcm037_camera_alloc_dma(const size_t buf_size)
424{
425 dma_addr_t dma_handle;
426 void *buf;
427 int dma;
428
429 if (buf_size < 2 * 1024 * 1024)
430 return -EINVAL;
431
432 buf = dma_alloc_coherent(NULL, buf_size, &dma_handle, GFP_KERNEL);
433 if (!buf) {
434 pr_err("%s: cannot allocate camera buffer-memory\n", __func__);
435 return -ENOMEM;
436 }
437
438 memset(buf, 0, buf_size);
439
440 dma = dma_declare_coherent_memory(&mx3_camera.dev,
441 dma_handle, dma_handle, buf_size,
442 DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
443
444 /* The way we call dma_declare_coherent_memory only a malloc can fail */
445 return dma & DMA_MEMORY_MAP ? 0 : -ENOMEM;
446}
447
337static struct platform_device *devices[] __initdata = { 448static struct platform_device *devices[] __initdata = {
338 &pcm037_flash, 449 &pcm037_flash,
339 &pcm037_sram_device, 450 &pcm037_sram_device,
451 &pcm037_camera,
340}; 452};
341 453
342static struct ipu_platform_data mx3_ipu_data = { 454static struct ipu_platform_data mx3_ipu_data = {
@@ -377,6 +489,22 @@ static const struct fb_videomode fb_modedb[] = {
377 .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, 489 .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH,
378 .vmode = FB_VMODE_NONINTERLACED, 490 .vmode = FB_VMODE_NONINTERLACED,
379 .flag = 0, 491 .flag = 0,
492 }, {
493 /* 240x320 @ 60 Hz */
494 .name = "CMEL-OLED",
495 .refresh = 60,
496 .xres = 240,
497 .yres = 320,
498 .pixclock = 185925,
499 .left_margin = 9,
500 .right_margin = 16,
501 .upper_margin = 7,
502 .lower_margin = 9,
503 .hsync_len = 1,
504 .vsync_len = 1,
505 .sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT,
506 .vmode = FB_VMODE_NONINTERLACED,
507 .flag = 0,
380 }, 508 },
381}; 509};
382 510
@@ -397,6 +525,14 @@ static void __init mxc_board_init(void)
397 mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), 525 mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins),
398 "pcm037"); 526 "pcm037");
399 527
528 if (pcm037_variant() == PCM037_EET)
529 mxc_iomux_setup_multiple_pins(pcm037_uart1_pins,
530 ARRAY_SIZE(pcm037_uart1_pins), "pcm037_uart1");
531 else
532 mxc_iomux_setup_multiple_pins(pcm037_uart1_handshake_pins,
533 ARRAY_SIZE(pcm037_uart1_handshake_pins),
534 "pcm037_uart1");
535
400 platform_add_devices(devices, ARRAY_SIZE(devices)); 536 platform_add_devices(devices, ARRAY_SIZE(devices));
401 537
402 mxc_register_device(&mxc_uart_device0, &uart_pdata); 538 mxc_register_device(&mxc_uart_device0, &uart_pdata);
@@ -415,18 +551,30 @@ static void __init mxc_board_init(void)
415 } 551 }
416 552
417 553
418#ifdef CONFIG_I2C_IMX 554 /* I2C adapters and devices */
419 i2c_register_board_info(1, pcm037_i2c_devices, 555 i2c_register_board_info(1, pcm037_i2c_devices,
420 ARRAY_SIZE(pcm037_i2c_devices)); 556 ARRAY_SIZE(pcm037_i2c_devices));
421 557
422 mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); 558 mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data);
423#endif 559 mxc_register_device(&mxc_i2c_device2, &pcm037_i2c_2_data);
560
424 mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); 561 mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info);
425 mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); 562 mxc_register_device(&mxcsdhc_device0, &sdhc_pdata);
426 mxc_register_device(&mx3_ipu, &mx3_ipu_data); 563 mxc_register_device(&mx3_ipu, &mx3_ipu_data);
427 mxc_register_device(&mx3_fb, &mx3fb_pdata); 564 mxc_register_device(&mx3_fb, &mx3fb_pdata);
428 if (!gpio_usbotg_hs_activate()) 565 if (!gpio_usbotg_hs_activate())
429 mxc_register_device(&mxc_otg_udc_device, &usb_pdata); 566 mxc_register_device(&mxc_otg_udc_device, &usb_pdata);
567
568 /* CSI */
569 /* Camera power: default - off */
570 ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), "mt9t031-power");
571 if (!ret)
572 gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), 1);
573 else
574 iclink.power = NULL;
575
576 if (!pcm037_camera_alloc_dma(4 * 1024 * 1024))
577 mxc_register_device(&mx3_camera, &camera_pdata);
430} 578}
431 579
432static void __init pcm037_timer_init(void) 580static void __init pcm037_timer_init(void)
@@ -448,4 +596,3 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037")
448 .init_machine = mxc_board_init, 596 .init_machine = mxc_board_init,
449 .timer = &pcm037_timer, 597 .timer = &pcm037_timer,
450MACHINE_END 598MACHINE_END
451
diff --git a/arch/arm/mach-mx3/pcm037.h b/arch/arm/mach-mx3/pcm037.h
new file mode 100644
index 000000000000..d6929721a5fd
--- /dev/null
+++ b/arch/arm/mach-mx3/pcm037.h
@@ -0,0 +1,11 @@
1#ifndef __PCM037_H__
2#define __PCM037_H__
3
4enum pcm037_board_variant {
5 PCM037_PCM970,
6 PCM037_EET,
7};
8
9extern enum pcm037_board_variant pcm037_variant(void);
10
11#endif
diff --git a/arch/arm/mach-mx3/pcm037_eet.c b/arch/arm/mach-mx3/pcm037_eet.c
new file mode 100644
index 000000000000..8d386000fc40
--- /dev/null
+++ b/arch/arm/mach-mx3/pcm037_eet.c
@@ -0,0 +1,195 @@
1/*
2 * Copyright (C) 2009
3 * Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 */
9#include <linux/gpio.h>
10#include <linux/gpio_keys.h>
11#include <linux/input.h>
12#include <linux/platform_device.h>
13#include <linux/spi/spi.h>
14
15#include <mach/common.h>
16#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
17#include <mach/spi.h>
18#endif
19#include <mach/iomux-mx3.h>
20
21#include <asm/mach-types.h>
22
23#include "pcm037.h"
24#include "devices.h"
25
26static unsigned int pcm037_eet_pins[] = {
27 /* Reserve and hardwire GPIO 57 high - S6E63D6 chipselect */
28 IOMUX_MODE(MX31_PIN_KEY_COL7, IOMUX_CONFIG_GPIO),
29 /* GPIO keys */
30 IOMUX_MODE(MX31_PIN_GPIO1_0, IOMUX_CONFIG_GPIO), /* 0 */
31 IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO), /* 1 */
32 IOMUX_MODE(MX31_PIN_GPIO1_2, IOMUX_CONFIG_GPIO), /* 2 */
33 IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO), /* 3 */
34 IOMUX_MODE(MX31_PIN_SVEN0, IOMUX_CONFIG_GPIO), /* 32 */
35 IOMUX_MODE(MX31_PIN_STX0, IOMUX_CONFIG_GPIO), /* 33 */
36 IOMUX_MODE(MX31_PIN_SRX0, IOMUX_CONFIG_GPIO), /* 34 */
37 IOMUX_MODE(MX31_PIN_SIMPD0, IOMUX_CONFIG_GPIO), /* 35 */
38 IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_GPIO), /* 38 */
39 IOMUX_MODE(MX31_PIN_CTS1, IOMUX_CONFIG_GPIO), /* 39 */
40 IOMUX_MODE(MX31_PIN_KEY_ROW4, IOMUX_CONFIG_GPIO), /* 50 */
41 IOMUX_MODE(MX31_PIN_KEY_ROW5, IOMUX_CONFIG_GPIO), /* 51 */
42 IOMUX_MODE(MX31_PIN_KEY_ROW6, IOMUX_CONFIG_GPIO), /* 52 */
43 IOMUX_MODE(MX31_PIN_KEY_ROW7, IOMUX_CONFIG_GPIO), /* 53 */
44
45 /* LEDs */
46 IOMUX_MODE(MX31_PIN_DTR_DTE1, IOMUX_CONFIG_GPIO), /* 44 */
47 IOMUX_MODE(MX31_PIN_DSR_DTE1, IOMUX_CONFIG_GPIO), /* 45 */
48 IOMUX_MODE(MX31_PIN_KEY_COL5, IOMUX_CONFIG_GPIO), /* 55 */
49 IOMUX_MODE(MX31_PIN_KEY_COL6, IOMUX_CONFIG_GPIO), /* 56 */
50};
51
52/* SPI */
53static struct spi_board_info pcm037_spi_dev[] = {
54 {
55 .modalias = "dac124s085",
56 .max_speed_hz = 400000,
57 .bus_num = 0,
58 .chip_select = 0, /* Index in pcm037_spi1_cs[] */
59 .mode = SPI_CPHA,
60 },
61};
62
63/* Platform Data for MXC CSPI */
64#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
65static int pcm037_spi1_cs[] = {MXC_SPI_CS(1), IOMUX_TO_GPIO(MX31_PIN_KEY_COL7)};
66
67struct spi_imx_master pcm037_spi1_master = {
68 .chipselect = pcm037_spi1_cs,
69 .num_chipselect = ARRAY_SIZE(pcm037_spi1_cs),
70};
71#endif
72
73/* GPIO-keys input device */
74static struct gpio_keys_button pcm037_gpio_keys[] = {
75 {
76 .type = EV_KEY,
77 .code = KEY_L,
78 .gpio = 0,
79 .desc = "Wheel Manual",
80 .wakeup = 0,
81 }, {
82 .type = EV_KEY,
83 .code = KEY_A,
84 .gpio = 1,
85 .desc = "Wheel AF",
86 .wakeup = 0,
87 }, {
88 .type = EV_KEY,
89 .code = KEY_V,
90 .gpio = 2,
91 .desc = "Wheel View",
92 .wakeup = 0,
93 }, {
94 .type = EV_KEY,
95 .code = KEY_M,
96 .gpio = 3,
97 .desc = "Wheel Menu",
98 .wakeup = 0,
99 }, {
100 .type = EV_KEY,
101 .code = KEY_UP,
102 .gpio = 32,
103 .desc = "Nav Pad Up",
104 .wakeup = 0,
105 }, {
106 .type = EV_KEY,
107 .code = KEY_RIGHT,
108 .gpio = 33,
109 .desc = "Nav Pad Right",
110 .wakeup = 0,
111 }, {
112 .type = EV_KEY,
113 .code = KEY_DOWN,
114 .gpio = 34,
115 .desc = "Nav Pad Down",
116 .wakeup = 0,
117 }, {
118 .type = EV_KEY,
119 .code = KEY_LEFT,
120 .gpio = 35,
121 .desc = "Nav Pad Left",
122 .wakeup = 0,
123 }, {
124 .type = EV_KEY,
125 .code = KEY_ENTER,
126 .gpio = 38,
127 .desc = "Nav Pad Ok",
128 .wakeup = 0,
129 }, {
130 .type = EV_KEY,
131 .code = KEY_O,
132 .gpio = 39,
133 .desc = "Wheel Off",
134 .wakeup = 0,
135 }, {
136 .type = EV_KEY,
137 .code = BTN_FORWARD,
138 .gpio = 50,
139 .desc = "Focus Forward",
140 .wakeup = 0,
141 }, {
142 .type = EV_KEY,
143 .code = BTN_BACK,
144 .gpio = 51,
145 .desc = "Focus Backward",
146 .wakeup = 0,
147 }, {
148 .type = EV_KEY,
149 .code = BTN_MIDDLE,
150 .gpio = 52,
151 .desc = "Release Half",
152 .wakeup = 0,
153 }, {
154 .type = EV_KEY,
155 .code = BTN_EXTRA,
156 .gpio = 53,
157 .desc = "Release Full",
158 .wakeup = 0,
159 },
160};
161
162static struct gpio_keys_platform_data pcm037_gpio_keys_platform_data = {
163 .buttons = pcm037_gpio_keys,
164 .nbuttons = ARRAY_SIZE(pcm037_gpio_keys),
165 .rep = 0, /* No auto-repeat */
166};
167
168static struct platform_device pcm037_gpio_keys_device = {
169 .name = "gpio-keys",
170 .id = -1,
171 .dev = {
172 .platform_data = &pcm037_gpio_keys_platform_data,
173 },
174};
175
176static int eet_init_devices(void)
177{
178 if (!machine_is_pcm037() || pcm037_variant() != PCM037_EET)
179 return 0;
180
181 mxc_iomux_setup_multiple_pins(pcm037_eet_pins,
182 ARRAY_SIZE(pcm037_eet_pins), "pcm037_eet");
183
184 /* SPI */
185 spi_register_board_info(pcm037_spi_dev, ARRAY_SIZE(pcm037_spi_dev));
186#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
187 mxc_register_device(&mxc_spi_device0, &pcm037_spi1_master);
188#endif
189
190 platform_device_register(&pcm037_gpio_keys_device);
191
192 return 0;
193}
194
195late_initcall(eet_init_devices);
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c
index e70fc7c66bbb..ed2a48a9ce74 100644
--- a/arch/arm/mach-omap1/board-nokia770.c
+++ b/arch/arm/mach-omap1/board-nokia770.c
@@ -36,7 +36,6 @@
36#include <mach/hwa742.h> 36#include <mach/hwa742.h>
37#include <mach/lcd_mipid.h> 37#include <mach/lcd_mipid.h>
38#include <mach/mmc.h> 38#include <mach/mmc.h>
39#include <mach/usb.h>
40#include <mach/clock.h> 39#include <mach/clock.h>
41 40
42#define ADS7846_PENDOWN_GPIO 15 41#define ADS7846_PENDOWN_GPIO 15
@@ -205,9 +204,11 @@ static int nokia770_mmc_get_cover_state(struct device *dev, int slot)
205static struct omap_mmc_platform_data nokia770_mmc2_data = { 204static struct omap_mmc_platform_data nokia770_mmc2_data = {
206 .nr_slots = 1, 205 .nr_slots = 1,
207 .dma_mask = 0xffffffff, 206 .dma_mask = 0xffffffff,
207 .max_freq = 12000000,
208 .slots[0] = { 208 .slots[0] = {
209 .set_power = nokia770_mmc_set_power, 209 .set_power = nokia770_mmc_set_power,
210 .get_cover_state = nokia770_mmc_get_cover_state, 210 .get_cover_state = nokia770_mmc_get_cover_state,
211 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
211 .name = "mmcblk", 212 .name = "mmcblk",
212 }, 213 },
213}; 214};
diff --git a/arch/arm/mach-omap1/mailbox.c b/arch/arm/mach-omap1/mailbox.c
index 0af4d6c85b47..6810b4aeb02c 100644
--- a/arch/arm/mach-omap1/mailbox.c
+++ b/arch/arm/mach-omap1/mailbox.c
@@ -203,5 +203,5 @@ module_exit(omap1_mbox_exit);
203 203
204MODULE_LICENSE("GPL v2"); 204MODULE_LICENSE("GPL v2");
205MODULE_DESCRIPTION("omap mailbox: omap1 architecture specific functions"); 205MODULE_DESCRIPTION("omap mailbox: omap1 architecture specific functions");
206MODULE_AUTHOR("Hiroshi DOYU" <Hiroshi.DOYU@nokia.com>); 206MODULE_AUTHOR("Hiroshi DOYU <Hiroshi.DOYU@nokia.com>");
207MODULE_ALIAS("platform:omap1-mailbox"); 207MODULE_ALIAS("platform:omap1-mailbox");
diff --git a/arch/arm/mach-omap1/mcbsp.c b/arch/arm/mach-omap1/mcbsp.c
index a2d7814896be..505d98cfe508 100644
--- a/arch/arm/mach-omap1/mcbsp.c
+++ b/arch/arm/mach-omap1/mcbsp.c
@@ -19,7 +19,6 @@
19 19
20#include <mach/irqs.h> 20#include <mach/irqs.h>
21#include <mach/dma.h> 21#include <mach/dma.h>
22#include <mach/irqs.h>
23#include <mach/mux.h> 22#include <mach/mux.h>
24#include <mach/cpu.h> 23#include <mach/cpu.h>
25#include <mach/mcbsp.h> 24#include <mach/mcbsp.h>
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c
index 9c3fdcdf76c3..8ec2a132904d 100644
--- a/arch/arm/mach-omap2/board-2430sdp.c
+++ b/arch/arm/mach-omap2/board-2430sdp.c
@@ -141,7 +141,7 @@ static inline void board_smc91x_init(void)
141 141
142static void __init omap_2430sdp_init_irq(void) 142static void __init omap_2430sdp_init_irq(void)
143{ 143{
144 omap2_init_common_hw(NULL); 144 omap2_init_common_hw(NULL, NULL);
145 omap_init_irq(); 145 omap_init_irq();
146 omap_gpio_init(); 146 omap_gpio_init();
147} 147}
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 496a90e4ea7a..ac262cd74503 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -169,7 +169,7 @@ static struct platform_device *sdp3430_devices[] __initdata = {
169 169
170static void __init omap_3430sdp_init_irq(void) 170static void __init omap_3430sdp_init_irq(void)
171{ 171{
172 omap2_init_common_hw(hyb18m512160af6_sdrc_params); 172 omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL);
173 omap_init_irq(); 173 omap_init_irq();
174 omap_gpio_init(); 174 omap_gpio_init();
175} 175}
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 57e477bd89c6..b0c7402248f7 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -59,7 +59,7 @@ static void __init gic_init_irq(void)
59 59
60static void __init omap_4430sdp_init_irq(void) 60static void __init omap_4430sdp_init_irq(void)
61{ 61{
62 omap2_init_common_hw(NULL); 62 omap2_init_common_hw(NULL, NULL);
63#ifdef CONFIG_OMAP_32K_TIMER 63#ifdef CONFIG_OMAP_32K_TIMER
64 omap2_gp_clockevent_set_gptimer(1); 64 omap2_gp_clockevent_set_gptimer(1);
65#endif 65#endif
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c
index 06dfba888b0c..dcfc20d03894 100644
--- a/arch/arm/mach-omap2/board-apollon.c
+++ b/arch/arm/mach-omap2/board-apollon.c
@@ -250,7 +250,7 @@ out:
250 250
251static void __init omap_apollon_init_irq(void) 251static void __init omap_apollon_init_irq(void)
252{ 252{
253 omap2_init_common_hw(NULL); 253 omap2_init_common_hw(NULL, NULL);
254 omap_init_irq(); 254 omap_init_irq();
255 omap_gpio_init(); 255 omap_gpio_init();
256 apollon_init_smc91x(); 256 apollon_init_smc91x();
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index 3492162a65c3..fd00aa03690c 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -33,7 +33,7 @@
33 33
34static void __init omap_generic_init_irq(void) 34static void __init omap_generic_init_irq(void)
35{ 35{
36 omap2_init_common_hw(NULL); 36 omap2_init_common_hw(NULL, NULL);
37 omap_init_irq(); 37 omap_init_irq();
38} 38}
39 39
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c
index e7d017cdc438..7b1d61d5bb2c 100644
--- a/arch/arm/mach-omap2/board-h4.c
+++ b/arch/arm/mach-omap2/board-h4.c
@@ -270,7 +270,7 @@ static void __init h4_init_flash(void)
270 270
271static void __init omap_h4_init_irq(void) 271static void __init omap_h4_init_irq(void)
272{ 272{
273 omap2_init_common_hw(NULL); 273 omap2_init_common_hw(NULL, NULL);
274 omap_init_irq(); 274 omap_init_irq();
275 omap_gpio_init(); 275 omap_gpio_init();
276 h4_init_flash(); 276 h4_init_flash();
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index d8bc0a7dcb8d..ea383f88cb1b 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -270,7 +270,7 @@ static inline void __init ldp_init_smsc911x(void)
270 270
271static void __init omap_ldp_init_irq(void) 271static void __init omap_ldp_init_irq(void)
272{ 272{
273 omap2_init_common_hw(NULL); 273 omap2_init_common_hw(NULL, NULL);
274 omap_init_irq(); 274 omap_init_irq();
275 omap_gpio_init(); 275 omap_gpio_init();
276 ldp_init_smsc911x(); 276 ldp_init_smsc911x();
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 991ac9c38032..e00ba128cece 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -282,7 +282,8 @@ static int __init omap3_beagle_i2c_init(void)
282 282
283static void __init omap3_beagle_init_irq(void) 283static void __init omap3_beagle_init_irq(void)
284{ 284{
285 omap2_init_common_hw(mt46h32m32lf6_sdrc_params); 285 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
286 mt46h32m32lf6_sdrc_params);
286 omap_init_irq(); 287 omap_init_irq();
287#ifdef CONFIG_OMAP_32K_TIMER 288#ifdef CONFIG_OMAP_32K_TIMER
288 omap2_gp_clockevent_set_gptimer(12); 289 omap2_gp_clockevent_set_gptimer(12);
@@ -408,6 +409,10 @@ static void __init omap3_beagle_init(void)
408 409
409 usb_musb_init(); 410 usb_musb_init();
410 omap3beagle_flash_init(); 411 omap3beagle_flash_init();
412
413 /* Ensure SDRC pins are mux'd for self-refresh */
414 omap_cfg_reg(H16_34XX_SDRC_CKE0);
415 omap_cfg_reg(H17_34XX_SDRC_CKE1);
411} 416}
412 417
413static void __init omap3_beagle_map_io(void) 418static void __init omap3_beagle_map_io(void)
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index d3cc145814d0..c4b144647dc5 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -25,6 +25,7 @@
25#include <linux/spi/spi.h> 25#include <linux/spi/spi.h>
26#include <linux/spi/ads7846.h> 26#include <linux/spi/ads7846.h>
27#include <linux/i2c/twl4030.h> 27#include <linux/i2c/twl4030.h>
28#include <linux/usb/otg.h>
28 29
29#include <mach/hardware.h> 30#include <mach/hardware.h>
30#include <asm/mach-types.h> 31#include <asm/mach-types.h>
@@ -279,7 +280,7 @@ struct spi_board_info omap3evm_spi_board_info[] = {
279 280
280static void __init omap3_evm_init_irq(void) 281static void __init omap3_evm_init_irq(void)
281{ 282{
282 omap2_init_common_hw(mt46h32m32lf6_sdrc_params); 283 omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
283 omap_init_irq(); 284 omap_init_irq();
284 omap_gpio_init(); 285 omap_gpio_init();
285 omap3evm_init_smc911x(); 286 omap3evm_init_smc911x();
@@ -307,6 +308,10 @@ static void __init omap3_evm_init(void)
307 ARRAY_SIZE(omap3evm_spi_board_info)); 308 ARRAY_SIZE(omap3evm_spi_board_info));
308 309
309 omap_serial_init(); 310 omap_serial_init();
311#ifdef CONFIG_NOP_USB_XCEIV
312 /* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
313 usb_nop_xceiv_register();
314#endif
310 usb_musb_init(); 315 usb_musb_init();
311 ads7846_dev_init(); 316 ads7846_dev_init();
312} 317}
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index e32aa23ce962..864ee3d021f7 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -40,6 +40,7 @@
40#include <mach/mcspi.h> 40#include <mach/mcspi.h>
41#include <mach/usb.h> 41#include <mach/usb.h>
42#include <mach/keypad.h> 42#include <mach/keypad.h>
43#include <mach/mux.h>
43 44
44#include "sdram-micron-mt46h32m32lf-6.h" 45#include "sdram-micron-mt46h32m32lf-6.h"
45#include "mmc-twl4030.h" 46#include "mmc-twl4030.h"
@@ -310,7 +311,8 @@ static int __init omap3pandora_i2c_init(void)
310 311
311static void __init omap3pandora_init_irq(void) 312static void __init omap3pandora_init_irq(void)
312{ 313{
313 omap2_init_common_hw(mt46h32m32lf6_sdrc_params); 314 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
315 mt46h32m32lf6_sdrc_params);
314 omap_init_irq(); 316 omap_init_irq();
315 omap_gpio_init(); 317 omap_gpio_init();
316} 318}
@@ -397,6 +399,10 @@ static void __init omap3pandora_init(void)
397 omap3pandora_ads7846_init(); 399 omap3pandora_ads7846_init();
398 pandora_keys_gpio_init(); 400 pandora_keys_gpio_init();
399 usb_musb_init(); 401 usb_musb_init();
402
403 /* Ensure SDRC pins are mux'd for self-refresh */
404 omap_cfg_reg(H16_34XX_SDRC_CKE0);
405 omap_cfg_reg(H17_34XX_SDRC_CKE1);
400} 406}
401 407
402static void __init omap3pandora_map_io(void) 408static void __init omap3pandora_map_io(void)
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index dff5528fbfb5..6bce23004aa4 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -44,6 +44,7 @@
44#include <mach/gpmc.h> 44#include <mach/gpmc.h>
45#include <mach/hardware.h> 45#include <mach/hardware.h>
46#include <mach/nand.h> 46#include <mach/nand.h>
47#include <mach/mux.h>
47#include <mach/usb.h> 48#include <mach/usb.h>
48 49
49#include "sdram-micron-mt46h32m32lf-6.h" 50#include "sdram-micron-mt46h32m32lf-6.h"
@@ -51,6 +52,7 @@
51 52
52#define OVERO_GPIO_BT_XGATE 15 53#define OVERO_GPIO_BT_XGATE 15
53#define OVERO_GPIO_W2W_NRESET 16 54#define OVERO_GPIO_W2W_NRESET 16
55#define OVERO_GPIO_PENDOWN 114
54#define OVERO_GPIO_BT_NRESET 164 56#define OVERO_GPIO_BT_NRESET 164
55#define OVERO_GPIO_USBH_CPEN 168 57#define OVERO_GPIO_USBH_CPEN 168
56#define OVERO_GPIO_USBH_NRESET 183 58#define OVERO_GPIO_USBH_NRESET 183
@@ -146,7 +148,7 @@ static struct platform_device overo_smsc911x_device = {
146 .name = "smsc911x", 148 .name = "smsc911x",
147 .id = -1, 149 .id = -1,
148 .num_resources = ARRAY_SIZE(overo_smsc911x_resources), 150 .num_resources = ARRAY_SIZE(overo_smsc911x_resources),
149 .resource = &overo_smsc911x_resources, 151 .resource = overo_smsc911x_resources,
150 .dev = { 152 .dev = {
151 .platform_data = &overo_smsc911x_config, 153 .platform_data = &overo_smsc911x_config,
152 }, 154 },
@@ -360,7 +362,8 @@ static int __init overo_i2c_init(void)
360 362
361static void __init overo_init_irq(void) 363static void __init overo_init_irq(void)
362{ 364{
363 omap2_init_common_hw(mt46h32m32lf6_sdrc_params); 365 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
366 mt46h32m32lf6_sdrc_params);
364 omap_init_irq(); 367 omap_init_irq();
365 omap_gpio_init(); 368 omap_gpio_init();
366} 369}
@@ -395,6 +398,10 @@ static void __init overo_init(void)
395 overo_ads7846_init(); 398 overo_ads7846_init();
396 overo_init_smsc911x(); 399 overo_init_smsc911x();
397 400
401 /* Ensure SDRC pins are mux'd for self-refresh */
402 omap_cfg_reg(H16_34XX_SDRC_CKE0);
403 omap_cfg_reg(H17_34XX_SDRC_CKE1);
404
398 if ((gpio_request(OVERO_GPIO_W2W_NRESET, 405 if ((gpio_request(OVERO_GPIO_W2W_NRESET,
399 "OVERO_GPIO_W2W_NRESET") == 0) && 406 "OVERO_GPIO_W2W_NRESET") == 0) &&
400 (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) == 0)) { 407 (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) == 0)) {
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index da93b86234ed..56d931a425f7 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -278,6 +278,10 @@ static struct twl4030_gpio_platform_data rx51_gpio_data = {
278 .setup = rx51_twlgpio_setup, 278 .setup = rx51_twlgpio_setup,
279}; 279};
280 280
281static struct twl4030_usb_data rx51_usb_data = {
282 .usb_mode = T2_USB_MODE_ULPI,
283};
284
281static struct twl4030_platform_data rx51_twldata = { 285static struct twl4030_platform_data rx51_twldata = {
282 .irq_base = TWL4030_IRQ_BASE, 286 .irq_base = TWL4030_IRQ_BASE,
283 .irq_end = TWL4030_IRQ_END, 287 .irq_end = TWL4030_IRQ_END,
@@ -286,6 +290,7 @@ static struct twl4030_platform_data rx51_twldata = {
286 .gpio = &rx51_gpio_data, 290 .gpio = &rx51_gpio_data,
287 .keypad = &rx51_kp_data, 291 .keypad = &rx51_kp_data,
288 .madc = &rx51_madc_data, 292 .madc = &rx51_madc_data,
293 .usb = &rx51_usb_data,
289 294
290 .vaux1 = &rx51_vaux1, 295 .vaux1 = &rx51_vaux1,
291 .vaux2 = &rx51_vaux2, 296 .vaux2 = &rx51_vaux2,
@@ -362,6 +367,7 @@ static struct omap_onenand_platform_data board_onenand_data = {
362 .gpio_irq = 65, 367 .gpio_irq = 65,
363 .parts = onenand_partitions, 368 .parts = onenand_partitions,
364 .nr_parts = ARRAY_SIZE(onenand_partitions), 369 .nr_parts = ARRAY_SIZE(onenand_partitions),
370 .flags = ONENAND_SYNC_READWRITE,
365}; 371};
366 372
367static void __init board_onenand_init(void) 373static void __init board_onenand_init(void)
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 374ff63c3eb2..1c9e07fe8266 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -61,7 +61,7 @@ static struct omap_board_config_kernel rx51_config[] = {
61 61
62static void __init rx51_init_irq(void) 62static void __init rx51_init_irq(void)
63{ 63{
64 omap2_init_common_hw(NULL); 64 omap2_init_common_hw(NULL, NULL);
65 omap_init_irq(); 65 omap_init_irq();
66 omap_gpio_init(); 66 omap_gpio_init();
67} 67}
@@ -75,6 +75,10 @@ static void __init rx51_init(void)
75 omap_serial_init(); 75 omap_serial_init();
76 usb_musb_init(); 76 usb_musb_init();
77 rx51_peripherals_init(); 77 rx51_peripherals_init();
78
79 /* Ensure SDRC pins are mux'd for self-refresh */
80 omap_cfg_reg(H16_34XX_SDRC_CKE0);
81 omap_cfg_reg(H17_34XX_SDRC_CKE1);
78} 82}
79 83
80static void __init rx51_map_io(void) 84static void __init rx51_map_io(void)
diff --git a/arch/arm/mach-omap2/board-zoom2.c b/arch/arm/mach-omap2/board-zoom2.c
index bcc0f7632dea..427b7b8b1237 100644
--- a/arch/arm/mach-omap2/board-zoom2.c
+++ b/arch/arm/mach-omap2/board-zoom2.c
@@ -25,7 +25,7 @@
25 25
26static void __init omap_zoom2_init_irq(void) 26static void __init omap_zoom2_init_irq(void)
27{ 27{
28 omap2_init_common_hw(NULL); 28 omap2_init_common_hw(NULL, NULL);
29 omap_init_irq(); 29 omap_init_irq();
30 omap_gpio_init(); 30 omap_gpio_init();
31} 31}
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index ba528f85749c..456e2ad5f621 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -27,6 +27,7 @@
27#include <mach/clock.h> 27#include <mach/clock.h>
28#include <mach/clockdomain.h> 28#include <mach/clockdomain.h>
29#include <mach/cpu.h> 29#include <mach/cpu.h>
30#include <mach/prcm.h>
30#include <asm/div64.h> 31#include <asm/div64.h>
31 32
32#include <mach/sdrc.h> 33#include <mach/sdrc.h>
@@ -38,8 +39,6 @@
38#include "cm-regbits-24xx.h" 39#include "cm-regbits-24xx.h"
39#include "cm-regbits-34xx.h" 40#include "cm-regbits-34xx.h"
40 41
41#define MAX_CLOCK_ENABLE_WAIT 100000
42
43/* DPLL rate rounding: minimum DPLL multiplier, divider values */ 42/* DPLL rate rounding: minimum DPLL multiplier, divider values */
44#define DPLL_MIN_MULTIPLIER 1 43#define DPLL_MIN_MULTIPLIER 1
45#define DPLL_MIN_DIVIDER 1 44#define DPLL_MIN_DIVIDER 1
@@ -274,83 +273,97 @@ unsigned long omap2_fixed_divisor_recalc(struct clk *clk)
274} 273}
275 274
276/** 275/**
277 * omap2_wait_clock_ready - wait for clock to enable 276 * omap2_clk_dflt_find_companion - find companion clock to @clk
278 * @reg: physical address of clock IDLEST register 277 * @clk: struct clk * to find the companion clock of
279 * @mask: value to mask against to determine if the clock is active 278 * @other_reg: void __iomem ** to return the companion clock CM_*CLKEN va in
280 * @name: name of the clock (for printk) 279 * @other_bit: u8 ** to return the companion clock bit shift in
280 *
281 * Note: We don't need special code here for INVERT_ENABLE for the
282 * time being since INVERT_ENABLE only applies to clocks enabled by
283 * CM_CLKEN_PLL
281 * 284 *
282 * Returns 1 if the clock enabled in time, or 0 if it failed to enable 285 * Convert CM_ICLKEN* <-> CM_FCLKEN*. This conversion assumes it's
283 * in roughly MAX_CLOCK_ENABLE_WAIT microseconds. 286 * just a matter of XORing the bits.
287 *
288 * Some clocks don't have companion clocks. For example, modules with
289 * only an interface clock (such as MAILBOXES) don't have a companion
290 * clock. Right now, this code relies on the hardware exporting a bit
291 * in the correct companion register that indicates that the
292 * nonexistent 'companion clock' is active. Future patches will
293 * associate this type of code with per-module data structures to
294 * avoid this issue, and remove the casts. No return value.
284 */ 295 */
285int omap2_wait_clock_ready(void __iomem *reg, u32 mask, const char *name) 296void omap2_clk_dflt_find_companion(struct clk *clk, void __iomem **other_reg,
297 u8 *other_bit)
286{ 298{
287 int i = 0; 299 u32 r;
288 int ena = 0;
289 300
290 /* 301 /*
291 * 24xx uses 0 to indicate not ready, and 1 to indicate ready. 302 * Convert CM_ICLKEN* <-> CM_FCLKEN*. This conversion assumes
292 * 34xx reverses this, just to keep us on our toes 303 * it's just a matter of XORing the bits.
293 */ 304 */
294 if (cpu_mask & (RATE_IN_242X | RATE_IN_243X)) 305 r = ((__force u32)clk->enable_reg ^ (CM_FCLKEN ^ CM_ICLKEN));
295 ena = mask;
296 else if (cpu_mask & RATE_IN_343X)
297 ena = 0;
298
299 /* Wait for lock */
300 while (((__raw_readl(reg) & mask) != ena) &&
301 (i++ < MAX_CLOCK_ENABLE_WAIT)) {
302 udelay(1);
303 }
304
305 if (i < MAX_CLOCK_ENABLE_WAIT)
306 pr_debug("Clock %s stable after %d loops\n", name, i);
307 else
308 printk(KERN_ERR "Clock %s didn't enable in %d tries\n",
309 name, MAX_CLOCK_ENABLE_WAIT);
310
311
312 return (i < MAX_CLOCK_ENABLE_WAIT) ? 1 : 0;
313};
314 306
307 *other_reg = (__force void __iomem *)r;
308 *other_bit = clk->enable_bit;
309}
315 310
316/* 311/**
317 * Note: We don't need special code here for INVERT_ENABLE 312 * omap2_clk_dflt_find_idlest - find CM_IDLEST reg va, bit shift for @clk
318 * for the time being since INVERT_ENABLE only applies to clocks enabled by 313 * @clk: struct clk * to find IDLEST info for
319 * CM_CLKEN_PLL 314 * @idlest_reg: void __iomem ** to return the CM_IDLEST va in
315 * @idlest_bit: u8 ** to return the CM_IDLEST bit shift in
316 *
317 * Return the CM_IDLEST register address and bit shift corresponding
318 * to the module that "owns" this clock. This default code assumes
319 * that the CM_IDLEST bit shift is the CM_*CLKEN bit shift, and that
320 * the IDLEST register address ID corresponds to the CM_*CLKEN
321 * register address ID (e.g., that CM_FCLKEN2 corresponds to
322 * CM_IDLEST2). This is not true for all modules. No return value.
320 */ 323 */
321static void omap2_clk_wait_ready(struct clk *clk) 324void omap2_clk_dflt_find_idlest(struct clk *clk, void __iomem **idlest_reg,
325 u8 *idlest_bit)
322{ 326{
323 void __iomem *reg, *other_reg, *st_reg; 327 u32 r;
324 u32 bit;
325 328
326 /* 329 r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
327 * REVISIT: This code is pretty ugly. It would be nice to generalize 330 *idlest_reg = (__force void __iomem *)r;
328 * it and pull it into struct clk itself somehow. 331 *idlest_bit = clk->enable_bit;
329 */ 332}
330 reg = clk->enable_reg;
331 333
332 /* 334/**
333 * Convert CM_ICLKEN* <-> CM_FCLKEN*. This conversion assumes 335 * omap2_module_wait_ready - wait for an OMAP module to leave IDLE
334 * it's just a matter of XORing the bits. 336 * @clk: struct clk * belonging to the module
335 */ 337 *
336 other_reg = (void __iomem *)((u32)reg ^ (CM_FCLKEN ^ CM_ICLKEN)); 338 * If the necessary clocks for the OMAP hardware IP block that
339 * corresponds to clock @clk are enabled, then wait for the module to
340 * indicate readiness (i.e., to leave IDLE). This code does not
341 * belong in the clock code and will be moved in the medium term to
342 * module-dependent code. No return value.
343 */
344static void omap2_module_wait_ready(struct clk *clk)
345{
346 void __iomem *companion_reg, *idlest_reg;
347 u8 other_bit, idlest_bit;
348
349 /* Not all modules have multiple clocks that their IDLEST depends on */
350 if (clk->ops->find_companion) {
351 clk->ops->find_companion(clk, &companion_reg, &other_bit);
352 if (!(__raw_readl(companion_reg) & (1 << other_bit)))
353 return;
354 }
337 355
338 /* Check if both functional and interface clocks 356 clk->ops->find_idlest(clk, &idlest_reg, &idlest_bit);
339 * are running. */
340 bit = 1 << clk->enable_bit;
341 if (!(__raw_readl(other_reg) & bit))
342 return;
343 st_reg = (void __iomem *)(((u32)other_reg & ~0xf0) | 0x20); /* CM_IDLEST* */
344 357
345 omap2_wait_clock_ready(st_reg, bit, clk->name); 358 omap2_cm_wait_idlest(idlest_reg, (1 << idlest_bit), clk->name);
346} 359}
347 360
348static int omap2_dflt_clk_enable(struct clk *clk) 361int omap2_dflt_clk_enable(struct clk *clk)
349{ 362{
350 u32 v; 363 u32 v;
351 364
352 if (unlikely(clk->enable_reg == NULL)) { 365 if (unlikely(clk->enable_reg == NULL)) {
353 printk(KERN_ERR "clock.c: Enable for %s without enable code\n", 366 pr_err("clock.c: Enable for %s without enable code\n",
354 clk->name); 367 clk->name);
355 return 0; /* REVISIT: -EINVAL */ 368 return 0; /* REVISIT: -EINVAL */
356 } 369 }
@@ -363,26 +376,13 @@ static int omap2_dflt_clk_enable(struct clk *clk)
363 __raw_writel(v, clk->enable_reg); 376 __raw_writel(v, clk->enable_reg);
364 v = __raw_readl(clk->enable_reg); /* OCP barrier */ 377 v = __raw_readl(clk->enable_reg); /* OCP barrier */
365 378
366 return 0; 379 if (clk->ops->find_idlest)
367} 380 omap2_module_wait_ready(clk);
368 381
369static int omap2_dflt_clk_enable_wait(struct clk *clk) 382 return 0;
370{
371 int ret;
372
373 if (!clk->enable_reg) {
374 printk(KERN_ERR "clock.c: Enable for %s without enable code\n",
375 clk->name);
376 return 0; /* REVISIT: -EINVAL */
377 }
378
379 ret = omap2_dflt_clk_enable(clk);
380 if (ret == 0)
381 omap2_clk_wait_ready(clk);
382 return ret;
383} 383}
384 384
385static void omap2_dflt_clk_disable(struct clk *clk) 385void omap2_dflt_clk_disable(struct clk *clk)
386{ 386{
387 u32 v; 387 u32 v;
388 388
@@ -406,8 +406,10 @@ static void omap2_dflt_clk_disable(struct clk *clk)
406} 406}
407 407
408const struct clkops clkops_omap2_dflt_wait = { 408const struct clkops clkops_omap2_dflt_wait = {
409 .enable = omap2_dflt_clk_enable_wait, 409 .enable = omap2_dflt_clk_enable,
410 .disable = omap2_dflt_clk_disable, 410 .disable = omap2_dflt_clk_disable,
411 .find_companion = omap2_clk_dflt_find_companion,
412 .find_idlest = omap2_clk_dflt_find_idlest,
411}; 413};
412 414
413const struct clkops clkops_omap2_dflt = { 415const struct clkops clkops_omap2_dflt = {
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
index 2679ddfa6424..9ae7540f8af2 100644
--- a/arch/arm/mach-omap2/clock.h
+++ b/arch/arm/mach-omap2/clock.h
@@ -65,6 +65,12 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long rate);
65u32 omap2_get_dpll_rate(struct clk *clk); 65u32 omap2_get_dpll_rate(struct clk *clk);
66int omap2_wait_clock_ready(void __iomem *reg, u32 cval, const char *name); 66int omap2_wait_clock_ready(void __iomem *reg, u32 cval, const char *name);
67void omap2_clk_prepare_for_reboot(void); 67void omap2_clk_prepare_for_reboot(void);
68int omap2_dflt_clk_enable(struct clk *clk);
69void omap2_dflt_clk_disable(struct clk *clk);
70void omap2_clk_dflt_find_companion(struct clk *clk, void __iomem **other_reg,
71 u8 *other_bit);
72void omap2_clk_dflt_find_idlest(struct clk *clk, void __iomem **idlest_reg,
73 u8 *idlest_bit);
68 74
69extern const struct clkops clkops_omap2_dflt_wait; 75extern const struct clkops clkops_omap2_dflt_wait;
70extern const struct clkops clkops_omap2_dflt; 76extern const struct clkops clkops_omap2_dflt;
diff --git a/arch/arm/mach-omap2/clock24xx.c b/arch/arm/mach-omap2/clock24xx.c
index 44de0271fc2f..bc5d3ac66611 100644
--- a/arch/arm/mach-omap2/clock24xx.c
+++ b/arch/arm/mach-omap2/clock24xx.c
@@ -30,6 +30,7 @@
30 30
31#include <mach/clock.h> 31#include <mach/clock.h>
32#include <mach/sram.h> 32#include <mach/sram.h>
33#include <mach/prcm.h>
33#include <asm/div64.h> 34#include <asm/div64.h>
34#include <asm/clkdev.h> 35#include <asm/clkdev.h>
35 36
@@ -43,6 +44,18 @@
43static const struct clkops clkops_oscck; 44static const struct clkops clkops_oscck;
44static const struct clkops clkops_fixed; 45static const struct clkops clkops_fixed;
45 46
47static void omap2430_clk_i2chs_find_idlest(struct clk *clk,
48 void __iomem **idlest_reg,
49 u8 *idlest_bit);
50
51/* 2430 I2CHS has non-standard IDLEST register */
52static const struct clkops clkops_omap2430_i2chs_wait = {
53 .enable = omap2_dflt_clk_enable,
54 .disable = omap2_dflt_clk_disable,
55 .find_idlest = omap2430_clk_i2chs_find_idlest,
56 .find_companion = omap2_clk_dflt_find_companion,
57};
58
46#include "clock24xx.h" 59#include "clock24xx.h"
47 60
48struct omap_clk { 61struct omap_clk {
@@ -240,6 +253,26 @@ static void __iomem *prcm_clksrc_ctrl;
240 *-------------------------------------------------------------------------*/ 253 *-------------------------------------------------------------------------*/
241 254
242/** 255/**
256 * omap2430_clk_i2chs_find_idlest - return CM_IDLEST info for 2430 I2CHS
257 * @clk: struct clk * being enabled
258 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
259 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
260 *
261 * OMAP2430 I2CHS CM_IDLEST bits are in CM_IDLEST1_CORE, but the
262 * CM_*CLKEN bits are in CM_{I,F}CLKEN2_CORE. This custom function
263 * passes back the correct CM_IDLEST register address for I2CHS
264 * modules. No return value.
265 */
266static void omap2430_clk_i2chs_find_idlest(struct clk *clk,
267 void __iomem **idlest_reg,
268 u8 *idlest_bit)
269{
270 *idlest_reg = OMAP_CM_REGADDR(CORE_MOD, CM_IDLEST);
271 *idlest_bit = clk->enable_bit;
272}
273
274
275/**
243 * omap2xxx_clk_get_core_rate - return the CORE_CLK rate 276 * omap2xxx_clk_get_core_rate - return the CORE_CLK rate
244 * @clk: pointer to the combined dpll_ck + core_ck (currently "dpll_ck") 277 * @clk: pointer to the combined dpll_ck + core_ck (currently "dpll_ck")
245 * 278 *
@@ -325,8 +358,8 @@ static int omap2_clk_fixed_enable(struct clk *clk)
325 else if (clk == &apll54_ck) 358 else if (clk == &apll54_ck)
326 cval = OMAP24XX_ST_54M_APLL; 359 cval = OMAP24XX_ST_54M_APLL;
327 360
328 omap2_wait_clock_ready(OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), cval, 361 omap2_cm_wait_idlest(OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), cval,
329 clk->name); 362 clk->name);
330 363
331 /* 364 /*
332 * REVISIT: Should we return an error code if omap2_wait_clock_ready() 365 * REVISIT: Should we return an error code if omap2_wait_clock_ready()
diff --git a/arch/arm/mach-omap2/clock24xx.h b/arch/arm/mach-omap2/clock24xx.h
index 458f00cdcbea..d19cf7a7d8db 100644
--- a/arch/arm/mach-omap2/clock24xx.h
+++ b/arch/arm/mach-omap2/clock24xx.h
@@ -2337,7 +2337,7 @@ static struct clk i2c2_fck = {
2337 2337
2338static struct clk i2chs2_fck = { 2338static struct clk i2chs2_fck = {
2339 .name = "i2c_fck", 2339 .name = "i2c_fck",
2340 .ops = &clkops_omap2_dflt_wait, 2340 .ops = &clkops_omap2430_i2chs_wait,
2341 .id = 2, 2341 .id = 2,
2342 .parent = &func_96m_ck, 2342 .parent = &func_96m_ck,
2343 .clkdm_name = "core_l4_clkdm", 2343 .clkdm_name = "core_l4_clkdm",
@@ -2370,7 +2370,7 @@ static struct clk i2c1_fck = {
2370 2370
2371static struct clk i2chs1_fck = { 2371static struct clk i2chs1_fck = {
2372 .name = "i2c_fck", 2372 .name = "i2c_fck",
2373 .ops = &clkops_omap2_dflt_wait, 2373 .ops = &clkops_omap2430_i2chs_wait,
2374 .id = 1, 2374 .id = 1,
2375 .parent = &func_96m_ck, 2375 .parent = &func_96m_ck,
2376 .clkdm_name = "core_l4_clkdm", 2376 .clkdm_name = "core_l4_clkdm",
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
index 9e43fe5209d3..cd7819cc0c9e 100644
--- a/arch/arm/mach-omap2/clock34xx.c
+++ b/arch/arm/mach-omap2/clock34xx.c
@@ -2,7 +2,7 @@
2 * OMAP3-specific clock framework functions 2 * OMAP3-specific clock framework functions
3 * 3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc. 4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2008 Nokia Corporation 5 * Copyright (C) 2007-2009 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley 7 * Written by Paul Walmsley
8 * Testing and integration fixes by Jouni Högander 8 * Testing and integration fixes by Jouni Högander
@@ -41,6 +41,37 @@
41 41
42static const struct clkops clkops_noncore_dpll_ops; 42static const struct clkops clkops_noncore_dpll_ops;
43 43
44static void omap3430es2_clk_ssi_find_idlest(struct clk *clk,
45 void __iomem **idlest_reg,
46 u8 *idlest_bit);
47static void omap3430es2_clk_hsotgusb_find_idlest(struct clk *clk,
48 void __iomem **idlest_reg,
49 u8 *idlest_bit);
50static void omap3430es2_clk_dss_usbhost_find_idlest(struct clk *clk,
51 void __iomem **idlest_reg,
52 u8 *idlest_bit);
53
54static const struct clkops clkops_omap3430es2_ssi_wait = {
55 .enable = omap2_dflt_clk_enable,
56 .disable = omap2_dflt_clk_disable,
57 .find_idlest = omap3430es2_clk_ssi_find_idlest,
58 .find_companion = omap2_clk_dflt_find_companion,
59};
60
61static const struct clkops clkops_omap3430es2_hsotgusb_wait = {
62 .enable = omap2_dflt_clk_enable,
63 .disable = omap2_dflt_clk_disable,
64 .find_idlest = omap3430es2_clk_hsotgusb_find_idlest,
65 .find_companion = omap2_clk_dflt_find_companion,
66};
67
68static const struct clkops clkops_omap3430es2_dss_usbhost_wait = {
69 .enable = omap2_dflt_clk_enable,
70 .disable = omap2_dflt_clk_disable,
71 .find_idlest = omap3430es2_clk_dss_usbhost_find_idlest,
72 .find_companion = omap2_clk_dflt_find_companion,
73};
74
44#include "clock34xx.h" 75#include "clock34xx.h"
45 76
46struct omap_clk { 77struct omap_clk {
@@ -157,10 +188,13 @@ static struct omap_clk omap34xx_clks[] = {
157 CLK(NULL, "fshostusb_fck", &fshostusb_fck, CK_3430ES1), 188 CLK(NULL, "fshostusb_fck", &fshostusb_fck, CK_3430ES1),
158 CLK(NULL, "core_12m_fck", &core_12m_fck, CK_343X), 189 CLK(NULL, "core_12m_fck", &core_12m_fck, CK_343X),
159 CLK("omap_hdq.0", "fck", &hdq_fck, CK_343X), 190 CLK("omap_hdq.0", "fck", &hdq_fck, CK_343X),
160 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck, CK_343X), 191 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es1, CK_3430ES1),
161 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck, CK_343X), 192 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es2, CK_3430ES2),
193 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es1, CK_3430ES1),
194 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es2, CK_3430ES2),
162 CLK(NULL, "core_l3_ick", &core_l3_ick, CK_343X), 195 CLK(NULL, "core_l3_ick", &core_l3_ick, CK_343X),
163 CLK("musb_hdrc", "ick", &hsotgusb_ick, CK_343X), 196 CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es1, CK_3430ES1),
197 CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es2, CK_3430ES2),
164 CLK(NULL, "sdrc_ick", &sdrc_ick, CK_343X), 198 CLK(NULL, "sdrc_ick", &sdrc_ick, CK_343X),
165 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_343X), 199 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_343X),
166 CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X), 200 CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X),
@@ -193,18 +227,21 @@ static struct omap_clk omap34xx_clks[] = {
193 CLK(NULL, "mailboxes_ick", &mailboxes_ick, CK_343X), 227 CLK(NULL, "mailboxes_ick", &mailboxes_ick, CK_343X),
194 CLK(NULL, "omapctrl_ick", &omapctrl_ick, CK_343X), 228 CLK(NULL, "omapctrl_ick", &omapctrl_ick, CK_343X),
195 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_343X), 229 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_343X),
196 CLK(NULL, "ssi_ick", &ssi_ick, CK_343X), 230 CLK(NULL, "ssi_ick", &ssi_ick_3430es1, CK_3430ES1),
231 CLK(NULL, "ssi_ick", &ssi_ick_3430es2, CK_3430ES2),
197 CLK(NULL, "usb_l4_ick", &usb_l4_ick, CK_3430ES1), 232 CLK(NULL, "usb_l4_ick", &usb_l4_ick, CK_3430ES1),
198 CLK(NULL, "security_l4_ick2", &security_l4_ick2, CK_343X), 233 CLK(NULL, "security_l4_ick2", &security_l4_ick2, CK_343X),
199 CLK(NULL, "aes1_ick", &aes1_ick, CK_343X), 234 CLK(NULL, "aes1_ick", &aes1_ick, CK_343X),
200 CLK("omap_rng", "ick", &rng_ick, CK_343X), 235 CLK("omap_rng", "ick", &rng_ick, CK_343X),
201 CLK(NULL, "sha11_ick", &sha11_ick, CK_343X), 236 CLK(NULL, "sha11_ick", &sha11_ick, CK_343X),
202 CLK(NULL, "des1_ick", &des1_ick, CK_343X), 237 CLK(NULL, "des1_ick", &des1_ick, CK_343X),
203 CLK("omapfb", "dss1_fck", &dss1_alwon_fck, CK_343X), 238 CLK("omapfb", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
239 CLK("omapfb", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2),
204 CLK("omapfb", "tv_fck", &dss_tv_fck, CK_343X), 240 CLK("omapfb", "tv_fck", &dss_tv_fck, CK_343X),
205 CLK("omapfb", "video_fck", &dss_96m_fck, CK_343X), 241 CLK("omapfb", "video_fck", &dss_96m_fck, CK_343X),
206 CLK("omapfb", "dss2_fck", &dss2_alwon_fck, CK_343X), 242 CLK("omapfb", "dss2_fck", &dss2_alwon_fck, CK_343X),
207 CLK("omapfb", "ick", &dss_ick, CK_343X), 243 CLK("omapfb", "ick", &dss_ick_3430es1, CK_3430ES1),
244 CLK("omapfb", "ick", &dss_ick_3430es2, CK_3430ES2),
208 CLK(NULL, "cam_mclk", &cam_mclk, CK_343X), 245 CLK(NULL, "cam_mclk", &cam_mclk, CK_343X),
209 CLK(NULL, "cam_ick", &cam_ick, CK_343X), 246 CLK(NULL, "cam_ick", &cam_ick, CK_343X),
210 CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X), 247 CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X),
@@ -286,6 +323,87 @@ static struct omap_clk omap34xx_clks[] = {
286 323
287#define MIN_SDRC_DLL_LOCK_FREQ 83000000 324#define MIN_SDRC_DLL_LOCK_FREQ 83000000
288 325
326#define CYCLES_PER_MHZ 1000000
327
328/* Scale factor for fixed-point arith in omap3_core_dpll_m2_set_rate() */
329#define SDRC_MPURATE_SCALE 8
330
331/* 2^SDRC_MPURATE_BASE_SHIFT: MPU MHz that SDRC_MPURATE_LOOPS is defined for */
332#define SDRC_MPURATE_BASE_SHIFT 9
333
334/*
335 * SDRC_MPURATE_LOOPS: Number of MPU loops to execute at
336 * 2^MPURATE_BASE_SHIFT MHz for SDRC to stabilize
337 */
338#define SDRC_MPURATE_LOOPS 96
339
340/**
341 * omap3430es2_clk_ssi_find_idlest - return CM_IDLEST info for SSI
342 * @clk: struct clk * being enabled
343 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
344 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
345 *
346 * The OMAP3430ES2 SSI target CM_IDLEST bit is at a different shift
347 * from the CM_{I,F}CLKEN bit. Pass back the correct info via
348 * @idlest_reg and @idlest_bit. No return value.
349 */
350static void omap3430es2_clk_ssi_find_idlest(struct clk *clk,
351 void __iomem **idlest_reg,
352 u8 *idlest_bit)
353{
354 u32 r;
355
356 r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
357 *idlest_reg = (__force void __iomem *)r;
358 *idlest_bit = OMAP3430ES2_ST_SSI_IDLE_SHIFT;
359}
360
361/**
362 * omap3430es2_clk_dss_usbhost_find_idlest - CM_IDLEST info for DSS, USBHOST
363 * @clk: struct clk * being enabled
364 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
365 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
366 *
367 * Some OMAP modules on OMAP3 ES2+ chips have both initiator and
368 * target IDLEST bits. For our purposes, we are concerned with the
369 * target IDLEST bits, which exist at a different bit position than
370 * the *CLKEN bit position for these modules (DSS and USBHOST) (The
371 * default find_idlest code assumes that they are at the same
372 * position.) No return value.
373 */
374static void omap3430es2_clk_dss_usbhost_find_idlest(struct clk *clk,
375 void __iomem **idlest_reg,
376 u8 *idlest_bit)
377{
378 u32 r;
379
380 r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
381 *idlest_reg = (__force void __iomem *)r;
382 /* USBHOST_IDLE has same shift */
383 *idlest_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT;
384}
385
386/**
387 * omap3430es2_clk_hsotgusb_find_idlest - return CM_IDLEST info for HSOTGUSB
388 * @clk: struct clk * being enabled
389 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
390 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
391 *
392 * The OMAP3430ES2 HSOTGUSB target CM_IDLEST bit is at a different
393 * shift from the CM_{I,F}CLKEN bit. Pass back the correct info via
394 * @idlest_reg and @idlest_bit. No return value.
395 */
396static void omap3430es2_clk_hsotgusb_find_idlest(struct clk *clk,
397 void __iomem **idlest_reg,
398 u8 *idlest_bit)
399{
400 u32 r;
401
402 r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
403 *idlest_reg = (__force void __iomem *)r;
404 *idlest_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT;
405}
406
289/** 407/**
290 * omap3_dpll_recalc - recalculate DPLL rate 408 * omap3_dpll_recalc - recalculate DPLL rate
291 * @clk: DPLL struct clk 409 * @clk: DPLL struct clk
@@ -709,8 +827,11 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)
709{ 827{
710 u32 new_div = 0; 828 u32 new_div = 0;
711 u32 unlock_dll = 0; 829 u32 unlock_dll = 0;
712 unsigned long validrate, sdrcrate; 830 u32 c;
713 struct omap_sdrc_params *sp; 831 unsigned long validrate, sdrcrate, mpurate;
832 struct omap_sdrc_params *sdrc_cs0;
833 struct omap_sdrc_params *sdrc_cs1;
834 int ret;
714 835
715 if (!clk || !rate) 836 if (!clk || !rate)
716 return -EINVAL; 837 return -EINVAL;
@@ -718,21 +839,18 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)
718 if (clk != &dpll3_m2_ck) 839 if (clk != &dpll3_m2_ck)
719 return -EINVAL; 840 return -EINVAL;
720 841
721 if (rate == clk->rate)
722 return 0;
723
724 validrate = omap2_clksel_round_rate_div(clk, rate, &new_div); 842 validrate = omap2_clksel_round_rate_div(clk, rate, &new_div);
725 if (validrate != rate) 843 if (validrate != rate)
726 return -EINVAL; 844 return -EINVAL;
727 845
728 sdrcrate = sdrc_ick.rate; 846 sdrcrate = sdrc_ick.rate;
729 if (rate > clk->rate) 847 if (rate > clk->rate)
730 sdrcrate <<= ((rate / clk->rate) - 1); 848 sdrcrate <<= ((rate / clk->rate) >> 1);
731 else 849 else
732 sdrcrate >>= ((clk->rate / rate) - 1); 850 sdrcrate >>= ((clk->rate / rate) >> 1);
733 851
734 sp = omap2_sdrc_get_params(sdrcrate); 852 ret = omap2_sdrc_get_params(sdrcrate, &sdrc_cs0, &sdrc_cs1);
735 if (!sp) 853 if (ret)
736 return -EINVAL; 854 return -EINVAL;
737 855
738 if (sdrcrate < MIN_SDRC_DLL_LOCK_FREQ) { 856 if (sdrcrate < MIN_SDRC_DLL_LOCK_FREQ) {
@@ -740,17 +858,42 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)
740 unlock_dll = 1; 858 unlock_dll = 1;
741 } 859 }
742 860
861 /*
862 * XXX This only needs to be done when the CPU frequency changes
863 */
864 mpurate = arm_fck.rate / CYCLES_PER_MHZ;
865 c = (mpurate << SDRC_MPURATE_SCALE) >> SDRC_MPURATE_BASE_SHIFT;
866 c += 1; /* for safety */
867 c *= SDRC_MPURATE_LOOPS;
868 c >>= SDRC_MPURATE_SCALE;
869 if (c == 0)
870 c = 1;
871
743 pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", clk->rate, 872 pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", clk->rate,
744 validrate); 873 validrate);
745 pr_debug("clock: SDRC timing params used: %08x %08x %08x\n", 874 pr_debug("clock: SDRC CS0 timing params used:"
746 sp->rfr_ctrl, sp->actim_ctrla, sp->actim_ctrlb); 875 " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
747 876 sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
748 /* REVISIT: SRAM code doesn't support other M2 divisors yet */ 877 sdrc_cs0->actim_ctrlb, sdrc_cs0->mr);
749 WARN_ON(new_div != 1 && new_div != 2); 878 if (sdrc_cs1)
750 879 pr_debug("clock: SDRC CS1 timing params used: "
751 /* REVISIT: Add SDRC_MR changing to this code also */ 880 " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
752 omap3_configure_core_dpll(sp->rfr_ctrl, sp->actim_ctrla, 881 sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla,
753 sp->actim_ctrlb, new_div, unlock_dll); 882 sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);
883
884 if (sdrc_cs1)
885 omap3_configure_core_dpll(
886 new_div, unlock_dll, c, rate > clk->rate,
887 sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
888 sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
889 sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla,
890 sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);
891 else
892 omap3_configure_core_dpll(
893 new_div, unlock_dll, c, rate > clk->rate,
894 sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
895 sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
896 0, 0, 0, 0);
754 897
755 return 0; 898 return 0;
756} 899}
diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h
index e433aec4efdd..57cc2725b923 100644
--- a/arch/arm/mach-omap2/clock34xx.h
+++ b/arch/arm/mach-omap2/clock34xx.h
@@ -1568,7 +1568,7 @@ static const struct clksel ssi_ssr_clksel[] = {
1568 { .parent = NULL } 1568 { .parent = NULL }
1569}; 1569};
1570 1570
1571static struct clk ssi_ssr_fck = { 1571static struct clk ssi_ssr_fck_3430es1 = {
1572 .name = "ssi_ssr_fck", 1572 .name = "ssi_ssr_fck",
1573 .ops = &clkops_omap2_dflt, 1573 .ops = &clkops_omap2_dflt,
1574 .init = &omap2_init_clksel_parent, 1574 .init = &omap2_init_clksel_parent,
@@ -1581,10 +1581,31 @@ static struct clk ssi_ssr_fck = {
1581 .recalc = &omap2_clksel_recalc, 1581 .recalc = &omap2_clksel_recalc,
1582}; 1582};
1583 1583
1584static struct clk ssi_sst_fck = { 1584static struct clk ssi_ssr_fck_3430es2 = {
1585 .name = "ssi_ssr_fck",
1586 .ops = &clkops_omap3430es2_ssi_wait,
1587 .init = &omap2_init_clksel_parent,
1588 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1589 .enable_bit = OMAP3430_EN_SSI_SHIFT,
1590 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1591 .clksel_mask = OMAP3430_CLKSEL_SSI_MASK,
1592 .clksel = ssi_ssr_clksel,
1593 .clkdm_name = "core_l4_clkdm",
1594 .recalc = &omap2_clksel_recalc,
1595};
1596
1597static struct clk ssi_sst_fck_3430es1 = {
1585 .name = "ssi_sst_fck", 1598 .name = "ssi_sst_fck",
1586 .ops = &clkops_null, 1599 .ops = &clkops_null,
1587 .parent = &ssi_ssr_fck, 1600 .parent = &ssi_ssr_fck_3430es1,
1601 .fixed_div = 2,
1602 .recalc = &omap2_fixed_divisor_recalc,
1603};
1604
1605static struct clk ssi_sst_fck_3430es2 = {
1606 .name = "ssi_sst_fck",
1607 .ops = &clkops_null,
1608 .parent = &ssi_ssr_fck_3430es2,
1588 .fixed_div = 2, 1609 .fixed_div = 2,
1589 .recalc = &omap2_fixed_divisor_recalc, 1610 .recalc = &omap2_fixed_divisor_recalc,
1590}; 1611};
@@ -1606,9 +1627,19 @@ static struct clk core_l3_ick = {
1606 .recalc = &followparent_recalc, 1627 .recalc = &followparent_recalc,
1607}; 1628};
1608 1629
1609static struct clk hsotgusb_ick = { 1630static struct clk hsotgusb_ick_3430es1 = {
1610 .name = "hsotgusb_ick", 1631 .name = "hsotgusb_ick",
1611 .ops = &clkops_omap2_dflt_wait, 1632 .ops = &clkops_omap2_dflt,
1633 .parent = &core_l3_ick,
1634 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1635 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
1636 .clkdm_name = "core_l3_clkdm",
1637 .recalc = &followparent_recalc,
1638};
1639
1640static struct clk hsotgusb_ick_3430es2 = {
1641 .name = "hsotgusb_ick",
1642 .ops = &clkops_omap3430es2_hsotgusb_wait,
1612 .parent = &core_l3_ick, 1643 .parent = &core_l3_ick,
1613 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1644 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1614 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT, 1645 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
@@ -1947,7 +1978,7 @@ static struct clk ssi_l4_ick = {
1947 .recalc = &followparent_recalc, 1978 .recalc = &followparent_recalc,
1948}; 1979};
1949 1980
1950static struct clk ssi_ick = { 1981static struct clk ssi_ick_3430es1 = {
1951 .name = "ssi_ick", 1982 .name = "ssi_ick",
1952 .ops = &clkops_omap2_dflt, 1983 .ops = &clkops_omap2_dflt,
1953 .parent = &ssi_l4_ick, 1984 .parent = &ssi_l4_ick,
@@ -1957,6 +1988,16 @@ static struct clk ssi_ick = {
1957 .recalc = &followparent_recalc, 1988 .recalc = &followparent_recalc,
1958}; 1989};
1959 1990
1991static struct clk ssi_ick_3430es2 = {
1992 .name = "ssi_ick",
1993 .ops = &clkops_omap3430es2_ssi_wait,
1994 .parent = &ssi_l4_ick,
1995 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1996 .enable_bit = OMAP3430_EN_SSI_SHIFT,
1997 .clkdm_name = "core_l4_clkdm",
1998 .recalc = &followparent_recalc,
1999};
2000
1960/* REVISIT: Technically the TRM claims that this is CORE_CLK based, 2001/* REVISIT: Technically the TRM claims that this is CORE_CLK based,
1961 * but l4_ick makes more sense to me */ 2002 * but l4_ick makes more sense to me */
1962 2003
@@ -2024,7 +2065,7 @@ static struct clk des1_ick = {
2024}; 2065};
2025 2066
2026/* DSS */ 2067/* DSS */
2027static struct clk dss1_alwon_fck = { 2068static struct clk dss1_alwon_fck_3430es1 = {
2028 .name = "dss1_alwon_fck", 2069 .name = "dss1_alwon_fck",
2029 .ops = &clkops_omap2_dflt, 2070 .ops = &clkops_omap2_dflt,
2030 .parent = &dpll4_m4x2_ck, 2071 .parent = &dpll4_m4x2_ck,
@@ -2034,6 +2075,16 @@ static struct clk dss1_alwon_fck = {
2034 .recalc = &followparent_recalc, 2075 .recalc = &followparent_recalc,
2035}; 2076};
2036 2077
2078static struct clk dss1_alwon_fck_3430es2 = {
2079 .name = "dss1_alwon_fck",
2080 .ops = &clkops_omap3430es2_dss_usbhost_wait,
2081 .parent = &dpll4_m4x2_ck,
2082 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
2083 .enable_bit = OMAP3430_EN_DSS1_SHIFT,
2084 .clkdm_name = "dss_clkdm",
2085 .recalc = &followparent_recalc,
2086};
2087
2037static struct clk dss_tv_fck = { 2088static struct clk dss_tv_fck = {
2038 .name = "dss_tv_fck", 2089 .name = "dss_tv_fck",
2039 .ops = &clkops_omap2_dflt, 2090 .ops = &clkops_omap2_dflt,
@@ -2067,7 +2118,7 @@ static struct clk dss2_alwon_fck = {
2067 .recalc = &followparent_recalc, 2118 .recalc = &followparent_recalc,
2068}; 2119};
2069 2120
2070static struct clk dss_ick = { 2121static struct clk dss_ick_3430es1 = {
2071 /* Handles both L3 and L4 clocks */ 2122 /* Handles both L3 and L4 clocks */
2072 .name = "dss_ick", 2123 .name = "dss_ick",
2073 .ops = &clkops_omap2_dflt, 2124 .ops = &clkops_omap2_dflt,
@@ -2079,6 +2130,18 @@ static struct clk dss_ick = {
2079 .recalc = &followparent_recalc, 2130 .recalc = &followparent_recalc,
2080}; 2131};
2081 2132
2133static struct clk dss_ick_3430es2 = {
2134 /* Handles both L3 and L4 clocks */
2135 .name = "dss_ick",
2136 .ops = &clkops_omap3430es2_dss_usbhost_wait,
2137 .parent = &l4_ick,
2138 .init = &omap2_init_clk_clkdm,
2139 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
2140 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
2141 .clkdm_name = "dss_clkdm",
2142 .recalc = &followparent_recalc,
2143};
2144
2082/* CAM */ 2145/* CAM */
2083 2146
2084static struct clk cam_mclk = { 2147static struct clk cam_mclk = {
@@ -2118,7 +2181,7 @@ static struct clk csi2_96m_fck = {
2118 2181
2119static struct clk usbhost_120m_fck = { 2182static struct clk usbhost_120m_fck = {
2120 .name = "usbhost_120m_fck", 2183 .name = "usbhost_120m_fck",
2121 .ops = &clkops_omap2_dflt_wait, 2184 .ops = &clkops_omap2_dflt,
2122 .parent = &dpll5_m2_ck, 2185 .parent = &dpll5_m2_ck,
2123 .init = &omap2_init_clk_clkdm, 2186 .init = &omap2_init_clk_clkdm,
2124 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN), 2187 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
@@ -2129,7 +2192,7 @@ static struct clk usbhost_120m_fck = {
2129 2192
2130static struct clk usbhost_48m_fck = { 2193static struct clk usbhost_48m_fck = {
2131 .name = "usbhost_48m_fck", 2194 .name = "usbhost_48m_fck",
2132 .ops = &clkops_omap2_dflt_wait, 2195 .ops = &clkops_omap3430es2_dss_usbhost_wait,
2133 .parent = &omap_48m_fck, 2196 .parent = &omap_48m_fck,
2134 .init = &omap2_init_clk_clkdm, 2197 .init = &omap2_init_clk_clkdm,
2135 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN), 2198 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
@@ -2141,7 +2204,7 @@ static struct clk usbhost_48m_fck = {
2141static struct clk usbhost_ick = { 2204static struct clk usbhost_ick = {
2142 /* Handles both L3 and L4 clocks */ 2205 /* Handles both L3 and L4 clocks */
2143 .name = "usbhost_ick", 2206 .name = "usbhost_ick",
2144 .ops = &clkops_omap2_dflt_wait, 2207 .ops = &clkops_omap3430es2_dss_usbhost_wait,
2145 .parent = &l4_ick, 2208 .parent = &l4_ick,
2146 .init = &omap2_init_clk_clkdm, 2209 .init = &omap2_init_clk_clkdm,
2147 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN), 2210 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN),
diff --git a/arch/arm/mach-omap2/cm.h b/arch/arm/mach-omap2/cm.h
index 1d3c93bf86d3..f3c91a1ca391 100644
--- a/arch/arm/mach-omap2/cm.h
+++ b/arch/arm/mach-omap2/cm.h
@@ -29,9 +29,9 @@
29 * These registers appear once per CM module. 29 * These registers appear once per CM module.
30 */ 30 */
31 31
32#define OMAP3430_CM_REVISION OMAP_CM_REGADDR(OCP_MOD, 0x0000) 32#define OMAP3430_CM_REVISION OMAP34XX_CM_REGADDR(OCP_MOD, 0x0000)
33#define OMAP3430_CM_SYSCONFIG OMAP_CM_REGADDR(OCP_MOD, 0x0010) 33#define OMAP3430_CM_SYSCONFIG OMAP34XX_CM_REGADDR(OCP_MOD, 0x0010)
34#define OMAP3430_CM_POLCTRL OMAP_CM_REGADDR(OCP_MOD, 0x009c) 34#define OMAP3430_CM_POLCTRL OMAP34XX_CM_REGADDR(OCP_MOD, 0x009c)
35 35
36#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070 36#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070
37#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070) 37#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 2fd22f9c5f0e..54fec53a48e7 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -31,6 +31,8 @@ static struct platform_device gpmc_onenand_device = {
31static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base) 31static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)
32{ 32{
33 struct gpmc_timings t; 33 struct gpmc_timings t;
34 u32 reg;
35 int err;
34 36
35 const int t_cer = 15; 37 const int t_cer = 15;
36 const int t_avdp = 12; 38 const int t_avdp = 12;
@@ -43,6 +45,11 @@ static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)
43 const int t_wpl = 40; 45 const int t_wpl = 40;
44 const int t_wph = 30; 46 const int t_wph = 30;
45 47
48 /* Ensure sync read and sync write are disabled */
49 reg = readw(onenand_base + ONENAND_REG_SYS_CFG1);
50 reg &= ~ONENAND_SYS_CFG1_SYNC_READ & ~ONENAND_SYS_CFG1_SYNC_WRITE;
51 writew(reg, onenand_base + ONENAND_REG_SYS_CFG1);
52
46 memset(&t, 0, sizeof(t)); 53 memset(&t, 0, sizeof(t));
47 t.sync_clk = 0; 54 t.sync_clk = 0;
48 t.cs_on = 0; 55 t.cs_on = 0;
@@ -74,7 +81,16 @@ static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)
74 GPMC_CONFIG1_DEVICESIZE_16 | 81 GPMC_CONFIG1_DEVICESIZE_16 |
75 GPMC_CONFIG1_MUXADDDATA); 82 GPMC_CONFIG1_MUXADDDATA);
76 83
77 return gpmc_cs_set_timings(cs, &t); 84 err = gpmc_cs_set_timings(cs, &t);
85 if (err)
86 return err;
87
88 /* Ensure sync read and sync write are disabled */
89 reg = readw(onenand_base + ONENAND_REG_SYS_CFG1);
90 reg &= ~ONENAND_SYS_CFG1_SYNC_READ & ~ONENAND_SYS_CFG1_SYNC_WRITE;
91 writew(reg, onenand_base + ONENAND_REG_SYS_CFG1);
92
93 return 0;
78} 94}
79 95
80static void set_onenand_cfg(void __iomem *onenand_base, int latency, 96static void set_onenand_cfg(void __iomem *onenand_base, int latency,
@@ -124,7 +140,8 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
124 } else if (cfg->flags & ONENAND_SYNC_READWRITE) { 140 } else if (cfg->flags & ONENAND_SYNC_READWRITE) {
125 sync_read = 1; 141 sync_read = 1;
126 sync_write = 1; 142 sync_write = 1;
127 } 143 } else
144 return omap2_onenand_set_async_mode(cs, onenand_base);
128 145
129 if (!freq) { 146 if (!freq) {
130 /* Very first call freq is not known */ 147 /* Very first call freq is not known */
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 458990e20c60..a98201cc265c 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -48,6 +48,28 @@ int omap_chip_is(struct omap_chip_id oci)
48} 48}
49EXPORT_SYMBOL(omap_chip_is); 49EXPORT_SYMBOL(omap_chip_is);
50 50
51int omap_type(void)
52{
53 u32 val = 0;
54
55 if (cpu_is_omap24xx())
56 val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
57 else if (cpu_is_omap34xx())
58 val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
59 else {
60 pr_err("Cannot detect omap type!\n");
61 goto out;
62 }
63
64 val &= OMAP2_DEVICETYPE_MASK;
65 val >>= 8;
66
67out:
68 return val;
69}
70EXPORT_SYMBOL(omap_type);
71
72
51/*----------------------------------------------------------------------------*/ 73/*----------------------------------------------------------------------------*/
52 74
53#define OMAP_TAP_IDCODE 0x0204 75#define OMAP_TAP_IDCODE 0x0204
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index 32afd9448216..e9b9bcb19b4e 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -21,6 +21,7 @@
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/init.h> 22#include <linux/init.h>
23#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/clk.h>
24 25
25#include <asm/tlb.h> 26#include <asm/tlb.h>
26 27
@@ -241,14 +242,50 @@ void __init omap2_map_common_io(void)
241 omapfb_reserve_sdram(); 242 omapfb_reserve_sdram();
242} 243}
243 244
244void __init omap2_init_common_hw(struct omap_sdrc_params *sp) 245/*
246 * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters
247 *
248 * Sets the CORE DPLL3 M2 divider to the same value that it's at
249 * currently. This has the effect of setting the SDRC SDRAM AC timing
250 * registers to the values currently defined by the kernel. Currently
251 * only defined for OMAP3; will return 0 if called on OMAP2. Returns
252 * -EINVAL if the dpll3_m2_ck cannot be found, 0 if called on OMAP2,
253 * or passes along the return value of clk_set_rate().
254 */
255static int __init _omap2_init_reprogram_sdrc(void)
256{
257 struct clk *dpll3_m2_ck;
258 int v = -EINVAL;
259 long rate;
260
261 if (!cpu_is_omap34xx())
262 return 0;
263
264 dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
265 if (!dpll3_m2_ck)
266 return -EINVAL;
267
268 rate = clk_get_rate(dpll3_m2_ck);
269 pr_info("Reprogramming SDRC clock to %ld Hz\n", rate);
270 v = clk_set_rate(dpll3_m2_ck, rate);
271 if (v)
272 pr_err("dpll3_m2_clk rate change failed: %d\n", v);
273
274 clk_put(dpll3_m2_ck);
275
276 return v;
277}
278
279void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
280 struct omap_sdrc_params *sdrc_cs1)
245{ 281{
246 omap2_mux_init(); 282 omap2_mux_init();
247#ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once the clkdev is ready */ 283#ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once the clkdev is ready */
248 pwrdm_init(powerdomains_omap); 284 pwrdm_init(powerdomains_omap);
249 clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); 285 clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps);
250 omap2_clk_init(); 286 omap2_clk_init();
251 omap2_sdrc_init(sp); 287 omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
288 _omap2_init_reprogram_sdrc();
252#endif 289#endif
253 gpmc_init(); 290 gpmc_init();
254} 291}
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
index fd5b8a5925cc..6f71f3730c97 100644
--- a/arch/arm/mach-omap2/mailbox.c
+++ b/arch/arm/mach-omap2/mailbox.c
@@ -282,12 +282,12 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev)
282 return -ENOMEM; 282 return -ENOMEM;
283 283
284 /* DSP or IVA2 IRQ */ 284 /* DSP or IVA2 IRQ */
285 mbox_dsp_info.irq = platform_get_irq(pdev, 0); 285 ret = platform_get_irq(pdev, 0);
286 if (mbox_dsp_info.irq < 0) { 286 if (ret < 0) {
287 dev_err(&pdev->dev, "invalid irq resource\n"); 287 dev_err(&pdev->dev, "invalid irq resource\n");
288 ret = -ENODEV;
289 goto err_dsp; 288 goto err_dsp;
290 } 289 }
290 mbox_dsp_info.irq = ret;
291 291
292 ret = omap_mbox_register(&pdev->dev, &mbox_dsp_info); 292 ret = omap_mbox_register(&pdev->dev, &mbox_dsp_info);
293 if (ret) 293 if (ret)
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c
index a5c0f0435cd6..99b6e1546311 100644
--- a/arch/arm/mach-omap2/mcbsp.c
+++ b/arch/arm/mach-omap2/mcbsp.c
@@ -19,7 +19,6 @@
19 19
20#include <mach/irqs.h> 20#include <mach/irqs.h>
21#include <mach/dma.h> 21#include <mach/dma.h>
22#include <mach/irqs.h>
23#include <mach/mux.h> 22#include <mach/mux.h>
24#include <mach/cpu.h> 23#include <mach/cpu.h>
25#include <mach/mcbsp.h> 24#include <mach/mcbsp.h>
diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c
index 9756a878fd90..3c04c2f1b23f 100644
--- a/arch/arm/mach-omap2/mmc-twl4030.c
+++ b/arch/arm/mach-omap2/mmc-twl4030.c
@@ -119,6 +119,7 @@ static int twl_mmc_late_init(struct device *dev)
119 if (i != 0) 119 if (i != 0)
120 break; 120 break;
121 ret = PTR_ERR(reg); 121 ret = PTR_ERR(reg);
122 hsmmc[i].vcc = NULL;
122 goto err; 123 goto err;
123 } 124 }
124 hsmmc[i].vcc = reg; 125 hsmmc[i].vcc = reg;
@@ -165,8 +166,13 @@ done:
165static void twl_mmc_cleanup(struct device *dev) 166static void twl_mmc_cleanup(struct device *dev)
166{ 167{
167 struct omap_mmc_platform_data *mmc = dev->platform_data; 168 struct omap_mmc_platform_data *mmc = dev->platform_data;
169 int i;
168 170
169 gpio_free(mmc->slots[0].switch_pin); 171 gpio_free(mmc->slots[0].switch_pin);
172 for(i = 0; i < ARRAY_SIZE(hsmmc); i++) {
173 regulator_put(hsmmc[i].vcc);
174 regulator_put(hsmmc[i].vcc_aux);
175 }
170} 176}
171 177
172#ifdef CONFIG_PM 178#ifdef CONFIG_PM
@@ -263,8 +269,19 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
263static int twl_mmc23_set_power(struct device *dev, int slot, int power_on, int vdd) 269static int twl_mmc23_set_power(struct device *dev, int slot, int power_on, int vdd)
264{ 270{
265 int ret = 0; 271 int ret = 0;
266 struct twl_mmc_controller *c = &hsmmc[1]; 272 struct twl_mmc_controller *c = NULL;
267 struct omap_mmc_platform_data *mmc = dev->platform_data; 273 struct omap_mmc_platform_data *mmc = dev->platform_data;
274 int i;
275
276 for (i = 1; i < ARRAY_SIZE(hsmmc); i++) {
277 if (mmc == hsmmc[i].mmc) {
278 c = &hsmmc[i];
279 break;
280 }
281 }
282
283 if (c == NULL)
284 return -ENODEV;
268 285
269 /* If we don't see a Vcc regulator, assume it's a fixed 286 /* If we don't see a Vcc regulator, assume it's a fixed
270 * voltage always-on regulator. 287 * voltage always-on regulator.
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 026c4fc883a7..43d6b92b65f2 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -486,6 +486,12 @@ MUX_CFG_34XX("H19_34XX_GPIO164_OUT", 0x19c,
486 OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT) 486 OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
487MUX_CFG_34XX("J25_34XX_GPIO170", 0x1c6, 487MUX_CFG_34XX("J25_34XX_GPIO170", 0x1c6,
488 OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT) 488 OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT)
489
490/* OMAP3 SDRC CKE signals to SDR/DDR ram chips */
491MUX_CFG_34XX("H16_34XX_SDRC_CKE0", 0x262,
492 OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
493MUX_CFG_34XX("H17_34XX_SDRC_CKE1", 0x264,
494 OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
489}; 495};
490 496
491#define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins) 497#define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins)
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index f7b3baf76678..21201cd4117b 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -11,9 +11,6 @@
11#ifndef __ARCH_ARM_MACH_OMAP2_PM_H 11#ifndef __ARCH_ARM_MACH_OMAP2_PM_H
12#define __ARCH_ARM_MACH_OMAP2_PM_H 12#define __ARCH_ARM_MACH_OMAP2_PM_H
13 13
14extern int omap2_pm_init(void);
15extern int omap3_pm_init(void);
16
17#ifdef CONFIG_PM_DEBUG 14#ifdef CONFIG_PM_DEBUG
18extern void omap2_pm_dump(int mode, int resume, unsigned int us); 15extern void omap2_pm_dump(int mode, int resume, unsigned int us);
19extern int omap2_pm_debug; 16extern int omap2_pm_debug;
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
index db1025562fb0..528dbdc26e23 100644
--- a/arch/arm/mach-omap2/pm24xx.c
+++ b/arch/arm/mach-omap2/pm24xx.c
@@ -470,7 +470,7 @@ static void __init prcm_setup_regs(void)
470 WKUP_MOD, PM_WKEN); 470 WKUP_MOD, PM_WKEN);
471} 471}
472 472
473int __init omap2_pm_init(void) 473static int __init omap2_pm_init(void)
474{ 474{
475 u32 l; 475 u32 l;
476 476
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 841d4c5ed8be..488d595d8e4b 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -39,7 +39,9 @@
39struct power_state { 39struct power_state {
40 struct powerdomain *pwrdm; 40 struct powerdomain *pwrdm;
41 u32 next_state; 41 u32 next_state;
42#ifdef CONFIG_SUSPEND
42 u32 saved_state; 43 u32 saved_state;
44#endif
43 struct list_head node; 45 struct list_head node;
44}; 46};
45 47
@@ -293,6 +295,9 @@ out:
293 local_irq_enable(); 295 local_irq_enable();
294} 296}
295 297
298#ifdef CONFIG_SUSPEND
299static suspend_state_t suspend_state;
300
296static int omap3_pm_prepare(void) 301static int omap3_pm_prepare(void)
297{ 302{
298 disable_hlt(); 303 disable_hlt();
@@ -321,7 +326,6 @@ static int omap3_pm_suspend(void)
321restore: 326restore:
322 /* Restore next_pwrsts */ 327 /* Restore next_pwrsts */
323 list_for_each_entry(pwrst, &pwrst_list, node) { 328 list_for_each_entry(pwrst, &pwrst_list, node) {
324 set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
325 state = pwrdm_read_prev_pwrst(pwrst->pwrdm); 329 state = pwrdm_read_prev_pwrst(pwrst->pwrdm);
326 if (state > pwrst->next_state) { 330 if (state > pwrst->next_state) {
327 printk(KERN_INFO "Powerdomain (%s) didn't enter " 331 printk(KERN_INFO "Powerdomain (%s) didn't enter "
@@ -329,6 +333,7 @@ restore:
329 pwrst->pwrdm->name, pwrst->next_state); 333 pwrst->pwrdm->name, pwrst->next_state);
330 ret = -1; 334 ret = -1;
331 } 335 }
336 set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
332 } 337 }
333 if (ret) 338 if (ret)
334 printk(KERN_ERR "Could not enter target state in pm_suspend\n"); 339 printk(KERN_ERR "Could not enter target state in pm_suspend\n");
@@ -339,11 +344,11 @@ restore:
339 return ret; 344 return ret;
340} 345}
341 346
342static int omap3_pm_enter(suspend_state_t state) 347static int omap3_pm_enter(suspend_state_t unused)
343{ 348{
344 int ret = 0; 349 int ret = 0;
345 350
346 switch (state) { 351 switch (suspend_state) {
347 case PM_SUSPEND_STANDBY: 352 case PM_SUSPEND_STANDBY:
348 case PM_SUSPEND_MEM: 353 case PM_SUSPEND_MEM:
349 ret = omap3_pm_suspend(); 354 ret = omap3_pm_suspend();
@@ -360,12 +365,30 @@ static void omap3_pm_finish(void)
360 enable_hlt(); 365 enable_hlt();
361} 366}
362 367
368/* Hooks to enable / disable UART interrupts during suspend */
369static int omap3_pm_begin(suspend_state_t state)
370{
371 suspend_state = state;
372 omap_uart_enable_irqs(0);
373 return 0;
374}
375
376static void omap3_pm_end(void)
377{
378 suspend_state = PM_SUSPEND_ON;
379 omap_uart_enable_irqs(1);
380 return;
381}
382
363static struct platform_suspend_ops omap_pm_ops = { 383static struct platform_suspend_ops omap_pm_ops = {
384 .begin = omap3_pm_begin,
385 .end = omap3_pm_end,
364 .prepare = omap3_pm_prepare, 386 .prepare = omap3_pm_prepare,
365 .enter = omap3_pm_enter, 387 .enter = omap3_pm_enter,
366 .finish = omap3_pm_finish, 388 .finish = omap3_pm_finish,
367 .valid = suspend_valid_only_mem, 389 .valid = suspend_valid_only_mem,
368}; 390};
391#endif /* CONFIG_SUSPEND */
369 392
370 393
371/** 394/**
@@ -613,6 +636,24 @@ static void __init prcm_setup_regs(void)
613 /* Clear any pending PRCM interrupts */ 636 /* Clear any pending PRCM interrupts */
614 prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 637 prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
615 638
639 /* Don't attach IVA interrupts */
640 prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL);
641 prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1);
642 prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3);
643 prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL);
644
645 /* Clear any pending 'reset' flags */
646 prm_write_mod_reg(0xffffffff, MPU_MOD, RM_RSTST);
647 prm_write_mod_reg(0xffffffff, CORE_MOD, RM_RSTST);
648 prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, RM_RSTST);
649 prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, RM_RSTST);
650 prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, RM_RSTST);
651 prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, RM_RSTST);
652 prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, RM_RSTST);
653
654 /* Clear any pending PRCM interrupts */
655 prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
656
616 omap3_iva_idle(); 657 omap3_iva_idle();
617 omap3_d2d_idle(); 658 omap3_d2d_idle();
618} 659}
@@ -652,7 +693,7 @@ static int __init clkdms_setup(struct clockdomain *clkdm)
652 return 0; 693 return 0;
653} 694}
654 695
655int __init omap3_pm_init(void) 696static int __init omap3_pm_init(void)
656{ 697{
657 struct power_state *pwrst, *tmp; 698 struct power_state *pwrst, *tmp;
658 int ret; 699 int ret;
@@ -692,7 +733,9 @@ int __init omap3_pm_init(void)
692 _omap_sram_idle = omap_sram_push(omap34xx_cpu_suspend, 733 _omap_sram_idle = omap_sram_push(omap34xx_cpu_suspend,
693 omap34xx_cpu_suspend_sz); 734 omap34xx_cpu_suspend_sz);
694 735
736#ifdef CONFIG_SUSPEND
695 suspend_set_ops(&omap_pm_ops); 737 suspend_set_ops(&omap_pm_ops);
738#endif /* CONFIG_SUSPEND */
696 739
697 pm_idle = omap3_pm_idle; 740 pm_idle = omap3_pm_idle;
698 741
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
index 73e2971b1757..983f1cb676be 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -1099,7 +1099,7 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm)
1099 (c++ < PWRDM_TRANSITION_BAILOUT)) 1099 (c++ < PWRDM_TRANSITION_BAILOUT))
1100 udelay(1); 1100 udelay(1);
1101 1101
1102 if (c >= PWRDM_TRANSITION_BAILOUT) { 1102 if (c > PWRDM_TRANSITION_BAILOUT) {
1103 printk(KERN_ERR "powerdomain: waited too long for " 1103 printk(KERN_ERR "powerdomain: waited too long for "
1104 "powerdomain %s to complete transition\n", pwrdm->name); 1104 "powerdomain %s to complete transition\n", pwrdm->name);
1105 return -EAGAIN; 1105 return -EAGAIN;
diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c
index f945156d5585..ced555a4cd1a 100644
--- a/arch/arm/mach-omap2/prcm.c
+++ b/arch/arm/mach-omap2/prcm.c
@@ -17,6 +17,7 @@
17#include <linux/init.h> 17#include <linux/init.h>
18#include <linux/clk.h> 18#include <linux/clk.h>
19#include <linux/io.h> 19#include <linux/io.h>
20#include <linux/delay.h>
20 21
21#include <mach/common.h> 22#include <mach/common.h>
22#include <mach/prcm.h> 23#include <mach/prcm.h>
@@ -28,6 +29,8 @@
28static void __iomem *prm_base; 29static void __iomem *prm_base;
29static void __iomem *cm_base; 30static void __iomem *cm_base;
30 31
32#define MAX_MODULE_ENABLE_WAIT 100000
33
31u32 omap_prcm_get_reset_sources(void) 34u32 omap_prcm_get_reset_sources(void)
32{ 35{
33 /* XXX This presumably needs modification for 34XX */ 36 /* XXX This presumably needs modification for 34XX */
@@ -120,6 +123,46 @@ u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
120} 123}
121EXPORT_SYMBOL(cm_rmw_mod_reg_bits); 124EXPORT_SYMBOL(cm_rmw_mod_reg_bits);
122 125
126/**
127 * omap2_cm_wait_idlest - wait for IDLEST bit to indicate module readiness
128 * @reg: physical address of module IDLEST register
129 * @mask: value to mask against to determine if the module is active
130 * @name: name of the clock (for printk)
131 *
132 * Returns 1 if the module indicated readiness in time, or 0 if it
133 * failed to enable in roughly MAX_MODULE_ENABLE_WAIT microseconds.
134 */
135int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, const char *name)
136{
137 int i = 0;
138 int ena = 0;
139
140 /*
141 * 24xx uses 0 to indicate not ready, and 1 to indicate ready.
142 * 34xx reverses this, just to keep us on our toes
143 */
144 if (cpu_is_omap24xx())
145 ena = mask;
146 else if (cpu_is_omap34xx())
147 ena = 0;
148 else
149 BUG();
150
151 /* Wait for lock */
152 while (((__raw_readl(reg) & mask) != ena) &&
153 (i++ < MAX_MODULE_ENABLE_WAIT))
154 udelay(1);
155
156 if (i < MAX_MODULE_ENABLE_WAIT)
157 pr_debug("cm: Module associated with clock %s ready after %d "
158 "loops\n", name, i);
159 else
160 pr_err("cm: Module associated with clock %s didn't enable in "
161 "%d tries\n", name, MAX_MODULE_ENABLE_WAIT);
162
163 return (i < MAX_MODULE_ENABLE_WAIT) ? 1 : 0;
164};
165
123void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals) 166void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
124{ 167{
125 prm_base = omap2_globals->prm; 168 prm_base = omap2_globals->prm;
diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c
index 2045441e8385..9e3bd4fa7810 100644
--- a/arch/arm/mach-omap2/sdrc.c
+++ b/arch/arm/mach-omap2/sdrc.c
@@ -32,7 +32,7 @@
32#include <mach/sdrc.h> 32#include <mach/sdrc.h>
33#include "sdrc.h" 33#include "sdrc.h"
34 34
35static struct omap_sdrc_params *sdrc_init_params; 35static struct omap_sdrc_params *sdrc_init_params_cs0, *sdrc_init_params_cs1;
36 36
37void __iomem *omap2_sdrc_base; 37void __iomem *omap2_sdrc_base;
38void __iomem *omap2_sms_base; 38void __iomem *omap2_sms_base;
@@ -45,33 +45,49 @@ void __iomem *omap2_sms_base;
45/** 45/**
46 * omap2_sdrc_get_params - return SDRC register values for a given clock rate 46 * omap2_sdrc_get_params - return SDRC register values for a given clock rate
47 * @r: SDRC clock rate (in Hz) 47 * @r: SDRC clock rate (in Hz)
48 * @sdrc_cs0: chip select 0 ram timings **
49 * @sdrc_cs1: chip select 1 ram timings **
48 * 50 *
49 * Return pre-calculated values for the SDRC_ACTIM_CTRLA, 51 * Return pre-calculated values for the SDRC_ACTIM_CTRLA,
50 * SDRC_ACTIM_CTRLB, SDRC_RFR_CTRL, and SDRC_MR registers, for a given 52 * SDRC_ACTIM_CTRLB, SDRC_RFR_CTRL and SDRC_MR registers in sdrc_cs[01]
51 * SDRC clock rate 'r'. These parameters control various timing 53 * structs,for a given SDRC clock rate 'r'.
52 * delays in the SDRAM controller that are expressed in terms of the 54 * These parameters control various timing delays in the SDRAM controller
53 * number of SDRC clock cycles to wait; hence the clock rate 55 * that are expressed in terms of the number of SDRC clock cycles to
54 * dependency. Note that sdrc_init_params must be sorted rate 56 * wait; hence the clock rate dependency.
55 * descending. Also assumes that both chip-selects use the same 57 *
56 * timing parameters. Returns a struct omap_sdrc_params * upon 58 * Supports 2 different timing parameters for both chip selects.
57 * success, or NULL upon failure. 59 *
60 * Note 1: the sdrc_init_params_cs[01] must be sorted rate descending.
61 * Note 2: If sdrc_init_params_cs_1 is not NULL it must be of same size
62 * as sdrc_init_params_cs_0.
63 *
64 * Fills in the struct omap_sdrc_params * for each chip select.
65 * Returns 0 upon success or -1 upon failure.
58 */ 66 */
59struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r) 67int omap2_sdrc_get_params(unsigned long r,
68 struct omap_sdrc_params **sdrc_cs0,
69 struct omap_sdrc_params **sdrc_cs1)
60{ 70{
61 struct omap_sdrc_params *sp; 71 struct omap_sdrc_params *sp0, *sp1;
62 72
63 if (!sdrc_init_params) 73 if (!sdrc_init_params_cs0)
64 return NULL; 74 return -1;
65 75
66 sp = sdrc_init_params; 76 sp0 = sdrc_init_params_cs0;
77 sp1 = sdrc_init_params_cs1;
67 78
68 while (sp->rate && sp->rate != r) 79 while (sp0->rate && sp0->rate != r) {
69 sp++; 80 sp0++;
81 if (sdrc_init_params_cs1)
82 sp1++;
83 }
70 84
71 if (!sp->rate) 85 if (!sp0->rate)
72 return NULL; 86 return -1;
73 87
74 return sp; 88 *sdrc_cs0 = sp0;
89 *sdrc_cs1 = sp1;
90 return 0;
75} 91}
76 92
77 93
@@ -83,13 +99,15 @@ void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
83 99
84/** 100/**
85 * omap2_sdrc_init - initialize SMS, SDRC devices on boot 101 * omap2_sdrc_init - initialize SMS, SDRC devices on boot
86 * @sp: pointer to a null-terminated list of struct omap_sdrc_params 102 * @sdrc_cs[01]: pointers to a null-terminated list of struct omap_sdrc_params
103 * Support for 2 chip selects timings
87 * 104 *
88 * Turn on smart idle modes for SDRAM scheduler and controller. 105 * Turn on smart idle modes for SDRAM scheduler and controller.
89 * Program a known-good configuration for the SDRC to deal with buggy 106 * Program a known-good configuration for the SDRC to deal with buggy
90 * bootloaders. 107 * bootloaders.
91 */ 108 */
92void __init omap2_sdrc_init(struct omap_sdrc_params *sp) 109void __init omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
110 struct omap_sdrc_params *sdrc_cs1)
93{ 111{
94 u32 l; 112 u32 l;
95 113
@@ -103,11 +121,15 @@ void __init omap2_sdrc_init(struct omap_sdrc_params *sp)
103 l |= (0x2 << 3); 121 l |= (0x2 << 3);
104 sdrc_write_reg(l, SDRC_SYSCONFIG); 122 sdrc_write_reg(l, SDRC_SYSCONFIG);
105 123
106 sdrc_init_params = sp; 124 sdrc_init_params_cs0 = sdrc_cs0;
125 sdrc_init_params_cs1 = sdrc_cs1;
107 126
108 /* XXX Enable SRFRONIDLEREQ here also? */ 127 /* XXX Enable SRFRONIDLEREQ here also? */
128 /*
129 * PWDENA should not be set due to 34xx erratum 1.150 - PWDENA
130 * can cause random memory corruption
131 */
109 l = (1 << SDRC_POWER_EXTCLKDIS_SHIFT) | 132 l = (1 << SDRC_POWER_EXTCLKDIS_SHIFT) |
110 (1 << SDRC_POWER_PWDENA_SHIFT) |
111 (1 << SDRC_POWER_PAGEPOLICY_SHIFT); 133 (1 << SDRC_POWER_PAGEPOLICY_SHIFT);
112 sdrc_write_reg(l, SDRC_POWER); 134 sdrc_write_reg(l, SDRC_POWER);
113} 135}
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index b094c15bfe47..a7421a50410b 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -54,6 +54,7 @@ struct omap_uart_state {
54 54
55 struct plat_serial8250_port *p; 55 struct plat_serial8250_port *p;
56 struct list_head node; 56 struct list_head node;
57 struct platform_device pdev;
57 58
58#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) 59#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
59 int context_valid; 60 int context_valid;
@@ -68,10 +69,9 @@ struct omap_uart_state {
68#endif 69#endif
69}; 70};
70 71
71static struct omap_uart_state omap_uart[OMAP_MAX_NR_PORTS];
72static LIST_HEAD(uart_list); 72static LIST_HEAD(uart_list);
73 73
74static struct plat_serial8250_port serial_platform_data[] = { 74static struct plat_serial8250_port serial_platform_data0[] = {
75 { 75 {
76 .membase = IO_ADDRESS(OMAP_UART1_BASE), 76 .membase = IO_ADDRESS(OMAP_UART1_BASE),
77 .mapbase = OMAP_UART1_BASE, 77 .mapbase = OMAP_UART1_BASE,
@@ -81,6 +81,12 @@ static struct plat_serial8250_port serial_platform_data[] = {
81 .regshift = 2, 81 .regshift = 2,
82 .uartclk = OMAP24XX_BASE_BAUD * 16, 82 .uartclk = OMAP24XX_BASE_BAUD * 16,
83 }, { 83 }, {
84 .flags = 0
85 }
86};
87
88static struct plat_serial8250_port serial_platform_data1[] = {
89 {
84 .membase = IO_ADDRESS(OMAP_UART2_BASE), 90 .membase = IO_ADDRESS(OMAP_UART2_BASE),
85 .mapbase = OMAP_UART2_BASE, 91 .mapbase = OMAP_UART2_BASE,
86 .irq = 73, 92 .irq = 73,
@@ -89,6 +95,12 @@ static struct plat_serial8250_port serial_platform_data[] = {
89 .regshift = 2, 95 .regshift = 2,
90 .uartclk = OMAP24XX_BASE_BAUD * 16, 96 .uartclk = OMAP24XX_BASE_BAUD * 16,
91 }, { 97 }, {
98 .flags = 0
99 }
100};
101
102static struct plat_serial8250_port serial_platform_data2[] = {
103 {
92 .membase = IO_ADDRESS(OMAP_UART3_BASE), 104 .membase = IO_ADDRESS(OMAP_UART3_BASE),
93 .mapbase = OMAP_UART3_BASE, 105 .mapbase = OMAP_UART3_BASE,
94 .irq = 74, 106 .irq = 74,
@@ -217,6 +229,40 @@ static inline void omap_uart_disable_clocks(struct omap_uart_state *uart)
217 clk_disable(uart->fck); 229 clk_disable(uart->fck);
218} 230}
219 231
232static void omap_uart_enable_wakeup(struct omap_uart_state *uart)
233{
234 /* Set wake-enable bit */
235 if (uart->wk_en && uart->wk_mask) {
236 u32 v = __raw_readl(uart->wk_en);
237 v |= uart->wk_mask;
238 __raw_writel(v, uart->wk_en);
239 }
240
241 /* Ensure IOPAD wake-enables are set */
242 if (cpu_is_omap34xx() && uart->padconf) {
243 u16 v = omap_ctrl_readw(uart->padconf);
244 v |= OMAP3_PADCONF_WAKEUPENABLE0;
245 omap_ctrl_writew(v, uart->padconf);
246 }
247}
248
249static void omap_uart_disable_wakeup(struct omap_uart_state *uart)
250{
251 /* Clear wake-enable bit */
252 if (uart->wk_en && uart->wk_mask) {
253 u32 v = __raw_readl(uart->wk_en);
254 v &= ~uart->wk_mask;
255 __raw_writel(v, uart->wk_en);
256 }
257
258 /* Ensure IOPAD wake-enables are cleared */
259 if (cpu_is_omap34xx() && uart->padconf) {
260 u16 v = omap_ctrl_readw(uart->padconf);
261 v &= ~OMAP3_PADCONF_WAKEUPENABLE0;
262 omap_ctrl_writew(v, uart->padconf);
263 }
264}
265
220static void omap_uart_smart_idle_enable(struct omap_uart_state *uart, 266static void omap_uart_smart_idle_enable(struct omap_uart_state *uart,
221 int enable) 267 int enable)
222{ 268{
@@ -246,6 +292,11 @@ static void omap_uart_block_sleep(struct omap_uart_state *uart)
246 292
247static void omap_uart_allow_sleep(struct omap_uart_state *uart) 293static void omap_uart_allow_sleep(struct omap_uart_state *uart)
248{ 294{
295 if (device_may_wakeup(&uart->pdev.dev))
296 omap_uart_enable_wakeup(uart);
297 else
298 omap_uart_disable_wakeup(uart);
299
249 if (!uart->clocked) 300 if (!uart->clocked)
250 return; 301 return;
251 302
@@ -292,7 +343,6 @@ void omap_uart_resume_idle(int num)
292 /* Check for normal UART wakeup */ 343 /* Check for normal UART wakeup */
293 if (__raw_readl(uart->wk_st) & uart->wk_mask) 344 if (__raw_readl(uart->wk_st) & uart->wk_mask)
294 omap_uart_block_sleep(uart); 345 omap_uart_block_sleep(uart);
295
296 return; 346 return;
297 } 347 }
298 } 348 }
@@ -346,16 +396,13 @@ static irqreturn_t omap_uart_interrupt(int irq, void *dev_id)
346 return IRQ_NONE; 396 return IRQ_NONE;
347} 397}
348 398
349static u32 sleep_timeout = DEFAULT_TIMEOUT;
350
351static void omap_uart_idle_init(struct omap_uart_state *uart) 399static void omap_uart_idle_init(struct omap_uart_state *uart)
352{ 400{
353 u32 v;
354 struct plat_serial8250_port *p = uart->p; 401 struct plat_serial8250_port *p = uart->p;
355 int ret; 402 int ret;
356 403
357 uart->can_sleep = 0; 404 uart->can_sleep = 0;
358 uart->timeout = sleep_timeout; 405 uart->timeout = DEFAULT_TIMEOUT;
359 setup_timer(&uart->timer, omap_uart_idle_timer, 406 setup_timer(&uart->timer, omap_uart_idle_timer,
360 (unsigned long) uart); 407 (unsigned long) uart);
361 mod_timer(&uart->timer, jiffies + uart->timeout); 408 mod_timer(&uart->timer, jiffies + uart->timeout);
@@ -413,76 +460,101 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
413 uart->padconf = 0; 460 uart->padconf = 0;
414 } 461 }
415 462
416 /* Set wake-enable bit */
417 if (uart->wk_en && uart->wk_mask) {
418 v = __raw_readl(uart->wk_en);
419 v |= uart->wk_mask;
420 __raw_writel(v, uart->wk_en);
421 }
422
423 /* Ensure IOPAD wake-enables are set */
424 if (cpu_is_omap34xx() && uart->padconf) {
425 u16 v;
426
427 v = omap_ctrl_readw(uart->padconf);
428 v |= OMAP3_PADCONF_WAKEUPENABLE0;
429 omap_ctrl_writew(v, uart->padconf);
430 }
431
432 p->flags |= UPF_SHARE_IRQ; 463 p->flags |= UPF_SHARE_IRQ;
433 ret = request_irq(p->irq, omap_uart_interrupt, IRQF_SHARED, 464 ret = request_irq(p->irq, omap_uart_interrupt, IRQF_SHARED,
434 "serial idle", (void *)uart); 465 "serial idle", (void *)uart);
435 WARN_ON(ret); 466 WARN_ON(ret);
436} 467}
437 468
438static ssize_t sleep_timeout_show(struct kobject *kobj, 469void omap_uart_enable_irqs(int enable)
439 struct kobj_attribute *attr, 470{
471 int ret;
472 struct omap_uart_state *uart;
473
474 list_for_each_entry(uart, &uart_list, node) {
475 if (enable)
476 ret = request_irq(uart->p->irq, omap_uart_interrupt,
477 IRQF_SHARED, "serial idle", (void *)uart);
478 else
479 free_irq(uart->p->irq, (void *)uart);
480 }
481}
482
483static ssize_t sleep_timeout_show(struct device *dev,
484 struct device_attribute *attr,
440 char *buf) 485 char *buf)
441{ 486{
442 return sprintf(buf, "%u\n", sleep_timeout / HZ); 487 struct platform_device *pdev = container_of(dev,
488 struct platform_device, dev);
489 struct omap_uart_state *uart = container_of(pdev,
490 struct omap_uart_state, pdev);
491
492 return sprintf(buf, "%u\n", uart->timeout / HZ);
443} 493}
444 494
445static ssize_t sleep_timeout_store(struct kobject *kobj, 495static ssize_t sleep_timeout_store(struct device *dev,
446 struct kobj_attribute *attr, 496 struct device_attribute *attr,
447 const char *buf, size_t n) 497 const char *buf, size_t n)
448{ 498{
449 struct omap_uart_state *uart; 499 struct platform_device *pdev = container_of(dev,
500 struct platform_device, dev);
501 struct omap_uart_state *uart = container_of(pdev,
502 struct omap_uart_state, pdev);
450 unsigned int value; 503 unsigned int value;
451 504
452 if (sscanf(buf, "%u", &value) != 1) { 505 if (sscanf(buf, "%u", &value) != 1) {
453 printk(KERN_ERR "sleep_timeout_store: Invalid value\n"); 506 printk(KERN_ERR "sleep_timeout_store: Invalid value\n");
454 return -EINVAL; 507 return -EINVAL;
455 } 508 }
456 sleep_timeout = value * HZ; 509
457 list_for_each_entry(uart, &uart_list, node) { 510 uart->timeout = value * HZ;
458 uart->timeout = sleep_timeout; 511 if (uart->timeout)
459 if (uart->timeout) 512 mod_timer(&uart->timer, jiffies + uart->timeout);
460 mod_timer(&uart->timer, jiffies + uart->timeout); 513 else
461 else 514 /* A zero value means disable timeout feature */
462 /* A zero value means disable timeout feature */ 515 omap_uart_block_sleep(uart);
463 omap_uart_block_sleep(uart); 516
464 }
465 return n; 517 return n;
466} 518}
467 519
468static struct kobj_attribute sleep_timeout_attr = 520DEVICE_ATTR(sleep_timeout, 0644, sleep_timeout_show, sleep_timeout_store);
469 __ATTR(sleep_timeout, 0644, sleep_timeout_show, sleep_timeout_store); 521#define DEV_CREATE_FILE(dev, attr) WARN_ON(device_create_file(dev, attr))
470
471#else 522#else
472static inline void omap_uart_idle_init(struct omap_uart_state *uart) {} 523static inline void omap_uart_idle_init(struct omap_uart_state *uart) {}
524#define DEV_CREATE_FILE(dev, attr)
473#endif /* CONFIG_PM */ 525#endif /* CONFIG_PM */
474 526
475static struct platform_device serial_device = { 527static struct omap_uart_state omap_uart[OMAP_MAX_NR_PORTS] = {
476 .name = "serial8250", 528 {
477 .id = PLAT8250_DEV_PLATFORM, 529 .pdev = {
478 .dev = { 530 .name = "serial8250",
479 .platform_data = serial_platform_data, 531 .id = PLAT8250_DEV_PLATFORM,
532 .dev = {
533 .platform_data = serial_platform_data0,
534 },
535 },
536 }, {
537 .pdev = {
538 .name = "serial8250",
539 .id = PLAT8250_DEV_PLATFORM1,
540 .dev = {
541 .platform_data = serial_platform_data1,
542 },
543 },
544 }, {
545 .pdev = {
546 .name = "serial8250",
547 .id = PLAT8250_DEV_PLATFORM2,
548 .dev = {
549 .platform_data = serial_platform_data2,
550 },
551 },
480 }, 552 },
481}; 553};
482 554
483void __init omap_serial_init(void) 555void __init omap_serial_init(void)
484{ 556{
485 int i, err; 557 int i;
486 const struct omap_uart_config *info; 558 const struct omap_uart_config *info;
487 char name[16]; 559 char name[16];
488 560
@@ -496,14 +568,12 @@ void __init omap_serial_init(void)
496 568
497 if (info == NULL) 569 if (info == NULL)
498 return; 570 return;
499 if (cpu_is_omap44xx()) {
500 for (i = 0; i < OMAP_MAX_NR_PORTS; i++)
501 serial_platform_data[i].irq += 32;
502 }
503 571
504 for (i = 0; i < OMAP_MAX_NR_PORTS; i++) { 572 for (i = 0; i < OMAP_MAX_NR_PORTS; i++) {
505 struct plat_serial8250_port *p = serial_platform_data + i;
506 struct omap_uart_state *uart = &omap_uart[i]; 573 struct omap_uart_state *uart = &omap_uart[i];
574 struct platform_device *pdev = &uart->pdev;
575 struct device *dev = &pdev->dev;
576 struct plat_serial8250_port *p = dev->platform_data;
507 577
508 if (!(info->enabled_uarts & (1 << i))) { 578 if (!(info->enabled_uarts & (1 << i))) {
509 p->membase = NULL; 579 p->membase = NULL;
@@ -531,20 +601,21 @@ void __init omap_serial_init(void)
531 uart->num = i; 601 uart->num = i;
532 p->private_data = uart; 602 p->private_data = uart;
533 uart->p = p; 603 uart->p = p;
534 list_add(&uart->node, &uart_list); 604 list_add_tail(&uart->node, &uart_list);
605
606 if (cpu_is_omap44xx())
607 p->irq += 32;
535 608
536 omap_uart_enable_clocks(uart); 609 omap_uart_enable_clocks(uart);
537 omap_uart_reset(uart); 610 omap_uart_reset(uart);
538 omap_uart_idle_init(uart); 611 omap_uart_idle_init(uart);
539 }
540
541 err = platform_device_register(&serial_device);
542
543#ifdef CONFIG_PM
544 if (!err)
545 err = sysfs_create_file(&serial_device.dev.kobj,
546 &sleep_timeout_attr.attr);
547#endif
548 612
613 if (WARN_ON(platform_device_register(pdev)))
614 continue;
615 if ((cpu_is_omap34xx() && uart->padconf) ||
616 (uart->wk_en && uart->wk_mask)) {
617 device_init_wakeup(dev, true);
618 DEV_CREATE_FILE(dev, &dev_attr_sleep_timeout);
619 }
620 }
549} 621}
550
diff --git a/arch/arm/mach-omap2/sram34xx.S b/arch/arm/mach-omap2/sram34xx.S
index c080c82521e1..82aa4a3d160c 100644
--- a/arch/arm/mach-omap2/sram34xx.S
+++ b/arch/arm/mach-omap2/sram34xx.S
@@ -3,13 +3,12 @@
3 * 3 *
4 * Omap3 specific functions that need to be run in internal SRAM 4 * Omap3 specific functions that need to be run in internal SRAM
5 * 5 *
6 * (C) Copyright 2007 6 * Copyright (C) 2004, 2007, 2008 Texas Instruments, Inc.
7 * Texas Instruments Inc. 7 * Copyright (C) 2008 Nokia Corporation
8 * Rajendra Nayak <rnayak@ti.com>
9 * 8 *
10 * (C) Copyright 2004 9 * Rajendra Nayak <rnayak@ti.com>
11 * Texas Instruments, <www.ti.com>
12 * Richard Woodruff <r-woodruff2@ti.com> 10 * Richard Woodruff <r-woodruff2@ti.com>
11 * Paul Walmsley
13 * 12 *
14 * This program is free software; you can redistribute it and/or 13 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License as 14 * modify it under the terms of the GNU General Public License as
@@ -37,61 +36,141 @@
37 36
38 .text 37 .text
39 38
39/* r1 parameters */
40#define SDRC_NO_UNLOCK_DLL 0x0
41#define SDRC_UNLOCK_DLL 0x1
42
43/* SDRC_DLLA_CTRL bit settings */
44#define FIXEDDELAY_SHIFT 24
45#define FIXEDDELAY_MASK (0xff << FIXEDDELAY_SHIFT)
46#define DLLIDLE_MASK 0x4
47
40/* 48/*
41 * Change frequency of core dpll 49 * SDRC_DLLA_CTRL default values: TI hardware team indicates that
42 * r0 = sdrc_rfr_ctrl r1 = sdrc_actim_ctrla r2 = sdrc_actim_ctrlb r3 = M2 50 * FIXEDDELAY should be initialized to 0xf. This apparently was
43 * r4 = Unlock SDRC DLL? (1 = yes, 0 = no) -- only unlock DLL for 51 * empirically determined during process testing, so no derivation
52 * was provided.
53 */
54#define FIXEDDELAY_DEFAULT (0x0f << FIXEDDELAY_SHIFT)
55
56/* SDRC_DLLA_STATUS bit settings */
57#define LOCKSTATUS_MASK 0x4
58
59/* SDRC_POWER bit settings */
60#define SRFRONIDLEREQ_MASK 0x40
61
62/* CM_IDLEST1_CORE bit settings */
63#define ST_SDRC_MASK 0x2
64
65/* CM_ICLKEN1_CORE bit settings */
66#define EN_SDRC_MASK 0x2
67
68/* CM_CLKSEL1_PLL bit settings */
69#define CORE_DPLL_CLKOUT_DIV_SHIFT 0x1b
70
71/*
72 * omap3_sram_configure_core_dpll - change DPLL3 M2 divider
73 *
74 * Params passed in registers:
75 * r0 = new M2 divider setting (only 1 and 2 supported right now)
76 * r1 = unlock SDRC DLL? (1 = yes, 0 = no). Only unlock DLL for
44 * SDRC rates < 83MHz 77 * SDRC rates < 83MHz
78 * r2 = number of MPU cycles to wait for SDRC to stabilize after
79 * reprogramming the SDRC when switching to a slower MPU speed
80 * r3 = increasing SDRC rate? (1 = yes, 0 = no)
81 *
82 * Params passed via the stack. The needed params will be copied in SRAM
83 * before use by the code in SRAM (SDRAM is not accessible during SDRC
84 * reconfiguration):
85 * new SDRC_RFR_CTRL_0 register contents
86 * new SDRC_ACTIM_CTRL_A_0 register contents
87 * new SDRC_ACTIM_CTRL_B_0 register contents
88 * new SDRC_MR_0 register value
89 * new SDRC_RFR_CTRL_1 register contents
90 * new SDRC_ACTIM_CTRL_A_1 register contents
91 * new SDRC_ACTIM_CTRL_B_1 register contents
92 * new SDRC_MR_1 register value
93 *
94 * If the param SDRC_RFR_CTRL_1 is 0, the parameters
95 * are not programmed into the SDRC CS1 registers
45 */ 96 */
46ENTRY(omap3_sram_configure_core_dpll) 97ENTRY(omap3_sram_configure_core_dpll)
47 stmfd sp!, {r1-r12, lr} @ store regs to stack 98 stmfd sp!, {r1-r12, lr} @ store regs to stack
48 ldr r4, [sp, #52] @ pull extra args off the stack 99
100 @ pull the extra args off the stack
101 @ and store them in SRAM
102 ldr r4, [sp, #52]
103 str r4, omap_sdrc_rfr_ctrl_0_val
104 ldr r4, [sp, #56]
105 str r4, omap_sdrc_actim_ctrl_a_0_val
106 ldr r4, [sp, #60]
107 str r4, omap_sdrc_actim_ctrl_b_0_val
108 ldr r4, [sp, #64]
109 str r4, omap_sdrc_mr_0_val
110 ldr r4, [sp, #68]
111 str r4, omap_sdrc_rfr_ctrl_1_val
112 cmp r4, #0 @ if SDRC_RFR_CTRL_1 is 0,
113 beq skip_cs1_params @ do not use cs1 params
114 ldr r4, [sp, #72]
115 str r4, omap_sdrc_actim_ctrl_a_1_val
116 ldr r4, [sp, #76]
117 str r4, omap_sdrc_actim_ctrl_b_1_val
118 ldr r4, [sp, #80]
119 str r4, omap_sdrc_mr_1_val
120skip_cs1_params:
49 dsb @ flush buffered writes to interconnect 121 dsb @ flush buffered writes to interconnect
50 cmp r3, #0x2 122
51 blne configure_sdrc 123 cmp r3, #1 @ if increasing SDRC clk rate,
52 cmp r4, #0x1 124 bleq configure_sdrc @ program the SDRC regs early (for RFR)
125 cmp r1, #SDRC_UNLOCK_DLL @ set the intended DLL state
53 bleq unlock_dll 126 bleq unlock_dll
54 blne lock_dll 127 blne lock_dll
55 bl sdram_in_selfrefresh @ put the SDRAM in self refresh 128 bl sdram_in_selfrefresh @ put SDRAM in self refresh, idle SDRC
56 bl configure_core_dpll 129 bl configure_core_dpll @ change the DPLL3 M2 divider
57 bl enable_sdrc 130 mov r12, r2
58 cmp r4, #0x1 131 bl wait_clk_stable @ wait for SDRC to stabilize
132 bl enable_sdrc @ take SDRC out of idle
133 cmp r1, #SDRC_UNLOCK_DLL @ wait for DLL status to change
59 bleq wait_dll_unlock 134 bleq wait_dll_unlock
60 blne wait_dll_lock 135 blne wait_dll_lock
61 cmp r3, #0x1 136 cmp r3, #1 @ if increasing SDRC clk rate,
62 blne configure_sdrc 137 beq return_to_sdram @ return to SDRAM code, otherwise,
138 bl configure_sdrc @ reprogram SDRC regs now
139return_to_sdram:
63 isb @ prevent speculative exec past here 140 isb @ prevent speculative exec past here
64 mov r0, #0 @ return value 141 mov r0, #0 @ return value
65 ldmfd sp!, {r1-r12, pc} @ restore regs and return 142 ldmfd sp!, {r1-r12, pc} @ restore regs and return
66unlock_dll: 143unlock_dll:
67 ldr r11, omap3_sdrc_dlla_ctrl 144 ldr r11, omap3_sdrc_dlla_ctrl
68 ldr r12, [r11] 145 ldr r12, [r11]
69 orr r12, r12, #0x4 146 bic r12, r12, #FIXEDDELAY_MASK
147 orr r12, r12, #FIXEDDELAY_DEFAULT
148 orr r12, r12, #DLLIDLE_MASK
70 str r12, [r11] @ (no OCP barrier needed) 149 str r12, [r11] @ (no OCP barrier needed)
71 bx lr 150 bx lr
72lock_dll: 151lock_dll:
73 ldr r11, omap3_sdrc_dlla_ctrl 152 ldr r11, omap3_sdrc_dlla_ctrl
74 ldr r12, [r11] 153 ldr r12, [r11]
75 bic r12, r12, #0x4 154 bic r12, r12, #DLLIDLE_MASK
76 str r12, [r11] @ (no OCP barrier needed) 155 str r12, [r11] @ (no OCP barrier needed)
77 bx lr 156 bx lr
78sdram_in_selfrefresh: 157sdram_in_selfrefresh:
79 ldr r11, omap3_sdrc_power @ read the SDRC_POWER register 158 ldr r11, omap3_sdrc_power @ read the SDRC_POWER register
80 ldr r12, [r11] @ read the contents of SDRC_POWER 159 ldr r12, [r11] @ read the contents of SDRC_POWER
81 mov r9, r12 @ keep a copy of SDRC_POWER bits 160 mov r9, r12 @ keep a copy of SDRC_POWER bits
82 orr r12, r12, #0x40 @ enable self refresh on idle req 161 orr r12, r12, #SRFRONIDLEREQ_MASK @ enable self refresh on idle
83 bic r12, r12, #0x4 @ clear PWDENA
84 str r12, [r11] @ write back to SDRC_POWER register 162 str r12, [r11] @ write back to SDRC_POWER register
85 ldr r12, [r11] @ posted-write barrier for SDRC 163 ldr r12, [r11] @ posted-write barrier for SDRC
164idle_sdrc:
86 ldr r11, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg 165 ldr r11, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg
87 ldr r12, [r11] 166 ldr r12, [r11]
88 bic r12, r12, #0x2 @ disable iclk bit for SDRC 167 bic r12, r12, #EN_SDRC_MASK @ disable iclk bit for SDRC
89 str r12, [r11] 168 str r12, [r11]
90wait_sdrc_idle: 169wait_sdrc_idle:
91 ldr r11, omap3_cm_idlest1_core 170 ldr r11, omap3_cm_idlest1_core
92 ldr r12, [r11] 171 ldr r12, [r11]
93 and r12, r12, #0x2 @ check for SDRC idle 172 and r12, r12, #ST_SDRC_MASK @ check for SDRC idle
94 cmp r12, #2 173 cmp r12, #ST_SDRC_MASK
95 bne wait_sdrc_idle 174 bne wait_sdrc_idle
96 bx lr 175 bx lr
97configure_core_dpll: 176configure_core_dpll:
@@ -99,36 +178,23 @@ configure_core_dpll:
99 ldr r12, [r11] 178 ldr r12, [r11]
100 ldr r10, core_m2_mask_val @ modify m2 for core dpll 179 ldr r10, core_m2_mask_val @ modify m2 for core dpll
101 and r12, r12, r10 180 and r12, r12, r10
102 orr r12, r12, r3, lsl #0x1B @ r3 contains the M2 val 181 orr r12, r12, r0, lsl #CORE_DPLL_CLKOUT_DIV_SHIFT
103 str r12, [r11] 182 str r12, [r11]
104 ldr r12, [r11] @ posted-write barrier for CM 183 ldr r12, [r11] @ posted-write barrier for CM
105 mov r12, #0x800 @ wait for the clock to stabilise
106 cmp r3, #2
107 bne wait_clk_stable
108 bx lr 184 bx lr
109wait_clk_stable: 185wait_clk_stable:
110 subs r12, r12, #1 186 subs r12, r12, #1
111 bne wait_clk_stable 187 bne wait_clk_stable
112 nop
113 nop
114 nop
115 nop
116 nop
117 nop
118 nop
119 nop
120 nop
121 nop
122 bx lr 188 bx lr
123enable_sdrc: 189enable_sdrc:
124 ldr r11, omap3_cm_iclken1_core 190 ldr r11, omap3_cm_iclken1_core
125 ldr r12, [r11] 191 ldr r12, [r11]
126 orr r12, r12, #0x2 @ enable iclk bit for SDRC 192 orr r12, r12, #EN_SDRC_MASK @ enable iclk bit for SDRC
127 str r12, [r11] 193 str r12, [r11]
128wait_sdrc_idle1: 194wait_sdrc_idle1:
129 ldr r11, omap3_cm_idlest1_core 195 ldr r11, omap3_cm_idlest1_core
130 ldr r12, [r11] 196 ldr r12, [r11]
131 and r12, r12, #0x2 197 and r12, r12, #ST_SDRC_MASK
132 cmp r12, #0 198 cmp r12, #0
133 bne wait_sdrc_idle1 199 bne wait_sdrc_idle1
134restore_sdrc_power_val: 200restore_sdrc_power_val:
@@ -138,25 +204,46 @@ restore_sdrc_power_val:
138wait_dll_lock: 204wait_dll_lock:
139 ldr r11, omap3_sdrc_dlla_status 205 ldr r11, omap3_sdrc_dlla_status
140 ldr r12, [r11] 206 ldr r12, [r11]
141 and r12, r12, #0x4 207 and r12, r12, #LOCKSTATUS_MASK
142 cmp r12, #0x4 208 cmp r12, #LOCKSTATUS_MASK
143 bne wait_dll_lock 209 bne wait_dll_lock
144 bx lr 210 bx lr
145wait_dll_unlock: 211wait_dll_unlock:
146 ldr r11, omap3_sdrc_dlla_status 212 ldr r11, omap3_sdrc_dlla_status
147 ldr r12, [r11] 213 ldr r12, [r11]
148 and r12, r12, #0x4 214 and r12, r12, #LOCKSTATUS_MASK
149 cmp r12, #0x0 215 cmp r12, #0x0
150 bne wait_dll_unlock 216 bne wait_dll_unlock
151 bx lr 217 bx lr
152configure_sdrc: 218configure_sdrc:
153 ldr r11, omap3_sdrc_rfr_ctrl 219 ldr r12, omap_sdrc_rfr_ctrl_0_val @ fetch value from SRAM
154 str r0, [r11] 220 ldr r11, omap3_sdrc_rfr_ctrl_0 @ fetch addr from SRAM
155 ldr r11, omap3_sdrc_actim_ctrla 221 str r12, [r11] @ store
156 str r1, [r11] 222 ldr r12, omap_sdrc_actim_ctrl_a_0_val
157 ldr r11, omap3_sdrc_actim_ctrlb 223 ldr r11, omap3_sdrc_actim_ctrl_a_0
158 str r2, [r11] 224 str r12, [r11]
159 ldr r2, [r11] @ posted-write barrier for SDRC 225 ldr r12, omap_sdrc_actim_ctrl_b_0_val
226 ldr r11, omap3_sdrc_actim_ctrl_b_0
227 str r12, [r11]
228 ldr r12, omap_sdrc_mr_0_val
229 ldr r11, omap3_sdrc_mr_0
230 str r12, [r11]
231 ldr r12, omap_sdrc_rfr_ctrl_1_val
232 cmp r12, #0 @ if SDRC_RFR_CTRL_1 is 0,
233 beq skip_cs1_prog @ do not program cs1 params
234 ldr r11, omap3_sdrc_rfr_ctrl_1
235 str r12, [r11]
236 ldr r12, omap_sdrc_actim_ctrl_a_1_val
237 ldr r11, omap3_sdrc_actim_ctrl_a_1
238 str r12, [r11]
239 ldr r12, omap_sdrc_actim_ctrl_b_1_val
240 ldr r11, omap3_sdrc_actim_ctrl_b_1
241 str r12, [r11]
242 ldr r12, omap_sdrc_mr_1_val
243 ldr r11, omap3_sdrc_mr_1
244 str r12, [r11]
245skip_cs1_prog:
246 ldr r12, [r11] @ posted-write barrier for SDRC
160 bx lr 247 bx lr
161 248
162omap3_sdrc_power: 249omap3_sdrc_power:
@@ -167,12 +254,40 @@ omap3_cm_idlest1_core:
167 .word OMAP34XX_CM_REGADDR(CORE_MOD, CM_IDLEST) 254 .word OMAP34XX_CM_REGADDR(CORE_MOD, CM_IDLEST)
168omap3_cm_iclken1_core: 255omap3_cm_iclken1_core:
169 .word OMAP34XX_CM_REGADDR(CORE_MOD, CM_ICLKEN1) 256 .word OMAP34XX_CM_REGADDR(CORE_MOD, CM_ICLKEN1)
170omap3_sdrc_rfr_ctrl: 257
258omap3_sdrc_rfr_ctrl_0:
171 .word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_0) 259 .word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_0)
172omap3_sdrc_actim_ctrla: 260omap3_sdrc_rfr_ctrl_1:
261 .word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_1)
262omap3_sdrc_actim_ctrl_a_0:
173 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0) 263 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0)
174omap3_sdrc_actim_ctrlb: 264omap3_sdrc_actim_ctrl_a_1:
265 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_1)
266omap3_sdrc_actim_ctrl_b_0:
175 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0) 267 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0)
268omap3_sdrc_actim_ctrl_b_1:
269 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_1)
270omap3_sdrc_mr_0:
271 .word OMAP34XX_SDRC_REGADDR(SDRC_MR_0)
272omap3_sdrc_mr_1:
273 .word OMAP34XX_SDRC_REGADDR(SDRC_MR_1)
274omap_sdrc_rfr_ctrl_0_val:
275 .word 0xDEADBEEF
276omap_sdrc_rfr_ctrl_1_val:
277 .word 0xDEADBEEF
278omap_sdrc_actim_ctrl_a_0_val:
279 .word 0xDEADBEEF
280omap_sdrc_actim_ctrl_a_1_val:
281 .word 0xDEADBEEF
282omap_sdrc_actim_ctrl_b_0_val:
283 .word 0xDEADBEEF
284omap_sdrc_actim_ctrl_b_1_val:
285 .word 0xDEADBEEF
286omap_sdrc_mr_0_val:
287 .word 0xDEADBEEF
288omap_sdrc_mr_1_val:
289 .word 0xDEADBEEF
290
176omap3_sdrc_dlla_status: 291omap3_sdrc_dlla_status:
177 .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS) 292 .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
178omap3_sdrc_dlla_ctrl: 293omap3_sdrc_dlla_ctrl:
@@ -182,3 +297,4 @@ core_m2_mask_val:
182 297
183ENTRY(omap3_sram_configure_core_dpll_sz) 298ENTRY(omap3_sram_configure_core_dpll_sz)
184 .word . - omap3_sram_configure_core_dpll 299 .word . - omap3_sram_configure_core_dpll
300
diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c
index d85296dc896c..739e59e8025c 100644
--- a/arch/arm/mach-omap2/usb-musb.c
+++ b/arch/arm/mach-omap2/usb-musb.c
@@ -155,20 +155,6 @@ static struct platform_device musb_device = {
155 .resource = musb_resources, 155 .resource = musb_resources,
156}; 156};
157 157
158#ifdef CONFIG_NOP_USB_XCEIV
159static u64 nop_xceiv_dmamask = DMA_BIT_MASK(32);
160
161static struct platform_device nop_xceiv_device = {
162 .name = "nop_usb_xceiv",
163 .id = -1,
164 .dev = {
165 .dma_mask = &nop_xceiv_dmamask,
166 .coherent_dma_mask = DMA_BIT_MASK(32),
167 .platform_data = NULL,
168 },
169};
170#endif
171
172void __init usb_musb_init(void) 158void __init usb_musb_init(void)
173{ 159{
174 if (cpu_is_omap243x()) 160 if (cpu_is_omap243x())
@@ -183,13 +169,6 @@ void __init usb_musb_init(void)
183 */ 169 */
184 musb_plat.clock = "ick"; 170 musb_plat.clock = "ick";
185 171
186#ifdef CONFIG_NOP_USB_XCEIV
187 if (platform_device_register(&nop_xceiv_device) < 0) {
188 printk(KERN_ERR "Unable to register NOP-XCEIV device\n");
189 return;
190 }
191#endif
192
193 if (platform_device_register(&musb_device) < 0) { 172 if (platform_device_register(&musb_device) < 0) {
194 printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n"); 173 printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n");
195 return; 174 return;
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c
index 6f3f77d031d0..d78731edebb6 100644
--- a/arch/arm/mach-orion5x/addr-map.c
+++ b/arch/arm/mach-orion5x/addr-map.c
@@ -200,6 +200,6 @@ void __init orion5x_setup_pcie_wa_win(u32 base, u32 size)
200 200
201int __init orion5x_setup_sram_win(void) 201int __init orion5x_setup_sram_win(void)
202{ 202{
203 return setup_cpu_win(win_alloc_count, ORION5X_SRAM_PHYS_BASE, 203 return setup_cpu_win(win_alloc_count++, ORION5X_SRAM_PHYS_BASE,
204 ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1); 204 ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1);
205} 205}
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c
index eafcc49009ea..f87fa1253803 100644
--- a/arch/arm/mach-orion5x/common.c
+++ b/arch/arm/mach-orion5x/common.c
@@ -562,7 +562,7 @@ static struct platform_device orion5x_crypto_device = {
562 .resource = orion5x_crypto_res, 562 .resource = orion5x_crypto_res,
563}; 563};
564 564
565int __init orion5x_crypto_init(void) 565static int __init orion5x_crypto_init(void)
566{ 566{
567 int ret; 567 int ret;
568 568
@@ -697,6 +697,14 @@ void __init orion5x_init(void)
697 } 697 }
698 698
699 /* 699 /*
700 * The 5082/5181l/5182/6082/6082l/6183 have crypto
701 * while 5180n/5181/5281 don't have crypto.
702 */
703 if ((dev == MV88F5181_DEV_ID && rev >= MV88F5181L_REV_A0) ||
704 dev == MV88F5182_DEV_ID || dev == MV88F6183_DEV_ID)
705 orion5x_crypto_init();
706
707 /*
700 * Register watchdog driver 708 * Register watchdog driver
701 */ 709 */
702 orion5x_wdt_init(); 710 orion5x_wdt_init();
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h
index de483e83edd7..8f004503c96d 100644
--- a/arch/arm/mach-orion5x/common.h
+++ b/arch/arm/mach-orion5x/common.h
@@ -38,7 +38,6 @@ void orion5x_spi_init(void);
38void orion5x_uart0_init(void); 38void orion5x_uart0_init(void);
39void orion5x_uart1_init(void); 39void orion5x_uart1_init(void);
40void orion5x_xor_init(void); 40void orion5x_xor_init(void);
41int orion5x_crypto_init(void);
42 41
43/* 42/*
44 * PCIe/PCI functions. 43 * PCIe/PCI functions.
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index f4533f8ff4e8..89c992b8f75b 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -401,6 +401,16 @@ config MACH_PALMZ72
401 Say Y here if you intend to run this kernel on Palm Zire 72 401 Say Y here if you intend to run this kernel on Palm Zire 72
402 handheld computer. 402 handheld computer.
403 403
404config MACH_TREO680
405 bool "Palm Treo 680"
406 default y
407 depends on ARCH_PXA_PALM
408 select PXA27x
409 select IWMMXT
410 help
411 Say Y here if you intend to run this kernel on Palm Treo 680
412 smartphone.
413
404config MACH_PALMLD 414config MACH_PALMLD
405 bool "Palm LifeDrive" 415 bool "Palm LifeDrive"
406 default y 416 default y
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index d18ffef44b8c..d4c6122a342f 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -62,6 +62,7 @@ obj-$(CONFIG_MACH_PALMT5) += palmt5.o
62obj-$(CONFIG_MACH_PALMTX) += palmtx.o 62obj-$(CONFIG_MACH_PALMTX) += palmtx.o
63obj-$(CONFIG_MACH_PALMLD) += palmld.o 63obj-$(CONFIG_MACH_PALMLD) += palmld.o
64obj-$(CONFIG_MACH_PALMZ72) += palmz72.o 64obj-$(CONFIG_MACH_PALMZ72) += palmz72.o
65obj-$(CONFIG_MACH_TREO680) += treo680.o
65obj-$(CONFIG_ARCH_VIPER) += viper.o 66obj-$(CONFIG_ARCH_VIPER) += viper.o
66 67
67ifeq ($(CONFIG_MACH_ZYLONITE),y) 68ifeq ($(CONFIG_MACH_ZYLONITE),y)
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
index 962dda2e154a..5363e1aea3fb 100644
--- a/arch/arm/mach-pxa/corgi.c
+++ b/arch/arm/mach-pxa/corgi.c
@@ -23,6 +23,7 @@
23#include <linux/pm.h> 23#include <linux/pm.h>
24#include <linux/gpio.h> 24#include <linux/gpio.h>
25#include <linux/backlight.h> 25#include <linux/backlight.h>
26#include <linux/i2c.h>
26#include <linux/io.h> 27#include <linux/io.h>
27#include <linux/spi/spi.h> 28#include <linux/spi/spi.h>
28#include <linux/spi/ads7846.h> 29#include <linux/spi/ads7846.h>
@@ -600,6 +601,10 @@ static struct platform_device *devices[] __initdata = {
600 &sharpsl_rom_device, 601 &sharpsl_rom_device,
601}; 602};
602 603
604static struct i2c_board_info __initdata corgi_i2c_devices[] = {
605 { I2C_BOARD_INFO("wm8731", 0x1b) },
606};
607
603static void corgi_poweroff(void) 608static void corgi_poweroff(void)
604{ 609{
605 if (!machine_is_corgi()) 610 if (!machine_is_corgi())
@@ -634,6 +639,7 @@ static void __init corgi_init(void)
634 pxa_set_mci_info(&corgi_mci_platform_data); 639 pxa_set_mci_info(&corgi_mci_platform_data);
635 pxa_set_ficp_info(&corgi_ficp_platform_data); 640 pxa_set_ficp_info(&corgi_ficp_platform_data);
636 pxa_set_i2c_info(NULL); 641 pxa_set_i2c_info(NULL);
642 i2c_register_board_info(0, ARRAY_AND_SIZE(corgi_i2c_devices));
637 643
638 platform_scoop_config = &corgi_pcmcia_config; 644 platform_scoop_config = &corgi_pcmcia_config;
639 645
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c
index 243e0802b5f4..9cd09465a0e8 100644
--- a/arch/arm/mach-pxa/em-x270.c
+++ b/arch/arm/mach-pxa/em-x270.c
@@ -30,6 +30,7 @@
30#include <linux/apm-emulation.h> 30#include <linux/apm-emulation.h>
31#include <linux/i2c.h> 31#include <linux/i2c.h>
32#include <linux/i2c/pca953x.h> 32#include <linux/i2c/pca953x.h>
33#include <linux/regulator/userspace-consumer.h>
33 34
34#include <media/soc_camera.h> 35#include <media/soc_camera.h>
35 36
@@ -735,6 +736,7 @@ static struct pxa2xx_spi_chip em_x270_libertas_chip = {
735 .rx_threshold = 1, 736 .rx_threshold = 1,
736 .tx_threshold = 1, 737 .tx_threshold = 1,
737 .timeout = 1000, 738 .timeout = 1000,
739 .gpio_cs = 14,
738}; 740};
739 741
740static unsigned long em_x270_libertas_pin_config[] = { 742static unsigned long em_x270_libertas_pin_config[] = {
@@ -803,7 +805,6 @@ static int em_x270_libertas_teardown(struct spi_device *spi)
803 805
804struct libertas_spi_platform_data em_x270_libertas_pdata = { 806struct libertas_spi_platform_data em_x270_libertas_pdata = {
805 .use_dummy_writes = 1, 807 .use_dummy_writes = 1,
806 .gpio_cs = 14,
807 .setup = em_x270_libertas_setup, 808 .setup = em_x270_libertas_setup,
808 .teardown = em_x270_libertas_teardown, 809 .teardown = em_x270_libertas_teardown,
809}; 810};
@@ -838,10 +839,14 @@ static void __init em_x270_init_spi(void)
838static inline void em_x270_init_spi(void) {} 839static inline void em_x270_init_spi(void) {}
839#endif 840#endif
840 841
841#if defined(CONFIG_SND_PXA2XX_AC97) || defined(CONFIG_SND_PXA2XX_AC97_MODULE) 842#if defined(CONFIG_SND_PXA2XX_LIB_AC97)
843static pxa2xx_audio_ops_t em_x270_ac97_info = {
844 .reset_gpio = 113,
845};
846
842static void __init em_x270_init_ac97(void) 847static void __init em_x270_init_ac97(void)
843{ 848{
844 pxa_set_ac97_info(NULL); 849 pxa_set_ac97_info(&em_x270_ac97_info);
845} 850}
846#else 851#else
847static inline void em_x270_init_ac97(void) {} 852static inline void em_x270_init_ac97(void) {}
@@ -1038,6 +1043,52 @@ static void __init em_x270_init_camera(void)
1038static inline void em_x270_init_camera(void) {} 1043static inline void em_x270_init_camera(void) {}
1039#endif 1044#endif
1040 1045
1046static struct regulator_bulk_data em_x270_gps_consumer_supply = {
1047 .supply = "vcc gps",
1048};
1049
1050static struct regulator_userspace_consumer_data em_x270_gps_consumer_data = {
1051 .name = "vcc gps",
1052 .num_supplies = 1,
1053 .supplies = &em_x270_gps_consumer_supply,
1054};
1055
1056static struct platform_device em_x270_gps_userspace_consumer = {
1057 .name = "reg-userspace-consumer",
1058 .id = 0,
1059 .dev = {
1060 .platform_data = &em_x270_gps_consumer_data,
1061 },
1062};
1063
1064static struct regulator_bulk_data em_x270_gprs_consumer_supply = {
1065 .supply = "vcc gprs",
1066};
1067
1068static struct regulator_userspace_consumer_data em_x270_gprs_consumer_data = {
1069 .name = "vcc gprs",
1070 .num_supplies = 1,
1071 .supplies = &em_x270_gprs_consumer_supply
1072};
1073
1074static struct platform_device em_x270_gprs_userspace_consumer = {
1075 .name = "reg-userspace-consumer",
1076 .id = 1,
1077 .dev = {
1078 .platform_data = &em_x270_gprs_consumer_data,
1079 }
1080};
1081
1082static struct platform_device *em_x270_userspace_consumers[] = {
1083 &em_x270_gps_userspace_consumer,
1084 &em_x270_gprs_userspace_consumer,
1085};
1086
1087static void __init em_x270_userspace_consumers_init(void)
1088{
1089 platform_add_devices(ARRAY_AND_SIZE(em_x270_userspace_consumers));
1090}
1091
1041/* DA9030 related initializations */ 1092/* DA9030 related initializations */
1042#define REGULATOR_CONSUMER(_name, _dev, _supply) \ 1093#define REGULATOR_CONSUMER(_name, _dev, _supply) \
1043 static struct regulator_consumer_supply _name##_consumers[] = { \ 1094 static struct regulator_consumer_supply _name##_consumers[] = { \
@@ -1047,11 +1098,11 @@ static inline void em_x270_init_camera(void) {}
1047 }, \ 1098 }, \
1048 } 1099 }
1049 1100
1050REGULATOR_CONSUMER(ldo3, NULL, "vcc gps"); 1101REGULATOR_CONSUMER(ldo3, &em_x270_gps_userspace_consumer.dev, "vcc gps");
1051REGULATOR_CONSUMER(ldo5, NULL, "vcc cam"); 1102REGULATOR_CONSUMER(ldo5, NULL, "vcc cam");
1052REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio"); 1103REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio");
1053REGULATOR_CONSUMER(ldo12, NULL, "vcc usb"); 1104REGULATOR_CONSUMER(ldo12, NULL, "vcc usb");
1054REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs"); 1105REGULATOR_CONSUMER(ldo19, &em_x270_gprs_userspace_consumer.dev, "vcc gprs");
1055 1106
1056#define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \ 1107#define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \
1057 static struct regulator_init_data _ldo##_data = { \ 1108 static struct regulator_init_data _ldo##_data = { \
@@ -1062,6 +1113,7 @@ REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs");
1062 .enabled = 0, \ 1113 .enabled = 0, \
1063 }, \ 1114 }, \
1064 .valid_ops_mask = _ops_mask, \ 1115 .valid_ops_mask = _ops_mask, \
1116 .apply_uV = 1, \
1065 }, \ 1117 }, \
1066 .num_consumer_supplies = ARRAY_SIZE(_ldo##_consumers), \ 1118 .num_consumer_supplies = ARRAY_SIZE(_ldo##_consumers), \
1067 .consumer_supplies = _ldo##_consumers, \ 1119 .consumer_supplies = _ldo##_consumers, \
@@ -1089,12 +1141,16 @@ struct power_supply_info em_x270_psy_info = {
1089 1141
1090static void em_x270_battery_low(void) 1142static void em_x270_battery_low(void)
1091{ 1143{
1144#if defined(CONFIG_APM_EMULATION)
1092 apm_queue_event(APM_LOW_BATTERY); 1145 apm_queue_event(APM_LOW_BATTERY);
1146#endif
1093} 1147}
1094 1148
1095static void em_x270_battery_critical(void) 1149static void em_x270_battery_critical(void)
1096{ 1150{
1151#if defined(CONFIG_APM_EMULATION)
1097 apm_queue_event(APM_CRITICAL_SUSPEND); 1152 apm_queue_event(APM_CRITICAL_SUSPEND);
1153#endif
1098} 1154}
1099 1155
1100struct da9030_battery_info em_x270_batterty_info = { 1156struct da9030_battery_info em_x270_batterty_info = {
@@ -1240,6 +1296,7 @@ static void __init em_x270_init(void)
1240 em_x270_init_spi(); 1296 em_x270_init_spi();
1241 em_x270_init_i2c(); 1297 em_x270_init_i2c();
1242 em_x270_init_camera(); 1298 em_x270_init_camera();
1299 em_x270_userspace_consumers_init();
1243} 1300}
1244 1301
1245MACHINE_START(EM_X270, "Compulab EM-X270") 1302MACHINE_START(EM_X270, "Compulab EM-X270")
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c
index 7fff467e84fc..81359d574f88 100644
--- a/arch/arm/mach-pxa/hx4700.c
+++ b/arch/arm/mach-pxa/hx4700.c
@@ -30,6 +30,7 @@
30#include <linux/pwm_backlight.h> 30#include <linux/pwm_backlight.h>
31#include <linux/regulator/bq24022.h> 31#include <linux/regulator/bq24022.h>
32#include <linux/regulator/machine.h> 32#include <linux/regulator/machine.h>
33#include <linux/regulator/max1586.h>
33#include <linux/spi/ads7846.h> 34#include <linux/spi/ads7846.h>
34#include <linux/spi/spi.h> 35#include <linux/spi/spi.h>
35#include <linux/usb/gpio_vbus.h> 36#include <linux/usb/gpio_vbus.h>
@@ -775,6 +776,45 @@ static struct platform_device strataflash = {
775}; 776};
776 777
777/* 778/*
779 * Maxim MAX1587A on PI2C
780 */
781
782static struct regulator_consumer_supply max1587a_consumer = {
783 .supply = "vcc_core",
784};
785
786static struct regulator_init_data max1587a_v3_info = {
787 .constraints = {
788 .name = "vcc_core range",
789 .min_uV = 900000,
790 .max_uV = 1705000,
791 .always_on = 1,
792 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
793 },
794 .num_consumer_supplies = 1,
795 .consumer_supplies = &max1587a_consumer,
796};
797
798static struct max1586_subdev_data max1587a_subdev = {
799 .name = "vcc_core",
800 .id = MAX1586_V3,
801 .platform_data = &max1587a_v3_info,
802};
803
804static struct max1586_platform_data max1587a_info = {
805 .num_subdevs = 1,
806 .subdevs = &max1587a_subdev,
807 .v3_gain = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
808};
809
810static struct i2c_board_info __initdata pi2c_board_info[] = {
811 {
812 I2C_BOARD_INFO("max1586", 0x14),
813 .platform_data = &max1587a_info,
814 },
815};
816
817/*
778 * PCMCIA 818 * PCMCIA
779 */ 819 */
780 820
@@ -828,6 +868,7 @@ static void __init hx4700_init(void)
828 pxa_set_ficp_info(&ficp_info); 868 pxa_set_ficp_info(&ficp_info);
829 pxa27x_set_i2c_power_info(NULL); 869 pxa27x_set_i2c_power_info(NULL);
830 pxa_set_i2c_info(NULL); 870 pxa_set_i2c_info(NULL);
871 i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info));
831 pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); 872 pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
832 spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); 873 spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
833 874
diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa300.h b/arch/arm/mach-pxa/include/mach/mfp-pxa300.h
index ae8441192ef0..7139e0dc26d1 100644
--- a/arch/arm/mach-pxa/include/mach/mfp-pxa300.h
+++ b/arch/arm/mach-pxa/include/mach/mfp-pxa300.h
@@ -567,9 +567,9 @@
567#define GPIO37_ULPI_DATA_OUT_7 MFP_CFG(GPIO37, AF3) 567#define GPIO37_ULPI_DATA_OUT_7 MFP_CFG(GPIO37, AF3)
568#define GPIO33_ULPI_OTG_INTR MFP_CFG(GPIO33, AF1) 568#define GPIO33_ULPI_OTG_INTR MFP_CFG(GPIO33, AF1)
569 569
570#define ULPI_DIR MFP_CFG_DRV(ULPI_DIR, MFP_AF0, MFP_DS01X) 570#define ULPI_DIR MFP_CFG_DRV(ULPI_DIR, AF0, DS01X)
571#define ULPI_NXT MFP_CFG_DRV(ULPI_NXT, MFP_AF0, MFP_DS01X) 571#define ULPI_NXT MFP_CFG_DRV(ULPI_NXT, AF0, DS01X)
572#define ULPI_STP MFP_CFG_DRV(ULPI_STP, MFP_AF0, MFP_DS01X) 572#define ULPI_STP MFP_CFG_DRV(ULPI_STP, AF0, DS01X)
573#endif /* CONFIG_CPU_PXA310 */ 573#endif /* CONFIG_CPU_PXA310 */
574 574
575#endif /* __ASM_ARCH_MFP_PXA300_H */ 575#endif /* __ASM_ARCH_MFP_PXA300_H */
diff --git a/arch/arm/mach-pxa/include/mach/palmz72.h b/arch/arm/mach-pxa/include/mach/palmz72.h
index 5032307ebf7d..2806ef69ba5a 100644
--- a/arch/arm/mach-pxa/include/mach/palmz72.h
+++ b/arch/arm/mach-pxa/include/mach/palmz72.h
@@ -21,7 +21,7 @@
21/* SD/MMC */ 21/* SD/MMC */
22#define GPIO_NR_PALMZ72_SD_DETECT_N 14 22#define GPIO_NR_PALMZ72_SD_DETECT_N 14
23#define GPIO_NR_PALMZ72_SD_POWER_N 98 23#define GPIO_NR_PALMZ72_SD_POWER_N 98
24#define GPIO_NR_PALMZ72_SD_RO 115 24#define GPIO_NR_PALMZ72_SD_RO 115
25 25
26/* Touchscreen */ 26/* Touchscreen */
27#define GPIO_NR_PALMZ72_WM9712_IRQ 27 27#define GPIO_NR_PALMZ72_WM9712_IRQ 27
@@ -31,8 +31,7 @@
31 31
32/* USB */ 32/* USB */
33#define GPIO_NR_PALMZ72_USB_DETECT_N 15 33#define GPIO_NR_PALMZ72_USB_DETECT_N 15
34#define GPIO_NR_PALMZ72_USB_POWER 95 34#define GPIO_NR_PALMZ72_USB_PULLUP 95
35#define GPIO_NR_PALMZ72_USB_PULLUP 12
36 35
37/* LCD/Backlight */ 36/* LCD/Backlight */
38#define GPIO_NR_PALMZ72_BL_POWER 20 37#define GPIO_NR_PALMZ72_BL_POWER 20
diff --git a/arch/arm/mach-pxa/include/mach/treo680.h b/arch/arm/mach-pxa/include/mach/treo680.h
new file mode 100644
index 000000000000..af443b24d99a
--- /dev/null
+++ b/arch/arm/mach-pxa/include/mach/treo680.h
@@ -0,0 +1,49 @@
1/*
2 * GPIOs and interrupts for Palm Treo 680 smartphone
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 */
9
10#ifndef _INCLUDE_TREO680_H_
11#define _INCLUDE_TREO680_H_
12
13/* GPIOs */
14#define GPIO_NR_TREO680_POWER_DETECT 0
15#define GPIO_NR_TREO680_AMP_EN 27
16#define GPIO_NR_TREO680_KEYB_BL 24
17#define GPIO_NR_TREO680_VIBRATE_EN 44
18#define GPIO_NR_TREO680_GREEN_LED 20
19#define GPIO_NR_TREO680_RED_LED 79
20#define GPIO_NR_TREO680_SD_DETECT_N 113
21#define GPIO_NR_TREO680_SD_READONLY 33
22#define GPIO_NR_TREO680_EP_DETECT_N 116
23#define GPIO_NR_TREO680_SD_POWER 42
24#define GPIO_NR_TREO680_USB_DETECT 1
25#define GPIO_NR_TREO680_USB_PULLUP 114
26#define GPIO_NR_TREO680_GSM_POWER 40
27#define GPIO_NR_TREO680_GSM_RESET 87
28#define GPIO_NR_TREO680_GSM_WAKE 57
29#define GPIO_NR_TREO680_GSM_HOST_WAKE 14
30#define GPIO_NR_TREO680_GSM_TRIGGER 10
31#define GPIO_NR_TREO680_BT_EN 43
32#define GPIO_NR_TREO680_IR_EN 115
33#define GPIO_NR_TREO680_IR_TXD 47
34#define GPIO_NR_TREO680_BL_POWER 38
35#define GPIO_NR_TREO680_LCD_POWER 25
36
37/* Various addresses */
38#define TREO680_PHYS_RAM_START 0xa0000000
39#define TREO680_PHYS_IO_START 0x40000000
40#define TREO680_STR_BASE 0xa2000000
41
42/* BACKLIGHT */
43#define TREO680_MAX_INTENSITY 254
44#define TREO680_DEFAULT_INTENSITY 160
45#define TREO680_LIMIT_MASK 0x7F
46#define TREO680_PRESCALER 63
47#define TREO680_PERIOD_NS 3500
48
49#endif
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
index 4dc8c2ec40a9..2d28132c725b 100644
--- a/arch/arm/mach-pxa/mioa701.c
+++ b/arch/arm/mach-pxa/mioa701.c
@@ -37,6 +37,7 @@
37#include <linux/wm97xx_batt.h> 37#include <linux/wm97xx_batt.h>
38#include <linux/mtd/physmap.h> 38#include <linux/mtd/physmap.h>
39#include <linux/usb/gpio_vbus.h> 39#include <linux/usb/gpio_vbus.h>
40#include <linux/regulator/max1586.h>
40 41
41#include <asm/mach-types.h> 42#include <asm/mach-types.h>
42#include <asm/mach/arch.h> 43#include <asm/mach/arch.h>
@@ -717,6 +718,38 @@ static struct wm97xx_batt_info mioa701_battery_data = {
717}; 718};
718 719
719/* 720/*
721 * Voltage regulation
722 */
723static struct regulator_consumer_supply max1586_consumers[] = {
724 {
725 .supply = "vcc_core",
726 }
727};
728
729static struct regulator_init_data max1586_v3_info = {
730 .constraints = {
731 .name = "vcc_core range",
732 .min_uV = 1000000,
733 .max_uV = 1705000,
734 .always_on = 1,
735 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
736 },
737 .num_consumer_supplies = ARRAY_SIZE(max1586_consumers),
738 .consumer_supplies = max1586_consumers,
739};
740
741static struct max1586_subdev_data max1586_subdevs[] = {
742 { .name = "vcc_core", .id = MAX1586_V3,
743 .platform_data = &max1586_v3_info },
744};
745
746static struct max1586_platform_data max1586_info = {
747 .subdevs = max1586_subdevs,
748 .num_subdevs = ARRAY_SIZE(max1586_subdevs),
749 .v3_gain = MAX1586_GAIN_NO_R24, /* 700..1475 mV */
750};
751
752/*
720 * Camera interface 753 * Camera interface
721 */ 754 */
722struct pxacamera_platform_data mioa701_pxacamera_platform_data = { 755struct pxacamera_platform_data mioa701_pxacamera_platform_data = {
@@ -725,6 +758,13 @@ struct pxacamera_platform_data mioa701_pxacamera_platform_data = {
725 .mclk_10khz = 5000, 758 .mclk_10khz = 5000,
726}; 759};
727 760
761static struct i2c_board_info __initdata mioa701_pi2c_devices[] = {
762 {
763 I2C_BOARD_INFO("max1586", 0x14),
764 .platform_data = &max1586_info,
765 },
766};
767
728static struct soc_camera_link iclink = { 768static struct soc_camera_link iclink = {
729 .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */ 769 .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */
730}; 770};
@@ -825,7 +865,9 @@ static void __init mioa701_machine_init(void)
825 platform_add_devices(devices, ARRAY_SIZE(devices)); 865 platform_add_devices(devices, ARRAY_SIZE(devices));
826 gsm_init(); 866 gsm_init();
827 867
868 i2c_register_board_info(1, ARRAY_AND_SIZE(mioa701_pi2c_devices));
828 pxa_set_i2c_info(&i2c_pdata); 869 pxa_set_i2c_info(&i2c_pdata);
870 pxa27x_set_i2c_power_info(NULL);
829 pxa_set_camera_info(&mioa701_pxacamera_platform_data); 871 pxa_set_camera_info(&mioa701_pxacamera_platform_data);
830 i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices)); 872 i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices));
831} 873}
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c
index ed70f281dd09..169fcc18154e 100644
--- a/arch/arm/mach-pxa/palmld.c
+++ b/arch/arm/mach-pxa/palmld.c
@@ -128,6 +128,10 @@ static unsigned long palmld_pin_config[] __initdata = {
128 GPIO38_GPIO, /* wifi ready */ 128 GPIO38_GPIO, /* wifi ready */
129 GPIO81_GPIO, /* wifi reset */ 129 GPIO81_GPIO, /* wifi reset */
130 130
131 /* FFUART */
132 GPIO34_FFUART_RXD,
133 GPIO39_FFUART_TXD,
134
131 /* HDD */ 135 /* HDD */
132 GPIO98_GPIO, /* HDD reset */ 136 GPIO98_GPIO, /* HDD reset */
133 GPIO115_GPIO, /* HDD power */ 137 GPIO115_GPIO, /* HDD power */
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c
index aae64a12a734..33f726ff55e5 100644
--- a/arch/arm/mach-pxa/palmt5.c
+++ b/arch/arm/mach-pxa/palmt5.c
@@ -111,6 +111,10 @@ static unsigned long palmt5_pin_config[] __initdata = {
111 /* PWM */ 111 /* PWM */
112 GPIO16_PWM0_OUT, 112 GPIO16_PWM0_OUT,
113 113
114 /* FFUART */
115 GPIO34_FFUART_RXD,
116 GPIO39_FFUART_TXD,
117
114 /* MISC */ 118 /* MISC */
115 GPIO10_GPIO, /* hotsync button */ 119 GPIO10_GPIO, /* hotsync button */
116 GPIO90_GPIO, /* power detect */ 120 GPIO90_GPIO, /* power detect */
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c
index 6c15d84bde53..83d020879581 100644
--- a/arch/arm/mach-pxa/palmtx.c
+++ b/arch/arm/mach-pxa/palmtx.c
@@ -127,6 +127,10 @@ static unsigned long palmtx_pin_config[] __initdata = {
127 GPIO76_LCD_PCLK, 127 GPIO76_LCD_PCLK,
128 GPIO77_LCD_BIAS, 128 GPIO77_LCD_BIAS,
129 129
130 /* FFUART */
131 GPIO34_FFUART_RXD,
132 GPIO39_FFUART_TXD,
133
130 /* MISC. */ 134 /* MISC. */
131 GPIO10_GPIO, /* hotsync button */ 135 GPIO10_GPIO, /* hotsync button */
132 GPIO12_GPIO, /* power detect */ 136 GPIO12_GPIO, /* power detect */
diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c
index b88eb4dd2c84..c3645aa3fa3d 100644
--- a/arch/arm/mach-pxa/palmz72.c
+++ b/arch/arm/mach-pxa/palmz72.c
@@ -27,7 +27,9 @@
27#include <linux/pda_power.h> 27#include <linux/pda_power.h>
28#include <linux/pwm_backlight.h> 28#include <linux/pwm_backlight.h>
29#include <linux/gpio.h> 29#include <linux/gpio.h>
30#include <linux/wm97xx_batt.h>
30#include <linux/power_supply.h> 31#include <linux/power_supply.h>
32#include <linux/usb/gpio_vbus.h>
31 33
32#include <asm/mach-types.h> 34#include <asm/mach-types.h>
33#include <asm/mach/arch.h> 35#include <asm/mach/arch.h>
@@ -41,6 +43,8 @@
41#include <mach/irda.h> 43#include <mach/irda.h>
42#include <mach/pxa27x_keypad.h> 44#include <mach/pxa27x_keypad.h>
43#include <mach/udc.h> 45#include <mach/udc.h>
46#include <mach/palmasoc.h>
47
44#include <mach/pm.h> 48#include <mach/pm.h>
45 49
46#include "generic.h" 50#include "generic.h"
@@ -66,6 +70,8 @@ static unsigned long palmz72_pin_config[] __initdata = {
66 GPIO29_AC97_SDATA_IN_0, 70 GPIO29_AC97_SDATA_IN_0,
67 GPIO30_AC97_SDATA_OUT, 71 GPIO30_AC97_SDATA_OUT,
68 GPIO31_AC97_SYNC, 72 GPIO31_AC97_SYNC,
73 GPIO89_AC97_SYSCLK,
74 GPIO113_AC97_nRESET,
69 75
70 /* IrDA */ 76 /* IrDA */
71 GPIO49_GPIO, /* ir disable */ 77 GPIO49_GPIO, /* ir disable */
@@ -77,8 +83,7 @@ static unsigned long palmz72_pin_config[] __initdata = {
77 83
78 /* USB */ 84 /* USB */
79 GPIO15_GPIO, /* usb detect */ 85 GPIO15_GPIO, /* usb detect */
80 GPIO12_GPIO, /* usb pullup */ 86 GPIO95_GPIO, /* usb pullup */
81 GPIO95_GPIO, /* usb power */
82 87
83 /* Matrix keypad */ 88 /* Matrix keypad */
84 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, 89 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
@@ -355,6 +360,22 @@ static struct platform_device palmz72_leds = {
355}; 360};
356 361
357/****************************************************************************** 362/******************************************************************************
363 * UDC
364 ******************************************************************************/
365static struct gpio_vbus_mach_info palmz72_udc_info = {
366 .gpio_vbus = GPIO_NR_PALMZ72_USB_DETECT_N,
367 .gpio_pullup = GPIO_NR_PALMZ72_USB_PULLUP,
368};
369
370static struct platform_device palmz72_gpio_vbus = {
371 .name = "gpio-vbus",
372 .id = -1,
373 .dev = {
374 .platform_data = &palmz72_udc_info,
375 },
376};
377
378/******************************************************************************
358 * Power supply 379 * Power supply
359 ******************************************************************************/ 380 ******************************************************************************/
360static int power_supply_init(struct device *dev) 381static int power_supply_init(struct device *dev)
@@ -422,6 +443,31 @@ static struct platform_device power_supply = {
422}; 443};
423 444
424/****************************************************************************** 445/******************************************************************************
446 * WM97xx battery
447 ******************************************************************************/
448static struct wm97xx_batt_info wm97xx_batt_pdata = {
449 .batt_aux = WM97XX_AUX_ID3,
450 .temp_aux = WM97XX_AUX_ID2,
451 .charge_gpio = -1,
452 .max_voltage = PALMZ72_BAT_MAX_VOLTAGE,
453 .min_voltage = PALMZ72_BAT_MIN_VOLTAGE,
454 .batt_mult = 1000,
455 .batt_div = 414,
456 .temp_mult = 1,
457 .temp_div = 1,
458 .batt_tech = POWER_SUPPLY_TECHNOLOGY_LIPO,
459 .batt_name = "main-batt",
460};
461
462/******************************************************************************
463 * aSoC audio
464 ******************************************************************************/
465static struct platform_device palmz72_asoc = {
466 .name = "palm27x-asoc",
467 .id = -1,
468};
469
470/******************************************************************************
425 * Framebuffer 471 * Framebuffer
426 ******************************************************************************/ 472 ******************************************************************************/
427static struct pxafb_mode_info palmz72_lcd_modes[] = { 473static struct pxafb_mode_info palmz72_lcd_modes[] = {
@@ -527,17 +573,32 @@ device_initcall(palmz72_pm_init);
527static struct platform_device *devices[] __initdata = { 573static struct platform_device *devices[] __initdata = {
528 &palmz72_backlight, 574 &palmz72_backlight,
529 &palmz72_leds, 575 &palmz72_leds,
576 &palmz72_asoc,
530 &power_supply, 577 &power_supply,
578 &palmz72_gpio_vbus,
531}; 579};
532 580
581/* setup udc GPIOs initial state */
582static void __init palmz72_udc_init(void)
583{
584 if (!gpio_request(GPIO_NR_PALMZ72_USB_PULLUP, "USB Pullup")) {
585 gpio_direction_output(GPIO_NR_PALMZ72_USB_PULLUP, 0);
586 gpio_free(GPIO_NR_PALMZ72_USB_PULLUP);
587 }
588}
589
533static void __init palmz72_init(void) 590static void __init palmz72_init(void)
534{ 591{
535 pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config)); 592 pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config));
593
536 set_pxa_fb_info(&palmz72_lcd_screen); 594 set_pxa_fb_info(&palmz72_lcd_screen);
537 pxa_set_mci_info(&palmz72_mci_platform_data); 595 pxa_set_mci_info(&palmz72_mci_platform_data);
596 palmz72_udc_init();
538 pxa_set_ac97_info(NULL); 597 pxa_set_ac97_info(NULL);
539 pxa_set_ficp_info(&palmz72_ficp_platform_data); 598 pxa_set_ficp_info(&palmz72_ficp_platform_data);
540 pxa_set_keypad_info(&palmz72_keypad_platform_data); 599 pxa_set_keypad_info(&palmz72_keypad_platform_data);
600 wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
601
541 platform_add_devices(devices, ARRAY_SIZE(devices)); 602 platform_add_devices(devices, ARRAY_SIZE(devices));
542} 603}
543 604
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index ac431ed10399..9352d4a34837 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -22,6 +22,7 @@
22#include <linux/delay.h> 22#include <linux/delay.h>
23#include <linux/mtd/physmap.h> 23#include <linux/mtd/physmap.h>
24#include <linux/gpio.h> 24#include <linux/gpio.h>
25#include <linux/i2c.h>
25#include <linux/spi/spi.h> 26#include <linux/spi/spi.h>
26#include <linux/spi/ads7846.h> 27#include <linux/spi/ads7846.h>
27#include <linux/mtd/sharpsl.h> 28#include <linux/mtd/sharpsl.h>
@@ -486,6 +487,10 @@ static struct platform_device *devices[] __initdata = {
486 &sharpsl_rom_device, 487 &sharpsl_rom_device,
487}; 488};
488 489
490static struct i2c_board_info __initdata poodle_i2c_devices[] = {
491 { I2C_BOARD_INFO("wm8731", 0x1b) },
492};
493
489static void poodle_poweroff(void) 494static void poodle_poweroff(void)
490{ 495{
491 arm_machine_restart('h', NULL); 496 arm_machine_restart('h', NULL);
@@ -519,6 +524,7 @@ static void __init poodle_init(void)
519 pxa_set_mci_info(&poodle_mci_platform_data); 524 pxa_set_mci_info(&poodle_mci_platform_data);
520 pxa_set_ficp_info(&poodle_ficp_platform_data); 525 pxa_set_ficp_info(&poodle_ficp_platform_data);
521 pxa_set_i2c_info(NULL); 526 pxa_set_i2c_info(NULL);
527 i2c_register_board_info(0, ARRAY_AND_SIZE(poodle_i2c_devices));
522 poodle_init_spi(); 528 poodle_init_spi();
523} 529}
524 530
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 6f678d93bf4e..09b7b1a10cad 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -250,7 +250,7 @@ static DEFINE_PXA3_CKEN(pxa3xx_mmc2, MMC2, 19500000, 0);
250static struct clk_lookup pxa3xx_clkregs[] = { 250static struct clk_lookup pxa3xx_clkregs[] = {
251 INIT_CLKREG(&clk_pxa3xx_pout, NULL, "CLK_POUT"), 251 INIT_CLKREG(&clk_pxa3xx_pout, NULL, "CLK_POUT"),
252 /* Power I2C clock is always on */ 252 /* Power I2C clock is always on */
253 INIT_CLKREG(&clk_dummy, "pxa2xx-i2c.1", NULL), 253 INIT_CLKREG(&clk_dummy, "pxa3xx-pwri2c.1", NULL),
254 INIT_CLKREG(&clk_pxa3xx_lcd, "pxa2xx-fb", NULL), 254 INIT_CLKREG(&clk_pxa3xx_lcd, "pxa2xx-fb", NULL),
255 INIT_CLKREG(&clk_pxa3xx_camera, NULL, "CAMCLK"), 255 INIT_CLKREG(&clk_pxa3xx_camera, NULL, "CAMCLK"),
256 INIT_CLKREG(&clk_pxa3xx_ac97, NULL, "AC97CLK"), 256 INIT_CLKREG(&clk_pxa3xx_ac97, NULL, "AC97CLK"),
diff --git a/arch/arm/mach-pxa/treo680.c b/arch/arm/mach-pxa/treo680.c
new file mode 100644
index 000000000000..753ec4df17b9
--- /dev/null
+++ b/arch/arm/mach-pxa/treo680.c
@@ -0,0 +1,612 @@
1/*
2 * Hardware definitions for Palm Treo 680
3 *
4 * Author: Tomas Cech <sleep_walker@suse.cz>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * (find more info at www.hackndev.com)
11 *
12 */
13
14#include <linux/platform_device.h>
15#include <linux/delay.h>
16#include <linux/irq.h>
17#include <linux/gpio_keys.h>
18#include <linux/input.h>
19#include <linux/pda_power.h>
20#include <linux/pwm_backlight.h>
21#include <linux/gpio.h>
22#include <linux/wm97xx_batt.h>
23#include <linux/power_supply.h>
24#include <linux/sysdev.h>
25#include <linux/w1-gpio.h>
26
27#include <asm/mach-types.h>
28#include <asm/mach/arch.h>
29#include <asm/mach/map.h>
30
31#include <mach/pxa27x.h>
32#include <mach/pxa27x-udc.h>
33#include <mach/audio.h>
34#include <mach/treo680.h>
35#include <mach/mmc.h>
36#include <mach/pxafb.h>
37#include <mach/irda.h>
38#include <mach/pxa27x_keypad.h>
39#include <mach/udc.h>
40#include <mach/ohci.h>
41#include <mach/pxa2xx-regs.h>
42#include <mach/palmasoc.h>
43#include <mach/camera.h>
44
45#include <sound/pxa2xx-lib.h>
46
47#include "generic.h"
48#include "devices.h"
49
50/******************************************************************************
51 * Pin configuration
52 ******************************************************************************/
53static unsigned long treo680_pin_config[] __initdata = {
54 /* MMC */
55 GPIO32_MMC_CLK,
56 GPIO92_MMC_DAT_0,
57 GPIO109_MMC_DAT_1,
58 GPIO110_MMC_DAT_2,
59 GPIO111_MMC_DAT_3,
60 GPIO112_MMC_CMD,
61 GPIO33_GPIO, /* SD read only */
62 GPIO113_GPIO, /* SD detect */
63
64 /* AC97 */
65 GPIO28_AC97_BITCLK,
66 GPIO29_AC97_SDATA_IN_0,
67 GPIO30_AC97_SDATA_OUT,
68 GPIO31_AC97_SYNC,
69 GPIO89_AC97_SYSCLK,
70 GPIO95_AC97_nRESET,
71
72 /* IrDA */
73 GPIO46_FICP_RXD,
74 GPIO47_FICP_TXD,
75
76 /* PWM */
77 GPIO16_PWM0_OUT,
78
79 /* USB */
80 GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, /* usb detect */
81
82 /* MATRIX KEYPAD */
83 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
84 GPIO101_KP_MKIN_1,
85 GPIO102_KP_MKIN_2,
86 GPIO97_KP_MKIN_3,
87 GPIO98_KP_MKIN_4,
88 GPIO99_KP_MKIN_5,
89 GPIO91_KP_MKIN_6,
90 GPIO13_KP_MKIN_7,
91 GPIO103_KP_MKOUT_0 | MFP_LPM_DRIVE_HIGH,
92 GPIO104_KP_MKOUT_1,
93 GPIO105_KP_MKOUT_2,
94 GPIO106_KP_MKOUT_3,
95 GPIO107_KP_MKOUT_4,
96 GPIO108_KP_MKOUT_5,
97 GPIO96_KP_MKOUT_6,
98 GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */
99
100 /* LCD */
101 GPIO58_LCD_LDD_0,
102 GPIO59_LCD_LDD_1,
103 GPIO60_LCD_LDD_2,
104 GPIO61_LCD_LDD_3,
105 GPIO62_LCD_LDD_4,
106 GPIO63_LCD_LDD_5,
107 GPIO64_LCD_LDD_6,
108 GPIO65_LCD_LDD_7,
109 GPIO66_LCD_LDD_8,
110 GPIO67_LCD_LDD_9,
111 GPIO68_LCD_LDD_10,
112 GPIO69_LCD_LDD_11,
113 GPIO70_LCD_LDD_12,
114 GPIO71_LCD_LDD_13,
115 GPIO72_LCD_LDD_14,
116 GPIO73_LCD_LDD_15,
117 GPIO74_LCD_FCLK,
118 GPIO75_LCD_LCLK,
119 GPIO76_LCD_PCLK,
120
121 /* Quick Capture Interface */
122 GPIO84_CIF_FV,
123 GPIO85_CIF_LV,
124 GPIO53_CIF_MCLK,
125 GPIO54_CIF_PCLK,
126 GPIO81_CIF_DD_0,
127 GPIO55_CIF_DD_1,
128 GPIO51_CIF_DD_2,
129 GPIO50_CIF_DD_3,
130 GPIO52_CIF_DD_4,
131 GPIO48_CIF_DD_5,
132 GPIO17_CIF_DD_6,
133 GPIO12_CIF_DD_7,
134
135 /* I2C */
136 GPIO117_I2C_SCL,
137 GPIO118_I2C_SDA,
138
139 /* GSM */
140 GPIO14_GPIO | WAKEUP_ON_EDGE_BOTH, /* GSM host wake up */
141 GPIO34_FFUART_RXD,
142 GPIO35_FFUART_CTS,
143 GPIO39_FFUART_TXD,
144 GPIO41_FFUART_RTS,
145
146 /* MISC. */
147 GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH, /* external power detect */
148 GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH, /* silent switch */
149 GPIO116_GPIO, /* headphone detect */
150 GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH, /* bluetooth host wake up */
151};
152
153/******************************************************************************
154 * SD/MMC card controller
155 ******************************************************************************/
156static int treo680_mci_init(struct device *dev,
157 irq_handler_t treo680_detect_int, void *data)
158{
159 int err = 0;
160
161 /* Setup an interrupt for detecting card insert/remove events */
162 err = gpio_request(GPIO_NR_TREO680_SD_DETECT_N, "SD IRQ");
163
164 if (err)
165 goto err;
166
167 err = gpio_direction_input(GPIO_NR_TREO680_SD_DETECT_N);
168 if (err)
169 goto err2;
170
171 err = request_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N),
172 treo680_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
173 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
174 "SD/MMC card detect", data);
175
176 if (err) {
177 dev_err(dev, "%s: cannot request SD/MMC card detect IRQ\n",
178 __func__);
179 goto err2;
180 }
181
182 err = gpio_request(GPIO_NR_TREO680_SD_POWER, "SD_POWER");
183 if (err)
184 goto err3;
185
186 err = gpio_direction_output(GPIO_NR_TREO680_SD_POWER, 1);
187 if (err)
188 goto err4;
189
190 err = gpio_request(GPIO_NR_TREO680_SD_READONLY, "SD_READONLY");
191 if (err)
192 goto err4;
193
194 err = gpio_direction_input(GPIO_NR_TREO680_SD_READONLY);
195 if (err)
196 goto err5;
197
198 return 0;
199
200err5:
201 gpio_free(GPIO_NR_TREO680_SD_READONLY);
202err4:
203 gpio_free(GPIO_NR_TREO680_SD_POWER);
204err3:
205 free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
206err2:
207 gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
208err:
209 return err;
210}
211
212static void treo680_mci_exit(struct device *dev, void *data)
213{
214 gpio_free(GPIO_NR_TREO680_SD_READONLY);
215 gpio_free(GPIO_NR_TREO680_SD_POWER);
216 free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
217 gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
218}
219
220static void treo680_mci_power(struct device *dev, unsigned int vdd)
221{
222 struct pxamci_platform_data *p_d = dev->platform_data;
223 gpio_set_value(GPIO_NR_TREO680_SD_POWER, p_d->ocr_mask & (1 << vdd));
224}
225
226static int treo680_mci_get_ro(struct device *dev)
227{
228 return gpio_get_value(GPIO_NR_TREO680_SD_READONLY);
229}
230
231static struct pxamci_platform_data treo680_mci_platform_data = {
232 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
233 .setpower = treo680_mci_power,
234 .get_ro = treo680_mci_get_ro,
235 .init = treo680_mci_init,
236 .exit = treo680_mci_exit,
237};
238
239/******************************************************************************
240 * GPIO keyboard
241 ******************************************************************************/
242static unsigned int treo680_matrix_keys[] = {
243 KEY(0, 0, KEY_F8), /* Red/Off/Power */
244 KEY(0, 1, KEY_LEFT),
245 KEY(0, 2, KEY_LEFTCTRL), /* Alternate */
246 KEY(0, 3, KEY_L),
247 KEY(0, 4, KEY_A),
248 KEY(0, 5, KEY_Q),
249 KEY(0, 6, KEY_P),
250
251 KEY(1, 0, KEY_RIGHTCTRL), /* Menu */
252 KEY(1, 1, KEY_RIGHT),
253 KEY(1, 2, KEY_LEFTSHIFT), /* Left shift */
254 KEY(1, 3, KEY_Z),
255 KEY(1, 4, KEY_S),
256 KEY(1, 5, KEY_W),
257
258 KEY(2, 0, KEY_F1), /* Phone */
259 KEY(2, 1, KEY_UP),
260 KEY(2, 2, KEY_0),
261 KEY(2, 3, KEY_X),
262 KEY(2, 4, KEY_D),
263 KEY(2, 5, KEY_E),
264
265 KEY(3, 0, KEY_F10), /* Calendar */
266 KEY(3, 1, KEY_DOWN),
267 KEY(3, 2, KEY_SPACE),
268 KEY(3, 3, KEY_C),
269 KEY(3, 4, KEY_F),
270 KEY(3, 5, KEY_R),
271
272 KEY(4, 0, KEY_F12), /* Mail */
273 KEY(4, 1, KEY_KPENTER),
274 KEY(4, 2, KEY_RIGHTALT), /* Alt */
275 KEY(4, 3, KEY_V),
276 KEY(4, 4, KEY_G),
277 KEY(4, 5, KEY_T),
278
279 KEY(5, 0, KEY_F9), /* Home */
280 KEY(5, 1, KEY_PAGEUP), /* Side up */
281 KEY(5, 2, KEY_DOT),
282 KEY(5, 3, KEY_B),
283 KEY(5, 4, KEY_H),
284 KEY(5, 5, KEY_Y),
285
286 KEY(6, 0, KEY_TAB), /* Side Activate */
287 KEY(6, 1, KEY_PAGEDOWN), /* Side down */
288 KEY(6, 2, KEY_ENTER),
289 KEY(6, 3, KEY_N),
290 KEY(6, 4, KEY_J),
291 KEY(6, 5, KEY_U),
292
293 KEY(7, 0, KEY_F6), /* Green/Call */
294 KEY(7, 1, KEY_O),
295 KEY(7, 2, KEY_BACKSPACE),
296 KEY(7, 3, KEY_M),
297 KEY(7, 4, KEY_K),
298 KEY(7, 5, KEY_I),
299};
300
301static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = {
302 .matrix_key_rows = 8,
303 .matrix_key_cols = 7,
304 .matrix_key_map = treo680_matrix_keys,
305 .matrix_key_map_size = ARRAY_SIZE(treo680_matrix_keys),
306 .direct_key_map = { KEY_CONNECT },
307 .direct_key_num = 1,
308
309 .debounce_interval = 30,
310};
311
312/******************************************************************************
313 * aSoC audio
314 ******************************************************************************/
315
316static pxa2xx_audio_ops_t treo680_ac97_pdata = {
317 .reset_gpio = 95,
318};
319
320/******************************************************************************
321 * Backlight
322 ******************************************************************************/
323static int treo680_backlight_init(struct device *dev)
324{
325 int ret;
326
327 ret = gpio_request(GPIO_NR_TREO680_BL_POWER, "BL POWER");
328 if (ret)
329 goto err;
330 ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0);
331 if (ret)
332 goto err2;
333 ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER");
334 if (ret)
335 goto err2;
336 ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0);
337 if (ret)
338 goto err3;
339
340 return 0;
341err3:
342 gpio_free(GPIO_NR_TREO680_LCD_POWER);
343err2:
344 gpio_free(GPIO_NR_TREO680_BL_POWER);
345err:
346 return ret;
347}
348
349static int treo680_backlight_notify(int brightness)
350{
351 gpio_set_value(GPIO_NR_TREO680_BL_POWER, brightness);
352 return TREO680_MAX_INTENSITY - brightness;
353};
354
355static void treo680_backlight_exit(struct device *dev)
356{
357 gpio_free(GPIO_NR_TREO680_BL_POWER);
358 gpio_free(GPIO_NR_TREO680_LCD_POWER);
359}
360
361static struct platform_pwm_backlight_data treo680_backlight_data = {
362 .pwm_id = 0,
363 .max_brightness = TREO680_MAX_INTENSITY,
364 .dft_brightness = TREO680_DEFAULT_INTENSITY,
365 .pwm_period_ns = TREO680_PERIOD_NS,
366 .init = treo680_backlight_init,
367 .notify = treo680_backlight_notify,
368 .exit = treo680_backlight_exit,
369};
370
371static struct platform_device treo680_backlight = {
372 .name = "pwm-backlight",
373 .dev = {
374 .parent = &pxa27x_device_pwm0.dev,
375 .platform_data = &treo680_backlight_data,
376 },
377};
378
379/******************************************************************************
380 * IrDA
381 ******************************************************************************/
382static void treo680_transceiver_mode(struct device *dev, int mode)
383{
384 gpio_set_value(GPIO_NR_TREO680_IR_EN, mode & IR_OFF);
385 pxa2xx_transceiver_mode(dev, mode);
386}
387
388static int treo680_irda_startup(struct device *dev)
389{
390 int err;
391
392 err = gpio_request(GPIO_NR_TREO680_IR_EN, "Ir port disable");
393 if (err)
394 goto err1;
395
396 err = gpio_direction_output(GPIO_NR_TREO680_IR_EN, 1);
397 if (err)
398 goto err2;
399
400 return 0;
401
402err2:
403 dev_err(dev, "treo680_irda: cannot change IR gpio direction\n");
404 gpio_free(GPIO_NR_TREO680_IR_EN);
405err1:
406 dev_err(dev, "treo680_irda: cannot allocate IR gpio\n");
407 return err;
408}
409
410static void treo680_irda_shutdown(struct device *dev)
411{
412 gpio_free(GPIO_NR_TREO680_IR_EN);
413}
414
415static struct pxaficp_platform_data treo680_ficp_info = {
416 .transceiver_cap = IR_FIRMODE | IR_SIRMODE | IR_OFF,
417 .startup = treo680_irda_startup,
418 .shutdown = treo680_irda_shutdown,
419 .transceiver_mode = treo680_transceiver_mode,
420};
421
422/******************************************************************************
423 * UDC
424 ******************************************************************************/
425static struct pxa2xx_udc_mach_info treo680_udc_info __initdata = {
426 .gpio_vbus = GPIO_NR_TREO680_USB_DETECT,
427 .gpio_vbus_inverted = 1,
428 .gpio_pullup = GPIO_NR_TREO680_USB_PULLUP,
429};
430
431
432/******************************************************************************
433 * USB host
434 ******************************************************************************/
435static struct pxaohci_platform_data treo680_ohci_info = {
436 .port_mode = PMM_PERPORT_MODE,
437 .flags = ENABLE_PORT1 | ENABLE_PORT3,
438 .power_budget = 0,
439};
440
441/******************************************************************************
442 * Power supply
443 ******************************************************************************/
444static int power_supply_init(struct device *dev)
445{
446 int ret;
447
448 ret = gpio_request(GPIO_NR_TREO680_POWER_DETECT, "CABLE_STATE_AC");
449 if (ret)
450 goto err1;
451 ret = gpio_direction_input(GPIO_NR_TREO680_POWER_DETECT);
452 if (ret)
453 goto err2;
454
455 return 0;
456
457err2:
458 gpio_free(GPIO_NR_TREO680_POWER_DETECT);
459err1:
460 return ret;
461}
462
463static int treo680_is_ac_online(void)
464{
465 return gpio_get_value(GPIO_NR_TREO680_POWER_DETECT);
466}
467
468static void power_supply_exit(struct device *dev)
469{
470 gpio_free(GPIO_NR_TREO680_POWER_DETECT);
471}
472
473static char *treo680_supplicants[] = {
474 "main-battery",
475};
476
477static struct pda_power_pdata power_supply_info = {
478 .init = power_supply_init,
479 .is_ac_online = treo680_is_ac_online,
480 .exit = power_supply_exit,
481 .supplied_to = treo680_supplicants,
482 .num_supplicants = ARRAY_SIZE(treo680_supplicants),
483};
484
485static struct platform_device power_supply = {
486 .name = "pda-power",
487 .id = -1,
488 .dev = {
489 .platform_data = &power_supply_info,
490 },
491};
492
493/******************************************************************************
494 * Vibra and LEDs
495 ******************************************************************************/
496static struct gpio_led gpio_leds[] = {
497 {
498 .name = "treo680:vibra:vibra",
499 .default_trigger = "none",
500 .gpio = GPIO_NR_TREO680_VIBRATE_EN,
501 },
502 {
503 .name = "treo680:green:led",
504 .default_trigger = "mmc0",
505 .gpio = GPIO_NR_TREO680_GREEN_LED,
506 },
507 {
508 .name = "treo680:keybbl:keybbl",
509 .default_trigger = "none",
510 .gpio = GPIO_NR_TREO680_KEYB_BL,
511 },
512};
513
514static struct gpio_led_platform_data gpio_led_info = {
515 .leds = gpio_leds,
516 .num_leds = ARRAY_SIZE(gpio_leds),
517};
518
519static struct platform_device treo680_leds = {
520 .name = "leds-gpio",
521 .id = -1,
522 .dev = {
523 .platform_data = &gpio_led_info,
524 }
525};
526
527
528/******************************************************************************
529 * Framebuffer
530 ******************************************************************************/
531/* TODO: add support for 324x324 */
532static struct pxafb_mode_info treo680_lcd_modes[] = {
533{
534 .pixclock = 86538,
535 .xres = 320,
536 .yres = 320,
537 .bpp = 16,
538
539 .left_margin = 20,
540 .right_margin = 8,
541 .upper_margin = 8,
542 .lower_margin = 5,
543
544 .hsync_len = 4,
545 .vsync_len = 1,
546},
547};
548
549static struct pxafb_mach_info treo680_lcd_screen = {
550 .modes = treo680_lcd_modes,
551 .num_modes = ARRAY_SIZE(treo680_lcd_modes),
552 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
553};
554
555/******************************************************************************
556 * Power management - standby
557 ******************************************************************************/
558static void __init treo680_pm_init(void)
559{
560 static u32 resume[] = {
561 0xe3a00101, /* mov r0, #0x40000000 */
562 0xe380060f, /* orr r0, r0, #0x00f00000 */
563 0xe590f008, /* ldr pc, [r0, #0x08] */
564 };
565
566 /* this is where the bootloader jumps */
567 memcpy(phys_to_virt(TREO680_STR_BASE), resume, sizeof(resume));
568}
569
570/******************************************************************************
571 * Machine init
572 ******************************************************************************/
573static struct platform_device *devices[] __initdata = {
574 &treo680_backlight,
575 &treo680_leds,
576 &power_supply,
577};
578
579/* setup udc GPIOs initial state */
580static void __init treo680_udc_init(void)
581{
582 if (!gpio_request(GPIO_NR_TREO680_USB_PULLUP, "UDC Vbus")) {
583 gpio_direction_output(GPIO_NR_TREO680_USB_PULLUP, 1);
584 gpio_free(GPIO_NR_TREO680_USB_PULLUP);
585 }
586}
587
588static void __init treo680_init(void)
589{
590 treo680_pm_init();
591 pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
592 pxa_set_keypad_info(&treo680_keypad_platform_data);
593 set_pxa_fb_info(&treo680_lcd_screen);
594 pxa_set_mci_info(&treo680_mci_platform_data);
595 treo680_udc_init();
596 pxa_set_udc_info(&treo680_udc_info);
597 pxa_set_ac97_info(&treo680_ac97_pdata);
598 pxa_set_ficp_info(&treo680_ficp_info);
599 pxa_set_ohci_info(&treo680_ohci_info);
600
601 platform_add_devices(devices, ARRAY_SIZE(devices));
602}
603
604MACHINE_START(TREO680, "Palm Treo 680")
605 .phys_io = TREO680_PHYS_IO_START,
606 .io_pg_offst = io_p2v(0x40000000),
607 .boot_params = 0xa0000100,
608 .map_io = pxa_map_io,
609 .init_irq = pxa27x_init_irq,
610 .timer = &pxa_timer,
611 .init_machine = treo680_init,
612MACHINE_END
diff --git a/arch/arm/mach-pxa/zylonite_pxa300.c b/arch/arm/mach-pxa/zylonite_pxa300.c
index cefd1c0a854a..84095440a878 100644
--- a/arch/arm/mach-pxa/zylonite_pxa300.c
+++ b/arch/arm/mach-pxa/zylonite_pxa300.c
@@ -197,10 +197,12 @@ static void __init zylonite_detect_lcd_panel(void)
197 for (i = 0; i < NUM_LCD_DETECT_PINS; i++) { 197 for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
198 id = id << 1; 198 id = id << 1;
199 gpio = mfp_to_gpio(lcd_detect_pins[i]); 199 gpio = mfp_to_gpio(lcd_detect_pins[i]);
200 gpio_request(gpio, "LCD_ID_PINS");
200 gpio_direction_input(gpio); 201 gpio_direction_input(gpio);
201 202
202 if (gpio_get_value(gpio)) 203 if (gpio_get_value(gpio))
203 id = id | 0x1; 204 id = id | 0x1;
205 gpio_free(gpio);
204 } 206 }
205 207
206 /* lcd id, flush out bit 1 */ 208 /* lcd id, flush out bit 1 */
diff --git a/arch/arm/mach-pxa/zylonite_pxa320.c b/arch/arm/mach-pxa/zylonite_pxa320.c
index cc5a22833605..60d08f23f5e4 100644
--- a/arch/arm/mach-pxa/zylonite_pxa320.c
+++ b/arch/arm/mach-pxa/zylonite_pxa320.c
@@ -176,10 +176,12 @@ static void __init zylonite_detect_lcd_panel(void)
176 for (i = 0; i < NUM_LCD_DETECT_PINS; i++) { 176 for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
177 id = id << 1; 177 id = id << 1;
178 gpio = mfp_to_gpio(lcd_detect_pins[i]); 178 gpio = mfp_to_gpio(lcd_detect_pins[i]);
179 gpio_request(gpio, "LCD_ID_PINS");
179 gpio_direction_input(gpio); 180 gpio_direction_input(gpio);
180 181
181 if (gpio_get_value(gpio)) 182 if (gpio_get_value(gpio))
182 id = id | 0x1; 183 id = id | 0x1;
184 gpio_free(gpio);
183 } 185 }
184 186
185 /* lcd id, flush out bit 1 */ 187 /* lcd id, flush out bit 1 */
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c
index 9ea9c05093cd..facbd49eec67 100644
--- a/arch/arm/mach-realview/core.c
+++ b/arch/arm/mach-realview/core.c
@@ -208,8 +208,7 @@ struct platform_device realview_i2c_device = {
208 208
209static struct i2c_board_info realview_i2c_board_info[] = { 209static struct i2c_board_info realview_i2c_board_info[] = {
210 { 210 {
211 I2C_BOARD_INFO("rtc-ds1307", 0xd0 >> 1), 211 I2C_BOARD_INFO("ds1338", 0xd0 >> 1),
212 .type = "ds1338",
213 }, 212 },
214}; 213};
215 214
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c
index 1fe294d0bf9d..ede2a57240a3 100644
--- a/arch/arm/mach-realview/realview_pbx.c
+++ b/arch/arm/mach-realview/realview_pbx.c
@@ -27,6 +27,7 @@
27#include <asm/irq.h> 27#include <asm/irq.h>
28#include <asm/leds.h> 28#include <asm/leds.h>
29#include <asm/mach-types.h> 29#include <asm/mach-types.h>
30#include <asm/smp_twd.h>
30#include <asm/hardware/gic.h> 31#include <asm/hardware/gic.h>
31#include <asm/hardware/cache-l2x0.h> 32#include <asm/hardware/cache-l2x0.h>
32 33
diff --git a/arch/arm/mach-s3c2410/include/mach/gpio-core.h b/arch/arm/mach-s3c2410/include/mach/gpio-core.h
index 8fe192081d3a..f8b879a7973c 100644
--- a/arch/arm/mach-s3c2410/include/mach/gpio-core.h
+++ b/arch/arm/mach-s3c2410/include/mach/gpio-core.h
@@ -28,7 +28,7 @@ static inline struct s3c_gpio_chip *s3c_gpiolib_getchip(unsigned int pin)
28 return NULL; 28 return NULL;
29 29
30 chip = &s3c24xx_gpios[pin/32]; 30 chip = &s3c24xx_gpios[pin/32];
31 return (S3C2410_GPIO_OFFSET(pin) > chip->chip.ngpio) ? chip : NULL; 31 return (S3C2410_GPIO_OFFSET(pin) < chip->chip.ngpio) ? chip : NULL;
32} 32}
33 33
34#endif /* __ASM_ARCH_GPIO_CORE_H */ 34#endif /* __ASM_ARCH_GPIO_CORE_H */
diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c
index 6cd9377ddb82..50e25fc5f8ab 100644
--- a/arch/arm/mach-s3c2410/usb-simtec.c
+++ b/arch/arm/mach-s3c2410/usb-simtec.c
@@ -22,7 +22,6 @@
22#include <linux/timer.h> 22#include <linux/timer.h>
23#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/device.h> 24#include <linux/device.h>
25#include <linux/gpio.h>
26#include <linux/io.h> 25#include <linux/io.h>
27 26
28#include <asm/mach/arch.h> 27#include <asm/mach/arch.h>
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig
index 5df73cbf2b40..8cfeaec37306 100644
--- a/arch/arm/mach-s3c2440/Kconfig
+++ b/arch/arm/mach-s3c2440/Kconfig
@@ -84,5 +84,15 @@ config MACH_AT2440EVB
84 help 84 help
85 Say Y here if you are using the AT2440EVB development board 85 Say Y here if you are using the AT2440EVB development board
86 86
87config MACH_MINI2440
88 bool "MINI2440 development board"
89 select CPU_S3C2440
90 select EEPROM_AT24
91 select LEDS_TRIGGER_BACKLIGHT
92 select SND_S3C24XX_SOC_S3C24XX_UDA134X
93 help
94 Say Y here to select support for the MINI2440. Is a 10cm x 10cm board
95 available via various sources. It can come with a 3.5" or 7" touch LCD.
96
87endmenu 97endmenu
88 98
diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile
index 0b4440e79b90..bfadcf684a2a 100644
--- a/arch/arm/mach-s3c2440/Makefile
+++ b/arch/arm/mach-s3c2440/Makefile
@@ -22,3 +22,4 @@ obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o
22obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o 22obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o
23obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o 23obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
24obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o 24obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o
25obj-$(CONFIG_MACH_MINI2440) += mach-mini2440.o
diff --git a/arch/arm/mach-s3c2440/mach-mini2440.c b/arch/arm/mach-s3c2440/mach-mini2440.c
new file mode 100644
index 000000000000..ec71a6965786
--- /dev/null
+++ b/arch/arm/mach-s3c2440/mach-mini2440.c
@@ -0,0 +1,702 @@
1/* linux/arch/arm/mach-s3c2440/mach-mini2440.c
2 *
3 * Copyright (c) 2008 Ramax Lo <ramaxlo@gmail.com>
4 * Based on mach-anubis.c by Ben Dooks <ben@simtec.co.uk>
5 * and modifications by SBZ <sbz@spgui.org> and
6 * Weibing <http://weibing.blogbus.com> and
7 * Michel Pollet <buserror@gmail.com>
8 *
9 * For product information, visit http://code.google.com/p/mini2440/
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14*/
15
16#include <linux/kernel.h>
17#include <linux/types.h>
18#include <linux/interrupt.h>
19#include <linux/list.h>
20#include <linux/timer.h>
21#include <linux/init.h>
22#include <linux/gpio.h>
23#include <linux/input.h>
24#include <linux/io.h>
25#include <linux/serial_core.h>
26#include <linux/dm9000.h>
27#include <linux/i2c/at24.h>
28#include <linux/platform_device.h>
29#include <linux/gpio_keys.h>
30#include <linux/i2c.h>
31#include <linux/mmc/host.h>
32
33#include <asm/mach/arch.h>
34#include <asm/mach/map.h>
35
36#include <mach/hardware.h>
37#include <mach/fb.h>
38#include <asm/mach-types.h>
39
40#include <plat/regs-serial.h>
41#include <mach/regs-gpio.h>
42#include <mach/leds-gpio.h>
43#include <mach/regs-mem.h>
44#include <mach/regs-lcd.h>
45#include <mach/irqs.h>
46#include <plat/nand.h>
47#include <plat/iic.h>
48#include <plat/mci.h>
49#include <plat/udc.h>
50
51#include <linux/mtd/mtd.h>
52#include <linux/mtd/nand.h>
53#include <linux/mtd/nand_ecc.h>
54#include <linux/mtd/partitions.h>
55
56#include <plat/clock.h>
57#include <plat/devs.h>
58#include <plat/cpu.h>
59
60#include <sound/s3c24xx_uda134x.h>
61
62#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)
63
64static struct map_desc mini2440_iodesc[] __initdata = {
65 /* nothing to declare, move along */
66};
67
68#define UCON S3C2410_UCON_DEFAULT
69#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
70#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
71
72
73static struct s3c2410_uartcfg mini2440_uartcfgs[] __initdata = {
74 [0] = {
75 .hwport = 0,
76 .flags = 0,
77 .ucon = UCON,
78 .ulcon = ULCON,
79 .ufcon = UFCON,
80 },
81 [1] = {
82 .hwport = 1,
83 .flags = 0,
84 .ucon = UCON,
85 .ulcon = ULCON,
86 .ufcon = UFCON,
87 },
88 [2] = {
89 .hwport = 2,
90 .flags = 0,
91 .ucon = UCON,
92 .ulcon = ULCON,
93 .ufcon = UFCON,
94 },
95};
96
97/* USB device UDC support */
98
99static void mini2440_udc_pullup(enum s3c2410_udc_cmd_e cmd)
100{
101 pr_debug("udc: pullup(%d)\n", cmd);
102
103 switch (cmd) {
104 case S3C2410_UDC_P_ENABLE :
105 s3c2410_gpio_setpin(S3C2410_GPC(5), 1);
106 break;
107 case S3C2410_UDC_P_DISABLE :
108 s3c2410_gpio_setpin(S3C2410_GPC(5), 0);
109 break;
110 case S3C2410_UDC_P_RESET :
111 break;
112 default:
113 break;
114 }
115}
116
117static struct s3c2410_udc_mach_info mini2440_udc_cfg __initdata = {
118 .udc_command = mini2440_udc_pullup,
119};
120
121
122/* LCD timing and setup */
123
124/*
125 * This macro simplifies the table bellow
126 */
127#define _LCD_DECLARE(_clock,_xres,margin_left,margin_right,hsync, \
128 _yres,margin_top,margin_bottom,vsync, refresh) \
129 .width = _xres, \
130 .xres = _xres, \
131 .height = _yres, \
132 .yres = _yres, \
133 .left_margin = margin_left, \
134 .right_margin = margin_right, \
135 .upper_margin = margin_top, \
136 .lower_margin = margin_bottom, \
137 .hsync_len = hsync, \
138 .vsync_len = vsync, \
139 .pixclock = ((_clock*100000000000LL) / \
140 ((refresh) * \
141 (hsync + margin_left + _xres + margin_right) * \
142 (vsync + margin_top + _yres + margin_bottom))), \
143 .bpp = 16,\
144 .type = (S3C2410_LCDCON1_TFT16BPP |\
145 S3C2410_LCDCON1_TFT)
146
147struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = {
148 [0] = { /* mini2440 + 3.5" TFT + touchscreen */
149 _LCD_DECLARE(
150 7, /* The 3.5 is quite fast */
151 240, 21, 38, 6, /* x timing */
152 320, 4, 4, 2, /* y timing */
153 60), /* refresh rate */
154 .lcdcon5 = (S3C2410_LCDCON5_FRM565 |
155 S3C2410_LCDCON5_INVVLINE |
156 S3C2410_LCDCON5_INVVFRAME |
157 S3C2410_LCDCON5_INVVDEN |
158 S3C2410_LCDCON5_PWREN),
159 },
160 [1] = { /* mini2440 + 7" TFT + touchscreen */
161 _LCD_DECLARE(
162 10, /* the 7" runs slower */
163 800, 40, 40, 48, /* x timing */
164 480, 29, 3, 3, /* y timing */
165 50), /* refresh rate */
166 .lcdcon5 = (S3C2410_LCDCON5_FRM565 |
167 S3C2410_LCDCON5_INVVLINE |
168 S3C2410_LCDCON5_INVVFRAME |
169 S3C2410_LCDCON5_PWREN),
170 },
171 /* The VGA shield can outout at several resolutions. All share
172 * the same timings, however, anything smaller than 1024x768
173 * will only be displayed in the top left corner of a 1024x768
174 * XGA output unless you add optional dip switches to the shield.
175 * Therefore timings for other resolutions have been ommited here.
176 */
177 [2] = {
178 _LCD_DECLARE(
179 10,
180 1024, 1, 2, 2, /* y timing */
181 768, 200, 16, 16, /* x timing */
182 24), /* refresh rate, maximum stable,
183 tested with the FPGA shield */
184 .lcdcon5 = (S3C2410_LCDCON5_FRM565 |
185 S3C2410_LCDCON5_HWSWP),
186 },
187};
188
189/* todo - put into gpio header */
190
191#define S3C2410_GPCCON_MASK(x) (3 << ((x) * 2))
192#define S3C2410_GPDCON_MASK(x) (3 << ((x) * 2))
193
194struct s3c2410fb_mach_info mini2440_fb_info __initdata = {
195 .displays = &mini2440_lcd_cfg[0], /* not constant! see init */
196 .num_displays = 1,
197 .default_display = 0,
198
199 /* Enable VD[2..7], VD[10..15], VD[18..23] and VCLK, syncs, VDEN
200 * and disable the pull down resistors on pins we are using for LCD
201 * data. */
202
203 .gpcup = (0xf << 1) | (0x3f << 10),
204
205 .gpccon = (S3C2410_GPC1_VCLK | S3C2410_GPC2_VLINE |
206 S3C2410_GPC3_VFRAME | S3C2410_GPC4_VM |
207 S3C2410_GPC10_VD2 | S3C2410_GPC11_VD3 |
208 S3C2410_GPC12_VD4 | S3C2410_GPC13_VD5 |
209 S3C2410_GPC14_VD6 | S3C2410_GPC15_VD7),
210
211 .gpccon_mask = (S3C2410_GPCCON_MASK(1) | S3C2410_GPCCON_MASK(2) |
212 S3C2410_GPCCON_MASK(3) | S3C2410_GPCCON_MASK(4) |
213 S3C2410_GPCCON_MASK(10) | S3C2410_GPCCON_MASK(11) |
214 S3C2410_GPCCON_MASK(12) | S3C2410_GPCCON_MASK(13) |
215 S3C2410_GPCCON_MASK(14) | S3C2410_GPCCON_MASK(15)),
216
217 .gpdup = (0x3f << 2) | (0x3f << 10),
218
219 .gpdcon = (S3C2410_GPD2_VD10 | S3C2410_GPD3_VD11 |
220 S3C2410_GPD4_VD12 | S3C2410_GPD5_VD13 |
221 S3C2410_GPD6_VD14 | S3C2410_GPD7_VD15 |
222 S3C2410_GPD10_VD18 | S3C2410_GPD11_VD19 |
223 S3C2410_GPD12_VD20 | S3C2410_GPD13_VD21 |
224 S3C2410_GPD14_VD22 | S3C2410_GPD15_VD23),
225
226 .gpdcon_mask = (S3C2410_GPDCON_MASK(2) | S3C2410_GPDCON_MASK(3) |
227 S3C2410_GPDCON_MASK(4) | S3C2410_GPDCON_MASK(5) |
228 S3C2410_GPDCON_MASK(6) | S3C2410_GPDCON_MASK(7) |
229 S3C2410_GPDCON_MASK(10) | S3C2410_GPDCON_MASK(11)|
230 S3C2410_GPDCON_MASK(12) | S3C2410_GPDCON_MASK(13)|
231 S3C2410_GPDCON_MASK(14) | S3C2410_GPDCON_MASK(15)),
232};
233
234/* MMC/SD */
235
236static struct s3c24xx_mci_pdata mini2440_mmc_cfg __initdata = {
237 .gpio_detect = S3C2410_GPG(8),
238 .gpio_wprotect = S3C2410_GPH(8),
239 .set_power = NULL,
240 .ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34,
241};
242
243/* NAND Flash on MINI2440 board */
244
245static struct mtd_partition mini2440_default_nand_part[] __initdata = {
246 [0] = {
247 .name = "u-boot",
248 .size = SZ_256K,
249 .offset = 0,
250 },
251 [1] = {
252 .name = "u-boot-env",
253 .size = SZ_128K,
254 .offset = SZ_256K,
255 },
256 [2] = {
257 .name = "kernel",
258 /* 5 megabytes, for a kernel with no modules
259 * or a uImage with a ramdisk attached */
260 .size = 0x00500000,
261 .offset = SZ_256K + SZ_128K,
262 },
263 [3] = {
264 .name = "root",
265 .offset = SZ_256K + SZ_128K + 0x00500000,
266 .size = MTDPART_SIZ_FULL,
267 },
268};
269
270static struct s3c2410_nand_set mini2440_nand_sets[] __initdata = {
271 [0] = {
272 .name = "nand",
273 .nr_chips = 1,
274 .nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),
275 .partitions = mini2440_default_nand_part,
276 .flash_bbt = 1, /* we use u-boot to create a BBT */
277 },
278};
279
280static struct s3c2410_platform_nand mini2440_nand_info __initdata = {
281 .tacls = 0,
282 .twrph0 = 25,
283 .twrph1 = 15,
284 .nr_sets = ARRAY_SIZE(mini2440_nand_sets),
285 .sets = mini2440_nand_sets,
286 .ignore_unset_ecc = 1,
287};
288
289/* DM9000AEP 10/100 ethernet controller */
290
291static struct resource mini2440_dm9k_resource[] __initdata = {
292 [0] = {
293 .start = MACH_MINI2440_DM9K_BASE,
294 .end = MACH_MINI2440_DM9K_BASE + 3,
295 .flags = IORESOURCE_MEM
296 },
297 [1] = {
298 .start = MACH_MINI2440_DM9K_BASE + 4,
299 .end = MACH_MINI2440_DM9K_BASE + 7,
300 .flags = IORESOURCE_MEM
301 },
302 [2] = {
303 .start = IRQ_EINT7,
304 .end = IRQ_EINT7,
305 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
306 }
307};
308
309/*
310 * The DM9000 has no eeprom, and it's MAC address is set by
311 * the bootloader before starting the kernel.
312 */
313static struct dm9000_plat_data mini2440_dm9k_pdata __initdata = {
314 .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
315};
316
317static struct platform_device mini2440_device_eth __initdata = {
318 .name = "dm9000",
319 .id = -1,
320 .num_resources = ARRAY_SIZE(mini2440_dm9k_resource),
321 .resource = mini2440_dm9k_resource,
322 .dev = {
323 .platform_data = &mini2440_dm9k_pdata,
324 },
325};
326
327/* CON5
328 * +--+ /-----\
329 * | | | |
330 * | | | BAT |
331 * | | \_____/
332 * | |
333 * | | +----+ +----+
334 * | | | K5 | | K1 |
335 * | | +----+ +----+
336 * | | +----+ +----+
337 * | | | K4 | | K2 |
338 * | | +----+ +----+
339 * | | +----+ +----+
340 * | | | K6 | | K3 |
341 * | | +----+ +----+
342 * .....
343 */
344static struct gpio_keys_button mini2440_buttons[] __initdata = {
345 {
346 .gpio = S3C2410_GPG(0), /* K1 */
347 .code = KEY_F1,
348 .desc = "Button 1",
349 .active_low = 1,
350 },
351 {
352 .gpio = S3C2410_GPG(3), /* K2 */
353 .code = KEY_F2,
354 .desc = "Button 2",
355 .active_low = 1,
356 },
357 {
358 .gpio = S3C2410_GPG(5), /* K3 */
359 .code = KEY_F3,
360 .desc = "Button 3",
361 .active_low = 1,
362 },
363 {
364 .gpio = S3C2410_GPG(6), /* K4 */
365 .code = KEY_POWER,
366 .desc = "Power",
367 .active_low = 1,
368 },
369 {
370 .gpio = S3C2410_GPG(7), /* K5 */
371 .code = KEY_F5,
372 .desc = "Button 5",
373 .active_low = 1,
374 },
375#if 0
376 /* this pin is also known as TCLK1 and seems to already
377 * marked as "in use" somehow in the kernel -- possibly wrongly */
378 {
379 .gpio = S3C2410_GPG(11), /* K6 */
380 .code = KEY_F6,
381 .desc = "Button 6",
382 .active_low = 1,
383 },
384#endif
385};
386
387static struct gpio_keys_platform_data mini2440_button_data __initdata = {
388 .buttons = mini2440_buttons,
389 .nbuttons = ARRAY_SIZE(mini2440_buttons),
390};
391
392static struct platform_device mini2440_button_device __initdata = {
393 .name = "gpio-keys",
394 .id = -1,
395 .dev = {
396 .platform_data = &mini2440_button_data,
397 }
398};
399
400/* LEDS */
401
402static struct s3c24xx_led_platdata mini2440_led1_pdata __initdata = {
403 .name = "led1",
404 .gpio = S3C2410_GPB(5),
405 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
406 .def_trigger = "heartbeat",
407};
408
409static struct s3c24xx_led_platdata mini2440_led2_pdata __initdata = {
410 .name = "led2",
411 .gpio = S3C2410_GPB(6),
412 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
413 .def_trigger = "nand-disk",
414};
415
416static struct s3c24xx_led_platdata mini2440_led3_pdata __initdata = {
417 .name = "led3",
418 .gpio = S3C2410_GPB(7),
419 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
420 .def_trigger = "mmc0",
421};
422
423static struct s3c24xx_led_platdata mini2440_led4_pdata __initdata = {
424 .name = "led4",
425 .gpio = S3C2410_GPB(8),
426 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
427 .def_trigger = "",
428};
429
430static struct s3c24xx_led_platdata mini2440_led_backlight_pdata __initdata = {
431 .name = "backlight",
432 .gpio = S3C2410_GPG(4),
433 .def_trigger = "backlight",
434};
435
436static struct platform_device mini2440_led1 __initdata = {
437 .name = "s3c24xx_led",
438 .id = 1,
439 .dev = {
440 .platform_data = &mini2440_led1_pdata,
441 },
442};
443
444static struct platform_device mini2440_led2 __initdata = {
445 .name = "s3c24xx_led",
446 .id = 2,
447 .dev = {
448 .platform_data = &mini2440_led2_pdata,
449 },
450};
451
452static struct platform_device mini2440_led3 __initdata = {
453 .name = "s3c24xx_led",
454 .id = 3,
455 .dev = {
456 .platform_data = &mini2440_led3_pdata,
457 },
458};
459
460static struct platform_device mini2440_led4 __initdata = {
461 .name = "s3c24xx_led",
462 .id = 4,
463 .dev = {
464 .platform_data = &mini2440_led4_pdata,
465 },
466};
467
468static struct platform_device mini2440_led_backlight __initdata = {
469 .name = "s3c24xx_led",
470 .id = 5,
471 .dev = {
472 .platform_data = &mini2440_led_backlight_pdata,
473 },
474};
475
476/* AUDIO */
477
478static struct s3c24xx_uda134x_platform_data mini2440_audio_pins __initdata = {
479 .l3_clk = S3C2410_GPB(4),
480 .l3_mode = S3C2410_GPB(2),
481 .l3_data = S3C2410_GPB(3),
482 .model = UDA134X_UDA1341
483};
484
485static struct platform_device mini2440_audio __initdata = {
486 .name = "s3c24xx_uda134x",
487 .id = 0,
488 .dev = {
489 .platform_data = &mini2440_audio_pins,
490 },
491};
492
493/*
494 * I2C devices
495 */
496static struct at24_platform_data at24c08 = {
497 .byte_len = SZ_8K / 8,
498 .page_size = 16,
499};
500
501static struct i2c_board_info mini2440_i2c_devs[] __initdata = {
502 {
503 I2C_BOARD_INFO("24c08", 0x50),
504 .platform_data = &at24c08,
505 },
506};
507
508static struct platform_device *mini2440_devices[] __initdata = {
509 &s3c_device_usb,
510 &s3c_device_wdt,
511/* &s3c_device_adc,*/ /* ADC doesn't like living with touchscreen ! */
512 &s3c_device_i2c0,
513 &s3c_device_rtc,
514 &s3c_device_usbgadget,
515 &mini2440_device_eth,
516 &mini2440_led1,
517 &mini2440_led2,
518 &mini2440_led3,
519 &mini2440_led4,
520 &mini2440_button_device,
521 &s3c_device_nand,
522 &s3c_device_sdi,
523 &s3c_device_iis,
524 &mini2440_audio,
525/* &s3c_device_timer[0],*/ /* buzzer pwm, no API for it */
526 /* remaining devices are optional */
527};
528
529static void __init mini2440_map_io(void)
530{
531 s3c24xx_init_io(mini2440_iodesc, ARRAY_SIZE(mini2440_iodesc));
532 s3c24xx_init_clocks(12000000);
533 s3c24xx_init_uarts(mini2440_uartcfgs, ARRAY_SIZE(mini2440_uartcfgs));
534
535 s3c_device_nand.dev.platform_data = &mini2440_nand_info;
536 s3c_device_sdi.dev.platform_data = &mini2440_mmc_cfg;
537}
538
539/*
540 * mini2440_features string
541 *
542 * t = Touchscreen present
543 * b = backlight control
544 * c = camera [TODO]
545 * 0-9 LCD configuration
546 *
547 */
548static char mini2440_features_str[12] __initdata = "0tb";
549
550static int __init mini2440_features_setup(char *str)
551{
552 if (str)
553 strlcpy(mini2440_features_str, str, sizeof(mini2440_features_str));
554 return 1;
555}
556
557__setup("mini2440=", mini2440_features_setup);
558
559#define FEATURE_SCREEN (1 << 0)
560#define FEATURE_BACKLIGHT (1 << 1)
561#define FEATURE_TOUCH (1 << 2)
562#define FEATURE_CAMERA (1 << 3)
563
564struct mini2440_features_t {
565 int count;
566 int done;
567 int lcd_index;
568 struct platform_device *optional[8];
569};
570
571static void mini2440_parse_features(
572 struct mini2440_features_t * features,
573 const char * features_str )
574{
575 const char * fp = features_str;
576
577 features->count = 0;
578 features->done = 0;
579 features->lcd_index = -1;
580
581 while (*fp) {
582 char f = *fp++;
583
584 switch (f) {
585 case '0'...'9': /* tft screen */
586 if (features->done & FEATURE_SCREEN) {
587 printk(KERN_INFO "MINI2440: '%c' ignored, "
588 "screen type already set\n", f);
589 } else {
590 int li = f - '0';
591 if (li >= ARRAY_SIZE(mini2440_lcd_cfg))
592 printk(KERN_INFO "MINI2440: "
593 "'%c' out of range LCD mode\n", f);
594 else {
595 features->optional[features->count++] =
596 &s3c_device_lcd;
597 features->lcd_index = li;
598 }
599 }
600 features->done |= FEATURE_SCREEN;
601 break;
602 case 'b':
603 if (features->done & FEATURE_BACKLIGHT)
604 printk(KERN_INFO "MINI2440: '%c' ignored, "
605 "backlight already set\n", f);
606 else {
607 features->optional[features->count++] =
608 &mini2440_led_backlight;
609 }
610 features->done |= FEATURE_BACKLIGHT;
611 break;
612 case 't':
613 printk(KERN_INFO "MINI2440: '%c' ignored, "
614 "touchscreen not compiled in\n", f);
615 break;
616 case 'c':
617 if (features->done & FEATURE_CAMERA)
618 printk(KERN_INFO "MINI2440: '%c' ignored, "
619 "camera already registered\n", f);
620 else
621 features->optional[features->count++] =
622 &s3c_device_camif;
623 features->done |= FEATURE_CAMERA;
624 break;
625 }
626 }
627}
628
629static void __init mini2440_init(void)
630{
631 struct mini2440_features_t features = { 0 };
632 int i;
633
634 printk(KERN_INFO "MINI2440: Option string mini2440=%s\n",
635 mini2440_features_str);
636
637 /* Parse the feature string */
638 mini2440_parse_features(&features, mini2440_features_str);
639
640 /* turn LCD on */
641 s3c2410_gpio_cfgpin(S3C2410_GPC(0), S3C2410_GPC0_LEND);
642
643 /* Turn the backlight early on */
644 s3c2410_gpio_setpin(S3C2410_GPG(4), 1);
645 s3c2410_gpio_cfgpin(S3C2410_GPG(4), S3C2410_GPIO_OUTPUT);
646
647 /* remove pullup on optional PWM backlight -- unused on 3.5 and 7"s */
648 s3c2410_gpio_pullup(S3C2410_GPB(1), 0);
649 s3c2410_gpio_setpin(S3C2410_GPB(1), 0);
650 s3c2410_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_INPUT);
651
652 /* Make sure the D+ pullup pin is output */
653 s3c2410_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT);
654
655 /* mark the key as input, without pullups (there is one on the board) */
656 for (i = 0; i < ARRAY_SIZE(mini2440_buttons); i++) {
657 s3c2410_gpio_pullup(mini2440_buttons[i].gpio, 0);
658 s3c2410_gpio_cfgpin(mini2440_buttons[i].gpio,
659 S3C2410_GPIO_INPUT);
660 }
661 if (features.lcd_index != -1) {
662 int li;
663
664 mini2440_fb_info.displays =
665 &mini2440_lcd_cfg[features.lcd_index];
666
667 printk(KERN_INFO "MINI2440: LCD");
668 for (li = 0; li < ARRAY_SIZE(mini2440_lcd_cfg); li++)
669 if (li == features.lcd_index)
670 printk(" [%d:%dx%d]", li,
671 mini2440_lcd_cfg[li].width,
672 mini2440_lcd_cfg[li].height);
673 else
674 printk(" %d:%dx%d", li,
675 mini2440_lcd_cfg[li].width,
676 mini2440_lcd_cfg[li].height);
677 printk("\n");
678 s3c24xx_fb_set_platdata(&mini2440_fb_info);
679 }
680 s3c24xx_udc_set_platdata(&mini2440_udc_cfg);
681 s3c_i2c0_set_platdata(NULL);
682 i2c_register_board_info(0, mini2440_i2c_devs,
683 ARRAY_SIZE(mini2440_i2c_devs));
684
685 platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));
686
687 if (features.count) /* the optional features */
688 platform_add_devices(features.optional, features.count);
689
690}
691
692
693MACHINE_START(MINI2440, "MINI2440")
694 /* Maintainer: Michel Pollet <buserror@gmail.com> */
695 .phys_io = S3C2410_PA_UART,
696 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
697 .boot_params = S3C2410_SDRAM_PA + 0x100,
698 .map_io = mini2440_map_io,
699 .init_machine = mini2440_init,
700 .init_irq = s3c24xx_init_irq,
701 .timer = &s3c24xx_timer,
702MACHINE_END
diff --git a/arch/arm/mach-s3c2442/Kconfig b/arch/arm/mach-s3c2442/Kconfig
index b289d198020e..103e913f2258 100644
--- a/arch/arm/mach-s3c2442/Kconfig
+++ b/arch/arm/mach-s3c2442/Kconfig
@@ -24,6 +24,18 @@ config SMDK2440_CPU2442
24 depends on ARCH_S3C2440 24 depends on ARCH_S3C2440
25 select CPU_S3C2442 25 select CPU_S3C2442
26 26
27config MACH_NEO1973_GTA02
28 bool "Openmoko GTA02 / Freerunner phone"
29 select CPU_S3C2442
30 select MFD_PCF50633
31 select PCF50633_GPIO
32 select I2C
33 select POWER_SUPPLY
34 select MACH_NEO1973
35 select S3C2410_PWM
36 help
37 Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone
38
27 39
28endmenu 40endmenu
29 41
diff --git a/arch/arm/mach-s3c2442/Makefile b/arch/arm/mach-s3c2442/Makefile
index 2a909c6c5798..2a19113a5769 100644
--- a/arch/arm/mach-s3c2442/Makefile
+++ b/arch/arm/mach-s3c2442/Makefile
@@ -12,5 +12,7 @@ obj- :=
12obj-$(CONFIG_CPU_S3C2442) += s3c2442.o 12obj-$(CONFIG_CPU_S3C2442) += s3c2442.o
13obj-$(CONFIG_CPU_S3C2442) += clock.o 13obj-$(CONFIG_CPU_S3C2442) += clock.o
14 14
15obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o
16
15# Machine support 17# Machine support
16 18
diff --git a/arch/arm/mach-s3c2442/include/mach/gta02.h b/arch/arm/mach-s3c2442/include/mach/gta02.h
new file mode 100644
index 000000000000..953331d8d56a
--- /dev/null
+++ b/arch/arm/mach-s3c2442/include/mach/gta02.h
@@ -0,0 +1,84 @@
1#ifndef _GTA02_H
2#define _GTA02_H
3
4#include <mach/regs-gpio.h>
5
6/* Different hardware revisions, passed in ATAG_REVISION by u-boot */
7#define GTA02v1_SYSTEM_REV 0x00000310
8#define GTA02v2_SYSTEM_REV 0x00000320
9#define GTA02v3_SYSTEM_REV 0x00000330
10#define GTA02v4_SYSTEM_REV 0x00000340
11#define GTA02v5_SYSTEM_REV 0x00000350
12/* since A7 is basically same as A6, we use A6 PCB ID */
13#define GTA02v6_SYSTEM_REV 0x00000360
14
15#define GTA02_GPIO_n3DL_GSM S3C2410_GPA(13) /* v1 + v2 + v3 only */
16
17#define GTA02_GPIO_PWR_LED1 S3C2410_GPB(0)
18#define GTA02_GPIO_PWR_LED2 S3C2410_GPB(1)
19#define GTA02_GPIO_AUX_LED S3C2410_GPB(2)
20#define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB(3)
21#define GTA02_GPIO_MODEM_RST S3C2410_GPB(5)
22#define GTA02_GPIO_BT_EN S3C2410_GPB(6)
23#define GTA02_GPIO_MODEM_ON S3C2410_GPB(7)
24#define GTA02_GPIO_EXTINT8 S3C2410_GPB(8)
25#define GTA02_GPIO_USB_PULLUP S3C2410_GPB(9)
26
27#define GTA02_GPIO_PIO5 S3C2410_GPC(5) /* v3 + v4 only */
28
29#define GTA02v3_GPIO_nG1_CS S3C2410_GPD(12) /* v3 + v4 only */
30#define GTA02v3_GPIO_nG2_CS S3C2410_GPD(13) /* v3 + v4 only */
31#define GTA02v5_GPIO_HDQ S3C2410_GPD(14) /* v5 + */
32
33#define GTA02_GPIO_nG1_INT S3C2410_GPF(0)
34#define GTA02_GPIO_IO1 S3C2410_GPF(1)
35#define GTA02_GPIO_PIO_2 S3C2410_GPF(2) /* v2 + v3 + v4 only */
36#define GTA02_GPIO_JACK_INSERT S3C2410_GPF(4)
37#define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF(5) /* v2 + v3 + v4 only */
38#define GTA02_GPIO_AUX_KEY S3C2410_GPF(6)
39#define GTA02_GPIO_HOLD_KEY S3C2410_GPF(7)
40
41#define GTA02_GPIO_3D_IRQ S3C2410_GPG(4)
42#define GTA02v2_GPIO_nG2_INT S3C2410_GPG(8) /* v2 + v3 + v4 only */
43#define GTA02v3_GPIO_nUSB_OC S3C2410_GPG(9) /* v3 + v4 only */
44#define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG(10) /* v3 + v4 only */
45#define GTA02v3_GPIO_nGSM_OC S3C2410_GPG(11) /* v3 + v4 only */
46
47#define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1 /* v2 + v3 + v4 only */
48#define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2
49#define GTA02_GPIO_HP_IN S3C2440_GPJ2 /* v2 + v3 + v4 only */
50#define GTA02_GPIO_INT0 S3C2440_GPJ3 /* v2 + v3 + v4 only */
51#define GTA02_GPIO_nGSM_EN S3C2440_GPJ4
52#define GTA02_GPIO_3D_RESET S3C2440_GPJ5
53#define GTA02_GPIO_nDL_GSM S3C2440_GPJ6 /* v4 + v5 only */
54#define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7
55#define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8
56#define GTA02_GPIO_KEEPACT S3C2440_GPJ8
57#define GTA02v1_GPIO_HP_IN S3C2440_GPJ10
58#define GTA02_CHIP_PWD S3C2440_GPJ11 /* v2 + v3 + v4 only */
59#define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12 /* v2 + v3 + v4 only */
60
61#define GTA02_IRQ_GSENSOR_1 IRQ_EINT0
62#define GTA02_IRQ_MODEM IRQ_EINT1
63#define GTA02_IRQ_PIO_2 IRQ_EINT2 /* v2 + v3 + v4 only */
64#define GTA02_IRQ_nJACK_INSERT IRQ_EINT4
65#define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5
66#define GTA02_IRQ_AUX IRQ_EINT6
67#define GTA02_IRQ_nHOLD IRQ_EINT7
68#define GTA02_IRQ_PCF50633 IRQ_EINT9
69#define GTA02_IRQ_3D IRQ_EINT12
70#define GTA02_IRQ_GSENSOR_2 IRQ_EINT16 /* v2 + v3 + v4 only */
71#define GTA02v3_IRQ_nUSB_OC IRQ_EINT17 /* v3 + v4 only */
72#define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18 /* v3 + v4 only */
73#define GTA02v3_IRQ_nGSM_OC IRQ_EINT19 /* v3 + v4 only */
74
75/* returns 00 000 on GTA02 A5 and earlier, A6 returns 01 001 */
76#define GTA02_PCB_ID1_0 S3C2410_GPC(13)
77#define GTA02_PCB_ID1_1 S3C2410_GPC(15)
78#define GTA02_PCB_ID1_2 S3C2410_GPD(0)
79#define GTA02_PCB_ID2_0 S3C2410_GPD(3)
80#define GTA02_PCB_ID2_1 S3C2410_GPD(4)
81
82int gta02_get_pcb_revision(void);
83
84#endif /* _GTA02_H */
diff --git a/arch/arm/mach-s3c2442/mach-gta02.c b/arch/arm/mach-s3c2442/mach-gta02.c
new file mode 100644
index 000000000000..0fb385bd9cd9
--- /dev/null
+++ b/arch/arm/mach-s3c2442/mach-gta02.c
@@ -0,0 +1,645 @@
1/*
2 * linux/arch/arm/mach-s3c2442/mach-gta02.c
3 *
4 * S3C2442 Machine Support for Openmoko GTA02 / FreeRunner.
5 *
6 * Copyright (C) 2006-2009 by Openmoko, Inc.
7 * Authors: Harald Welte <laforge@openmoko.org>
8 * Andy Green <andy@openmoko.org>
9 * Werner Almesberger <werner@openmoko.org>
10 * All rights reserved.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License as
14 * published by the Free Software Foundation; either version 2 of
15 * the License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
25 * MA 02111-1307 USA
26 *
27 */
28
29#include <linux/kernel.h>
30#include <linux/types.h>
31#include <linux/interrupt.h>
32#include <linux/list.h>
33#include <linux/delay.h>
34#include <linux/timer.h>
35#include <linux/init.h>
36#include <linux/gpio.h>
37#include <linux/workqueue.h>
38#include <linux/platform_device.h>
39#include <linux/serial_core.h>
40#include <linux/spi/spi.h>
41
42#include <linux/mmc/host.h>
43
44#include <linux/mtd/mtd.h>
45#include <linux/mtd/nand.h>
46#include <linux/mtd/nand_ecc.h>
47#include <linux/mtd/partitions.h>
48#include <linux/mtd/physmap.h>
49#include <linux/io.h>
50
51#include <linux/i2c.h>
52#include <linux/backlight.h>
53#include <linux/regulator/machine.h>
54
55#include <linux/mfd/pcf50633/core.h>
56#include <linux/mfd/pcf50633/mbc.h>
57#include <linux/mfd/pcf50633/adc.h>
58#include <linux/mfd/pcf50633/gpio.h>
59#include <linux/mfd/pcf50633/pmic.h>
60
61#include <asm/mach/arch.h>
62#include <asm/mach/map.h>
63#include <asm/mach/irq.h>
64
65#include <asm/irq.h>
66#include <asm/mach-types.h>
67
68#include <mach/regs-irq.h>
69#include <mach/regs-gpio.h>
70#include <mach/regs-gpioj.h>
71#include <mach/fb.h>
72
73#include <mach/spi.h>
74#include <mach/spi-gpio.h>
75#include <plat/usb-control.h>
76#include <mach/regs-mem.h>
77#include <mach/hardware.h>
78
79#include <mach/gta02.h>
80
81#include <plat/regs-serial.h>
82#include <plat/nand.h>
83#include <plat/devs.h>
84#include <plat/cpu.h>
85#include <plat/pm.h>
86#include <plat/udc.h>
87#include <plat/gpio-cfg.h>
88#include <plat/iic.h>
89
90static struct pcf50633 *gta02_pcf;
91
92/*
93 * This gets called every 1ms when we paniced.
94 */
95
96static long gta02_panic_blink(long count)
97{
98 long delay = 0;
99 static long last_blink;
100 static char led;
101
102 /* Fast blink: 200ms period. */
103 if (count - last_blink < 100)
104 return 0;
105
106 led ^= 1;
107 gpio_direction_output(GTA02_GPIO_AUX_LED, led);
108
109 last_blink = count;
110
111 return delay;
112}
113
114
115static struct map_desc gta02_iodesc[] __initdata = {
116 {
117 .virtual = 0xe0000000,
118 .pfn = __phys_to_pfn(S3C2410_CS3 + 0x01000000),
119 .length = SZ_1M,
120 .type = MT_DEVICE
121 },
122};
123
124#define UCON (S3C2410_UCON_DEFAULT | S3C2443_UCON_RXERR_IRQEN)
125#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB)
126#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
127
128static struct s3c2410_uartcfg gta02_uartcfgs[] = {
129 [0] = {
130 .hwport = 0,
131 .flags = 0,
132 .ucon = UCON,
133 .ulcon = ULCON,
134 .ufcon = UFCON,
135 },
136 [1] = {
137 .hwport = 1,
138 .flags = 0,
139 .ucon = UCON,
140 .ulcon = ULCON,
141 .ufcon = UFCON,
142 },
143 [2] = {
144 .hwport = 2,
145 .flags = 0,
146 .ucon = UCON,
147 .ulcon = ULCON,
148 .ufcon = UFCON,
149 },
150};
151
152#ifdef CONFIG_CHARGER_PCF50633
153/*
154 * On GTA02 the 1A charger features a 48K resistor to 0V on the ID pin.
155 * We use this to recognize that we can pull 1A from the USB socket.
156 *
157 * These constants are the measured pcf50633 ADC levels with the 1A
158 * charger / 48K resistor, and with no pulldown resistor.
159 */
160
161#define ADC_NOM_CHG_DETECT_1A 6
162#define ADC_NOM_CHG_DETECT_USB 43
163
164static void
165gta02_configure_pmu_for_charger(struct pcf50633 *pcf, void *unused, int res)
166{
167 int ma;
168
169 /* Interpret charger type */
170 if (res < ((ADC_NOM_CHG_DETECT_USB + ADC_NOM_CHG_DETECT_1A) / 2)) {
171
172 /*
173 * Sanity - stop GPO driving out now that we have a 1A charger
174 * GPO controls USB Host power generation on GTA02
175 */
176 pcf50633_gpio_set(pcf, PCF50633_GPO, 0);
177
178 ma = 1000;
179 } else
180 ma = 100;
181
182 pcf50633_mbc_usb_curlim_set(pcf, ma);
183}
184
185static struct delayed_work gta02_charger_work;
186static int gta02_usb_vbus_draw;
187
188static void gta02_charger_worker(struct work_struct *work)
189{
190 if (gta02_usb_vbus_draw) {
191 pcf50633_mbc_usb_curlim_set(gta02_pcf, gta02_usb_vbus_draw);
192 return;
193 }
194
195#ifdef CONFIG_PCF50633_ADC
196 pcf50633_adc_async_read(gta02_pcf,
197 PCF50633_ADCC1_MUX_ADCIN1,
198 PCF50633_ADCC1_AVERAGE_16,
199 gta02_configure_pmu_for_charger,
200 NULL);
201#else
202 /*
203 * If the PCF50633 ADC is disabled we fallback to a
204 * 100mA limit for safety.
205 */
206 pcf50633_mbc_usb_curlim_set(pcf, 100);
207#endif
208}
209
210#define GTA02_CHARGER_CONFIGURE_TIMEOUT ((3000 * HZ) / 1000)
211
212static void gta02_pmu_event_callback(struct pcf50633 *pcf, int irq)
213{
214 if (irq == PCF50633_IRQ_USBINS) {
215 schedule_delayed_work(&gta02_charger_work,
216 GTA02_CHARGER_CONFIGURE_TIMEOUT);
217
218 return;
219 }
220
221 if (irq == PCF50633_IRQ_USBREM) {
222 cancel_delayed_work_sync(&gta02_charger_work);
223 gta02_usb_vbus_draw = 0;
224 }
225}
226
227static void gta02_udc_vbus_draw(unsigned int ma)
228{
229 if (!gta02_pcf)
230 return;
231
232 gta02_usb_vbus_draw = ma;
233
234 schedule_delayed_work(&gta02_charger_work,
235 GTA02_CHARGER_CONFIGURE_TIMEOUT);
236}
237#else /* !CONFIG_CHARGER_PCF50633 */
238#define gta02_pmu_event_callback NULL
239#define gta02_udc_vbus_draw NULL
240#endif
241
242/*
243 * This is called when pc50633 is probed, unfortunately quite late in the
244 * day since it is an I2C bus device. Here we can belatedly define some
245 * platform devices with the advantage that we can mark the pcf50633 as the
246 * parent. This makes them get suspended and resumed with their parent
247 * the pcf50633 still around.
248 */
249
250static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf);
251
252
253static char *gta02_batteries[] = {
254 "battery",
255};
256
257struct pcf50633_platform_data gta02_pcf_pdata = {
258 .resumers = {
259 [0] = PCF50633_INT1_USBINS |
260 PCF50633_INT1_USBREM |
261 PCF50633_INT1_ALARM,
262 [1] = PCF50633_INT2_ONKEYF,
263 [2] = PCF50633_INT3_ONKEY1S,
264 [3] = PCF50633_INT4_LOWSYS |
265 PCF50633_INT4_LOWBAT |
266 PCF50633_INT4_HIGHTMP,
267 },
268
269 .batteries = gta02_batteries,
270 .num_batteries = ARRAY_SIZE(gta02_batteries),
271 .reg_init_data = {
272 [PCF50633_REGULATOR_AUTO] = {
273 .constraints = {
274 .min_uV = 3300000,
275 .max_uV = 3300000,
276 .valid_modes_mask = REGULATOR_MODE_NORMAL,
277 .always_on = 1,
278 .apply_uV = 1,
279 .state_mem = {
280 .enabled = 1,
281 },
282 },
283 },
284 [PCF50633_REGULATOR_DOWN1] = {
285 .constraints = {
286 .min_uV = 1300000,
287 .max_uV = 1600000,
288 .valid_modes_mask = REGULATOR_MODE_NORMAL,
289 .always_on = 1,
290 .apply_uV = 1,
291 },
292 },
293 [PCF50633_REGULATOR_DOWN2] = {
294 .constraints = {
295 .min_uV = 1800000,
296 .max_uV = 1800000,
297 .valid_modes_mask = REGULATOR_MODE_NORMAL,
298 .apply_uV = 1,
299 .always_on = 1,
300 .state_mem = {
301 .enabled = 1,
302 },
303 },
304 },
305 [PCF50633_REGULATOR_HCLDO] = {
306 .constraints = {
307 .min_uV = 2000000,
308 .max_uV = 3300000,
309 .valid_modes_mask = REGULATOR_MODE_NORMAL,
310 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
311 .always_on = 1,
312 },
313 },
314 [PCF50633_REGULATOR_LDO1] = {
315 .constraints = {
316 .min_uV = 3300000,
317 .max_uV = 3300000,
318 .valid_modes_mask = REGULATOR_MODE_NORMAL,
319 .apply_uV = 1,
320 .state_mem = {
321 .enabled = 0,
322 },
323 },
324 },
325 [PCF50633_REGULATOR_LDO2] = {
326 .constraints = {
327 .min_uV = 3300000,
328 .max_uV = 3300000,
329 .valid_modes_mask = REGULATOR_MODE_NORMAL,
330 .apply_uV = 1,
331 },
332 },
333 [PCF50633_REGULATOR_LDO3] = {
334 .constraints = {
335 .min_uV = 3000000,
336 .max_uV = 3000000,
337 .valid_modes_mask = REGULATOR_MODE_NORMAL,
338 .apply_uV = 1,
339 },
340 },
341 [PCF50633_REGULATOR_LDO4] = {
342 .constraints = {
343 .min_uV = 3200000,
344 .max_uV = 3200000,
345 .valid_modes_mask = REGULATOR_MODE_NORMAL,
346 .apply_uV = 1,
347 },
348 },
349 [PCF50633_REGULATOR_LDO5] = {
350 .constraints = {
351 .min_uV = 3000000,
352 .max_uV = 3000000,
353 .valid_modes_mask = REGULATOR_MODE_NORMAL,
354 .apply_uV = 1,
355 .state_mem = {
356 .enabled = 1,
357 },
358 },
359 },
360 [PCF50633_REGULATOR_LDO6] = {
361 .constraints = {
362 .min_uV = 3000000,
363 .max_uV = 3000000,
364 .valid_modes_mask = REGULATOR_MODE_NORMAL,
365 },
366 },
367 [PCF50633_REGULATOR_MEMLDO] = {
368 .constraints = {
369 .min_uV = 1800000,
370 .max_uV = 1800000,
371 .valid_modes_mask = REGULATOR_MODE_NORMAL,
372 .state_mem = {
373 .enabled = 1,
374 },
375 },
376 },
377
378 },
379 .probe_done = gta02_pmu_attach_child_devices,
380 .mbc_event_callback = gta02_pmu_event_callback,
381};
382
383
384/* NOR Flash. */
385
386#define GTA02_FLASH_BASE 0x18000000 /* GCS3 */
387#define GTA02_FLASH_SIZE 0x200000 /* 2MBytes */
388
389static struct physmap_flash_data gta02_nor_flash_data = {
390 .width = 2,
391};
392
393static struct resource gta02_nor_flash_resource = {
394 .start = GTA02_FLASH_BASE,
395 .end = GTA02_FLASH_BASE + GTA02_FLASH_SIZE - 1,
396 .flags = IORESOURCE_MEM,
397};
398
399static struct platform_device gta02_nor_flash = {
400 .name = "physmap-flash",
401 .id = 0,
402 .dev = {
403 .platform_data = &gta02_nor_flash_data,
404 },
405 .resource = &gta02_nor_flash_resource,
406 .num_resources = 1,
407};
408
409
410struct platform_device s3c24xx_pwm_device = {
411 .name = "s3c24xx_pwm",
412 .num_resources = 0,
413};
414
415static struct i2c_board_info gta02_i2c_devs[] __initdata = {
416 {
417 I2C_BOARD_INFO("pcf50633", 0x73),
418 .irq = GTA02_IRQ_PCF50633,
419 .platform_data = &gta02_pcf_pdata,
420 },
421 {
422 I2C_BOARD_INFO("wm8753", 0x1a),
423 },
424};
425
426static struct s3c2410_nand_set gta02_nand_sets[] = {
427 [0] = {
428 /*
429 * This name is also hard-coded in the boot loaders, so
430 * changing it would would require all users to upgrade
431 * their boot loaders, some of which are stored in a NOR
432 * that is considered to be immutable.
433 */
434 .name = "neo1973-nand",
435 .nr_chips = 1,
436 .flash_bbt = 1,
437 },
438};
439
440/*
441 * Choose a set of timings derived from S3C@2442B MCP54
442 * data sheet (K5D2G13ACM-D075 MCP Memory).
443 */
444
445static struct s3c2410_platform_nand gta02_nand_info = {
446 .tacls = 0,
447 .twrph0 = 25,
448 .twrph1 = 15,
449 .nr_sets = ARRAY_SIZE(gta02_nand_sets),
450 .sets = gta02_nand_sets,
451};
452
453
454static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd)
455{
456 switch (cmd) {
457 case S3C2410_UDC_P_ENABLE:
458 pr_debug("%s S3C2410_UDC_P_ENABLE\n", __func__);
459 gpio_direction_output(GTA02_GPIO_USB_PULLUP, 1);
460 break;
461 case S3C2410_UDC_P_DISABLE:
462 pr_debug("%s S3C2410_UDC_P_DISABLE\n", __func__);
463 gpio_direction_output(GTA02_GPIO_USB_PULLUP, 0);
464 break;
465 case S3C2410_UDC_P_RESET:
466 pr_debug("%s S3C2410_UDC_P_RESET\n", __func__);
467 /* FIXME: Do something here. */
468 }
469}
470
471/* Get PMU to set USB current limit accordingly. */
472static struct s3c2410_udc_mach_info gta02_udc_cfg = {
473 .vbus_draw = gta02_udc_vbus_draw,
474 .udc_command = gta02_udc_command,
475
476};
477
478
479
480static void gta02_bl_set_intensity(int intensity)
481{
482 struct pcf50633 *pcf = gta02_pcf;
483 int old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT);
484
485 /* We map 8-bit intensity to 6-bit intensity in hardware. */
486 intensity >>= 2;
487
488 /*
489 * This can happen during, eg, print of panic on blanked console,
490 * but we can't service i2c without interrupts active, so abort.
491 */
492 if (in_atomic()) {
493 printk(KERN_ERR "gta02_bl_set_intensity called while atomic\n");
494 return;
495 }
496
497 old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT);
498 if (intensity == old_intensity)
499 return;
500
501 /* We can't do this anywhere else. */
502 pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 5);
503
504 if (!(pcf50633_reg_read(pcf, PCF50633_REG_LEDENA) & 3))
505 old_intensity = 0;
506
507 /*
508 * The PCF50633 cannot handle LEDOUT = 0 (datasheet p60)
509 * if seen, you have to re-enable the LED unit.
510 */
511 if (!intensity || !old_intensity)
512 pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0);
513
514 /* Illegal to set LEDOUT to 0. */
515 if (!intensity)
516 pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 2);
517 else
518 pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f,
519 intensity);
520
521 if (intensity)
522 pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 2);
523
524}
525
526static struct generic_bl_info gta02_bl_info = {
527 .name = "gta02-bl",
528 .max_intensity = 0xff,
529 .default_intensity = 0xff,
530 .set_bl_intensity = gta02_bl_set_intensity,
531};
532
533static struct platform_device gta02_bl_dev = {
534 .name = "generic-bl",
535 .id = 1,
536 .dev = {
537 .platform_data = &gta02_bl_info,
538 },
539};
540
541
542
543/* USB */
544static struct s3c2410_hcd_info gta02_usb_info = {
545 .port[0] = {
546 .flags = S3C_HCDFLG_USED,
547 },
548 .port[1] = {
549 .flags = 0,
550 },
551};
552
553
554static void __init gta02_map_io(void)
555{
556 s3c24xx_init_io(gta02_iodesc, ARRAY_SIZE(gta02_iodesc));
557 s3c24xx_init_clocks(12000000);
558 s3c24xx_init_uarts(gta02_uartcfgs, ARRAY_SIZE(gta02_uartcfgs));
559}
560
561
562/* These are the guys that don't need to be children of PMU. */
563
564static struct platform_device *gta02_devices[] __initdata = {
565 &s3c_device_usb,
566 &s3c_device_wdt,
567 &s3c_device_sdi,
568 &s3c_device_usbgadget,
569 &s3c_device_nand,
570 &gta02_nor_flash,
571 &s3c24xx_pwm_device,
572 &s3c_device_iis,
573 &s3c_device_i2c0,
574};
575
576/* These guys DO need to be children of PMU. */
577
578static struct platform_device *gta02_devices_pmu_children[] = {
579 &gta02_bl_dev,
580};
581
582
583/*
584 * This is called when pc50633 is probed, quite late in the day since it is an
585 * I2C bus device. Here we can define platform devices with the advantage that
586 * we can mark the pcf50633 as the parent. This makes them get suspended and
587 * resumed with their parent the pcf50633 still around. All devices whose
588 * operation depends on something from pcf50633 must have this relationship
589 * made explicit like this, or suspend and resume will become an unreliable
590 * hellworld.
591 */
592
593static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf)
594{
595 int n;
596
597 /* Grab a copy of the now probed PMU pointer. */
598 gta02_pcf = pcf;
599
600 for (n = 0; n < ARRAY_SIZE(gta02_devices_pmu_children); n++)
601 gta02_devices_pmu_children[n]->dev.parent = pcf->dev;
602
603 platform_add_devices(gta02_devices_pmu_children,
604 ARRAY_SIZE(gta02_devices_pmu_children));
605}
606
607static void gta02_poweroff(void)
608{
609 pcf50633_reg_set_bit_mask(gta02_pcf, PCF50633_REG_OOCSHDWN, 1, 1);
610}
611
612static void __init gta02_machine_init(void)
613{
614 /* Set the panic callback to make AUX LED blink at ~5Hz. */
615 panic_blink = gta02_panic_blink;
616
617 s3c_pm_init();
618
619#ifdef CONFIG_CHARGER_PCF50633
620 INIT_DELAYED_WORK(&gta02_charger_work, gta02_charger_worker);
621#endif
622
623 s3c_device_usb.dev.platform_data = &gta02_usb_info;
624 s3c_device_nand.dev.platform_data = &gta02_nand_info;
625
626 s3c24xx_udc_set_platdata(&gta02_udc_cfg);
627 s3c_i2c0_set_platdata(NULL);
628
629 i2c_register_board_info(0, gta02_i2c_devs, ARRAY_SIZE(gta02_i2c_devs));
630
631 platform_add_devices(gta02_devices, ARRAY_SIZE(gta02_devices));
632 pm_power_off = gta02_poweroff;
633}
634
635
636MACHINE_START(NEO1973_GTA02, "GTA02")
637 /* Maintainer: Nelson Castillo <arhuaco@freaks-unidos.net> */
638 .phys_io = S3C2410_PA_UART,
639 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
640 .boot_params = S3C2410_SDRAM_PA + 0x100,
641 .map_io = gta02_map_io,
642 .init_irq = s3c24xx_init_irq,
643 .init_machine = gta02_machine_init,
644 .timer = &s3c24xx_timer,
645MACHINE_END
diff --git a/arch/arm/mach-u300/clock.c b/arch/arm/mach-u300/clock.c
index 5cd04d6751b3..111f7ea32b38 100644
--- a/arch/arm/mach-u300/clock.c
+++ b/arch/arm/mach-u300/clock.c
@@ -24,6 +24,7 @@
24#include <linux/init.h> 24#include <linux/init.h>
25#include <linux/timer.h> 25#include <linux/timer.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <linux/seq_file.h>
27 28
28#include <asm/clkdev.h> 29#include <asm/clkdev.h>
29#include <mach/hardware.h> 30#include <mach/hardware.h>
@@ -702,6 +703,7 @@ static struct clk amba_clk = {
702 .rate = 52000000, /* this varies! */ 703 .rate = 52000000, /* this varies! */
703 .hw_ctrld = true, 704 .hw_ctrld = true,
704 .reset = false, 705 .reset = false,
706 .lock = __SPIN_LOCK_UNLOCKED(amba_clk.lock),
705}; 707};
706 708
707/* 709/*
@@ -720,6 +722,7 @@ static struct clk cpu_clk = {
720 .set_rate = clk_set_rate_cpuclk, 722 .set_rate = clk_set_rate_cpuclk,
721 .get_rate = clk_get_rate_cpuclk, 723 .get_rate = clk_get_rate_cpuclk,
722 .round_rate = clk_round_rate_cpuclk, 724 .round_rate = clk_round_rate_cpuclk,
725 .lock = __SPIN_LOCK_UNLOCKED(cpu_clk.lock),
723}; 726};
724 727
725static struct clk nandif_clk = { 728static struct clk nandif_clk = {
@@ -732,6 +735,7 @@ static struct clk nandif_clk = {
732 .clk_val = U300_SYSCON_SBCER_NANDIF_CLK_EN, 735 .clk_val = U300_SYSCON_SBCER_NANDIF_CLK_EN,
733 .enable = syscon_clk_enable, 736 .enable = syscon_clk_enable,
734 .disable = syscon_clk_disable, 737 .disable = syscon_clk_disable,
738 .lock = __SPIN_LOCK_UNLOCKED(nandif_clk.lock),
735}; 739};
736 740
737static struct clk semi_clk = { 741static struct clk semi_clk = {
@@ -744,6 +748,7 @@ static struct clk semi_clk = {
744 .clk_val = U300_SYSCON_SBCER_SEMI_CLK_EN, 748 .clk_val = U300_SYSCON_SBCER_SEMI_CLK_EN,
745 .enable = syscon_clk_enable, 749 .enable = syscon_clk_enable,
746 .disable = syscon_clk_disable, 750 .disable = syscon_clk_disable,
751 .lock = __SPIN_LOCK_UNLOCKED(semi_clk.lock),
747}; 752};
748 753
749#ifdef CONFIG_MACH_U300_BS335 754#ifdef CONFIG_MACH_U300_BS335
@@ -758,6 +763,7 @@ static struct clk isp_clk = {
758 .clk_val = U300_SYSCON_SBCER_ISP_CLK_EN, 763 .clk_val = U300_SYSCON_SBCER_ISP_CLK_EN,
759 .enable = syscon_clk_enable, 764 .enable = syscon_clk_enable,
760 .disable = syscon_clk_disable, 765 .disable = syscon_clk_disable,
766 .lock = __SPIN_LOCK_UNLOCKED(isp_clk.lock),
761}; 767};
762 768
763static struct clk cds_clk = { 769static struct clk cds_clk = {
@@ -771,6 +777,7 @@ static struct clk cds_clk = {
771 .clk_val = U300_SYSCON_SBCER_CDS_CLK_EN, 777 .clk_val = U300_SYSCON_SBCER_CDS_CLK_EN,
772 .enable = syscon_clk_enable, 778 .enable = syscon_clk_enable,
773 .disable = syscon_clk_disable, 779 .disable = syscon_clk_disable,
780 .lock = __SPIN_LOCK_UNLOCKED(cds_clk.lock),
774}; 781};
775#endif 782#endif
776 783
@@ -785,6 +792,7 @@ static struct clk dma_clk = {
785 .clk_val = U300_SYSCON_SBCER_DMAC_CLK_EN, 792 .clk_val = U300_SYSCON_SBCER_DMAC_CLK_EN,
786 .enable = syscon_clk_enable, 793 .enable = syscon_clk_enable,
787 .disable = syscon_clk_disable, 794 .disable = syscon_clk_disable,
795 .lock = __SPIN_LOCK_UNLOCKED(dma_clk.lock),
788}; 796};
789 797
790static struct clk aaif_clk = { 798static struct clk aaif_clk = {
@@ -798,6 +806,7 @@ static struct clk aaif_clk = {
798 .clk_val = U300_SYSCON_SBCER_AAIF_CLK_EN, 806 .clk_val = U300_SYSCON_SBCER_AAIF_CLK_EN,
799 .enable = syscon_clk_enable, 807 .enable = syscon_clk_enable,
800 .disable = syscon_clk_disable, 808 .disable = syscon_clk_disable,
809 .lock = __SPIN_LOCK_UNLOCKED(aaif_clk.lock),
801}; 810};
802 811
803static struct clk apex_clk = { 812static struct clk apex_clk = {
@@ -811,6 +820,7 @@ static struct clk apex_clk = {
811 .clk_val = U300_SYSCON_SBCER_APEX_CLK_EN, 820 .clk_val = U300_SYSCON_SBCER_APEX_CLK_EN,
812 .enable = syscon_clk_enable, 821 .enable = syscon_clk_enable,
813 .disable = syscon_clk_disable, 822 .disable = syscon_clk_disable,
823 .lock = __SPIN_LOCK_UNLOCKED(apex_clk.lock),
814}; 824};
815 825
816static struct clk video_enc_clk = { 826static struct clk video_enc_clk = {
@@ -825,6 +835,7 @@ static struct clk video_enc_clk = {
825 .clk_val = U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN, 835 .clk_val = U300_SYSCON_SBCER_VIDEO_ENC_CLK_EN,
826 .enable = syscon_clk_enable, 836 .enable = syscon_clk_enable,
827 .disable = syscon_clk_disable, 837 .disable = syscon_clk_disable,
838 .lock = __SPIN_LOCK_UNLOCKED(video_enc_clk.lock),
828}; 839};
829 840
830static struct clk xgam_clk = { 841static struct clk xgam_clk = {
@@ -839,6 +850,7 @@ static struct clk xgam_clk = {
839 .get_rate = clk_get_rate_xgamclk, 850 .get_rate = clk_get_rate_xgamclk,
840 .enable = syscon_clk_enable, 851 .enable = syscon_clk_enable,
841 .disable = syscon_clk_disable, 852 .disable = syscon_clk_disable,
853 .lock = __SPIN_LOCK_UNLOCKED(xgam_clk.lock),
842}; 854};
843 855
844/* This clock is used to activate the video encoder */ 856/* This clock is used to activate the video encoder */
@@ -854,6 +866,7 @@ static struct clk ahb_clk = {
854 .enable = syscon_clk_enable, 866 .enable = syscon_clk_enable,
855 .disable = syscon_clk_disable, 867 .disable = syscon_clk_disable,
856 .get_rate = clk_get_rate_ahb_clk, 868 .get_rate = clk_get_rate_ahb_clk,
869 .lock = __SPIN_LOCK_UNLOCKED(ahb_clk.lock),
857}; 870};
858 871
859 872
@@ -871,6 +884,7 @@ static struct clk ahb_subsys_clk = {
871 .enable = syscon_clk_enable, 884 .enable = syscon_clk_enable,
872 .disable = syscon_clk_disable, 885 .disable = syscon_clk_disable,
873 .get_rate = clk_get_rate_ahb_clk, 886 .get_rate = clk_get_rate_ahb_clk,
887 .lock = __SPIN_LOCK_UNLOCKED(ahb_subsys_clk.lock),
874}; 888};
875 889
876static struct clk intcon_clk = { 890static struct clk intcon_clk = {
@@ -882,6 +896,8 @@ static struct clk intcon_clk = {
882 .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RRR, 896 .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RRR,
883 .res_mask = U300_SYSCON_RRR_INTCON_RESET_EN, 897 .res_mask = U300_SYSCON_RRR_INTCON_RESET_EN,
884 /* INTCON can be reset but not clock-gated */ 898 /* INTCON can be reset but not clock-gated */
899 .lock = __SPIN_LOCK_UNLOCKED(intcon_clk.lock),
900
885}; 901};
886 902
887static struct clk mspro_clk = { 903static struct clk mspro_clk = {
@@ -895,6 +911,7 @@ static struct clk mspro_clk = {
895 .clk_val = U300_SYSCON_SBCER_MSPRO_CLK_EN, 911 .clk_val = U300_SYSCON_SBCER_MSPRO_CLK_EN,
896 .enable = syscon_clk_enable, 912 .enable = syscon_clk_enable,
897 .disable = syscon_clk_disable, 913 .disable = syscon_clk_disable,
914 .lock = __SPIN_LOCK_UNLOCKED(mspro_clk.lock),
898}; 915};
899 916
900static struct clk emif_clk = { 917static struct clk emif_clk = {
@@ -909,6 +926,7 @@ static struct clk emif_clk = {
909 .enable = syscon_clk_enable, 926 .enable = syscon_clk_enable,
910 .disable = syscon_clk_disable, 927 .disable = syscon_clk_disable,
911 .get_rate = clk_get_rate_emif_clk, 928 .get_rate = clk_get_rate_emif_clk,
929 .lock = __SPIN_LOCK_UNLOCKED(emif_clk.lock),
912}; 930};
913 931
914 932
@@ -926,6 +944,7 @@ static struct clk fast_clk = {
926 .clk_val = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN, 944 .clk_val = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN,
927 .enable = syscon_clk_enable, 945 .enable = syscon_clk_enable,
928 .disable = syscon_clk_disable, 946 .disable = syscon_clk_disable,
947 .lock = __SPIN_LOCK_UNLOCKED(fast_clk.lock),
929}; 948};
930 949
931static struct clk mmcsd_clk = { 950static struct clk mmcsd_clk = {
@@ -942,6 +961,7 @@ static struct clk mmcsd_clk = {
942 .round_rate = clk_round_rate_mclk, 961 .round_rate = clk_round_rate_mclk,
943 .disable = syscon_clk_disable, 962 .disable = syscon_clk_disable,
944 .enable = syscon_clk_enable, 963 .enable = syscon_clk_enable,
964 .lock = __SPIN_LOCK_UNLOCKED(mmcsd_clk.lock),
945}; 965};
946 966
947static struct clk i2s0_clk = { 967static struct clk i2s0_clk = {
@@ -956,6 +976,7 @@ static struct clk i2s0_clk = {
956 .enable = syscon_clk_enable, 976 .enable = syscon_clk_enable,
957 .disable = syscon_clk_disable, 977 .disable = syscon_clk_disable,
958 .get_rate = clk_get_rate_i2s_i2c_spi, 978 .get_rate = clk_get_rate_i2s_i2c_spi,
979 .lock = __SPIN_LOCK_UNLOCKED(i2s0_clk.lock),
959}; 980};
960 981
961static struct clk i2s1_clk = { 982static struct clk i2s1_clk = {
@@ -970,6 +991,7 @@ static struct clk i2s1_clk = {
970 .enable = syscon_clk_enable, 991 .enable = syscon_clk_enable,
971 .disable = syscon_clk_disable, 992 .disable = syscon_clk_disable,
972 .get_rate = clk_get_rate_i2s_i2c_spi, 993 .get_rate = clk_get_rate_i2s_i2c_spi,
994 .lock = __SPIN_LOCK_UNLOCKED(i2s1_clk.lock),
973}; 995};
974 996
975static struct clk i2c0_clk = { 997static struct clk i2c0_clk = {
@@ -984,6 +1006,7 @@ static struct clk i2c0_clk = {
984 .enable = syscon_clk_enable, 1006 .enable = syscon_clk_enable,
985 .disable = syscon_clk_disable, 1007 .disable = syscon_clk_disable,
986 .get_rate = clk_get_rate_i2s_i2c_spi, 1008 .get_rate = clk_get_rate_i2s_i2c_spi,
1009 .lock = __SPIN_LOCK_UNLOCKED(i2c0_clk.lock),
987}; 1010};
988 1011
989static struct clk i2c1_clk = { 1012static struct clk i2c1_clk = {
@@ -998,6 +1021,7 @@ static struct clk i2c1_clk = {
998 .enable = syscon_clk_enable, 1021 .enable = syscon_clk_enable,
999 .disable = syscon_clk_disable, 1022 .disable = syscon_clk_disable,
1000 .get_rate = clk_get_rate_i2s_i2c_spi, 1023 .get_rate = clk_get_rate_i2s_i2c_spi,
1024 .lock = __SPIN_LOCK_UNLOCKED(i2c1_clk.lock),
1001}; 1025};
1002 1026
1003static struct clk spi_clk = { 1027static struct clk spi_clk = {
@@ -1012,6 +1036,7 @@ static struct clk spi_clk = {
1012 .enable = syscon_clk_enable, 1036 .enable = syscon_clk_enable,
1013 .disable = syscon_clk_disable, 1037 .disable = syscon_clk_disable,
1014 .get_rate = clk_get_rate_i2s_i2c_spi, 1038 .get_rate = clk_get_rate_i2s_i2c_spi,
1039 .lock = __SPIN_LOCK_UNLOCKED(spi_clk.lock),
1015}; 1040};
1016 1041
1017#ifdef CONFIG_MACH_U300_BS335 1042#ifdef CONFIG_MACH_U300_BS335
@@ -1026,6 +1051,7 @@ static struct clk uart1_clk = {
1026 .clk_val = U300_SYSCON_SBCER_UART1_CLK_EN, 1051 .clk_val = U300_SYSCON_SBCER_UART1_CLK_EN,
1027 .enable = syscon_clk_enable, 1052 .enable = syscon_clk_enable,
1028 .disable = syscon_clk_disable, 1053 .disable = syscon_clk_disable,
1054 .lock = __SPIN_LOCK_UNLOCKED(uart1_clk.lock),
1029}; 1055};
1030#endif 1056#endif
1031 1057
@@ -1044,6 +1070,7 @@ static struct clk slow_clk = {
1044 .clk_val = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN, 1070 .clk_val = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN,
1045 .enable = syscon_clk_enable, 1071 .enable = syscon_clk_enable,
1046 .disable = syscon_clk_disable, 1072 .disable = syscon_clk_disable,
1073 .lock = __SPIN_LOCK_UNLOCKED(slow_clk.lock),
1047}; 1074};
1048 1075
1049/* TODO: implement SYSCON clock? */ 1076/* TODO: implement SYSCON clock? */
@@ -1055,6 +1082,7 @@ static struct clk wdog_clk = {
1055 .rate = 32768, 1082 .rate = 32768,
1056 .reset = false, 1083 .reset = false,
1057 /* This is always on, cannot be enabled/disabled or reset */ 1084 /* This is always on, cannot be enabled/disabled or reset */
1085 .lock = __SPIN_LOCK_UNLOCKED(wdog_clk.lock),
1058}; 1086};
1059 1087
1060/* This one is hardwired to PLL13 */ 1088/* This one is hardwired to PLL13 */
@@ -1069,6 +1097,7 @@ static struct clk uart_clk = {
1069 .clk_val = U300_SYSCON_SBCER_UART_CLK_EN, 1097 .clk_val = U300_SYSCON_SBCER_UART_CLK_EN,
1070 .enable = syscon_clk_enable, 1098 .enable = syscon_clk_enable,
1071 .disable = syscon_clk_disable, 1099 .disable = syscon_clk_disable,
1100 .lock = __SPIN_LOCK_UNLOCKED(uart_clk.lock),
1072}; 1101};
1073 1102
1074static struct clk keypad_clk = { 1103static struct clk keypad_clk = {
@@ -1082,6 +1111,7 @@ static struct clk keypad_clk = {
1082 .clk_val = U300_SYSCON_SBCER_KEYPAD_CLK_EN, 1111 .clk_val = U300_SYSCON_SBCER_KEYPAD_CLK_EN,
1083 .enable = syscon_clk_enable, 1112 .enable = syscon_clk_enable,
1084 .disable = syscon_clk_disable, 1113 .disable = syscon_clk_disable,
1114 .lock = __SPIN_LOCK_UNLOCKED(keypad_clk.lock),
1085}; 1115};
1086 1116
1087static struct clk gpio_clk = { 1117static struct clk gpio_clk = {
@@ -1095,6 +1125,7 @@ static struct clk gpio_clk = {
1095 .clk_val = U300_SYSCON_SBCER_GPIO_CLK_EN, 1125 .clk_val = U300_SYSCON_SBCER_GPIO_CLK_EN,
1096 .enable = syscon_clk_enable, 1126 .enable = syscon_clk_enable,
1097 .disable = syscon_clk_disable, 1127 .disable = syscon_clk_disable,
1128 .lock = __SPIN_LOCK_UNLOCKED(gpio_clk.lock),
1098}; 1129};
1099 1130
1100static struct clk rtc_clk = { 1131static struct clk rtc_clk = {
@@ -1106,6 +1137,7 @@ static struct clk rtc_clk = {
1106 .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RSR, 1137 .res_reg = U300_SYSCON_VBASE + U300_SYSCON_RSR,
1107 .res_mask = U300_SYSCON_RSR_RTC_RESET_EN, 1138 .res_mask = U300_SYSCON_RSR_RTC_RESET_EN,
1108 /* This clock is always on, cannot be enabled/disabled */ 1139 /* This clock is always on, cannot be enabled/disabled */
1140 .lock = __SPIN_LOCK_UNLOCKED(rtc_clk.lock),
1109}; 1141};
1110 1142
1111static struct clk bustr_clk = { 1143static struct clk bustr_clk = {
@@ -1119,6 +1151,7 @@ static struct clk bustr_clk = {
1119 .clk_val = U300_SYSCON_SBCER_BTR_CLK_EN, 1151 .clk_val = U300_SYSCON_SBCER_BTR_CLK_EN,
1120 .enable = syscon_clk_enable, 1152 .enable = syscon_clk_enable,
1121 .disable = syscon_clk_disable, 1153 .disable = syscon_clk_disable,
1154 .lock = __SPIN_LOCK_UNLOCKED(bustr_clk.lock),
1122}; 1155};
1123 1156
1124static struct clk evhist_clk = { 1157static struct clk evhist_clk = {
@@ -1132,6 +1165,7 @@ static struct clk evhist_clk = {
1132 .clk_val = U300_SYSCON_SBCER_EH_CLK_EN, 1165 .clk_val = U300_SYSCON_SBCER_EH_CLK_EN,
1133 .enable = syscon_clk_enable, 1166 .enable = syscon_clk_enable,
1134 .disable = syscon_clk_disable, 1167 .disable = syscon_clk_disable,
1168 .lock = __SPIN_LOCK_UNLOCKED(evhist_clk.lock),
1135}; 1169};
1136 1170
1137static struct clk timer_clk = { 1171static struct clk timer_clk = {
@@ -1145,6 +1179,7 @@ static struct clk timer_clk = {
1145 .clk_val = U300_SYSCON_SBCER_ACC_TMR_CLK_EN, 1179 .clk_val = U300_SYSCON_SBCER_ACC_TMR_CLK_EN,
1146 .enable = syscon_clk_enable, 1180 .enable = syscon_clk_enable,
1147 .disable = syscon_clk_disable, 1181 .disable = syscon_clk_disable,
1182 .lock = __SPIN_LOCK_UNLOCKED(timer_clk.lock),
1148}; 1183};
1149 1184
1150static struct clk app_timer_clk = { 1185static struct clk app_timer_clk = {
@@ -1158,6 +1193,7 @@ static struct clk app_timer_clk = {
1158 .clk_val = U300_SYSCON_SBCER_APP_TMR_CLK_EN, 1193 .clk_val = U300_SYSCON_SBCER_APP_TMR_CLK_EN,
1159 .enable = syscon_clk_enable, 1194 .enable = syscon_clk_enable,
1160 .disable = syscon_clk_disable, 1195 .disable = syscon_clk_disable,
1196 .lock = __SPIN_LOCK_UNLOCKED(app_timer_clk.lock),
1161}; 1197};
1162 1198
1163#ifdef CONFIG_MACH_U300_BS335 1199#ifdef CONFIG_MACH_U300_BS335
@@ -1172,6 +1208,7 @@ static struct clk ppm_clk = {
1172 .clk_val = U300_SYSCON_SBCER_PPM_CLK_EN, 1208 .clk_val = U300_SYSCON_SBCER_PPM_CLK_EN,
1173 .enable = syscon_clk_enable, 1209 .enable = syscon_clk_enable,
1174 .disable = syscon_clk_disable, 1210 .disable = syscon_clk_disable,
1211 .lock = __SPIN_LOCK_UNLOCKED(ppm_clk.lock),
1175}; 1212};
1176#endif 1213#endif
1177 1214
@@ -1187,53 +1224,53 @@ static struct clk ppm_clk = {
1187 */ 1224 */
1188static struct clk_lookup lookups[] = { 1225static struct clk_lookup lookups[] = {
1189 /* Connected directly to the AMBA bus */ 1226 /* Connected directly to the AMBA bus */
1190 DEF_LOOKUP("amba", &amba_clk), 1227 DEF_LOOKUP("amba", &amba_clk),
1191 DEF_LOOKUP("cpu", &cpu_clk), 1228 DEF_LOOKUP("cpu", &cpu_clk),
1192 DEF_LOOKUP("nandif", &nandif_clk), 1229 DEF_LOOKUP("fsmc", &nandif_clk),
1193 DEF_LOOKUP("semi", &semi_clk), 1230 DEF_LOOKUP("semi", &semi_clk),
1194#ifdef CONFIG_MACH_U300_BS335 1231#ifdef CONFIG_MACH_U300_BS335
1195 DEF_LOOKUP("isp", &isp_clk), 1232 DEF_LOOKUP("isp", &isp_clk),
1196 DEF_LOOKUP("cds", &cds_clk), 1233 DEF_LOOKUP("cds", &cds_clk),
1197#endif 1234#endif
1198 DEF_LOOKUP("dma", &dma_clk), 1235 DEF_LOOKUP("dma", &dma_clk),
1199 DEF_LOOKUP("aaif", &aaif_clk), 1236 DEF_LOOKUP("msl", &aaif_clk),
1200 DEF_LOOKUP("apex", &apex_clk), 1237 DEF_LOOKUP("apex", &apex_clk),
1201 DEF_LOOKUP("video_enc", &video_enc_clk), 1238 DEF_LOOKUP("video_enc", &video_enc_clk),
1202 DEF_LOOKUP("xgam", &xgam_clk), 1239 DEF_LOOKUP("xgam", &xgam_clk),
1203 DEF_LOOKUP("ahb", &ahb_clk), 1240 DEF_LOOKUP("ahb", &ahb_clk),
1204 /* AHB bridge clocks */ 1241 /* AHB bridge clocks */
1205 DEF_LOOKUP("ahb", &ahb_subsys_clk), 1242 DEF_LOOKUP("ahb_subsys", &ahb_subsys_clk),
1206 DEF_LOOKUP("intcon", &intcon_clk), 1243 DEF_LOOKUP("intcon", &intcon_clk),
1207 DEF_LOOKUP("mspro", &mspro_clk), 1244 DEF_LOOKUP("mspro", &mspro_clk),
1208 DEF_LOOKUP("pl172", &emif_clk), 1245 DEF_LOOKUP("pl172", &emif_clk),
1209 /* FAST bridge clocks */ 1246 /* FAST bridge clocks */
1210 DEF_LOOKUP("fast", &fast_clk), 1247 DEF_LOOKUP("fast", &fast_clk),
1211 DEF_LOOKUP("mmci", &mmcsd_clk), 1248 DEF_LOOKUP("mmci", &mmcsd_clk),
1212 /* 1249 /*
1213 * The .0 and .1 identifiers on these comes from the platform device 1250 * The .0 and .1 identifiers on these comes from the platform device
1214 * .id field and are assigned when the platform devices are registered. 1251 * .id field and are assigned when the platform devices are registered.
1215 */ 1252 */
1216 DEF_LOOKUP("i2s.0", &i2s0_clk), 1253 DEF_LOOKUP("i2s.0", &i2s0_clk),
1217 DEF_LOOKUP("i2s.1", &i2s1_clk), 1254 DEF_LOOKUP("i2s.1", &i2s1_clk),
1218 DEF_LOOKUP("stddci2c.0", &i2c0_clk), 1255 DEF_LOOKUP("stu300.0", &i2c0_clk),
1219 DEF_LOOKUP("stddci2c.1", &i2c1_clk), 1256 DEF_LOOKUP("stu300.1", &i2c1_clk),
1220 DEF_LOOKUP("pl022", &spi_clk), 1257 DEF_LOOKUP("pl022", &spi_clk),
1221#ifdef CONFIG_MACH_U300_BS335 1258#ifdef CONFIG_MACH_U300_BS335
1222 DEF_LOOKUP("uart1", &uart1_clk), 1259 DEF_LOOKUP("uart1", &uart1_clk),
1223#endif 1260#endif
1224 /* SLOW bridge clocks */ 1261 /* SLOW bridge clocks */
1225 DEF_LOOKUP("slow", &slow_clk), 1262 DEF_LOOKUP("slow", &slow_clk),
1226 DEF_LOOKUP("wdog", &wdog_clk), 1263 DEF_LOOKUP("coh901327_wdog", &wdog_clk),
1227 DEF_LOOKUP("uart0", &uart_clk), 1264 DEF_LOOKUP("uart0", &uart_clk),
1228 DEF_LOOKUP("apptimer", &app_timer_clk), 1265 DEF_LOOKUP("apptimer", &app_timer_clk),
1229 DEF_LOOKUP("keypad", &keypad_clk), 1266 DEF_LOOKUP("coh901461-keypad", &keypad_clk),
1230 DEF_LOOKUP("u300-gpio", &gpio_clk), 1267 DEF_LOOKUP("u300-gpio", &gpio_clk),
1231 DEF_LOOKUP("rtc0", &rtc_clk), 1268 DEF_LOOKUP("rtc-coh901331", &rtc_clk),
1232 DEF_LOOKUP("bustr", &bustr_clk), 1269 DEF_LOOKUP("bustr", &bustr_clk),
1233 DEF_LOOKUP("evhist", &evhist_clk), 1270 DEF_LOOKUP("evhist", &evhist_clk),
1234 DEF_LOOKUP("timer", &timer_clk), 1271 DEF_LOOKUP("timer", &timer_clk),
1235#ifdef CONFIG_MACH_U300_BS335 1272#ifdef CONFIG_MACH_U300_BS335
1236 DEF_LOOKUP("ppm", &ppm_clk), 1273 DEF_LOOKUP("ppm", &ppm_clk),
1237#endif 1274#endif
1238}; 1275};
1239 1276
@@ -1427,16 +1464,20 @@ static const struct file_operations u300_clocks_operations = {
1427 .release = single_release, 1464 .release = single_release,
1428}; 1465};
1429 1466
1430static void init_clk_read_procfs(void) 1467static int __init init_clk_read_debugfs(void)
1431{ 1468{
1432 /* Expose a simple debugfs interface to view all clocks */ 1469 /* Expose a simple debugfs interface to view all clocks */
1433 (void) debugfs_create_file("u300_clocks", S_IFREG | S_IRUGO, 1470 (void) debugfs_create_file("u300_clocks", S_IFREG | S_IRUGO,
1434 NULL, NULL, &u300_clocks_operations); 1471 NULL, NULL,
1435} 1472 &u300_clocks_operations);
1436#else 1473 return 0;
1437static inline void init_clk_read_procfs(void)
1438{
1439} 1474}
1475/*
1476 * This needs to come in after the core_initcall() for the
1477 * overall clocks, because debugfs is not available until
1478 * the subsystems come up.
1479 */
1480module_init(init_clk_read_debugfs);
1440#endif 1481#endif
1441 1482
1442static int __init u300_clock_init(void) 1483static int __init u300_clock_init(void)
@@ -1462,8 +1503,6 @@ static int __init u300_clock_init(void)
1462 1503
1463 clk_register(); 1504 clk_register();
1464 1505
1465 init_clk_read_procfs();
1466
1467 /* 1506 /*
1468 * Some of these may be on when we boot the system so make sure they 1507 * Some of these may be on when we boot the system so make sure they
1469 * are turned OFF. 1508 * are turned OFF.
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c
index 89b3ccf35e1b..2e9b8ccd8ec2 100644
--- a/arch/arm/mach-u300/core.c
+++ b/arch/arm/mach-u300/core.c
@@ -455,8 +455,8 @@ void __init u300_init_irq(void)
455 for (i = 0; i < NR_IRQS; i++) 455 for (i = 0; i < NR_IRQS; i++)
456 set_bit(i, (unsigned long *) &mask[0]); 456 set_bit(i, (unsigned long *) &mask[0]);
457 u300_enable_intcon_clock(); 457 u300_enable_intcon_clock();
458 vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], 0); 458 vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], mask[0]);
459 vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], 0); 459 vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], mask[1]);
460} 460}
461 461
462 462
@@ -510,7 +510,7 @@ static struct db_chip db_chips[] __initdata = {
510 } 510 }
511}; 511};
512 512
513static void u300_init_check_chip(void) 513static void __init u300_init_check_chip(void)
514{ 514{
515 515
516 u16 val; 516 u16 val;
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
index 69214fc8bd19..31093af7d052 100644
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -342,8 +342,7 @@ static struct platform_device versatile_i2c_device = {
342 342
343static struct i2c_board_info versatile_i2c_board_info[] = { 343static struct i2c_board_info versatile_i2c_board_info[] = {
344 { 344 {
345 I2C_BOARD_INFO("rtc-ds1307", 0xd0 >> 1), 345 I2C_BOARD_INFO("ds1338", 0xd0 >> 1),
346 .type = "ds1338",
347 }, 346 },
348}; 347};
349 348
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
index 3a398befed41..03cd27d917b9 100644
--- a/arch/arm/mm/alignment.c
+++ b/arch/arm/mm/alignment.c
@@ -62,6 +62,12 @@
62#define SHIFT_ASR 0x40 62#define SHIFT_ASR 0x40
63#define SHIFT_RORRRX 0x60 63#define SHIFT_RORRRX 0x60
64 64
65#define BAD_INSTR 0xdeadc0de
66
67/* Thumb-2 32 bit format per ARMv7 DDI0406A A6.3, either f800h,e800h,f800h */
68#define IS_T32(hi16) \
69 (((hi16) & 0xe000) == 0xe000 && ((hi16) & 0x1800))
70
65static unsigned long ai_user; 71static unsigned long ai_user;
66static unsigned long ai_sys; 72static unsigned long ai_sys;
67static unsigned long ai_skipped; 73static unsigned long ai_skipped;
@@ -332,38 +338,48 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr,
332 struct pt_regs *regs) 338 struct pt_regs *regs)
333{ 339{
334 unsigned int rd = RD_BITS(instr); 340 unsigned int rd = RD_BITS(instr);
335 341 unsigned int rd2;
336 if (((rd & 1) == 1) || (rd == 14)) 342 int load;
343
344 if ((instr & 0xfe000000) == 0xe8000000) {
345 /* ARMv7 Thumb-2 32-bit LDRD/STRD */
346 rd2 = (instr >> 8) & 0xf;
347 load = !!(LDST_L_BIT(instr));
348 } else if (((rd & 1) == 1) || (rd == 14))
337 goto bad; 349 goto bad;
350 else {
351 load = ((instr & 0xf0) == 0xd0);
352 rd2 = rd + 1;
353 }
338 354
339 ai_dword += 1; 355 ai_dword += 1;
340 356
341 if (user_mode(regs)) 357 if (user_mode(regs))
342 goto user; 358 goto user;
343 359
344 if ((instr & 0xf0) == 0xd0) { 360 if (load) {
345 unsigned long val; 361 unsigned long val;
346 get32_unaligned_check(val, addr); 362 get32_unaligned_check(val, addr);
347 regs->uregs[rd] = val; 363 regs->uregs[rd] = val;
348 get32_unaligned_check(val, addr + 4); 364 get32_unaligned_check(val, addr + 4);
349 regs->uregs[rd + 1] = val; 365 regs->uregs[rd2] = val;
350 } else { 366 } else {
351 put32_unaligned_check(regs->uregs[rd], addr); 367 put32_unaligned_check(regs->uregs[rd], addr);
352 put32_unaligned_check(regs->uregs[rd + 1], addr + 4); 368 put32_unaligned_check(regs->uregs[rd2], addr + 4);
353 } 369 }
354 370
355 return TYPE_LDST; 371 return TYPE_LDST;
356 372
357 user: 373 user:
358 if ((instr & 0xf0) == 0xd0) { 374 if (load) {
359 unsigned long val; 375 unsigned long val;
360 get32t_unaligned_check(val, addr); 376 get32t_unaligned_check(val, addr);
361 regs->uregs[rd] = val; 377 regs->uregs[rd] = val;
362 get32t_unaligned_check(val, addr + 4); 378 get32t_unaligned_check(val, addr + 4);
363 regs->uregs[rd + 1] = val; 379 regs->uregs[rd2] = val;
364 } else { 380 } else {
365 put32t_unaligned_check(regs->uregs[rd], addr); 381 put32t_unaligned_check(regs->uregs[rd], addr);
366 put32t_unaligned_check(regs->uregs[rd + 1], addr + 4); 382 put32t_unaligned_check(regs->uregs[rd2], addr + 4);
367 } 383 }
368 384
369 return TYPE_LDST; 385 return TYPE_LDST;
@@ -616,8 +632,72 @@ thumb2arm(u16 tinstr)
616 /* Else fall through for illegal instruction case */ 632 /* Else fall through for illegal instruction case */
617 633
618 default: 634 default:
619 return 0xdeadc0de; 635 return BAD_INSTR;
636 }
637}
638
639/*
640 * Convert Thumb-2 32 bit LDM, STM, LDRD, STRD to equivalent instruction
641 * handlable by ARM alignment handler, also find the corresponding handler,
642 * so that we can reuse ARM userland alignment fault fixups for Thumb.
643 *
644 * @pinstr: original Thumb-2 instruction; returns new handlable instruction
645 * @regs: register context.
646 * @poffset: return offset from faulted addr for later writeback
647 *
648 * NOTES:
649 * 1. Comments below refer to ARMv7 DDI0406A Thumb Instruction sections.
650 * 2. Register name Rt from ARMv7 is same as Rd from ARMv6 (Rd is Rt)
651 */
652static void *
653do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
654 union offset_union *poffset)
655{
656 unsigned long instr = *pinstr;
657 u16 tinst1 = (instr >> 16) & 0xffff;
658 u16 tinst2 = instr & 0xffff;
659 poffset->un = 0;
660
661 switch (tinst1 & 0xffe0) {
662 /* A6.3.5 Load/Store multiple */
663 case 0xe880: /* STM/STMIA/STMEA,LDM/LDMIA, PUSH/POP T2 */
664 case 0xe8a0: /* ...above writeback version */
665 case 0xe900: /* STMDB/STMFD, LDMDB/LDMEA */
666 case 0xe920: /* ...above writeback version */
667 /* no need offset decision since handler calculates it */
668 return do_alignment_ldmstm;
669
670 case 0xf840: /* POP/PUSH T3 (single register) */
671 if (RN_BITS(instr) == 13 && (tinst2 & 0x09ff) == 0x0904) {
672 u32 L = !!(LDST_L_BIT(instr));
673 const u32 subset[2] = {
674 0xe92d0000, /* STMDB sp!,{registers} */
675 0xe8bd0000, /* LDMIA sp!,{registers} */
676 };
677 *pinstr = subset[L] | (1<<RD_BITS(instr));
678 return do_alignment_ldmstm;
679 }
680 /* Else fall through for illegal instruction case */
681 break;
682
683 /* A6.3.6 Load/store double, STRD/LDRD(immed, lit, reg) */
684 case 0xe860:
685 case 0xe960:
686 case 0xe8e0:
687 case 0xe9e0:
688 poffset->un = (tinst2 & 0xff) << 2;
689 case 0xe940:
690 case 0xe9c0:
691 return do_alignment_ldrdstrd;
692
693 /*
694 * No need to handle load/store instructions up to word size
695 * since ARMv6 and later CPUs can perform unaligned accesses.
696 */
697 default:
698 break;
620 } 699 }
700 return NULL;
621} 701}
622 702
623static int 703static int
@@ -630,6 +710,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
630 mm_segment_t fs; 710 mm_segment_t fs;
631 unsigned int fault; 711 unsigned int fault;
632 u16 tinstr = 0; 712 u16 tinstr = 0;
713 int isize = 4;
714 int thumb2_32b = 0;
633 715
634 instrptr = instruction_pointer(regs); 716 instrptr = instruction_pointer(regs);
635 717
@@ -637,8 +719,19 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
637 set_fs(KERNEL_DS); 719 set_fs(KERNEL_DS);
638 if (thumb_mode(regs)) { 720 if (thumb_mode(regs)) {
639 fault = __get_user(tinstr, (u16 *)(instrptr & ~1)); 721 fault = __get_user(tinstr, (u16 *)(instrptr & ~1));
640 if (!(fault)) 722 if (!fault) {
641 instr = thumb2arm(tinstr); 723 if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
724 IS_T32(tinstr)) {
725 /* Thumb-2 32-bit */
726 u16 tinst2 = 0;
727 fault = __get_user(tinst2, (u16 *)(instrptr+2));
728 instr = (tinstr << 16) | tinst2;
729 thumb2_32b = 1;
730 } else {
731 isize = 2;
732 instr = thumb2arm(tinstr);
733 }
734 }
642 } else 735 } else
643 fault = __get_user(instr, (u32 *)instrptr); 736 fault = __get_user(instr, (u32 *)instrptr);
644 set_fs(fs); 737 set_fs(fs);
@@ -655,7 +748,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
655 748
656 fixup: 749 fixup:
657 750
658 regs->ARM_pc += thumb_mode(regs) ? 2 : 4; 751 regs->ARM_pc += isize;
659 752
660 switch (CODING_BITS(instr)) { 753 switch (CODING_BITS(instr)) {
661 case 0x00000000: /* 3.13.4 load/store instruction extensions */ 754 case 0x00000000: /* 3.13.4 load/store instruction extensions */
@@ -714,18 +807,25 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
714 handler = do_alignment_ldrstr; 807 handler = do_alignment_ldrstr;
715 break; 808 break;
716 809
717 case 0x08000000: /* ldm or stm */ 810 case 0x08000000: /* ldm or stm, or thumb-2 32bit instruction */
718 handler = do_alignment_ldmstm; 811 if (thumb2_32b)
812 handler = do_alignment_t32_to_handler(&instr, regs, &offset);
813 else
814 handler = do_alignment_ldmstm;
719 break; 815 break;
720 816
721 default: 817 default:
722 goto bad; 818 goto bad;
723 } 819 }
724 820
821 if (!handler)
822 goto bad;
725 type = handler(addr, instr, regs); 823 type = handler(addr, instr, regs);
726 824
727 if (type == TYPE_ERROR || type == TYPE_FAULT) 825 if (type == TYPE_ERROR || type == TYPE_FAULT) {
826 regs->ARM_pc -= isize;
728 goto bad_or_fault; 827 goto bad_or_fault;
828 }
729 829
730 if (type == TYPE_LDST) 830 if (type == TYPE_LDST)
731 do_alignment_finish_ldst(addr, instr, regs, offset); 831 do_alignment_finish_ldst(addr, instr, regs, offset);
@@ -735,7 +835,6 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
735 bad_or_fault: 835 bad_or_fault:
736 if (type == TYPE_ERROR) 836 if (type == TYPE_ERROR)
737 goto bad; 837 goto bad;
738 regs->ARM_pc -= thumb_mode(regs) ? 2 : 4;
739 /* 838 /*
740 * We got a fault - fix it up, or die. 839 * We got a fault - fix it up, or die.
741 */ 840 */
@@ -751,8 +850,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
751 */ 850 */
752 printk(KERN_ERR "Alignment trap: not handling instruction " 851 printk(KERN_ERR "Alignment trap: not handling instruction "
753 "%0*lx at [<%08lx>]\n", 852 "%0*lx at [<%08lx>]\n",
754 thumb_mode(regs) ? 4 : 8, 853 isize << 1,
755 thumb_mode(regs) ? tinstr : instr, instrptr); 854 isize == 2 ? tinstr : instr, instrptr);
756 ai_skipped += 1; 855 ai_skipped += 1;
757 return 1; 856 return 1;
758 857
@@ -763,8 +862,8 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
763 printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*lx " 862 printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*lx "
764 "Address=0x%08lx FSR 0x%03x\n", current->comm, 863 "Address=0x%08lx FSR 0x%03x\n", current->comm,
765 task_pid_nr(current), instrptr, 864 task_pid_nr(current), instrptr,
766 thumb_mode(regs) ? 4 : 8, 865 isize << 1,
767 thumb_mode(regs) ? tinstr : instr, 866 isize == 2 ? tinstr : instr,
768 addr, fsr); 867 addr, fsr);
769 868
770 if (ai_usermode & UM_FIXUP) 869 if (ai_usermode & UM_FIXUP)
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index 0455557a2899..6fdcbb709827 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -208,7 +208,7 @@ good_area:
208 * than endlessly redo the fault. 208 * than endlessly redo the fault.
209 */ 209 */
210survive: 210survive:
211 fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, fsr & (1 << 11)); 211 fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, (fsr & (1 << 11)) ? FAULT_FLAG_WRITE : 0);
212 if (unlikely(fault & VM_FAULT_ERROR)) { 212 if (unlikely(fault & VM_FAULT_ERROR)) {
213 if (fault & VM_FAULT_OOM) 213 if (fault & VM_FAULT_OOM)
214 goto out_of_memory; 214 goto out_of_memory;
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 8277802ec859..3a7279c1ce5e 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -120,6 +120,32 @@ void show_mem(void)
120 printk("%d pages swap cached\n", cached); 120 printk("%d pages swap cached\n", cached);
121} 121}
122 122
123static void __init find_node_limits(int node, struct meminfo *mi,
124 unsigned long *min, unsigned long *max_low, unsigned long *max_high)
125{
126 int i;
127
128 *min = -1UL;
129 *max_low = *max_high = 0;
130
131 for_each_nodebank(i, mi, node) {
132 struct membank *bank = &mi->bank[i];
133 unsigned long start, end;
134
135 start = bank_pfn_start(bank);
136 end = bank_pfn_end(bank);
137
138 if (*min > start)
139 *min = start;
140 if (*max_high < end)
141 *max_high = end;
142 if (bank->highmem)
143 continue;
144 if (*max_low < end)
145 *max_low = end;
146 }
147}
148
123/* 149/*
124 * FIXME: We really want to avoid allocating the bootmap bitmap 150 * FIXME: We really want to avoid allocating the bootmap bitmap
125 * over the top of the initrd. Hopefully, this is located towards 151 * over the top of the initrd. Hopefully, this is located towards
@@ -210,41 +236,25 @@ static inline void map_memory_bank(struct membank *bank)
210#endif 236#endif
211} 237}
212 238
213static unsigned long __init bootmem_init_node(int node, struct meminfo *mi) 239static void __init bootmem_init_node(int node, struct meminfo *mi,
240 unsigned long start_pfn, unsigned long end_pfn)
214{ 241{
215 unsigned long start_pfn, end_pfn, boot_pfn; 242 unsigned long boot_pfn;
216 unsigned int boot_pages; 243 unsigned int boot_pages;
217 pg_data_t *pgdat; 244 pg_data_t *pgdat;
218 int i; 245 int i;
219 246
220 start_pfn = -1UL;
221 end_pfn = 0;
222
223 /* 247 /*
224 * Calculate the pfn range, and map the memory banks for this node. 248 * Map the memory banks for this node.
225 */ 249 */
226 for_each_nodebank(i, mi, node) { 250 for_each_nodebank(i, mi, node) {
227 struct membank *bank = &mi->bank[i]; 251 struct membank *bank = &mi->bank[i];
228 unsigned long start, end;
229 252
230 start = bank_pfn_start(bank); 253 if (!bank->highmem)
231 end = bank_pfn_end(bank); 254 map_memory_bank(bank);
232
233 if (start_pfn > start)
234 start_pfn = start;
235 if (end_pfn < end)
236 end_pfn = end;
237
238 map_memory_bank(bank);
239 } 255 }
240 256
241 /* 257 /*
242 * If there is no memory in this node, ignore it.
243 */
244 if (end_pfn == 0)
245 return end_pfn;
246
247 /*
248 * Allocate the bootmem bitmap page. 258 * Allocate the bootmem bitmap page.
249 */ 259 */
250 boot_pages = bootmem_bootmap_pages(end_pfn - start_pfn); 260 boot_pages = bootmem_bootmap_pages(end_pfn - start_pfn);
@@ -260,7 +270,8 @@ static unsigned long __init bootmem_init_node(int node, struct meminfo *mi)
260 270
261 for_each_nodebank(i, mi, node) { 271 for_each_nodebank(i, mi, node) {
262 struct membank *bank = &mi->bank[i]; 272 struct membank *bank = &mi->bank[i];
263 free_bootmem_node(pgdat, bank_phys_start(bank), bank_phys_size(bank)); 273 if (!bank->highmem)
274 free_bootmem_node(pgdat, bank_phys_start(bank), bank_phys_size(bank));
264 memory_present(node, bank_pfn_start(bank), bank_pfn_end(bank)); 275 memory_present(node, bank_pfn_start(bank), bank_pfn_end(bank));
265 } 276 }
266 277
@@ -269,8 +280,6 @@ static unsigned long __init bootmem_init_node(int node, struct meminfo *mi)
269 */ 280 */
270 reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT, 281 reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT,
271 boot_pages << PAGE_SHIFT, BOOTMEM_DEFAULT); 282 boot_pages << PAGE_SHIFT, BOOTMEM_DEFAULT);
272
273 return end_pfn;
274} 283}
275 284
276static void __init bootmem_reserve_initrd(int node) 285static void __init bootmem_reserve_initrd(int node)
@@ -297,33 +306,39 @@ static void __init bootmem_reserve_initrd(int node)
297static void __init bootmem_free_node(int node, struct meminfo *mi) 306static void __init bootmem_free_node(int node, struct meminfo *mi)
298{ 307{
299 unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES]; 308 unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES];
300 unsigned long start_pfn, end_pfn; 309 unsigned long min, max_low, max_high;
301 pg_data_t *pgdat = NODE_DATA(node);
302 int i; 310 int i;
303 311
304 start_pfn = pgdat->bdata->node_min_pfn; 312 find_node_limits(node, mi, &min, &max_low, &max_high);
305 end_pfn = pgdat->bdata->node_low_pfn;
306 313
307 /* 314 /*
308 * initialise the zones within this node. 315 * initialise the zones within this node.
309 */ 316 */
310 memset(zone_size, 0, sizeof(zone_size)); 317 memset(zone_size, 0, sizeof(zone_size));
311 memset(zhole_size, 0, sizeof(zhole_size));
312 318
313 /* 319 /*
314 * The size of this node has already been determined. If we need 320 * The size of this node has already been determined. If we need
315 * to do anything fancy with the allocation of this memory to the 321 * to do anything fancy with the allocation of this memory to the
316 * zones, now is the time to do it. 322 * zones, now is the time to do it.
317 */ 323 */
318 zone_size[0] = end_pfn - start_pfn; 324 zone_size[0] = max_low - min;
325#ifdef CONFIG_HIGHMEM
326 zone_size[ZONE_HIGHMEM] = max_high - max_low;
327#endif
319 328
320 /* 329 /*
321 * For each bank in this node, calculate the size of the holes. 330 * For each bank in this node, calculate the size of the holes.
322 * holes = node_size - sum(bank_sizes_in_node) 331 * holes = node_size - sum(bank_sizes_in_node)
323 */ 332 */
324 zhole_size[0] = zone_size[0]; 333 memcpy(zhole_size, zone_size, sizeof(zhole_size));
325 for_each_nodebank(i, mi, node) 334 for_each_nodebank(i, mi, node) {
326 zhole_size[0] -= bank_pfn_size(&mi->bank[i]); 335 int idx = 0;
336#ifdef CONFIG_HIGHMEM
337 if (mi->bank[i].highmem)
338 idx = ZONE_HIGHMEM;
339#endif
340 zhole_size[idx] -= bank_pfn_size(&mi->bank[i]);
341 }
327 342
328 /* 343 /*
329 * Adjust the sizes according to any special requirements for 344 * Adjust the sizes according to any special requirements for
@@ -331,13 +346,13 @@ static void __init bootmem_free_node(int node, struct meminfo *mi)
331 */ 346 */
332 arch_adjust_zones(node, zone_size, zhole_size); 347 arch_adjust_zones(node, zone_size, zhole_size);
333 348
334 free_area_init_node(node, zone_size, start_pfn, zhole_size); 349 free_area_init_node(node, zone_size, min, zhole_size);
335} 350}
336 351
337void __init bootmem_init(void) 352void __init bootmem_init(void)
338{ 353{
339 struct meminfo *mi = &meminfo; 354 struct meminfo *mi = &meminfo;
340 unsigned long memend_pfn = 0; 355 unsigned long min, max_low, max_high;
341 int node, initrd_node; 356 int node, initrd_node;
342 357
343 /* 358 /*
@@ -345,11 +360,29 @@ void __init bootmem_init(void)
345 */ 360 */
346 initrd_node = check_initrd(mi); 361 initrd_node = check_initrd(mi);
347 362
363 max_low = max_high = 0;
364
348 /* 365 /*
349 * Run through each node initialising the bootmem allocator. 366 * Run through each node initialising the bootmem allocator.
350 */ 367 */
351 for_each_node(node) { 368 for_each_node(node) {
352 unsigned long end_pfn = bootmem_init_node(node, mi); 369 unsigned long node_low, node_high;
370
371 find_node_limits(node, mi, &min, &node_low, &node_high);
372
373 if (node_low > max_low)
374 max_low = node_low;
375 if (node_high > max_high)
376 max_high = node_high;
377
378 /*
379 * If there is no memory in this node, ignore it.
380 * (We can't have nodes which have no lowmem)
381 */
382 if (node_low == 0)
383 continue;
384
385 bootmem_init_node(node, mi, min, node_low);
353 386
354 /* 387 /*
355 * Reserve any special node zero regions. 388 * Reserve any special node zero regions.
@@ -362,12 +395,6 @@ void __init bootmem_init(void)
362 */ 395 */
363 if (node == initrd_node) 396 if (node == initrd_node)
364 bootmem_reserve_initrd(node); 397 bootmem_reserve_initrd(node);
365
366 /*
367 * Remember the highest memory PFN.
368 */
369 if (end_pfn > memend_pfn)
370 memend_pfn = end_pfn;
371 } 398 }
372 399
373 /* 400 /*
@@ -383,7 +410,7 @@ void __init bootmem_init(void)
383 for_each_node(node) 410 for_each_node(node)
384 bootmem_free_node(node, mi); 411 bootmem_free_node(node, mi);
385 412
386 high_memory = __va((memend_pfn << PAGE_SHIFT) - 1) + 1; 413 high_memory = __va((max_low << PAGE_SHIFT) - 1) + 1;
387 414
388 /* 415 /*
389 * This doesn't seem to be used by the Linux memory manager any 416 * This doesn't seem to be used by the Linux memory manager any
@@ -393,7 +420,8 @@ void __init bootmem_init(void)
393 * Note: max_low_pfn and max_pfn reflect the number of _pages_ in 420 * Note: max_low_pfn and max_pfn reflect the number of _pages_ in
394 * the system, not the maximum PFN. 421 * the system, not the maximum PFN.
395 */ 422 */
396 max_pfn = max_low_pfn = memend_pfn - PHYS_PFN_OFFSET; 423 max_low_pfn = max_low - PHYS_PFN_OFFSET;
424 max_pfn = max_high - PHYS_PFN_OFFSET;
397} 425}
398 426
399static inline int free_area(unsigned long pfn, unsigned long end, char *s) 427static inline int free_area(unsigned long pfn, unsigned long end, char *s)
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index fdaa9bb87c16..4426ee67ceca 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -687,13 +687,19 @@ __early_param("vmalloc=", early_vmalloc);
687 687
688static void __init sanity_check_meminfo(void) 688static void __init sanity_check_meminfo(void)
689{ 689{
690 int i, j; 690 int i, j, highmem = 0;
691 691
692 for (i = 0, j = 0; i < meminfo.nr_banks; i++) { 692 for (i = 0, j = 0; i < meminfo.nr_banks; i++) {
693 struct membank *bank = &meminfo.bank[j]; 693 struct membank *bank = &meminfo.bank[j];
694 *bank = meminfo.bank[i]; 694 *bank = meminfo.bank[i];
695 695
696#ifdef CONFIG_HIGHMEM 696#ifdef CONFIG_HIGHMEM
697 if (__va(bank->start) > VMALLOC_MIN ||
698 __va(bank->start) < (void *)PAGE_OFFSET)
699 highmem = 1;
700
701 bank->highmem = highmem;
702
697 /* 703 /*
698 * Split those memory banks which are partially overlapping 704 * Split those memory banks which are partially overlapping
699 * the vmalloc area greatly simplifying things later. 705 * the vmalloc area greatly simplifying things later.
@@ -714,6 +720,7 @@ static void __init sanity_check_meminfo(void)
714 i++; 720 i++;
715 bank[1].size -= VMALLOC_MIN - __va(bank->start); 721 bank[1].size -= VMALLOC_MIN - __va(bank->start);
716 bank[1].start = __pa(VMALLOC_MIN - 1) + 1; 722 bank[1].start = __pa(VMALLOC_MIN - 1) + 1;
723 bank[1].highmem = highmem = 1;
717 j++; 724 j++;
718 } 725 }
719 bank->size = VMALLOC_MIN - __va(bank->start); 726 bank->size = VMALLOC_MIN - __va(bank->start);
@@ -836,6 +843,13 @@ void __init reserve_node_zero(pg_data_t *pgdat)
836 BOOTMEM_EXCLUSIVE); 843 BOOTMEM_EXCLUSIVE);
837 } 844 }
838 845
846 if (machine_is_treo680()) {
847 reserve_bootmem_node(pgdat, 0xa0000000, 0x1000,
848 BOOTMEM_EXCLUSIVE);
849 reserve_bootmem_node(pgdat, 0xa2000000, 0x1000,
850 BOOTMEM_EXCLUSIVE);
851 }
852
839 if (machine_is_palmt5()) 853 if (machine_is_palmt5())
840 reserve_bootmem_node(pgdat, 0xa0200000, 0x1000, 854 reserve_bootmem_node(pgdat, 0xa0200000, 0x1000,
841 BOOTMEM_EXCLUSIVE); 855 BOOTMEM_EXCLUSIVE);
diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c
index 195e48edd8c2..ac5c80062b70 100644
--- a/arch/arm/mm/proc-syms.c
+++ b/arch/arm/mm/proc-syms.c
@@ -27,6 +27,7 @@ EXPORT_SYMBOL(__cpuc_flush_kern_all);
27EXPORT_SYMBOL(__cpuc_flush_user_all); 27EXPORT_SYMBOL(__cpuc_flush_user_all);
28EXPORT_SYMBOL(__cpuc_flush_user_range); 28EXPORT_SYMBOL(__cpuc_flush_user_range);
29EXPORT_SYMBOL(__cpuc_coherent_kern_range); 29EXPORT_SYMBOL(__cpuc_coherent_kern_range);
30EXPORT_SYMBOL(__cpuc_flush_dcache_page);
30EXPORT_SYMBOL(dmac_inv_range); /* because of flush_ioremap_region() */ 31EXPORT_SYMBOL(dmac_inv_range); /* because of flush_ioremap_region() */
31#else 32#else
32EXPORT_SYMBOL(cpu_cache); 33EXPORT_SYMBOL(cpu_cache);
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx3.h b/arch/arm/plat-mxc/include/mach/iomux-mx3.h
index 27f8d1b2bc6b..2eb182f73876 100644
--- a/arch/arm/plat-mxc/include/mach/iomux-mx3.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-mx3.h
@@ -602,6 +602,8 @@ enum iomux_pins {
602#define MX31_PIN_I2C_DAT__SDA IOMUX_MODE(MX31_PIN_I2C_DAT, IOMUX_CONFIG_FUNC) 602#define MX31_PIN_I2C_DAT__SDA IOMUX_MODE(MX31_PIN_I2C_DAT, IOMUX_CONFIG_FUNC)
603#define MX31_PIN_DCD_DTE1__I2C2_SDA IOMUX_MODE(MX31_PIN_DCD_DTE1, IOMUX_CONFIG_ALT2) 603#define MX31_PIN_DCD_DTE1__I2C2_SDA IOMUX_MODE(MX31_PIN_DCD_DTE1, IOMUX_CONFIG_ALT2)
604#define MX31_PIN_RI_DTE1__I2C2_SCL IOMUX_MODE(MX31_PIN_RI_DTE1, IOMUX_CONFIG_ALT2) 604#define MX31_PIN_RI_DTE1__I2C2_SCL IOMUX_MODE(MX31_PIN_RI_DTE1, IOMUX_CONFIG_ALT2)
605#define MX31_PIN_CSPI2_SS2__I2C3_SDA IOMUX_MODE(MX31_PIN_CSPI2_SS2, IOMUX_CONFIG_ALT1)
606#define MX31_PIN_CSPI2_SCLK__I2C3_SCL IOMUX_MODE(MX31_PIN_CSPI2_SCLK, IOMUX_CONFIG_ALT1)
605#define MX31_PIN_CSI_D4__CSI_D4 IOMUX_MODE(MX31_PIN_CSI_D4, IOMUX_CONFIG_FUNC) 607#define MX31_PIN_CSI_D4__CSI_D4 IOMUX_MODE(MX31_PIN_CSI_D4, IOMUX_CONFIG_FUNC)
606#define MX31_PIN_CSI_D5__CSI_D5 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_FUNC) 608#define MX31_PIN_CSI_D5__CSI_D5 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_FUNC)
607#define MX31_PIN_CSI_D6__CSI_D6 IOMUX_MODE(MX31_PIN_CSI_D6, IOMUX_CONFIG_FUNC) 609#define MX31_PIN_CSI_D6__CSI_D6 IOMUX_MODE(MX31_PIN_CSI_D6, IOMUX_CONFIG_FUNC)
diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
index 843e8af64066..1868c0d8f9b5 100644
--- a/arch/arm/plat-omap/cpu-omap.c
+++ b/arch/arm/plat-omap/cpu-omap.c
@@ -78,10 +78,10 @@ static int omap_target(struct cpufreq_policy *policy,
78 78
79 /* Ensure desired rate is within allowed range. Some govenors 79 /* Ensure desired rate is within allowed range. Some govenors
80 * (ondemand) will just pass target_freq=0 to get the minimum. */ 80 * (ondemand) will just pass target_freq=0 to get the minimum. */
81 if (target_freq < policy->cpuinfo.min_freq) 81 if (target_freq < policy->min)
82 target_freq = policy->cpuinfo.min_freq; 82 target_freq = policy->min;
83 if (target_freq > policy->cpuinfo.max_freq) 83 if (target_freq > policy->max)
84 target_freq = policy->cpuinfo.max_freq; 84 target_freq = policy->max;
85 85
86 freqs.old = omap_getspeed(0); 86 freqs.old = omap_getspeed(0);
87 freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; 87 freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000;
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
index def14ec265b3..e3ac94f09006 100644
--- a/arch/arm/plat-omap/dma.c
+++ b/arch/arm/plat-omap/dma.c
@@ -946,7 +946,9 @@ void omap_start_dma(int lch)
946 946
947 cur_lch = next_lch; 947 cur_lch = next_lch;
948 } while (next_lch != -1); 948 } while (next_lch != -1);
949 } else if (cpu_class_is_omap2()) { 949 } else if (cpu_is_omap242x() ||
950 (cpu_is_omap243x() && omap_type() <= OMAP2430_REV_ES1_0)) {
951
950 /* Errata: Need to write lch even if not using chaining */ 952 /* Errata: Need to write lch even if not using chaining */
951 dma_write(lch, CLNK_CTRL(lch)); 953 dma_write(lch, CLNK_CTRL(lch));
952 } 954 }
@@ -2457,6 +2459,19 @@ static int __init omap_init_dma(void)
2457 setup_irq(irq, &omap24xx_dma_irq); 2459 setup_irq(irq, &omap24xx_dma_irq);
2458 } 2460 }
2459 2461
2462 /* Enable smartidle idlemodes and autoidle */
2463 if (cpu_is_omap34xx()) {
2464 u32 v = dma_read(OCP_SYSCONFIG);
2465 v &= ~(DMA_SYSCONFIG_MIDLEMODE_MASK |
2466 DMA_SYSCONFIG_SIDLEMODE_MASK |
2467 DMA_SYSCONFIG_AUTOIDLE);
2468 v |= (DMA_SYSCONFIG_MIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
2469 DMA_SYSCONFIG_SIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
2470 DMA_SYSCONFIG_AUTOIDLE);
2471 dma_write(v , OCP_SYSCONFIG);
2472 }
2473
2474
2460 /* FIXME: Update LCD DMA to work on 24xx */ 2475 /* FIXME: Update LCD DMA to work on 24xx */
2461 if (cpu_class_is_omap1()) { 2476 if (cpu_class_is_omap1()) {
2462 r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0, 2477 r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0,
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 7fd89ba8d3b5..9298bc0ab171 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -476,14 +476,12 @@ static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
476 __raw_writel(l, reg); 476 __raw_writel(l, reg);
477} 477}
478 478
479static int __omap_get_gpio_datain(int gpio) 479static int _get_gpio_datain(struct gpio_bank *bank, int gpio)
480{ 480{
481 struct gpio_bank *bank;
482 void __iomem *reg; 481 void __iomem *reg;
483 482
484 if (check_gpio(gpio) < 0) 483 if (check_gpio(gpio) < 0)
485 return -EINVAL; 484 return -EINVAL;
486 bank = get_gpio_bank(gpio);
487 reg = bank->base; 485 reg = bank->base;
488 switch (bank->method) { 486 switch (bank->method) {
489#ifdef CONFIG_ARCH_OMAP1 487#ifdef CONFIG_ARCH_OMAP1
@@ -524,6 +522,53 @@ static int __omap_get_gpio_datain(int gpio)
524 & (1 << get_gpio_index(gpio))) != 0; 522 & (1 << get_gpio_index(gpio))) != 0;
525} 523}
526 524
525static int _get_gpio_dataout(struct gpio_bank *bank, int gpio)
526{
527 void __iomem *reg;
528
529 if (check_gpio(gpio) < 0)
530 return -EINVAL;
531 reg = bank->base;
532
533 switch (bank->method) {
534#ifdef CONFIG_ARCH_OMAP1
535 case METHOD_MPUIO:
536 reg += OMAP_MPUIO_OUTPUT;
537 break;
538#endif
539#ifdef CONFIG_ARCH_OMAP15XX
540 case METHOD_GPIO_1510:
541 reg += OMAP1510_GPIO_DATA_OUTPUT;
542 break;
543#endif
544#ifdef CONFIG_ARCH_OMAP16XX
545 case METHOD_GPIO_1610:
546 reg += OMAP1610_GPIO_DATAOUT;
547 break;
548#endif
549#ifdef CONFIG_ARCH_OMAP730
550 case METHOD_GPIO_730:
551 reg += OMAP730_GPIO_DATA_OUTPUT;
552 break;
553#endif
554#ifdef CONFIG_ARCH_OMAP850
555 case METHOD_GPIO_850:
556 reg += OMAP850_GPIO_DATA_OUTPUT;
557 break;
558#endif
559#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX) || \
560 defined(CONFIG_ARCH_OMAP4)
561 case METHOD_GPIO_24XX:
562 reg += OMAP24XX_GPIO_DATAOUT;
563 break;
564#endif
565 default:
566 return -EINVAL;
567 }
568
569 return (__raw_readl(reg) & (1 << get_gpio_index(gpio))) != 0;
570}
571
527#define MOD_REG_BIT(reg, bit_mask, set) \ 572#define MOD_REG_BIT(reg, bit_mask, set) \
528do { \ 573do { \
529 int l = __raw_readl(base + reg); \ 574 int l = __raw_readl(base + reg); \
@@ -1189,6 +1234,7 @@ static void gpio_mask_irq(unsigned int irq)
1189 struct gpio_bank *bank = get_irq_chip_data(irq); 1234 struct gpio_bank *bank = get_irq_chip_data(irq);
1190 1235
1191 _set_gpio_irqenable(bank, gpio, 0); 1236 _set_gpio_irqenable(bank, gpio, 0);
1237 _set_gpio_triggering(bank, get_gpio_index(gpio), IRQ_TYPE_NONE);
1192} 1238}
1193 1239
1194static void gpio_unmask_irq(unsigned int irq) 1240static void gpio_unmask_irq(unsigned int irq)
@@ -1196,6 +1242,11 @@ static void gpio_unmask_irq(unsigned int irq)
1196 unsigned int gpio = irq - IH_GPIO_BASE; 1242 unsigned int gpio = irq - IH_GPIO_BASE;
1197 struct gpio_bank *bank = get_irq_chip_data(irq); 1243 struct gpio_bank *bank = get_irq_chip_data(irq);
1198 unsigned int irq_mask = 1 << get_gpio_index(gpio); 1244 unsigned int irq_mask = 1 << get_gpio_index(gpio);
1245 struct irq_desc *desc = irq_to_desc(irq);
1246 u32 trigger = desc->status & IRQ_TYPE_SENSE_MASK;
1247
1248 if (trigger)
1249 _set_gpio_triggering(bank, get_gpio_index(gpio), trigger);
1199 1250
1200 /* For level-triggered GPIOs, the clearing must be done after 1251 /* For level-triggered GPIOs, the clearing must be done after
1201 * the HW source is cleared, thus after the handler has run */ 1252 * the HW source is cleared, thus after the handler has run */
@@ -1350,9 +1401,49 @@ static int gpio_input(struct gpio_chip *chip, unsigned offset)
1350 return 0; 1401 return 0;
1351} 1402}
1352 1403
1404static int gpio_is_input(struct gpio_bank *bank, int mask)
1405{
1406 void __iomem *reg = bank->base;
1407
1408 switch (bank->method) {
1409 case METHOD_MPUIO:
1410 reg += OMAP_MPUIO_IO_CNTL;
1411 break;
1412 case METHOD_GPIO_1510:
1413 reg += OMAP1510_GPIO_DIR_CONTROL;
1414 break;
1415 case METHOD_GPIO_1610:
1416 reg += OMAP1610_GPIO_DIRECTION;
1417 break;
1418 case METHOD_GPIO_730:
1419 reg += OMAP730_GPIO_DIR_CONTROL;
1420 break;
1421 case METHOD_GPIO_850:
1422 reg += OMAP850_GPIO_DIR_CONTROL;
1423 break;
1424 case METHOD_GPIO_24XX:
1425 reg += OMAP24XX_GPIO_OE;
1426 break;
1427 }
1428 return __raw_readl(reg) & mask;
1429}
1430
1353static int gpio_get(struct gpio_chip *chip, unsigned offset) 1431static int gpio_get(struct gpio_chip *chip, unsigned offset)
1354{ 1432{
1355 return __omap_get_gpio_datain(chip->base + offset); 1433 struct gpio_bank *bank;
1434 void __iomem *reg;
1435 int gpio;
1436 u32 mask;
1437
1438 gpio = chip->base + offset;
1439 bank = get_gpio_bank(gpio);
1440 reg = bank->base;
1441 mask = 1 << get_gpio_index(gpio);
1442
1443 if (gpio_is_input(bank, mask))
1444 return _get_gpio_datain(bank, gpio);
1445 else
1446 return _get_gpio_dataout(bank, gpio);
1356} 1447}
1357 1448
1358static int gpio_output(struct gpio_chip *chip, unsigned offset, int value) 1449static int gpio_output(struct gpio_chip *chip, unsigned offset, int value)
@@ -1585,6 +1676,7 @@ static int __init _omap_gpio_init(void)
1585 __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_IRQENABLE1); 1676 __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_IRQENABLE1);
1586 __raw_writel(0xffffffff, bank->base + OMAP24XX_GPIO_IRQSTATUS1); 1677 __raw_writel(0xffffffff, bank->base + OMAP24XX_GPIO_IRQSTATUS1);
1587 __raw_writew(0x0015, bank->base + OMAP24XX_GPIO_SYSCONFIG); 1678 __raw_writew(0x0015, bank->base + OMAP24XX_GPIO_SYSCONFIG);
1679 __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_DEBOUNCE_EN);
1588 1680
1589 /* Initialize interface clock ungated, module enabled */ 1681 /* Initialize interface clock ungated, module enabled */
1590 __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL); 1682 __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
@@ -1885,34 +1977,6 @@ arch_initcall(omap_gpio_sysinit);
1885#include <linux/debugfs.h> 1977#include <linux/debugfs.h>
1886#include <linux/seq_file.h> 1978#include <linux/seq_file.h>
1887 1979
1888static int gpio_is_input(struct gpio_bank *bank, int mask)
1889{
1890 void __iomem *reg = bank->base;
1891
1892 switch (bank->method) {
1893 case METHOD_MPUIO:
1894 reg += OMAP_MPUIO_IO_CNTL;
1895 break;
1896 case METHOD_GPIO_1510:
1897 reg += OMAP1510_GPIO_DIR_CONTROL;
1898 break;
1899 case METHOD_GPIO_1610:
1900 reg += OMAP1610_GPIO_DIRECTION;
1901 break;
1902 case METHOD_GPIO_730:
1903 reg += OMAP730_GPIO_DIR_CONTROL;
1904 break;
1905 case METHOD_GPIO_850:
1906 reg += OMAP850_GPIO_DIR_CONTROL;
1907 break;
1908 case METHOD_GPIO_24XX:
1909 reg += OMAP24XX_GPIO_OE;
1910 break;
1911 }
1912 return __raw_readl(reg) & mask;
1913}
1914
1915
1916static int dbg_gpio_show(struct seq_file *s, void *unused) 1980static int dbg_gpio_show(struct seq_file *s, void *unused)
1917{ 1981{
1918 unsigned i, j, gpio; 1982 unsigned i, j, gpio;
diff --git a/arch/arm/plat-omap/include/mach/clock.h b/arch/arm/plat-omap/include/mach/clock.h
index f9f65e1ba3f1..4b8b0d65cbf2 100644
--- a/arch/arm/plat-omap/include/mach/clock.h
+++ b/arch/arm/plat-omap/include/mach/clock.h
@@ -20,6 +20,8 @@ struct clockdomain;
20struct clkops { 20struct clkops {
21 int (*enable)(struct clk *); 21 int (*enable)(struct clk *);
22 void (*disable)(struct clk *); 22 void (*disable)(struct clk *);
23 void (*find_idlest)(struct clk *, void __iomem **, u8 *);
24 void (*find_companion)(struct clk *, void __iomem **, u8 *);
23}; 25};
24 26
25#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) || \ 27#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) || \
diff --git a/arch/arm/plat-omap/include/mach/cpu.h b/arch/arm/plat-omap/include/mach/cpu.h
index fc60c4ebcc28..11e73d9e8928 100644
--- a/arch/arm/plat-omap/include/mach/cpu.h
+++ b/arch/arm/plat-omap/include/mach/cpu.h
@@ -30,6 +30,17 @@
30#ifndef __ASM_ARCH_OMAP_CPU_H 30#ifndef __ASM_ARCH_OMAP_CPU_H
31#define __ASM_ARCH_OMAP_CPU_H 31#define __ASM_ARCH_OMAP_CPU_H
32 32
33/*
34 * Omap device type i.e. EMU/HS/TST/GP/BAD
35 */
36#define OMAP2_DEVICE_TYPE_TEST 0
37#define OMAP2_DEVICE_TYPE_EMU 1
38#define OMAP2_DEVICE_TYPE_SEC 2
39#define OMAP2_DEVICE_TYPE_GP 3
40#define OMAP2_DEVICE_TYPE_BAD 4
41
42int omap_type(void);
43
33struct omap_chip_id { 44struct omap_chip_id {
34 u8 oc; 45 u8 oc;
35 u8 type; 46 u8 type;
@@ -367,9 +378,6 @@ IS_OMAP_TYPE(3430, 0x3430)
367#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \ 378#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \
368 cpu_is_omap44xx()) 379 cpu_is_omap44xx())
369 380
370#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) || \
371 defined(CONFIG_ARCH_OMAP4)
372
373/* Various silicon revisions for omap2 */ 381/* Various silicon revisions for omap2 */
374#define OMAP242X_CLASS 0x24200024 382#define OMAP242X_CLASS 0x24200024
375#define OMAP2420_REV_ES1_0 0x24200024 383#define OMAP2420_REV_ES1_0 0x24200024
@@ -424,17 +432,4 @@ IS_OMAP_TYPE(3430, 0x3430)
424 432
425 433
426int omap_chip_is(struct omap_chip_id oci); 434int omap_chip_is(struct omap_chip_id oci);
427int omap_type(void);
428
429/*
430 * Macro to detect device type i.e. EMU/HS/TST/GP/BAD
431 */
432#define OMAP2_DEVICE_TYPE_TEST 0
433#define OMAP2_DEVICE_TYPE_EMU 1
434#define OMAP2_DEVICE_TYPE_SEC 2
435#define OMAP2_DEVICE_TYPE_GP 3
436#define OMAP2_DEVICE_TYPE_BAD 4
437
438void omap2_check_revision(void); 435void omap2_check_revision(void);
439
440#endif /* defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) */
diff --git a/arch/arm/plat-omap/include/mach/dma.h b/arch/arm/plat-omap/include/mach/dma.h
index 8c1eae88737e..7b939cc01962 100644
--- a/arch/arm/plat-omap/include/mach/dma.h
+++ b/arch/arm/plat-omap/include/mach/dma.h
@@ -389,6 +389,21 @@
389#define DMA_THREAD_FIFO_25 (0x02 << 14) 389#define DMA_THREAD_FIFO_25 (0x02 << 14)
390#define DMA_THREAD_FIFO_50 (0x03 << 14) 390#define DMA_THREAD_FIFO_50 (0x03 << 14)
391 391
392/* DMA4_OCP_SYSCONFIG bits */
393#define DMA_SYSCONFIG_MIDLEMODE_MASK (3 << 12)
394#define DMA_SYSCONFIG_CLOCKACTIVITY_MASK (3 << 8)
395#define DMA_SYSCONFIG_EMUFREE (1 << 5)
396#define DMA_SYSCONFIG_SIDLEMODE_MASK (3 << 3)
397#define DMA_SYSCONFIG_SOFTRESET (1 << 2)
398#define DMA_SYSCONFIG_AUTOIDLE (1 << 0)
399
400#define DMA_SYSCONFIG_MIDLEMODE(n) ((n) << 12)
401#define DMA_SYSCONFIG_SIDLEMODE(n) ((n) << 3)
402
403#define DMA_IDLEMODE_SMARTIDLE 0x2
404#define DMA_IDLEMODE_NO_IDLE 0x1
405#define DMA_IDLEMODE_FORCE_IDLE 0x0
406
392/* Chaining modes*/ 407/* Chaining modes*/
393#ifndef CONFIG_ARCH_OMAP1 408#ifndef CONFIG_ARCH_OMAP1
394#define OMAP_DMA_STATIC_CHAIN 0x1 409#define OMAP_DMA_STATIC_CHAIN 0x1
diff --git a/arch/arm/plat-omap/include/mach/io.h b/arch/arm/plat-omap/include/mach/io.h
index 3b2814720569..21fb0efdda86 100644
--- a/arch/arm/plat-omap/include/mach/io.h
+++ b/arch/arm/plat-omap/include/mach/io.h
@@ -201,7 +201,7 @@
201#define OMAP2_IO_ADDRESS(pa) IOMEM(__OMAP2_IO_ADDRESS(pa)) 201#define OMAP2_IO_ADDRESS(pa) IOMEM(__OMAP2_IO_ADDRESS(pa))
202 202
203#ifdef __ASSEMBLER__ 203#ifdef __ASSEMBLER__
204#define IOMEM(x) x 204#define IOMEM(x) (x)
205#else 205#else
206#define IOMEM(x) ((void __force __iomem *)(x)) 206#define IOMEM(x) ((void __force __iomem *)(x))
207 207
@@ -228,7 +228,8 @@ extern void omap1_map_common_io(void);
228extern void omap1_init_common_hw(void); 228extern void omap1_init_common_hw(void);
229 229
230extern void omap2_map_common_io(void); 230extern void omap2_map_common_io(void);
231extern void omap2_init_common_hw(struct omap_sdrc_params *sp); 231extern void omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
232 struct omap_sdrc_params *sdrc_cs1);
232 233
233#define __arch_ioremap(p,s,t) omap_ioremap(p,s,t) 234#define __arch_ioremap(p,s,t) omap_ioremap(p,s,t)
234#define __arch_iounmap(v) omap_iounmap(v) 235#define __arch_iounmap(v) omap_iounmap(v)
diff --git a/arch/arm/plat-omap/include/mach/mux.h b/arch/arm/plat-omap/include/mach/mux.h
index 85a621705766..80281c458baf 100644
--- a/arch/arm/plat-omap/include/mach/mux.h
+++ b/arch/arm/plat-omap/include/mach/mux.h
@@ -853,6 +853,10 @@ enum omap34xx_index {
853 AE5_34XX_GPIO143, 853 AE5_34XX_GPIO143,
854 H19_34XX_GPIO164_OUT, 854 H19_34XX_GPIO164_OUT,
855 J25_34XX_GPIO170, 855 J25_34XX_GPIO170,
856
857 /* OMAP3 SDRC CKE signals to SDR/DDR ram chips */
858 H16_34XX_SDRC_CKE0,
859 H17_34XX_SDRC_CKE1,
856}; 860};
857 861
858struct omap_mux_cfg { 862struct omap_mux_cfg {
diff --git a/arch/arm/plat-omap/include/mach/prcm.h b/arch/arm/plat-omap/include/mach/prcm.h
index 24ac3c715912..cda2a70397b4 100644
--- a/arch/arm/plat-omap/include/mach/prcm.h
+++ b/arch/arm/plat-omap/include/mach/prcm.h
@@ -25,6 +25,7 @@
25 25
26u32 omap_prcm_get_reset_sources(void); 26u32 omap_prcm_get_reset_sources(void);
27void omap_prcm_arch_reset(char mode); 27void omap_prcm_arch_reset(char mode);
28int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, const char *name);
28 29
29#endif 30#endif
30 31
diff --git a/arch/arm/plat-omap/include/mach/sdrc.h b/arch/arm/plat-omap/include/mach/sdrc.h
index adc73522491f..0be18e4ff182 100644
--- a/arch/arm/plat-omap/include/mach/sdrc.h
+++ b/arch/arm/plat-omap/include/mach/sdrc.h
@@ -30,6 +30,10 @@
30#define SDRC_ACTIM_CTRL_A_0 0x09c 30#define SDRC_ACTIM_CTRL_A_0 0x09c
31#define SDRC_ACTIM_CTRL_B_0 0x0a0 31#define SDRC_ACTIM_CTRL_B_0 0x0a0
32#define SDRC_RFR_CTRL_0 0x0a4 32#define SDRC_RFR_CTRL_0 0x0a4
33#define SDRC_MR_1 0x0B4
34#define SDRC_ACTIM_CTRL_A_1 0x0C4
35#define SDRC_ACTIM_CTRL_B_1 0x0C8
36#define SDRC_RFR_CTRL_1 0x0D4
33 37
34/* 38/*
35 * These values represent the number of memory clock cycles between 39 * These values represent the number of memory clock cycles between
@@ -102,8 +106,11 @@ struct omap_sdrc_params {
102 u32 mr; 106 u32 mr;
103}; 107};
104 108
105void __init omap2_sdrc_init(struct omap_sdrc_params *sp); 109void __init omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
106struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r); 110 struct omap_sdrc_params *sdrc_cs1);
111int omap2_sdrc_get_params(unsigned long r,
112 struct omap_sdrc_params **sdrc_cs0,
113 struct omap_sdrc_params **sdrc_cs1);
107 114
108#ifdef CONFIG_ARCH_OMAP2 115#ifdef CONFIG_ARCH_OMAP2
109 116
diff --git a/arch/arm/plat-omap/include/mach/serial.h b/arch/arm/plat-omap/include/mach/serial.h
index 13abd02d1527..def0529c75eb 100644
--- a/arch/arm/plat-omap/include/mach/serial.h
+++ b/arch/arm/plat-omap/include/mach/serial.h
@@ -59,6 +59,7 @@ extern void omap_uart_check_wakeup(void);
59extern void omap_uart_prepare_suspend(void); 59extern void omap_uart_prepare_suspend(void);
60extern void omap_uart_prepare_idle(int num); 60extern void omap_uart_prepare_idle(int num);
61extern void omap_uart_resume_idle(int num); 61extern void omap_uart_resume_idle(int num);
62extern void omap_uart_enable_irqs(int enable);
62#endif 63#endif
63 64
64#endif 65#endif
diff --git a/arch/arm/plat-omap/include/mach/sram.h b/arch/arm/plat-omap/include/mach/sram.h
index dca7c16ae903..8974e3fc2691 100644
--- a/arch/arm/plat-omap/include/mach/sram.h
+++ b/arch/arm/plat-omap/include/mach/sram.h
@@ -21,10 +21,12 @@ extern void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
21 u32 mem_type); 21 u32 mem_type);
22extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); 22extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass);
23 23
24extern u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, 24extern u32 omap3_configure_core_dpll(
25 u32 sdrc_actim_ctrla, 25 u32 m2, u32 unlock_dll, u32 f, u32 inc,
26 u32 sdrc_actim_ctrlb, u32 m2, 26 u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
27 u32 unlock_dll); 27 u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
28 u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
29 u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
28 30
29/* Do not use these */ 31/* Do not use these */
30extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl); 32extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl);
@@ -58,11 +60,12 @@ extern void omap243x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
58 u32 mem_type); 60 u32 mem_type);
59extern unsigned long omap243x_sram_reprogram_sdrc_sz; 61extern unsigned long omap243x_sram_reprogram_sdrc_sz;
60 62
61 63extern u32 omap3_sram_configure_core_dpll(
62extern u32 omap3_sram_configure_core_dpll(u32 sdrc_rfr_ctrl, 64 u32 m2, u32 unlock_dll, u32 f, u32 inc,
63 u32 sdrc_actim_ctrla, 65 u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
64 u32 sdrc_actim_ctrlb, u32 m2, 66 u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
65 u32 unlock_dll); 67 u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
68 u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
66extern unsigned long omap3_sram_configure_core_dpll_sz; 69extern unsigned long omap3_sram_configure_core_dpll_sz;
67 70
68#endif 71#endif
diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c
index 4cf449fa2cb5..4a0301399013 100644
--- a/arch/arm/plat-omap/iommu.c
+++ b/arch/arm/plat-omap/iommu.c
@@ -298,7 +298,7 @@ void flush_iotlb_page(struct iommu *obj, u32 da)
298 if ((start <= da) && (da < start + bytes)) { 298 if ((start <= da) && (da < start + bytes)) {
299 dev_dbg(obj->dev, "%s: %08x<=%08x(%x)\n", 299 dev_dbg(obj->dev, "%s: %08x<=%08x(%x)\n",
300 __func__, start, da, bytes); 300 __func__, start, da, bytes);
301 301 iotlb_load_cr(obj, &cr);
302 iommu_write_reg(obj, 1, MMU_FLUSH_ENTRY); 302 iommu_write_reg(obj, 1, MMU_FLUSH_ENTRY);
303 } 303 }
304 } 304 }
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c
index a5b9bcd6b108..5eae7876979c 100644
--- a/arch/arm/plat-omap/sram.c
+++ b/arch/arm/plat-omap/sram.c
@@ -44,9 +44,9 @@
44#define OMAP2_SRAM_VA 0xe3000000 44#define OMAP2_SRAM_VA 0xe3000000
45#define OMAP2_SRAM_PUB_VA (OMAP2_SRAM_VA + 0x800) 45#define OMAP2_SRAM_PUB_VA (OMAP2_SRAM_VA + 0x800)
46#define OMAP3_SRAM_PA 0x40200000 46#define OMAP3_SRAM_PA 0x40200000
47#define OMAP3_SRAM_VA 0xd7000000 47#define OMAP3_SRAM_VA 0xe3000000
48#define OMAP3_SRAM_PUB_PA 0x40208000 48#define OMAP3_SRAM_PUB_PA 0x40208000
49#define OMAP3_SRAM_PUB_VA 0xd7008000 49#define OMAP3_SRAM_PUB_VA (OMAP3_SRAM_VA + 0x8000)
50#define OMAP4_SRAM_PA 0x40200000 /*0x402f0000*/ 50#define OMAP4_SRAM_PA 0x40200000 /*0x402f0000*/
51#define OMAP4_SRAM_VA 0xd7000000 /*0xd70f0000*/ 51#define OMAP4_SRAM_VA 0xd7000000 /*0xd70f0000*/
52 52
@@ -133,7 +133,12 @@ void __init omap_detect_sram(void)
133 if (cpu_is_omap34xx()) { 133 if (cpu_is_omap34xx()) {
134 omap_sram_base = OMAP3_SRAM_PUB_VA; 134 omap_sram_base = OMAP3_SRAM_PUB_VA;
135 omap_sram_start = OMAP3_SRAM_PUB_PA; 135 omap_sram_start = OMAP3_SRAM_PUB_PA;
136 omap_sram_size = 0x8000; /* 32K */ 136 if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) ||
137 (omap_type() == OMAP2_DEVICE_TYPE_SEC)) {
138 omap_sram_size = 0x7000; /* 28K */
139 } else {
140 omap_sram_size = 0x8000; /* 32K */
141 }
137 } else { 142 } else {
138 omap_sram_base = OMAP2_SRAM_PUB_VA; 143 omap_sram_base = OMAP2_SRAM_PUB_VA;
139 omap_sram_start = OMAP2_SRAM_PUB_PA; 144 omap_sram_start = OMAP2_SRAM_PUB_PA;
@@ -368,18 +373,26 @@ static inline int omap243x_sram_init(void)
368 373
369#ifdef CONFIG_ARCH_OMAP3 374#ifdef CONFIG_ARCH_OMAP3
370 375
371static u32 (*_omap3_sram_configure_core_dpll)(u32 sdrc_rfr_ctrl, 376static u32 (*_omap3_sram_configure_core_dpll)(
372 u32 sdrc_actim_ctrla, 377 u32 m2, u32 unlock_dll, u32 f, u32 inc,
373 u32 sdrc_actim_ctrlb, 378 u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
374 u32 m2, u32 unlock_dll); 379 u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
375u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, u32 sdrc_actim_ctrla, 380 u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
376 u32 sdrc_actim_ctrlb, u32 m2, u32 unlock_dll) 381 u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
382
383u32 omap3_configure_core_dpll(u32 m2, u32 unlock_dll, u32 f, u32 inc,
384 u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
385 u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
386 u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
387 u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1)
377{ 388{
378 BUG_ON(!_omap3_sram_configure_core_dpll); 389 BUG_ON(!_omap3_sram_configure_core_dpll);
379 return _omap3_sram_configure_core_dpll(sdrc_rfr_ctrl, 390 return _omap3_sram_configure_core_dpll(
380 sdrc_actim_ctrla, 391 m2, unlock_dll, f, inc,
381 sdrc_actim_ctrlb, m2, 392 sdrc_rfr_ctrl_0, sdrc_actim_ctrl_a_0,
382 unlock_dll); 393 sdrc_actim_ctrl_b_0, sdrc_mr_0,
394 sdrc_rfr_ctrl_1, sdrc_actim_ctrl_a_1,
395 sdrc_actim_ctrl_b_1, sdrc_mr_1);
383} 396}
384 397
385/* REVISIT: Should this be same as omap34xx_sram_init() after off-idle? */ 398/* REVISIT: Should this be same as omap34xx_sram_init() after off-idle? */
diff --git a/arch/arm/plat-orion/include/plat/gpio.h b/arch/arm/plat-orion/include/plat/gpio.h
index 9646a94ed3d0..07c430fdc9ef 100644
--- a/arch/arm/plat-orion/include/plat/gpio.h
+++ b/arch/arm/plat-orion/include/plat/gpio.h
@@ -11,6 +11,8 @@
11#ifndef __PLAT_GPIO_H 11#ifndef __PLAT_GPIO_H
12#define __PLAT_GPIO_H 12#define __PLAT_GPIO_H
13 13
14#include <linux/init.h>
15
14/* 16/*
15 * GENERIC_GPIO primitives. 17 * GENERIC_GPIO primitives.
16 */ 18 */
diff --git a/arch/arm/plat-pxa/gpio.c b/arch/arm/plat-pxa/gpio.c
index abc79d44acaa..98548c6903a0 100644
--- a/arch/arm/plat-pxa/gpio.c
+++ b/arch/arm/plat-pxa/gpio.c
@@ -16,7 +16,7 @@
16#include <linux/irq.h> 16#include <linux/irq.h>
17#include <linux/io.h> 17#include <linux/io.h>
18#include <linux/sysdev.h> 18#include <linux/sysdev.h>
19#include <linux/bootmem.h> 19#include <linux/slab.h>
20 20
21#include <mach/gpio.h> 21#include <mach/gpio.h>
22 22
@@ -112,17 +112,12 @@ static int __init pxa_init_gpio_chip(int gpio_end)
112 int i, gpio, nbanks = gpio_to_bank(gpio_end) + 1; 112 int i, gpio, nbanks = gpio_to_bank(gpio_end) + 1;
113 struct pxa_gpio_chip *chips; 113 struct pxa_gpio_chip *chips;
114 114
115 /* this is early, we have to use bootmem allocator, and we really 115 chips = kzalloc(nbanks * sizeof(struct pxa_gpio_chip), GFP_KERNEL);
116 * want this to be allocated dynamically for different 'gpio_end'
117 */
118 chips = alloc_bootmem_low(nbanks * sizeof(struct pxa_gpio_chip));
119 if (chips == NULL) { 116 if (chips == NULL) {
120 pr_err("%s: failed to allocate GPIO chips\n", __func__); 117 pr_err("%s: failed to allocate GPIO chips\n", __func__);
121 return -ENOMEM; 118 return -ENOMEM;
122 } 119 }
123 120
124 memset(chips, 0, nbanks * sizeof(struct pxa_gpio_chip));
125
126 for (i = 0, gpio = 0; i < nbanks; i++, gpio += 32) { 121 for (i = 0, gpio = 0; i < nbanks; i++, gpio += 32) {
127 struct gpio_chip *c = &chips[i].chip; 122 struct gpio_chip *c = &chips[i].chip;
128 123
diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
index 610651455a78..0761766b1833 100644
--- a/arch/arm/plat-s3c/Makefile
+++ b/arch/arm/plat-s3c/Makefile
@@ -34,6 +34,7 @@ obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o
34obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmmc1.o 34obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmmc1.o
35obj-y += dev-i2c0.o 35obj-y += dev-i2c0.o
36obj-$(CONFIG_S3C_DEV_I2C1) += dev-i2c1.o 36obj-$(CONFIG_S3C_DEV_I2C1) += dev-i2c1.o
37obj-$(CONFIG_SND_S3C64XX_SOC_I2S) += dev-audio.o
37obj-$(CONFIG_S3C_DEV_FB) += dev-fb.o 38obj-$(CONFIG_S3C_DEV_FB) += dev-fb.o
38obj-$(CONFIG_S3C_DEV_USB_HOST) += dev-usb.o 39obj-$(CONFIG_S3C_DEV_USB_HOST) += dev-usb.o
39obj-$(CONFIG_S3C_DEV_USB_HSOTG) += dev-usb-hsotg.o 40obj-$(CONFIG_S3C_DEV_USB_HSOTG) += dev-usb-hsotg.o
diff --git a/arch/arm/plat-s3c/dev-audio.c b/arch/arm/plat-s3c/dev-audio.c
new file mode 100644
index 000000000000..1322beb40dd7
--- /dev/null
+++ b/arch/arm/plat-s3c/dev-audio.c
@@ -0,0 +1,68 @@
1/* linux/arch/arm/plat-s3c/dev-audio.c
2 *
3 * Copyright 2009 Wolfson Microelectronics
4 * Mark Brown <broonie@opensource.wolfsonmicro.com>
5 *
6
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/string.h>
14#include <linux/platform_device.h>
15
16#include <mach/irqs.h>
17#include <mach/map.h>
18
19#include <plat/devs.h>
20
21
22static struct resource s3c64xx_iis0_resource[] = {
23 [0] = {
24 .start = S3C64XX_PA_IIS0,
25 .end = S3C64XX_PA_IIS0 + 0x100 - 1,
26 .flags = IORESOURCE_MEM,
27 },
28};
29
30struct platform_device s3c64xx_device_iis0 = {
31 .name = "s3c64xx-iis",
32 .id = 0,
33 .num_resources = ARRAY_SIZE(s3c64xx_iis0_resource),
34 .resource = s3c64xx_iis0_resource,
35};
36EXPORT_SYMBOL(s3c64xx_device_iis0);
37
38static struct resource s3c64xx_iis1_resource[] = {
39 [0] = {
40 .start = S3C64XX_PA_IIS1,
41 .end = S3C64XX_PA_IIS1 + 0x100 - 1,
42 .flags = IORESOURCE_MEM,
43 },
44};
45
46struct platform_device s3c64xx_device_iis1 = {
47 .name = "s3c64xx-iis",
48 .id = 1,
49 .num_resources = ARRAY_SIZE(s3c64xx_iis1_resource),
50 .resource = s3c64xx_iis1_resource,
51};
52EXPORT_SYMBOL(s3c64xx_device_iis1);
53
54static struct resource s3c64xx_iisv4_resource[] = {
55 [0] = {
56 .start = S3C64XX_PA_IISV4,
57 .end = S3C64XX_PA_IISV4 + 0x100 - 1,
58 .flags = IORESOURCE_MEM,
59 },
60};
61
62struct platform_device s3c64xx_device_iisv4 = {
63 .name = "s3c64xx-iis-v4",
64 .id = -1,
65 .num_resources = ARRAY_SIZE(s3c64xx_iisv4_resource),
66 .resource = s3c64xx_iisv4_resource,
67};
68EXPORT_SYMBOL(s3c64xx_device_iisv4);
diff --git a/arch/arm/plat-s3c/gpio-config.c b/arch/arm/plat-s3c/gpio-config.c
index 08044dec9731..456969b6fa0d 100644
--- a/arch/arm/plat-s3c/gpio-config.c
+++ b/arch/arm/plat-s3c/gpio-config.c
@@ -119,7 +119,7 @@ int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
119 unsigned int shift = (off & 7) * 4; 119 unsigned int shift = (off & 7) * 4;
120 u32 con; 120 u32 con;
121 121
122 if (off < 8 && chip->chip.ngpio >= 8) 122 if (off < 8 && chip->chip.ngpio > 8)
123 reg -= 4; 123 reg -= 4;
124 124
125 if (s3c_gpio_is_cfg_special(cfg)) { 125 if (s3c_gpio_is_cfg_special(cfg)) {
diff --git a/arch/arm/plat-s3c/include/plat/devs.h b/arch/arm/plat-s3c/include/plat/devs.h
index a0b6768fddcf..2e170827e0b0 100644
--- a/arch/arm/plat-s3c/include/plat/devs.h
+++ b/arch/arm/plat-s3c/include/plat/devs.h
@@ -24,16 +24,20 @@ extern struct platform_device *s3c24xx_uart_src[];
24 24
25extern struct platform_device s3c_device_timer[]; 25extern struct platform_device s3c_device_timer[];
26 26
27extern struct platform_device s3c64xx_device_iis0;
28extern struct platform_device s3c64xx_device_iis1;
29extern struct platform_device s3c64xx_device_iisv4;
30
27extern struct platform_device s3c_device_fb; 31extern struct platform_device s3c_device_fb;
28extern struct platform_device s3c_device_usb; 32extern struct platform_device s3c_device_usb;
29extern struct platform_device s3c_device_lcd; 33extern struct platform_device s3c_device_lcd;
30extern struct platform_device s3c_device_wdt; 34extern struct platform_device s3c_device_wdt;
31extern struct platform_device s3c_device_i2c0; 35extern struct platform_device s3c_device_i2c0;
32extern struct platform_device s3c_device_i2c1; 36extern struct platform_device s3c_device_i2c1;
33extern struct platform_device s3c_device_iis;
34extern struct platform_device s3c_device_rtc; 37extern struct platform_device s3c_device_rtc;
35extern struct platform_device s3c_device_adc; 38extern struct platform_device s3c_device_adc;
36extern struct platform_device s3c_device_sdi; 39extern struct platform_device s3c_device_sdi;
40extern struct platform_device s3c_device_iis;
37extern struct platform_device s3c_device_hwmon; 41extern struct platform_device s3c_device_hwmon;
38extern struct platform_device s3c_device_hsmmc0; 42extern struct platform_device s3c_device_hsmmc0;
39extern struct platform_device s3c_device_hsmmc1; 43extern struct platform_device s3c_device_hsmmc1;
diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h
index f4dcd14af059..18f958801e64 100644
--- a/arch/arm/plat-s3c/include/plat/nand.h
+++ b/arch/arm/plat-s3c/include/plat/nand.h
@@ -10,19 +10,26 @@
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11*/ 11*/
12 12
13/* struct s3c2410_nand_set 13/**
14 * struct s3c2410_nand_set - define a set of one or more nand chips
15 * @disable_ecc: Entirely disable ECC - Dangerous
16 * @flash_bbt: Openmoko u-boot can create a Bad Block Table
17 * Setting this flag will allow the kernel to
18 * look for it at boot time and also skip the NAND
19 * scan.
20 * @nr_chips: Number of chips in this set
21 * @nr_partitions: Number of partitions pointed to by @partitions
22 * @name: Name of set (optional)
23 * @nr_map: Map for low-layer logical to physical chip numbers (option)
24 * @partitions: The mtd partition list
14 * 25 *
15 * define an set of one or more nand chips registered with an unique mtd 26 * define a set of one or more nand chips registered with an unique mtd. Also
16 * 27 * allows to pass flag to the underlying NAND layer. 'disable_ecc' will trigger
17 * nr_chips = number of chips in this set 28 * a warning at boot time.
18 * nr_partitions = number of partitions pointed to be partitoons (or zero) 29 */
19 * name = name of set (optional)
20 * nr_map = map for low-layer logical to physical chip numbers (option)
21 * partitions = mtd partition list
22*/
23
24struct s3c2410_nand_set { 30struct s3c2410_nand_set {
25 unsigned int disable_ecc : 1; 31 unsigned int disable_ecc:1;
32 unsigned int flash_bbt:1;
26 33
27 int nr_chips; 34 int nr_chips;
28 int nr_partitions; 35 int nr_partitions;
@@ -39,7 +46,7 @@ struct s3c2410_platform_nand {
39 int twrph0; /* active time for nWE/nOE */ 46 int twrph0; /* active time for nWE/nOE */
40 int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ 47 int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */
41 48
42 unsigned int ignore_unset_ecc : 1; 49 unsigned int ignore_unset_ecc:1;
43 50
44 int nr_sets; 51 int nr_sets;
45 struct s3c2410_nand_set *sets; 52 struct s3c2410_nand_set *sets;
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile
index 636cb12711df..579a165c2827 100644
--- a/arch/arm/plat-s3c24xx/Makefile
+++ b/arch/arm/plat-s3c24xx/Makefile
@@ -29,7 +29,7 @@ obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o
29obj-$(CONFIG_PM) += pm.o 29obj-$(CONFIG_PM) += pm.o
30obj-$(CONFIG_PM) += irq-pm.o 30obj-$(CONFIG_PM) += irq-pm.o
31obj-$(CONFIG_PM) += sleep.o 31obj-$(CONFIG_PM) += sleep.o
32obj-$(CONFIG_HAVE_PWM) += pwm.o 32obj-$(CONFIG_S3C24XX_PWM) += pwm.o
33obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o 33obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o
34obj-$(CONFIG_S3C2410_DMA) += dma.o 34obj-$(CONFIG_S3C2410_DMA) += dma.o
35obj-$(CONFIG_S3C24XX_ADC) += adc.o 35obj-$(CONFIG_S3C24XX_ADC) += adc.o
diff --git a/arch/arm/plat-s3c24xx/clock-dclk.c b/arch/arm/plat-s3c24xx/clock-dclk.c
index 5b75a797b5ab..0afb217a775e 100644
--- a/arch/arm/plat-s3c24xx/clock-dclk.c
+++ b/arch/arm/plat-s3c24xx/clock-dclk.c
@@ -129,7 +129,7 @@ static int s3c24xx_clkout_setparent(struct clk *clk, struct clk *parent)
129 129
130 /* calculate the MISCCR setting for the clock */ 130 /* calculate the MISCCR setting for the clock */
131 131
132 if (parent == &clk_xtal) 132 if (parent == &clk_mpll)
133 source = S3C2410_MISCCR_CLK0_MPLL; 133 source = S3C2410_MISCCR_CLK0_MPLL;
134 else if (parent == &clk_upll) 134 else if (parent == &clk_upll)
135 source = S3C2410_MISCCR_CLK0_UPLL; 135 source = S3C2410_MISCCR_CLK0_UPLL;
diff --git a/arch/arm/plat-s3c24xx/pwm.c b/arch/arm/plat-s3c24xx/pwm.c
index 0120b760315b..82a6d4de02a3 100644
--- a/arch/arm/plat-s3c24xx/pwm.c
+++ b/arch/arm/plat-s3c24xx/pwm.c
@@ -246,6 +246,10 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
246 246
247 tcmp = duty_ns / tin_ns; 247 tcmp = duty_ns / tin_ns;
248 tcmp = tcnt - tcmp; 248 tcmp = tcnt - tcmp;
249 /* the pwm hw only checks the compare register after a decrement,
250 so the pin never toggles if tcmp = tcnt */
251 if (tcmp == tcnt)
252 tcmp--;
249 253
250 pwm_dbg(pwm, "tin_ns=%lu, tcmp=%ld/%lu\n", tin_ns, tcmp, tcnt); 254 pwm_dbg(pwm, "tin_ns=%lu, tcmp=%ld/%lu\n", tin_ns, tcmp, tcnt);
251 255
diff --git a/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c b/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c
index 9edf7894eedd..da7a61728c18 100644
--- a/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c
+++ b/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c
@@ -12,8 +12,7 @@
12*/ 12*/
13 13
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15 15#include <linux/gpio.h>
16#include <mach/hardware.h>
17 16
18#include <mach/spi.h> 17#include <mach/spi.h>
19#include <mach/regs-gpio.h> 18#include <mach/regs-gpio.h>
diff --git a/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c b/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c
index f34d0fc69ad8..86b9edc67413 100644
--- a/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c
+++ b/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c
@@ -12,8 +12,7 @@
12*/ 12*/
13 13
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15 15#include <linux/gpio.h>
16#include <mach/hardware.h>
17 16
18#include <mach/spi.h> 17#include <mach/spi.h>
19#include <mach/regs-gpio.h> 18#include <mach/regs-gpio.h>
diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile
index 2ed5df34f9ea..3c8882cd6268 100644
--- a/arch/arm/plat-s3c64xx/Makefile
+++ b/arch/arm/plat-s3c64xx/Makefile
@@ -23,6 +23,7 @@ obj-y += gpiolib.o
23 23
24obj-$(CONFIG_CPU_S3C6400_INIT) += s3c6400-init.o 24obj-$(CONFIG_CPU_S3C6400_INIT) += s3c6400-init.o
25obj-$(CONFIG_CPU_S3C6400_CLOCK) += s3c6400-clock.o 25obj-$(CONFIG_CPU_S3C6400_CLOCK) += s3c6400-clock.o
26obj-$(CONFIG_CPU_FREQ_S3C64XX) += cpufreq.o
26 27
27# PM support 28# PM support
28 29
diff --git a/arch/arm/plat-s3c64xx/clock.c b/arch/arm/plat-s3c64xx/clock.c
index 0bc2fa1dfc40..7a36e899360d 100644
--- a/arch/arm/plat-s3c64xx/clock.c
+++ b/arch/arm/plat-s3c64xx/clock.c
@@ -191,7 +191,7 @@ static struct clk init_clocks[] = {
191 .id = -1, 191 .id = -1,
192 .parent = &clk_h, 192 .parent = &clk_h,
193 .enable = s3c64xx_hclk_ctrl, 193 .enable = s3c64xx_hclk_ctrl,
194 .ctrlbit = S3C_CLKCON_SCLK_UHOST, 194 .ctrlbit = S3C_CLKCON_HCLK_UHOST,
195 }, { 195 }, {
196 .name = "hsmmc", 196 .name = "hsmmc",
197 .id = 0, 197 .id = 0,
diff --git a/arch/arm/plat-s3c64xx/cpufreq.c b/arch/arm/plat-s3c64xx/cpufreq.c
new file mode 100644
index 000000000000..e6e0843215df
--- /dev/null
+++ b/arch/arm/plat-s3c64xx/cpufreq.c
@@ -0,0 +1,262 @@
1/* linux/arch/arm/plat-s3c64xx/cpufreq.c
2 *
3 * Copyright 2009 Wolfson Microelectronics plc
4 *
5 * S3C64xx CPUfreq Support
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/types.h>
14#include <linux/init.h>
15#include <linux/cpufreq.h>
16#include <linux/clk.h>
17#include <linux/err.h>
18#include <linux/regulator/consumer.h>
19
20static struct clk *armclk;
21static struct regulator *vddarm;
22
23#ifdef CONFIG_CPU_S3C6410
24struct s3c64xx_dvfs {
25 unsigned int vddarm_min;
26 unsigned int vddarm_max;
27};
28
29static struct s3c64xx_dvfs s3c64xx_dvfs_table[] = {
30 [0] = { 1000000, 1000000 },
31 [1] = { 1000000, 1050000 },
32 [2] = { 1050000, 1100000 },
33 [3] = { 1050000, 1150000 },
34 [4] = { 1250000, 1350000 },
35};
36
37static struct cpufreq_frequency_table s3c64xx_freq_table[] = {
38 { 0, 66000 },
39 { 0, 133000 },
40 { 1, 222000 },
41 { 1, 266000 },
42 { 2, 333000 },
43 { 2, 400000 },
44 { 3, 532000 },
45 { 3, 533000 },
46 { 4, 667000 },
47 { 0, CPUFREQ_TABLE_END },
48};
49#endif
50
51static int s3c64xx_cpufreq_verify_speed(struct cpufreq_policy *policy)
52{
53 if (policy->cpu != 0)
54 return -EINVAL;
55
56 return cpufreq_frequency_table_verify(policy, s3c64xx_freq_table);
57}
58
59static unsigned int s3c64xx_cpufreq_get_speed(unsigned int cpu)
60{
61 if (cpu != 0)
62 return 0;
63
64 return clk_get_rate(armclk) / 1000;
65}
66
67static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
68 unsigned int target_freq,
69 unsigned int relation)
70{
71 int ret;
72 unsigned int i;
73 struct cpufreq_freqs freqs;
74 struct s3c64xx_dvfs *dvfs;
75
76 ret = cpufreq_frequency_table_target(policy, s3c64xx_freq_table,
77 target_freq, relation, &i);
78 if (ret != 0)
79 return ret;
80
81 freqs.cpu = 0;
82 freqs.old = clk_get_rate(armclk) / 1000;
83 freqs.new = s3c64xx_freq_table[i].frequency;
84 freqs.flags = 0;
85 dvfs = &s3c64xx_dvfs_table[s3c64xx_freq_table[i].index];
86
87 if (freqs.old == freqs.new)
88 return 0;
89
90 pr_debug("cpufreq: Transition %d-%dkHz\n", freqs.old, freqs.new);
91
92 cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
93
94#ifdef CONFIG_REGULATOR
95 if (vddarm && freqs.new > freqs.old) {
96 ret = regulator_set_voltage(vddarm,
97 dvfs->vddarm_min,
98 dvfs->vddarm_max);
99 if (ret != 0) {
100 pr_err("cpufreq: Failed to set VDDARM for %dkHz: %d\n",
101 freqs.new, ret);
102 goto err;
103 }
104 }
105#endif
106
107 ret = clk_set_rate(armclk, freqs.new * 1000);
108 if (ret < 0) {
109 pr_err("cpufreq: Failed to set rate %dkHz: %d\n",
110 freqs.new, ret);
111 goto err;
112 }
113
114#ifdef CONFIG_REGULATOR
115 if (vddarm && freqs.new < freqs.old) {
116 ret = regulator_set_voltage(vddarm,
117 dvfs->vddarm_min,
118 dvfs->vddarm_max);
119 if (ret != 0) {
120 pr_err("cpufreq: Failed to set VDDARM for %dkHz: %d\n",
121 freqs.new, ret);
122 goto err_clk;
123 }
124 }
125#endif
126
127 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
128
129 pr_debug("cpufreq: Set actual frequency %lukHz\n",
130 clk_get_rate(armclk) / 1000);
131
132 return 0;
133
134err_clk:
135 if (clk_set_rate(armclk, freqs.old * 1000) < 0)
136 pr_err("Failed to restore original clock rate\n");
137err:
138 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
139
140 return ret;
141}
142
143#ifdef CONFIG_REGULATOR
144static void __init s3c64xx_cpufreq_constrain_voltages(void)
145{
146 int count, v, i, found;
147 struct cpufreq_frequency_table *freq;
148 struct s3c64xx_dvfs *dvfs;
149
150 count = regulator_count_voltages(vddarm);
151 if (count < 0) {
152 pr_err("cpufreq: Unable to check supported voltages\n");
153 return;
154 }
155
156 freq = s3c64xx_freq_table;
157 while (freq->frequency != CPUFREQ_TABLE_END) {
158 if (freq->frequency == CPUFREQ_ENTRY_INVALID)
159 continue;
160
161 dvfs = &s3c64xx_dvfs_table[freq->index];
162 found = 0;
163
164 for (i = 0; i < count; i++) {
165 v = regulator_list_voltage(vddarm, i);
166 if (v >= dvfs->vddarm_min && v <= dvfs->vddarm_max)
167 found = 1;
168 }
169
170 if (!found) {
171 pr_debug("cpufreq: %dkHz unsupported by regulator\n",
172 freq->frequency);
173 freq->frequency = CPUFREQ_ENTRY_INVALID;
174 }
175
176 freq++;
177 }
178}
179#endif
180
181static int __init s3c64xx_cpufreq_driver_init(struct cpufreq_policy *policy)
182{
183 int ret;
184 struct cpufreq_frequency_table *freq;
185
186 if (policy->cpu != 0)
187 return -EINVAL;
188
189 if (s3c64xx_freq_table == NULL) {
190 pr_err("cpufreq: No frequency information for this CPU\n");
191 return -ENODEV;
192 }
193
194 armclk = clk_get(NULL, "armclk");
195 if (IS_ERR(armclk)) {
196 pr_err("cpufreq: Unable to obtain ARMCLK: %ld\n",
197 PTR_ERR(armclk));
198 return PTR_ERR(armclk);
199 }
200
201#ifdef CONFIG_REGULATOR
202 vddarm = regulator_get(NULL, "vddarm");
203 if (IS_ERR(vddarm)) {
204 ret = PTR_ERR(vddarm);
205 pr_err("cpufreq: Failed to obtain VDDARM: %d\n", ret);
206 pr_err("cpufreq: Only frequency scaling available\n");
207 vddarm = NULL;
208 } else {
209 s3c64xx_cpufreq_constrain_voltages();
210 }
211#endif
212
213 freq = s3c64xx_freq_table;
214 while (freq->frequency != CPUFREQ_TABLE_END) {
215 unsigned long r;
216
217 /* Check for frequencies we can generate */
218 r = clk_round_rate(armclk, freq->frequency * 1000);
219 r /= 1000;
220 if (r != freq->frequency)
221 freq->frequency = CPUFREQ_ENTRY_INVALID;
222
223 /* If we have no regulator then assume startup
224 * frequency is the maximum we can support. */
225 if (!vddarm && freq->frequency > s3c64xx_cpufreq_get_speed(0))
226 freq->frequency = CPUFREQ_ENTRY_INVALID;
227
228 freq++;
229 }
230
231 policy->cur = clk_get_rate(armclk) / 1000;
232
233 /* Pick a conservative guess in ns: we'll need ~1 I2C/SPI
234 * write plus clock reprogramming. */
235 policy->cpuinfo.transition_latency = 2 * 1000 * 1000;
236
237 ret = cpufreq_frequency_table_cpuinfo(policy, s3c64xx_freq_table);
238 if (ret != 0) {
239 pr_err("cpufreq: Failed to configure frequency table: %d\n",
240 ret);
241 regulator_put(vddarm);
242 clk_put(armclk);
243 }
244
245 return ret;
246}
247
248static struct cpufreq_driver s3c64xx_cpufreq_driver = {
249 .owner = THIS_MODULE,
250 .flags = 0,
251 .verify = s3c64xx_cpufreq_verify_speed,
252 .target = s3c64xx_cpufreq_set_target,
253 .get = s3c64xx_cpufreq_get_speed,
254 .init = s3c64xx_cpufreq_driver_init,
255 .name = "s3c",
256};
257
258static int __init s3c64xx_cpufreq_init(void)
259{
260 return cpufreq_register_driver(&s3c64xx_cpufreq_driver);
261}
262module_init(s3c64xx_cpufreq_init);
diff --git a/arch/arm/plat-s3c64xx/gpiolib.c b/arch/arm/plat-s3c64xx/gpiolib.c
index da7b60ee5e67..92859290ea33 100644
--- a/arch/arm/plat-s3c64xx/gpiolib.c
+++ b/arch/arm/plat-s3c64xx/gpiolib.c
@@ -321,6 +321,11 @@ static struct s3c_gpio_cfg gpio_2bit_cfg_eint11 = {
321 .get_pull = s3c_gpio_getpull_updown, 321 .get_pull = s3c_gpio_getpull_updown,
322}; 322};
323 323
324int s3c64xx_gpio2int_gpn(struct gpio_chip *chip, unsigned pin)
325{
326 return IRQ_EINT(0) + pin;
327}
328
324static struct s3c_gpio_chip gpio_2bit[] = { 329static struct s3c_gpio_chip gpio_2bit[] = {
325 { 330 {
326 .base = S3C64XX_GPF_BASE, 331 .base = S3C64XX_GPF_BASE,
@@ -353,6 +358,7 @@ static struct s3c_gpio_chip gpio_2bit[] = {
353 .base = S3C64XX_GPN(0), 358 .base = S3C64XX_GPN(0),
354 .ngpio = S3C64XX_GPIO_N_NR, 359 .ngpio = S3C64XX_GPIO_N_NR,
355 .label = "GPN", 360 .label = "GPN",
361 .to_irq = s3c64xx_gpio2int_gpn,
356 }, 362 },
357 }, { 363 }, {
358 .base = S3C64XX_GPO_BASE, 364 .base = S3C64XX_GPO_BASE,
diff --git a/arch/arm/plat-s3c64xx/include/plat/regs-clock.h b/arch/arm/plat-s3c64xx/include/plat/regs-clock.h
index 52836d41e333..a8777a755dfa 100644
--- a/arch/arm/plat-s3c64xx/include/plat/regs-clock.h
+++ b/arch/arm/plat-s3c64xx/include/plat/regs-clock.h
@@ -88,11 +88,11 @@
88#define S3C6400_CLKDIV2_SPI0_SHIFT (0) 88#define S3C6400_CLKDIV2_SPI0_SHIFT (0)
89 89
90/* HCLK GATE Registers */ 90/* HCLK GATE Registers */
91#define S3C_CLKCON_HCLK_BUS (1<<30) 91#define S3C_CLKCON_HCLK_3DSE (1<<31)
92#define S3C_CLKCON_HCLK_SECUR (1<<29) 92#define S3C_CLKCON_HCLK_UHOST (1<<29)
93#define S3C_CLKCON_HCLK_SDMA1 (1<<28) 93#define S3C_CLKCON_HCLK_SECUR (1<<28)
94#define S3C_CLKCON_HCLK_SDMA2 (1<<27) 94#define S3C_CLKCON_HCLK_SDMA1 (1<<27)
95#define S3C_CLKCON_HCLK_UHOST (1<<26) 95#define S3C_CLKCON_HCLK_SDMA0 (1<<26)
96#define S3C_CLKCON_HCLK_IROM (1<<25) 96#define S3C_CLKCON_HCLK_IROM (1<<25)
97#define S3C_CLKCON_HCLK_DDR1 (1<<24) 97#define S3C_CLKCON_HCLK_DDR1 (1<<24)
98#define S3C_CLKCON_HCLK_DDR0 (1<<23) 98#define S3C_CLKCON_HCLK_DDR0 (1<<23)
diff --git a/arch/arm/plat-s3c64xx/pm.c b/arch/arm/plat-s3c64xx/pm.c
index 07a6516a4f3c..47632fc7eb66 100644
--- a/arch/arm/plat-s3c64xx/pm.c
+++ b/arch/arm/plat-s3c64xx/pm.c
@@ -117,8 +117,6 @@ void s3c_pm_save_core(void)
117 * this. 117 * this.
118 */ 118 */
119 119
120#include <plat/regs-gpio.h>
121
122static void s3c64xx_cpu_suspend(void) 120static void s3c64xx_cpu_suspend(void)
123{ 121{
124 unsigned long tmp; 122 unsigned long tmp;
diff --git a/arch/arm/plat-s3c64xx/s3c6400-clock.c b/arch/arm/plat-s3c64xx/s3c6400-clock.c
index 1debc1f9f987..febac1950d8e 100644
--- a/arch/arm/plat-s3c64xx/s3c6400-clock.c
+++ b/arch/arm/plat-s3c64xx/s3c6400-clock.c
@@ -153,7 +153,7 @@ static unsigned long s3c64xx_clk_arm_round_rate(struct clk *clk,
153 u32 div; 153 u32 div;
154 154
155 if (parent < rate) 155 if (parent < rate)
156 return rate; 156 return parent;
157 157
158 div = (parent / rate) - 1; 158 div = (parent / rate) - 1;
159 if (div > armclk_mask) 159 if (div > armclk_mask)
@@ -175,7 +175,7 @@ static int s3c64xx_clk_arm_set_rate(struct clk *clk, unsigned long rate)
175 div = clk_get_rate(clk->parent) / rate; 175 div = clk_get_rate(clk->parent) / rate;
176 176
177 val = __raw_readl(S3C_CLK_DIV0); 177 val = __raw_readl(S3C_CLK_DIV0);
178 val &= armclk_mask; 178 val &= ~armclk_mask;
179 val |= (div - 1); 179 val |= (div - 1);
180 __raw_writel(val, S3C_CLK_DIV0); 180 __raw_writel(val, S3C_CLK_DIV0);
181 181
diff --git a/arch/arm/plat-stmp3xxx/pinmux.c b/arch/arm/plat-stmp3xxx/pinmux.c
index d41200382208..6d6b1a468eda 100644
--- a/arch/arm/plat-stmp3xxx/pinmux.c
+++ b/arch/arm/plat-stmp3xxx/pinmux.c
@@ -22,7 +22,6 @@
22#include <linux/sysdev.h> 22#include <linux/sysdev.h>
23#include <linux/string.h> 23#include <linux/string.h>
24#include <linux/bitops.h> 24#include <linux/bitops.h>
25#include <linux/sysdev.h>
26#include <linux/irq.h> 25#include <linux/irq.h>
27 26
28#include <mach/hardware.h> 27#include <mach/hardware.h>
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index fec64678a63a..33026eff2aa4 100644
--- a/arch/arm/tools/mach-types
+++ b/arch/arm/tools/mach-types
@@ -12,7 +12,7 @@
12# 12#
13# http://www.arm.linux.org.uk/developer/machines/?action=new 13# http://www.arm.linux.org.uk/developer/machines/?action=new
14# 14#
15# Last update: Fri May 29 10:14:20 2009 15# Last update: Sat Jun 20 22:28:39 2009
16# 16#
17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number 17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
18# 18#
@@ -1455,7 +1455,7 @@ gba MACH_GBA GBA 1457
1455h6044 MACH_H6044 H6044 1458 1455h6044 MACH_H6044 H6044 1458
1456app MACH_APP APP 1459 1456app MACH_APP APP 1459
1457tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460 1457tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460
1458herald MACH_HERMES HERMES 1461 1458herald MACH_HERALD HERALD 1461
1459artemis MACH_ARTEMIS ARTEMIS 1462 1459artemis MACH_ARTEMIS ARTEMIS 1462
1460htctitan MACH_HTCTITAN HTCTITAN 1463 1460htctitan MACH_HTCTITAN HTCTITAN 1463
1461qranium MACH_QRANIUM QRANIUM 1464 1461qranium MACH_QRANIUM QRANIUM 1464
@@ -2245,3 +2245,38 @@ str9 MACH_STR9 STR9 2257
2245omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 2245omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258
2246simcom MACH_SIMCOM SIMCOM 2259 2246simcom MACH_SIMCOM SIMCOM 2259
2247mcwebio MACH_MCWEBIO MCWEBIO 2260 2247mcwebio MACH_MCWEBIO MCWEBIO 2260
2248omap3_phrazer MACH_OMAP3_PHRAZER OMAP3_PHRAZER 2261
2249darwin MACH_DARWIN DARWIN 2262
2250oratiscomu MACH_ORATISCOMU ORATISCOMU 2263
2251rtsbc20 MACH_RTSBC20 RTSBC20 2264
2252i780 MACH_I780 I780 2265
2253gemini324 MACH_GEMINI324 GEMINI324 2266
2254oratislan MACH_ORATISLAN ORATISLAN 2267
2255oratisalog MACH_ORATISALOG ORATISALOG 2268
2256oratismadi MACH_ORATISMADI ORATISMADI 2269
2257oratisot16 MACH_ORATISOT16 ORATISOT16 2270
2258oratisdesk MACH_ORATISDESK ORATISDESK 2271
2259v2p_ca9 MACH_V2P_CA9 V2P_CA9 2272
2260sintexo MACH_SINTEXO SINTEXO 2273
2261cm3389 MACH_CM3389 CM3389 2274
2262omap3_cio MACH_OMAP3_CIO OMAP3_CIO 2275
2263sgh_i900 MACH_SGH_I900 SGH_I900 2276
2264bst100 MACH_BST100 BST100 2277
2265passion MACH_PASSION PASSION 2278
2266indesign_at91sam MACH_INDESIGN_AT91SAM INDESIGN_AT91SAM 2279
2267c4_badger MACH_C4_BADGER C4_BADGER 2280
2268c4_viper MACH_C4_VIPER C4_VIPER 2281
2269d2net MACH_D2NET D2NET 2282
2270bigdisk MACH_BIGDISK BIGDISK 2283
2271notalvision MACH_NOTALVISION NOTALVISION 2284
2272omap3_kboc MACH_OMAP3_KBOC OMAP3_KBOC 2285
2273cyclone MACH_CYCLONE CYCLONE 2286
2274ninja MACH_NINJA NINJA 2287
2275at91sam9g20ek_2mmc MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC 2288
2276bcmring MACH_BCMRING BCMRING 2289
2277resol_dl2 MACH_RESOL_DL2 RESOL_DL2 2290
2278ifosw MACH_IFOSW IFOSW 2291
2279htcrhodium MACH_HTCRHODIUM HTCRHODIUM 2292
2280htctopaz MACH_HTCTOPAZ HTCTOPAZ 2293
2281matrix504 MACH_MATRIX504 MATRIX504 2294
2282mrfsa MACH_MRFSA MRFSA 2295