aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Kconfig31
-rw-r--r--arch/arm/Makefile17
-rw-r--r--arch/arm/boot/Makefile2
-rw-r--r--arch/arm/boot/compressed/Makefile8
-rw-r--r--arch/arm/boot/compressed/head-at91rm9200.S57
-rw-r--r--arch/arm/boot/compressed/head-epxa10db.S5
-rw-r--r--arch/arm/boot/compressed/head.S46
-rw-r--r--arch/arm/common/Kconfig3
-rw-r--r--arch/arm/common/Makefile2
-rw-r--r--arch/arm/common/amba.c359
-rw-r--r--arch/arm/common/rtctime.c16
-rw-r--r--arch/arm/common/scoop.c3
-rw-r--r--arch/arm/common/sharpsl_pm.c839
-rw-r--r--arch/arm/configs/assabet_defconfig1
-rw-r--r--arch/arm/configs/at91rm9200dk_defconfig1009
-rw-r--r--arch/arm/configs/at91rm9200ek_defconfig998
-rw-r--r--arch/arm/configs/badge4_defconfig1
-rw-r--r--arch/arm/configs/bast_defconfig1
-rw-r--r--arch/arm/configs/cerfcube_defconfig1
-rw-r--r--arch/arm/configs/clps7500_defconfig1
-rw-r--r--arch/arm/configs/collie_defconfig1
-rw-r--r--arch/arm/configs/corgi_defconfig1
-rw-r--r--arch/arm/configs/csb337_defconfig1136
-rw-r--r--arch/arm/configs/csb637_defconfig1116
-rw-r--r--arch/arm/configs/ebsa110_defconfig1
-rw-r--r--arch/arm/configs/edb7211_defconfig1
-rw-r--r--arch/arm/configs/enp2611_defconfig1
-rw-r--r--arch/arm/configs/ep80219_defconfig1
-rw-r--r--arch/arm/configs/epxa10db_defconfig644
-rw-r--r--arch/arm/configs/footbridge_defconfig1
-rw-r--r--arch/arm/configs/fortunet_defconfig1
-rw-r--r--arch/arm/configs/h3600_defconfig1
-rw-r--r--arch/arm/configs/h7201_defconfig1
-rw-r--r--arch/arm/configs/h7202_defconfig1
-rw-r--r--arch/arm/configs/hackkit_defconfig1
-rw-r--r--arch/arm/configs/integrator_defconfig1
-rw-r--r--arch/arm/configs/iq31244_defconfig1
-rw-r--r--arch/arm/configs/iq80321_defconfig1
-rw-r--r--arch/arm/configs/iq80331_defconfig1
-rw-r--r--arch/arm/configs/iq80332_defconfig1
-rw-r--r--arch/arm/configs/ixdp2400_defconfig1
-rw-r--r--arch/arm/configs/ixdp2401_defconfig1
-rw-r--r--arch/arm/configs/ixdp2800_defconfig1
-rw-r--r--arch/arm/configs/ixdp2801_defconfig1
-rw-r--r--arch/arm/configs/ixp4xx_defconfig85
-rw-r--r--arch/arm/configs/jornada720_defconfig1
-rw-r--r--arch/arm/configs/lart_defconfig1
-rw-r--r--arch/arm/configs/lpd7a400_defconfig1
-rw-r--r--arch/arm/configs/lpd7a404_defconfig1
-rw-r--r--arch/arm/configs/lubbock_defconfig1
-rw-r--r--arch/arm/configs/lusl7200_defconfig1
-rw-r--r--arch/arm/configs/mainstone_defconfig1
-rw-r--r--arch/arm/configs/mx1ads_defconfig1
-rw-r--r--arch/arm/configs/neponset_defconfig1
-rw-r--r--arch/arm/configs/netwinder_defconfig1
-rw-r--r--arch/arm/configs/omap_h2_1610_defconfig1
-rw-r--r--arch/arm/configs/pleb_defconfig1
-rw-r--r--arch/arm/configs/pxa255-idp_defconfig1
-rw-r--r--arch/arm/configs/realview_defconfig1
-rw-r--r--arch/arm/configs/rpc_defconfig1
-rw-r--r--arch/arm/configs/s3c2410_defconfig1
-rw-r--r--arch/arm/configs/shannon_defconfig1
-rw-r--r--arch/arm/configs/shark_defconfig1
-rw-r--r--arch/arm/configs/simpad_defconfig1
-rw-r--r--arch/arm/configs/smdk2410_defconfig1
-rw-r--r--arch/arm/configs/spitz_defconfig1
-rw-r--r--arch/arm/configs/versatile_defconfig1
-rw-r--r--arch/arm/kernel/Makefile5
-rw-r--r--arch/arm/kernel/apm.c20
-rw-r--r--arch/arm/kernel/asm-offsets.c9
-rw-r--r--arch/arm/kernel/dma-isa.c22
-rw-r--r--arch/arm/kernel/dma.c73
-rw-r--r--arch/arm/kernel/ecard.c7
-rw-r--r--arch/arm/kernel/entry-armv.S2
-rw-r--r--arch/arm/kernel/fiq.c4
-rw-r--r--arch/arm/kernel/head.S2
-rw-r--r--arch/arm/kernel/irq.c17
-rw-r--r--arch/arm/kernel/process.c16
-rw-r--r--arch/arm/kernel/ptrace.c37
-rw-r--r--arch/arm/kernel/setup.c17
-rw-r--r--arch/arm/kernel/smp.c4
-rw-r--r--arch/arm/kernel/time.c3
-rw-r--r--arch/arm/kernel/traps.c5
-rw-r--r--arch/arm/kernel/vmlinux.lds.S12
-rw-r--r--arch/arm/lib/csumpartialcopy.S6
-rw-r--r--arch/arm/lib/csumpartialcopygeneric.S6
-rw-r--r--arch/arm/lib/csumpartialcopyuser.S8
-rw-r--r--arch/arm/mach-aaec2000/clock.c28
-rw-r--r--arch/arm/mach-aaec2000/core.c2
-rw-r--r--arch/arm/mach-aaec2000/core.h2
-rw-r--r--arch/arm/mach-at91rm9200/Kconfig54
-rw-r--r--arch/arm/mach-at91rm9200/Makefile27
-rw-r--r--arch/arm/mach-at91rm9200/Makefile.boot9
-rw-r--r--arch/arm/mach-at91rm9200/board-csb337.c143
-rw-r--r--arch/arm/mach-at91rm9200/board-csb637.c116
-rw-r--r--arch/arm/mach-at91rm9200/board-dk.c138
-rw-r--r--arch/arm/mach-at91rm9200/board-ek.c131
-rw-r--r--arch/arm/mach-at91rm9200/clock.c620
-rw-r--r--arch/arm/mach-at91rm9200/common.c115
-rw-r--r--arch/arm/mach-at91rm9200/devices.c291
-rw-r--r--arch/arm/mach-at91rm9200/generic.h18
-rw-r--r--arch/arm/mach-at91rm9200/gpio.c302
-rw-r--r--arch/arm/mach-at91rm9200/irq.c170
-rw-r--r--arch/arm/mach-at91rm9200/time.c127
-rw-r--r--arch/arm/mach-clps711x/dma.c27
-rw-r--r--arch/arm/mach-epxa10db/Kconfig23
-rw-r--r--arch/arm/mach-epxa10db/Makefile11
-rw-r--r--arch/arm/mach-epxa10db/Makefile.boot2
-rw-r--r--arch/arm/mach-epxa10db/arch.c74
-rw-r--r--arch/arm/mach-epxa10db/dma.c28
-rw-r--r--arch/arm/mach-epxa10db/irq.c82
-rw-r--r--arch/arm/mach-epxa10db/mm.c71
-rw-r--r--arch/arm/mach-epxa10db/time.c78
-rw-r--r--arch/arm/mach-footbridge/dma.c1
-rw-r--r--arch/arm/mach-footbridge/netwinder-hw.c1
-rw-r--r--arch/arm/mach-imx/mx1ads.c55
-rw-r--r--arch/arm/mach-integrator/clock.c28
-rw-r--r--arch/arm/mach-integrator/core.c2
-rw-r--r--arch/arm/mach-integrator/dma.c35
-rw-r--r--arch/arm/mach-integrator/impd1.c4
-rw-r--r--arch/arm/mach-integrator/integrator_ap.c4
-rw-r--r--arch/arm/mach-integrator/integrator_cp.c6
-rw-r--r--arch/arm/mach-integrator/time.c7
-rw-r--r--arch/arm/mach-iop3xx/iop331-setup.c94
-rw-r--r--arch/arm/mach-ixp4xx/Kconfig8
-rw-r--r--arch/arm/mach-ixp4xx/Makefile1
-rw-r--r--arch/arm/mach-ixp4xx/common-pci.c23
-rw-r--r--arch/arm/mach-ixp4xx/common.c20
-rw-r--r--arch/arm/mach-ixp4xx/coyote-pci.c3
-rw-r--r--arch/arm/mach-ixp4xx/coyote-setup.c10
-rw-r--r--arch/arm/mach-ixp4xx/gtwx5715-setup.c15
-rw-r--r--arch/arm/mach-ixp4xx/ixdp425-pci.c5
-rw-r--r--arch/arm/mach-ixp4xx/ixdp425-setup.c13
-rw-r--r--arch/arm/mach-ixp4xx/ixdpg425-pci.c3
-rw-r--r--arch/arm/mach-ixp4xx/nas100d-pci.c71
-rw-r--r--arch/arm/mach-ixp4xx/nas100d-power.c67
-rw-r--r--arch/arm/mach-ixp4xx/nas100d-setup.c135
-rw-r--r--arch/arm/mach-ixp4xx/nslu2-pci.c8
-rw-r--r--arch/arm/mach-ixp4xx/nslu2-power.c3
-rw-r--r--arch/arm/mach-omap1/board-palmte.c2
-rw-r--r--arch/arm/mach-omap1/board-perseus2.c2
-rw-r--r--arch/arm/mach-omap1/clock.c2
-rw-r--r--arch/arm/mach-omap1/serial.c5
-rw-r--r--arch/arm/mach-omap2/clock.c2
-rw-r--r--arch/arm/mach-omap2/serial.c2
-rw-r--r--arch/arm/mach-omap2/timer-gp.c3
-rw-r--r--arch/arm/mach-pxa/Kconfig2
-rw-r--r--arch/arm/mach-pxa/akita-ioexp.c7
-rw-r--r--arch/arm/mach-pxa/corgi.c7
-rw-r--r--arch/arm/mach-pxa/corgi_pm.c44
-rw-r--r--arch/arm/mach-pxa/mainstone.c27
-rw-r--r--arch/arm/mach-pxa/poodle.c7
-rw-r--r--arch/arm/mach-pxa/pxa27x.c6
-rw-r--r--arch/arm/mach-pxa/sharpsl.h101
-rw-r--r--arch/arm/mach-pxa/sharpsl_pm.c824
-rw-r--r--arch/arm/mach-pxa/spitz.c42
-rw-r--r--arch/arm/mach-pxa/spitz_pm.c46
-rw-r--r--arch/arm/mach-pxa/ssp.c17
-rw-r--r--arch/arm/mach-realview/clock.c28
-rw-r--r--arch/arm/mach-realview/core.c4
-rw-r--r--arch/arm/mach-realview/core.h3
-rw-r--r--arch/arm/mach-realview/localtimer.c1
-rw-r--r--arch/arm/mach-realview/realview_eb.c2
-rw-r--r--arch/arm/mach-rpc/dma.c19
-rw-r--r--arch/arm/mach-s3c2410/clock.c235
-rw-r--r--arch/arm/mach-s3c2410/clock.h1
-rw-r--r--arch/arm/mach-s3c2410/s3c2440-clock.c3
-rw-r--r--arch/arm/mach-s3c2410/s3c2440.c2
-rw-r--r--arch/arm/mach-s3c2410/time.c3
-rw-r--r--arch/arm/mach-s3c2410/usb-simtec.c6
-rw-r--r--arch/arm/mach-sa1100/pm.c18
-rw-r--r--arch/arm/mach-versatile/clock.c28
-rw-r--r--arch/arm/mach-versatile/core.c4
-rw-r--r--arch/arm/mach-versatile/core.h2
-rw-r--r--arch/arm/mach-versatile/versatile_ab.c2
-rw-r--r--arch/arm/mach-versatile/versatile_pb.c2
-rw-r--r--arch/arm/mm/Kconfig8
-rw-r--r--arch/arm/mm/consistent.c54
-rw-r--r--arch/arm/mm/discontig.c4
-rw-r--r--arch/arm/mm/ioremap.c49
-rw-r--r--arch/arm/mm/mm-armv.c1
-rw-r--r--arch/arm/plat-omap/clock.c17
-rw-r--r--arch/arm/plat-omap/common.c2
-rw-r--r--arch/arm/plat-omap/cpu-omap.c3
-rw-r--r--arch/arm/plat-omap/dma.c2
-rw-r--r--arch/arm/plat-omap/gpio.c2
-rw-r--r--arch/arm/plat-omap/mcbsp.c3
-rw-r--r--arch/arm/plat-omap/ocpi.c2
-rw-r--r--arch/arm/tools/mach-types30
189 files changed, 8570 insertions, 3128 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 4b15f5f1e2..50b9afa8ae 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -46,10 +46,6 @@ config MCA
46 <file:Documentation/mca.txt> (and especially the web page given 46 <file:Documentation/mca.txt> (and especially the web page given
47 there) before attempting to build an MCA bus kernel. 47 there) before attempting to build an MCA bus kernel.
48 48
49config UID16
50 bool
51 default y
52
53config RWSEM_GENERIC_SPINLOCK 49config RWSEM_GENERIC_SPINLOCK
54 bool 50 bool
55 default y 51 default y
@@ -103,13 +99,6 @@ config ARCH_EBSA110
103 Ethernet interface, two PCMCIA sockets, two serial ports and a 99 Ethernet interface, two PCMCIA sockets, two serial ports and a
104 parallel port. 100 parallel port.
105 101
106config ARCH_CAMELOT
107 bool "Epxa10db"
108 help
109 This enables support for Altera's Excalibur XA10 development board.
110 If you would like to build your kernel to run on one of these boards
111 then you must say 'Y' here. Otherwise say 'N'
112
113config ARCH_FOOTBRIDGE 102config ARCH_FOOTBRIDGE
114 bool "FootBridge" 103 bool "FootBridge"
115 select FOOTBRIDGE 104 select FOOTBRIDGE
@@ -154,6 +143,7 @@ config ARCH_RPC
154 select FIQ 143 select FIQ
155 select TIMER_ACORN 144 select TIMER_ACORN
156 select ARCH_MAY_HAVE_PC_FDC 145 select ARCH_MAY_HAVE_PC_FDC
146 select ISA_DMA_API
157 help 147 help
158 On the Acorn Risc-PC, Linux can support the internal IDE disk and 148 On the Acorn Risc-PC, Linux can support the internal IDE disk and
159 CD-ROM interface, serial and parallel port, and the floppy drive. 149 CD-ROM interface, serial and parallel port, and the floppy drive.
@@ -206,6 +196,7 @@ config ARCH_IMX
206 196
207config ARCH_H720X 197config ARCH_H720X
208 bool "Hynix-HMS720x-based" 198 bool "Hynix-HMS720x-based"
199 select ISA_DMA_API
209 help 200 help
210 This enables support for systems based on the Hynix HMS720x 201 This enables support for systems based on the Hynix HMS720x
211 202
@@ -215,12 +206,16 @@ config ARCH_AAEC2000
215 help 206 help
216 This enables support for systems based on the Agilent AAEC-2000 207 This enables support for systems based on the Agilent AAEC-2000
217 208
209config ARCH_AT91RM9200
210 bool "AT91RM9200"
211 help
212 Say Y here if you intend to run this kernel on an AT91RM9200-based
213 board.
214
218endchoice 215endchoice
219 216
220source "arch/arm/mach-clps711x/Kconfig" 217source "arch/arm/mach-clps711x/Kconfig"
221 218
222source "arch/arm/mach-epxa10db/Kconfig"
223
224source "arch/arm/mach-footbridge/Kconfig" 219source "arch/arm/mach-footbridge/Kconfig"
225 220
226source "arch/arm/mach-integrator/Kconfig" 221source "arch/arm/mach-integrator/Kconfig"
@@ -255,6 +250,8 @@ source "arch/arm/mach-aaec2000/Kconfig"
255 250
256source "arch/arm/mach-realview/Kconfig" 251source "arch/arm/mach-realview/Kconfig"
257 252
253source "arch/arm/mach-at91rm9200/Kconfig"
254
258# Definitions to make life easier 255# Definitions to make life easier
259config ARCH_ACORN 256config ARCH_ACORN
260 bool 257 bool
@@ -290,12 +287,14 @@ config ISA
290 (MCA) or VESA. ISA is an older system, now being displaced by PCI; 287 (MCA) or VESA. ISA is an older system, now being displaced by PCI;
291 newer boards don't support it. If you have ISA, say Y, otherwise N. 288 newer boards don't support it. If you have ISA, say Y, otherwise N.
292 289
290# Select ISA DMA controller support
293config ISA_DMA 291config ISA_DMA
294 bool 292 bool
293 select ISA_DMA_API
295 294
295# Select ISA DMA interface
296config ISA_DMA_API 296config ISA_DMA_API
297 bool 297 bool
298 default y
299 298
300config PCI 299config PCI
301 bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB 300 bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB
@@ -418,7 +417,8 @@ config LEDS
418 ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \ 417 ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \
419 ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \ 418 ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
420 ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \ 419 ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
421 ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE 420 ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
421 ARCH_AT91RM9200
422 help 422 help
423 If you say Y here, the LEDs on your machine will be used 423 If you say Y here, the LEDs on your machine will be used
424 to provide useful information about your current system status. 424 to provide useful information about your current system status.
@@ -656,7 +656,6 @@ source "kernel/power/Kconfig"
656 656
657config APM 657config APM
658 tristate "Advanced Power Management Emulation" 658 tristate "Advanced Power Management Emulation"
659 depends on PM_LEGACY
660 ---help--- 659 ---help---
661 APM is a BIOS specification for saving power using several different 660 APM is a BIOS specification for saving power using several different
662 techniques. This is mostly useful for battery powered laptops with 661 techniques. This is mostly useful for battery powered laptops with
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 81bd2193fe..1fa2a10115 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -8,7 +8,7 @@
8# Copyright (C) 1995-2001 by Russell King 8# Copyright (C) 1995-2001 by Russell King
9 9
10LDFLAGS_vmlinux :=-p --no-undefined -X 10LDFLAGS_vmlinux :=-p --no-undefined -X
11CPPFLAGS_vmlinux.lds = -DKERNEL_RAM_ADDR=$(TEXTADDR) 11CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
12OBJCOPYFLAGS :=-O binary -R .note -R .comment -S 12OBJCOPYFLAGS :=-O binary -R .note -R .comment -S
13GZFLAGS :=-9 13GZFLAGS :=-9
14#CFLAGS +=-pipe 14#CFLAGS +=-pipe
@@ -65,7 +65,7 @@ CHECKFLAGS += -D__arm__
65 65
66#Default value 66#Default value
67head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o 67head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o
68textaddr-y := 0xC0008000 68textofs-y := 0x00008000
69 69
70 machine-$(CONFIG_ARCH_RPC) := rpc 70 machine-$(CONFIG_ARCH_RPC) := rpc
71 machine-$(CONFIG_ARCH_EBSA110) := ebsa110 71 machine-$(CONFIG_ARCH_EBSA110) := ebsa110
@@ -73,22 +73,19 @@ textaddr-y := 0xC0008000
73 incdir-$(CONFIG_ARCH_CLPS7500) := cl7500 73 incdir-$(CONFIG_ARCH_CLPS7500) := cl7500
74 machine-$(CONFIG_FOOTBRIDGE) := footbridge 74 machine-$(CONFIG_FOOTBRIDGE) := footbridge
75 incdir-$(CONFIG_FOOTBRIDGE) := ebsa285 75 incdir-$(CONFIG_FOOTBRIDGE) := ebsa285
76textaddr-$(CONFIG_ARCH_CO285) := 0x60008000
77 machine-$(CONFIG_ARCH_CO285) := footbridge 76 machine-$(CONFIG_ARCH_CO285) := footbridge
78 incdir-$(CONFIG_ARCH_CO285) := ebsa285 77 incdir-$(CONFIG_ARCH_CO285) := ebsa285
79 machine-$(CONFIG_ARCH_SHARK) := shark 78 machine-$(CONFIG_ARCH_SHARK) := shark
80 machine-$(CONFIG_ARCH_SA1100) := sa1100 79 machine-$(CONFIG_ARCH_SA1100) := sa1100
81ifeq ($(CONFIG_ARCH_SA1100),y) 80ifeq ($(CONFIG_ARCH_SA1100),y)
82# SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory 81# SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory
83textaddr-$(CONFIG_SA1111) := 0xc0208000 82 textofs-$(CONFIG_SA1111) := 0x00208000
84endif 83endif
85 machine-$(CONFIG_ARCH_PXA) := pxa 84 machine-$(CONFIG_ARCH_PXA) := pxa
86 machine-$(CONFIG_ARCH_L7200) := l7200 85 machine-$(CONFIG_ARCH_L7200) := l7200
87 machine-$(CONFIG_ARCH_INTEGRATOR) := integrator 86 machine-$(CONFIG_ARCH_INTEGRATOR) := integrator
88 machine-$(CONFIG_ARCH_CAMELOT) := epxa10db 87 textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000
89textaddr-$(CONFIG_ARCH_CLPS711X) := 0xc0028000
90 machine-$(CONFIG_ARCH_CLPS711X) := clps711x 88 machine-$(CONFIG_ARCH_CLPS711X) := clps711x
91textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000
92 machine-$(CONFIG_ARCH_IOP3XX) := iop3xx 89 machine-$(CONFIG_ARCH_IOP3XX) := iop3xx
93 machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx 90 machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx
94 machine-$(CONFIG_ARCH_IXP2000) := ixp2000 91 machine-$(CONFIG_ARCH_IXP2000) := ixp2000
@@ -102,6 +99,7 @@ textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000
102 machine-$(CONFIG_ARCH_H720X) := h720x 99 machine-$(CONFIG_ARCH_H720X) := h720x
103 machine-$(CONFIG_ARCH_AAEC2000) := aaec2000 100 machine-$(CONFIG_ARCH_AAEC2000) := aaec2000
104 machine-$(CONFIG_ARCH_REALVIEW) := realview 101 machine-$(CONFIG_ARCH_REALVIEW) := realview
102 machine-$(CONFIG_ARCH_AT91RM9200) := at91rm9200
105 103
106ifeq ($(CONFIG_ARCH_EBSA110),y) 104ifeq ($(CONFIG_ARCH_EBSA110),y)
107# This is what happens if you forget the IOCS16 line. 105# This is what happens if you forget the IOCS16 line.
@@ -110,7 +108,8 @@ CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
110export CFLAGS_3c589_cs.o 108export CFLAGS_3c589_cs.o
111endif 109endif
112 110
113TEXTADDR := $(textaddr-y) 111# The byte offset of the kernel image in RAM from the start of RAM.
112TEXT_OFFSET := $(textofs-y)
114 113
115ifeq ($(incdir-y),) 114ifeq ($(incdir-y),)
116incdir-y := $(machine-y) 115incdir-y := $(machine-y)
@@ -123,7 +122,7 @@ else
123MACHINE := 122MACHINE :=
124endif 123endif
125 124
126export TEXTADDR GZFLAGS 125export TEXT_OFFSET GZFLAGS
127 126
128# Do we have FASTFPE? 127# Do we have FASTFPE?
129FASTFPE :=arch/arm/fastfpe 128FASTFPE :=arch/arm/fastfpe
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
index 937a353bc3..a174d63395 100644
--- a/arch/arm/boot/Makefile
+++ b/arch/arm/boot/Makefile
@@ -15,7 +15,7 @@ include $(srctree)/$(MACHINE)/Makefile.boot
15endif 15endif
16 16
17# Note: the following conditions must always be true: 17# Note: the following conditions must always be true:
18# ZRELADDR == virt_to_phys(TEXTADDR) 18# ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)
19# PARAMS_PHYS must be within 4MB of ZRELADDR 19# PARAMS_PHYS must be within 4MB of ZRELADDR
20# INITRD_PHYS must be in RAM 20# INITRD_PHYS must be in RAM
21ZRELADDR := $(zreladdr-y) 21ZRELADDR := $(zreladdr-y)
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 6b505ce41a..35ffe0f4ec 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -21,10 +21,6 @@ ifeq ($(CONFIG_ARCH_SHARK),y)
21OBJS += head-shark.o ofw-shark.o 21OBJS += head-shark.o ofw-shark.o
22endif 22endif
23 23
24ifeq ($(CONFIG_ARCH_CAMELOT),y)
25OBJS += head-epxa10db.o
26endif
27
28ifeq ($(CONFIG_ARCH_L7200),y) 24ifeq ($(CONFIG_ARCH_L7200),y)
29OBJS += head-l7200.o 25OBJS += head-l7200.o
30endif 26endif
@@ -50,6 +46,10 @@ ifeq ($(CONFIG_PXA_SHARPSL),y)
50OBJS += head-sharpsl.o 46OBJS += head-sharpsl.o
51endif 47endif
52 48
49ifeq ($(CONFIG_ARCH_AT91RM9200),y)
50OBJS += head-at91rm9200.o
51endif
52
53ifeq ($(CONFIG_DEBUG_ICEDCC),y) 53ifeq ($(CONFIG_DEBUG_ICEDCC),y)
54OBJS += ice-dcc.o 54OBJS += ice-dcc.o
55endif 55endif
diff --git a/arch/arm/boot/compressed/head-at91rm9200.S b/arch/arm/boot/compressed/head-at91rm9200.S
new file mode 100644
index 0000000000..2119ea62b5
--- /dev/null
+++ b/arch/arm/boot/compressed/head-at91rm9200.S
@@ -0,0 +1,57 @@
1/*
2 * linux/arch/arm/boot/compressed/head-at91rm9200.S
3 *
4 * Copyright (C) 2003 SAN People
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 */
12#include <asm/mach-types.h>
13
14 .section ".start", "ax"
15
16 @ Atmel AT91RM9200-DK : 262
17 mov r3, #(MACH_TYPE_AT91RM9200DK & 0xff)
18 orr r3, r3, #(MACH_TYPE_AT91RM9200DK & 0xff00)
19 cmp r7, r3
20 beq 99f
21
22 @ Cogent CSB337 : 399
23 mov r3, #(MACH_TYPE_CSB337 & 0xff)
24 orr r3, r3, #(MACH_TYPE_CSB337 & 0xff00)
25 cmp r7, r3
26 beq 99f
27
28 @ Cogent CSB637 : 648
29 mov r3, #(MACH_TYPE_CSB637 & 0xff)
30 orr r3, r3, #(MACH_TYPE_CSB637 & 0xff00)
31 cmp r7, r3
32 beq 99f
33
34 @ Atmel AT91RM9200-EK : 705
35 mov r3, #(MACH_TYPE_AT91RM9200EK & 0xff)
36 orr r3, r3, #(MACH_TYPE_AT91RM9200EK & 0xff00)
37 cmp r7, r3
38 beq 99f
39
40 @ Conitec Carmeva : 769
41 mov r3, #(MACH_TYPE_CARMEVA & 0xff)
42 orr r3, r3, #(MACH_TYPE_CARMEVA & 0xff00)
43 cmp r7, r3
44 beq 99f
45
46 @ KwikByte KB920x : 612
47 mov r3, #(MACH_TYPE_KB9200 & 0xff)
48 orr r3, r3, #(MACH_TYPE_KB9200 & 0xff00)
49 cmp r7, r3
50 beq 99f
51
52 @ Unknown board, use the AT91RM9200DK board
53 @ mov r7, #MACH_TYPE_AT91RM9200
54 mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
55 orr r7, r7, #(MACH_TYPE_AT91RM9200DK & 0xff00)
56
5799:
diff --git a/arch/arm/boot/compressed/head-epxa10db.S b/arch/arm/boot/compressed/head-epxa10db.S
deleted file mode 100644
index 757681f12a..0000000000
--- a/arch/arm/boot/compressed/head-epxa10db.S
+++ /dev/null
@@ -1,5 +0,0 @@
1#include <asm/mach-types.h>
2#include <asm/arch/excalibur.h>
3
4 .section ".start", "ax"
5 mov r7, #MACH_TYPE_CAMELOT
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 6abafb6f18..aaa47400eb 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -84,7 +84,7 @@
84 kputc #'\n' 84 kputc #'\n'
85 kphex r5, 8 /* decompressed kernel start */ 85 kphex r5, 8 /* decompressed kernel start */
86 kputc #'-' 86 kputc #'-'
87 kphex r8, 8 /* decompressed kernel end */ 87 kphex r9, 8 /* decompressed kernel end */
88 kputc #'>' 88 kputc #'>'
89 kphex r4, 8 /* kernel execution address */ 89 kphex r4, 8 /* kernel execution address */
90 kputc #'\n' 90 kputc #'\n'
@@ -116,7 +116,7 @@ start:
116 .word start @ absolute load/run zImage address 116 .word start @ absolute load/run zImage address
117 .word _edata @ zImage end address 117 .word _edata @ zImage end address
1181: mov r7, r1 @ save architecture ID 1181: mov r7, r1 @ save architecture ID
119 mov r8, #0 @ save r0 119 mov r8, r2 @ save atags pointer
120 120
121#ifndef __ARM_ARCH_2__ 121#ifndef __ARM_ARCH_2__
122 /* 122 /*
@@ -144,7 +144,7 @@ not_angel:
144 144
145 /* 145 /*
146 * some architecture specific code can be inserted 146 * some architecture specific code can be inserted
147 * by the linker here, but it should preserve r7 and r8. 147 * by the linker here, but it should preserve r7, r8, and r9.
148 */ 148 */
149 149
150 .text 150 .text
@@ -249,16 +249,17 @@ not_relocated: mov r0, #0
249 * r5 = decompressed kernel start 249 * r5 = decompressed kernel start
250 * r6 = processor ID 250 * r6 = processor ID
251 * r7 = architecture ID 251 * r7 = architecture ID
252 * r8-r14 = unused 252 * r8 = atags pointer
253 * r9-r14 = corrupted
253 */ 254 */
254 add r1, r5, r0 @ end of decompressed kernel 255 add r1, r5, r0 @ end of decompressed kernel
255 adr r2, reloc_start 256 adr r2, reloc_start
256 ldr r3, LC1 257 ldr r3, LC1
257 add r3, r2, r3 258 add r3, r2, r3
2581: ldmia r2!, {r8 - r13} @ copy relocation code 2591: ldmia r2!, {r9 - r14} @ copy relocation code
259 stmia r1!, {r8 - r13} 260 stmia r1!, {r9 - r14}
260 ldmia r2!, {r8 - r13} 261 ldmia r2!, {r9 - r14}
261 stmia r1!, {r8 - r13} 262 stmia r1!, {r9 - r14}
262 cmp r2, r3 263 cmp r2, r3
263 blo 1b 264 blo 1b
264 265
@@ -308,11 +309,12 @@ params: ldr r0, =params_phys
308 * r4 = kernel execution address 309 * r4 = kernel execution address
309 * r6 = processor ID 310 * r6 = processor ID
310 * r7 = architecture number 311 * r7 = architecture number
311 * r8 = run-time address of "start" 312 * r8 = atags pointer
313 * r9 = run-time address of "start" (???)
312 * On exit, 314 * On exit,
313 * r1, r2, r3, r8, r9, r12 corrupted 315 * r1, r2, r3, r9, r10, r12 corrupted
314 * This routine must preserve: 316 * This routine must preserve:
315 * r4, r5, r6, r7 317 * r4, r5, r6, r7, r8
316 */ 318 */
317 .align 5 319 .align 5
318cache_on: mov r3, #8 @ cache_on function 320cache_on: mov r3, #8 @ cache_on function
@@ -326,15 +328,15 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
326 * bits for the RAM area only. 328 * bits for the RAM area only.
327 */ 329 */
328 mov r0, r3 330 mov r0, r3
329 mov r8, r0, lsr #18 331 mov r9, r0, lsr #18
330 mov r8, r8, lsl #18 @ start of RAM 332 mov r9, r9, lsl #18 @ start of RAM
331 add r9, r8, #0x10000000 @ a reasonable RAM size 333 add r10, r9, #0x10000000 @ a reasonable RAM size
332 mov r1, #0x12 334 mov r1, #0x12
333 orr r1, r1, #3 << 10 335 orr r1, r1, #3 << 10
334 add r2, r3, #16384 336 add r2, r3, #16384
3351: cmp r1, r8 @ if virt > start of RAM 3371: cmp r1, r8 @ if virt > start of RAM
336 orrhs r1, r1, #0x0c @ set cacheable, bufferable 338 orrhs r1, r1, #0x0c @ set cacheable, bufferable
337 cmp r1, r9 @ if virt > end of RAM 339 cmp r1, r10 @ if virt > end of RAM
338 bichs r1, r1, #0x0c @ clear cacheable, bufferable 340 bichs r1, r1, #0x0c @ clear cacheable, bufferable
339 str r1, [r0], #4 @ 1:1 mapping 341 str r1, [r0], #4 @ 1:1 mapping
340 add r1, r1, #1048576 342 add r1, r1, #1048576
@@ -403,26 +405,28 @@ __common_cache_on:
403 * r5 = decompressed kernel start 405 * r5 = decompressed kernel start
404 * r6 = processor ID 406 * r6 = processor ID
405 * r7 = architecture ID 407 * r7 = architecture ID
406 * r8-r14 = unused 408 * r8 = atags pointer
409 * r9-r14 = corrupted
407 */ 410 */
408 .align 5 411 .align 5
409reloc_start: add r8, r5, r0 412reloc_start: add r9, r5, r0
410 debug_reloc_start 413 debug_reloc_start
411 mov r1, r4 414 mov r1, r4
4121: 4151:
413 .rept 4 416 .rept 4
414 ldmia r5!, {r0, r2, r3, r9 - r13} @ relocate kernel 417 ldmia r5!, {r0, r2, r3, r10 - r14} @ relocate kernel
415 stmia r1!, {r0, r2, r3, r9 - r13} 418 stmia r1!, {r0, r2, r3, r10 - r14}
416 .endr 419 .endr
417 420
418 cmp r5, r8 421 cmp r5, r9
419 blo 1b 422 blo 1b
420 debug_reloc_end 423 debug_reloc_end
421 424
422call_kernel: bl cache_clean_flush 425call_kernel: bl cache_clean_flush
423 bl cache_off 426 bl cache_off
424 mov r0, #0 427 mov r0, #0 @ must be zero
425 mov r1, r7 @ restore architecture number 428 mov r1, r7 @ restore architecture number
429 mov r2, r8 @ restore atags pointer
426 mov pc, r4 @ call kernel 430 mov pc, r4 @ call kernel
427 431
428/* 432/*
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig
index 666ba39357..d7509c7a3c 100644
--- a/arch/arm/common/Kconfig
+++ b/arch/arm/common/Kconfig
@@ -23,5 +23,8 @@ config SHARP_LOCOMO
23config SHARP_PARAM 23config SHARP_PARAM
24 bool 24 bool
25 25
26config SHARPSL_PM
27 bool
28
26config SHARP_SCOOP 29config SHARP_SCOOP
27 bool 30 bool
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile
index a87886564b..ec8d17c969 100644
--- a/arch/arm/common/Makefile
+++ b/arch/arm/common/Makefile
@@ -3,7 +3,6 @@
3# 3#
4 4
5obj-y += rtctime.o 5obj-y += rtctime.o
6obj-$(CONFIG_ARM_AMBA) += amba.o
7obj-$(CONFIG_ARM_GIC) += gic.o 6obj-$(CONFIG_ARM_GIC) += gic.o
8obj-$(CONFIG_ICST525) += icst525.o 7obj-$(CONFIG_ICST525) += icst525.o
9obj-$(CONFIG_ICST307) += icst307.o 8obj-$(CONFIG_ICST307) += icst307.o
@@ -13,4 +12,5 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o
13obj-$(CONFIG_TIMER_ACORN) += time-acorn.o 12obj-$(CONFIG_TIMER_ACORN) += time-acorn.o
14obj-$(CONFIG_SHARP_LOCOMO) += locomo.o 13obj-$(CONFIG_SHARP_LOCOMO) += locomo.o
15obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o 14obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
15obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o
16obj-$(CONFIG_SHARP_SCOOP) += scoop.o 16obj-$(CONFIG_SHARP_SCOOP) += scoop.o
diff --git a/arch/arm/common/amba.c b/arch/arm/common/amba.c
deleted file mode 100644
index e1013112c3..0000000000
--- a/arch/arm/common/amba.c
+++ /dev/null
@@ -1,359 +0,0 @@
1/*
2 * linux/arch/arm/common/amba.c
3 *
4 * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
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#include <linux/module.h>
11#include <linux/init.h>
12#include <linux/device.h>
13#include <linux/string.h>
14#include <linux/slab.h>
15
16#include <asm/io.h>
17#include <asm/irq.h>
18#include <asm/hardware/amba.h>
19#include <asm/sizes.h>
20
21#define to_amba_device(d) container_of(d, struct amba_device, dev)
22#define to_amba_driver(d) container_of(d, struct amba_driver, drv)
23
24static struct amba_id *
25amba_lookup(struct amba_id *table, struct amba_device *dev)
26{
27 int ret = 0;
28
29 while (table->mask) {
30 ret = (dev->periphid & table->mask) == table->id;
31 if (ret)
32 break;
33 table++;
34 }
35
36 return ret ? table : NULL;
37}
38
39static int amba_match(struct device *dev, struct device_driver *drv)
40{
41 struct amba_device *pcdev = to_amba_device(dev);
42 struct amba_driver *pcdrv = to_amba_driver(drv);
43
44 return amba_lookup(pcdrv->id_table, pcdev) != NULL;
45}
46
47#ifdef CONFIG_HOTPLUG
48static int amba_hotplug(struct device *dev, char **envp, int nr_env, char *buf, int bufsz)
49{
50 struct amba_device *pcdev = to_amba_device(dev);
51
52 if (nr_env < 2)
53 return -ENOMEM;
54
55 snprintf(buf, bufsz, "AMBA_ID=%08x", pcdev->periphid);
56 *envp++ = buf;
57 *envp++ = NULL;
58 return 0;
59}
60#else
61#define amba_hotplug NULL
62#endif
63
64static int amba_suspend(struct device *dev, pm_message_t state)
65{
66 struct amba_driver *drv = to_amba_driver(dev->driver);
67 int ret = 0;
68
69 if (dev->driver && drv->suspend)
70 ret = drv->suspend(to_amba_device(dev), state);
71 return ret;
72}
73
74static int amba_resume(struct device *dev)
75{
76 struct amba_driver *drv = to_amba_driver(dev->driver);
77 int ret = 0;
78
79 if (dev->driver && drv->resume)
80 ret = drv->resume(to_amba_device(dev));
81 return ret;
82}
83
84/*
85 * Primecells are part of the Advanced Microcontroller Bus Architecture,
86 * so we call the bus "amba".
87 */
88static struct bus_type amba_bustype = {
89 .name = "amba",
90 .match = amba_match,
91 .hotplug = amba_hotplug,
92 .suspend = amba_suspend,
93 .resume = amba_resume,
94};
95
96static int __init amba_init(void)
97{
98 return bus_register(&amba_bustype);
99}
100
101postcore_initcall(amba_init);
102
103/*
104 * These are the device model conversion veneers; they convert the
105 * device model structures to our more specific structures.
106 */
107static int amba_probe(struct device *dev)
108{
109 struct amba_device *pcdev = to_amba_device(dev);
110 struct amba_driver *pcdrv = to_amba_driver(dev->driver);
111 struct amba_id *id;
112
113 id = amba_lookup(pcdrv->id_table, pcdev);
114
115 return pcdrv->probe(pcdev, id);
116}
117
118static int amba_remove(struct device *dev)
119{
120 struct amba_driver *drv = to_amba_driver(dev->driver);
121 return drv->remove(to_amba_device(dev));
122}
123
124static void amba_shutdown(struct device *dev)
125{
126 struct amba_driver *drv = to_amba_driver(dev->driver);
127 drv->shutdown(to_amba_device(dev));
128}
129
130/**
131 * amba_driver_register - register an AMBA device driver
132 * @drv: amba device driver structure
133 *
134 * Register an AMBA device driver with the Linux device model
135 * core. If devices pre-exist, the drivers probe function will
136 * be called.
137 */
138int amba_driver_register(struct amba_driver *drv)
139{
140 drv->drv.bus = &amba_bustype;
141
142#define SETFN(fn) if (drv->fn) drv->drv.fn = amba_##fn
143 SETFN(probe);
144 SETFN(remove);
145 SETFN(shutdown);
146
147 return driver_register(&drv->drv);
148}
149
150/**
151 * amba_driver_unregister - remove an AMBA device driver
152 * @drv: AMBA device driver structure to remove
153 *
154 * Unregister an AMBA device driver from the Linux device
155 * model. The device model will call the drivers remove function
156 * for each device the device driver is currently handling.
157 */
158void amba_driver_unregister(struct amba_driver *drv)
159{
160 driver_unregister(&drv->drv);
161}
162
163
164static void amba_device_release(struct device *dev)
165{
166 struct amba_device *d = to_amba_device(dev);
167
168 if (d->res.parent)
169 release_resource(&d->res);
170 kfree(d);
171}
172
173#define amba_attr(name,fmt,arg...) \
174static ssize_t show_##name(struct device *_dev, struct device_attribute *attr, char *buf) \
175{ \
176 struct amba_device *dev = to_amba_device(_dev); \
177 return sprintf(buf, fmt, arg); \
178} \
179static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
180
181amba_attr(id, "%08x\n", dev->periphid);
182amba_attr(irq0, "%u\n", dev->irq[0]);
183amba_attr(irq1, "%u\n", dev->irq[1]);
184amba_attr(resource, "\t%08lx\t%08lx\t%08lx\n",
185 dev->res.start, dev->res.end, dev->res.flags);
186
187/**
188 * amba_device_register - register an AMBA device
189 * @dev: AMBA device to register
190 * @parent: parent memory resource
191 *
192 * Setup the AMBA device, reading the cell ID if present.
193 * Claim the resource, and register the AMBA device with
194 * the Linux device manager.
195 */
196int amba_device_register(struct amba_device *dev, struct resource *parent)
197{
198 u32 pid, cid;
199 void __iomem *tmp;
200 int i, ret;
201
202 dev->dev.release = amba_device_release;
203 dev->dev.bus = &amba_bustype;
204 dev->dev.dma_mask = &dev->dma_mask;
205 dev->res.name = dev->dev.bus_id;
206
207 if (!dev->dev.coherent_dma_mask && dev->dma_mask)
208 dev_warn(&dev->dev, "coherent dma mask is unset\n");
209
210 ret = request_resource(parent, &dev->res);
211 if (ret == 0) {
212 tmp = ioremap(dev->res.start, SZ_4K);
213 if (!tmp) {
214 ret = -ENOMEM;
215 goto out;
216 }
217
218 for (pid = 0, i = 0; i < 4; i++)
219 pid |= (readl(tmp + 0xfe0 + 4 * i) & 255) << (i * 8);
220 for (cid = 0, i = 0; i < 4; i++)
221 cid |= (readl(tmp + 0xff0 + 4 * i) & 255) << (i * 8);
222
223 iounmap(tmp);
224
225 if (cid == 0xb105f00d)
226 dev->periphid = pid;
227
228 if (dev->periphid)
229 ret = device_register(&dev->dev);
230 else
231 ret = -ENODEV;
232
233 if (ret == 0) {
234 device_create_file(&dev->dev, &dev_attr_id);
235 if (dev->irq[0] != NO_IRQ)
236 device_create_file(&dev->dev, &dev_attr_irq0);
237 if (dev->irq[1] != NO_IRQ)
238 device_create_file(&dev->dev, &dev_attr_irq1);
239 device_create_file(&dev->dev, &dev_attr_resource);
240 } else {
241 out:
242 release_resource(&dev->res);
243 }
244 }
245 return ret;
246}
247
248/**
249 * amba_device_unregister - unregister an AMBA device
250 * @dev: AMBA device to remove
251 *
252 * Remove the specified AMBA device from the Linux device
253 * manager. All files associated with this object will be
254 * destroyed, and device drivers notified that the device has
255 * been removed. The AMBA device's resources including
256 * the amba_device structure will be freed once all
257 * references to it have been dropped.
258 */
259void amba_device_unregister(struct amba_device *dev)
260{
261 device_unregister(&dev->dev);
262}
263
264
265struct find_data {
266 struct amba_device *dev;
267 struct device *parent;
268 const char *busid;
269 unsigned int id;
270 unsigned int mask;
271};
272
273static int amba_find_match(struct device *dev, void *data)
274{
275 struct find_data *d = data;
276 struct amba_device *pcdev = to_amba_device(dev);
277 int r;
278
279 r = (pcdev->periphid & d->mask) == d->id;
280 if (d->parent)
281 r &= d->parent == dev->parent;
282 if (d->busid)
283 r &= strcmp(dev->bus_id, d->busid) == 0;
284
285 if (r) {
286 get_device(dev);
287 d->dev = pcdev;
288 }
289
290 return r;
291}
292
293/**
294 * amba_find_device - locate an AMBA device given a bus id
295 * @busid: bus id for device (or NULL)
296 * @parent: parent device (or NULL)
297 * @id: peripheral ID (or 0)
298 * @mask: peripheral ID mask (or 0)
299 *
300 * Return the AMBA device corresponding to the supplied parameters.
301 * If no device matches, returns NULL.
302 *
303 * NOTE: When a valid device is found, its refcount is
304 * incremented, and must be decremented before the returned
305 * reference.
306 */
307struct amba_device *
308amba_find_device(const char *busid, struct device *parent, unsigned int id,
309 unsigned int mask)
310{
311 struct find_data data;
312
313 data.dev = NULL;
314 data.parent = parent;
315 data.busid = busid;
316 data.id = id;
317 data.mask = mask;
318
319 bus_for_each_dev(&amba_bustype, NULL, &data, amba_find_match);
320
321 return data.dev;
322}
323
324/**
325 * amba_request_regions - request all mem regions associated with device
326 * @dev: amba_device structure for device
327 * @name: name, or NULL to use driver name
328 */
329int amba_request_regions(struct amba_device *dev, const char *name)
330{
331 int ret = 0;
332
333 if (!name)
334 name = dev->dev.driver->name;
335
336 if (!request_mem_region(dev->res.start, SZ_4K, name))
337 ret = -EBUSY;
338
339 return ret;
340}
341
342/**
343 * amba_release_regions - release mem regions assoicated with device
344 * @dev: amba_device structure for device
345 *
346 * Release regions claimed by a successful call to amba_request_regions.
347 */
348void amba_release_regions(struct amba_device *dev)
349{
350 release_mem_region(dev->res.start, SZ_4K);
351}
352
353EXPORT_SYMBOL(amba_driver_register);
354EXPORT_SYMBOL(amba_driver_unregister);
355EXPORT_SYMBOL(amba_device_register);
356EXPORT_SYMBOL(amba_device_unregister);
357EXPORT_SYMBOL(amba_find_device);
358EXPORT_SYMBOL(amba_request_regions);
359EXPORT_SYMBOL(amba_release_regions);
diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c
index 72b03f201e..48b1e19b13 100644
--- a/arch/arm/common/rtctime.c
+++ b/arch/arm/common/rtctime.c
@@ -17,7 +17,9 @@
17#include <linux/proc_fs.h> 17#include <linux/proc_fs.h>
18#include <linux/miscdevice.h> 18#include <linux/miscdevice.h>
19#include <linux/spinlock.h> 19#include <linux/spinlock.h>
20#include <linux/capability.h>
20#include <linux/device.h> 21#include <linux/device.h>
22#include <linux/mutex.h>
21 23
22#include <asm/rtc.h> 24#include <asm/rtc.h>
23#include <asm/semaphore.h> 25#include <asm/semaphore.h>
@@ -34,7 +36,7 @@ static unsigned long rtc_irq_data;
34/* 36/*
35 * rtc_sem protects rtc_inuse and rtc_ops 37 * rtc_sem protects rtc_inuse and rtc_ops
36 */ 38 */
37static DECLARE_MUTEX(rtc_sem); 39static DEFINE_MUTEX(rtc_mutex);
38static unsigned long rtc_inuse; 40static unsigned long rtc_inuse;
39static struct rtc_ops *rtc_ops; 41static struct rtc_ops *rtc_ops;
40 42
@@ -355,7 +357,7 @@ static int rtc_open(struct inode *inode, struct file *file)
355{ 357{
356 int ret; 358 int ret;
357 359
358 down(&rtc_sem); 360 mutex_lock(&rtc_mutex);
359 361
360 if (rtc_inuse) { 362 if (rtc_inuse) {
361 ret = -EBUSY; 363 ret = -EBUSY;
@@ -373,7 +375,7 @@ static int rtc_open(struct inode *inode, struct file *file)
373 rtc_inuse = 1; 375 rtc_inuse = 1;
374 } 376 }
375 } 377 }
376 up(&rtc_sem); 378 mutex_unlock(&rtc_mutex);
377 379
378 return ret; 380 return ret;
379} 381}
@@ -479,7 +481,7 @@ int register_rtc(struct rtc_ops *ops)
479{ 481{
480 int ret = -EBUSY; 482 int ret = -EBUSY;
481 483
482 down(&rtc_sem); 484 mutex_lock(&rtc_mutex);
483 if (rtc_ops == NULL) { 485 if (rtc_ops == NULL) {
484 rtc_ops = ops; 486 rtc_ops = ops;
485 487
@@ -488,7 +490,7 @@ int register_rtc(struct rtc_ops *ops)
488 create_proc_read_entry("driver/rtc", 0, NULL, 490 create_proc_read_entry("driver/rtc", 0, NULL,
489 rtc_read_proc, ops); 491 rtc_read_proc, ops);
490 } 492 }
491 up(&rtc_sem); 493 mutex_unlock(&rtc_mutex);
492 494
493 return ret; 495 return ret;
494} 496}
@@ -496,12 +498,12 @@ EXPORT_SYMBOL(register_rtc);
496 498
497void unregister_rtc(struct rtc_ops *rtc) 499void unregister_rtc(struct rtc_ops *rtc)
498{ 500{
499 down(&rtc_sem); 501 mutex_lock(&rtc_mutex);
500 if (rtc == rtc_ops) { 502 if (rtc == rtc_ops) {
501 remove_proc_entry("driver/rtc", NULL); 503 remove_proc_entry("driver/rtc", NULL);
502 misc_deregister(&rtc_miscdev); 504 misc_deregister(&rtc_miscdev);
503 rtc_ops = NULL; 505 rtc_ops = NULL;
504 } 506 }
505 up(&rtc_sem); 507 mutex_unlock(&rtc_mutex);
506} 508}
507EXPORT_SYMBOL(unregister_rtc); 509EXPORT_SYMBOL(unregister_rtc);
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c
index 0c3cbd9a38..a2dfe0b0f1 100644
--- a/arch/arm/common/scoop.c
+++ b/arch/arm/common/scoop.c
@@ -13,6 +13,7 @@
13 13
14#include <linux/device.h> 14#include <linux/device.h>
15#include <linux/string.h> 15#include <linux/string.h>
16#include <linux/slab.h>
16#include <linux/platform_device.h> 17#include <linux/platform_device.h>
17#include <asm/io.h> 18#include <asm/io.h>
18#include <asm/hardware/scoop.h> 19#include <asm/hardware/scoop.h>
@@ -33,7 +34,6 @@ void reset_scoop(struct device *dev)
33 34
34 SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100; // 00 35 SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100; // 00
35 SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000; // 04 36 SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000; // 04
36 SCOOP_REG(sdev->base,SCOOP_CPR) = 0x0000; // 0C
37 SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000; // 10 37 SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000; // 10
38 SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000; // 18 38 SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000; // 18
39 SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF; // 14 39 SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF; // 14
@@ -154,6 +154,7 @@ int __init scoop_probe(struct platform_device *pdev)
154 154
155 SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140; 155 SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140;
156 reset_scoop(&pdev->dev); 156 reset_scoop(&pdev->dev);
157 SCOOP_REG(devptr->base, SCOOP_CPR) = 0x0000;
157 SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; 158 SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff;
158 SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; 159 SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff;
159 160
diff --git a/arch/arm/common/sharpsl_pm.c b/arch/arm/common/sharpsl_pm.c
new file mode 100644
index 0000000000..978d32e82d
--- /dev/null
+++ b/arch/arm/common/sharpsl_pm.c
@@ -0,0 +1,839 @@
1/*
2 * Battery and Power Management code for the Sharp SL-C7xx and SL-Cxx00
3 * series of PDAs
4 *
5 * Copyright (c) 2004-2005 Richard Purdie
6 *
7 * Based on code written by Sharp for 2.4 kernels
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 *
13 */
14
15#undef DEBUG
16
17#include <linux/module.h>
18#include <linux/timer.h>
19#include <linux/init.h>
20#include <linux/kernel.h>
21#include <linux/apm_bios.h>
22#include <linux/delay.h>
23#include <linux/interrupt.h>
24#include <linux/platform_device.h>
25
26#include <asm/hardware.h>
27#include <asm/mach-types.h>
28#include <asm/irq.h>
29#include <asm/apm.h>
30#include <asm/arch/pm.h>
31#include <asm/arch/pxa-regs.h>
32#include <asm/arch/sharpsl.h>
33#include <asm/hardware/sharpsl_pm.h>
34
35/*
36 * Constants
37 */
38#define SHARPSL_CHARGE_ON_TIME_INTERVAL (msecs_to_jiffies(1*60*1000)) /* 1 min */
39#define SHARPSL_CHARGE_FINISH_TIME (msecs_to_jiffies(10*60*1000)) /* 10 min */
40#define SHARPSL_BATCHK_TIME (msecs_to_jiffies(15*1000)) /* 15 sec */
41#define SHARPSL_BATCHK_TIME_SUSPEND (60*10) /* 10 min */
42#define SHARPSL_WAIT_CO_TIME 15 /* 15 sec */
43#define SHARPSL_WAIT_DISCHARGE_ON 100 /* 100 msec */
44#define SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP 10 /* 10 msec */
45#define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 10 /* 10 msec */
46#define SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN 10 /* 10 msec */
47#define SHARPSL_CHARGE_WAIT_TIME 15 /* 15 msec */
48#define SHARPSL_CHARGE_CO_CHECK_TIME 5 /* 5 msec */
49#define SHARPSL_CHARGE_RETRY_CNT 1 /* eqv. 10 min */
50
51#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
52#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */
53#define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */
54#define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */
55#define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */
56#define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */
57
58/*
59 * Prototypes
60 */
61static int sharpsl_off_charge_battery(void);
62static int sharpsl_check_battery_temp(void);
63static int sharpsl_check_battery_voltage(void);
64static int sharpsl_ac_check(void);
65static int sharpsl_fatal_check(void);
66static int sharpsl_average_value(int ad);
67static void sharpsl_average_clear(void);
68static void sharpsl_charge_toggle(void *private_);
69static void sharpsl_battery_thread(void *private_);
70
71
72/*
73 * Variables
74 */
75struct sharpsl_pm_status sharpsl_pm;
76DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL);
77DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL);
78
79
80static int get_percentage(int voltage)
81{
82 int i = sharpsl_pm.machinfo->bat_levels - 1;
83 struct battery_thresh *thresh;
84
85 if (sharpsl_pm.charge_mode == CHRG_ON)
86 thresh=sharpsl_pm.machinfo->bat_levels_acin;
87 else
88 thresh=sharpsl_pm.machinfo->bat_levels_noac;
89
90 while (i > 0 && (voltage > thresh[i].voltage))
91 i--;
92
93 return thresh[i].percentage;
94}
95
96static int get_apm_status(int voltage)
97{
98 int low_thresh, high_thresh;
99
100 if (sharpsl_pm.charge_mode == CHRG_ON) {
101 high_thresh = sharpsl_pm.machinfo->status_high_acin;
102 low_thresh = sharpsl_pm.machinfo->status_low_acin;
103 } else {
104 high_thresh = sharpsl_pm.machinfo->status_high_noac;
105 low_thresh = sharpsl_pm.machinfo->status_low_noac;
106 }
107
108 if (voltage >= high_thresh)
109 return APM_BATTERY_STATUS_HIGH;
110 if (voltage >= low_thresh)
111 return APM_BATTERY_STATUS_LOW;
112 return APM_BATTERY_STATUS_CRITICAL;
113}
114
115void sharpsl_battery_kick(void)
116{
117 schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125));
118}
119EXPORT_SYMBOL(sharpsl_battery_kick);
120
121
122static void sharpsl_battery_thread(void *private_)
123{
124 int voltage, percent, apm_status, i = 0;
125
126 if (!sharpsl_pm.machinfo)
127 return;
128
129 sharpsl_pm.battstat.ac_status = (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN) ? APM_AC_ONLINE : APM_AC_OFFLINE);
130
131 /* Corgi cannot confirm when battery fully charged so periodically kick! */
132 if (machine_is_corgi() && (sharpsl_pm.charge_mode == CHRG_ON)
133 && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL))
134 schedule_work(&toggle_charger);
135
136 while(1) {
137 voltage = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT);
138
139 if (voltage > 0) break;
140 if (i++ > 5) {
141 voltage = sharpsl_pm.machinfo->bat_levels_noac[0].voltage;
142 dev_warn(sharpsl_pm.dev, "Warning: Cannot read main battery!\n");
143 break;
144 }
145 }
146
147 voltage = sharpsl_average_value(voltage);
148 apm_status = get_apm_status(voltage);
149 percent = get_percentage(voltage);
150
151 /* At low battery voltages, the voltage has a tendency to start
152 creeping back up so we try to avoid this here */
153 if ((sharpsl_pm.battstat.ac_status == APM_AC_ONLINE) || (apm_status == APM_BATTERY_STATUS_HIGH) || percent <= sharpsl_pm.battstat.mainbat_percent) {
154 sharpsl_pm.battstat.mainbat_voltage = voltage;
155 sharpsl_pm.battstat.mainbat_status = apm_status;
156 sharpsl_pm.battstat.mainbat_percent = percent;
157 }
158
159 dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %d\n", voltage,
160 sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies);
161
162 /* If battery is low. limit backlight intensity to save power. */
163 if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
164 && ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW) ||
165 (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) {
166 if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) {
167 corgibl_limit_intensity(1);
168 sharpsl_pm.flags |= SHARPSL_BL_LIMIT;
169 }
170 } else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) {
171 corgibl_limit_intensity(0);
172 sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT;
173 }
174
175 /* Suspend if critical battery level */
176 if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
177 && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL)
178 && !(sharpsl_pm.flags & SHARPSL_APM_QUEUED)) {
179 sharpsl_pm.flags |= SHARPSL_APM_QUEUED;
180 dev_err(sharpsl_pm.dev, "Fatal Off\n");
181 apm_queue_event(APM_CRITICAL_SUSPEND);
182 }
183
184 schedule_delayed_work(&sharpsl_bat, SHARPSL_BATCHK_TIME);
185}
186
187void sharpsl_pm_led(int val)
188{
189 if (val == SHARPSL_LED_ERROR) {
190 dev_err(sharpsl_pm.dev, "Charging Error!\n");
191 } else if (val == SHARPSL_LED_ON) {
192 dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
193
194 } else {
195 dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
196
197 }
198}
199
200static void sharpsl_charge_on(void)
201{
202 dev_dbg(sharpsl_pm.dev, "Turning Charger On\n");
203
204 sharpsl_pm.full_count = 0;
205 sharpsl_pm.charge_mode = CHRG_ON;
206 schedule_delayed_work(&toggle_charger, msecs_to_jiffies(250));
207 schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(500));
208}
209
210static void sharpsl_charge_off(void)
211{
212 dev_dbg(sharpsl_pm.dev, "Turning Charger Off\n");
213
214 sharpsl_pm.machinfo->charge(0);
215 sharpsl_pm_led(SHARPSL_LED_OFF);
216 sharpsl_pm.charge_mode = CHRG_OFF;
217
218 schedule_work(&sharpsl_bat);
219}
220
221static void sharpsl_charge_error(void)
222{
223 sharpsl_pm_led(SHARPSL_LED_ERROR);
224 sharpsl_pm.machinfo->charge(0);
225 sharpsl_pm.charge_mode = CHRG_ERROR;
226}
227
228static void sharpsl_charge_toggle(void *private_)
229{
230 dev_dbg(sharpsl_pm.dev, "Toogling Charger at time: %lx\n", jiffies);
231
232 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) {
233 sharpsl_charge_off();
234 return;
235 } else if ((sharpsl_check_battery_temp() < 0) || (sharpsl_ac_check() < 0)) {
236 sharpsl_charge_error();
237 return;
238 }
239
240 sharpsl_pm_led(SHARPSL_LED_ON);
241 sharpsl_pm.machinfo->charge(0);
242 mdelay(SHARPSL_CHARGE_WAIT_TIME);
243 sharpsl_pm.machinfo->charge(1);
244
245 sharpsl_pm.charge_start_time = jiffies;
246}
247
248static void sharpsl_ac_timer(unsigned long data)
249{
250 int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
251
252 dev_dbg(sharpsl_pm.dev, "AC Status: %d\n",acin);
253
254 sharpsl_average_clear();
255 if (acin && (sharpsl_pm.charge_mode != CHRG_ON))
256 sharpsl_charge_on();
257 else if (sharpsl_pm.charge_mode == CHRG_ON)
258 sharpsl_charge_off();
259
260 schedule_work(&sharpsl_bat);
261}
262
263
264irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp)
265{
266 /* Delay the event slightly to debounce */
267 /* Must be a smaller delay than the chrg_full_isr below */
268 mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));
269
270 return IRQ_HANDLED;
271}
272
273static void sharpsl_chrg_full_timer(unsigned long data)
274{
275 dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies);
276
277 sharpsl_pm.full_count++;
278
279 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) {
280 dev_dbg(sharpsl_pm.dev, "Charge Full: AC removed - stop charging!\n");
281 if (sharpsl_pm.charge_mode == CHRG_ON)
282 sharpsl_charge_off();
283 } else if (sharpsl_pm.full_count < 2) {
284 dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n");
285 schedule_work(&toggle_charger);
286 } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) {
287 dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n");
288 schedule_work(&toggle_charger);
289 } else {
290 sharpsl_charge_off();
291 sharpsl_pm.charge_mode = CHRG_DONE;
292 dev_dbg(sharpsl_pm.dev, "Charge Full: Charging Finished\n");
293 }
294}
295
296/* Charging Finished Interrupt (Not present on Corgi) */
297/* Can trigger at the same time as an AC staus change so
298 delay until after that has been processed */
299irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp)
300{
301 if (sharpsl_pm.flags & SHARPSL_SUSPENDED)
302 return IRQ_HANDLED;
303
304 /* delay until after any ac interrupt */
305 mod_timer(&sharpsl_pm.chrg_full_timer, jiffies + msecs_to_jiffies(500));
306
307 return IRQ_HANDLED;
308}
309
310irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp)
311{
312 int is_fatal = 0;
313
314 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) {
315 dev_err(sharpsl_pm.dev, "Battery now Unlocked! Suspending.\n");
316 is_fatal = 1;
317 }
318
319 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL)) {
320 dev_err(sharpsl_pm.dev, "Fatal Batt Error! Suspending.\n");
321 is_fatal = 1;
322 }
323
324 if (!(sharpsl_pm.flags & SHARPSL_APM_QUEUED) && is_fatal) {
325 sharpsl_pm.flags |= SHARPSL_APM_QUEUED;
326 apm_queue_event(APM_CRITICAL_SUSPEND);
327 }
328
329 return IRQ_HANDLED;
330}
331
332/*
333 * Maintain an average of the last 10 readings
334 */
335#define SHARPSL_CNV_VALUE_NUM 10
336static int sharpsl_ad_index;
337
338static void sharpsl_average_clear(void)
339{
340 sharpsl_ad_index = 0;
341}
342
343static int sharpsl_average_value(int ad)
344{
345 int i, ad_val = 0;
346 static int sharpsl_ad[SHARPSL_CNV_VALUE_NUM+1];
347
348 if (sharpsl_pm.battstat.mainbat_status != APM_BATTERY_STATUS_HIGH) {
349 sharpsl_ad_index = 0;
350 return ad;
351 }
352
353 sharpsl_ad[sharpsl_ad_index] = ad;
354 sharpsl_ad_index++;
355 if (sharpsl_ad_index >= SHARPSL_CNV_VALUE_NUM) {
356 for (i=0; i < (SHARPSL_CNV_VALUE_NUM-1); i++)
357 sharpsl_ad[i] = sharpsl_ad[i+1];
358 sharpsl_ad_index = SHARPSL_CNV_VALUE_NUM - 1;
359 }
360 for (i=0; i < sharpsl_ad_index; i++)
361 ad_val += sharpsl_ad[i];
362
363 return (ad_val / sharpsl_ad_index);
364}
365
366/*
367 * Take an array of 5 integers, remove the maximum and minimum values
368 * and return the average.
369 */
370static int get_select_val(int *val)
371{
372 int i, j, k, temp, sum = 0;
373
374 /* Find MAX val */
375 temp = val[0];
376 j=0;
377 for (i=1; i<5; i++) {
378 if (temp < val[i]) {
379 temp = val[i];
380 j = i;
381 }
382 }
383
384 /* Find MIN val */
385 temp = val[4];
386 k=4;
387 for (i=3; i>=0; i--) {
388 if (temp > val[i]) {
389 temp = val[i];
390 k = i;
391 }
392 }
393
394 for (i=0; i<5; i++)
395 if (i != j && i != k )
396 sum += val[i];
397
398 dev_dbg(sharpsl_pm.dev, "Average: %d from values: %d, %d, %d, %d, %d\n", sum/3, val[0], val[1], val[2], val[3], val[4]);
399
400 return (sum/3);
401}
402
403static int sharpsl_check_battery_temp(void)
404{
405 int val, i, buff[5];
406
407 /* Check battery temperature */
408 for (i=0; i<5; i++) {
409 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP);
410 sharpsl_pm.machinfo->measure_temp(1);
411 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP);
412 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_TEMP);
413 sharpsl_pm.machinfo->measure_temp(0);
414 }
415
416 val = get_select_val(buff);
417
418 dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val);
419 if (val > SHARPSL_CHARGE_ON_TEMP)
420 return -1;
421
422 return 0;
423}
424
425static int sharpsl_check_battery_voltage(void)
426{
427 int val, i, buff[5];
428
429 /* disable charge, enable discharge */
430 sharpsl_pm.machinfo->charge(0);
431 sharpsl_pm.machinfo->discharge(1);
432 mdelay(SHARPSL_WAIT_DISCHARGE_ON);
433
434 if (sharpsl_pm.machinfo->discharge1)
435 sharpsl_pm.machinfo->discharge1(1);
436
437 /* Check battery voltage */
438 for (i=0; i<5; i++) {
439 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT);
440 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT);
441 }
442
443 if (sharpsl_pm.machinfo->discharge1)
444 sharpsl_pm.machinfo->discharge1(0);
445
446 sharpsl_pm.machinfo->discharge(0);
447
448 val = get_select_val(buff);
449 dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val);
450
451 if (val < SHARPSL_CHARGE_ON_VOLT)
452 return -1;
453
454 return 0;
455}
456
457static int sharpsl_ac_check(void)
458{
459 int temp, i, buff[5];
460
461 for (i=0; i<5; i++) {
462 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_ACIN_VOLT);
463 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN);
464 }
465
466 temp = get_select_val(buff);
467 dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n",temp);
468
469 if ((temp > SHARPSL_CHARGE_ON_ACIN_HIGH) || (temp < SHARPSL_CHARGE_ON_ACIN_LOW)) {
470 dev_err(sharpsl_pm.dev, "Error: AC check failed.\n");
471 return -1;
472 }
473
474 return 0;
475}
476
477#ifdef CONFIG_PM
478static int sharpsl_pm_suspend(struct platform_device *pdev, pm_message_t state)
479{
480 sharpsl_pm.flags |= SHARPSL_SUSPENDED;
481 flush_scheduled_work();
482
483 if (sharpsl_pm.charge_mode == CHRG_ON)
484 sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG;
485 else
486 sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG;
487
488 return 0;
489}
490
491static int sharpsl_pm_resume(struct platform_device *pdev)
492{
493 /* Clear the reset source indicators as they break the bootloader upon reboot */
494 RCSR = 0x0f;
495 sharpsl_average_clear();
496 sharpsl_pm.flags &= ~SHARPSL_APM_QUEUED;
497 sharpsl_pm.flags &= ~SHARPSL_SUSPENDED;
498
499 return 0;
500}
501
502static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
503{
504 dev_dbg(sharpsl_pm.dev, "Time is: %08x\n",RCNR);
505
506 dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n",sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG);
507 /* not charging and AC-IN! */
508
509 if ((sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG) && (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN))) {
510 dev_dbg(sharpsl_pm.dev, "Activating Offline Charger...\n");
511 sharpsl_pm.charge_mode = CHRG_OFF;
512 sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG;
513 sharpsl_off_charge_battery();
514 }
515
516 sharpsl_pm.machinfo->presuspend();
517
518 PEDR = 0xffffffff; /* clear it */
519
520 sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE;
521 if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCHK_TIME_SUSPEND + 30))) || !alarm_enable)) {
522 RTSR &= RTSR_ALE;
523 RTAR = RCNR + SHARPSL_BATCHK_TIME_SUSPEND;
524 dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n",RTAR);
525 sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE;
526 } else if (alarm_enable) {
527 RTSR &= RTSR_ALE;
528 RTAR = alarm_time;
529 dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n",RTAR);
530 } else {
531 dev_dbg(sharpsl_pm.dev, "No alarms set.\n");
532 }
533
534 pxa_pm_enter(state);
535
536 sharpsl_pm.machinfo->postsuspend();
537
538 dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",PEDR);
539}
540
541static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
542{
543 if (!sharpsl_pm.machinfo->should_wakeup(!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE) && alarm_enable) )
544 {
545 if (!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE)) {
546 dev_dbg(sharpsl_pm.dev, "No user triggered wakeup events and not charging. Strange. Suspend.\n");
547 corgi_goto_sleep(alarm_time, alarm_enable, state);
548 return 1;
549 }
550 if(sharpsl_off_charge_battery()) {
551 dev_dbg(sharpsl_pm.dev, "Charging. Suspend...\n");
552 corgi_goto_sleep(alarm_time, alarm_enable, state);
553 return 1;
554 }
555 dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n");
556 }
557
558 if ((!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) || (sharpsl_fatal_check() < 0) )
559 {
560 dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n");
561 corgi_goto_sleep(alarm_time, alarm_enable, state);
562 return 1;
563 }
564
565 return 0;
566}
567
568static int corgi_pxa_pm_enter(suspend_state_t state)
569{
570 unsigned long alarm_time = RTAR;
571 unsigned int alarm_status = ((RTSR & RTSR_ALE) != 0);
572
573 dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n");
574
575 corgi_goto_sleep(alarm_time, alarm_status, state);
576
577 while (corgi_enter_suspend(alarm_time,alarm_status,state))
578 {}
579
580 dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n");
581
582 return 0;
583}
584#endif
585
586
587/*
588 * Check for fatal battery errors
589 * Fatal returns -1
590 */
591static int sharpsl_fatal_check(void)
592{
593 int buff[5], temp, i, acin;
594
595 dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check entered\n");
596
597 /* Check AC-Adapter */
598 acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
599
600 if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) {
601 sharpsl_pm.machinfo->charge(0);
602 udelay(100);
603 sharpsl_pm.machinfo->discharge(1); /* enable discharge */
604 mdelay(SHARPSL_WAIT_DISCHARGE_ON);
605 }
606
607 if (sharpsl_pm.machinfo->discharge1)
608 sharpsl_pm.machinfo->discharge1(1);
609
610 /* Check battery : check inserting battery ? */
611 for (i=0; i<5; i++) {
612 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT);
613 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT);
614 }
615
616 if (sharpsl_pm.machinfo->discharge1)
617 sharpsl_pm.machinfo->discharge1(0);
618
619 if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) {
620 udelay(100);
621 sharpsl_pm.machinfo->charge(1);
622 sharpsl_pm.machinfo->discharge(0);
623 }
624
625 temp = get_select_val(buff);
626 dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check: acin: %d, discharge voltage: %d, no discharge: %d\n", acin, temp, sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT));
627
628 if ((acin && (temp < SHARPSL_FATAL_ACIN_VOLT)) ||
629 (!acin && (temp < SHARPSL_FATAL_NOACIN_VOLT)))
630 return -1;
631 return 0;
632}
633
634static int sharpsl_off_charge_error(void)
635{
636 dev_err(sharpsl_pm.dev, "Offline Charger: Error occured.\n");
637 sharpsl_pm.machinfo->charge(0);
638 sharpsl_pm_led(SHARPSL_LED_ERROR);
639 sharpsl_pm.charge_mode = CHRG_ERROR;
640 return 1;
641}
642
643/*
644 * Charging Control while suspended
645 * Return 1 - go straight to sleep
646 * Return 0 - sleep or wakeup depending on other factors
647 */
648static int sharpsl_off_charge_battery(void)
649{
650 int time;
651
652 dev_dbg(sharpsl_pm.dev, "Charge Mode: %d\n", sharpsl_pm.charge_mode);
653
654 if (sharpsl_pm.charge_mode == CHRG_OFF) {
655 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 1\n");
656
657 /* AC Check */
658 if ((sharpsl_ac_check() < 0) || (sharpsl_check_battery_temp() < 0))
659 return sharpsl_off_charge_error();
660
661 /* Start Charging */
662 sharpsl_pm_led(SHARPSL_LED_ON);
663 sharpsl_pm.machinfo->charge(0);
664 mdelay(SHARPSL_CHARGE_WAIT_TIME);
665 sharpsl_pm.machinfo->charge(1);
666
667 sharpsl_pm.charge_mode = CHRG_ON;
668 sharpsl_pm.full_count = 0;
669
670 return 1;
671 } else if (sharpsl_pm.charge_mode != CHRG_ON) {
672 return 1;
673 }
674
675 if (sharpsl_pm.full_count == 0) {
676 int time;
677
678 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 2\n");
679
680 if ((sharpsl_check_battery_temp() < 0) || (sharpsl_check_battery_voltage() < 0))
681 return sharpsl_off_charge_error();
682
683 sharpsl_pm.machinfo->charge(0);
684 mdelay(SHARPSL_CHARGE_WAIT_TIME);
685 sharpsl_pm.machinfo->charge(1);
686 sharpsl_pm.charge_mode = CHRG_ON;
687
688 mdelay(SHARPSL_CHARGE_CO_CHECK_TIME);
689
690 time = RCNR;
691 while(1) {
692 /* Check if any wakeup event had occured */
693 if (sharpsl_pm.machinfo->charger_wakeup() != 0)
694 return 0;
695 /* Check for timeout */
696 if ((RCNR - time) > SHARPSL_WAIT_CO_TIME)
697 return 1;
698 if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) {
699 dev_dbg(sharpsl_pm.dev, "Offline Charger: Charge full occured. Retrying to check\n");
700 sharpsl_pm.full_count++;
701 sharpsl_pm.machinfo->charge(0);
702 mdelay(SHARPSL_CHARGE_WAIT_TIME);
703 sharpsl_pm.machinfo->charge(1);
704 return 1;
705 }
706 }
707 }
708
709 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 3\n");
710
711 mdelay(SHARPSL_CHARGE_CO_CHECK_TIME);
712
713 time = RCNR;
714 while(1) {
715 /* Check if any wakeup event had occured */
716 if (sharpsl_pm.machinfo->charger_wakeup() != 0)
717 return 0;
718 /* Check for timeout */
719 if ((RCNR-time) > SHARPSL_WAIT_CO_TIME) {
720 if (sharpsl_pm.full_count > SHARPSL_CHARGE_RETRY_CNT) {
721 dev_dbg(sharpsl_pm.dev, "Offline Charger: Not charged sufficiently. Retrying.\n");
722 sharpsl_pm.full_count = 0;
723 }
724 sharpsl_pm.full_count++;
725 return 1;
726 }
727 if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) {
728 dev_dbg(sharpsl_pm.dev, "Offline Charger: Charging complete.\n");
729 sharpsl_pm_led(SHARPSL_LED_OFF);
730 sharpsl_pm.machinfo->charge(0);
731 sharpsl_pm.charge_mode = CHRG_DONE;
732 return 1;
733 }
734 }
735}
736
737
738static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf)
739{
740 return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_percent);
741}
742
743static ssize_t battery_voltage_show(struct device *dev, struct device_attribute *attr, char *buf)
744{
745 return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_voltage);
746}
747
748static DEVICE_ATTR(battery_percentage, 0444, battery_percentage_show, NULL);
749static DEVICE_ATTR(battery_voltage, 0444, battery_voltage_show, NULL);
750
751extern void (*apm_get_power_status)(struct apm_power_info *);
752
753static void sharpsl_apm_get_power_status(struct apm_power_info *info)
754{
755 info->ac_line_status = sharpsl_pm.battstat.ac_status;
756
757 if (sharpsl_pm.charge_mode == CHRG_ON)
758 info->battery_status = APM_BATTERY_STATUS_CHARGING;
759 else
760 info->battery_status = sharpsl_pm.battstat.mainbat_status;
761
762 info->battery_flag = (1 << info->battery_status);
763 info->battery_life = sharpsl_pm.battstat.mainbat_percent;
764}
765
766static struct pm_ops sharpsl_pm_ops = {
767 .pm_disk_mode = PM_DISK_FIRMWARE,
768 .prepare = pxa_pm_prepare,
769 .enter = corgi_pxa_pm_enter,
770 .finish = pxa_pm_finish,
771};
772
773static int __init sharpsl_pm_probe(struct platform_device *pdev)
774{
775 if (!pdev->dev.platform_data)
776 return -EINVAL;
777
778 sharpsl_pm.dev = &pdev->dev;
779 sharpsl_pm.machinfo = pdev->dev.platform_data;
780 sharpsl_pm.charge_mode = CHRG_OFF;
781 sharpsl_pm.flags = 0;
782
783 init_timer(&sharpsl_pm.ac_timer);
784 sharpsl_pm.ac_timer.function = sharpsl_ac_timer;
785
786 init_timer(&sharpsl_pm.chrg_full_timer);
787 sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer;
788
789 sharpsl_pm.machinfo->init();
790
791 device_create_file(&pdev->dev, &dev_attr_battery_percentage);
792 device_create_file(&pdev->dev, &dev_attr_battery_voltage);
793
794 apm_get_power_status = sharpsl_apm_get_power_status;
795
796 pm_set_ops(&sharpsl_pm_ops);
797
798 mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));
799
800 return 0;
801}
802
803static int sharpsl_pm_remove(struct platform_device *pdev)
804{
805 pm_set_ops(NULL);
806
807 device_remove_file(&pdev->dev, &dev_attr_battery_percentage);
808 device_remove_file(&pdev->dev, &dev_attr_battery_voltage);
809
810 sharpsl_pm.machinfo->exit();
811
812 del_timer_sync(&sharpsl_pm.chrg_full_timer);
813 del_timer_sync(&sharpsl_pm.ac_timer);
814
815 return 0;
816}
817
818static struct platform_driver sharpsl_pm_driver = {
819 .probe = sharpsl_pm_probe,
820 .remove = sharpsl_pm_remove,
821 .suspend = sharpsl_pm_suspend,
822 .resume = sharpsl_pm_resume,
823 .driver = {
824 .name = "sharpsl-pm",
825 },
826};
827
828static int __devinit sharpsl_pm_init(void)
829{
830 return platform_driver_register(&sharpsl_pm_driver);
831}
832
833static void sharpsl_pm_exit(void)
834{
835 platform_driver_unregister(&sharpsl_pm_driver);
836}
837
838late_initcall(sharpsl_pm_init);
839module_exit(sharpsl_pm_exit);
diff --git a/arch/arm/configs/assabet_defconfig b/arch/arm/configs/assabet_defconfig
index ccbb4c0d58..089c9d5984 100644
--- a/arch/arm/configs/assabet_defconfig
+++ b/arch/arm/configs/assabet_defconfig
@@ -63,7 +63,6 @@ CONFIG_OBSOLETE_MODPARM=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig
new file mode 100644
index 0000000000..5cdd13acf8
--- /dev/null
+++ b/arch/arm/configs/at91rm9200dk_defconfig
@@ -0,0 +1,1009 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15
4# Mon Jan 9 20:54:30 2006
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11
12#
13# Code maturity level options
14#
15CONFIG_EXPERIMENTAL=y
16CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19
20#
21# General setup
22#
23CONFIG_LOCALVERSION=""
24CONFIG_LOCALVERSION_AUTO=y
25# CONFIG_SWAP is not set
26CONFIG_SYSVIPC=y
27# CONFIG_POSIX_MQUEUE is not set
28# CONFIG_BSD_PROCESS_ACCT is not set
29CONFIG_SYSCTL=y
30# CONFIG_AUDIT is not set
31CONFIG_HOTPLUG=y
32CONFIG_KOBJECT_UEVENT=y
33# CONFIG_IKCONFIG is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_CC_OPTIMIZE_FOR_SIZE=y
36# CONFIG_EMBEDDED is not set
37CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_ALL is not set
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_PRINTK=y
41CONFIG_BUG=y
42CONFIG_BASE_FULL=y
43CONFIG_FUTEX=y
44CONFIG_EPOLL=y
45CONFIG_SHMEM=y
46CONFIG_CC_ALIGN_FUNCTIONS=0
47CONFIG_CC_ALIGN_LABELS=0
48CONFIG_CC_ALIGN_LOOPS=0
49CONFIG_CC_ALIGN_JUMPS=0
50# CONFIG_TINY_SHMEM is not set
51CONFIG_BASE_SMALL=0
52
53#
54# Loadable module support
55#
56CONFIG_MODULES=y
57CONFIG_MODULE_UNLOAD=y
58# CONFIG_MODULE_FORCE_UNLOAD is not set
59CONFIG_OBSOLETE_MODPARM=y
60# CONFIG_MODVERSIONS is not set
61# CONFIG_MODULE_SRCVERSION_ALL is not set
62CONFIG_KMOD=y
63
64#
65# Block layer
66#
67
68#
69# IO Schedulers
70#
71CONFIG_IOSCHED_NOOP=y
72CONFIG_IOSCHED_AS=y
73# CONFIG_IOSCHED_DEADLINE is not set
74# CONFIG_IOSCHED_CFQ is not set
75CONFIG_DEFAULT_AS=y
76# CONFIG_DEFAULT_DEADLINE is not set
77# CONFIG_DEFAULT_CFQ is not set
78# CONFIG_DEFAULT_NOOP is not set
79CONFIG_DEFAULT_IOSCHED="anticipatory"
80
81#
82# System Type
83#
84# CONFIG_ARCH_CLPS7500 is not set
85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set
92# CONFIG_ARCH_IXP4XX is not set
93# CONFIG_ARCH_IXP2000 is not set
94# CONFIG_ARCH_L7200 is not set
95# CONFIG_ARCH_PXA is not set
96# CONFIG_ARCH_RPC is not set
97# CONFIG_ARCH_SA1100 is not set
98# CONFIG_ARCH_S3C2410 is not set
99# CONFIG_ARCH_SHARK is not set
100# CONFIG_ARCH_LH7A40X is not set
101# CONFIG_ARCH_OMAP is not set
102# CONFIG_ARCH_VERSATILE is not set
103# CONFIG_ARCH_REALVIEW is not set
104# CONFIG_ARCH_IMX is not set
105# CONFIG_ARCH_H720X is not set
106# CONFIG_ARCH_AAEC2000 is not set
107CONFIG_ARCH_AT91RM9200=y
108
109#
110# AT91RM9200 Implementations
111#
112
113#
114# AT91RM9200 Board Type
115#
116CONFIG_ARCH_AT91RM9200DK=y
117# CONFIG_MACH_AT91RM9200EK is not set
118# CONFIG_MACH_CSB337 is not set
119# CONFIG_MACH_CSB637 is not set
120# CONFIG_MACH_CARMEVA is not set
121# CONFIG_MACH_KB9200 is not set
122# CONFIG_MACH_ATEB9200 is not set
123
124#
125# AT91RM9200 Feature Selections
126#
127CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
128
129#
130# Processor Type
131#
132CONFIG_CPU_32=y
133CONFIG_CPU_ARM920T=y
134CONFIG_CPU_32v4=y
135CONFIG_CPU_ABRT_EV4T=y
136CONFIG_CPU_CACHE_V4WT=y
137CONFIG_CPU_CACHE_VIVT=y
138CONFIG_CPU_COPY_V4WB=y
139CONFIG_CPU_TLB_V4WBI=y
140
141#
142# Processor Features
143#
144# CONFIG_ARM_THUMB is not set
145# CONFIG_CPU_ICACHE_DISABLE is not set
146# CONFIG_CPU_DCACHE_DISABLE is not set
147# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
148
149#
150# Bus support
151#
152CONFIG_ISA_DMA_API=y
153
154#
155# PCCARD (PCMCIA/CardBus) support
156#
157CONFIG_PCCARD=y
158# CONFIG_PCMCIA_DEBUG is not set
159CONFIG_PCMCIA=y
160CONFIG_PCMCIA_LOAD_CIS=y
161CONFIG_PCMCIA_IOCTL=y
162
163#
164# PC-card bridges
165#
166CONFIG_AT91_CF=y
167
168#
169# Kernel Features
170#
171# CONFIG_PREEMPT is not set
172# CONFIG_NO_IDLE_HZ is not set
173# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
174CONFIG_SELECT_MEMORY_MODEL=y
175CONFIG_FLATMEM_MANUAL=y
176# CONFIG_DISCONTIGMEM_MANUAL is not set
177# CONFIG_SPARSEMEM_MANUAL is not set
178CONFIG_FLATMEM=y
179CONFIG_FLAT_NODE_MEM_MAP=y
180# CONFIG_SPARSEMEM_STATIC is not set
181CONFIG_SPLIT_PTLOCK_CPUS=4096
182CONFIG_LEDS=y
183CONFIG_LEDS_TIMER=y
184# CONFIG_LEDS_CPU is not set
185CONFIG_ALIGNMENT_TRAP=y
186
187#
188# Boot options
189#
190CONFIG_ZBOOT_ROM_TEXT=0x0
191CONFIG_ZBOOT_ROM_BSS=0x0
192CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw"
193# CONFIG_XIP_KERNEL is not set
194
195#
196# Floating point emulation
197#
198
199#
200# At least one emulation must be selected
201#
202CONFIG_FPE_NWFPE=y
203# CONFIG_FPE_NWFPE_XP is not set
204# CONFIG_FPE_FASTFPE is not set
205
206#
207# Userspace binary formats
208#
209CONFIG_BINFMT_ELF=y
210# CONFIG_BINFMT_AOUT is not set
211# CONFIG_BINFMT_MISC is not set
212# CONFIG_ARTHUR is not set
213
214#
215# Power management options
216#
217# CONFIG_PM is not set
218
219#
220# Networking
221#
222CONFIG_NET=y
223
224#
225# Networking options
226#
227CONFIG_PACKET=y
228# CONFIG_PACKET_MMAP is not set
229CONFIG_UNIX=y
230# CONFIG_NET_KEY is not set
231CONFIG_INET=y
232# CONFIG_IP_MULTICAST is not set
233# CONFIG_IP_ADVANCED_ROUTER is not set
234CONFIG_IP_FIB_HASH=y
235CONFIG_IP_PNP=y
236# CONFIG_IP_PNP_DHCP is not set
237CONFIG_IP_PNP_BOOTP=y
238# CONFIG_IP_PNP_RARP is not set
239# CONFIG_NET_IPIP is not set
240# CONFIG_NET_IPGRE is not set
241# CONFIG_ARPD is not set
242# CONFIG_SYN_COOKIES is not set
243# CONFIG_INET_AH is not set
244# CONFIG_INET_ESP is not set
245# CONFIG_INET_IPCOMP is not set
246# CONFIG_INET_TUNNEL is not set
247CONFIG_INET_DIAG=y
248CONFIG_INET_TCP_DIAG=y
249# CONFIG_TCP_CONG_ADVANCED is not set
250CONFIG_TCP_CONG_BIC=y
251# CONFIG_IPV6 is not set
252# CONFIG_NETFILTER is not set
253
254#
255# DCCP Configuration (EXPERIMENTAL)
256#
257# CONFIG_IP_DCCP is not set
258
259#
260# SCTP Configuration (EXPERIMENTAL)
261#
262# CONFIG_IP_SCTP is not set
263# CONFIG_ATM is not set
264# CONFIG_BRIDGE is not set
265# CONFIG_VLAN_8021Q is not set
266# CONFIG_DECNET is not set
267# CONFIG_LLC2 is not set
268# CONFIG_IPX is not set
269# CONFIG_ATALK is not set
270# CONFIG_X25 is not set
271# CONFIG_LAPB is not set
272# CONFIG_NET_DIVERT is not set
273# CONFIG_ECONET is not set
274# CONFIG_WAN_ROUTER is not set
275
276#
277# QoS and/or fair queueing
278#
279# CONFIG_NET_SCHED is not set
280
281#
282# Network testing
283#
284# CONFIG_NET_PKTGEN is not set
285# CONFIG_HAMRADIO is not set
286# CONFIG_IRDA is not set
287# CONFIG_BT is not set
288# CONFIG_IEEE80211 is not set
289
290#
291# Device Drivers
292#
293
294#
295# Generic Driver Options
296#
297CONFIG_STANDALONE=y
298CONFIG_PREVENT_FIRMWARE_BUILD=y
299CONFIG_FW_LOADER=y
300# CONFIG_DEBUG_DRIVER is not set
301
302#
303# Connector - unified userspace <-> kernelspace linker
304#
305# CONFIG_CONNECTOR is not set
306
307#
308# Memory Technology Devices (MTD)
309#
310CONFIG_MTD=y
311# CONFIG_MTD_DEBUG is not set
312# CONFIG_MTD_CONCAT is not set
313CONFIG_MTD_PARTITIONS=y
314# CONFIG_MTD_REDBOOT_PARTS is not set
315CONFIG_MTD_CMDLINE_PARTS=y
316# CONFIG_MTD_AFS_PARTS is not set
317
318#
319# User Modules And Translation Layers
320#
321CONFIG_MTD_CHAR=y
322CONFIG_MTD_BLOCK=y
323# CONFIG_FTL is not set
324# CONFIG_NFTL is not set
325# CONFIG_INFTL is not set
326# CONFIG_RFD_FTL is not set
327
328#
329# RAM/ROM/Flash chip drivers
330#
331CONFIG_MTD_CFI=y
332CONFIG_MTD_JEDECPROBE=y
333CONFIG_MTD_GEN_PROBE=y
334# CONFIG_MTD_CFI_ADV_OPTIONS is not set
335CONFIG_MTD_MAP_BANK_WIDTH_1=y
336CONFIG_MTD_MAP_BANK_WIDTH_2=y
337CONFIG_MTD_MAP_BANK_WIDTH_4=y
338# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
339# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
340# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
341CONFIG_MTD_CFI_I1=y
342CONFIG_MTD_CFI_I2=y
343# CONFIG_MTD_CFI_I4 is not set
344# CONFIG_MTD_CFI_I8 is not set
345# CONFIG_MTD_CFI_INTELEXT is not set
346CONFIG_MTD_CFI_AMDSTD=y
347CONFIG_MTD_CFI_AMDSTD_RETRY=0
348# CONFIG_MTD_CFI_STAA is not set
349CONFIG_MTD_CFI_UTIL=y
350# CONFIG_MTD_RAM is not set
351# CONFIG_MTD_ROM is not set
352# CONFIG_MTD_ABSENT is not set
353# CONFIG_MTD_XIP is not set
354
355#
356# Mapping drivers for chip access
357#
358# CONFIG_MTD_COMPLEX_MAPPINGS is not set
359CONFIG_MTD_PHYSMAP=y
360CONFIG_MTD_PHYSMAP_START=0x10000000
361CONFIG_MTD_PHYSMAP_LEN=0x200000
362CONFIG_MTD_PHYSMAP_BANKWIDTH=2
363# CONFIG_MTD_ARM_INTEGRATOR is not set
364# CONFIG_MTD_IMPA7 is not set
365# CONFIG_MTD_PLATRAM is not set
366
367#
368# Self-contained MTD device drivers
369#
370# CONFIG_MTD_SLRAM is not set
371# CONFIG_MTD_PHRAM is not set
372# CONFIG_MTD_MTDRAM is not set
373# CONFIG_MTD_BLKMTD is not set
374# CONFIG_MTD_BLOCK2MTD is not set
375
376#
377# Disk-On-Chip Device Drivers
378#
379# CONFIG_MTD_DOC2000 is not set
380# CONFIG_MTD_DOC2001 is not set
381# CONFIG_MTD_DOC2001PLUS is not set
382CONFIG_MTD_AT91_DATAFLASH=y
383CONFIG_MTD_AT91_DATAFLASH_CARD=y
384
385#
386# NAND Flash Device Drivers
387#
388# CONFIG_MTD_NAND is not set
389
390#
391# OneNAND Flash Device Drivers
392#
393# CONFIG_MTD_ONENAND is not set
394
395#
396# Parallel port support
397#
398# CONFIG_PARPORT is not set
399
400#
401# Plug and Play support
402#
403
404#
405# Block devices
406#
407# CONFIG_BLK_DEV_COW_COMMON is not set
408# CONFIG_BLK_DEV_LOOP is not set
409# CONFIG_BLK_DEV_NBD is not set
410# CONFIG_BLK_DEV_UB is not set
411CONFIG_BLK_DEV_RAM=y
412CONFIG_BLK_DEV_RAM_COUNT=16
413CONFIG_BLK_DEV_RAM_SIZE=8192
414CONFIG_BLK_DEV_INITRD=y
415# CONFIG_CDROM_PKTCDVD is not set
416# CONFIG_ATA_OVER_ETH is not set
417
418#
419# ATA/ATAPI/MFM/RLL support
420#
421# CONFIG_IDE is not set
422
423#
424# SCSI device support
425#
426# CONFIG_RAID_ATTRS is not set
427# CONFIG_SCSI is not set
428
429#
430# Multi-device support (RAID and LVM)
431#
432# CONFIG_MD is not set
433
434#
435# Fusion MPT device support
436#
437# CONFIG_FUSION is not set
438
439#
440# IEEE 1394 (FireWire) support
441#
442
443#
444# I2O device support
445#
446
447#
448# Network device support
449#
450CONFIG_NETDEVICES=y
451# CONFIG_DUMMY is not set
452# CONFIG_BONDING is not set
453# CONFIG_EQUALIZER is not set
454# CONFIG_TUN is not set
455
456#
457# PHY device support
458#
459# CONFIG_PHYLIB is not set
460
461#
462# Ethernet (10 or 100Mbit)
463#
464CONFIG_NET_ETHERNET=y
465CONFIG_MII=y
466CONFIG_ARM_AT91_ETHER=y
467# CONFIG_SMC91X is not set
468# CONFIG_DM9000 is not set
469
470#
471# Ethernet (1000 Mbit)
472#
473
474#
475# Ethernet (10000 Mbit)
476#
477
478#
479# Token Ring devices
480#
481
482#
483# Wireless LAN (non-hamradio)
484#
485# CONFIG_NET_RADIO is not set
486
487#
488# PCMCIA network device support
489#
490# CONFIG_NET_PCMCIA is not set
491
492#
493# Wan interfaces
494#
495# CONFIG_WAN is not set
496# CONFIG_PPP is not set
497# CONFIG_SLIP is not set
498# CONFIG_SHAPER is not set
499# CONFIG_NETCONSOLE is not set
500# CONFIG_NETPOLL is not set
501# CONFIG_NET_POLL_CONTROLLER is not set
502
503#
504# ISDN subsystem
505#
506# CONFIG_ISDN is not set
507
508#
509# Input device support
510#
511CONFIG_INPUT=y
512
513#
514# Userland interfaces
515#
516CONFIG_INPUT_MOUSEDEV=y
517# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
518CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
519CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
520# CONFIG_INPUT_JOYDEV is not set
521# CONFIG_INPUT_TSDEV is not set
522# CONFIG_INPUT_EVDEV is not set
523# CONFIG_INPUT_EVBUG is not set
524
525#
526# Input Device Drivers
527#
528# CONFIG_INPUT_KEYBOARD is not set
529# CONFIG_INPUT_MOUSE is not set
530# CONFIG_INPUT_JOYSTICK is not set
531# CONFIG_INPUT_TOUCHSCREEN is not set
532# CONFIG_INPUT_MISC is not set
533
534#
535# Hardware I/O ports
536#
537# CONFIG_SERIO is not set
538# CONFIG_GAMEPORT is not set
539
540#
541# Character devices
542#
543CONFIG_VT=y
544CONFIG_VT_CONSOLE=y
545CONFIG_HW_CONSOLE=y
546# CONFIG_SERIAL_NONSTANDARD is not set
547
548#
549# Serial drivers
550#
551# CONFIG_SERIAL_8250 is not set
552
553#
554# Non-8250 serial port support
555#
556CONFIG_SERIAL_AT91=y
557CONFIG_SERIAL_AT91_CONSOLE=y
558# CONFIG_SERIAL_AT91_TTYAT is not set
559CONFIG_SERIAL_CORE=y
560CONFIG_SERIAL_CORE_CONSOLE=y
561CONFIG_UNIX98_PTYS=y
562CONFIG_LEGACY_PTYS=y
563CONFIG_LEGACY_PTY_COUNT=256
564
565#
566# IPMI
567#
568# CONFIG_IPMI_HANDLER is not set
569
570#
571# Watchdog Cards
572#
573CONFIG_WATCHDOG=y
574CONFIG_WATCHDOG_NOWAYOUT=y
575
576#
577# Watchdog Device Drivers
578#
579# CONFIG_SOFT_WATCHDOG is not set
580CONFIG_AT91_WATCHDOG=y
581
582#
583# USB-based Watchdog Cards
584#
585# CONFIG_USBPCWATCHDOG is not set
586# CONFIG_NVRAM is not set
587# CONFIG_RTC is not set
588CONFIG_AT91_RTC=y
589# CONFIG_DTLK is not set
590# CONFIG_R3964 is not set
591
592#
593# Ftape, the floppy tape device driver
594#
595
596#
597# PCMCIA character devices
598#
599# CONFIG_SYNCLINK_CS is not set
600# CONFIG_CARDMAN_4000 is not set
601# CONFIG_CARDMAN_4040 is not set
602# CONFIG_RAW_DRIVER is not set
603
604#
605# TPM devices
606#
607# CONFIG_TCG_TPM is not set
608# CONFIG_TELCLOCK is not set
609CONFIG_AT91_SPI=y
610CONFIG_AT91_SPIDEV=y
611
612#
613# I2C support
614#
615CONFIG_I2C=y
616CONFIG_I2C_CHARDEV=y
617
618#
619# I2C Algorithms
620#
621# CONFIG_I2C_ALGOBIT is not set
622# CONFIG_I2C_ALGOPCF is not set
623# CONFIG_I2C_ALGOPCA is not set
624
625#
626# I2C Hardware Bus support
627#
628CONFIG_I2C_AT91=y
629# CONFIG_I2C_PARPORT_LIGHT is not set
630# CONFIG_I2C_STUB is not set
631# CONFIG_I2C_PCA_ISA is not set
632
633#
634# Miscellaneous I2C Chip support
635#
636# CONFIG_SENSORS_DS1337 is not set
637# CONFIG_SENSORS_DS1374 is not set
638# CONFIG_SENSORS_EEPROM is not set
639# CONFIG_SENSORS_PCF8574 is not set
640# CONFIG_SENSORS_PCA9539 is not set
641# CONFIG_SENSORS_PCF8591 is not set
642# CONFIG_SENSORS_RTC8564 is not set
643# CONFIG_SENSORS_MAX6875 is not set
644# CONFIG_RTC_X1205_I2C is not set
645# CONFIG_I2C_DEBUG_CORE is not set
646# CONFIG_I2C_DEBUG_ALGO is not set
647# CONFIG_I2C_DEBUG_BUS is not set
648# CONFIG_I2C_DEBUG_CHIP is not set
649
650#
651# Hardware Monitoring support
652#
653CONFIG_HWMON=y
654# CONFIG_HWMON_VID is not set
655# CONFIG_SENSORS_ADM1021 is not set
656# CONFIG_SENSORS_ADM1025 is not set
657# CONFIG_SENSORS_ADM1026 is not set
658# CONFIG_SENSORS_ADM1031 is not set
659# CONFIG_SENSORS_ADM9240 is not set
660# CONFIG_SENSORS_ASB100 is not set
661# CONFIG_SENSORS_ATXP1 is not set
662# CONFIG_SENSORS_DS1621 is not set
663# CONFIG_SENSORS_FSCHER is not set
664# CONFIG_SENSORS_FSCPOS is not set
665# CONFIG_SENSORS_GL518SM is not set
666# CONFIG_SENSORS_GL520SM is not set
667# CONFIG_SENSORS_IT87 is not set
668# CONFIG_SENSORS_LM63 is not set
669# CONFIG_SENSORS_LM75 is not set
670# CONFIG_SENSORS_LM77 is not set
671# CONFIG_SENSORS_LM78 is not set
672# CONFIG_SENSORS_LM80 is not set
673# CONFIG_SENSORS_LM83 is not set
674# CONFIG_SENSORS_LM85 is not set
675# CONFIG_SENSORS_LM87 is not set
676# CONFIG_SENSORS_LM90 is not set
677# CONFIG_SENSORS_LM92 is not set
678# CONFIG_SENSORS_MAX1619 is not set
679# CONFIG_SENSORS_PC87360 is not set
680# CONFIG_SENSORS_SMSC47M1 is not set
681# CONFIG_SENSORS_SMSC47B397 is not set
682# CONFIG_SENSORS_W83781D is not set
683# CONFIG_SENSORS_W83792D is not set
684# CONFIG_SENSORS_W83L785TS is not set
685# CONFIG_SENSORS_W83627HF is not set
686# CONFIG_SENSORS_W83627EHF is not set
687# CONFIG_HWMON_DEBUG_CHIP is not set
688
689#
690# Misc devices
691#
692
693#
694# Multimedia Capabilities Port drivers
695#
696
697#
698# Multimedia devices
699#
700# CONFIG_VIDEO_DEV is not set
701
702#
703# Digital Video Broadcasting Devices
704#
705# CONFIG_DVB is not set
706
707#
708# Graphics support
709#
710# CONFIG_FB is not set
711
712#
713# Console display driver support
714#
715# CONFIG_VGA_CONSOLE is not set
716CONFIG_DUMMY_CONSOLE=y
717
718#
719# Sound
720#
721# CONFIG_SOUND is not set
722
723#
724# USB support
725#
726CONFIG_USB_ARCH_HAS_HCD=y
727CONFIG_USB_ARCH_HAS_OHCI=y
728CONFIG_USB=y
729CONFIG_USB_DEBUG=y
730
731#
732# Miscellaneous USB options
733#
734CONFIG_USB_DEVICEFS=y
735# CONFIG_USB_BANDWIDTH is not set
736# CONFIG_USB_DYNAMIC_MINORS is not set
737# CONFIG_USB_OTG is not set
738
739#
740# USB Host Controller Drivers
741#
742# CONFIG_USB_ISP116X_HCD is not set
743CONFIG_USB_OHCI_HCD=y
744# CONFIG_USB_OHCI_BIG_ENDIAN is not set
745CONFIG_USB_OHCI_LITTLE_ENDIAN=y
746# CONFIG_USB_SL811_HCD is not set
747
748#
749# USB Device Class drivers
750#
751# CONFIG_USB_ACM is not set
752# CONFIG_USB_PRINTER is not set
753
754#
755# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
756#
757
758#
759# may also be needed; see USB_STORAGE Help for more information
760#
761# CONFIG_USB_STORAGE is not set
762
763#
764# USB Input Devices
765#
766# CONFIG_USB_HID is not set
767
768#
769# USB HID Boot Protocol drivers
770#
771# CONFIG_USB_KBD is not set
772# CONFIG_USB_MOUSE is not set
773# CONFIG_USB_AIPTEK is not set
774# CONFIG_USB_WACOM is not set
775# CONFIG_USB_ACECAD is not set
776# CONFIG_USB_KBTAB is not set
777# CONFIG_USB_POWERMATE is not set
778# CONFIG_USB_MTOUCH is not set
779# CONFIG_USB_ITMTOUCH is not set
780# CONFIG_USB_EGALAX is not set
781# CONFIG_USB_YEALINK is not set
782# CONFIG_USB_XPAD is not set
783# CONFIG_USB_ATI_REMOTE is not set
784# CONFIG_USB_KEYSPAN_REMOTE is not set
785# CONFIG_USB_APPLETOUCH is not set
786
787#
788# USB Imaging devices
789#
790# CONFIG_USB_MDC800 is not set
791
792#
793# USB Multimedia devices
794#
795# CONFIG_USB_DABUSB is not set
796
797#
798# Video4Linux support is needed for USB Multimedia device support
799#
800
801#
802# USB Network Adapters
803#
804# CONFIG_USB_CATC is not set
805# CONFIG_USB_KAWETH is not set
806# CONFIG_USB_PEGASUS is not set
807# CONFIG_USB_RTL8150 is not set
808# CONFIG_USB_USBNET is not set
809CONFIG_USB_MON=y
810
811#
812# USB port drivers
813#
814
815#
816# USB Serial Converter support
817#
818# CONFIG_USB_SERIAL is not set
819
820#
821# USB Miscellaneous drivers
822#
823# CONFIG_USB_EMI62 is not set
824# CONFIG_USB_EMI26 is not set
825# CONFIG_USB_AUERSWALD is not set
826# CONFIG_USB_RIO500 is not set
827# CONFIG_USB_LEGOTOWER is not set
828# CONFIG_USB_LCD is not set
829# CONFIG_USB_LED is not set
830# CONFIG_USB_CYTHERM is not set
831# CONFIG_USB_PHIDGETKIT is not set
832# CONFIG_USB_PHIDGETSERVO is not set
833# CONFIG_USB_IDMOUSE is not set
834# CONFIG_USB_LD is not set
835# CONFIG_USB_TEST is not set
836
837#
838# USB DSL modem support
839#
840
841#
842# USB Gadget Support
843#
844CONFIG_USB_GADGET=y
845# CONFIG_USB_GADGET_DEBUG_FILES is not set
846CONFIG_USB_GADGET_SELECTED=y
847# CONFIG_USB_GADGET_NET2280 is not set
848# CONFIG_USB_GADGET_PXA2XX is not set
849# CONFIG_USB_GADGET_GOKU is not set
850# CONFIG_USB_GADGET_LH7A40X is not set
851# CONFIG_USB_GADGET_OMAP is not set
852CONFIG_USB_GADGET_AT91=y
853CONFIG_USB_AT91=y
854# CONFIG_USB_GADGET_DUMMY_HCD is not set
855# CONFIG_USB_GADGET_DUALSPEED is not set
856# CONFIG_USB_ZERO is not set
857# CONFIG_USB_ETH is not set
858# CONFIG_USB_GADGETFS is not set
859# CONFIG_USB_FILE_STORAGE is not set
860# CONFIG_USB_G_SERIAL is not set
861
862#
863# MMC/SD Card support
864#
865CONFIG_MMC=y
866# CONFIG_MMC_DEBUG is not set
867CONFIG_MMC_BLOCK=y
868# CONFIG_MMC_WBSD is not set
869CONFIG_MMC_AT91RM9200=y
870
871#
872# File systems
873#
874CONFIG_EXT2_FS=y
875# CONFIG_EXT2_FS_XATTR is not set
876# CONFIG_EXT2_FS_XIP is not set
877# CONFIG_EXT3_FS is not set
878# CONFIG_JBD is not set
879# CONFIG_REISERFS_FS is not set
880# CONFIG_JFS_FS is not set
881# CONFIG_FS_POSIX_ACL is not set
882# CONFIG_XFS_FS is not set
883# CONFIG_MINIX_FS is not set
884# CONFIG_ROMFS_FS is not set
885CONFIG_INOTIFY=y
886# CONFIG_QUOTA is not set
887CONFIG_DNOTIFY=y
888# CONFIG_AUTOFS_FS is not set
889# CONFIG_AUTOFS4_FS is not set
890# CONFIG_FUSE_FS is not set
891
892#
893# CD-ROM/DVD Filesystems
894#
895# CONFIG_ISO9660_FS is not set
896# CONFIG_UDF_FS is not set
897
898#
899# DOS/FAT/NT Filesystems
900#
901# CONFIG_MSDOS_FS is not set
902# CONFIG_VFAT_FS is not set
903# CONFIG_NTFS_FS is not set
904
905#
906# Pseudo filesystems
907#
908CONFIG_PROC_FS=y
909CONFIG_SYSFS=y
910CONFIG_TMPFS=y
911# CONFIG_HUGETLB_PAGE is not set
912CONFIG_RAMFS=y
913# CONFIG_RELAYFS_FS is not set
914
915#
916# Miscellaneous filesystems
917#
918# CONFIG_ADFS_FS is not set
919# CONFIG_AFFS_FS is not set
920# CONFIG_HFS_FS is not set
921# CONFIG_HFSPLUS_FS is not set
922# CONFIG_BEFS_FS is not set
923# CONFIG_BFS_FS is not set
924# CONFIG_EFS_FS is not set
925# CONFIG_JFFS_FS is not set
926# CONFIG_JFFS2_FS is not set
927CONFIG_CRAMFS=y
928# CONFIG_VXFS_FS is not set
929# CONFIG_HPFS_FS is not set
930# CONFIG_QNX4FS_FS is not set
931# CONFIG_SYSV_FS is not set
932# CONFIG_UFS_FS is not set
933
934#
935# Network File Systems
936#
937# CONFIG_NFS_FS is not set
938# CONFIG_NFSD is not set
939# CONFIG_SMB_FS is not set
940# CONFIG_CIFS is not set
941# CONFIG_NCP_FS is not set
942# CONFIG_CODA_FS is not set
943# CONFIG_AFS_FS is not set
944# CONFIG_9P_FS is not set
945
946#
947# Partition Types
948#
949# CONFIG_PARTITION_ADVANCED is not set
950CONFIG_MSDOS_PARTITION=y
951
952#
953# Native Language Support
954#
955# CONFIG_NLS is not set
956
957#
958# Profiling support
959#
960# CONFIG_PROFILING is not set
961
962#
963# Kernel hacking
964#
965# CONFIG_PRINTK_TIME is not set
966CONFIG_DEBUG_KERNEL=y
967# CONFIG_MAGIC_SYSRQ is not set
968CONFIG_LOG_BUF_SHIFT=14
969CONFIG_DETECT_SOFTLOCKUP=y
970# CONFIG_SCHEDSTATS is not set
971# CONFIG_DEBUG_SLAB is not set
972# CONFIG_DEBUG_SPINLOCK is not set
973# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
974# CONFIG_DEBUG_KOBJECT is not set
975CONFIG_DEBUG_BUGVERBOSE=y
976# CONFIG_DEBUG_INFO is not set
977# CONFIG_DEBUG_FS is not set
978# CONFIG_DEBUG_VM is not set
979CONFIG_FRAME_POINTER=y
980# CONFIG_RCU_TORTURE_TEST is not set
981CONFIG_DEBUG_USER=y
982# CONFIG_DEBUG_WAITQ is not set
983# CONFIG_DEBUG_ERRORS is not set
984CONFIG_DEBUG_LL=y
985# CONFIG_DEBUG_ICEDCC is not set
986
987#
988# Security options
989#
990# CONFIG_KEYS is not set
991# CONFIG_SECURITY is not set
992
993#
994# Cryptographic options
995#
996# CONFIG_CRYPTO is not set
997
998#
999# Hardware crypto devices
1000#
1001
1002#
1003# Library routines
1004#
1005# CONFIG_CRC_CCITT is not set
1006# CONFIG_CRC16 is not set
1007CONFIG_CRC32=y
1008# CONFIG_LIBCRC32C is not set
1009CONFIG_ZLIB_INFLATE=y
diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig
new file mode 100644
index 0000000000..20838ccf1d
--- /dev/null
+++ b/arch/arm/configs/at91rm9200ek_defconfig
@@ -0,0 +1,998 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15
4# Mon Jan 9 20:57:31 2006
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11
12#
13# Code maturity level options
14#
15CONFIG_EXPERIMENTAL=y
16CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19
20#
21# General setup
22#
23CONFIG_LOCALVERSION=""
24# CONFIG_LOCALVERSION_AUTO is not set
25# CONFIG_SWAP is not set
26CONFIG_SYSVIPC=y
27# CONFIG_POSIX_MQUEUE is not set
28# CONFIG_BSD_PROCESS_ACCT is not set
29CONFIG_SYSCTL=y
30# CONFIG_AUDIT is not set
31CONFIG_HOTPLUG=y
32CONFIG_KOBJECT_UEVENT=y
33# CONFIG_IKCONFIG is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_CC_OPTIMIZE_FOR_SIZE=y
36# CONFIG_EMBEDDED is not set
37CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_ALL is not set
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_PRINTK=y
41CONFIG_BUG=y
42CONFIG_BASE_FULL=y
43CONFIG_FUTEX=y
44CONFIG_EPOLL=y
45CONFIG_SHMEM=y
46CONFIG_CC_ALIGN_FUNCTIONS=0
47CONFIG_CC_ALIGN_LABELS=0
48CONFIG_CC_ALIGN_LOOPS=0
49CONFIG_CC_ALIGN_JUMPS=0
50# CONFIG_TINY_SHMEM is not set
51CONFIG_BASE_SMALL=0
52
53#
54# Loadable module support
55#
56CONFIG_MODULES=y
57CONFIG_MODULE_UNLOAD=y
58# CONFIG_MODULE_FORCE_UNLOAD is not set
59CONFIG_OBSOLETE_MODPARM=y
60# CONFIG_MODVERSIONS is not set
61# CONFIG_MODULE_SRCVERSION_ALL is not set
62CONFIG_KMOD=y
63
64#
65# Block layer
66#
67
68#
69# IO Schedulers
70#
71CONFIG_IOSCHED_NOOP=y
72CONFIG_IOSCHED_AS=y
73# CONFIG_IOSCHED_DEADLINE is not set
74# CONFIG_IOSCHED_CFQ is not set
75CONFIG_DEFAULT_AS=y
76# CONFIG_DEFAULT_DEADLINE is not set
77# CONFIG_DEFAULT_CFQ is not set
78# CONFIG_DEFAULT_NOOP is not set
79CONFIG_DEFAULT_IOSCHED="anticipatory"
80
81#
82# System Type
83#
84# CONFIG_ARCH_CLPS7500 is not set
85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set
92# CONFIG_ARCH_IXP4XX is not set
93# CONFIG_ARCH_IXP2000 is not set
94# CONFIG_ARCH_L7200 is not set
95# CONFIG_ARCH_PXA is not set
96# CONFIG_ARCH_RPC is not set
97# CONFIG_ARCH_SA1100 is not set
98# CONFIG_ARCH_S3C2410 is not set
99# CONFIG_ARCH_SHARK is not set
100# CONFIG_ARCH_LH7A40X is not set
101# CONFIG_ARCH_OMAP is not set
102# CONFIG_ARCH_VERSATILE is not set
103# CONFIG_ARCH_REALVIEW is not set
104# CONFIG_ARCH_IMX is not set
105# CONFIG_ARCH_H720X is not set
106# CONFIG_ARCH_AAEC2000 is not set
107CONFIG_ARCH_AT91RM9200=y
108
109#
110# AT91RM9200 Implementations
111#
112
113#
114# AT91RM9200 Board Type
115#
116# CONFIG_ARCH_AT91RM9200DK is not set
117CONFIG_MACH_AT91RM9200EK=y
118# CONFIG_MACH_CSB337 is not set
119# CONFIG_MACH_CSB637 is not set
120# CONFIG_MACH_CARMEVA is not set
121# CONFIG_MACH_KB9200 is not set
122# CONFIG_MACH_ATEB9200 is not set
123
124#
125# AT91RM9200 Feature Selections
126#
127CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
128
129#
130# Processor Type
131#
132CONFIG_CPU_32=y
133CONFIG_CPU_ARM920T=y
134CONFIG_CPU_32v4=y
135CONFIG_CPU_ABRT_EV4T=y
136CONFIG_CPU_CACHE_V4WT=y
137CONFIG_CPU_CACHE_VIVT=y
138CONFIG_CPU_COPY_V4WB=y
139CONFIG_CPU_TLB_V4WBI=y
140
141#
142# Processor Features
143#
144# CONFIG_ARM_THUMB is not set
145# CONFIG_CPU_ICACHE_DISABLE is not set
146# CONFIG_CPU_DCACHE_DISABLE is not set
147# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
148
149#
150# Bus support
151#
152CONFIG_ISA_DMA_API=y
153
154#
155# PCCARD (PCMCIA/CardBus) support
156#
157# CONFIG_PCCARD is not set
158
159#
160# Kernel Features
161#
162# CONFIG_PREEMPT is not set
163# CONFIG_NO_IDLE_HZ is not set
164# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
165CONFIG_SELECT_MEMORY_MODEL=y
166CONFIG_FLATMEM_MANUAL=y
167# CONFIG_DISCONTIGMEM_MANUAL is not set
168# CONFIG_SPARSEMEM_MANUAL is not set
169CONFIG_FLATMEM=y
170CONFIG_FLAT_NODE_MEM_MAP=y
171# CONFIG_SPARSEMEM_STATIC is not set
172CONFIG_SPLIT_PTLOCK_CPUS=4096
173CONFIG_LEDS=y
174CONFIG_LEDS_TIMER=y
175CONFIG_LEDS_CPU=y
176CONFIG_ALIGNMENT_TRAP=y
177
178#
179# Boot options
180#
181CONFIG_ZBOOT_ROM_TEXT=0x0
182CONFIG_ZBOOT_ROM_BSS=0x0
183CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw"
184# CONFIG_XIP_KERNEL is not set
185
186#
187# Floating point emulation
188#
189
190#
191# At least one emulation must be selected
192#
193CONFIG_FPE_NWFPE=y
194# CONFIG_FPE_NWFPE_XP is not set
195# CONFIG_FPE_FASTFPE is not set
196
197#
198# Userspace binary formats
199#
200CONFIG_BINFMT_ELF=y
201# CONFIG_BINFMT_AOUT is not set
202# CONFIG_BINFMT_MISC is not set
203# CONFIG_ARTHUR is not set
204
205#
206# Power management options
207#
208# CONFIG_PM is not set
209
210#
211# Networking
212#
213CONFIG_NET=y
214
215#
216# Networking options
217#
218CONFIG_PACKET=y
219# CONFIG_PACKET_MMAP is not set
220CONFIG_UNIX=y
221# CONFIG_NET_KEY is not set
222CONFIG_INET=y
223# CONFIG_IP_MULTICAST is not set
224# CONFIG_IP_ADVANCED_ROUTER is not set
225CONFIG_IP_FIB_HASH=y
226CONFIG_IP_PNP=y
227# CONFIG_IP_PNP_DHCP is not set
228CONFIG_IP_PNP_BOOTP=y
229# CONFIG_IP_PNP_RARP is not set
230# CONFIG_NET_IPIP is not set
231# CONFIG_NET_IPGRE is not set
232# CONFIG_ARPD is not set
233# CONFIG_SYN_COOKIES is not set
234# CONFIG_INET_AH is not set
235# CONFIG_INET_ESP is not set
236# CONFIG_INET_IPCOMP is not set
237# CONFIG_INET_TUNNEL is not set
238CONFIG_INET_DIAG=y
239CONFIG_INET_TCP_DIAG=y
240# CONFIG_TCP_CONG_ADVANCED is not set
241CONFIG_TCP_CONG_BIC=y
242# CONFIG_IPV6 is not set
243# CONFIG_NETFILTER is not set
244
245#
246# DCCP Configuration (EXPERIMENTAL)
247#
248# CONFIG_IP_DCCP is not set
249
250#
251# SCTP Configuration (EXPERIMENTAL)
252#
253# CONFIG_IP_SCTP is not set
254# CONFIG_ATM is not set
255# CONFIG_BRIDGE is not set
256# CONFIG_VLAN_8021Q is not set
257# CONFIG_DECNET is not set
258# CONFIG_LLC2 is not set
259# CONFIG_IPX is not set
260# CONFIG_ATALK is not set
261# CONFIG_X25 is not set
262# CONFIG_LAPB is not set
263# CONFIG_NET_DIVERT is not set
264# CONFIG_ECONET is not set
265# CONFIG_WAN_ROUTER is not set
266
267#
268# QoS and/or fair queueing
269#
270# CONFIG_NET_SCHED is not set
271
272#
273# Network testing
274#
275# CONFIG_NET_PKTGEN is not set
276# CONFIG_HAMRADIO is not set
277# CONFIG_IRDA is not set
278# CONFIG_BT is not set
279# CONFIG_IEEE80211 is not set
280
281#
282# Device Drivers
283#
284
285#
286# Generic Driver Options
287#
288CONFIG_STANDALONE=y
289CONFIG_PREVENT_FIRMWARE_BUILD=y
290# CONFIG_FW_LOADER is not set
291# CONFIG_DEBUG_DRIVER is not set
292
293#
294# Connector - unified userspace <-> kernelspace linker
295#
296# CONFIG_CONNECTOR is not set
297
298#
299# Memory Technology Devices (MTD)
300#
301CONFIG_MTD=y
302# CONFIG_MTD_DEBUG is not set
303# CONFIG_MTD_CONCAT is not set
304CONFIG_MTD_PARTITIONS=y
305# CONFIG_MTD_REDBOOT_PARTS is not set
306CONFIG_MTD_CMDLINE_PARTS=y
307# CONFIG_MTD_AFS_PARTS is not set
308
309#
310# User Modules And Translation Layers
311#
312CONFIG_MTD_CHAR=y
313CONFIG_MTD_BLOCK=y
314# CONFIG_FTL is not set
315# CONFIG_NFTL is not set
316# CONFIG_INFTL is not set
317# CONFIG_RFD_FTL is not set
318
319#
320# RAM/ROM/Flash chip drivers
321#
322CONFIG_MTD_CFI=y
323CONFIG_MTD_JEDECPROBE=y
324CONFIG_MTD_GEN_PROBE=y
325# CONFIG_MTD_CFI_ADV_OPTIONS is not set
326CONFIG_MTD_MAP_BANK_WIDTH_1=y
327CONFIG_MTD_MAP_BANK_WIDTH_2=y
328CONFIG_MTD_MAP_BANK_WIDTH_4=y
329# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
330# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
331# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
332CONFIG_MTD_CFI_I1=y
333CONFIG_MTD_CFI_I2=y
334# CONFIG_MTD_CFI_I4 is not set
335# CONFIG_MTD_CFI_I8 is not set
336# CONFIG_MTD_CFI_INTELEXT is not set
337CONFIG_MTD_CFI_AMDSTD=y
338CONFIG_MTD_CFI_AMDSTD_RETRY=0
339# CONFIG_MTD_CFI_STAA is not set
340CONFIG_MTD_CFI_UTIL=y
341# CONFIG_MTD_RAM is not set
342# CONFIG_MTD_ROM is not set
343# CONFIG_MTD_ABSENT is not set
344# CONFIG_MTD_XIP is not set
345
346#
347# Mapping drivers for chip access
348#
349# CONFIG_MTD_COMPLEX_MAPPINGS is not set
350CONFIG_MTD_PHYSMAP=y
351CONFIG_MTD_PHYSMAP_START=0x10000000
352CONFIG_MTD_PHYSMAP_LEN=0x800000
353CONFIG_MTD_PHYSMAP_BANKWIDTH=2
354# CONFIG_MTD_ARM_INTEGRATOR is not set
355# CONFIG_MTD_IMPA7 is not set
356# CONFIG_MTD_PLATRAM is not set
357
358#
359# Self-contained MTD device drivers
360#
361# CONFIG_MTD_SLRAM is not set
362# CONFIG_MTD_PHRAM is not set
363# CONFIG_MTD_MTDRAM is not set
364# CONFIG_MTD_BLKMTD is not set
365# CONFIG_MTD_BLOCK2MTD is not set
366
367#
368# Disk-On-Chip Device Drivers
369#
370# CONFIG_MTD_DOC2000 is not set
371# CONFIG_MTD_DOC2001 is not set
372# CONFIG_MTD_DOC2001PLUS is not set
373CONFIG_MTD_AT91_DATAFLASH=y
374CONFIG_MTD_AT91_DATAFLASH_CARD=y
375
376#
377# NAND Flash Device Drivers
378#
379# CONFIG_MTD_NAND is not set
380
381#
382# OneNAND Flash Device Drivers
383#
384# CONFIG_MTD_ONENAND is not set
385
386#
387# Parallel port support
388#
389# CONFIG_PARPORT is not set
390
391#
392# Plug and Play support
393#
394
395#
396# Block devices
397#
398# CONFIG_BLK_DEV_COW_COMMON is not set
399# CONFIG_BLK_DEV_LOOP is not set
400# CONFIG_BLK_DEV_NBD is not set
401# CONFIG_BLK_DEV_UB is not set
402CONFIG_BLK_DEV_RAM=y
403CONFIG_BLK_DEV_RAM_COUNT=16
404CONFIG_BLK_DEV_RAM_SIZE=8192
405CONFIG_BLK_DEV_INITRD=y
406# CONFIG_CDROM_PKTCDVD is not set
407# CONFIG_ATA_OVER_ETH is not set
408
409#
410# SCSI device support
411#
412# CONFIG_RAID_ATTRS is not set
413# CONFIG_SCSI is not set
414
415#
416# Multi-device support (RAID and LVM)
417#
418# CONFIG_MD is not set
419
420#
421# Fusion MPT device support
422#
423# CONFIG_FUSION is not set
424
425#
426# IEEE 1394 (FireWire) support
427#
428
429#
430# I2O device support
431#
432
433#
434# Network device support
435#
436CONFIG_NETDEVICES=y
437# CONFIG_DUMMY is not set
438# CONFIG_BONDING is not set
439# CONFIG_EQUALIZER is not set
440# CONFIG_TUN is not set
441
442#
443# PHY device support
444#
445# CONFIG_PHYLIB is not set
446
447#
448# Ethernet (10 or 100Mbit)
449#
450CONFIG_NET_ETHERNET=y
451CONFIG_MII=y
452CONFIG_ARM_AT91_ETHER=y
453# CONFIG_SMC91X is not set
454# CONFIG_DM9000 is not set
455
456#
457# Ethernet (1000 Mbit)
458#
459
460#
461# Ethernet (10000 Mbit)
462#
463
464#
465# Token Ring devices
466#
467
468#
469# Wireless LAN (non-hamradio)
470#
471# CONFIG_NET_RADIO is not set
472
473#
474# Wan interfaces
475#
476# CONFIG_WAN is not set
477# CONFIG_PPP is not set
478# CONFIG_SLIP is not set
479# CONFIG_SHAPER is not set
480# CONFIG_NETCONSOLE is not set
481# CONFIG_NETPOLL is not set
482# CONFIG_NET_POLL_CONTROLLER is not set
483
484#
485# ISDN subsystem
486#
487# CONFIG_ISDN is not set
488
489#
490# Input device support
491#
492CONFIG_INPUT=y
493
494#
495# Userland interfaces
496#
497CONFIG_INPUT_MOUSEDEV=y
498# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
499CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
500CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
501# CONFIG_INPUT_JOYDEV is not set
502# CONFIG_INPUT_TSDEV is not set
503# CONFIG_INPUT_EVDEV is not set
504# CONFIG_INPUT_EVBUG is not set
505
506#
507# Input Device Drivers
508#
509# CONFIG_INPUT_KEYBOARD is not set
510# CONFIG_INPUT_MOUSE is not set
511# CONFIG_INPUT_JOYSTICK is not set
512# CONFIG_INPUT_TOUCHSCREEN is not set
513# CONFIG_INPUT_MISC is not set
514
515#
516# Hardware I/O ports
517#
518# CONFIG_SERIO is not set
519# CONFIG_GAMEPORT is not set
520
521#
522# Character devices
523#
524CONFIG_VT=y
525CONFIG_VT_CONSOLE=y
526CONFIG_HW_CONSOLE=y
527# CONFIG_SERIAL_NONSTANDARD is not set
528
529#
530# Serial drivers
531#
532# CONFIG_SERIAL_8250 is not set
533
534#
535# Non-8250 serial port support
536#
537CONFIG_SERIAL_AT91=y
538CONFIG_SERIAL_AT91_CONSOLE=y
539# CONFIG_SERIAL_AT91_TTYAT is not set
540CONFIG_SERIAL_CORE=y
541CONFIG_SERIAL_CORE_CONSOLE=y
542CONFIG_UNIX98_PTYS=y
543CONFIG_LEGACY_PTYS=y
544CONFIG_LEGACY_PTY_COUNT=256
545
546#
547# IPMI
548#
549# CONFIG_IPMI_HANDLER is not set
550
551#
552# Watchdog Cards
553#
554CONFIG_WATCHDOG=y
555CONFIG_WATCHDOG_NOWAYOUT=y
556
557#
558# Watchdog Device Drivers
559#
560# CONFIG_SOFT_WATCHDOG is not set
561CONFIG_AT91_WATCHDOG=y
562
563#
564# USB-based Watchdog Cards
565#
566# CONFIG_USBPCWATCHDOG is not set
567# CONFIG_NVRAM is not set
568# CONFIG_RTC is not set
569CONFIG_AT91_RTC=y
570# CONFIG_DTLK is not set
571# CONFIG_R3964 is not set
572
573#
574# Ftape, the floppy tape device driver
575#
576# CONFIG_RAW_DRIVER is not set
577
578#
579# TPM devices
580#
581# CONFIG_TCG_TPM is not set
582# CONFIG_TELCLOCK is not set
583CONFIG_AT91_SPI=y
584CONFIG_AT91_SPIDEV=y
585
586#
587# I2C support
588#
589CONFIG_I2C=y
590CONFIG_I2C_CHARDEV=y
591
592#
593# I2C Algorithms
594#
595# CONFIG_I2C_ALGOBIT is not set
596# CONFIG_I2C_ALGOPCF is not set
597# CONFIG_I2C_ALGOPCA is not set
598
599#
600# I2C Hardware Bus support
601#
602CONFIG_I2C_AT91=y
603# CONFIG_I2C_PARPORT_LIGHT is not set
604# CONFIG_I2C_STUB is not set
605# CONFIG_I2C_PCA_ISA is not set
606
607#
608# Miscellaneous I2C Chip support
609#
610# CONFIG_SENSORS_DS1337 is not set
611# CONFIG_SENSORS_DS1374 is not set
612# CONFIG_SENSORS_EEPROM is not set
613# CONFIG_SENSORS_PCF8574 is not set
614# CONFIG_SENSORS_PCA9539 is not set
615# CONFIG_SENSORS_PCF8591 is not set
616# CONFIG_SENSORS_RTC8564 is not set
617# CONFIG_SENSORS_MAX6875 is not set
618# CONFIG_RTC_X1205_I2C is not set
619# CONFIG_I2C_DEBUG_CORE is not set
620# CONFIG_I2C_DEBUG_ALGO is not set
621# CONFIG_I2C_DEBUG_BUS is not set
622# CONFIG_I2C_DEBUG_CHIP is not set
623
624#
625# Hardware Monitoring support
626#
627CONFIG_HWMON=y
628# CONFIG_HWMON_VID is not set
629# CONFIG_SENSORS_ADM1021 is not set
630# CONFIG_SENSORS_ADM1025 is not set
631# CONFIG_SENSORS_ADM1026 is not set
632# CONFIG_SENSORS_ADM1031 is not set
633# CONFIG_SENSORS_ADM9240 is not set
634# CONFIG_SENSORS_ASB100 is not set
635# CONFIG_SENSORS_ATXP1 is not set
636# CONFIG_SENSORS_DS1621 is not set
637# CONFIG_SENSORS_FSCHER is not set
638# CONFIG_SENSORS_FSCPOS is not set
639# CONFIG_SENSORS_GL518SM is not set
640# CONFIG_SENSORS_GL520SM is not set
641# CONFIG_SENSORS_IT87 is not set
642# CONFIG_SENSORS_LM63 is not set
643# CONFIG_SENSORS_LM75 is not set
644# CONFIG_SENSORS_LM77 is not set
645# CONFIG_SENSORS_LM78 is not set
646# CONFIG_SENSORS_LM80 is not set
647# CONFIG_SENSORS_LM83 is not set
648# CONFIG_SENSORS_LM85 is not set
649# CONFIG_SENSORS_LM87 is not set
650# CONFIG_SENSORS_LM90 is not set
651# CONFIG_SENSORS_LM92 is not set
652# CONFIG_SENSORS_MAX1619 is not set
653# CONFIG_SENSORS_PC87360 is not set
654# CONFIG_SENSORS_SMSC47M1 is not set
655# CONFIG_SENSORS_SMSC47B397 is not set
656# CONFIG_SENSORS_W83781D is not set
657# CONFIG_SENSORS_W83792D is not set
658# CONFIG_SENSORS_W83L785TS is not set
659# CONFIG_SENSORS_W83627HF is not set
660# CONFIG_SENSORS_W83627EHF is not set
661# CONFIG_HWMON_DEBUG_CHIP is not set
662
663#
664# Misc devices
665#
666
667#
668# Multimedia Capabilities Port drivers
669#
670
671#
672# Multimedia devices
673#
674# CONFIG_VIDEO_DEV is not set
675
676#
677# Digital Video Broadcasting Devices
678#
679# CONFIG_DVB is not set
680
681#
682# Graphics support
683#
684CONFIG_FB=y
685CONFIG_FB_CFB_FILLRECT=y
686CONFIG_FB_CFB_COPYAREA=y
687CONFIG_FB_CFB_IMAGEBLIT=y
688# CONFIG_FB_MACMODES is not set
689# CONFIG_FB_MODE_HELPERS is not set
690# CONFIG_FB_TILEBLITTING is not set
691CONFIG_FB_S1D13XXX=y
692# CONFIG_FB_VIRTUAL is not set
693
694#
695# Console display driver support
696#
697# CONFIG_VGA_CONSOLE is not set
698CONFIG_DUMMY_CONSOLE=y
699# CONFIG_FRAMEBUFFER_CONSOLE is not set
700
701#
702# Logo configuration
703#
704# CONFIG_LOGO is not set
705# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
706
707#
708# Sound
709#
710# CONFIG_SOUND is not set
711
712#
713# USB support
714#
715CONFIG_USB_ARCH_HAS_HCD=y
716CONFIG_USB_ARCH_HAS_OHCI=y
717CONFIG_USB=y
718CONFIG_USB_DEBUG=y
719
720#
721# Miscellaneous USB options
722#
723CONFIG_USB_DEVICEFS=y
724# CONFIG_USB_BANDWIDTH is not set
725# CONFIG_USB_DYNAMIC_MINORS is not set
726# CONFIG_USB_OTG is not set
727
728#
729# USB Host Controller Drivers
730#
731# CONFIG_USB_ISP116X_HCD is not set
732CONFIG_USB_OHCI_HCD=y
733# CONFIG_USB_OHCI_BIG_ENDIAN is not set
734CONFIG_USB_OHCI_LITTLE_ENDIAN=y
735# CONFIG_USB_SL811_HCD is not set
736
737#
738# USB Device Class drivers
739#
740# CONFIG_USB_ACM is not set
741# CONFIG_USB_PRINTER is not set
742
743#
744# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
745#
746
747#
748# may also be needed; see USB_STORAGE Help for more information
749#
750# CONFIG_USB_STORAGE is not set
751
752#
753# USB Input Devices
754#
755# CONFIG_USB_HID is not set
756
757#
758# USB HID Boot Protocol drivers
759#
760# CONFIG_USB_KBD is not set
761# CONFIG_USB_MOUSE is not set
762# CONFIG_USB_AIPTEK is not set
763# CONFIG_USB_WACOM is not set
764# CONFIG_USB_ACECAD is not set
765# CONFIG_USB_KBTAB is not set
766# CONFIG_USB_POWERMATE is not set
767# CONFIG_USB_MTOUCH is not set
768# CONFIG_USB_ITMTOUCH is not set
769# CONFIG_USB_EGALAX is not set
770# CONFIG_USB_YEALINK is not set
771# CONFIG_USB_XPAD is not set
772# CONFIG_USB_ATI_REMOTE is not set
773# CONFIG_USB_KEYSPAN_REMOTE is not set
774# CONFIG_USB_APPLETOUCH is not set
775
776#
777# USB Imaging devices
778#
779# CONFIG_USB_MDC800 is not set
780
781#
782# USB Multimedia devices
783#
784# CONFIG_USB_DABUSB is not set
785
786#
787# Video4Linux support is needed for USB Multimedia device support
788#
789
790#
791# USB Network Adapters
792#
793# CONFIG_USB_CATC is not set
794# CONFIG_USB_KAWETH is not set
795# CONFIG_USB_PEGASUS is not set
796# CONFIG_USB_RTL8150 is not set
797# CONFIG_USB_USBNET is not set
798CONFIG_USB_MON=y
799
800#
801# USB port drivers
802#
803
804#
805# USB Serial Converter support
806#
807# CONFIG_USB_SERIAL is not set
808
809#
810# USB Miscellaneous drivers
811#
812# CONFIG_USB_EMI62 is not set
813# CONFIG_USB_EMI26 is not set
814# CONFIG_USB_AUERSWALD is not set
815# CONFIG_USB_RIO500 is not set
816# CONFIG_USB_LEGOTOWER is not set
817# CONFIG_USB_LCD is not set
818# CONFIG_USB_LED is not set
819# CONFIG_USB_CYTHERM is not set
820# CONFIG_USB_PHIDGETKIT is not set
821# CONFIG_USB_PHIDGETSERVO is not set
822# CONFIG_USB_IDMOUSE is not set
823# CONFIG_USB_LD is not set
824# CONFIG_USB_TEST is not set
825
826#
827# USB DSL modem support
828#
829
830#
831# USB Gadget Support
832#
833CONFIG_USB_GADGET=y
834# CONFIG_USB_GADGET_DEBUG_FILES is not set
835CONFIG_USB_GADGET_SELECTED=y
836# CONFIG_USB_GADGET_NET2280 is not set
837# CONFIG_USB_GADGET_PXA2XX is not set
838# CONFIG_USB_GADGET_GOKU is not set
839# CONFIG_USB_GADGET_LH7A40X is not set
840# CONFIG_USB_GADGET_OMAP is not set
841CONFIG_USB_GADGET_AT91=y
842CONFIG_USB_AT91=y
843# CONFIG_USB_GADGET_DUMMY_HCD is not set
844# CONFIG_USB_GADGET_DUALSPEED is not set
845# CONFIG_USB_ZERO is not set
846# CONFIG_USB_ETH is not set
847# CONFIG_USB_GADGETFS is not set
848# CONFIG_USB_FILE_STORAGE is not set
849# CONFIG_USB_G_SERIAL is not set
850
851#
852# MMC/SD Card support
853#
854CONFIG_MMC=y
855# CONFIG_MMC_DEBUG is not set
856CONFIG_MMC_BLOCK=y
857# CONFIG_MMC_WBSD is not set
858CONFIG_MMC_AT91RM9200=y
859
860#
861# File systems
862#
863CONFIG_EXT2_FS=y
864# CONFIG_EXT2_FS_XATTR is not set
865# CONFIG_EXT2_FS_XIP is not set
866# CONFIG_EXT3_FS is not set
867# CONFIG_JBD is not set
868# CONFIG_REISERFS_FS is not set
869# CONFIG_JFS_FS is not set
870# CONFIG_FS_POSIX_ACL is not set
871# CONFIG_XFS_FS is not set
872# CONFIG_MINIX_FS is not set
873# CONFIG_ROMFS_FS is not set
874CONFIG_INOTIFY=y
875# CONFIG_QUOTA is not set
876CONFIG_DNOTIFY=y
877# CONFIG_AUTOFS_FS is not set
878# CONFIG_AUTOFS4_FS is not set
879# CONFIG_FUSE_FS is not set
880
881#
882# CD-ROM/DVD Filesystems
883#
884# CONFIG_ISO9660_FS is not set
885# CONFIG_UDF_FS is not set
886
887#
888# DOS/FAT/NT Filesystems
889#
890# CONFIG_MSDOS_FS is not set
891# CONFIG_VFAT_FS is not set
892# CONFIG_NTFS_FS is not set
893
894#
895# Pseudo filesystems
896#
897CONFIG_PROC_FS=y
898CONFIG_SYSFS=y
899CONFIG_TMPFS=y
900# CONFIG_HUGETLB_PAGE is not set
901CONFIG_RAMFS=y
902# CONFIG_RELAYFS_FS is not set
903
904#
905# Miscellaneous filesystems
906#
907# CONFIG_ADFS_FS is not set
908# CONFIG_AFFS_FS is not set
909# CONFIG_HFS_FS is not set
910# CONFIG_HFSPLUS_FS is not set
911# CONFIG_BEFS_FS is not set
912# CONFIG_BFS_FS is not set
913# CONFIG_EFS_FS is not set
914# CONFIG_JFFS_FS is not set
915# CONFIG_JFFS2_FS is not set
916CONFIG_CRAMFS=y
917# CONFIG_VXFS_FS is not set
918# CONFIG_HPFS_FS is not set
919# CONFIG_QNX4FS_FS is not set
920# CONFIG_SYSV_FS is not set
921# CONFIG_UFS_FS is not set
922
923#
924# Network File Systems
925#
926# CONFIG_NFS_FS is not set
927# CONFIG_NFSD is not set
928# CONFIG_SMB_FS is not set
929# CONFIG_CIFS is not set
930# CONFIG_NCP_FS is not set
931# CONFIG_CODA_FS is not set
932# CONFIG_AFS_FS is not set
933# CONFIG_9P_FS is not set
934
935#
936# Partition Types
937#
938# CONFIG_PARTITION_ADVANCED is not set
939CONFIG_MSDOS_PARTITION=y
940
941#
942# Native Language Support
943#
944# CONFIG_NLS is not set
945
946#
947# Profiling support
948#
949# CONFIG_PROFILING is not set
950
951#
952# Kernel hacking
953#
954# CONFIG_PRINTK_TIME is not set
955CONFIG_DEBUG_KERNEL=y
956# CONFIG_MAGIC_SYSRQ is not set
957CONFIG_LOG_BUF_SHIFT=14
958CONFIG_DETECT_SOFTLOCKUP=y
959# CONFIG_SCHEDSTATS is not set
960# CONFIG_DEBUG_SLAB is not set
961# CONFIG_DEBUG_SPINLOCK is not set
962# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
963# CONFIG_DEBUG_KOBJECT is not set
964CONFIG_DEBUG_BUGVERBOSE=y
965# CONFIG_DEBUG_INFO is not set
966# CONFIG_DEBUG_FS is not set
967# CONFIG_DEBUG_VM is not set
968CONFIG_FRAME_POINTER=y
969# CONFIG_RCU_TORTURE_TEST is not set
970CONFIG_DEBUG_USER=y
971# CONFIG_DEBUG_WAITQ is not set
972# CONFIG_DEBUG_ERRORS is not set
973CONFIG_DEBUG_LL=y
974# CONFIG_DEBUG_ICEDCC is not set
975
976#
977# Security options
978#
979# CONFIG_KEYS is not set
980# CONFIG_SECURITY is not set
981
982#
983# Cryptographic options
984#
985# CONFIG_CRYPTO is not set
986
987#
988# Hardware crypto devices
989#
990
991#
992# Library routines
993#
994# CONFIG_CRC_CCITT is not set
995# CONFIG_CRC16 is not set
996CONFIG_CRC32=y
997# CONFIG_LIBCRC32C is not set
998CONFIG_ZLIB_INFLATE=y
diff --git a/arch/arm/configs/badge4_defconfig b/arch/arm/configs/badge4_defconfig
index 5d92af975d..cfe6bd8e81 100644
--- a/arch/arm/configs/badge4_defconfig
+++ b/arch/arm/configs/badge4_defconfig
@@ -66,7 +66,6 @@ CONFIG_KMOD=y
66# CONFIG_ARCH_CLPS711X is not set 66# CONFIG_ARCH_CLPS711X is not set
67# CONFIG_ARCH_CO285 is not set 67# CONFIG_ARCH_CO285 is not set
68# CONFIG_ARCH_EBSA110 is not set 68# CONFIG_ARCH_EBSA110 is not set
69# CONFIG_ARCH_CAMELOT is not set
70# CONFIG_ARCH_FOOTBRIDGE is not set 69# CONFIG_ARCH_FOOTBRIDGE is not set
71# CONFIG_ARCH_INTEGRATOR is not set 70# CONFIG_ARCH_INTEGRATOR is not set
72# CONFIG_ARCH_IOP3XX is not set 71# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/bast_defconfig b/arch/arm/configs/bast_defconfig
index 35e3a99bcb..6886001b53 100644
--- a/arch/arm/configs/bast_defconfig
+++ b/arch/arm/configs/bast_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70# CONFIG_ARCH_IOP3XX is not set 69# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/cerfcube_defconfig b/arch/arm/configs/cerfcube_defconfig
index d8fe0f4040..f81a60005c 100644
--- a/arch/arm/configs/cerfcube_defconfig
+++ b/arch/arm/configs/cerfcube_defconfig
@@ -65,7 +65,6 @@ CONFIG_KMOD=y
65# CONFIG_ARCH_CLPS711X is not set 65# CONFIG_ARCH_CLPS711X is not set
66# CONFIG_ARCH_CO285 is not set 66# CONFIG_ARCH_CO285 is not set
67# CONFIG_ARCH_EBSA110 is not set 67# CONFIG_ARCH_EBSA110 is not set
68# CONFIG_ARCH_CAMELOT is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set 68# CONFIG_ARCH_FOOTBRIDGE is not set
70# CONFIG_ARCH_INTEGRATOR is not set 69# CONFIG_ARCH_INTEGRATOR is not set
71# CONFIG_ARCH_IOP3XX is not set 70# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/clps7500_defconfig b/arch/arm/configs/clps7500_defconfig
index 9087583714..af9ae53891 100644
--- a/arch/arm/configs/clps7500_defconfig
+++ b/arch/arm/configs/clps7500_defconfig
@@ -57,7 +57,6 @@ CONFIG_ARCH_CLPS7500=y
57# CONFIG_ARCH_CLPS711X is not set 57# CONFIG_ARCH_CLPS711X is not set
58# CONFIG_ARCH_CO285 is not set 58# CONFIG_ARCH_CO285 is not set
59# CONFIG_ARCH_EBSA110 is not set 59# CONFIG_ARCH_EBSA110 is not set
60# CONFIG_ARCH_CAMELOT is not set
61# CONFIG_ARCH_FOOTBRIDGE is not set 60# CONFIG_ARCH_FOOTBRIDGE is not set
62# CONFIG_ARCH_INTEGRATOR is not set 61# CONFIG_ARCH_INTEGRATOR is not set
63# CONFIG_ARCH_IOP3XX is not set 62# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/collie_defconfig b/arch/arm/configs/collie_defconfig
index 40dfe07a8b..15468a0cf7 100644
--- a/arch/arm/configs/collie_defconfig
+++ b/arch/arm/configs/collie_defconfig
@@ -71,7 +71,6 @@ CONFIG_KMOD=y
71# CONFIG_ARCH_CLPS711X is not set 71# CONFIG_ARCH_CLPS711X is not set
72# CONFIG_ARCH_CO285 is not set 72# CONFIG_ARCH_CO285 is not set
73# CONFIG_ARCH_EBSA110 is not set 73# CONFIG_ARCH_EBSA110 is not set
74# CONFIG_ARCH_CAMELOT is not set
75# CONFIG_ARCH_FOOTBRIDGE is not set 74# CONFIG_ARCH_FOOTBRIDGE is not set
76# CONFIG_ARCH_INTEGRATOR is not set 75# CONFIG_ARCH_INTEGRATOR is not set
77# CONFIG_ARCH_IOP3XX is not set 76# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/corgi_defconfig b/arch/arm/configs/corgi_defconfig
index 06229026f7..3c3461e833 100644
--- a/arch/arm/configs/corgi_defconfig
+++ b/arch/arm/configs/corgi_defconfig
@@ -87,7 +87,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
87# CONFIG_ARCH_CLPS711X is not set 87# CONFIG_ARCH_CLPS711X is not set
88# CONFIG_ARCH_CO285 is not set 88# CONFIG_ARCH_CO285 is not set
89# CONFIG_ARCH_EBSA110 is not set 89# CONFIG_ARCH_EBSA110 is not set
90# CONFIG_ARCH_CAMELOT is not set
91# CONFIG_ARCH_FOOTBRIDGE is not set 90# CONFIG_ARCH_FOOTBRIDGE is not set
92# CONFIG_ARCH_INTEGRATOR is not set 91# CONFIG_ARCH_INTEGRATOR is not set
93# CONFIG_ARCH_IOP3XX is not set 92# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig
new file mode 100644
index 0000000000..885a318483
--- /dev/null
+++ b/arch/arm/configs/csb337_defconfig
@@ -0,0 +1,1136 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15
4# Mon Jan 9 21:51:31 2006
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11
12#
13# Code maturity level options
14#
15CONFIG_EXPERIMENTAL=y
16CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19
20#
21# General setup
22#
23CONFIG_LOCALVERSION=""
24CONFIG_LOCALVERSION_AUTO=y
25# CONFIG_SWAP is not set
26CONFIG_SYSVIPC=y
27# CONFIG_POSIX_MQUEUE is not set
28# CONFIG_BSD_PROCESS_ACCT is not set
29CONFIG_SYSCTL=y
30# CONFIG_AUDIT is not set
31CONFIG_HOTPLUG=y
32CONFIG_KOBJECT_UEVENT=y
33# CONFIG_IKCONFIG is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_CC_OPTIMIZE_FOR_SIZE=y
36# CONFIG_EMBEDDED is not set
37CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_ALL is not set
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_PRINTK=y
41CONFIG_BUG=y
42CONFIG_BASE_FULL=y
43CONFIG_FUTEX=y
44CONFIG_EPOLL=y
45CONFIG_SHMEM=y
46CONFIG_CC_ALIGN_FUNCTIONS=0
47CONFIG_CC_ALIGN_LABELS=0
48CONFIG_CC_ALIGN_LOOPS=0
49CONFIG_CC_ALIGN_JUMPS=0
50# CONFIG_TINY_SHMEM is not set
51CONFIG_BASE_SMALL=0
52
53#
54# Loadable module support
55#
56CONFIG_MODULES=y
57CONFIG_MODULE_UNLOAD=y
58# CONFIG_MODULE_FORCE_UNLOAD is not set
59CONFIG_OBSOLETE_MODPARM=y
60# CONFIG_MODVERSIONS is not set
61# CONFIG_MODULE_SRCVERSION_ALL is not set
62CONFIG_KMOD=y
63
64#
65# Block layer
66#
67
68#
69# IO Schedulers
70#
71CONFIG_IOSCHED_NOOP=y
72CONFIG_IOSCHED_AS=y
73CONFIG_IOSCHED_DEADLINE=y
74CONFIG_IOSCHED_CFQ=y
75CONFIG_DEFAULT_AS=y
76# CONFIG_DEFAULT_DEADLINE is not set
77# CONFIG_DEFAULT_CFQ is not set
78# CONFIG_DEFAULT_NOOP is not set
79CONFIG_DEFAULT_IOSCHED="anticipatory"
80
81#
82# System Type
83#
84# CONFIG_ARCH_CLPS7500 is not set
85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set
92# CONFIG_ARCH_IXP4XX is not set
93# CONFIG_ARCH_IXP2000 is not set
94# CONFIG_ARCH_L7200 is not set
95# CONFIG_ARCH_PXA is not set
96# CONFIG_ARCH_RPC is not set
97# CONFIG_ARCH_SA1100 is not set
98# CONFIG_ARCH_S3C2410 is not set
99# CONFIG_ARCH_SHARK is not set
100# CONFIG_ARCH_LH7A40X is not set
101# CONFIG_ARCH_OMAP is not set
102# CONFIG_ARCH_VERSATILE is not set
103# CONFIG_ARCH_REALVIEW is not set
104# CONFIG_ARCH_IMX is not set
105# CONFIG_ARCH_H720X is not set
106# CONFIG_ARCH_AAEC2000 is not set
107CONFIG_ARCH_AT91RM9200=y
108
109#
110# AT91RM9200 Implementations
111#
112
113#
114# AT91RM9200 Board Type
115#
116# CONFIG_ARCH_AT91RM9200DK is not set
117# CONFIG_MACH_AT91RM9200EK is not set
118CONFIG_MACH_CSB337=y
119# CONFIG_MACH_CSB637 is not set
120# CONFIG_MACH_CARMEVA is not set
121# CONFIG_MACH_KB9200 is not set
122# CONFIG_MACH_ATEB9200 is not set
123
124#
125# AT91RM9200 Feature Selections
126#
127CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
128
129#
130# Processor Type
131#
132CONFIG_CPU_32=y
133CONFIG_CPU_ARM920T=y
134CONFIG_CPU_32v4=y
135CONFIG_CPU_ABRT_EV4T=y
136CONFIG_CPU_CACHE_V4WT=y
137CONFIG_CPU_CACHE_VIVT=y
138CONFIG_CPU_COPY_V4WB=y
139CONFIG_CPU_TLB_V4WBI=y
140
141#
142# Processor Features
143#
144# CONFIG_ARM_THUMB is not set
145# CONFIG_CPU_ICACHE_DISABLE is not set
146# CONFIG_CPU_DCACHE_DISABLE is not set
147# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
148
149#
150# Bus support
151#
152CONFIG_ISA_DMA_API=y
153
154#
155# PCCARD (PCMCIA/CardBus) support
156#
157CONFIG_PCCARD=y
158# CONFIG_PCMCIA_DEBUG is not set
159CONFIG_PCMCIA=y
160CONFIG_PCMCIA_LOAD_CIS=y
161CONFIG_PCMCIA_IOCTL=y
162
163#
164# PC-card bridges
165#
166CONFIG_AT91_CF=y
167
168#
169# Kernel Features
170#
171# CONFIG_PREEMPT is not set
172# CONFIG_NO_IDLE_HZ is not set
173# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
174CONFIG_SELECT_MEMORY_MODEL=y
175CONFIG_FLATMEM_MANUAL=y
176# CONFIG_DISCONTIGMEM_MANUAL is not set
177# CONFIG_SPARSEMEM_MANUAL is not set
178CONFIG_FLATMEM=y
179CONFIG_FLAT_NODE_MEM_MAP=y
180# CONFIG_SPARSEMEM_STATIC is not set
181CONFIG_SPLIT_PTLOCK_CPUS=4096
182CONFIG_LEDS=y
183CONFIG_LEDS_TIMER=y
184CONFIG_LEDS_CPU=y
185CONFIG_ALIGNMENT_TRAP=y
186
187#
188# Boot options
189#
190CONFIG_ZBOOT_ROM_TEXT=0x0
191CONFIG_ZBOOT_ROM_BSS=0x0
192CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,3145728 root=/dev/ram0 rw"
193# CONFIG_XIP_KERNEL is not set
194
195#
196# Floating point emulation
197#
198
199#
200# At least one emulation must be selected
201#
202CONFIG_FPE_NWFPE=y
203# CONFIG_FPE_NWFPE_XP is not set
204# CONFIG_FPE_FASTFPE is not set
205
206#
207# Userspace binary formats
208#
209CONFIG_BINFMT_ELF=y
210# CONFIG_BINFMT_AOUT is not set
211# CONFIG_BINFMT_MISC is not set
212# CONFIG_ARTHUR is not set
213
214#
215# Power management options
216#
217# CONFIG_PM is not set
218
219#
220# Networking
221#
222CONFIG_NET=y
223
224#
225# Networking options
226#
227CONFIG_PACKET=y
228# CONFIG_PACKET_MMAP is not set
229CONFIG_UNIX=y
230# CONFIG_NET_KEY is not set
231CONFIG_INET=y
232# CONFIG_IP_MULTICAST is not set
233# CONFIG_IP_ADVANCED_ROUTER is not set
234CONFIG_IP_FIB_HASH=y
235CONFIG_IP_PNP=y
236CONFIG_IP_PNP_DHCP=y
237CONFIG_IP_PNP_BOOTP=y
238# CONFIG_IP_PNP_RARP is not set
239# CONFIG_NET_IPIP is not set
240# CONFIG_NET_IPGRE is not set
241# CONFIG_ARPD is not set
242# CONFIG_SYN_COOKIES is not set
243# CONFIG_INET_AH is not set
244# CONFIG_INET_ESP is not set
245# CONFIG_INET_IPCOMP is not set
246# CONFIG_INET_TUNNEL is not set
247CONFIG_INET_DIAG=y
248CONFIG_INET_TCP_DIAG=y
249# CONFIG_TCP_CONG_ADVANCED is not set
250CONFIG_TCP_CONG_BIC=y
251# CONFIG_IPV6 is not set
252# CONFIG_NETFILTER is not set
253
254#
255# DCCP Configuration (EXPERIMENTAL)
256#
257# CONFIG_IP_DCCP is not set
258
259#
260# SCTP Configuration (EXPERIMENTAL)
261#
262# CONFIG_IP_SCTP is not set
263# CONFIG_ATM is not set
264# CONFIG_BRIDGE is not set
265# CONFIG_VLAN_8021Q is not set
266# CONFIG_DECNET is not set
267# CONFIG_LLC2 is not set
268# CONFIG_IPX is not set
269# CONFIG_ATALK is not set
270# CONFIG_X25 is not set
271# CONFIG_LAPB is not set
272# CONFIG_NET_DIVERT is not set
273# CONFIG_ECONET is not set
274# CONFIG_WAN_ROUTER is not set
275
276#
277# QoS and/or fair queueing
278#
279# CONFIG_NET_SCHED is not set
280
281#
282# Network testing
283#
284# CONFIG_NET_PKTGEN is not set
285# CONFIG_HAMRADIO is not set
286# CONFIG_IRDA is not set
287# CONFIG_BT is not set
288# CONFIG_IEEE80211 is not set
289
290#
291# Device Drivers
292#
293
294#
295# Generic Driver Options
296#
297CONFIG_STANDALONE=y
298CONFIG_PREVENT_FIRMWARE_BUILD=y
299CONFIG_FW_LOADER=y
300# CONFIG_DEBUG_DRIVER is not set
301
302#
303# Connector - unified userspace <-> kernelspace linker
304#
305# CONFIG_CONNECTOR is not set
306
307#
308# Memory Technology Devices (MTD)
309#
310CONFIG_MTD=y
311# CONFIG_MTD_DEBUG is not set
312# CONFIG_MTD_CONCAT is not set
313CONFIG_MTD_PARTITIONS=y
314# CONFIG_MTD_REDBOOT_PARTS is not set
315CONFIG_MTD_CMDLINE_PARTS=y
316# CONFIG_MTD_AFS_PARTS is not set
317
318#
319# User Modules And Translation Layers
320#
321CONFIG_MTD_CHAR=y
322CONFIG_MTD_BLOCK=y
323# CONFIG_FTL is not set
324# CONFIG_NFTL is not set
325# CONFIG_INFTL is not set
326# CONFIG_RFD_FTL is not set
327
328#
329# RAM/ROM/Flash chip drivers
330#
331CONFIG_MTD_CFI=y
332# CONFIG_MTD_JEDECPROBE is not set
333CONFIG_MTD_GEN_PROBE=y
334# CONFIG_MTD_CFI_ADV_OPTIONS is not set
335CONFIG_MTD_MAP_BANK_WIDTH_1=y
336CONFIG_MTD_MAP_BANK_WIDTH_2=y
337CONFIG_MTD_MAP_BANK_WIDTH_4=y
338# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
339# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
340# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
341CONFIG_MTD_CFI_I1=y
342CONFIG_MTD_CFI_I2=y
343# CONFIG_MTD_CFI_I4 is not set
344# CONFIG_MTD_CFI_I8 is not set
345CONFIG_MTD_CFI_INTELEXT=y
346# CONFIG_MTD_CFI_AMDSTD is not set
347# CONFIG_MTD_CFI_STAA is not set
348CONFIG_MTD_CFI_UTIL=y
349# CONFIG_MTD_RAM is not set
350# CONFIG_MTD_ROM is not set
351# CONFIG_MTD_ABSENT is not set
352# CONFIG_MTD_XIP is not set
353
354#
355# Mapping drivers for chip access
356#
357# CONFIG_MTD_COMPLEX_MAPPINGS is not set
358# CONFIG_MTD_PHYSMAP is not set
359# CONFIG_MTD_ARM_INTEGRATOR is not set
360# CONFIG_MTD_PLATRAM is not set
361CONFIG_MTD_CSB337=y
362
363#
364# Self-contained MTD device drivers
365#
366# CONFIG_MTD_SLRAM is not set
367# CONFIG_MTD_PHRAM is not set
368# CONFIG_MTD_MTDRAM is not set
369# CONFIG_MTD_BLKMTD is not set
370# CONFIG_MTD_BLOCK2MTD is not set
371
372#
373# Disk-On-Chip Device Drivers
374#
375# CONFIG_MTD_DOC2000 is not set
376# CONFIG_MTD_DOC2001 is not set
377# CONFIG_MTD_DOC2001PLUS is not set
378# CONFIG_MTD_AT91_DATAFLASH is not set
379
380#
381# NAND Flash Device Drivers
382#
383# CONFIG_MTD_NAND is not set
384
385#
386# OneNAND Flash Device Drivers
387#
388# CONFIG_MTD_ONENAND is not set
389
390#
391# Parallel port support
392#
393# CONFIG_PARPORT is not set
394
395#
396# Plug and Play support
397#
398
399#
400# Block devices
401#
402# CONFIG_BLK_DEV_COW_COMMON is not set
403CONFIG_BLK_DEV_LOOP=y
404# CONFIG_BLK_DEV_CRYPTOLOOP is not set
405# CONFIG_BLK_DEV_NBD is not set
406# CONFIG_BLK_DEV_UB is not set
407CONFIG_BLK_DEV_RAM=y
408CONFIG_BLK_DEV_RAM_COUNT=16
409CONFIG_BLK_DEV_RAM_SIZE=8192
410CONFIG_BLK_DEV_INITRD=y
411# CONFIG_CDROM_PKTCDVD is not set
412# CONFIG_ATA_OVER_ETH is not set
413
414#
415# ATA/ATAPI/MFM/RLL support
416#
417# CONFIG_IDE is not set
418
419#
420# SCSI device support
421#
422# CONFIG_RAID_ATTRS is not set
423CONFIG_SCSI=y
424CONFIG_SCSI_PROC_FS=y
425
426#
427# SCSI support type (disk, tape, CD-ROM)
428#
429# CONFIG_BLK_DEV_SD is not set
430# CONFIG_CHR_DEV_ST is not set
431# CONFIG_CHR_DEV_OSST is not set
432# CONFIG_BLK_DEV_SR is not set
433# CONFIG_CHR_DEV_SG is not set
434# CONFIG_CHR_DEV_SCH is not set
435
436#
437# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
438#
439# CONFIG_SCSI_MULTI_LUN is not set
440# CONFIG_SCSI_CONSTANTS is not set
441# CONFIG_SCSI_LOGGING is not set
442
443#
444# SCSI Transport Attributes
445#
446# CONFIG_SCSI_SPI_ATTRS is not set
447# CONFIG_SCSI_FC_ATTRS is not set
448# CONFIG_SCSI_ISCSI_ATTRS is not set
449# CONFIG_SCSI_SAS_ATTRS is not set
450
451#
452# SCSI low-level drivers
453#
454# CONFIG_ISCSI_TCP is not set
455# CONFIG_SCSI_SATA is not set
456# CONFIG_SCSI_DEBUG is not set
457
458#
459# PCMCIA SCSI adapter support
460#
461# CONFIG_PCMCIA_AHA152X is not set
462# CONFIG_PCMCIA_FDOMAIN is not set
463# CONFIG_PCMCIA_NINJA_SCSI is not set
464# CONFIG_PCMCIA_QLOGIC is not set
465# CONFIG_PCMCIA_SYM53C500 is not set
466
467#
468# Multi-device support (RAID and LVM)
469#
470# CONFIG_MD is not set
471
472#
473# Fusion MPT device support
474#
475# CONFIG_FUSION is not set
476
477#
478# IEEE 1394 (FireWire) support
479#
480
481#
482# I2O device support
483#
484
485#
486# Network device support
487#
488CONFIG_NETDEVICES=y
489# CONFIG_DUMMY is not set
490# CONFIG_BONDING is not set
491# CONFIG_EQUALIZER is not set
492# CONFIG_TUN is not set
493
494#
495# PHY device support
496#
497# CONFIG_PHYLIB is not set
498
499#
500# Ethernet (10 or 100Mbit)
501#
502CONFIG_NET_ETHERNET=y
503CONFIG_MII=y
504CONFIG_ARM_AT91_ETHER=y
505# CONFIG_SMC91X is not set
506# CONFIG_DM9000 is not set
507
508#
509# Ethernet (1000 Mbit)
510#
511
512#
513# Ethernet (10000 Mbit)
514#
515
516#
517# Token Ring devices
518#
519
520#
521# Wireless LAN (non-hamradio)
522#
523# CONFIG_NET_RADIO is not set
524
525#
526# PCMCIA network device support
527#
528# CONFIG_NET_PCMCIA is not set
529
530#
531# Wan interfaces
532#
533# CONFIG_WAN is not set
534# CONFIG_PPP is not set
535# CONFIG_SLIP is not set
536# CONFIG_SHAPER is not set
537# CONFIG_NETCONSOLE is not set
538# CONFIG_NETPOLL is not set
539# CONFIG_NET_POLL_CONTROLLER is not set
540
541#
542# ISDN subsystem
543#
544# CONFIG_ISDN is not set
545
546#
547# Input device support
548#
549CONFIG_INPUT=y
550
551#
552# Userland interfaces
553#
554CONFIG_INPUT_MOUSEDEV=y
555CONFIG_INPUT_MOUSEDEV_PSAUX=y
556CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
557CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
558# CONFIG_INPUT_JOYDEV is not set
559# CONFIG_INPUT_TSDEV is not set
560# CONFIG_INPUT_EVDEV is not set
561# CONFIG_INPUT_EVBUG is not set
562
563#
564# Input Device Drivers
565#
566# CONFIG_INPUT_KEYBOARD is not set
567# CONFIG_INPUT_MOUSE is not set
568# CONFIG_INPUT_JOYSTICK is not set
569# CONFIG_INPUT_TOUCHSCREEN is not set
570# CONFIG_INPUT_MISC is not set
571
572#
573# Hardware I/O ports
574#
575# CONFIG_SERIO is not set
576# CONFIG_GAMEPORT is not set
577
578#
579# Character devices
580#
581CONFIG_VT=y
582CONFIG_VT_CONSOLE=y
583CONFIG_HW_CONSOLE=y
584# CONFIG_SERIAL_NONSTANDARD is not set
585
586#
587# Serial drivers
588#
589# CONFIG_SERIAL_8250 is not set
590
591#
592# Non-8250 serial port support
593#
594CONFIG_SERIAL_AT91=y
595CONFIG_SERIAL_AT91_CONSOLE=y
596# CONFIG_SERIAL_AT91_TTYAT is not set
597CONFIG_SERIAL_CORE=y
598CONFIG_SERIAL_CORE_CONSOLE=y
599CONFIG_UNIX98_PTYS=y
600CONFIG_LEGACY_PTYS=y
601CONFIG_LEGACY_PTY_COUNT=256
602
603#
604# IPMI
605#
606# CONFIG_IPMI_HANDLER is not set
607
608#
609# Watchdog Cards
610#
611CONFIG_WATCHDOG=y
612CONFIG_WATCHDOG_NOWAYOUT=y
613
614#
615# Watchdog Device Drivers
616#
617# CONFIG_SOFT_WATCHDOG is not set
618CONFIG_AT91_WATCHDOG=y
619
620#
621# USB-based Watchdog Cards
622#
623# CONFIG_USBPCWATCHDOG is not set
624# CONFIG_NVRAM is not set
625CONFIG_RTC=y
626# CONFIG_AT91_RTC is not set
627# CONFIG_DTLK is not set
628# CONFIG_R3964 is not set
629
630#
631# Ftape, the floppy tape device driver
632#
633
634#
635# PCMCIA character devices
636#
637# CONFIG_SYNCLINK_CS is not set
638# CONFIG_CARDMAN_4000 is not set
639# CONFIG_CARDMAN_4040 is not set
640# CONFIG_RAW_DRIVER is not set
641
642#
643# TPM devices
644#
645# CONFIG_TCG_TPM is not set
646# CONFIG_TELCLOCK is not set
647CONFIG_AT91_SPI=y
648CONFIG_AT91_SPIDEV=y
649
650#
651# I2C support
652#
653CONFIG_I2C=y
654CONFIG_I2C_CHARDEV=y
655
656#
657# I2C Algorithms
658#
659# CONFIG_I2C_ALGOBIT is not set
660# CONFIG_I2C_ALGOPCF is not set
661# CONFIG_I2C_ALGOPCA is not set
662
663#
664# I2C Hardware Bus support
665#
666CONFIG_I2C_AT91=y
667# CONFIG_I2C_PARPORT_LIGHT is not set
668# CONFIG_I2C_STUB is not set
669# CONFIG_I2C_PCA_ISA is not set
670
671#
672# Miscellaneous I2C Chip support
673#
674# CONFIG_SENSORS_DS1337 is not set
675# CONFIG_SENSORS_DS1374 is not set
676# CONFIG_SENSORS_EEPROM is not set
677# CONFIG_SENSORS_PCF8574 is not set
678# CONFIG_SENSORS_PCA9539 is not set
679# CONFIG_SENSORS_PCF8591 is not set
680# CONFIG_SENSORS_RTC8564 is not set
681# CONFIG_SENSORS_MAX6875 is not set
682# CONFIG_RTC_X1205_I2C is not set
683# CONFIG_I2C_DEBUG_CORE is not set
684# CONFIG_I2C_DEBUG_ALGO is not set
685# CONFIG_I2C_DEBUG_BUS is not set
686# CONFIG_I2C_DEBUG_CHIP is not set
687
688#
689# Hardware Monitoring support
690#
691CONFIG_HWMON=y
692# CONFIG_HWMON_VID is not set
693# CONFIG_SENSORS_ADM1021 is not set
694# CONFIG_SENSORS_ADM1025 is not set
695# CONFIG_SENSORS_ADM1026 is not set
696# CONFIG_SENSORS_ADM1031 is not set
697# CONFIG_SENSORS_ADM9240 is not set
698# CONFIG_SENSORS_ASB100 is not set
699# CONFIG_SENSORS_ATXP1 is not set
700# CONFIG_SENSORS_DS1621 is not set
701# CONFIG_SENSORS_FSCHER is not set
702# CONFIG_SENSORS_FSCPOS is not set
703# CONFIG_SENSORS_GL518SM is not set
704# CONFIG_SENSORS_GL520SM is not set
705# CONFIG_SENSORS_IT87 is not set
706# CONFIG_SENSORS_LM63 is not set
707# CONFIG_SENSORS_LM75 is not set
708# CONFIG_SENSORS_LM77 is not set
709# CONFIG_SENSORS_LM78 is not set
710# CONFIG_SENSORS_LM80 is not set
711# CONFIG_SENSORS_LM83 is not set
712# CONFIG_SENSORS_LM85 is not set
713# CONFIG_SENSORS_LM87 is not set
714# CONFIG_SENSORS_LM90 is not set
715# CONFIG_SENSORS_LM92 is not set
716# CONFIG_SENSORS_MAX1619 is not set
717# CONFIG_SENSORS_PC87360 is not set
718# CONFIG_SENSORS_SMSC47M1 is not set
719# CONFIG_SENSORS_SMSC47B397 is not set
720# CONFIG_SENSORS_W83781D is not set
721# CONFIG_SENSORS_W83792D is not set
722# CONFIG_SENSORS_W83L785TS is not set
723# CONFIG_SENSORS_W83627HF is not set
724# CONFIG_SENSORS_W83627EHF is not set
725# CONFIG_HWMON_DEBUG_CHIP is not set
726
727#
728# Misc devices
729#
730
731#
732# Multimedia Capabilities Port drivers
733#
734
735#
736# Multimedia devices
737#
738# CONFIG_VIDEO_DEV is not set
739
740#
741# Digital Video Broadcasting Devices
742#
743# CONFIG_DVB is not set
744
745#
746# Graphics support
747#
748# CONFIG_FB is not set
749
750#
751# Console display driver support
752#
753# CONFIG_VGA_CONSOLE is not set
754CONFIG_DUMMY_CONSOLE=y
755
756#
757# Sound
758#
759# CONFIG_SOUND is not set
760
761#
762# USB support
763#
764CONFIG_USB_ARCH_HAS_HCD=y
765CONFIG_USB_ARCH_HAS_OHCI=y
766CONFIG_USB=y
767CONFIG_USB_DEBUG=y
768
769#
770# Miscellaneous USB options
771#
772CONFIG_USB_DEVICEFS=y
773# CONFIG_USB_BANDWIDTH is not set
774# CONFIG_USB_DYNAMIC_MINORS is not set
775# CONFIG_USB_OTG is not set
776
777#
778# USB Host Controller Drivers
779#
780# CONFIG_USB_ISP116X_HCD is not set
781CONFIG_USB_OHCI_HCD=y
782# CONFIG_USB_OHCI_BIG_ENDIAN is not set
783CONFIG_USB_OHCI_LITTLE_ENDIAN=y
784# CONFIG_USB_SL811_HCD is not set
785
786#
787# USB Device Class drivers
788#
789# CONFIG_USB_ACM is not set
790# CONFIG_USB_PRINTER is not set
791
792#
793# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
794#
795
796#
797# may also be needed; see USB_STORAGE Help for more information
798#
799CONFIG_USB_STORAGE=y
800# CONFIG_USB_STORAGE_DEBUG is not set
801# CONFIG_USB_STORAGE_DATAFAB is not set
802# CONFIG_USB_STORAGE_FREECOM is not set
803# CONFIG_USB_STORAGE_DPCM is not set
804# CONFIG_USB_STORAGE_USBAT is not set
805# CONFIG_USB_STORAGE_SDDR09 is not set
806# CONFIG_USB_STORAGE_SDDR55 is not set
807# CONFIG_USB_STORAGE_JUMPSHOT is not set
808
809#
810# USB Input Devices
811#
812# CONFIG_USB_HID is not set
813
814#
815# USB HID Boot Protocol drivers
816#
817# CONFIG_USB_KBD is not set
818# CONFIG_USB_MOUSE is not set
819# CONFIG_USB_AIPTEK is not set
820# CONFIG_USB_WACOM is not set
821# CONFIG_USB_ACECAD is not set
822# CONFIG_USB_KBTAB is not set
823# CONFIG_USB_POWERMATE is not set
824# CONFIG_USB_MTOUCH is not set
825# CONFIG_USB_ITMTOUCH is not set
826# CONFIG_USB_EGALAX is not set
827# CONFIG_USB_YEALINK is not set
828# CONFIG_USB_XPAD is not set
829# CONFIG_USB_ATI_REMOTE is not set
830# CONFIG_USB_KEYSPAN_REMOTE is not set
831# CONFIG_USB_APPLETOUCH is not set
832
833#
834# USB Imaging devices
835#
836# CONFIG_USB_MDC800 is not set
837# CONFIG_USB_MICROTEK is not set
838
839#
840# USB Multimedia devices
841#
842# CONFIG_USB_DABUSB is not set
843
844#
845# Video4Linux support is needed for USB Multimedia device support
846#
847
848#
849# USB Network Adapters
850#
851# CONFIG_USB_CATC is not set
852# CONFIG_USB_KAWETH is not set
853# CONFIG_USB_PEGASUS is not set
854# CONFIG_USB_RTL8150 is not set
855# CONFIG_USB_USBNET is not set
856CONFIG_USB_MON=y
857
858#
859# USB port drivers
860#
861
862#
863# USB Serial Converter support
864#
865CONFIG_USB_SERIAL=y
866CONFIG_USB_SERIAL_CONSOLE=y
867CONFIG_USB_SERIAL_GENERIC=y
868# CONFIG_USB_SERIAL_AIRPRIME is not set
869# CONFIG_USB_SERIAL_ANYDATA is not set
870# CONFIG_USB_SERIAL_BELKIN is not set
871# CONFIG_USB_SERIAL_WHITEHEAT is not set
872# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
873# CONFIG_USB_SERIAL_CP2101 is not set
874# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
875# CONFIG_USB_SERIAL_EMPEG is not set
876CONFIG_USB_SERIAL_FTDI_SIO=y
877# CONFIG_USB_SERIAL_VISOR is not set
878# CONFIG_USB_SERIAL_IPAQ is not set
879# CONFIG_USB_SERIAL_IR is not set
880# CONFIG_USB_SERIAL_EDGEPORT is not set
881# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
882# CONFIG_USB_SERIAL_GARMIN is not set
883# CONFIG_USB_SERIAL_IPW is not set
884# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
885CONFIG_USB_SERIAL_KEYSPAN=y
886CONFIG_USB_SERIAL_KEYSPAN_MPR=y
887CONFIG_USB_SERIAL_KEYSPAN_USA28=y
888CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
889CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
890CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
891CONFIG_USB_SERIAL_KEYSPAN_USA19=y
892CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
893CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
894CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
895CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
896CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
897CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
898# CONFIG_USB_SERIAL_KLSI is not set
899# CONFIG_USB_SERIAL_KOBIL_SCT is not set
900CONFIG_USB_SERIAL_MCT_U232=y
901# CONFIG_USB_SERIAL_PL2303 is not set
902# CONFIG_USB_SERIAL_HP4X is not set
903# CONFIG_USB_SERIAL_SAFE is not set
904# CONFIG_USB_SERIAL_TI is not set
905# CONFIG_USB_SERIAL_CYBERJACK is not set
906# CONFIG_USB_SERIAL_XIRCOM is not set
907# CONFIG_USB_SERIAL_OPTION is not set
908# CONFIG_USB_SERIAL_OMNINET is not set
909CONFIG_USB_EZUSB=y
910
911#
912# USB Miscellaneous drivers
913#
914# CONFIG_USB_EMI62 is not set
915# CONFIG_USB_EMI26 is not set
916# CONFIG_USB_AUERSWALD is not set
917# CONFIG_USB_RIO500 is not set
918# CONFIG_USB_LEGOTOWER is not set
919# CONFIG_USB_LCD is not set
920# CONFIG_USB_LED is not set
921# CONFIG_USB_CYTHERM is not set
922# CONFIG_USB_PHIDGETKIT is not set
923# CONFIG_USB_PHIDGETSERVO is not set
924# CONFIG_USB_IDMOUSE is not set
925# CONFIG_USB_LD is not set
926# CONFIG_USB_TEST is not set
927
928#
929# USB DSL modem support
930#
931
932#
933# USB Gadget Support
934#
935CONFIG_USB_GADGET=y
936# CONFIG_USB_GADGET_DEBUG_FILES is not set
937CONFIG_USB_GADGET_SELECTED=y
938# CONFIG_USB_GADGET_NET2280 is not set
939# CONFIG_USB_GADGET_PXA2XX is not set
940# CONFIG_USB_GADGET_GOKU is not set
941# CONFIG_USB_GADGET_LH7A40X is not set
942# CONFIG_USB_GADGET_OMAP is not set
943CONFIG_USB_GADGET_AT91=y
944CONFIG_USB_AT91=y
945# CONFIG_USB_GADGET_DUMMY_HCD is not set
946# CONFIG_USB_GADGET_DUALSPEED is not set
947# CONFIG_USB_ZERO is not set
948# CONFIG_USB_ETH is not set
949# CONFIG_USB_GADGETFS is not set
950# CONFIG_USB_FILE_STORAGE is not set
951# CONFIG_USB_G_SERIAL is not set
952
953#
954# MMC/SD Card support
955#
956CONFIG_MMC=y
957# CONFIG_MMC_DEBUG is not set
958CONFIG_MMC_BLOCK=y
959# CONFIG_MMC_WBSD is not set
960CONFIG_MMC_AT91RM9200=y
961
962#
963# File systems
964#
965CONFIG_EXT2_FS=y
966# CONFIG_EXT2_FS_XATTR is not set
967# CONFIG_EXT2_FS_XIP is not set
968# CONFIG_EXT3_FS is not set
969# CONFIG_JBD is not set
970# CONFIG_REISERFS_FS is not set
971# CONFIG_JFS_FS is not set
972# CONFIG_FS_POSIX_ACL is not set
973# CONFIG_XFS_FS is not set
974# CONFIG_MINIX_FS is not set
975# CONFIG_ROMFS_FS is not set
976CONFIG_INOTIFY=y
977# CONFIG_QUOTA is not set
978CONFIG_DNOTIFY=y
979# CONFIG_AUTOFS_FS is not set
980# CONFIG_AUTOFS4_FS is not set
981# CONFIG_FUSE_FS is not set
982
983#
984# CD-ROM/DVD Filesystems
985#
986# CONFIG_ISO9660_FS is not set
987# CONFIG_UDF_FS is not set
988
989#
990# DOS/FAT/NT Filesystems
991#
992# CONFIG_MSDOS_FS is not set
993# CONFIG_VFAT_FS is not set
994# CONFIG_NTFS_FS is not set
995
996#
997# Pseudo filesystems
998#
999CONFIG_PROC_FS=y
1000CONFIG_SYSFS=y
1001CONFIG_TMPFS=y
1002# CONFIG_HUGETLB_PAGE is not set
1003CONFIG_RAMFS=y
1004# CONFIG_RELAYFS_FS is not set
1005
1006#
1007# Miscellaneous filesystems
1008#
1009# CONFIG_ADFS_FS is not set
1010# CONFIG_AFFS_FS is not set
1011# CONFIG_HFS_FS is not set
1012# CONFIG_HFSPLUS_FS is not set
1013# CONFIG_BEFS_FS is not set
1014# CONFIG_BFS_FS is not set
1015# CONFIG_EFS_FS is not set
1016# CONFIG_JFFS_FS is not set
1017# CONFIG_JFFS2_FS is not set
1018CONFIG_CRAMFS=y
1019# CONFIG_VXFS_FS is not set
1020# CONFIG_HPFS_FS is not set
1021# CONFIG_QNX4FS_FS is not set
1022# CONFIG_SYSV_FS is not set
1023# CONFIG_UFS_FS is not set
1024
1025#
1026# Network File Systems
1027#
1028CONFIG_NFS_FS=y
1029CONFIG_NFS_V3=y
1030# CONFIG_NFS_V3_ACL is not set
1031CONFIG_NFS_V4=y
1032# CONFIG_NFS_DIRECTIO is not set
1033# CONFIG_NFSD is not set
1034CONFIG_ROOT_NFS=y
1035CONFIG_LOCKD=y
1036CONFIG_LOCKD_V4=y
1037CONFIG_NFS_COMMON=y
1038CONFIG_SUNRPC=y
1039CONFIG_SUNRPC_GSS=y
1040CONFIG_RPCSEC_GSS_KRB5=y
1041# CONFIG_RPCSEC_GSS_SPKM3 is not set
1042# CONFIG_SMB_FS is not set
1043# CONFIG_CIFS is not set
1044# CONFIG_NCP_FS is not set
1045# CONFIG_CODA_FS is not set
1046# CONFIG_AFS_FS is not set
1047# CONFIG_9P_FS is not set
1048
1049#
1050# Partition Types
1051#
1052# CONFIG_PARTITION_ADVANCED is not set
1053CONFIG_MSDOS_PARTITION=y
1054
1055#
1056# Native Language Support
1057#
1058# CONFIG_NLS is not set
1059
1060#
1061# Profiling support
1062#
1063# CONFIG_PROFILING is not set
1064
1065#
1066# Kernel hacking
1067#
1068# CONFIG_PRINTK_TIME is not set
1069CONFIG_DEBUG_KERNEL=y
1070# CONFIG_MAGIC_SYSRQ is not set
1071CONFIG_LOG_BUF_SHIFT=14
1072CONFIG_DETECT_SOFTLOCKUP=y
1073# CONFIG_SCHEDSTATS is not set
1074# CONFIG_DEBUG_SLAB is not set
1075# CONFIG_DEBUG_SPINLOCK is not set
1076# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1077# CONFIG_DEBUG_KOBJECT is not set
1078CONFIG_DEBUG_BUGVERBOSE=y
1079# CONFIG_DEBUG_INFO is not set
1080# CONFIG_DEBUG_FS is not set
1081# CONFIG_DEBUG_VM is not set
1082CONFIG_FRAME_POINTER=y
1083# CONFIG_RCU_TORTURE_TEST is not set
1084CONFIG_DEBUG_USER=y
1085# CONFIG_DEBUG_WAITQ is not set
1086# CONFIG_DEBUG_ERRORS is not set
1087CONFIG_DEBUG_LL=y
1088# CONFIG_DEBUG_ICEDCC is not set
1089
1090#
1091# Security options
1092#
1093# CONFIG_KEYS is not set
1094# CONFIG_SECURITY is not set
1095
1096#
1097# Cryptographic options
1098#
1099CONFIG_CRYPTO=y
1100# CONFIG_CRYPTO_HMAC is not set
1101# CONFIG_CRYPTO_NULL is not set
1102# CONFIG_CRYPTO_MD4 is not set
1103CONFIG_CRYPTO_MD5=y
1104# CONFIG_CRYPTO_SHA1 is not set
1105# CONFIG_CRYPTO_SHA256 is not set
1106# CONFIG_CRYPTO_SHA512 is not set
1107# CONFIG_CRYPTO_WP512 is not set
1108# CONFIG_CRYPTO_TGR192 is not set
1109CONFIG_CRYPTO_DES=y
1110# CONFIG_CRYPTO_BLOWFISH is not set
1111# CONFIG_CRYPTO_TWOFISH is not set
1112# CONFIG_CRYPTO_SERPENT is not set
1113# CONFIG_CRYPTO_AES is not set
1114# CONFIG_CRYPTO_CAST5 is not set
1115# CONFIG_CRYPTO_CAST6 is not set
1116# CONFIG_CRYPTO_TEA is not set
1117# CONFIG_CRYPTO_ARC4 is not set
1118# CONFIG_CRYPTO_KHAZAD is not set
1119# CONFIG_CRYPTO_ANUBIS is not set
1120# CONFIG_CRYPTO_DEFLATE is not set
1121# CONFIG_CRYPTO_MICHAEL_MIC is not set
1122# CONFIG_CRYPTO_CRC32C is not set
1123# CONFIG_CRYPTO_TEST is not set
1124
1125#
1126# Hardware crypto devices
1127#
1128
1129#
1130# Library routines
1131#
1132# CONFIG_CRC_CCITT is not set
1133# CONFIG_CRC16 is not set
1134CONFIG_CRC32=y
1135# CONFIG_LIBCRC32C is not set
1136CONFIG_ZLIB_INFLATE=y
diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig
new file mode 100644
index 0000000000..95a96a5462
--- /dev/null
+++ b/arch/arm/configs/csb637_defconfig
@@ -0,0 +1,1116 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15
4# Mon Jan 9 21:52:00 2006
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11
12#
13# Code maturity level options
14#
15CONFIG_EXPERIMENTAL=y
16CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19
20#
21# General setup
22#
23CONFIG_LOCALVERSION=""
24CONFIG_LOCALVERSION_AUTO=y
25# CONFIG_SWAP is not set
26CONFIG_SYSVIPC=y
27# CONFIG_POSIX_MQUEUE is not set
28# CONFIG_BSD_PROCESS_ACCT is not set
29CONFIG_SYSCTL=y
30# CONFIG_AUDIT is not set
31CONFIG_HOTPLUG=y
32CONFIG_KOBJECT_UEVENT=y
33# CONFIG_IKCONFIG is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_CC_OPTIMIZE_FOR_SIZE=y
36# CONFIG_EMBEDDED is not set
37CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_ALL is not set
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_PRINTK=y
41CONFIG_BUG=y
42CONFIG_BASE_FULL=y
43CONFIG_FUTEX=y
44CONFIG_EPOLL=y
45CONFIG_SHMEM=y
46CONFIG_CC_ALIGN_FUNCTIONS=0
47CONFIG_CC_ALIGN_LABELS=0
48CONFIG_CC_ALIGN_LOOPS=0
49CONFIG_CC_ALIGN_JUMPS=0
50# CONFIG_TINY_SHMEM is not set
51CONFIG_BASE_SMALL=0
52
53#
54# Loadable module support
55#
56CONFIG_MODULES=y
57CONFIG_MODULE_UNLOAD=y
58# CONFIG_MODULE_FORCE_UNLOAD is not set
59CONFIG_OBSOLETE_MODPARM=y
60# CONFIG_MODVERSIONS is not set
61# CONFIG_MODULE_SRCVERSION_ALL is not set
62CONFIG_KMOD=y
63
64#
65# Block layer
66#
67
68#
69# IO Schedulers
70#
71CONFIG_IOSCHED_NOOP=y
72CONFIG_IOSCHED_AS=y
73CONFIG_IOSCHED_DEADLINE=y
74CONFIG_IOSCHED_CFQ=y
75CONFIG_DEFAULT_AS=y
76# CONFIG_DEFAULT_DEADLINE is not set
77# CONFIG_DEFAULT_CFQ is not set
78# CONFIG_DEFAULT_NOOP is not set
79CONFIG_DEFAULT_IOSCHED="anticipatory"
80
81#
82# System Type
83#
84# CONFIG_ARCH_CLPS7500 is not set
85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set
92# CONFIG_ARCH_IXP4XX is not set
93# CONFIG_ARCH_IXP2000 is not set
94# CONFIG_ARCH_L7200 is not set
95# CONFIG_ARCH_PXA is not set
96# CONFIG_ARCH_RPC is not set
97# CONFIG_ARCH_SA1100 is not set
98# CONFIG_ARCH_S3C2410 is not set
99# CONFIG_ARCH_SHARK is not set
100# CONFIG_ARCH_LH7A40X is not set
101# CONFIG_ARCH_OMAP is not set
102# CONFIG_ARCH_VERSATILE is not set
103# CONFIG_ARCH_REALVIEW is not set
104# CONFIG_ARCH_IMX is not set
105# CONFIG_ARCH_H720X is not set
106# CONFIG_ARCH_AAEC2000 is not set
107CONFIG_ARCH_AT91RM9200=y
108
109#
110# AT91RM9200 Implementations
111#
112
113#
114# AT91RM9200 Board Type
115#
116# CONFIG_ARCH_AT91RM9200DK is not set
117# CONFIG_MACH_AT91RM9200EK is not set
118# CONFIG_MACH_CSB337 is not set
119CONFIG_MACH_CSB637=y
120# CONFIG_MACH_CARMEVA is not set
121# CONFIG_MACH_KB9200 is not set
122# CONFIG_MACH_ATEB9200 is not set
123
124#
125# AT91RM9200 Feature Selections
126#
127CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
128
129#
130# Processor Type
131#
132CONFIG_CPU_32=y
133CONFIG_CPU_ARM920T=y
134CONFIG_CPU_32v4=y
135CONFIG_CPU_ABRT_EV4T=y
136CONFIG_CPU_CACHE_V4WT=y
137CONFIG_CPU_CACHE_VIVT=y
138CONFIG_CPU_COPY_V4WB=y
139CONFIG_CPU_TLB_V4WBI=y
140
141#
142# Processor Features
143#
144# CONFIG_ARM_THUMB is not set
145# CONFIG_CPU_ICACHE_DISABLE is not set
146# CONFIG_CPU_DCACHE_DISABLE is not set
147# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
148
149#
150# Bus support
151#
152CONFIG_ISA_DMA_API=y
153
154#
155# PCCARD (PCMCIA/CardBus) support
156#
157CONFIG_PCCARD=y
158# CONFIG_PCMCIA_DEBUG is not set
159CONFIG_PCMCIA=y
160CONFIG_PCMCIA_LOAD_CIS=y
161CONFIG_PCMCIA_IOCTL=y
162
163#
164# PC-card bridges
165#
166CONFIG_AT91_CF=y
167
168#
169# Kernel Features
170#
171# CONFIG_PREEMPT is not set
172# CONFIG_NO_IDLE_HZ is not set
173# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
174CONFIG_SELECT_MEMORY_MODEL=y
175CONFIG_FLATMEM_MANUAL=y
176# CONFIG_DISCONTIGMEM_MANUAL is not set
177# CONFIG_SPARSEMEM_MANUAL is not set
178CONFIG_FLATMEM=y
179CONFIG_FLAT_NODE_MEM_MAP=y
180# CONFIG_SPARSEMEM_STATIC is not set
181CONFIG_SPLIT_PTLOCK_CPUS=4096
182CONFIG_LEDS=y
183CONFIG_LEDS_TIMER=y
184CONFIG_LEDS_CPU=y
185CONFIG_ALIGNMENT_TRAP=y
186
187#
188# Boot options
189#
190CONFIG_ZBOOT_ROM_TEXT=0x0
191CONFIG_ZBOOT_ROM_BSS=0x0
192CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,3145728 root=/dev/ram0 rw"
193# CONFIG_XIP_KERNEL is not set
194
195#
196# Floating point emulation
197#
198
199#
200# At least one emulation must be selected
201#
202CONFIG_FPE_NWFPE=y
203# CONFIG_FPE_NWFPE_XP is not set
204# CONFIG_FPE_FASTFPE is not set
205
206#
207# Userspace binary formats
208#
209CONFIG_BINFMT_ELF=y
210# CONFIG_BINFMT_AOUT is not set
211# CONFIG_BINFMT_MISC is not set
212# CONFIG_ARTHUR is not set
213
214#
215# Power management options
216#
217# CONFIG_PM is not set
218
219#
220# Networking
221#
222CONFIG_NET=y
223
224#
225# Networking options
226#
227CONFIG_PACKET=y
228# CONFIG_PACKET_MMAP is not set
229CONFIG_UNIX=y
230# CONFIG_NET_KEY is not set
231CONFIG_INET=y
232# CONFIG_IP_MULTICAST is not set
233# CONFIG_IP_ADVANCED_ROUTER is not set
234CONFIG_IP_FIB_HASH=y
235CONFIG_IP_PNP=y
236CONFIG_IP_PNP_DHCP=y
237CONFIG_IP_PNP_BOOTP=y
238# CONFIG_IP_PNP_RARP is not set
239# CONFIG_NET_IPIP is not set
240# CONFIG_NET_IPGRE is not set
241# CONFIG_ARPD is not set
242# CONFIG_SYN_COOKIES is not set
243# CONFIG_INET_AH is not set
244# CONFIG_INET_ESP is not set
245# CONFIG_INET_IPCOMP is not set
246# CONFIG_INET_TUNNEL is not set
247CONFIG_INET_DIAG=y
248CONFIG_INET_TCP_DIAG=y
249# CONFIG_TCP_CONG_ADVANCED is not set
250CONFIG_TCP_CONG_BIC=y
251# CONFIG_IPV6 is not set
252# CONFIG_NETFILTER is not set
253
254#
255# DCCP Configuration (EXPERIMENTAL)
256#
257# CONFIG_IP_DCCP is not set
258
259#
260# SCTP Configuration (EXPERIMENTAL)
261#
262# CONFIG_IP_SCTP is not set
263# CONFIG_ATM is not set
264# CONFIG_BRIDGE is not set
265# CONFIG_VLAN_8021Q is not set
266# CONFIG_DECNET is not set
267# CONFIG_LLC2 is not set
268# CONFIG_IPX is not set
269# CONFIG_ATALK is not set
270# CONFIG_X25 is not set
271# CONFIG_LAPB is not set
272# CONFIG_NET_DIVERT is not set
273# CONFIG_ECONET is not set
274# CONFIG_WAN_ROUTER is not set
275
276#
277# QoS and/or fair queueing
278#
279# CONFIG_NET_SCHED is not set
280
281#
282# Network testing
283#
284# CONFIG_NET_PKTGEN is not set
285# CONFIG_HAMRADIO is not set
286# CONFIG_IRDA is not set
287# CONFIG_BT is not set
288# CONFIG_IEEE80211 is not set
289
290#
291# Device Drivers
292#
293
294#
295# Generic Driver Options
296#
297CONFIG_STANDALONE=y
298CONFIG_PREVENT_FIRMWARE_BUILD=y
299CONFIG_FW_LOADER=y
300# CONFIG_DEBUG_DRIVER is not set
301
302#
303# Connector - unified userspace <-> kernelspace linker
304#
305# CONFIG_CONNECTOR is not set
306
307#
308# Memory Technology Devices (MTD)
309#
310CONFIG_MTD=y
311# CONFIG_MTD_DEBUG is not set
312# CONFIG_MTD_CONCAT is not set
313CONFIG_MTD_PARTITIONS=y
314# CONFIG_MTD_REDBOOT_PARTS is not set
315CONFIG_MTD_CMDLINE_PARTS=y
316# CONFIG_MTD_AFS_PARTS is not set
317
318#
319# User Modules And Translation Layers
320#
321CONFIG_MTD_CHAR=y
322CONFIG_MTD_BLOCK=y
323# CONFIG_FTL is not set
324# CONFIG_NFTL is not set
325# CONFIG_INFTL is not set
326# CONFIG_RFD_FTL is not set
327
328#
329# RAM/ROM/Flash chip drivers
330#
331CONFIG_MTD_CFI=y
332# CONFIG_MTD_JEDECPROBE is not set
333CONFIG_MTD_GEN_PROBE=y
334# CONFIG_MTD_CFI_ADV_OPTIONS is not set
335CONFIG_MTD_MAP_BANK_WIDTH_1=y
336CONFIG_MTD_MAP_BANK_WIDTH_2=y
337CONFIG_MTD_MAP_BANK_WIDTH_4=y
338# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
339# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
340# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
341CONFIG_MTD_CFI_I1=y
342CONFIG_MTD_CFI_I2=y
343# CONFIG_MTD_CFI_I4 is not set
344# CONFIG_MTD_CFI_I8 is not set
345CONFIG_MTD_CFI_INTELEXT=y
346# CONFIG_MTD_CFI_AMDSTD is not set
347# CONFIG_MTD_CFI_STAA is not set
348CONFIG_MTD_CFI_UTIL=y
349# CONFIG_MTD_RAM is not set
350# CONFIG_MTD_ROM is not set
351# CONFIG_MTD_ABSENT is not set
352# CONFIG_MTD_XIP is not set
353
354#
355# Mapping drivers for chip access
356#
357# CONFIG_MTD_COMPLEX_MAPPINGS is not set
358# CONFIG_MTD_PHYSMAP is not set
359# CONFIG_MTD_ARM_INTEGRATOR is not set
360# CONFIG_MTD_PLATRAM is not set
361CONFIG_MTD_CSB637=y
362
363#
364# Self-contained MTD device drivers
365#
366# CONFIG_MTD_SLRAM is not set
367# CONFIG_MTD_PHRAM is not set
368# CONFIG_MTD_MTDRAM is not set
369# CONFIG_MTD_BLKMTD is not set
370# CONFIG_MTD_BLOCK2MTD is not set
371
372#
373# Disk-On-Chip Device Drivers
374#
375# CONFIG_MTD_DOC2000 is not set
376# CONFIG_MTD_DOC2001 is not set
377# CONFIG_MTD_DOC2001PLUS is not set
378# CONFIG_MTD_AT91_DATAFLASH is not set
379
380#
381# NAND Flash Device Drivers
382#
383# CONFIG_MTD_NAND is not set
384
385#
386# OneNAND Flash Device Drivers
387#
388# CONFIG_MTD_ONENAND is not set
389
390#
391# Parallel port support
392#
393# CONFIG_PARPORT is not set
394
395#
396# Plug and Play support
397#
398
399#
400# Block devices
401#
402# CONFIG_BLK_DEV_COW_COMMON is not set
403CONFIG_BLK_DEV_LOOP=y
404# CONFIG_BLK_DEV_CRYPTOLOOP is not set
405# CONFIG_BLK_DEV_NBD is not set
406# CONFIG_BLK_DEV_UB is not set
407CONFIG_BLK_DEV_RAM=y
408CONFIG_BLK_DEV_RAM_COUNT=16
409CONFIG_BLK_DEV_RAM_SIZE=8192
410CONFIG_BLK_DEV_INITRD=y
411# CONFIG_CDROM_PKTCDVD is not set
412# CONFIG_ATA_OVER_ETH is not set
413
414#
415# ATA/ATAPI/MFM/RLL support
416#
417# CONFIG_IDE is not set
418
419#
420# SCSI device support
421#
422# CONFIG_RAID_ATTRS is not set
423CONFIG_SCSI=y
424CONFIG_SCSI_PROC_FS=y
425
426#
427# SCSI support type (disk, tape, CD-ROM)
428#
429# CONFIG_BLK_DEV_SD is not set
430# CONFIG_CHR_DEV_ST is not set
431# CONFIG_CHR_DEV_OSST is not set
432# CONFIG_BLK_DEV_SR is not set
433# CONFIG_CHR_DEV_SG is not set
434# CONFIG_CHR_DEV_SCH is not set
435
436#
437# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
438#
439# CONFIG_SCSI_MULTI_LUN is not set
440# CONFIG_SCSI_CONSTANTS is not set
441# CONFIG_SCSI_LOGGING is not set
442
443#
444# SCSI Transport Attributes
445#
446# CONFIG_SCSI_SPI_ATTRS is not set
447# CONFIG_SCSI_FC_ATTRS is not set
448# CONFIG_SCSI_ISCSI_ATTRS is not set
449# CONFIG_SCSI_SAS_ATTRS is not set
450
451#
452# SCSI low-level drivers
453#
454# CONFIG_ISCSI_TCP is not set
455# CONFIG_SCSI_SATA is not set
456# CONFIG_SCSI_DEBUG is not set
457
458#
459# PCMCIA SCSI adapter support
460#
461# CONFIG_PCMCIA_AHA152X is not set
462# CONFIG_PCMCIA_FDOMAIN is not set
463# CONFIG_PCMCIA_NINJA_SCSI is not set
464# CONFIG_PCMCIA_QLOGIC is not set
465# CONFIG_PCMCIA_SYM53C500 is not set
466
467#
468# Multi-device support (RAID and LVM)
469#
470# CONFIG_MD is not set
471
472#
473# Fusion MPT device support
474#
475# CONFIG_FUSION is not set
476
477#
478# IEEE 1394 (FireWire) support
479#
480
481#
482# I2O device support
483#
484
485#
486# Network device support
487#
488CONFIG_NETDEVICES=y
489# CONFIG_DUMMY is not set
490# CONFIG_BONDING is not set
491# CONFIG_EQUALIZER is not set
492# CONFIG_TUN is not set
493
494#
495# PHY device support
496#
497# CONFIG_PHYLIB is not set
498
499#
500# Ethernet (10 or 100Mbit)
501#
502CONFIG_NET_ETHERNET=y
503CONFIG_MII=y
504CONFIG_ARM_AT91_ETHER=y
505# CONFIG_SMC91X is not set
506# CONFIG_DM9000 is not set
507
508#
509# Ethernet (1000 Mbit)
510#
511
512#
513# Ethernet (10000 Mbit)
514#
515
516#
517# Token Ring devices
518#
519
520#
521# Wireless LAN (non-hamradio)
522#
523# CONFIG_NET_RADIO is not set
524
525#
526# PCMCIA network device support
527#
528# CONFIG_NET_PCMCIA is not set
529
530#
531# Wan interfaces
532#
533# CONFIG_WAN is not set
534# CONFIG_PPP is not set
535# CONFIG_SLIP is not set
536# CONFIG_SHAPER is not set
537# CONFIG_NETCONSOLE is not set
538# CONFIG_NETPOLL is not set
539# CONFIG_NET_POLL_CONTROLLER is not set
540
541#
542# ISDN subsystem
543#
544# CONFIG_ISDN is not set
545
546#
547# Input device support
548#
549CONFIG_INPUT=y
550
551#
552# Userland interfaces
553#
554CONFIG_INPUT_MOUSEDEV=y
555CONFIG_INPUT_MOUSEDEV_PSAUX=y
556CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
557CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
558# CONFIG_INPUT_JOYDEV is not set
559# CONFIG_INPUT_TSDEV is not set
560# CONFIG_INPUT_EVDEV is not set
561# CONFIG_INPUT_EVBUG is not set
562
563#
564# Input Device Drivers
565#
566# CONFIG_INPUT_KEYBOARD is not set
567# CONFIG_INPUT_MOUSE is not set
568# CONFIG_INPUT_JOYSTICK is not set
569# CONFIG_INPUT_TOUCHSCREEN is not set
570# CONFIG_INPUT_MISC is not set
571
572#
573# Hardware I/O ports
574#
575# CONFIG_SERIO is not set
576# CONFIG_GAMEPORT is not set
577
578#
579# Character devices
580#
581CONFIG_VT=y
582CONFIG_VT_CONSOLE=y
583CONFIG_HW_CONSOLE=y
584# CONFIG_SERIAL_NONSTANDARD is not set
585
586#
587# Serial drivers
588#
589# CONFIG_SERIAL_8250 is not set
590
591#
592# Non-8250 serial port support
593#
594CONFIG_SERIAL_AT91=y
595CONFIG_SERIAL_AT91_CONSOLE=y
596# CONFIG_SERIAL_AT91_TTYAT is not set
597CONFIG_SERIAL_CORE=y
598CONFIG_SERIAL_CORE_CONSOLE=y
599CONFIG_UNIX98_PTYS=y
600CONFIG_LEGACY_PTYS=y
601CONFIG_LEGACY_PTY_COUNT=256
602
603#
604# IPMI
605#
606# CONFIG_IPMI_HANDLER is not set
607
608#
609# Watchdog Cards
610#
611CONFIG_WATCHDOG=y
612CONFIG_WATCHDOG_NOWAYOUT=y
613
614#
615# Watchdog Device Drivers
616#
617# CONFIG_SOFT_WATCHDOG is not set
618CONFIG_AT91_WATCHDOG=y
619
620#
621# USB-based Watchdog Cards
622#
623# CONFIG_USBPCWATCHDOG is not set
624# CONFIG_NVRAM is not set
625CONFIG_RTC=y
626# CONFIG_AT91_RTC is not set
627# CONFIG_DTLK is not set
628# CONFIG_R3964 is not set
629
630#
631# Ftape, the floppy tape device driver
632#
633
634#
635# PCMCIA character devices
636#
637# CONFIG_SYNCLINK_CS is not set
638# CONFIG_CARDMAN_4000 is not set
639# CONFIG_CARDMAN_4040 is not set
640# CONFIG_RAW_DRIVER is not set
641
642#
643# TPM devices
644#
645# CONFIG_TCG_TPM is not set
646# CONFIG_TELCLOCK is not set
647CONFIG_AT91_SPI=y
648CONFIG_AT91_SPIDEV=y
649
650#
651# I2C support
652#
653CONFIG_I2C=y
654CONFIG_I2C_CHARDEV=y
655
656#
657# I2C Algorithms
658#
659# CONFIG_I2C_ALGOBIT is not set
660# CONFIG_I2C_ALGOPCF is not set
661# CONFIG_I2C_ALGOPCA is not set
662
663#
664# I2C Hardware Bus support
665#
666CONFIG_I2C_AT91=y
667# CONFIG_I2C_PARPORT_LIGHT is not set
668# CONFIG_I2C_STUB is not set
669# CONFIG_I2C_PCA_ISA is not set
670
671#
672# Miscellaneous I2C Chip support
673#
674# CONFIG_SENSORS_DS1337 is not set
675# CONFIG_SENSORS_DS1374 is not set
676# CONFIG_SENSORS_EEPROM is not set
677# CONFIG_SENSORS_PCF8574 is not set
678# CONFIG_SENSORS_PCA9539 is not set
679# CONFIG_SENSORS_PCF8591 is not set
680# CONFIG_SENSORS_RTC8564 is not set
681# CONFIG_SENSORS_MAX6875 is not set
682# CONFIG_RTC_X1205_I2C is not set
683# CONFIG_I2C_DEBUG_CORE is not set
684# CONFIG_I2C_DEBUG_ALGO is not set
685# CONFIG_I2C_DEBUG_BUS is not set
686# CONFIG_I2C_DEBUG_CHIP is not set
687
688#
689# Hardware Monitoring support
690#
691CONFIG_HWMON=y
692# CONFIG_HWMON_VID is not set
693# CONFIG_SENSORS_ADM1021 is not set
694# CONFIG_SENSORS_ADM1025 is not set
695# CONFIG_SENSORS_ADM1026 is not set
696# CONFIG_SENSORS_ADM1031 is not set
697# CONFIG_SENSORS_ADM9240 is not set
698# CONFIG_SENSORS_ASB100 is not set
699# CONFIG_SENSORS_ATXP1 is not set
700# CONFIG_SENSORS_DS1621 is not set
701# CONFIG_SENSORS_FSCHER is not set
702# CONFIG_SENSORS_FSCPOS is not set
703# CONFIG_SENSORS_GL518SM is not set
704# CONFIG_SENSORS_GL520SM is not set
705# CONFIG_SENSORS_IT87 is not set
706# CONFIG_SENSORS_LM63 is not set
707# CONFIG_SENSORS_LM75 is not set
708# CONFIG_SENSORS_LM77 is not set
709# CONFIG_SENSORS_LM78 is not set
710# CONFIG_SENSORS_LM80 is not set
711# CONFIG_SENSORS_LM83 is not set
712# CONFIG_SENSORS_LM85 is not set
713# CONFIG_SENSORS_LM87 is not set
714# CONFIG_SENSORS_LM90 is not set
715# CONFIG_SENSORS_LM92 is not set
716# CONFIG_SENSORS_MAX1619 is not set
717# CONFIG_SENSORS_PC87360 is not set
718# CONFIG_SENSORS_SMSC47M1 is not set
719# CONFIG_SENSORS_SMSC47B397 is not set
720# CONFIG_SENSORS_W83781D is not set
721# CONFIG_SENSORS_W83792D is not set
722# CONFIG_SENSORS_W83L785TS is not set
723# CONFIG_SENSORS_W83627HF is not set
724# CONFIG_SENSORS_W83627EHF is not set
725# CONFIG_HWMON_DEBUG_CHIP is not set
726
727#
728# Misc devices
729#
730
731#
732# Multimedia Capabilities Port drivers
733#
734
735#
736# Multimedia devices
737#
738# CONFIG_VIDEO_DEV is not set
739
740#
741# Digital Video Broadcasting Devices
742#
743# CONFIG_DVB is not set
744
745#
746# Graphics support
747#
748# CONFIG_FB is not set
749
750#
751# Console display driver support
752#
753# CONFIG_VGA_CONSOLE is not set
754CONFIG_DUMMY_CONSOLE=y
755
756#
757# Sound
758#
759# CONFIG_SOUND is not set
760
761#
762# USB support
763#
764CONFIG_USB_ARCH_HAS_HCD=y
765CONFIG_USB_ARCH_HAS_OHCI=y
766CONFIG_USB=y
767CONFIG_USB_DEBUG=y
768
769#
770# Miscellaneous USB options
771#
772CONFIG_USB_DEVICEFS=y
773# CONFIG_USB_BANDWIDTH is not set
774# CONFIG_USB_DYNAMIC_MINORS is not set
775# CONFIG_USB_OTG is not set
776
777#
778# USB Host Controller Drivers
779#
780# CONFIG_USB_ISP116X_HCD is not set
781CONFIG_USB_OHCI_HCD=y
782# CONFIG_USB_OHCI_BIG_ENDIAN is not set
783CONFIG_USB_OHCI_LITTLE_ENDIAN=y
784# CONFIG_USB_SL811_HCD is not set
785
786#
787# USB Device Class drivers
788#
789# CONFIG_USB_ACM is not set
790# CONFIG_USB_PRINTER is not set
791
792#
793# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
794#
795
796#
797# may also be needed; see USB_STORAGE Help for more information
798#
799CONFIG_USB_STORAGE=y
800# CONFIG_USB_STORAGE_DEBUG is not set
801# CONFIG_USB_STORAGE_DATAFAB is not set
802# CONFIG_USB_STORAGE_FREECOM is not set
803# CONFIG_USB_STORAGE_DPCM is not set
804# CONFIG_USB_STORAGE_USBAT is not set
805# CONFIG_USB_STORAGE_SDDR09 is not set
806# CONFIG_USB_STORAGE_SDDR55 is not set
807# CONFIG_USB_STORAGE_JUMPSHOT is not set
808
809#
810# USB Input Devices
811#
812# CONFIG_USB_HID is not set
813
814#
815# USB HID Boot Protocol drivers
816#
817# CONFIG_USB_KBD is not set
818# CONFIG_USB_MOUSE is not set
819# CONFIG_USB_AIPTEK is not set
820# CONFIG_USB_WACOM is not set
821# CONFIG_USB_ACECAD is not set
822# CONFIG_USB_KBTAB is not set
823# CONFIG_USB_POWERMATE is not set
824# CONFIG_USB_MTOUCH is not set
825# CONFIG_USB_ITMTOUCH is not set
826# CONFIG_USB_EGALAX is not set
827# CONFIG_USB_YEALINK is not set
828# CONFIG_USB_XPAD is not set
829# CONFIG_USB_ATI_REMOTE is not set
830# CONFIG_USB_KEYSPAN_REMOTE is not set
831# CONFIG_USB_APPLETOUCH is not set
832
833#
834# USB Imaging devices
835#
836# CONFIG_USB_MDC800 is not set
837# CONFIG_USB_MICROTEK is not set
838
839#
840# USB Multimedia devices
841#
842# CONFIG_USB_DABUSB is not set
843
844#
845# Video4Linux support is needed for USB Multimedia device support
846#
847
848#
849# USB Network Adapters
850#
851# CONFIG_USB_CATC is not set
852# CONFIG_USB_KAWETH is not set
853# CONFIG_USB_PEGASUS is not set
854# CONFIG_USB_RTL8150 is not set
855# CONFIG_USB_USBNET is not set
856CONFIG_USB_MON=y
857
858#
859# USB port drivers
860#
861
862#
863# USB Serial Converter support
864#
865CONFIG_USB_SERIAL=y
866CONFIG_USB_SERIAL_CONSOLE=y
867CONFIG_USB_SERIAL_GENERIC=y
868# CONFIG_USB_SERIAL_AIRPRIME is not set
869# CONFIG_USB_SERIAL_ANYDATA is not set
870# CONFIG_USB_SERIAL_BELKIN is not set
871# CONFIG_USB_SERIAL_WHITEHEAT is not set
872# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
873# CONFIG_USB_SERIAL_CP2101 is not set
874# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
875# CONFIG_USB_SERIAL_EMPEG is not set
876CONFIG_USB_SERIAL_FTDI_SIO=y
877# CONFIG_USB_SERIAL_VISOR is not set
878# CONFIG_USB_SERIAL_IPAQ is not set
879# CONFIG_USB_SERIAL_IR is not set
880# CONFIG_USB_SERIAL_EDGEPORT is not set
881# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
882# CONFIG_USB_SERIAL_GARMIN is not set
883# CONFIG_USB_SERIAL_IPW is not set
884# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
885CONFIG_USB_SERIAL_KEYSPAN=y
886CONFIG_USB_SERIAL_KEYSPAN_MPR=y
887CONFIG_USB_SERIAL_KEYSPAN_USA28=y
888CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
889CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
890CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
891CONFIG_USB_SERIAL_KEYSPAN_USA19=y
892CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
893CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
894CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
895CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
896CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
897CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
898# CONFIG_USB_SERIAL_KLSI is not set
899# CONFIG_USB_SERIAL_KOBIL_SCT is not set
900CONFIG_USB_SERIAL_MCT_U232=y
901# CONFIG_USB_SERIAL_PL2303 is not set
902# CONFIG_USB_SERIAL_HP4X is not set
903# CONFIG_USB_SERIAL_SAFE is not set
904# CONFIG_USB_SERIAL_TI is not set
905# CONFIG_USB_SERIAL_CYBERJACK is not set
906# CONFIG_USB_SERIAL_XIRCOM is not set
907# CONFIG_USB_SERIAL_OPTION is not set
908# CONFIG_USB_SERIAL_OMNINET is not set
909CONFIG_USB_EZUSB=y
910
911#
912# USB Miscellaneous drivers
913#
914# CONFIG_USB_EMI62 is not set
915# CONFIG_USB_EMI26 is not set
916# CONFIG_USB_AUERSWALD is not set
917# CONFIG_USB_RIO500 is not set
918# CONFIG_USB_LEGOTOWER is not set
919# CONFIG_USB_LCD is not set
920# CONFIG_USB_LED is not set
921# CONFIG_USB_CYTHERM is not set
922# CONFIG_USB_PHIDGETKIT is not set
923# CONFIG_USB_PHIDGETSERVO is not set
924# CONFIG_USB_IDMOUSE is not set
925# CONFIG_USB_LD is not set
926# CONFIG_USB_TEST is not set
927
928#
929# USB DSL modem support
930#
931
932#
933# USB Gadget Support
934#
935# CONFIG_USB_GADGET is not set
936
937#
938# MMC/SD Card support
939#
940# CONFIG_MMC is not set
941
942#
943# File systems
944#
945CONFIG_EXT2_FS=y
946# CONFIG_EXT2_FS_XATTR is not set
947# CONFIG_EXT2_FS_XIP is not set
948# CONFIG_EXT3_FS is not set
949# CONFIG_JBD is not set
950# CONFIG_REISERFS_FS is not set
951# CONFIG_JFS_FS is not set
952# CONFIG_FS_POSIX_ACL is not set
953# CONFIG_XFS_FS is not set
954# CONFIG_MINIX_FS is not set
955# CONFIG_ROMFS_FS is not set
956CONFIG_INOTIFY=y
957# CONFIG_QUOTA is not set
958CONFIG_DNOTIFY=y
959# CONFIG_AUTOFS_FS is not set
960# CONFIG_AUTOFS4_FS is not set
961# CONFIG_FUSE_FS is not set
962
963#
964# CD-ROM/DVD Filesystems
965#
966# CONFIG_ISO9660_FS is not set
967# CONFIG_UDF_FS is not set
968
969#
970# DOS/FAT/NT Filesystems
971#
972# CONFIG_MSDOS_FS is not set
973# CONFIG_VFAT_FS is not set
974# CONFIG_NTFS_FS is not set
975
976#
977# Pseudo filesystems
978#
979CONFIG_PROC_FS=y
980CONFIG_SYSFS=y
981CONFIG_TMPFS=y
982# CONFIG_HUGETLB_PAGE is not set
983CONFIG_RAMFS=y
984# CONFIG_RELAYFS_FS is not set
985
986#
987# Miscellaneous filesystems
988#
989# CONFIG_ADFS_FS is not set
990# CONFIG_AFFS_FS is not set
991# CONFIG_HFS_FS is not set
992# CONFIG_HFSPLUS_FS is not set
993# CONFIG_BEFS_FS is not set
994# CONFIG_BFS_FS is not set
995# CONFIG_EFS_FS is not set
996# CONFIG_JFFS_FS is not set
997# CONFIG_JFFS2_FS is not set
998CONFIG_CRAMFS=y
999# CONFIG_VXFS_FS is not set
1000# CONFIG_HPFS_FS is not set
1001# CONFIG_QNX4FS_FS is not set
1002# CONFIG_SYSV_FS is not set
1003# CONFIG_UFS_FS is not set
1004
1005#
1006# Network File Systems
1007#
1008CONFIG_NFS_FS=y
1009CONFIG_NFS_V3=y
1010# CONFIG_NFS_V3_ACL is not set
1011CONFIG_NFS_V4=y
1012# CONFIG_NFS_DIRECTIO is not set
1013# CONFIG_NFSD is not set
1014CONFIG_ROOT_NFS=y
1015CONFIG_LOCKD=y
1016CONFIG_LOCKD_V4=y
1017CONFIG_NFS_COMMON=y
1018CONFIG_SUNRPC=y
1019CONFIG_SUNRPC_GSS=y
1020CONFIG_RPCSEC_GSS_KRB5=y
1021# CONFIG_RPCSEC_GSS_SPKM3 is not set
1022# CONFIG_SMB_FS is not set
1023# CONFIG_CIFS is not set
1024# CONFIG_NCP_FS is not set
1025# CONFIG_CODA_FS is not set
1026# CONFIG_AFS_FS is not set
1027# CONFIG_9P_FS is not set
1028
1029#
1030# Partition Types
1031#
1032# CONFIG_PARTITION_ADVANCED is not set
1033CONFIG_MSDOS_PARTITION=y
1034
1035#
1036# Native Language Support
1037#
1038# CONFIG_NLS is not set
1039
1040#
1041# Profiling support
1042#
1043# CONFIG_PROFILING is not set
1044
1045#
1046# Kernel hacking
1047#
1048# CONFIG_PRINTK_TIME is not set
1049CONFIG_DEBUG_KERNEL=y
1050# CONFIG_MAGIC_SYSRQ is not set
1051CONFIG_LOG_BUF_SHIFT=14
1052CONFIG_DETECT_SOFTLOCKUP=y
1053# CONFIG_SCHEDSTATS is not set
1054# CONFIG_DEBUG_SLAB is not set
1055# CONFIG_DEBUG_SPINLOCK is not set
1056# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1057# CONFIG_DEBUG_KOBJECT is not set
1058CONFIG_DEBUG_BUGVERBOSE=y
1059# CONFIG_DEBUG_INFO is not set
1060# CONFIG_DEBUG_FS is not set
1061# CONFIG_DEBUG_VM is not set
1062CONFIG_FRAME_POINTER=y
1063# CONFIG_RCU_TORTURE_TEST is not set
1064CONFIG_DEBUG_USER=y
1065# CONFIG_DEBUG_WAITQ is not set
1066# CONFIG_DEBUG_ERRORS is not set
1067CONFIG_DEBUG_LL=y
1068# CONFIG_DEBUG_ICEDCC is not set
1069
1070#
1071# Security options
1072#
1073# CONFIG_KEYS is not set
1074# CONFIG_SECURITY is not set
1075
1076#
1077# Cryptographic options
1078#
1079CONFIG_CRYPTO=y
1080# CONFIG_CRYPTO_HMAC is not set
1081# CONFIG_CRYPTO_NULL is not set
1082# CONFIG_CRYPTO_MD4 is not set
1083CONFIG_CRYPTO_MD5=y
1084# CONFIG_CRYPTO_SHA1 is not set
1085# CONFIG_CRYPTO_SHA256 is not set
1086# CONFIG_CRYPTO_SHA512 is not set
1087# CONFIG_CRYPTO_WP512 is not set
1088# CONFIG_CRYPTO_TGR192 is not set
1089CONFIG_CRYPTO_DES=y
1090# CONFIG_CRYPTO_BLOWFISH is not set
1091# CONFIG_CRYPTO_TWOFISH is not set
1092# CONFIG_CRYPTO_SERPENT is not set
1093# CONFIG_CRYPTO_AES is not set
1094# CONFIG_CRYPTO_CAST5 is not set
1095# CONFIG_CRYPTO_CAST6 is not set
1096# CONFIG_CRYPTO_TEA is not set
1097# CONFIG_CRYPTO_ARC4 is not set
1098# CONFIG_CRYPTO_KHAZAD is not set
1099# CONFIG_CRYPTO_ANUBIS is not set
1100# CONFIG_CRYPTO_DEFLATE is not set
1101# CONFIG_CRYPTO_MICHAEL_MIC is not set
1102# CONFIG_CRYPTO_CRC32C is not set
1103# CONFIG_CRYPTO_TEST is not set
1104
1105#
1106# Hardware crypto devices
1107#
1108
1109#
1110# Library routines
1111#
1112# CONFIG_CRC_CCITT is not set
1113# CONFIG_CRC16 is not set
1114CONFIG_CRC32=y
1115# CONFIG_LIBCRC32C is not set
1116CONFIG_ZLIB_INFLATE=y
diff --git a/arch/arm/configs/ebsa110_defconfig b/arch/arm/configs/ebsa110_defconfig
index 6f61929b97..afcfff6140 100644
--- a/arch/arm/configs/ebsa110_defconfig
+++ b/arch/arm/configs/ebsa110_defconfig
@@ -63,7 +63,6 @@ CONFIG_KMOD=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65CONFIG_ARCH_EBSA110=y 65CONFIG_ARCH_EBSA110=y
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/edb7211_defconfig b/arch/arm/configs/edb7211_defconfig
index 78b08ed4d5..6ba7355ff8 100644
--- a/arch/arm/configs/edb7211_defconfig
+++ b/arch/arm/configs/edb7211_defconfig
@@ -57,7 +57,6 @@ CONFIG_BASE_SMALL=0
57CONFIG_ARCH_CLPS711X=y 57CONFIG_ARCH_CLPS711X=y
58# CONFIG_ARCH_CO285 is not set 58# CONFIG_ARCH_CO285 is not set
59# CONFIG_ARCH_EBSA110 is not set 59# CONFIG_ARCH_EBSA110 is not set
60# CONFIG_ARCH_CAMELOT is not set
61# CONFIG_ARCH_FOOTBRIDGE is not set 60# CONFIG_ARCH_FOOTBRIDGE is not set
62# CONFIG_ARCH_INTEGRATOR is not set 61# CONFIG_ARCH_INTEGRATOR is not set
63# CONFIG_ARCH_IOP3XX is not set 62# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/enp2611_defconfig b/arch/arm/configs/enp2611_defconfig
index fd7c0042bc..9592e3925c 100644
--- a/arch/arm/configs/enp2611_defconfig
+++ b/arch/arm/configs/enp2611_defconfig
@@ -86,7 +86,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
86# CONFIG_ARCH_CLPS711X is not set 86# CONFIG_ARCH_CLPS711X is not set
87# CONFIG_ARCH_CO285 is not set 87# CONFIG_ARCH_CO285 is not set
88# CONFIG_ARCH_EBSA110 is not set 88# CONFIG_ARCH_EBSA110 is not set
89# CONFIG_ARCH_CAMELOT is not set
90# CONFIG_ARCH_FOOTBRIDGE is not set 89# CONFIG_ARCH_FOOTBRIDGE is not set
91# CONFIG_ARCH_INTEGRATOR is not set 90# CONFIG_ARCH_INTEGRATOR is not set
92# CONFIG_ARCH_IOP3XX is not set 91# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/ep80219_defconfig b/arch/arm/configs/ep80219_defconfig
index 96342afa9c..fbe312e757 100644
--- a/arch/arm/configs/ep80219_defconfig
+++ b/arch/arm/configs/ep80219_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70CONFIG_ARCH_IOP3XX=y 69CONFIG_ARCH_IOP3XX=y
diff --git a/arch/arm/configs/epxa10db_defconfig b/arch/arm/configs/epxa10db_defconfig
deleted file mode 100644
index 9fb8b58c49..0000000000
--- a/arch/arm/configs/epxa10db_defconfig
+++ /dev/null
@@ -1,644 +0,0 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2
4# Sun Mar 27 22:46:51 2005
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12
13#
14# Code maturity level options
15#
16CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y
19
20#
21# General setup
22#
23CONFIG_LOCALVERSION=""
24CONFIG_SWAP=y
25CONFIG_SYSVIPC=y
26# CONFIG_POSIX_MQUEUE is not set
27# CONFIG_BSD_PROCESS_ACCT is not set
28CONFIG_SYSCTL=y
29# CONFIG_AUDIT is not set
30# CONFIG_HOTPLUG is not set
31CONFIG_KOBJECT_UEVENT=y
32# CONFIG_IKCONFIG is not set
33# CONFIG_EMBEDDED is not set
34CONFIG_KALLSYMS=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set
36CONFIG_BASE_FULL=y
37CONFIG_FUTEX=y
38CONFIG_EPOLL=y
39CONFIG_CC_OPTIMIZE_FOR_SIZE=y
40CONFIG_SHMEM=y
41CONFIG_CC_ALIGN_FUNCTIONS=0
42CONFIG_CC_ALIGN_LABELS=0
43CONFIG_CC_ALIGN_LOOPS=0
44CONFIG_CC_ALIGN_JUMPS=0
45# CONFIG_TINY_SHMEM is not set
46CONFIG_BASE_SMALL=0
47
48#
49# Loadable module support
50#
51CONFIG_MODULES=y
52CONFIG_MODULE_UNLOAD=y
53# CONFIG_MODULE_FORCE_UNLOAD is not set
54CONFIG_OBSOLETE_MODPARM=y
55# CONFIG_MODVERSIONS is not set
56# CONFIG_MODULE_SRCVERSION_ALL is not set
57# CONFIG_KMOD is not set
58
59#
60# System Type
61#
62# CONFIG_ARCH_CLPS7500 is not set
63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set
66CONFIG_ARCH_CAMELOT=y
67# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set
70# CONFIG_ARCH_IXP4XX is not set
71# CONFIG_ARCH_IXP2000 is not set
72# CONFIG_ARCH_L7200 is not set
73# CONFIG_ARCH_PXA is not set
74# CONFIG_ARCH_RPC is not set
75# CONFIG_ARCH_SA1100 is not set
76# CONFIG_ARCH_S3C2410 is not set
77# CONFIG_ARCH_SHARK is not set
78# CONFIG_ARCH_LH7A40X is not set
79# CONFIG_ARCH_OMAP is not set
80# CONFIG_ARCH_VERSATILE is not set
81# CONFIG_ARCH_IMX is not set
82# CONFIG_ARCH_H720X is not set
83
84#
85# Epxa10db
86#
87
88#
89# PLD hotswap support
90#
91CONFIG_PLD=y
92# CONFIG_PLD_HOTSWAP is not set
93
94#
95# Processor Type
96#
97CONFIG_CPU_32=y
98CONFIG_CPU_ARM922T=y
99CONFIG_CPU_32v4=y
100CONFIG_CPU_ABRT_EV4T=y
101CONFIG_CPU_CACHE_V4WT=y
102CONFIG_CPU_CACHE_VIVT=y
103CONFIG_CPU_COPY_V4WB=y
104CONFIG_CPU_TLB_V4WBI=y
105
106#
107# Processor Features
108#
109# CONFIG_ARM_THUMB is not set
110# CONFIG_CPU_ICACHE_DISABLE is not set
111# CONFIG_CPU_DCACHE_DISABLE is not set
112# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
113
114#
115# Bus support
116#
117
118#
119# PCCARD (PCMCIA/CardBus) support
120#
121# CONFIG_PCCARD is not set
122
123#
124# Kernel Features
125#
126# CONFIG_PREEMPT is not set
127CONFIG_ALIGNMENT_TRAP=y
128
129#
130# Boot options
131#
132CONFIG_ZBOOT_ROM_TEXT=0x0
133CONFIG_ZBOOT_ROM_BSS=0x0
134CONFIG_CMDLINE="mem=32M console=ttyUA0,115200 initrd=0x00200000,8M root=/dev/ram0 rw"
135# CONFIG_XIP_KERNEL is not set
136
137#
138# Floating point emulation
139#
140
141#
142# At least one emulation must be selected
143#
144CONFIG_FPE_NWFPE=y
145# CONFIG_FPE_NWFPE_XP is not set
146# CONFIG_FPE_FASTFPE is not set
147
148#
149# Userspace binary formats
150#
151CONFIG_BINFMT_ELF=y
152# CONFIG_BINFMT_AOUT is not set
153# CONFIG_BINFMT_MISC is not set
154# CONFIG_ARTHUR is not set
155
156#
157# Power management options
158#
159# CONFIG_PM is not set
160
161#
162# Device Drivers
163#
164
165#
166# Generic Driver Options
167#
168CONFIG_STANDALONE=y
169CONFIG_PREVENT_FIRMWARE_BUILD=y
170# CONFIG_FW_LOADER is not set
171
172#
173# Memory Technology Devices (MTD)
174#
175# CONFIG_MTD is not set
176
177#
178# Parallel port support
179#
180# CONFIG_PARPORT is not set
181
182#
183# Plug and Play support
184#
185
186#
187# Block devices
188#
189# CONFIG_BLK_DEV_FD is not set
190# CONFIG_BLK_DEV_COW_COMMON is not set
191CONFIG_BLK_DEV_LOOP=y
192# CONFIG_BLK_DEV_CRYPTOLOOP is not set
193# CONFIG_BLK_DEV_NBD is not set
194CONFIG_BLK_DEV_RAM=y
195CONFIG_BLK_DEV_RAM_COUNT=16
196CONFIG_BLK_DEV_RAM_SIZE=8192
197CONFIG_BLK_DEV_INITRD=y
198CONFIG_INITRAMFS_SOURCE=""
199# CONFIG_CDROM_PKTCDVD is not set
200
201#
202# IO Schedulers
203#
204CONFIG_IOSCHED_NOOP=y
205CONFIG_IOSCHED_AS=y
206CONFIG_IOSCHED_DEADLINE=y
207CONFIG_IOSCHED_CFQ=y
208# CONFIG_ATA_OVER_ETH is not set
209
210#
211# SCSI device support
212#
213# CONFIG_SCSI is not set
214
215#
216# Multi-device support (RAID and LVM)
217#
218# CONFIG_MD is not set
219
220#
221# Fusion MPT device support
222#
223
224#
225# IEEE 1394 (FireWire) support
226#
227
228#
229# I2O device support
230#
231
232#
233# Networking support
234#
235CONFIG_NET=y
236
237#
238# Networking options
239#
240CONFIG_PACKET=y
241# CONFIG_PACKET_MMAP is not set
242# CONFIG_NETLINK_DEV is not set
243CONFIG_UNIX=y
244# CONFIG_NET_KEY is not set
245CONFIG_INET=y
246CONFIG_IP_MULTICAST=y
247# CONFIG_IP_ADVANCED_ROUTER is not set
248CONFIG_IP_PNP=y
249# CONFIG_IP_PNP_DHCP is not set
250# CONFIG_IP_PNP_BOOTP is not set
251# CONFIG_IP_PNP_RARP is not set
252# CONFIG_NET_IPIP is not set
253# CONFIG_NET_IPGRE is not set
254# CONFIG_IP_MROUTE is not set
255# CONFIG_ARPD is not set
256# CONFIG_SYN_COOKIES is not set
257# CONFIG_INET_AH is not set
258# CONFIG_INET_ESP is not set
259# CONFIG_INET_IPCOMP is not set
260# CONFIG_INET_TUNNEL is not set
261# CONFIG_IP_TCPDIAG is not set
262# CONFIG_IP_TCPDIAG_IPV6 is not set
263# CONFIG_IPV6 is not set
264# CONFIG_NETFILTER is not set
265
266#
267# SCTP Configuration (EXPERIMENTAL)
268#
269# CONFIG_IP_SCTP is not set
270# CONFIG_ATM is not set
271# CONFIG_BRIDGE is not set
272# CONFIG_VLAN_8021Q is not set
273# CONFIG_DECNET is not set
274# CONFIG_LLC2 is not set
275# CONFIG_IPX is not set
276# CONFIG_ATALK is not set
277# CONFIG_X25 is not set
278# CONFIG_LAPB is not set
279# CONFIG_NET_DIVERT is not set
280# CONFIG_ECONET is not set
281# CONFIG_WAN_ROUTER is not set
282
283#
284# QoS and/or fair queueing
285#
286# CONFIG_NET_SCHED is not set
287# CONFIG_NET_CLS_ROUTE is not set
288
289#
290# Network testing
291#
292# CONFIG_NET_PKTGEN is not set
293# CONFIG_NETPOLL is not set
294# CONFIG_NET_POLL_CONTROLLER is not set
295# CONFIG_HAMRADIO is not set
296# CONFIG_IRDA is not set
297# CONFIG_BT is not set
298CONFIG_NETDEVICES=y
299# CONFIG_DUMMY is not set
300# CONFIG_BONDING is not set
301# CONFIG_EQUALIZER is not set
302# CONFIG_TUN is not set
303
304#
305# Ethernet (10 or 100Mbit)
306#
307# CONFIG_NET_ETHERNET is not set
308
309#
310# Ethernet (1000 Mbit)
311#
312
313#
314# Ethernet (10000 Mbit)
315#
316
317#
318# Token Ring devices
319#
320
321#
322# Wireless LAN (non-hamradio)
323#
324# CONFIG_NET_RADIO is not set
325
326#
327# Wan interfaces
328#
329# CONFIG_WAN is not set
330CONFIG_PPP=y
331CONFIG_PPP_MULTILINK=y
332# CONFIG_PPP_FILTER is not set
333CONFIG_PPP_ASYNC=y
334CONFIG_PPP_SYNC_TTY=y
335CONFIG_PPP_DEFLATE=y
336# CONFIG_PPP_BSDCOMP is not set
337# CONFIG_PPPOE is not set
338# CONFIG_SLIP is not set
339# CONFIG_SHAPER is not set
340# CONFIG_NETCONSOLE is not set
341
342#
343# ISDN subsystem
344#
345# CONFIG_ISDN is not set
346
347#
348# Input device support
349#
350CONFIG_INPUT=y
351
352#
353# Userland interfaces
354#
355CONFIG_INPUT_MOUSEDEV=y
356CONFIG_INPUT_MOUSEDEV_PSAUX=y
357CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
358CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
359# CONFIG_INPUT_JOYDEV is not set
360# CONFIG_INPUT_TSDEV is not set
361# CONFIG_INPUT_EVDEV is not set
362# CONFIG_INPUT_EVBUG is not set
363
364#
365# Input Device Drivers
366#
367# CONFIG_INPUT_KEYBOARD is not set
368# CONFIG_INPUT_MOUSE is not set
369# CONFIG_INPUT_JOYSTICK is not set
370# CONFIG_INPUT_TOUCHSCREEN is not set
371# CONFIG_INPUT_MISC is not set
372
373#
374# Hardware I/O ports
375#
376CONFIG_SERIO=y
377CONFIG_SERIO_SERPORT=y
378# CONFIG_SERIO_RAW is not set
379# CONFIG_GAMEPORT is not set
380CONFIG_SOUND_GAMEPORT=y
381
382#
383# Character devices
384#
385CONFIG_VT=y
386CONFIG_VT_CONSOLE=y
387CONFIG_HW_CONSOLE=y
388# CONFIG_SERIAL_NONSTANDARD is not set
389
390#
391# Serial drivers
392#
393# CONFIG_SERIAL_8250 is not set
394
395#
396# Non-8250 serial port support
397#
398CONFIG_SERIAL_UART00=y
399CONFIG_SERIAL_UART00_CONSOLE=y
400CONFIG_SERIAL_CORE=y
401CONFIG_SERIAL_CORE_CONSOLE=y
402CONFIG_UNIX98_PTYS=y
403CONFIG_LEGACY_PTYS=y
404CONFIG_LEGACY_PTY_COUNT=256
405
406#
407# IPMI
408#
409# CONFIG_IPMI_HANDLER is not set
410
411#
412# Watchdog Cards
413#
414# CONFIG_WATCHDOG is not set
415# CONFIG_NVRAM is not set
416# CONFIG_RTC is not set
417# CONFIG_DTLK is not set
418# CONFIG_R3964 is not set
419
420#
421# Ftape, the floppy tape device driver
422#
423# CONFIG_DRM is not set
424# CONFIG_RAW_DRIVER is not set
425
426#
427# TPM devices
428#
429# CONFIG_TCG_TPM is not set
430
431#
432# I2C support
433#
434# CONFIG_I2C is not set
435
436#
437# Misc devices
438#
439
440#
441# Multimedia devices
442#
443# CONFIG_VIDEO_DEV is not set
444
445#
446# Digital Video Broadcasting Devices
447#
448# CONFIG_DVB is not set
449
450#
451# Graphics support
452#
453# CONFIG_FB is not set
454
455#
456# Console display driver support
457#
458# CONFIG_VGA_CONSOLE is not set
459CONFIG_DUMMY_CONSOLE=y
460
461#
462# Sound
463#
464# CONFIG_SOUND is not set
465
466#
467# USB support
468#
469CONFIG_USB_ARCH_HAS_HCD=y
470# CONFIG_USB_ARCH_HAS_OHCI is not set
471# CONFIG_USB is not set
472
473#
474# USB Gadget Support
475#
476# CONFIG_USB_GADGET is not set
477
478#
479# MMC/SD Card support
480#
481# CONFIG_MMC is not set
482
483#
484# File systems
485#
486CONFIG_EXT2_FS=y
487# CONFIG_EXT2_FS_XATTR is not set
488# CONFIG_EXT3_FS is not set
489# CONFIG_JBD is not set
490# CONFIG_REISERFS_FS is not set
491# CONFIG_JFS_FS is not set
492
493#
494# XFS support
495#
496# CONFIG_XFS_FS is not set
497# CONFIG_MINIX_FS is not set
498# CONFIG_ROMFS_FS is not set
499# CONFIG_QUOTA is not set
500CONFIG_DNOTIFY=y
501CONFIG_AUTOFS_FS=y
502CONFIG_AUTOFS4_FS=y
503
504#
505# CD-ROM/DVD Filesystems
506#
507# CONFIG_ISO9660_FS is not set
508# CONFIG_UDF_FS is not set
509
510#
511# DOS/FAT/NT Filesystems
512#
513# CONFIG_MSDOS_FS is not set
514# CONFIG_VFAT_FS is not set
515# CONFIG_NTFS_FS is not set
516
517#
518# Pseudo filesystems
519#
520CONFIG_PROC_FS=y
521CONFIG_SYSFS=y
522# CONFIG_DEVFS_FS is not set
523# CONFIG_DEVPTS_FS_XATTR is not set
524# CONFIG_TMPFS is not set
525# CONFIG_HUGETLB_PAGE is not set
526CONFIG_RAMFS=y
527
528#
529# Miscellaneous filesystems
530#
531# CONFIG_ADFS_FS is not set
532# CONFIG_AFFS_FS is not set
533# CONFIG_HFS_FS is not set
534# CONFIG_HFSPLUS_FS is not set
535# CONFIG_BEFS_FS is not set
536# CONFIG_BFS_FS is not set
537# CONFIG_EFS_FS is not set
538# CONFIG_CRAMFS is not set
539# CONFIG_VXFS_FS is not set
540# CONFIG_HPFS_FS is not set
541# CONFIG_QNX4FS_FS is not set
542# CONFIG_SYSV_FS is not set
543# CONFIG_UFS_FS is not set
544
545#
546# Network File Systems
547#
548# CONFIG_NFS_FS is not set
549# CONFIG_NFSD is not set
550CONFIG_SMB_FS=y
551# CONFIG_SMB_NLS_DEFAULT is not set
552# CONFIG_CIFS is not set
553# CONFIG_NCP_FS is not set
554# CONFIG_CODA_FS is not set
555# CONFIG_AFS_FS is not set
556
557#
558# Partition Types
559#
560# CONFIG_PARTITION_ADVANCED is not set
561CONFIG_MSDOS_PARTITION=y
562
563#
564# Native Language Support
565#
566CONFIG_NLS=y
567CONFIG_NLS_DEFAULT="iso8859-1"
568# CONFIG_NLS_CODEPAGE_437 is not set
569# CONFIG_NLS_CODEPAGE_737 is not set
570# CONFIG_NLS_CODEPAGE_775 is not set
571# CONFIG_NLS_CODEPAGE_850 is not set
572# CONFIG_NLS_CODEPAGE_852 is not set
573# CONFIG_NLS_CODEPAGE_855 is not set
574# CONFIG_NLS_CODEPAGE_857 is not set
575# CONFIG_NLS_CODEPAGE_860 is not set
576# CONFIG_NLS_CODEPAGE_861 is not set
577# CONFIG_NLS_CODEPAGE_862 is not set
578# CONFIG_NLS_CODEPAGE_863 is not set
579# CONFIG_NLS_CODEPAGE_864 is not set
580# CONFIG_NLS_CODEPAGE_865 is not set
581# CONFIG_NLS_CODEPAGE_866 is not set
582# CONFIG_NLS_CODEPAGE_869 is not set
583# CONFIG_NLS_CODEPAGE_936 is not set
584# CONFIG_NLS_CODEPAGE_950 is not set
585# CONFIG_NLS_CODEPAGE_932 is not set
586# CONFIG_NLS_CODEPAGE_949 is not set
587# CONFIG_NLS_CODEPAGE_874 is not set
588# CONFIG_NLS_ISO8859_8 is not set
589# CONFIG_NLS_CODEPAGE_1250 is not set
590# CONFIG_NLS_CODEPAGE_1251 is not set
591# CONFIG_NLS_ASCII is not set
592# CONFIG_NLS_ISO8859_1 is not set
593# CONFIG_NLS_ISO8859_2 is not set
594# CONFIG_NLS_ISO8859_3 is not set
595# CONFIG_NLS_ISO8859_4 is not set
596# CONFIG_NLS_ISO8859_5 is not set
597# CONFIG_NLS_ISO8859_6 is not set
598# CONFIG_NLS_ISO8859_7 is not set
599# CONFIG_NLS_ISO8859_9 is not set
600# CONFIG_NLS_ISO8859_13 is not set
601# CONFIG_NLS_ISO8859_14 is not set
602# CONFIG_NLS_ISO8859_15 is not set
603# CONFIG_NLS_KOI8_R is not set
604# CONFIG_NLS_KOI8_U is not set
605# CONFIG_NLS_UTF8 is not set
606
607#
608# Profiling support
609#
610# CONFIG_PROFILING is not set
611
612#
613# Kernel hacking
614#
615# CONFIG_PRINTK_TIME is not set
616# CONFIG_DEBUG_KERNEL is not set
617CONFIG_LOG_BUF_SHIFT=14
618CONFIG_DEBUG_BUGVERBOSE=y
619CONFIG_FRAME_POINTER=y
620# CONFIG_DEBUG_USER is not set
621
622#
623# Security options
624#
625# CONFIG_KEYS is not set
626# CONFIG_SECURITY is not set
627
628#
629# Cryptographic options
630#
631# CONFIG_CRYPTO is not set
632
633#
634# Hardware crypto devices
635#
636
637#
638# Library routines
639#
640CONFIG_CRC_CCITT=y
641CONFIG_CRC32=y
642# CONFIG_LIBCRC32C is not set
643CONFIG_ZLIB_INFLATE=y
644CONFIG_ZLIB_DEFLATE=y
diff --git a/arch/arm/configs/footbridge_defconfig b/arch/arm/configs/footbridge_defconfig
index 9737c48507..2a612d2312 100644
--- a/arch/arm/configs/footbridge_defconfig
+++ b/arch/arm/configs/footbridge_defconfig
@@ -63,7 +63,6 @@ CONFIG_KMOD=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67CONFIG_ARCH_FOOTBRIDGE=y 66CONFIG_ARCH_FOOTBRIDGE=y
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/fortunet_defconfig b/arch/arm/configs/fortunet_defconfig
index b6f688d850..65dc73a88c 100644
--- a/arch/arm/configs/fortunet_defconfig
+++ b/arch/arm/configs/fortunet_defconfig
@@ -57,7 +57,6 @@ CONFIG_BASE_SMALL=0
57CONFIG_ARCH_CLPS711X=y 57CONFIG_ARCH_CLPS711X=y
58# CONFIG_ARCH_CO285 is not set 58# CONFIG_ARCH_CO285 is not set
59# CONFIG_ARCH_EBSA110 is not set 59# CONFIG_ARCH_EBSA110 is not set
60# CONFIG_ARCH_CAMELOT is not set
61# CONFIG_ARCH_FOOTBRIDGE is not set 60# CONFIG_ARCH_FOOTBRIDGE is not set
62# CONFIG_ARCH_INTEGRATOR is not set 61# CONFIG_ARCH_INTEGRATOR is not set
63# CONFIG_ARCH_IOP3XX is not set 62# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/h3600_defconfig b/arch/arm/configs/h3600_defconfig
index b9de07de80..7a0da0b7fa 100644
--- a/arch/arm/configs/h3600_defconfig
+++ b/arch/arm/configs/h3600_defconfig
@@ -65,7 +65,6 @@ CONFIG_OBSOLETE_MODPARM=y
65# CONFIG_ARCH_CLPS711X is not set 65# CONFIG_ARCH_CLPS711X is not set
66# CONFIG_ARCH_CO285 is not set 66# CONFIG_ARCH_CO285 is not set
67# CONFIG_ARCH_EBSA110 is not set 67# CONFIG_ARCH_EBSA110 is not set
68# CONFIG_ARCH_CAMELOT is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set 68# CONFIG_ARCH_FOOTBRIDGE is not set
70# CONFIG_ARCH_INTEGRATOR is not set 69# CONFIG_ARCH_INTEGRATOR is not set
71# CONFIG_ARCH_IOP3XX is not set 70# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/h7201_defconfig b/arch/arm/configs/h7201_defconfig
index 39c13a3545..116920aece 100644
--- a/arch/arm/configs/h7201_defconfig
+++ b/arch/arm/configs/h7201_defconfig
@@ -60,7 +60,6 @@ CONFIG_KMOD=y
60# CONFIG_ARCH_CLPS711X is not set 60# CONFIG_ARCH_CLPS711X is not set
61# CONFIG_ARCH_CO285 is not set 61# CONFIG_ARCH_CO285 is not set
62# CONFIG_ARCH_EBSA110 is not set 62# CONFIG_ARCH_EBSA110 is not set
63# CONFIG_ARCH_CAMELOT is not set
64# CONFIG_ARCH_FOOTBRIDGE is not set 63# CONFIG_ARCH_FOOTBRIDGE is not set
65# CONFIG_ARCH_INTEGRATOR is not set 64# CONFIG_ARCH_INTEGRATOR is not set
66# CONFIG_ARCH_IOP3XX is not set 65# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/h7202_defconfig b/arch/arm/configs/h7202_defconfig
index fbf5c244c6..9d62ed16bf 100644
--- a/arch/arm/configs/h7202_defconfig
+++ b/arch/arm/configs/h7202_defconfig
@@ -63,7 +63,6 @@ CONFIG_KMOD=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/hackkit_defconfig b/arch/arm/configs/hackkit_defconfig
index fb41a36a5a..a45b57582b 100644
--- a/arch/arm/configs/hackkit_defconfig
+++ b/arch/arm/configs/hackkit_defconfig
@@ -66,7 +66,6 @@ CONFIG_KMOD=y
66# CONFIG_ARCH_CLPS711X is not set 66# CONFIG_ARCH_CLPS711X is not set
67# CONFIG_ARCH_CO285 is not set 67# CONFIG_ARCH_CO285 is not set
68# CONFIG_ARCH_EBSA110 is not set 68# CONFIG_ARCH_EBSA110 is not set
69# CONFIG_ARCH_CAMELOT is not set
70# CONFIG_ARCH_FOOTBRIDGE is not set 69# CONFIG_ARCH_FOOTBRIDGE is not set
71# CONFIG_ARCH_INTEGRATOR is not set 70# CONFIG_ARCH_INTEGRATOR is not set
72# CONFIG_ARCH_IOP3XX is not set 71# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/integrator_defconfig b/arch/arm/configs/integrator_defconfig
index 27ee768252..d1ba7fdde8 100644
--- a/arch/arm/configs/integrator_defconfig
+++ b/arch/arm/configs/integrator_defconfig
@@ -65,7 +65,6 @@ CONFIG_KMOD=y
65# CONFIG_ARCH_CLPS711X is not set 65# CONFIG_ARCH_CLPS711X is not set
66# CONFIG_ARCH_CO285 is not set 66# CONFIG_ARCH_CO285 is not set
67# CONFIG_ARCH_EBSA110 is not set 67# CONFIG_ARCH_EBSA110 is not set
68# CONFIG_ARCH_CAMELOT is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set 68# CONFIG_ARCH_FOOTBRIDGE is not set
70CONFIG_ARCH_INTEGRATOR=y 69CONFIG_ARCH_INTEGRATOR=y
71# CONFIG_ARCH_IOP3XX is not set 70# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/iq31244_defconfig b/arch/arm/configs/iq31244_defconfig
index e71443b973..c07628ceaf 100644
--- a/arch/arm/configs/iq31244_defconfig
+++ b/arch/arm/configs/iq31244_defconfig
@@ -65,7 +65,6 @@ CONFIG_KMOD=y
65# CONFIG_ARCH_CLPS711X is not set 65# CONFIG_ARCH_CLPS711X is not set
66# CONFIG_ARCH_CO285 is not set 66# CONFIG_ARCH_CO285 is not set
67# CONFIG_ARCH_EBSA110 is not set 67# CONFIG_ARCH_EBSA110 is not set
68# CONFIG_ARCH_CAMELOT is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set 68# CONFIG_ARCH_FOOTBRIDGE is not set
70# CONFIG_ARCH_INTEGRATOR is not set 69# CONFIG_ARCH_INTEGRATOR is not set
71CONFIG_ARCH_IOP3XX=y 70CONFIG_ARCH_IOP3XX=y
diff --git a/arch/arm/configs/iq80321_defconfig b/arch/arm/configs/iq80321_defconfig
index ab5ad23b27..18fa1615fd 100644
--- a/arch/arm/configs/iq80321_defconfig
+++ b/arch/arm/configs/iq80321_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70CONFIG_ARCH_IOP3XX=y 69CONFIG_ARCH_IOP3XX=y
diff --git a/arch/arm/configs/iq80331_defconfig b/arch/arm/configs/iq80331_defconfig
index bb536133ef..f50035de1f 100644
--- a/arch/arm/configs/iq80331_defconfig
+++ b/arch/arm/configs/iq80331_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70CONFIG_ARCH_IOP3XX=y 69CONFIG_ARCH_IOP3XX=y
diff --git a/arch/arm/configs/iq80332_defconfig b/arch/arm/configs/iq80332_defconfig
index 305f01f3a7..18b3f372ed 100644
--- a/arch/arm/configs/iq80332_defconfig
+++ b/arch/arm/configs/iq80332_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70CONFIG_ARCH_IOP3XX=y 69CONFIG_ARCH_IOP3XX=y
diff --git a/arch/arm/configs/ixdp2400_defconfig b/arch/arm/configs/ixdp2400_defconfig
index e6a4d2656f..d9d6bb86a6 100644
--- a/arch/arm/configs/ixdp2400_defconfig
+++ b/arch/arm/configs/ixdp2400_defconfig
@@ -86,7 +86,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
86# CONFIG_ARCH_CLPS711X is not set 86# CONFIG_ARCH_CLPS711X is not set
87# CONFIG_ARCH_CO285 is not set 87# CONFIG_ARCH_CO285 is not set
88# CONFIG_ARCH_EBSA110 is not set 88# CONFIG_ARCH_EBSA110 is not set
89# CONFIG_ARCH_CAMELOT is not set
90# CONFIG_ARCH_FOOTBRIDGE is not set 89# CONFIG_ARCH_FOOTBRIDGE is not set
91# CONFIG_ARCH_INTEGRATOR is not set 90# CONFIG_ARCH_INTEGRATOR is not set
92# CONFIG_ARCH_IOP3XX is not set 91# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/ixdp2401_defconfig b/arch/arm/configs/ixdp2401_defconfig
index 5572cf95d5..2dc9d499c7 100644
--- a/arch/arm/configs/ixdp2401_defconfig
+++ b/arch/arm/configs/ixdp2401_defconfig
@@ -86,7 +86,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
86# CONFIG_ARCH_CLPS711X is not set 86# CONFIG_ARCH_CLPS711X is not set
87# CONFIG_ARCH_CO285 is not set 87# CONFIG_ARCH_CO285 is not set
88# CONFIG_ARCH_EBSA110 is not set 88# CONFIG_ARCH_EBSA110 is not set
89# CONFIG_ARCH_CAMELOT is not set
90# CONFIG_ARCH_FOOTBRIDGE is not set 89# CONFIG_ARCH_FOOTBRIDGE is not set
91# CONFIG_ARCH_INTEGRATOR is not set 90# CONFIG_ARCH_INTEGRATOR is not set
92# CONFIG_ARCH_IOP3XX is not set 91# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/ixdp2800_defconfig b/arch/arm/configs/ixdp2800_defconfig
index 0fddbde858..4248123815 100644
--- a/arch/arm/configs/ixdp2800_defconfig
+++ b/arch/arm/configs/ixdp2800_defconfig
@@ -86,7 +86,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
86# CONFIG_ARCH_CLPS711X is not set 86# CONFIG_ARCH_CLPS711X is not set
87# CONFIG_ARCH_CO285 is not set 87# CONFIG_ARCH_CO285 is not set
88# CONFIG_ARCH_EBSA110 is not set 88# CONFIG_ARCH_EBSA110 is not set
89# CONFIG_ARCH_CAMELOT is not set
90# CONFIG_ARCH_FOOTBRIDGE is not set 89# CONFIG_ARCH_FOOTBRIDGE is not set
91# CONFIG_ARCH_INTEGRATOR is not set 90# CONFIG_ARCH_INTEGRATOR is not set
92# CONFIG_ARCH_IOP3XX is not set 91# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/ixdp2801_defconfig b/arch/arm/configs/ixdp2801_defconfig
index 89b9aa06aa..ea8f4b478f 100644
--- a/arch/arm/configs/ixdp2801_defconfig
+++ b/arch/arm/configs/ixdp2801_defconfig
@@ -86,7 +86,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
86# CONFIG_ARCH_CLPS711X is not set 86# CONFIG_ARCH_CLPS711X is not set
87# CONFIG_ARCH_CO285 is not set 87# CONFIG_ARCH_CO285 is not set
88# CONFIG_ARCH_EBSA110 is not set 88# CONFIG_ARCH_EBSA110 is not set
89# CONFIG_ARCH_CAMELOT is not set
90# CONFIG_ARCH_FOOTBRIDGE is not set 89# CONFIG_ARCH_FOOTBRIDGE is not set
91# CONFIG_ARCH_INTEGRATOR is not set 90# CONFIG_ARCH_INTEGRATOR is not set
92# CONFIG_ARCH_IOP3XX is not set 91# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig
index f74c926beb..4975b914f9 100644
--- a/arch/arm/configs/ixp4xx_defconfig
+++ b/arch/arm/configs/ixp4xx_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.14-rc1-git5 3# Linux kernel version: 2.6.15
4# Tue Sep 20 17:26:28 2005 4# Tue Jan 3 03:20:40 2006
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
@@ -33,6 +33,7 @@ CONFIG_SYSCTL=y
33CONFIG_KOBJECT_UEVENT=y 33CONFIG_KOBJECT_UEVENT=y
34# CONFIG_IKCONFIG is not set 34# CONFIG_IKCONFIG is not set
35CONFIG_INITRAMFS_SOURCE="" 35CONFIG_INITRAMFS_SOURCE=""
36CONFIG_CC_OPTIMIZE_FOR_SIZE=y
36CONFIG_EMBEDDED=y 37CONFIG_EMBEDDED=y
37CONFIG_KALLSYMS=y 38CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_ALL is not set 39# CONFIG_KALLSYMS_ALL is not set
@@ -42,7 +43,6 @@ CONFIG_BUG=y
42CONFIG_BASE_FULL=y 43CONFIG_BASE_FULL=y
43CONFIG_FUTEX=y 44CONFIG_FUTEX=y
44CONFIG_EPOLL=y 45CONFIG_EPOLL=y
45CONFIG_CC_OPTIMIZE_FOR_SIZE=y
46CONFIG_SHMEM=y 46CONFIG_SHMEM=y
47CONFIG_CC_ALIGN_FUNCTIONS=0 47CONFIG_CC_ALIGN_FUNCTIONS=0
48CONFIG_CC_ALIGN_LABELS=0 48CONFIG_CC_ALIGN_LABELS=0
@@ -62,13 +62,29 @@ CONFIG_MODVERSIONS=y
62CONFIG_KMOD=y 62CONFIG_KMOD=y
63 63
64# 64#
65# Block layer
66#
67
68#
69# IO Schedulers
70#
71CONFIG_IOSCHED_NOOP=y
72CONFIG_IOSCHED_AS=y
73CONFIG_IOSCHED_DEADLINE=y
74CONFIG_IOSCHED_CFQ=y
75CONFIG_DEFAULT_AS=y
76# CONFIG_DEFAULT_DEADLINE is not set
77# CONFIG_DEFAULT_CFQ is not set
78# CONFIG_DEFAULT_NOOP is not set
79CONFIG_DEFAULT_IOSCHED="anticipatory"
80
81#
65# System Type 82# System Type
66# 83#
67# CONFIG_ARCH_CLPS7500 is not set 84# CONFIG_ARCH_CLPS7500 is not set
68# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
69# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
70# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
71# CONFIG_ARCH_CAMELOT is not set
72# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
73# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
74# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
@@ -83,6 +99,7 @@ CONFIG_ARCH_IXP4XX=y
83# CONFIG_ARCH_LH7A40X is not set 99# CONFIG_ARCH_LH7A40X is not set
84# CONFIG_ARCH_OMAP is not set 100# CONFIG_ARCH_OMAP is not set
85# CONFIG_ARCH_VERSATILE is not set 101# CONFIG_ARCH_VERSATILE is not set
102# CONFIG_ARCH_REALVIEW is not set
86# CONFIG_ARCH_IMX is not set 103# CONFIG_ARCH_IMX is not set
87# CONFIG_ARCH_H720X is not set 104# CONFIG_ARCH_H720X is not set
88# CONFIG_ARCH_AAEC2000 is not set 105# CONFIG_ARCH_AAEC2000 is not set
@@ -102,6 +119,7 @@ CONFIG_MACH_IXDPG425=y
102CONFIG_MACH_IXDP465=y 119CONFIG_MACH_IXDP465=y
103CONFIG_ARCH_IXCDP1100=y 120CONFIG_ARCH_IXCDP1100=y
104CONFIG_ARCH_PRPMC1100=y 121CONFIG_ARCH_PRPMC1100=y
122CONFIG_MACH_NAS100D=y
105CONFIG_ARCH_IXDP4XX=y 123CONFIG_ARCH_IXDP4XX=y
106CONFIG_CPU_IXP46X=y 124CONFIG_CPU_IXP46X=y
107# CONFIG_MACH_GTWX5715 is not set 125# CONFIG_MACH_GTWX5715 is not set
@@ -155,6 +173,7 @@ CONFIG_FLATMEM_MANUAL=y
155CONFIG_FLATMEM=y 173CONFIG_FLATMEM=y
156CONFIG_FLAT_NODE_MEM_MAP=y 174CONFIG_FLAT_NODE_MEM_MAP=y
157# CONFIG_SPARSEMEM_STATIC is not set 175# CONFIG_SPARSEMEM_STATIC is not set
176CONFIG_SPLIT_PTLOCK_CPUS=4096
158CONFIG_ALIGNMENT_TRAP=y 177CONFIG_ALIGNMENT_TRAP=y
159 178
160# 179#
@@ -173,6 +192,7 @@ CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp root=/dev/nfs"
173# At least one emulation must be selected 192# At least one emulation must be selected
174# 193#
175CONFIG_FPE_NWFPE=y 194CONFIG_FPE_NWFPE=y
195# CONFIG_FPE_NWFPE_XP is not set
176# CONFIG_FPE_FASTFPE is not set 196# CONFIG_FPE_FASTFPE is not set
177 197
178# 198#
@@ -187,6 +207,8 @@ CONFIG_BINFMT_ELF=y
187# Power management options 207# Power management options
188# 208#
189CONFIG_PM=y 209CONFIG_PM=y
210CONFIG_PM_LEGACY=y
211# CONFIG_PM_DEBUG is not set
190CONFIG_APM=y 212CONFIG_APM=y
191 213
192# 214#
@@ -271,6 +293,10 @@ CONFIG_IP_VS_SH=m
271CONFIG_NETFILTER=y 293CONFIG_NETFILTER=y
272# CONFIG_NETFILTER_DEBUG is not set 294# CONFIG_NETFILTER_DEBUG is not set
273CONFIG_BRIDGE_NETFILTER=y 295CONFIG_BRIDGE_NETFILTER=y
296
297#
298# Core Netfilter Configuration
299#
274# CONFIG_NETFILTER_NETLINK is not set 300# CONFIG_NETFILTER_NETLINK is not set
275 301
276# 302#
@@ -286,6 +312,7 @@ CONFIG_IP_NF_IRC=m
286# CONFIG_IP_NF_NETBIOS_NS is not set 312# CONFIG_IP_NF_NETBIOS_NS is not set
287# CONFIG_IP_NF_TFTP is not set 313# CONFIG_IP_NF_TFTP is not set
288# CONFIG_IP_NF_AMANDA is not set 314# CONFIG_IP_NF_AMANDA is not set
315# CONFIG_IP_NF_PPTP is not set
289CONFIG_IP_NF_QUEUE=m 316CONFIG_IP_NF_QUEUE=m
290CONFIG_IP_NF_IPTABLES=m 317CONFIG_IP_NF_IPTABLES=m
291CONFIG_IP_NF_MATCH_LIMIT=m 318CONFIG_IP_NF_MATCH_LIMIT=m
@@ -319,6 +346,7 @@ CONFIG_IP_NF_TARGET_REJECT=m
319CONFIG_IP_NF_TARGET_LOG=m 346CONFIG_IP_NF_TARGET_LOG=m
320CONFIG_IP_NF_TARGET_ULOG=m 347CONFIG_IP_NF_TARGET_ULOG=m
321CONFIG_IP_NF_TARGET_TCPMSS=m 348CONFIG_IP_NF_TARGET_TCPMSS=m
349# CONFIG_IP_NF_TARGET_NFQUEUE is not set
322CONFIG_IP_NF_NAT=m 350CONFIG_IP_NF_NAT=m
323CONFIG_IP_NF_NAT_NEEDED=y 351CONFIG_IP_NF_NAT_NEEDED=y
324CONFIG_IP_NF_TARGET_MASQUERADE=m 352CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -380,10 +408,18 @@ CONFIG_ECONET=m
380CONFIG_ECONET_AUNUDP=y 408CONFIG_ECONET_AUNUDP=y
381CONFIG_ECONET_NATIVE=y 409CONFIG_ECONET_NATIVE=y
382CONFIG_WAN_ROUTER=m 410CONFIG_WAN_ROUTER=m
411
412#
413# QoS and/or fair queueing
414#
383CONFIG_NET_SCHED=y 415CONFIG_NET_SCHED=y
384CONFIG_NET_SCH_CLK_JIFFIES=y 416CONFIG_NET_SCH_CLK_JIFFIES=y
385# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set 417# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
386# CONFIG_NET_SCH_CLK_CPU is not set 418# CONFIG_NET_SCH_CLK_CPU is not set
419
420#
421# Queueing/Scheduling
422#
387CONFIG_NET_SCH_CBQ=m 423CONFIG_NET_SCH_CBQ=m
388CONFIG_NET_SCH_HTB=m 424CONFIG_NET_SCH_HTB=m
389# CONFIG_NET_SCH_HFSC is not set 425# CONFIG_NET_SCH_HFSC is not set
@@ -397,8 +433,10 @@ CONFIG_NET_SCH_GRED=m
397CONFIG_NET_SCH_DSMARK=m 433CONFIG_NET_SCH_DSMARK=m
398# CONFIG_NET_SCH_NETEM is not set 434# CONFIG_NET_SCH_NETEM is not set
399CONFIG_NET_SCH_INGRESS=m 435CONFIG_NET_SCH_INGRESS=m
400CONFIG_NET_QOS=y 436
401CONFIG_NET_ESTIMATOR=y 437#
438# Classification
439#
402CONFIG_NET_CLS=y 440CONFIG_NET_CLS=y
403# CONFIG_NET_CLS_BASIC is not set 441# CONFIG_NET_CLS_BASIC is not set
404CONFIG_NET_CLS_TCINDEX=m 442CONFIG_NET_CLS_TCINDEX=m
@@ -407,13 +445,14 @@ CONFIG_NET_CLS_ROUTE=y
407CONFIG_NET_CLS_FW=m 445CONFIG_NET_CLS_FW=m
408CONFIG_NET_CLS_U32=m 446CONFIG_NET_CLS_U32=m
409# CONFIG_CLS_U32_PERF is not set 447# CONFIG_CLS_U32_PERF is not set
410# CONFIG_NET_CLS_IND is not set
411# CONFIG_CLS_U32_MARK is not set 448# CONFIG_CLS_U32_MARK is not set
412CONFIG_NET_CLS_RSVP=m 449CONFIG_NET_CLS_RSVP=m
413CONFIG_NET_CLS_RSVP6=m 450CONFIG_NET_CLS_RSVP6=m
414# CONFIG_NET_EMATCH is not set 451# CONFIG_NET_EMATCH is not set
415# CONFIG_NET_CLS_ACT is not set 452# CONFIG_NET_CLS_ACT is not set
416CONFIG_NET_CLS_POLICE=y 453CONFIG_NET_CLS_POLICE=y
454# CONFIG_NET_CLS_IND is not set
455CONFIG_NET_ESTIMATOR=y
417 456
418# 457#
419# Network testing 458# Network testing
@@ -437,6 +476,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
437# CONFIG_DEBUG_DRIVER is not set 476# CONFIG_DEBUG_DRIVER is not set
438 477
439# 478#
479# Connector - unified userspace <-> kernelspace linker
480#
481# CONFIG_CONNECTOR is not set
482
483#
440# Memory Technology Devices (MTD) 484# Memory Technology Devices (MTD)
441# 485#
442CONFIG_MTD=y 486CONFIG_MTD=y
@@ -458,6 +502,7 @@ CONFIG_MTD_BLOCK=y
458# CONFIG_FTL is not set 502# CONFIG_FTL is not set
459# CONFIG_NFTL is not set 503# CONFIG_NFTL is not set
460# CONFIG_INFTL is not set 504# CONFIG_INFTL is not set
505# CONFIG_RFD_FTL is not set
461 506
462# 507#
463# RAM/ROM/Flash chip drivers 508# RAM/ROM/Flash chip drivers
@@ -492,7 +537,6 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y
492# CONFIG_MTD_PHYSMAP is not set 537# CONFIG_MTD_PHYSMAP is not set
493# CONFIG_MTD_ARM_INTEGRATOR is not set 538# CONFIG_MTD_ARM_INTEGRATOR is not set
494CONFIG_MTD_IXP4XX=y 539CONFIG_MTD_IXP4XX=y
495# CONFIG_MTD_EDB7312 is not set
496# CONFIG_MTD_PCI is not set 540# CONFIG_MTD_PCI is not set
497# CONFIG_MTD_PLATRAM is not set 541# CONFIG_MTD_PLATRAM is not set
498 542
@@ -523,6 +567,11 @@ CONFIG_MTD_NAND_IDS=m
523# CONFIG_MTD_NAND_NANDSIM is not set 567# CONFIG_MTD_NAND_NANDSIM is not set
524 568
525# 569#
570# OneNAND Flash Device Drivers
571#
572# CONFIG_MTD_ONENAND is not set
573
574#
526# Parallel port support 575# Parallel port support
527# 576#
528# CONFIG_PARPORT is not set 577# CONFIG_PARPORT is not set
@@ -548,14 +597,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
548CONFIG_BLK_DEV_RAM_SIZE=8192 597CONFIG_BLK_DEV_RAM_SIZE=8192
549CONFIG_BLK_DEV_INITRD=y 598CONFIG_BLK_DEV_INITRD=y
550# CONFIG_CDROM_PKTCDVD is not set 599# CONFIG_CDROM_PKTCDVD is not set
551
552#
553# IO Schedulers
554#
555CONFIG_IOSCHED_NOOP=y
556CONFIG_IOSCHED_AS=y
557CONFIG_IOSCHED_DEADLINE=y
558CONFIG_IOSCHED_CFQ=y
559# CONFIG_ATA_OVER_ETH is not set 600# CONFIG_ATA_OVER_ETH is not set
560 601
561# 602#
@@ -668,6 +709,7 @@ CONFIG_NET_ETHERNET=y
668CONFIG_MII=y 709CONFIG_MII=y
669# CONFIG_HAPPYMEAL is not set 710# CONFIG_HAPPYMEAL is not set
670# CONFIG_SUNGEM is not set 711# CONFIG_SUNGEM is not set
712# CONFIG_CASSINI is not set
671# CONFIG_NET_VENDOR_3COM is not set 713# CONFIG_NET_VENDOR_3COM is not set
672# CONFIG_SMC91X is not set 714# CONFIG_SMC91X is not set
673# CONFIG_DM9000 is not set 715# CONFIG_DM9000 is not set
@@ -739,6 +781,7 @@ CONFIG_NET_RADIO=y
739# 781#
740# Wireless 802.11b ISA/PCI cards support 782# Wireless 802.11b ISA/PCI cards support
741# 783#
784# CONFIG_AIRO is not set
742CONFIG_HERMES=y 785CONFIG_HERMES=y
743# CONFIG_PLX_HERMES is not set 786# CONFIG_PLX_HERMES is not set
744# CONFIG_TMD_HERMES is not set 787# CONFIG_TMD_HERMES is not set
@@ -782,6 +825,7 @@ CONFIG_WAN_ROUTER_DRIVERS=y
782# 825#
783# ATM drivers 826# ATM drivers
784# 827#
828# CONFIG_ATM_DUMMY is not set
785CONFIG_ATM_TCP=m 829CONFIG_ATM_TCP=m
786# CONFIG_ATM_LANAI is not set 830# CONFIG_ATM_LANAI is not set
787# CONFIG_ATM_ENI is not set 831# CONFIG_ATM_ENI is not set
@@ -902,6 +946,7 @@ CONFIG_IXP4XX_WATCHDOG=y
902# TPM devices 946# TPM devices
903# 947#
904# CONFIG_TCG_TPM is not set 948# CONFIG_TCG_TPM is not set
949# CONFIG_TELCLOCK is not set
905 950
906# 951#
907# I2C support 952# I2C support
@@ -954,6 +999,7 @@ CONFIG_SENSORS_EEPROM=y
954# CONFIG_SENSORS_PCF8591 is not set 999# CONFIG_SENSORS_PCF8591 is not set
955# CONFIG_SENSORS_RTC8564 is not set 1000# CONFIG_SENSORS_RTC8564 is not set
956# CONFIG_SENSORS_MAX6875 is not set 1001# CONFIG_SENSORS_MAX6875 is not set
1002# CONFIG_RTC_X1205_I2C is not set
957# CONFIG_I2C_DEBUG_CORE is not set 1003# CONFIG_I2C_DEBUG_CORE is not set
958# CONFIG_I2C_DEBUG_ALGO is not set 1004# CONFIG_I2C_DEBUG_ALGO is not set
959# CONFIG_I2C_DEBUG_BUS is not set 1005# CONFIG_I2C_DEBUG_BUS is not set
@@ -1036,6 +1082,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y
1036# CONFIG_USB is not set 1082# CONFIG_USB is not set
1037 1083
1038# 1084#
1085# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1086#
1087
1088#
1039# USB Gadget Support 1089# USB Gadget Support
1040# 1090#
1041# CONFIG_USB_GADGET is not set 1091# CONFIG_USB_GADGET is not set
@@ -1110,6 +1160,7 @@ CONFIG_RAMFS=y
1110CONFIG_JFFS2_FS=y 1160CONFIG_JFFS2_FS=y
1111CONFIG_JFFS2_FS_DEBUG=0 1161CONFIG_JFFS2_FS_DEBUG=0
1112CONFIG_JFFS2_FS_WRITEBUFFER=y 1162CONFIG_JFFS2_FS_WRITEBUFFER=y
1163# CONFIG_JFFS2_SUMMARY is not set
1113# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 1164# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1114CONFIG_JFFS2_ZLIB=y 1165CONFIG_JFFS2_ZLIB=y
1115CONFIG_JFFS2_RTIME=y 1166CONFIG_JFFS2_RTIME=y
@@ -1190,7 +1241,9 @@ CONFIG_DETECT_SOFTLOCKUP=y
1190CONFIG_DEBUG_BUGVERBOSE=y 1241CONFIG_DEBUG_BUGVERBOSE=y
1191# CONFIG_DEBUG_INFO is not set 1242# CONFIG_DEBUG_INFO is not set
1192# CONFIG_DEBUG_FS is not set 1243# CONFIG_DEBUG_FS is not set
1244# CONFIG_DEBUG_VM is not set
1193CONFIG_FRAME_POINTER=y 1245CONFIG_FRAME_POINTER=y
1246# CONFIG_RCU_TORTURE_TEST is not set
1194# CONFIG_DEBUG_USER is not set 1247# CONFIG_DEBUG_USER is not set
1195# CONFIG_DEBUG_WAITQ is not set 1248# CONFIG_DEBUG_WAITQ is not set
1196CONFIG_DEBUG_ERRORS=y 1249CONFIG_DEBUG_ERRORS=y
diff --git a/arch/arm/configs/jornada720_defconfig b/arch/arm/configs/jornada720_defconfig
index b88aeba82b..ad1048db96 100644
--- a/arch/arm/configs/jornada720_defconfig
+++ b/arch/arm/configs/jornada720_defconfig
@@ -63,7 +63,6 @@ CONFIG_KMOD=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/lart_defconfig b/arch/arm/configs/lart_defconfig
index 7033829ed1..c3a9328441 100644
--- a/arch/arm/configs/lart_defconfig
+++ b/arch/arm/configs/lart_defconfig
@@ -62,7 +62,6 @@ CONFIG_KMOD=y
62# CONFIG_ARCH_CLPS711X is not set 62# CONFIG_ARCH_CLPS711X is not set
63# CONFIG_ARCH_CO285 is not set 63# CONFIG_ARCH_CO285 is not set
64# CONFIG_ARCH_EBSA110 is not set 64# CONFIG_ARCH_EBSA110 is not set
65# CONFIG_ARCH_CAMELOT is not set
66# CONFIG_ARCH_FOOTBRIDGE is not set 65# CONFIG_ARCH_FOOTBRIDGE is not set
67# CONFIG_ARCH_INTEGRATOR is not set 66# CONFIG_ARCH_INTEGRATOR is not set
68# CONFIG_ARCH_IOP3XX is not set 67# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/lpd7a400_defconfig b/arch/arm/configs/lpd7a400_defconfig
index d64706d3ff..67eaa26c26 100644
--- a/arch/arm/configs/lpd7a400_defconfig
+++ b/arch/arm/configs/lpd7a400_defconfig
@@ -60,7 +60,6 @@ CONFIG_BASE_SMALL=0
60# CONFIG_ARCH_CLPS711X is not set 60# CONFIG_ARCH_CLPS711X is not set
61# CONFIG_ARCH_CO285 is not set 61# CONFIG_ARCH_CO285 is not set
62# CONFIG_ARCH_EBSA110 is not set 62# CONFIG_ARCH_EBSA110 is not set
63# CONFIG_ARCH_CAMELOT is not set
64# CONFIG_ARCH_FOOTBRIDGE is not set 63# CONFIG_ARCH_FOOTBRIDGE is not set
65# CONFIG_ARCH_INTEGRATOR is not set 64# CONFIG_ARCH_INTEGRATOR is not set
66# CONFIG_ARCH_IOP3XX is not set 65# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/lpd7a404_defconfig b/arch/arm/configs/lpd7a404_defconfig
index 87cbedfb30..208d591ebf 100644
--- a/arch/arm/configs/lpd7a404_defconfig
+++ b/arch/arm/configs/lpd7a404_defconfig
@@ -60,7 +60,6 @@ CONFIG_BASE_SMALL=0
60# CONFIG_ARCH_CLPS711X is not set 60# CONFIG_ARCH_CLPS711X is not set
61# CONFIG_ARCH_CO285 is not set 61# CONFIG_ARCH_CO285 is not set
62# CONFIG_ARCH_EBSA110 is not set 62# CONFIG_ARCH_EBSA110 is not set
63# CONFIG_ARCH_CAMELOT is not set
64# CONFIG_ARCH_FOOTBRIDGE is not set 63# CONFIG_ARCH_FOOTBRIDGE is not set
65# CONFIG_ARCH_INTEGRATOR is not set 64# CONFIG_ARCH_INTEGRATOR is not set
66# CONFIG_ARCH_IOP3XX is not set 65# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/lubbock_defconfig b/arch/arm/configs/lubbock_defconfig
index 4bc8717c6f..81daadcbe0 100644
--- a/arch/arm/configs/lubbock_defconfig
+++ b/arch/arm/configs/lubbock_defconfig
@@ -63,7 +63,6 @@ CONFIG_OBSOLETE_MODPARM=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/lusl7200_defconfig b/arch/arm/configs/lusl7200_defconfig
index 3ca64cabc9..42f6a77bc3 100644
--- a/arch/arm/configs/lusl7200_defconfig
+++ b/arch/arm/configs/lusl7200_defconfig
@@ -62,7 +62,6 @@ CONFIG_KMOD=y
62# CONFIG_ARCH_CLPS711X is not set 62# CONFIG_ARCH_CLPS711X is not set
63# CONFIG_ARCH_CO285 is not set 63# CONFIG_ARCH_CO285 is not set
64# CONFIG_ARCH_EBSA110 is not set 64# CONFIG_ARCH_EBSA110 is not set
65# CONFIG_ARCH_CAMELOT is not set
66# CONFIG_ARCH_FOOTBRIDGE is not set 65# CONFIG_ARCH_FOOTBRIDGE is not set
67# CONFIG_ARCH_INTEGRATOR is not set 66# CONFIG_ARCH_INTEGRATOR is not set
68# CONFIG_ARCH_IOP3XX is not set 67# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/mainstone_defconfig b/arch/arm/configs/mainstone_defconfig
index 153d68594b..b112bd75bd 100644
--- a/arch/arm/configs/mainstone_defconfig
+++ b/arch/arm/configs/mainstone_defconfig
@@ -63,7 +63,6 @@ CONFIG_OBSOLETE_MODPARM=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/mx1ads_defconfig b/arch/arm/configs/mx1ads_defconfig
index 6517d167ac..d16f6cd6e0 100644
--- a/arch/arm/configs/mx1ads_defconfig
+++ b/arch/arm/configs/mx1ads_defconfig
@@ -63,7 +63,6 @@ CONFIG_KMOD=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/neponset_defconfig b/arch/arm/configs/neponset_defconfig
index 7fb1f7c7bf..3d35255c64 100644
--- a/arch/arm/configs/neponset_defconfig
+++ b/arch/arm/configs/neponset_defconfig
@@ -65,7 +65,6 @@ CONFIG_OBSOLETE_MODPARM=y
65# CONFIG_ARCH_CLPS711X is not set 65# CONFIG_ARCH_CLPS711X is not set
66# CONFIG_ARCH_CO285 is not set 66# CONFIG_ARCH_CO285 is not set
67# CONFIG_ARCH_EBSA110 is not set 67# CONFIG_ARCH_EBSA110 is not set
68# CONFIG_ARCH_CAMELOT is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set 68# CONFIG_ARCH_FOOTBRIDGE is not set
70# CONFIG_ARCH_INTEGRATOR is not set 69# CONFIG_ARCH_INTEGRATOR is not set
71# CONFIG_ARCH_IOP3XX is not set 70# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/netwinder_defconfig b/arch/arm/configs/netwinder_defconfig
index 6e81acf94c..2cae1ead9f 100644
--- a/arch/arm/configs/netwinder_defconfig
+++ b/arch/arm/configs/netwinder_defconfig
@@ -58,7 +58,6 @@ CONFIG_BASE_SMALL=0
58# CONFIG_ARCH_CLPS711X is not set 58# CONFIG_ARCH_CLPS711X is not set
59# CONFIG_ARCH_CO285 is not set 59# CONFIG_ARCH_CO285 is not set
60# CONFIG_ARCH_EBSA110 is not set 60# CONFIG_ARCH_EBSA110 is not set
61# CONFIG_ARCH_CAMELOT is not set
62CONFIG_ARCH_FOOTBRIDGE=y 61CONFIG_ARCH_FOOTBRIDGE=y
63# CONFIG_ARCH_INTEGRATOR is not set 62# CONFIG_ARCH_INTEGRATOR is not set
64# CONFIG_ARCH_IOP3XX is not set 63# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/omap_h2_1610_defconfig b/arch/arm/configs/omap_h2_1610_defconfig
index 529f0f72e1..ee3ecbd900 100644
--- a/arch/arm/configs/omap_h2_1610_defconfig
+++ b/arch/arm/configs/omap_h2_1610_defconfig
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
85# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/pleb_defconfig b/arch/arm/configs/pleb_defconfig
index 10fec89057..24e8bdd4cb 100644
--- a/arch/arm/configs/pleb_defconfig
+++ b/arch/arm/configs/pleb_defconfig
@@ -63,7 +63,6 @@ CONFIG_KMOD=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/pxa255-idp_defconfig b/arch/arm/configs/pxa255-idp_defconfig
index 21c327883d..b71d31a4bb 100644
--- a/arch/arm/configs/pxa255-idp_defconfig
+++ b/arch/arm/configs/pxa255-idp_defconfig
@@ -63,7 +63,6 @@ CONFIG_OBSOLETE_MODPARM=y
63# CONFIG_ARCH_CLPS711X is not set 63# CONFIG_ARCH_CLPS711X is not set
64# CONFIG_ARCH_CO285 is not set 64# CONFIG_ARCH_CO285 is not set
65# CONFIG_ARCH_EBSA110 is not set 65# CONFIG_ARCH_EBSA110 is not set
66# CONFIG_ARCH_CAMELOT is not set
67# CONFIG_ARCH_FOOTBRIDGE is not set 66# CONFIG_ARCH_FOOTBRIDGE is not set
68# CONFIG_ARCH_INTEGRATOR is not set 67# CONFIG_ARCH_INTEGRATOR is not set
69# CONFIG_ARCH_IOP3XX is not set 68# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/realview_defconfig b/arch/arm/configs/realview_defconfig
index 0485b2f1cc..3f1ec4e304 100644
--- a/arch/arm/configs/realview_defconfig
+++ b/arch/arm/configs/realview_defconfig
@@ -65,7 +65,6 @@ CONFIG_OBSOLETE_MODPARM=y
65# CONFIG_ARCH_CLPS711X is not set 65# CONFIG_ARCH_CLPS711X is not set
66# CONFIG_ARCH_CO285 is not set 66# CONFIG_ARCH_CO285 is not set
67# CONFIG_ARCH_EBSA110 is not set 67# CONFIG_ARCH_EBSA110 is not set
68# CONFIG_ARCH_CAMELOT is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set 68# CONFIG_ARCH_FOOTBRIDGE is not set
70# CONFIG_ARCH_INTEGRATOR is not set 69# CONFIG_ARCH_INTEGRATOR is not set
71# CONFIG_ARCH_IOP3XX is not set 70# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/rpc_defconfig b/arch/arm/configs/rpc_defconfig
index 19184c1010..b498afdc03 100644
--- a/arch/arm/configs/rpc_defconfig
+++ b/arch/arm/configs/rpc_defconfig
@@ -66,7 +66,6 @@ CONFIG_KMOD=y
66# CONFIG_ARCH_CLPS711X is not set 66# CONFIG_ARCH_CLPS711X is not set
67# CONFIG_ARCH_CO285 is not set 67# CONFIG_ARCH_CO285 is not set
68# CONFIG_ARCH_EBSA110 is not set 68# CONFIG_ARCH_EBSA110 is not set
69# CONFIG_ARCH_CAMELOT is not set
70# CONFIG_ARCH_FOOTBRIDGE is not set 69# CONFIG_ARCH_FOOTBRIDGE is not set
71# CONFIG_ARCH_INTEGRATOR is not set 70# CONFIG_ARCH_INTEGRATOR is not set
72# CONFIG_ARCH_IOP3XX is not set 71# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig
index 3f97590c91..33f31080a9 100644
--- a/arch/arm/configs/s3c2410_defconfig
+++ b/arch/arm/configs/s3c2410_defconfig
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
85# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/shannon_defconfig b/arch/arm/configs/shannon_defconfig
index e3facc4fe7..d052c8f805 100644
--- a/arch/arm/configs/shannon_defconfig
+++ b/arch/arm/configs/shannon_defconfig
@@ -62,7 +62,6 @@ CONFIG_OBSOLETE_MODPARM=y
62# CONFIG_ARCH_CLPS711X is not set 62# CONFIG_ARCH_CLPS711X is not set
63# CONFIG_ARCH_CO285 is not set 63# CONFIG_ARCH_CO285 is not set
64# CONFIG_ARCH_EBSA110 is not set 64# CONFIG_ARCH_EBSA110 is not set
65# CONFIG_ARCH_CAMELOT is not set
66# CONFIG_ARCH_FOOTBRIDGE is not set 65# CONFIG_ARCH_FOOTBRIDGE is not set
67# CONFIG_ARCH_INTEGRATOR is not set 66# CONFIG_ARCH_INTEGRATOR is not set
68# CONFIG_ARCH_IOP3XX is not set 67# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/shark_defconfig b/arch/arm/configs/shark_defconfig
index 271823f0d7..c48d170622 100644
--- a/arch/arm/configs/shark_defconfig
+++ b/arch/arm/configs/shark_defconfig
@@ -66,7 +66,6 @@ CONFIG_KMOD=y
66# CONFIG_ARCH_CLPS711X is not set 66# CONFIG_ARCH_CLPS711X is not set
67# CONFIG_ARCH_CO285 is not set 67# CONFIG_ARCH_CO285 is not set
68# CONFIG_ARCH_EBSA110 is not set 68# CONFIG_ARCH_EBSA110 is not set
69# CONFIG_ARCH_CAMELOT is not set
70# CONFIG_ARCH_FOOTBRIDGE is not set 69# CONFIG_ARCH_FOOTBRIDGE is not set
71# CONFIG_ARCH_INTEGRATOR is not set 70# CONFIG_ARCH_INTEGRATOR is not set
72# CONFIG_ARCH_IOP3XX is not set 71# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/simpad_defconfig b/arch/arm/configs/simpad_defconfig
index 5373eeb7d5..2e5a616cc9 100644
--- a/arch/arm/configs/simpad_defconfig
+++ b/arch/arm/configs/simpad_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70# CONFIG_ARCH_IOP3XX is not set 69# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/smdk2410_defconfig b/arch/arm/configs/smdk2410_defconfig
index 2c60865fda..4d123d33c7 100644
--- a/arch/arm/configs/smdk2410_defconfig
+++ b/arch/arm/configs/smdk2410_defconfig
@@ -58,7 +58,6 @@ CONFIG_BASE_SMALL=0
58# CONFIG_ARCH_CLPS711X is not set 58# CONFIG_ARCH_CLPS711X is not set
59# CONFIG_ARCH_CO285 is not set 59# CONFIG_ARCH_CO285 is not set
60# CONFIG_ARCH_EBSA110 is not set 60# CONFIG_ARCH_EBSA110 is not set
61# CONFIG_ARCH_CAMELOT is not set
62# CONFIG_ARCH_FOOTBRIDGE is not set 61# CONFIG_ARCH_FOOTBRIDGE is not set
63# CONFIG_ARCH_INTEGRATOR is not set 62# CONFIG_ARCH_INTEGRATOR is not set
64# CONFIG_ARCH_IOP3XX is not set 63# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/spitz_defconfig b/arch/arm/configs/spitz_defconfig
index 9895539533..d1ace3abfd 100644
--- a/arch/arm/configs/spitz_defconfig
+++ b/arch/arm/configs/spitz_defconfig
@@ -87,7 +87,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
87# CONFIG_ARCH_CLPS711X is not set 87# CONFIG_ARCH_CLPS711X is not set
88# CONFIG_ARCH_CO285 is not set 88# CONFIG_ARCH_CO285 is not set
89# CONFIG_ARCH_EBSA110 is not set 89# CONFIG_ARCH_EBSA110 is not set
90# CONFIG_ARCH_CAMELOT is not set
91# CONFIG_ARCH_FOOTBRIDGE is not set 90# CONFIG_ARCH_FOOTBRIDGE is not set
92# CONFIG_ARCH_INTEGRATOR is not set 91# CONFIG_ARCH_INTEGRATOR is not set
93# CONFIG_ARCH_IOP3XX is not set 92# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/versatile_defconfig b/arch/arm/configs/versatile_defconfig
index d72f2c7542..2687a225aa 100644
--- a/arch/arm/configs/versatile_defconfig
+++ b/arch/arm/configs/versatile_defconfig
@@ -64,7 +64,6 @@ CONFIG_KMOD=y
64# CONFIG_ARCH_CLPS711X is not set 64# CONFIG_ARCH_CLPS711X is not set
65# CONFIG_ARCH_CO285 is not set 65# CONFIG_ARCH_CO285 is not set
66# CONFIG_ARCH_EBSA110 is not set 66# CONFIG_ARCH_EBSA110 is not set
67# CONFIG_ARCH_CAMELOT is not set
68# CONFIG_ARCH_FOOTBRIDGE is not set 67# CONFIG_ARCH_FOOTBRIDGE is not set
69# CONFIG_ARCH_INTEGRATOR is not set 68# CONFIG_ARCH_INTEGRATOR is not set
70# CONFIG_ARCH_IOP3XX is not set 69# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index c11169b5ed..de94b0f3ee 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -2,15 +2,16 @@
2# Makefile for the linux kernel. 2# Makefile for the linux kernel.
3# 3#
4 4
5AFLAGS_head.o := -DKERNEL_RAM_ADDR=$(TEXTADDR) 5AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
6 6
7# Object file lists. 7# Object file lists.
8 8
9obj-y := compat.o dma.o entry-armv.o entry-common.o irq.o \ 9obj-y := compat.o entry-armv.o entry-common.o irq.o \
10 process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \ 10 process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \
11 time.o traps.o 11 time.o traps.o
12 12
13obj-$(CONFIG_APM) += apm.o 13obj-$(CONFIG_APM) += apm.o
14obj-$(CONFIG_ISA_DMA_API) += dma.o
14obj-$(CONFIG_ARCH_ACORN) += ecard.o 15obj-$(CONFIG_ARCH_ACORN) += ecard.o
15obj-$(CONFIG_FOOTBRIDGE) += isa.o 16obj-$(CONFIG_FOOTBRIDGE) += isa.o
16obj-$(CONFIG_FIQ) += fiq.o 17obj-$(CONFIG_FIQ) += fiq.o
diff --git a/arch/arm/kernel/apm.c b/arch/arm/kernel/apm.c
index a2843be055..766b6c05c6 100644
--- a/arch/arm/kernel/apm.c
+++ b/arch/arm/kernel/apm.c
@@ -18,9 +18,9 @@
18#include <linux/proc_fs.h> 18#include <linux/proc_fs.h>
19#include <linux/miscdevice.h> 19#include <linux/miscdevice.h>
20#include <linux/apm_bios.h> 20#include <linux/apm_bios.h>
21#include <linux/capability.h>
21#include <linux/sched.h> 22#include <linux/sched.h>
22#include <linux/pm.h> 23#include <linux/pm.h>
23#include <linux/pm_legacy.h>
24#include <linux/device.h> 24#include <linux/device.h>
25#include <linux/kernel.h> 25#include <linux/kernel.h>
26#include <linux/list.h> 26#include <linux/list.h>
@@ -81,6 +81,7 @@ struct apm_user {
81 */ 81 */
82static int suspends_pending; 82static int suspends_pending;
83static int apm_disabled; 83static int apm_disabled;
84static int arm_apm_active;
84 85
85static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); 86static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue);
86static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); 87static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue);
@@ -477,9 +478,9 @@ static int kapmd(void *arg)
477 apm_event_t event; 478 apm_event_t event;
478 479
479 wait_event_interruptible(kapmd_wait, 480 wait_event_interruptible(kapmd_wait,
480 !queue_empty(&kapmd_queue) || !pm_active); 481 !queue_empty(&kapmd_queue) || !arm_apm_active);
481 482
482 if (!pm_active) 483 if (!arm_apm_active)
483 break; 484 break;
484 485
485 spin_lock_irq(&kapmd_queue_lock); 486 spin_lock_irq(&kapmd_queue_lock);
@@ -522,16 +523,11 @@ static int __init apm_init(void)
522 return -ENODEV; 523 return -ENODEV;
523 } 524 }
524 525
525 if (PM_IS_ACTIVE()) { 526 arm_apm_active = 1;
526 printk(KERN_NOTICE "apm: overridden by ACPI.\n");
527 return -EINVAL;
528 }
529
530 pm_active = 1;
531 527
532 ret = kernel_thread(kapmd, NULL, CLONE_KERNEL); 528 ret = kernel_thread(kapmd, NULL, CLONE_KERNEL);
533 if (ret < 0) { 529 if (ret < 0) {
534 pm_active = 0; 530 arm_apm_active = 0;
535 return ret; 531 return ret;
536 } 532 }
537 533
@@ -543,7 +539,7 @@ static int __init apm_init(void)
543 if (ret != 0) { 539 if (ret != 0) {
544 remove_proc_entry("apm", NULL); 540 remove_proc_entry("apm", NULL);
545 541
546 pm_active = 0; 542 arm_apm_active = 0;
547 wake_up(&kapmd_wait); 543 wake_up(&kapmd_wait);
548 wait_for_completion(&kapmd_exit); 544 wait_for_completion(&kapmd_exit);
549 } 545 }
@@ -556,7 +552,7 @@ static void __exit apm_exit(void)
556 misc_deregister(&apm_device); 552 misc_deregister(&apm_device);
557 remove_proc_entry("apm", NULL); 553 remove_proc_entry("apm", NULL);
558 554
559 pm_active = 0; 555 arm_apm_active = 0;
560 wake_up(&kapmd_wait); 556 wake_up(&kapmd_wait);
561 wait_for_completion(&kapmd_exit); 557 wait_for_completion(&kapmd_exit);
562} 558}
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
index 04d3082a7b..0abbce8c70 100644
--- a/arch/arm/kernel/asm-offsets.c
+++ b/arch/arm/kernel/asm-offsets.c
@@ -23,20 +23,15 @@
23#error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32 23#error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32
24#endif 24#endif
25/* 25/*
26 * GCC 2.95.1, 2.95.2: ignores register clobber list in asm().
27 * GCC 3.0, 3.1: general bad code generation. 26 * GCC 3.0, 3.1: general bad code generation.
28 * GCC 3.2.0: incorrect function argument offset calculation. 27 * GCC 3.2.0: incorrect function argument offset calculation.
29 * GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c 28 * GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c
30 * (http://gcc.gnu.org/PR8896) and incorrect structure 29 * (http://gcc.gnu.org/PR8896) and incorrect structure
31 * initialisation in fs/jffs2/erase.c 30 * initialisation in fs/jffs2/erase.c
32 */ 31 */
33#if __GNUC__ < 2 || \ 32#if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
34 (__GNUC__ == 2 && __GNUC_MINOR__ < 95) || \
35 (__GNUC__ == 2 && __GNUC_MINOR__ == 95 && __GNUC_PATCHLEVEL__ != 0 && \
36 __GNUC_PATCHLEVEL__ < 3) || \
37 (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
38#error Your compiler is too buggy; it is known to miscompile kernels. 33#error Your compiler is too buggy; it is known to miscompile kernels.
39#error Known good compilers: 2.95.3, 2.95.4, 2.96, 3.3 34#error Known good compilers: 3.3
40#endif 35#endif
41 36
42/* Use marker if you need to separate the values later */ 37/* Use marker if you need to separate the values later */
diff --git a/arch/arm/kernel/dma-isa.c b/arch/arm/kernel/dma-isa.c
index e9a36304ec..03532769a9 100644
--- a/arch/arm/kernel/dma-isa.c
+++ b/arch/arm/kernel/dma-isa.c
@@ -18,7 +18,7 @@
18 */ 18 */
19#include <linux/ioport.h> 19#include <linux/ioport.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/pci.h> 21#include <linux/dma-mapping.h>
22 22
23#include <asm/dma.h> 23#include <asm/dma.h>
24#include <asm/io.h> 24#include <asm/io.h>
@@ -65,37 +65,41 @@ static void isa_enable_dma(dmach_t channel, dma_t *dma)
65{ 65{
66 if (dma->invalid) { 66 if (dma->invalid) {
67 unsigned long address, length; 67 unsigned long address, length;
68 unsigned int mode, direction; 68 unsigned int mode;
69 enum dma_data_direction direction;
69 70
70 mode = channel & 3; 71 mode = channel & 3;
71 switch (dma->dma_mode & DMA_MODE_MASK) { 72 switch (dma->dma_mode & DMA_MODE_MASK) {
72 case DMA_MODE_READ: 73 case DMA_MODE_READ:
73 mode |= ISA_DMA_MODE_READ; 74 mode |= ISA_DMA_MODE_READ;
74 direction = PCI_DMA_FROMDEVICE; 75 direction = DMA_FROM_DEVICE;
75 break; 76 break;
76 77
77 case DMA_MODE_WRITE: 78 case DMA_MODE_WRITE:
78 mode |= ISA_DMA_MODE_WRITE; 79 mode |= ISA_DMA_MODE_WRITE;
79 direction = PCI_DMA_TODEVICE; 80 direction = DMA_TO_DEVICE;
80 break; 81 break;
81 82
82 case DMA_MODE_CASCADE: 83 case DMA_MODE_CASCADE:
83 mode |= ISA_DMA_MODE_CASCADE; 84 mode |= ISA_DMA_MODE_CASCADE;
84 direction = PCI_DMA_BIDIRECTIONAL; 85 direction = DMA_BIDIRECTIONAL;
85 break; 86 break;
86 87
87 default: 88 default:
88 direction = PCI_DMA_NONE; 89 direction = DMA_NONE;
89 break; 90 break;
90 } 91 }
91 92
92 if (!dma->using_sg) { 93 if (!dma->sg) {
93 /* 94 /*
94 * Cope with ISA-style drivers which expect cache 95 * Cope with ISA-style drivers which expect cache
95 * coherence. 96 * coherence.
96 */ 97 */
97 dma->buf.dma_address = pci_map_single(NULL, 98 dma->sg = &dma->buf;
98 dma->buf.__address, dma->buf.length, 99 dma->sgcount = 1;
100 dma->buf.length = dma->count;
101 dma->buf.dma_address = dma_map_single(NULL,
102 dma->addr, dma->count,
99 direction); 103 direction);
100 } 104 }
101 105
diff --git a/arch/arm/kernel/dma.c b/arch/arm/kernel/dma.c
index 2b78838842..5a0f4bc5da 100644
--- a/arch/arm/kernel/dma.c
+++ b/arch/arm/kernel/dma.c
@@ -12,8 +12,6 @@
12 * DMA facilities. 12 * DMA facilities.
13 */ 13 */
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/slab.h>
16#include <linux/mman.h>
17#include <linux/init.h> 15#include <linux/init.h>
18#include <linux/spinlock.h> 16#include <linux/spinlock.h>
19#include <linux/errno.h> 17#include <linux/errno.h>
@@ -23,8 +21,7 @@
23#include <asm/mach/dma.h> 21#include <asm/mach/dma.h>
24 22
25DEFINE_SPINLOCK(dma_spin_lock); 23DEFINE_SPINLOCK(dma_spin_lock);
26 24EXPORT_SYMBOL(dma_spin_lock);
27#if MAX_DMA_CHANNELS > 0
28 25
29static dma_t dma_chan[MAX_DMA_CHANNELS]; 26static dma_t dma_chan[MAX_DMA_CHANNELS];
30 27
@@ -81,6 +78,7 @@ bad_dma:
81busy: 78busy:
82 return -EBUSY; 79 return -EBUSY;
83} 80}
81EXPORT_SYMBOL(request_dma);
84 82
85/* 83/*
86 * Free DMA channel 84 * Free DMA channel
@@ -112,6 +110,7 @@ void free_dma(dmach_t channel)
112bad_dma: 110bad_dma:
113 printk(KERN_ERR "dma: trying to free DMA%d\n", channel); 111 printk(KERN_ERR "dma: trying to free DMA%d\n", channel);
114} 112}
113EXPORT_SYMBOL(free_dma);
115 114
116/* Set DMA Scatter-Gather list 115/* Set DMA Scatter-Gather list
117 */ 116 */
@@ -125,15 +124,15 @@ void set_dma_sg (dmach_t channel, struct scatterlist *sg, int nr_sg)
125 124
126 dma->sg = sg; 125 dma->sg = sg;
127 dma->sgcount = nr_sg; 126 dma->sgcount = nr_sg;
128 dma->using_sg = 1;
129 dma->invalid = 1; 127 dma->invalid = 1;
130} 128}
129EXPORT_SYMBOL(set_dma_sg);
131 130
132/* Set DMA address 131/* Set DMA address
133 * 132 *
134 * Copy address to the structure, and set the invalid bit 133 * Copy address to the structure, and set the invalid bit
135 */ 134 */
136void set_dma_addr (dmach_t channel, unsigned long physaddr) 135void __set_dma_addr (dmach_t channel, void *addr)
137{ 136{
138 dma_t *dma = dma_chan + channel; 137 dma_t *dma = dma_chan + channel;
139 138
@@ -141,12 +140,11 @@ void set_dma_addr (dmach_t channel, unsigned long physaddr)
141 printk(KERN_ERR "dma%d: altering DMA address while " 140 printk(KERN_ERR "dma%d: altering DMA address while "
142 "DMA active\n", channel); 141 "DMA active\n", channel);
143 142
144 dma->sg = &dma->buf; 143 dma->sg = NULL;
145 dma->sgcount = 1; 144 dma->addr = addr;
146 dma->buf.__address = bus_to_virt(physaddr);
147 dma->using_sg = 0;
148 dma->invalid = 1; 145 dma->invalid = 1;
149} 146}
147EXPORT_SYMBOL(__set_dma_addr);
150 148
151/* Set DMA byte count 149/* Set DMA byte count
152 * 150 *
@@ -160,12 +158,11 @@ void set_dma_count (dmach_t channel, unsigned long count)
160 printk(KERN_ERR "dma%d: altering DMA count while " 158 printk(KERN_ERR "dma%d: altering DMA count while "
161 "DMA active\n", channel); 159 "DMA active\n", channel);
162 160
163 dma->sg = &dma->buf; 161 dma->sg = NULL;
164 dma->sgcount = 1; 162 dma->count = count;
165 dma->buf.length = count;
166 dma->using_sg = 0;
167 dma->invalid = 1; 163 dma->invalid = 1;
168} 164}
165EXPORT_SYMBOL(set_dma_count);
169 166
170/* Set DMA direction mode 167/* Set DMA direction mode
171 */ 168 */
@@ -180,6 +177,7 @@ void set_dma_mode (dmach_t channel, dmamode_t mode)
180 dma->dma_mode = mode; 177 dma->dma_mode = mode;
181 dma->invalid = 1; 178 dma->invalid = 1;
182} 179}
180EXPORT_SYMBOL(set_dma_mode);
183 181
184/* Enable DMA channel 182/* Enable DMA channel
185 */ 183 */
@@ -200,6 +198,7 @@ free_dma:
200 printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel); 198 printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel);
201 BUG(); 199 BUG();
202} 200}
201EXPORT_SYMBOL(enable_dma);
203 202
204/* Disable DMA channel 203/* Disable DMA channel
205 */ 204 */
@@ -220,6 +219,7 @@ free_dma:
220 printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel); 219 printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel);
221 BUG(); 220 BUG();
222} 221}
222EXPORT_SYMBOL(disable_dma);
223 223
224/* 224/*
225 * Is the specified DMA channel active? 225 * Is the specified DMA channel active?
@@ -233,6 +233,7 @@ void set_dma_page(dmach_t channel, char pagenr)
233{ 233{
234 printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel); 234 printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel);
235} 235}
236EXPORT_SYMBOL(set_dma_page);
236 237
237void set_dma_speed(dmach_t channel, int cycle_ns) 238void set_dma_speed(dmach_t channel, int cycle_ns)
238{ 239{
@@ -243,6 +244,7 @@ void set_dma_speed(dmach_t channel, int cycle_ns)
243 ret = dma->d_ops->setspeed(channel, dma, cycle_ns); 244 ret = dma->d_ops->setspeed(channel, dma, cycle_ns);
244 dma->speed = ret; 245 dma->speed = ret;
245} 246}
247EXPORT_SYMBOL(set_dma_speed);
246 248
247int get_dma_residue(dmach_t channel) 249int get_dma_residue(dmach_t channel)
248{ 250{
@@ -254,49 +256,12 @@ int get_dma_residue(dmach_t channel)
254 256
255 return ret; 257 return ret;
256} 258}
259EXPORT_SYMBOL(get_dma_residue);
257 260
258void __init init_dma(void) 261static int __init init_dma(void)
259{ 262{
260 arch_dma_init(dma_chan); 263 arch_dma_init(dma_chan);
261}
262
263#else
264
265int request_dma(dmach_t channel, const char *device_id)
266{
267 return -EINVAL;
268}
269
270int get_dma_residue(dmach_t channel)
271{
272 return 0; 264 return 0;
273} 265}
274 266
275#define GLOBAL_ALIAS(_a,_b) asm (".set " #_a "," #_b "; .globl " #_a) 267core_initcall(init_dma);
276GLOBAL_ALIAS(disable_dma, get_dma_residue);
277GLOBAL_ALIAS(enable_dma, get_dma_residue);
278GLOBAL_ALIAS(free_dma, get_dma_residue);
279GLOBAL_ALIAS(get_dma_list, get_dma_residue);
280GLOBAL_ALIAS(set_dma_mode, get_dma_residue);
281GLOBAL_ALIAS(set_dma_page, get_dma_residue);
282GLOBAL_ALIAS(set_dma_count, get_dma_residue);
283GLOBAL_ALIAS(set_dma_addr, get_dma_residue);
284GLOBAL_ALIAS(set_dma_sg, get_dma_residue);
285GLOBAL_ALIAS(set_dma_speed, get_dma_residue);
286GLOBAL_ALIAS(init_dma, get_dma_residue);
287
288#endif
289
290EXPORT_SYMBOL(request_dma);
291EXPORT_SYMBOL(free_dma);
292EXPORT_SYMBOL(enable_dma);
293EXPORT_SYMBOL(disable_dma);
294EXPORT_SYMBOL(set_dma_addr);
295EXPORT_SYMBOL(set_dma_count);
296EXPORT_SYMBOL(set_dma_mode);
297EXPORT_SYMBOL(set_dma_page);
298EXPORT_SYMBOL(get_dma_residue);
299EXPORT_SYMBOL(set_dma_sg);
300EXPORT_SYMBOL(set_dma_speed);
301
302EXPORT_SYMBOL(dma_spin_lock);
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c
index dceb826bd2..96fd91926c 100644
--- a/arch/arm/kernel/ecard.c
+++ b/arch/arm/kernel/ecard.c
@@ -40,6 +40,7 @@
40#include <linux/proc_fs.h> 40#include <linux/proc_fs.h>
41#include <linux/device.h> 41#include <linux/device.h>
42#include <linux/init.h> 42#include <linux/init.h>
43#include <linux/mutex.h>
43 44
44#include <asm/dma.h> 45#include <asm/dma.h>
45#include <asm/ecard.h> 46#include <asm/ecard.h>
@@ -206,7 +207,7 @@ static void ecard_task_readbytes(struct ecard_request *req)
206 207
207static DECLARE_WAIT_QUEUE_HEAD(ecard_wait); 208static DECLARE_WAIT_QUEUE_HEAD(ecard_wait);
208static struct ecard_request *ecard_req; 209static struct ecard_request *ecard_req;
209static DECLARE_MUTEX(ecard_sem); 210static DEFINE_MUTEX(ecard_mutex);
210 211
211/* 212/*
212 * Set up the expansion card daemon's page tables. 213 * Set up the expansion card daemon's page tables.
@@ -299,7 +300,7 @@ static void ecard_call(struct ecard_request *req)
299 300
300 req->complete = &completion; 301 req->complete = &completion;
301 302
302 down(&ecard_sem); 303 mutex_lock(&ecard_mutex);
303 ecard_req = req; 304 ecard_req = req;
304 wake_up(&ecard_wait); 305 wake_up(&ecard_wait);
305 306
@@ -307,7 +308,7 @@ static void ecard_call(struct ecard_request *req)
307 * Now wait for kecardd to run. 308 * Now wait for kecardd to run.
308 */ 309 */
309 wait_for_completion(&completion); 310 wait_for_completion(&completion);
310 up(&ecard_sem); 311 mutex_unlock(&ecard_mutex);
311} 312}
312 313
313/* ======================= Mid-level card control ===================== */ 314/* ======================= Mid-level card control ===================== */
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 2a8d27e18f..a52baedf62 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -18,8 +18,6 @@
18#include <asm/memory.h> 18#include <asm/memory.h>
19#include <asm/glue.h> 19#include <asm/glue.h>
20#include <asm/vfpmacros.h> 20#include <asm/vfpmacros.h>
21#include <asm/hardware.h> /* should be moved into entry-macro.S */
22#include <asm/arch/irqs.h> /* should be moved into entry-macro.S */
23#include <asm/arch/entry-macro.S> 21#include <asm/arch/entry-macro.S>
24 22
25#include "entry-header.S" 23#include "entry-header.S"
diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c
index 9299dfc256..1ec3f7faa2 100644
--- a/arch/arm/kernel/fiq.c
+++ b/arch/arm/kernel/fiq.c
@@ -101,7 +101,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
101 ldmia %1, {r8 - r14}\n\ 101 ldmia %1, {r8 - r14}\n\
102 msr cpsr_c, %0 @ return to SVC mode\n\ 102 msr cpsr_c, %0 @ return to SVC mode\n\
103 mov r0, r0\n\ 103 mov r0, r0\n\
104 ldmea fp, {fp, sp, pc}" 104 ldmfd sp, {fp, sp, pc}"
105 : "=&r" (tmp) 105 : "=&r" (tmp)
106 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); 106 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
107} 107}
@@ -119,7 +119,7 @@ void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
119 stmia %1, {r8 - r14}\n\ 119 stmia %1, {r8 - r14}\n\
120 msr cpsr_c, %0 @ return to SVC mode\n\ 120 msr cpsr_c, %0 @ return to SVC mode\n\
121 mov r0, r0\n\ 121 mov r0, r0\n\
122 ldmea fp, {fp, sp, pc}" 122 ldmfd sp, {fp, sp, pc}"
123 : "=&r" (tmp) 123 : "=&r" (tmp)
124 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); 124 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
125} 125}
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index d7d69fd703..1e985f2cd7 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -33,6 +33,8 @@
33#define MACHINFO_PGOFFIO 12 33#define MACHINFO_PGOFFIO 12
34#define MACHINFO_NAME 16 34#define MACHINFO_NAME 16
35 35
36#define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET)
37
36/* 38/*
37 * swapper_pg_dir is the virtual address of the initial page table. 39 * swapper_pg_dir is the virtual address of the initial page table.
38 * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must 40 * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index d7099dbbb8..1d50d2b98f 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -684,8 +684,12 @@ int setup_irq(unsigned int irq, struct irqaction *new)
684 spin_lock_irqsave(&irq_controller_lock, flags); 684 spin_lock_irqsave(&irq_controller_lock, flags);
685 p = &desc->action; 685 p = &desc->action;
686 if ((old = *p) != NULL) { 686 if ((old = *p) != NULL) {
687 /* Can't share interrupts unless both agree to */ 687 /*
688 if (!(old->flags & new->flags & SA_SHIRQ)) { 688 * Can't share interrupts unless both agree to and are
689 * the same type.
690 */
691 if (!(old->flags & new->flags & SA_SHIRQ) ||
692 (~old->flags & new->flags) & SA_TRIGGER_MASK) {
689 spin_unlock_irqrestore(&irq_controller_lock, flags); 693 spin_unlock_irqrestore(&irq_controller_lock, flags);
690 return -EBUSY; 694 return -EBUSY;
691 } 695 }
@@ -705,6 +709,13 @@ int setup_irq(unsigned int irq, struct irqaction *new)
705 desc->running = 0; 709 desc->running = 0;
706 desc->pending = 0; 710 desc->pending = 0;
707 desc->disable_depth = 1; 711 desc->disable_depth = 1;
712
713 if (new->flags & SA_TRIGGER_MASK &&
714 desc->chip->set_type) {
715 unsigned int type = new->flags & SA_TRIGGER_MASK;
716 desc->chip->set_type(irq, type);
717 }
718
708 if (!desc->noautoenable) { 719 if (!desc->noautoenable) {
709 desc->disable_depth = 0; 720 desc->disable_depth = 0;
710 desc->chip->unmask(irq); 721 desc->chip->unmask(irq);
@@ -1027,7 +1038,6 @@ void __init init_irq_proc(void)
1027void __init init_IRQ(void) 1038void __init init_IRQ(void)
1028{ 1039{
1029 struct irqdesc *desc; 1040 struct irqdesc *desc;
1030 extern void init_dma(void);
1031 int irq; 1041 int irq;
1032 1042
1033#ifdef CONFIG_SMP 1043#ifdef CONFIG_SMP
@@ -1041,7 +1051,6 @@ void __init init_IRQ(void)
1041 } 1051 }
1042 1052
1043 init_arch_irq(); 1053 init_arch_irq();
1044 init_dma();
1045} 1054}
1046 1055
1047static int __init noirqdebug_setup(char *str) 1056static int __init noirqdebug_setup(char *str)
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 30494aab82..4b4e4cf79c 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -28,10 +28,9 @@
28#include <linux/init.h> 28#include <linux/init.h>
29#include <linux/cpu.h> 29#include <linux/cpu.h>
30 30
31#include <asm/system.h>
32#include <asm/io.h>
33#include <asm/leds.h> 31#include <asm/leds.h>
34#include <asm/processor.h> 32#include <asm/processor.h>
33#include <asm/system.h>
35#include <asm/uaccess.h> 34#include <asm/uaccess.h>
36#include <asm/mach/time.h> 35#include <asm/mach/time.h>
37 36
@@ -343,10 +342,10 @@ void flush_thread(void)
343void release_thread(struct task_struct *dead_task) 342void release_thread(struct task_struct *dead_task)
344{ 343{
345#if defined(CONFIG_VFP) 344#if defined(CONFIG_VFP)
346 vfp_release_thread(&dead_task->thread_info->vfpstate); 345 vfp_release_thread(&task_thread_info(dead_task)->vfpstate);
347#endif 346#endif
348#if defined(CONFIG_IWMMXT) 347#if defined(CONFIG_IWMMXT)
349 iwmmxt_task_release(dead_task->thread_info); 348 iwmmxt_task_release(task_thread_info(dead_task));
350#endif 349#endif
351} 350}
352 351
@@ -356,10 +355,9 @@ int
356copy_thread(int nr, unsigned long clone_flags, unsigned long stack_start, 355copy_thread(int nr, unsigned long clone_flags, unsigned long stack_start,
357 unsigned long stk_sz, struct task_struct *p, struct pt_regs *regs) 356 unsigned long stk_sz, struct task_struct *p, struct pt_regs *regs)
358{ 357{
359 struct thread_info *thread = p->thread_info; 358 struct thread_info *thread = task_thread_info(p);
360 struct pt_regs *childregs; 359 struct pt_regs *childregs = task_pt_regs(p);
361 360
362 childregs = (void *)thread + THREAD_START_SP - sizeof(*regs);
363 *childregs = *regs; 361 *childregs = *regs;
364 childregs->ARM_r0 = 0; 362 childregs->ARM_r0 = 0;
365 childregs->ARM_sp = stack_start; 363 childregs->ARM_sp = stack_start;
@@ -461,8 +459,8 @@ unsigned long get_wchan(struct task_struct *p)
461 if (!p || p == current || p->state == TASK_RUNNING) 459 if (!p || p == current || p->state == TASK_RUNNING)
462 return 0; 460 return 0;
463 461
464 stack_start = (unsigned long)(p->thread_info + 1); 462 stack_start = (unsigned long)end_of_stack(p);
465 stack_end = ((unsigned long)p->thread_info) + THREAD_SIZE; 463 stack_end = (unsigned long)task_stack_page(p) + THREAD_SIZE;
466 464
467 fp = thread_saved_fp(p); 465 fp = thread_saved_fp(p);
468 do { 466 do {
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index 2b84f78d7b..e591f72bcd 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -55,23 +55,6 @@
55#endif 55#endif
56 56
57/* 57/*
58 * Get the address of the live pt_regs for the specified task.
59 * These are saved onto the top kernel stack when the process
60 * is not running.
61 *
62 * Note: if a user thread is execve'd from kernel space, the
63 * kernel stack will not be empty on entry to the kernel, so
64 * ptracing these tasks will fail.
65 */
66static inline struct pt_regs *
67get_user_regs(struct task_struct *task)
68{
69 return (struct pt_regs *)
70 ((unsigned long)task->thread_info + THREAD_SIZE -
71 8 - sizeof(struct pt_regs));
72}
73
74/*
75 * this routine will get a word off of the processes privileged stack. 58 * this routine will get a word off of the processes privileged stack.
76 * the offset is how far from the base addr as stored in the THREAD. 59 * the offset is how far from the base addr as stored in the THREAD.
77 * this routine assumes that all the privileged stacks are in our 60 * this routine assumes that all the privileged stacks are in our
@@ -79,7 +62,7 @@ get_user_regs(struct task_struct *task)
79 */ 62 */
80static inline long get_user_reg(struct task_struct *task, int offset) 63static inline long get_user_reg(struct task_struct *task, int offset)
81{ 64{
82 return get_user_regs(task)->uregs[offset]; 65 return task_pt_regs(task)->uregs[offset];
83} 66}
84 67
85/* 68/*
@@ -91,7 +74,7 @@ static inline long get_user_reg(struct task_struct *task, int offset)
91static inline int 74static inline int
92put_user_reg(struct task_struct *task, int offset, long data) 75put_user_reg(struct task_struct *task, int offset, long data)
93{ 76{
94 struct pt_regs newregs, *regs = get_user_regs(task); 77 struct pt_regs newregs, *regs = task_pt_regs(task);
95 int ret = -EINVAL; 78 int ret = -EINVAL;
96 79
97 newregs = *regs; 80 newregs = *regs;
@@ -421,7 +404,7 @@ void ptrace_set_bpt(struct task_struct *child)
421 u32 insn; 404 u32 insn;
422 int res; 405 int res;
423 406
424 regs = get_user_regs(child); 407 regs = task_pt_regs(child);
425 pc = instruction_pointer(regs); 408 pc = instruction_pointer(regs);
426 409
427 if (thumb_mode(regs)) { 410 if (thumb_mode(regs)) {
@@ -572,7 +555,7 @@ static int ptrace_write_user(struct task_struct *tsk, unsigned long off,
572 */ 555 */
573static int ptrace_getregs(struct task_struct *tsk, void __user *uregs) 556static int ptrace_getregs(struct task_struct *tsk, void __user *uregs)
574{ 557{
575 struct pt_regs *regs = get_user_regs(tsk); 558 struct pt_regs *regs = task_pt_regs(tsk);
576 559
577 return copy_to_user(uregs, regs, sizeof(struct pt_regs)) ? -EFAULT : 0; 560 return copy_to_user(uregs, regs, sizeof(struct pt_regs)) ? -EFAULT : 0;
578} 561}
@@ -587,7 +570,7 @@ static int ptrace_setregs(struct task_struct *tsk, void __user *uregs)
587 570
588 ret = -EFAULT; 571 ret = -EFAULT;
589 if (copy_from_user(&newregs, uregs, sizeof(struct pt_regs)) == 0) { 572 if (copy_from_user(&newregs, uregs, sizeof(struct pt_regs)) == 0) {
590 struct pt_regs *regs = get_user_regs(tsk); 573 struct pt_regs *regs = task_pt_regs(tsk);
591 574
592 ret = -EINVAL; 575 ret = -EINVAL;
593 if (valid_user_regs(&newregs)) { 576 if (valid_user_regs(&newregs)) {
@@ -604,7 +587,7 @@ static int ptrace_setregs(struct task_struct *tsk, void __user *uregs)
604 */ 587 */
605static int ptrace_getfpregs(struct task_struct *tsk, void __user *ufp) 588static int ptrace_getfpregs(struct task_struct *tsk, void __user *ufp)
606{ 589{
607 return copy_to_user(ufp, &tsk->thread_info->fpstate, 590 return copy_to_user(ufp, &task_thread_info(tsk)->fpstate,
608 sizeof(struct user_fp)) ? -EFAULT : 0; 591 sizeof(struct user_fp)) ? -EFAULT : 0;
609} 592}
610 593
@@ -613,7 +596,7 @@ static int ptrace_getfpregs(struct task_struct *tsk, void __user *ufp)
613 */ 596 */
614static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp) 597static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp)
615{ 598{
616 struct thread_info *thread = tsk->thread_info; 599 struct thread_info *thread = task_thread_info(tsk);
617 thread->used_cp[1] = thread->used_cp[2] = 1; 600 thread->used_cp[1] = thread->used_cp[2] = 1;
618 return copy_from_user(&thread->fpstate, ufp, 601 return copy_from_user(&thread->fpstate, ufp,
619 sizeof(struct user_fp)) ? -EFAULT : 0; 602 sizeof(struct user_fp)) ? -EFAULT : 0;
@@ -626,7 +609,7 @@ static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp)
626 */ 609 */
627static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp) 610static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp)
628{ 611{
629 struct thread_info *thread = tsk->thread_info; 612 struct thread_info *thread = task_thread_info(tsk);
630 void *ptr = &thread->fpstate; 613 void *ptr = &thread->fpstate;
631 614
632 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) 615 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT))
@@ -643,7 +626,7 @@ static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp)
643 */ 626 */
644static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp) 627static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp)
645{ 628{
646 struct thread_info *thread = tsk->thread_info; 629 struct thread_info *thread = task_thread_info(tsk);
647 void *ptr = &thread->fpstate; 630 void *ptr = &thread->fpstate;
648 631
649 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) 632 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT))
@@ -779,7 +762,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
779#endif 762#endif
780 763
781 case PTRACE_GET_THREAD_AREA: 764 case PTRACE_GET_THREAD_AREA:
782 ret = put_user(child->thread_info->tp_value, 765 ret = put_user(task_thread_info(child)->tp_value,
783 (unsigned long __user *) data); 766 (unsigned long __user *) data);
784 break; 767 break;
785 768
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 85774165e9..c45d10d07b 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -26,8 +26,6 @@
26 26
27#include <asm/cpu.h> 27#include <asm/cpu.h>
28#include <asm/elf.h> 28#include <asm/elf.h>
29#include <asm/hardware.h>
30#include <asm/io.h>
31#include <asm/procinfo.h> 29#include <asm/procinfo.h>
32#include <asm/setup.h> 30#include <asm/setup.h>
33#include <asm/mach-types.h> 31#include <asm/mach-types.h>
@@ -207,7 +205,7 @@ static const char *proc_arch[] = {
207 "5TE", 205 "5TE",
208 "5TEJ", 206 "5TEJ",
209 "6TEJ", 207 "6TEJ",
210 "?(10)", 208 "7",
211 "?(11)", 209 "?(11)",
212 "?(12)", 210 "?(12)",
213 "?(13)", 211 "?(13)",
@@ -260,14 +258,17 @@ int cpu_architecture(void)
260{ 258{
261 int cpu_arch; 259 int cpu_arch;
262 260
263 if ((processor_id & 0x0000f000) == 0) { 261 if ((processor_id & 0x0008f000) == 0) {
264 cpu_arch = CPU_ARCH_UNKNOWN; 262 cpu_arch = CPU_ARCH_UNKNOWN;
265 } else if ((processor_id & 0x0000f000) == 0x00007000) { 263 } else if ((processor_id & 0x0008f000) == 0x00007000) {
266 cpu_arch = (processor_id & (1 << 23)) ? CPU_ARCH_ARMv4T : CPU_ARCH_ARMv3; 264 cpu_arch = (processor_id & (1 << 23)) ? CPU_ARCH_ARMv4T : CPU_ARCH_ARMv3;
267 } else { 265 } else if ((processor_id & 0x00080000) == 0x00000000) {
268 cpu_arch = (processor_id >> 16) & 7; 266 cpu_arch = (processor_id >> 16) & 7;
269 if (cpu_arch) 267 if (cpu_arch)
270 cpu_arch += CPU_ARCH_ARMv3; 268 cpu_arch += CPU_ARCH_ARMv3;
269 } else {
270 /* the revised CPUID */
271 cpu_arch = ((processor_id >> 12) & 0xf) - 0xb + CPU_ARCH_ARMv6;
271 } 272 }
272 273
273 return cpu_arch; 274 return cpu_arch;
@@ -865,11 +866,11 @@ static int c_show(struct seq_file *m, void *v)
865 seq_printf(m, "\nCPU implementer\t: 0x%02x\n", processor_id >> 24); 866 seq_printf(m, "\nCPU implementer\t: 0x%02x\n", processor_id >> 24);
866 seq_printf(m, "CPU architecture: %s\n", proc_arch[cpu_architecture()]); 867 seq_printf(m, "CPU architecture: %s\n", proc_arch[cpu_architecture()]);
867 868
868 if ((processor_id & 0x0000f000) == 0x00000000) { 869 if ((processor_id & 0x0008f000) == 0x00000000) {
869 /* pre-ARM7 */ 870 /* pre-ARM7 */
870 seq_printf(m, "CPU part\t\t: %07x\n", processor_id >> 4); 871 seq_printf(m, "CPU part\t\t: %07x\n", processor_id >> 4);
871 } else { 872 } else {
872 if ((processor_id & 0x0000f000) == 0x00007000) { 873 if ((processor_id & 0x0008f000) == 0x00007000) {
873 /* ARM7 */ 874 /* ARM7 */
874 seq_printf(m, "CPU variant\t: 0x%02x\n", 875 seq_printf(m, "CPU variant\t: 0x%02x\n",
875 (processor_id >> 16) & 127); 876 (processor_id >> 16) & 127);
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 373c0959bc..7338948bd7 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -114,7 +114,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
114 * We need to tell the secondary core where to find 114 * We need to tell the secondary core where to find
115 * its stack and the page tables. 115 * its stack and the page tables.
116 */ 116 */
117 secondary_data.stack = (void *)idle->thread_info + THREAD_START_SP; 117 secondary_data.stack = task_stack_page(idle) + THREAD_START_SP;
118 secondary_data.pgdir = virt_to_phys(pgd); 118 secondary_data.pgdir = virt_to_phys(pgd);
119 wmb(); 119 wmb();
120 120
@@ -245,7 +245,7 @@ void __cpuexit cpu_die(void)
245 __asm__("mov sp, %0\n" 245 __asm__("mov sp, %0\n"
246 " b secondary_start_kernel" 246 " b secondary_start_kernel"
247 : 247 :
248 : "r" ((void *)current->thread_info + THREAD_SIZE - 8)); 248 : "r" (task_stack_page(current) + THREAD_SIZE - 8));
249} 249}
250#endif /* CONFIG_HOTPLUG_CPU */ 250#endif /* CONFIG_HOTPLUG_CPU */
251 251
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index fc4729106a..d7d932c028 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -29,9 +29,6 @@
29#include <linux/sysdev.h> 29#include <linux/sysdev.h>
30#include <linux/timer.h> 30#include <linux/timer.h>
31 31
32#include <asm/hardware.h>
33#include <asm/io.h>
34#include <asm/irq.h>
35#include <asm/leds.h> 32#include <asm/leds.h>
36#include <asm/thread_info.h> 33#include <asm/thread_info.h>
37#include <asm/mach/time.h> 34#include <asm/mach/time.h>
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 45e9ea6cd2..93cfd3ffcc 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -23,7 +23,6 @@
23 23
24#include <asm/atomic.h> 24#include <asm/atomic.h>
25#include <asm/cacheflush.h> 25#include <asm/cacheflush.h>
26#include <asm/io.h>
27#include <asm/system.h> 26#include <asm/system.h>
28#include <asm/uaccess.h> 27#include <asm/uaccess.h>
29#include <asm/unistd.h> 28#include <asm/unistd.h>
@@ -165,7 +164,7 @@ static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)
165 } else if (verify_stack(fp)) { 164 } else if (verify_stack(fp)) {
166 printk("invalid frame pointer 0x%08x", fp); 165 printk("invalid frame pointer 0x%08x", fp);
167 ok = 0; 166 ok = 0;
168 } else if (fp < (unsigned long)(tsk->thread_info + 1)) 167 } else if (fp < (unsigned long)end_of_stack(tsk))
169 printk("frame pointer underflow"); 168 printk("frame pointer underflow");
170 printk("\n"); 169 printk("\n");
171 170
@@ -211,7 +210,7 @@ static void __die(const char *str, int err, struct thread_info *thread, struct p
211 210
212 if (!user_mode(regs) || in_interrupt()) { 211 if (!user_mode(regs) || in_interrupt()) {
213 dump_mem("Stack: ", regs->ARM_sp, 212 dump_mem("Stack: ", regs->ARM_sp,
214 THREAD_SIZE + (unsigned long)tsk->thread_info); 213 THREAD_SIZE + (unsigned long)task_stack_page(tsk));
215 dump_backtrace(regs, tsk); 214 dump_backtrace(regs, tsk);
216 dump_instr(regs); 215 dump_instr(regs);
217 } 216 }
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 9a47770114..2b254e8859 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -17,15 +17,13 @@ jiffies = jiffies_64;
17jiffies = jiffies_64 + 4; 17jiffies = jiffies_64 + 4;
18#endif 18#endif
19 19
20SECTIONS
21{
20#ifdef CONFIG_XIP_KERNEL 22#ifdef CONFIG_XIP_KERNEL
21#define TEXTADDR XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) 23 . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);
22#else 24#else
23#define TEXTADDR KERNEL_RAM_ADDR 25 . = PAGE_OFFSET + TEXT_OFFSET;
24#endif 26#endif
25
26SECTIONS
27{
28 . = TEXTADDR;
29 .init : { /* Init code and data */ 27 .init : { /* Init code and data */
30 _stext = .; 28 _stext = .;
31 _sinittext = .; 29 _sinittext = .;
@@ -104,7 +102,7 @@ SECTIONS
104 102
105#ifdef CONFIG_XIP_KERNEL 103#ifdef CONFIG_XIP_KERNEL
106 __data_loc = ALIGN(4); /* location in binary */ 104 __data_loc = ALIGN(4); /* location in binary */
107 . = KERNEL_RAM_ADDR; 105 . = PAGE_OFFSET + TEXT_OFFSET;
108#else 106#else
109 . = ALIGN(THREAD_SIZE); 107 . = ALIGN(THREAD_SIZE);
110 __data_loc = .; 108 __data_loc = .;
diff --git a/arch/arm/lib/csumpartialcopy.S b/arch/arm/lib/csumpartialcopy.S
index 990ee63b24..21effe0dbf 100644
--- a/arch/arm/lib/csumpartialcopy.S
+++ b/arch/arm/lib/csumpartialcopy.S
@@ -18,11 +18,13 @@
18 */ 18 */
19 19
20 .macro save_regs 20 .macro save_regs
21 mov ip, sp
21 stmfd sp!, {r1, r4 - r8, fp, ip, lr, pc} 22 stmfd sp!, {r1, r4 - r8, fp, ip, lr, pc}
23 sub fp, ip, #4
22 .endm 24 .endm
23 25
24 .macro load_regs,flags 26 .macro load_regs
25 LOADREGS(\flags,fp,{r1, r4 - r8, fp, sp, pc}) 27 ldmfd sp, {r1, r4 - r8, fp, sp, pc}
26 .endm 28 .endm
27 29
28 .macro load1b, reg1 30 .macro load1b, reg1
diff --git a/arch/arm/lib/csumpartialcopygeneric.S b/arch/arm/lib/csumpartialcopygeneric.S
index 4a4609c190..c50e8f5285 100644
--- a/arch/arm/lib/csumpartialcopygeneric.S
+++ b/arch/arm/lib/csumpartialcopygeneric.S
@@ -23,7 +23,7 @@ len .req r2
23sum .req r3 23sum .req r3
24 24
25.Lzero: mov r0, sum 25.Lzero: mov r0, sum
26 load_regs ea 26 load_regs
27 27
28 /* 28 /*
29 * Align an unaligned destination pointer. We know that 29 * Align an unaligned destination pointer. We know that
@@ -87,9 +87,7 @@ sum .req r3
87 b .Ldone 87 b .Ldone
88 88
89FN_ENTRY 89FN_ENTRY
90 mov ip, sp
91 save_regs 90 save_regs
92 sub fp, ip, #4
93 91
94 cmp len, #8 @ Ensure that we have at least 92 cmp len, #8 @ Ensure that we have at least
95 blo .Lless8 @ 8 bytes to copy. 93 blo .Lless8 @ 8 bytes to copy.
@@ -163,7 +161,7 @@ FN_ENTRY
163 ldr sum, [sp, #0] @ dst 161 ldr sum, [sp, #0] @ dst
164 tst sum, #1 162 tst sum, #1
165 movne r0, r0, ror #8 163 movne r0, r0, ror #8
166 load_regs ea 164 load_regs
167 165
168.Lsrc_not_aligned: 166.Lsrc_not_aligned:
169 adc sum, sum, #0 @ include C from dst alignment 167 adc sum, sum, #0 @ include C from dst alignment
diff --git a/arch/arm/lib/csumpartialcopyuser.S b/arch/arm/lib/csumpartialcopyuser.S
index 333bca292d..c3b93e22ea 100644
--- a/arch/arm/lib/csumpartialcopyuser.S
+++ b/arch/arm/lib/csumpartialcopyuser.S
@@ -18,11 +18,13 @@
18 .text 18 .text
19 19
20 .macro save_regs 20 .macro save_regs
21 mov ip, sp
21 stmfd sp!, {r1 - r2, r4 - r8, fp, ip, lr, pc} 22 stmfd sp!, {r1 - r2, r4 - r8, fp, ip, lr, pc}
23 sub fp, ip, #4
22 .endm 24 .endm
23 25
24 .macro load_regs,flags 26 .macro load_regs
25 ldm\flags fp, {r1, r2, r4-r8, fp, sp, pc} 27 ldmfd sp, {r1, r2, r4-r8, fp, sp, pc}
26 .endm 28 .endm
27 29
28 .macro load1b, reg1 30 .macro load1b, reg1
@@ -100,5 +102,5 @@
1006002: teq r2, r1 1026002: teq r2, r1
101 strneb r0, [r1], #1 103 strneb r0, [r1], #1
102 bne 6002b 104 bne 6002b
103 load_regs ea 105 load_regs
104 .previous 106 .previous
diff --git a/arch/arm/mach-aaec2000/clock.c b/arch/arm/mach-aaec2000/clock.c
index 0340ddc482..74aa7a39bb 100644
--- a/arch/arm/mach-aaec2000/clock.c
+++ b/arch/arm/mach-aaec2000/clock.c
@@ -15,27 +15,28 @@
15#include <linux/errno.h> 15#include <linux/errno.h>
16#include <linux/err.h> 16#include <linux/err.h>
17#include <linux/string.h> 17#include <linux/string.h>
18#include <linux/clk.h>
19#include <linux/mutex.h>
18 20
19#include <asm/semaphore.h> 21#include <asm/semaphore.h>
20#include <asm/hardware/clock.h>
21 22
22#include "clock.h" 23#include "clock.h"
23 24
24static LIST_HEAD(clocks); 25static LIST_HEAD(clocks);
25static DECLARE_MUTEX(clocks_sem); 26static DEFINE_MUTEX(clocks_mutex);
26 27
27struct clk *clk_get(struct device *dev, const char *id) 28struct clk *clk_get(struct device *dev, const char *id)
28{ 29{
29 struct clk *p, *clk = ERR_PTR(-ENOENT); 30 struct clk *p, *clk = ERR_PTR(-ENOENT);
30 31
31 down(&clocks_sem); 32 mutex_lock(&clocks_mutex);
32 list_for_each_entry(p, &clocks, node) { 33 list_for_each_entry(p, &clocks, node) {
33 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 34 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
34 clk = p; 35 clk = p;
35 break; 36 break;
36 } 37 }
37 } 38 }
38 up(&clocks_sem); 39 mutex_unlock(&clocks_mutex);
39 40
40 return clk; 41 return clk;
41} 42}
@@ -58,17 +59,6 @@ void clk_disable(struct clk *clk)
58} 59}
59EXPORT_SYMBOL(clk_disable); 60EXPORT_SYMBOL(clk_disable);
60 61
61int clk_use(struct clk *clk)
62{
63 return 0;
64}
65EXPORT_SYMBOL(clk_use);
66
67void clk_unuse(struct clk *clk)
68{
69}
70EXPORT_SYMBOL(clk_unuse);
71
72unsigned long clk_get_rate(struct clk *clk) 62unsigned long clk_get_rate(struct clk *clk)
73{ 63{
74 return clk->rate; 64 return clk->rate;
@@ -89,18 +79,18 @@ EXPORT_SYMBOL(clk_set_rate);
89 79
90int clk_register(struct clk *clk) 80int clk_register(struct clk *clk)
91{ 81{
92 down(&clocks_sem); 82 mutex_lock(&clocks_mutex);
93 list_add(&clk->node, &clocks); 83 list_add(&clk->node, &clocks);
94 up(&clocks_sem); 84 mutex_unlock(&clocks_mutex);
95 return 0; 85 return 0;
96} 86}
97EXPORT_SYMBOL(clk_register); 87EXPORT_SYMBOL(clk_register);
98 88
99void clk_unregister(struct clk *clk) 89void clk_unregister(struct clk *clk)
100{ 90{
101 down(&clocks_sem); 91 mutex_lock(&clocks_mutex);
102 list_del(&clk->node); 92 list_del(&clk->node);
103 up(&clocks_sem); 93 mutex_unlock(&clocks_mutex);
104} 94}
105EXPORT_SYMBOL(clk_unregister); 95EXPORT_SYMBOL(clk_unregister);
106 96
diff --git a/arch/arm/mach-aaec2000/core.c b/arch/arm/mach-aaec2000/core.c
index 4e706d9ad3..dce4815cf5 100644
--- a/arch/arm/mach-aaec2000/core.c
+++ b/arch/arm/mach-aaec2000/core.c
@@ -20,11 +20,11 @@
20#include <linux/interrupt.h> 20#include <linux/interrupt.h>
21#include <linux/timex.h> 21#include <linux/timex.h>
22#include <linux/signal.h> 22#include <linux/signal.h>
23#include <linux/amba/bus.h>
23 24
24#include <asm/hardware.h> 25#include <asm/hardware.h>
25#include <asm/irq.h> 26#include <asm/irq.h>
26#include <asm/sizes.h> 27#include <asm/sizes.h>
27#include <asm/hardware/amba.h>
28 28
29#include <asm/mach/flash.h> 29#include <asm/mach/flash.h>
30#include <asm/mach/irq.h> 30#include <asm/mach/irq.h>
diff --git a/arch/arm/mach-aaec2000/core.h b/arch/arm/mach-aaec2000/core.h
index daefc0ea14..b6029a95f1 100644
--- a/arch/arm/mach-aaec2000/core.h
+++ b/arch/arm/mach-aaec2000/core.h
@@ -9,7 +9,7 @@
9 * 9 *
10 */ 10 */
11 11
12#include <asm/hardware/amba_clcd.h> 12#include <linux/amba/clcd.h>
13 13
14struct sys_timer; 14struct sys_timer;
15 15
diff --git a/arch/arm/mach-at91rm9200/Kconfig b/arch/arm/mach-at91rm9200/Kconfig
new file mode 100644
index 0000000000..4b7218fc3e
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/Kconfig
@@ -0,0 +1,54 @@
1if ARCH_AT91RM9200
2
3menu "AT91RM9200 Implementations"
4
5comment "AT91RM9200 Board Type"
6
7config ARCH_AT91RM9200DK
8 bool "Atmel AT91RM9200-DK Development board"
9 depends on ARCH_AT91RM9200
10 help
11 Select this if you are using Atmel's AT91RM9200-DK Development board
12
13config MACH_AT91RM9200EK
14 bool "Atmel AT91RM9200-EK Evaluation Kit"
15 depends on ARCH_AT91RM9200
16 help
17 Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit
18
19config MACH_CSB337
20 bool "Cogent CSB337 board"
21 depends on ARCH_AT91RM9200
22 help
23 Select this if you are using Cogent's CSB337 board
24
25config MACH_CSB637
26 bool "Cogent CSB637 board"
27 depends on ARCH_AT91RM9200
28 help
29 Select this if you are using Cogent's CSB637 board
30
31config MACH_CARMEVA
32 bool "Conitec's ARM&EVA"
33 depends on ARCH_AT91RM9200
34 help
35 Select this if you are using Conitec's AT91RM9200-MCU-Module
36
37config MACH_KB9200
38 bool "KwikByte's KB920x"
39 depends on ARCH_AT91RM9200
40 help
41 Select this if you are using KwikByte's KB920x board
42
43
44comment "AT91RM9200 Feature Selections"
45
46config AT91_PROGRAMMABLE_CLOCKS
47 bool "Programmable Clocks"
48 help
49 Select this if you need to program one or more of the PCK0..PCK3
50 programmable clock outputs.
51
52endmenu
53
54endif
diff --git a/arch/arm/mach-at91rm9200/Makefile b/arch/arm/mach-at91rm9200/Makefile
new file mode 100644
index 0000000000..75e6ee318d
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/Makefile
@@ -0,0 +1,27 @@
1#
2# Makefile for the linux kernel.
3#
4
5obj-y := clock.o irq.o time.o gpio.o common.o devices.o
6obj-m :=
7obj-n :=
8obj- :=
9
10# Board-specific support
11obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o
12obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o
13obj-$(CONFIG_MACH_CSB337) += board-csb337.o
14obj-$(CONFIG_MACH_CSB637) += board-csb637.o
15#obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o
16#obj-$(CONFIG_MACH_KB9200) += board-kb9202.o
17
18# LEDs support
19#led-$(CONFIG_ARCH_AT91RM9200DK) += leds.o
20#led-$(CONFIG_MACH_AT91RM9200EK) += leds.o
21#led-$(CONFIG_MACH_CSB337) += leds.o
22#led-$(CONFIG_MACH_CSB637) += leds.o
23#led-$(CONFIG_MACH_KB9200) += leds.o
24obj-$(CONFIG_LEDS) += $(led-y)
25
26# VGA support
27#obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
diff --git a/arch/arm/mach-at91rm9200/Makefile.boot b/arch/arm/mach-at91rm9200/Makefile.boot
new file mode 100644
index 0000000000..e667dcc7cd
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/Makefile.boot
@@ -0,0 +1,9 @@
1# Note: the following conditions must always be true:
2# ZRELADDR == virt_to_phys(TEXTADDR)
3# PARAMS_PHYS must be within 4MB of ZRELADDR
4# INITRD_PHYS must be in RAM
5
6 zreladdr-y := 0x20008000
7params_phys-y := 0x20000100
8initrd_phys-y := 0x20410000
9
diff --git a/arch/arm/mach-at91rm9200/board-csb337.c b/arch/arm/mach-at91rm9200/board-csb337.c
new file mode 100644
index 0000000000..4aec834ee4
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-csb337.c
@@ -0,0 +1,143 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-csb337.c
3 *
4 * Copyright (C) 2005 SAN People
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 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#include <linux/config.h>
22#include <linux/types.h>
23#include <linux/init.h>
24#include <linux/mm.h>
25#include <linux/module.h>
26#include <linux/platform_device.h>
27
28#include <asm/hardware.h>
29#include <asm/setup.h>
30#include <asm/mach-types.h>
31#include <asm/irq.h>
32
33#include <asm/mach/arch.h>
34#include <asm/mach/map.h>
35#include <asm/mach/irq.h>
36
37#include <asm/arch/hardware.h>
38#include <asm/mach/serial_at91rm9200.h>
39#include <asm/arch/board.h>
40
41#include "generic.h"
42
43static void __init csb337_init_irq(void)
44{
45 /* Initialize AIC controller */
46 at91rm9200_init_irq(NULL);
47
48 /* Set up the GPIO interrupts */
49 at91_gpio_irq_setup(BGA_GPIO_BANKS);
50}
51
52/*
53 * Serial port configuration.
54 * 0 .. 3 = USART0 .. USART3
55 * 4 = DBGU
56 */
57#define CSB337_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
58#define CSB337_SERIAL_CONSOLE 0 /* ttyS0 */
59
60static void __init csb337_map_io(void)
61{
62 int serial[AT91_NR_UART] = CSB337_UART_MAP;
63 int i;
64
65 at91rm9200_map_io();
66
67 /* Initialize clocks: 3.6864 MHz crystal */
68 at91_clock_init(3686400);
69
70#ifdef CONFIG_SERIAL_AT91
71 at91_console_port = CSB337_SERIAL_CONSOLE;
72 memcpy(at91_serial_map, serial, sizeof(serial));
73
74 /* Register UARTs */
75 for (i = 0; i < AT91_NR_UART; i++) {
76 if (serial[i] >= 0)
77 at91_register_uart(i, serial[i]);
78 }
79#endif
80}
81
82static struct at91_eth_data __initdata csb337_eth_data = {
83 .phy_irq_pin = AT91_PIN_PC2,
84 .is_rmii = 0,
85};
86
87static struct at91_usbh_data __initdata csb337_usbh_data = {
88 .ports = 2,
89};
90
91static struct at91_udc_data __initdata csb337_udc_data = {
92 // this has no VBUS sensing pin
93 .pullup_pin = AT91_PIN_PA24,
94};
95
96static struct at91_cf_data __initdata csb337_cf_data = {
97 /*
98 * connector P4 on the CSB 337 mates to
99 * connector P8 on the CSB 300CF
100 */
101
102 /* CSB337 specific */
103 .det_pin = AT91_PIN_PC3,
104
105 /* CSB300CF specific */
106 .irq_pin = AT91_PIN_PA19,
107 .vcc_pin = AT91_PIN_PD0,
108 .rst_pin = AT91_PIN_PD2,
109};
110
111static struct at91_mmc_data __initdata csb337_mmc_data = {
112 .det_pin = AT91_PIN_PD5,
113 .is_b = 0,
114 .wire4 = 1,
115 .wp_pin = AT91_PIN_PD6,
116};
117
118static void __init csb337_board_init(void)
119{
120 /* Ethernet */
121 at91_add_device_eth(&csb337_eth_data);
122 /* USB Host */
123 at91_add_device_usbh(&csb337_usbh_data);
124 /* USB Device */
125 at91_add_device_udc(&csb337_udc_data);
126 /* Compact Flash */
127 at91_set_gpio_input(AT91_PIN_PB22, 1); /* IOIS16 */
128 at91_add_device_cf(&csb337_cf_data);
129 /* MMC */
130 at91_add_device_mmc(&csb337_mmc_data);
131}
132
133MACHINE_START(CSB337, "Cogent CSB337")
134 /* Maintainer: Bill Gatliff */
135 .phys_ram = AT91_SDRAM_BASE,
136 .phys_io = AT91_BASE_SYS,
137 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
138 .boot_params = AT91_SDRAM_BASE + 0x100,
139 .timer = &at91rm9200_timer,
140 .map_io = csb337_map_io,
141 .init_irq = csb337_init_irq,
142 .init_machine = csb337_board_init,
143MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/board-csb637.c b/arch/arm/mach-at91rm9200/board-csb637.c
new file mode 100644
index 0000000000..23e4cc2148
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-csb637.c
@@ -0,0 +1,116 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-csb637.c
3 *
4 * Copyright (C) 2005 SAN People
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 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#include <linux/config.h>
22#include <linux/types.h>
23#include <linux/init.h>
24#include <linux/mm.h>
25#include <linux/module.h>
26#include <linux/platform_device.h>
27
28#include <asm/hardware.h>
29#include <asm/setup.h>
30#include <asm/mach-types.h>
31#include <asm/irq.h>
32
33#include <asm/mach/arch.h>
34#include <asm/mach/map.h>
35#include <asm/mach/irq.h>
36
37#include <asm/arch/hardware.h>
38#include <asm/mach/serial_at91rm9200.h>
39#include <asm/arch/board.h>
40
41#include "generic.h"
42
43static void __init csb637_init_irq(void)
44{
45 /* Initialize AIC controller */
46 at91rm9200_init_irq(NULL);
47
48 /* Set up the GPIO interrupts */
49 at91_gpio_irq_setup(BGA_GPIO_BANKS);
50}
51
52/*
53 * Serial port configuration.
54 * 0 .. 3 = USART0 .. USART3
55 * 4 = DBGU
56 */
57#define CSB637_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
58#define CSB637_SERIAL_CONSOLE 0 /* ttyS0 */
59
60static void __init csb637_map_io(void)
61{
62 int serial[AT91_NR_UART] = CSB637_UART_MAP;
63 int i;
64
65 at91rm9200_map_io();
66
67 /* Initialize clocks: 3.6864 MHz crystal */
68 at91_clock_init(3686400);
69
70#ifdef CONFIG_SERIAL_AT91
71 at91_console_port = CSB637_SERIAL_CONSOLE;
72 memcpy(at91_serial_map, serial, sizeof(serial));
73
74 /* Register UARTs */
75 for (i = 0; i < AT91_NR_UART; i++) {
76 if (serial[i] >= 0)
77 at91_register_uart(i, serial[i]);
78 }
79#endif
80}
81
82static struct at91_eth_data __initdata csb637_eth_data = {
83 .phy_irq_pin = AT91_PIN_PC0,
84 .is_rmii = 0,
85};
86
87static struct at91_usbh_data __initdata csb637_usbh_data = {
88 .ports = 2,
89};
90
91static struct at91_udc_data __initdata csb637_udc_data = {
92 .vbus_pin = AT91_PIN_PB28,
93 .pullup_pin = AT91_PIN_PB1,
94};
95
96static void __init csb637_board_init(void)
97{
98 /* Ethernet */
99 at91_add_device_eth(&csb637_eth_data);
100 /* USB Host */
101 at91_add_device_usbh(&csb637_usbh_data);
102 /* USB Device */
103 at91_add_device_udc(&csb637_udc_data);
104}
105
106MACHINE_START(CSB637, "Cogent CSB637")
107 /* Maintainer: Bill Gatliff */
108 .phys_ram = AT91_SDRAM_BASE,
109 .phys_io = AT91_BASE_SYS,
110 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
111 .boot_params = AT91_SDRAM_BASE + 0x100,
112 .timer = &at91rm9200_timer,
113 .map_io = csb637_map_io,
114 .init_irq = csb637_init_irq,
115 .init_machine = csb637_board_init,
116MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/board-dk.c b/arch/arm/mach-at91rm9200/board-dk.c
new file mode 100644
index 0000000000..8c747a31b9
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-dk.c
@@ -0,0 +1,138 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-dk.c
3 *
4 * Copyright (C) 2005 SAN People
5 *
6 * Epson S1D framebuffer glue code is:
7 * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24#include <linux/config.h>
25#include <linux/types.h>
26#include <linux/init.h>
27#include <linux/mm.h>
28#include <linux/module.h>
29#include <linux/platform_device.h>
30
31#include <asm/hardware.h>
32#include <asm/setup.h>
33#include <asm/mach-types.h>
34#include <asm/irq.h>
35
36#include <asm/mach/arch.h>
37#include <asm/mach/map.h>
38#include <asm/mach/irq.h>
39
40#include <asm/arch/hardware.h>
41#include <asm/mach/serial_at91rm9200.h>
42#include <asm/arch/board.h>
43
44#include "generic.h"
45
46static void __init dk_init_irq(void)
47{
48 /* Initialize AIC controller */
49 at91rm9200_init_irq(NULL);
50
51 /* Set up the GPIO interrupts */
52 at91_gpio_irq_setup(BGA_GPIO_BANKS);
53}
54
55/*
56 * Serial port configuration.
57 * 0 .. 3 = USART0 .. USART3
58 * 4 = DBGU
59 */
60#define DK_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
61#define DK_SERIAL_CONSOLE 0 /* ttyS0 */
62
63static void __init dk_map_io(void)
64{
65 int serial[AT91_NR_UART] = DK_UART_MAP;
66 int i;
67
68 at91rm9200_map_io();
69
70 /* Initialize clocks: 18.432 MHz crystal */
71 at91_clock_init(18432000);
72
73#ifdef CONFIG_SERIAL_AT91
74 at91_console_port = DK_SERIAL_CONSOLE;
75 memcpy(at91_serial_map, serial, sizeof(serial));
76
77 /* Register UARTs */
78 for (i = 0; i < AT91_NR_UART; i++) {
79 if (at91_serial_map[i] >= 0)
80 at91_register_uart(i, at91_serial_map[i]);
81 }
82#endif
83}
84
85static struct at91_eth_data __initdata dk_eth_data = {
86 .phy_irq_pin = AT91_PIN_PC4,
87 .is_rmii = 1,
88};
89
90static struct at91_usbh_data __initdata dk_usbh_data = {
91 .ports = 2,
92};
93
94static struct at91_udc_data __initdata dk_udc_data = {
95 .vbus_pin = AT91_PIN_PD4,
96 .pullup_pin = AT91_PIN_PD5,
97};
98
99static struct at91_cf_data __initdata dk_cf_data = {
100 .det_pin = AT91_PIN_PB0,
101 .rst_pin = AT91_PIN_PC5,
102 // .irq_pin = ... not connected
103 // .vcc_pin = ... always powered
104};
105
106static struct at91_mmc_data __initdata dk_mmc_data = {
107 .is_b = 0,
108 .wire4 = 1,
109};
110
111static void __init dk_board_init(void)
112{
113 /* Ethernet */
114 at91_add_device_eth(&dk_eth_data);
115 /* USB Host */
116 at91_add_device_usbh(&dk_usbh_data);
117 /* USB Device */
118 at91_add_device_udc(&dk_udc_data);
119 /* Compact Flash */
120 at91_add_device_cf(&dk_cf_data);
121 /* MMC */
122 at91_set_gpio_output(AT91_PIN_PB7, 1); /* this MMC card slot can optionally use SPI signaling (CS3). default: MMC */
123 at91_add_device_mmc(&dk_mmc_data);
124 /* VGA */
125// dk_add_device_video();
126}
127
128MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
129 /* Maintainer: SAN People/Atmel */
130 .phys_ram = AT91_SDRAM_BASE,
131 .phys_io = AT91_BASE_SYS,
132 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
133 .boot_params = AT91_SDRAM_BASE + 0x100,
134 .timer = &at91rm9200_timer,
135 .map_io = dk_map_io,
136 .init_irq = dk_init_irq,
137 .init_machine = dk_board_init,
138MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/board-ek.c b/arch/arm/mach-at91rm9200/board-ek.c
new file mode 100644
index 0000000000..d140645711
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-ek.c
@@ -0,0 +1,131 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-ek.c
3 *
4 * Copyright (C) 2005 SAN People
5 *
6 * Epson S1D framebuffer glue code is:
7 * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24#include <linux/config.h>
25#include <linux/types.h>
26#include <linux/init.h>
27#include <linux/mm.h>
28#include <linux/module.h>
29#include <linux/platform_device.h>
30
31#include <asm/hardware.h>
32#include <asm/setup.h>
33#include <asm/mach-types.h>
34#include <asm/irq.h>
35
36#include <asm/mach/arch.h>
37#include <asm/mach/map.h>
38#include <asm/mach/irq.h>
39
40#include <asm/arch/hardware.h>
41#include <asm/mach/serial_at91rm9200.h>
42#include <asm/arch/board.h>
43
44#include "generic.h"
45
46static void __init ek_init_irq(void)
47{
48 /* Initialize AIC controller */
49 at91rm9200_init_irq(NULL);
50
51 /* Set up the GPIO interrupts */
52 at91_gpio_irq_setup(BGA_GPIO_BANKS);
53}
54
55/*
56 * Serial port configuration.
57 * 0 .. 3 = USART0 .. USART3
58 * 4 = DBGU
59 */
60#define EK_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
61#define EK_SERIAL_CONSOLE 0 /* ttyS0 */
62
63static void __init ek_map_io(void)
64{
65 int serial[AT91_NR_UART] = EK_UART_MAP;
66 int i;
67
68 at91rm9200_map_io();
69
70 /* Initialize clocks: 18.432 MHz crystal */
71 at91_clock_init(18432000);
72
73#ifdef CONFIG_SERIAL_AT91
74 at91_console_port = EK_SERIAL_CONSOLE;
75 memcpy(at91_serial_map, serial, sizeof(serial));
76
77 /* Register UARTs */
78 for (i = 0; i < AT91_NR_UART; i++) {
79 if (serial[i] >= 0)
80 at91_register_uart(i, serial[i]);
81 }
82#endif
83}
84
85static struct at91_eth_data __initdata ek_eth_data = {
86 .phy_irq_pin = AT91_PIN_PC4,
87 .is_rmii = 1,
88};
89
90static struct at91_usbh_data __initdata ek_usbh_data = {
91 .ports = 2,
92};
93
94static struct at91_udc_data __initdata ek_udc_data = {
95 .vbus_pin = AT91_PIN_PD4,
96 .pullup_pin = AT91_PIN_PD5,
97};
98
99static struct at91_mmc_data __initdata ek_mmc_data = {
100 .det_pin = AT91_PIN_PB27,
101 .is_b = 0,
102 .wire4 = 1,
103 .wp_pin = AT91_PIN_PA17,
104};
105
106static void __init ek_board_init(void)
107{
108 /* Ethernet */
109 at91_add_device_eth(&ek_eth_data);
110 /* USB Host */
111 at91_add_device_usbh(&ek_usbh_data);
112 /* USB Device */
113 at91_add_device_udc(&ek_udc_data);
114 /* MMC */
115 at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can optionally use SPI signaling (CS3). default: MMC */
116 at91_add_device_mmc(&ek_mmc_data);
117 /* VGA */
118// ek_add_device_video();
119}
120
121MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK")
122 /* Maintainer: SAN People/Atmel */
123 .phys_ram = AT91_SDRAM_BASE,
124 .phys_io = AT91_BASE_SYS,
125 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
126 .boot_params = AT91_SDRAM_BASE + 0x100,
127 .timer = &at91rm9200_timer,
128 .map_io = ek_map_io,
129 .init_irq = ek_init_irq,
130 .init_machine = ek_board_init,
131MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/clock.c b/arch/arm/mach-at91rm9200/clock.c
new file mode 100644
index 0000000000..ec8195a2a3
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/clock.c
@@ -0,0 +1,620 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/clock.c
3 *
4 * Copyright (C) 2005 David Brownell
5 * Copyright (C) 2005 Ivan Kokshaysky
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 as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 */
12
13#include <linux/module.h>
14#include <linux/kernel.h>
15#include <linux/init.h>
16#include <linux/fs.h>
17#include <linux/debugfs.h>
18#include <linux/seq_file.h>
19#include <linux/list.h>
20#include <linux/errno.h>
21#include <linux/err.h>
22#include <linux/spinlock.h>
23#include <linux/delay.h>
24#include <linux/clk.h>
25
26#include <asm/semaphore.h>
27#include <asm/io.h>
28#include <asm/mach-types.h>
29
30#include <asm/arch/hardware.h>
31#include <asm/arch/board.h> /* for master clock global */
32
33#include "generic.h"
34
35#undef DEBUG
36
37/*
38 * There's a lot more which can be done with clocks, including cpufreq
39 * integration, slow clock mode support (for system suspend), letting
40 * PLLB be used at other rates (on boards that don't need USB), etc.
41 */
42
43struct clk {
44 const char *name;
45 unsigned long rate_hz;
46 struct clk *parent;
47 u32 pmc_mask;
48 void (*mode)(struct clk *, int);
49 unsigned id:2; /* PCK0..3, or 32k/main/a/b */
50 unsigned primary:1;
51 unsigned pll:1;
52 unsigned programmable:1;
53 u16 users;
54};
55
56static spinlock_t clk_lock;
57static u32 at91_pllb_usb_init;
58
59/*
60 * Four primary clock sources: two crystal oscillators (32K, main), and
61 * two PLLs. PLLA usually runs the master clock; and PLLB must run at
62 * 48 MHz (unless no USB function clocks are needed). The main clock and
63 * both PLLs are turned off to run in "slow clock mode" (system suspend).
64 */
65static struct clk clk32k = {
66 .name = "clk32k",
67 .rate_hz = AT91_SLOW_CLOCK,
68 .users = 1, /* always on */
69 .id = 0,
70 .primary = 1,
71};
72static struct clk main_clk = {
73 .name = "main",
74 .pmc_mask = 1 << 0, /* in PMC_SR */
75 .users = 1,
76 .id = 1,
77 .primary = 1,
78};
79static struct clk plla = {
80 .name = "plla",
81 .parent = &main_clk,
82 .pmc_mask = 1 << 1, /* in PMC_SR */
83 .id = 2,
84 .primary = 1,
85 .pll = 1,
86};
87
88static void pllb_mode(struct clk *clk, int is_on)
89{
90 u32 value;
91
92 if (is_on) {
93 is_on = AT91_PMC_LOCKB;
94 value = at91_pllb_usb_init;
95 } else
96 value = 0;
97
98 at91_sys_write(AT91_CKGR_PLLBR, value);
99
100 do {
101 cpu_relax();
102 } while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKB) != is_on);
103}
104
105static struct clk pllb = {
106 .name = "pllb",
107 .parent = &main_clk,
108 .pmc_mask = 1 << 2, /* in PMC_SR */
109 .mode = pllb_mode,
110 .id = 3,
111 .primary = 1,
112 .pll = 1,
113};
114
115static void pmc_sys_mode(struct clk *clk, int is_on)
116{
117 if (is_on)
118 at91_sys_write(AT91_PMC_SCER, clk->pmc_mask);
119 else
120 at91_sys_write(AT91_PMC_SCDR, clk->pmc_mask);
121}
122
123/* USB function clocks (PLLB must be 48 MHz) */
124static struct clk udpck = {
125 .name = "udpck",
126 .parent = &pllb,
127 .pmc_mask = AT91_PMC_UDP,
128 .mode = pmc_sys_mode,
129};
130static struct clk uhpck = {
131 .name = "uhpck",
132 .parent = &pllb,
133 .pmc_mask = AT91_PMC_UHP,
134 .mode = pmc_sys_mode,
135};
136
137#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
138/*
139 * The four programmable clocks can be parented by any primary clock.
140 * You must configure pin multiplexing to bring these signals out.
141 */
142static struct clk pck0 = {
143 .name = "pck0",
144 .pmc_mask = AT91_PMC_PCK0,
145 .mode = pmc_sys_mode,
146 .programmable = 1,
147 .id = 0,
148};
149static struct clk pck1 = {
150 .name = "pck1",
151 .pmc_mask = AT91_PMC_PCK1,
152 .mode = pmc_sys_mode,
153 .programmable = 1,
154 .id = 1,
155};
156static struct clk pck2 = {
157 .name = "pck2",
158 .pmc_mask = AT91_PMC_PCK2,
159 .mode = pmc_sys_mode,
160 .programmable = 1,
161 .id = 2,
162};
163static struct clk pck3 = {
164 .name = "pck3",
165 .pmc_mask = AT91_PMC_PCK3,
166 .mode = pmc_sys_mode,
167 .programmable = 1,
168 .id = 3,
169};
170#endif /* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
171
172
173/*
174 * The master clock is divided from the CPU clock (by 1-4). It's used for
175 * memory, interfaces to on-chip peripherals, the AIC, and sometimes more
176 * (e.g baud rate generation). It's sourced from one of the primary clocks.
177 */
178static struct clk mck = {
179 .name = "mck",
180 .pmc_mask = 1 << 3, /* in PMC_SR */
181 .users = 1, /* (must be) always on */
182};
183
184static void pmc_periph_mode(struct clk *clk, int is_on)
185{
186 if (is_on)
187 at91_sys_write(AT91_PMC_PCER, clk->pmc_mask);
188 else
189 at91_sys_write(AT91_PMC_PCDR, clk->pmc_mask);
190}
191
192static struct clk udc_clk = {
193 .name = "udc_clk",
194 .parent = &mck,
195 .pmc_mask = 1 << AT91_ID_UDP,
196 .mode = pmc_periph_mode,
197};
198static struct clk ohci_clk = {
199 .name = "ohci_clk",
200 .parent = &mck,
201 .pmc_mask = 1 << AT91_ID_UHP,
202 .mode = pmc_periph_mode,
203};
204
205static struct clk *const clock_list[] = {
206 /* four primary clocks -- MUST BE FIRST! */
207 &clk32k,
208 &main_clk,
209 &plla,
210 &pllb,
211
212 /* PLLB children (USB) */
213 &udpck,
214 &uhpck,
215
216#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
217 /* programmable clocks */
218 &pck0,
219 &pck1,
220 &pck2,
221 &pck3,
222#endif /* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
223
224 /* MCK and peripherals */
225 &mck,
226 // usart0..usart3
227 // mmc
228 &udc_clk,
229 // i2c
230 // spi
231 // ssc0..ssc2
232 // tc0..tc5
233 &ohci_clk,
234 // ether
235};
236
237
238/* clocks are all static for now; no refcounting necessary */
239struct clk *clk_get(struct device *dev, const char *id)
240{
241 int i;
242
243 for (i = 0; i < ARRAY_SIZE(clock_list); i++) {
244 if (strcmp(id, clock_list[i]->name) == 0)
245 return clock_list[i];
246 }
247
248 return ERR_PTR(-ENOENT);
249}
250EXPORT_SYMBOL(clk_get);
251
252void clk_put(struct clk *clk)
253{
254}
255EXPORT_SYMBOL(clk_put);
256
257static void __clk_enable(struct clk *clk)
258{
259 if (clk->parent)
260 __clk_enable(clk->parent);
261 if (clk->users++ == 0 && clk->mode)
262 clk->mode(clk, 1);
263}
264
265int clk_enable(struct clk *clk)
266{
267 unsigned long flags;
268
269 spin_lock_irqsave(&clk_lock, flags);
270 __clk_enable(clk);
271 spin_unlock_irqrestore(&clk_lock, flags);
272 return 0;
273}
274EXPORT_SYMBOL(clk_enable);
275
276static void __clk_disable(struct clk *clk)
277{
278 BUG_ON(clk->users == 0);
279 if (--clk->users == 0 && clk->mode)
280 clk->mode(clk, 0);
281 if (clk->parent)
282 __clk_disable(clk->parent);
283}
284
285void clk_disable(struct clk *clk)
286{
287 unsigned long flags;
288
289 spin_lock_irqsave(&clk_lock, flags);
290 __clk_disable(clk);
291 spin_unlock_irqrestore(&clk_lock, flags);
292}
293EXPORT_SYMBOL(clk_disable);
294
295unsigned long clk_get_rate(struct clk *clk)
296{
297 unsigned long flags;
298 unsigned long rate;
299
300 spin_lock_irqsave(&clk_lock, flags);
301 for (;;) {
302 rate = clk->rate_hz;
303 if (rate || !clk->parent)
304 break;
305 clk = clk->parent;
306 }
307 spin_unlock_irqrestore(&clk_lock, flags);
308 return rate;
309}
310EXPORT_SYMBOL(clk_get_rate);
311
312/*------------------------------------------------------------------------*/
313
314#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
315
316/*
317 * For now, only the programmable clocks support reparenting (MCK could
318 * do this too, with care) or rate changing (the PLLs could do this too,
319 * ditto MCK but that's more for cpufreq). Drivers may reparent to get
320 * a better rate match; we don't.
321 */
322
323long clk_round_rate(struct clk *clk, unsigned long rate)
324{
325 unsigned long flags;
326 unsigned prescale;
327 unsigned long actual;
328
329 if (!clk->programmable)
330 return -EINVAL;
331 spin_lock_irqsave(&clk_lock, flags);
332
333 actual = clk->parent->rate_hz;
334 for (prescale = 0; prescale < 7; prescale++) {
335 if (actual && actual <= rate)
336 break;
337 actual >>= 1;
338 }
339
340 spin_unlock_irqrestore(&clk_lock, flags);
341 return (prescale < 7) ? actual : -ENOENT;
342}
343EXPORT_SYMBOL(clk_round_rate);
344
345int clk_set_rate(struct clk *clk, unsigned long rate)
346{
347 unsigned long flags;
348 unsigned prescale;
349 unsigned long actual;
350
351 if (!clk->programmable)
352 return -EINVAL;
353 if (clk->users)
354 return -EBUSY;
355 spin_lock_irqsave(&clk_lock, flags);
356
357 actual = clk->parent->rate_hz;
358 for (prescale = 0; prescale < 7; prescale++) {
359 if (actual && actual <= rate) {
360 u32 pckr;
361
362 pckr = at91_sys_read(AT91_PMC_PCKR(clk->id));
363 pckr &= 0x03;
364 pckr |= prescale << 2;
365 at91_sys_write(AT91_PMC_PCKR(clk->id), pckr);
366 clk->rate_hz = actual;
367 break;
368 }
369 actual >>= 1;
370 }
371
372 spin_unlock_irqrestore(&clk_lock, flags);
373 return (prescale < 7) ? actual : -ENOENT;
374}
375EXPORT_SYMBOL(clk_set_rate);
376
377struct clk *clk_get_parent(struct clk *clk)
378{
379 return clk->parent;
380}
381EXPORT_SYMBOL(clk_get_parent);
382
383int clk_set_parent(struct clk *clk, struct clk *parent)
384{
385 unsigned long flags;
386
387 if (clk->users)
388 return -EBUSY;
389 if (!parent->primary || !clk->programmable)
390 return -EINVAL;
391 spin_lock_irqsave(&clk_lock, flags);
392
393 clk->rate_hz = parent->rate_hz;
394 clk->parent = parent;
395 at91_sys_write(AT91_PMC_PCKR(clk->id), parent->id);
396
397 spin_unlock_irqrestore(&clk_lock, flags);
398 return 0;
399}
400EXPORT_SYMBOL(clk_set_parent);
401
402#endif /* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
403
404/*------------------------------------------------------------------------*/
405
406#ifdef CONFIG_DEBUG_FS
407
408static int at91_clk_show(struct seq_file *s, void *unused)
409{
410 u32 scsr, pcsr, sr;
411 unsigned i;
412
413 seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR));
414 seq_printf(s, "PCSR = %8x\n", pcsr = at91_sys_read(AT91_PMC_PCSR));
415
416 seq_printf(s, "MOR = %8x\n", at91_sys_read(AT91_CKGR_MOR));
417 seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR));
418 seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR));
419 seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR));
420
421 seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR));
422 for (i = 0; i < 4; i++)
423 seq_printf(s, "PCK%d = %8x\n", i, at91_sys_read(AT91_PMC_PCKR(i)));
424 seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR));
425
426 seq_printf(s, "\n");
427
428 for (i = 0; i < ARRAY_SIZE(clock_list); i++) {
429 char *state;
430 struct clk *clk = clock_list[i];
431
432 if (clk->mode == pmc_sys_mode)
433 state = (scsr & clk->pmc_mask) ? "on" : "off";
434 else if (clk->mode == pmc_periph_mode)
435 state = (pcsr & clk->pmc_mask) ? "on" : "off";
436 else if (clk->pmc_mask)
437 state = (sr & clk->pmc_mask) ? "on" : "off";
438 else if (clk == &clk32k || clk == &main_clk)
439 state = "on";
440 else
441 state = "";
442
443 seq_printf(s, "%-10s users=%d %-3s %9ld Hz %s\n",
444 clk->name, clk->users, state, clk_get_rate(clk),
445 clk->parent ? clk->parent->name : "");
446 }
447 return 0;
448}
449
450static int at91_clk_open(struct inode *inode, struct file *file)
451{
452 return single_open(file, at91_clk_show, NULL);
453}
454
455static struct file_operations at91_clk_operations = {
456 .open = at91_clk_open,
457 .read = seq_read,
458 .llseek = seq_lseek,
459 .release = single_release,
460};
461
462static int __init at91_clk_debugfs_init(void)
463{
464 /* /sys/kernel/debug/at91_clk */
465 (void) debugfs_create_file("at91_clk", S_IFREG | S_IRUGO, NULL, NULL, &at91_clk_operations);
466
467 return 0;
468}
469postcore_initcall(at91_clk_debugfs_init);
470
471#endif
472
473/*------------------------------------------------------------------------*/
474
475static u32 __init at91_pll_rate(struct clk *pll, u32 freq, u32 reg)
476{
477 unsigned mul, div;
478
479 div = reg & 0xff;
480 mul = (reg >> 16) & 0x7ff;
481 if (div && mul) {
482 freq /= div;
483 freq *= mul + 1;
484 } else
485 freq = 0;
486 if (pll == &pllb && (reg & (1 << 28)))
487 freq /= 2;
488 return freq;
489}
490
491static unsigned __init at91_pll_calc(unsigned main_freq, unsigned out_freq)
492{
493 unsigned i, div = 0, mul = 0, diff = 1 << 30;
494 unsigned ret = (out_freq > 155000000) ? 0xbe00 : 0x3e00;
495
496 /* PLL output max 240 MHz (or 180 MHz per errata) */
497 if (out_freq > 240000000)
498 goto fail;
499
500 for (i = 1; i < 256; i++) {
501 int diff1;
502 unsigned input, mul1;
503
504 /*
505 * PLL input between 1MHz and 32MHz per spec, but lower
506 * frequences seem necessary in some cases so allow 100K.
507 */
508 input = main_freq / i;
509 if (input < 100000)
510 continue;
511 if (input > 32000000)
512 continue;
513
514 mul1 = out_freq / input;
515 if (mul1 > 2048)
516 continue;
517 if (mul1 < 2)
518 goto fail;
519
520 diff1 = out_freq - input * mul1;
521 if (diff1 < 0)
522 diff1 = -diff1;
523 if (diff > diff1) {
524 diff = diff1;
525 div = i;
526 mul = mul1;
527 if (diff == 0)
528 break;
529 }
530 }
531 if (i == 256 && diff > (out_freq >> 5))
532 goto fail;
533 return ret | ((mul - 1) << 16) | div;
534fail:
535 return 0;
536}
537
538int __init at91_clock_init(unsigned long main_clock)
539{
540 unsigned tmp, freq, mckr;
541
542 spin_lock_init(&clk_lock);
543
544 /*
545 * When the bootloader initialized the main oscillator correctly,
546 * there's no problem using the cycle counter. But if it didn't,
547 * or when using oscillator bypass mode, we must be told the speed
548 * of the main clock.
549 */
550 if (!main_clock) {
551 do {
552 tmp = at91_sys_read(AT91_CKGR_MCFR);
553 } while (!(tmp & 0x10000));
554 main_clock = (tmp & 0xffff) * (AT91_SLOW_CLOCK / 16);
555 }
556 main_clk.rate_hz = main_clock;
557
558 /* report if PLLA is more than mildly overclocked */
559 plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_sys_read(AT91_CKGR_PLLAR));
560 if (plla.rate_hz > 209000000)
561 pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000);
562
563 /*
564 * USB clock init: choose 48 MHz PLLB value, turn all clocks off,
565 * disable 48MHz clock during usb peripheral suspend.
566 *
567 * REVISIT: assumes MCK doesn't derive from PLLB!
568 */
569 at91_pllb_usb_init = at91_pll_calc(main_clock, 48000000 * 2) | 0x10000000;
570 pllb.rate_hz = at91_pll_rate(&pllb, main_clock, at91_pllb_usb_init);
571 at91_sys_write(AT91_PMC_PCDR, (1 << AT91_ID_UHP) | (1 << AT91_ID_UDP));
572 at91_sys_write(AT91_PMC_SCDR, AT91_PMC_UHP | AT91_PMC_UDP);
573 at91_sys_write(AT91_CKGR_PLLBR, 0);
574 at91_sys_write(AT91_PMC_SCER, AT91_PMC_MCKUDP);
575
576 /*
577 * MCK and CPU derive from one of those primary clocks.
578 * For now, assume this parentage won't change.
579 */
580 mckr = at91_sys_read(AT91_PMC_MCKR);
581 mck.parent = clock_list[mckr & AT91_PMC_CSS];
582 mck.parent->users++;
583 freq = mck.parent->rate_hz;
584 freq /= (1 << ((mckr >> 2) & 3)); /* prescale */
585 mck.rate_hz = freq / (1 + ((mckr >> 8) & 3)); /* mdiv */
586
587 printk("Clocks: CPU %u MHz, master %u MHz, main %u.%03u MHz\n",
588 freq / 1000000, (unsigned) mck.rate_hz / 1000000,
589 (unsigned) main_clock / 1000000,
590 ((unsigned) main_clock % 1000000) / 1000);
591
592 /* FIXME get rid of master_clock global */
593 at91_master_clock = mck.rate_hz;
594
595#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
596 /* establish PCK0..PCK3 parentage */
597 for (tmp = 0; tmp < ARRAY_SIZE(clock_list); tmp++) {
598 struct clk *clk = clock_list[tmp], *parent;
599 u32 pckr;
600
601 if (!clk->programmable)
602 continue;
603
604 pckr = at91_sys_read(AT91_PMC_PCKR(clk->id));
605 parent = clock_list[pckr & 3];
606 clk->parent = parent;
607 clk->rate_hz = parent->rate_hz / (1 << ((pckr >> 2) & 3));
608 }
609#else
610 /* disable unused clocks */
611 at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK0 | AT91_PMC_PCK1 | AT91_PMC_PCK2 | AT91_PMC_PCK3);
612#endif /* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
613
614 /* FIXME several unused clocks may still be active... provide
615 * a CONFIG option to turn off all unused clocks at some point
616 * before driver init starts.
617 */
618
619 return 0;
620}
diff --git a/arch/arm/mach-at91rm9200/common.c b/arch/arm/mach-at91rm9200/common.c
new file mode 100644
index 0000000000..3848fd2d55
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/common.c
@@ -0,0 +1,115 @@
1/*
2 * arch/arm/mach-at91rm9200/common.c
3 *
4 * Copyright (C) 2005 SAN People
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 */
12
13#include <linux/config.h>
14#include <linux/module.h>
15
16#include <asm/mach/arch.h>
17#include <asm/mach/map.h>
18
19#include <asm/arch/hardware.h>
20
21static struct map_desc at91rm9200_io_desc[] __initdata = {
22 {
23 .virtual = AT91_VA_BASE_SYS,
24 .pfn = __phys_to_pfn(AT91_BASE_SYS),
25 .length = SZ_4K,
26 .type = MT_DEVICE,
27 }, {
28 .virtual = AT91_VA_BASE_SPI,
29 .pfn = __phys_to_pfn(AT91_BASE_SPI),
30 .length = SZ_16K,
31 .type = MT_DEVICE,
32 }, {
33 .virtual = AT91_VA_BASE_SSC2,
34 .pfn = __phys_to_pfn(AT91_BASE_SSC2),
35 .length = SZ_16K,
36 .type = MT_DEVICE,
37 }, {
38 .virtual = AT91_VA_BASE_SSC1,
39 .pfn = __phys_to_pfn(AT91_BASE_SSC1),
40 .length = SZ_16K,
41 .type = MT_DEVICE,
42 }, {
43 .virtual = AT91_VA_BASE_SSC0,
44 .pfn = __phys_to_pfn(AT91_BASE_SSC0),
45 .length = SZ_16K,
46 .type = MT_DEVICE,
47 }, {
48 .virtual = AT91_VA_BASE_US3,
49 .pfn = __phys_to_pfn(AT91_BASE_US3),
50 .length = SZ_16K,
51 .type = MT_DEVICE,
52 }, {
53 .virtual = AT91_VA_BASE_US2,
54 .pfn = __phys_to_pfn(AT91_BASE_US2),
55 .length = SZ_16K,
56 .type = MT_DEVICE,
57 }, {
58 .virtual = AT91_VA_BASE_US1,
59 .pfn = __phys_to_pfn(AT91_BASE_US1),
60 .length = SZ_16K,
61 .type = MT_DEVICE,
62 }, {
63 .virtual = AT91_VA_BASE_US0,
64 .pfn = __phys_to_pfn(AT91_BASE_US0),
65 .length = SZ_16K,
66 .type = MT_DEVICE,
67 }, {
68 .virtual = AT91_VA_BASE_EMAC,
69 .pfn = __phys_to_pfn(AT91_BASE_EMAC),
70 .length = SZ_16K,
71 .type = MT_DEVICE,
72 }, {
73 .virtual = AT91_VA_BASE_TWI,
74 .pfn = __phys_to_pfn(AT91_BASE_TWI),
75 .length = SZ_16K,
76 .type = MT_DEVICE,
77 }, {
78 .virtual = AT91_VA_BASE_MCI,
79 .pfn = __phys_to_pfn(AT91_BASE_MCI),
80 .length = SZ_16K,
81 .type = MT_DEVICE,
82 }, {
83 .virtual = AT91_VA_BASE_UDP,
84 .pfn = __phys_to_pfn(AT91_BASE_UDP),
85 .length = SZ_16K,
86 .type = MT_DEVICE,
87 }, {
88 .virtual = AT91_VA_BASE_TCB1,
89 .pfn = __phys_to_pfn(AT91_BASE_TCB1),
90 .length = SZ_16K,
91 .type = MT_DEVICE,
92 }, {
93 .virtual = AT91_VA_BASE_TCB0,
94 .pfn = __phys_to_pfn(AT91_BASE_TCB0),
95 .length = SZ_16K,
96 .type = MT_DEVICE,
97 },
98};
99
100void __init at91rm9200_map_io(void)
101{
102 iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));
103}
104
105
106unsigned long at91_master_clock;
107
108EXPORT_SYMBOL(at91_master_clock);
109
110
111int at91_serial_map[AT91_NR_UART];
112int at91_console_port;
113
114EXPORT_SYMBOL(at91_serial_map);
115EXPORT_SYMBOL(at91_console_port);
diff --git a/arch/arm/mach-at91rm9200/devices.c b/arch/arm/mach-at91rm9200/devices.c
new file mode 100644
index 0000000000..8df3e52456
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/devices.c
@@ -0,0 +1,291 @@
1/*
2 * arch/arm/mach-at91rm9200/devices.c
3 *
4 * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org>
5 * Copyright (C) 2005 David Brownell
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 as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 */
13#include <asm/mach/arch.h>
14#include <asm/mach/map.h>
15
16#include <linux/config.h>
17#include <linux/platform_device.h>
18
19#include <asm/arch/board.h>
20#include <asm/arch/pio.h>
21
22
23/* --------------------------------------------------------------------
24 * USB Host
25 * -------------------------------------------------------------------- */
26
27#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
28static u64 ohci_dmamask = 0xffffffffUL;
29static struct at91_usbh_data usbh_data;
30
31static struct resource at91rm9200_usbh_resource[] = {
32 [0] = {
33 .start = AT91_UHP_BASE,
34 .end = AT91_UHP_BASE + SZ_1M -1,
35 .flags = IORESOURCE_MEM,
36 },
37 [1] = {
38 .start = AT91_ID_UHP,
39 .end = AT91_ID_UHP,
40 .flags = IORESOURCE_IRQ,
41 },
42};
43
44static struct platform_device at91rm9200_usbh_device = {
45 .name = "at91rm9200-ohci",
46 .id = -1,
47 .dev = {
48 .dma_mask = &ohci_dmamask,
49 .coherent_dma_mask = 0xffffffff,
50 .platform_data = &usbh_data,
51 },
52 .resource = at91rm9200_usbh_resource,
53 .num_resources = ARRAY_SIZE(at91rm9200_usbh_resource),
54};
55
56void __init at91_add_device_usbh(struct at91_usbh_data *data)
57{
58 if (!data)
59 return;
60
61 usbh_data = *data;
62 platform_device_register(&at91rm9200_usbh_device);
63}
64#else
65void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
66#endif
67
68
69/* --------------------------------------------------------------------
70 * USB Device (Gadget)
71 * -------------------------------------------------------------------- */
72
73#ifdef CONFIG_USB_GADGET_AT91
74static struct at91_udc_data udc_data;
75
76static struct resource at91_udc_resources[] = {
77 {
78 .start = AT91_BASE_UDP,
79 .end = AT91_BASE_UDP + SZ_16K - 1,
80 .flags = IORESOURCE_MEM,
81 }
82};
83
84static struct platform_device at91rm9200_udc_device = {
85 .name = "at91_udc",
86 .id = -1,
87 .dev = {
88 .platform_data = &udc_data,
89 },
90 .resource = at91_udc_resources,
91 .num_resources = ARRAY_SIZE(at91_udc_resources),
92};
93
94void __init at91_add_device_udc(struct at91_udc_data *data)
95{
96 if (!data)
97 return;
98
99 if (data->vbus_pin) {
100 at91_set_gpio_input(data->vbus_pin, 0);
101 at91_set_deglitch(data->vbus_pin, 1);
102 }
103 if (data->pullup_pin)
104 at91_set_gpio_output(data->pullup_pin, 0);
105
106 udc_data = *data;
107 platform_device_register(&at91rm9200_udc_device);
108}
109#else
110void __init at91_add_device_udc(struct at91_udc_data *data) {}
111#endif
112
113
114/* --------------------------------------------------------------------
115 * Ethernet
116 * -------------------------------------------------------------------- */
117
118#if defined(CONFIG_ARM_AT91_ETHER) || defined(CONFIG_ARM_AT91_ETHER_MODULE)
119static u64 eth_dmamask = 0xffffffffUL;
120static struct at91_eth_data eth_data;
121
122static struct platform_device at91rm9200_eth_device = {
123 .name = "at91_ether",
124 .id = -1,
125 .dev = {
126 .dma_mask = &eth_dmamask,
127 .coherent_dma_mask = 0xffffffff,
128 .platform_data = &eth_data,
129 },
130 .num_resources = 0,
131};
132
133void __init at91_add_device_eth(struct at91_eth_data *data)
134{
135 if (!data)
136 return;
137
138 if (data->phy_irq_pin) {
139 at91_set_gpio_input(data->phy_irq_pin, 0);
140 at91_set_deglitch(data->phy_irq_pin, 1);
141 }
142
143 /* Pins used for MII and RMII */
144 at91_set_A_periph(AT91_PIN_PA16, 0); /* EMDIO */
145 at91_set_A_periph(AT91_PIN_PA15, 0); /* EMDC */
146 at91_set_A_periph(AT91_PIN_PA14, 0); /* ERXER */
147 at91_set_A_periph(AT91_PIN_PA13, 0); /* ERX1 */
148 at91_set_A_periph(AT91_PIN_PA12, 0); /* ERX0 */
149 at91_set_A_periph(AT91_PIN_PA11, 0); /* ECRS_ECRSDV */
150 at91_set_A_periph(AT91_PIN_PA10, 0); /* ETX1 */
151 at91_set_A_periph(AT91_PIN_PA9, 0); /* ETX0 */
152 at91_set_A_periph(AT91_PIN_PA8, 0); /* ETXEN */
153 at91_set_A_periph(AT91_PIN_PA7, 0); /* ETXCK_EREFCK */
154
155 if (!data->is_rmii) {
156 at91_set_B_periph(AT91_PIN_PB19, 0); /* ERXCK */
157 at91_set_B_periph(AT91_PIN_PB18, 0); /* ECOL */
158 at91_set_B_periph(AT91_PIN_PB17, 0); /* ERXDV */
159 at91_set_B_periph(AT91_PIN_PB16, 0); /* ERX3 */
160 at91_set_B_periph(AT91_PIN_PB15, 0); /* ERX2 */
161 at91_set_B_periph(AT91_PIN_PB14, 0); /* ETXER */
162 at91_set_B_periph(AT91_PIN_PB13, 0); /* ETX3 */
163 at91_set_B_periph(AT91_PIN_PB12, 0); /* ETX2 */
164 }
165
166 eth_data = *data;
167 platform_device_register(&at91rm9200_eth_device);
168}
169#else
170void __init at91_add_device_eth(struct at91_eth_data *data) {}
171#endif
172
173
174/* --------------------------------------------------------------------
175 * Compact Flash / PCMCIA
176 * -------------------------------------------------------------------- */
177
178#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)
179static struct at91_cf_data cf_data;
180
181static struct platform_device at91rm9200_cf_device = {
182 .name = "at91_cf",
183 .id = -1,
184 .dev = {
185 .platform_data = &cf_data,
186 },
187 .num_resources = 0,
188};
189
190void __init at91_add_device_cf(struct at91_cf_data *data)
191{
192 if (!data)
193 return;
194
195 /* input/irq */
196 if (data->irq_pin) {
197 at91_set_gpio_input(data->irq_pin, 1);
198 at91_set_deglitch(data->irq_pin, 1);
199 }
200 at91_set_gpio_input(data->det_pin, 1);
201 at91_set_deglitch(data->det_pin, 1);
202
203 /* outputs, initially off */
204 if (data->vcc_pin)
205 at91_set_gpio_output(data->vcc_pin, 0);
206 at91_set_gpio_output(data->rst_pin, 0);
207
208 cf_data = *data;
209 platform_device_register(&at91rm9200_cf_device);
210}
211#else
212void __init at91_add_device_cf(struct at91_cf_data *data) {}
213#endif
214
215
216/* --------------------------------------------------------------------
217 * MMC / SD
218 * -------------------------------------------------------------------- */
219
220#if defined(CONFIG_MMC_AT91RM9200) || defined(CONFIG_MMC_AT91RM9200_MODULE)
221static u64 mmc_dmamask = 0xffffffffUL;
222static struct at91_mmc_data mmc_data;
223
224static struct resource at91_mmc_resources[] = {
225 {
226 .start = AT91_BASE_MCI,
227 .end = AT91_BASE_MCI + SZ_16K - 1,
228 .flags = IORESOURCE_MEM,
229 }
230};
231
232static struct platform_device at91rm9200_mmc_device = {
233 .name = "at91rm9200_mci",
234 .id = -1,
235 .dev = {
236 .dma_mask = &mmc_dmamask,
237 .coherent_dma_mask = 0xffffffff,
238 .platform_data = &mmc_data,
239 },
240 .resource = at91_mmc_resources,
241 .num_resources = ARRAY_SIZE(at91_mmc_resources),
242};
243
244void __init at91_add_device_mmc(struct at91_mmc_data *data)
245{
246 if (!data)
247 return;
248
249 /* input/irq */
250 if (data->det_pin) {
251 at91_set_gpio_input(data->det_pin, 1);
252 at91_set_deglitch(data->det_pin, 1);
253 }
254 if (data->wp_pin)
255 at91_set_gpio_input(data->wp_pin, 1);
256
257 /* CLK */
258 at91_set_A_periph(AT91_PIN_PA27, 0);
259
260 if (data->is_b) {
261 /* CMD */
262 at91_set_B_periph(AT91_PIN_PA8, 0);
263
264 /* DAT0, maybe DAT1..DAT3 */
265 at91_set_B_periph(AT91_PIN_PA9, 0);
266 if (data->wire4) {
267 at91_set_B_periph(AT91_PIN_PA10, 0);
268 at91_set_B_periph(AT91_PIN_PA11, 0);
269 at91_set_B_periph(AT91_PIN_PA12, 0);
270 }
271 } else {
272 /* CMD */
273 at91_set_A_periph(AT91_PIN_PA28, 0);
274
275 /* DAT0, maybe DAT1..DAT3 */
276 at91_set_A_periph(AT91_PIN_PA29, 0);
277 if (data->wire4) {
278 at91_set_B_periph(AT91_PIN_PB3, 0);
279 at91_set_B_periph(AT91_PIN_PB4, 0);
280 at91_set_B_periph(AT91_PIN_PB5, 0);
281 }
282 }
283
284 mmc_data = *data;
285 platform_device_register(&at91rm9200_mmc_device);
286}
287#else
288void __init at91_add_device_mmc(struct at91_mmc_data *data) {}
289#endif
290
291/* -------------------------------------------------------------------- */
diff --git a/arch/arm/mach-at91rm9200/generic.h b/arch/arm/mach-at91rm9200/generic.h
new file mode 100644
index 0000000000..9bd541eba0
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/generic.h
@@ -0,0 +1,18 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/generic.h
3 *
4 * Copyright (C) 2005 David Brownell
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
11void at91_gpio_irq_setup(unsigned banks);
12
13struct sys_timer;
14extern struct sys_timer at91rm9200_timer;
15
16extern void __init at91rm9200_map_io(void);
17
18extern int __init at91_clock_init(unsigned long main_clock);
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c
new file mode 100644
index 0000000000..2fd2ef583e
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/gpio.c
@@ -0,0 +1,302 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/gpio.c
3 *
4 * Copyright (C) 2005 HP Labs
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
12#include <linux/errno.h>
13#include <linux/kernel.h>
14#include <linux/list.h>
15#include <linux/module.h>
16
17#include <asm/io.h>
18#include <asm/mach/irq.h>
19#include <asm/arch/hardware.h>
20#include <asm/arch/gpio.h>
21
22static const u32 pio_controller_offset[4] = {
23 AT91_PIOA,
24 AT91_PIOB,
25 AT91_PIOC,
26 AT91_PIOD,
27};
28
29static inline void __iomem *pin_to_controller(unsigned pin)
30{
31 void __iomem *sys_base = (void __iomem *) AT91_VA_BASE_SYS;
32
33 pin -= PIN_BASE;
34 pin /= 32;
35 if (likely(pin < BGA_GPIO_BANKS))
36 return sys_base + pio_controller_offset[pin];
37
38 return NULL;
39}
40
41static inline unsigned pin_to_mask(unsigned pin)
42{
43 pin -= PIN_BASE;
44 return 1 << (pin % 32);
45}
46
47
48/*--------------------------------------------------------------------------*/
49
50/* Not all hardware capabilities are exposed through these calls; they
51 * only encapsulate the most common features and modes. (So if you
52 * want to change signals in groups, do it directly.)
53 *
54 * Bootloaders will usually handle some of the pin multiplexing setup.
55 * The intent is certainly that by the time Linux is fully booted, all
56 * pins should have been fully initialized. These setup calls should
57 * only be used by board setup routines, or possibly in driver probe().
58 *
59 * For bootloaders doing all that setup, these calls could be inlined
60 * as NOPs so Linux won't duplicate any setup code
61 */
62
63
64/*
65 * mux the pin to the "A" internal peripheral role.
66 */
67int __init_or_module at91_set_A_periph(unsigned pin, int use_pullup)
68{
69 void __iomem *pio = pin_to_controller(pin);
70 unsigned mask = pin_to_mask(pin);
71
72 if (!pio)
73 return -EINVAL;
74
75 __raw_writel(mask, pio + PIO_IDR);
76 __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
77 __raw_writel(mask, pio + PIO_ASR);
78 __raw_writel(mask, pio + PIO_PDR);
79 return 0;
80}
81EXPORT_SYMBOL(at91_set_A_periph);
82
83
84/*
85 * mux the pin to the "B" internal peripheral role.
86 */
87int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup)
88{
89 void __iomem *pio = pin_to_controller(pin);
90 unsigned mask = pin_to_mask(pin);
91
92 if (!pio)
93 return -EINVAL;
94
95 __raw_writel(mask, pio + PIO_IDR);
96 __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
97 __raw_writel(mask, pio + PIO_BSR);
98 __raw_writel(mask, pio + PIO_PDR);
99 return 0;
100}
101EXPORT_SYMBOL(at91_set_B_periph);
102
103
104/*
105 * mux the pin to the gpio controller (instead of "A" or "B" peripheral), and
106 * configure it for an input.
107 */
108int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup)
109{
110 void __iomem *pio = pin_to_controller(pin);
111 unsigned mask = pin_to_mask(pin);
112
113 if (!pio)
114 return -EINVAL;
115
116 __raw_writel(mask, pio + PIO_IDR);
117 __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
118 __raw_writel(mask, pio + PIO_ODR);
119 __raw_writel(mask, pio + PIO_PER);
120 return 0;
121}
122EXPORT_SYMBOL(at91_set_gpio_input);
123
124
125/*
126 * mux the pin to the gpio controller (instead of "A" or "B" peripheral),
127 * and configure it for an output.
128 */
129int __init_or_module at91_set_gpio_output(unsigned pin, int value)
130{
131 void __iomem *pio = pin_to_controller(pin);
132 unsigned mask = pin_to_mask(pin);
133
134 if (!pio)
135 return -EINVAL;
136
137 __raw_writel(mask, pio + PIO_IDR);
138 __raw_writel(mask, pio + PIO_PUDR);
139 __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR));
140 __raw_writel(mask, pio + PIO_OER);
141 __raw_writel(mask, pio + PIO_PER);
142 return 0;
143}
144EXPORT_SYMBOL(at91_set_gpio_output);
145
146
147/*
148 * enable/disable the glitch filter; mostly used with IRQ handling.
149 */
150int __init_or_module at91_set_deglitch(unsigned pin, int is_on)
151{
152 void __iomem *pio = pin_to_controller(pin);
153 unsigned mask = pin_to_mask(pin);
154
155 if (!pio)
156 return -EINVAL;
157 __raw_writel(mask, pio + (is_on ? PIO_IFER : PIO_IFDR));
158 return 0;
159}
160EXPORT_SYMBOL(at91_set_deglitch);
161
162/*--------------------------------------------------------------------------*/
163
164
165/*
166 * assuming the pin is muxed as a gpio output, set its value.
167 */
168int at91_set_gpio_value(unsigned pin, int value)
169{
170 void __iomem *pio = pin_to_controller(pin);
171 unsigned mask = pin_to_mask(pin);
172
173 if (!pio)
174 return -EINVAL;
175 __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR));
176 return 0;
177}
178EXPORT_SYMBOL(at91_set_gpio_value);
179
180
181/*
182 * read the pin's value (works even if it's not muxed as a gpio).
183 */
184int at91_get_gpio_value(unsigned pin)
185{
186 void __iomem *pio = pin_to_controller(pin);
187 unsigned mask = pin_to_mask(pin);
188 u32 pdsr;
189
190 if (!pio)
191 return -EINVAL;
192 pdsr = __raw_readl(pio + PIO_PDSR);
193 return (pdsr & mask) != 0;
194}
195EXPORT_SYMBOL(at91_get_gpio_value);
196
197/*--------------------------------------------------------------------------*/
198
199
200/* Several AIC controller irqs are dispatched through this GPIO handler.
201 * To use any AT91_PIN_* as an externally triggered IRQ, first call
202 * at91_set_gpio_input() then maybe enable its glitch filter.
203 * Then just request_irq() with the pin ID; it works like any ARM IRQ
204 * handler, though it always triggers on rising and falling edges.
205 *
206 * Alternatively, certain pins may be used directly as IRQ0..IRQ6 after
207 * configuring them with at91_set_a_periph() or at91_set_b_periph().
208 * IRQ0..IRQ6 should be configurable, e.g. level vs edge triggering.
209 */
210
211static void gpio_irq_mask(unsigned pin)
212{
213 void __iomem *pio = pin_to_controller(pin);
214 unsigned mask = pin_to_mask(pin);
215
216 if (pio)
217 __raw_writel(mask, pio + PIO_IDR);
218}
219
220static void gpio_irq_unmask(unsigned pin)
221{
222 void __iomem *pio = pin_to_controller(pin);
223 unsigned mask = pin_to_mask(pin);
224
225 if (pio)
226 __raw_writel(mask, pio + PIO_IER);
227}
228
229static int gpio_irq_type(unsigned pin, unsigned type)
230{
231 return (type == IRQT_BOTHEDGE) ? 0 : -EINVAL;
232}
233
234static struct irqchip gpio_irqchip = {
235 .mask = gpio_irq_mask,
236 .unmask = gpio_irq_unmask,
237 .set_type = gpio_irq_type,
238};
239
240static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs *regs)
241{
242 unsigned pin;
243 struct irqdesc *gpio;
244 void __iomem *pio;
245 u32 isr;
246
247 pio = (void __force __iomem *) desc->chipdata;
248
249 /* temporarily mask (level sensitive) parent IRQ */
250 desc->chip->ack(irq);
251 for (;;) {
252 isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR);
253 if (!isr)
254 break;
255
256 pin = (unsigned) desc->data;
257 gpio = &irq_desc[pin];
258
259 while (isr) {
260 if (isr & 1)
261 gpio->handle(pin, gpio, regs);
262 pin++;
263 gpio++;
264 isr >>= 1;
265 }
266 }
267 desc->chip->unmask(irq);
268 /* now it may re-trigger */
269}
270
271/* call this from board-specific init_irq */
272void __init at91_gpio_irq_setup(unsigned banks)
273{
274 unsigned pioc, pin, id;
275
276 if (banks > 4)
277 banks = 4;
278 for (pioc = 0, pin = PIN_BASE, id = AT91_ID_PIOA;
279 pioc < banks;
280 pioc++, id++) {
281 void __iomem *controller;
282 unsigned i;
283
284 controller = (void __iomem *) AT91_VA_BASE_SYS + pio_controller_offset[pioc];
285 __raw_writel(~0, controller + PIO_IDR);
286
287 set_irq_data(id, (void *) pin);
288 set_irq_chipdata(id, (void __force *) controller);
289
290 for (i = 0; i < 32; i++, pin++) {
291 set_irq_chip(pin, &gpio_irqchip);
292 set_irq_handler(pin, do_simple_IRQ);
293 set_irq_flags(pin, IRQF_VALID);
294 }
295
296 set_irq_chained_handler(id, gpio_irq_handler);
297
298 /* enable the PIO peripheral clock */
299 at91_sys_write(AT91_PMC_PCER, 1 << id);
300 }
301 pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, banks);
302}
diff --git a/arch/arm/mach-at91rm9200/irq.c b/arch/arm/mach-at91rm9200/irq.c
new file mode 100644
index 0000000000..cb62bc83a1
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/irq.c
@@ -0,0 +1,170 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/irq.c
3 *
4 * Copyright (C) 2004 SAN People
5 * Copyright (C) 2004 ATMEL
6 * Copyright (C) Rick Bronson
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#include <linux/config.h>
24#include <linux/init.h>
25#include <linux/module.h>
26#include <linux/mm.h>
27#include <linux/types.h>
28
29#include <asm/hardware.h>
30#include <asm/irq.h>
31#include <asm/mach-types.h>
32#include <asm/setup.h>
33
34#include <asm/mach/arch.h>
35#include <asm/mach/irq.h>
36#include <asm/mach/map.h>
37
38#include "generic.h"
39
40/*
41 * The default interrupt priority levels (0 = lowest, 7 = highest).
42 */
43static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {
44 7, /* Advanced Interrupt Controller */
45 7, /* System Peripheral */
46 0, /* Parallel IO Controller A */
47 0, /* Parallel IO Controller B */
48 0, /* Parallel IO Controller C */
49 0, /* Parallel IO Controller D */
50 6, /* USART 0 */
51 6, /* USART 1 */
52 6, /* USART 2 */
53 6, /* USART 3 */
54 0, /* Multimedia Card Interface */
55 4, /* USB Device Port */
56 0, /* Two-Wire Interface */
57 6, /* Serial Peripheral Interface */
58 5, /* Serial Synchronous Controller */
59 5, /* Serial Synchronous Controller */
60 5, /* Serial Synchronous Controller */
61 0, /* Timer Counter 0 */
62 0, /* Timer Counter 1 */
63 0, /* Timer Counter 2 */
64 0, /* Timer Counter 3 */
65 0, /* Timer Counter 4 */
66 0, /* Timer Counter 5 */
67 3, /* USB Host port */
68 3, /* Ethernet MAC */
69 0, /* Advanced Interrupt Controller */
70 0, /* Advanced Interrupt Controller */
71 0, /* Advanced Interrupt Controller */
72 0, /* Advanced Interrupt Controller */
73 0, /* Advanced Interrupt Controller */
74 0, /* Advanced Interrupt Controller */
75 0 /* Advanced Interrupt Controller */
76};
77
78
79static void at91rm9200_mask_irq(unsigned int irq)
80{
81 /* Disable interrupt on AIC */
82 at91_sys_write(AT91_AIC_IDCR, 1 << irq);
83}
84
85static void at91rm9200_unmask_irq(unsigned int irq)
86{
87 /* Enable interrupt on AIC */
88 at91_sys_write(AT91_AIC_IECR, 1 << irq);
89}
90
91static int at91rm9200_irq_type(unsigned irq, unsigned type)
92{
93 unsigned int smr, srctype;
94
95 /* change triggering only for FIQ and external IRQ0..IRQ6 */
96 if ((irq < AT91_ID_IRQ0) && (irq != AT91_ID_FIQ))
97 return -EINVAL;
98
99 switch (type) {
100 case IRQT_HIGH:
101 srctype = AT91_AIC_SRCTYPE_HIGH;
102 break;
103 case IRQT_RISING:
104 srctype = AT91_AIC_SRCTYPE_RISING;
105 break;
106 case IRQT_LOW:
107 srctype = AT91_AIC_SRCTYPE_LOW;
108 break;
109 case IRQT_FALLING:
110 srctype = AT91_AIC_SRCTYPE_FALLING;
111 break;
112 default:
113 return -EINVAL;
114 }
115
116 smr = at91_sys_read(AT91_AIC_SMR(irq)) & ~AT91_AIC_SRCTYPE;
117 at91_sys_write(AT91_AIC_SMR(irq), smr | srctype);
118 return 0;
119}
120
121static struct irqchip at91rm9200_irq_chip = {
122 .ack = at91rm9200_mask_irq,
123 .mask = at91rm9200_mask_irq,
124 .unmask = at91rm9200_unmask_irq,
125 .set_type = at91rm9200_irq_type,
126};
127
128/*
129 * Initialize the AIC interrupt controller.
130 */
131void __init at91rm9200_init_irq(unsigned int priority[NR_AIC_IRQS])
132{
133 unsigned int i;
134
135 /* No priority list specified for this board -> use defaults */
136 if (priority == NULL)
137 priority = at91rm9200_default_irq_priority;
138
139 /*
140 * The IVR is used by macro get_irqnr_and_base to read and verify.
141 * The irq number is NR_AIC_IRQS when a spurious interrupt has occurred.
142 */
143 for (i = 0; i < NR_AIC_IRQS; i++) {
144 /* Put irq number in Source Vector Register: */
145 at91_sys_write(AT91_AIC_SVR(i), i);
146 /* Store the Source Mode Register as defined in table above */
147 at91_sys_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]);
148
149 set_irq_chip(i, &at91rm9200_irq_chip);
150 set_irq_handler(i, do_level_IRQ);
151 set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
152
153 /* Perform 8 End Of Interrupt Command to make sure AIC will not Lock out nIRQ */
154 if (i < 8)
155 at91_sys_write(AT91_AIC_EOICR, 0);
156 }
157
158 /*
159 * Spurious Interrupt ID in Spurious Vector Register is NR_AIC_IRQS
160 * When there is no current interrupt, the IRQ Vector Register reads the value stored in AIC_SPU
161 */
162 at91_sys_write(AT91_AIC_SPU, NR_AIC_IRQS);
163
164 /* No debugging in AIC: Debug (Protect) Control Register */
165 at91_sys_write(AT91_AIC_DCR, 0);
166
167 /* Disable and clear all interrupts initially */
168 at91_sys_write(AT91_AIC_IDCR, 0xFFFFFFFF);
169 at91_sys_write(AT91_AIC_ICCR, 0xFFFFFFFF);
170}
diff --git a/arch/arm/mach-at91rm9200/time.c b/arch/arm/mach-at91rm9200/time.c
new file mode 100644
index 0000000000..1b6dd2deeb
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/time.c
@@ -0,0 +1,127 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/time.c
3 *
4 * Copyright (C) 2003 SAN People
5 * Copyright (C) 2003 ATMEL
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 as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#include <linux/config.h>
23#include <linux/init.h>
24#include <linux/interrupt.h>
25#include <linux/kernel.h>
26#include <linux/sched.h>
27#include <linux/time.h>
28
29#include <asm/hardware.h>
30#include <asm/io.h>
31#include <asm/irq.h>
32#include <asm/mach/time.h>
33
34/*
35 * The ST_CRTR is updated asynchronously to the master clock. It is therefore
36 * necessary to read it twice (with the same value) to ensure accuracy.
37 */
38static inline unsigned long read_CRTR(void) {
39 unsigned long x1, x2;
40
41 do {
42 x1 = at91_sys_read(AT91_ST_CRTR);
43 x2 = at91_sys_read(AT91_ST_CRTR);
44 } while (x1 != x2);
45
46 return x1;
47}
48
49/*
50 * Returns number of microseconds since last timer interrupt. Note that interrupts
51 * will have been disabled by do_gettimeofday()
52 * 'LATCH' is hwclock ticks (see CLOCK_TICK_RATE in timex.h) per jiffy.
53 * 'tick' is usecs per jiffy (linux/timex.h).
54 */
55static unsigned long at91rm9200_gettimeoffset(void)
56{
57 unsigned long elapsed;
58
59 elapsed = (read_CRTR() - at91_sys_read(AT91_ST_RTAR)) & AT91_ST_ALMV;
60
61 return (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH;
62}
63
64/*
65 * IRQ handler for the timer.
66 */
67static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
68{
69 unsigned long rtar;
70
71 if (at91_sys_read(AT91_ST_SR) & AT91_ST_PITS) { /* This is a shared interrupt */
72 write_seqlock(&xtime_lock);
73
74 do {
75 timer_tick(regs);
76 rtar = (at91_sys_read(AT91_ST_RTAR) + LATCH) & AT91_ST_ALMV;
77 at91_sys_write(AT91_ST_RTAR, rtar);
78 } while (((read_CRTR() - at91_sys_read(AT91_ST_RTAR)) & AT91_ST_ALMV) >= LATCH);
79
80 write_sequnlock(&xtime_lock);
81
82 return IRQ_HANDLED;
83 }
84 else
85 return IRQ_NONE; /* not handled */
86}
87
88static struct irqaction at91rm9200_timer_irq = {
89 .name = "at91_tick",
90 .flags = SA_SHIRQ | SA_INTERRUPT,
91 .handler = at91rm9200_timer_interrupt
92};
93
94/*
95 * Set up timer interrupt.
96 */
97void __init at91rm9200_timer_init(void)
98{
99 /* Disable all timer interrupts */
100 at91_sys_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS);
101 (void) at91_sys_read(AT91_ST_SR); /* Clear any pending interrupts */
102
103 /*
104 * Make IRQs happen for the system timer.
105 */
106 setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq);
107
108 /* Set initial alarm to 0 */
109 at91_sys_write(AT91_ST_RTAR, 0);
110
111 /* Real time counter incremented every 30.51758 microseconds */
112 at91_sys_write(AT91_ST_RTMR, 1);
113
114 /* Set Period Interval timer */
115 at91_sys_write(AT91_ST_PIMR, LATCH);
116
117 /* Change the kernel's 'tick' value to 10009 usec. (the default is 10000) */
118 tick_usec = (LATCH * 1000000) / CLOCK_TICK_RATE;
119
120 /* Enable Period Interval Timer interrupt */
121 at91_sys_write(AT91_ST_IER, AT91_ST_PITS);
122}
123
124struct sys_timer at91rm9200_timer = {
125 .init = at91rm9200_timer_init,
126 .offset = at91rm9200_gettimeoffset,
127};
diff --git a/arch/arm/mach-clps711x/dma.c b/arch/arm/mach-clps711x/dma.c
deleted file mode 100644
index af5a4de38e..0000000000
--- a/arch/arm/mach-clps711x/dma.c
+++ /dev/null
@@ -1,27 +0,0 @@
1/*
2 * linux/arch/arm/mach-clps711x/dma.c
3 *
4 * Copyright (C) 2000 Deep Blue Solutions Ltd
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 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#include <linux/init.h>
21
22#include <asm/dma.h>
23#include <asm/mach/dma.h>
24
25void __init arch_dma_init(dma_t *dma)
26{
27}
diff --git a/arch/arm/mach-epxa10db/Kconfig b/arch/arm/mach-epxa10db/Kconfig
deleted file mode 100644
index 55d896dd49..0000000000
--- a/arch/arm/mach-epxa10db/Kconfig
+++ /dev/null
@@ -1,23 +0,0 @@
1if ARCH_CAMELOT
2
3menu "Epxa10db"
4
5comment "PLD hotswap support"
6
7config PLD
8 bool
9 default y
10
11config PLD_HOTSWAP
12 bool "Support for PLD device hotplugging (experimental)"
13 depends on EXPERIMENTAL
14 help
15 This enables support for the dynamic loading and configuration of
16 compatible drivers when the contents of the PLD are changed. This
17 is still experimental and requires configuration tools which are
18 not yet generally available. Say N here. You must enable the kernel
19 module loader for this feature to work.
20
21endmenu
22
23endif
diff --git a/arch/arm/mach-epxa10db/Makefile b/arch/arm/mach-epxa10db/Makefile
deleted file mode 100644
index 24fbd7d3a3..0000000000
--- a/arch/arm/mach-epxa10db/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
1#
2# Makefile for the linux kernel.
3#
4
5# Object file lists.
6
7obj-y := arch.o irq.o mm.o time.o
8obj-m :=
9obj-n :=
10obj- :=
11
diff --git a/arch/arm/mach-epxa10db/Makefile.boot b/arch/arm/mach-epxa10db/Makefile.boot
deleted file mode 100644
index 28bec7d3fc..0000000000
--- a/arch/arm/mach-epxa10db/Makefile.boot
+++ /dev/null
@@ -1,2 +0,0 @@
1 zreladdr-y := 0x00008000
2
diff --git a/arch/arm/mach-epxa10db/arch.c b/arch/arm/mach-epxa10db/arch.c
deleted file mode 100644
index 44c56571d1..0000000000
--- a/arch/arm/mach-epxa10db/arch.c
+++ /dev/null
@@ -1,74 +0,0 @@
1/*
2 * linux/arch/arm/mach-epxa10db/arch.c
3 *
4 * Copyright (C) 2000 Deep Blue Solutions Ltd
5 * Copyright (C) 2001 Altera Corporation
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 as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21#include <linux/types.h>
22#include <linux/init.h>
23#include <linux/serial_8250.h>
24
25#include <asm/hardware.h>
26#include <asm/setup.h>
27#include <asm/mach-types.h>
28
29#include <asm/mach/arch.h>
30
31static struct plat_serial8250_port serial_platform_data[] = {
32 {
33 .iobase = 0x3f8,
34 .irq = IRQ_UARTINT0,
35#error FIXME
36 .uartclk = 0,
37 .regshift = 0,
38 .iotype = UPIO_PORT,
39 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
40 },
41 {
42 .iobase = 0x2f8,
43 .irq = IRQ_UARTINT1,
44#error FIXME
45 .uartclk = 0,
46 .regshift = 0,
47 .iotype = UPIO_PORT,
48 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
49 },
50 { },
51};
52
53static struct platform_device serial_device = {
54 .name = "serial8250",
55 .id = PLAT8250_DEV_PLATFORM,
56 .dev = {
57 .platform_data = serial_platform_data,
58 },
59};
60
61extern void epxa10db_map_io(void);
62extern void epxa10db_init_irq(void);
63extern struct sys_timer epxa10db_timer;
64
65MACHINE_START(CAMELOT, "Altera Epxa10db")
66 /* Maintainer: Altera Corporation */
67 .phys_ram = 0x00000000,
68 .phys_io = 0x7fffc000,
69 .io_pg_offst = ((0xffffc000) >> 18) & 0xfffc,
70 .map_io = epxa10db_map_io,
71 .init_irq = epxa10db_init_irq,
72 .timer = &epxa10db_timer,
73MACHINE_END
74
diff --git a/arch/arm/mach-epxa10db/dma.c b/arch/arm/mach-epxa10db/dma.c
deleted file mode 100644
index 0151e9f1c0..0000000000
--- a/arch/arm/mach-epxa10db/dma.c
+++ /dev/null
@@ -1,28 +0,0 @@
1/*
2 * linux/arch/arm/mach-epxa10db/dma.c
3 *
4 * Copyright (C) 1999 ARM Limited
5 * Copyright (C) 2000 Deep Blue Solutions Ltd
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 as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21#include <linux/init.h>
22
23#include <asm/dma.h>
24#include <asm/mach/dma.h>
25
26void __init arch_dma_init(dma_t *dma)
27{
28}
diff --git a/arch/arm/mach-epxa10db/irq.c b/arch/arm/mach-epxa10db/irq.c
deleted file mode 100644
index 9bf927e133..0000000000
--- a/arch/arm/mach-epxa10db/irq.c
+++ /dev/null
@@ -1,82 +0,0 @@
1/*
2 * linux/arch/arm/mach-epxa10db/irq.c
3 *
4 * Copyright (C) 2001 Altera 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 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#include <linux/init.h>
21#include <linux/ioport.h>
22#include <linux/stddef.h>
23#include <linux/timer.h>
24#include <linux/list.h>
25#include <asm/io.h>
26#include <asm/hardware.h>
27#include <asm/irq.h>
28#include <asm/mach/irq.h>
29#include <asm/arch/platform.h>
30#include <asm/arch/int_ctrl00.h>
31
32
33static void epxa_mask_irq(unsigned int irq)
34{
35 writel(1 << irq, INT_MC(IO_ADDRESS(EXC_INT_CTRL00_BASE)));
36}
37
38static void epxa_unmask_irq(unsigned int irq)
39{
40 writel(1 << irq, INT_MS(IO_ADDRESS(EXC_INT_CTRL00_BASE)));
41}
42
43
44static struct irqchip epxa_irq_chip = {
45 .ack = epxa_mask_irq,
46 .mask = epxa_mask_irq,
47 .unmask = epxa_unmask_irq,
48};
49
50static struct resource irq_resource = {
51 .name = "irq_handler",
52 .start = IO_ADDRESS(EXC_INT_CTRL00_BASE),
53 .end = IO_ADDRESS(INT_PRIORITY_FC(EXC_INT_CTRL00_BASE))+4,
54};
55
56void __init epxa10db_init_irq(void)
57{
58 unsigned int i;
59
60 request_resource(&iomem_resource, &irq_resource);
61
62 /*
63 * This bit sets up the interrupt controller using
64 * the 6 PLD interrupts mode (the default) each
65 * irqs is assigned a priority which is the same
66 * as its interrupt number. This scheme is used because
67 * its easy, but you may want to change it depending
68 * on the contents of your PLD
69 */
70
71 writel(3,INT_MODE(IO_ADDRESS(EXC_INT_CTRL00_BASE)));
72 for (i = 0; i < NR_IRQS; i++){
73 writel(i+1, INT_PRIORITY_P0(IO_ADDRESS(EXC_INT_CTRL00_BASE)) + (4*i));
74 set_irq_chip(i,&epxa_irq_chip);
75 set_irq_handler(i,do_level_IRQ);
76 set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
77 }
78
79 /* Disable all interrupts */
80 writel(-1,INT_MC(IO_ADDRESS(EXC_INT_CTRL00_BASE)));
81
82}
diff --git a/arch/arm/mach-epxa10db/mm.c b/arch/arm/mach-epxa10db/mm.c
deleted file mode 100644
index cfd0d2182d..0000000000
--- a/arch/arm/mach-epxa10db/mm.c
+++ /dev/null
@@ -1,71 +0,0 @@
1/*
2 * linux/arch/arm/mach-epxa10db/mm.c
3 *
4 * MM routines for Altera'a Epxa10db board
5 *
6 * Copyright (C) 2001 Altera Corporation
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22#include <linux/kernel.h>
23#include <linux/init.h>
24
25#include <asm/hardware.h>
26#include <asm/io.h>
27#include <asm/sizes.h>
28#include <asm/page.h>
29
30#include <asm/mach/map.h>
31
32/* Page table mapping for I/O region */
33
34static struct map_desc epxa10db_io_desc[] __initdata = {
35 {
36 .virtual = IO_ADDRESS(EXC_REGISTERS_BASE),
37 .pfn = __phys_to_pfn(EXC_REGISTERS_BASE),
38 .length = SZ_16K,
39 .type = MT_DEVICE
40 }, {
41 .virtual = IO_ADDRESS(EXC_PLD_BLOCK0_BASE),
42 .pfn = __phys_to_pfn(EXC_PLD_BLOCK0_BASE),
43 .length = SZ_16K,
44 .type = MT_DEVICE
45 }, {
46 .virtual = IO_ADDRESS(EXC_PLD_BLOCK1_BASE),
47 .pfn =__phys_to_pfn(EXC_PLD_BLOCK1_BASE),
48 .length = SZ_16K,
49 .type = MT_DEVICE
50 }, {
51 .virtual = IO_ADDRESS(EXC_PLD_BLOCK2_BASE),
52 .physical = __phys_to_pfn(EXC_PLD_BLOCK2_BASE),
53 .length = SZ_16K,
54 .type = MT_DEVICE
55 }, {
56 .virtual = IO_ADDRESS(EXC_PLD_BLOCK3_BASE),
57 .pfn = __phys_to_pfn(EXC_PLD_BLOCK3_BASE),
58 .length = SZ_16K,
59 .type = MT_DEVICE
60 }, {
61 .virtual = FLASH_VADDR(EXC_EBI_BLOCK0_BASE),
62 .pfn = __phys_to_pfn(EXC_EBI_BLOCK0_BASE),
63 .length = SZ_16M,
64 .type = MT_DEVICE
65 }
66};
67
68void __init epxa10db_map_io(void)
69{
70 iotable_init(epxa10db_io_desc, ARRAY_SIZE(epxa10db_io_desc));
71}
diff --git a/arch/arm/mach-epxa10db/time.c b/arch/arm/mach-epxa10db/time.c
deleted file mode 100644
index 4b1084dde8..0000000000
--- a/arch/arm/mach-epxa10db/time.c
+++ /dev/null
@@ -1,78 +0,0 @@
1/*
2 * linux/arch/arm/mach-epxa10db/time.c
3 *
4 * Copyright (C) 2000 Deep Blue Solutions
5 * Copyright (C) 2001 Altera Corporation
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#include <linux/kernel.h>
12#include <linux/init.h>
13#include <linux/interrupt.h>
14#include <linux/sched.h>
15
16#include <asm/hardware.h>
17#include <asm/system.h>
18#include <asm/leds.h>
19
20#include <asm/mach/time.h>
21
22#define TIMER00_TYPE (volatile unsigned int*)
23#include <asm/arch/timer00.h>
24
25static int epxa10db_set_rtc(void)
26{
27 return 1;
28}
29
30static int epxa10db_rtc_init(void)
31{
32 set_rtc = epxa10db_set_rtc;
33
34 return 0;
35}
36
37__initcall(epxa10db_rtc_init);
38
39
40/*
41 * IRQ handler for the timer
42 */
43static irqreturn_t
44epxa10db_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
45{
46 write_seqlock(&xtime_lock);
47
48 // ...clear the interrupt
49 *TIMER0_CR(IO_ADDRESS(EXC_TIMER00_BASE))|=TIMER0_CR_CI_MSK;
50
51 timer_tick(regs);
52 write_sequnlock(&xtime_lock);
53
54 return IRQ_HANDLED;
55}
56
57static struct irqaction epxa10db_timer_irq = {
58 .name = "Excalibur Timer Tick",
59 .flags = SA_INTERRUPT | SA_TIMER,
60 .handler = epxa10db_timer_interrupt,
61};
62
63/*
64 * Set up timer interrupt, and return the current time in seconds.
65 */
66static void __init epxa10db_timer_init(void)
67{
68 /* Start the timer */
69 *TIMER0_LIMIT(IO_ADDRESS(EXC_TIMER00_BASE))=(unsigned int)(EXC_AHB2_CLK_FREQUENCY/200);
70 *TIMER0_PRESCALE(IO_ADDRESS(EXC_TIMER00_BASE))=1;
71 *TIMER0_CR(IO_ADDRESS(EXC_TIMER00_BASE))=TIMER0_CR_IE_MSK | TIMER0_CR_S_MSK;
72
73 setup_irq(IRQ_TIMER0, &epxa10db_timer_irq);
74}
75
76struct sys_timer epxa10db_timer = {
77 .init = epxa10db_timer_init,
78};
diff --git a/arch/arm/mach-footbridge/dma.c b/arch/arm/mach-footbridge/dma.c
index a6b1396b09..7a54578b51 100644
--- a/arch/arm/mach-footbridge/dma.c
+++ b/arch/arm/mach-footbridge/dma.c
@@ -15,6 +15,7 @@
15 15
16#include <asm/dma.h> 16#include <asm/dma.h>
17#include <asm/io.h> 17#include <asm/io.h>
18#include <asm/scatterlist.h>
18 19
19#include <asm/mach/dma.h> 20#include <asm/mach/dma.h>
20#include <asm/hardware/dec21285.h> 21#include <asm/hardware/dec21285.h>
diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c
index 775f85fc85..9e563de465 100644
--- a/arch/arm/mach-footbridge/netwinder-hw.c
+++ b/arch/arm/mach-footbridge/netwinder-hw.c
@@ -601,6 +601,7 @@ EXPORT_SYMBOL(gpio_lock);
601EXPORT_SYMBOL(gpio_modify_op); 601EXPORT_SYMBOL(gpio_modify_op);
602EXPORT_SYMBOL(gpio_modify_io); 602EXPORT_SYMBOL(gpio_modify_io);
603EXPORT_SYMBOL(cpld_modify); 603EXPORT_SYMBOL(cpld_modify);
604EXPORT_SYMBOL(gpio_read);
604 605
605/* 606/*
606 * Initialise any other hardware after we've got the PCI bus 607 * Initialise any other hardware after we've got the PCI bus
diff --git a/arch/arm/mach-imx/mx1ads.c b/arch/arm/mach-imx/mx1ads.c
index 708e1b3faa..c9e0cd8ed0 100644
--- a/arch/arm/mach-imx/mx1ads.c
+++ b/arch/arm/mach-imx/mx1ads.c
@@ -29,27 +29,27 @@
29#include "generic.h" 29#include "generic.h"
30#include <asm/serial.h> 30#include <asm/serial.h>
31 31
32static struct resource mx1ads_resources[] = { 32static struct resource cs89x0_resources[] = {
33 [0] = { 33 [0] = {
34 .start = IMX_CS4_VIRT, 34 .start = IMX_CS4_PHYS + 0x300,
35 .end = IMX_CS4_VIRT + 16, 35 .end = IMX_CS4_PHYS + 0x300 + 16,
36 .flags = IORESOURCE_MEM, 36 .flags = IORESOURCE_MEM,
37 }, 37 },
38 [1] = { 38 [1] = {
39 .start = 13, 39 .start = IRQ_GPIOC(17),
40 .end = 13, 40 .end = IRQ_GPIOC(17),
41 .flags = IORESOURCE_IRQ, 41 .flags = IORESOURCE_IRQ,
42 }, 42 },
43}; 43};
44 44
45static struct platform_device mx1ads_device = { 45static struct platform_device cs89x0_device = {
46 .name = "mx1ads", 46 .name = "cirrus-cs89x0",
47 .num_resources = ARRAY_SIZE(mx1ads_resources), 47 .num_resources = ARRAY_SIZE(cs89x0_resources),
48 .resource = mx1ads_resources, 48 .resource = cs89x0_resources,
49}; 49};
50 50
51static struct platform_device *devices[] __initdata = { 51static struct platform_device *devices[] __initdata = {
52 &mx1ads_device, 52 &cs89x0_device,
53}; 53};
54 54
55static void __init 55static void __init
@@ -61,45 +61,10 @@ mx1ads_init(void)
61 platform_add_devices(devices, ARRAY_SIZE(devices)); 61 platform_add_devices(devices, ARRAY_SIZE(devices));
62} 62}
63 63
64static struct map_desc mx1ads_io_desc[] __initdata = {
65 {
66 .virtual = IMX_CS0_VIRT,
67 .pfn = __phys_to_pfn(IMX_CS0_PHYS),
68 .length = IMX_CS0_SIZE,
69 .type = MT_DEVICE
70 }, {
71 .virtual = IMX_CS1_VIRT,
72 .pfn = __phys_to_pfn(IMX_CS1_PHYS),
73 .length = IMX_CS1_SIZE,
74 .type = MT_DEVICE
75 }, {
76 .virtual = IMX_CS2_VIRT,
77 .pfn = __phys_to_pfn(IMX_CS2_PHYS),
78 .length = IMX_CS2_SIZE,
79 .type = MT_DEVICE
80 }, {
81 .virtual = IMX_CS3_VIRT,
82 .pfn = __phys_to_pfn(IMX_CS3_PHYS),
83 .length = IMX_CS3_SIZE,
84 .type = MT_DEVICE
85 }, {
86 .virtual = IMX_CS4_VIRT,
87 .pfn = __phys_to_pfn(IMX_CS4_PHYS),
88 .length = IMX_CS4_SIZE,
89 .type = MT_DEVICE
90 }, {
91 .virtual = IMX_CS5_VIRT,
92 .pfn = __phys_to_pfn(IMX_CS5_PHYS),
93 .length = IMX_CS5_SIZE,
94 .type = MT_DEVICE
95 }
96};
97
98static void __init 64static void __init
99mx1ads_map_io(void) 65mx1ads_map_io(void)
100{ 66{
101 imx_map_io(); 67 imx_map_io();
102 iotable_init(mx1ads_io_desc, ARRAY_SIZE(mx1ads_io_desc));
103} 68}
104 69
105MACHINE_START(MX1ADS, "Motorola MX1ADS") 70MACHINE_START(MX1ADS, "Motorola MX1ADS")
diff --git a/arch/arm/mach-integrator/clock.c b/arch/arm/mach-integrator/clock.c
index 73c360685c..95a1e263f7 100644
--- a/arch/arm/mach-integrator/clock.c
+++ b/arch/arm/mach-integrator/clock.c
@@ -14,28 +14,29 @@
14#include <linux/errno.h> 14#include <linux/errno.h>
15#include <linux/err.h> 15#include <linux/err.h>
16#include <linux/string.h> 16#include <linux/string.h>
17#include <linux/clk.h>
18#include <linux/mutex.h>
17 19
18#include <asm/semaphore.h> 20#include <asm/semaphore.h>
19#include <asm/hardware/clock.h>
20#include <asm/hardware/icst525.h> 21#include <asm/hardware/icst525.h>
21 22
22#include "clock.h" 23#include "clock.h"
23 24
24static LIST_HEAD(clocks); 25static LIST_HEAD(clocks);
25static DECLARE_MUTEX(clocks_sem); 26static DEFINE_MUTEX(clocks_mutex);
26 27
27struct clk *clk_get(struct device *dev, const char *id) 28struct clk *clk_get(struct device *dev, const char *id)
28{ 29{
29 struct clk *p, *clk = ERR_PTR(-ENOENT); 30 struct clk *p, *clk = ERR_PTR(-ENOENT);
30 31
31 down(&clocks_sem); 32 mutex_lock(&clocks_mutex);
32 list_for_each_entry(p, &clocks, node) { 33 list_for_each_entry(p, &clocks, node) {
33 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 34 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
34 clk = p; 35 clk = p;
35 break; 36 break;
36 } 37 }
37 } 38 }
38 up(&clocks_sem); 39 mutex_unlock(&clocks_mutex);
39 40
40 return clk; 41 return clk;
41} 42}
@@ -58,17 +59,6 @@ void clk_disable(struct clk *clk)
58} 59}
59EXPORT_SYMBOL(clk_disable); 60EXPORT_SYMBOL(clk_disable);
60 61
61int clk_use(struct clk *clk)
62{
63 return 0;
64}
65EXPORT_SYMBOL(clk_use);
66
67void clk_unuse(struct clk *clk)
68{
69}
70EXPORT_SYMBOL(clk_unuse);
71
72unsigned long clk_get_rate(struct clk *clk) 62unsigned long clk_get_rate(struct clk *clk)
73{ 63{
74 return clk->rate; 64 return clk->rate;
@@ -118,18 +108,18 @@ static struct clk uart_clk = {
118 108
119int clk_register(struct clk *clk) 109int clk_register(struct clk *clk)
120{ 110{
121 down(&clocks_sem); 111 mutex_lock(&clocks_mutex);
122 list_add(&clk->node, &clocks); 112 list_add(&clk->node, &clocks);
123 up(&clocks_sem); 113 mutex_unlock(&clocks_mutex);
124 return 0; 114 return 0;
125} 115}
126EXPORT_SYMBOL(clk_register); 116EXPORT_SYMBOL(clk_register);
127 117
128void clk_unregister(struct clk *clk) 118void clk_unregister(struct clk *clk)
129{ 119{
130 down(&clocks_sem); 120 mutex_lock(&clocks_mutex);
131 list_del(&clk->node); 121 list_del(&clk->node);
132 up(&clocks_sem); 122 mutex_unlock(&clocks_mutex);
133} 123}
134EXPORT_SYMBOL(clk_unregister); 124EXPORT_SYMBOL(clk_unregister);
135 125
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c
index dacbf504da..20071a2767 100644
--- a/arch/arm/mach-integrator/core.c
+++ b/arch/arm/mach-integrator/core.c
@@ -15,11 +15,11 @@
15#include <linux/interrupt.h> 15#include <linux/interrupt.h>
16#include <linux/sched.h> 16#include <linux/sched.h>
17#include <linux/smp.h> 17#include <linux/smp.h>
18#include <linux/amba/bus.h>
18 19
19#include <asm/hardware.h> 20#include <asm/hardware.h>
20#include <asm/irq.h> 21#include <asm/irq.h>
21#include <asm/io.h> 22#include <asm/io.h>
22#include <asm/hardware/amba.h>
23#include <asm/hardware/arm_timer.h> 23#include <asm/hardware/arm_timer.h>
24#include <asm/arch/cm.h> 24#include <asm/arch/cm.h>
25#include <asm/system.h> 25#include <asm/system.h>
diff --git a/arch/arm/mach-integrator/dma.c b/arch/arm/mach-integrator/dma.c
deleted file mode 100644
index aae6f23cd7..0000000000
--- a/arch/arm/mach-integrator/dma.c
+++ /dev/null
@@ -1,35 +0,0 @@
1/*
2 * linux/arch/arm/mach-integrator/dma.c
3 *
4 * Copyright (C) 1999 ARM Limited
5 * Copyright (C) 2000 Deep Blue Solutions Ltd
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 as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21#include <linux/slab.h>
22#include <linux/mman.h>
23#include <linux/init.h>
24
25#include <asm/page.h>
26#include <asm/pgtable.h>
27#include <asm/dma.h>
28#include <asm/io.h>
29#include <asm/hardware.h>
30
31#include <asm/mach/dma.h>
32
33void __init arch_dma_init(dma_t *dma)
34{
35}
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c
index a4bafee77a..a85d471c5b 100644
--- a/arch/arm/mach-integrator/impd1.c
+++ b/arch/arm/mach-integrator/impd1.c
@@ -18,11 +18,11 @@
18#include <linux/device.h> 18#include <linux/device.h>
19#include <linux/errno.h> 19#include <linux/errno.h>
20#include <linux/mm.h> 20#include <linux/mm.h>
21#include <linux/amba/bus.h>
22#include <linux/amba/clcd.h>
21 23
22#include <asm/io.h> 24#include <asm/io.h>
23#include <asm/hardware/icst525.h> 25#include <asm/hardware/icst525.h>
24#include <asm/hardware/amba.h>
25#include <asm/hardware/amba_clcd.h>
26#include <asm/arch/lm.h> 26#include <asm/arch/lm.h>
27#include <asm/arch/impd1.h> 27#include <asm/arch/impd1.h>
28#include <asm/sizes.h> 28#include <asm/sizes.h>
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c
index 4c0f7c65fa..3afedeb56a 100644
--- a/arch/arm/mach-integrator/integrator_ap.c
+++ b/arch/arm/mach-integrator/integrator_ap.c
@@ -25,6 +25,8 @@
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/string.h> 26#include <linux/string.h>
27#include <linux/sysdev.h> 27#include <linux/sysdev.h>
28#include <linux/amba/bus.h>
29#include <linux/amba/kmi.h>
28 30
29#include <asm/hardware.h> 31#include <asm/hardware.h>
30#include <asm/io.h> 32#include <asm/io.h>
@@ -32,8 +34,6 @@
32#include <asm/setup.h> 34#include <asm/setup.h>
33#include <asm/param.h> /* HZ */ 35#include <asm/param.h> /* HZ */
34#include <asm/mach-types.h> 36#include <asm/mach-types.h>
35#include <asm/hardware/amba.h>
36#include <asm/hardware/amba_kmi.h>
37 37
38#include <asm/arch/lm.h> 38#include <asm/arch/lm.h>
39 39
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c
index 93f7ccb22c..16cf2482a3 100644
--- a/arch/arm/mach-integrator/integrator_cp.c
+++ b/arch/arm/mach-integrator/integrator_cp.c
@@ -16,15 +16,15 @@
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/string.h> 17#include <linux/string.h>
18#include <linux/sysdev.h> 18#include <linux/sysdev.h>
19#include <linux/amba/bus.h>
20#include <linux/amba/kmi.h>
21#include <linux/amba/clcd.h>
19 22
20#include <asm/hardware.h> 23#include <asm/hardware.h>
21#include <asm/io.h> 24#include <asm/io.h>
22#include <asm/irq.h> 25#include <asm/irq.h>
23#include <asm/setup.h> 26#include <asm/setup.h>
24#include <asm/mach-types.h> 27#include <asm/mach-types.h>
25#include <asm/hardware/amba.h>
26#include <asm/hardware/amba_kmi.h>
27#include <asm/hardware/amba_clcd.h>
28#include <asm/hardware/icst525.h> 28#include <asm/hardware/icst525.h>
29 29
30#include <asm/arch/cm.h> 30#include <asm/arch/cm.h>
diff --git a/arch/arm/mach-integrator/time.c b/arch/arm/mach-integrator/time.c
index 1a844ca139..3c22c16b38 100644
--- a/arch/arm/mach-integrator/time.c
+++ b/arch/arm/mach-integrator/time.c
@@ -14,8 +14,8 @@
14#include <linux/interrupt.h> 14#include <linux/interrupt.h>
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/device.h> 16#include <linux/device.h>
17#include <linux/amba/bus.h>
17 18
18#include <asm/hardware/amba.h>
19#include <asm/hardware.h> 19#include <asm/hardware.h>
20#include <asm/io.h> 20#include <asm/io.h>
21#include <asm/uaccess.h> 21#include <asm/uaccess.h>
@@ -96,7 +96,8 @@ static struct rtc_ops rtc_ops = {
96 .set_alarm = rtc_set_alarm, 96 .set_alarm = rtc_set_alarm,
97}; 97};
98 98
99static irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) 99static irqreturn_t arm_rtc_interrupt(int irq, void *dev_id,
100 struct pt_regs *regs)
100{ 101{
101 writel(0, rtc_base + RTC_EOI); 102 writel(0, rtc_base + RTC_EOI);
102 return IRQ_HANDLED; 103 return IRQ_HANDLED;
@@ -124,7 +125,7 @@ static int rtc_probe(struct amba_device *dev, void *id)
124 125
125 xtime.tv_sec = __raw_readl(rtc_base + RTC_DR); 126 xtime.tv_sec = __raw_readl(rtc_base + RTC_DR);
126 127
127 ret = request_irq(dev->irq[0], rtc_interrupt, SA_INTERRUPT, 128 ret = request_irq(dev->irq[0], arm_rtc_interrupt, SA_INTERRUPT,
128 "rtc-pl030", dev); 129 "rtc-pl030", dev);
129 if (ret) 130 if (ret)
130 goto map_out; 131 goto map_out;
diff --git a/arch/arm/mach-iop3xx/iop331-setup.c b/arch/arm/mach-iop3xx/iop331-setup.c
index 53f6061449..e6ea1cba6a 100644
--- a/arch/arm/mach-iop3xx/iop331-setup.c
+++ b/arch/arm/mach-iop3xx/iop331-setup.c
@@ -18,7 +18,7 @@
18#include <linux/platform_device.h> 18#include <linux/platform_device.h>
19#include <linux/serial.h> 19#include <linux/serial.h>
20#include <linux/tty.h> 20#include <linux/tty.h>
21#include <linux/serial_core.h> 21#include <linux/serial_8250.h>
22 22
23#include <asm/io.h> 23#include <asm/io.h>
24#include <asm/pgtable.h> 24#include <asm/pgtable.h>
@@ -50,32 +50,74 @@ static struct map_desc iop331_std_desc[] __initdata = {
50 } 50 }
51}; 51};
52 52
53static struct uart_port iop331_serial_ports[] = { 53static struct resource iop33x_uart0_resources[] = {
54 { 54 [0] = {
55 .membase = (char*)(IOP331_UART0_VIRT), 55 .start = IOP331_UART0_PHYS,
56 .mapbase = (IOP331_UART0_PHYS), 56 .end = IOP331_UART0_PHYS + 0x3f,
57 .irq = IRQ_IOP331_UART0, 57 .flags = IORESOURCE_MEM,
58 .flags = UPF_SKIP_TEST, 58 },
59 .iotype = UPIO_MEM, 59 [1] = {
60 .regshift = 2, 60 .start = IRQ_IOP331_UART0,
61 .uartclk = IOP331_UART_XTAL, 61 .end = IRQ_IOP331_UART0,
62 .line = 0, 62 .flags = IORESOURCE_IRQ
63 .type = PORT_XSCALE, 63 }
64 .fifosize = 32 64};
65 } , { 65
66 .membase = (char*)(IOP331_UART1_VIRT), 66static struct resource iop33x_uart1_resources[] = {
67 .mapbase = (IOP331_UART1_PHYS), 67 [0] = {
68 .irq = IRQ_IOP331_UART1, 68 .start = IOP331_UART1_PHYS,
69 .flags = UPF_SKIP_TEST, 69 .end = IOP331_UART1_PHYS + 0x3f,
70 .iotype = UPIO_MEM, 70 .flags = IORESOURCE_MEM,
71 .regshift = 2, 71 },
72 .uartclk = IOP331_UART_XTAL, 72 [1] = {
73 .line = 1, 73 .start = IRQ_IOP331_UART1,
74 .type = PORT_XSCALE, 74 .end = IRQ_IOP331_UART1,
75 .fifosize = 32 75 .flags = IORESOURCE_IRQ
76 } 76 }
77}; 77};
78 78
79static struct plat_serial8250_port iop33x_uart0_data[] = {
80 {
81 .membase = (char*)(IOP331_UART0_VIRT),
82 .mapbase = (IOP331_UART0_PHYS),
83 .irq = IRQ_IOP331_UART0,
84 .uartclk = IOP331_UART_XTAL,
85 .regshift = 2,
86 .iotype = UPIO_MEM,
87 .flags = UPF_SKIP_TEST,
88 },
89 { },
90};
91
92static struct plat_serial8250_port iop33x_uart1_data[] = {
93 {
94 .membase = (char*)(IOP331_UART1_VIRT),
95 .mapbase = (IOP331_UART1_PHYS),
96 .irq = IRQ_IOP331_UART1,
97 .uartclk = IOP331_UART_XTAL,
98 .regshift = 2,
99 .iotype = UPIO_MEM,
100 .flags = UPF_SKIP_TEST,
101 },
102 { },
103};
104
105static struct platform_device iop33x_uart0 = {
106 .name = "serial8250",
107 .id = 0,
108 .dev.platform_data = iop33x_uart0_data,
109 .num_resources = 2,
110 .resource = iop33x_uart0_resources,
111};
112
113static struct platform_device iop33x_uart1 = {
114 .name = "serial8250",
115 .id = 1,
116 .dev.platform_data = iop33x_uart1_data,
117 .num_resources = 2,
118 .resource = iop33x_uart1_resources,
119};
120
79static struct resource iop33x_i2c_0_resources[] = { 121static struct resource iop33x_i2c_0_resources[] = {
80 [0] = { 122 [0] = {
81 .start = 0xfffff680, 123 .start = 0xfffff680,
@@ -117,6 +159,8 @@ static struct platform_device iop33x_i2c_1_controller = {
117}; 159};
118 160
119static struct platform_device *iop33x_devices[] __initdata = { 161static struct platform_device *iop33x_devices[] __initdata = {
162 &iop33x_uart0,
163 &iop33x_uart1,
120 &iop33x_i2c_0_controller, 164 &iop33x_i2c_0_controller,
121 &iop33x_i2c_1_controller 165 &iop33x_i2c_1_controller
122}; 166};
@@ -133,8 +177,6 @@ void __init iop33x_init(void)
133void __init iop331_map_io(void) 177void __init iop331_map_io(void)
134{ 178{
135 iotable_init(iop331_std_desc, ARRAY_SIZE(iop331_std_desc)); 179 iotable_init(iop331_std_desc, ARRAY_SIZE(iop331_std_desc));
136 early_serial_setup(&iop331_serial_ports[0]);
137 early_serial_setup(&iop331_serial_ports[1]);
138} 180}
139 181
140#ifdef CONFIG_ARCH_IOP331 182#ifdef CONFIG_ARCH_IOP331
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig
index 385285851c..daadc78e27 100644
--- a/arch/arm/mach-ixp4xx/Kconfig
+++ b/arch/arm/mach-ixp4xx/Kconfig
@@ -71,6 +71,14 @@ config ARCH_PRPMC1100
71 PrPCM1100 Processor Mezanine Module. For more information on 71 PrPCM1100 Processor Mezanine Module. For more information on
72 this platform, see <file:Documentation/arm/IXP4xx>. 72 this platform, see <file:Documentation/arm/IXP4xx>.
73 73
74config MACH_NAS100D
75 bool
76 prompt "NAS100D"
77 help
78 Say 'Y' here if you want your kernel to support Iomega's
79 NAS 100d device. For more information on this platform,
80 see http://www.nslu2-linux.org/wiki/NAS100d/HomePage
81
74# 82#
75# Avila and IXDP share the same source for now. Will change in future 83# Avila and IXDP share the same source for now. Will change in future
76# 84#
diff --git a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile
index 7a15629c18..0471044fa1 100644
--- a/arch/arm/mach-ixp4xx/Makefile
+++ b/arch/arm/mach-ixp4xx/Makefile
@@ -9,4 +9,5 @@ obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o coyote-setup.o
9obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o 9obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o
10obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o 10obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o
11obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o 11obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o
12obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o
12 13
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c
index 9795da270e..6e3462ed53 100644
--- a/arch/arm/mach-ixp4xx/common-pci.c
+++ b/arch/arm/mach-ixp4xx/common-pci.c
@@ -341,6 +341,29 @@ int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
341 return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M); 341 return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M);
342} 342}
343 343
344/*
345 * Only first 64MB of memory can be accessed via PCI.
346 * We use GFP_DMA to allocate safe buffers to do map/unmap.
347 * This is really ugly and we need a better way of specifying
348 * DMA-capable regions of memory.
349 */
350void __init ixp4xx_adjust_zones(int node, unsigned long *zone_size,
351 unsigned long *zhole_size)
352{
353 unsigned int sz = SZ_64M >> PAGE_SHIFT;
354
355 /*
356 * Only adjust if > 64M on current system
357 */
358 if (node || (zone_size[0] <= sz))
359 return;
360
361 zone_size[1] = zone_size[0] - sz;
362 zone_size[0] = sz;
363 zhole_size[1] = zhole_size[0];
364 zhole_size[0] = 0;
365}
366
344void __init ixp4xx_pci_preinit(void) 367void __init ixp4xx_pci_preinit(void)
345{ 368{
346 unsigned long processor_id; 369 unsigned long processor_id;
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
index f3c687cf00..6b393691d0 100644
--- a/arch/arm/mach-ixp4xx/common.c
+++ b/arch/arm/mach-ixp4xx/common.c
@@ -142,6 +142,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
142 *int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR << 142 *int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR <<
143 (line * IXP4XX_GPIO_STYLE_SIZE)); 143 (line * IXP4XX_GPIO_STYLE_SIZE));
144 144
145 *IXP4XX_GPIO_GPISR = (1 << line);
146
145 /* Set the new style */ 147 /* Set the new style */
146 *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); 148 *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE));
147 149
@@ -169,7 +171,7 @@ static void ixp4xx_irq_ack(unsigned int irq)
169 int line = (irq < 32) ? irq2gpio[irq] : -1; 171 int line = (irq < 32) ? irq2gpio[irq] : -1;
170 172
171 if (line >= 0) 173 if (line >= 0)
172 gpio_line_isr_clear(line); 174 *IXP4XX_GPIO_GPISR = (1 << line);
173} 175}
174 176
175/* 177/*
@@ -330,11 +332,27 @@ static struct platform_device *ixp46x_devices[] __initdata = {
330 &ixp46x_i2c_controller 332 &ixp46x_i2c_controller
331}; 333};
332 334
335unsigned long ixp4xx_exp_bus_size;
336
333void __init ixp4xx_sys_init(void) 337void __init ixp4xx_sys_init(void)
334{ 338{
339 ixp4xx_exp_bus_size = SZ_16M;
340
335 if (cpu_is_ixp46x()) { 341 if (cpu_is_ixp46x()) {
342 int region;
343
336 platform_add_devices(ixp46x_devices, 344 platform_add_devices(ixp46x_devices,
337 ARRAY_SIZE(ixp46x_devices)); 345 ARRAY_SIZE(ixp46x_devices));
346
347 for (region = 0; region < 7; region++) {
348 if((*(IXP4XX_EXP_REG(0x4 * region)) & 0x200)) {
349 ixp4xx_exp_bus_size = SZ_32M;
350 break;
351 }
352 }
338 } 353 }
354
355 printk("IXP4xx: Using %uMiB expansion bus window size\n",
356 ixp4xx_exp_bus_size >> 20);
339} 357}
340 358
diff --git a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c
index 60de8a94cf..e6b7fcd923 100644
--- a/arch/arm/mach-ixp4xx/coyote-pci.c
+++ b/arch/arm/mach-ixp4xx/coyote-pci.c
@@ -33,9 +33,6 @@ void __init coyote_pci_preinit(void)
33 set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW); 33 set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW);
34 set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQT_LOW); 34 set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQT_LOW);
35 35
36 gpio_line_isr_clear(COYOTE_PCI_SLOT0_PIN);
37 gpio_line_isr_clear(COYOTE_PCI_SLOT1_PIN);
38
39 ixp4xx_pci_preinit(); 36 ixp4xx_pci_preinit();
40} 37}
41 38
diff --git a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c
index 050c927689..679594a739 100644
--- a/arch/arm/mach-ixp4xx/coyote-setup.c
+++ b/arch/arm/mach-ixp4xx/coyote-setup.c
@@ -14,6 +14,7 @@
14#include <linux/serial.h> 14#include <linux/serial.h>
15#include <linux/tty.h> 15#include <linux/tty.h>
16#include <linux/serial_8250.h> 16#include <linux/serial_8250.h>
17#include <linux/slab.h>
17 18
18#include <asm/types.h> 19#include <asm/types.h>
19#include <asm/setup.h> 20#include <asm/setup.h>
@@ -30,8 +31,6 @@ static struct flash_platform_data coyote_flash_data = {
30}; 31};
31 32
32static struct resource coyote_flash_resource = { 33static struct resource coyote_flash_resource = {
33 .start = COYOTE_FLASH_BASE,
34 .end = COYOTE_FLASH_BASE + COYOTE_FLASH_SIZE - 1,
35 .flags = IORESOURCE_MEM, 34 .flags = IORESOURCE_MEM,
36}; 35};
37 36
@@ -81,6 +80,11 @@ static struct platform_device *coyote_devices[] __initdata = {
81 80
82static void __init coyote_init(void) 81static void __init coyote_init(void)
83{ 82{
83 ixp4xx_sys_init();
84
85 coyote_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
86 coyote_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_32M - 1;
87
84 *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; 88 *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE;
85 *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; 89 *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0;
86 90
@@ -91,8 +95,6 @@ static void __init coyote_init(void)
91 coyote_uart_data[0].irq = IRQ_IXP4XX_UART1; 95 coyote_uart_data[0].irq = IRQ_IXP4XX_UART1;
92 } 96 }
93 97
94
95 ixp4xx_sys_init();
96 platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices)); 98 platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices));
97} 99}
98 100
diff --git a/arch/arm/mach-ixp4xx/gtwx5715-setup.c b/arch/arm/mach-ixp4xx/gtwx5715-setup.c
index 29a6d02fa8..0386704899 100644
--- a/arch/arm/mach-ixp4xx/gtwx5715-setup.c
+++ b/arch/arm/mach-ixp4xx/gtwx5715-setup.c
@@ -27,6 +27,7 @@
27#include <linux/serial.h> 27#include <linux/serial.h>
28#include <linux/tty.h> 28#include <linux/tty.h>
29#include <linux/serial_8250.h> 29#include <linux/serial_8250.h>
30#include <linux/slab.h>
30 31
31#include <asm/types.h> 32#include <asm/types.h>
32#include <asm/setup.h> 33#include <asm/setup.h>
@@ -106,11 +107,9 @@ static struct flash_platform_data gtwx5715_flash_data = {
106 .width = 2, 107 .width = 2,
107}; 108};
108 109
109static struct resource gtwx5715_flash_resource = { 110static struct gtw5715_flash_resource = {
110 .start = GTWX5715_FLASH_BASE,
111 .end = GTWX5715_FLASH_BASE + GTWX5715_FLASH_SIZE - 1,
112 .flags = IORESOURCE_MEM, 111 .flags = IORESOURCE_MEM,
113}; 112}
114 113
115static struct platform_device gtwx5715_flash = { 114static struct platform_device gtwx5715_flash = {
116 .name = "IXP4XX-Flash", 115 .name = "IXP4XX-Flash",
@@ -129,6 +128,14 @@ static struct platform_device *gtwx5715_devices[] __initdata = {
129 128
130static void __init gtwx5715_init(void) 129static void __init gtwx5715_init(void)
131{ 130{
131 ixp4xx_sys_init();
132
133 if (!flash_resource)
134 printk(KERN_ERR "Could not allocate flash resource\n");
135
136 gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
137 gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1;
138
132 platform_add_devices(gtwx5715_devices, ARRAY_SIZE(gtwx5715_devices)); 139 platform_add_devices(gtwx5715_devices, ARRAY_SIZE(gtwx5715_devices));
133} 140}
134 141
diff --git a/arch/arm/mach-ixp4xx/ixdp425-pci.c b/arch/arm/mach-ixp4xx/ixdp425-pci.c
index f9a1d3e7d6..da415d5d7f 100644
--- a/arch/arm/mach-ixp4xx/ixdp425-pci.c
+++ b/arch/arm/mach-ixp4xx/ixdp425-pci.c
@@ -32,11 +32,6 @@ void __init ixdp425_pci_preinit(void)
32 set_irq_type(IRQ_IXDP425_PCI_INTC, IRQT_LOW); 32 set_irq_type(IRQ_IXDP425_PCI_INTC, IRQT_LOW);
33 set_irq_type(IRQ_IXDP425_PCI_INTD, IRQT_LOW); 33 set_irq_type(IRQ_IXDP425_PCI_INTD, IRQT_LOW);
34 34
35 gpio_line_isr_clear(IXDP425_PCI_INTA_PIN);
36 gpio_line_isr_clear(IXDP425_PCI_INTB_PIN);
37 gpio_line_isr_clear(IXDP425_PCI_INTC_PIN);
38 gpio_line_isr_clear(IXDP425_PCI_INTD_PIN);
39
40 ixp4xx_pci_preinit(); 35 ixp4xx_pci_preinit();
41} 36}
42 37
diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c
index 3a22d84e10..c2e105c89c 100644
--- a/arch/arm/mach-ixp4xx/ixdp425-setup.c
+++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c
@@ -14,6 +14,7 @@
14#include <linux/serial.h> 14#include <linux/serial.h>
15#include <linux/tty.h> 15#include <linux/tty.h>
16#include <linux/serial_8250.h> 16#include <linux/serial_8250.h>
17#include <linux/slab.h>
17 18
18#include <asm/types.h> 19#include <asm/types.h>
19#include <asm/setup.h> 20#include <asm/setup.h>
@@ -30,8 +31,6 @@ static struct flash_platform_data ixdp425_flash_data = {
30}; 31};
31 32
32static struct resource ixdp425_flash_resource = { 33static struct resource ixdp425_flash_resource = {
33 .start = IXDP425_FLASH_BASE,
34 .end = IXDP425_FLASH_BASE + IXDP425_FLASH_SIZE - 1,
35 .flags = IORESOURCE_MEM, 34 .flags = IORESOURCE_MEM,
36}; 35};
37 36
@@ -108,17 +107,13 @@ static struct platform_device *ixdp425_devices[] __initdata = {
108 &ixdp425_uart 107 &ixdp425_uart
109}; 108};
110 109
111
112static void __init ixdp425_init(void) 110static void __init ixdp425_init(void)
113{ 111{
114 ixp4xx_sys_init(); 112 ixp4xx_sys_init();
115 113
116 /* 114 ixdp425_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
117 * IXP465 has 32MB window 115 ixdp425_flash_resource.end =
118 */ 116 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
119 if (machine_is_ixdp465()) {
120 ixdp425_flash_resource.end += IXDP425_FLASH_SIZE;
121 }
122 117
123 platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices)); 118 platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
124} 119}
diff --git a/arch/arm/mach-ixp4xx/ixdpg425-pci.c b/arch/arm/mach-ixp4xx/ixdpg425-pci.c
index fe5e7660de..526fb6175b 100644
--- a/arch/arm/mach-ixp4xx/ixdpg425-pci.c
+++ b/arch/arm/mach-ixp4xx/ixdpg425-pci.c
@@ -32,9 +32,6 @@ void __init ixdpg425_pci_preinit(void)
32 set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); 32 set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW);
33 set_irq_type(IRQ_IXP4XX_GPIO7, IRQT_LOW); 33 set_irq_type(IRQ_IXP4XX_GPIO7, IRQT_LOW);
34 34
35 gpio_line_isr_clear(6);
36 gpio_line_isr_clear(7);
37
38 ixp4xx_pci_preinit(); 35 ixp4xx_pci_preinit();
39} 36}
40 37
diff --git a/arch/arm/mach-ixp4xx/nas100d-pci.c b/arch/arm/mach-ixp4xx/nas100d-pci.c
new file mode 100644
index 0000000000..26b7c001ff
--- /dev/null
+++ b/arch/arm/mach-ixp4xx/nas100d-pci.c
@@ -0,0 +1,71 @@
1/*
2 * arch/arm/mach-ixp4xx/nas100d-pci.c
3 *
4 * NAS 100d board-level PCI initialization
5 *
6 * based on ixdp425-pci.c:
7 * Copyright (C) 2002 Intel Corporation.
8 * Copyright (C) 2003-2004 MontaVista Software, Inc.
9 *
10 * Maintainer: http://www.nslu2-linux.org/
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 *
16 */
17
18#include <linux/config.h>
19#include <linux/pci.h>
20#include <linux/init.h>
21
22#include <asm/mach/pci.h>
23#include <asm/mach-types.h>
24
25void __init nas100d_pci_preinit(void)
26{
27 set_irq_type(IRQ_NAS100D_PCI_INTA, IRQT_LOW);
28 set_irq_type(IRQ_NAS100D_PCI_INTB, IRQT_LOW);
29 set_irq_type(IRQ_NAS100D_PCI_INTC, IRQT_LOW);
30 set_irq_type(IRQ_NAS100D_PCI_INTD, IRQT_LOW);
31 set_irq_type(IRQ_NAS100D_PCI_INTE, IRQT_LOW);
32
33 ixp4xx_pci_preinit();
34}
35
36static int __init nas100d_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
37{
38 static int pci_irq_table[NAS100D_PCI_MAX_DEV][NAS100D_PCI_IRQ_LINES] =
39 {
40 { IRQ_NAS100D_PCI_INTA, -1, -1 },
41 { IRQ_NAS100D_PCI_INTB, -1, -1 },
42 { IRQ_NAS100D_PCI_INTC, IRQ_NAS100D_PCI_INTD, IRQ_NAS100D_PCI_INTE },
43 };
44
45 int irq = -1;
46
47 if (slot >= 1 && slot <= NAS100D_PCI_MAX_DEV &&
48 pin >= 1 && pin <= NAS100D_PCI_IRQ_LINES)
49 irq = pci_irq_table[slot-1][pin-1];
50
51 return irq;
52}
53
54struct hw_pci __initdata nas100d_pci = {
55 .nr_controllers = 1,
56 .preinit = nas100d_pci_preinit,
57 .swizzle = pci_std_swizzle,
58 .setup = ixp4xx_setup,
59 .scan = ixp4xx_scan_bus,
60 .map_irq = nas100d_map_irq,
61};
62
63int __init nas100d_pci_init(void)
64{
65 if (machine_is_nas100d())
66 pci_common_init(&nas100d_pci);
67
68 return 0;
69}
70
71subsys_initcall(nas100d_pci_init);
diff --git a/arch/arm/mach-ixp4xx/nas100d-power.c b/arch/arm/mach-ixp4xx/nas100d-power.c
new file mode 100644
index 0000000000..2bec69bfa7
--- /dev/null
+++ b/arch/arm/mach-ixp4xx/nas100d-power.c
@@ -0,0 +1,67 @@
1/*
2 * arch/arm/mach-ixp4xx/nas100d-power.c
3 *
4 * NAS 100d Power/Reset driver
5 *
6 * Copyright (C) 2005 Tower Technologies
7 *
8 * based on nas100d-io.c
9 * Copyright (C) 2004 Karen Spearel
10 *
11 * Author: Alessandro Zummo <a.zummo@towertech.it>
12 * Maintainers: http://www.nslu2-linux.org/
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 *
18 */
19
20#include <linux/module.h>
21#include <linux/reboot.h>
22#include <linux/interrupt.h>
23
24#include <asm/mach-types.h>
25
26extern void ctrl_alt_del(void);
27
28static irqreturn_t nas100d_reset_handler(int irq, void *dev_id, struct pt_regs *regs)
29{
30 /* Signal init to do the ctrlaltdel action, this will bypass init if
31 * it hasn't started and do a kernel_restart.
32 */
33 ctrl_alt_del();
34
35 return IRQ_HANDLED;
36}
37
38static int __init nas100d_power_init(void)
39{
40 if (!(machine_is_nas100d()))
41 return 0;
42
43 set_irq_type(NAS100D_RB_IRQ, IRQT_LOW);
44
45 if (request_irq(NAS100D_RB_IRQ, &nas100d_reset_handler,
46 SA_INTERRUPT, "NAS100D reset button", NULL) < 0) {
47
48 printk(KERN_DEBUG "Reset Button IRQ %d not available\n",
49 NAS100D_RB_IRQ);
50
51 return -EIO;
52 }
53
54 return 0;
55}
56
57static void __exit nas100d_power_exit(void)
58{
59 free_irq(NAS100D_RB_IRQ, NULL);
60}
61
62module_init(nas100d_power_init);
63module_exit(nas100d_power_exit);
64
65MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
66MODULE_DESCRIPTION("NAS100D Power/Reset driver");
67MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c
new file mode 100644
index 0000000000..49998a8bd4
--- /dev/null
+++ b/arch/arm/mach-ixp4xx/nas100d-setup.c
@@ -0,0 +1,135 @@
1/*
2 * arch/arm/mach-ixp4xx/nas100d-setup.c
3 *
4 * NAS 100d board-setup
5 *
6 * based ixdp425-setup.c:
7 * Copyright (C) 2003-2004 MontaVista Software, Inc.
8 *
9 * Author: Alessandro Zummo <a.zummo@towertech.it>
10 * Author: Rod Whitby <rod@whitby.id.au>
11 * Maintainers: http://www.nslu2-linux.org/
12 *
13 */
14
15#include <linux/kernel.h>
16#include <linux/serial.h>
17#include <linux/serial_8250.h>
18
19#include <asm/mach-types.h>
20#include <asm/mach/arch.h>
21#include <asm/mach/flash.h>
22
23static struct flash_platform_data nas100d_flash_data = {
24 .map_name = "cfi_probe",
25 .width = 2,
26};
27
28static struct resource nas100d_flash_resource = {
29 .flags = IORESOURCE_MEM,
30};
31
32static struct platform_device nas100d_flash = {
33 .name = "IXP4XX-Flash",
34 .id = 0,
35 .dev.platform_data = &nas100d_flash_data,
36 .num_resources = 1,
37 .resource = &nas100d_flash_resource,
38};
39
40static struct ixp4xx_i2c_pins nas100d_i2c_gpio_pins = {
41 .sda_pin = NAS100D_SDA_PIN,
42 .scl_pin = NAS100D_SCL_PIN,
43};
44
45static struct platform_device nas100d_i2c_controller = {
46 .name = "IXP4XX-I2C",
47 .id = 0,
48 .dev.platform_data = &nas100d_i2c_gpio_pins,
49 .num_resources = 0,
50};
51
52static struct resource nas100d_uart_resources[] = {
53 {
54 .start = IXP4XX_UART1_BASE_PHYS,
55 .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
56 .flags = IORESOURCE_MEM,
57 },
58 {
59 .start = IXP4XX_UART2_BASE_PHYS,
60 .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
61 .flags = IORESOURCE_MEM,
62 }
63};
64
65static struct plat_serial8250_port nas100d_uart_data[] = {
66 {
67 .mapbase = IXP4XX_UART1_BASE_PHYS,
68 .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
69 .irq = IRQ_IXP4XX_UART1,
70 .flags = UPF_BOOT_AUTOCONF,
71 .iotype = UPIO_MEM,
72 .regshift = 2,
73 .uartclk = IXP4XX_UART_XTAL,
74 },
75 {
76 .mapbase = IXP4XX_UART2_BASE_PHYS,
77 .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
78 .irq = IRQ_IXP4XX_UART2,
79 .flags = UPF_BOOT_AUTOCONF,
80 .iotype = UPIO_MEM,
81 .regshift = 2,
82 .uartclk = IXP4XX_UART_XTAL,
83 },
84 { }
85};
86
87static struct platform_device nas100d_uart = {
88 .name = "serial8250",
89 .id = PLAT8250_DEV_PLATFORM,
90 .dev.platform_data = nas100d_uart_data,
91 .num_resources = 2,
92 .resource = nas100d_uart_resources,
93};
94
95static struct platform_device *nas100d_devices[] __initdata = {
96 &nas100d_i2c_controller,
97 &nas100d_flash,
98 &nas100d_uart,
99};
100
101static void nas100d_power_off(void)
102{
103 /* This causes the box to drop the power and go dead. */
104
105 /* enable the pwr cntl gpio */
106 gpio_line_config(NAS100D_PO_GPIO, IXP4XX_GPIO_OUT);
107
108 /* do the deed */
109 gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH);
110}
111
112static void __init nas100d_init(void)
113{
114 ixp4xx_sys_init();
115
116 nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
117 nas100d_flash_resource.end =
118 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
119
120 pm_power_off = nas100d_power_off;
121
122 platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
123}
124
125MACHINE_START(NAS100D, "Iomega NAS 100d")
126 /* Maintainer: www.nslu2-linux.org */
127 .phys_ram = PHYS_OFFSET,
128 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
129 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
130 .boot_params = 0x00000100,
131 .map_io = ixp4xx_map_io,
132 .init_irq = ixp4xx_init_irq,
133 .timer = &ixp4xx_timer,
134 .init_machine = nas100d_init,
135MACHINE_END
diff --git a/arch/arm/mach-ixp4xx/nslu2-pci.c b/arch/arm/mach-ixp4xx/nslu2-pci.c
index a575f2e0b2..ece860444d 100644
--- a/arch/arm/mach-ixp4xx/nslu2-pci.c
+++ b/arch/arm/mach-ixp4xx/nslu2-pci.c
@@ -28,14 +28,6 @@ void __init nslu2_pci_preinit(void)
28 set_irq_type(IRQ_NSLU2_PCI_INTB, IRQT_LOW); 28 set_irq_type(IRQ_NSLU2_PCI_INTB, IRQT_LOW);
29 set_irq_type(IRQ_NSLU2_PCI_INTC, IRQT_LOW); 29 set_irq_type(IRQ_NSLU2_PCI_INTC, IRQT_LOW);
30 30
31 gpio_line_isr_clear(NSLU2_PCI_INTA_PIN);
32 gpio_line_isr_clear(NSLU2_PCI_INTB_PIN);
33 gpio_line_isr_clear(NSLU2_PCI_INTC_PIN);
34
35 /* INTD is not configured as GPIO is used
36 * for the power input button.
37 */
38
39 ixp4xx_pci_preinit(); 31 ixp4xx_pci_preinit();
40} 32}
41 33
diff --git a/arch/arm/mach-ixp4xx/nslu2-power.c b/arch/arm/mach-ixp4xx/nslu2-power.c
index 18fbc8c0fb..b0ad9e901f 100644
--- a/arch/arm/mach-ixp4xx/nslu2-power.c
+++ b/arch/arm/mach-ixp4xx/nslu2-power.c
@@ -54,9 +54,6 @@ static int __init nslu2_power_init(void)
54 set_irq_type(NSLU2_RB_IRQ, IRQT_LOW); 54 set_irq_type(NSLU2_RB_IRQ, IRQT_LOW);
55 set_irq_type(NSLU2_PB_IRQ, IRQT_HIGH); 55 set_irq_type(NSLU2_PB_IRQ, IRQT_HIGH);
56 56
57 gpio_line_isr_clear(NSLU2_RB_GPIO);
58 gpio_line_isr_clear(NSLU2_PB_GPIO);
59
60 if (request_irq(NSLU2_RB_IRQ, &nslu2_reset_handler, 57 if (request_irq(NSLU2_RB_IRQ, &nslu2_reset_handler,
61 SA_INTERRUPT, "NSLU2 reset button", NULL) < 0) { 58 SA_INTERRUPT, "NSLU2 reset button", NULL) < 0) {
62 59
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c
index 540b20d78c..5c975eb5c3 100644
--- a/arch/arm/mach-omap1/board-palmte.c
+++ b/arch/arm/mach-omap1/board-palmte.c
@@ -19,6 +19,7 @@
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/platform_device.h> 20#include <linux/platform_device.h>
21#include <linux/notifier.h> 21#include <linux/notifier.h>
22#include <linux/clk.h>
22 23
23#include <asm/hardware.h> 24#include <asm/hardware.h>
24#include <asm/mach-types.h> 25#include <asm/mach-types.h>
@@ -30,7 +31,6 @@
30#include <asm/arch/usb.h> 31#include <asm/arch/usb.h>
31#include <asm/arch/board.h> 32#include <asm/arch/board.h>
32#include <asm/arch/common.h> 33#include <asm/arch/common.h>
33#include <asm/hardware/clock.h>
34 34
35static void __init omap_generic_init_irq(void) 35static void __init omap_generic_init_irq(void)
36{ 36{
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c
index bd900b7ab3..92ff5dc073 100644
--- a/arch/arm/mach-omap1/board-perseus2.c
+++ b/arch/arm/mach-omap1/board-perseus2.c
@@ -184,7 +184,7 @@ static void __init omap_perseus2_map_io(void)
184 omap_writel(0x00000088, OMAP730_FLASH_ACFG_0); 184 omap_writel(0x00000088, OMAP730_FLASH_ACFG_0);
185 185
186 /* 186 /*
187 * Ethernet support trough the debug board 187 * Ethernet support through the debug board
188 * CS1 timings setup 188 * CS1 timings setup
189 */ 189 */
190 omap_writel(0x0000fff3, OMAP730_FLASH_CFG_1); 190 omap_writel(0x0000fff3, OMAP730_FLASH_CFG_1);
diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c
index 4277eee44e..9d862f86bb 100644
--- a/arch/arm/mach-omap1/clock.c
+++ b/arch/arm/mach-omap1/clock.c
@@ -16,9 +16,9 @@
16#include <linux/list.h> 16#include <linux/list.h>
17#include <linux/errno.h> 17#include <linux/errno.h>
18#include <linux/err.h> 18#include <linux/err.h>
19#include <linux/clk.h>
19 20
20#include <asm/io.h> 21#include <asm/io.h>
21#include <asm/hardware/clock.h>
22 22
23#include <asm/arch/usb.h> 23#include <asm/arch/usb.h>
24#include <asm/arch/clock.h> 24#include <asm/arch/clock.h>
diff --git a/arch/arm/mach-omap1/serial.c b/arch/arm/mach-omap1/serial.c
index 6810cfb844..7a68f098a0 100644
--- a/arch/arm/mach-omap1/serial.c
+++ b/arch/arm/mach-omap1/serial.c
@@ -17,10 +17,10 @@
17#include <linux/tty.h> 17#include <linux/tty.h>
18#include <linux/serial_8250.h> 18#include <linux/serial_8250.h>
19#include <linux/serial_reg.h> 19#include <linux/serial_reg.h>
20#include <linux/clk.h>
20 21
21#include <asm/io.h> 22#include <asm/io.h>
22#include <asm/mach-types.h> 23#include <asm/mach-types.h>
23#include <asm/hardware/clock.h>
24 24
25#include <asm/arch/board.h> 25#include <asm/arch/board.h>
26#include <asm/arch/mux.h> 26#include <asm/arch/mux.h>
@@ -252,9 +252,8 @@ static void __init omap_serial_set_port_wakeup(int gpio_nr)
252 return; 252 return;
253 } 253 }
254 omap_set_gpio_direction(gpio_nr, 1); 254 omap_set_gpio_direction(gpio_nr, 1);
255 set_irq_type(OMAP_GPIO_IRQ(gpio_nr), IRQT_RISING);
256 ret = request_irq(OMAP_GPIO_IRQ(gpio_nr), &omap_serial_wake_interrupt, 255 ret = request_irq(OMAP_GPIO_IRQ(gpio_nr), &omap_serial_wake_interrupt,
257 0, "serial wakeup", NULL); 256 SA_TRIGGER_RISING, "serial wakeup", NULL);
258 if (ret) { 257 if (ret) {
259 omap_free_gpio(gpio_nr); 258 omap_free_gpio(gpio_nr);
260 printk(KERN_ERR "No interrupt for UART wake GPIO: %i\n", 259 printk(KERN_ERR "No interrupt for UART wake GPIO: %i\n",
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 85818d9f26..5407b95491 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -22,10 +22,10 @@
22#include <linux/list.h> 22#include <linux/list.h>
23#include <linux/errno.h> 23#include <linux/errno.h>
24#include <linux/delay.h> 24#include <linux/delay.h>
25#include <linux/clk.h>
25 26
26#include <asm/io.h> 27#include <asm/io.h>
27 28
28#include <asm/hardware/clock.h>
29#include <asm/arch/clock.h> 29#include <asm/arch/clock.h>
30#include <asm/arch/sram.h> 30#include <asm/arch/sram.h>
31#include <asm/arch/prcm.h> 31#include <asm/arch/prcm.h>
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index f4df04fe1d..e1bd46a96e 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -16,9 +16,9 @@
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/serial_8250.h> 17#include <linux/serial_8250.h>
18#include <linux/serial_reg.h> 18#include <linux/serial_reg.h>
19#include <linux/clk.h>
19 20
20#include <asm/io.h> 21#include <asm/io.h>
21#include <asm/hardware/clock.h>
22 22
23#include <asm/arch/common.h> 23#include <asm/arch/common.h>
24#include <asm/arch/board.h> 24#include <asm/arch/board.h>
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
index 9ec1144320..23d36b1c40 100644
--- a/arch/arm/mach-omap2/timer-gp.c
+++ b/arch/arm/mach-omap2/timer-gp.c
@@ -21,10 +21,11 @@
21#include <linux/time.h> 21#include <linux/time.h>
22#include <linux/interrupt.h> 22#include <linux/interrupt.h>
23#include <linux/err.h> 23#include <linux/err.h>
24#include <linux/clk.h>
25
24#include <asm/mach/time.h> 26#include <asm/mach/time.h>
25#include <asm/delay.h> 27#include <asm/delay.h>
26#include <asm/io.h> 28#include <asm/io.h>
27#include <asm/hardware/clock.h>
28 29
29#define OMAP2_GP_TIMER1_BASE 0x48028000 30#define OMAP2_GP_TIMER1_BASE 0x48028000
30#define OMAP2_GP_TIMER2_BASE 0x4802a000 31#define OMAP2_GP_TIMER2_BASE 0x4802a000
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index 2a58499c09..c1d77f5b38 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -112,12 +112,14 @@ config IWMMXT
112config PXA_SHARP_C7xx 112config PXA_SHARP_C7xx
113 bool 113 bool
114 select PXA_SSP 114 select PXA_SSP
115 select SHARPSL_PM
115 help 116 help
116 Enable support for all Sharp C7xx models 117 Enable support for all Sharp C7xx models
117 118
118config PXA_SHARP_Cxx00 119config PXA_SHARP_Cxx00
119 bool 120 bool
120 select PXA_SSP 121 select PXA_SSP
122 select SHARPSL_PM
121 help 123 help
122 Enable common support for Sharp Cxx00 models 124 Enable common support for Sharp Cxx00 models
123 125
diff --git a/arch/arm/mach-pxa/akita-ioexp.c b/arch/arm/mach-pxa/akita-ioexp.c
index f6d73cc01f..1b398742ab 100644
--- a/arch/arm/mach-pxa/akita-ioexp.c
+++ b/arch/arm/mach-pxa/akita-ioexp.c
@@ -124,17 +124,16 @@ static int max7310_detach_client(struct i2c_client *client)
124} 124}
125 125
126static struct i2c_driver max7310_i2c_driver = { 126static struct i2c_driver max7310_i2c_driver = {
127 .owner = THIS_MODULE, 127 .driver = {
128 .name = "akita-max7310", 128 .name = "akita-max7310",
129 },
129 .id = I2C_DRIVERID_AKITAIOEXP, 130 .id = I2C_DRIVERID_AKITAIOEXP,
130 .flags = I2C_DF_NOTIFY,
131 .attach_adapter = max7310_attach_adapter, 131 .attach_adapter = max7310_attach_adapter,
132 .detach_client = max7310_detach_client, 132 .detach_client = max7310_detach_client,
133}; 133};
134 134
135static struct i2c_client max7310_template = { 135static struct i2c_client max7310_template = {
136 name: "akita-max7310", 136 name: "akita-max7310",
137 flags: I2C_CLIENT_ALLOW_USE,
138 driver: &max7310_i2c_driver, 137 driver: &max7310_i2c_driver,
139}; 138};
140 139
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
index 100fb31b51..5a7b873f29 100644
--- a/arch/arm/mach-pxa/corgi.c
+++ b/arch/arm/mach-pxa/corgi.c
@@ -213,15 +213,14 @@ static int corgi_mci_init(struct device *dev, irqreturn_t (*corgi_detect_int)(in
213 213
214 corgi_mci_platform_data.detect_delay = msecs_to_jiffies(250); 214 corgi_mci_platform_data.detect_delay = msecs_to_jiffies(250);
215 215
216 err = request_irq(CORGI_IRQ_GPIO_nSD_DETECT, corgi_detect_int, SA_INTERRUPT, 216 err = request_irq(CORGI_IRQ_GPIO_nSD_DETECT, corgi_detect_int,
217 "MMC card detect", data); 217 SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
218 "MMC card detect", data);
218 if (err) { 219 if (err) {
219 printk(KERN_ERR "corgi_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); 220 printk(KERN_ERR "corgi_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
220 return -1; 221 return -1;
221 } 222 }
222 223
223 set_irq_type(CORGI_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE);
224
225 return 0; 224 return 0;
226} 225}
227 226
diff --git a/arch/arm/mach-pxa/corgi_pm.c b/arch/arm/mach-pxa/corgi_pm.c
index 599be14754..7a1ab73e9e 100644
--- a/arch/arm/mach-pxa/corgi_pm.c
+++ b/arch/arm/mach-pxa/corgi_pm.c
@@ -33,19 +33,7 @@ static void corgi_charger_init(void)
33 pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT); 33 pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT);
34 pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT); 34 pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT);
35 pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN); 35 pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN);
36} 36 sharpsl_pm_pxa_init();
37
38static void corgi_charge_led(int val)
39{
40 if (val == SHARPSL_LED_ERROR) {
41 dev_dbg(sharpsl_pm.dev, "Charge LED Error\n");
42 } else if (val == SHARPSL_LED_ON) {
43 dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
44 GPSR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE);
45 } else {
46 dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
47 GPCR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE);
48 }
49} 37}
50 38
51static void corgi_measure_temp(int on) 39static void corgi_measure_temp(int on)
@@ -138,15 +126,15 @@ static int corgi_should_wakeup(unsigned int resume_on_alarm)
138 dev_dbg(sharpsl_pm.dev, "GPLR0 = %x,%x\n", GPLR0, PEDR); 126 dev_dbg(sharpsl_pm.dev, "GPLR0 = %x,%x\n", GPLR0, PEDR);
139 127
140 if ((PEDR & GPIO_bit(CORGI_GPIO_AC_IN))) { 128 if ((PEDR & GPIO_bit(CORGI_GPIO_AC_IN))) {
141 if (STATUS_AC_IN()) { 129 if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) {
142 /* charge on */ 130 /* charge on */
143 dev_dbg(sharpsl_pm.dev, "ac insert\n"); 131 dev_dbg(sharpsl_pm.dev, "ac insert\n");
144 sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; 132 sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG;
145 } else { 133 } else {
146 /* charge off */ 134 /* charge off */
147 dev_dbg(sharpsl_pm.dev, "ac remove\n"); 135 dev_dbg(sharpsl_pm.dev, "ac remove\n");
148 CHARGE_LED_OFF(); 136 sharpsl_pm_led(SHARPSL_LED_OFF);
149 CHARGE_OFF(); 137 sharpsl_pm.machinfo->charge(0);
150 sharpsl_pm.charge_mode = CHRG_OFF; 138 sharpsl_pm.charge_mode = CHRG_OFF;
151 } 139 }
152 } 140 }
@@ -172,23 +160,39 @@ static unsigned long corgi_charger_wakeup(void)
172 return ~GPLR0 & ( GPIO_bit(CORGI_GPIO_AC_IN) | GPIO_bit(CORGI_GPIO_KEY_INT) | GPIO_bit(CORGI_GPIO_WAKEUP) ); 160 return ~GPLR0 & ( GPIO_bit(CORGI_GPIO_AC_IN) | GPIO_bit(CORGI_GPIO_KEY_INT) | GPIO_bit(CORGI_GPIO_WAKEUP) );
173} 161}
174 162
175static int corgi_acin_status(void) 163unsigned long corgipm_read_devdata(int type)
176{ 164{
177 return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0); 165 switch(type) {
166 case SHARPSL_STATUS_ACIN:
167 return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0);
168 case SHARPSL_STATUS_LOCK:
169 return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
170 case SHARPSL_STATUS_CHRGFULL:
171 return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
172 case SHARPSL_STATUS_FATAL:
173 return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
174 case SHARPSL_ACIN_VOLT:
175 return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
176 case SHARPSL_BATT_TEMP:
177 return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP);
178 case SHARPSL_BATT_VOLT:
179 default:
180 return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT);
181 }
178} 182}
179 183
180static struct sharpsl_charger_machinfo corgi_pm_machinfo = { 184static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
181 .init = corgi_charger_init, 185 .init = corgi_charger_init,
186 .exit = sharpsl_pm_pxa_remove,
182 .gpio_batlock = CORGI_GPIO_BAT_COVER, 187 .gpio_batlock = CORGI_GPIO_BAT_COVER,
183 .gpio_acin = CORGI_GPIO_AC_IN, 188 .gpio_acin = CORGI_GPIO_AC_IN,
184 .gpio_batfull = CORGI_GPIO_CHRG_FULL, 189 .gpio_batfull = CORGI_GPIO_CHRG_FULL,
185 .status_acin = corgi_acin_status,
186 .discharge = corgi_discharge, 190 .discharge = corgi_discharge,
187 .charge = corgi_charge, 191 .charge = corgi_charge,
188 .chargeled = corgi_charge_led,
189 .measure_temp = corgi_measure_temp, 192 .measure_temp = corgi_measure_temp,
190 .presuspend = corgi_presuspend, 193 .presuspend = corgi_presuspend,
191 .postsuspend = corgi_postsuspend, 194 .postsuspend = corgi_postsuspend,
195 .read_devdata = corgipm_read_devdata,
192 .charger_wakeup = corgi_charger_wakeup, 196 .charger_wakeup = corgi_charger_wakeup,
193 .should_wakeup = corgi_should_wakeup, 197 .should_wakeup = corgi_should_wakeup,
194 .bat_levels = 40, 198 .bat_levels = 40,
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
index 07892f4012..8da9d3efe9 100644
--- a/arch/arm/mach-pxa/mainstone.c
+++ b/arch/arm/mach-pxa/mainstone.c
@@ -43,6 +43,7 @@
43#include <asm/arch/pxafb.h> 43#include <asm/arch/pxafb.h>
44#include <asm/arch/mmc.h> 44#include <asm/arch/mmc.h>
45#include <asm/arch/irda.h> 45#include <asm/arch/irda.h>
46#include <asm/arch/ohci.h>
46 47
47#include "generic.h" 48#include "generic.h"
48 49
@@ -393,6 +394,25 @@ static struct platform_device *platform_devices[] __initdata = {
393 &mst_flash_device[1], 394 &mst_flash_device[1],
394}; 395};
395 396
397static int mainstone_ohci_init(struct device *dev)
398{
399 /* setup Port1 GPIO pin. */
400 pxa_gpio_mode( 88 | GPIO_ALT_FN_1_IN); /* USBHPWR1 */
401 pxa_gpio_mode( 89 | GPIO_ALT_FN_2_OUT); /* USBHPEN1 */
402
403 /* Set the Power Control Polarity Low and Power Sense
404 Polarity Low to active low. */
405 UHCHR = (UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
406 ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
407
408 return 0;
409}
410
411static struct pxaohci_platform_data mainstone_ohci_platform_data = {
412 .port_mode = PMM_PERPORT_MODE,
413 .init = mainstone_ohci_init,
414};
415
396static void __init mainstone_init(void) 416static void __init mainstone_init(void)
397{ 417{
398 int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */ 418 int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */
@@ -407,6 +427,12 @@ static void __init mainstone_init(void)
407 printk(KERN_NOTICE "Mainstone configured to boot from %s\n", 427 printk(KERN_NOTICE "Mainstone configured to boot from %s\n",
408 mst_flash_data[0].name); 428 mst_flash_data[0].name);
409 429
430 /* system bus arbiter setting
431 * - Core_Park
432 * - LCD_wt:DMA_wt:CORE_Wt = 2:3:4
433 */
434 ARB_CNTRL = ARB_CORE_PARK | 0x234;
435
410 /* 436 /*
411 * On Mainstone, we route AC97_SYSCLK via GPIO45 to 437 * On Mainstone, we route AC97_SYSCLK via GPIO45 to
412 * the audio daughter card 438 * the audio daughter card
@@ -424,6 +450,7 @@ static void __init mainstone_init(void)
424 450
425 pxa_set_mci_info(&mainstone_mci_platform_data); 451 pxa_set_mci_info(&mainstone_mci_platform_data);
426 pxa_set_ficp_info(&mainstone_ficp_platform_data); 452 pxa_set_ficp_info(&mainstone_ficp_platform_data);
453 pxa_set_ohci_info(&mainstone_ohci_platform_data);
427} 454}
428 455
429 456
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index eef3de26ad..663c950059 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -146,15 +146,14 @@ static int poodle_mci_init(struct device *dev, irqreturn_t (*poodle_detect_int)(
146 146
147 poodle_mci_platform_data.detect_delay = msecs_to_jiffies(250); 147 poodle_mci_platform_data.detect_delay = msecs_to_jiffies(250);
148 148
149 err = request_irq(POODLE_IRQ_GPIO_nSD_DETECT, poodle_detect_int, SA_INTERRUPT, 149 err = request_irq(POODLE_IRQ_GPIO_nSD_DETECT, poodle_detect_int,
150 "MMC card detect", data); 150 SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
151 "MMC card detect", data);
151 if (err) { 152 if (err) {
152 printk(KERN_ERR "poodle_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); 153 printk(KERN_ERR "poodle_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
153 return -1; 154 return -1;
154 } 155 }
155 156
156 set_irq_type(POODLE_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE);
157
158 return 0; 157 return 0;
159} 158}
160 159
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index c722a9a91f..b41b1efaa2 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -21,6 +21,7 @@
21#include <asm/hardware.h> 21#include <asm/hardware.h>
22#include <asm/irq.h> 22#include <asm/irq.h>
23#include <asm/arch/pxa-regs.h> 23#include <asm/arch/pxa-regs.h>
24#include <asm/arch/ohci.h>
24 25
25#include "generic.h" 26#include "generic.h"
26 27
@@ -194,6 +195,11 @@ static struct platform_device ohci_device = {
194 .resource = pxa27x_ohci_resources, 195 .resource = pxa27x_ohci_resources,
195}; 196};
196 197
198void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)
199{
200 ohci_device.dev.platform_data = info;
201}
202
197static struct platform_device *devices[] __initdata = { 203static struct platform_device *devices[] __initdata = {
198 &ohci_device, 204 &ohci_device,
199}; 205};
diff --git a/arch/arm/mach-pxa/sharpsl.h b/arch/arm/mach-pxa/sharpsl.h
index b0c40a1d66..da4769caaf 100644
--- a/arch/arm/mach-pxa/sharpsl.h
+++ b/arch/arm/mach-pxa/sharpsl.h
@@ -1,7 +1,17 @@
1/* 1/*
2 * SharpSL SSP Driver 2 * Copyright (c) 2004-2005 Richard Purdie
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 *
3 */ 8 */
4 9
10#include <asm/hardware/sharpsl_pm.h>
11
12/*
13 * SharpSL SSP Driver
14 */
5struct corgissp_machinfo { 15struct corgissp_machinfo {
6 int port; 16 int port;
7 int cs_lcdcon; 17 int cs_lcdcon;
@@ -14,18 +24,18 @@ struct corgissp_machinfo {
14 24
15void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo); 25void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo);
16 26
27
17/* 28/*
18 * SharpSL Backlight 29 * SharpSL Backlight
19 */ 30 */
20
21void corgi_bl_set_intensity(int intensity); 31void corgi_bl_set_intensity(int intensity);
22void spitz_bl_set_intensity(int intensity); 32void spitz_bl_set_intensity(int intensity);
23void akita_bl_set_intensity(int intensity); 33void akita_bl_set_intensity(int intensity);
24 34
35
25/* 36/*
26 * SharpSL Touchscreen Driver 37 * SharpSL Touchscreen Driver
27 */ 38 */
28
29unsigned long corgi_get_hsync_len(void); 39unsigned long corgi_get_hsync_len(void);
30unsigned long spitz_get_hsync_len(void); 40unsigned long spitz_get_hsync_len(void);
31void corgi_put_hsync(void); 41void corgi_put_hsync(void);
@@ -33,89 +43,22 @@ void spitz_put_hsync(void);
33void corgi_wait_hsync(void); 43void corgi_wait_hsync(void);
34void spitz_wait_hsync(void); 44void spitz_wait_hsync(void);
35 45
46
36/* 47/*
37 * SharpSL Battery/PM Driver 48 * SharpSL Battery/PM Driver
38 */ 49 */
39 50
40struct sharpsl_charger_machinfo { 51#define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
41 void (*init)(void);
42 int gpio_acin;
43 int gpio_batfull;
44 int gpio_batlock;
45 int gpio_fatal;
46 int (*status_acin)(void);
47 void (*discharge)(int);
48 void (*discharge1)(int);
49 void (*charge)(int);
50 void (*chargeled)(int);
51 void (*measure_temp)(int);
52 void (*presuspend)(void);
53 void (*postsuspend)(void);
54 unsigned long (*charger_wakeup)(void);
55 int (*should_wakeup)(unsigned int resume_on_alarm);
56 int bat_levels;
57 struct battery_thresh *bat_levels_noac;
58 struct battery_thresh *bat_levels_acin;
59 int status_high_acin;
60 int status_low_acin;
61 int status_high_noac;
62 int status_low_noac;
63};
64
65struct battery_thresh {
66 int voltage;
67 int percentage;
68};
69
70struct battery_stat {
71 int ac_status; /* APM AC Present/Not Present */
72 int mainbat_status; /* APM Main Battery Status */
73 int mainbat_percent; /* Main Battery Percentage Charge */
74 int mainbat_voltage; /* Main Battery Voltage */
75};
76
77struct sharpsl_pm_status {
78 struct device *dev;
79 struct timer_list ac_timer;
80 struct timer_list chrg_full_timer;
81
82 int charge_mode;
83#define CHRG_ERROR (-1)
84#define CHRG_OFF (0)
85#define CHRG_ON (1)
86#define CHRG_DONE (2)
87
88 unsigned int flags;
89#define SHARPSL_SUSPENDED (1 << 0) /* Device is Suspended */
90#define SHARPSL_ALARM_ACTIVE (1 << 1) /* Alarm is for charging event (not user) */
91#define SHARPSL_BL_LIMIT (1 << 2) /* Backlight Intensity Limited */
92#define SHARPSL_APM_QUEUED (1 << 3) /* APM Event Queued */
93#define SHARPSL_DO_OFFLINE_CHRG (1 << 4) /* Trigger the offline charger */
94 52
95 int full_count; 53/* MAX1111 Channel Definitions */
96 unsigned long charge_start_time; 54#define MAX1111_BATT_VOLT 4u
97 struct sharpsl_charger_machinfo *machinfo; 55#define MAX1111_BATT_TEMP 2u
98 struct battery_stat battstat; 56#define MAX1111_ACIN_VOLT 6u
99};
100 57
101extern struct sharpsl_pm_status sharpsl_pm;
102extern struct battery_thresh spitz_battery_levels_acin[]; 58extern struct battery_thresh spitz_battery_levels_acin[];
103extern struct battery_thresh spitz_battery_levels_noac[]; 59extern struct battery_thresh spitz_battery_levels_noac[];
60void sharpsl_pm_pxa_init(void);
61void sharpsl_pm_pxa_remove(void);
62int sharpsl_pm_pxa_read_max1111(int channel);
104 63
105#define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
106
107#define SHARPSL_LED_ERROR 2
108#define SHARPSL_LED_ON 1
109#define SHARPSL_LED_OFF 0
110 64
111#define CHARGE_ON() sharpsl_pm.machinfo->charge(1)
112#define CHARGE_OFF() sharpsl_pm.machinfo->charge(0)
113#define CHARGE_LED_ON() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_ON)
114#define CHARGE_LED_OFF() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_OFF)
115#define CHARGE_LED_ERR() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_ERROR)
116#define DISCHARGE_ON() sharpsl_pm.machinfo->discharge(1)
117#define DISCHARGE_OFF() sharpsl_pm.machinfo->discharge(0)
118#define STATUS_AC_IN() sharpsl_pm.machinfo->status_acin()
119#define STATUS_BATT_LOCKED() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock)
120#define STATUS_CHRG_FULL() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull)
121#define STATUS_FATAL() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal)
diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c
index c10be00fb5..6d402b262d 100644
--- a/arch/arm/mach-pxa/sharpsl_pm.c
+++ b/arch/arm/mach-pxa/sharpsl_pm.c
@@ -15,48 +15,20 @@
15#undef DEBUG 15#undef DEBUG
16 16
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/timer.h>
19#include <linux/init.h> 18#include <linux/init.h>
20#include <linux/kernel.h> 19#include <linux/kernel.h>
21#include <linux/apm_bios.h>
22#include <linux/delay.h>
23#include <linux/interrupt.h> 20#include <linux/interrupt.h>
24#include <linux/platform_device.h> 21#include <linux/platform_device.h>
25 22
26#include <asm/hardware.h> 23#include <asm/hardware.h>
27#include <asm/hardware/scoop.h>
28#include <asm/mach-types.h> 24#include <asm/mach-types.h>
29#include <asm/irq.h> 25#include <asm/irq.h>
30#include <asm/apm.h> 26#include <asm/apm.h>
31
32#include <asm/arch/pm.h> 27#include <asm/arch/pm.h>
33#include <asm/arch/pxa-regs.h> 28#include <asm/arch/pxa-regs.h>
34#include <asm/arch/sharpsl.h> 29#include <asm/arch/sharpsl.h>
35#include "sharpsl.h" 30#include "sharpsl.h"
36 31
37/*
38 * Constants
39 */
40#define SHARPSL_CHARGE_ON_TIME_INTERVAL (msecs_to_jiffies(1*60*1000)) /* 1 min */
41#define SHARPSL_CHARGE_FINISH_TIME (msecs_to_jiffies(10*60*1000)) /* 10 min */
42#define SHARPSL_BATCHK_TIME (msecs_to_jiffies(15*1000)) /* 15 sec */
43#define SHARPSL_BATCHK_TIME_SUSPEND (60*10) /* 10 min */
44#define SHARPSL_WAIT_CO_TIME 15 /* 15 sec */
45#define SHARPSL_WAIT_DISCHARGE_ON 100 /* 100 msec */
46#define SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP 10 /* 10 msec */
47#define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 10 /* 10 msec */
48#define SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN 10 /* 10 msec */
49#define SHARPSL_CHARGE_WAIT_TIME 15 /* 15 msec */
50#define SHARPSL_CHARGE_CO_CHECK_TIME 5 /* 5 msec */
51#define SHARPSL_CHARGE_RETRY_CNT 1 /* eqv. 10 min */
52
53#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
54#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */
55#define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */
56#define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */
57#define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */
58#define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */
59
60struct battery_thresh spitz_battery_levels_acin[] = { 32struct battery_thresh spitz_battery_levels_acin[] = {
61 { 213, 100}, 33 { 213, 100},
62 { 212, 98}, 34 { 212, 98},
@@ -151,763 +123,17 @@ struct battery_thresh spitz_battery_levels_noac[] = {
151#define MAXCTRL_SEL_SH 4 123#define MAXCTRL_SEL_SH 4
152#define MAXCTRL_STR 1u << 7 124#define MAXCTRL_STR 1u << 7
153 125
154/* MAX1111 Channel Definitions */
155#define BATT_AD 4u
156#define BATT_THM 2u
157#define JK_VAD 6u
158
159
160/*
161 * Prototypes
162 */
163static int sharpsl_read_main_battery(void);
164static int sharpsl_off_charge_battery(void);
165static int sharpsl_check_battery_temp(void);
166static int sharpsl_check_battery_voltage(void);
167static int sharpsl_ac_check(void);
168static int sharpsl_fatal_check(void);
169static int sharpsl_average_value(int ad);
170static void sharpsl_average_clear(void);
171static void sharpsl_charge_toggle(void *private_);
172static void sharpsl_battery_thread(void *private_);
173
174
175/*
176 * Variables
177 */
178struct sharpsl_pm_status sharpsl_pm;
179DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL);
180DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL);
181
182
183static int get_percentage(int voltage)
184{
185 int i = sharpsl_pm.machinfo->bat_levels - 1;
186 struct battery_thresh *thresh;
187
188 if (sharpsl_pm.charge_mode == CHRG_ON)
189 thresh=sharpsl_pm.machinfo->bat_levels_acin;
190 else
191 thresh=sharpsl_pm.machinfo->bat_levels_noac;
192
193 while (i > 0 && (voltage > thresh[i].voltage))
194 i--;
195
196 return thresh[i].percentage;
197}
198
199static int get_apm_status(int voltage)
200{
201 int low_thresh, high_thresh;
202
203 if (sharpsl_pm.charge_mode == CHRG_ON) {
204 high_thresh = sharpsl_pm.machinfo->status_high_acin;
205 low_thresh = sharpsl_pm.machinfo->status_low_acin;
206 } else {
207 high_thresh = sharpsl_pm.machinfo->status_high_noac;
208 low_thresh = sharpsl_pm.machinfo->status_low_noac;
209 }
210
211 if (voltage >= high_thresh)
212 return APM_BATTERY_STATUS_HIGH;
213 if (voltage >= low_thresh)
214 return APM_BATTERY_STATUS_LOW;
215 return APM_BATTERY_STATUS_CRITICAL;
216}
217
218void sharpsl_battery_kick(void)
219{
220 schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125));
221}
222EXPORT_SYMBOL(sharpsl_battery_kick);
223
224
225static void sharpsl_battery_thread(void *private_)
226{
227 int voltage, percent, apm_status, i = 0;
228
229 if (!sharpsl_pm.machinfo)
230 return;
231
232 sharpsl_pm.battstat.ac_status = (STATUS_AC_IN() ? APM_AC_ONLINE : APM_AC_OFFLINE);
233
234 /* Corgi cannot confirm when battery fully charged so periodically kick! */
235 if (machine_is_corgi() && (sharpsl_pm.charge_mode == CHRG_ON)
236 && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL))
237 schedule_work(&toggle_charger);
238
239 while(1) {
240 voltage = sharpsl_read_main_battery();
241 if (voltage > 0) break;
242 if (i++ > 5) {
243 voltage = sharpsl_pm.machinfo->bat_levels_noac[0].voltage;
244 dev_warn(sharpsl_pm.dev, "Warning: Cannot read main battery!\n");
245 break;
246 }
247 }
248
249 voltage = sharpsl_average_value(voltage);
250 apm_status = get_apm_status(voltage);
251 percent = get_percentage(voltage);
252
253 /* At low battery voltages, the voltage has a tendency to start
254 creeping back up so we try to avoid this here */
255 if ((sharpsl_pm.battstat.ac_status == APM_AC_ONLINE) || (apm_status == APM_BATTERY_STATUS_HIGH) || percent <= sharpsl_pm.battstat.mainbat_percent) {
256 sharpsl_pm.battstat.mainbat_voltage = voltage;
257 sharpsl_pm.battstat.mainbat_status = apm_status;
258 sharpsl_pm.battstat.mainbat_percent = percent;
259 }
260
261 dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %d\n", voltage,
262 sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies);
263
264 /* If battery is low. limit backlight intensity to save power. */
265 if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
266 && ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW) ||
267 (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) {
268 if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) {
269 corgibl_limit_intensity(1);
270 sharpsl_pm.flags |= SHARPSL_BL_LIMIT;
271 }
272 } else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) {
273 corgibl_limit_intensity(0);
274 sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT;
275 }
276
277 /* Suspend if critical battery level */
278 if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
279 && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL)
280 && !(sharpsl_pm.flags & SHARPSL_APM_QUEUED)) {
281 sharpsl_pm.flags |= SHARPSL_APM_QUEUED;
282 dev_err(sharpsl_pm.dev, "Fatal Off\n");
283 apm_queue_event(APM_CRITICAL_SUSPEND);
284 }
285
286 schedule_delayed_work(&sharpsl_bat, SHARPSL_BATCHK_TIME);
287}
288
289static void sharpsl_charge_on(void)
290{
291 dev_dbg(sharpsl_pm.dev, "Turning Charger On\n");
292
293 sharpsl_pm.full_count = 0;
294 sharpsl_pm.charge_mode = CHRG_ON;
295 schedule_delayed_work(&toggle_charger, msecs_to_jiffies(250));
296 schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(500));
297}
298
299static void sharpsl_charge_off(void)
300{
301 dev_dbg(sharpsl_pm.dev, "Turning Charger Off\n");
302
303 CHARGE_OFF();
304 CHARGE_LED_OFF();
305 sharpsl_pm.charge_mode = CHRG_OFF;
306
307 schedule_work(&sharpsl_bat);
308}
309
310static void sharpsl_charge_error(void)
311{
312 CHARGE_LED_ERR();
313 CHARGE_OFF();
314 sharpsl_pm.charge_mode = CHRG_ERROR;
315}
316
317static void sharpsl_charge_toggle(void *private_)
318{
319 dev_dbg(sharpsl_pm.dev, "Toogling Charger at time: %lx\n", jiffies);
320
321 if (STATUS_AC_IN() == 0) {
322 sharpsl_charge_off();
323 return;
324 } else if ((sharpsl_check_battery_temp() < 0) || (sharpsl_ac_check() < 0)) {
325 sharpsl_charge_error();
326 return;
327 }
328
329 CHARGE_LED_ON();
330 CHARGE_OFF();
331 mdelay(SHARPSL_CHARGE_WAIT_TIME);
332 CHARGE_ON();
333
334 sharpsl_pm.charge_start_time = jiffies;
335}
336
337static void sharpsl_ac_timer(unsigned long data)
338{
339 int acin = STATUS_AC_IN();
340
341 dev_dbg(sharpsl_pm.dev, "AC Status: %d\n",acin);
342
343 sharpsl_average_clear();
344 if (acin && (sharpsl_pm.charge_mode != CHRG_ON))
345 sharpsl_charge_on();
346 else if (sharpsl_pm.charge_mode == CHRG_ON)
347 sharpsl_charge_off();
348
349 schedule_work(&sharpsl_bat);
350}
351
352
353static irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp)
354{
355 /* Delay the event slightly to debounce */
356 /* Must be a smaller delay than the chrg_full_isr below */
357 mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));
358
359 return IRQ_HANDLED;
360}
361
362static void sharpsl_chrg_full_timer(unsigned long data)
363{
364 dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies);
365
366 sharpsl_pm.full_count++;
367
368 if (STATUS_AC_IN() == 0) {
369 dev_dbg(sharpsl_pm.dev, "Charge Full: AC removed - stop charging!\n");
370 if (sharpsl_pm.charge_mode == CHRG_ON)
371 sharpsl_charge_off();
372 } else if (sharpsl_pm.full_count < 2) {
373 dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n");
374 schedule_work(&toggle_charger);
375 } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) {
376 dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n");
377 schedule_work(&toggle_charger);
378 } else {
379 sharpsl_charge_off();
380 sharpsl_pm.charge_mode = CHRG_DONE;
381 dev_dbg(sharpsl_pm.dev, "Charge Full: Charging Finished\n");
382 }
383}
384
385/* Charging Finished Interrupt (Not present on Corgi) */
386/* Can trigger at the same time as an AC staus change so
387 delay until after that has been processed */
388static irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp)
389{
390 if (sharpsl_pm.flags & SHARPSL_SUSPENDED)
391 return IRQ_HANDLED;
392
393 /* delay until after any ac interrupt */
394 mod_timer(&sharpsl_pm.chrg_full_timer, jiffies + msecs_to_jiffies(500));
395
396 return IRQ_HANDLED;
397}
398
399static irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp)
400{
401 int is_fatal = 0;
402
403 if (STATUS_BATT_LOCKED() == 0) {
404 dev_err(sharpsl_pm.dev, "Battery now Unlocked! Suspending.\n");
405 is_fatal = 1;
406 }
407
408 if (sharpsl_pm.machinfo->gpio_fatal && (STATUS_FATAL() == 0)) {
409 dev_err(sharpsl_pm.dev, "Fatal Batt Error! Suspending.\n");
410 is_fatal = 1;
411 }
412
413 if (!(sharpsl_pm.flags & SHARPSL_APM_QUEUED) && is_fatal) {
414 sharpsl_pm.flags |= SHARPSL_APM_QUEUED;
415 apm_queue_event(APM_CRITICAL_SUSPEND);
416 }
417
418 return IRQ_HANDLED;
419}
420
421/*
422 * Maintain an average of the last 10 readings
423 */
424#define SHARPSL_CNV_VALUE_NUM 10
425static int sharpsl_ad_index;
426
427static void sharpsl_average_clear(void)
428{
429 sharpsl_ad_index = 0;
430}
431
432static int sharpsl_average_value(int ad)
433{
434 int i, ad_val = 0;
435 static int sharpsl_ad[SHARPSL_CNV_VALUE_NUM+1];
436
437 if (sharpsl_pm.battstat.mainbat_status != APM_BATTERY_STATUS_HIGH) {
438 sharpsl_ad_index = 0;
439 return ad;
440 }
441
442 sharpsl_ad[sharpsl_ad_index] = ad;
443 sharpsl_ad_index++;
444 if (sharpsl_ad_index >= SHARPSL_CNV_VALUE_NUM) {
445 for (i=0; i < (SHARPSL_CNV_VALUE_NUM-1); i++)
446 sharpsl_ad[i] = sharpsl_ad[i+1];
447 sharpsl_ad_index = SHARPSL_CNV_VALUE_NUM - 1;
448 }
449 for (i=0; i < sharpsl_ad_index; i++)
450 ad_val += sharpsl_ad[i];
451
452 return (ad_val / sharpsl_ad_index);
453}
454
455
456/* 126/*
457 * Read MAX1111 ADC 127 * Read MAX1111 ADC
458 */ 128 */
459static int read_max1111(int channel) 129int sharpsl_pm_pxa_read_max1111(int channel)
460{ 130{
461 return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 131 return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1
462 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); 132 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
463} 133}
464 134
465static int sharpsl_read_main_battery(void) 135void sharpsl_pm_pxa_init(void)
466{
467 return read_max1111(BATT_AD);
468}
469
470static int sharpsl_read_temp(void)
471{ 136{
472 int temp;
473
474 sharpsl_pm.machinfo->measure_temp(1);
475
476 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP);
477 temp = read_max1111(BATT_THM);
478
479 sharpsl_pm.machinfo->measure_temp(0);
480
481 return temp;
482}
483
484static int sharpsl_read_acin(void)
485{
486 return read_max1111(JK_VAD);
487}
488
489/*
490 * Take an array of 5 integers, remove the maximum and minimum values
491 * and return the average.
492 */
493static int get_select_val(int *val)
494{
495 int i, j, k, temp, sum = 0;
496
497 /* Find MAX val */
498 temp = val[0];
499 j=0;
500 for (i=1; i<5; i++) {
501 if (temp < val[i]) {
502 temp = val[i];
503 j = i;
504 }
505 }
506
507 /* Find MIN val */
508 temp = val[4];
509 k=4;
510 for (i=3; i>=0; i--) {
511 if (temp > val[i]) {
512 temp = val[i];
513 k = i;
514 }
515 }
516
517 for (i=0; i<5; i++)
518 if (i != j && i != k )
519 sum += val[i];
520
521 dev_dbg(sharpsl_pm.dev, "Average: %d from values: %d, %d, %d, %d, %d\n", sum/3, val[0], val[1], val[2], val[3], val[4]);
522
523 return (sum/3);
524}
525
526static int sharpsl_check_battery_temp(void)
527{
528 int val, i, buff[5];
529
530 /* Check battery temperature */
531 for (i=0; i<5; i++) {
532 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP);
533 buff[i] = sharpsl_read_temp();
534 }
535
536 val = get_select_val(buff);
537
538 dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val);
539 if (val > SHARPSL_CHARGE_ON_TEMP)
540 return -1;
541
542 return 0;
543}
544
545static int sharpsl_check_battery_voltage(void)
546{
547 int val, i, buff[5];
548
549 /* disable charge, enable discharge */
550 CHARGE_OFF();
551 DISCHARGE_ON();
552 mdelay(SHARPSL_WAIT_DISCHARGE_ON);
553
554 if (sharpsl_pm.machinfo->discharge1)
555 sharpsl_pm.machinfo->discharge1(1);
556
557 /* Check battery voltage */
558 for (i=0; i<5; i++) {
559 buff[i] = sharpsl_read_main_battery();
560 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT);
561 }
562
563 if (sharpsl_pm.machinfo->discharge1)
564 sharpsl_pm.machinfo->discharge1(0);
565
566 DISCHARGE_OFF();
567
568 val = get_select_val(buff);
569 dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val);
570
571 if (val < SHARPSL_CHARGE_ON_VOLT)
572 return -1;
573
574 return 0;
575}
576
577static int sharpsl_ac_check(void)
578{
579 int temp, i, buff[5];
580
581 for (i=0; i<5; i++) {
582 buff[i] = sharpsl_read_acin();
583 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN);
584 }
585
586 temp = get_select_val(buff);
587 dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n",temp);
588
589 if ((temp > SHARPSL_CHARGE_ON_ACIN_HIGH) || (temp < SHARPSL_CHARGE_ON_ACIN_LOW)) {
590 dev_err(sharpsl_pm.dev, "Error: AC check failed.\n");
591 return -1;
592 }
593
594 return 0;
595}
596
597#ifdef CONFIG_PM
598static int sharpsl_pm_suspend(struct platform_device *pdev, pm_message_t state)
599{
600 sharpsl_pm.flags |= SHARPSL_SUSPENDED;
601 flush_scheduled_work();
602
603 if (sharpsl_pm.charge_mode == CHRG_ON)
604 sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG;
605 else
606 sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG;
607
608 return 0;
609}
610
611static int sharpsl_pm_resume(struct platform_device *pdev)
612{
613 /* Clear the reset source indicators as they break the bootloader upon reboot */
614 RCSR = 0x0f;
615 sharpsl_average_clear();
616 sharpsl_pm.flags &= ~SHARPSL_APM_QUEUED;
617 sharpsl_pm.flags &= ~SHARPSL_SUSPENDED;
618
619 return 0;
620}
621
622static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
623{
624 dev_dbg(sharpsl_pm.dev, "Time is: %08x\n",RCNR);
625
626 dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n",sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG);
627 /* not charging and AC-IN! */
628
629 if ((sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG) && (STATUS_AC_IN() != 0)) {
630 dev_dbg(sharpsl_pm.dev, "Activating Offline Charger...\n");
631 sharpsl_pm.charge_mode = CHRG_OFF;
632 sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG;
633 sharpsl_off_charge_battery();
634 }
635
636 sharpsl_pm.machinfo->presuspend();
637
638 PEDR = 0xffffffff; /* clear it */
639
640 sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE;
641 if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCHK_TIME_SUSPEND + 30))) || !alarm_enable)) {
642 RTSR &= RTSR_ALE;
643 RTAR = RCNR + SHARPSL_BATCHK_TIME_SUSPEND;
644 dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n",RTAR);
645 sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE;
646 } else if (alarm_enable) {
647 RTSR &= RTSR_ALE;
648 RTAR = alarm_time;
649 dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n",RTAR);
650 } else {
651 dev_dbg(sharpsl_pm.dev, "No alarms set.\n");
652 }
653
654 pxa_pm_enter(state);
655
656 sharpsl_pm.machinfo->postsuspend();
657
658 dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",PEDR);
659}
660
661static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
662{
663 if (!sharpsl_pm.machinfo->should_wakeup(!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE) && alarm_enable) )
664 {
665 if (!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE)) {
666 dev_dbg(sharpsl_pm.dev, "No user triggered wakeup events and not charging. Strange. Suspend.\n");
667 corgi_goto_sleep(alarm_time, alarm_enable, state);
668 return 1;
669 }
670 if(sharpsl_off_charge_battery()) {
671 dev_dbg(sharpsl_pm.dev, "Charging. Suspend...\n");
672 corgi_goto_sleep(alarm_time, alarm_enable, state);
673 return 1;
674 }
675 dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n");
676 }
677
678 if ((STATUS_BATT_LOCKED() == 0) || (sharpsl_fatal_check() < 0) )
679 {
680 dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n");
681 corgi_goto_sleep(alarm_time, alarm_enable, state);
682 return 1;
683 }
684
685 return 0;
686}
687
688static int corgi_pxa_pm_enter(suspend_state_t state)
689{
690 unsigned long alarm_time = RTAR;
691 unsigned int alarm_status = ((RTSR & RTSR_ALE) != 0);
692
693 dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n");
694
695 corgi_goto_sleep(alarm_time, alarm_status, state);
696
697 while (corgi_enter_suspend(alarm_time,alarm_status,state))
698 {}
699
700 dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n");
701
702 return 0;
703}
704#endif
705
706
707/*
708 * Check for fatal battery errors
709 * Fatal returns -1
710 */
711static int sharpsl_fatal_check(void)
712{
713 int buff[5], temp, i, acin;
714
715 dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check entered\n");
716
717 /* Check AC-Adapter */
718 acin = STATUS_AC_IN();
719
720 if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) {
721 CHARGE_OFF();
722 udelay(100);
723 DISCHARGE_ON(); /* enable discharge */
724 mdelay(SHARPSL_WAIT_DISCHARGE_ON);
725 }
726
727 if (sharpsl_pm.machinfo->discharge1)
728 sharpsl_pm.machinfo->discharge1(1);
729
730 /* Check battery : check inserting battery ? */
731 for (i=0; i<5; i++) {
732 buff[i] = sharpsl_read_main_battery();
733 mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT);
734 }
735
736 if (sharpsl_pm.machinfo->discharge1)
737 sharpsl_pm.machinfo->discharge1(0);
738
739 if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) {
740 udelay(100);
741 CHARGE_ON();
742 DISCHARGE_OFF();
743 }
744
745 temp = get_select_val(buff);
746 dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check: acin: %d, discharge voltage: %d, no discharge: %d\n", acin, temp, sharpsl_read_main_battery());
747
748 if ((acin && (temp < SHARPSL_FATAL_ACIN_VOLT)) ||
749 (!acin && (temp < SHARPSL_FATAL_NOACIN_VOLT)))
750 return -1;
751 return 0;
752}
753
754static int sharpsl_off_charge_error(void)
755{
756 dev_err(sharpsl_pm.dev, "Offline Charger: Error occured.\n");
757 CHARGE_OFF();
758 CHARGE_LED_ERR();
759 sharpsl_pm.charge_mode = CHRG_ERROR;
760 return 1;
761}
762
763/*
764 * Charging Control while suspended
765 * Return 1 - go straight to sleep
766 * Return 0 - sleep or wakeup depending on other factors
767 */
768static int sharpsl_off_charge_battery(void)
769{
770 int time;
771
772 dev_dbg(sharpsl_pm.dev, "Charge Mode: %d\n", sharpsl_pm.charge_mode);
773
774 if (sharpsl_pm.charge_mode == CHRG_OFF) {
775 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 1\n");
776
777 /* AC Check */
778 if ((sharpsl_ac_check() < 0) || (sharpsl_check_battery_temp() < 0))
779 return sharpsl_off_charge_error();
780
781 /* Start Charging */
782 CHARGE_LED_ON();
783 CHARGE_OFF();
784 mdelay(SHARPSL_CHARGE_WAIT_TIME);
785 CHARGE_ON();
786
787 sharpsl_pm.charge_mode = CHRG_ON;
788 sharpsl_pm.full_count = 0;
789
790 return 1;
791 } else if (sharpsl_pm.charge_mode != CHRG_ON) {
792 return 1;
793 }
794
795 if (sharpsl_pm.full_count == 0) {
796 int time;
797
798 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 2\n");
799
800 if ((sharpsl_check_battery_temp() < 0) || (sharpsl_check_battery_voltage() < 0))
801 return sharpsl_off_charge_error();
802
803 CHARGE_OFF();
804 mdelay(SHARPSL_CHARGE_WAIT_TIME);
805 CHARGE_ON();
806 sharpsl_pm.charge_mode = CHRG_ON;
807
808 mdelay(SHARPSL_CHARGE_CO_CHECK_TIME);
809
810 time = RCNR;
811 while(1) {
812 /* Check if any wakeup event had occured */
813 if (sharpsl_pm.machinfo->charger_wakeup() != 0)
814 return 0;
815 /* Check for timeout */
816 if ((RCNR - time) > SHARPSL_WAIT_CO_TIME)
817 return 1;
818 if (STATUS_CHRG_FULL()) {
819 dev_dbg(sharpsl_pm.dev, "Offline Charger: Charge full occured. Retrying to check\n");
820 sharpsl_pm.full_count++;
821 CHARGE_OFF();
822 mdelay(SHARPSL_CHARGE_WAIT_TIME);
823 CHARGE_ON();
824 return 1;
825 }
826 }
827 }
828
829 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 3\n");
830
831 mdelay(SHARPSL_CHARGE_CO_CHECK_TIME);
832
833 time = RCNR;
834 while(1) {
835 /* Check if any wakeup event had occured */
836 if (sharpsl_pm.machinfo->charger_wakeup() != 0)
837 return 0;
838 /* Check for timeout */
839 if ((RCNR-time) > SHARPSL_WAIT_CO_TIME) {
840 if (sharpsl_pm.full_count > SHARPSL_CHARGE_RETRY_CNT) {
841 dev_dbg(sharpsl_pm.dev, "Offline Charger: Not charged sufficiently. Retrying.\n");
842 sharpsl_pm.full_count = 0;
843 }
844 sharpsl_pm.full_count++;
845 return 1;
846 }
847 if (STATUS_CHRG_FULL()) {
848 dev_dbg(sharpsl_pm.dev, "Offline Charger: Charging complete.\n");
849 CHARGE_LED_OFF();
850 CHARGE_OFF();
851 sharpsl_pm.charge_mode = CHRG_DONE;
852 return 1;
853 }
854 }
855}
856
857
858static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf)
859{
860 return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_percent);
861}
862
863static ssize_t battery_voltage_show(struct device *dev, struct device_attribute *attr, char *buf)
864{
865 return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_voltage);
866}
867
868static DEVICE_ATTR(battery_percentage, 0444, battery_percentage_show, NULL);
869static DEVICE_ATTR(battery_voltage, 0444, battery_voltage_show, NULL);
870
871extern void (*apm_get_power_status)(struct apm_power_info *);
872
873static void sharpsl_apm_get_power_status(struct apm_power_info *info)
874{
875 info->ac_line_status = sharpsl_pm.battstat.ac_status;
876
877 if (sharpsl_pm.charge_mode == CHRG_ON)
878 info->battery_status = APM_BATTERY_STATUS_CHARGING;
879 else
880 info->battery_status = sharpsl_pm.battstat.mainbat_status;
881
882 info->battery_flag = (1 << info->battery_status);
883 info->battery_life = sharpsl_pm.battstat.mainbat_percent;
884}
885
886static struct pm_ops sharpsl_pm_ops = {
887 .pm_disk_mode = PM_DISK_FIRMWARE,
888 .prepare = pxa_pm_prepare,
889 .enter = corgi_pxa_pm_enter,
890 .finish = pxa_pm_finish,
891};
892
893static int __init sharpsl_pm_probe(struct platform_device *pdev)
894{
895 if (!pdev->dev.platform_data)
896 return -EINVAL;
897
898 sharpsl_pm.dev = &pdev->dev;
899 sharpsl_pm.machinfo = pdev->dev.platform_data;
900 sharpsl_pm.charge_mode = CHRG_OFF;
901 sharpsl_pm.flags = 0;
902
903 sharpsl_pm.machinfo->init();
904
905 init_timer(&sharpsl_pm.ac_timer);
906 sharpsl_pm.ac_timer.function = sharpsl_ac_timer;
907
908 init_timer(&sharpsl_pm.chrg_full_timer);
909 sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer;
910
911 pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN); 137 pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
912 pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batfull | GPIO_IN); 138 pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batfull | GPIO_IN);
913 pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batlock | GPIO_IN); 139 pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batlock | GPIO_IN);
@@ -938,26 +164,10 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev)
938 } 164 }
939 else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull),IRQT_RISING); 165 else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull),IRQT_RISING);
940 } 166 }
941
942 device_create_file(&pdev->dev, &dev_attr_battery_percentage);
943 device_create_file(&pdev->dev, &dev_attr_battery_voltage);
944
945 apm_get_power_status = sharpsl_apm_get_power_status;
946
947 pm_set_ops(&sharpsl_pm_ops);
948
949 mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));
950
951 return 0;
952} 167}
953 168
954static int sharpsl_pm_remove(struct platform_device *pdev) 169void sharpsl_pm_pxa_remove(void)
955{ 170{
956 pm_set_ops(NULL);
957
958 device_remove_file(&pdev->dev, &dev_attr_battery_percentage);
959 device_remove_file(&pdev->dev, &dev_attr_battery_voltage);
960
961 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr); 171 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr);
962 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr); 172 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr);
963 173
@@ -966,32 +176,4 @@ static int sharpsl_pm_remove(struct platform_device *pdev)
966 176
967 if (!machine_is_corgi()) 177 if (!machine_is_corgi())
968 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr); 178 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr);
969
970 del_timer_sync(&sharpsl_pm.chrg_full_timer);
971 del_timer_sync(&sharpsl_pm.ac_timer);
972
973 return 0;
974} 179}
975
976static struct platform_driver sharpsl_pm_driver = {
977 .probe = sharpsl_pm_probe,
978 .remove = sharpsl_pm_remove,
979 .suspend = sharpsl_pm_suspend,
980 .resume = sharpsl_pm_resume,
981 .driver = {
982 .name = "sharpsl-pm",
983 },
984};
985
986static int __devinit sharpsl_pm_init(void)
987{
988 return platform_driver_register(&sharpsl_pm_driver);
989}
990
991static void sharpsl_pm_exit(void)
992{
993 platform_driver_unregister(&sharpsl_pm_driver);
994}
995
996late_initcall(sharpsl_pm_init);
997module_exit(sharpsl_pm_exit);
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index 2df1b56615..a9eacc0655 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -36,6 +36,7 @@
36#include <asm/arch/irq.h> 36#include <asm/arch/irq.h>
37#include <asm/arch/irda.h> 37#include <asm/arch/irda.h>
38#include <asm/arch/mmc.h> 38#include <asm/arch/mmc.h>
39#include <asm/arch/ohci.h>
39#include <asm/arch/udc.h> 40#include <asm/arch/udc.h>
40#include <asm/arch/pxafb.h> 41#include <asm/arch/pxafb.h>
41#include <asm/arch/akita.h> 42#include <asm/arch/akita.h>
@@ -126,10 +127,12 @@ static void spitz_card_pwr_ctrl(int device, unsigned short new_cpr)
126 cpr &= ~0x0002; 127 cpr &= ~0x0002;
127 if (device == SPITZ_PWR_SD) 128 if (device == SPITZ_PWR_SD)
128 cpr &= ~0x0004; 129 cpr &= ~0x0004;
129 write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, cpr | new_cpr);
130 if (!(cpr & 0x0002) && !(cpr & 0x0004)) { 130 if (!(cpr & 0x0002) && !(cpr & 0x0004)) {
131 write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, 0x0000);
131 mdelay(1); 132 mdelay(1);
132 reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_CF_POWER); 133 reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_CF_POWER);
134 } else {
135 write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, cpr | new_cpr);
133 } 136 }
134 } 137 }
135} 138}
@@ -293,15 +296,14 @@ static int spitz_mci_init(struct device *dev, irqreturn_t (*spitz_detect_int)(in
293 296
294 spitz_mci_platform_data.detect_delay = msecs_to_jiffies(250); 297 spitz_mci_platform_data.detect_delay = msecs_to_jiffies(250);
295 298
296 err = request_irq(SPITZ_IRQ_GPIO_nSD_DETECT, spitz_detect_int, SA_INTERRUPT, 299 err = request_irq(SPITZ_IRQ_GPIO_nSD_DETECT, spitz_detect_int,
297 "MMC card detect", data); 300 SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
301 "MMC card detect", data);
298 if (err) { 302 if (err) {
299 printk(KERN_ERR "spitz_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); 303 printk(KERN_ERR "spitz_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
300 return -1; 304 return -1;
301 } 305 }
302 306
303 set_irq_type(SPITZ_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE);
304
305 return 0; 307 return 0;
306} 308}
307 309
@@ -335,6 +337,35 @@ static struct pxamci_platform_data spitz_mci_platform_data = {
335 337
336 338
337/* 339/*
340 * USB Host (OHCI)
341 */
342static int spitz_ohci_init(struct device *dev)
343{
344 /* Only Port 2 is connected */
345 pxa_gpio_mode(SPITZ_GPIO_USB_CONNECT | GPIO_IN);
346 pxa_gpio_mode(SPITZ_GPIO_USB_HOST | GPIO_OUT);
347 pxa_gpio_mode(SPITZ_GPIO_USB_DEVICE | GPIO_IN);
348
349 /* Setup USB Port 2 Output Control Register */
350 UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
351
352 GPSR(SPITZ_GPIO_USB_HOST) = GPIO_bit(SPITZ_GPIO_USB_HOST);
353
354 UHCHR = (UHCHR) &
355 ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
356
357 UHCRHDA |= UHCRHDA_NOCP;
358
359 return 0;
360}
361
362static struct pxaohci_platform_data spitz_ohci_platform_data = {
363 .port_mode = PMM_NPS_MODE,
364 .init = spitz_ohci_init,
365};
366
367
368/*
338 * Irda 369 * Irda
339 */ 370 */
340static void spitz_irda_transceiver_mode(struct device *dev, int mode) 371static void spitz_irda_transceiver_mode(struct device *dev, int mode)
@@ -411,6 +442,7 @@ static void __init common_init(void)
411 442
412 platform_add_devices(devices, ARRAY_SIZE(devices)); 443 platform_add_devices(devices, ARRAY_SIZE(devices));
413 pxa_set_mci_info(&spitz_mci_platform_data); 444 pxa_set_mci_info(&spitz_mci_platform_data);
445 pxa_set_ohci_info(&spitz_ohci_platform_data);
414 pxa_set_ficp_info(&spitz_ficp_platform_data); 446 pxa_set_ficp_info(&spitz_ficp_platform_data);
415 set_pxa_fb_parent(&spitzssp_device.dev); 447 set_pxa_fb_parent(&spitzssp_device.dev);
416 set_pxa_fb_info(&spitz_pxafb_info); 448 set_pxa_fb_info(&spitz_pxafb_info);
diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c
index 3ce7486daa..5e5bdc8984 100644
--- a/arch/arm/mach-pxa/spitz_pm.c
+++ b/arch/arm/mach-pxa/spitz_pm.c
@@ -33,19 +33,7 @@ static void spitz_charger_init(void)
33{ 33{
34 pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN); 34 pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN);
35 pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN); 35 pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN);
36} 36 sharpsl_pm_pxa_init();
37
38static void spitz_charge_led(int val)
39{
40 if (val == SHARPSL_LED_ERROR) {
41 dev_dbg(sharpsl_pm.dev, "Charge LED Error\n");
42 } else if (val == SHARPSL_LED_ON) {
43 dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
44 set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
45 } else {
46 dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
47 reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
48 }
49} 37}
50 38
51static void spitz_measure_temp(int on) 39static void spitz_measure_temp(int on)
@@ -92,7 +80,7 @@ static void spitz_discharge1(int on)
92 80
93static void spitz_presuspend(void) 81static void spitz_presuspend(void)
94{ 82{
95 spitz_last_ac_status = STATUS_AC_IN(); 83 spitz_last_ac_status = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
96 84
97 /* GPIO Sleep Register */ 85 /* GPIO Sleep Register */
98 PGSR0 = 0x00144018; 86 PGSR0 = 0x00144018;
@@ -138,7 +126,7 @@ static void spitz_postsuspend(void)
138static int spitz_should_wakeup(unsigned int resume_on_alarm) 126static int spitz_should_wakeup(unsigned int resume_on_alarm)
139{ 127{
140 int is_resume = 0; 128 int is_resume = 0;
141 int acin = STATUS_AC_IN(); 129 int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
142 130
143 if (spitz_last_ac_status != acin) { 131 if (spitz_last_ac_status != acin) {
144 if (acin) { 132 if (acin) {
@@ -148,8 +136,8 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm)
148 } else { 136 } else {
149 /* charge off */ 137 /* charge off */
150 dev_dbg(sharpsl_pm.dev, "AC Removed\n"); 138 dev_dbg(sharpsl_pm.dev, "AC Removed\n");
151 CHARGE_LED_OFF(); 139 sharpsl_pm_led(SHARPSL_LED_OFF);
152 CHARGE_OFF(); 140 sharpsl_pm.machinfo->charge(0);
153 sharpsl_pm.charge_mode = CHRG_OFF; 141 sharpsl_pm.charge_mode = CHRG_OFF;
154 } 142 }
155 spitz_last_ac_status = acin; 143 spitz_last_ac_status = acin;
@@ -175,25 +163,41 @@ static unsigned long spitz_charger_wakeup(void)
175 return (~GPLR0 & GPIO_bit(SPITZ_GPIO_KEY_INT)) | (GPLR0 & GPIO_bit(SPITZ_GPIO_SYNC)); 163 return (~GPLR0 & GPIO_bit(SPITZ_GPIO_KEY_INT)) | (GPLR0 & GPIO_bit(SPITZ_GPIO_SYNC));
176} 164}
177 165
178static int spitz_acin_status(void) 166unsigned long spitzpm_read_devdata(int type)
179{ 167{
180 return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0); 168 switch(type) {
169 case SHARPSL_STATUS_ACIN:
170 return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0);
171 case SHARPSL_STATUS_LOCK:
172 return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
173 case SHARPSL_STATUS_CHRGFULL:
174 return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
175 case SHARPSL_STATUS_FATAL:
176 return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
177 case SHARPSL_ACIN_VOLT:
178 return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
179 case SHARPSL_BATT_TEMP:
180 return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP);
181 case SHARPSL_BATT_VOLT:
182 default:
183 return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT);
184 }
181} 185}
182 186
183struct sharpsl_charger_machinfo spitz_pm_machinfo = { 187struct sharpsl_charger_machinfo spitz_pm_machinfo = {
184 .init = spitz_charger_init, 188 .init = spitz_charger_init,
189 .exit = sharpsl_pm_pxa_remove,
185 .gpio_batlock = SPITZ_GPIO_BAT_COVER, 190 .gpio_batlock = SPITZ_GPIO_BAT_COVER,
186 .gpio_acin = SPITZ_GPIO_AC_IN, 191 .gpio_acin = SPITZ_GPIO_AC_IN,
187 .gpio_batfull = SPITZ_GPIO_CHRG_FULL, 192 .gpio_batfull = SPITZ_GPIO_CHRG_FULL,
188 .gpio_fatal = SPITZ_GPIO_FATAL_BAT, 193 .gpio_fatal = SPITZ_GPIO_FATAL_BAT,
189 .status_acin = spitz_acin_status,
190 .discharge = spitz_discharge, 194 .discharge = spitz_discharge,
191 .discharge1 = spitz_discharge1, 195 .discharge1 = spitz_discharge1,
192 .charge = spitz_charge, 196 .charge = spitz_charge,
193 .chargeled = spitz_charge_led,
194 .measure_temp = spitz_measure_temp, 197 .measure_temp = spitz_measure_temp,
195 .presuspend = spitz_presuspend, 198 .presuspend = spitz_presuspend,
196 .postsuspend = spitz_postsuspend, 199 .postsuspend = spitz_postsuspend,
200 .read_devdata = spitzpm_read_devdata,
197 .charger_wakeup = spitz_charger_wakeup, 201 .charger_wakeup = spitz_charger_wakeup,
198 .should_wakeup = spitz_should_wakeup, 202 .should_wakeup = spitz_should_wakeup,
199 .bat_levels = 40, 203 .bat_levels = 40,
diff --git a/arch/arm/mach-pxa/ssp.c b/arch/arm/mach-pxa/ssp.c
index a68b30eff4..93096befd0 100644
--- a/arch/arm/mach-pxa/ssp.c
+++ b/arch/arm/mach-pxa/ssp.c
@@ -31,6 +31,7 @@
31#include <linux/interrupt.h> 31#include <linux/interrupt.h>
32#include <linux/ioport.h> 32#include <linux/ioport.h>
33#include <linux/init.h> 33#include <linux/init.h>
34#include <linux/mutex.h>
34#include <asm/io.h> 35#include <asm/io.h>
35#include <asm/irq.h> 36#include <asm/irq.h>
36#include <asm/hardware.h> 37#include <asm/hardware.h>
@@ -59,7 +60,7 @@ static const struct ssp_info_ ssp_info[PXA_SSP_PORTS] = {
59#endif 60#endif
60}; 61};
61 62
62static DECLARE_MUTEX(sem); 63static DEFINE_MUTEX(mutex);
63static int use_count[PXA_SSP_PORTS] = {0, 0, 0}; 64static int use_count[PXA_SSP_PORTS] = {0, 0, 0};
64 65
65static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs) 66static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
@@ -239,16 +240,16 @@ int ssp_init(struct ssp_dev *dev, u32 port, u32 init_flags)
239 if (port > PXA_SSP_PORTS || port == 0) 240 if (port > PXA_SSP_PORTS || port == 0)
240 return -ENODEV; 241 return -ENODEV;
241 242
242 down(&sem); 243 mutex_lock(&mutex);
243 if (use_count[port - 1]) { 244 if (use_count[port - 1]) {
244 up(&sem); 245 mutex_unlock(&mutex);
245 return -EBUSY; 246 return -EBUSY;
246 } 247 }
247 use_count[port - 1]++; 248 use_count[port - 1]++;
248 249
249 if (!request_mem_region(__PREG(SSCR0_P(port)), 0x2c, "SSP")) { 250 if (!request_mem_region(__PREG(SSCR0_P(port)), 0x2c, "SSP")) {
250 use_count[port - 1]--; 251 use_count[port - 1]--;
251 up(&sem); 252 mutex_unlock(&mutex);
252 return -EBUSY; 253 return -EBUSY;
253 } 254 }
254 dev->port = port; 255 dev->port = port;
@@ -265,13 +266,13 @@ int ssp_init(struct ssp_dev *dev, u32 port, u32 init_flags)
265 266
266 /* turn on SSP port clock */ 267 /* turn on SSP port clock */
267 pxa_set_cken(ssp_info[port-1].clock, 1); 268 pxa_set_cken(ssp_info[port-1].clock, 1);
268 up(&sem); 269 mutex_unlock(&mutex);
269 return 0; 270 return 0;
270 271
271out_region: 272out_region:
272 release_mem_region(__PREG(SSCR0_P(port)), 0x2c); 273 release_mem_region(__PREG(SSCR0_P(port)), 0x2c);
273 use_count[port - 1]--; 274 use_count[port - 1]--;
274 up(&sem); 275 mutex_unlock(&mutex);
275 return ret; 276 return ret;
276} 277}
277 278
@@ -282,7 +283,7 @@ out_region:
282 */ 283 */
283void ssp_exit(struct ssp_dev *dev) 284void ssp_exit(struct ssp_dev *dev)
284{ 285{
285 down(&sem); 286 mutex_lock(&mutex);
286 SSCR0_P(dev->port) &= ~SSCR0_SSE; 287 SSCR0_P(dev->port) &= ~SSCR0_SSE;
287 288
288 if (dev->port > PXA_SSP_PORTS || dev->port == 0) { 289 if (dev->port > PXA_SSP_PORTS || dev->port == 0) {
@@ -295,7 +296,7 @@ void ssp_exit(struct ssp_dev *dev)
295 free_irq(dev->irq, dev); 296 free_irq(dev->irq, dev);
296 release_mem_region(__PREG(SSCR0_P(dev->port)), 0x2c); 297 release_mem_region(__PREG(SSCR0_P(dev->port)), 0x2c);
297 use_count[dev->port - 1]--; 298 use_count[dev->port - 1]--;
298 up(&sem); 299 mutex_unlock(&mutex);
299} 300}
300 301
301EXPORT_SYMBOL(ssp_write_word); 302EXPORT_SYMBOL(ssp_write_word);
diff --git a/arch/arm/mach-realview/clock.c b/arch/arm/mach-realview/clock.c
index 002635c97b..21325a4da9 100644
--- a/arch/arm/mach-realview/clock.c
+++ b/arch/arm/mach-realview/clock.c
@@ -13,28 +13,29 @@
13#include <linux/list.h> 13#include <linux/list.h>
14#include <linux/errno.h> 14#include <linux/errno.h>
15#include <linux/err.h> 15#include <linux/err.h>
16#include <linux/clk.h>
17#include <linux/mutex.h>
16 18
17#include <asm/semaphore.h> 19#include <asm/semaphore.h>
18#include <asm/hardware/clock.h>
19#include <asm/hardware/icst307.h> 20#include <asm/hardware/icst307.h>
20 21
21#include "clock.h" 22#include "clock.h"
22 23
23static LIST_HEAD(clocks); 24static LIST_HEAD(clocks);
24static DECLARE_MUTEX(clocks_sem); 25static DEFINE_MUTEX(clocks_mutex);
25 26
26struct clk *clk_get(struct device *dev, const char *id) 27struct clk *clk_get(struct device *dev, const char *id)
27{ 28{
28 struct clk *p, *clk = ERR_PTR(-ENOENT); 29 struct clk *p, *clk = ERR_PTR(-ENOENT);
29 30
30 down(&clocks_sem); 31 mutex_lock(&clocks_mutex);
31 list_for_each_entry(p, &clocks, node) { 32 list_for_each_entry(p, &clocks, node) {
32 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 33 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
33 clk = p; 34 clk = p;
34 break; 35 break;
35 } 36 }
36 } 37 }
37 up(&clocks_sem); 38 mutex_unlock(&clocks_mutex);
38 39
39 return clk; 40 return clk;
40} 41}
@@ -57,17 +58,6 @@ void clk_disable(struct clk *clk)
57} 58}
58EXPORT_SYMBOL(clk_disable); 59EXPORT_SYMBOL(clk_disable);
59 60
60int clk_use(struct clk *clk)
61{
62 return 0;
63}
64EXPORT_SYMBOL(clk_use);
65
66void clk_unuse(struct clk *clk)
67{
68}
69EXPORT_SYMBOL(clk_unuse);
70
71unsigned long clk_get_rate(struct clk *clk) 61unsigned long clk_get_rate(struct clk *clk)
72{ 62{
73 return clk->rate; 63 return clk->rate;
@@ -120,18 +110,18 @@ static struct clk mmci_clk = {
120 110
121int clk_register(struct clk *clk) 111int clk_register(struct clk *clk)
122{ 112{
123 down(&clocks_sem); 113 mutex_lock(&clocks_mutex);
124 list_add(&clk->node, &clocks); 114 list_add(&clk->node, &clocks);
125 up(&clocks_sem); 115 mutex_unlock(&clocks_mutex);
126 return 0; 116 return 0;
127} 117}
128EXPORT_SYMBOL(clk_register); 118EXPORT_SYMBOL(clk_register);
129 119
130void clk_unregister(struct clk *clk) 120void clk_unregister(struct clk *clk)
131{ 121{
132 down(&clocks_sem); 122 mutex_lock(&clocks_mutex);
133 list_del(&clk->node); 123 list_del(&clk->node);
134 up(&clocks_sem); 124 mutex_unlock(&clocks_mutex);
135} 125}
136EXPORT_SYMBOL(clk_unregister); 126EXPORT_SYMBOL(clk_unregister);
137 127
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c
index af6580f1ce..4a222f59f2 100644
--- a/arch/arm/mach-realview/core.c
+++ b/arch/arm/mach-realview/core.c
@@ -24,14 +24,14 @@
24#include <linux/dma-mapping.h> 24#include <linux/dma-mapping.h>
25#include <linux/sysdev.h> 25#include <linux/sysdev.h>
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/amba/bus.h>
28#include <linux/amba/clcd.h>
27 29
28#include <asm/system.h> 30#include <asm/system.h>
29#include <asm/hardware.h> 31#include <asm/hardware.h>
30#include <asm/io.h> 32#include <asm/io.h>
31#include <asm/irq.h> 33#include <asm/irq.h>
32#include <asm/leds.h> 34#include <asm/leds.h>
33#include <asm/hardware/amba.h>
34#include <asm/hardware/amba_clcd.h>
35#include <asm/hardware/arm_timer.h> 35#include <asm/hardware/arm_timer.h>
36#include <asm/hardware/icst307.h> 36#include <asm/hardware/icst307.h>
37 37
diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h
index c06e6041df..93e86d9f43 100644
--- a/arch/arm/mach-realview/core.h
+++ b/arch/arm/mach-realview/core.h
@@ -22,7 +22,8 @@
22#ifndef __ASM_ARCH_REALVIEW_H 22#ifndef __ASM_ARCH_REALVIEW_H
23#define __ASM_ARCH_REALVIEW_H 23#define __ASM_ARCH_REALVIEW_H
24 24
25#include <asm/hardware/amba.h> 25#include <linux/amba/bus.h>
26
26#include <asm/leds.h> 27#include <asm/leds.h>
27#include <asm/io.h> 28#include <asm/io.h>
28 29
diff --git a/arch/arm/mach-realview/localtimer.c b/arch/arm/mach-realview/localtimer.c
index c9d7c596b2..caf6b8bb6c 100644
--- a/arch/arm/mach-realview/localtimer.c
+++ b/arch/arm/mach-realview/localtimer.c
@@ -13,6 +13,7 @@
13#include <linux/delay.h> 13#include <linux/delay.h>
14#include <linux/device.h> 14#include <linux/device.h>
15#include <linux/smp.h> 15#include <linux/smp.h>
16#include <linux/jiffies.h>
16 17
17#include <asm/mach/time.h> 18#include <asm/mach/time.h>
18#include <asm/hardware/arm_twd.h> 19#include <asm/hardware/arm_twd.h>
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c
index 7dc32503fd..112f7592ac 100644
--- a/arch/arm/mach-realview/realview_eb.c
+++ b/arch/arm/mach-realview/realview_eb.c
@@ -23,6 +23,7 @@
23#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/platform_device.h> 24#include <linux/platform_device.h>
25#include <linux/sysdev.h> 25#include <linux/sysdev.h>
26#include <linux/amba/bus.h>
26 27
27#include <asm/hardware.h> 28#include <asm/hardware.h>
28#include <asm/io.h> 29#include <asm/io.h>
@@ -30,7 +31,6 @@
30#include <asm/leds.h> 31#include <asm/leds.h>
31#include <asm/mach-types.h> 32#include <asm/mach-types.h>
32#include <asm/hardware/gic.h> 33#include <asm/hardware/gic.h>
33#include <asm/hardware/amba.h>
34#include <asm/hardware/icst307.h> 34#include <asm/hardware/icst307.h>
35 35
36#include <asm/mach/arch.h> 36#include <asm/mach/arch.h>
diff --git a/arch/arm/mach-rpc/dma.c b/arch/arm/mach-rpc/dma.c
index bc0747439f..bd86ffba88 100644
--- a/arch/arm/mach-rpc/dma.c
+++ b/arch/arm/mach-rpc/dma.c
@@ -13,7 +13,7 @@
13#include <linux/mman.h> 13#include <linux/mman.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/interrupt.h> 15#include <linux/interrupt.h>
16#include <linux/pci.h> 16#include <linux/dma-mapping.h>
17 17
18#include <asm/page.h> 18#include <asm/page.h>
19#include <asm/dma.h> 19#include <asm/dma.h>
@@ -148,11 +148,14 @@ static void iomd_enable_dma(dmach_t channel, dma_t *dma)
148 * Cope with ISA-style drivers which expect cache 148 * Cope with ISA-style drivers which expect cache
149 * coherence. 149 * coherence.
150 */ 150 */
151 if (!dma->using_sg) { 151 if (!dma->sg) {
152 dma->buf.dma_address = pci_map_single(NULL, 152 dma->sg = &dma->buf;
153 dma->buf.__address, dma->buf.length, 153 dma->sgcount = 1;
154 dma->buf.length = dma->count;
155 dma->buf.dma_address = dma_map_single(NULL,
156 dma->addr, dma->count,
154 dma->dma_mode == DMA_MODE_READ ? 157 dma->dma_mode == DMA_MODE_READ ?
155 PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); 158 DMA_FROM_DEVICE : DMA_TO_DEVICE);
156 } 159 }
157 160
158 iomd_writeb(DMA_CR_C, dma_base + CR); 161 iomd_writeb(DMA_CR_C, dma_base + CR);
@@ -239,7 +242,7 @@ static void floppy_enable_dma(dmach_t channel, dma_t *dma)
239 unsigned int fiqhandler_length; 242 unsigned int fiqhandler_length;
240 struct pt_regs regs; 243 struct pt_regs regs;
241 244
242 if (dma->using_sg) 245 if (dma->sg)
243 BUG(); 246 BUG();
244 247
245 if (dma->dma_mode == DMA_MODE_READ) { 248 if (dma->dma_mode == DMA_MODE_READ) {
@@ -252,8 +255,8 @@ static void floppy_enable_dma(dmach_t channel, dma_t *dma)
252 fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start; 255 fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start;
253 } 256 }
254 257
255 regs.ARM_r9 = dma->buf.length; 258 regs.ARM_r9 = dma->count;
256 regs.ARM_r10 = (unsigned long)dma->buf.__address; 259 regs.ARM_r10 = (unsigned long)dma->addr;
257 regs.ARM_fp = (unsigned long)FLOPPYDMA_BASE; 260 regs.ARM_fp = (unsigned long)FLOPPYDMA_BASE;
258 261
259 if (claim_fiq(&fh)) { 262 if (claim_fiq(&fh)) {
diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c
index 82e8253b1f..af2f3d52b6 100644
--- a/arch/arm/mach-s3c2410/clock.c
+++ b/arch/arm/mach-s3c2410/clock.c
@@ -34,16 +34,16 @@
34#include <linux/err.h> 34#include <linux/err.h>
35#include <linux/platform_device.h> 35#include <linux/platform_device.h>
36#include <linux/sysdev.h> 36#include <linux/sysdev.h>
37
38#include <linux/interrupt.h> 37#include <linux/interrupt.h>
39#include <linux/ioport.h> 38#include <linux/ioport.h>
39#include <linux/clk.h>
40#include <linux/mutex.h>
40 41
41#include <asm/hardware.h> 42#include <asm/hardware.h>
42#include <asm/atomic.h> 43#include <asm/atomic.h>
43#include <asm/irq.h> 44#include <asm/irq.h>
44#include <asm/io.h> 45#include <asm/io.h>
45 46
46#include <asm/hardware/clock.h>
47#include <asm/arch/regs-clock.h> 47#include <asm/arch/regs-clock.h>
48 48
49#include "clock.h" 49#include "clock.h"
@@ -52,7 +52,7 @@
52/* clock information */ 52/* clock information */
53 53
54static LIST_HEAD(clocks); 54static LIST_HEAD(clocks);
55static DECLARE_MUTEX(clocks_sem); 55static DEFINE_MUTEX(clocks_mutex);
56 56
57/* old functions */ 57/* old functions */
58 58
@@ -103,7 +103,7 @@ struct clk *clk_get(struct device *dev, const char *id)
103 else 103 else
104 idno = to_platform_device(dev)->id; 104 idno = to_platform_device(dev)->id;
105 105
106 down(&clocks_sem); 106 mutex_lock(&clocks_mutex);
107 107
108 list_for_each_entry(p, &clocks, list) { 108 list_for_each_entry(p, &clocks, list) {
109 if (p->id == idno && 109 if (p->id == idno &&
@@ -127,7 +127,7 @@ struct clk *clk_get(struct device *dev, const char *id)
127 } 127 }
128 } 128 }
129 129
130 up(&clocks_sem); 130 mutex_unlock(&clocks_mutex);
131 return clk; 131 return clk;
132} 132}
133 133
@@ -151,18 +151,6 @@ void clk_disable(struct clk *clk)
151} 151}
152 152
153 153
154int clk_use(struct clk *clk)
155{
156 atomic_inc(&clk->used);
157 return 0;
158}
159
160
161void clk_unuse(struct clk *clk)
162{
163 atomic_dec(&clk->used);
164}
165
166unsigned long clk_get_rate(struct clk *clk) 154unsigned long clk_get_rate(struct clk *clk)
167{ 155{
168 if (IS_ERR(clk)) 156 if (IS_ERR(clk))
@@ -196,8 +184,6 @@ EXPORT_SYMBOL(clk_get);
196EXPORT_SYMBOL(clk_put); 184EXPORT_SYMBOL(clk_put);
197EXPORT_SYMBOL(clk_enable); 185EXPORT_SYMBOL(clk_enable);
198EXPORT_SYMBOL(clk_disable); 186EXPORT_SYMBOL(clk_disable);
199EXPORT_SYMBOL(clk_use);
200EXPORT_SYMBOL(clk_unuse);
201EXPORT_SYMBOL(clk_get_rate); 187EXPORT_SYMBOL(clk_get_rate);
202EXPORT_SYMBOL(clk_round_rate); 188EXPORT_SYMBOL(clk_round_rate);
203EXPORT_SYMBOL(clk_set_rate); 189EXPORT_SYMBOL(clk_set_rate);
@@ -268,100 +254,101 @@ struct clk s3c24xx_uclk = {
268/* clock definitions */ 254/* clock definitions */
269 255
270static struct clk init_clocks[] = { 256static struct clk init_clocks[] = {
271 { .name = "nand", 257 {
272 .id = -1, 258 .name = "nand",
273 .parent = &clk_h, 259 .id = -1,
274 .enable = s3c24xx_clkcon_enable, 260 .parent = &clk_h,
275 .ctrlbit = S3C2410_CLKCON_NAND 261 .enable = s3c24xx_clkcon_enable,
276 }, 262 .ctrlbit = S3C2410_CLKCON_NAND,
277 { .name = "lcd", 263 }, {
278 .id = -1, 264 .name = "lcd",
279 .parent = &clk_h, 265 .id = -1,
280 .enable = s3c24xx_clkcon_enable, 266 .parent = &clk_h,
281 .ctrlbit = S3C2410_CLKCON_LCDC 267 .enable = s3c24xx_clkcon_enable,
282 }, 268 .ctrlbit = S3C2410_CLKCON_LCDC,
283 { .name = "usb-host", 269 }, {
284 .id = -1, 270 .name = "usb-host",
285 .parent = &clk_h, 271 .id = -1,
286 .enable = s3c24xx_clkcon_enable, 272 .parent = &clk_h,
287 .ctrlbit = S3C2410_CLKCON_USBH 273 .enable = s3c24xx_clkcon_enable,
288 }, 274 .ctrlbit = S3C2410_CLKCON_USBH,
289 { .name = "usb-device", 275 }, {
290 .id = -1, 276 .name = "usb-device",
291 .parent = &clk_h, 277 .id = -1,
292 .enable = s3c24xx_clkcon_enable, 278 .parent = &clk_h,
293 .ctrlbit = S3C2410_CLKCON_USBD 279 .enable = s3c24xx_clkcon_enable,
294 }, 280 .ctrlbit = S3C2410_CLKCON_USBD,
295 { .name = "timers", 281 }, {
296 .id = -1, 282 .name = "timers",
297 .parent = &clk_p, 283 .id = -1,
298 .enable = s3c24xx_clkcon_enable, 284 .parent = &clk_p,
299 .ctrlbit = S3C2410_CLKCON_PWMT 285 .enable = s3c24xx_clkcon_enable,
300 }, 286 .ctrlbit = S3C2410_CLKCON_PWMT,
301 { .name = "sdi", 287 }, {
302 .id = -1, 288 .name = "sdi",
303 .parent = &clk_p, 289 .id = -1,
304 .enable = s3c24xx_clkcon_enable, 290 .parent = &clk_p,
305 .ctrlbit = S3C2410_CLKCON_SDI 291 .enable = s3c24xx_clkcon_enable,
306 }, 292 .ctrlbit = S3C2410_CLKCON_SDI,
307 { .name = "uart", 293 }, {
308 .id = 0, 294 .name = "uart",
309 .parent = &clk_p, 295 .id = 0,
310 .enable = s3c24xx_clkcon_enable, 296 .parent = &clk_p,
311 .ctrlbit = S3C2410_CLKCON_UART0 297 .enable = s3c24xx_clkcon_enable,
312 }, 298 .ctrlbit = S3C2410_CLKCON_UART0,
313 { .name = "uart", 299 }, {
314 .id = 1, 300 .name = "uart",
315 .parent = &clk_p, 301 .id = 1,
316 .enable = s3c24xx_clkcon_enable, 302 .parent = &clk_p,
317 .ctrlbit = S3C2410_CLKCON_UART1 303 .enable = s3c24xx_clkcon_enable,
318 }, 304 .ctrlbit = S3C2410_CLKCON_UART1,
319 { .name = "uart", 305 }, {
320 .id = 2, 306 .name = "uart",
321 .parent = &clk_p, 307 .id = 2,
322 .enable = s3c24xx_clkcon_enable, 308 .parent = &clk_p,
323 .ctrlbit = S3C2410_CLKCON_UART2 309 .enable = s3c24xx_clkcon_enable,
324 }, 310 .ctrlbit = S3C2410_CLKCON_UART2,
325 { .name = "gpio", 311 }, {
326 .id = -1, 312 .name = "gpio",
327 .parent = &clk_p, 313 .id = -1,
328 .enable = s3c24xx_clkcon_enable, 314 .parent = &clk_p,
329 .ctrlbit = S3C2410_CLKCON_GPIO 315 .enable = s3c24xx_clkcon_enable,
330 }, 316 .ctrlbit = S3C2410_CLKCON_GPIO,
331 { .name = "rtc", 317 }, {
332 .id = -1, 318 .name = "rtc",
333 .parent = &clk_p, 319 .id = -1,
334 .enable = s3c24xx_clkcon_enable, 320 .parent = &clk_p,
335 .ctrlbit = S3C2410_CLKCON_RTC 321 .enable = s3c24xx_clkcon_enable,
336 }, 322 .ctrlbit = S3C2410_CLKCON_RTC,
337 { .name = "adc", 323 }, {
338 .id = -1, 324 .name = "adc",
339 .parent = &clk_p, 325 .id = -1,
340 .enable = s3c24xx_clkcon_enable, 326 .parent = &clk_p,
341 .ctrlbit = S3C2410_CLKCON_ADC 327 .enable = s3c24xx_clkcon_enable,
342 }, 328 .ctrlbit = S3C2410_CLKCON_ADC,
343 { .name = "i2c", 329 }, {
344 .id = -1, 330 .name = "i2c",
345 .parent = &clk_p, 331 .id = -1,
346 .enable = s3c24xx_clkcon_enable, 332 .parent = &clk_p,
347 .ctrlbit = S3C2410_CLKCON_IIC 333 .enable = s3c24xx_clkcon_enable,
348 }, 334 .ctrlbit = S3C2410_CLKCON_IIC,
349 { .name = "iis", 335 }, {
350 .id = -1, 336 .name = "iis",
351 .parent = &clk_p, 337 .id = -1,
352 .enable = s3c24xx_clkcon_enable, 338 .parent = &clk_p,
353 .ctrlbit = S3C2410_CLKCON_IIS 339 .enable = s3c24xx_clkcon_enable,
354 }, 340 .ctrlbit = S3C2410_CLKCON_IIS,
355 { .name = "spi", 341 }, {
356 .id = -1, 342 .name = "spi",
357 .parent = &clk_p, 343 .id = -1,
358 .enable = s3c24xx_clkcon_enable, 344 .parent = &clk_p,
359 .ctrlbit = S3C2410_CLKCON_SPI 345 .enable = s3c24xx_clkcon_enable,
360 }, 346 .ctrlbit = S3C2410_CLKCON_SPI,
361 { .name = "watchdog", 347 }, {
362 .id = -1, 348 .name = "watchdog",
363 .parent = &clk_p, 349 .id = -1,
364 .ctrlbit = 0 350 .parent = &clk_p,
351 .ctrlbit = 0,
365 } 352 }
366}; 353};
367 354
@@ -370,16 +357,15 @@ static struct clk init_clocks[] = {
370int s3c24xx_register_clock(struct clk *clk) 357int s3c24xx_register_clock(struct clk *clk)
371{ 358{
372 clk->owner = THIS_MODULE; 359 clk->owner = THIS_MODULE;
373 atomic_set(&clk->used, 0);
374 360
375 if (clk->enable == NULL) 361 if (clk->enable == NULL)
376 clk->enable = clk_null_enable; 362 clk->enable = clk_null_enable;
377 363
378 /* add to the list of available clocks */ 364 /* add to the list of available clocks */
379 365
380 down(&clocks_sem); 366 mutex_lock(&clocks_mutex);
381 list_add(&clk->list, &clocks); 367 list_add(&clk->list, &clocks);
382 up(&clocks_sem); 368 mutex_unlock(&clocks_mutex);
383 369
384 return 0; 370 return 0;
385} 371}
@@ -406,16 +392,15 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
406 clk_p.rate = pclk; 392 clk_p.rate = pclk;
407 clk_f.rate = fclk; 393 clk_f.rate = fclk;
408 394
409 /* it looks like just setting the register here is not good 395 /* We must be careful disabling the clocks we are not intending to
410 * enough, and causes the odd hang at initial boot time, so 396 * be using at boot time, as subsytems such as the LCD which do
411 * do all of them indivdually. 397 * their own DMA requests to the bus can cause the system to lockup
412 * 398 * if they where in the middle of requesting bus access.
413 * I think disabling the LCD clock if the LCD is active is
414 * very dangerous, and therefore the bootloader should be
415 * careful to not enable the LCD clock if it is not needed.
416 * 399 *
417 * and of course, this looks neater 400 * Disabling the LCD clock if the LCD is active is very dangerous,
418 */ 401 * and therefore the bootloader should be careful to not enable
402 * the LCD clock if it is not needed.
403 */
419 404
420 s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0); 405 s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0);
421 s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0); 406 s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0);
diff --git a/arch/arm/mach-s3c2410/clock.h b/arch/arm/mach-s3c2410/clock.h
index 7953b6f397..177d5c8dec 100644
--- a/arch/arm/mach-s3c2410/clock.h
+++ b/arch/arm/mach-s3c2410/clock.h
@@ -16,7 +16,6 @@ struct clk {
16 struct clk *parent; 16 struct clk *parent;
17 const char *name; 17 const char *name;
18 int id; 18 int id;
19 atomic_t used;
20 unsigned long rate; 19 unsigned long rate;
21 unsigned long ctrlbit; 20 unsigned long ctrlbit;
22 int (*enable)(struct clk *, int enable); 21 int (*enable)(struct clk *, int enable);
diff --git a/arch/arm/mach-s3c2410/s3c2440-clock.c b/arch/arm/mach-s3c2410/s3c2440-clock.c
index c67e0979ae..b557a2be8a 100644
--- a/arch/arm/mach-s3c2410/s3c2440-clock.c
+++ b/arch/arm/mach-s3c2410/s3c2440-clock.c
@@ -29,16 +29,15 @@
29#include <linux/err.h> 29#include <linux/err.h>
30#include <linux/device.h> 30#include <linux/device.h>
31#include <linux/sysdev.h> 31#include <linux/sysdev.h>
32
33#include <linux/interrupt.h> 32#include <linux/interrupt.h>
34#include <linux/ioport.h> 33#include <linux/ioport.h>
34#include <linux/clk.h>
35 35
36#include <asm/hardware.h> 36#include <asm/hardware.h>
37#include <asm/atomic.h> 37#include <asm/atomic.h>
38#include <asm/irq.h> 38#include <asm/irq.h>
39#include <asm/io.h> 39#include <asm/io.h>
40 40
41#include <asm/hardware/clock.h>
42#include <asm/arch/regs-clock.h> 41#include <asm/arch/regs-clock.h>
43 42
44#include "clock.h" 43#include "clock.h"
diff --git a/arch/arm/mach-s3c2410/s3c2440.c b/arch/arm/mach-s3c2410/s3c2440.c
index 4d63e7133b..b7fe6d9453 100644
--- a/arch/arm/mach-s3c2410/s3c2440.c
+++ b/arch/arm/mach-s3c2410/s3c2440.c
@@ -28,6 +28,7 @@
28#include <linux/init.h> 28#include <linux/init.h>
29#include <linux/platform_device.h> 29#include <linux/platform_device.h>
30#include <linux/sysdev.h> 30#include <linux/sysdev.h>
31#include <linux/clk.h>
31 32
32#include <asm/mach/arch.h> 33#include <asm/mach/arch.h>
33#include <asm/mach/map.h> 34#include <asm/mach/map.h>
@@ -36,7 +37,6 @@
36#include <asm/hardware.h> 37#include <asm/hardware.h>
37#include <asm/io.h> 38#include <asm/io.h>
38#include <asm/irq.h> 39#include <asm/irq.h>
39#include <asm/hardware/clock.h>
40 40
41#include <asm/arch/regs-clock.h> 41#include <asm/arch/regs-clock.h>
42#include <asm/arch/regs-serial.h> 42#include <asm/arch/regs-serial.h>
diff --git a/arch/arm/mach-s3c2410/time.c b/arch/arm/mach-s3c2410/time.c
index 8a00e3c3cd..10a2976aef 100644
--- a/arch/arm/mach-s3c2410/time.c
+++ b/arch/arm/mach-s3c2410/time.c
@@ -24,6 +24,7 @@
24#include <linux/init.h> 24#include <linux/init.h>
25#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26#include <linux/err.h> 26#include <linux/err.h>
27#include <linux/clk.h>
27 28
28#include <asm/system.h> 29#include <asm/system.h>
29#include <asm/leds.h> 30#include <asm/leds.h>
@@ -35,7 +36,6 @@
35#include <asm/arch/regs-timer.h> 36#include <asm/arch/regs-timer.h>
36#include <asm/arch/regs-irq.h> 37#include <asm/arch/regs-irq.h>
37#include <asm/mach/time.h> 38#include <asm/mach/time.h>
38#include <asm/hardware/clock.h>
39 39
40#include "clock.h" 40#include "clock.h"
41#include "cpu.h" 41#include "cpu.h"
@@ -191,7 +191,6 @@ static void s3c2410_timer_setup (void)
191 if (IS_ERR(clk)) 191 if (IS_ERR(clk))
192 panic("failed to get clock for system timer"); 192 panic("failed to get clock for system timer");
193 193
194 clk_use(clk);
195 clk_enable(clk); 194 clk_enable(clk);
196 195
197 pclk = clk_get_rate(clk); 196 pclk = clk_get_rate(clk);
diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c
index 5098b50158..495f8c6ffc 100644
--- a/arch/arm/mach-s3c2410/usb-simtec.c
+++ b/arch/arm/mach-s3c2410/usb-simtec.c
@@ -84,13 +84,13 @@ static void usb_simtec_enableoc(struct s3c2410_hcd_info *info, int on)
84 int ret; 84 int ret;
85 85
86 if (on) { 86 if (on) {
87 ret = request_irq(IRQ_USBOC, usb_simtec_ocirq, SA_INTERRUPT, 87 ret = request_irq(IRQ_USBOC, usb_simtec_ocirq,
88 SA_INTERRUPT | SA_TRIGGER_RISING |
89 SA_TRIGGER_FALLING,
88 "USB Over-current", info); 90 "USB Over-current", info);
89 if (ret != 0) { 91 if (ret != 0) {
90 printk(KERN_ERR "failed to request usb oc irq\n"); 92 printk(KERN_ERR "failed to request usb oc irq\n");
91 } 93 }
92
93 set_irq_type(IRQ_USBOC, IRQT_BOTHEDGE);
94 } else { 94 } else {
95 free_irq(IRQ_USBOC, info); 95 free_irq(IRQ_USBOC, info);
96 } 96 }
diff --git a/arch/arm/mach-sa1100/pm.c b/arch/arm/mach-sa1100/pm.c
index 59c7964cfe..786c853423 100644
--- a/arch/arm/mach-sa1100/pm.c
+++ b/arch/arm/mach-sa1100/pm.c
@@ -135,29 +135,11 @@ unsigned long sleep_phys_sp(void *sp)
135} 135}
136 136
137/* 137/*
138 * Called after processes are frozen, but before we shut down devices.
139 */
140static int sa11x0_pm_prepare(suspend_state_t state)
141{
142 return 0;
143}
144
145/*
146 * Called after devices are re-setup, but before processes are thawed.
147 */
148static int sa11x0_pm_finish(suspend_state_t state)
149{
150 return 0;
151}
152
153/*
154 * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. 138 * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk.
155 */ 139 */
156static struct pm_ops sa11x0_pm_ops = { 140static struct pm_ops sa11x0_pm_ops = {
157 .pm_disk_mode = PM_DISK_FIRMWARE, 141 .pm_disk_mode = PM_DISK_FIRMWARE,
158 .prepare = sa11x0_pm_prepare,
159 .enter = sa11x0_pm_enter, 142 .enter = sa11x0_pm_enter,
160 .finish = sa11x0_pm_finish,
161}; 143};
162 144
163static int __init sa11x0_pm_init(void) 145static int __init sa11x0_pm_init(void)
diff --git a/arch/arm/mach-versatile/clock.c b/arch/arm/mach-versatile/clock.c
index b96a2ea15d..9858c96560 100644
--- a/arch/arm/mach-versatile/clock.c
+++ b/arch/arm/mach-versatile/clock.c
@@ -14,28 +14,29 @@
14#include <linux/errno.h> 14#include <linux/errno.h>
15#include <linux/err.h> 15#include <linux/err.h>
16#include <linux/string.h> 16#include <linux/string.h>
17#include <linux/clk.h>
18#include <linux/mutex.h>
17 19
18#include <asm/semaphore.h> 20#include <asm/semaphore.h>
19#include <asm/hardware/clock.h>
20#include <asm/hardware/icst307.h> 21#include <asm/hardware/icst307.h>
21 22
22#include "clock.h" 23#include "clock.h"
23 24
24static LIST_HEAD(clocks); 25static LIST_HEAD(clocks);
25static DECLARE_MUTEX(clocks_sem); 26static DEFINE_MUTEX(clocks_mutex);
26 27
27struct clk *clk_get(struct device *dev, const char *id) 28struct clk *clk_get(struct device *dev, const char *id)
28{ 29{
29 struct clk *p, *clk = ERR_PTR(-ENOENT); 30 struct clk *p, *clk = ERR_PTR(-ENOENT);
30 31
31 down(&clocks_sem); 32 mutex_lock(&clocks_mutex);
32 list_for_each_entry(p, &clocks, node) { 33 list_for_each_entry(p, &clocks, node) {
33 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 34 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
34 clk = p; 35 clk = p;
35 break; 36 break;
36 } 37 }
37 } 38 }
38 up(&clocks_sem); 39 mutex_unlock(&clocks_mutex);
39 40
40 return clk; 41 return clk;
41} 42}
@@ -58,17 +59,6 @@ void clk_disable(struct clk *clk)
58} 59}
59EXPORT_SYMBOL(clk_disable); 60EXPORT_SYMBOL(clk_disable);
60 61
61int clk_use(struct clk *clk)
62{
63 return 0;
64}
65EXPORT_SYMBOL(clk_use);
66
67void clk_unuse(struct clk *clk)
68{
69}
70EXPORT_SYMBOL(clk_unuse);
71
72unsigned long clk_get_rate(struct clk *clk) 62unsigned long clk_get_rate(struct clk *clk)
73{ 63{
74 return clk->rate; 64 return clk->rate;
@@ -121,18 +111,18 @@ static struct clk mmci_clk = {
121 111
122int clk_register(struct clk *clk) 112int clk_register(struct clk *clk)
123{ 113{
124 down(&clocks_sem); 114 mutex_lock(&clocks_mutex);
125 list_add(&clk->node, &clocks); 115 list_add(&clk->node, &clocks);
126 up(&clocks_sem); 116 mutex_unlock(&clocks_mutex);
127 return 0; 117 return 0;
128} 118}
129EXPORT_SYMBOL(clk_register); 119EXPORT_SYMBOL(clk_register);
130 120
131void clk_unregister(struct clk *clk) 121void clk_unregister(struct clk *clk)
132{ 122{
133 down(&clocks_sem); 123 mutex_lock(&clocks_mutex);
134 list_del(&clk->node); 124 list_del(&clk->node);
135 up(&clocks_sem); 125 mutex_unlock(&clocks_mutex);
136} 126}
137EXPORT_SYMBOL(clk_unregister); 127EXPORT_SYMBOL(clk_unregister);
138 128
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
index a1ca46630d..90023745b2 100644
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -25,14 +25,14 @@
25#include <linux/platform_device.h> 25#include <linux/platform_device.h>
26#include <linux/sysdev.h> 26#include <linux/sysdev.h>
27#include <linux/interrupt.h> 27#include <linux/interrupt.h>
28#include <linux/amba/bus.h>
29#include <linux/amba/clcd.h>
28 30
29#include <asm/system.h> 31#include <asm/system.h>
30#include <asm/hardware.h> 32#include <asm/hardware.h>
31#include <asm/io.h> 33#include <asm/io.h>
32#include <asm/irq.h> 34#include <asm/irq.h>
33#include <asm/leds.h> 35#include <asm/leds.h>
34#include <asm/hardware/amba.h>
35#include <asm/hardware/amba_clcd.h>
36#include <asm/hardware/arm_timer.h> 36#include <asm/hardware/arm_timer.h>
37#include <asm/hardware/icst307.h> 37#include <asm/hardware/icst307.h>
38 38
diff --git a/arch/arm/mach-versatile/core.h b/arch/arm/mach-versatile/core.h
index 588c20669d..afcaa858eb 100644
--- a/arch/arm/mach-versatile/core.h
+++ b/arch/arm/mach-versatile/core.h
@@ -22,7 +22,7 @@
22#ifndef __ASM_ARCH_VERSATILE_H 22#ifndef __ASM_ARCH_VERSATILE_H
23#define __ASM_ARCH_VERSATILE_H 23#define __ASM_ARCH_VERSATILE_H
24 24
25#include <asm/hardware/amba.h> 25#include <linux/amba/bus.h>
26 26
27extern void __init versatile_init(void); 27extern void __init versatile_init(void);
28extern void __init versatile_init_irq(void); 28extern void __init versatile_init_irq(void);
diff --git a/arch/arm/mach-versatile/versatile_ab.c b/arch/arm/mach-versatile/versatile_ab.c
index 8b0b3bef24..e74c8a2fbb 100644
--- a/arch/arm/mach-versatile/versatile_ab.c
+++ b/arch/arm/mach-versatile/versatile_ab.c
@@ -23,12 +23,12 @@
23#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/device.h> 24#include <linux/device.h>
25#include <linux/sysdev.h> 25#include <linux/sysdev.h>
26#include <linux/amba/bus.h>
26 27
27#include <asm/hardware.h> 28#include <asm/hardware.h>
28#include <asm/io.h> 29#include <asm/io.h>
29#include <asm/irq.h> 30#include <asm/irq.h>
30#include <asm/mach-types.h> 31#include <asm/mach-types.h>
31#include <asm/hardware/amba.h>
32 32
33#include <asm/mach/arch.h> 33#include <asm/mach/arch.h>
34 34
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c
index 7c3078c389..22d5ca07f7 100644
--- a/arch/arm/mach-versatile/versatile_pb.c
+++ b/arch/arm/mach-versatile/versatile_pb.c
@@ -23,12 +23,12 @@
23#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/device.h> 24#include <linux/device.h>
25#include <linux/sysdev.h> 25#include <linux/sysdev.h>
26#include <linux/amba/bus.h>
26 27
27#include <asm/hardware.h> 28#include <asm/hardware.h>
28#include <asm/io.h> 29#include <asm/io.h>
29#include <asm/irq.h> 30#include <asm/irq.h>
30#include <asm/mach-types.h> 31#include <asm/mach-types.h>
31#include <asm/hardware/amba.h>
32 32
33#include <asm/mach/arch.h> 33#include <asm/mach/arch.h>
34#include <asm/mach/mmc.h> 34#include <asm/mach/mmc.h>
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index e84fdde6ed..3b79d0e234 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -62,8 +62,8 @@ config CPU_ARM720T
62# ARM920T 62# ARM920T
63config CPU_ARM920T 63config CPU_ARM920T
64 bool "Support ARM920T processor" if !ARCH_S3C2410 64 bool "Support ARM920T processor" if !ARCH_S3C2410
65 depends on ARCH_INTEGRATOR || ARCH_S3C2410 || ARCH_IMX || ARCH_AAEC2000 65 depends on ARCH_INTEGRATOR || ARCH_S3C2410 || ARCH_IMX || ARCH_AAEC2000 || ARCH_AT91RM9200
66 default y if ARCH_S3C2410 66 default y if ARCH_S3C2410 || ARCH_AT91RM9200
67 select CPU_32v4 67 select CPU_32v4
68 select CPU_ABRT_EV4T 68 select CPU_ABRT_EV4T
69 select CPU_CACHE_V4WT 69 select CPU_CACHE_V4WT
@@ -83,8 +83,8 @@ config CPU_ARM920T
83# ARM922T 83# ARM922T
84config CPU_ARM922T 84config CPU_ARM922T
85 bool "Support ARM922T processor" if ARCH_INTEGRATOR 85 bool "Support ARM922T processor" if ARCH_INTEGRATOR
86 depends on ARCH_CAMELOT || ARCH_LH7A40X || ARCH_INTEGRATOR 86 depends on ARCH_LH7A40X || ARCH_INTEGRATOR
87 default y if ARCH_CAMELOT || ARCH_LH7A40X 87 default y if ARCH_LH7A40X
88 select CPU_32v4 88 select CPU_32v4
89 select CPU_ABRT_EV4T 89 select CPU_ABRT_EV4T
90 select CPU_CACHE_V4WT 90 select CPU_CACHE_V4WT
diff --git a/arch/arm/mm/consistent.c b/arch/arm/mm/consistent.c
index dbfe9e891f..c2ee18d207 100644
--- a/arch/arm/mm/consistent.c
+++ b/arch/arm/mm/consistent.c
@@ -19,17 +19,26 @@
19#include <linux/dma-mapping.h> 19#include <linux/dma-mapping.h>
20 20
21#include <asm/cacheflush.h> 21#include <asm/cacheflush.h>
22#include <asm/io.h>
23#include <asm/tlbflush.h> 22#include <asm/tlbflush.h>
23#include <asm/sizes.h>
24
25/* Sanity check size */
26#if (CONSISTENT_DMA_SIZE % SZ_2M)
27#error "CONSISTENT_DMA_SIZE must be multiple of 2MiB"
28#endif
24 29
25#define CONSISTENT_BASE (0xffc00000)
26#define CONSISTENT_END (0xffe00000) 30#define CONSISTENT_END (0xffe00000)
31#define CONSISTENT_BASE (CONSISTENT_END - CONSISTENT_DMA_SIZE)
32
27#define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT) 33#define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT)
34#define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PGDIR_SHIFT)
35#define NUM_CONSISTENT_PTES (CONSISTENT_DMA_SIZE >> PGDIR_SHIFT)
36
28 37
29/* 38/*
30 * This is the page table (2MB) covering uncached, DMA consistent allocations 39 * These are the page tables (2MB each) covering uncached, DMA consistent allocations
31 */ 40 */
32static pte_t *consistent_pte; 41static pte_t *consistent_pte[NUM_CONSISTENT_PTES];
33static DEFINE_SPINLOCK(consistent_lock); 42static DEFINE_SPINLOCK(consistent_lock);
34 43
35/* 44/*
@@ -143,7 +152,7 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp,
143 unsigned long order; 152 unsigned long order;
144 u64 mask = ISA_DMA_THRESHOLD, limit; 153 u64 mask = ISA_DMA_THRESHOLD, limit;
145 154
146 if (!consistent_pte) { 155 if (!consistent_pte[0]) {
147 printk(KERN_ERR "%s: not initialised\n", __func__); 156 printk(KERN_ERR "%s: not initialised\n", __func__);
148 dump_stack(); 157 dump_stack();
149 return NULL; 158 return NULL;
@@ -206,9 +215,12 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp,
206 c = vm_region_alloc(&consistent_head, size, 215 c = vm_region_alloc(&consistent_head, size,
207 gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); 216 gfp & ~(__GFP_DMA | __GFP_HIGHMEM));
208 if (c) { 217 if (c) {
209 pte_t *pte = consistent_pte + CONSISTENT_OFFSET(c->vm_start); 218 pte_t *pte;
210 struct page *end = page + (1 << order); 219 struct page *end = page + (1 << order);
220 int idx = CONSISTENT_PTE_INDEX(c->vm_start);
221 u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1);
211 222
223 pte = consistent_pte[idx] + off;
212 c->vm_pages = page; 224 c->vm_pages = page;
213 225
214 /* 226 /*
@@ -227,6 +239,11 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp,
227 set_pte(pte, mk_pte(page, prot)); 239 set_pte(pte, mk_pte(page, prot));
228 page++; 240 page++;
229 pte++; 241 pte++;
242 off++;
243 if (off >= PTRS_PER_PTE) {
244 off = 0;
245 pte = consistent_pte[++idx];
246 }
230 } while (size -= PAGE_SIZE); 247 } while (size -= PAGE_SIZE);
231 248
232 /* 249 /*
@@ -328,6 +345,8 @@ void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr
328 struct vm_region *c; 345 struct vm_region *c;
329 unsigned long flags, addr; 346 unsigned long flags, addr;
330 pte_t *ptep; 347 pte_t *ptep;
348 int idx;
349 u32 off;
331 350
332 WARN_ON(irqs_disabled()); 351 WARN_ON(irqs_disabled());
333 352
@@ -348,7 +367,9 @@ void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr
348 size = c->vm_end - c->vm_start; 367 size = c->vm_end - c->vm_start;
349 } 368 }
350 369
351 ptep = consistent_pte + CONSISTENT_OFFSET(c->vm_start); 370 idx = CONSISTENT_PTE_INDEX(c->vm_start);
371 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1);
372 ptep = consistent_pte[idx] + off;
352 addr = c->vm_start; 373 addr = c->vm_start;
353 do { 374 do {
354 pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); 375 pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep);
@@ -356,6 +377,11 @@ void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr
356 377
357 ptep++; 378 ptep++;
358 addr += PAGE_SIZE; 379 addr += PAGE_SIZE;
380 off++;
381 if (off >= PTRS_PER_PTE) {
382 off = 0;
383 ptep = consistent_pte[++idx];
384 }
359 385
360 if (!pte_none(pte) && pte_present(pte)) { 386 if (!pte_none(pte) && pte_present(pte)) {
361 pfn = pte_pfn(pte); 387 pfn = pte_pfn(pte);
@@ -402,11 +428,12 @@ static int __init consistent_init(void)
402 pgd_t *pgd; 428 pgd_t *pgd;
403 pmd_t *pmd; 429 pmd_t *pmd;
404 pte_t *pte; 430 pte_t *pte;
405 int ret = 0; 431 int ret = 0, i = 0;
432 u32 base = CONSISTENT_BASE;
406 433
407 do { 434 do {
408 pgd = pgd_offset(&init_mm, CONSISTENT_BASE); 435 pgd = pgd_offset(&init_mm, base);
409 pmd = pmd_alloc(&init_mm, pgd, CONSISTENT_BASE); 436 pmd = pmd_alloc(&init_mm, pgd, base);
410 if (!pmd) { 437 if (!pmd) {
411 printk(KERN_ERR "%s: no pmd tables\n", __func__); 438 printk(KERN_ERR "%s: no pmd tables\n", __func__);
412 ret = -ENOMEM; 439 ret = -ENOMEM;
@@ -414,15 +441,16 @@ static int __init consistent_init(void)
414 } 441 }
415 WARN_ON(!pmd_none(*pmd)); 442 WARN_ON(!pmd_none(*pmd));
416 443
417 pte = pte_alloc_kernel(pmd, CONSISTENT_BASE); 444 pte = pte_alloc_kernel(pmd, base);
418 if (!pte) { 445 if (!pte) {
419 printk(KERN_ERR "%s: no pte tables\n", __func__); 446 printk(KERN_ERR "%s: no pte tables\n", __func__);
420 ret = -ENOMEM; 447 ret = -ENOMEM;
421 break; 448 break;
422 } 449 }
423 450
424 consistent_pte = pte; 451 consistent_pte[i++] = pte;
425 } while (0); 452 base += (1 << PGDIR_SHIFT);
453 } while (base < CONSISTENT_END);
426 454
427 return ret; 455 return ret;
428} 456}
diff --git a/arch/arm/mm/discontig.c b/arch/arm/mm/discontig.c
index 0d097bb1bc..1e56021895 100644
--- a/arch/arm/mm/discontig.c
+++ b/arch/arm/mm/discontig.c
@@ -9,10 +9,8 @@
9 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 */ 11 */
12
13#include <linux/module.h> 12#include <linux/module.h>
14#include <linux/mm.h> 13#include <linux/mmzone.h>
15#include <linux/init.h>
16#include <linux/bootmem.h> 14#include <linux/bootmem.h>
17 15
18#if MAX_NUMNODES != 4 && MAX_NUMNODES != 16 16#if MAX_NUMNODES != 4 && MAX_NUMNODES != 16
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index 10901398e4..de3ce1eec2 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -86,11 +86,12 @@ remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size,
86} 86}
87 87
88static int 88static int
89remap_area_pages(unsigned long start, unsigned long phys_addr, 89remap_area_pages(unsigned long start, unsigned long pfn,
90 unsigned long size, unsigned long flags) 90 unsigned long size, unsigned long flags)
91{ 91{
92 unsigned long address = start; 92 unsigned long address = start;
93 unsigned long end = start + size; 93 unsigned long end = start + size;
94 unsigned long phys_addr = __pfn_to_phys(pfn);
94 int err = 0; 95 int err = 0;
95 pgd_t * dir; 96 pgd_t * dir;
96 97
@@ -130,36 +131,44 @@ remap_area_pages(unsigned long start, unsigned long phys_addr,
130 * mapping. See include/asm-arm/proc-armv/pgtable.h for more information. 131 * mapping. See include/asm-arm/proc-armv/pgtable.h for more information.
131 */ 132 */
132void __iomem * 133void __iomem *
134__ioremap_pfn(unsigned long pfn, unsigned long offset, size_t size,
135 unsigned long flags)
136{
137 unsigned long addr;
138 struct vm_struct * area;
139
140 area = get_vm_area(size, VM_IOREMAP);
141 if (!area)
142 return NULL;
143 addr = (unsigned long)area->addr;
144 if (remap_area_pages(addr, pfn, size, flags)) {
145 vfree(addr);
146 return NULL;
147 }
148 return (void __iomem *) (offset + (char *)addr);
149}
150EXPORT_SYMBOL(__ioremap_pfn);
151
152void __iomem *
133__ioremap(unsigned long phys_addr, size_t size, unsigned long flags) 153__ioremap(unsigned long phys_addr, size_t size, unsigned long flags)
134{ 154{
135 void * addr; 155 unsigned long last_addr;
136 struct vm_struct * area; 156 unsigned long offset = phys_addr & ~PAGE_MASK;
137 unsigned long offset, last_addr; 157 unsigned long pfn = __phys_to_pfn(phys_addr);
138 158
139 /* Don't allow wraparound or zero size */ 159 /*
160 * Don't allow wraparound or zero size
161 */
140 last_addr = phys_addr + size - 1; 162 last_addr = phys_addr + size - 1;
141 if (!size || last_addr < phys_addr) 163 if (!size || last_addr < phys_addr)
142 return NULL; 164 return NULL;
143 165
144 /* 166 /*
145 * Mappings have to be page-aligned 167 * Page align the mapping size
146 */ 168 */
147 offset = phys_addr & ~PAGE_MASK;
148 phys_addr &= PAGE_MASK;
149 size = PAGE_ALIGN(last_addr + 1) - phys_addr; 169 size = PAGE_ALIGN(last_addr + 1) - phys_addr;
150 170
151 /* 171 return __ioremap_pfn(pfn, offset, size, flags);
152 * Ok, go for it..
153 */
154 area = get_vm_area(size, VM_IOREMAP);
155 if (!area)
156 return NULL;
157 addr = area->addr;
158 if (remap_area_pages((unsigned long) addr, phys_addr, size, flags)) {
159 vfree(addr);
160 return NULL;
161 }
162 return (void __iomem *) (offset + (char *)addr);
163} 172}
164EXPORT_SYMBOL(__ioremap); 173EXPORT_SYMBOL(__ioremap);
165 174
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c
index 9e50127be6..d0245a31d4 100644
--- a/arch/arm/mm/mm-armv.c
+++ b/arch/arm/mm/mm-armv.c
@@ -19,7 +19,6 @@
19 19
20#include <asm/pgalloc.h> 20#include <asm/pgalloc.h>
21#include <asm/page.h> 21#include <asm/page.h>
22#include <asm/io.h>
23#include <asm/setup.h> 22#include <asm/setup.h>
24#include <asm/tlbflush.h> 23#include <asm/tlbflush.h>
25 24
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
index 7ce39b986e..7ebc5a29db 100644
--- a/arch/arm/plat-omap/clock.c
+++ b/arch/arm/plat-omap/clock.c
@@ -19,15 +19,16 @@
19#include <linux/errno.h> 19#include <linux/errno.h>
20#include <linux/err.h> 20#include <linux/err.h>
21#include <linux/string.h> 21#include <linux/string.h>
22#include <linux/clk.h>
23#include <linux/mutex.h>
22 24
23#include <asm/io.h> 25#include <asm/io.h>
24#include <asm/semaphore.h> 26#include <asm/semaphore.h>
25#include <asm/hardware/clock.h>
26 27
27#include <asm/arch/clock.h> 28#include <asm/arch/clock.h>
28 29
29LIST_HEAD(clocks); 30LIST_HEAD(clocks);
30static DECLARE_MUTEX(clocks_sem); 31static DEFINE_MUTEX(clocks_mutex);
31DEFINE_SPINLOCK(clockfw_lock); 32DEFINE_SPINLOCK(clockfw_lock);
32 33
33static struct clk_functions *arch_clock; 34static struct clk_functions *arch_clock;
@@ -40,14 +41,14 @@ struct clk * clk_get(struct device *dev, const char *id)
40{ 41{
41 struct clk *p, *clk = ERR_PTR(-ENOENT); 42 struct clk *p, *clk = ERR_PTR(-ENOENT);
42 43
43 down(&clocks_sem); 44 mutex_lock(&clocks_mutex);
44 list_for_each_entry(p, &clocks, node) { 45 list_for_each_entry(p, &clocks, node) {
45 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 46 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
46 clk = p; 47 clk = p;
47 break; 48 break;
48 } 49 }
49 } 50 }
50 up(&clocks_sem); 51 mutex_unlock(&clocks_mutex);
51 52
52 return clk; 53 return clk;
53} 54}
@@ -249,11 +250,11 @@ void propagate_rate(struct clk * tclk)
249 250
250int clk_register(struct clk *clk) 251int clk_register(struct clk *clk)
251{ 252{
252 down(&clocks_sem); 253 mutex_lock(&clocks_mutex);
253 list_add(&clk->node, &clocks); 254 list_add(&clk->node, &clocks);
254 if (clk->init) 255 if (clk->init)
255 clk->init(clk); 256 clk->init(clk);
256 up(&clocks_sem); 257 mutex_unlock(&clocks_mutex);
257 258
258 return 0; 259 return 0;
259} 260}
@@ -261,9 +262,9 @@ EXPORT_SYMBOL(clk_register);
261 262
262void clk_unregister(struct clk *clk) 263void clk_unregister(struct clk *clk)
263{ 264{
264 down(&clocks_sem); 265 mutex_lock(&clocks_mutex);
265 list_del(&clk->node); 266 list_del(&clk->node);
266 up(&clocks_sem); 267 mutex_unlock(&clocks_mutex);
267} 268}
268EXPORT_SYMBOL(clk_unregister); 269EXPORT_SYMBOL(clk_unregister);
269 270
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c
index ccdb452630..adffc5a859 100644
--- a/arch/arm/plat-omap/common.c
+++ b/arch/arm/plat-omap/common.c
@@ -18,12 +18,12 @@
18#include <linux/tty.h> 18#include <linux/tty.h>
19#include <linux/serial_8250.h> 19#include <linux/serial_8250.h>
20#include <linux/serial_reg.h> 20#include <linux/serial_reg.h>
21#include <linux/clk.h>
21 22
22#include <asm/hardware.h> 23#include <asm/hardware.h>
23#include <asm/system.h> 24#include <asm/system.h>
24#include <asm/pgtable.h> 25#include <asm/pgtable.h>
25#include <asm/mach/map.h> 26#include <asm/mach/map.h>
26#include <asm/hardware/clock.h>
27#include <asm/io.h> 27#include <asm/io.h>
28#include <asm/setup.h> 28#include <asm/setup.h>
29 29
diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
index fd894bb001..98edc9fdd6 100644
--- a/arch/arm/plat-omap/cpu-omap.c
+++ b/arch/arm/plat-omap/cpu-omap.c
@@ -19,13 +19,12 @@
19#include <linux/delay.h> 19#include <linux/delay.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/err.h> 21#include <linux/err.h>
22#include <linux/clk.h>
22 23
23#include <asm/hardware.h> 24#include <asm/hardware.h>
24#include <asm/io.h> 25#include <asm/io.h>
25#include <asm/system.h> 26#include <asm/system.h>
26 27
27#include <asm/hardware/clock.h>
28
29/* TODO: Add support for SDRAM timing changes */ 28/* TODO: Add support for SDRAM timing changes */
30 29
31int omap_verify_speed(struct cpufreq_policy *policy) 30int omap_verify_speed(struct cpufreq_policy *policy)
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
index f5cc21ad09..a4e5ac77f6 100644
--- a/arch/arm/plat-omap/dma.c
+++ b/arch/arm/plat-omap/dma.c
@@ -64,7 +64,7 @@ static int dma_chan_count;
64static spinlock_t dma_chan_lock; 64static spinlock_t dma_chan_lock;
65static struct omap_dma_lch dma_chan[OMAP_LOGICAL_DMA_CH_COUNT]; 65static struct omap_dma_lch dma_chan[OMAP_LOGICAL_DMA_CH_COUNT];
66 66
67const static u8 omap1_dma_irq[OMAP_LOGICAL_DMA_CH_COUNT] = { 67static const u8 omap1_dma_irq[OMAP_LOGICAL_DMA_CH_COUNT] = {
68 INT_DMA_CH0_6, INT_DMA_CH1_7, INT_DMA_CH2_8, INT_DMA_CH3, 68 INT_DMA_CH0_6, INT_DMA_CH1_7, INT_DMA_CH2_8, INT_DMA_CH3,
69 INT_DMA_CH4, INT_DMA_CH5, INT_1610_DMA_CH6, INT_1610_DMA_CH7, 69 INT_DMA_CH4, INT_DMA_CH5, INT_1610_DMA_CH6, INT_1610_DMA_CH7,
70 INT_1610_DMA_CH8, INT_1610_DMA_CH9, INT_1610_DMA_CH10, 70 INT_1610_DMA_CH8, INT_1610_DMA_CH9, INT_1610_DMA_CH10,
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 76f721d851..ca3681a824 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -19,9 +19,9 @@
19#include <linux/ptrace.h> 19#include <linux/ptrace.h>
20#include <linux/sysdev.h> 20#include <linux/sysdev.h>
21#include <linux/err.h> 21#include <linux/err.h>
22#include <linux/clk.h>
22 23
23#include <asm/hardware.h> 24#include <asm/hardware.h>
24#include <asm/hardware/clock.h>
25#include <asm/irq.h> 25#include <asm/irq.h>
26#include <asm/arch/irqs.h> 26#include <asm/arch/irqs.h>
27#include <asm/arch/gpio.h> 27#include <asm/arch/gpio.h>
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index ea9475c866..be0e0f32a5 100644
--- a/arch/arm/plat-omap/mcbsp.c
+++ b/arch/arm/plat-omap/mcbsp.c
@@ -19,6 +19,7 @@
19#include <linux/completion.h> 19#include <linux/completion.h>
20#include <linux/interrupt.h> 20#include <linux/interrupt.h>
21#include <linux/err.h> 21#include <linux/err.h>
22#include <linux/clk.h>
22 23
23#include <asm/delay.h> 24#include <asm/delay.h>
24#include <asm/io.h> 25#include <asm/io.h>
@@ -30,8 +31,6 @@
30#include <asm/arch/dsp_common.h> 31#include <asm/arch/dsp_common.h>
31#include <asm/arch/mcbsp.h> 32#include <asm/arch/mcbsp.h>
32 33
33#include <asm/hardware/clock.h>
34
35#ifdef CONFIG_MCBSP_DEBUG 34#ifdef CONFIG_MCBSP_DEBUG
36#define DBG(x...) printk(x) 35#define DBG(x...) printk(x)
37#else 36#else
diff --git a/arch/arm/plat-omap/ocpi.c b/arch/arm/plat-omap/ocpi.c
index b861482274..e40fcc8b43 100644
--- a/arch/arm/plat-omap/ocpi.c
+++ b/arch/arm/plat-omap/ocpi.c
@@ -31,9 +31,9 @@
31#include <linux/init.h> 31#include <linux/init.h>
32#include <linux/spinlock.h> 32#include <linux/spinlock.h>
33#include <linux/err.h> 33#include <linux/err.h>
34#include <linux/clk.h>
34 35
35#include <asm/io.h> 36#include <asm/io.h>
36#include <asm/hardware/clock.h>
37#include <asm/hardware.h> 37#include <asm/hardware.h>
38 38
39#define OCPI_BASE 0xfffec320 39#define OCPI_BASE 0xfffec320
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index 465487470d..d0f9bb5e90 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 Nov 25 14:43:04 2005 15# Last update: Mon Jan 9 12:56:42 2006
16# 16#
17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number 17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
18# 18#
@@ -910,3 +910,31 @@ mbus MACH_MBUS MBUS 896
910nadia2vb MACH_NADIA2VB NADIA2VB 897 910nadia2vb MACH_NADIA2VB NADIA2VB 897
911r1000 MACH_R1000 R1000 898 911r1000 MACH_R1000 R1000 898
912hw90250 MACH_HW90250 HW90250 899 912hw90250 MACH_HW90250 HW90250 899
913omap_2430sdp MACH_OMAP_2430SDP OMAP_2430SDP 900
914davinci_evm MACH_DAVINCI_EVM DAVINCI_EVM 901
915omap_tornado MACH_OMAP_TORNADO OMAP_TORNADO 902
916olocreek MACH_OLOCREEK OLOCREEK 903
917palmz72 MACH_PALMZ72 PALMZ72 904
918nxdb500 MACH_NXDB500 NXDB500 905
919apf9328 MACH_APF9328 APF9328 906
920omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907
921omap_twip MACH_OMAP_TWIP OMAP_TWIP 908
922xscale_treo650 MACH_XSCALE_PALMTREO650 XSCALE_PALMTREO650 909
923acumen MACH_ACUMEN ACUMEN 910
924xp100 MACH_XP100 XP100 911
925fs2410 MACH_FS2410 FS2410 912
926pxa270_cerf MACH_PXA270_CERF PXA270_CERF 913
927sq2ftlpalm MACH_SQ2FTLPALM SQ2FTLPALM 914
928bsemserver MACH_BSEMSERVER BSEMSERVER 915
929netclient MACH_NETCLIENT NETCLIENT 916
930xscale_palmtt5 MACH_XSCALE_PALMTT5 XSCALE_PALMTT5 917
931xscale_palmtc MACH_OMAP_PALMTC OMAP_PALMTC 918
932omap_apollon MACH_OMAP_APOLLON OMAP_APOLLON 919
933argonlvevb MACH_ARGONLVEVB ARGONLVEVB 920
934rea_2d MACH_REA_2D REA_2D 921
935eti3e524 MACH_TI3E524 TI3E524 922
936ateb9200 MACH_ATEB9200 ATEB9200 923
937auckland MACH_AUCKLAND AUCKLAND 924
938ak3220m MACH_AK3320M AK3320M 925
939duramax MACH_DURAMAX DURAMAX 926
940n35 MACH_N35 N35 927