aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2006-06-20 14:48:18 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-06-20 14:48:18 -0400
commit695a9d236a6fd5a60557a02eff612880c37fe731 (patch)
tree0ca809031f5f7139568914fe73ab5e244532aaf8
parentc322e24b40b83bbdfa7c269bc0105e76a39e627f (diff)
parent55c20c0af7fe7d5d09af4addfafcfe3bdc500f5d (diff)
Merge AT91 branch
-rw-r--r--arch/arm/boot/compressed/head-at91rm9200.S12
-rw-r--r--arch/arm/configs/ateb9200_defconfig1312
-rw-r--r--arch/arm/configs/carmeva_defconfig723
-rw-r--r--arch/arm/configs/kafa_defconfig884
-rw-r--r--arch/arm/configs/kb9202_defconfig780
-rw-r--r--arch/arm/mach-at91rm9200/Kconfig12
-rw-r--r--arch/arm/mach-at91rm9200/Makefile17
-rw-r--r--arch/arm/mach-at91rm9200/board-carmeva.c131
-rw-r--r--arch/arm/mach-at91rm9200/board-csb337.c43
-rw-r--r--arch/arm/mach-at91rm9200/board-csb637.c30
-rw-r--r--arch/arm/mach-at91rm9200/board-dk.c57
-rw-r--r--arch/arm/mach-at91rm9200/board-eb9200.c130
-rw-r--r--arch/arm/mach-at91rm9200/board-ek.c47
-rw-r--r--arch/arm/mach-at91rm9200/board-kafa.c116
-rw-r--r--arch/arm/mach-at91rm9200/board-kb9202.c125
-rw-r--r--arch/arm/mach-at91rm9200/clock.c5
-rw-r--r--arch/arm/mach-at91rm9200/common.c17
-rw-r--r--arch/arm/mach-at91rm9200/devices.c406
-rw-r--r--arch/arm/mach-at91rm9200/generic.h7
-rw-r--r--arch/arm/mach-at91rm9200/gpio.c87
-rw-r--r--arch/arm/mach-at91rm9200/irq.c44
-rw-r--r--arch/arm/mach-at91rm9200/pm.c225
-rw-r--r--arch/arm/mach-at91rm9200/time.c57
-rw-r--r--drivers/serial/Kconfig17
-rw-r--r--drivers/serial/at91_serial.c463
-rw-r--r--include/asm-arm/arch-at91rm9200/at91rm9200_spi.h81
-rw-r--r--include/asm-arm/arch-at91rm9200/at91rm9200_ssc.h96
-rw-r--r--include/asm-arm/arch-at91rm9200/at91rm9200_sys.h11
-rw-r--r--include/asm-arm/arch-at91rm9200/at91rm9200_tc.h146
-rw-r--r--include/asm-arm/arch-at91rm9200/at91rm9200_udp.h77
-rw-r--r--include/asm-arm/arch-at91rm9200/board.h30
-rw-r--r--include/asm-arm/arch-at91rm9200/gpio.h5
-rw-r--r--include/asm-arm/arch-at91rm9200/hardware.h9
-rw-r--r--include/asm-arm/arch-at91rm9200/io.h1
-rw-r--r--include/asm-arm/arch-at91rm9200/irqs.h2
-rw-r--r--include/asm-arm/arch-at91rm9200/pio.h115
-rw-r--r--include/asm-arm/arch-at91rm9200/system.h8
-rw-r--r--include/asm-arm/arch-at91rm9200/vmalloc.h2
-rw-r--r--include/asm-arm/mach/serial_at91.h (renamed from include/asm-arm/mach/serial_at91rm9200.h)8
-rw-r--r--include/linux/serial_core.h4
40 files changed, 5881 insertions, 461 deletions
diff --git a/arch/arm/boot/compressed/head-at91rm9200.S b/arch/arm/boot/compressed/head-at91rm9200.S
index 2119ea62b547..57a3b163b2cb 100644
--- a/arch/arm/boot/compressed/head-at91rm9200.S
+++ b/arch/arm/boot/compressed/head-at91rm9200.S
@@ -49,6 +49,18 @@
49 cmp r7, r3 49 cmp r7, r3
50 beq 99f 50 beq 99f
51 51
52 @ Embest ATEB9200 : 923
53 mov r3, #(MACH_TYPE_ATEB9200 & 0xff)
54 orr r3, r3, #(MACH_TYPE_ATEB9200 & 0xff00)
55 cmp r7, r3
56 beq 99f
57
58 @ Sperry-Sun KAFA : 662
59 mov r3, #(MACH_TYPE_KAFA & 0xff)
60 orr r3, r3, #(MACH_TYPE_KAFA & 0xff00)
61 cmp r7, r3
62 beq 99f
63
52 @ Unknown board, use the AT91RM9200DK board 64 @ Unknown board, use the AT91RM9200DK board
53 @ mov r7, #MACH_TYPE_AT91RM9200 65 @ mov r7, #MACH_TYPE_AT91RM9200
54 mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff) 66 mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
diff --git a/arch/arm/configs/ateb9200_defconfig b/arch/arm/configs/ateb9200_defconfig
new file mode 100644
index 000000000000..69c39e098743
--- /dev/null
+++ b/arch/arm/configs/ateb9200_defconfig
@@ -0,0 +1,1312 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.17-rc3
4# Sun May 7 16:53:18 2006
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_RWSEM_GENERIC_SPINLOCK=y
9CONFIG_GENERIC_HWEIGHT=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_VECTORS_BASE=0xffff0000
12
13#
14# Code maturity level options
15#
16CONFIG_EXPERIMENTAL=y
17CONFIG_BROKEN_ON_SMP=y
18CONFIG_LOCK_KERNEL=y
19CONFIG_INIT_ENV_ARG_LIMIT=32
20
21#
22# General setup
23#
24CONFIG_LOCALVERSION=""
25CONFIG_LOCALVERSION_AUTO=y
26CONFIG_SWAP=y
27CONFIG_SYSVIPC=y
28# CONFIG_POSIX_MQUEUE is not set
29# CONFIG_BSD_PROCESS_ACCT is not set
30CONFIG_SYSCTL=y
31# CONFIG_AUDIT is not set
32# CONFIG_IKCONFIG is not set
33# CONFIG_RELAY is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_UID16=y
36CONFIG_CC_OPTIMIZE_FOR_SIZE=y
37CONFIG_EMBEDDED=y
38CONFIG_KALLSYMS=y
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_HOTPLUG=y
41CONFIG_PRINTK=y
42CONFIG_BUG=y
43CONFIG_ELF_CORE=y
44CONFIG_BASE_FULL=y
45CONFIG_FUTEX=y
46CONFIG_EPOLL=y
47CONFIG_SHMEM=y
48CONFIG_SLAB=y
49# CONFIG_TINY_SHMEM is not set
50CONFIG_BASE_SMALL=0
51# CONFIG_SLOB is not set
52
53#
54# Loadable module support
55#
56CONFIG_MODULES=y
57CONFIG_MODULE_UNLOAD=y
58# CONFIG_MODULE_FORCE_UNLOAD is not set
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61CONFIG_KMOD=y
62
63#
64# Block layer
65#
66# CONFIG_BLK_DEV_IO_TRACE is not set
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_EP93XX 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_IXP23XX is not set
95# CONFIG_ARCH_L7200 is not set
96# CONFIG_ARCH_PXA is not set
97# CONFIG_ARCH_RPC is not set
98# CONFIG_ARCH_SA1100 is not set
99# CONFIG_ARCH_S3C2410 is not set
100# CONFIG_ARCH_SHARK is not set
101# CONFIG_ARCH_LH7A40X is not set
102# CONFIG_ARCH_OMAP is not set
103# CONFIG_ARCH_VERSATILE is not set
104# CONFIG_ARCH_REALVIEW is not set
105# CONFIG_ARCH_IMX is not set
106# CONFIG_ARCH_H720X is not set
107# CONFIG_ARCH_AAEC2000 is not set
108CONFIG_ARCH_AT91RM9200=y
109
110#
111# AT91RM9200 Implementations
112#
113
114#
115# AT91RM9200 Board Type
116#
117# CONFIG_ARCH_AT91RM9200DK is not set
118# CONFIG_MACH_AT91RM9200EK is not set
119# CONFIG_MACH_CSB337 is not set
120# CONFIG_MACH_CSB637 is not set
121# CONFIG_MACH_CARMEVA is not set
122# CONFIG_MACH_KB9200 is not set
123CONFIG_MACH_ATEB9200=y
124# CONFIG_MACH_KAFA is not set
125
126#
127# AT91 Feature Selections
128#
129# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
130
131#
132# Processor Type
133#
134CONFIG_CPU_32=y
135CONFIG_CPU_ARM920T=y
136CONFIG_CPU_32v4=y
137CONFIG_CPU_ABRT_EV4T=y
138CONFIG_CPU_CACHE_V4WT=y
139CONFIG_CPU_CACHE_VIVT=y
140CONFIG_CPU_COPY_V4WB=y
141CONFIG_CPU_TLB_V4WBI=y
142
143#
144# Processor Features
145#
146CONFIG_ARM_THUMB=y
147# CONFIG_CPU_ICACHE_DISABLE is not set
148# CONFIG_CPU_DCACHE_DISABLE is not set
149# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
150
151#
152# Bus support
153#
154
155#
156# PCCARD (PCMCIA/CardBus) support
157#
158CONFIG_PCCARD=m
159# CONFIG_PCMCIA_DEBUG is not set
160CONFIG_PCMCIA=m
161CONFIG_PCMCIA_LOAD_CIS=y
162CONFIG_PCMCIA_IOCTL=y
163
164#
165# PC-card bridges
166#
167CONFIG_AT91_CF=m
168
169#
170# Kernel Features
171#
172CONFIG_PREEMPT=y
173CONFIG_NO_IDLE_HZ=y
174CONFIG_HZ=100
175# CONFIG_AEABI is not set
176# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
177CONFIG_SELECT_MEMORY_MODEL=y
178CONFIG_FLATMEM_MANUAL=y
179# CONFIG_DISCONTIGMEM_MANUAL is not set
180# CONFIG_SPARSEMEM_MANUAL is not set
181CONFIG_FLATMEM=y
182CONFIG_FLAT_NODE_MEM_MAP=y
183# CONFIG_SPARSEMEM_STATIC is not set
184CONFIG_SPLIT_PTLOCK_CPUS=4096
185# CONFIG_LEDS is not set
186CONFIG_ALIGNMENT_TRAP=y
187
188#
189# Boot options
190#
191CONFIG_ZBOOT_ROM_TEXT=0x0
192CONFIG_ZBOOT_ROM_BSS=0x0
193CONFIG_CMDLINE=""
194# CONFIG_XIP_KERNEL is not set
195
196#
197# Floating point emulation
198#
199
200#
201# At least one emulation must be selected
202#
203CONFIG_FPE_NWFPE=y
204# CONFIG_FPE_NWFPE_XP is not set
205# CONFIG_FPE_FASTFPE is not set
206
207#
208# Userspace binary formats
209#
210CONFIG_BINFMT_ELF=y
211# CONFIG_BINFMT_AOUT is not set
212# CONFIG_BINFMT_MISC is not set
213# CONFIG_ARTHUR is not set
214
215#
216# Power management options
217#
218CONFIG_PM=y
219CONFIG_PM_LEGACY=y
220# CONFIG_PM_DEBUG is not set
221# CONFIG_APM is not set
222
223#
224# Networking
225#
226CONFIG_NET=y
227
228#
229# Networking options
230#
231# CONFIG_NETDEBUG is not set
232CONFIG_PACKET=y
233# CONFIG_PACKET_MMAP is not set
234CONFIG_UNIX=y
235CONFIG_XFRM=y
236# CONFIG_XFRM_USER is not set
237CONFIG_NET_KEY=y
238CONFIG_INET=y
239# CONFIG_IP_MULTICAST is not set
240# CONFIG_IP_ADVANCED_ROUTER is not set
241CONFIG_IP_FIB_HASH=y
242# CONFIG_IP_PNP is not set
243# CONFIG_NET_IPIP is not set
244# CONFIG_NET_IPGRE is not set
245# CONFIG_ARPD is not set
246# CONFIG_SYN_COOKIES is not set
247# CONFIG_INET_AH is not set
248# CONFIG_INET_ESP is not set
249# CONFIG_INET_IPCOMP is not set
250# CONFIG_INET_XFRM_TUNNEL is not set
251# CONFIG_INET_TUNNEL is not set
252CONFIG_INET_DIAG=y
253CONFIG_INET_TCP_DIAG=y
254# CONFIG_TCP_CONG_ADVANCED is not set
255CONFIG_TCP_CONG_BIC=y
256# CONFIG_IPV6 is not set
257# CONFIG_INET6_XFRM_TUNNEL is not set
258# CONFIG_INET6_TUNNEL is not set
259# CONFIG_NETFILTER is not set
260
261#
262# DCCP Configuration (EXPERIMENTAL)
263#
264# CONFIG_IP_DCCP is not set
265
266#
267# SCTP Configuration (EXPERIMENTAL)
268#
269# CONFIG_IP_SCTP is not set
270
271#
272# TIPC Configuration (EXPERIMENTAL)
273#
274# CONFIG_TIPC is not set
275# CONFIG_ATM is not set
276CONFIG_BRIDGE=m
277CONFIG_VLAN_8021Q=m
278# CONFIG_DECNET is not set
279CONFIG_LLC=m
280# CONFIG_LLC2 is not set
281# CONFIG_IPX is not set
282# CONFIG_ATALK is not set
283# CONFIG_X25 is not set
284# CONFIG_LAPB is not set
285# CONFIG_NET_DIVERT is not set
286# CONFIG_ECONET is not set
287# CONFIG_WAN_ROUTER is not set
288
289#
290# QoS and/or fair queueing
291#
292# CONFIG_NET_SCHED is not set
293
294#
295# Network testing
296#
297# CONFIG_NET_PKTGEN is not set
298# CONFIG_HAMRADIO is not set
299# CONFIG_IRDA is not set
300# CONFIG_BT is not set
301CONFIG_IEEE80211=m
302# CONFIG_IEEE80211_DEBUG is not set
303CONFIG_IEEE80211_CRYPT_WEP=m
304CONFIG_IEEE80211_CRYPT_CCMP=m
305CONFIG_IEEE80211_CRYPT_TKIP=m
306# CONFIG_IEEE80211_SOFTMAC is not set
307CONFIG_WIRELESS_EXT=y
308
309#
310# Device Drivers
311#
312
313#
314# Generic Driver Options
315#
316CONFIG_STANDALONE=y
317CONFIG_PREVENT_FIRMWARE_BUILD=y
318CONFIG_FW_LOADER=y
319
320#
321# Connector - unified userspace <-> kernelspace linker
322#
323# CONFIG_CONNECTOR is not set
324
325#
326# Memory Technology Devices (MTD)
327#
328CONFIG_MTD=y
329# CONFIG_MTD_DEBUG is not set
330# CONFIG_MTD_CONCAT is not set
331CONFIG_MTD_PARTITIONS=y
332# CONFIG_MTD_REDBOOT_PARTS is not set
333CONFIG_MTD_CMDLINE_PARTS=y
334# CONFIG_MTD_AFS_PARTS is not set
335
336#
337# User Modules And Translation Layers
338#
339CONFIG_MTD_CHAR=y
340# CONFIG_MTD_BLOCK is not set
341CONFIG_MTD_BLOCK_RO=y
342# CONFIG_FTL is not set
343# CONFIG_NFTL is not set
344# CONFIG_INFTL is not set
345# CONFIG_RFD_FTL is not set
346
347#
348# RAM/ROM/Flash chip drivers
349#
350# CONFIG_MTD_CFI is not set
351# CONFIG_MTD_JEDECPROBE is not set
352CONFIG_MTD_MAP_BANK_WIDTH_1=y
353CONFIG_MTD_MAP_BANK_WIDTH_2=y
354CONFIG_MTD_MAP_BANK_WIDTH_4=y
355# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
356# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
357# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
358CONFIG_MTD_CFI_I1=y
359CONFIG_MTD_CFI_I2=y
360# CONFIG_MTD_CFI_I4 is not set
361# CONFIG_MTD_CFI_I8 is not set
362# CONFIG_MTD_RAM is not set
363# CONFIG_MTD_ROM is not set
364# CONFIG_MTD_ABSENT is not set
365# CONFIG_MTD_OBSOLETE_CHIPS is not set
366
367#
368# Mapping drivers for chip access
369#
370# CONFIG_MTD_COMPLEX_MAPPINGS is not set
371# CONFIG_MTD_PLATRAM is not set
372
373#
374# Self-contained MTD device drivers
375#
376# CONFIG_MTD_SLRAM is not set
377# CONFIG_MTD_PHRAM is not set
378# CONFIG_MTD_MTDRAM is not set
379# CONFIG_MTD_BLOCK2MTD is not set
380
381#
382# Disk-On-Chip Device Drivers
383#
384# CONFIG_MTD_DOC2000 is not set
385# CONFIG_MTD_DOC2001 is not set
386# CONFIG_MTD_DOC2001PLUS is not set
387CONFIG_MTD_AT91_DATAFLASH=y
388# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
389
390#
391# NAND Flash Device Drivers
392#
393# CONFIG_MTD_NAND is not set
394
395#
396# OneNAND Flash Device Drivers
397#
398# CONFIG_MTD_ONENAND is not set
399
400#
401# Parallel port support
402#
403# CONFIG_PARPORT is not set
404
405#
406# Plug and Play support
407#
408
409#
410# Block devices
411#
412# CONFIG_BLK_DEV_COW_COMMON is not set
413CONFIG_BLK_DEV_LOOP=m
414# CONFIG_BLK_DEV_CRYPTOLOOP is not set
415CONFIG_BLK_DEV_NBD=m
416# CONFIG_BLK_DEV_UB is not set
417# CONFIG_BLK_DEV_RAM is not set
418# CONFIG_BLK_DEV_INITRD is not set
419# CONFIG_CDROM_PKTCDVD is not set
420# CONFIG_ATA_OVER_ETH is not set
421
422#
423# ATA/ATAPI/MFM/RLL support
424#
425# CONFIG_IDE is not set
426
427#
428# SCSI device support
429#
430# CONFIG_RAID_ATTRS is not set
431CONFIG_SCSI=m
432CONFIG_SCSI_PROC_FS=y
433
434#
435# SCSI support type (disk, tape, CD-ROM)
436#
437CONFIG_BLK_DEV_SD=m
438# CONFIG_CHR_DEV_ST is not set
439# CONFIG_CHR_DEV_OSST is not set
440CONFIG_BLK_DEV_SR=m
441CONFIG_BLK_DEV_SR_VENDOR=y
442CONFIG_CHR_DEV_SG=m
443# CONFIG_CHR_DEV_SCH is not set
444
445#
446# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
447#
448CONFIG_SCSI_MULTI_LUN=y
449# CONFIG_SCSI_CONSTANTS is not set
450# CONFIG_SCSI_LOGGING is not set
451
452#
453# SCSI Transport Attributes
454#
455# CONFIG_SCSI_SPI_ATTRS is not set
456# CONFIG_SCSI_FC_ATTRS is not set
457# CONFIG_SCSI_ISCSI_ATTRS is not set
458# CONFIG_SCSI_SAS_ATTRS is not set
459
460#
461# SCSI low-level drivers
462#
463# CONFIG_ISCSI_TCP is not set
464# CONFIG_SCSI_SATA is not set
465# CONFIG_SCSI_DEBUG is not set
466
467#
468# PCMCIA SCSI adapter support
469#
470# CONFIG_PCMCIA_AHA152X is not set
471# CONFIG_PCMCIA_FDOMAIN is not set
472# CONFIG_PCMCIA_NINJA_SCSI is not set
473# CONFIG_PCMCIA_QLOGIC is not set
474# CONFIG_PCMCIA_SYM53C500 is not set
475
476#
477# Multi-device support (RAID and LVM)
478#
479# CONFIG_MD is not set
480
481#
482# Fusion MPT device support
483#
484# CONFIG_FUSION is not set
485
486#
487# IEEE 1394 (FireWire) support
488#
489
490#
491# I2O device support
492#
493
494#
495# Network device support
496#
497CONFIG_NETDEVICES=y
498CONFIG_DUMMY=m
499# CONFIG_BONDING is not set
500# CONFIG_EQUALIZER is not set
501CONFIG_TUN=m
502
503#
504# PHY device support
505#
506CONFIG_PHYLIB=y
507
508#
509# MII PHY device drivers
510#
511# CONFIG_MARVELL_PHY is not set
512CONFIG_DAVICOM_PHY=y
513# CONFIG_QSEMI_PHY is not set
514# CONFIG_LXT_PHY is not set
515# CONFIG_CICADA_PHY is not set
516
517#
518# Ethernet (10 or 100Mbit)
519#
520CONFIG_NET_ETHERNET=y
521CONFIG_MII=y
522CONFIG_ARM_AT91_ETHER=y
523# CONFIG_SMC91X is not set
524# CONFIG_DM9000 is not set
525
526#
527# Ethernet (1000 Mbit)
528#
529
530#
531# Ethernet (10000 Mbit)
532#
533
534#
535# Token Ring devices
536#
537
538#
539# Wireless LAN (non-hamradio)
540#
541CONFIG_NET_RADIO=y
542# CONFIG_NET_WIRELESS_RTNETLINK is not set
543
544#
545# Obsolete Wireless cards support (pre-802.11)
546#
547# CONFIG_STRIP is not set
548# CONFIG_PCMCIA_WAVELAN is not set
549# CONFIG_PCMCIA_NETWAVE is not set
550
551#
552# Wireless 802.11 Frequency Hopping cards support
553#
554# CONFIG_PCMCIA_RAYCS is not set
555
556#
557# Wireless 802.11b ISA/PCI cards support
558#
559# CONFIG_HERMES is not set
560# CONFIG_ATMEL is not set
561
562#
563# Wireless 802.11b Pcmcia/Cardbus cards support
564#
565# CONFIG_AIRO_CS is not set
566# CONFIG_PCMCIA_WL3501 is not set
567# CONFIG_HOSTAP is not set
568CONFIG_NET_WIRELESS=y
569
570#
571# PCMCIA network device support
572#
573# CONFIG_NET_PCMCIA is not set
574
575#
576# Wan interfaces
577#
578# CONFIG_WAN is not set
579CONFIG_PPP=m
580# CONFIG_PPP_MULTILINK is not set
581# CONFIG_PPP_FILTER is not set
582CONFIG_PPP_ASYNC=m
583CONFIG_PPP_SYNC_TTY=m
584CONFIG_PPP_DEFLATE=m
585CONFIG_PPP_BSDCOMP=m
586# CONFIG_PPP_MPPE is not set
587CONFIG_PPPOE=m
588# CONFIG_SLIP is not set
589# CONFIG_SHAPER is not set
590# CONFIG_NETCONSOLE is not set
591# CONFIG_NETPOLL is not set
592# CONFIG_NET_POLL_CONTROLLER is not set
593
594#
595# ISDN subsystem
596#
597# CONFIG_ISDN is not set
598
599#
600# Input device support
601#
602CONFIG_INPUT=y
603
604#
605# Userland interfaces
606#
607CONFIG_INPUT_MOUSEDEV=y
608CONFIG_INPUT_MOUSEDEV_PSAUX=y
609CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
610CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
611# CONFIG_INPUT_JOYDEV is not set
612# CONFIG_INPUT_TSDEV is not set
613# CONFIG_INPUT_EVDEV is not set
614# CONFIG_INPUT_EVBUG is not set
615
616#
617# Input Device Drivers
618#
619CONFIG_INPUT_KEYBOARD=y
620CONFIG_KEYBOARD_ATKBD=y
621# CONFIG_KEYBOARD_SUNKBD is not set
622# CONFIG_KEYBOARD_LKKBD is not set
623# CONFIG_KEYBOARD_XTKBD is not set
624# CONFIG_KEYBOARD_NEWTON is not set
625CONFIG_INPUT_MOUSE=y
626CONFIG_MOUSE_PS2=y
627# CONFIG_MOUSE_SERIAL is not set
628# CONFIG_MOUSE_VSXXXAA is not set
629# CONFIG_INPUT_JOYSTICK is not set
630# CONFIG_INPUT_TOUCHSCREEN is not set
631# CONFIG_INPUT_MISC is not set
632
633#
634# Hardware I/O ports
635#
636CONFIG_SERIO=y
637CONFIG_SERIO_SERPORT=y
638CONFIG_SERIO_LIBPS2=y
639# CONFIG_SERIO_RAW is not set
640# CONFIG_GAMEPORT is not set
641
642#
643# Character devices
644#
645CONFIG_VT=y
646CONFIG_VT_CONSOLE=y
647CONFIG_HW_CONSOLE=y
648# CONFIG_SERIAL_NONSTANDARD is not set
649
650#
651# Serial drivers
652#
653# CONFIG_SERIAL_8250 is not set
654
655#
656# Non-8250 serial port support
657#
658CONFIG_SERIAL_AT91=y
659CONFIG_SERIAL_AT91_CONSOLE=y
660# CONFIG_SERIAL_AT91_TTYAT is not set
661CONFIG_SERIAL_CORE=y
662CONFIG_SERIAL_CORE_CONSOLE=y
663CONFIG_UNIX98_PTYS=y
664CONFIG_LEGACY_PTYS=y
665CONFIG_LEGACY_PTY_COUNT=256
666
667#
668# IPMI
669#
670# CONFIG_IPMI_HANDLER is not set
671
672#
673# Watchdog Cards
674#
675# CONFIG_WATCHDOG is not set
676# CONFIG_NVRAM is not set
677# CONFIG_DTLK is not set
678# CONFIG_R3964 is not set
679
680#
681# Ftape, the floppy tape device driver
682#
683
684#
685# PCMCIA character devices
686#
687# CONFIG_SYNCLINK_CS is not set
688# CONFIG_CARDMAN_4000 is not set
689# CONFIG_CARDMAN_4040 is not set
690# CONFIG_RAW_DRIVER is not set
691
692#
693# TPM devices
694#
695# CONFIG_TCG_TPM is not set
696# CONFIG_TELCLOCK is not set
697CONFIG_AT91_SPI=y
698CONFIG_AT91_SPIDEV=y
699
700#
701# I2C support
702#
703CONFIG_I2C=m
704CONFIG_I2C_CHARDEV=m
705
706#
707# I2C Algorithms
708#
709CONFIG_I2C_ALGOBIT=m
710CONFIG_I2C_ALGOPCF=m
711CONFIG_I2C_ALGOPCA=m
712
713#
714# I2C Hardware Bus support
715#
716CONFIG_I2C_AT91=m
717# CONFIG_I2C_PARPORT_LIGHT is not set
718# CONFIG_I2C_STUB is not set
719# CONFIG_I2C_PCA_ISA is not set
720
721#
722# Miscellaneous I2C Chip support
723#
724# CONFIG_SENSORS_DS1337 is not set
725# CONFIG_SENSORS_DS1374 is not set
726# CONFIG_SENSORS_EEPROM is not set
727# CONFIG_SENSORS_PCF8574 is not set
728# CONFIG_SENSORS_PCA9539 is not set
729# CONFIG_SENSORS_PCF8591 is not set
730# CONFIG_SENSORS_MAX6875 is not set
731# CONFIG_I2C_DEBUG_CORE is not set
732# CONFIG_I2C_DEBUG_ALGO is not set
733# CONFIG_I2C_DEBUG_BUS is not set
734# CONFIG_I2C_DEBUG_CHIP is not set
735
736#
737# SPI support
738#
739# CONFIG_SPI is not set
740# CONFIG_SPI_MASTER is not set
741
742#
743# Dallas's 1-wire bus
744#
745# CONFIG_W1 is not set
746
747#
748# Hardware Monitoring support
749#
750CONFIG_HWMON=y
751# CONFIG_HWMON_VID is not set
752# CONFIG_SENSORS_ADM1021 is not set
753# CONFIG_SENSORS_ADM1025 is not set
754# CONFIG_SENSORS_ADM1026 is not set
755# CONFIG_SENSORS_ADM1031 is not set
756# CONFIG_SENSORS_ADM9240 is not set
757# CONFIG_SENSORS_ASB100 is not set
758# CONFIG_SENSORS_ATXP1 is not set
759# CONFIG_SENSORS_DS1621 is not set
760# CONFIG_SENSORS_F71805F is not set
761# CONFIG_SENSORS_FSCHER is not set
762# CONFIG_SENSORS_FSCPOS is not set
763# CONFIG_SENSORS_GL518SM is not set
764# CONFIG_SENSORS_GL520SM is not set
765# CONFIG_SENSORS_IT87 is not set
766# CONFIG_SENSORS_LM63 is not set
767# CONFIG_SENSORS_LM75 is not set
768# CONFIG_SENSORS_LM77 is not set
769# CONFIG_SENSORS_LM78 is not set
770# CONFIG_SENSORS_LM80 is not set
771# CONFIG_SENSORS_LM83 is not set
772# CONFIG_SENSORS_LM85 is not set
773# CONFIG_SENSORS_LM87 is not set
774# CONFIG_SENSORS_LM90 is not set
775# CONFIG_SENSORS_LM92 is not set
776# CONFIG_SENSORS_MAX1619 is not set
777# CONFIG_SENSORS_PC87360 is not set
778# CONFIG_SENSORS_SMSC47M1 is not set
779# CONFIG_SENSORS_SMSC47B397 is not set
780# CONFIG_SENSORS_W83781D is not set
781# CONFIG_SENSORS_W83792D is not set
782# CONFIG_SENSORS_W83L785TS is not set
783# CONFIG_SENSORS_W83627HF is not set
784# CONFIG_SENSORS_W83627EHF is not set
785# CONFIG_HWMON_DEBUG_CHIP is not set
786
787#
788# Misc devices
789#
790
791#
792# LED devices
793#
794# CONFIG_NEW_LEDS is not set
795
796#
797# LED drivers
798#
799
800#
801# LED Triggers
802#
803
804#
805# Multimedia devices
806#
807# CONFIG_VIDEO_DEV is not set
808
809#
810# Digital Video Broadcasting Devices
811#
812# CONFIG_DVB is not set
813# CONFIG_USB_DABUSB is not set
814
815#
816# Graphics support
817#
818# CONFIG_FB is not set
819
820#
821# Console display driver support
822#
823# CONFIG_VGA_CONSOLE is not set
824CONFIG_DUMMY_CONSOLE=y
825
826#
827# Sound
828#
829CONFIG_SOUND=y
830
831#
832# Advanced Linux Sound Architecture
833#
834# CONFIG_SND is not set
835
836#
837# Open Sound System
838#
839# CONFIG_SOUND_PRIME is not set
840
841#
842# USB support
843#
844CONFIG_USB_ARCH_HAS_HCD=y
845CONFIG_USB_ARCH_HAS_OHCI=y
846# CONFIG_USB_ARCH_HAS_EHCI is not set
847CONFIG_USB=y
848# CONFIG_USB_DEBUG is not set
849
850#
851# Miscellaneous USB options
852#
853CONFIG_USB_DEVICEFS=y
854# CONFIG_USB_BANDWIDTH is not set
855# CONFIG_USB_DYNAMIC_MINORS is not set
856# CONFIG_USB_SUSPEND is not set
857# CONFIG_USB_OTG is not set
858
859#
860# USB Host Controller Drivers
861#
862# CONFIG_USB_ISP116X_HCD is not set
863CONFIG_USB_OHCI_HCD=y
864# CONFIG_USB_OHCI_BIG_ENDIAN is not set
865CONFIG_USB_OHCI_LITTLE_ENDIAN=y
866# CONFIG_USB_SL811_HCD is not set
867
868#
869# USB Device Class drivers
870#
871CONFIG_USB_ACM=m
872CONFIG_USB_PRINTER=m
873
874#
875# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
876#
877
878#
879# may also be needed; see USB_STORAGE Help for more information
880#
881CONFIG_USB_STORAGE=m
882# CONFIG_USB_STORAGE_DEBUG is not set
883CONFIG_USB_STORAGE_DATAFAB=y
884CONFIG_USB_STORAGE_FREECOM=y
885CONFIG_USB_STORAGE_DPCM=y
886CONFIG_USB_STORAGE_USBAT=y
887CONFIG_USB_STORAGE_SDDR09=y
888CONFIG_USB_STORAGE_SDDR55=y
889CONFIG_USB_STORAGE_JUMPSHOT=y
890# CONFIG_USB_STORAGE_ALAUDA is not set
891# CONFIG_USB_LIBUSUAL is not set
892
893#
894# USB Input Devices
895#
896CONFIG_USB_HID=m
897CONFIG_USB_HIDINPUT=y
898# CONFIG_USB_HIDINPUT_POWERBOOK is not set
899CONFIG_HID_FF=y
900CONFIG_HID_PID=y
901CONFIG_LOGITECH_FF=y
902CONFIG_THRUSTMASTER_FF=y
903CONFIG_USB_HIDDEV=y
904
905#
906# USB HID Boot Protocol drivers
907#
908# CONFIG_USB_KBD is not set
909# CONFIG_USB_MOUSE is not set
910# CONFIG_USB_AIPTEK is not set
911# CONFIG_USB_WACOM is not set
912# CONFIG_USB_ACECAD is not set
913# CONFIG_USB_KBTAB is not set
914# CONFIG_USB_POWERMATE is not set
915# CONFIG_USB_TOUCHSCREEN is not set
916# CONFIG_USB_YEALINK is not set
917# CONFIG_USB_XPAD is not set
918# CONFIG_USB_ATI_REMOTE is not set
919# CONFIG_USB_ATI_REMOTE2 is not set
920# CONFIG_USB_KEYSPAN_REMOTE is not set
921# CONFIG_USB_APPLETOUCH is not set
922
923#
924# USB Imaging devices
925#
926# CONFIG_USB_MDC800 is not set
927# CONFIG_USB_MICROTEK is not set
928
929#
930# USB Network Adapters
931#
932# CONFIG_USB_CATC is not set
933# CONFIG_USB_KAWETH is not set
934# CONFIG_USB_PEGASUS is not set
935# CONFIG_USB_RTL8150 is not set
936CONFIG_USB_USBNET=y
937CONFIG_USB_NET_AX8817X=y
938CONFIG_USB_NET_CDCETHER=y
939CONFIG_USB_NET_GL620A=y
940CONFIG_USB_NET_NET1080=y
941CONFIG_USB_NET_PLUSB=y
942CONFIG_USB_NET_RNDIS_HOST=y
943CONFIG_USB_NET_CDC_SUBSET=y
944CONFIG_USB_ALI_M5632=y
945CONFIG_USB_AN2720=y
946CONFIG_USB_BELKIN=y
947CONFIG_USB_ARMLINUX=y
948CONFIG_USB_EPSON2888=y
949CONFIG_USB_NET_ZAURUS=y
950# CONFIG_USB_ZD1201 is not set
951CONFIG_USB_MON=y
952
953#
954# USB port drivers
955#
956
957#
958# USB Serial Converter support
959#
960CONFIG_USB_SERIAL=m
961CONFIG_USB_SERIAL_GENERIC=y
962# CONFIG_USB_SERIAL_AIRPRIME is not set
963# CONFIG_USB_SERIAL_ANYDATA is not set
964# CONFIG_USB_SERIAL_BELKIN is not set
965# CONFIG_USB_SERIAL_WHITEHEAT is not set
966# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
967CONFIG_USB_SERIAL_CP2101=m
968# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
969# CONFIG_USB_SERIAL_EMPEG is not set
970CONFIG_USB_SERIAL_FTDI_SIO=m
971# CONFIG_USB_SERIAL_FUNSOFT is not set
972# CONFIG_USB_SERIAL_VISOR is not set
973# CONFIG_USB_SERIAL_IPAQ is not set
974# CONFIG_USB_SERIAL_IR is not set
975# CONFIG_USB_SERIAL_EDGEPORT is not set
976# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
977# CONFIG_USB_SERIAL_GARMIN is not set
978# CONFIG_USB_SERIAL_IPW is not set
979# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
980# CONFIG_USB_SERIAL_KEYSPAN is not set
981# CONFIG_USB_SERIAL_KLSI is not set
982# CONFIG_USB_SERIAL_KOBIL_SCT is not set
983# CONFIG_USB_SERIAL_MCT_U232 is not set
984# CONFIG_USB_SERIAL_NAVMAN is not set
985CONFIG_USB_SERIAL_PL2303=m
986# CONFIG_USB_SERIAL_HP4X is not set
987# CONFIG_USB_SERIAL_SAFE is not set
988# CONFIG_USB_SERIAL_TI is not set
989# CONFIG_USB_SERIAL_CYBERJACK is not set
990# CONFIG_USB_SERIAL_XIRCOM is not set
991# CONFIG_USB_SERIAL_OPTION is not set
992# CONFIG_USB_SERIAL_OMNINET is not set
993
994#
995# USB Miscellaneous drivers
996#
997# CONFIG_USB_EMI62 is not set
998# CONFIG_USB_EMI26 is not set
999# CONFIG_USB_AUERSWALD is not set
1000# CONFIG_USB_RIO500 is not set
1001# CONFIG_USB_LEGOTOWER is not set
1002# CONFIG_USB_LCD is not set
1003# CONFIG_USB_LED is not set
1004# CONFIG_USB_CYTHERM is not set
1005# CONFIG_USB_PHIDGETKIT is not set
1006# CONFIG_USB_PHIDGETSERVO is not set
1007# CONFIG_USB_IDMOUSE is not set
1008# CONFIG_USB_LD is not set
1009# CONFIG_USB_TEST is not set
1010
1011#
1012# USB DSL modem support
1013#
1014
1015#
1016# USB Gadget Support
1017#
1018CONFIG_USB_GADGET=m
1019# CONFIG_USB_GADGET_DEBUG_FILES is not set
1020CONFIG_USB_GADGET_SELECTED=y
1021# CONFIG_USB_GADGET_NET2280 is not set
1022# CONFIG_USB_GADGET_PXA2XX is not set
1023# CONFIG_USB_GADGET_GOKU is not set
1024# CONFIG_USB_GADGET_LH7A40X is not set
1025# CONFIG_USB_GADGET_OMAP is not set
1026CONFIG_USB_GADGET_AT91=y
1027CONFIG_USB_AT91=m
1028# CONFIG_USB_GADGET_DUMMY_HCD is not set
1029# CONFIG_USB_GADGET_DUALSPEED is not set
1030# CONFIG_USB_ZERO is not set
1031CONFIG_USB_ETH=m
1032CONFIG_USB_ETH_RNDIS=y
1033CONFIG_USB_GADGETFS=m
1034CONFIG_USB_FILE_STORAGE=m
1035# CONFIG_USB_FILE_STORAGE_TEST is not set
1036CONFIG_USB_G_SERIAL=m
1037
1038#
1039# MMC/SD Card support
1040#
1041CONFIG_MMC=m
1042CONFIG_MMC_DEBUG=y
1043CONFIG_MMC_BLOCK=m
1044CONFIG_MMC_AT91RM9200=m
1045
1046#
1047# Real Time Clock
1048#
1049CONFIG_RTC_LIB=y
1050CONFIG_RTC_CLASS=y
1051# CONFIG_RTC_HCTOSYS is not set
1052
1053#
1054# RTC interfaces
1055#
1056CONFIG_RTC_INTF_SYSFS=y
1057CONFIG_RTC_INTF_PROC=y
1058CONFIG_RTC_INTF_DEV=y
1059
1060#
1061# RTC drivers
1062#
1063# CONFIG_RTC_DRV_X1205 is not set
1064# CONFIG_RTC_DRV_DS1672 is not set
1065# CONFIG_RTC_DRV_PCF8563 is not set
1066# CONFIG_RTC_DRV_RS5C372 is not set
1067# CONFIG_RTC_DRV_M48T86 is not set
1068CONFIG_RTC_DRV_AT91=y
1069# CONFIG_RTC_DRV_TEST is not set
1070
1071#
1072# File systems
1073#
1074CONFIG_EXT2_FS=m
1075# CONFIG_EXT2_FS_XATTR is not set
1076# CONFIG_EXT2_FS_XIP is not set
1077CONFIG_EXT3_FS=m
1078CONFIG_EXT3_FS_XATTR=y
1079# CONFIG_EXT3_FS_POSIX_ACL is not set
1080# CONFIG_EXT3_FS_SECURITY is not set
1081CONFIG_JBD=m
1082# CONFIG_JBD_DEBUG is not set
1083CONFIG_FS_MBCACHE=m
1084CONFIG_REISERFS_FS=m
1085# CONFIG_REISERFS_CHECK is not set
1086# CONFIG_REISERFS_PROC_INFO is not set
1087# CONFIG_REISERFS_FS_XATTR is not set
1088# CONFIG_JFS_FS is not set
1089CONFIG_FS_POSIX_ACL=y
1090# CONFIG_XFS_FS is not set
1091# CONFIG_OCFS2_FS is not set
1092# CONFIG_MINIX_FS is not set
1093# CONFIG_ROMFS_FS is not set
1094CONFIG_INOTIFY=y
1095# CONFIG_QUOTA is not set
1096CONFIG_DNOTIFY=y
1097# CONFIG_AUTOFS_FS is not set
1098# CONFIG_AUTOFS4_FS is not set
1099# CONFIG_FUSE_FS is not set
1100
1101#
1102# CD-ROM/DVD Filesystems
1103#
1104CONFIG_ISO9660_FS=m
1105CONFIG_JOLIET=y
1106CONFIG_ZISOFS=y
1107CONFIG_ZISOFS_FS=m
1108CONFIG_UDF_FS=m
1109CONFIG_UDF_NLS=y
1110
1111#
1112# DOS/FAT/NT Filesystems
1113#
1114CONFIG_FAT_FS=m
1115CONFIG_MSDOS_FS=m
1116CONFIG_VFAT_FS=m
1117CONFIG_FAT_DEFAULT_CODEPAGE=437
1118CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1119CONFIG_NTFS_FS=m
1120# CONFIG_NTFS_DEBUG is not set
1121CONFIG_NTFS_RW=y
1122
1123#
1124# Pseudo filesystems
1125#
1126CONFIG_PROC_FS=y
1127CONFIG_SYSFS=y
1128CONFIG_TMPFS=y
1129# CONFIG_HUGETLB_PAGE is not set
1130CONFIG_RAMFS=y
1131# CONFIG_CONFIGFS_FS is not set
1132
1133#
1134# Miscellaneous filesystems
1135#
1136# CONFIG_ADFS_FS is not set
1137# CONFIG_AFFS_FS is not set
1138# CONFIG_HFS_FS is not set
1139# CONFIG_HFSPLUS_FS is not set
1140# CONFIG_BEFS_FS is not set
1141# CONFIG_BFS_FS is not set
1142# CONFIG_EFS_FS is not set
1143# CONFIG_JFFS_FS is not set
1144# CONFIG_JFFS2_FS is not set
1145CONFIG_CRAMFS=y
1146# CONFIG_VXFS_FS is not set
1147# CONFIG_HPFS_FS is not set
1148# CONFIG_QNX4FS_FS is not set
1149# CONFIG_SYSV_FS is not set
1150# CONFIG_UFS_FS is not set
1151
1152#
1153# Network File Systems
1154#
1155CONFIG_NFS_FS=m
1156CONFIG_NFS_V3=y
1157CONFIG_NFS_V3_ACL=y
1158CONFIG_NFS_V4=y
1159CONFIG_NFS_DIRECTIO=y
1160CONFIG_NFSD=m
1161CONFIG_NFSD_V3=y
1162# CONFIG_NFSD_V3_ACL is not set
1163CONFIG_NFSD_V4=y
1164CONFIG_NFSD_TCP=y
1165CONFIG_LOCKD=m
1166CONFIG_LOCKD_V4=y
1167CONFIG_EXPORTFS=m
1168CONFIG_NFS_ACL_SUPPORT=m
1169CONFIG_NFS_COMMON=y
1170CONFIG_SUNRPC=m
1171CONFIG_SUNRPC_GSS=m
1172CONFIG_RPCSEC_GSS_KRB5=m
1173# CONFIG_RPCSEC_GSS_SPKM3 is not set
1174# CONFIG_SMB_FS is not set
1175# CONFIG_CIFS is not set
1176# CONFIG_NCP_FS is not set
1177# CONFIG_CODA_FS is not set
1178# CONFIG_AFS_FS is not set
1179# CONFIG_9P_FS is not set
1180
1181#
1182# Partition Types
1183#
1184CONFIG_PARTITION_ADVANCED=y
1185# CONFIG_ACORN_PARTITION is not set
1186# CONFIG_OSF_PARTITION is not set
1187# CONFIG_AMIGA_PARTITION is not set
1188# CONFIG_ATARI_PARTITION is not set
1189CONFIG_MAC_PARTITION=y
1190CONFIG_MSDOS_PARTITION=y
1191CONFIG_BSD_DISKLABEL=y
1192CONFIG_MINIX_SUBPARTITION=y
1193CONFIG_SOLARIS_X86_PARTITION=y
1194CONFIG_UNIXWARE_DISKLABEL=y
1195# CONFIG_LDM_PARTITION is not set
1196# CONFIG_SGI_PARTITION is not set
1197# CONFIG_ULTRIX_PARTITION is not set
1198# CONFIG_SUN_PARTITION is not set
1199# CONFIG_KARMA_PARTITION is not set
1200# CONFIG_EFI_PARTITION is not set
1201
1202#
1203# Native Language Support
1204#
1205CONFIG_NLS=m
1206CONFIG_NLS_DEFAULT="iso8859-1"
1207# CONFIG_NLS_CODEPAGE_437 is not set
1208# CONFIG_NLS_CODEPAGE_737 is not set
1209# CONFIG_NLS_CODEPAGE_775 is not set
1210# CONFIG_NLS_CODEPAGE_850 is not set
1211# CONFIG_NLS_CODEPAGE_852 is not set
1212# CONFIG_NLS_CODEPAGE_855 is not set
1213# CONFIG_NLS_CODEPAGE_857 is not set
1214# CONFIG_NLS_CODEPAGE_860 is not set
1215# CONFIG_NLS_CODEPAGE_861 is not set
1216# CONFIG_NLS_CODEPAGE_862 is not set
1217# CONFIG_NLS_CODEPAGE_863 is not set
1218# CONFIG_NLS_CODEPAGE_864 is not set
1219# CONFIG_NLS_CODEPAGE_865 is not set
1220# CONFIG_NLS_CODEPAGE_866 is not set
1221# CONFIG_NLS_CODEPAGE_869 is not set
1222# CONFIG_NLS_CODEPAGE_936 is not set
1223# CONFIG_NLS_CODEPAGE_950 is not set
1224CONFIG_NLS_CODEPAGE_932=m
1225# CONFIG_NLS_CODEPAGE_949 is not set
1226# CONFIG_NLS_CODEPAGE_874 is not set
1227# CONFIG_NLS_ISO8859_8 is not set
1228# CONFIG_NLS_CODEPAGE_1250 is not set
1229# CONFIG_NLS_CODEPAGE_1251 is not set
1230CONFIG_NLS_ASCII=m
1231# CONFIG_NLS_ISO8859_1 is not set
1232# CONFIG_NLS_ISO8859_2 is not set
1233# CONFIG_NLS_ISO8859_3 is not set
1234# CONFIG_NLS_ISO8859_4 is not set
1235# CONFIG_NLS_ISO8859_5 is not set
1236# CONFIG_NLS_ISO8859_6 is not set
1237# CONFIG_NLS_ISO8859_7 is not set
1238# CONFIG_NLS_ISO8859_9 is not set
1239# CONFIG_NLS_ISO8859_13 is not set
1240# CONFIG_NLS_ISO8859_14 is not set
1241CONFIG_NLS_ISO8859_15=m
1242# CONFIG_NLS_KOI8_R is not set
1243# CONFIG_NLS_KOI8_U is not set
1244CONFIG_NLS_UTF8=m
1245
1246#
1247# Profiling support
1248#
1249CONFIG_PROFILING=y
1250CONFIG_OPROFILE=m
1251
1252#
1253# Kernel hacking
1254#
1255# CONFIG_PRINTK_TIME is not set
1256# CONFIG_MAGIC_SYSRQ is not set
1257# CONFIG_DEBUG_KERNEL is not set
1258CONFIG_LOG_BUF_SHIFT=14
1259# CONFIG_DEBUG_BUGVERBOSE is not set
1260# CONFIG_DEBUG_FS is not set
1261CONFIG_FRAME_POINTER=y
1262# CONFIG_UNWIND_INFO is not set
1263# CONFIG_DEBUG_USER is not set
1264
1265#
1266# Security options
1267#
1268# CONFIG_KEYS is not set
1269# CONFIG_SECURITY is not set
1270
1271#
1272# Cryptographic options
1273#
1274CONFIG_CRYPTO=y
1275# CONFIG_CRYPTO_HMAC is not set
1276# CONFIG_CRYPTO_NULL is not set
1277# CONFIG_CRYPTO_MD4 is not set
1278CONFIG_CRYPTO_MD5=y
1279# CONFIG_CRYPTO_SHA1 is not set
1280# CONFIG_CRYPTO_SHA256 is not set
1281# CONFIG_CRYPTO_SHA512 is not set
1282# CONFIG_CRYPTO_WP512 is not set
1283# CONFIG_CRYPTO_TGR192 is not set
1284CONFIG_CRYPTO_DES=m
1285# CONFIG_CRYPTO_BLOWFISH is not set
1286# CONFIG_CRYPTO_TWOFISH is not set
1287# CONFIG_CRYPTO_SERPENT is not set
1288CONFIG_CRYPTO_AES=m
1289# CONFIG_CRYPTO_CAST5 is not set
1290# CONFIG_CRYPTO_CAST6 is not set
1291# CONFIG_CRYPTO_TEA is not set
1292CONFIG_CRYPTO_ARC4=m
1293# CONFIG_CRYPTO_KHAZAD is not set
1294# CONFIG_CRYPTO_ANUBIS is not set
1295# CONFIG_CRYPTO_DEFLATE is not set
1296CONFIG_CRYPTO_MICHAEL_MIC=m
1297# CONFIG_CRYPTO_CRC32C is not set
1298# CONFIG_CRYPTO_TEST is not set
1299
1300#
1301# Hardware crypto devices
1302#
1303
1304#
1305# Library routines
1306#
1307CONFIG_CRC_CCITT=m
1308CONFIG_CRC16=m
1309CONFIG_CRC32=y
1310CONFIG_LIBCRC32C=m
1311CONFIG_ZLIB_INFLATE=y
1312CONFIG_ZLIB_DEFLATE=m
diff --git a/arch/arm/configs/carmeva_defconfig b/arch/arm/configs/carmeva_defconfig
new file mode 100644
index 000000000000..5ccd29a7c1fb
--- /dev/null
+++ b/arch/arm/configs/carmeva_defconfig
@@ -0,0 +1,723 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc4
4# Tue Jun 14 12:05:24 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
19CONFIG_INIT_ENV_ARG_LIMIT=32
20
21#
22# General setup
23#
24CONFIG_LOCALVERSION=""
25CONFIG_SWAP=y
26# CONFIG_SYSVIPC is not set
27# CONFIG_POSIX_MQUEUE is not set
28# CONFIG_BSD_PROCESS_ACCT is not set
29# CONFIG_SYSCTL is not set
30# CONFIG_AUDIT is not set
31# CONFIG_HOTPLUG is not set
32CONFIG_KOBJECT_UEVENT=y
33# CONFIG_IKCONFIG is not set
34CONFIG_EMBEDDED=y
35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_EXTRA_PASS is not set
37CONFIG_PRINTK=y
38CONFIG_BUG=y
39CONFIG_BASE_FULL=y
40CONFIG_FUTEX=y
41CONFIG_EPOLL=y
42CONFIG_CC_OPTIMIZE_FOR_SIZE=y
43CONFIG_SHMEM=y
44CONFIG_CC_ALIGN_FUNCTIONS=0
45CONFIG_CC_ALIGN_LABELS=0
46CONFIG_CC_ALIGN_LOOPS=0
47CONFIG_CC_ALIGN_JUMPS=0
48# CONFIG_TINY_SHMEM is not set
49CONFIG_BASE_SMALL=0
50
51#
52# Loadable module support
53#
54CONFIG_MODULES=y
55CONFIG_MODULE_UNLOAD=y
56CONFIG_MODULE_FORCE_UNLOAD=y
57CONFIG_OBSOLETE_MODPARM=y
58# CONFIG_MODVERSIONS is not set
59# CONFIG_MODULE_SRCVERSION_ALL is not set
60# CONFIG_KMOD is not set
61
62#
63# System Type
64#
65# CONFIG_ARCH_CLPS7500 is not set
66# CONFIG_ARCH_CLPS711X is not set
67# CONFIG_ARCH_CO285 is not set
68# CONFIG_ARCH_EBSA110 is not set
69# CONFIG_ARCH_FOOTBRIDGE is not set
70# CONFIG_ARCH_INTEGRATOR is not set
71# CONFIG_ARCH_IOP3XX is not set
72# CONFIG_ARCH_IXP4XX is not set
73# CONFIG_ARCH_IXP2000 is not set
74# CONFIG_ARCH_L7200 is not set
75# CONFIG_ARCH_PXA is not set
76# CONFIG_ARCH_RPC is not set
77# CONFIG_ARCH_SA1100 is not set
78# CONFIG_ARCH_S3C2410 is not set
79# CONFIG_ARCH_SHARK is not set
80# CONFIG_ARCH_LH7A40X is not set
81# CONFIG_ARCH_OMAP is not set
82# CONFIG_ARCH_VERSATILE is not set
83# CONFIG_ARCH_IMX is not set
84# CONFIG_ARCH_H720X is not set
85CONFIG_ARCH_AT91RM9200=y
86
87#
88# AT91RM9200 Implementations
89#
90# CONFIG_ARCH_AT91RM9200DK is not set
91# CONFIG_MACH_AT91RM9200EK is not set
92# CONFIG_MACH_CSB337 is not set
93# CONFIG_MACH_CSB637 is not set
94CONFIG_MACH_CARMEVA=y
95
96#
97# Processor Type
98#
99CONFIG_CPU_32=y
100CONFIG_CPU_ARM920T=y
101CONFIG_CPU_32v4=y
102CONFIG_CPU_ABRT_EV4T=y
103CONFIG_CPU_CACHE_V4WT=y
104CONFIG_CPU_CACHE_VIVT=y
105CONFIG_CPU_COPY_V4WB=y
106CONFIG_CPU_TLB_V4WBI=y
107
108#
109# Processor Features
110#
111CONFIG_ARM_THUMB=y
112# CONFIG_CPU_ICACHE_DISABLE is not set
113# CONFIG_CPU_DCACHE_DISABLE is not set
114# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
115
116#
117# Bus support
118#
119CONFIG_ISA_DMA_API=y
120
121#
122# PCCARD (PCMCIA/CardBus) support
123#
124# CONFIG_PCCARD is not set
125
126#
127# Kernel Features
128#
129# CONFIG_SMP is not set
130# CONFIG_PREEMPT is not set
131# CONFIG_DISCONTIGMEM is not set
132# CONFIG_LEDS is not set
133CONFIG_ALIGNMENT_TRAP=y
134
135#
136# Boot options
137#
138CONFIG_ZBOOT_ROM_TEXT=0x0
139CONFIG_ZBOOT_ROM_BSS=0x0
140CONFIG_CMDLINE=""
141# CONFIG_XIP_KERNEL is not set
142
143#
144# Floating point emulation
145#
146
147#
148# At least one emulation must be selected
149#
150CONFIG_FPE_NWFPE=y
151# CONFIG_FPE_NWFPE_XP is not set
152# CONFIG_FPE_FASTFPE is not set
153
154#
155# Userspace binary formats
156#
157CONFIG_BINFMT_ELF=y
158# CONFIG_BINFMT_AOUT is not set
159# CONFIG_BINFMT_MISC is not set
160# CONFIG_ARTHUR is not set
161
162#
163# Power management options
164#
165# CONFIG_PM is not set
166
167#
168# Device Drivers
169#
170
171#
172# Generic Driver Options
173#
174CONFIG_STANDALONE=y
175CONFIG_PREVENT_FIRMWARE_BUILD=y
176# CONFIG_FW_LOADER is not set
177
178#
179# Memory Technology Devices (MTD)
180#
181CONFIG_MTD=y
182# CONFIG_MTD_DEBUG is not set
183# CONFIG_MTD_CONCAT is not set
184CONFIG_MTD_PARTITIONS=y
185# CONFIG_MTD_REDBOOT_PARTS is not set
186CONFIG_MTD_CMDLINE_PARTS=y
187# CONFIG_MTD_AFS_PARTS is not set
188
189#
190# User Modules And Translation Layers
191#
192CONFIG_MTD_CHAR=y
193CONFIG_MTD_BLOCK=y
194# CONFIG_FTL is not set
195# CONFIG_NFTL is not set
196# CONFIG_INFTL is not set
197
198#
199# RAM/ROM/Flash chip drivers
200#
201# CONFIG_MTD_CFI is not set
202# CONFIG_MTD_JEDECPROBE is not set
203CONFIG_MTD_MAP_BANK_WIDTH_1=y
204CONFIG_MTD_MAP_BANK_WIDTH_2=y
205CONFIG_MTD_MAP_BANK_WIDTH_4=y
206# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
207# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
208# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
209CONFIG_MTD_CFI_I1=y
210CONFIG_MTD_CFI_I2=y
211# CONFIG_MTD_CFI_I4 is not set
212# CONFIG_MTD_CFI_I8 is not set
213# CONFIG_MTD_RAM is not set
214# CONFIG_MTD_ROM is not set
215# CONFIG_MTD_ABSENT is not set
216
217#
218# Mapping drivers for chip access
219#
220# CONFIG_MTD_COMPLEX_MAPPINGS is not set
221
222#
223# Self-contained MTD device drivers
224#
225# CONFIG_MTD_SLRAM is not set
226# CONFIG_MTD_PHRAM is not set
227# CONFIG_MTD_MTDRAM is not set
228# CONFIG_MTD_BLKMTD is not set
229# CONFIG_MTD_BLOCK2MTD is not set
230
231#
232# Disk-On-Chip Device Drivers
233#
234# CONFIG_MTD_DOC2000 is not set
235# CONFIG_MTD_DOC2001 is not set
236# CONFIG_MTD_DOC2001PLUS is not set
237CONFIG_MTD_AT91_DATAFLASH=y
238# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
239
240#
241# NAND Flash Device Drivers
242#
243# CONFIG_MTD_NAND is not set
244
245#
246# Parallel port support
247#
248# CONFIG_PARPORT is not set
249
250#
251# Plug and Play support
252#
253
254#
255# Block devices
256#
257# CONFIG_BLK_DEV_COW_COMMON is not set
258# CONFIG_BLK_DEV_LOOP is not set
259# CONFIG_BLK_DEV_NBD is not set
260CONFIG_BLK_DEV_RAM=y
261CONFIG_BLK_DEV_RAM_COUNT=16
262CONFIG_BLK_DEV_RAM_SIZE=4096
263CONFIG_BLK_DEV_INITRD=y
264CONFIG_INITRAMFS_SOURCE=""
265# CONFIG_CDROM_PKTCDVD is not set
266
267#
268# IO Schedulers
269#
270CONFIG_IOSCHED_NOOP=y
271CONFIG_IOSCHED_AS=y
272CONFIG_IOSCHED_DEADLINE=y
273CONFIG_IOSCHED_CFQ=y
274# CONFIG_ATA_OVER_ETH is not set
275
276#
277# SCSI device support
278#
279# CONFIG_SCSI is not set
280
281#
282# Multi-device support (RAID and LVM)
283#
284# CONFIG_MD is not set
285
286#
287# Fusion MPT device support
288#
289
290#
291# IEEE 1394 (FireWire) support
292#
293
294#
295# I2O device support
296#
297
298#
299# Networking support
300#
301CONFIG_NET=y
302
303#
304# Networking options
305#
306# CONFIG_PACKET is not set
307CONFIG_UNIX=y
308# CONFIG_NET_KEY is not set
309CONFIG_INET=y
310CONFIG_IP_MULTICAST=y
311# CONFIG_IP_ADVANCED_ROUTER is not set
312CONFIG_IP_PNP=y
313# CONFIG_IP_PNP_DHCP is not set
314# CONFIG_IP_PNP_BOOTP is not set
315# CONFIG_IP_PNP_RARP is not set
316# CONFIG_NET_IPIP is not set
317# CONFIG_NET_IPGRE is not set
318# CONFIG_IP_MROUTE is not set
319# CONFIG_ARPD is not set
320# CONFIG_SYN_COOKIES is not set
321# CONFIG_INET_AH is not set
322# CONFIG_INET_ESP is not set
323# CONFIG_INET_IPCOMP is not set
324# CONFIG_INET_TUNNEL is not set
325CONFIG_IP_TCPDIAG=y
326# CONFIG_IP_TCPDIAG_IPV6 is not set
327# CONFIG_IPV6 is not set
328# CONFIG_NETFILTER is not set
329
330#
331# SCTP Configuration (EXPERIMENTAL)
332#
333# CONFIG_IP_SCTP is not set
334# CONFIG_ATM is not set
335# CONFIG_BRIDGE is not set
336# CONFIG_VLAN_8021Q is not set
337# CONFIG_DECNET is not set
338# CONFIG_LLC2 is not set
339# CONFIG_IPX is not set
340# CONFIG_ATALK is not set
341# CONFIG_X25 is not set
342# CONFIG_LAPB is not set
343# CONFIG_NET_DIVERT is not set
344# CONFIG_ECONET is not set
345# CONFIG_WAN_ROUTER is not set
346
347#
348# QoS and/or fair queueing
349#
350# CONFIG_NET_SCHED is not set
351# CONFIG_NET_CLS_ROUTE is not set
352
353#
354# Network testing
355#
356# CONFIG_NET_PKTGEN is not set
357# CONFIG_NETPOLL is not set
358# CONFIG_NET_POLL_CONTROLLER is not set
359# CONFIG_HAMRADIO is not set
360# CONFIG_IRDA is not set
361# CONFIG_BT is not set
362CONFIG_NETDEVICES=y
363# CONFIG_DUMMY is not set
364# CONFIG_BONDING is not set
365# CONFIG_EQUALIZER is not set
366# CONFIG_TUN is not set
367
368#
369# Ethernet (10 or 100Mbit)
370#
371CONFIG_NET_ETHERNET=y
372CONFIG_MII=y
373CONFIG_ARM_AT91_ETHER=y
374CONFIG_ARM_AT91_ETHER_RMII=y
375# CONFIG_SMC91X is not set
376
377#
378# Ethernet (1000 Mbit)
379#
380
381#
382# Ethernet (10000 Mbit)
383#
384
385#
386# Token Ring devices
387#
388
389#
390# Wireless LAN (non-hamradio)
391#
392# CONFIG_NET_RADIO is not set
393
394#
395# Wan interfaces
396#
397# CONFIG_WAN is not set
398# CONFIG_PPP is not set
399# CONFIG_SLIP is not set
400# CONFIG_SHAPER is not set
401# CONFIG_NETCONSOLE is not set
402
403#
404# ISDN subsystem
405#
406# CONFIG_ISDN is not set
407
408#
409# Input device support
410#
411CONFIG_INPUT=y
412
413#
414# Userland interfaces
415#
416# CONFIG_INPUT_MOUSEDEV is not set
417# CONFIG_INPUT_JOYDEV is not set
418# CONFIG_INPUT_TSDEV is not set
419# CONFIG_INPUT_EVDEV is not set
420# CONFIG_INPUT_EVBUG is not set
421
422#
423# Input Device Drivers
424#
425# CONFIG_INPUT_KEYBOARD is not set
426# CONFIG_INPUT_MOUSE is not set
427# CONFIG_INPUT_JOYSTICK is not set
428# CONFIG_INPUT_TOUCHSCREEN is not set
429# CONFIG_INPUT_MISC is not set
430
431#
432# Hardware I/O ports
433#
434CONFIG_SERIO=m
435CONFIG_SERIO_SERPORT=m
436# CONFIG_SERIO_LIBPS2 is not set
437# CONFIG_SERIO_RAW is not set
438# CONFIG_GAMEPORT is not set
439CONFIG_SOUND_GAMEPORT=y
440
441#
442# Character devices
443#
444CONFIG_VT=y
445CONFIG_VT_CONSOLE=y
446CONFIG_HW_CONSOLE=y
447# CONFIG_SERIAL_NONSTANDARD is not set
448
449#
450# Serial drivers
451#
452# CONFIG_SERIAL_8250 is not set
453
454#
455# Non-8250 serial port support
456#
457CONFIG_SERIAL_AT91=y
458CONFIG_SERIAL_AT91_CONSOLE=y
459CONFIG_SERIAL_CORE=y
460CONFIG_SERIAL_CORE_CONSOLE=y
461CONFIG_UNIX98_PTYS=y
462CONFIG_LEGACY_PTYS=y
463CONFIG_LEGACY_PTY_COUNT=256
464
465#
466# IPMI
467#
468# CONFIG_IPMI_HANDLER is not set
469
470#
471# Watchdog Cards
472#
473# CONFIG_WATCHDOG is not set
474# CONFIG_NVRAM is not set
475# CONFIG_RTC is not set
476# CONFIG_AT91_RTC is not set
477# CONFIG_DTLK is not set
478# CONFIG_R3964 is not set
479
480#
481# Ftape, the floppy tape device driver
482#
483# CONFIG_DRM is not set
484# CONFIG_RAW_DRIVER is not set
485
486#
487# TPM devices
488#
489CONFIG_AT91_SPI=y
490CONFIG_AT91_SPIDEV=y
491
492#
493# I2C support
494#
495# CONFIG_I2C is not set
496
497#
498# Misc devices
499#
500
501#
502# Multimedia devices
503#
504# CONFIG_VIDEO_DEV is not set
505
506#
507# Digital Video Broadcasting Devices
508#
509# CONFIG_DVB is not set
510
511#
512# Graphics support
513#
514# CONFIG_FB is not set
515
516#
517# Console display driver support
518#
519# CONFIG_VGA_CONSOLE is not set
520CONFIG_DUMMY_CONSOLE=y
521
522#
523# Sound
524#
525# CONFIG_SOUND is not set
526
527#
528# USB support
529#
530CONFIG_USB_ARCH_HAS_HCD=y
531CONFIG_USB_ARCH_HAS_OHCI=y
532# CONFIG_USB is not set
533
534#
535# USB Gadget Support
536#
537# CONFIG_USB_GADGET is not set
538
539#
540# MMC/SD Card support
541#
542CONFIG_MMC=m
543CONFIG_MMC_DEBUG=y
544CONFIG_MMC_BLOCK=m
545CONFIG_MMC_AT91RM9200=m
546
547#
548# File systems
549#
550CONFIG_EXT2_FS=y
551CONFIG_EXT2_FS_XATTR=y
552# CONFIG_EXT2_FS_POSIX_ACL is not set
553# CONFIG_EXT2_FS_SECURITY is not set
554# CONFIG_EXT3_FS is not set
555# CONFIG_JBD is not set
556CONFIG_FS_MBCACHE=y
557# CONFIG_REISERFS_FS is not set
558# CONFIG_JFS_FS is not set
559
560#
561# XFS support
562#
563# CONFIG_XFS_FS is not set
564# CONFIG_MINIX_FS is not set
565# CONFIG_ROMFS_FS is not set
566# CONFIG_QUOTA is not set
567# CONFIG_DNOTIFY is not set
568# CONFIG_AUTOFS_FS is not set
569# CONFIG_AUTOFS4_FS is not set
570
571#
572# CD-ROM/DVD Filesystems
573#
574# CONFIG_ISO9660_FS is not set
575# CONFIG_UDF_FS is not set
576
577#
578# DOS/FAT/NT Filesystems
579#
580# CONFIG_MSDOS_FS is not set
581# CONFIG_VFAT_FS is not set
582# CONFIG_NTFS_FS is not set
583
584#
585# Pseudo filesystems
586#
587CONFIG_PROC_FS=y
588CONFIG_SYSFS=y
589# CONFIG_DEVFS_FS is not set
590CONFIG_DEVPTS_FS_XATTR=y
591CONFIG_DEVPTS_FS_SECURITY=y
592# CONFIG_TMPFS is not set
593# CONFIG_HUGETLB_PAGE is not set
594CONFIG_RAMFS=y
595
596#
597# Miscellaneous filesystems
598#
599# CONFIG_ADFS_FS is not set
600# CONFIG_AFFS_FS is not set
601# CONFIG_HFS_FS is not set
602# CONFIG_HFSPLUS_FS is not set
603# CONFIG_BEFS_FS is not set
604# CONFIG_BFS_FS is not set
605# CONFIG_EFS_FS is not set
606CONFIG_JFFS_FS=y
607CONFIG_JFFS_FS_VERBOSE=0
608CONFIG_JFFS_PROC_FS=y
609CONFIG_JFFS2_FS=y
610CONFIG_JFFS2_FS_DEBUG=0
611CONFIG_JFFS2_FS_NAND=y
612# CONFIG_JFFS2_FS_NOR_ECC is not set
613CONFIG_JFFS2_COMPRESSION_OPTIONS=y
614CONFIG_JFFS2_ZLIB=y
615CONFIG_JFFS2_RTIME=y
616# CONFIG_JFFS2_RUBIN is not set
617# CONFIG_JFFS2_CMODE_NONE is not set
618CONFIG_JFFS2_CMODE_PRIORITY=y
619# CONFIG_JFFS2_CMODE_SIZE is not set
620# CONFIG_CRAMFS is not set
621# CONFIG_VXFS_FS is not set
622# CONFIG_HPFS_FS is not set
623# CONFIG_QNX4FS_FS is not set
624# CONFIG_SYSV_FS is not set
625# CONFIG_UFS_FS is not set
626
627#
628# Network File Systems
629#
630CONFIG_NFS_FS=y
631CONFIG_NFS_V3=y
632CONFIG_NFS_V4=y
633# CONFIG_NFS_DIRECTIO is not set
634CONFIG_NFSD=y
635# CONFIG_NFSD_V3 is not set
636CONFIG_NFSD_TCP=y
637CONFIG_ROOT_NFS=y
638CONFIG_LOCKD=y
639CONFIG_LOCKD_V4=y
640CONFIG_EXPORTFS=y
641CONFIG_SUNRPC=y
642CONFIG_SUNRPC_GSS=y
643CONFIG_RPCSEC_GSS_KRB5=y
644# CONFIG_RPCSEC_GSS_SPKM3 is not set
645# CONFIG_SMB_FS is not set
646# CONFIG_CIFS is not set
647# CONFIG_NCP_FS is not set
648# CONFIG_CODA_FS is not set
649# CONFIG_AFS_FS is not set
650
651#
652# Partition Types
653#
654# CONFIG_PARTITION_ADVANCED is not set
655CONFIG_MSDOS_PARTITION=y
656
657#
658# Native Language Support
659#
660# CONFIG_NLS is not set
661
662#
663# Profiling support
664#
665# CONFIG_PROFILING is not set
666
667#
668# Kernel hacking
669#
670# CONFIG_PRINTK_TIME is not set
671# CONFIG_DEBUG_KERNEL is not set
672CONFIG_LOG_BUF_SHIFT=14
673# CONFIG_DEBUG_BUGVERBOSE is not set
674CONFIG_FRAME_POINTER=y
675# CONFIG_DEBUG_USER is not set
676
677#
678# Security options
679#
680# CONFIG_KEYS is not set
681# CONFIG_SECURITY is not set
682
683#
684# Cryptographic options
685#
686CONFIG_CRYPTO=y
687# CONFIG_CRYPTO_HMAC is not set
688# CONFIG_CRYPTO_NULL is not set
689# CONFIG_CRYPTO_MD4 is not set
690CONFIG_CRYPTO_MD5=y
691# CONFIG_CRYPTO_SHA1 is not set
692# CONFIG_CRYPTO_SHA256 is not set
693# CONFIG_CRYPTO_SHA512 is not set
694# CONFIG_CRYPTO_WP512 is not set
695# CONFIG_CRYPTO_TGR192 is not set
696CONFIG_CRYPTO_DES=y
697# CONFIG_CRYPTO_BLOWFISH is not set
698# CONFIG_CRYPTO_TWOFISH is not set
699# CONFIG_CRYPTO_SERPENT is not set
700# CONFIG_CRYPTO_AES is not set
701# CONFIG_CRYPTO_CAST5 is not set
702# CONFIG_CRYPTO_CAST6 is not set
703# CONFIG_CRYPTO_TEA is not set
704# CONFIG_CRYPTO_ARC4 is not set
705# CONFIG_CRYPTO_KHAZAD is not set
706# CONFIG_CRYPTO_ANUBIS is not set
707# CONFIG_CRYPTO_DEFLATE is not set
708# CONFIG_CRYPTO_MICHAEL_MIC is not set
709# CONFIG_CRYPTO_CRC32C is not set
710# CONFIG_CRYPTO_TEST is not set
711
712#
713# Hardware crypto devices
714#
715
716#
717# Library routines
718#
719# CONFIG_CRC_CCITT is not set
720CONFIG_CRC32=y
721# CONFIG_LIBCRC32C is not set
722CONFIG_ZLIB_INFLATE=y
723CONFIG_ZLIB_DEFLATE=y
diff --git a/arch/arm/configs/kafa_defconfig b/arch/arm/configs/kafa_defconfig
new file mode 100644
index 000000000000..51ded20e3f64
--- /dev/null
+++ b/arch/arm/configs/kafa_defconfig
@@ -0,0 +1,884 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.17-rc3
4# Sun May 7 16:54:53 2006
5#
6CONFIG_ARM=y
7CONFIG_MMU=y
8CONFIG_RWSEM_GENERIC_SPINLOCK=y
9CONFIG_GENERIC_HWEIGHT=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_VECTORS_BASE=0xffff0000
12
13#
14# Code maturity level options
15#
16CONFIG_EXPERIMENTAL=y
17CONFIG_BROKEN_ON_SMP=y
18CONFIG_LOCK_KERNEL=y
19CONFIG_INIT_ENV_ARG_LIMIT=32
20
21#
22# General setup
23#
24CONFIG_LOCALVERSION=""
25# CONFIG_LOCALVERSION_AUTO is not set
26# CONFIG_SWAP is not set
27CONFIG_SYSVIPC=y
28# CONFIG_POSIX_MQUEUE is not set
29# CONFIG_BSD_PROCESS_ACCT is not set
30CONFIG_SYSCTL=y
31# CONFIG_AUDIT is not set
32# CONFIG_IKCONFIG is not set
33# CONFIG_RELAY is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_UID16=y
36CONFIG_CC_OPTIMIZE_FOR_SIZE=y
37# CONFIG_EMBEDDED is not set
38CONFIG_KALLSYMS=y
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_HOTPLUG=y
41CONFIG_PRINTK=y
42CONFIG_BUG=y
43CONFIG_ELF_CORE=y
44CONFIG_BASE_FULL=y
45CONFIG_FUTEX=y
46CONFIG_EPOLL=y
47CONFIG_SHMEM=y
48CONFIG_SLAB=y
49# CONFIG_TINY_SHMEM is not set
50CONFIG_BASE_SMALL=0
51# CONFIG_SLOB is not set
52
53#
54# Loadable module support
55#
56CONFIG_MODULES=y
57CONFIG_MODULE_UNLOAD=y
58# CONFIG_MODULE_FORCE_UNLOAD is not set
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61# CONFIG_KMOD is not set
62
63#
64# Block layer
65#
66# CONFIG_BLK_DEV_IO_TRACE is not set
67
68#
69# IO Schedulers
70#
71CONFIG_IOSCHED_NOOP=y
72# CONFIG_IOSCHED_AS is not set
73CONFIG_IOSCHED_DEADLINE=y
74# CONFIG_IOSCHED_CFQ is not set
75# CONFIG_DEFAULT_AS is not set
76CONFIG_DEFAULT_DEADLINE=y
77# CONFIG_DEFAULT_CFQ is not set
78# CONFIG_DEFAULT_NOOP is not set
79CONFIG_DEFAULT_IOSCHED="deadline"
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_EP93XX 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_IXP23XX is not set
95# CONFIG_ARCH_L7200 is not set
96# CONFIG_ARCH_PXA is not set
97# CONFIG_ARCH_RPC is not set
98# CONFIG_ARCH_SA1100 is not set
99# CONFIG_ARCH_S3C2410 is not set
100# CONFIG_ARCH_SHARK is not set
101# CONFIG_ARCH_LH7A40X is not set
102# CONFIG_ARCH_OMAP is not set
103# CONFIG_ARCH_VERSATILE is not set
104# CONFIG_ARCH_REALVIEW is not set
105# CONFIG_ARCH_IMX is not set
106# CONFIG_ARCH_H720X is not set
107# CONFIG_ARCH_AAEC2000 is not set
108CONFIG_ARCH_AT91RM9200=y
109
110#
111# AT91RM9200 Implementations
112#
113
114#
115# AT91RM9200 Board Type
116#
117# CONFIG_ARCH_AT91RM9200DK is not set
118# CONFIG_MACH_AT91RM9200EK is not set
119# CONFIG_MACH_CSB337 is not set
120# CONFIG_MACH_CSB637 is not set
121# CONFIG_MACH_CARMEVA is not set
122# CONFIG_MACH_KB9200 is not set
123# CONFIG_MACH_ATEB9200 is not set
124CONFIG_MACH_KAFA=y
125
126#
127# AT91 Feature Selections
128#
129# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
130
131#
132# Processor Type
133#
134CONFIG_CPU_32=y
135CONFIG_CPU_ARM920T=y
136CONFIG_CPU_32v4=y
137CONFIG_CPU_ABRT_EV4T=y
138CONFIG_CPU_CACHE_V4WT=y
139CONFIG_CPU_CACHE_VIVT=y
140CONFIG_CPU_COPY_V4WB=y
141CONFIG_CPU_TLB_V4WBI=y
142
143#
144# Processor Features
145#
146# CONFIG_ARM_THUMB is not set
147# CONFIG_CPU_ICACHE_DISABLE is not set
148# CONFIG_CPU_DCACHE_DISABLE is not set
149# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
150
151#
152# Bus support
153#
154
155#
156# PCCARD (PCMCIA/CardBus) support
157#
158# CONFIG_PCCARD is not set
159
160#
161# Kernel Features
162#
163CONFIG_PREEMPT=y
164# CONFIG_NO_IDLE_HZ is not set
165CONFIG_HZ=100
166# CONFIG_AEABI is not set
167# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
168CONFIG_SELECT_MEMORY_MODEL=y
169CONFIG_FLATMEM_MANUAL=y
170# CONFIG_DISCONTIGMEM_MANUAL is not set
171# CONFIG_SPARSEMEM_MANUAL is not set
172CONFIG_FLATMEM=y
173CONFIG_FLAT_NODE_MEM_MAP=y
174# CONFIG_SPARSEMEM_STATIC is not set
175CONFIG_SPLIT_PTLOCK_CPUS=4096
176CONFIG_LEDS=y
177# CONFIG_LEDS_TIMER is not set
178CONFIG_LEDS_CPU=y
179CONFIG_ALIGNMENT_TRAP=y
180
181#
182# Boot options
183#
184CONFIG_ZBOOT_ROM_TEXT=0x0
185CONFIG_ZBOOT_ROM_BSS=0x0
186CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20800000,10M root=/dev/ram0 rw"
187# CONFIG_XIP_KERNEL is not set
188
189#
190# Floating point emulation
191#
192
193#
194# At least one emulation must be selected
195#
196CONFIG_FPE_NWFPE=y
197# CONFIG_FPE_NWFPE_XP is not set
198# CONFIG_FPE_FASTFPE is not set
199
200#
201# Userspace binary formats
202#
203CONFIG_BINFMT_ELF=y
204# CONFIG_BINFMT_AOUT is not set
205CONFIG_BINFMT_MISC=y
206# CONFIG_ARTHUR is not set
207
208#
209# Power management options
210#
211# CONFIG_PM is not set
212# CONFIG_APM is not set
213
214#
215# Networking
216#
217CONFIG_NET=y
218
219#
220# Networking options
221#
222# CONFIG_NETDEBUG is not set
223CONFIG_PACKET=y
224# CONFIG_PACKET_MMAP is not set
225CONFIG_UNIX=y
226# CONFIG_NET_KEY is not set
227CONFIG_INET=y
228# CONFIG_IP_MULTICAST is not set
229# CONFIG_IP_ADVANCED_ROUTER is not set
230CONFIG_IP_FIB_HASH=y
231# CONFIG_IP_PNP is not set
232# CONFIG_NET_IPIP is not set
233# CONFIG_NET_IPGRE is not set
234# CONFIG_ARPD is not set
235# CONFIG_SYN_COOKIES is not set
236# CONFIG_INET_AH is not set
237# CONFIG_INET_ESP is not set
238# CONFIG_INET_IPCOMP is not set
239# CONFIG_INET_XFRM_TUNNEL is not set
240# CONFIG_INET_TUNNEL is not set
241# CONFIG_INET_DIAG is not set
242# CONFIG_TCP_CONG_ADVANCED is not set
243CONFIG_TCP_CONG_BIC=y
244# CONFIG_IPV6 is not set
245# CONFIG_INET6_XFRM_TUNNEL is not set
246# CONFIG_INET6_TUNNEL is not set
247# CONFIG_NETFILTER is not set
248
249#
250# DCCP Configuration (EXPERIMENTAL)
251#
252# CONFIG_IP_DCCP is not set
253
254#
255# SCTP Configuration (EXPERIMENTAL)
256#
257# CONFIG_IP_SCTP is not set
258
259#
260# TIPC Configuration (EXPERIMENTAL)
261#
262# CONFIG_TIPC 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
299# CONFIG_FW_LOADER is not set
300
301#
302# Connector - unified userspace <-> kernelspace linker
303#
304# CONFIG_CONNECTOR is not set
305
306#
307# Memory Technology Devices (MTD)
308#
309CONFIG_MTD=y
310# CONFIG_MTD_DEBUG is not set
311# CONFIG_MTD_CONCAT is not set
312CONFIG_MTD_PARTITIONS=y
313# CONFIG_MTD_REDBOOT_PARTS is not set
314# CONFIG_MTD_CMDLINE_PARTS is not set
315# CONFIG_MTD_AFS_PARTS is not set
316
317#
318# User Modules And Translation Layers
319#
320CONFIG_MTD_CHAR=y
321# CONFIG_MTD_BLOCK is not set
322CONFIG_MTD_BLOCK_RO=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#
331# CONFIG_MTD_CFI is not set
332# CONFIG_MTD_JEDECPROBE is not set
333CONFIG_MTD_MAP_BANK_WIDTH_1=y
334CONFIG_MTD_MAP_BANK_WIDTH_2=y
335CONFIG_MTD_MAP_BANK_WIDTH_4=y
336# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
337# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
338# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
339CONFIG_MTD_CFI_I1=y
340CONFIG_MTD_CFI_I2=y
341# CONFIG_MTD_CFI_I4 is not set
342# CONFIG_MTD_CFI_I8 is not set
343# CONFIG_MTD_RAM is not set
344# CONFIG_MTD_ROM is not set
345# CONFIG_MTD_ABSENT is not set
346# CONFIG_MTD_OBSOLETE_CHIPS is not set
347
348#
349# Mapping drivers for chip access
350#
351# CONFIG_MTD_COMPLEX_MAPPINGS is not set
352# CONFIG_MTD_PLATRAM is not set
353
354#
355# Self-contained MTD device drivers
356#
357# CONFIG_MTD_SLRAM is not set
358# CONFIG_MTD_PHRAM is not set
359# CONFIG_MTD_MTDRAM is not set
360# CONFIG_MTD_BLOCK2MTD is not set
361
362#
363# Disk-On-Chip Device Drivers
364#
365# CONFIG_MTD_DOC2000 is not set
366# CONFIG_MTD_DOC2001 is not set
367# CONFIG_MTD_DOC2001PLUS is not set
368CONFIG_MTD_AT91_DATAFLASH=y
369# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
370
371#
372# NAND Flash Device Drivers
373#
374# CONFIG_MTD_NAND is not set
375
376#
377# OneNAND Flash Device Drivers
378#
379# CONFIG_MTD_ONENAND is not set
380
381#
382# Parallel port support
383#
384# CONFIG_PARPORT is not set
385
386#
387# Plug and Play support
388#
389
390#
391# Block devices
392#
393# CONFIG_BLK_DEV_COW_COMMON is not set
394# CONFIG_BLK_DEV_LOOP is not set
395# CONFIG_BLK_DEV_NBD is not set
396# CONFIG_BLK_DEV_RAM is not set
397# CONFIG_BLK_DEV_INITRD is not set
398# CONFIG_CDROM_PKTCDVD is not set
399# CONFIG_ATA_OVER_ETH is not set
400
401#
402# SCSI device support
403#
404# CONFIG_RAID_ATTRS is not set
405# CONFIG_SCSI is not set
406
407#
408# Multi-device support (RAID and LVM)
409#
410# CONFIG_MD is not set
411
412#
413# Fusion MPT device support
414#
415# CONFIG_FUSION is not set
416
417#
418# IEEE 1394 (FireWire) support
419#
420
421#
422# I2O device support
423#
424
425#
426# Network device support
427#
428CONFIG_NETDEVICES=y
429# CONFIG_DUMMY is not set
430# CONFIG_BONDING is not set
431# CONFIG_EQUALIZER is not set
432# CONFIG_TUN is not set
433
434#
435# PHY device support
436#
437CONFIG_PHYLIB=y
438
439#
440# MII PHY device drivers
441#
442# CONFIG_MARVELL_PHY is not set
443CONFIG_DAVICOM_PHY=y
444# CONFIG_QSEMI_PHY is not set
445# CONFIG_LXT_PHY is not set
446# CONFIG_CICADA_PHY is not set
447
448#
449# Ethernet (10 or 100Mbit)
450#
451CONFIG_NET_ETHERNET=y
452CONFIG_MII=y
453CONFIG_ARM_AT91_ETHER=y
454# CONFIG_SMC91X is not set
455# CONFIG_DM9000 is not set
456
457#
458# Ethernet (1000 Mbit)
459#
460
461#
462# Ethernet (10000 Mbit)
463#
464
465#
466# Token Ring devices
467#
468
469#
470# Wireless LAN (non-hamradio)
471#
472# CONFIG_NET_RADIO is not set
473
474#
475# Wan interfaces
476#
477# CONFIG_WAN is not set
478# CONFIG_PPP is not set
479# CONFIG_SLIP is not set
480# CONFIG_SHAPER is not set
481# CONFIG_NETCONSOLE is not set
482# CONFIG_NETPOLL is not set
483# CONFIG_NET_POLL_CONTROLLER is not set
484
485#
486# ISDN subsystem
487#
488# CONFIG_ISDN is not set
489
490#
491# Input device support
492#
493CONFIG_INPUT=y
494
495#
496# Userland interfaces
497#
498CONFIG_INPUT_MOUSEDEV=y
499# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
500CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
501CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
502# CONFIG_INPUT_JOYDEV is not set
503# CONFIG_INPUT_TSDEV is not set
504# CONFIG_INPUT_EVDEV is not set
505# CONFIG_INPUT_EVBUG is not set
506
507#
508# Input Device Drivers
509#
510# CONFIG_INPUT_KEYBOARD is not set
511# CONFIG_INPUT_MOUSE is not set
512# CONFIG_INPUT_JOYSTICK is not set
513# CONFIG_INPUT_TOUCHSCREEN is not set
514# CONFIG_INPUT_MISC is not set
515
516#
517# Hardware I/O ports
518#
519# CONFIG_SERIO is not set
520# CONFIG_GAMEPORT is not set
521
522#
523# Character devices
524#
525CONFIG_VT=y
526CONFIG_VT_CONSOLE=y
527CONFIG_HW_CONSOLE=y
528# CONFIG_SERIAL_NONSTANDARD is not set
529
530#
531# Serial drivers
532#
533# CONFIG_SERIAL_8250 is not set
534
535#
536# Non-8250 serial port support
537#
538CONFIG_SERIAL_AT91=y
539CONFIG_SERIAL_AT91_CONSOLE=y
540# CONFIG_SERIAL_AT91_TTYAT is not set
541CONFIG_SERIAL_CORE=y
542CONFIG_SERIAL_CORE_CONSOLE=y
543CONFIG_UNIX98_PTYS=y
544CONFIG_LEGACY_PTYS=y
545CONFIG_LEGACY_PTY_COUNT=32
546
547#
548# IPMI
549#
550# CONFIG_IPMI_HANDLER is not set
551
552#
553# Watchdog Cards
554#
555CONFIG_WATCHDOG=y
556CONFIG_WATCHDOG_NOWAYOUT=y
557
558#
559# Watchdog Device Drivers
560#
561# CONFIG_SOFT_WATCHDOG is not set
562CONFIG_AT91_WATCHDOG=y
563# CONFIG_NVRAM is not set
564# CONFIG_DTLK is not set
565# CONFIG_R3964 is not set
566
567#
568# Ftape, the floppy tape device driver
569#
570# CONFIG_RAW_DRIVER is not set
571
572#
573# TPM devices
574#
575# CONFIG_TCG_TPM is not set
576# CONFIG_TELCLOCK is not set
577CONFIG_AT91_SPI=y
578CONFIG_AT91_SPIDEV=y
579
580#
581# I2C support
582#
583CONFIG_I2C=y
584CONFIG_I2C_CHARDEV=y
585
586#
587# I2C Algorithms
588#
589# CONFIG_I2C_ALGOBIT is not set
590# CONFIG_I2C_ALGOPCF is not set
591# CONFIG_I2C_ALGOPCA is not set
592
593#
594# I2C Hardware Bus support
595#
596CONFIG_I2C_AT91=y
597# CONFIG_I2C_PARPORT_LIGHT is not set
598# CONFIG_I2C_STUB is not set
599# CONFIG_I2C_PCA_ISA is not set
600
601#
602# Miscellaneous I2C Chip support
603#
604# CONFIG_SENSORS_DS1337 is not set
605# CONFIG_SENSORS_DS1374 is not set
606# CONFIG_SENSORS_EEPROM is not set
607# CONFIG_SENSORS_PCF8574 is not set
608# CONFIG_SENSORS_PCA9539 is not set
609# CONFIG_SENSORS_PCF8591 is not set
610# CONFIG_SENSORS_MAX6875 is not set
611# CONFIG_I2C_DEBUG_CORE is not set
612# CONFIG_I2C_DEBUG_ALGO is not set
613# CONFIG_I2C_DEBUG_BUS is not set
614# CONFIG_I2C_DEBUG_CHIP is not set
615
616#
617# SPI support
618#
619# CONFIG_SPI is not set
620# CONFIG_SPI_MASTER is not set
621
622#
623# Dallas's 1-wire bus
624#
625# CONFIG_W1 is not set
626
627#
628# Hardware Monitoring support
629#
630# CONFIG_HWMON is not set
631# CONFIG_HWMON_VID is not set
632
633#
634# Misc devices
635#
636
637#
638# LED devices
639#
640# CONFIG_NEW_LEDS is not set
641
642#
643# LED drivers
644#
645
646#
647# LED Triggers
648#
649
650#
651# Multimedia devices
652#
653# CONFIG_VIDEO_DEV is not set
654
655#
656# Digital Video Broadcasting Devices
657#
658# CONFIG_DVB is not set
659
660#
661# Graphics support
662#
663# CONFIG_FB is not set
664
665#
666# Console display driver support
667#
668# CONFIG_VGA_CONSOLE is not set
669CONFIG_DUMMY_CONSOLE=y
670
671#
672# Sound
673#
674# CONFIG_SOUND is not set
675
676#
677# USB support
678#
679CONFIG_USB_ARCH_HAS_HCD=y
680CONFIG_USB_ARCH_HAS_OHCI=y
681# CONFIG_USB_ARCH_HAS_EHCI is not set
682# CONFIG_USB is not set
683
684#
685# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
686#
687
688#
689# USB Gadget Support
690#
691# CONFIG_USB_GADGET is not set
692
693#
694# MMC/SD Card support
695#
696# CONFIG_MMC is not set
697
698#
699# Real Time Clock
700#
701CONFIG_RTC_LIB=y
702CONFIG_RTC_CLASS=y
703# CONFIG_RTC_HCTOSYS is not set
704
705#
706# RTC interfaces
707#
708CONFIG_RTC_INTF_SYSFS=y
709CONFIG_RTC_INTF_PROC=y
710CONFIG_RTC_INTF_DEV=y
711
712#
713# RTC drivers
714#
715# CONFIG_RTC_DRV_X1205 is not set
716# CONFIG_RTC_DRV_DS1672 is not set
717# CONFIG_RTC_DRV_PCF8563 is not set
718# CONFIG_RTC_DRV_RS5C372 is not set
719# CONFIG_RTC_DRV_M48T86 is not set
720CONFIG_RTC_DRV_AT91=y
721# CONFIG_RTC_DRV_TEST is not set
722
723#
724# File systems
725#
726# CONFIG_EXT2_FS is not set
727CONFIG_EXT3_FS=y
728# CONFIG_EXT3_FS_XATTR is not set
729CONFIG_JBD=y
730# CONFIG_JBD_DEBUG is not set
731# CONFIG_REISERFS_FS is not set
732# CONFIG_JFS_FS is not set
733# CONFIG_FS_POSIX_ACL is not set
734# CONFIG_XFS_FS is not set
735# CONFIG_OCFS2_FS is not set
736# CONFIG_MINIX_FS is not set
737# CONFIG_ROMFS_FS is not set
738# CONFIG_INOTIFY is not set
739# CONFIG_QUOTA is not set
740CONFIG_DNOTIFY=y
741# CONFIG_AUTOFS_FS is not set
742# CONFIG_AUTOFS4_FS is not set
743# CONFIG_FUSE_FS is not set
744
745#
746# CD-ROM/DVD Filesystems
747#
748# CONFIG_ISO9660_FS is not set
749# CONFIG_UDF_FS is not set
750
751#
752# DOS/FAT/NT Filesystems
753#
754# CONFIG_MSDOS_FS is not set
755# CONFIG_VFAT_FS is not set
756# CONFIG_NTFS_FS is not set
757
758#
759# Pseudo filesystems
760#
761CONFIG_PROC_FS=y
762CONFIG_SYSFS=y
763CONFIG_TMPFS=y
764# CONFIG_HUGETLB_PAGE is not set
765CONFIG_RAMFS=y
766# CONFIG_CONFIGFS_FS is not set
767
768#
769# Miscellaneous filesystems
770#
771# CONFIG_ADFS_FS is not set
772# CONFIG_AFFS_FS is not set
773# CONFIG_HFS_FS is not set
774# CONFIG_HFSPLUS_FS is not set
775# CONFIG_BEFS_FS is not set
776# CONFIG_BFS_FS is not set
777# CONFIG_EFS_FS is not set
778# CONFIG_JFFS_FS is not set
779# CONFIG_JFFS2_FS is not set
780CONFIG_CRAMFS=y
781# CONFIG_VXFS_FS is not set
782# CONFIG_HPFS_FS is not set
783# CONFIG_QNX4FS_FS is not set
784# CONFIG_SYSV_FS is not set
785# CONFIG_UFS_FS is not set
786
787#
788# Network File Systems
789#
790CONFIG_NFS_FS=m
791CONFIG_NFS_V3=y
792# CONFIG_NFS_V3_ACL is not set
793# CONFIG_NFS_V4 is not set
794# CONFIG_NFS_DIRECTIO is not set
795# CONFIG_NFSD is not set
796CONFIG_LOCKD=m
797CONFIG_LOCKD_V4=y
798CONFIG_NFS_COMMON=y
799CONFIG_SUNRPC=m
800# CONFIG_RPCSEC_GSS_KRB5 is not set
801# CONFIG_RPCSEC_GSS_SPKM3 is not set
802# CONFIG_SMB_FS is not set
803# CONFIG_CIFS is not set
804# CONFIG_NCP_FS is not set
805# CONFIG_CODA_FS is not set
806# CONFIG_AFS_FS is not set
807# CONFIG_9P_FS is not set
808
809#
810# Partition Types
811#
812# CONFIG_PARTITION_ADVANCED is not set
813CONFIG_MSDOS_PARTITION=y
814
815#
816# Native Language Support
817#
818# CONFIG_NLS is not set
819
820#
821# Profiling support
822#
823# CONFIG_PROFILING is not set
824
825#
826# Kernel hacking
827#
828# CONFIG_PRINTK_TIME is not set
829# CONFIG_MAGIC_SYSRQ is not set
830# CONFIG_DEBUG_KERNEL is not set
831CONFIG_LOG_BUF_SHIFT=14
832CONFIG_DEBUG_BUGVERBOSE=y
833# CONFIG_DEBUG_FS is not set
834CONFIG_FRAME_POINTER=y
835# CONFIG_UNWIND_INFO is not set
836# CONFIG_DEBUG_USER is not set
837
838#
839# Security options
840#
841# CONFIG_KEYS is not set
842# CONFIG_SECURITY is not set
843
844#
845# Cryptographic options
846#
847CONFIG_CRYPTO=y
848# CONFIG_CRYPTO_HMAC is not set
849# CONFIG_CRYPTO_NULL is not set
850# CONFIG_CRYPTO_MD4 is not set
851CONFIG_CRYPTO_MD5=y
852# CONFIG_CRYPTO_SHA1 is not set
853# CONFIG_CRYPTO_SHA256 is not set
854# CONFIG_CRYPTO_SHA512 is not set
855# CONFIG_CRYPTO_WP512 is not set
856# CONFIG_CRYPTO_TGR192 is not set
857CONFIG_CRYPTO_DES=y
858# CONFIG_CRYPTO_BLOWFISH is not set
859# CONFIG_CRYPTO_TWOFISH is not set
860# CONFIG_CRYPTO_SERPENT is not set
861# CONFIG_CRYPTO_AES is not set
862# CONFIG_CRYPTO_CAST5 is not set
863# CONFIG_CRYPTO_CAST6 is not set
864# CONFIG_CRYPTO_TEA is not set
865# CONFIG_CRYPTO_ARC4 is not set
866# CONFIG_CRYPTO_KHAZAD is not set
867# CONFIG_CRYPTO_ANUBIS is not set
868# CONFIG_CRYPTO_DEFLATE is not set
869# CONFIG_CRYPTO_MICHAEL_MIC is not set
870# CONFIG_CRYPTO_CRC32C is not set
871# CONFIG_CRYPTO_TEST is not set
872
873#
874# Hardware crypto devices
875#
876
877#
878# Library routines
879#
880# CONFIG_CRC_CCITT is not set
881# CONFIG_CRC16 is not set
882CONFIG_CRC32=y
883# CONFIG_LIBCRC32C is not set
884CONFIG_ZLIB_INFLATE=y
diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig
new file mode 100644
index 000000000000..fee4f566452e
--- /dev/null
+++ b/arch/arm/configs/kb9202_defconfig
@@ -0,0 +1,780 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.13-rc2
4# Sun Aug 14 19:26:59 2005
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#
15# CONFIG_EXPERIMENTAL is not set
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_SWAP is not set
25# CONFIG_SYSVIPC is not set
26# CONFIG_BSD_PROCESS_ACCT is not set
27CONFIG_SYSCTL=y
28# CONFIG_AUDIT is not set
29CONFIG_HOTPLUG=y
30# CONFIG_KOBJECT_UEVENT is not set
31# CONFIG_IKCONFIG is not set
32# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y
34# CONFIG_KALLSYMS_ALL is not set
35# CONFIG_KALLSYMS_EXTRA_PASS is not set
36CONFIG_PRINTK=y
37CONFIG_BUG=y
38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y
40CONFIG_EPOLL=y
41CONFIG_CC_OPTIMIZE_FOR_SIZE=y
42CONFIG_SHMEM=y
43CONFIG_CC_ALIGN_FUNCTIONS=0
44CONFIG_CC_ALIGN_LABELS=0
45CONFIG_CC_ALIGN_LOOPS=0
46CONFIG_CC_ALIGN_JUMPS=0
47# CONFIG_TINY_SHMEM is not set
48CONFIG_BASE_SMALL=0
49
50#
51# Loadable module support
52#
53CONFIG_MODULES=y
54CONFIG_MODULE_UNLOAD=y
55CONFIG_OBSOLETE_MODPARM=y
56# CONFIG_MODULE_SRCVERSION_ALL is not set
57CONFIG_KMOD=y
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
66# CONFIG_ARCH_FOOTBRIDGE is not set
67# CONFIG_ARCH_INTEGRATOR is not set
68# CONFIG_ARCH_IOP3XX is not set
69# CONFIG_ARCH_IXP4XX is not set
70# CONFIG_ARCH_IXP2000 is not set
71# CONFIG_ARCH_L7200 is not set
72# CONFIG_ARCH_PXA is not set
73# CONFIG_ARCH_RPC is not set
74# CONFIG_ARCH_SA1100 is not set
75# CONFIG_ARCH_S3C2410 is not set
76# CONFIG_ARCH_SHARK is not set
77# CONFIG_ARCH_LH7A40X is not set
78# CONFIG_ARCH_OMAP is not set
79# CONFIG_ARCH_VERSATILE is not set
80# CONFIG_ARCH_IMX is not set
81# CONFIG_ARCH_H720X is not set
82# CONFIG_ARCH_AAEC2000 is not set
83CONFIG_ARCH_AT91RM9200=y
84
85#
86# AT91RM9200 Implementations
87#
88# CONFIG_ARCH_AT91RM9200DK is not set
89# CONFIG_MACH_AT91RM9200EK is not set
90# CONFIG_MACH_CSB337 is not set
91# CONFIG_MACH_CSB637 is not set
92# CONFIG_MACH_CARMEVA is not set
93CONFIG_MACH_KB9200=y
94
95#
96# Processor Type
97#
98CONFIG_CPU_32=y
99CONFIG_CPU_ARM920T=y
100CONFIG_CPU_32v4=y
101CONFIG_CPU_ABRT_EV4T=y
102CONFIG_CPU_CACHE_V4WT=y
103CONFIG_CPU_CACHE_VIVT=y
104CONFIG_CPU_COPY_V4WB=y
105CONFIG_CPU_TLB_V4WBI=y
106
107#
108# Processor Features
109#
110CONFIG_ARM_THUMB=y
111# CONFIG_CPU_ICACHE_DISABLE is not set
112# CONFIG_CPU_DCACHE_DISABLE is not set
113# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
114
115#
116# Bus support
117#
118CONFIG_ISA_DMA_API=y
119
120#
121# PCCARD (PCMCIA/CardBus) support
122#
123# CONFIG_PCCARD is not set
124
125#
126# Kernel Features
127#
128# CONFIG_NO_IDLE_HZ is not set
129# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
130CONFIG_FLATMEM=y
131CONFIG_FLAT_NODE_MEM_MAP=y
132# CONFIG_LEDS is not set
133CONFIG_ALIGNMENT_TRAP=y
134
135#
136# Boot options
137#
138CONFIG_ZBOOT_ROM_TEXT=0x10000000
139CONFIG_ZBOOT_ROM_BSS=0x20040000
140CONFIG_ZBOOT_ROM=y
141CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
142
143#
144# Floating point emulation
145#
146
147#
148# At least one emulation must be selected
149#
150CONFIG_FPE_NWFPE=y
151# CONFIG_FPE_NWFPE_XP is not set
152
153#
154# Userspace binary formats
155#
156CONFIG_BINFMT_ELF=y
157CONFIG_BINFMT_AOUT=y
158CONFIG_BINFMT_MISC=y
159# CONFIG_ARTHUR is not set
160
161#
162# Power management options
163#
164# CONFIG_PM is not set
165
166#
167# Device Drivers
168#
169
170#
171# Generic Driver Options
172#
173CONFIG_STANDALONE=y
174CONFIG_PREVENT_FIRMWARE_BUILD=y
175# CONFIG_FW_LOADER is not set
176CONFIG_DEBUG_DRIVER=y
177
178#
179# Memory Technology Devices (MTD)
180#
181# CONFIG_MTD is not set
182
183#
184# Parallel port support
185#
186# CONFIG_PARPORT is not set
187
188#
189# Plug and Play support
190#
191
192#
193# Block devices
194#
195# CONFIG_BLK_DEV_COW_COMMON is not set
196CONFIG_BLK_DEV_LOOP=y
197# CONFIG_BLK_DEV_CRYPTOLOOP is not set
198CONFIG_BLK_DEV_NBD=y
199# CONFIG_BLK_DEV_UB is not set
200CONFIG_BLK_DEV_RAM=y
201CONFIG_BLK_DEV_RAM_COUNT=16
202CONFIG_BLK_DEV_RAM_SIZE=4096
203CONFIG_BLK_DEV_INITRD=y
204CONFIG_INITRAMFS_SOURCE=""
205# CONFIG_CDROM_PKTCDVD is not set
206
207#
208# IO Schedulers
209#
210CONFIG_IOSCHED_NOOP=y
211CONFIG_IOSCHED_AS=y
212CONFIG_IOSCHED_DEADLINE=y
213CONFIG_IOSCHED_CFQ=y
214# CONFIG_ATA_OVER_ETH is not set
215
216#
217# SCSI device support
218#
219CONFIG_SCSI=y
220CONFIG_SCSI_PROC_FS=y
221
222#
223# SCSI support type (disk, tape, CD-ROM)
224#
225CONFIG_BLK_DEV_SD=y
226# CONFIG_CHR_DEV_ST is not set
227# CONFIG_CHR_DEV_OSST is not set
228# CONFIG_BLK_DEV_SR is not set
229CONFIG_CHR_DEV_SG=y
230# CONFIG_CHR_DEV_SCH is not set
231
232#
233# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
234#
235# CONFIG_SCSI_MULTI_LUN is not set
236# CONFIG_SCSI_CONSTANTS is not set
237# CONFIG_SCSI_LOGGING is not set
238
239#
240# SCSI Transport Attributes
241#
242# CONFIG_SCSI_SPI_ATTRS is not set
243# CONFIG_SCSI_FC_ATTRS is not set
244# CONFIG_SCSI_ISCSI_ATTRS is not set
245
246#
247# SCSI low-level drivers
248#
249# CONFIG_SCSI_SATA is not set
250# CONFIG_SCSI_DEBUG is not set
251
252#
253# Multi-device support (RAID and LVM)
254#
255# CONFIG_MD is not set
256
257#
258# Fusion MPT device support
259#
260# CONFIG_FUSION is not set
261
262#
263# IEEE 1394 (FireWire) support
264#
265
266#
267# I2O device support
268#
269
270#
271# Networking support
272#
273CONFIG_NET=y
274
275#
276# Networking options
277#
278CONFIG_PACKET=y
279# CONFIG_PACKET_MMAP is not set
280CONFIG_UNIX=y
281# CONFIG_NET_KEY is not set
282CONFIG_INET=y
283CONFIG_IP_MULTICAST=y
284# CONFIG_IP_ADVANCED_ROUTER is not set
285CONFIG_IP_FIB_HASH=y
286CONFIG_IP_PNP=y
287CONFIG_IP_PNP_DHCP=y
288# CONFIG_IP_PNP_BOOTP is not set
289# CONFIG_IP_PNP_RARP is not set
290# CONFIG_NET_IPIP is not set
291# CONFIG_NET_IPGRE is not set
292# CONFIG_IP_MROUTE is not set
293# CONFIG_SYN_COOKIES is not set
294# CONFIG_INET_AH is not set
295# CONFIG_INET_ESP is not set
296# CONFIG_INET_IPCOMP is not set
297# CONFIG_INET_TUNNEL is not set
298# CONFIG_IP_TCPDIAG is not set
299# CONFIG_IP_TCPDIAG_IPV6 is not set
300# CONFIG_TCP_CONG_ADVANCED is not set
301CONFIG_TCP_CONG_BIC=y
302# CONFIG_IPV6 is not set
303# CONFIG_NETFILTER is not set
304# CONFIG_BRIDGE is not set
305# CONFIG_VLAN_8021Q is not set
306# CONFIG_DECNET is not set
307# CONFIG_LLC2 is not set
308# CONFIG_IPX is not set
309# CONFIG_ATALK is not set
310
311#
312# QoS and/or fair queueing
313#
314# CONFIG_NET_SCHED is not set
315# CONFIG_NET_CLS_ROUTE is not set
316
317#
318# Network testing
319#
320# CONFIG_NET_PKTGEN is not set
321# CONFIG_NETPOLL is not set
322# CONFIG_NET_POLL_CONTROLLER is not set
323# CONFIG_HAMRADIO is not set
324# CONFIG_IRDA is not set
325# CONFIG_BT is not set
326CONFIG_NETDEVICES=y
327# CONFIG_DUMMY is not set
328# CONFIG_BONDING is not set
329# CONFIG_EQUALIZER is not set
330# CONFIG_TUN is not set
331
332#
333# Ethernet (10 or 100Mbit)
334#
335CONFIG_NET_ETHERNET=y
336CONFIG_MII=y
337CONFIG_ARM_AT91_ETHER=y
338# CONFIG_SMC91X is not set
339# CONFIG_DM9000 is not set
340
341#
342# Ethernet (1000 Mbit)
343#
344
345#
346# Ethernet (10000 Mbit)
347#
348
349#
350# Token Ring devices
351#
352
353#
354# Wireless LAN (non-hamradio)
355#
356# CONFIG_NET_RADIO is not set
357
358#
359# Wan interfaces
360#
361# CONFIG_WAN is not set
362# CONFIG_PPP is not set
363# CONFIG_SLIP is not set
364
365#
366# ISDN subsystem
367#
368# CONFIG_ISDN is not set
369
370#
371# Input device support
372#
373CONFIG_INPUT=y
374
375#
376# Userland interfaces
377#
378CONFIG_INPUT_MOUSEDEV=y
379# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
380CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
381CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
382# CONFIG_INPUT_JOYDEV is not set
383# CONFIG_INPUT_TSDEV is not set
384# CONFIG_INPUT_EVDEV is not set
385# CONFIG_INPUT_EVBUG is not set
386
387#
388# Input Device Drivers
389#
390# CONFIG_INPUT_KEYBOARD is not set
391# CONFIG_INPUT_MOUSE is not set
392# CONFIG_INPUT_JOYSTICK is not set
393# CONFIG_INPUT_TOUCHSCREEN is not set
394# CONFIG_INPUT_MISC is not set
395
396#
397# Hardware I/O ports
398#
399CONFIG_SERIO=y
400# CONFIG_SERIO_SERPORT is not set
401# CONFIG_SERIO_RAW is not set
402# CONFIG_GAMEPORT is not set
403
404#
405# Character devices
406#
407CONFIG_VT=y
408CONFIG_VT_CONSOLE=y
409CONFIG_HW_CONSOLE=y
410# CONFIG_SERIAL_NONSTANDARD is not set
411
412#
413# Serial drivers
414#
415# CONFIG_SERIAL_8250 is not set
416
417#
418# Non-8250 serial port support
419#
420CONFIG_SERIAL_AT91=y
421CONFIG_SERIAL_AT91_CONSOLE=y
422CONFIG_SERIAL_CORE=y
423CONFIG_SERIAL_CORE_CONSOLE=y
424CONFIG_UNIX98_PTYS=y
425CONFIG_LEGACY_PTYS=y
426CONFIG_LEGACY_PTY_COUNT=256
427
428#
429# IPMI
430#
431# CONFIG_IPMI_HANDLER is not set
432
433#
434# Watchdog Cards
435#
436# CONFIG_WATCHDOG is not set
437# CONFIG_NVRAM is not set
438# CONFIG_RTC is not set
439# CONFIG_AT91_RTC is not set
440# CONFIG_DTLK is not set
441# CONFIG_R3964 is not set
442
443#
444# Ftape, the floppy tape device driver
445#
446# CONFIG_RAW_DRIVER is not set
447
448#
449# TPM devices
450#
451# CONFIG_AT91_SPI is not set
452
453#
454# I2C support
455#
456# CONFIG_I2C is not set
457
458#
459# Misc devices
460#
461
462#
463# Multimedia devices
464#
465# CONFIG_VIDEO_DEV is not set
466
467#
468# Digital Video Broadcasting Devices
469#
470# CONFIG_DVB is not set
471
472#
473# Graphics support
474#
475# CONFIG_FB is not set
476
477#
478# Console display driver support
479#
480# CONFIG_VGA_CONSOLE is not set
481CONFIG_DUMMY_CONSOLE=y
482
483#
484# Sound
485#
486# CONFIG_SOUND is not set
487
488#
489# USB support
490#
491CONFIG_USB_ARCH_HAS_HCD=y
492CONFIG_USB_ARCH_HAS_OHCI=y
493CONFIG_USB=y
494CONFIG_USB_DEBUG=y
495
496#
497# Miscellaneous USB options
498#
499CONFIG_USB_DEVICEFS=y
500
501#
502# USB Host Controller Drivers
503#
504# CONFIG_USB_ISP116X_HCD is not set
505CONFIG_USB_OHCI_HCD=y
506# CONFIG_USB_OHCI_BIG_ENDIAN is not set
507CONFIG_USB_OHCI_LITTLE_ENDIAN=y
508# CONFIG_USB_SL811_HCD is not set
509
510#
511# USB Device Class drivers
512#
513# CONFIG_USB_BLUETOOTH_TTY is not set
514# CONFIG_USB_ACM is not set
515# CONFIG_USB_PRINTER is not set
516
517#
518# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
519#
520CONFIG_USB_STORAGE=y
521CONFIG_USB_STORAGE_DEBUG=y
522# CONFIG_USB_STORAGE_FREECOM is not set
523# CONFIG_USB_STORAGE_DPCM is not set
524
525#
526# USB Input Devices
527#
528# CONFIG_USB_HID is not set
529
530#
531# USB HID Boot Protocol drivers
532#
533# CONFIG_USB_KBD is not set
534# CONFIG_USB_MOUSE is not set
535# CONFIG_USB_AIPTEK is not set
536# CONFIG_USB_WACOM is not set
537# CONFIG_USB_ACECAD is not set
538# CONFIG_USB_KBTAB is not set
539# CONFIG_USB_POWERMATE is not set
540# CONFIG_USB_MTOUCH is not set
541# CONFIG_USB_ITMTOUCH is not set
542# CONFIG_USB_EGALAX is not set
543# CONFIG_USB_XPAD is not set
544# CONFIG_USB_ATI_REMOTE is not set
545
546#
547# USB Imaging devices
548#
549# CONFIG_USB_MICROTEK is not set
550
551#
552# USB Multimedia devices
553#
554# CONFIG_USB_DABUSB is not set
555
556#
557# Video4Linux support is needed for USB Multimedia device support
558#
559
560#
561# USB Network Adapters
562#
563# CONFIG_USB_KAWETH is not set
564# CONFIG_USB_PEGASUS is not set
565# CONFIG_USB_USBNET is not set
566# CONFIG_USB_MON is not set
567
568#
569# USB port drivers
570#
571
572#
573# USB Serial Converter support
574#
575# CONFIG_USB_SERIAL is not set
576
577#
578# USB Miscellaneous drivers
579#
580# CONFIG_USB_EMI62 is not set
581# CONFIG_USB_EMI26 is not set
582# CONFIG_USB_LCD is not set
583# CONFIG_USB_LED is not set
584# CONFIG_USB_CYTHERM is not set
585# CONFIG_USB_PHIDGETKIT is not set
586# CONFIG_USB_PHIDGETSERVO is not set
587# CONFIG_USB_IDMOUSE is not set
588
589#
590# USB DSL modem support
591#
592
593#
594# USB Gadget Support
595#
596# CONFIG_USB_GADGET is not set
597
598#
599# MMC/SD Card support
600#
601# CONFIG_MMC is not set
602
603#
604# File systems
605#
606CONFIG_EXT2_FS=y
607CONFIG_EXT2_FS_XATTR=y
608# CONFIG_EXT2_FS_POSIX_ACL is not set
609# CONFIG_EXT2_FS_SECURITY is not set
610# CONFIG_EXT2_FS_XIP is not set
611CONFIG_EXT3_FS=y
612CONFIG_EXT3_FS_XATTR=y
613# CONFIG_EXT3_FS_POSIX_ACL is not set
614# CONFIG_EXT3_FS_SECURITY is not set
615CONFIG_JBD=y
616# CONFIG_JBD_DEBUG is not set
617CONFIG_FS_MBCACHE=y
618# CONFIG_REISERFS_FS is not set
619# CONFIG_JFS_FS is not set
620
621#
622# XFS support
623#
624# CONFIG_XFS_FS is not set
625# CONFIG_MINIX_FS is not set
626# CONFIG_ROMFS_FS is not set
627# CONFIG_QUOTA is not set
628CONFIG_DNOTIFY=y
629CONFIG_AUTOFS_FS=y
630CONFIG_AUTOFS4_FS=y
631
632#
633# CD-ROM/DVD Filesystems
634#
635# CONFIG_ISO9660_FS is not set
636# CONFIG_UDF_FS is not set
637
638#
639# DOS/FAT/NT Filesystems
640#
641CONFIG_FAT_FS=y
642CONFIG_MSDOS_FS=y
643CONFIG_VFAT_FS=y
644CONFIG_FAT_DEFAULT_CODEPAGE=437
645CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
646# CONFIG_NTFS_FS is not set
647
648#
649# Pseudo filesystems
650#
651CONFIG_PROC_FS=y
652CONFIG_SYSFS=y
653CONFIG_DEVPTS_FS_XATTR=y
654# CONFIG_DEVPTS_FS_SECURITY is not set
655CONFIG_TMPFS=y
656# CONFIG_TMPFS_XATTR is not set
657# CONFIG_HUGETLB_PAGE is not set
658CONFIG_RAMFS=y
659
660#
661# Miscellaneous filesystems
662#
663# CONFIG_HFSPLUS_FS is not set
664# CONFIG_CRAMFS is not set
665# CONFIG_VXFS_FS is not set
666# CONFIG_HPFS_FS is not set
667# CONFIG_QNX4FS_FS is not set
668# CONFIG_SYSV_FS is not set
669# CONFIG_UFS_FS is not set
670
671#
672# Network File Systems
673#
674CONFIG_NFS_FS=y
675CONFIG_NFS_V3=y
676# CONFIG_NFS_V3_ACL is not set
677# CONFIG_NFSD is not set
678CONFIG_ROOT_NFS=y
679CONFIG_LOCKD=y
680CONFIG_LOCKD_V4=y
681CONFIG_NFS_COMMON=y
682CONFIG_SUNRPC=y
683# CONFIG_SMB_FS is not set
684# CONFIG_CIFS is not set
685# CONFIG_NCP_FS is not set
686# CONFIG_CODA_FS is not set
687
688#
689# Partition Types
690#
691# CONFIG_PARTITION_ADVANCED is not set
692CONFIG_MSDOS_PARTITION=y
693
694#
695# Native Language Support
696#
697CONFIG_NLS=y
698CONFIG_NLS_DEFAULT="utf8"
699CONFIG_NLS_CODEPAGE_437=y
700# CONFIG_NLS_CODEPAGE_737 is not set
701# CONFIG_NLS_CODEPAGE_775 is not set
702# CONFIG_NLS_CODEPAGE_850 is not set
703# CONFIG_NLS_CODEPAGE_852 is not set
704# CONFIG_NLS_CODEPAGE_855 is not set
705# CONFIG_NLS_CODEPAGE_857 is not set
706# CONFIG_NLS_CODEPAGE_860 is not set
707# CONFIG_NLS_CODEPAGE_861 is not set
708# CONFIG_NLS_CODEPAGE_862 is not set
709# CONFIG_NLS_CODEPAGE_863 is not set
710# CONFIG_NLS_CODEPAGE_864 is not set
711# CONFIG_NLS_CODEPAGE_865 is not set
712# CONFIG_NLS_CODEPAGE_866 is not set
713# CONFIG_NLS_CODEPAGE_869 is not set
714# CONFIG_NLS_CODEPAGE_936 is not set
715# CONFIG_NLS_CODEPAGE_950 is not set
716# CONFIG_NLS_CODEPAGE_932 is not set
717# CONFIG_NLS_CODEPAGE_949 is not set
718# CONFIG_NLS_CODEPAGE_874 is not set
719# CONFIG_NLS_ISO8859_8 is not set
720# CONFIG_NLS_CODEPAGE_1250 is not set
721# CONFIG_NLS_CODEPAGE_1251 is not set
722CONFIG_NLS_ASCII=y
723# CONFIG_NLS_ISO8859_1 is not set
724# CONFIG_NLS_ISO8859_2 is not set
725# CONFIG_NLS_ISO8859_3 is not set
726# CONFIG_NLS_ISO8859_4 is not set
727# CONFIG_NLS_ISO8859_5 is not set
728# CONFIG_NLS_ISO8859_6 is not set
729# CONFIG_NLS_ISO8859_7 is not set
730# CONFIG_NLS_ISO8859_9 is not set
731# CONFIG_NLS_ISO8859_13 is not set
732# CONFIG_NLS_ISO8859_14 is not set
733# CONFIG_NLS_ISO8859_15 is not set
734# CONFIG_NLS_KOI8_R is not set
735# CONFIG_NLS_KOI8_U is not set
736# CONFIG_NLS_UTF8 is not set
737
738#
739# Kernel hacking
740#
741# CONFIG_PRINTK_TIME is not set
742CONFIG_DEBUG_KERNEL=y
743# CONFIG_MAGIC_SYSRQ is not set
744CONFIG_LOG_BUF_SHIFT=14
745# CONFIG_SCHEDSTATS is not set
746# CONFIG_DEBUG_SLAB is not set
747# CONFIG_DEBUG_SPINLOCK is not set
748# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
749# CONFIG_DEBUG_KOBJECT is not set
750CONFIG_DEBUG_BUGVERBOSE=y
751# CONFIG_DEBUG_INFO is not set
752# CONFIG_DEBUG_FS is not set
753CONFIG_FRAME_POINTER=y
754CONFIG_DEBUG_USER=y
755# CONFIG_DEBUG_WAITQ is not set
756CONFIG_DEBUG_ERRORS=y
757CONFIG_DEBUG_LL=y
758# CONFIG_DEBUG_ICEDCC is not set
759
760#
761# Security options
762#
763# CONFIG_KEYS is not set
764# CONFIG_SECURITY is not set
765
766#
767# Cryptographic options
768#
769# CONFIG_CRYPTO is not set
770
771#
772# Hardware crypto devices
773#
774
775#
776# Library routines
777#
778# CONFIG_CRC_CCITT is not set
779CONFIG_CRC32=y
780# CONFIG_LIBCRC32C is not set
diff --git a/arch/arm/mach-at91rm9200/Kconfig b/arch/arm/mach-at91rm9200/Kconfig
index 4b7218fc3eb1..1ab5b7828318 100644
--- a/arch/arm/mach-at91rm9200/Kconfig
+++ b/arch/arm/mach-at91rm9200/Kconfig
@@ -40,6 +40,18 @@ config MACH_KB9200
40 help 40 help
41 Select this if you are using KwikByte's KB920x board 41 Select this if you are using KwikByte's KB920x board
42 42
43config MACH_ATEB9200
44 bool "Embest's ATEB9200"
45 depends on ARCH_AT91RM9200
46 help
47 Select this if you are using Embest's ATEB9200 board
48
49config MACH_KAFA
50 bool "Sperry-Sun KAFA board"
51 depends on ARCH_AT91RM9200
52 help
53 Select this if you are using Sperry-Sun's KAFA board
54
43 55
44comment "AT91RM9200 Feature Selections" 56comment "AT91RM9200 Feature Selections"
45 57
diff --git a/arch/arm/mach-at91rm9200/Makefile b/arch/arm/mach-at91rm9200/Makefile
index ef88c4128edc..81ebc6684ad2 100644
--- a/arch/arm/mach-at91rm9200/Makefile
+++ b/arch/arm/mach-at91rm9200/Makefile
@@ -7,22 +7,31 @@ obj-m :=
7obj-n := 7obj-n :=
8obj- := 8obj- :=
9 9
10obj-$(CONFIG_PM) += pm.o
11
10# Board-specific support 12# Board-specific support
11obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o 13obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o
12obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o 14obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o
13obj-$(CONFIG_MACH_CSB337) += board-csb337.o 15obj-$(CONFIG_MACH_CSB337) += board-csb337.o
14obj-$(CONFIG_MACH_CSB637) += board-csb637.o 16obj-$(CONFIG_MACH_CSB637) += board-csb637.o
15#obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o 17obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o
16#obj-$(CONFIG_MACH_KB9200) += board-kb9202.o 18obj-$(CONFIG_MACH_KB9200) += board-kb9202.o
19obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o
20obj-$(CONFIG_MACH_KAFA) += board-kafa.o
17 21
18# LEDs support 22# LEDs support
19led-$(CONFIG_ARCH_AT91RM9200DK) += leds.o 23led-$(CONFIG_ARCH_AT91RM9200DK) += leds.o
20led-$(CONFIG_MACH_AT91RM9200EK) += leds.o 24led-$(CONFIG_MACH_AT91RM9200EK) += leds.o
21led-$(CONFIG_MACH_CSB337) += leds.o 25led-$(CONFIG_MACH_CSB337) += leds.o
22led-$(CONFIG_MACH_CSB637) += leds.o 26led-$(CONFIG_MACH_CSB637) += leds.o
23#led-$(CONFIG_MACH_KB9200) += leds.o 27led-$(CONFIG_MACH_KB9200) += leds.o
24#led-$(CONFIG_MACH_KAFA) += leds.o 28led-$(CONFIG_MACH_KAFA) += leds.o
25obj-$(CONFIG_LEDS) += $(led-y) 29obj-$(CONFIG_LEDS) += $(led-y)
26 30
27# VGA support 31# VGA support
28#obj-$(CONFIG_FB_S1D13XXX) += ics1523.o 32#obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
33
34
35ifeq ($(CONFIG_PM_DEBUG),y)
36CFLAGS_pm.o += -DDEBUG
37endif
diff --git a/arch/arm/mach-at91rm9200/board-carmeva.c b/arch/arm/mach-at91rm9200/board-carmeva.c
new file mode 100644
index 000000000000..9183cb75ccd0
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-carmeva.c
@@ -0,0 +1,131 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-carmeva.c
3 *
4 * Copyright (c) 2005 Peer Georgi
5 * Conitec Datasystems
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/types.h>
24#include <linux/init.h>
25#include <linux/mm.h>
26#include <linux/module.h>
27#include <linux/platform_device.h>
28
29#include <asm/hardware.h>
30#include <asm/setup.h>
31#include <asm/mach-types.h>
32#include <asm/irq.h>
33
34#include <asm/mach/arch.h>
35#include <asm/mach/map.h>
36#include <asm/mach/irq.h>
37
38#include <asm/arch/hardware.h>
39#include <asm/arch/board.h>
40#include <asm/arch/gpio.h>
41
42#include "generic.h"
43
44static void __init carmeva_init_irq(void)
45{
46 /* Initialize AIC controller */
47 at91rm9200_init_irq(NULL);
48
49 /* Set up the GPIO interrupts */
50 at91_gpio_irq_setup(BGA_GPIO_BANKS);
51}
52
53/*
54 * Serial port configuration.
55 * 0 .. 3 = USART0 .. USART3
56 * 4 = DBGU
57 */
58static struct at91_uart_config __initdata carmeva_uart_config = {
59 .console_tty = 0, /* ttyS0 */
60 .nr_tty = 2,
61 .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
62};
63
64static void __init carmeva_map_io(void)
65{
66 at91rm9200_map_io();
67
68 /* Initialize clocks: 20.000 MHz crystal */
69 at91_clock_init(20000000);
70
71 /* Setup the serial ports and console */
72 at91_init_serial(&carmeva_uart_config);
73}
74
75static struct at91_eth_data __initdata carmeva_eth_data = {
76 .phy_irq_pin = AT91_PIN_PC4,
77 .is_rmii = 1,
78};
79
80static struct at91_usbh_data __initdata carmeva_usbh_data = {
81 .ports = 2,
82};
83
84static struct at91_udc_data __initdata carmeva_udc_data = {
85 .vbus_pin = AT91_PIN_PD12,
86 .pullup_pin = AT91_PIN_PD9,
87};
88
89/* FIXME: user dependend */
90// static struct at91_cf_data __initdata carmeva_cf_data = {
91// .det_pin = AT91_PIN_PB0,
92// .rst_pin = AT91_PIN_PC5,
93 // .irq_pin = ... not connected
94 // .vcc_pin = ... always powered
95// };
96
97static struct at91_mmc_data __initdata carmeva_mmc_data = {
98 .is_b = 0,
99 .wire4 = 1,
100};
101
102static void __init carmeva_board_init(void)
103{
104 /* Serial */
105 at91_add_device_serial();
106 /* Ethernet */
107 at91_add_device_eth(&carmeva_eth_data);
108 /* USB Host */
109 at91_add_device_usbh(&carmeva_usbh_data);
110 /* USB Device */
111 at91_add_device_udc(&carmeva_udc_data);
112 /* I2C */
113 at91_add_device_i2c();
114 /* Compact Flash */
115// at91_add_device_cf(&carmeva_cf_data);
116 /* SPI */
117// at91_add_device_spi(NULL, 0);
118 /* MMC */
119 at91_add_device_mmc(&carmeva_mmc_data);
120}
121
122MACHINE_START(CARMEVA, "Carmeva")
123 /* Maintainer: Conitec Datasystems */
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 = carmeva_map_io,
129 .init_irq = carmeva_init_irq,
130 .init_machine = carmeva_board_init,
131MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/board-csb337.c b/arch/arm/mach-at91rm9200/board-csb337.c
index f45104ceea8f..3b9de181ae32 100644
--- a/arch/arm/mach-at91rm9200/board-csb337.c
+++ b/arch/arm/mach-at91rm9200/board-csb337.c
@@ -24,6 +24,7 @@
24#include <linux/mm.h> 24#include <linux/mm.h>
25#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/platform_device.h> 26#include <linux/platform_device.h>
27#include <linux/spi/spi.h>
27 28
28#include <asm/hardware.h> 29#include <asm/hardware.h>
29#include <asm/setup.h> 30#include <asm/setup.h>
@@ -35,8 +36,8 @@
35#include <asm/mach/irq.h> 36#include <asm/mach/irq.h>
36 37
37#include <asm/arch/hardware.h> 38#include <asm/arch/hardware.h>
38#include <asm/mach/serial_at91rm9200.h>
39#include <asm/arch/board.h> 39#include <asm/arch/board.h>
40#include <asm/arch/gpio.h>
40 41
41#include "generic.h" 42#include "generic.h"
42 43
@@ -54,32 +55,24 @@ static void __init csb337_init_irq(void)
54 * 0 .. 3 = USART0 .. USART3 55 * 0 .. 3 = USART0 .. USART3
55 * 4 = DBGU 56 * 4 = DBGU
56 */ 57 */
57#define CSB337_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ 58static struct at91_uart_config __initdata csb337_uart_config = {
58#define CSB337_SERIAL_CONSOLE 0 /* ttyS0 */ 59 .console_tty = 0, /* ttyS0 */
60 .nr_tty = 2,
61 .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
62};
59 63
60static void __init csb337_map_io(void) 64static void __init csb337_map_io(void)
61{ 65{
62 int serial[AT91_NR_UART] = CSB337_UART_MAP;
63 int i;
64
65 at91rm9200_map_io(); 66 at91rm9200_map_io();
66 67
67 /* Initialize clocks: 3.6864 MHz crystal */ 68 /* Initialize clocks: 3.6864 MHz crystal */
68 at91_clock_init(3686400); 69 at91_clock_init(3686400);
69 70
70 /* Setup the LEDs */ 71 /* Setup the LEDs */
71 at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); 72 at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);
72 73
73#ifdef CONFIG_SERIAL_AT91 74 /* Setup the serial ports and console */
74 at91_console_port = CSB337_SERIAL_CONSOLE; 75 at91_init_serial(&csb337_uart_config);
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} 76}
84 77
85static struct at91_eth_data __initdata csb337_eth_data = { 78static struct at91_eth_data __initdata csb337_eth_data = {
@@ -118,17 +111,31 @@ static struct at91_mmc_data __initdata csb337_mmc_data = {
118 .wp_pin = AT91_PIN_PD6, 111 .wp_pin = AT91_PIN_PD6,
119}; 112};
120 113
114static struct spi_board_info csb337_spi_devices[] = {
115 { /* CAN controller */
116 .modalias = "sak82c900",
117 .chip_select = 0,
118 .max_speed_hz = 6 * 1000 * 1000,
119 },
120};
121
121static void __init csb337_board_init(void) 122static void __init csb337_board_init(void)
122{ 123{
124 /* Serial */
125 at91_add_device_serial();
123 /* Ethernet */ 126 /* Ethernet */
124 at91_add_device_eth(&csb337_eth_data); 127 at91_add_device_eth(&csb337_eth_data);
125 /* USB Host */ 128 /* USB Host */
126 at91_add_device_usbh(&csb337_usbh_data); 129 at91_add_device_usbh(&csb337_usbh_data);
127 /* USB Device */ 130 /* USB Device */
128 at91_add_device_udc(&csb337_udc_data); 131 at91_add_device_udc(&csb337_udc_data);
132 /* I2C */
133 at91_add_device_i2c();
129 /* Compact Flash */ 134 /* Compact Flash */
130 at91_set_gpio_input(AT91_PIN_PB22, 1); /* IOIS16 */ 135 at91_set_gpio_input(AT91_PIN_PB22, 1); /* IOIS16 */
131 at91_add_device_cf(&csb337_cf_data); 136 at91_add_device_cf(&csb337_cf_data);
137 /* SPI */
138 at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices));
132 /* MMC */ 139 /* MMC */
133 at91_add_device_mmc(&csb337_mmc_data); 140 at91_add_device_mmc(&csb337_mmc_data);
134} 141}
diff --git a/arch/arm/mach-at91rm9200/board-csb637.c b/arch/arm/mach-at91rm9200/board-csb637.c
index f2c2d6e79bc6..2c4470d110da 100644
--- a/arch/arm/mach-at91rm9200/board-csb637.c
+++ b/arch/arm/mach-at91rm9200/board-csb637.c
@@ -35,8 +35,8 @@
35#include <asm/mach/irq.h> 35#include <asm/mach/irq.h>
36 36
37#include <asm/arch/hardware.h> 37#include <asm/arch/hardware.h>
38#include <asm/mach/serial_at91rm9200.h>
39#include <asm/arch/board.h> 38#include <asm/arch/board.h>
39#include <asm/arch/gpio.h>
40 40
41#include "generic.h" 41#include "generic.h"
42 42
@@ -54,14 +54,14 @@ static void __init csb637_init_irq(void)
54 * 0 .. 3 = USART0 .. USART3 54 * 0 .. 3 = USART0 .. USART3
55 * 4 = DBGU 55 * 4 = DBGU
56 */ 56 */
57#define CSB637_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ 57static struct at91_uart_config __initdata csb637_uart_config = {
58#define CSB637_SERIAL_CONSOLE 0 /* ttyS0 */ 58 .console_tty = 0, /* ttyS0 */
59 .nr_tty = 2,
60 .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
61};
59 62
60static void __init csb637_map_io(void) 63static void __init csb637_map_io(void)
61{ 64{
62 int serial[AT91_NR_UART] = CSB637_UART_MAP;
63 int i;
64
65 at91rm9200_map_io(); 65 at91rm9200_map_io();
66 66
67 /* Initialize clocks: 3.6864 MHz crystal */ 67 /* Initialize clocks: 3.6864 MHz crystal */
@@ -70,16 +70,8 @@ static void __init csb637_map_io(void)
70 /* Setup the LEDs */ 70 /* Setup the LEDs */
71 at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); 71 at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2);
72 72
73#ifdef CONFIG_SERIAL_AT91 73 /* Setup the serial ports and console */
74 at91_console_port = CSB637_SERIAL_CONSOLE; 74 at91_init_serial(&csb637_uart_config);
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} 75}
84 76
85static struct at91_eth_data __initdata csb637_eth_data = { 77static struct at91_eth_data __initdata csb637_eth_data = {
@@ -98,12 +90,18 @@ static struct at91_udc_data __initdata csb637_udc_data = {
98 90
99static void __init csb637_board_init(void) 91static void __init csb637_board_init(void)
100{ 92{
93 /* Serial */
94 at91_add_device_serial();
101 /* Ethernet */ 95 /* Ethernet */
102 at91_add_device_eth(&csb637_eth_data); 96 at91_add_device_eth(&csb637_eth_data);
103 /* USB Host */ 97 /* USB Host */
104 at91_add_device_usbh(&csb637_usbh_data); 98 at91_add_device_usbh(&csb637_usbh_data);
105 /* USB Device */ 99 /* USB Device */
106 at91_add_device_udc(&csb637_udc_data); 100 at91_add_device_udc(&csb637_udc_data);
101 /* I2C */
102 at91_add_device_i2c();
103 /* SPI */
104 at91_add_device_spi(NULL, 0);
107} 105}
108 106
109MACHINE_START(CSB637, "Cogent CSB637") 107MACHINE_START(CSB637, "Cogent CSB637")
diff --git a/arch/arm/mach-at91rm9200/board-dk.c b/arch/arm/mach-at91rm9200/board-dk.c
index 2d7200ed66ed..eb02ca95be79 100644
--- a/arch/arm/mach-at91rm9200/board-dk.c
+++ b/arch/arm/mach-at91rm9200/board-dk.c
@@ -27,6 +27,7 @@
27#include <linux/mm.h> 27#include <linux/mm.h>
28#include <linux/module.h> 28#include <linux/module.h>
29#include <linux/platform_device.h> 29#include <linux/platform_device.h>
30#include <linux/spi/spi.h>
30 31
31#include <asm/hardware.h> 32#include <asm/hardware.h>
32#include <asm/setup.h> 33#include <asm/setup.h>
@@ -38,8 +39,8 @@
38#include <asm/mach/irq.h> 39#include <asm/mach/irq.h>
39 40
40#include <asm/arch/hardware.h> 41#include <asm/arch/hardware.h>
41#include <asm/mach/serial_at91rm9200.h>
42#include <asm/arch/board.h> 42#include <asm/arch/board.h>
43#include <asm/arch/gpio.h>
43 44
44#include "generic.h" 45#include "generic.h"
45 46
@@ -57,14 +58,14 @@ static void __init dk_init_irq(void)
57 * 0 .. 3 = USART0 .. USART3 58 * 0 .. 3 = USART0 .. USART3
58 * 4 = DBGU 59 * 4 = DBGU
59 */ 60 */
60#define DK_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ 61static struct at91_uart_config __initdata dk_uart_config = {
61#define DK_SERIAL_CONSOLE 0 /* ttyS0 */ 62 .console_tty = 0, /* ttyS0 */
63 .nr_tty = 2,
64 .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
65};
62 66
63static void __init dk_map_io(void) 67static void __init dk_map_io(void)
64{ 68{
65 int serial[AT91_NR_UART] = DK_UART_MAP;
66 int i;
67
68 at91rm9200_map_io(); 69 at91rm9200_map_io();
69 70
70 /* Initialize clocks: 18.432 MHz crystal */ 71 /* Initialize clocks: 18.432 MHz crystal */
@@ -73,16 +74,8 @@ static void __init dk_map_io(void)
73 /* Setup the LEDs */ 74 /* Setup the LEDs */
74 at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); 75 at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2);
75 76
76#ifdef CONFIG_SERIAL_AT91 77 /* Setup the serial ports and console */
77 at91_console_port = DK_SERIAL_CONSOLE; 78 at91_init_serial(&dk_uart_config);
78 memcpy(at91_serial_map, serial, sizeof(serial));
79
80 /* Register UARTs */
81 for (i = 0; i < AT91_NR_UART; i++) {
82 if (at91_serial_map[i] >= 0)
83 at91_register_uart(i, at91_serial_map[i]);
84 }
85#endif
86} 79}
87 80
88static struct at91_eth_data __initdata dk_eth_data = { 81static struct at91_eth_data __initdata dk_eth_data = {
@@ -111,16 +104,48 @@ static struct at91_mmc_data __initdata dk_mmc_data = {
111 .wire4 = 1, 104 .wire4 = 1,
112}; 105};
113 106
107static struct spi_board_info dk_spi_devices[] = {
108 { /* DataFlash chip */
109 .modalias = "mtd_dataflash",
110 .chip_select = 0,
111 .max_speed_hz = 15 * 1000 * 1000,
112 },
113 { /* UR6HCPS2-SP40 PS2-to-SPI adapter */
114 .modalias = "ur6hcps2",
115 .chip_select = 1,
116 .max_speed_hz = 250 * 1000,
117 },
118 { /* TLV1504 ADC, 4 channels, 10 bits; one is a temp sensor */
119 .modalias = "tlv1504",
120 .chip_select = 2,
121 .max_speed_hz = 20 * 1000 * 1000,
122 },
123#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
124 { /* DataFlash card */
125 .modalias = "mtd_dataflash",
126 .chip_select = 3,
127 .max_speed_hz = 15 * 1000 * 1000,
128 }
129#endif
130};
131
114static void __init dk_board_init(void) 132static void __init dk_board_init(void)
115{ 133{
134 /* Serial */
135 at91_add_device_serial();
116 /* Ethernet */ 136 /* Ethernet */
117 at91_add_device_eth(&dk_eth_data); 137 at91_add_device_eth(&dk_eth_data);
118 /* USB Host */ 138 /* USB Host */
119 at91_add_device_usbh(&dk_usbh_data); 139 at91_add_device_usbh(&dk_usbh_data);
120 /* USB Device */ 140 /* USB Device */
121 at91_add_device_udc(&dk_udc_data); 141 at91_add_device_udc(&dk_udc_data);
142 at91_set_multi_drive(dk_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */
122 /* Compact Flash */ 143 /* Compact Flash */
123 at91_add_device_cf(&dk_cf_data); 144 at91_add_device_cf(&dk_cf_data);
145 /* I2C */
146 at91_add_device_i2c();
147 /* SPI */
148 at91_add_device_spi(dk_spi_devices, ARRAY_SIZE(dk_spi_devices));
124#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD 149#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
125 /* DataFlash card */ 150 /* DataFlash card */
126 at91_set_gpio_output(AT91_PIN_PB7, 0); 151 at91_set_gpio_output(AT91_PIN_PB7, 0);
diff --git a/arch/arm/mach-at91rm9200/board-eb9200.c b/arch/arm/mach-at91rm9200/board-eb9200.c
new file mode 100644
index 000000000000..c7e4546a262d
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-eb9200.c
@@ -0,0 +1,130 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-eb9200.c
3 *
4 * Copyright (C) 2005 SAN People, adapted for ATEB9200 from Embest
5 * by Andrew Patrikalakis
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/types.h>
24#include <linux/init.h>
25#include <linux/mm.h>
26#include <linux/module.h>
27#include <linux/device.h>
28
29#include <asm/hardware.h>
30#include <asm/setup.h>
31#include <asm/mach-types.h>
32#include <asm/irq.h>
33
34#include <asm/mach/arch.h>
35#include <asm/mach/map.h>
36#include <asm/mach/irq.h>
37
38#include <asm/arch/hardware.h>
39#include <asm/arch/board.h>
40#include <asm/arch/gpio.h>
41
42#include "generic.h"
43
44static void __init eb9200_init_irq(void)
45{
46 /* Initialize AIC controller */
47 at91rm9200_init_irq(NULL);
48
49 /* Set up the GPIO interrupts */
50 at91_gpio_irq_setup(BGA_GPIO_BANKS);
51}
52
53/*
54 * Serial port configuration.
55 * 0 .. 3 = USART0 .. USART3
56 * 4 = DBGU
57 */
58static struct at91_uart_config __initdata eb9200_uart_config = {
59 .console_tty = 0, /* ttyS0 */
60 .nr_tty = 2,
61 .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
62};
63
64static void __init eb9200_map_io(void)
65{
66 at91rm9200_map_io();
67
68 /* Initialize clocks: 18.432 MHz crystal */
69 at91_clock_init(18432000);
70
71 /* Setup the serial ports and console */
72 at91_init_serial(&eb9200_uart_config);
73}
74
75static struct at91_eth_data __initdata eb9200_eth_data = {
76 .phy_irq_pin = AT91_PIN_PC4,
77 .is_rmii = 1,
78};
79
80static struct at91_usbh_data __initdata eb9200_usbh_data = {
81 .ports = 2,
82};
83
84static struct at91_udc_data __initdata eb9200_udc_data = {
85 .vbus_pin = AT91_PIN_PD4,
86 .pullup_pin = AT91_PIN_PD5,
87};
88
89static struct at91_cf_data __initdata eb9200_cf_data = {
90 .det_pin = AT91_PIN_PB0,
91 .rst_pin = AT91_PIN_PC5,
92 // .irq_pin = ... not connected
93 // .vcc_pin = ... always powered
94};
95
96static struct at91_mmc_data __initdata eb9200_mmc_data = {
97 .is_b = 0,
98 .wire4 = 1,
99};
100
101static void __init eb9200_board_init(void)
102{
103 /* Serial */
104 at91_add_device_serial();
105 /* Ethernet */
106 at91_add_device_eth(&eb9200_eth_data);
107 /* USB Host */
108 at91_add_device_usbh(&eb9200_usbh_data);
109 /* USB Device */
110 at91_add_device_udc(&eb9200_udc_data);
111 /* I2C */
112 at91_add_device_i2c();
113 /* Compact Flash */
114 at91_add_device_cf(&eb9200_cf_data);
115 /* SPI */
116 at91_add_device_spi(NULL, 0);
117 /* MMC */
118 /* only supports 1 or 4 bit interface, not wired through to SPI */
119 at91_add_device_mmc(&eb9200_mmc_data);
120}
121
122MACHINE_START(ATEB9200, "Embest ATEB9200")
123 .phys_io = AT91_BASE_SYS,
124 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
125 .boot_params = AT91_SDRAM_BASE + 0x100,
126 .timer = &at91rm9200_timer,
127 .map_io = eb9200_map_io,
128 .init_irq = eb9200_init_irq,
129 .init_machine = eb9200_board_init,
130MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/board-ek.c b/arch/arm/mach-at91rm9200/board-ek.c
index 80d90f5135a1..4d7468e42679 100644
--- a/arch/arm/mach-at91rm9200/board-ek.c
+++ b/arch/arm/mach-at91rm9200/board-ek.c
@@ -27,6 +27,7 @@
27#include <linux/mm.h> 27#include <linux/mm.h>
28#include <linux/module.h> 28#include <linux/module.h>
29#include <linux/platform_device.h> 29#include <linux/platform_device.h>
30#include <linux/spi/spi.h>
30 31
31#include <asm/hardware.h> 32#include <asm/hardware.h>
32#include <asm/setup.h> 33#include <asm/setup.h>
@@ -38,8 +39,8 @@
38#include <asm/mach/irq.h> 39#include <asm/mach/irq.h>
39 40
40#include <asm/arch/hardware.h> 41#include <asm/arch/hardware.h>
41#include <asm/mach/serial_at91rm9200.h>
42#include <asm/arch/board.h> 42#include <asm/arch/board.h>
43#include <asm/arch/gpio.h>
43 44
44#include "generic.h" 45#include "generic.h"
45 46
@@ -57,14 +58,14 @@ static void __init ek_init_irq(void)
57 * 0 .. 3 = USART0 .. USART3 58 * 0 .. 3 = USART0 .. USART3
58 * 4 = DBGU 59 * 4 = DBGU
59 */ 60 */
60#define EK_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ 61static struct at91_uart_config __initdata ek_uart_config = {
61#define EK_SERIAL_CONSOLE 0 /* ttyS0 */ 62 .console_tty = 0, /* ttyS0 */
63 .nr_tty = 2,
64 .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
65};
62 66
63static void __init ek_map_io(void) 67static void __init ek_map_io(void)
64{ 68{
65 int serial[AT91_NR_UART] = EK_UART_MAP;
66 int i;
67
68 at91rm9200_map_io(); 69 at91rm9200_map_io();
69 70
70 /* Initialize clocks: 18.432 MHz crystal */ 71 /* Initialize clocks: 18.432 MHz crystal */
@@ -73,16 +74,8 @@ static void __init ek_map_io(void)
73 /* Setup the LEDs */ 74 /* Setup the LEDs */
74 at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); 75 at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2);
75 76
76#ifdef CONFIG_SERIAL_AT91 77 /* Setup the serial ports and console */
77 at91_console_port = EK_SERIAL_CONSOLE; 78 at91_init_serial(&ek_uart_config);
78 memcpy(at91_serial_map, serial, sizeof(serial));
79
80 /* Register UARTs */
81 for (i = 0; i < AT91_NR_UART; i++) {
82 if (serial[i] >= 0)
83 at91_register_uart(i, serial[i]);
84 }
85#endif
86} 79}
87 80
88static struct at91_eth_data __initdata ek_eth_data = { 81static struct at91_eth_data __initdata ek_eth_data = {
@@ -106,14 +99,36 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
106 .wp_pin = AT91_PIN_PA17, 99 .wp_pin = AT91_PIN_PA17,
107}; 100};
108 101
102static struct spi_board_info ek_spi_devices[] = {
103 { /* DataFlash chip */
104 .modalias = "mtd_dataflash",
105 .chip_select = 0,
106 .max_speed_hz = 15 * 1000 * 1000,
107 },
108#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
109 { /* DataFlash card */
110 .modalias = "mtd_dataflash",
111 .chip_select = 3,
112 .max_speed_hz = 15 * 1000 * 1000,
113 },
114#endif
115};
116
109static void __init ek_board_init(void) 117static void __init ek_board_init(void)
110{ 118{
119 /* Serial */
120 at91_add_device_serial();
111 /* Ethernet */ 121 /* Ethernet */
112 at91_add_device_eth(&ek_eth_data); 122 at91_add_device_eth(&ek_eth_data);
113 /* USB Host */ 123 /* USB Host */
114 at91_add_device_usbh(&ek_usbh_data); 124 at91_add_device_usbh(&ek_usbh_data);
115 /* USB Device */ 125 /* USB Device */
116 at91_add_device_udc(&ek_udc_data); 126 at91_add_device_udc(&ek_udc_data);
127 at91_set_multi_drive(ek_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */
128 /* I2C */
129 at91_add_device_i2c();
130 /* SPI */
131 at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
117#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD 132#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
118 /* DataFlash card */ 133 /* DataFlash card */
119 at91_set_gpio_output(AT91_PIN_PB22, 0); 134 at91_set_gpio_output(AT91_PIN_PB22, 0);
diff --git a/arch/arm/mach-at91rm9200/board-kafa.c b/arch/arm/mach-at91rm9200/board-kafa.c
new file mode 100644
index 000000000000..35d459fdfcf1
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-kafa.c
@@ -0,0 +1,116 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-kafa.c
3 *
4 * Copyright (C) 2006 Sperry-Sun
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/arch/board.h>
39#include <asm/arch/gpio.h>
40
41#include "generic.h"
42
43static void __init kafa_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(PQFP_GPIO_BANKS);
50}
51
52/*
53 * Serial port configuration.
54 * 0 .. 3 = USART0 .. USART3
55 * 4 = DBGU
56 */
57static struct at91_uart_config __initdata kafa_uart_config = {
58 .console_tty = 0, /* ttyS0 */
59 .nr_tty = 2,
60 .tty_map = { 4, 0, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
61};
62
63static void __init kafa_map_io(void)
64{
65 at91rm9200_map_io();
66
67 /* Initialize clocks: 18.432 MHz crystal */
68 at91_clock_init(18432000);
69
70 /* Set up the LEDs */
71 at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4);
72
73 /* Setup the serial ports and console */
74 at91_init_serial(&kafa_uart_config);
75}
76
77static struct at91_eth_data __initdata kafa_eth_data = {
78 .phy_irq_pin = AT91_PIN_PC4,
79 .is_rmii = 0,
80};
81
82static struct at91_usbh_data __initdata kafa_usbh_data = {
83 .ports = 1,
84};
85
86static struct at91_udc_data __initdata kafa_udc_data = {
87 .vbus_pin = AT91_PIN_PB6,
88 .pullup_pin = AT91_PIN_PB7,
89};
90
91static void __init kafa_board_init(void)
92{
93 /* Serial */
94 at91_add_device_serial();
95 /* Ethernet */
96 at91_add_device_eth(&kafa_eth_data);
97 /* USB Host */
98 at91_add_device_usbh(&kafa_usbh_data);
99 /* USB Device */
100 at91_add_device_udc(&kafa_udc_data);
101 /* I2C */
102 at91_add_device_i2c();
103 /* SPI */
104 at91_add_device_spi(NULL, 0);
105}
106
107MACHINE_START(KAFA, "Sperry-Sun KAFA")
108 /* Maintainer: Sergei Sharonov */
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 = kafa_map_io,
114 .init_irq = kafa_init_irq,
115 .init_machine = kafa_board_init,
116MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/board-kb9202.c b/arch/arm/mach-at91rm9200/board-kb9202.c
new file mode 100644
index 000000000000..6ba65ef48809
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/board-kb9202.c
@@ -0,0 +1,125 @@
1/*
2 * linux/arch/arm/mach-at91rm9200/board-kb9202.c
3 *
4 * Copyright (c) 2005 kb_admin
5 * KwikByte, Inc.
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/types.h>
24#include <linux/init.h>
25#include <linux/mm.h>
26#include <linux/module.h>
27#include <linux/platform_device.h>
28
29#include <asm/hardware.h>
30#include <asm/setup.h>
31#include <asm/mach-types.h>
32#include <asm/irq.h>
33
34#include <asm/mach/arch.h>
35#include <asm/mach/map.h>
36#include <asm/mach/irq.h>
37
38#include <asm/arch/hardware.h>
39#include <asm/arch/board.h>
40#include <asm/arch/gpio.h>
41
42#include "generic.h"
43
44static void __init kb9202_init_irq(void)
45{
46 /* Initialize AIC controller */
47 at91rm9200_init_irq(NULL);
48
49 /* Set up the GPIO interrupts */
50 at91_gpio_irq_setup(PQFP_GPIO_BANKS);
51}
52
53/*
54 * Serial port configuration.
55 * 0 .. 3 = USART0 .. USART3
56 * 4 = DBGU
57 */
58static struct at91_uart_config __initdata kb9202_uart_config = {
59 .console_tty = 0, /* ttyS0 */
60 .nr_tty = 3,
61 .tty_map = { 4, 0, 1, -1, -1 } /* ttyS0, ..., ttyS4 */
62};
63
64static void __init kb9202_map_io(void)
65{
66 at91rm9200_map_io();
67
68 /* Initialize clocks: 10 MHz crystal */
69 at91_clock_init(10000000);
70
71 /* Set up the LEDs */
72 at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18);
73
74 /* Setup the serial ports and console */
75 at91_init_serial(&kb9202_uart_config);
76}
77
78static struct at91_eth_data __initdata kb9202_eth_data = {
79 .phy_irq_pin = AT91_PIN_PB29,
80 .is_rmii = 0,
81};
82
83static struct at91_usbh_data __initdata kb9202_usbh_data = {
84 .ports = 1,
85};
86
87static struct at91_udc_data __initdata kb9202_udc_data = {
88 .vbus_pin = AT91_PIN_PB24,
89 .pullup_pin = AT91_PIN_PB22,
90};
91
92static struct at91_mmc_data __initdata kb9202_mmc_data = {
93 .det_pin = AT91_PIN_PB2,
94 .is_b = 0,
95 .wire4 = 1,
96};
97
98static void __init kb9202_board_init(void)
99{
100 /* Serial */
101 at91_add_device_serial();
102 /* Ethernet */
103 at91_add_device_eth(&kb9202_eth_data);
104 /* USB Host */
105 at91_add_device_usbh(&kb9202_usbh_data);
106 /* USB Device */
107 at91_add_device_udc(&kb9202_udc_data);
108 /* MMC */
109 at91_add_device_mmc(&kb9202_mmc_data);
110 /* I2C */
111 at91_add_device_i2c();
112 /* SPI */
113 at91_add_device_spi(NULL, 0);
114}
115
116MACHINE_START(KB9200, "KB920x")
117 /* Maintainer: KwikByte, Inc. */
118 .phys_io = AT91_BASE_SYS,
119 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
120 .boot_params = AT91_SDRAM_BASE + 0x100,
121 .timer = &at91rm9200_timer,
122 .map_io = kb9202_map_io,
123 .init_irq = kb9202_init_irq,
124 .init_machine = kb9202_board_init,
125MACHINE_END
diff --git a/arch/arm/mach-at91rm9200/clock.c b/arch/arm/mach-at91rm9200/clock.c
index 30042d2bac5f..fe71b834899b 100644
--- a/arch/arm/mach-at91rm9200/clock.c
+++ b/arch/arm/mach-at91rm9200/clock.c
@@ -28,10 +28,10 @@
28#include <asm/mach-types.h> 28#include <asm/mach-types.h>
29 29
30#include <asm/arch/hardware.h> 30#include <asm/arch/hardware.h>
31#include <asm/arch/board.h> /* for master clock global */
32 31
33#include "generic.h" 32#include "generic.h"
34 33
34
35/* 35/*
36 * There's a lot more which can be done with clocks, including cpufreq 36 * There's a lot more which can be done with clocks, including cpufreq
37 * integration, slow clock mode support (for system suspend), letting 37 * integration, slow clock mode support (for system suspend), letting
@@ -722,9 +722,6 @@ int __init at91_clock_init(unsigned long main_clock)
722 (unsigned) main_clock / 1000000, 722 (unsigned) main_clock / 1000000,
723 ((unsigned) main_clock % 1000000) / 1000); 723 ((unsigned) main_clock % 1000000) / 1000);
724 724
725 /* FIXME get rid of master_clock global */
726 at91_master_clock = mck.rate_hz;
727
728#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS 725#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
729 /* establish PCK0..PCK3 parentage */ 726 /* establish PCK0..PCK3 parentage */
730 for (tmp = 0; tmp < ARRAY_SIZE(clock_list); tmp++) { 727 for (tmp = 0; tmp < ARRAY_SIZE(clock_list); tmp++) {
diff --git a/arch/arm/mach-at91rm9200/common.c b/arch/arm/mach-at91rm9200/common.c
index 3848fd2d5596..1da68966e77f 100644
--- a/arch/arm/mach-at91rm9200/common.c
+++ b/arch/arm/mach-at91rm9200/common.c
@@ -17,6 +17,7 @@
17#include <asm/mach/map.h> 17#include <asm/mach/map.h>
18 18
19#include <asm/arch/hardware.h> 19#include <asm/arch/hardware.h>
20#include "generic.h"
20 21
21static struct map_desc at91rm9200_io_desc[] __initdata = { 22static struct map_desc at91rm9200_io_desc[] __initdata = {
22 { 23 {
@@ -94,6 +95,11 @@ static struct map_desc at91rm9200_io_desc[] __initdata = {
94 .pfn = __phys_to_pfn(AT91_BASE_TCB0), 95 .pfn = __phys_to_pfn(AT91_BASE_TCB0),
95 .length = SZ_16K, 96 .length = SZ_16K,
96 .type = MT_DEVICE, 97 .type = MT_DEVICE,
98 }, {
99 .virtual = AT91_SRAM_VIRT_BASE,
100 .pfn = __phys_to_pfn(AT91_SRAM_BASE),
101 .length = AT91_SRAM_SIZE,
102 .type = MT_DEVICE,
97 }, 103 },
98}; 104};
99 105
@@ -102,14 +108,3 @@ void __init at91rm9200_map_io(void)
102 iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc)); 108 iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));
103} 109}
104 110
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
index bfe47bd6e50c..bf753e306a3a 100644
--- a/arch/arm/mach-at91rm9200/devices.c
+++ b/arch/arm/mach-at91rm9200/devices.c
@@ -16,9 +16,15 @@
16#include <linux/config.h> 16#include <linux/config.h>
17#include <linux/platform_device.h> 17#include <linux/platform_device.h>
18 18
19#include <asm/arch/hardware.h>
19#include <asm/arch/board.h> 20#include <asm/arch/board.h>
20#include <asm/arch/pio.h> 21#include <asm/arch/gpio.h>
21 22
23#include "generic.h"
24
25#define SZ_512 0x00000200
26#define SZ_256 0x00000100
27#define SZ_16 0x00000010
22 28
23/* -------------------------------------------------------------------- 29/* --------------------------------------------------------------------
24 * USB Host 30 * USB Host
@@ -28,7 +34,7 @@
28static u64 ohci_dmamask = 0xffffffffUL; 34static u64 ohci_dmamask = 0xffffffffUL;
29static struct at91_usbh_data usbh_data; 35static struct at91_usbh_data usbh_data;
30 36
31static struct resource at91_usbh_resource[] = { 37static struct resource at91_usbh_resources[] = {
32 [0] = { 38 [0] = {
33 .start = AT91_UHP_BASE, 39 .start = AT91_UHP_BASE,
34 .end = AT91_UHP_BASE + SZ_1M - 1, 40 .end = AT91_UHP_BASE + SZ_1M - 1,
@@ -42,15 +48,15 @@ static struct resource at91_usbh_resource[] = {
42}; 48};
43 49
44static struct platform_device at91rm9200_usbh_device = { 50static struct platform_device at91rm9200_usbh_device = {
45 .name = "at91rm9200-ohci", 51 .name = "at91_ohci",
46 .id = -1, 52 .id = -1,
47 .dev = { 53 .dev = {
48 .dma_mask = &ohci_dmamask, 54 .dma_mask = &ohci_dmamask,
49 .coherent_dma_mask = 0xffffffff, 55 .coherent_dma_mask = 0xffffffff,
50 .platform_data = &usbh_data, 56 .platform_data = &usbh_data,
51 }, 57 },
52 .resource = at91_usbh_resource, 58 .resource = at91_usbh_resources,
53 .num_resources = ARRAY_SIZE(at91_usbh_resource), 59 .num_resources = ARRAY_SIZE(at91_usbh_resources),
54}; 60};
55 61
56void __init at91_add_device_usbh(struct at91_usbh_data *data) 62void __init at91_add_device_usbh(struct at91_usbh_data *data)
@@ -74,11 +80,16 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
74static struct at91_udc_data udc_data; 80static struct at91_udc_data udc_data;
75 81
76static struct resource at91_udc_resources[] = { 82static struct resource at91_udc_resources[] = {
77 { 83 [0] = {
78 .start = AT91_BASE_UDP, 84 .start = AT91_BASE_UDP,
79 .end = AT91_BASE_UDP + SZ_16K - 1, 85 .end = AT91_BASE_UDP + SZ_16K - 1,
80 .flags = IORESOURCE_MEM, 86 .flags = IORESOURCE_MEM,
81 } 87 },
88 [1] = {
89 .start = AT91_ID_UDP,
90 .end = AT91_ID_UDP,
91 .flags = IORESOURCE_IRQ,
92 },
82}; 93};
83 94
84static struct platform_device at91rm9200_udc_device = { 95static struct platform_device at91rm9200_udc_device = {
@@ -100,10 +111,8 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
100 at91_set_gpio_input(data->vbus_pin, 0); 111 at91_set_gpio_input(data->vbus_pin, 0);
101 at91_set_deglitch(data->vbus_pin, 1); 112 at91_set_deglitch(data->vbus_pin, 1);
102 } 113 }
103 if (data->pullup_pin) { 114 if (data->pullup_pin)
104 at91_set_gpio_output(data->pullup_pin, 0); 115 at91_set_gpio_output(data->pullup_pin, 0);
105 at91_set_multi_drive(data->pullup_pin, 1);
106 }
107 116
108 udc_data = *data; 117 udc_data = *data;
109 platform_device_register(&at91rm9200_udc_device); 118 platform_device_register(&at91rm9200_udc_device);
@@ -197,7 +206,7 @@ static struct at91_cf_data cf_data;
197static struct resource at91_cf_resources[] = { 206static struct resource at91_cf_resources[] = {
198 [0] = { 207 [0] = {
199 .start = AT91_CF_BASE, 208 .start = AT91_CF_BASE,
200 /* ties up CS4, CS5, and CS6 */ 209 /* ties up CS4, CS5 and CS6 */
201 .end = AT91_CF_BASE + (0x30000000 - 1), 210 .end = AT91_CF_BASE + (0x30000000 - 1),
202 .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT, 211 .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
203 }, 212 },
@@ -231,6 +240,12 @@ void __init at91_add_device_cf(struct at91_cf_data *data)
231 at91_set_gpio_output(data->vcc_pin, 0); 240 at91_set_gpio_output(data->vcc_pin, 0);
232 at91_set_gpio_output(data->rst_pin, 0); 241 at91_set_gpio_output(data->rst_pin, 0);
233 242
243 /* force poweron defaults for these pins ... */
244 at91_set_A_periph(AT91_PIN_PC9, 0); /* A25/CFRNW */
245 at91_set_A_periph(AT91_PIN_PC10, 0); /* NCS4/CFCS */
246 at91_set_A_periph(AT91_PIN_PC11, 0); /* NCS5/CFCE1 */
247 at91_set_A_periph(AT91_PIN_PC12, 0); /* NCS6/CFCE2 */
248
234 cf_data = *data; 249 cf_data = *data;
235 platform_device_register(&at91rm9200_cf_device); 250 platform_device_register(&at91rm9200_cf_device);
236} 251}
@@ -319,6 +334,7 @@ void __init at91_add_device_mmc(struct at91_mmc_data *data)
319void __init at91_add_device_mmc(struct at91_mmc_data *data) {} 334void __init at91_add_device_mmc(struct at91_mmc_data *data) {}
320#endif 335#endif
321 336
337
322/* -------------------------------------------------------------------- 338/* --------------------------------------------------------------------
323 * NAND / SmartMedia 339 * NAND / SmartMedia
324 * -------------------------------------------------------------------- */ 340 * -------------------------------------------------------------------- */
@@ -400,22 +416,110 @@ void __init at91_add_device_i2c(void) {}
400 416
401 417
402/* -------------------------------------------------------------------- 418/* --------------------------------------------------------------------
419 * SPI
420 * -------------------------------------------------------------------- */
421
422#if defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) || defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE)
423static u64 spi_dmamask = 0xffffffffUL;
424
425static struct resource at91_spi_resources[] = {
426 [0] = {
427 .start = AT91_BASE_SPI,
428 .end = AT91_BASE_SPI + SZ_16K - 1,
429 .flags = IORESOURCE_MEM,
430 },
431 [1] = {
432 .start = AT91_ID_SPI,
433 .end = AT91_ID_SPI,
434 .flags = IORESOURCE_IRQ,
435 },
436};
437
438static struct platform_device at91rm9200_spi_device = {
439 .name = "at91_spi",
440 .id = 0,
441 .dev = {
442 .dma_mask = &spi_dmamask,
443 .coherent_dma_mask = 0xffffffff,
444 },
445 .resource = at91_spi_resources,
446 .num_resources = ARRAY_SIZE(at91_spi_resources),
447};
448
449static const unsigned at91_spi_standard_cs[4] = { AT91_PIN_PA3, AT91_PIN_PA4, AT91_PIN_PA5, AT91_PIN_PA6 };
450
451void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
452{
453 int i;
454 unsigned long cs_pin;
455
456 at91_set_A_periph(AT91_PIN_PA0, 0); /* MISO */
457 at91_set_A_periph(AT91_PIN_PA1, 0); /* MOSI */
458 at91_set_A_periph(AT91_PIN_PA2, 0); /* SPCK */
459
460 /* Enable SPI chip-selects */
461 for (i = 0; i < nr_devices; i++) {
462 if (devices[i].controller_data)
463 cs_pin = (unsigned long) devices[i].controller_data;
464 else
465 cs_pin = at91_spi_standard_cs[devices[i].chip_select];
466
467#ifdef CONFIG_SPI_AT91_MANUAL_CS
468 at91_set_gpio_output(cs_pin, 1);
469#else
470 at91_set_A_periph(cs_pin, 0);
471#endif
472
473 /* pass chip-select pin to driver */
474 devices[i].controller_data = (void *) cs_pin;
475 }
476
477 spi_register_board_info(devices, nr_devices);
478 at91_clock_associate("spi0_clk", &at91rm9200_spi_device.dev, "spi");
479 platform_device_register(&at91rm9200_spi_device);
480}
481#else
482void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) {}
483#endif
484
485
486/* --------------------------------------------------------------------
403 * RTC 487 * RTC
404 * -------------------------------------------------------------------- */ 488 * -------------------------------------------------------------------- */
405 489
406#if defined(CONFIG_AT91_RTC) || defined(CONFIG_AT91_RTC_MODULE) 490#if defined(CONFIG_RTC_DRV_AT91) || defined(CONFIG_RTC_DRV_AT91_MODULE)
407static struct platform_device at91rm9200_rtc_device = { 491static struct platform_device at91rm9200_rtc_device = {
408 .name = "at91_rtc", 492 .name = "at91_rtc",
409 .id = -1, 493 .id = -1,
410 .num_resources = 0, 494 .num_resources = 0,
411}; 495};
412 496
413void __init at91_add_device_rtc(void) 497static void __init at91_add_device_rtc(void)
414{ 498{
415 platform_device_register(&at91rm9200_rtc_device); 499 platform_device_register(&at91rm9200_rtc_device);
416} 500}
417#else 501#else
418void __init at91_add_device_rtc(void) {} 502static void __init at91_add_device_rtc(void) {}
503#endif
504
505
506/* --------------------------------------------------------------------
507 * Watchdog
508 * -------------------------------------------------------------------- */
509
510#if defined(CONFIG_AT91_WATCHDOG) || defined(CONFIG_AT91_WATCHDOG_MODULE)
511static struct platform_device at91rm9200_wdt_device = {
512 .name = "at91_wdt",
513 .id = -1,
514 .num_resources = 0,
515};
516
517static void __init at91_add_device_watchdog(void)
518{
519 platform_device_register(&at91rm9200_wdt_device);
520}
521#else
522static void __init at91_add_device_watchdog(void) {}
419#endif 523#endif
420 524
421 525
@@ -429,13 +533,281 @@ u8 at91_leds_timer;
429 533
430void __init at91_init_leds(u8 cpu_led, u8 timer_led) 534void __init at91_init_leds(u8 cpu_led, u8 timer_led)
431{ 535{
432 at91_leds_cpu = cpu_led; 536 at91_leds_cpu = cpu_led;
433 at91_leds_timer = timer_led; 537 at91_leds_timer = timer_led;
434} 538}
435
436#else 539#else
437void __init at91_init_leds(u8 cpu_led, u8 timer_led) {} 540void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
438#endif 541#endif
439 542
440 543
544/* --------------------------------------------------------------------
545 * UART
546 * -------------------------------------------------------------------- */
547
548#if defined(CONFIG_SERIAL_AT91)
549static struct resource dbgu_resources[] = {
550 [0] = {
551 .start = AT91_VA_BASE_SYS + AT91_DBGU,
552 .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
553 .flags = IORESOURCE_MEM,
554 },
555 [1] = {
556 .start = AT91_ID_SYS,
557 .end = AT91_ID_SYS,
558 .flags = IORESOURCE_IRQ,
559 },
560};
561
562static struct at91_uart_data dbgu_data = {
563 .use_dma_tx = 0,
564 .use_dma_rx = 0, /* DBGU not capable of receive DMA */
565};
566
567static struct platform_device at91rm9200_dbgu_device = {
568 .name = "at91_usart",
569 .id = 0,
570 .dev = {
571 .platform_data = &dbgu_data,
572 .coherent_dma_mask = 0xffffffff,
573 },
574 .resource = dbgu_resources,
575 .num_resources = ARRAY_SIZE(dbgu_resources),
576};
577
578static inline void configure_dbgu_pins(void)
579{
580 at91_set_A_periph(AT91_PIN_PA30, 0); /* DRXD */
581 at91_set_A_periph(AT91_PIN_PA31, 1); /* DTXD */
582}
583
584static struct resource uart0_resources[] = {
585 [0] = {
586 .start = AT91_BASE_US0,
587 .end = AT91_BASE_US0 + SZ_16K - 1,
588 .flags = IORESOURCE_MEM,
589 },
590 [1] = {
591 .start = AT91_ID_US0,
592 .end = AT91_ID_US0,
593 .flags = IORESOURCE_IRQ,
594 },
595};
596
597static struct at91_uart_data uart0_data = {
598 .use_dma_tx = 1,
599 .use_dma_rx = 1,
600};
601
602static struct platform_device at91rm9200_uart0_device = {
603 .name = "at91_usart",
604 .id = 1,
605 .dev = {
606 .platform_data = &uart0_data,
607 .coherent_dma_mask = 0xffffffff,
608 },
609 .resource = uart0_resources,
610 .num_resources = ARRAY_SIZE(uart0_resources),
611};
612
613static inline void configure_usart0_pins(void)
614{
615 at91_set_A_periph(AT91_PIN_PA17, 1); /* TXD0 */
616 at91_set_A_periph(AT91_PIN_PA18, 0); /* RXD0 */
617 at91_set_A_periph(AT91_PIN_PA20, 0); /* CTS0 */
618
619 /*
620 * AT91RM9200 Errata #39 - RTS0 is not internally connected to PA21.
621 * We need to drive the pin manually. Default is off (RTS is active low).
622 */
623 at91_set_gpio_output(AT91_PIN_PA21, 1);
624}
625
626static struct resource uart1_resources[] = {
627 [0] = {
628 .start = AT91_BASE_US1,
629 .end = AT91_BASE_US1 + SZ_16K - 1,
630 .flags = IORESOURCE_MEM,
631 },
632 [1] = {
633 .start = AT91_ID_US1,
634 .end = AT91_ID_US1,
635 .flags = IORESOURCE_IRQ,
636 },
637};
638
639static struct at91_uart_data uart1_data = {
640 .use_dma_tx = 1,
641 .use_dma_rx = 1,
642};
643
644static struct platform_device at91rm9200_uart1_device = {
645 .name = "at91_usart",
646 .id = 2,
647 .dev = {
648 .platform_data = &uart1_data,
649 .coherent_dma_mask = 0xffffffff,
650 },
651 .resource = uart1_resources,
652 .num_resources = ARRAY_SIZE(uart1_resources),
653};
654
655static inline void configure_usart1_pins(void)
656{
657 at91_set_A_periph(AT91_PIN_PB18, 0); /* RI1 */
658 at91_set_A_periph(AT91_PIN_PB19, 0); /* DTR1 */
659 at91_set_A_periph(AT91_PIN_PB20, 1); /* TXD1 */
660 at91_set_A_periph(AT91_PIN_PB21, 0); /* RXD1 */
661 at91_set_A_periph(AT91_PIN_PB23, 0); /* DCD1 */
662 at91_set_A_periph(AT91_PIN_PB24, 0); /* CTS1 */
663 at91_set_A_periph(AT91_PIN_PB25, 0); /* DSR1 */
664 at91_set_A_periph(AT91_PIN_PB26, 0); /* RTS1 */
665}
666
667static struct resource uart2_resources[] = {
668 [0] = {
669 .start = AT91_BASE_US2,
670 .end = AT91_BASE_US2 + SZ_16K - 1,
671 .flags = IORESOURCE_MEM,
672 },
673 [1] = {
674 .start = AT91_ID_US2,
675 .end = AT91_ID_US2,
676 .flags = IORESOURCE_IRQ,
677 },
678};
679
680static struct at91_uart_data uart2_data = {
681 .use_dma_tx = 1,
682 .use_dma_rx = 1,
683};
684
685static struct platform_device at91rm9200_uart2_device = {
686 .name = "at91_usart",
687 .id = 3,
688 .dev = {
689 .platform_data = &uart2_data,
690 .coherent_dma_mask = 0xffffffff,
691 },
692 .resource = uart2_resources,
693 .num_resources = ARRAY_SIZE(uart2_resources),
694};
695
696static inline void configure_usart2_pins(void)
697{
698 at91_set_A_periph(AT91_PIN_PA22, 0); /* RXD2 */
699 at91_set_A_periph(AT91_PIN_PA23, 1); /* TXD2 */
700}
701
702static struct resource uart3_resources[] = {
703 [0] = {
704 .start = AT91_BASE_US3,
705 .end = AT91_BASE_US3 + SZ_16K - 1,
706 .flags = IORESOURCE_MEM,
707 },
708 [1] = {
709 .start = AT91_ID_US3,
710 .end = AT91_ID_US3,
711 .flags = IORESOURCE_IRQ,
712 },
713};
714
715static struct at91_uart_data uart3_data = {
716 .use_dma_tx = 1,
717 .use_dma_rx = 1,
718};
719
720static struct platform_device at91rm9200_uart3_device = {
721 .name = "at91_usart",
722 .id = 4,
723 .dev = {
724 .platform_data = &uart3_data,
725 .coherent_dma_mask = 0xffffffff,
726 },
727 .resource = uart3_resources,
728 .num_resources = ARRAY_SIZE(uart3_resources),
729};
730
731static inline void configure_usart3_pins(void)
732{
733 at91_set_B_periph(AT91_PIN_PA5, 1); /* TXD3 */
734 at91_set_B_periph(AT91_PIN_PA6, 0); /* RXD3 */
735}
736
737struct platform_device *at91_uarts[AT91_NR_UART]; /* the UARTs to use */
738struct platform_device *at91_default_console_device; /* the serial console device */
739
740void __init at91_init_serial(struct at91_uart_config *config)
741{
742 int i;
743
744 /* Fill in list of supported UARTs */
745 for (i = 0; i < config->nr_tty; i++) {
746 switch (config->tty_map[i]) {
747 case 0:
748 configure_usart0_pins();
749 at91_uarts[i] = &at91rm9200_uart0_device;
750 at91_clock_associate("usart0_clk", &at91rm9200_uart0_device.dev, "usart");
751 break;
752 case 1:
753 configure_usart1_pins();
754 at91_uarts[i] = &at91rm9200_uart1_device;
755 at91_clock_associate("usart1_clk", &at91rm9200_uart1_device.dev, "usart");
756 break;
757 case 2:
758 configure_usart2_pins();
759 at91_uarts[i] = &at91rm9200_uart2_device;
760 at91_clock_associate("usart2_clk", &at91rm9200_uart2_device.dev, "usart");
761 break;
762 case 3:
763 configure_usart3_pins();
764 at91_uarts[i] = &at91rm9200_uart3_device;
765 at91_clock_associate("usart3_clk", &at91rm9200_uart3_device.dev, "usart");
766 break;
767 case 4:
768 configure_dbgu_pins();
769 at91_uarts[i] = &at91rm9200_dbgu_device;
770 at91_clock_associate("mck", &at91rm9200_dbgu_device.dev, "usart");
771 break;
772 default:
773 continue;
774 }
775 at91_uarts[i]->id = i; /* update ID number to mapped ID */
776 }
777
778 /* Set serial console device */
779 if (config->console_tty < AT91_NR_UART)
780 at91_default_console_device = at91_uarts[config->console_tty];
781 if (!at91_default_console_device)
782 printk(KERN_INFO "AT91: No default serial console defined.\n");
783}
784
785void __init at91_add_device_serial(void)
786{
787 int i;
788
789 for (i = 0; i < AT91_NR_UART; i++) {
790 if (at91_uarts[i])
791 platform_device_register(at91_uarts[i]);
792 }
793}
794#else
795void __init at91_init_serial(struct at91_uart_config *config) {}
796void __init at91_add_device_serial(void) {}
797#endif
798
799
441/* -------------------------------------------------------------------- */ 800/* -------------------------------------------------------------------- */
801
802/*
803 * These devices are always present and don't need any board-specific
804 * setup.
805 */
806static int __init at91_add_standard_devices(void)
807{
808 at91_add_device_rtc();
809 at91_add_device_watchdog();
810 return 0;
811}
812
813arch_initcall(at91_add_standard_devices);
diff --git a/arch/arm/mach-at91rm9200/generic.h b/arch/arm/mach-at91rm9200/generic.h
index 9bd541eba0a0..f0d969d7d874 100644
--- a/arch/arm/mach-at91rm9200/generic.h
+++ b/arch/arm/mach-at91rm9200/generic.h
@@ -16,3 +16,10 @@ extern struct sys_timer at91rm9200_timer;
16extern void __init at91rm9200_map_io(void); 16extern void __init at91rm9200_map_io(void);
17 17
18extern int __init at91_clock_init(unsigned long main_clock); 18extern int __init at91_clock_init(unsigned long main_clock);
19struct device;
20extern void __init at91_clock_associate(const char *id, struct device *dev, const char *func);
21
22 /* Power Management */
23extern void at91_irq_suspend(void);
24extern void at91_irq_resume(void);
25
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c
index 5ab46274e1a3..3430ea054662 100644
--- a/arch/arm/mach-at91rm9200/gpio.c
+++ b/arch/arm/mach-at91rm9200/gpio.c
@@ -213,6 +213,84 @@ EXPORT_SYMBOL(at91_get_gpio_value);
213 213
214/*--------------------------------------------------------------------------*/ 214/*--------------------------------------------------------------------------*/
215 215
216#ifdef CONFIG_PM
217
218static u32 wakeups[BGA_GPIO_BANKS];
219static u32 backups[BGA_GPIO_BANKS];
220
221static int gpio_irq_set_wake(unsigned pin, unsigned state)
222{
223 unsigned mask = pin_to_mask(pin);
224
225 pin -= PIN_BASE;
226 pin /= 32;
227
228 if (unlikely(pin >= BGA_GPIO_BANKS))
229 return -EINVAL;
230
231 if (state)
232 wakeups[pin] |= mask;
233 else
234 wakeups[pin] &= ~mask;
235
236 return 0;
237}
238
239void at91_gpio_suspend(void)
240{
241 int i;
242
243 for (i = 0; i < BGA_GPIO_BANKS; i++) {
244 u32 pio = pio_controller_offset[i];
245
246 /*
247 * Note: drivers should have disabled GPIO interrupts that
248 * aren't supposed to be wakeup sources.
249 * But that is not much good on ARM..... disable_irq() does
250 * not update the hardware immediately, so the hardware mask
251 * (IMR) has the wrong value (not current, too much is
252 * permitted).
253 *
254 * Our workaround is to disable all non-wakeup IRQs ...
255 * which is exactly what correct drivers asked for in the
256 * first place!
257 */
258 backups[i] = at91_sys_read(pio + PIO_IMR);
259 at91_sys_write(pio_controller_offset[i] + PIO_IDR, backups[i]);
260 at91_sys_write(pio_controller_offset[i] + PIO_IER, wakeups[i]);
261
262 if (!wakeups[i]) {
263 disable_irq_wake(AT91_ID_PIOA + i);
264 at91_sys_write(AT91_PMC_PCDR, 1 << (AT91_ID_PIOA + i));
265 } else {
266 enable_irq_wake(AT91_ID_PIOA + i);
267#ifdef CONFIG_PM_DEBUG
268 printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", "ABCD"[i], wakeups[i]);
269#endif
270 }
271 }
272}
273
274void at91_gpio_resume(void)
275{
276 int i;
277
278 for (i = 0; i < BGA_GPIO_BANKS; i++) {
279 at91_sys_write(pio_controller_offset[i] + PIO_IDR, wakeups[i]);
280 at91_sys_write(pio_controller_offset[i] + PIO_IER, backups[i]);
281 }
282
283 at91_sys_write(AT91_PMC_PCER,
284 (1 << AT91_ID_PIOA)
285 | (1 << AT91_ID_PIOB)
286 | (1 << AT91_ID_PIOC)
287 | (1 << AT91_ID_PIOD));
288}
289
290#else
291#define gpio_irq_set_wake NULL
292#endif
293
216 294
217/* Several AIC controller irqs are dispatched through this GPIO handler. 295/* Several AIC controller irqs are dispatched through this GPIO handler.
218 * To use any AT91_PIN_* as an externally triggered IRQ, first call 296 * To use any AT91_PIN_* as an externally triggered IRQ, first call
@@ -252,6 +330,7 @@ static struct irqchip gpio_irqchip = {
252 .mask = gpio_irq_mask, 330 .mask = gpio_irq_mask,
253 .unmask = gpio_irq_unmask, 331 .unmask = gpio_irq_unmask,
254 .set_type = gpio_irq_type, 332 .set_type = gpio_irq_type,
333 .set_wake = gpio_irq_set_wake,
255}; 334};
256 335
257static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs *regs) 336static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs *regs)
@@ -266,6 +345,7 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs
266 /* temporarily mask (level sensitive) parent IRQ */ 345 /* temporarily mask (level sensitive) parent IRQ */
267 desc->chip->ack(irq); 346 desc->chip->ack(irq);
268 for (;;) { 347 for (;;) {
348 /* reading ISR acks the pending (edge triggered) GPIO interrupt */
269 isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR); 349 isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR);
270 if (!isr) 350 if (!isr)
271 break; 351 break;
@@ -315,15 +395,16 @@ void __init at91_gpio_irq_setup(unsigned banks)
315 set_irq_chipdata(id, controller); 395 set_irq_chipdata(id, controller);
316 396
317 for (i = 0; i < 32; i++, pin++) { 397 for (i = 0; i < 32; i++, pin++) {
398 /*
399 * Can use the "simple" and not "edge" handler since it's
400 * shorter, and the AIC handles interupts sanely.
401 */
318 set_irq_chip(pin, &gpio_irqchip); 402 set_irq_chip(pin, &gpio_irqchip);
319 set_irq_handler(pin, do_simple_IRQ); 403 set_irq_handler(pin, do_simple_IRQ);
320 set_irq_flags(pin, IRQF_VALID); 404 set_irq_flags(pin, IRQF_VALID);
321 } 405 }
322 406
323 set_irq_chained_handler(id, gpio_irq_handler); 407 set_irq_chained_handler(id, gpio_irq_handler);
324
325 /* enable the PIO peripheral clock */
326 at91_sys_write(AT91_PMC_PCER, 1 << id);
327 } 408 }
328 pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, banks); 409 pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, banks);
329} 410}
diff --git a/arch/arm/mach-at91rm9200/irq.c b/arch/arm/mach-at91rm9200/irq.c
index cb62bc83a1dd..70f4d7ac1533 100644
--- a/arch/arm/mach-at91rm9200/irq.c
+++ b/arch/arm/mach-at91rm9200/irq.c
@@ -92,10 +92,6 @@ static int at91rm9200_irq_type(unsigned irq, unsigned type)
92{ 92{
93 unsigned int smr, srctype; 93 unsigned int smr, srctype;
94 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) { 95 switch (type) {
100 case IRQT_HIGH: 96 case IRQT_HIGH:
101 srctype = AT91_AIC_SRCTYPE_HIGH; 97 srctype = AT91_AIC_SRCTYPE_HIGH;
@@ -104,9 +100,13 @@ static int at91rm9200_irq_type(unsigned irq, unsigned type)
104 srctype = AT91_AIC_SRCTYPE_RISING; 100 srctype = AT91_AIC_SRCTYPE_RISING;
105 break; 101 break;
106 case IRQT_LOW: 102 case IRQT_LOW:
103 if ((irq > AT91_ID_FIQ) && (irq < AT91_ID_IRQ0)) /* only supported on external interrupts */
104 return -EINVAL;
107 srctype = AT91_AIC_SRCTYPE_LOW; 105 srctype = AT91_AIC_SRCTYPE_LOW;
108 break; 106 break;
109 case IRQT_FALLING: 107 case IRQT_FALLING:
108 if ((irq > AT91_ID_FIQ) && (irq < AT91_ID_IRQ0)) /* only supported on external interrupts */
109 return -EINVAL;
110 srctype = AT91_AIC_SRCTYPE_FALLING; 110 srctype = AT91_AIC_SRCTYPE_FALLING;
111 break; 111 break;
112 default: 112 default:
@@ -118,11 +118,47 @@ static int at91rm9200_irq_type(unsigned irq, unsigned type)
118 return 0; 118 return 0;
119} 119}
120 120
121#ifdef CONFIG_PM
122
123static u32 wakeups;
124static u32 backups;
125
126static int at91rm9200_irq_set_wake(unsigned irq, unsigned value)
127{
128 if (unlikely(irq >= 32))
129 return -EINVAL;
130
131 if (value)
132 wakeups |= (1 << irq);
133 else
134 wakeups &= ~(1 << irq);
135
136 return 0;
137}
138
139void at91_irq_suspend(void)
140{
141 backups = at91_sys_read(AT91_AIC_IMR);
142 at91_sys_write(AT91_AIC_IDCR, backups);
143 at91_sys_write(AT91_AIC_IECR, wakeups);
144}
145
146void at91_irq_resume(void)
147{
148 at91_sys_write(AT91_AIC_IDCR, wakeups);
149 at91_sys_write(AT91_AIC_IECR, backups);
150}
151
152#else
153#define at91rm9200_irq_set_wake NULL
154#endif
155
121static struct irqchip at91rm9200_irq_chip = { 156static struct irqchip at91rm9200_irq_chip = {
122 .ack = at91rm9200_mask_irq, 157 .ack = at91rm9200_mask_irq,
123 .mask = at91rm9200_mask_irq, 158 .mask = at91rm9200_mask_irq,
124 .unmask = at91rm9200_unmask_irq, 159 .unmask = at91rm9200_unmask_irq,
125 .set_type = at91rm9200_irq_type, 160 .set_type = at91rm9200_irq_type,
161 .set_wake = at91rm9200_irq_set_wake,
126}; 162};
127 163
128/* 164/*
diff --git a/arch/arm/mach-at91rm9200/pm.c b/arch/arm/mach-at91rm9200/pm.c
new file mode 100644
index 000000000000..47e5480feb7e
--- /dev/null
+++ b/arch/arm/mach-at91rm9200/pm.c
@@ -0,0 +1,225 @@
1/*
2 * arch/arm/mach-at91rm9200/pm.c
3 * AT91 Power Management
4 *
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 <linux/pm.h>
14#include <linux/sched.h>
15#include <linux/proc_fs.h>
16#include <linux/pm.h>
17#include <linux/interrupt.h>
18#include <linux/sysfs.h>
19#include <linux/module.h>
20#include <linux/platform_device.h>
21
22#include <asm/io.h>
23#include <asm/irq.h>
24#include <asm/atomic.h>
25#include <asm/mach/time.h>
26#include <asm/mach/irq.h>
27#include <asm/mach-types.h>
28
29#include <asm/arch/gpio.h>
30
31#include "generic.h"
32
33
34static int at91_pm_valid_state(suspend_state_t state)
35{
36 switch (state) {
37 case PM_SUSPEND_ON:
38 case PM_SUSPEND_STANDBY:
39 case PM_SUSPEND_MEM:
40 return 1;
41
42 default:
43 return 0;
44 }
45}
46
47
48static suspend_state_t target_state;
49
50/*
51 * Called after processes are frozen, but before we shutdown devices.
52 */
53static int at91_pm_prepare(suspend_state_t state)
54{
55 target_state = state;
56 return 0;
57}
58
59/*
60 * Verify that all the clocks are correct before entering
61 * slow-clock mode.
62 */
63static int at91_pm_verify_clocks(void)
64{
65 unsigned long scsr;
66 int i;
67
68 scsr = at91_sys_read(AT91_PMC_SCSR);
69
70 /* USB must not be using PLLB */
71 if ((scsr & (AT91_PMC_UHP | AT91_PMC_UDP)) != 0) {
72 pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n");
73 return 0;
74 }
75
76#ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
77 /* PCK0..PCK3 must be disabled, or configured to use clk32k */
78 for (i = 0; i < 4; i++) {
79 u32 css;
80
81 if ((scsr & (AT91_PMC_PCK0 << i)) == 0)
82 continue;
83
84 css = at91_sys_read(AT91_PMC_PCKR(i)) & AT91_PMC_CSS;
85 if (css != AT91_PMC_CSS_SLOW) {
86 pr_debug("AT91: PM - Suspend-to-RAM with PCK%d src %d\n", i, css);
87 return 0;
88 }
89 }
90#endif
91
92 return 1;
93}
94
95/*
96 * Call this from platform driver suspend() to see how deeply to suspend.
97 * For example, some controllers (like OHCI) need one of the PLL clocks
98 * in order to act as a wakeup source, and those are not available when
99 * going into slow clock mode.
100 *
101 * REVISIT: generalize as clk_will_be_available(clk)? Other platforms have
102 * the very same problem (but not using at91 main_clk), and it'd be better
103 * to add one generic API rather than lots of platform-specific ones.
104 */
105int at91_suspend_entering_slow_clock(void)
106{
107 return (target_state == PM_SUSPEND_MEM);
108}
109EXPORT_SYMBOL(at91_suspend_entering_slow_clock);
110
111
112static void (*slow_clock)(void);
113
114
115
116static int at91_pm_enter(suspend_state_t state)
117{
118 at91_gpio_suspend();
119 at91_irq_suspend();
120
121 pr_debug("AT91: PM - wake mask %08x, pm state %d\n",
122 /* remember all the always-wake irqs */
123 (at91_sys_read(AT91_PMC_PCSR)
124 | (1 << AT91_ID_FIQ)
125 | (1 << AT91_ID_SYS)
126 | (1 << AT91_ID_IRQ0)
127 | (1 << AT91_ID_IRQ1)
128 | (1 << AT91_ID_IRQ2)
129 | (1 << AT91_ID_IRQ3)
130 | (1 << AT91_ID_IRQ4)
131 | (1 << AT91_ID_IRQ5)
132 | (1 << AT91_ID_IRQ6))
133 & at91_sys_read(AT91_AIC_IMR),
134 state);
135
136 switch (state) {
137 /*
138 * Suspend-to-RAM is like STANDBY plus slow clock mode, so
139 * drivers must suspend more deeply: only the master clock
140 * controller may be using the main oscillator.
141 */
142 case PM_SUSPEND_MEM:
143 /*
144 * Ensure that clocks are in a valid state.
145 */
146 if (!at91_pm_verify_clocks())
147 goto error;
148
149 /*
150 * Enter slow clock mode by switching over to clk32k and
151 * turning off the main oscillator; reverse on wakeup.
152 */
153 if (slow_clock) {
154 slow_clock();
155 break;
156 } else {
157 /* DEVELOPMENT ONLY */
158 pr_info("AT91: PM - no slow clock mode yet ...\n");
159 /* FALLTHROUGH leaving master clock alone */
160 }
161
162 /*
163 * STANDBY mode has *all* drivers suspended; ignores irqs not
164 * marked as 'wakeup' event sources; and reduces DRAM power.
165 * But otherwise it's identical to PM_SUSPEND_ON: cpu idle, and
166 * nothing fancy done with main or cpu clocks.
167 */
168 case PM_SUSPEND_STANDBY:
169 /*
170 * NOTE: the Wait-for-Interrupt instruction needs to be
171 * in icache so the SDRAM stays in self-refresh mode until
172 * the wakeup IRQ occurs.
173 */
174 asm("b 1f; .align 5; 1:");
175 asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
176 at91_sys_write(AT91_SDRAMC_SRR, 1); /* self-refresh mode */
177 /* fall though to next state */
178
179 case PM_SUSPEND_ON:
180 asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */
181 break;
182
183 default:
184 pr_debug("AT91: PM - bogus suspend state %d\n", state);
185 goto error;
186 }
187
188 pr_debug("AT91: PM - wakeup %08x\n",
189 at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
190
191error:
192 target_state = PM_SUSPEND_ON;
193 at91_irq_resume();
194 at91_gpio_resume();
195 return 0;
196}
197
198
199static struct pm_ops at91_pm_ops ={
200 .pm_disk_mode = 0,
201 .valid = at91_pm_valid_state,
202 .prepare = at91_pm_prepare,
203 .enter = at91_pm_enter,
204};
205
206static int __init at91_pm_init(void)
207{
208 printk("AT91: Power Management\n");
209
210#ifdef CONFIG_AT91_PM_SLOW_CLOCK
211 /* REVISIT allocations of SRAM should be dynamically managed.
212 * FIQ handlers and other components will want SRAM/TCM too...
213 */
214 slow_clock = (void *) (AT91_VA_BASE_SRAM + (3 * SZ_4K));
215 memcpy(slow_clock, at91rm9200_slow_clock, at91rm9200_slow_clock_sz);
216#endif
217
218 /* Disable SDRAM low-power mode. Cannot be used with self-refresh. */
219 at91_sys_write(AT91_SDRAMC_LPR, 0);
220
221 pm_set_ops(&at91_pm_ops);
222
223 return 0;
224}
225arch_initcall(at91_pm_init);
diff --git a/arch/arm/mach-at91rm9200/time.c b/arch/arm/mach-at91rm9200/time.c
index 7ffcf443b99f..fc2d7d5e4637 100644
--- a/arch/arm/mach-at91rm9200/time.c
+++ b/arch/arm/mach-at91rm9200/time.c
@@ -31,6 +31,8 @@
31#include <asm/irq.h> 31#include <asm/irq.h>
32#include <asm/mach/time.h> 32#include <asm/mach/time.h>
33 33
34static unsigned long last_crtr;
35
34/* 36/*
35 * The ST_CRTR is updated asynchronously to the master clock. It is therefore 37 * 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. 38 * necessary to read it twice (with the same value) to ensure accuracy.
@@ -56,7 +58,7 @@ static unsigned long at91rm9200_gettimeoffset(void)
56{ 58{
57 unsigned long elapsed; 59 unsigned long elapsed;
58 60
59 elapsed = (read_CRTR() - at91_sys_read(AT91_ST_RTAR)) & AT91_ST_ALMV; 61 elapsed = (read_CRTR() - last_crtr) & AT91_ST_ALMV;
60 62
61 return (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH; 63 return (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH;
62} 64}
@@ -66,15 +68,12 @@ static unsigned long at91rm9200_gettimeoffset(void)
66 */ 68 */
67static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 69static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
68{ 70{
69 unsigned long rtar;
70
71 if (at91_sys_read(AT91_ST_SR) & AT91_ST_PITS) { /* This is a shared interrupt */ 71 if (at91_sys_read(AT91_ST_SR) & AT91_ST_PITS) { /* This is a shared interrupt */
72 write_seqlock(&xtime_lock); 72 write_seqlock(&xtime_lock);
73 73
74 while (((read_CRTR() - at91_sys_read(AT91_ST_RTAR)) & AT91_ST_ALMV) >= LATCH) { 74 while (((read_CRTR() - last_crtr) & AT91_ST_ALMV) >= LATCH) {
75 timer_tick(regs); 75 timer_tick(regs);
76 rtar = (at91_sys_read(AT91_ST_RTAR) + LATCH) & AT91_ST_ALMV; 76 last_crtr = (last_crtr + LATCH) & AT91_ST_ALMV;
77 at91_sys_write(AT91_ST_RTAR, rtar);
78 } 77 }
79 78
80 write_sequnlock(&xtime_lock); 79 write_sequnlock(&xtime_lock);
@@ -87,10 +86,24 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id, struct pt_r
87 86
88static struct irqaction at91rm9200_timer_irq = { 87static struct irqaction at91rm9200_timer_irq = {
89 .name = "at91_tick", 88 .name = "at91_tick",
90 .flags = SA_SHIRQ | SA_INTERRUPT, 89 .flags = SA_SHIRQ | SA_INTERRUPT | SA_TIMER,
91 .handler = at91rm9200_timer_interrupt 90 .handler = at91rm9200_timer_interrupt
92}; 91};
93 92
93void at91rm9200_timer_reset(void)
94{
95 last_crtr = 0;
96
97 /* Real time counter incremented every 30.51758 microseconds */
98 at91_sys_write(AT91_ST_RTMR, 1);
99
100 /* Set Period Interval timer */
101 at91_sys_write(AT91_ST_PIMR, LATCH);
102
103 /* Enable Period Interval Timer interrupt */
104 at91_sys_write(AT91_ST_IER, AT91_ST_PITS);
105}
106
94/* 107/*
95 * Set up timer interrupt. 108 * Set up timer interrupt.
96 */ 109 */
@@ -100,28 +113,30 @@ void __init at91rm9200_timer_init(void)
100 at91_sys_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); 113 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 */ 114 (void) at91_sys_read(AT91_ST_SR); /* Clear any pending interrupts */
102 115
103 /* 116 /* Make IRQs happen for the system timer */
104 * Make IRQs happen for the system timer.
105 */
106 setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq); 117 setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq);
107 118
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) */ 119 /* Change the kernel's 'tick' value to 10009 usec. (the default is 10000) */
118 tick_usec = (LATCH * 1000000) / CLOCK_TICK_RATE; 120 tick_usec = (LATCH * 1000000) / CLOCK_TICK_RATE;
119 121
120 /* Enable Period Interval Timer interrupt */ 122 /* Initialize and enable the timer interrupt */
121 at91_sys_write(AT91_ST_IER, AT91_ST_PITS); 123 at91rm9200_timer_reset();
124}
125
126#ifdef CONFIG_PM
127static void at91rm9200_timer_suspend(void)
128{
129 /* disable Period Interval Timer interrupt */
130 at91_sys_write(AT91_ST_IDR, AT91_ST_PITS);
122} 131}
132#else
133#define at91rm9200_timer_suspend NULL
134#endif
123 135
124struct sys_timer at91rm9200_timer = { 136struct sys_timer at91rm9200_timer = {
125 .init = at91rm9200_timer_init, 137 .init = at91rm9200_timer_init,
126 .offset = at91rm9200_gettimeoffset, 138 .offset = at91rm9200_gettimeoffset,
139 .suspend = at91rm9200_timer_suspend,
140 .resume = at91rm9200_timer_reset,
127}; 141};
142
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 7d22dc0478d3..5ea778fc1caa 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -300,21 +300,22 @@ config SERIAL_AMBA_PL011_CONSOLE
300 kernel at boot time.) 300 kernel at boot time.)
301 301
302config SERIAL_AT91 302config SERIAL_AT91
303 bool "AT91RM9200 serial port support" 303 bool "AT91RM9200 / AT91SAM9261 serial port support"
304 depends on ARM && ARCH_AT91RM9200 304 depends on ARM && (ARCH_AT91RM9200 || ARCH_AT91SAM9261)
305 select SERIAL_CORE 305 select SERIAL_CORE
306 help 306 help
307 This enables the driver for the on-chip UARTs of the AT91RM9200 307 This enables the driver for the on-chip UARTs of the Atmel
308 processor. 308 AT91RM9200 and AT91SAM926 processor.
309 309
310config SERIAL_AT91_CONSOLE 310config SERIAL_AT91_CONSOLE
311 bool "Support for console on AT91RM9200 serial port" 311 bool "Support for console on AT91RM9200 / AT91SAM9261 serial port"
312 depends on SERIAL_AT91=y 312 depends on SERIAL_AT91=y
313 select SERIAL_CORE_CONSOLE 313 select SERIAL_CORE_CONSOLE
314 help 314 help
315 Say Y here if you wish to use a UART on the AT91RM9200 as the system 315 Say Y here if you wish to use a UART on the Atmel AT91RM9200 or
316 console (the system console is the device which receives all kernel 316 AT91SAM9261 as the system console (the system console is the device
317 messages and warnings and which allows logins in single user mode). 317 which receives all kernel messages and warnings and which allows
318 logins in single user mode).
318 319
319config SERIAL_AT91_TTYAT 320config SERIAL_AT91_TTYAT
320 bool "Install as device ttyAT0-4 instead of ttyS0-4" 321 bool "Install as device ttyAT0-4 instead of ttyS0-4"
diff --git a/drivers/serial/at91_serial.c b/drivers/serial/at91_serial.c
index 6547fe0cef96..db5b25fafed4 100644
--- a/drivers/serial/at91_serial.c
+++ b/drivers/serial/at91_serial.c
@@ -2,7 +2,6 @@
2 * linux/drivers/char/at91_serial.c 2 * linux/drivers/char/at91_serial.c
3 * 3 *
4 * Driver for Atmel AT91RM9200 Serial ports 4 * Driver for Atmel AT91RM9200 Serial ports
5 *
6 * Copyright (C) 2003 Rick Bronson 5 * Copyright (C) 2003 Rick Bronson
7 * 6 *
8 * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd. 7 * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.
@@ -30,17 +29,19 @@
30#include <linux/slab.h> 29#include <linux/slab.h>
31#include <linux/init.h> 30#include <linux/init.h>
32#include <linux/serial.h> 31#include <linux/serial.h>
32#include <linux/clk.h>
33#include <linux/console.h> 33#include <linux/console.h>
34#include <linux/sysrq.h> 34#include <linux/sysrq.h>
35#include <linux/tty_flip.h> 35#include <linux/tty_flip.h>
36#include <linux/platform_device.h>
36 37
37#include <asm/io.h> 38#include <asm/io.h>
38 39
39#include <asm/arch/at91rm9200_usart.h> 40#include <asm/arch/at91rm9200_usart.h>
40#include <asm/mach/serial_at91rm9200.h> 41#include <asm/arch/at91rm9200_pdc.h>
42#include <asm/mach/serial_at91.h>
41#include <asm/arch/board.h> 43#include <asm/arch/board.h>
42#include <asm/arch/pio.h> 44#include <asm/arch/system.h>
43
44 45
45#if defined(CONFIG_SERIAL_AT91_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 46#if defined(CONFIG_SERIAL_AT91_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
46#define SUPPORT_SYSRQ 47#define SUPPORT_SYSRQ
@@ -67,7 +68,6 @@
67 68
68#endif 69#endif
69 70
70#define AT91_VA_BASE_DBGU ((unsigned long) AT91_VA_BASE_SYS + AT91_DBGU)
71#define AT91_ISR_PASS_LIMIT 256 71#define AT91_ISR_PASS_LIMIT 256
72 72
73#define UART_PUT_CR(port,v) writel(v, (port)->membase + AT91_US_CR) 73#define UART_PUT_CR(port,v) writel(v, (port)->membase + AT91_US_CR)
@@ -87,16 +87,33 @@
87 87
88 /* PDC registers */ 88 /* PDC registers */
89#define UART_PUT_PTCR(port,v) writel(v, (port)->membase + AT91_PDC_PTCR) 89#define UART_PUT_PTCR(port,v) writel(v, (port)->membase + AT91_PDC_PTCR)
90#define UART_GET_PTSR(port) readl((port)->membase + AT91_PDC_PTSR)
91
90#define UART_PUT_RPR(port,v) writel(v, (port)->membase + AT91_PDC_RPR) 92#define UART_PUT_RPR(port,v) writel(v, (port)->membase + AT91_PDC_RPR)
93#define UART_GET_RPR(port) readl((port)->membase + AT91_PDC_RPR)
91#define UART_PUT_RCR(port,v) writel(v, (port)->membase + AT91_PDC_RCR) 94#define UART_PUT_RCR(port,v) writel(v, (port)->membase + AT91_PDC_RCR)
92#define UART_GET_RCR(port) readl((port)->membase + AT91_PDC_RCR)
93#define UART_PUT_RNPR(port,v) writel(v, (port)->membase + AT91_PDC_RNPR) 95#define UART_PUT_RNPR(port,v) writel(v, (port)->membase + AT91_PDC_RNPR)
94#define UART_PUT_RNCR(port,v) writel(v, (port)->membase + AT91_PDC_RNCR) 96#define UART_PUT_RNCR(port,v) writel(v, (port)->membase + AT91_PDC_RNCR)
95 97
98#define UART_PUT_TPR(port,v) writel(v, (port)->membase + AT91_PDC_TPR)
99#define UART_PUT_TCR(port,v) writel(v, (port)->membase + AT91_PDC_TCR)
100//#define UART_PUT_TNPR(port,v) writel(v, (port)->membase + AT91_PDC_TNPR)
101//#define UART_PUT_TNCR(port,v) writel(v, (port)->membase + AT91_PDC_TNCR)
96 102
97static int (*at91_open)(struct uart_port *); 103static int (*at91_open)(struct uart_port *);
98static void (*at91_close)(struct uart_port *); 104static void (*at91_close)(struct uart_port *);
99 105
106/*
107 * We wrap our port structure around the generic uart_port.
108 */
109struct at91_uart_port {
110 struct uart_port uart; /* uart */
111 struct clk *clk; /* uart clock */
112 unsigned short suspended; /* is port suspended? */
113};
114
115static struct at91_uart_port at91_ports[AT91_NR_UART];
116
100#ifdef SUPPORT_SYSRQ 117#ifdef SUPPORT_SYSRQ
101static struct console at91_console; 118static struct console at91_console;
102#endif 119#endif
@@ -115,16 +132,19 @@ static u_int at91_tx_empty(struct uart_port *port)
115static void at91_set_mctrl(struct uart_port *port, u_int mctrl) 132static void at91_set_mctrl(struct uart_port *port, u_int mctrl)
116{ 133{
117 unsigned int control = 0; 134 unsigned int control = 0;
135 unsigned int mode;
118 136
119 /* 137 if (arch_identify() == ARCH_ID_AT91RM9200) {
120 * Errata #39: RTS0 is not internally connected to PA21. We need to drive 138 /*
121 * the pin manually. 139 * AT91RM9200 Errata #39: RTS0 is not internally connected to PA21.
122 */ 140 * We need to drive the pin manually.
123 if (port->mapbase == AT91_VA_BASE_US0) { 141 */
124 if (mctrl & TIOCM_RTS) 142 if (port->mapbase == AT91_BASE_US0) {
125 at91_sys_write(AT91_PIOA + PIO_CODR, AT91_PA21_RTS0); 143 if (mctrl & TIOCM_RTS)
126 else 144 at91_sys_write(AT91_PIOA + PIO_CODR, AT91_PA21_RTS0);
127 at91_sys_write(AT91_PIOA + PIO_SODR, AT91_PA21_RTS0); 145 else
146 at91_sys_write(AT91_PIOA + PIO_SODR, AT91_PA21_RTS0);
147 }
128 } 148 }
129 149
130 if (mctrl & TIOCM_RTS) 150 if (mctrl & TIOCM_RTS)
@@ -137,7 +157,15 @@ static void at91_set_mctrl(struct uart_port *port, u_int mctrl)
137 else 157 else
138 control |= AT91_US_DTRDIS; 158 control |= AT91_US_DTRDIS;
139 159
140 UART_PUT_CR(port,control); 160 UART_PUT_CR(port, control);
161
162 /* Local loopback mode? */
163 mode = UART_GET_MR(port) & ~AT91_US_CHMODE;
164 if (mctrl & TIOCM_LOOP)
165 mode |= AT91_US_CHMODE_LOC_LOOP;
166 else
167 mode |= AT91_US_CHMODE_NORMAL;
168 UART_PUT_MR(port, mode);
141} 169}
142 170
143/* 171/*
@@ -169,8 +197,9 @@ static u_int at91_get_mctrl(struct uart_port *port)
169 */ 197 */
170static void at91_stop_tx(struct uart_port *port) 198static void at91_stop_tx(struct uart_port *port)
171{ 199{
200 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
201
172 UART_PUT_IDR(port, AT91_US_TXRDY); 202 UART_PUT_IDR(port, AT91_US_TXRDY);
173 port->read_status_mask &= ~AT91_US_TXRDY;
174} 203}
175 204
176/* 205/*
@@ -178,7 +207,8 @@ static void at91_stop_tx(struct uart_port *port)
178 */ 207 */
179static void at91_start_tx(struct uart_port *port) 208static void at91_start_tx(struct uart_port *port)
180{ 209{
181 port->read_status_mask |= AT91_US_TXRDY; 210 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
211
182 UART_PUT_IER(port, AT91_US_TXRDY); 212 UART_PUT_IER(port, AT91_US_TXRDY);
183} 213}
184 214
@@ -187,6 +217,8 @@ static void at91_start_tx(struct uart_port *port)
187 */ 217 */
188static void at91_stop_rx(struct uart_port *port) 218static void at91_stop_rx(struct uart_port *port)
189{ 219{
220 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
221
190 UART_PUT_IDR(port, AT91_US_RXRDY); 222 UART_PUT_IDR(port, AT91_US_RXRDY);
191} 223}
192 224
@@ -195,7 +227,6 @@ static void at91_stop_rx(struct uart_port *port)
195 */ 227 */
196static void at91_enable_ms(struct uart_port *port) 228static void at91_enable_ms(struct uart_port *port)
197{ 229{
198 port->read_status_mask |= (AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC);
199 UART_PUT_IER(port, AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC); 230 UART_PUT_IER(port, AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC);
200} 231}
201 232
@@ -218,8 +249,8 @@ static void at91_rx_chars(struct uart_port *port, struct pt_regs *regs)
218 struct tty_struct *tty = port->info->tty; 249 struct tty_struct *tty = port->info->tty;
219 unsigned int status, ch, flg; 250 unsigned int status, ch, flg;
220 251
221 status = UART_GET_CSR(port) & port->read_status_mask; 252 status = UART_GET_CSR(port);
222 while (status & (AT91_US_RXRDY)) { 253 while (status & AT91_US_RXRDY) {
223 ch = UART_GET_CHAR(port); 254 ch = UART_GET_CHAR(port);
224 255
225 port->icount.rx++; 256 port->icount.rx++;
@@ -230,40 +261,38 @@ static void at91_rx_chars(struct uart_port *port, struct pt_regs *regs)
230 * note that the error handling code is 261 * note that the error handling code is
231 * out of the main execution path 262 * out of the main execution path
232 */ 263 */
233 if (unlikely(status & (AT91_US_PARE | AT91_US_FRAME | AT91_US_OVRE))) { 264 if (unlikely(status & (AT91_US_PARE | AT91_US_FRAME | AT91_US_OVRE | AT91_US_RXBRK))) {
234 UART_PUT_CR(port, AT91_US_RSTSTA); /* clear error */ 265 UART_PUT_CR(port, AT91_US_RSTSTA); /* clear error */
235 if (status & (AT91_US_PARE)) 266 if (status & AT91_US_RXBRK) {
267 status &= ~(AT91_US_PARE | AT91_US_FRAME); /* ignore side-effect */
268 port->icount.brk++;
269 if (uart_handle_break(port))
270 goto ignore_char;
271 }
272 if (status & AT91_US_PARE)
236 port->icount.parity++; 273 port->icount.parity++;
237 if (status & (AT91_US_FRAME)) 274 if (status & AT91_US_FRAME)
238 port->icount.frame++; 275 port->icount.frame++;
239 if (status & (AT91_US_OVRE)) 276 if (status & AT91_US_OVRE)
240 port->icount.overrun++; 277 port->icount.overrun++;
241 278
242 if (status & AT91_US_PARE) 279 status &= port->read_status_mask;
280
281 if (status & AT91_US_RXBRK)
282 flg = TTY_BREAK;
283 else if (status & AT91_US_PARE)
243 flg = TTY_PARITY; 284 flg = TTY_PARITY;
244 else if (status & AT91_US_FRAME) 285 else if (status & AT91_US_FRAME)
245 flg = TTY_FRAME; 286 flg = TTY_FRAME;
246 if (status & AT91_US_OVRE) {
247 /*
248 * overrun does *not* affect the character
249 * we read from the FIFO
250 */
251 tty_insert_flip_char(tty, ch, flg);
252 ch = 0;
253 flg = TTY_OVERRUN;
254 }
255#ifdef SUPPORT_SYSRQ
256 port->sysrq = 0;
257#endif
258 } 287 }
259 288
260 if (uart_handle_sysrq_char(port, ch, regs)) 289 if (uart_handle_sysrq_char(port, ch, regs))
261 goto ignore_char; 290 goto ignore_char;
262 291
263 tty_insert_flip_char(tty, ch, flg); 292 uart_insert_char(port, status, AT91_US_OVRE, ch, flg);
264 293
265 ignore_char: 294 ignore_char:
266 status = UART_GET_CSR(port) & port->read_status_mask; 295 status = UART_GET_CSR(port);
267 } 296 }
268 297
269 tty_flip_buffer_push(tty); 298 tty_flip_buffer_push(tty);
@@ -308,40 +337,35 @@ static void at91_tx_chars(struct uart_port *port)
308static irqreturn_t at91_interrupt(int irq, void *dev_id, struct pt_regs *regs) 337static irqreturn_t at91_interrupt(int irq, void *dev_id, struct pt_regs *regs)
309{ 338{
310 struct uart_port *port = dev_id; 339 struct uart_port *port = dev_id;
340 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
311 unsigned int status, pending, pass_counter = 0; 341 unsigned int status, pending, pass_counter = 0;
312 342
313 status = UART_GET_CSR(port); 343 status = UART_GET_CSR(port);
314 pending = status & port->read_status_mask; 344 pending = status & UART_GET_IMR(port);
315 if (pending) { 345 while (pending) {
316 do { 346 /* Interrupt receive */
317 if (pending & AT91_US_RXRDY) 347 if (pending & AT91_US_RXRDY)
318 at91_rx_chars(port, regs); 348 at91_rx_chars(port, regs);
319 349
320 /* Clear the relevent break bits */ 350 // TODO: All reads to CSR will clear these interrupts!
321 if (pending & AT91_US_RXBRK) { 351 if (pending & AT91_US_RIIC) port->icount.rng++;
322 UART_PUT_CR(port, AT91_US_RSTSTA); 352 if (pending & AT91_US_DSRIC) port->icount.dsr++;
323 port->icount.brk++; 353 if (pending & AT91_US_DCDIC)
324 uart_handle_break(port); 354 uart_handle_dcd_change(port, !(status & AT91_US_DCD));
325 } 355 if (pending & AT91_US_CTSIC)
356 uart_handle_cts_change(port, !(status & AT91_US_CTS));
357 if (pending & (AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC))
358 wake_up_interruptible(&port->info->delta_msr_wait);
359
360 /* Interrupt transmit */
361 if (pending & AT91_US_TXRDY)
362 at91_tx_chars(port);
363
364 if (pass_counter++ > AT91_ISR_PASS_LIMIT)
365 break;
326 366
327 // TODO: All reads to CSR will clear these interrupts! 367 status = UART_GET_CSR(port);
328 if (pending & AT91_US_RIIC) port->icount.rng++; 368 pending = status & UART_GET_IMR(port);
329 if (pending & AT91_US_DSRIC) port->icount.dsr++;
330 if (pending & AT91_US_DCDIC)
331 uart_handle_dcd_change(port, !(status & AT91_US_DCD));
332 if (pending & AT91_US_CTSIC)
333 uart_handle_cts_change(port, !(status & AT91_US_CTS));
334 if (pending & (AT91_US_RIIC | AT91_US_DSRIC | AT91_US_DCDIC | AT91_US_CTSIC))
335 wake_up_interruptible(&port->info->delta_msr_wait);
336
337 if (pending & AT91_US_TXRDY)
338 at91_tx_chars(port);
339 if (pass_counter++ > AT91_ISR_PASS_LIMIT)
340 break;
341
342 status = UART_GET_CSR(port);
343 pending = status & port->read_status_mask;
344 } while (pending);
345 } 369 }
346 return IRQ_HANDLED; 370 return IRQ_HANDLED;
347} 371}
@@ -351,6 +375,7 @@ static irqreturn_t at91_interrupt(int irq, void *dev_id, struct pt_regs *regs)
351 */ 375 */
352static int at91_startup(struct uart_port *port) 376static int at91_startup(struct uart_port *port)
353{ 377{
378 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
354 int retval; 379 int retval;
355 380
356 /* 381 /*
@@ -381,14 +406,14 @@ static int at91_startup(struct uart_port *port)
381 } 406 }
382 } 407 }
383 408
384 port->read_status_mask = AT91_US_RXRDY | AT91_US_TXRDY | AT91_US_OVRE
385 | AT91_US_FRAME | AT91_US_PARE | AT91_US_RXBRK;
386 /* 409 /*
387 * Finally, enable the serial port 410 * Finally, enable the serial port
388 */ 411 */
389 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX); 412 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX);
390 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN); /* enable xmit & rcvr */ 413 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN); /* enable xmit & rcvr */
391 UART_PUT_IER(port, AT91_US_RXRDY); /* do receive only */ 414
415 UART_PUT_IER(port, AT91_US_RXRDY); /* enable receive only */
416
392 return 0; 417 return 0;
393} 418}
394 419
@@ -397,6 +422,8 @@ static int at91_startup(struct uart_port *port)
397 */ 422 */
398static void at91_shutdown(struct uart_port *port) 423static void at91_shutdown(struct uart_port *port)
399{ 424{
425 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
426
400 /* 427 /*
401 * Disable all interrupts, port and break condition. 428 * Disable all interrupts, port and break condition.
402 */ 429 */
@@ -421,21 +448,22 @@ static void at91_shutdown(struct uart_port *port)
421 */ 448 */
422static void at91_serial_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) 449static void at91_serial_pm(struct uart_port *port, unsigned int state, unsigned int oldstate)
423{ 450{
451 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
452
424 switch (state) { 453 switch (state) {
425 case 0: 454 case 0:
426 /* 455 /*
427 * Enable the peripheral clock for this serial port. 456 * Enable the peripheral clock for this serial port.
428 * This is called on uart_open() or a resume event. 457 * This is called on uart_open() or a resume event.
429 */ 458 */
430 at91_sys_write(AT91_PMC_PCER, 1 << port->irq); 459 clk_enable(at91_port->clk);
431 break; 460 break;
432 case 3: 461 case 3:
433 /* 462 /*
434 * Disable the peripheral clock for this serial port. 463 * Disable the peripheral clock for this serial port.
435 * This is called on uart_close() or a suspend event. 464 * This is called on uart_close() or a suspend event.
436 */ 465 */
437 if (port->irq != AT91_ID_SYS) /* is this a shared clock? */ 466 clk_disable(at91_port->clk);
438 at91_sys_write(AT91_PMC_PCDR, 1 << port->irq);
439 break; 467 break;
440 default: 468 default:
441 printk(KERN_ERR "at91_serial: unknown pm %d\n", state); 469 printk(KERN_ERR "at91_serial: unknown pm %d\n", state);
@@ -494,9 +522,9 @@ static void at91_set_termios(struct uart_port *port, struct termios * termios, s
494 522
495 spin_lock_irqsave(&port->lock, flags); 523 spin_lock_irqsave(&port->lock, flags);
496 524
497 port->read_status_mask |= AT91_US_OVRE; 525 port->read_status_mask = AT91_US_OVRE;
498 if (termios->c_iflag & INPCK) 526 if (termios->c_iflag & INPCK)
499 port->read_status_mask |= AT91_US_FRAME | AT91_US_PARE; 527 port->read_status_mask |= (AT91_US_FRAME | AT91_US_PARE);
500 if (termios->c_iflag & (BRKINT | PARMRK)) 528 if (termios->c_iflag & (BRKINT | PARMRK))
501 port->read_status_mask |= AT91_US_RXBRK; 529 port->read_status_mask |= AT91_US_RXBRK;
502 530
@@ -552,7 +580,7 @@ static void at91_set_termios(struct uart_port *port, struct termios * termios, s
552 */ 580 */
553static const char *at91_type(struct uart_port *port) 581static const char *at91_type(struct uart_port *port)
554{ 582{
555 return (port->type == PORT_AT91RM9200) ? "AT91_SERIAL" : NULL; 583 return (port->type == PORT_AT91) ? "AT91_SERIAL" : NULL;
556} 584}
557 585
558/* 586/*
@@ -560,8 +588,15 @@ static const char *at91_type(struct uart_port *port)
560 */ 588 */
561static void at91_release_port(struct uart_port *port) 589static void at91_release_port(struct uart_port *port)
562{ 590{
563 release_mem_region(port->mapbase, 591 struct platform_device *pdev = to_platform_device(port->dev);
564 (port->mapbase == AT91_VA_BASE_DBGU) ? 512 : SZ_16K); 592 int size = pdev->resource[0].end - pdev->resource[0].start + 1;
593
594 release_mem_region(port->mapbase, size);
595
596 if (port->flags & UPF_IOREMAP) {
597 iounmap(port->membase);
598 port->membase = NULL;
599 }
565} 600}
566 601
567/* 602/*
@@ -569,10 +604,21 @@ static void at91_release_port(struct uart_port *port)
569 */ 604 */
570static int at91_request_port(struct uart_port *port) 605static int at91_request_port(struct uart_port *port)
571{ 606{
572 return request_mem_region(port->mapbase, 607 struct platform_device *pdev = to_platform_device(port->dev);
573 (port->mapbase == AT91_VA_BASE_DBGU) ? 512 : SZ_16K, 608 int size = pdev->resource[0].end - pdev->resource[0].start + 1;
574 "at91_serial") != NULL ? 0 : -EBUSY; 609
610 if (!request_mem_region(port->mapbase, size, "at91_serial"))
611 return -EBUSY;
612
613 if (port->flags & UPF_IOREMAP) {
614 port->membase = ioremap(port->mapbase, size);
615 if (port->membase == NULL) {
616 release_mem_region(port->mapbase, size);
617 return -ENOMEM;
618 }
619 }
575 620
621 return 0;
576} 622}
577 623
578/* 624/*
@@ -581,7 +627,7 @@ static int at91_request_port(struct uart_port *port)
581static void at91_config_port(struct uart_port *port, int flags) 627static void at91_config_port(struct uart_port *port, int flags)
582{ 628{
583 if (flags & UART_CONFIG_TYPE) { 629 if (flags & UART_CONFIG_TYPE) {
584 port->type = PORT_AT91RM9200; 630 port->type = PORT_AT91;
585 at91_request_port(port); 631 at91_request_port(port);
586 } 632 }
587} 633}
@@ -592,7 +638,7 @@ static void at91_config_port(struct uart_port *port, int flags)
592static int at91_verify_port(struct uart_port *port, struct serial_struct *ser) 638static int at91_verify_port(struct uart_port *port, struct serial_struct *ser)
593{ 639{
594 int ret = 0; 640 int ret = 0;
595 if (ser->type != PORT_UNKNOWN && ser->type != PORT_AT91RM9200) 641 if (ser->type != PORT_UNKNOWN && ser->type != PORT_AT91)
596 ret = -EINVAL; 642 ret = -EINVAL;
597 if (port->irq != ser->irq) 643 if (port->irq != ser->irq)
598 ret = -EINVAL; 644 ret = -EINVAL;
@@ -624,33 +670,47 @@ static struct uart_ops at91_pops = {
624 .type = at91_type, 670 .type = at91_type,
625 .release_port = at91_release_port, 671 .release_port = at91_release_port,
626 .request_port = at91_request_port, 672 .request_port = at91_request_port,
627 .config_port = at91_config_port, 673 .config_port = at91_config_port,
628 .verify_port = at91_verify_port, 674 .verify_port = at91_verify_port,
629 .pm = at91_serial_pm, 675 .pm = at91_serial_pm,
630}; 676};
631 677
632static struct uart_port at91_ports[AT91_NR_UART]; 678/*
633 679 * Configure the port from the platform device resource info.
634void __init at91_init_ports(void) 680 */
681static void __devinit at91_init_port(struct at91_uart_port *at91_port, struct platform_device *pdev)
635{ 682{
636 static int first = 1; 683 struct uart_port *port = &at91_port->uart;
637 int i; 684 struct at91_uart_data *data = pdev->dev.platform_data;
638 685
639 if (!first) 686 port->iotype = UPIO_MEM;
640 return; 687 port->flags = UPF_BOOT_AUTOCONF;
641 first = 0; 688 port->ops = &at91_pops;
689 port->fifosize = 1;
690 port->line = pdev->id;
691 port->dev = &pdev->dev;
692
693 port->mapbase = pdev->resource[0].start;
694 port->irq = pdev->resource[1].start;
695
696 if (port->mapbase == AT91_VA_BASE_SYS + AT91_DBGU) /* Part of system perpherals - already mapped */
697 port->membase = (void __iomem *) port->mapbase;
698 else {
699 port->flags |= UPF_IOREMAP;
700 port->membase = NULL;
701 }
642 702
643 for (i = 0; i < AT91_NR_UART; i++) { 703 if (!at91_port->clk) { /* for console, the clock could already be configured */
644 at91_ports[i].iotype = UPIO_MEM; 704 at91_port->clk = clk_get(&pdev->dev, "usart");
645 at91_ports[i].flags = UPF_BOOT_AUTOCONF; 705 clk_enable(at91_port->clk);
646 at91_ports[i].uartclk = at91_master_clock; 706 port->uartclk = clk_get_rate(at91_port->clk);
647 at91_ports[i].ops = &at91_pops; 707 }
648 at91_ports[i].fifosize = 1;
649 at91_ports[i].line = i;
650 }
651} 708}
652 709
653void __init at91_register_uart_fns(struct at91rm9200_port_fns *fns) 710/*
711 * Register board-specific modem-control line handlers.
712 */
713void __init at91_register_uart_fns(struct at91_port_fns *fns)
654{ 714{
655 if (fns->enable_ms) 715 if (fns->enable_ms)
656 at91_pops.enable_ms = fns->enable_ms; 716 at91_pops.enable_ms = fns->enable_ms;
@@ -664,51 +724,6 @@ void __init at91_register_uart_fns(struct at91rm9200_port_fns *fns)
664 at91_pops.set_wake = fns->set_wake; 724 at91_pops.set_wake = fns->set_wake;
665} 725}
666 726
667/*
668 * Setup ports.
669 */
670void __init at91_register_uart(int idx, int port)
671{
672 if ((idx < 0) || (idx >= AT91_NR_UART)) {
673 printk(KERN_ERR "%s: bad index number %d\n", __FUNCTION__, idx);
674 return;
675 }
676
677 switch (port) {
678 case 0:
679 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US0;
680 at91_ports[idx].mapbase = AT91_VA_BASE_US0;
681 at91_ports[idx].irq = AT91_ID_US0;
682 AT91_CfgPIO_USART0();
683 break;
684 case 1:
685 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US1;
686 at91_ports[idx].mapbase = AT91_VA_BASE_US1;
687 at91_ports[idx].irq = AT91_ID_US1;
688 AT91_CfgPIO_USART1();
689 break;
690 case 2:
691 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US2;
692 at91_ports[idx].mapbase = AT91_VA_BASE_US2;
693 at91_ports[idx].irq = AT91_ID_US2;
694 AT91_CfgPIO_USART2();
695 break;
696 case 3:
697 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_US3;
698 at91_ports[idx].mapbase = AT91_VA_BASE_US3;
699 at91_ports[idx].irq = AT91_ID_US3;
700 AT91_CfgPIO_USART3();
701 break;
702 case 4:
703 at91_ports[idx].membase = (void __iomem *) AT91_VA_BASE_DBGU;
704 at91_ports[idx].mapbase = AT91_VA_BASE_DBGU;
705 at91_ports[idx].irq = AT91_ID_SYS;
706 AT91_CfgPIO_DBGU();
707 break;
708 default:
709 printk(KERN_ERR "%s : bad port number %d\n", __FUNCTION__, port);
710 }
711}
712 727
713#ifdef CONFIG_SERIAL_AT91_CONSOLE 728#ifdef CONFIG_SERIAL_AT91_CONSOLE
714static void at91_console_putchar(struct uart_port *port, int ch) 729static void at91_console_putchar(struct uart_port *port, int ch)
@@ -723,7 +738,7 @@ static void at91_console_putchar(struct uart_port *port, int ch)
723 */ 738 */
724static void at91_console_write(struct console *co, const char *s, u_int count) 739static void at91_console_write(struct console *co, const char *s, u_int count)
725{ 740{
726 struct uart_port *port = at91_ports + co->index; 741 struct uart_port *port = &at91_ports[co->index].uart;
727 unsigned int status, imr; 742 unsigned int status, imr;
728 743
729 /* 744 /*
@@ -778,23 +793,15 @@ static void __init at91_console_get_options(struct uart_port *port, int *baud, i
778 793
779static int __init at91_console_setup(struct console *co, char *options) 794static int __init at91_console_setup(struct console *co, char *options)
780{ 795{
781 struct uart_port *port; 796 struct uart_port *port = &at91_ports[co->index].uart;
782 int baud = 115200; 797 int baud = 115200;
783 int bits = 8; 798 int bits = 8;
784 int parity = 'n'; 799 int parity = 'n';
785 int flow = 'n'; 800 int flow = 'n';
786 801
787 /* 802 if (port->membase == 0) /* Port not initialized yet - delay setup */
788 * Check whether an invalid uart number has been specified, and 803 return -ENODEV;
789 * if so, search for the first available port that does have
790 * console support.
791 */
792 port = uart_get_console(at91_ports, AT91_NR_UART, co);
793 804
794 /*
795 * Enable the serial console, in-case bootloader did not do it.
796 */
797 at91_sys_write(AT91_PMC_PCER, 1 << port->irq); /* enable clock */
798 UART_PUT_IDR(port, -1); /* disable interrupts */ 805 UART_PUT_IDR(port, -1); /* disable interrupts */
799 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX); 806 UART_PUT_CR(port, AT91_US_RSTSTA | AT91_US_RSTRX);
800 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN); 807 UART_PUT_CR(port, AT91_US_TXEN | AT91_US_RXEN);
@@ -821,23 +828,40 @@ static struct console at91_console = {
821 828
822#define AT91_CONSOLE_DEVICE &at91_console 829#define AT91_CONSOLE_DEVICE &at91_console
823 830
824static int __init at91_console_init(void) 831/*
832 * Early console initialization (before VM subsystem initialized).
833 */
834static int __init at91_console_init(void)
825{ 835{
826 at91_init_ports(); 836 if (at91_default_console_device) {
837 add_preferred_console(AT91_DEVICENAME, at91_default_console_device->id, NULL);
838 at91_init_port(&(at91_ports[at91_default_console_device->id]), at91_default_console_device);
839 register_console(&at91_console);
840 }
827 841
828 at91_console.index = at91_console_port;
829 register_console(&at91_console);
830 return 0; 842 return 0;
831} 843}
832console_initcall(at91_console_init); 844console_initcall(at91_console_init);
833 845
846/*
847 * Late console initialization.
848 */
849static int __init at91_late_console_init(void)
850{
851 if (at91_default_console_device && !(at91_console.flags & CON_ENABLED))
852 register_console(&at91_console);
853
854 return 0;
855}
856core_initcall(at91_late_console_init);
857
834#else 858#else
835#define AT91_CONSOLE_DEVICE NULL 859#define AT91_CONSOLE_DEVICE NULL
836#endif 860#endif
837 861
838static struct uart_driver at91_uart = { 862static struct uart_driver at91_uart = {
839 .owner = THIS_MODULE, 863 .owner = THIS_MODULE,
840 .driver_name = AT91_DEVICENAME, 864 .driver_name = "at91_serial",
841 .dev_name = AT91_DEVICENAME, 865 .dev_name = AT91_DEVICENAME,
842 .devfs_name = AT91_DEVICENAME, 866 .devfs_name = AT91_DEVICENAME,
843 .major = SERIAL_AT91_MAJOR, 867 .major = SERIAL_AT91_MAJOR,
@@ -846,33 +870,106 @@ static struct uart_driver at91_uart = {
846 .cons = AT91_CONSOLE_DEVICE, 870 .cons = AT91_CONSOLE_DEVICE,
847}; 871};
848 872
849static int __init at91_serial_init(void) 873#ifdef CONFIG_PM
874static int at91_serial_suspend(struct platform_device *pdev, pm_message_t state)
850{ 875{
851 int ret, i; 876 struct uart_port *port = platform_get_drvdata(pdev);
877 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
878
879 if (device_may_wakeup(&pdev->dev) && !at91_suspend_entering_slow_clock())
880 enable_irq_wake(port->irq);
881 else {
882 disable_irq_wake(port->irq);
883 uart_suspend_port(&at91_uart, port);
884 at91_port->suspended = 1;
885 }
852 886
853 at91_init_ports(); 887 return 0;
888}
854 889
855 ret = uart_register_driver(&at91_uart); 890static int at91_serial_resume(struct platform_device *pdev)
856 if (ret) 891{
857 return ret; 892 struct uart_port *port = platform_get_drvdata(pdev);
893 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
858 894
859 for (i = 0; i < AT91_NR_UART; i++) { 895 if (at91_port->suspended) {
860 if (at91_serial_map[i] >= 0) 896 uart_resume_port(&at91_uart, port);
861 uart_add_one_port(&at91_uart, &at91_ports[i]); 897 at91_port->suspended = 0;
862 } 898 }
863 899
864 return 0; 900 return 0;
865} 901}
902#else
903#define at91_serial_suspend NULL
904#define at91_serial_resume NULL
905#endif
866 906
867static void __exit at91_serial_exit(void) 907static int __devinit at91_serial_probe(struct platform_device *pdev)
868{ 908{
869 int i; 909 struct at91_uart_port *port;
910 int ret;
870 911
871 for (i = 0; i < AT91_NR_UART; i++) { 912 port = &at91_ports[pdev->id];
872 if (at91_serial_map[i] >= 0) 913 at91_init_port(port, pdev);
873 uart_remove_one_port(&at91_uart, &at91_ports[i]);
874 }
875 914
915 ret = uart_add_one_port(&at91_uart, &port->uart);
916 if (!ret) {
917 device_init_wakeup(&pdev->dev, 1);
918 platform_set_drvdata(pdev, port);
919 }
920
921 return ret;
922}
923
924static int __devexit at91_serial_remove(struct platform_device *pdev)
925{
926 struct uart_port *port = platform_get_drvdata(pdev);
927 struct at91_uart_port *at91_port = (struct at91_uart_port *) port;
928 int ret = 0;
929
930 clk_disable(at91_port->clk);
931 clk_put(at91_port->clk);
932
933 device_init_wakeup(&pdev->dev, 0);
934 platform_set_drvdata(pdev, NULL);
935
936 if (port) {
937 ret = uart_remove_one_port(&at91_uart, port);
938 kfree(port);
939 }
940
941 return ret;
942}
943
944static struct platform_driver at91_serial_driver = {
945 .probe = at91_serial_probe,
946 .remove = __devexit_p(at91_serial_remove),
947 .suspend = at91_serial_suspend,
948 .resume = at91_serial_resume,
949 .driver = {
950 .name = "at91_usart",
951 .owner = THIS_MODULE,
952 },
953};
954
955static int __init at91_serial_init(void)
956{
957 int ret;
958
959 ret = uart_register_driver(&at91_uart);
960 if (ret)
961 return ret;
962
963 ret = platform_driver_register(&at91_serial_driver);
964 if (ret)
965 uart_unregister_driver(&at91_uart);
966
967 return ret;
968}
969
970static void __exit at91_serial_exit(void)
971{
972 platform_driver_unregister(&at91_serial_driver);
876 uart_unregister_driver(&at91_uart); 973 uart_unregister_driver(&at91_uart);
877} 974}
878 975
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_spi.h b/include/asm-arm/arch-at91rm9200/at91rm9200_spi.h
new file mode 100644
index 000000000000..bff5ea45f604
--- /dev/null
+++ b/include/asm-arm/arch-at91rm9200/at91rm9200_spi.h
@@ -0,0 +1,81 @@
1/*
2 * include/asm-arm/arch-at91rm9200/at91rm9200_spi.h
3 *
4 * Copyright (C) 2005 Ivan Kokshaysky
5 * Copyright (C) SAN People
6 *
7 * Serial Peripheral Interface (SPI) registers.
8 * Based on AT91RM9200 datasheet revision E.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 */
15
16#ifndef AT91RM9200_SPI_H
17#define AT91RM9200_SPI_H
18
19#define AT91_SPI_CR 0x00 /* Control Register */
20#define AT91_SPI_SPIEN (1 << 0) /* SPI Enable */
21#define AT91_SPI_SPIDIS (1 << 1) /* SPI Disable */
22#define AT91_SPI_SWRST (1 << 7) /* SPI Software Reset */
23#define AT91_SPI_LASTXFER (1 << 24) /* Last Transfer [SAM9261 only] */
24
25#define AT91_SPI_MR 0x04 /* Mode Register */
26#define AT91_SPI_MSTR (1 << 0) /* Master/Slave Mode */
27#define AT91_SPI_PS (1 << 1) /* Peripheral Select */
28#define AT91_SPI_PS_FIXED (0 << 1)
29#define AT91_SPI_PS_VARIABLE (1 << 1)
30#define AT91_SPI_PCSDEC (1 << 2) /* Chip Select Decode */
31#define AT91_SPI_DIV32 (1 << 3) /* Clock Selection */
32#define AT91_SPI_MODFDIS (1 << 4) /* Mode Fault Detection */
33#define AT91_SPI_LLB (1 << 7) /* Local Loopback Enable */
34#define AT91_SPI_PCS (0xf << 16) /* Peripheral Chip Select */
35#define AT91_SPI_DLYBCS (0xff << 24) /* Delay Between Chip Selects */
36
37#define AT91_SPI_RDR 0x08 /* Receive Data Register */
38#define AT91_SPI_RD (0xffff << 0) /* Receive Data */
39#define AT91_SPI_PCS (0xf << 16) /* Peripheral Chip Select */
40
41#define AT91_SPI_TDR 0x0c /* Transmit Data Register */
42#define AT91_SPI_TD (0xffff << 0) /* Transmit Data */
43#define AT91_SPI_PCS (0xf << 16) /* Peripheral Chip Select */
44#define AT91_SPI_LASTXFER (1 << 24) /* Last Transfer [SAM9261 only] */
45
46#define AT91_SPI_SR 0x10 /* Status Register */
47#define AT91_SPI_RDRF (1 << 0) /* Receive Data Register Full */
48#define AT91_SPI_TDRE (1 << 1) /* Transmit Data Register Full */
49#define AT91_SPI_MODF (1 << 2) /* Mode Fault Error */
50#define AT91_SPI_OVRES (1 << 3) /* Overrun Error Status */
51#define AT91_SPI_ENDRX (1 << 4) /* End of RX buffer */
52#define AT91_SPI_ENDTX (1 << 5) /* End of TX buffer */
53#define AT91_SPI_RXBUFF (1 << 6) /* RX Buffer Full */
54#define AT91_SPI_TXBUFE (1 << 7) /* TX Buffer Empty */
55#define AT91_SPI_NSSR (1 << 8) /* NSS Rising [SAM9261 only] */
56#define AT91_SPI_TXEMPTY (1 << 9) /* Transmission Register Empty [SAM9261 only] */
57#define AT91_SPI_SPIENS (1 << 16) /* SPI Enable Status */
58
59#define AT91_SPI_IER 0x14 /* Interrupt Enable Register */
60#define AT91_SPI_IDR 0x18 /* Interrupt Disable Register */
61#define AT91_SPI_IMR 0x1c /* Interrupt Mask Register */
62
63#define AT91_SPI_CSR(n) (0x30 + ((n) * 4)) /* Chip Select Registers 0-3 */
64#define AT91_SPI_CPOL (1 << 0) /* Clock Polarity */
65#define AT91_SPI_NCPHA (1 << 1) /* Clock Phase */
66#define AT91_SPI_CSAAT (1 << 3) /* Chip Select Active After Transfer [SAM9261 only] */
67#define AT91_SPI_BITS (0xf << 4) /* Bits Per Transfer */
68#define AT91_SPI_BITS_8 (0 << 4)
69#define AT91_SPI_BITS_9 (1 << 4)
70#define AT91_SPI_BITS_10 (2 << 4)
71#define AT91_SPI_BITS_11 (3 << 4)
72#define AT91_SPI_BITS_12 (4 << 4)
73#define AT91_SPI_BITS_13 (5 << 4)
74#define AT91_SPI_BITS_14 (6 << 4)
75#define AT91_SPI_BITS_15 (7 << 4)
76#define AT91_SPI_BITS_16 (8 << 4)
77#define AT91_SPI_SCBR (0xff << 8) /* Serial Clock Baud Rate */
78#define AT91_SPI_DLYBS (0xff << 16) /* Delay before SPCK */
79#define AT91_SPI_DLYBCT (0xff << 24) /* Delay between Consecutive Transfers */
80
81#endif
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_ssc.h b/include/asm-arm/arch-at91rm9200/at91rm9200_ssc.h
new file mode 100644
index 000000000000..ac880227147f
--- /dev/null
+++ b/include/asm-arm/arch-at91rm9200/at91rm9200_ssc.h
@@ -0,0 +1,96 @@
1/*
2 * include/asm-arm/arch-at91rm9200/at91rm9200_ssc.h
3 *
4 * Copyright (C) SAN People
5 *
6 * Serial Synchronous Controller (SSC) registers.
7 * Based on AT91RM9200 datasheet revision E.
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
15#ifndef AT91RM9200_SSC_H
16#define AT91RM9200_SSC_H
17
18#define AT91_SSC_CR 0x00 /* Control Register */
19#define AT91_SSC_RXEN (1 << 0) /* Receive Enable */
20#define AT91_SSC_RXDIS (1 << 1) /* Receive Disable */
21#define AT91_SSC_TXEN (1 << 8) /* Transmit Enable */
22#define AT91_SSC_TXDIS (1 << 9) /* Transmit Disable */
23#define AT91_SSC_SWRST (1 << 15) /* Software Reset */
24
25#define AT91_SSC_CMR 0x04 /* Clock Mode Register */
26#define AT91_SSC_CMR_DIV (0xfff << 0) /* Clock Divider */
27
28#define AT91_SSC_RCMR 0x10 /* Receive Clock Mode Register */
29#define AT91_SSC_CKS (3 << 0) /* Clock Selection */
30#define AT91_SSC_CKS_DIV (0 << 0)
31#define AT91_SSC_CKS_CLOCK (1 << 0)
32#define AT91_SSC_CKS_PIN (2 << 0)
33#define AT91_SSC_CKO (7 << 2) /* Clock Output Mode Selection */
34#define AT91_SSC_CKO_NONE (0 << 2)
35#define AT91_SSC_CKO_CONTINUOUS (1 << 2)
36#define AT91_SSC_CKI (1 << 5) /* Clock Inversion */
37#define AT91_SSC_CKI_FALLING (0 << 5)
38#define AT91_SSC_CK_RISING (1 << 5)
39#define AT91_SSC_START (0xf << 8) /* Start Selection */
40#define AT91_SSC_START_CONTINUOUS (0 << 8)
41#define AT91_SSC_START_TX_RX (1 << 8)
42#define AT91_SSC_START_LOW_RF (2 << 8)
43#define AT91_SSC_START_HIGH_RF (3 << 8)
44#define AT91_SSC_START_FALLING_RF (4 << 8)
45#define AT91_SSC_START_RISING_RF (5 << 8)
46#define AT91_SSC_START_LEVEL_RF (6 << 8)
47#define AT91_SSC_START_EDGE_RF (7 << 8)
48#define AT91_SSC_STTDLY (0xff << 16) /* Start Delay */
49#define AT91_SSC_PERIOD (0xff << 24) /* Period Divider Selection */
50
51#define AT91_SSC_RFMR 0x14 /* Receive Frame Mode Register */
52#define AT91_SSC_DATALEN (0x1f << 0) /* Data Length */
53#define AT91_SSC_LOOP (1 << 5) /* Loop Mode */
54#define AT91_SSC_MSBF (1 << 7) /* Most Significant Bit First */
55#define AT91_SSC_DATNB (0xf << 8) /* Data Number per Frame */
56#define AT91_SSC_FSLEN (0xf << 16) /* Frame Sync Length */
57#define AT91_SSC_FSOS (7 << 20) /* Frame Sync Output Selection */
58#define AT91_SSC_FSOS_NONE (0 << 20)
59#define AT91_SSC_FSOS_NEGATIVE (1 << 20)
60#define AT91_SSC_FSOS_POSITIVE (2 << 20)
61#define AT91_SSC_FSOS_LOW (3 << 20)
62#define AT91_SSC_FSOS_HIGH (4 << 20)
63#define AT91_SSC_FSOS_TOGGLE (5 << 20)
64#define AT91_SSC_FSEDGE (1 << 24) /* Frame Sync Edge Detection */
65#define AT91_SSC_FSEDGE_POSITIVE (0 << 24)
66#define AT91_SSC_FSEDGE_NEGATIVE (1 << 24)
67
68#define AT91_SSC_TCMR 0x18 /* Transmit Clock Mode Register */
69#define AT91_SSC_TFMR 0x1c /* Transmit Fram Mode Register */
70#define AT91_SSC_DATDEF (1 << 5) /* Data Default Value */
71#define AT91_SSC_FSDEN (1 << 23) /* Frame Sync Data Enable */
72
73#define AT91_SSC_RHR 0x20 /* Receive Holding Register */
74#define AT91_SSC_THR 0x24 /* Transmit Holding Register */
75#define AT91_SSC_RSHR 0x30 /* Receive Sync Holding Register */
76#define AT91_SSC_TSHR 0x34 /* Transmit Sync Holding Register */
77
78#define AT91_SSC_SR 0x40 /* Status Register */
79#define AT91_SSC_TXRDY (1 << 0) /* Transmit Ready */
80#define AT91_SSC_TXEMPTY (1 << 1) /* Transmit Empty */
81#define AT91_SSC_ENDTX (1 << 2) /* End of Transmission */
82#define AT91_SSC_TXBUFE (1 << 3) /* Transmit Buffer Empty */
83#define AT91_SSC_RXRDY (1 << 4) /* Receive Ready */
84#define AT91_SSC_OVRUN (1 << 5) /* Receive Overrun */
85#define AT91_SSC_ENDRX (1 << 6) /* End of Reception */
86#define AT91_SSC_RXBUFF (1 << 7) /* Receive Buffer Full */
87#define AT91_SSC_TXSYN (1 << 10) /* Transmit Sync */
88#define AT91_SSC_RXSYN (1 << 11) /* Receive Sync */
89#define AT91_SSC_TXENA (1 << 16) /* Transmit Enable */
90#define AT91_SSC_RXENA (1 << 17) /* Receive Enable */
91
92#define AT91_SSC_IER 0x44 /* Interrupt Enable Register */
93#define AT91_SSC_IDR 0x48 /* Interrupt Disable Register */
94#define AT91_SSC_IMR 0x4c /* Interrupt Mask Register */
95
96#endif
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_sys.h b/include/asm-arm/arch-at91rm9200/at91rm9200_sys.h
index 2910d359f919..0f4c12d5f0cd 100644
--- a/include/asm-arm/arch-at91rm9200/at91rm9200_sys.h
+++ b/include/asm-arm/arch-at91rm9200/at91rm9200_sys.h
@@ -68,8 +68,17 @@
68#define AT91_DBGU_RHR (AT91_DBGU + 0x18) /* Receiver Holding Register */ 68#define AT91_DBGU_RHR (AT91_DBGU + 0x18) /* Receiver Holding Register */
69#define AT91_DBGU_THR (AT91_DBGU + 0x1c) /* Transmitter Holding Register */ 69#define AT91_DBGU_THR (AT91_DBGU + 0x1c) /* Transmitter Holding Register */
70#define AT91_DBGU_BRGR (AT91_DBGU + 0x20) /* Baud Rate Generator Register */ 70#define AT91_DBGU_BRGR (AT91_DBGU + 0x20) /* Baud Rate Generator Register */
71
71#define AT91_DBGU_CIDR (AT91_DBGU + 0x40) /* Chip ID Register */ 72#define AT91_DBGU_CIDR (AT91_DBGU + 0x40) /* Chip ID Register */
72#define AT91_DBGU_EXID (AT91_DBGU + 0x44) /* Chip ID Extension Register */ 73#define AT91_DBGU_EXID (AT91_DBGU + 0x44) /* Chip ID Extension Register */
74#define AT91_CIDR_VERSION (0x1f << 0) /* Version of the Device */
75#define AT91_CIDR_EPROC (7 << 5) /* Embedded Processor */
76#define AT91_CIDR_NVPSIZ (0xf << 8) /* Nonvolatile Program Memory Size */
77#define AT91_CIDR_NVPSIZ2 (0xf << 12) /* Second Nonvolatile Program Memory Size */
78#define AT91_CIDR_SRAMSIZ (0xf << 16) /* Internal SRAM Size */
79#define AT91_CIDR_ARCH (0xff << 20) /* Architecture Identifier */
80#define AT91_CIDR_NVPTYP (7 << 28) /* Nonvolatile Program Memory Type */
81#define AT91_CIDR_EXT (1 << 31) /* Extension Flag */
73 82
74 83
75/* 84/*
@@ -241,7 +250,7 @@
241#define AT91_RTC_SEC (0x7f << 0) /* Current Second */ 250#define AT91_RTC_SEC (0x7f << 0) /* Current Second */
242#define AT91_RTC_MIN (0x7f << 8) /* Current Minute */ 251#define AT91_RTC_MIN (0x7f << 8) /* Current Minute */
243#define AT91_RTC_HOUR (0x3f << 16) /* Current Hour */ 252#define AT91_RTC_HOUR (0x3f << 16) /* Current Hour */
244#define At91_RTC_AMPM (1 << 22) /* Ante Meridiem Post Meridiem Indicator */ 253#define AT91_RTC_AMPM (1 << 22) /* Ante Meridiem Post Meridiem Indicator */
245 254
246#define AT91_RTC_CALR (AT91_RTC + 0x0c) /* Calendar Register */ 255#define AT91_RTC_CALR (AT91_RTC + 0x0c) /* Calendar Register */
247#define AT91_RTC_CENT (0x7f << 0) /* Current Century */ 256#define AT91_RTC_CENT (0x7f << 0) /* Current Century */
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_tc.h b/include/asm-arm/arch-at91rm9200/at91rm9200_tc.h
new file mode 100644
index 000000000000..f4da752bb0c8
--- /dev/null
+++ b/include/asm-arm/arch-at91rm9200/at91rm9200_tc.h
@@ -0,0 +1,146 @@
1/*
2 * include/asm-arm/arch-at91rm9200/at91rm9200_tc.h
3 *
4 * Copyright (C) SAN People
5 *
6 * Timer/Counter Unit (TC) registers.
7 * Based on AT91RM9200 datasheet revision E.
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
15#ifndef AT91RM9200_TC_H
16#define AT91RM9200_TC_H
17
18#define AT91_TC_BCR 0xc0 /* TC Block Control Register */
19#define AT91_TC_SYNC (1 << 0) /* Synchro Command */
20
21#define AT91_TC_BMR 0xc4 /* TC Block Mode Register */
22#define AT91_TC_TC0XC0S (3 << 0) /* External Clock Signal 0 Selection */
23#define AT91_TC_TC0XC0S_TCLK0 (0 << 0)
24#define AT91_TC_TC0XC0S_NONE (1 << 0)
25#define AT91_TC_TC0XC0S_TIOA1 (2 << 0)
26#define AT91_TC_TC0XC0S_TIOA2 (3 << 0)
27#define AT91_TC_TC1XC1S (3 << 2) /* External Clock Signal 1 Selection */
28#define AT91_TC_TC1XC1S_TCLK1 (0 << 2)
29#define AT91_TC_TC1XC1S_NONE (1 << 2)
30#define AT91_TC_TC1XC1S_TIOA0 (2 << 2)
31#define AT91_TC_TC1XC1S_TIOA2 (3 << 2)
32#define AT91_TC_TC2XC2S (3 << 4) /* External Clock Signal 2 Selection */
33#define AT91_TC_TC2XC2S_TCLK2 (0 << 4)
34#define AT91_TC_TC2XC2S_NONE (1 << 4)
35#define AT91_TC_TC2XC2S_TIOA0 (2 << 4)
36#define AT91_TC_TC2XC2S_TIOA1 (3 << 4)
37
38
39#define AT91_TC_CCR 0x00 /* Channel Control Register */
40#define AT91_TC_CLKEN (1 << 0) /* Counter Clock Enable Command */
41#define AT91_TC_CLKDIS (1 << 1) /* Counter CLock Disable Command */
42#define AT91_TC_SWTRG (1 << 2) /* Software Trigger Command */
43
44#define AT91_TC_CMR 0x04 /* Channel Mode Register */
45#define AT91_TC_TCCLKS (7 << 0) /* Capture/Waveform Mode: Clock Selection */
46#define AT91_TC_TIMER_CLOCK1 (0 << 0)
47#define AT91_TC_TIMER_CLOCK2 (1 << 0)
48#define AT91_TC_TIMER_CLOCK3 (2 << 0)
49#define AT91_TC_TIMER_CLOCK4 (3 << 0)
50#define AT91_TC_TIMER_CLOCK5 (4 << 0)
51#define AT91_TC_XC0 (5 << 0)
52#define AT91_TC_XC1 (6 << 0)
53#define AT91_TC_XC2 (7 << 0)
54#define AT91_TC_CLKI (1 << 3) /* Capture/Waveform Mode: Clock Invert */
55#define AT91_TC_BURST (3 << 4) /* Capture/Waveform Mode: Burst Signal Selection */
56#define AT91_TC_LDBSTOP (1 << 6) /* Capture Mode: Counter Clock Stopped with TB Loading */
57#define AT91_TC_LDBDIS (1 << 7) /* Capture Mode: Counter Clock Disable with RB Loading */
58#define AT91_TC_ETRGEDG (3 << 8) /* Capture Mode: External Trigger Edge Selection */
59#define AT91_TC_ABETRG (1 << 10) /* Capture Mode: TIOA or TIOB External Trigger Selection */
60#define AT91_TC_CPCTRG (1 << 14) /* Capture Mode: RC Compare Trigger Enable */
61#define AT91_TC_WAVE (1 << 15) /* Capture/Waveform mode */
62#define AT91_TC_LDRA (3 << 16) /* Capture Mode: RA Loading Selection */
63#define AT91_TC_LDRB (3 << 18) /* Capture Mode: RB Loading Selection */
64
65#define AT91_TC_CPCSTOP (1 << 6) /* Waveform Mode: Counter Clock Stopped with RC Compare */
66#define AT91_TC_CPCDIS (1 << 7) /* Waveform Mode: Counter Clock Disable with RC Compare */
67#define AT91_TC_EEVTEDG (3 << 8) /* Waveform Mode: External Event Edge Selection */
68#define AT91_TC_EEVTEDG_NONE (0 << 8)
69#define AT91_TC_EEVTEDG_RISING (1 << 8)
70#define AT91_TC_EEVTEDG_FALLING (2 << 8)
71#define AT91_TC_EEVTEDG_BOTH (3 << 8)
72#define AT91_TC_EEVT (3 << 10) /* Waveform Mode: External Event Selection */
73#define AT91_TC_EEVT_TIOB (0 << 10)
74#define AT91_TC_EEVT_XC0 (1 << 10)
75#define AT91_TC_EEVT_XC1 (2 << 10)
76#define AT91_TC_EEVT_XC2 (3 << 10)
77#define AT91_TC_ENETRG (1 << 12) /* Waveform Mode: External Event Trigger Enable */
78#define AT91_TC_WAVESEL (3 << 13) /* Waveform Mode: Waveform Selection */
79#define AT91_TC_WAVESEL_UP (0 << 13)
80#define AT91_TC_WAVESEL_UP_AUTO (2 << 13)
81#define AT91_TC_WAVESEL_UPDOWN (1 << 13)
82#define AT91_TC_WAVESEL_UPDOWN_AUTO (3 << 13)
83#define AT91_TC_ACPA (3 << 16) /* Waveform Mode: RA Compare Effect on TIOA */
84#define AT91_TC_ACPA_NONE (0 << 16)
85#define AT91_TC_ACPA_SET (1 << 16)
86#define AT91_TC_ACPA_CLEAR (2 << 16)
87#define AT91_TC_ACPA_TOGGLE (3 << 16)
88#define AT91_TC_ACPC (3 << 18) /* Waveform Mode: RC Compre Effect on TIOA */
89#define AT91_TC_ACPC_NONE (0 << 18)
90#define AT91_TC_ACPC_SET (1 << 18)
91#define AT91_TC_ACPC_CLEAR (2 << 18)
92#define AT91_TC_ACPC_TOGGLE (3 << 18)
93#define AT91_TC_AEEVT (3 << 20) /* Waveform Mode: External Event Effect on TIOA */
94#define AT91_TC_AEEVT_NONE (0 << 20)
95#define AT91_TC_AEEVT_SET (1 << 20)
96#define AT91_TC_AEEVT_CLEAR (2 << 20)
97#define AT91_TC_AEEVT_TOGGLE (3 << 20)
98#define AT91_TC_ASWTRG (3 << 22) /* Waveform Mode: Software Trigger Effect on TIOA */
99#define AT91_TC_ASWTRG_NONE (0 << 22)
100#define AT91_TC_ASWTRG_SET (1 << 22)
101#define AT91_TC_ASWTRG_CLEAR (2 << 22)
102#define AT91_TC_ASWTRG_TOGGLE (3 << 22)
103#define AT91_TC_BCPB (3 << 24) /* Waveform Mode: RB Compare Effect on TIOB */
104#define AT91_TC_BCPB_NONE (0 << 24)
105#define AT91_TC_BCPB_SET (1 << 24)
106#define AT91_TC_BCPB_CLEAR (2 << 24)
107#define AT91_TC_BCPB_TOGGLE (3 << 24)
108#define AT91_TC_BCPC (3 << 26) /* Waveform Mode: RC Compare Effect on TIOB */
109#define AT91_TC_BCPC_NONE (0 << 26)
110#define AT91_TC_BCPC_SET (1 << 26)
111#define AT91_TC_BCPC_CLEAR (2 << 26)
112#define AT91_TC_BCPC_TOGGLE (3 << 26)
113#define AT91_TC_BEEVT (3 << 28) /* Waveform Mode: External Event Effect on TIOB */
114#define AT91_TC_BEEVT_NONE (0 << 28)
115#define AT91_TC_BEEVT_SET (1 << 28)
116#define AT91_TC_BEEVT_CLEAR (2 << 28)
117#define AT91_TC_BEEVT_TOGGLE (3 << 28)
118#define AT91_TC_BSWTRG (3 << 30) /* Waveform Mode: Software Trigger Effect on TIOB */
119#define AT91_TC_BSWTRG_NONE (0 << 30)
120#define AT91_TC_BSWTRG_SET (1 << 30)
121#define AT91_TC_BSWTRG_CLEAR (2 << 30)
122#define AT91_TC_BSWTRG_TOGGLE (3 << 30)
123
124#define AT91_TC_CV 0x10 /* Counter Value */
125#define AT91_TC_RA 0x14 /* Register A */
126#define AT91_TC_RB 0x18 /* Register B */
127#define AT91_TC_RC 0x1c /* Register C */
128
129#define AT91_TC_SR 0x20 /* Status Register */
130#define AT91_TC_COVFS (1 << 0) /* Counter Overflow Status */
131#define AT91_TC_LOVRS (1 << 1) /* Load Overrun Status */
132#define AT91_TC_CPAS (1 << 2) /* RA Compare Status */
133#define AT91_TC_CPBS (1 << 3) /* RB Compare Status */
134#define AT91_TC_CPCS (1 << 4) /* RC Compare Status */
135#define AT91_TC_LDRAS (1 << 5) /* RA Loading Status */
136#define AT91_TC_LDRBS (1 << 6) /* RB Loading Status */
137#define AT91_TC_ETRGS (1 << 7) /* External Trigger Status */
138#define AT91_TC_CLKSTA (1 << 16) /* Clock Enabling Status */
139#define AT91_TC_MTIOA (1 << 17) /* TIOA Mirror */
140#define AT91_TC_MTIOB (1 << 18) /* TIOB Mirror */
141
142#define AT91_TC_IER 0x24 /* Interrupt Enable Register */
143#define AT91_TC_IDR 0x28 /* Interrupt Disable Register */
144#define AT91_TC_IMR 0x2c /* Interrupt Mask Register */
145
146#endif
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_udp.h b/include/asm-arm/arch-at91rm9200/at91rm9200_udp.h
new file mode 100644
index 000000000000..951e3f61cef4
--- /dev/null
+++ b/include/asm-arm/arch-at91rm9200/at91rm9200_udp.h
@@ -0,0 +1,77 @@
1/*
2 * include/asm-arm/arch-at91rm9200/at91rm9200_udp.h
3 *
4 * Copyright (C) 2005 Ivan Kokshaysky
5 * Copyright (C) SAN People
6 *
7 * USB Device Port (UDP) registers.
8 * Based on AT91RM9200 datasheet revision E.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 */
15
16#ifndef AT91RM9200_UDP_H
17#define AT91RM9200_UDP_H
18
19#define AT91_UDP_FRM_NUM 0x00 /* Frame Number Register */
20#define AT91_UDP_NUM (0x7ff << 0) /* Frame Number */
21#define AT91_UDP_FRM_ERR (1 << 16) /* Frame Error */
22#define AT91_UDP_FRM_OK (1 << 17) /* Frame OK */
23
24#define AT91_UDP_GLB_STAT 0x04 /* Global State Register */
25#define AT91_UDP_FADDEN (1 << 0) /* Function Address Enable */
26#define AT91_UDP_CONFG (1 << 1) /* Configured */
27#define AT91_UDP_ESR (1 << 2) /* Enable Send Resume */
28#define AT91_UDP_RSMINPR (1 << 3) /* Resume has been sent */
29#define AT91_UDP_RMWUPE (1 << 4) /* Remote Wake Up Enable */
30
31#define AT91_UDP_FADDR 0x08 /* Function Address Register */
32#define AT91_UDP_FADD (0x7f << 0) /* Function Address Value */
33#define AT91_UDP_FEN (1 << 8) /* Function Enable */
34
35#define AT91_UDP_IER 0x10 /* Interrupt Enable Register */
36#define AT91_UDP_IDR 0x14 /* Interrupt Disable Register */
37#define AT91_UDP_IMR 0x18 /* Interrupt Mask Register */
38
39#define AT91_UDP_ISR 0x1c /* Interrupt Status Register */
40#define AT91_UDP_EP(n) (1 << (n)) /* Endpoint Interrupt Status */
41#define AT91_UDP_RXSUSP (1 << 8) /* USB Suspend Interrupt Status */
42#define AT91_UDP_RXRSM (1 << 9) /* USB Resume Interrupt Status */
43#define AT91_UDP_EXTRSM (1 << 10) /* External Resume Interrupt Status */
44#define AT91_UDP_SOFINT (1 << 11) /* Start of Frame Interrupt Status */
45#define AT91_UDP_ENDBUSRES (1 << 12) /* End of Bus Reset Interrpt Status */
46#define AT91_UDP_WAKEUP (1 << 13) /* USB Wakeup Interrupt Status */
47
48#define AT91_UDP_ICR 0x20 /* Interrupt Clear Register */
49#define AT91_UDP_RST_EP 0x28 /* Reset Endpoint Register */
50
51#define AT91_UDP_CSR(n) (0x30 + ((n) * 4)) /* Endpoint Control/Status Registers 0-7 */
52#define AT91_UDP_TXCOMP (1 << 0) /* Generates IN packet with data previously written in DPR */
53#define AT91_UDP_RX_DATA_BK0 (1 << 1) /* Receive Data Bank 0 */
54#define AT91_UDP_RXSETUP (1 << 2) /* Send STALL to the host */
55#define AT91_UDP_STALLSENT (1 << 3) /* Stall Sent / Isochronous error (Isochronous endpoints) */
56#define AT91_UDP_TXPKTRDY (1 << 4) /* Transmit Packet Ready */
57#define AT91_UDP_FORCESTALL (1 << 5) /* Force Stall */
58#define AT91_UDP_RX_DATA_BK1 (1 << 6) /* Receive Data Bank 1 */
59#define AT91_UDP_DIR (1 << 7) /* Transfer Direction */
60#define AT91_UDP_EPTYPE (7 << 8) /* Endpoint Type */
61#define AT91_UDP_EPTYPE_CTRL (0 << 8)
62#define AT91_UDP_EPTYPE_ISO_OUT (1 << 8)
63#define AT91_UDP_EPTYPE_BULK_OUT (2 << 8)
64#define AT91_UDP_EPTYPE_INT_OUT (3 << 8)
65#define AT91_UDP_EPTYPE_ISO_IN (5 << 8)
66#define AT91_UDP_EPTYPE_BULK_IN (6 << 8)
67#define AT91_UDP_EPTYPE_INT_IN (7 << 8)
68#define AT91_UDP_DTGLE (1 << 11) /* Data Toggle */
69#define AT91_UDP_EPEDS (1 << 15) /* Endpoint Enable/Disable */
70#define AT91_UDP_RXBYTECNT (0x7ff << 16) /* Number of bytes in FIFO */
71
72#define AT91_UDP_FDR(n) (0x50 + ((n) * 4)) /* Endpoint FIFO Data Registers 0-7 */
73
74#define AT91_UDP_TXVC 0x74 /* Transceiver Control Register */
75#define AT91_UDP_TXVC_TXVDIS (1 << 8) /* Transceiver Disable */
76
77#endif
diff --git a/include/asm-arm/arch-at91rm9200/board.h b/include/asm-arm/arch-at91rm9200/board.h
index 4fdef13d01d4..1fdd70b23809 100644
--- a/include/asm-arm/arch-at91rm9200/board.h
+++ b/include/asm-arm/arch-at91rm9200/board.h
@@ -31,14 +31,9 @@
31#ifndef __ASM_ARCH_BOARD_H 31#ifndef __ASM_ARCH_BOARD_H
32#define __ASM_ARCH_BOARD_H 32#define __ASM_ARCH_BOARD_H
33 33
34 /* Clocks */
35extern unsigned long at91_master_clock;
36
37 /* Serial Port */
38extern int at91_serial_map[AT91_NR_UART];
39extern int at91_console_port;
40
41#include <linux/mtd/partitions.h> 34#include <linux/mtd/partitions.h>
35#include <linux/device.h>
36#include <linux/spi/spi.h>
42 37
43 /* USB Device */ 38 /* USB Device */
44struct at91_udc_data { 39struct at91_udc_data {
@@ -91,10 +86,25 @@ struct at91_nand_data {
91extern void __init at91_add_device_nand(struct at91_nand_data *data); 86extern void __init at91_add_device_nand(struct at91_nand_data *data);
92 87
93 /* I2C*/ 88 /* I2C*/
94void __init at91_add_device_i2c(void); 89extern void __init at91_add_device_i2c(void);
90
91 /* SPI */
92extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices);
95 93
96 /* RTC */ 94 /* Serial */
97void __init at91_add_device_rtc(void); 95struct at91_uart_config {
96 unsigned short console_tty; /* tty number of serial console */
97 unsigned short nr_tty; /* number of serial tty's */
98 short tty_map[]; /* map UART to tty number */
99};
100extern struct platform_device *at91_default_console_device;
101extern void __init at91_init_serial(struct at91_uart_config *config);
102
103struct at91_uart_data {
104 short use_dma_tx; /* use transmit DMA? */
105 short use_dma_rx; /* use receive DMA? */
106};
107extern void __init at91_add_device_serial(void);
98 108
99 /* LEDs */ 109 /* LEDs */
100extern u8 at91_leds_cpu; 110extern u8 at91_leds_cpu;
diff --git a/include/asm-arm/arch-at91rm9200/gpio.h b/include/asm-arm/arch-at91rm9200/gpio.h
index 6176ab2dc417..dbde1baaf251 100644
--- a/include/asm-arm/arch-at91rm9200/gpio.h
+++ b/include/asm-arm/arch-at91rm9200/gpio.h
@@ -13,6 +13,8 @@
13#ifndef __ASM_ARCH_AT91RM9200_GPIO_H 13#ifndef __ASM_ARCH_AT91RM9200_GPIO_H
14#define __ASM_ARCH_AT91RM9200_GPIO_H 14#define __ASM_ARCH_AT91RM9200_GPIO_H
15 15
16#include <asm/irq.h>
17
16#define PIN_BASE NR_AIC_IRQS 18#define PIN_BASE NR_AIC_IRQS
17 19
18#define PQFP_GPIO_BANKS 3 /* PQFP package has 3 banks */ 20#define PQFP_GPIO_BANKS 3 /* PQFP package has 3 banks */
@@ -188,6 +190,9 @@ extern int at91_set_multi_drive(unsigned pin, int is_on);
188/* callable at any time */ 190/* callable at any time */
189extern int at91_set_gpio_value(unsigned pin, int value); 191extern int at91_set_gpio_value(unsigned pin, int value);
190extern int at91_get_gpio_value(unsigned pin); 192extern int at91_get_gpio_value(unsigned pin);
193
194extern void at91_gpio_suspend(void);
195extern void at91_gpio_resume(void);
191#endif 196#endif
192 197
193#endif 198#endif
diff --git a/include/asm-arm/arch-at91rm9200/hardware.h b/include/asm-arm/arch-at91rm9200/hardware.h
index 59e6f44d3a0d..235d39d91107 100644
--- a/include/asm-arm/arch-at91rm9200/hardware.h
+++ b/include/asm-arm/arch-at91rm9200/hardware.h
@@ -50,9 +50,12 @@
50#define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91_BASE_TCB0) 50#define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91_BASE_TCB0)
51 51
52/* Internal SRAM */ 52/* Internal SRAM */
53#define AT91_BASE_SRAM 0x00200000 /* Internal SRAM base address */ 53#define AT91_SRAM_BASE 0x00200000 /* Internal SRAM base address */
54#define AT91_SRAM_SIZE 0x00004000 /* Internal SRAM SIZE (16Kb) */ 54#define AT91_SRAM_SIZE 0x00004000 /* Internal SRAM SIZE (16Kb) */
55 55
56 /* Internal SRAM is mapped below the IO devices */
57#define AT91_SRAM_VIRT_BASE (AT91_IO_VIRT_BASE - AT91_SRAM_SIZE)
58
56/* Serial ports */ 59/* Serial ports */
57#define AT91_NR_UART 5 /* 4 USART3's and one DBGU port */ 60#define AT91_NR_UART 5 /* 4 USART3's and one DBGU port */
58 61
@@ -81,14 +84,14 @@ static inline unsigned int at91_sys_read(unsigned int reg_offset)
81{ 84{
82 void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; 85 void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
83 86
84 return readl(addr + reg_offset); 87 return __raw_readl(addr + reg_offset);
85} 88}
86 89
87static inline void at91_sys_write(unsigned int reg_offset, unsigned long value) 90static inline void at91_sys_write(unsigned int reg_offset, unsigned long value)
88{ 91{
89 void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; 92 void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
90 93
91 writel(value, addr + reg_offset); 94 __raw_writel(value, addr + reg_offset);
92} 95}
93#endif 96#endif
94 97
diff --git a/include/asm-arm/arch-at91rm9200/io.h b/include/asm-arm/arch-at91rm9200/io.h
index 23e670d85c9d..88fd1bebcef3 100644
--- a/include/asm-arm/arch-at91rm9200/io.h
+++ b/include/asm-arm/arch-at91rm9200/io.h
@@ -21,7 +21,6 @@
21#ifndef __ASM_ARCH_IO_H 21#ifndef __ASM_ARCH_IO_H
22#define __ASM_ARCH_IO_H 22#define __ASM_ARCH_IO_H
23 23
24#include <asm/arch/at91rm9200.h>
25#include <asm/io.h> 24#include <asm/io.h>
26 25
27#define IO_SPACE_LIMIT 0xFFFFFFFF 26#define IO_SPACE_LIMIT 0xFFFFFFFF
diff --git a/include/asm-arm/arch-at91rm9200/irqs.h b/include/asm-arm/arch-at91rm9200/irqs.h
index 27b0497f1b36..2dc93b174a8f 100644
--- a/include/asm-arm/arch-at91rm9200/irqs.h
+++ b/include/asm-arm/arch-at91rm9200/irqs.h
@@ -37,8 +37,6 @@
37 * symbols in gpio.h for ones handled indirectly as GPIOs. 37 * symbols in gpio.h for ones handled indirectly as GPIOs.
38 * We make provision for 4 banks of GPIO. 38 * We make provision for 4 banks of GPIO.
39 */ 39 */
40#include <asm/arch/gpio.h>
41
42#define NR_IRQS (NR_AIC_IRQS + (4 * 32)) 40#define NR_IRQS (NR_AIC_IRQS + (4 * 32))
43 41
44 42
diff --git a/include/asm-arm/arch-at91rm9200/pio.h b/include/asm-arm/arch-at91rm9200/pio.h
deleted file mode 100644
index a89501b4a703..000000000000
--- a/include/asm-arm/arch-at91rm9200/pio.h
+++ /dev/null
@@ -1,115 +0,0 @@
1/*
2 * include/asm-arm/arch-at91rm9200/pio.h
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
13#ifndef __ASM_ARCH_PIO_H
14#define __ASM_ARCH_PIO_H
15
16#include <asm/arch/hardware.h>
17
18static inline void AT91_CfgPIO_USART0(void) {
19 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA17_TXD0 | AT91_PA18_RXD0 | AT91_PA20_CTS0);
20
21 /*
22 * Errata #39 - RTS0 is not internally connected to PA21. We need to drive
23 * the pin manually. Default is off (RTS is active low).
24 */
25 at91_sys_write(AT91_PIOA + PIO_PER, AT91_PA21_RTS0);
26 at91_sys_write(AT91_PIOA + PIO_OER, AT91_PA21_RTS0);
27 at91_sys_write(AT91_PIOA + PIO_SODR, AT91_PA21_RTS0);
28}
29
30static inline void AT91_CfgPIO_USART1(void) {
31 at91_sys_write(AT91_PIOB + PIO_PDR, AT91_PB18_RI1 | AT91_PB19_DTR1
32 | AT91_PB20_TXD1 | AT91_PB21_RXD1 | AT91_PB23_DCD1
33 | AT91_PB24_CTS1 | AT91_PB25_DSR1 | AT91_PB26_RTS1);
34}
35
36static inline void AT91_CfgPIO_USART2(void) {
37 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA22_RXD2 | AT91_PA23_TXD2);
38}
39
40static inline void AT91_CfgPIO_USART3(void) {
41 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA5_TXD3 | AT91_PA6_RXD3);
42 at91_sys_write(AT91_PIOA + PIO_BSR, AT91_PA5_TXD3 | AT91_PA6_RXD3);
43}
44
45static inline void AT91_CfgPIO_DBGU(void) {
46 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA31_DTXD | AT91_PA30_DRXD);
47}
48
49/*
50 * Enable the Two-Wire interface.
51 */
52static inline void AT91_CfgPIO_TWI(void) {
53 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA25_TWD | AT91_PA26_TWCK);
54 at91_sys_write(AT91_PIOA + PIO_ASR, AT91_PA25_TWD | AT91_PA26_TWCK);
55 at91_sys_write(AT91_PIOA + PIO_MDER, AT91_PA25_TWD | AT91_PA26_TWCK); /* open drain */
56}
57
58/*
59 * Enable the Serial Peripheral Interface.
60 */
61static inline void AT91_CfgPIO_SPI(void) {
62 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA0_MISO | AT91_PA1_MOSI | AT91_PA2_SPCK);
63}
64
65static inline void AT91_CfgPIO_SPI_CS0(void) {
66 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA3_NPCS0);
67}
68
69static inline void AT91_CfgPIO_SPI_CS1(void) {
70 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA4_NPCS1);
71}
72
73static inline void AT91_CfgPIO_SPI_CS2(void) {
74 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA5_NPCS2);
75}
76
77static inline void AT91_CfgPIO_SPI_CS3(void) {
78 at91_sys_write(AT91_PIOA + PIO_PDR, AT91_PA6_NPCS3);
79}
80
81/*
82 * Select the DataFlash card.
83 */
84static inline void AT91_CfgPIO_DataFlashCard(void) {
85 at91_sys_write(AT91_PIOB + PIO_PER, AT91_PIO_P(7));
86 at91_sys_write(AT91_PIOB + PIO_OER, AT91_PIO_P(7));
87 at91_sys_write(AT91_PIOB + PIO_CODR, AT91_PIO_P(7));
88}
89
90/*
91 * Enable NAND Flash (SmartMedia) interface.
92 */
93static inline void AT91_CfgPIO_SmartMedia(void) {
94 /* enable PC0=SMCE, PC1=SMOE, PC3=SMWE, A21=CLE, A22=ALE */
95 at91_sys_write(AT91_PIOC + PIO_ASR, AT91_PC0_BFCK | AT91_PC1_BFRDY_SMOE | AT91_PC3_BFBAA_SMWE);
96 at91_sys_write(AT91_PIOC + PIO_PDR, AT91_PC0_BFCK | AT91_PC1_BFRDY_SMOE | AT91_PC3_BFBAA_SMWE);
97
98 /* Configure PC2 as input (signal READY of the SmartMedia) */
99 at91_sys_write(AT91_PIOC + PIO_PER, AT91_PC2_BFAVD); /* enable direct output enable */
100 at91_sys_write(AT91_PIOC + PIO_ODR, AT91_PC2_BFAVD); /* disable output */
101
102 /* Configure PB1 as input (signal Card Detect of the SmartMedia) */
103 at91_sys_write(AT91_PIOB + PIO_PER, AT91_PIO_P(1)); /* enable direct output enable */
104 at91_sys_write(AT91_PIOB + PIO_ODR, AT91_PIO_P(1)); /* disable output */
105}
106
107static inline int AT91_PIO_SmartMedia_RDY(void) {
108 return (at91_sys_read(AT91_PIOC + PIO_PDSR) & AT91_PIO_P(2)) ? 1 : 0;
109}
110
111static inline int AT91_PIO_SmartMedia_CardDetect(void) {
112 return (at91_sys_read(AT91_PIOB + PIO_PDSR) & AT91_PIO_P(1)) ? 1 : 0;
113}
114
115#endif
diff --git a/include/asm-arm/arch-at91rm9200/system.h b/include/asm-arm/arch-at91rm9200/system.h
index 29c42655f05c..945e66507a78 100644
--- a/include/asm-arm/arch-at91rm9200/system.h
+++ b/include/asm-arm/arch-at91rm9200/system.h
@@ -48,4 +48,12 @@ static inline void arch_reset(char mode)
48 at91_sys_write(AT91_ST_CR, AT91_ST_WDRST); 48 at91_sys_write(AT91_ST_CR, AT91_ST_WDRST);
49} 49}
50 50
51#define ARCH_ID_AT91RM9200 0x09200080
52#define ARCH_ID_AT91SAM9261 0x019000a0
53
54static inline unsigned long arch_identify(void)
55{
56 return at91_sys_read(AT91_DBGU_CIDR) & (AT91_CIDR_EPROC | AT91_CIDR_ARCH);
57}
58
51#endif 59#endif
diff --git a/include/asm-arm/arch-at91rm9200/vmalloc.h b/include/asm-arm/arch-at91rm9200/vmalloc.h
index 34d9718feb90..4c367eb57f47 100644
--- a/include/asm-arm/arch-at91rm9200/vmalloc.h
+++ b/include/asm-arm/arch-at91rm9200/vmalloc.h
@@ -21,6 +21,6 @@
21#ifndef __ASM_ARCH_VMALLOC_H 21#ifndef __ASM_ARCH_VMALLOC_H
22#define __ASM_ARCH_VMALLOC_H 22#define __ASM_ARCH_VMALLOC_H
23 23
24#define VMALLOC_END (AT91_IO_VIRT_BASE & PGDIR_MASK) 24#define VMALLOC_END (AT91_SRAM_VIRT_BASE & PGDIR_MASK)
25 25
26#endif 26#endif
diff --git a/include/asm-arm/mach/serial_at91rm9200.h b/include/asm-arm/mach/serial_at91.h
index 98f4b0cb883c..18bc4e00e475 100644
--- a/include/asm-arm/mach/serial_at91rm9200.h
+++ b/include/asm-arm/mach/serial_at91.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * linux/include/asm-arm/mach/serial_at91rm9200.h 2 * linux/include/asm-arm/mach/serial_at91.h
3 * 3 *
4 * Based on serial_sa1100.h by Nicolas Pitre 4 * Based on serial_sa1100.h by Nicolas Pitre
5 * 5 *
@@ -15,7 +15,7 @@ struct uart_port;
15 * This is a temporary structure for registering these 15 * This is a temporary structure for registering these
16 * functions; it is intended to be discarded after boot. 16 * functions; it is intended to be discarded after boot.
17 */ 17 */
18struct at91rm9200_port_fns { 18struct at91_port_fns {
19 void (*set_mctrl)(struct uart_port *, u_int); 19 void (*set_mctrl)(struct uart_port *, u_int);
20 u_int (*get_mctrl)(struct uart_port *); 20 u_int (*get_mctrl)(struct uart_port *);
21 void (*enable_ms)(struct uart_port *); 21 void (*enable_ms)(struct uart_port *);
@@ -26,11 +26,9 @@ struct at91rm9200_port_fns {
26}; 26};
27 27
28#if defined(CONFIG_SERIAL_AT91) 28#if defined(CONFIG_SERIAL_AT91)
29void at91_register_uart_fns(struct at91rm9200_port_fns *fns); 29void at91_register_uart_fns(struct at91_port_fns *fns);
30void at91_register_uart(int idx, int port);
31#else 30#else
32#define at91_register_uart_fns(fns) do { } while (0) 31#define at91_register_uart_fns(fns) do { } while (0)
33#define at91_register_uart(idx,port) do { } while (0)
34#endif 32#endif
35 33
36 34
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index bd14858121ea..56c2a1db4a90 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -67,8 +67,8 @@
67/* Parisc type numbers. */ 67/* Parisc type numbers. */
68#define PORT_MUX 48 68#define PORT_MUX 48
69 69
70/* Atmel AT91RM9200 SoC */ 70/* Atmel AT91xxx SoC */
71#define PORT_AT91RM9200 49 71#define PORT_AT91 49
72 72
73/* Macintosh Zilog type numbers */ 73/* Macintosh Zilog type numbers */
74#define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ 74#define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */