linux 2.6.24-rc6: add at91sam9260ek support to support SDIO Wifi testing
[openembedded.git] / packages / linux / linux-2.6.23+2.6.24-rc6 / at91sam9260ek / 0001-2.6.23-at91.patch
blob3ea8176a10a4f7312d3c3ec64ebe139dc279bdd5
1 From 2407b971cc3fa6f316e1b5f61e003d7aec6b8917 Mon Sep 17 00:00:00 2001
2 From: Cliff Brake <cbrake@happy.(none)>
3 Date: Fri, 21 Dec 2007 17:36:05 -0500
4 Subject: [PATCH] 2.6.23-at91
6 ---
7 arch/arm/Kconfig | 1 +
8 arch/arm/boot/compressed/head-at91rm9200.S | 24 +
9 arch/arm/configs/at91rm9200dk_defconfig | 4 +-
10 arch/arm/configs/at91rm9200ek_defconfig | 4 +-
11 arch/arm/configs/at91sam9260ek_defconfig | 139 ++-
12 arch/arm/configs/at91sam9261ek_defconfig | 114 ++-
13 arch/arm/configs/at91sam9263ek_defconfig | 60 +-
14 arch/arm/configs/ateb9200_defconfig | 2 +-
15 arch/arm/configs/cam60_defconfig | 954 +++++++++++++++++
16 arch/arm/configs/csb337_defconfig | 4 +-
17 arch/arm/configs/csb637_defconfig | 4 +-
18 arch/arm/configs/ecbat91_defconfig | 1315 ++++++++++++++++++++++++
19 arch/arm/configs/homematic_defconfig | 1263 +++++++++++++++++++++++
20 arch/arm/configs/kafa_defconfig | 4 +-
21 arch/arm/configs/kb9202_defconfig | 799 ++++++++++++---
22 arch/arm/configs/picotux200_defconfig | 4 +-
23 arch/arm/configs/sam9_l9260_defconfig | 1098 ++++++++++++++++++++
24 arch/arm/mach-at91/Kconfig | 86 ++-
25 arch/arm/mach-at91/Makefile | 12 +-
26 arch/arm/mach-at91/at91rm9200.c | 60 +-
27 arch/arm/mach-at91/at91rm9200_devices.c | 58 +-
28 arch/arm/mach-at91/at91sam9260.c | 58 +-
29 arch/arm/mach-at91/at91sam9260_devices.c | 74 ++
30 arch/arm/mach-at91/at91sam9261.c | 53 +-
31 arch/arm/mach-at91/at91sam9261_devices.c | 86 ++
32 arch/arm/mach-at91/at91sam9263.c | 55 +-
33 arch/arm/mach-at91/at91sam9263_devices.c | 124 +++
34 arch/arm/mach-at91/at91sam9rl.c | 25 +
35 arch/arm/mach-at91/at91sam9rl_devices.c | 74 ++
36 arch/arm/mach-at91/board-cam60.c | 148 +++
37 arch/arm/mach-at91/board-chub.c | 132 +++
38 arch/arm/mach-at91/board-csb337.c | 58 +
39 arch/arm/mach-at91/board-dk.c | 193 ++++-
40 arch/arm/mach-at91/board-ecbat91.c | 183 ++++
41 arch/arm/mach-at91/board-ek.c | 210 ++++-
42 arch/arm/mach-at91/board-homematic.c | 163 +++
43 arch/arm/mach-at91/board-kb9202.c | 46 +
44 arch/arm/mach-at91/board-sam9-l9260.c | 200 ++++
45 arch/arm/mach-at91/board-sam9261ek.c | 77 ++-
46 arch/arm/mach-at91/board-sam9263ek.c | 52 +
47 arch/arm/mach-at91/board-tms.c | 198 ++++
48 arch/arm/mach-at91/clock.c | 18 +
49 arch/arm/mach-at91/generic.h | 1 +
50 arch/arm/mach-at91/gpio.c | 62 ++
51 arch/arm/mach-at91/ics1523.c | 207 ++++
52 arch/arm/mach-at91/pm.c | 42 +-
53 arch/arm/mach-at91/pm_slowclock.S | 172 +++
54 arch/arm/mach-at91/tclib.c | 17 +
55 arch/arm/mach-at91/tclib.h | 11 +
56 arch/arm/mach-ks8695/Makefile | 6 +-
57 arch/arm/mach-ks8695/board-micrel.c | 2 +-
58 arch/arm/mach-ks8695/devices.c | 21 +
59 arch/arm/mach-ks8695/gpio.c | 83 ++
60 arch/arm/mach-ks8695/leds.c | 94 ++
61 arch/arm/mach-ks8695/pci.c | 324 ++++++
62 arch/arm/tools/mach-types | 200 ++++-
63 drivers/char/Kconfig | 16 +
64 drivers/char/Makefile | 2 +
65 drivers/char/at91_spi.c | 336 ++++++
66 drivers/char/at91_spidev.c | 233 +++++
67 drivers/char/watchdog/at91sam9_wdt.c | 258 +++++
68 drivers/i2c/busses/Kconfig | 16 +
69 drivers/i2c/busses/Makefile | 1 +
70 drivers/i2c/busses/i2c-at91.c | 18 +-
71 drivers/i2c/busses/i2c-pca.c | 213 ++++
72 drivers/mtd/devices/Kconfig | 14 +-
73 drivers/mtd/devices/Makefile | 1 +
74 drivers/mtd/devices/at91_dataflash.c | 673 ++++++++++++
75 drivers/mtd/devices/mtd_dataflash.c | 2 +-
76 drivers/net/arm/at91_ether.c | 21 +-
77 drivers/rtc/Kconfig | 6 +
78 drivers/rtc/Makefile | 1 +
79 drivers/rtc/rtc-at91sam9.c | 437 ++++++++
80 drivers/serial/atmel_serial.c | 294 ++++++-
81 drivers/spi/Kconfig | 9 +
82 drivers/spi/Makefile | 1 +
83 drivers/spi/spi_at91_bitbang.c | 207 ++++
84 drivers/usb/gadget/at91_udc.c | 2 +-
85 drivers/usb/host/ohci-at91.c | 2 +-
86 drivers/video/Kconfig | 13 +-
87 drivers/video/Makefile | 3 +-
88 drivers/video/backlight/Kconfig | 8 +
89 drivers/video/backlight/Makefile | 1 +
90 drivers/video/backlight/kb920x_bl.c | 164 +++
91 drivers/video/s1d15605fb.c | 658 ++++++++++++
92 drivers/watchdog/Kconfig | 8 +
93 drivers/watchdog/Makefile | 1 +
94 include/asm-arm/arch-at91/at91_lcdc.h | 148 ---
95 include/asm-arm/arch-at91/at91_pmc.h | 4 +-
96 include/asm-arm/arch-at91/at91_twi.h | 11 +
97 include/asm-arm/arch-at91/at91sam9260_matrix.h | 2 +-
98 include/asm-arm/arch-at91/board.h | 5 +
99 include/asm-arm/arch-at91/entry-macro.S | 2 +-
100 include/asm-arm/arch-at91/ics1523.h | 154 +++
101 include/asm-arm/arch-at91/spi.h | 54 +
102 include/asm-arm/arch-ks8695/devices.h | 5 +
103 include/asm-arm/arch-ks8695/regs-gpio.h | 2 +
104 include/linux/clk.h | 20 +
105 include/linux/i2c-id.h | 1 +
106 sound/soc/at91/eti_b1_wm8731.c | 30 +-
107 100 files changed, 13000 insertions(+), 535 deletions(-)
108 create mode 100644 arch/arm/configs/cam60_defconfig
109 create mode 100644 arch/arm/configs/ecbat91_defconfig
110 create mode 100644 arch/arm/configs/homematic_defconfig
111 create mode 100644 arch/arm/configs/sam9_l9260_defconfig
112 create mode 100644 arch/arm/mach-at91/board-cam60.c
113 create mode 100644 arch/arm/mach-at91/board-chub.c
114 create mode 100644 arch/arm/mach-at91/board-ecbat91.c
115 create mode 100644 arch/arm/mach-at91/board-homematic.c
116 create mode 100644 arch/arm/mach-at91/board-sam9-l9260.c
117 create mode 100644 arch/arm/mach-at91/board-tms.c
118 create mode 100644 arch/arm/mach-at91/ics1523.c
119 create mode 100644 arch/arm/mach-at91/pm_slowclock.S
120 create mode 100644 arch/arm/mach-at91/tclib.c
121 create mode 100644 arch/arm/mach-at91/tclib.h
122 create mode 100644 arch/arm/mach-ks8695/leds.c
123 create mode 100644 arch/arm/mach-ks8695/pci.c
124 create mode 100644 drivers/char/at91_spi.c
125 create mode 100644 drivers/char/at91_spidev.c
126 create mode 100644 drivers/char/watchdog/at91sam9_wdt.c
127 create mode 100644 drivers/i2c/busses/i2c-pca.c
128 create mode 100644 drivers/mtd/devices/at91_dataflash.c
129 create mode 100644 drivers/rtc/rtc-at91sam9.c
130 create mode 100644 drivers/spi/spi_at91_bitbang.c
131 create mode 100644 drivers/video/backlight/kb920x_bl.c
132 create mode 100644 drivers/video/s1d15605fb.c
133 delete mode 100644 include/asm-arm/arch-at91/at91_lcdc.h
134 create mode 100644 include/asm-arm/arch-at91/ics1523.h
135 create mode 100644 include/asm-arm/arch-at91/spi.h
137 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
138 index c4de2d4..c2051fb 100644
139 --- a/arch/arm/Kconfig
140 +++ b/arch/arm/Kconfig
141 @@ -657,6 +657,7 @@ config HZ
142 default 128 if ARCH_L7200
143 default 200 if ARCH_EBSA110 || ARCH_S3C2410
144 default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
145 + default AT91_TIMER_HZ if ARCH_AT91
146 default 100
148 config AEABI
149 diff --git a/arch/arm/boot/compressed/head-at91rm9200.S b/arch/arm/boot/compressed/head-at91rm9200.S
150 index 11782cc..7748ce2 100644
151 --- a/arch/arm/boot/compressed/head-at91rm9200.S
152 +++ b/arch/arm/boot/compressed/head-at91rm9200.S
153 @@ -67,12 +67,36 @@
154 cmp r7, r3
155 beq 99f
157 + @ emQbit ECB_AT91 : 1072
158 + mov r3, #(MACH_TYPE_ECBAT91 & 0xff)
159 + orr r3, r3, #(MACH_TYPE_ECBAT91 & 0xff00)
160 + cmp r7, r3
161 + beq 99f
163 @ Ajeco 1ARM : 1075
164 mov r3, #(MACH_TYPE_ONEARM & 0xff)
165 orr r3, r3, #(MACH_TYPE_ONEARM & 0xff00)
166 cmp r7, r3
167 beq 99f
169 + @ Promwad Chub : 1181
170 + mov r3, #(MACH_TYPE_CHUB & 0xff)
171 + orr r3, r3, #(MACH_TYPE_CHUB & 0xff00)
172 + cmp r7, r3
173 + beq 99f
175 + @ Sweda TMS-100: 1277
176 + mov r3, #(MACH_TYPE_SWEDATMS & 0xff)
177 + orr r3, r3, #(MACH_TYPE_SWEDATMS & 0xff00)
178 + cmp r7, r3
179 + beq 99f
181 + @ eQ-3 HomeMatic: 1392
182 + mov r3, #(MACH_TYPE_HOMEMATIC & 0xff)
183 + orr r3, r3, #(MACH_TYPE_HOMEMATIC & 0xff00)
184 + cmp r7, r3
185 + beq 99f
187 @ Unknown board, use the AT91RM9200DK board
188 @ mov r7, #MACH_TYPE_AT91RM9200
189 mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
190 diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig
191 index e10d003..2dbbbc3 100644
192 --- a/arch/arm/configs/at91rm9200dk_defconfig
193 +++ b/arch/arm/configs/at91rm9200dk_defconfig
194 @@ -620,14 +620,14 @@ CONFIG_I2C_CHARDEV=y
196 # I2C Algorithms
198 -# CONFIG_I2C_ALGOBIT is not set
199 +CONFIG_I2C_ALGOBIT=y
200 # CONFIG_I2C_ALGOPCF is not set
201 # CONFIG_I2C_ALGOPCA is not set
204 # I2C Hardware Bus support
206 -CONFIG_I2C_AT91=y
207 +CONFIG_I2C_GPIO=y
208 # CONFIG_I2C_PARPORT_LIGHT is not set
209 # CONFIG_I2C_STUB is not set
210 # CONFIG_I2C_PCA_ISA is not set
211 diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig
212 index 834dddb..6e994f7 100644
213 --- a/arch/arm/configs/at91rm9200ek_defconfig
214 +++ b/arch/arm/configs/at91rm9200ek_defconfig
215 @@ -594,14 +594,14 @@ CONFIG_I2C_CHARDEV=y
217 # I2C Algorithms
219 -# CONFIG_I2C_ALGOBIT is not set
220 +CONFIG_I2C_ALGOBIT=y
221 # CONFIG_I2C_ALGOPCF is not set
222 # CONFIG_I2C_ALGOPCA is not set
225 # I2C Hardware Bus support
227 -CONFIG_I2C_AT91=y
228 +CONFIG_I2C_GPIO=y
229 # CONFIG_I2C_PARPORT_LIGHT is not set
230 # CONFIG_I2C_STUB is not set
231 # CONFIG_I2C_PCA_ISA is not set
232 diff --git a/arch/arm/configs/at91sam9260ek_defconfig b/arch/arm/configs/at91sam9260ek_defconfig
233 index 46b0c73..9a8890a 100644
234 --- a/arch/arm/configs/at91sam9260ek_defconfig
235 +++ b/arch/arm/configs/at91sam9260ek_defconfig
236 @@ -1,18 +1,24 @@
238 # Automatically generated make config: don't edit
239 -# Linux kernel version: 2.6.19-rc6
240 -# Fri Nov 17 18:42:21 2006
241 +# Linux kernel version: 2.6.21
242 +# Mon May 7 11:42:02 2007
244 CONFIG_ARM=y
245 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
246 +CONFIG_GENERIC_GPIO=y
247 # CONFIG_GENERIC_TIME is not set
248 CONFIG_MMU=y
249 +# CONFIG_NO_IOPORT is not set
250 CONFIG_GENERIC_HARDIRQS=y
251 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
252 CONFIG_HARDIRQS_SW_RESEND=y
253 CONFIG_GENERIC_IRQ_PROBE=y
254 CONFIG_RWSEM_GENERIC_SPINLOCK=y
255 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
256 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
257 CONFIG_GENERIC_HWEIGHT=y
258 CONFIG_GENERIC_CALIBRATE_DELAY=y
259 +CONFIG_ZONE_DMA=y
260 CONFIG_VECTORS_BASE=0xffff0000
261 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
263 @@ -31,13 +37,16 @@ CONFIG_LOCALVERSION=""
264 # CONFIG_SWAP is not set
265 CONFIG_SYSVIPC=y
266 # CONFIG_IPC_NS is not set
267 +CONFIG_SYSVIPC_SYSCTL=y
268 # CONFIG_POSIX_MQUEUE is not set
269 # CONFIG_BSD_PROCESS_ACCT is not set
270 # CONFIG_TASKSTATS is not set
271 # CONFIG_UTS_NS is not set
272 # CONFIG_AUDIT is not set
273 # CONFIG_IKCONFIG is not set
274 +CONFIG_SYSFS_DEPRECATED=y
275 # CONFIG_RELAY is not set
276 +CONFIG_BLK_DEV_INITRD=y
277 CONFIG_INITRAMFS_SOURCE=""
278 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
279 CONFIG_SYSCTL=y
280 @@ -76,7 +85,9 @@ CONFIG_KMOD=y
281 # Block layer
283 CONFIG_BLOCK=y
284 +# CONFIG_LBD is not set
285 # CONFIG_BLK_DEV_IO_TRACE is not set
286 +# CONFIG_LSF is not set
289 # IO Schedulers
290 @@ -110,10 +121,12 @@ CONFIG_ARCH_AT91=y
291 # CONFIG_ARCH_IMX is not set
292 # CONFIG_ARCH_IOP32X is not set
293 # CONFIG_ARCH_IOP33X is not set
294 +# CONFIG_ARCH_IOP13XX is not set
295 # CONFIG_ARCH_IXP4XX is not set
296 # CONFIG_ARCH_IXP2000 is not set
297 # CONFIG_ARCH_IXP23XX is not set
298 # CONFIG_ARCH_L7200 is not set
299 +# CONFIG_ARCH_NS9XXX is not set
300 # CONFIG_ARCH_PNX4008 is not set
301 # CONFIG_ARCH_PXA is not set
302 # CONFIG_ARCH_RPC is not set
303 @@ -129,21 +142,29 @@ CONFIG_ARCH_AT91=y
304 # CONFIG_ARCH_AT91RM9200 is not set
305 CONFIG_ARCH_AT91SAM9260=y
306 # CONFIG_ARCH_AT91SAM9261 is not set
307 +# CONFIG_ARCH_AT91SAM9263 is not set
310 +# AT91SAM9260 Variants
312 +# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
315 -# AT91SAM9260 Board Type
316 +# AT91SAM9260 / AT91SAM9XE Board Type
318 CONFIG_MACH_AT91SAM9260EK=y
321 # AT91 Board Options
323 +# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
324 # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
327 # AT91 Feature Selections
329 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
330 +# CONFIG_ATMEL_TCLIB is not set
333 # Processor Type
334 @@ -166,6 +187,7 @@ CONFIG_CPU_CP15_MMU=y
335 # CONFIG_CPU_DCACHE_DISABLE is not set
336 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
337 # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
338 +# CONFIG_OUTER_CACHE is not set
341 # Bus support
342 @@ -193,6 +215,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
343 # CONFIG_SPARSEMEM_STATIC is not set
344 CONFIG_SPLIT_PTLOCK_CPUS=4096
345 # CONFIG_RESOURCES_64BIT is not set
346 +CONFIG_ZONE_DMA_FLAG=1
347 # CONFIG_LEDS is not set
348 CONFIG_ALIGNMENT_TRAP=y
350 @@ -203,6 +226,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
351 CONFIG_ZBOOT_ROM_BSS=0x0
352 CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
353 # CONFIG_XIP_KERNEL is not set
354 +# CONFIG_KEXEC is not set
357 # Floating point emulation
358 @@ -228,7 +252,6 @@ CONFIG_BINFMT_ELF=y
359 # Power management options
361 # CONFIG_PM is not set
362 -# CONFIG_APM is not set
365 # Networking
366 @@ -242,9 +265,6 @@ CONFIG_NET=y
367 CONFIG_PACKET=y
368 # CONFIG_PACKET_MMAP is not set
369 CONFIG_UNIX=y
370 -CONFIG_XFRM=y
371 -# CONFIG_XFRM_USER is not set
372 -# CONFIG_XFRM_SUB_POLICY is not set
373 # CONFIG_NET_KEY is not set
374 CONFIG_INET=y
375 # CONFIG_IP_MULTICAST is not set
376 @@ -263,14 +283,15 @@ CONFIG_IP_PNP_BOOTP=y
377 # CONFIG_INET_IPCOMP is not set
378 # CONFIG_INET_XFRM_TUNNEL is not set
379 # CONFIG_INET_TUNNEL is not set
380 -CONFIG_INET_XFRM_MODE_TRANSPORT=y
381 -CONFIG_INET_XFRM_MODE_TUNNEL=y
382 -CONFIG_INET_XFRM_MODE_BEET=y
383 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
384 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
385 +# CONFIG_INET_XFRM_MODE_BEET is not set
386 CONFIG_INET_DIAG=y
387 CONFIG_INET_TCP_DIAG=y
388 # CONFIG_TCP_CONG_ADVANCED is not set
389 CONFIG_TCP_CONG_CUBIC=y
390 CONFIG_DEFAULT_TCP_CONG="cubic"
391 +# CONFIG_TCP_MD5SIG is not set
392 # CONFIG_IPV6 is not set
393 # CONFIG_INET6_XFRM_TUNNEL is not set
394 # CONFIG_INET6_TUNNEL is not set
395 @@ -328,6 +349,7 @@ CONFIG_STANDALONE=y
396 CONFIG_PREVENT_FIRMWARE_BUILD=y
397 # CONFIG_FW_LOADER is not set
398 # CONFIG_DEBUG_DRIVER is not set
399 +# CONFIG_DEBUG_DEVRES is not set
400 # CONFIG_SYS_HYPERVISOR is not set
403 @@ -348,6 +370,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
405 # Plug and Play support
407 +# CONFIG_PNPACPI is not set
410 # Block devices
411 @@ -360,7 +383,6 @@ CONFIG_BLK_DEV_RAM=y
412 CONFIG_BLK_DEV_RAM_COUNT=16
413 CONFIG_BLK_DEV_RAM_SIZE=8192
414 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
415 -CONFIG_BLK_DEV_INITRD=y
416 # CONFIG_CDROM_PKTCDVD is not set
417 # CONFIG_ATA_OVER_ETH is not set
419 @@ -369,6 +391,7 @@ CONFIG_BLK_DEV_INITRD=y
421 # CONFIG_RAID_ATTRS is not set
422 CONFIG_SCSI=y
423 +# CONFIG_SCSI_TGT is not set
424 # CONFIG_SCSI_NETLINK is not set
425 CONFIG_SCSI_PROC_FS=y
427 @@ -388,6 +411,7 @@ CONFIG_BLK_DEV_SD=y
428 CONFIG_SCSI_MULTI_LUN=y
429 # CONFIG_SCSI_CONSTANTS is not set
430 # CONFIG_SCSI_LOGGING is not set
431 +# CONFIG_SCSI_SCAN_ASYNC is not set
434 # SCSI Transports
435 @@ -405,6 +429,11 @@ CONFIG_SCSI_MULTI_LUN=y
436 # CONFIG_SCSI_DEBUG is not set
439 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
441 +# CONFIG_ATA is not set
444 # Multi-device support (RAID and LVM)
446 # CONFIG_MD is not set
447 @@ -425,7 +454,51 @@ CONFIG_SCSI_MULTI_LUN=y
449 # Network device support
451 -# CONFIG_NETDEVICES is not set
452 +CONFIG_NETDEVICES=y
453 +# CONFIG_DUMMY is not set
454 +# CONFIG_BONDING is not set
455 +# CONFIG_EQUALIZER is not set
456 +# CONFIG_TUN is not set
459 +# PHY device support
461 +# CONFIG_PHYLIB is not set
464 +# Ethernet (10 or 100Mbit)
466 +CONFIG_NET_ETHERNET=y
467 +CONFIG_MII=y
468 +CONFIG_MACB=y
469 +# CONFIG_SMC91X is not set
470 +# CONFIG_DM9000 is not set
473 +# Ethernet (1000 Mbit)
477 +# Ethernet (10000 Mbit)
481 +# Token Ring devices
485 +# Wireless LAN (non-hamradio)
487 +# CONFIG_NET_RADIO is not set
490 +# Wan interfaces
492 +# CONFIG_WAN is not set
493 +# CONFIG_PPP is not set
494 +# CONFIG_SLIP is not set
495 +# CONFIG_SHAPER is not set
496 +# CONFIG_NETCONSOLE is not set
497 # CONFIG_NETPOLL is not set
498 # CONFIG_NET_POLL_CONTROLLER is not set
500 @@ -517,10 +590,6 @@ CONFIG_HW_RANDOM=y
501 # CONFIG_NVRAM is not set
502 # CONFIG_DTLK is not set
503 # CONFIG_R3964 is not set
506 -# Ftape, the floppy tape device driver
508 # CONFIG_RAW_DRIVER is not set
511 @@ -553,7 +622,11 @@ CONFIG_HW_RANDOM=y
513 # Misc devices
515 -# CONFIG_TIFM_CORE is not set
518 +# Multifunction device drivers
520 +# CONFIG_MFD_SM501 is not set
523 # LED devices
524 @@ -582,7 +655,7 @@ CONFIG_HW_RANDOM=y
526 # Graphics support
528 -# CONFIG_FIRMWARE_EDID is not set
529 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
530 # CONFIG_FB is not set
533 @@ -590,7 +663,6 @@ CONFIG_HW_RANDOM=y
535 # CONFIG_VGA_CONSOLE is not set
536 CONFIG_DUMMY_CONSOLE=y
537 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
540 # Sound
541 @@ -598,6 +670,12 @@ CONFIG_DUMMY_CONSOLE=y
542 # CONFIG_SOUND is not set
545 +# HID Devices
547 +CONFIG_HID=y
548 +# CONFIG_HID_DEBUG is not set
551 # USB support
553 CONFIG_USB_ARCH_HAS_HCD=y
554 @@ -610,7 +688,6 @@ CONFIG_USB=y
555 # Miscellaneous USB options
557 CONFIG_USB_DEVICEFS=y
558 -# CONFIG_USB_BANDWIDTH is not set
559 # CONFIG_USB_DYNAMIC_MINORS is not set
560 # CONFIG_USB_OTG is not set
562 @@ -619,7 +696,8 @@ CONFIG_USB_DEVICEFS=y
564 # CONFIG_USB_ISP116X_HCD is not set
565 CONFIG_USB_OHCI_HCD=y
566 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
567 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
568 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
569 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
570 # CONFIG_USB_SL811_HCD is not set
572 @@ -671,6 +749,7 @@ CONFIG_USB_STORAGE_DEBUG=y
573 # CONFIG_USB_ATI_REMOTE2 is not set
574 # CONFIG_USB_KEYSPAN_REMOTE is not set
575 # CONFIG_USB_APPLETOUCH is not set
576 +# CONFIG_USB_GTCO is not set
579 # USB Imaging devices
580 @@ -708,6 +787,7 @@ CONFIG_USB_MON=y
581 # CONFIG_USB_RIO500 is not set
582 # CONFIG_USB_LEGOTOWER is not set
583 # CONFIG_USB_LCD is not set
584 +# CONFIG_USB_BERRY_CHARGE is not set
585 # CONFIG_USB_LED is not set
586 # CONFIG_USB_CYPRESS_CY7C63 is not set
587 # CONFIG_USB_CYTHERM is not set
588 @@ -717,6 +797,7 @@ CONFIG_USB_MON=y
589 # CONFIG_USB_APPLEDISPLAY is not set
590 # CONFIG_USB_LD is not set
591 # CONFIG_USB_TRANCEVIBRATOR is not set
592 +# CONFIG_USB_IOWARRIOR is not set
593 # CONFIG_USB_TEST is not set
596 @@ -889,6 +970,11 @@ CONFIG_NLS_ISO8859_1=y
597 # CONFIG_NLS_UTF8 is not set
600 +# Distributed Lock Manager
602 +# CONFIG_DLM is not set
605 # Profiling support
607 # CONFIG_PROFILING is not set
608 @@ -900,28 +986,30 @@ CONFIG_NLS_ISO8859_1=y
609 CONFIG_ENABLE_MUST_CHECK=y
610 # CONFIG_MAGIC_SYSRQ is not set
611 # CONFIG_UNUSED_SYMBOLS is not set
612 +# CONFIG_DEBUG_FS is not set
613 +# CONFIG_HEADERS_CHECK is not set
614 CONFIG_DEBUG_KERNEL=y
615 +# CONFIG_DEBUG_SHIRQ is not set
616 CONFIG_LOG_BUF_SHIFT=14
617 CONFIG_DETECT_SOFTLOCKUP=y
618 # CONFIG_SCHEDSTATS is not set
619 +# CONFIG_TIMER_STATS is not set
620 # CONFIG_DEBUG_SLAB is not set
621 # CONFIG_DEBUG_RT_MUTEXES is not set
622 # CONFIG_RT_MUTEX_TESTER is not set
623 # CONFIG_DEBUG_SPINLOCK is not set
624 # CONFIG_DEBUG_MUTEXES is not set
625 -# CONFIG_DEBUG_RWSEMS is not set
626 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
627 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
628 # CONFIG_DEBUG_KOBJECT is not set
629 CONFIG_DEBUG_BUGVERBOSE=y
630 # CONFIG_DEBUG_INFO is not set
631 -# CONFIG_DEBUG_FS is not set
632 # CONFIG_DEBUG_VM is not set
633 # CONFIG_DEBUG_LIST is not set
634 CONFIG_FRAME_POINTER=y
635 CONFIG_FORCED_INLINING=y
636 -# CONFIG_HEADERS_CHECK is not set
637 # CONFIG_RCU_TORTURE_TEST is not set
638 +# CONFIG_FAULT_INJECTION is not set
639 CONFIG_DEBUG_USER=y
640 # CONFIG_DEBUG_ERRORS is not set
641 CONFIG_DEBUG_LL=y
642 @@ -941,9 +1029,12 @@ CONFIG_DEBUG_LL=y
644 # Library routines
646 +CONFIG_BITREVERSE=y
647 # CONFIG_CRC_CCITT is not set
648 # CONFIG_CRC16 is not set
649 CONFIG_CRC32=y
650 # CONFIG_LIBCRC32C is not set
651 CONFIG_ZLIB_INFLATE=y
652 CONFIG_PLIST=y
653 +CONFIG_HAS_IOMEM=y
654 +CONFIG_HAS_IOPORT=y
655 diff --git a/arch/arm/configs/at91sam9261ek_defconfig b/arch/arm/configs/at91sam9261ek_defconfig
656 index fcd8fa0..c76d70e 100644
657 --- a/arch/arm/configs/at91sam9261ek_defconfig
658 +++ b/arch/arm/configs/at91sam9261ek_defconfig
659 @@ -1,18 +1,24 @@
661 # Automatically generated make config: don't edit
662 -# Linux kernel version: 2.6.19-rc6
663 -# Fri Nov 17 18:00:38 2006
664 +# Linux kernel version: 2.6.21
665 +# Mon May 7 11:42:30 2007
667 CONFIG_ARM=y
668 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
669 +CONFIG_GENERIC_GPIO=y
670 # CONFIG_GENERIC_TIME is not set
671 CONFIG_MMU=y
672 +# CONFIG_NO_IOPORT is not set
673 CONFIG_GENERIC_HARDIRQS=y
674 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
675 CONFIG_HARDIRQS_SW_RESEND=y
676 CONFIG_GENERIC_IRQ_PROBE=y
677 CONFIG_RWSEM_GENERIC_SPINLOCK=y
678 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
679 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
680 CONFIG_GENERIC_HWEIGHT=y
681 CONFIG_GENERIC_CALIBRATE_DELAY=y
682 +CONFIG_ZONE_DMA=y
683 CONFIG_VECTORS_BASE=0xffff0000
684 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
686 @@ -31,13 +37,16 @@ CONFIG_LOCALVERSION=""
687 # CONFIG_SWAP is not set
688 CONFIG_SYSVIPC=y
689 # CONFIG_IPC_NS is not set
690 +CONFIG_SYSVIPC_SYSCTL=y
691 # CONFIG_POSIX_MQUEUE is not set
692 # CONFIG_BSD_PROCESS_ACCT is not set
693 # CONFIG_TASKSTATS is not set
694 # CONFIG_UTS_NS is not set
695 # CONFIG_AUDIT is not set
696 # CONFIG_IKCONFIG is not set
697 +CONFIG_SYSFS_DEPRECATED=y
698 # CONFIG_RELAY is not set
699 +CONFIG_BLK_DEV_INITRD=y
700 CONFIG_INITRAMFS_SOURCE=""
701 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
702 CONFIG_SYSCTL=y
703 @@ -76,7 +85,9 @@ CONFIG_KMOD=y
704 # Block layer
706 CONFIG_BLOCK=y
707 +# CONFIG_LBD is not set
708 # CONFIG_BLK_DEV_IO_TRACE is not set
709 +# CONFIG_LSF is not set
712 # IO Schedulers
713 @@ -110,10 +121,12 @@ CONFIG_ARCH_AT91=y
714 # CONFIG_ARCH_IMX is not set
715 # CONFIG_ARCH_IOP32X is not set
716 # CONFIG_ARCH_IOP33X is not set
717 +# CONFIG_ARCH_IOP13XX is not set
718 # CONFIG_ARCH_IXP4XX is not set
719 # CONFIG_ARCH_IXP2000 is not set
720 # CONFIG_ARCH_IXP23XX is not set
721 # CONFIG_ARCH_L7200 is not set
722 +# CONFIG_ARCH_NS9XXX is not set
723 # CONFIG_ARCH_PNX4008 is not set
724 # CONFIG_ARCH_PXA is not set
725 # CONFIG_ARCH_RPC is not set
726 @@ -129,6 +142,7 @@ CONFIG_ARCH_AT91=y
727 # CONFIG_ARCH_AT91RM9200 is not set
728 # CONFIG_ARCH_AT91SAM9260 is not set
729 CONFIG_ARCH_AT91SAM9261=y
730 +# CONFIG_ARCH_AT91SAM9263 is not set
733 # AT91SAM9261 Board Type
734 @@ -138,12 +152,14 @@ CONFIG_MACH_AT91SAM9261EK=y
736 # AT91 Board Options
738 +# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
739 # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
742 # AT91 Feature Selections
744 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
745 +# CONFIG_ATMEL_TCLIB is not set
748 # Processor Type
749 @@ -166,6 +182,7 @@ CONFIG_CPU_CP15_MMU=y
750 # CONFIG_CPU_DCACHE_DISABLE is not set
751 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
752 # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
753 +# CONFIG_OUTER_CACHE is not set
756 # Bus support
757 @@ -193,6 +210,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
758 # CONFIG_SPARSEMEM_STATIC is not set
759 CONFIG_SPLIT_PTLOCK_CPUS=4096
760 # CONFIG_RESOURCES_64BIT is not set
761 +CONFIG_ZONE_DMA_FLAG=1
762 # CONFIG_LEDS is not set
763 CONFIG_ALIGNMENT_TRAP=y
765 @@ -203,6 +221,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
766 CONFIG_ZBOOT_ROM_BSS=0x0
767 CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
768 # CONFIG_XIP_KERNEL is not set
769 +# CONFIG_KEXEC is not set
772 # Floating point emulation
773 @@ -228,7 +247,6 @@ CONFIG_BINFMT_ELF=y
774 # Power management options
776 # CONFIG_PM is not set
777 -# CONFIG_APM is not set
780 # Networking
781 @@ -245,6 +263,7 @@ CONFIG_UNIX=y
782 CONFIG_XFRM=y
783 # CONFIG_XFRM_USER is not set
784 # CONFIG_XFRM_SUB_POLICY is not set
785 +# CONFIG_XFRM_MIGRATE is not set
786 # CONFIG_NET_KEY is not set
787 CONFIG_INET=y
788 # CONFIG_IP_MULTICAST is not set
789 @@ -271,6 +290,7 @@ CONFIG_INET_TCP_DIAG=y
790 # CONFIG_TCP_CONG_ADVANCED is not set
791 CONFIG_TCP_CONG_CUBIC=y
792 CONFIG_DEFAULT_TCP_CONG="cubic"
793 +# CONFIG_TCP_MD5SIG is not set
794 # CONFIG_IPV6 is not set
795 # CONFIG_INET6_XFRM_TUNNEL is not set
796 # CONFIG_INET6_TUNNEL is not set
797 @@ -328,6 +348,7 @@ CONFIG_STANDALONE=y
798 CONFIG_PREVENT_FIRMWARE_BUILD=y
799 # CONFIG_FW_LOADER is not set
800 # CONFIG_DEBUG_DRIVER is not set
801 +# CONFIG_DEBUG_DEVRES is not set
802 # CONFIG_SYS_HYPERVISOR is not set
805 @@ -350,6 +371,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
806 # User Modules And Translation Layers
808 # CONFIG_MTD_CHAR is not set
809 +CONFIG_MTD_BLKDEVS=y
810 CONFIG_MTD_BLOCK=y
811 # CONFIG_FTL is not set
812 # CONFIG_NFTL is not set
813 @@ -386,6 +408,8 @@ CONFIG_MTD_CFI_I2=y
815 # Self-contained MTD device drivers
817 +# CONFIG_MTD_DATAFLASH is not set
818 +# CONFIG_MTD_M25P80 is not set
819 # CONFIG_MTD_SLRAM is not set
820 # CONFIG_MTD_PHRAM is not set
821 # CONFIG_MTD_MTDRAM is not set
822 @@ -422,6 +446,7 @@ CONFIG_MTD_NAND_AT91=y
824 # Plug and Play support
826 +# CONFIG_PNPACPI is not set
829 # Block devices
830 @@ -434,7 +459,6 @@ CONFIG_BLK_DEV_RAM=y
831 CONFIG_BLK_DEV_RAM_COUNT=16
832 CONFIG_BLK_DEV_RAM_SIZE=8192
833 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
834 -CONFIG_BLK_DEV_INITRD=y
835 # CONFIG_CDROM_PKTCDVD is not set
836 # CONFIG_ATA_OVER_ETH is not set
838 @@ -443,6 +467,7 @@ CONFIG_BLK_DEV_INITRD=y
840 # CONFIG_RAID_ATTRS is not set
841 CONFIG_SCSI=y
842 +# CONFIG_SCSI_TGT is not set
843 # CONFIG_SCSI_NETLINK is not set
844 CONFIG_SCSI_PROC_FS=y
846 @@ -462,6 +487,7 @@ CONFIG_BLK_DEV_SD=y
847 CONFIG_SCSI_MULTI_LUN=y
848 # CONFIG_SCSI_CONSTANTS is not set
849 # CONFIG_SCSI_LOGGING is not set
850 +# CONFIG_SCSI_SCAN_ASYNC is not set
853 # SCSI Transports
854 @@ -479,6 +505,11 @@ CONFIG_SCSI_MULTI_LUN=y
855 # CONFIG_SCSI_DEBUG is not set
858 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
860 +# CONFIG_ATA is not set
863 # Multi-device support (RAID and LVM)
865 # CONFIG_MD is not set
866 @@ -575,7 +606,16 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
867 # CONFIG_INPUT_KEYBOARD is not set
868 # CONFIG_INPUT_MOUSE is not set
869 # CONFIG_INPUT_JOYSTICK is not set
870 -# CONFIG_INPUT_TOUCHSCREEN is not set
871 +CONFIG_INPUT_TOUCHSCREEN=y
872 +CONFIG_TOUCHSCREEN_ADS7846=y
873 +# CONFIG_TOUCHSCREEN_GUNZE is not set
874 +# CONFIG_TOUCHSCREEN_ELO is not set
875 +# CONFIG_TOUCHSCREEN_MTOUCH is not set
876 +# CONFIG_TOUCHSCREEN_MK712 is not set
877 +# CONFIG_TOUCHSCREEN_PENMOUNT is not set
878 +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
879 +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
880 +# CONFIG_TOUCHSCREEN_UCB1400 is not set
881 # CONFIG_INPUT_MISC is not set
884 @@ -634,10 +674,6 @@ CONFIG_HW_RANDOM=y
885 # CONFIG_NVRAM is not set
886 # CONFIG_DTLK is not set
887 # CONFIG_R3964 is not set
890 -# Ftape, the floppy tape device driver
892 # CONFIG_RAW_DRIVER is not set
895 @@ -654,14 +690,14 @@ CONFIG_I2C_CHARDEV=y
897 # I2C Algorithms
899 -# CONFIG_I2C_ALGOBIT is not set
900 +CONFIG_I2C_ALGOBIT=y
901 # CONFIG_I2C_ALGOPCF is not set
902 # CONFIG_I2C_ALGOPCA is not set
905 # I2C Hardware Bus support
907 -CONFIG_I2C_AT91=y
908 +CONFIG_I2C_GPIO=y
909 # CONFIG_I2C_OCORES is not set
910 # CONFIG_I2C_PARPORT_LIGHT is not set
911 # CONFIG_I2C_STUB is not set
912 @@ -686,8 +722,20 @@ CONFIG_I2C_AT91=y
914 # SPI support
916 -# CONFIG_SPI is not set
917 -# CONFIG_SPI_MASTER is not set
918 +CONFIG_SPI=y
919 +# CONFIG_SPI_DEBUG is not set
920 +CONFIG_SPI_MASTER=y
923 +# SPI Master Controller Drivers
925 +CONFIG_SPI_ATMEL=y
926 +# CONFIG_SPI_BITBANG is not set
929 +# SPI Protocol Masters
931 +# CONFIG_SPI_AT25 is not set
934 # Dallas's 1-wire bus
935 @@ -703,7 +751,11 @@ CONFIG_I2C_AT91=y
937 # Misc devices
939 -# CONFIG_TIFM_CORE is not set
942 +# Multifunction device drivers
944 +# CONFIG_MFD_SM501 is not set
947 # LED devices
948 @@ -732,7 +784,7 @@ CONFIG_I2C_AT91=y
950 # Graphics support
952 -# CONFIG_FIRMWARE_EDID is not set
953 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
954 # CONFIG_FB is not set
957 @@ -740,7 +792,6 @@ CONFIG_I2C_AT91=y
959 # CONFIG_VGA_CONSOLE is not set
960 CONFIG_DUMMY_CONSOLE=y
961 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
964 # Sound
965 @@ -748,6 +799,12 @@ CONFIG_DUMMY_CONSOLE=y
966 # CONFIG_SOUND is not set
969 +# HID Devices
971 +CONFIG_HID=y
972 +# CONFIG_HID_DEBUG is not set
975 # USB support
977 CONFIG_USB_ARCH_HAS_HCD=y
978 @@ -760,7 +817,6 @@ CONFIG_USB=y
979 # Miscellaneous USB options
981 CONFIG_USB_DEVICEFS=y
982 -# CONFIG_USB_BANDWIDTH is not set
983 # CONFIG_USB_DYNAMIC_MINORS is not set
984 # CONFIG_USB_OTG is not set
986 @@ -769,7 +825,8 @@ CONFIG_USB_DEVICEFS=y
988 # CONFIG_USB_ISP116X_HCD is not set
989 CONFIG_USB_OHCI_HCD=y
990 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
991 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
992 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
993 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
994 # CONFIG_USB_SL811_HCD is not set
996 @@ -821,6 +878,7 @@ CONFIG_USB_STORAGE_DEBUG=y
997 # CONFIG_USB_ATI_REMOTE2 is not set
998 # CONFIG_USB_KEYSPAN_REMOTE is not set
999 # CONFIG_USB_APPLETOUCH is not set
1000 +# CONFIG_USB_GTCO is not set
1003 # USB Imaging devices
1004 @@ -858,6 +916,7 @@ CONFIG_USB_MON=y
1005 # CONFIG_USB_RIO500 is not set
1006 # CONFIG_USB_LEGOTOWER is not set
1007 # CONFIG_USB_LCD is not set
1008 +# CONFIG_USB_BERRY_CHARGE is not set
1009 # CONFIG_USB_LED is not set
1010 # CONFIG_USB_CYPRESS_CY7C63 is not set
1011 # CONFIG_USB_CYTHERM is not set
1012 @@ -867,6 +926,7 @@ CONFIG_USB_MON=y
1013 # CONFIG_USB_APPLEDISPLAY is not set
1014 # CONFIG_USB_LD is not set
1015 # CONFIG_USB_TRANCEVIBRATOR is not set
1016 +# CONFIG_USB_IOWARRIOR is not set
1017 # CONFIG_USB_TEST is not set
1020 @@ -903,7 +963,6 @@ CONFIG_MMC=y
1021 # CONFIG_MMC_DEBUG is not set
1022 CONFIG_MMC_BLOCK=y
1023 CONFIG_MMC_AT91=m
1024 -# CONFIG_MMC_TIFM_SD is not set
1027 # Real Time Clock
1028 @@ -973,7 +1032,6 @@ CONFIG_RAMFS=y
1029 # CONFIG_BEFS_FS is not set
1030 # CONFIG_BFS_FS is not set
1031 # CONFIG_EFS_FS is not set
1032 -# CONFIG_JFFS_FS is not set
1033 # CONFIG_JFFS2_FS is not set
1034 CONFIG_CRAMFS=y
1035 # CONFIG_VXFS_FS is not set
1036 @@ -1045,6 +1103,11 @@ CONFIG_NLS_ISO8859_1=y
1037 # CONFIG_NLS_UTF8 is not set
1040 +# Distributed Lock Manager
1042 +# CONFIG_DLM is not set
1045 # Profiling support
1047 # CONFIG_PROFILING is not set
1048 @@ -1056,28 +1119,30 @@ CONFIG_NLS_ISO8859_1=y
1049 CONFIG_ENABLE_MUST_CHECK=y
1050 # CONFIG_MAGIC_SYSRQ is not set
1051 # CONFIG_UNUSED_SYMBOLS is not set
1052 +# CONFIG_DEBUG_FS is not set
1053 +# CONFIG_HEADERS_CHECK is not set
1054 CONFIG_DEBUG_KERNEL=y
1055 +# CONFIG_DEBUG_SHIRQ is not set
1056 CONFIG_LOG_BUF_SHIFT=14
1057 CONFIG_DETECT_SOFTLOCKUP=y
1058 # CONFIG_SCHEDSTATS is not set
1059 +# CONFIG_TIMER_STATS is not set
1060 # CONFIG_DEBUG_SLAB is not set
1061 # CONFIG_DEBUG_RT_MUTEXES is not set
1062 # CONFIG_RT_MUTEX_TESTER is not set
1063 # CONFIG_DEBUG_SPINLOCK is not set
1064 # CONFIG_DEBUG_MUTEXES is not set
1065 -# CONFIG_DEBUG_RWSEMS is not set
1066 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1067 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1068 # CONFIG_DEBUG_KOBJECT is not set
1069 CONFIG_DEBUG_BUGVERBOSE=y
1070 # CONFIG_DEBUG_INFO is not set
1071 -# CONFIG_DEBUG_FS is not set
1072 # CONFIG_DEBUG_VM is not set
1073 # CONFIG_DEBUG_LIST is not set
1074 CONFIG_FRAME_POINTER=y
1075 CONFIG_FORCED_INLINING=y
1076 -# CONFIG_HEADERS_CHECK is not set
1077 # CONFIG_RCU_TORTURE_TEST is not set
1078 +# CONFIG_FAULT_INJECTION is not set
1079 CONFIG_DEBUG_USER=y
1080 # CONFIG_DEBUG_ERRORS is not set
1081 CONFIG_DEBUG_LL=y
1082 @@ -1097,9 +1162,12 @@ CONFIG_DEBUG_LL=y
1084 # Library routines
1086 +CONFIG_BITREVERSE=y
1087 # CONFIG_CRC_CCITT is not set
1088 # CONFIG_CRC16 is not set
1089 CONFIG_CRC32=y
1090 # CONFIG_LIBCRC32C is not set
1091 CONFIG_ZLIB_INFLATE=y
1092 CONFIG_PLIST=y
1093 +CONFIG_HAS_IOMEM=y
1094 +CONFIG_HAS_IOPORT=y
1095 diff --git a/arch/arm/configs/at91sam9263ek_defconfig b/arch/arm/configs/at91sam9263ek_defconfig
1096 index c72ab82..0f5566d 100644
1097 --- a/arch/arm/configs/at91sam9263ek_defconfig
1098 +++ b/arch/arm/configs/at91sam9263ek_defconfig
1099 @@ -1,11 +1,14 @@
1101 # Automatically generated make config: don't edit
1102 -# Linux kernel version: 2.6.20-rc1
1103 -# Mon Jan 8 16:06:54 2007
1104 +# Linux kernel version: 2.6.21
1105 +# Mon May 7 11:42:49 2007
1107 CONFIG_ARM=y
1108 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
1109 +CONFIG_GENERIC_GPIO=y
1110 # CONFIG_GENERIC_TIME is not set
1111 CONFIG_MMU=y
1112 +# CONFIG_NO_IOPORT is not set
1113 CONFIG_GENERIC_HARDIRQS=y
1114 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1115 CONFIG_HARDIRQS_SW_RESEND=y
1116 @@ -15,6 +18,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
1117 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
1118 CONFIG_GENERIC_HWEIGHT=y
1119 CONFIG_GENERIC_CALIBRATE_DELAY=y
1120 +CONFIG_ZONE_DMA=y
1121 CONFIG_VECTORS_BASE=0xffff0000
1122 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
1124 @@ -33,6 +37,7 @@ CONFIG_LOCALVERSION=""
1125 # CONFIG_SWAP is not set
1126 CONFIG_SYSVIPC=y
1127 # CONFIG_IPC_NS is not set
1128 +CONFIG_SYSVIPC_SYSCTL=y
1129 # CONFIG_POSIX_MQUEUE is not set
1130 # CONFIG_BSD_PROCESS_ACCT is not set
1131 # CONFIG_TASKSTATS is not set
1132 @@ -41,6 +46,7 @@ CONFIG_SYSVIPC=y
1133 # CONFIG_IKCONFIG is not set
1134 CONFIG_SYSFS_DEPRECATED=y
1135 # CONFIG_RELAY is not set
1136 +CONFIG_BLK_DEV_INITRD=y
1137 CONFIG_INITRAMFS_SOURCE=""
1138 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
1139 CONFIG_SYSCTL=y
1140 @@ -120,6 +126,7 @@ CONFIG_ARCH_AT91=y
1141 # CONFIG_ARCH_IXP2000 is not set
1142 # CONFIG_ARCH_IXP23XX is not set
1143 # CONFIG_ARCH_L7200 is not set
1144 +# CONFIG_ARCH_NS9XXX is not set
1145 # CONFIG_ARCH_PNX4008 is not set
1146 # CONFIG_ARCH_PXA is not set
1147 # CONFIG_ARCH_RPC is not set
1148 @@ -152,6 +159,7 @@ CONFIG_MTD_AT91_DATAFLASH_CARD=y
1149 # AT91 Feature Selections
1151 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
1152 +# CONFIG_ATMEL_TCLIB is not set
1155 # Processor Type
1156 @@ -174,6 +182,7 @@ CONFIG_CPU_CP15_MMU=y
1157 # CONFIG_CPU_DCACHE_DISABLE is not set
1158 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
1159 # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
1160 +# CONFIG_OUTER_CACHE is not set
1163 # Bus support
1164 @@ -201,6 +210,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
1165 # CONFIG_SPARSEMEM_STATIC is not set
1166 CONFIG_SPLIT_PTLOCK_CPUS=4096
1167 # CONFIG_RESOURCES_64BIT is not set
1168 +CONFIG_ZONE_DMA_FLAG=1
1169 # CONFIG_LEDS is not set
1170 CONFIG_ALIGNMENT_TRAP=y
1172 @@ -211,6 +221,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
1173 CONFIG_ZBOOT_ROM_BSS=0x0
1174 CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
1175 # CONFIG_XIP_KERNEL is not set
1176 +# CONFIG_KEXEC is not set
1179 # Floating point emulation
1180 @@ -236,7 +247,6 @@ CONFIG_BINFMT_ELF=y
1181 # Power management options
1183 # CONFIG_PM is not set
1184 -# CONFIG_APM is not set
1187 # Networking
1188 @@ -333,6 +343,7 @@ CONFIG_STANDALONE=y
1189 CONFIG_PREVENT_FIRMWARE_BUILD=y
1190 # CONFIG_FW_LOADER is not set
1191 # CONFIG_DEBUG_DRIVER is not set
1192 +# CONFIG_DEBUG_DEVRES is not set
1193 # CONFIG_SYS_HYPERVISOR is not set
1196 @@ -430,6 +441,7 @@ CONFIG_MTD_NAND_AT91=y
1198 # Plug and Play support
1200 +# CONFIG_PNPACPI is not set
1203 # Block devices
1204 @@ -443,7 +455,6 @@ CONFIG_BLK_DEV_RAM=y
1205 CONFIG_BLK_DEV_RAM_COUNT=16
1206 CONFIG_BLK_DEV_RAM_SIZE=8192
1207 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
1208 -CONFIG_BLK_DEV_INITRD=y
1209 # CONFIG_CDROM_PKTCDVD is not set
1210 # CONFIG_ATA_OVER_ETH is not set
1212 @@ -531,6 +542,7 @@ CONFIG_NETDEVICES=y
1214 CONFIG_NET_ETHERNET=y
1215 CONFIG_MII=y
1216 +CONFIG_MACB=y
1217 # CONFIG_SMC91X is not set
1218 # CONFIG_DM9000 is not set
1220 @@ -677,14 +689,14 @@ CONFIG_I2C_CHARDEV=y
1222 # I2C Algorithms
1224 -# CONFIG_I2C_ALGOBIT is not set
1225 +CONFIG_I2C_ALGOBIT=y
1226 # CONFIG_I2C_ALGOPCF is not set
1227 # CONFIG_I2C_ALGOPCA is not set
1230 # I2C Hardware Bus support
1232 -CONFIG_I2C_AT91=y
1233 +CONFIG_I2C_GPIO=y
1234 # CONFIG_I2C_OCORES is not set
1235 # CONFIG_I2C_PARPORT_LIGHT is not set
1236 # CONFIG_I2C_STUB is not set
1237 @@ -722,6 +734,7 @@ CONFIG_SPI_ATMEL=y
1239 # SPI Protocol Masters
1241 +# CONFIG_SPI_AT25 is not set
1244 # Dallas's 1-wire bus
1245 @@ -737,7 +750,11 @@ CONFIG_SPI_ATMEL=y
1247 # Misc devices
1249 -# CONFIG_TIFM_CORE is not set
1252 +# Multifunction device drivers
1254 +# CONFIG_MFD_SM501 is not set
1257 # LED devices
1258 @@ -766,15 +783,23 @@ CONFIG_SPI_ATMEL=y
1260 # Graphics support
1262 -# CONFIG_FIRMWARE_EDID is not set
1263 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1264 CONFIG_FB=y
1265 +# CONFIG_FIRMWARE_EDID is not set
1266 +# CONFIG_FB_DDC is not set
1267 # CONFIG_FB_CFB_FILLRECT is not set
1268 # CONFIG_FB_CFB_COPYAREA is not set
1269 # CONFIG_FB_CFB_IMAGEBLIT is not set
1270 +# CONFIG_FB_SVGALIB is not set
1271 # CONFIG_FB_MACMODES is not set
1272 # CONFIG_FB_BACKLIGHT is not set
1273 # CONFIG_FB_MODE_HELPERS is not set
1274 # CONFIG_FB_TILEBLITTING is not set
1277 +# Frame buffer hardware drivers
1279 +# CONFIG_FB_S1D15605 is not set
1280 # CONFIG_FB_S1D13XXX is not set
1281 # CONFIG_FB_VIRTUAL is not set
1283 @@ -789,7 +814,6 @@ CONFIG_DUMMY_CONSOLE=y
1284 # Logo configuration
1286 # CONFIG_LOGO is not set
1287 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1290 # Sound
1291 @@ -800,6 +824,7 @@ CONFIG_DUMMY_CONSOLE=y
1292 # HID Devices
1294 CONFIG_HID=y
1295 +# CONFIG_HID_DEBUG is not set
1298 # USB support
1299 @@ -814,9 +839,7 @@ CONFIG_USB=y
1300 # Miscellaneous USB options
1302 CONFIG_USB_DEVICEFS=y
1303 -# CONFIG_USB_BANDWIDTH is not set
1304 # CONFIG_USB_DYNAMIC_MINORS is not set
1305 -# CONFIG_USB_MULTITHREAD_PROBE is not set
1306 # CONFIG_USB_OTG is not set
1309 @@ -824,7 +847,8 @@ CONFIG_USB_DEVICEFS=y
1311 # CONFIG_USB_ISP116X_HCD is not set
1312 CONFIG_USB_OHCI_HCD=y
1313 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
1314 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1315 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1316 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1317 # CONFIG_USB_SL811_HCD is not set
1319 @@ -877,6 +901,7 @@ CONFIG_USB_STORAGE=y
1320 # CONFIG_USB_ATI_REMOTE2 is not set
1321 # CONFIG_USB_KEYSPAN_REMOTE is not set
1322 # CONFIG_USB_APPLETOUCH is not set
1323 +# CONFIG_USB_GTCO is not set
1326 # USB Imaging devices
1327 @@ -914,6 +939,7 @@ CONFIG_USB_MON=y
1328 # CONFIG_USB_RIO500 is not set
1329 # CONFIG_USB_LEGOTOWER is not set
1330 # CONFIG_USB_LCD is not set
1331 +# CONFIG_USB_BERRY_CHARGE is not set
1332 # CONFIG_USB_LED is not set
1333 # CONFIG_USB_CYPRESS_CY7C63 is not set
1334 # CONFIG_USB_CYTHERM is not set
1335 @@ -923,6 +949,7 @@ CONFIG_USB_MON=y
1336 # CONFIG_USB_APPLEDISPLAY is not set
1337 # CONFIG_USB_LD is not set
1338 # CONFIG_USB_TRANCEVIBRATOR is not set
1339 +# CONFIG_USB_IOWARRIOR is not set
1340 # CONFIG_USB_TEST is not set
1343 @@ -959,7 +986,6 @@ CONFIG_MMC=y
1344 # CONFIG_MMC_DEBUG is not set
1345 CONFIG_MMC_BLOCK=y
1346 CONFIG_MMC_AT91=m
1347 -# CONFIG_MMC_TIFM_SD is not set
1350 # Real Time Clock
1351 @@ -1136,15 +1162,16 @@ CONFIG_ENABLE_MUST_CHECK=y
1352 # CONFIG_DEBUG_FS is not set
1353 # CONFIG_HEADERS_CHECK is not set
1354 CONFIG_DEBUG_KERNEL=y
1355 +# CONFIG_DEBUG_SHIRQ is not set
1356 CONFIG_LOG_BUF_SHIFT=14
1357 CONFIG_DETECT_SOFTLOCKUP=y
1358 # CONFIG_SCHEDSTATS is not set
1359 +# CONFIG_TIMER_STATS is not set
1360 # CONFIG_DEBUG_SLAB is not set
1361 # CONFIG_DEBUG_RT_MUTEXES is not set
1362 # CONFIG_RT_MUTEX_TESTER is not set
1363 # CONFIG_DEBUG_SPINLOCK is not set
1364 # CONFIG_DEBUG_MUTEXES is not set
1365 -# CONFIG_DEBUG_RWSEMS is not set
1366 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1367 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1368 # CONFIG_DEBUG_KOBJECT is not set
1369 @@ -1155,6 +1182,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
1370 CONFIG_FRAME_POINTER=y
1371 CONFIG_FORCED_INLINING=y
1372 # CONFIG_RCU_TORTURE_TEST is not set
1373 +# CONFIG_FAULT_INJECTION is not set
1374 CONFIG_DEBUG_USER=y
1375 # CONFIG_DEBUG_ERRORS is not set
1376 CONFIG_DEBUG_LL=y
1377 @@ -1180,5 +1208,7 @@ CONFIG_BITREVERSE=y
1378 CONFIG_CRC32=y
1379 # CONFIG_LIBCRC32C is not set
1380 CONFIG_ZLIB_INFLATE=y
1381 +CONFIG_ZLIB_DEFLATE=y
1382 CONFIG_PLIST=y
1383 -CONFIG_IOMAP_COPY=y
1384 +CONFIG_HAS_IOMEM=y
1385 +CONFIG_HAS_IOPORT=y
1386 diff --git a/arch/arm/configs/ateb9200_defconfig b/arch/arm/configs/ateb9200_defconfig
1387 index baa9769..d846a49 100644
1388 --- a/arch/arm/configs/ateb9200_defconfig
1389 +++ b/arch/arm/configs/ateb9200_defconfig
1390 @@ -714,7 +714,7 @@ CONFIG_I2C_ALGOPCA=m
1392 # I2C Hardware Bus support
1394 -CONFIG_I2C_AT91=m
1395 +CONFIG_I2C_GPIO=m
1396 # CONFIG_I2C_PARPORT_LIGHT is not set
1397 # CONFIG_I2C_STUB is not set
1398 # CONFIG_I2C_PCA_ISA is not set
1399 diff --git a/arch/arm/configs/cam60_defconfig b/arch/arm/configs/cam60_defconfig
1400 new file mode 100644
1401 index 0000000..5d71160
1402 --- /dev/null
1403 +++ b/arch/arm/configs/cam60_defconfig
1404 @@ -0,0 +1,954 @@
1406 +# Automatically generated make config: don't edit
1407 +# Linux kernel version: 2.6.20
1408 +# Tue May 1 21:06:33 2007
1410 +CONFIG_ARM=y
1411 +# CONFIG_GENERIC_TIME is not set
1412 +CONFIG_MMU=y
1413 +CONFIG_GENERIC_HARDIRQS=y
1414 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1415 +CONFIG_HARDIRQS_SW_RESEND=y
1416 +CONFIG_GENERIC_IRQ_PROBE=y
1417 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
1418 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
1419 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
1420 +CONFIG_GENERIC_HWEIGHT=y
1421 +CONFIG_GENERIC_CALIBRATE_DELAY=y
1422 +CONFIG_VECTORS_BASE=0xffff0000
1423 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
1426 +# Code maturity level options
1428 +CONFIG_EXPERIMENTAL=y
1429 +CONFIG_BROKEN_ON_SMP=y
1430 +CONFIG_INIT_ENV_ARG_LIMIT=32
1433 +# General setup
1435 +CONFIG_LOCALVERSION=""
1436 +# CONFIG_LOCALVERSION_AUTO is not set
1437 +# CONFIG_SWAP is not set
1438 +CONFIG_SYSVIPC=y
1439 +# CONFIG_IPC_NS is not set
1440 +# CONFIG_POSIX_MQUEUE is not set
1441 +# CONFIG_BSD_PROCESS_ACCT is not set
1442 +# CONFIG_TASKSTATS is not set
1443 +# CONFIG_UTS_NS is not set
1444 +# CONFIG_AUDIT is not set
1445 +CONFIG_IKCONFIG=y
1446 +CONFIG_IKCONFIG_PROC=y
1447 +CONFIG_SYSFS_DEPRECATED=y
1448 +# CONFIG_RELAY is not set
1449 +CONFIG_INITRAMFS_SOURCE=""
1450 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
1451 +CONFIG_SYSCTL=y
1452 +# CONFIG_EMBEDDED is not set
1453 +CONFIG_UID16=y
1454 +CONFIG_SYSCTL_SYSCALL=y
1455 +CONFIG_KALLSYMS=y
1456 +# CONFIG_KALLSYMS_ALL is not set
1457 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
1458 +CONFIG_HOTPLUG=y
1459 +CONFIG_PRINTK=y
1460 +CONFIG_BUG=y
1461 +CONFIG_ELF_CORE=y
1462 +CONFIG_BASE_FULL=y
1463 +CONFIG_FUTEX=y
1464 +CONFIG_EPOLL=y
1465 +CONFIG_SHMEM=y
1466 +CONFIG_SLAB=y
1467 +CONFIG_VM_EVENT_COUNTERS=y
1468 +CONFIG_RT_MUTEXES=y
1469 +# CONFIG_TINY_SHMEM is not set
1470 +CONFIG_BASE_SMALL=0
1471 +# CONFIG_SLOB is not set
1474 +# Loadable module support
1476 +CONFIG_MODULES=y
1477 +CONFIG_MODULE_UNLOAD=y
1478 +CONFIG_MODULE_FORCE_UNLOAD=y
1479 +# CONFIG_MODVERSIONS is not set
1480 +# CONFIG_MODULE_SRCVERSION_ALL is not set
1481 +# CONFIG_KMOD is not set
1484 +# Block layer
1486 +CONFIG_BLOCK=y
1487 +# CONFIG_LBD is not set
1488 +# CONFIG_BLK_DEV_IO_TRACE is not set
1489 +# CONFIG_LSF is not set
1492 +# IO Schedulers
1494 +CONFIG_IOSCHED_NOOP=y
1495 +CONFIG_IOSCHED_AS=y
1496 +# CONFIG_IOSCHED_DEADLINE is not set
1497 +# CONFIG_IOSCHED_CFQ is not set
1498 +CONFIG_DEFAULT_AS=y
1499 +# CONFIG_DEFAULT_DEADLINE is not set
1500 +# CONFIG_DEFAULT_CFQ is not set
1501 +# CONFIG_DEFAULT_NOOP is not set
1502 +CONFIG_DEFAULT_IOSCHED="anticipatory"
1505 +# System Type
1507 +# CONFIG_ARCH_AAEC2000 is not set
1508 +# CONFIG_ARCH_INTEGRATOR is not set
1509 +# CONFIG_ARCH_REALVIEW is not set
1510 +# CONFIG_ARCH_VERSATILE is not set
1511 +CONFIG_ARCH_AT91=y
1512 +# CONFIG_ARCH_CLPS7500 is not set
1513 +# CONFIG_ARCH_CLPS711X is not set
1514 +# CONFIG_ARCH_CO285 is not set
1515 +# CONFIG_ARCH_EBSA110 is not set
1516 +# CONFIG_ARCH_EP93XX is not set
1517 +# CONFIG_ARCH_FOOTBRIDGE is not set
1518 +# CONFIG_ARCH_NETX is not set
1519 +# CONFIG_ARCH_H720X is not set
1520 +# CONFIG_ARCH_IMX is not set
1521 +# CONFIG_ARCH_IOP32X is not set
1522 +# CONFIG_ARCH_IOP33X is not set
1523 +# CONFIG_ARCH_IOP13XX is not set
1524 +# CONFIG_ARCH_IXP4XX is not set
1525 +# CONFIG_ARCH_IXP2000 is not set
1526 +# CONFIG_ARCH_IXP23XX is not set
1527 +# CONFIG_ARCH_L7200 is not set
1528 +# CONFIG_ARCH_PNX4008 is not set
1529 +# CONFIG_ARCH_PXA is not set
1530 +# CONFIG_ARCH_RPC is not set
1531 +# CONFIG_ARCH_SA1100 is not set
1532 +# CONFIG_ARCH_S3C2410 is not set
1533 +# CONFIG_ARCH_SHARK is not set
1534 +# CONFIG_ARCH_LH7A40X is not set
1535 +# CONFIG_ARCH_OMAP is not set
1538 +# Atmel AT91 System-on-Chip
1540 +# CONFIG_ARCH_AT91RM9200 is not set
1541 +CONFIG_ARCH_AT91SAM9260=y
1542 +# CONFIG_ARCH_AT91SAM9261 is not set
1543 +# CONFIG_ARCH_AT91SAM9263 is not set
1546 +# AT91SAM9260 Board Type
1548 +# CONFIG_MACH_AT91SAM9260EK is not set
1549 +CONFIG_MACH_CAM60=y
1552 +# AT91 Board Options
1556 +# AT91 Feature Selections
1558 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
1561 +# Processor Type
1563 +CONFIG_CPU_32=y
1564 +CONFIG_CPU_ARM926T=y
1565 +CONFIG_CPU_32v5=y
1566 +CONFIG_CPU_ABRT_EV5TJ=y
1567 +CONFIG_CPU_CACHE_VIVT=y
1568 +CONFIG_CPU_COPY_V4WB=y
1569 +CONFIG_CPU_TLB_V4WBI=y
1570 +CONFIG_CPU_CP15=y
1571 +CONFIG_CPU_CP15_MMU=y
1574 +# Processor Features
1576 +# CONFIG_ARM_THUMB is not set
1577 +# CONFIG_CPU_ICACHE_DISABLE is not set
1578 +# CONFIG_CPU_DCACHE_DISABLE is not set
1579 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
1580 +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
1583 +# Bus support
1587 +# PCCARD (PCMCIA/CardBus) support
1589 +# CONFIG_PCCARD is not set
1592 +# Kernel Features
1594 +# CONFIG_PREEMPT is not set
1595 +# CONFIG_NO_IDLE_HZ is not set
1596 +CONFIG_HZ=100
1597 +# CONFIG_AEABI is not set
1598 +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
1599 +CONFIG_SELECT_MEMORY_MODEL=y
1600 +CONFIG_FLATMEM_MANUAL=y
1601 +# CONFIG_DISCONTIGMEM_MANUAL is not set
1602 +# CONFIG_SPARSEMEM_MANUAL is not set
1603 +CONFIG_FLATMEM=y
1604 +CONFIG_FLAT_NODE_MEM_MAP=y
1605 +# CONFIG_SPARSEMEM_STATIC is not set
1606 +CONFIG_SPLIT_PTLOCK_CPUS=4096
1607 +# CONFIG_RESOURCES_64BIT is not set
1608 +# CONFIG_LEDS is not set
1609 +CONFIG_ALIGNMENT_TRAP=y
1612 +# Boot options
1614 +CONFIG_ZBOOT_ROM_TEXT=0x22000000
1615 +CONFIG_ZBOOT_ROM_BSS=0x20004000
1616 +# CONFIG_ZBOOT_ROM is not set
1617 +CONFIG_CMDLINE="console=ttyS0,115200 noinitrd root=/dev/mtdblock3 rootfstype=jffs2 mem=64M"
1618 +# CONFIG_XIP_KERNEL is not set
1621 +# Floating point emulation
1625 +# At least one emulation must be selected
1627 +CONFIG_FPE_NWFPE=y
1628 +# CONFIG_FPE_NWFPE_XP is not set
1629 +# CONFIG_FPE_FASTFPE is not set
1630 +# CONFIG_VFP is not set
1633 +# Userspace binary formats
1635 +CONFIG_BINFMT_ELF=y
1636 +# CONFIG_BINFMT_AOUT is not set
1637 +# CONFIG_BINFMT_MISC is not set
1638 +# CONFIG_ARTHUR is not set
1641 +# Power management options
1643 +# CONFIG_PM is not set
1644 +# CONFIG_APM is not set
1647 +# Networking
1649 +CONFIG_NET=y
1652 +# Networking options
1654 +# CONFIG_NETDEBUG is not set
1655 +CONFIG_PACKET=y
1656 +# CONFIG_PACKET_MMAP is not set
1657 +CONFIG_UNIX=y
1658 +CONFIG_XFRM=y
1659 +# CONFIG_XFRM_USER is not set
1660 +# CONFIG_XFRM_SUB_POLICY is not set
1661 +# CONFIG_NET_KEY is not set
1662 +CONFIG_INET=y
1663 +# CONFIG_IP_MULTICAST is not set
1664 +# CONFIG_IP_ADVANCED_ROUTER is not set
1665 +CONFIG_IP_FIB_HASH=y
1666 +CONFIG_IP_PNP=y
1667 +# CONFIG_IP_PNP_DHCP is not set
1668 +CONFIG_IP_PNP_BOOTP=y
1669 +# CONFIG_IP_PNP_RARP is not set
1670 +# CONFIG_NET_IPIP is not set
1671 +# CONFIG_NET_IPGRE is not set
1672 +# CONFIG_ARPD is not set
1673 +# CONFIG_SYN_COOKIES is not set
1674 +# CONFIG_INET_AH is not set
1675 +# CONFIG_INET_ESP is not set
1676 +# CONFIG_INET_IPCOMP is not set
1677 +# CONFIG_INET_XFRM_TUNNEL is not set
1678 +# CONFIG_INET_TUNNEL is not set
1679 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
1680 +CONFIG_INET_XFRM_MODE_TUNNEL=y
1681 +CONFIG_INET_XFRM_MODE_BEET=y
1682 +CONFIG_INET_DIAG=y
1683 +CONFIG_INET_TCP_DIAG=y
1684 +# CONFIG_TCP_CONG_ADVANCED is not set
1685 +CONFIG_TCP_CONG_CUBIC=y
1686 +CONFIG_DEFAULT_TCP_CONG="cubic"
1687 +# CONFIG_TCP_MD5SIG is not set
1688 +# CONFIG_IPV6 is not set
1689 +# CONFIG_INET6_XFRM_TUNNEL is not set
1690 +# CONFIG_INET6_TUNNEL is not set
1691 +# CONFIG_NETWORK_SECMARK is not set
1692 +# CONFIG_NETFILTER is not set
1695 +# DCCP Configuration (EXPERIMENTAL)
1697 +# CONFIG_IP_DCCP is not set
1700 +# SCTP Configuration (EXPERIMENTAL)
1702 +# CONFIG_IP_SCTP is not set
1705 +# TIPC Configuration (EXPERIMENTAL)
1707 +# CONFIG_TIPC is not set
1708 +# CONFIG_ATM is not set
1709 +# CONFIG_BRIDGE is not set
1710 +# CONFIG_VLAN_8021Q is not set
1711 +# CONFIG_DECNET is not set
1712 +# CONFIG_LLC2 is not set
1713 +# CONFIG_IPX is not set
1714 +# CONFIG_ATALK is not set
1715 +# CONFIG_X25 is not set
1716 +# CONFIG_LAPB is not set
1717 +# CONFIG_ECONET is not set
1718 +# CONFIG_WAN_ROUTER is not set
1721 +# QoS and/or fair queueing
1723 +# CONFIG_NET_SCHED is not set
1726 +# Network testing
1728 +# CONFIG_NET_PKTGEN is not set
1729 +# CONFIG_HAMRADIO is not set
1730 +# CONFIG_IRDA is not set
1731 +# CONFIG_BT is not set
1732 +# CONFIG_IEEE80211 is not set
1735 +# Device Drivers
1739 +# Generic Driver Options
1741 +CONFIG_STANDALONE=y
1742 +CONFIG_PREVENT_FIRMWARE_BUILD=y
1743 +# CONFIG_FW_LOADER is not set
1744 +# CONFIG_DEBUG_DRIVER is not set
1745 +# CONFIG_SYS_HYPERVISOR is not set
1748 +# Connector - unified userspace <-> kernelspace linker
1750 +# CONFIG_CONNECTOR is not set
1753 +# Memory Technology Devices (MTD)
1755 +CONFIG_MTD=y
1756 +# CONFIG_MTD_DEBUG is not set
1757 +CONFIG_MTD_CONCAT=y
1758 +CONFIG_MTD_PARTITIONS=y
1759 +# CONFIG_MTD_REDBOOT_PARTS is not set
1760 +CONFIG_MTD_CMDLINE_PARTS=y
1761 +# CONFIG_MTD_AFS_PARTS is not set
1764 +# User Modules And Translation Layers
1766 +CONFIG_MTD_CHAR=y
1767 +CONFIG_MTD_BLKDEVS=y
1768 +CONFIG_MTD_BLOCK=y
1769 +# CONFIG_FTL is not set
1770 +# CONFIG_NFTL is not set
1771 +# CONFIG_INFTL is not set
1772 +# CONFIG_RFD_FTL is not set
1773 +# CONFIG_SSFDC is not set
1776 +# RAM/ROM/Flash chip drivers
1778 +CONFIG_MTD_CFI=y
1779 +# CONFIG_MTD_JEDECPROBE is not set
1780 +CONFIG_MTD_GEN_PROBE=y
1781 +# CONFIG_MTD_CFI_ADV_OPTIONS is not set
1782 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
1783 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
1784 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
1785 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
1786 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
1787 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
1788 +CONFIG_MTD_CFI_I1=y
1789 +CONFIG_MTD_CFI_I2=y
1790 +# CONFIG_MTD_CFI_I4 is not set
1791 +# CONFIG_MTD_CFI_I8 is not set
1792 +# CONFIG_MTD_CFI_INTELEXT is not set
1793 +# CONFIG_MTD_CFI_AMDSTD is not set
1794 +# CONFIG_MTD_CFI_STAA is not set
1795 +# CONFIG_MTD_RAM is not set
1796 +# CONFIG_MTD_ROM is not set
1797 +# CONFIG_MTD_ABSENT is not set
1798 +# CONFIG_MTD_OBSOLETE_CHIPS is not set
1801 +# Mapping drivers for chip access
1803 +CONFIG_MTD_COMPLEX_MAPPINGS=y
1804 +# CONFIG_MTD_PHYSMAP is not set
1805 +# CONFIG_MTD_ARM_INTEGRATOR is not set
1806 +# CONFIG_MTD_PLATRAM is not set
1809 +# Self-contained MTD device drivers
1811 +CONFIG_MTD_DATAFLASH=y
1812 +# CONFIG_MTD_M25P80 is not set
1813 +# CONFIG_MTD_SLRAM is not set
1814 +# CONFIG_MTD_PHRAM is not set
1815 +# CONFIG_MTD_MTDRAM is not set
1816 +# CONFIG_MTD_BLOCK2MTD is not set
1819 +# Disk-On-Chip Device Drivers
1821 +# CONFIG_MTD_DOC2000 is not set
1822 +# CONFIG_MTD_DOC2001 is not set
1823 +# CONFIG_MTD_DOC2001PLUS is not set
1826 +# NAND Flash Device Drivers
1828 +# CONFIG_MTD_NAND is not set
1831 +# OneNAND Flash Device Drivers
1833 +# CONFIG_MTD_ONENAND is not set
1836 +# Parallel port support
1838 +# CONFIG_PARPORT is not set
1841 +# Plug and Play support
1845 +# Block devices
1847 +# CONFIG_BLK_DEV_COW_COMMON is not set
1848 +# CONFIG_BLK_DEV_LOOP is not set
1849 +# CONFIG_BLK_DEV_NBD is not set
1850 +CONFIG_BLK_DEV_RAM=y
1851 +CONFIG_BLK_DEV_RAM_COUNT=16
1852 +CONFIG_BLK_DEV_RAM_SIZE=8192
1853 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
1854 +CONFIG_BLK_DEV_INITRD=y
1855 +# CONFIG_CDROM_PKTCDVD is not set
1856 +# CONFIG_ATA_OVER_ETH is not set
1859 +# SCSI device support
1861 +# CONFIG_RAID_ATTRS is not set
1862 +# CONFIG_SCSI is not set
1863 +# CONFIG_SCSI_NETLINK is not set
1866 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
1868 +# CONFIG_ATA is not set
1871 +# Multi-device support (RAID and LVM)
1873 +# CONFIG_MD is not set
1876 +# Fusion MPT device support
1878 +# CONFIG_FUSION is not set
1881 +# IEEE 1394 (FireWire) support
1885 +# I2O device support
1889 +# Network device support
1891 +CONFIG_NETDEVICES=y
1892 +# CONFIG_DUMMY is not set
1893 +# CONFIG_BONDING is not set
1894 +# CONFIG_EQUALIZER is not set
1895 +# CONFIG_TUN is not set
1898 +# PHY device support
1900 +# CONFIG_PHYLIB is not set
1903 +# Ethernet (10 or 100Mbit)
1905 +CONFIG_NET_ETHERNET=y
1906 +CONFIG_MII=y
1907 +CONFIG_MACB=y
1908 +# CONFIG_SMC91X is not set
1909 +# CONFIG_DM9000 is not set
1912 +# Ethernet (1000 Mbit)
1916 +# Ethernet (10000 Mbit)
1920 +# Token Ring devices
1924 +# Wireless LAN (non-hamradio)
1926 +# CONFIG_NET_RADIO is not set
1929 +# Wan interfaces
1931 +# CONFIG_WAN is not set
1932 +# CONFIG_PPP is not set
1933 +# CONFIG_SLIP is not set
1934 +# CONFIG_SHAPER is not set
1935 +# CONFIG_NETCONSOLE is not set
1936 +# CONFIG_NETPOLL is not set
1937 +# CONFIG_NET_POLL_CONTROLLER is not set
1940 +# ISDN subsystem
1942 +# CONFIG_ISDN is not set
1945 +# Input device support
1947 +CONFIG_INPUT=y
1948 +# CONFIG_INPUT_FF_MEMLESS is not set
1951 +# Userland interfaces
1953 +CONFIG_INPUT_MOUSEDEV=y
1954 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
1955 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1956 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1957 +# CONFIG_INPUT_JOYDEV is not set
1958 +# CONFIG_INPUT_TSDEV is not set
1959 +# CONFIG_INPUT_EVDEV is not set
1960 +# CONFIG_INPUT_EVBUG is not set
1963 +# Input Device Drivers
1965 +# CONFIG_INPUT_KEYBOARD is not set
1966 +# CONFIG_INPUT_MOUSE is not set
1967 +# CONFIG_INPUT_JOYSTICK is not set
1968 +# CONFIG_INPUT_TOUCHSCREEN is not set
1969 +# CONFIG_INPUT_MISC is not set
1972 +# Hardware I/O ports
1974 +# CONFIG_SERIO is not set
1975 +# CONFIG_GAMEPORT is not set
1978 +# Character devices
1980 +CONFIG_VT=y
1981 +CONFIG_VT_CONSOLE=y
1982 +CONFIG_HW_CONSOLE=y
1983 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
1984 +# CONFIG_SERIAL_NONSTANDARD is not set
1987 +# Serial drivers
1989 +# CONFIG_SERIAL_8250 is not set
1992 +# Non-8250 serial port support
1994 +CONFIG_SERIAL_ATMEL=y
1995 +CONFIG_SERIAL_ATMEL_CONSOLE=y
1996 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
1997 +CONFIG_SERIAL_CORE=y
1998 +CONFIG_SERIAL_CORE_CONSOLE=y
1999 +CONFIG_UNIX98_PTYS=y
2000 +CONFIG_LEGACY_PTYS=y
2001 +CONFIG_LEGACY_PTY_COUNT=256
2004 +# IPMI
2006 +# CONFIG_IPMI_HANDLER is not set
2009 +# Watchdog Cards
2011 +# CONFIG_WATCHDOG is not set
2012 +# CONFIG_HW_RANDOM is not set
2013 +# CONFIG_NVRAM is not set
2014 +# CONFIG_DTLK is not set
2015 +# CONFIG_R3964 is not set
2016 +# CONFIG_RAW_DRIVER is not set
2019 +# TPM devices
2021 +# CONFIG_TCG_TPM is not set
2024 +# I2C support
2026 +# CONFIG_I2C is not set
2029 +# SPI support
2031 +CONFIG_SPI=y
2032 +# CONFIG_SPI_DEBUG is not set
2033 +CONFIG_SPI_MASTER=y
2036 +# SPI Master Controller Drivers
2038 +CONFIG_SPI_ATMEL=y
2039 +# CONFIG_SPI_BITBANG is not set
2042 +# SPI Protocol Masters
2046 +# Dallas's 1-wire bus
2048 +# CONFIG_W1 is not set
2051 +# Hardware Monitoring support
2053 +# CONFIG_HWMON is not set
2054 +# CONFIG_HWMON_VID is not set
2057 +# Misc devices
2059 +# CONFIG_TIFM_CORE is not set
2062 +# LED devices
2064 +# CONFIG_NEW_LEDS is not set
2067 +# LED drivers
2071 +# LED Triggers
2075 +# Multimedia devices
2077 +# CONFIG_VIDEO_DEV is not set
2080 +# Digital Video Broadcasting Devices
2082 +# CONFIG_DVB is not set
2085 +# Graphics support
2087 +# CONFIG_FIRMWARE_EDID is not set
2088 +# CONFIG_FB is not set
2091 +# Console display driver support
2093 +# CONFIG_VGA_CONSOLE is not set
2094 +CONFIG_DUMMY_CONSOLE=y
2095 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
2098 +# Sound
2100 +# CONFIG_SOUND is not set
2103 +# HID Devices
2105 +# CONFIG_HID is not set
2108 +# USB support
2110 +CONFIG_USB_ARCH_HAS_HCD=y
2111 +CONFIG_USB_ARCH_HAS_OHCI=y
2112 +# CONFIG_USB_ARCH_HAS_EHCI is not set
2113 +# CONFIG_USB is not set
2116 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
2120 +# USB Gadget Support
2122 +# CONFIG_USB_GADGET is not set
2125 +# MMC/SD Card support
2127 +# CONFIG_MMC is not set
2130 +# Real Time Clock
2132 +CONFIG_RTC_LIB=y
2133 +# CONFIG_RTC_CLASS is not set
2136 +# File systems
2138 +CONFIG_EXT2_FS=y
2139 +# CONFIG_EXT2_FS_XATTR is not set
2140 +# CONFIG_EXT2_FS_XIP is not set
2141 +CONFIG_EXT3_FS=y
2142 +CONFIG_EXT3_FS_XATTR=y
2143 +# CONFIG_EXT3_FS_POSIX_ACL is not set
2144 +# CONFIG_EXT3_FS_SECURITY is not set
2145 +# CONFIG_EXT4DEV_FS is not set
2146 +CONFIG_JBD=y
2147 +# CONFIG_JBD_DEBUG is not set
2148 +CONFIG_FS_MBCACHE=y
2149 +# CONFIG_REISERFS_FS is not set
2150 +# CONFIG_JFS_FS is not set
2151 +# CONFIG_FS_POSIX_ACL is not set
2152 +# CONFIG_XFS_FS is not set
2153 +# CONFIG_GFS2_FS is not set
2154 +# CONFIG_OCFS2_FS is not set
2155 +# CONFIG_MINIX_FS is not set
2156 +# CONFIG_ROMFS_FS is not set
2157 +CONFIG_INOTIFY=y
2158 +CONFIG_INOTIFY_USER=y
2159 +# CONFIG_QUOTA is not set
2160 +CONFIG_DNOTIFY=y
2161 +# CONFIG_AUTOFS_FS is not set
2162 +CONFIG_AUTOFS4_FS=y
2163 +# CONFIG_FUSE_FS is not set
2166 +# CD-ROM/DVD Filesystems
2168 +# CONFIG_ISO9660_FS is not set
2169 +# CONFIG_UDF_FS is not set
2172 +# DOS/FAT/NT Filesystems
2174 +CONFIG_FAT_FS=y
2175 +# CONFIG_MSDOS_FS is not set
2176 +CONFIG_VFAT_FS=y
2177 +CONFIG_FAT_DEFAULT_CODEPAGE=437
2178 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2179 +# CONFIG_NTFS_FS is not set
2182 +# Pseudo filesystems
2184 +CONFIG_PROC_FS=y
2185 +CONFIG_PROC_SYSCTL=y
2186 +CONFIG_SYSFS=y
2187 +CONFIG_TMPFS=y
2188 +# CONFIG_TMPFS_POSIX_ACL is not set
2189 +# CONFIG_HUGETLB_PAGE is not set
2190 +CONFIG_RAMFS=y
2191 +# CONFIG_CONFIGFS_FS is not set
2194 +# Miscellaneous filesystems
2196 +# CONFIG_ADFS_FS is not set
2197 +# CONFIG_AFFS_FS is not set
2198 +# CONFIG_HFS_FS is not set
2199 +# CONFIG_HFSPLUS_FS is not set
2200 +# CONFIG_BEFS_FS is not set
2201 +# CONFIG_BFS_FS is not set
2202 +# CONFIG_EFS_FS is not set
2203 +CONFIG_JFFS2_FS=y
2204 +CONFIG_JFFS2_FS_DEBUG=0
2205 +CONFIG_JFFS2_FS_WRITEBUFFER=y
2206 +# CONFIG_JFFS2_SUMMARY is not set
2207 +# CONFIG_JFFS2_FS_XATTR is not set
2208 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
2209 +CONFIG_JFFS2_ZLIB=y
2210 +CONFIG_JFFS2_RTIME=y
2211 +# CONFIG_JFFS2_RUBIN is not set
2212 +CONFIG_CRAMFS=y
2213 +# CONFIG_VXFS_FS is not set
2214 +# CONFIG_HPFS_FS is not set
2215 +# CONFIG_QNX4FS_FS is not set
2216 +# CONFIG_SYSV_FS is not set
2217 +# CONFIG_UFS_FS is not set
2220 +# Network File Systems
2222 +CONFIG_NFS_FS=y
2223 +CONFIG_NFS_V3=y
2224 +# CONFIG_NFS_V3_ACL is not set
2225 +# CONFIG_NFS_V4 is not set
2226 +# CONFIG_NFS_DIRECTIO is not set
2227 +# CONFIG_NFSD is not set
2228 +CONFIG_ROOT_NFS=y
2229 +CONFIG_LOCKD=y
2230 +CONFIG_LOCKD_V4=y
2231 +CONFIG_NFS_COMMON=y
2232 +CONFIG_SUNRPC=y
2233 +# CONFIG_RPCSEC_GSS_KRB5 is not set
2234 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
2235 +# CONFIG_SMB_FS is not set
2236 +# CONFIG_CIFS is not set
2237 +# CONFIG_NCP_FS is not set
2238 +# CONFIG_CODA_FS is not set
2239 +# CONFIG_AFS_FS is not set
2240 +# CONFIG_9P_FS is not set
2243 +# Partition Types
2245 +# CONFIG_PARTITION_ADVANCED is not set
2246 +CONFIG_MSDOS_PARTITION=y
2249 +# Native Language Support
2251 +CONFIG_NLS=y
2252 +CONFIG_NLS_DEFAULT="iso8859-1"
2253 +CONFIG_NLS_CODEPAGE_437=y
2254 +# CONFIG_NLS_CODEPAGE_737 is not set
2255 +# CONFIG_NLS_CODEPAGE_775 is not set
2256 +CONFIG_NLS_CODEPAGE_850=y
2257 +# CONFIG_NLS_CODEPAGE_852 is not set
2258 +# CONFIG_NLS_CODEPAGE_855 is not set
2259 +# CONFIG_NLS_CODEPAGE_857 is not set
2260 +# CONFIG_NLS_CODEPAGE_860 is not set
2261 +# CONFIG_NLS_CODEPAGE_861 is not set
2262 +# CONFIG_NLS_CODEPAGE_862 is not set
2263 +# CONFIG_NLS_CODEPAGE_863 is not set
2264 +# CONFIG_NLS_CODEPAGE_864 is not set
2265 +# CONFIG_NLS_CODEPAGE_865 is not set
2266 +# CONFIG_NLS_CODEPAGE_866 is not set
2267 +# CONFIG_NLS_CODEPAGE_869 is not set
2268 +# CONFIG_NLS_CODEPAGE_936 is not set
2269 +# CONFIG_NLS_CODEPAGE_950 is not set
2270 +# CONFIG_NLS_CODEPAGE_932 is not set
2271 +# CONFIG_NLS_CODEPAGE_949 is not set
2272 +# CONFIG_NLS_CODEPAGE_874 is not set
2273 +# CONFIG_NLS_ISO8859_8 is not set
2274 +# CONFIG_NLS_CODEPAGE_1250 is not set
2275 +# CONFIG_NLS_CODEPAGE_1251 is not set
2276 +# CONFIG_NLS_ASCII is not set
2277 +CONFIG_NLS_ISO8859_1=y
2278 +# CONFIG_NLS_ISO8859_2 is not set
2279 +# CONFIG_NLS_ISO8859_3 is not set
2280 +# CONFIG_NLS_ISO8859_4 is not set
2281 +# CONFIG_NLS_ISO8859_5 is not set
2282 +# CONFIG_NLS_ISO8859_6 is not set
2283 +# CONFIG_NLS_ISO8859_7 is not set
2284 +# CONFIG_NLS_ISO8859_9 is not set
2285 +# CONFIG_NLS_ISO8859_13 is not set
2286 +# CONFIG_NLS_ISO8859_14 is not set
2287 +# CONFIG_NLS_ISO8859_15 is not set
2288 +# CONFIG_NLS_KOI8_R is not set
2289 +# CONFIG_NLS_KOI8_U is not set
2290 +# CONFIG_NLS_UTF8 is not set
2293 +# Distributed Lock Manager
2295 +# CONFIG_DLM is not set
2298 +# Profiling support
2300 +# CONFIG_PROFILING is not set
2303 +# Kernel hacking
2305 +# CONFIG_PRINTK_TIME is not set
2306 +CONFIG_ENABLE_MUST_CHECK=y
2307 +# CONFIG_MAGIC_SYSRQ is not set
2308 +# CONFIG_UNUSED_SYMBOLS is not set
2309 +# CONFIG_DEBUG_FS is not set
2310 +# CONFIG_HEADERS_CHECK is not set
2311 +CONFIG_DEBUG_KERNEL=y
2312 +CONFIG_LOG_BUF_SHIFT=14
2313 +CONFIG_DETECT_SOFTLOCKUP=y
2314 +# CONFIG_SCHEDSTATS is not set
2315 +# CONFIG_DEBUG_SLAB is not set
2316 +# CONFIG_DEBUG_RT_MUTEXES is not set
2317 +# CONFIG_RT_MUTEX_TESTER is not set
2318 +# CONFIG_DEBUG_SPINLOCK is not set
2319 +# CONFIG_DEBUG_MUTEXES is not set
2320 +# CONFIG_DEBUG_RWSEMS is not set
2321 +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
2322 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
2323 +# CONFIG_DEBUG_KOBJECT is not set
2324 +CONFIG_DEBUG_BUGVERBOSE=y
2325 +# CONFIG_DEBUG_INFO is not set
2326 +# CONFIG_DEBUG_VM is not set
2327 +# CONFIG_DEBUG_LIST is not set
2328 +CONFIG_FRAME_POINTER=y
2329 +CONFIG_FORCED_INLINING=y
2330 +# CONFIG_RCU_TORTURE_TEST is not set
2331 +CONFIG_DEBUG_USER=y
2332 +# CONFIG_DEBUG_ERRORS is not set
2333 +CONFIG_DEBUG_LL=y
2334 +# CONFIG_DEBUG_ICEDCC is not set
2337 +# Security options
2339 +# CONFIG_KEYS is not set
2340 +# CONFIG_SECURITY is not set
2343 +# Cryptographic options
2345 +# CONFIG_CRYPTO is not set
2348 +# Library routines
2350 +CONFIG_BITREVERSE=y
2351 +# CONFIG_CRC_CCITT is not set
2352 +# CONFIG_CRC16 is not set
2353 +CONFIG_CRC32=y
2354 +# CONFIG_LIBCRC32C is not set
2355 +CONFIG_ZLIB_INFLATE=y
2356 +CONFIG_ZLIB_DEFLATE=y
2357 +CONFIG_PLIST=y
2358 +CONFIG_IOMAP_COPY=y
2359 diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig
2360 index 88e5d28..fcc0b69 100644
2361 --- a/arch/arm/configs/csb337_defconfig
2362 +++ b/arch/arm/configs/csb337_defconfig
2363 @@ -657,14 +657,14 @@ CONFIG_I2C_CHARDEV=y
2365 # I2C Algorithms
2367 -# CONFIG_I2C_ALGOBIT is not set
2368 +CONFIG_I2C_ALGOBIT=y
2369 # CONFIG_I2C_ALGOPCF is not set
2370 # CONFIG_I2C_ALGOPCA is not set
2373 # I2C Hardware Bus support
2375 -CONFIG_I2C_AT91=y
2376 +CONFIG_I2C_GPIO=y
2377 # CONFIG_I2C_PARPORT_LIGHT is not set
2378 # CONFIG_I2C_STUB is not set
2379 # CONFIG_I2C_PCA_ISA is not set
2380 diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig
2381 index 669f035..bffe63b 100644
2382 --- a/arch/arm/configs/csb637_defconfig
2383 +++ b/arch/arm/configs/csb637_defconfig
2384 @@ -658,14 +658,14 @@ CONFIG_I2C_CHARDEV=y
2386 # I2C Algorithms
2388 -# CONFIG_I2C_ALGOBIT is not set
2389 +CONFIG_I2C_ALGOBIT=y
2390 # CONFIG_I2C_ALGOPCF is not set
2391 # CONFIG_I2C_ALGOPCA is not set
2394 # I2C Hardware Bus support
2396 -CONFIG_I2C_AT91=y
2397 +CONFIG_I2C_GPIO=y
2398 # CONFIG_I2C_PARPORT_LIGHT is not set
2399 # CONFIG_I2C_STUB is not set
2400 # CONFIG_I2C_PCA_ISA is not set
2401 diff --git a/arch/arm/configs/ecbat91_defconfig b/arch/arm/configs/ecbat91_defconfig
2402 new file mode 100644
2403 index 0000000..90ed214
2404 --- /dev/null
2405 +++ b/arch/arm/configs/ecbat91_defconfig
2406 @@ -0,0 +1,1315 @@
2408 +# Automatically generated make config: don't edit
2409 +# Linux kernel version: 2.6.22-rc4
2410 +# Sat Jun 9 01:30:18 2007
2412 +CONFIG_ARM=y
2413 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
2414 +CONFIG_GENERIC_GPIO=y
2415 +# CONFIG_GENERIC_TIME is not set
2416 +# CONFIG_GENERIC_CLOCKEVENTS is not set
2417 +CONFIG_MMU=y
2418 +# CONFIG_NO_IOPORT is not set
2419 +CONFIG_GENERIC_HARDIRQS=y
2420 +CONFIG_STACKTRACE_SUPPORT=y
2421 +CONFIG_LOCKDEP_SUPPORT=y
2422 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
2423 +CONFIG_HARDIRQS_SW_RESEND=y
2424 +CONFIG_GENERIC_IRQ_PROBE=y
2425 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
2426 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
2427 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
2428 +CONFIG_GENERIC_HWEIGHT=y
2429 +CONFIG_GENERIC_CALIBRATE_DELAY=y
2430 +CONFIG_ZONE_DMA=y
2431 +CONFIG_VECTORS_BASE=0xffff0000
2432 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
2435 +# Code maturity level options
2437 +CONFIG_EXPERIMENTAL=y
2438 +CONFIG_BROKEN_ON_SMP=y
2439 +CONFIG_LOCK_KERNEL=y
2440 +CONFIG_INIT_ENV_ARG_LIMIT=32
2443 +# General setup
2445 +CONFIG_LOCALVERSION=""
2446 +CONFIG_LOCALVERSION_AUTO=y
2447 +CONFIG_SWAP=y
2448 +CONFIG_SYSVIPC=y
2449 +# CONFIG_IPC_NS is not set
2450 +CONFIG_SYSVIPC_SYSCTL=y
2451 +# CONFIG_POSIX_MQUEUE is not set
2452 +# CONFIG_BSD_PROCESS_ACCT is not set
2453 +# CONFIG_TASKSTATS is not set
2454 +# CONFIG_UTS_NS is not set
2455 +# CONFIG_AUDIT is not set
2456 +CONFIG_IKCONFIG=y
2457 +CONFIG_IKCONFIG_PROC=y
2458 +CONFIG_LOG_BUF_SHIFT=14
2459 +CONFIG_SYSFS_DEPRECATED=y
2460 +# CONFIG_RELAY is not set
2461 +# CONFIG_BLK_DEV_INITRD is not set
2462 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
2463 +CONFIG_SYSCTL=y
2464 +# CONFIG_EMBEDDED is not set
2465 +CONFIG_UID16=y
2466 +CONFIG_SYSCTL_SYSCALL=y
2467 +CONFIG_KALLSYMS=y
2468 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
2469 +CONFIG_HOTPLUG=y
2470 +CONFIG_PRINTK=y
2471 +CONFIG_BUG=y
2472 +CONFIG_ELF_CORE=y
2473 +CONFIG_BASE_FULL=y
2474 +CONFIG_FUTEX=y
2475 +CONFIG_ANON_INODES=y
2476 +CONFIG_EPOLL=y
2477 +CONFIG_SIGNALFD=y
2478 +CONFIG_TIMERFD=y
2479 +CONFIG_EVENTFD=y
2480 +CONFIG_SHMEM=y
2481 +CONFIG_VM_EVENT_COUNTERS=y
2482 +CONFIG_SLAB=y
2483 +# CONFIG_SLUB is not set
2484 +# CONFIG_SLOB is not set
2485 +CONFIG_RT_MUTEXES=y
2486 +# CONFIG_TINY_SHMEM is not set
2487 +CONFIG_BASE_SMALL=0
2490 +# Loadable module support
2492 +CONFIG_MODULES=y
2493 +CONFIG_MODULE_UNLOAD=y
2494 +# CONFIG_MODULE_FORCE_UNLOAD is not set
2495 +# CONFIG_MODVERSIONS is not set
2496 +# CONFIG_MODULE_SRCVERSION_ALL is not set
2497 +CONFIG_KMOD=y
2500 +# Block layer
2502 +CONFIG_BLOCK=y
2503 +# CONFIG_LBD is not set
2504 +# CONFIG_BLK_DEV_IO_TRACE is not set
2505 +# CONFIG_LSF is not set
2508 +# IO Schedulers
2510 +CONFIG_IOSCHED_NOOP=y
2511 +CONFIG_IOSCHED_AS=y
2512 +# CONFIG_IOSCHED_DEADLINE is not set
2513 +# CONFIG_IOSCHED_CFQ is not set
2514 +CONFIG_DEFAULT_AS=y
2515 +# CONFIG_DEFAULT_DEADLINE is not set
2516 +# CONFIG_DEFAULT_CFQ is not set
2517 +# CONFIG_DEFAULT_NOOP is not set
2518 +CONFIG_DEFAULT_IOSCHED="anticipatory"
2521 +# System Type
2523 +# CONFIG_ARCH_AAEC2000 is not set
2524 +# CONFIG_ARCH_INTEGRATOR is not set
2525 +# CONFIG_ARCH_REALVIEW is not set
2526 +# CONFIG_ARCH_VERSATILE is not set
2527 +CONFIG_ARCH_AT91=y
2528 +# CONFIG_ARCH_CLPS7500 is not set
2529 +# CONFIG_ARCH_CLPS711X is not set
2530 +# CONFIG_ARCH_CO285 is not set
2531 +# CONFIG_ARCH_EBSA110 is not set
2532 +# CONFIG_ARCH_EP93XX is not set
2533 +# CONFIG_ARCH_FOOTBRIDGE is not set
2534 +# CONFIG_ARCH_NETX is not set
2535 +# CONFIG_ARCH_H720X is not set
2536 +# CONFIG_ARCH_IMX is not set
2537 +# CONFIG_ARCH_IOP13XX is not set
2538 +# CONFIG_ARCH_IOP32X is not set
2539 +# CONFIG_ARCH_IOP33X is not set
2540 +# CONFIG_ARCH_IXP23XX is not set
2541 +# CONFIG_ARCH_IXP2000 is not set
2542 +# CONFIG_ARCH_IXP4XX is not set
2543 +# CONFIG_ARCH_L7200 is not set
2544 +# CONFIG_ARCH_KS8695 is not set
2545 +# CONFIG_ARCH_NS9XXX is not set
2546 +# CONFIG_ARCH_PNX4008 is not set
2547 +# CONFIG_ARCH_PXA is not set
2548 +# CONFIG_ARCH_RPC is not set
2549 +# CONFIG_ARCH_SA1100 is not set
2550 +# CONFIG_ARCH_S3C2410 is not set
2551 +# CONFIG_ARCH_SHARK is not set
2552 +# CONFIG_ARCH_LH7A40X is not set
2553 +# CONFIG_ARCH_DAVINCI is not set
2554 +# CONFIG_ARCH_OMAP is not set
2557 +# Atmel AT91 System-on-Chip
2559 +CONFIG_ARCH_AT91RM9200=y
2560 +# CONFIG_ARCH_AT91SAM9260 is not set
2561 +# CONFIG_ARCH_AT91SAM9261 is not set
2562 +# CONFIG_ARCH_AT91SAM9263 is not set
2563 +# CONFIG_ARCH_AT91SAM9RL is not set
2566 +# AT91RM9200 Board Type
2568 +# CONFIG_MACH_ONEARM is not set
2569 +# CONFIG_ARCH_AT91RM9200DK is not set
2570 +# CONFIG_MACH_AT91RM9200EK is not set
2571 +# CONFIG_MACH_CSB337 is not set
2572 +# CONFIG_MACH_CSB637 is not set
2573 +# CONFIG_MACH_CARMEVA is not set
2574 +# CONFIG_MACH_ATEB9200 is not set
2575 +# CONFIG_MACH_KB9200 is not set
2576 +# CONFIG_MACH_PICOTUX2XX is not set
2577 +# CONFIG_MACH_KAFA is not set
2578 +# CONFIG_MACH_CHUB is not set
2579 +CONFIG_MACH_ECBAT91=y
2582 +# AT91 Board Options
2584 +# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
2587 +# AT91 Feature Selections
2589 +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
2590 +# CONFIG_ATMEL_TCLIB is not set
2593 +# Processor Type
2595 +CONFIG_CPU_32=y
2596 +CONFIG_CPU_ARM920T=y
2597 +CONFIG_CPU_32v4T=y
2598 +CONFIG_CPU_ABRT_EV4T=y
2599 +CONFIG_CPU_CACHE_V4WT=y
2600 +CONFIG_CPU_CACHE_VIVT=y
2601 +CONFIG_CPU_COPY_V4WB=y
2602 +CONFIG_CPU_TLB_V4WBI=y
2603 +CONFIG_CPU_CP15=y
2604 +CONFIG_CPU_CP15_MMU=y
2607 +# Processor Features
2609 +CONFIG_ARM_THUMB=y
2610 +# CONFIG_CPU_ICACHE_DISABLE is not set
2611 +# CONFIG_CPU_DCACHE_DISABLE is not set
2612 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
2613 +# CONFIG_OUTER_CACHE is not set
2616 +# Bus support
2618 +# CONFIG_ARCH_SUPPORTS_MSI is not set
2621 +# PCCARD (PCMCIA/CardBus) support
2623 +CONFIG_PCCARD=y
2624 +# CONFIG_PCMCIA_DEBUG is not set
2625 +CONFIG_PCMCIA=y
2626 +CONFIG_PCMCIA_LOAD_CIS=y
2627 +CONFIG_PCMCIA_IOCTL=y
2630 +# PC-card bridges
2632 +CONFIG_AT91_CF=y
2635 +# Kernel Features
2637 +# CONFIG_TICK_ONESHOT is not set
2638 +CONFIG_PREEMPT=y
2639 +# CONFIG_NO_IDLE_HZ is not set
2640 +CONFIG_HZ=100
2641 +# CONFIG_AEABI is not set
2642 +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
2643 +CONFIG_SELECT_MEMORY_MODEL=y
2644 +CONFIG_FLATMEM_MANUAL=y
2645 +# CONFIG_DISCONTIGMEM_MANUAL is not set
2646 +# CONFIG_SPARSEMEM_MANUAL is not set
2647 +CONFIG_FLATMEM=y
2648 +CONFIG_FLAT_NODE_MEM_MAP=y
2649 +# CONFIG_SPARSEMEM_STATIC is not set
2650 +CONFIG_SPLIT_PTLOCK_CPUS=4096
2651 +# CONFIG_RESOURCES_64BIT is not set
2652 +CONFIG_ZONE_DMA_FLAG=1
2653 +CONFIG_LEDS=y
2654 +CONFIG_LEDS_TIMER=y
2655 +CONFIG_LEDS_CPU=y
2656 +CONFIG_ALIGNMENT_TRAP=y
2659 +# Boot options
2661 +CONFIG_ZBOOT_ROM_TEXT=0x0
2662 +CONFIG_ZBOOT_ROM_BSS=0x0
2663 +CONFIG_CMDLINE="rootfstype=reiserfs root=/dev/mmcblk0p1 console=ttyS0,115200n8 rootdelay=1"
2664 +# CONFIG_XIP_KERNEL is not set
2665 +# CONFIG_KEXEC is not set
2668 +# Floating point emulation
2672 +# At least one emulation must be selected
2674 +CONFIG_FPE_NWFPE=y
2675 +# CONFIG_FPE_NWFPE_XP is not set
2676 +# CONFIG_FPE_FASTFPE is not set
2679 +# Userspace binary formats
2681 +CONFIG_BINFMT_ELF=y
2682 +# CONFIG_BINFMT_AOUT is not set
2683 +# CONFIG_BINFMT_MISC is not set
2684 +# CONFIG_ARTHUR is not set
2687 +# Power management options
2689 +# CONFIG_PM is not set
2692 +# Networking
2694 +CONFIG_NET=y
2697 +# Networking options
2699 +CONFIG_PACKET=y
2700 +# CONFIG_PACKET_MMAP is not set
2701 +CONFIG_UNIX=y
2702 +CONFIG_XFRM=y
2703 +# CONFIG_XFRM_USER is not set
2704 +# CONFIG_XFRM_SUB_POLICY is not set
2705 +# CONFIG_XFRM_MIGRATE is not set
2706 +# CONFIG_NET_KEY is not set
2707 +CONFIG_INET=y
2708 +# CONFIG_IP_MULTICAST is not set
2709 +# CONFIG_IP_ADVANCED_ROUTER is not set
2710 +CONFIG_IP_FIB_HASH=y
2711 +CONFIG_IP_PNP=y
2712 +CONFIG_IP_PNP_DHCP=y
2713 +# CONFIG_IP_PNP_BOOTP is not set
2714 +# CONFIG_IP_PNP_RARP is not set
2715 +# CONFIG_NET_IPIP is not set
2716 +# CONFIG_NET_IPGRE is not set
2717 +# CONFIG_ARPD is not set
2718 +# CONFIG_SYN_COOKIES is not set
2719 +# CONFIG_INET_AH is not set
2720 +# CONFIG_INET_ESP is not set
2721 +# CONFIG_INET_IPCOMP is not set
2722 +# CONFIG_INET_XFRM_TUNNEL is not set
2723 +# CONFIG_INET_TUNNEL is not set
2724 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
2725 +CONFIG_INET_XFRM_MODE_TUNNEL=y
2726 +CONFIG_INET_XFRM_MODE_BEET=y
2727 +CONFIG_INET_DIAG=y
2728 +CONFIG_INET_TCP_DIAG=y
2729 +# CONFIG_TCP_CONG_ADVANCED is not set
2730 +CONFIG_TCP_CONG_CUBIC=y
2731 +CONFIG_DEFAULT_TCP_CONG="cubic"
2732 +# CONFIG_TCP_MD5SIG is not set
2733 +# CONFIG_IPV6 is not set
2734 +# CONFIG_INET6_XFRM_TUNNEL is not set
2735 +# CONFIG_INET6_TUNNEL is not set
2736 +# CONFIG_NETWORK_SECMARK is not set
2737 +# CONFIG_NETFILTER is not set
2738 +# CONFIG_IP_DCCP is not set
2739 +# CONFIG_IP_SCTP is not set
2740 +# CONFIG_TIPC is not set
2741 +# CONFIG_ATM is not set
2742 +# CONFIG_BRIDGE is not set
2743 +# CONFIG_VLAN_8021Q is not set
2744 +# CONFIG_DECNET is not set
2745 +# CONFIG_LLC2 is not set
2746 +# CONFIG_IPX is not set
2747 +# CONFIG_ATALK is not set
2748 +# CONFIG_X25 is not set
2749 +# CONFIG_LAPB is not set
2750 +# CONFIG_ECONET is not set
2751 +# CONFIG_WAN_ROUTER is not set
2754 +# QoS and/or fair queueing
2756 +# CONFIG_NET_SCHED is not set
2757 +CONFIG_NET_SCH_FIFO=y
2760 +# Network testing
2762 +# CONFIG_NET_PKTGEN is not set
2763 +# CONFIG_HAMRADIO is not set
2764 +# CONFIG_IRDA is not set
2765 +# CONFIG_BT is not set
2766 +# CONFIG_AF_RXRPC is not set
2769 +# Wireless
2771 +CONFIG_CFG80211=y
2772 +CONFIG_WIRELESS_EXT=y
2773 +CONFIG_MAC80211=y
2774 +# CONFIG_MAC80211_DEBUG is not set
2775 +CONFIG_IEEE80211=y
2776 +# CONFIG_IEEE80211_DEBUG is not set
2777 +CONFIG_IEEE80211_CRYPT_WEP=y
2778 +# CONFIG_IEEE80211_CRYPT_CCMP is not set
2779 +# CONFIG_IEEE80211_CRYPT_TKIP is not set
2780 +CONFIG_IEEE80211_SOFTMAC=y
2781 +CONFIG_IEEE80211_SOFTMAC_DEBUG=y
2782 +# CONFIG_RFKILL is not set
2785 +# Device Drivers
2789 +# Generic Driver Options
2791 +# CONFIG_STANDALONE is not set
2792 +# CONFIG_PREVENT_FIRMWARE_BUILD is not set
2793 +CONFIG_FW_LOADER=y
2794 +# CONFIG_SYS_HYPERVISOR is not set
2797 +# Connector - unified userspace <-> kernelspace linker
2799 +# CONFIG_CONNECTOR is not set
2800 +CONFIG_MTD=y
2801 +# CONFIG_MTD_DEBUG is not set
2802 +# CONFIG_MTD_CONCAT is not set
2803 +CONFIG_MTD_PARTITIONS=y
2804 +# CONFIG_MTD_REDBOOT_PARTS is not set
2805 +CONFIG_MTD_CMDLINE_PARTS=y
2806 +CONFIG_MTD_AFS_PARTS=y
2809 +# User Modules And Translation Layers
2811 +CONFIG_MTD_CHAR=y
2812 +CONFIG_MTD_BLKDEVS=y
2813 +CONFIG_MTD_BLOCK=y
2814 +# CONFIG_FTL is not set
2815 +# CONFIG_NFTL is not set
2816 +# CONFIG_INFTL is not set
2817 +# CONFIG_RFD_FTL is not set
2818 +# CONFIG_SSFDC is not set
2821 +# RAM/ROM/Flash chip drivers
2823 +# CONFIG_MTD_CFI is not set
2824 +# CONFIG_MTD_JEDECPROBE is not set
2825 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
2826 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
2827 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
2828 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
2829 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
2830 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
2831 +CONFIG_MTD_CFI_I1=y
2832 +CONFIG_MTD_CFI_I2=y
2833 +# CONFIG_MTD_CFI_I4 is not set
2834 +# CONFIG_MTD_CFI_I8 is not set
2835 +# CONFIG_MTD_RAM is not set
2836 +# CONFIG_MTD_ROM is not set
2837 +# CONFIG_MTD_ABSENT is not set
2840 +# Mapping drivers for chip access
2842 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
2843 +# CONFIG_MTD_PLATRAM is not set
2846 +# Self-contained MTD device drivers
2848 +CONFIG_MTD_DATAFLASH=y
2849 +# CONFIG_MTD_M25P80 is not set
2850 +# CONFIG_MTD_SLRAM is not set
2851 +# CONFIG_MTD_PHRAM is not set
2852 +# CONFIG_MTD_MTDRAM is not set
2853 +# CONFIG_MTD_BLOCK2MTD is not set
2856 +# Disk-On-Chip Device Drivers
2858 +# CONFIG_MTD_DOC2000 is not set
2859 +# CONFIG_MTD_DOC2001 is not set
2860 +# CONFIG_MTD_DOC2001PLUS is not set
2861 +# CONFIG_MTD_NAND is not set
2862 +# CONFIG_MTD_ONENAND is not set
2865 +# UBI - Unsorted block images
2867 +# CONFIG_MTD_UBI is not set
2870 +# Parallel port support
2872 +# CONFIG_PARPORT is not set
2875 +# Plug and Play support
2877 +# CONFIG_PNPACPI is not set
2880 +# Block devices
2882 +# CONFIG_BLK_DEV_COW_COMMON is not set
2883 +CONFIG_BLK_DEV_LOOP=y
2884 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
2885 +# CONFIG_BLK_DEV_NBD is not set
2886 +# CONFIG_BLK_DEV_UB is not set
2887 +# CONFIG_BLK_DEV_RAM is not set
2888 +# CONFIG_CDROM_PKTCDVD is not set
2889 +# CONFIG_ATA_OVER_ETH is not set
2890 +# CONFIG_IDE is not set
2893 +# SCSI device support
2895 +# CONFIG_RAID_ATTRS is not set
2896 +CONFIG_SCSI=y
2897 +# CONFIG_SCSI_TGT is not set
2898 +# CONFIG_SCSI_NETLINK is not set
2899 +CONFIG_SCSI_PROC_FS=y
2902 +# SCSI support type (disk, tape, CD-ROM)
2904 +CONFIG_BLK_DEV_SD=y
2905 +# CONFIG_CHR_DEV_ST is not set
2906 +# CONFIG_CHR_DEV_OSST is not set
2907 +# CONFIG_BLK_DEV_SR is not set
2908 +CONFIG_CHR_DEV_SG=y
2909 +# CONFIG_CHR_DEV_SCH is not set
2912 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
2914 +# CONFIG_SCSI_MULTI_LUN is not set
2915 +# CONFIG_SCSI_CONSTANTS is not set
2916 +# CONFIG_SCSI_LOGGING is not set
2917 +# CONFIG_SCSI_SCAN_ASYNC is not set
2918 +CONFIG_SCSI_WAIT_SCAN=m
2921 +# SCSI Transports
2923 +# CONFIG_SCSI_SPI_ATTRS is not set
2924 +# CONFIG_SCSI_FC_ATTRS is not set
2925 +# CONFIG_SCSI_ISCSI_ATTRS is not set
2926 +# CONFIG_SCSI_SAS_ATTRS is not set
2927 +# CONFIG_SCSI_SAS_LIBSAS is not set
2930 +# SCSI low-level drivers
2932 +# CONFIG_ISCSI_TCP is not set
2933 +# CONFIG_SCSI_DEBUG is not set
2936 +# PCMCIA SCSI adapter support
2938 +# CONFIG_PCMCIA_AHA152X is not set
2939 +# CONFIG_PCMCIA_FDOMAIN is not set
2940 +# CONFIG_PCMCIA_NINJA_SCSI is not set
2941 +# CONFIG_PCMCIA_QLOGIC is not set
2942 +# CONFIG_PCMCIA_SYM53C500 is not set
2943 +# CONFIG_ATA is not set
2946 +# Multi-device support (RAID and LVM)
2948 +# CONFIG_MD is not set
2951 +# Network device support
2953 +CONFIG_NETDEVICES=y
2954 +# CONFIG_DUMMY is not set
2955 +# CONFIG_BONDING is not set
2956 +# CONFIG_EQUALIZER is not set
2957 +# CONFIG_TUN is not set
2958 +# CONFIG_PHYLIB is not set
2961 +# Ethernet (10 or 100Mbit)
2963 +CONFIG_NET_ETHERNET=y
2964 +CONFIG_MII=y
2965 +CONFIG_ARM_AT91_ETHER=y
2966 +# CONFIG_SMC91X is not set
2967 +# CONFIG_DM9000 is not set
2968 +# CONFIG_NETDEV_1000 is not set
2969 +# CONFIG_NETDEV_10000 is not set
2972 +# Wireless LAN
2974 +# CONFIG_WLAN_PRE80211 is not set
2975 +# CONFIG_WLAN_80211 is not set
2978 +# USB Network Adapters
2980 +# CONFIG_USB_CATC is not set
2981 +# CONFIG_USB_KAWETH is not set
2982 +# CONFIG_USB_PEGASUS is not set
2983 +# CONFIG_USB_RTL8150 is not set
2984 +# CONFIG_USB_USBNET_MII is not set
2985 +# CONFIG_USB_USBNET is not set
2986 +# CONFIG_NET_PCMCIA is not set
2987 +# CONFIG_WAN is not set
2988 +CONFIG_PPP=y
2989 +CONFIG_PPP_MULTILINK=y
2990 +CONFIG_PPP_FILTER=y
2991 +CONFIG_PPP_ASYNC=y
2992 +# CONFIG_PPP_SYNC_TTY is not set
2993 +# CONFIG_PPP_DEFLATE is not set
2994 +# CONFIG_PPP_BSDCOMP is not set
2995 +# CONFIG_PPP_MPPE is not set
2996 +# CONFIG_PPPOE is not set
2997 +# CONFIG_SLIP is not set
2998 +CONFIG_SLHC=y
2999 +# CONFIG_SHAPER is not set
3000 +# CONFIG_NETCONSOLE is not set
3001 +# CONFIG_NETPOLL is not set
3002 +# CONFIG_NET_POLL_CONTROLLER is not set
3005 +# ISDN subsystem
3007 +# CONFIG_ISDN is not set
3010 +# Input device support
3012 +CONFIG_INPUT=y
3013 +# CONFIG_INPUT_FF_MEMLESS is not set
3016 +# Userland interfaces
3018 +CONFIG_INPUT_MOUSEDEV=y
3019 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
3020 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
3021 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
3022 +# CONFIG_INPUT_JOYDEV is not set
3023 +# CONFIG_INPUT_TSDEV is not set
3024 +# CONFIG_INPUT_EVDEV is not set
3025 +# CONFIG_INPUT_EVBUG is not set
3028 +# Input Device Drivers
3030 +# CONFIG_INPUT_KEYBOARD is not set
3031 +# CONFIG_INPUT_MOUSE is not set
3032 +# CONFIG_INPUT_JOYSTICK is not set
3033 +# CONFIG_INPUT_TABLET is not set
3034 +# CONFIG_INPUT_TOUCHSCREEN is not set
3035 +# CONFIG_INPUT_MISC is not set
3038 +# Hardware I/O ports
3040 +# CONFIG_SERIO is not set
3041 +# CONFIG_GAMEPORT is not set
3044 +# Character devices
3046 +CONFIG_VT=y
3047 +CONFIG_VT_CONSOLE=y
3048 +CONFIG_HW_CONSOLE=y
3049 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
3050 +# CONFIG_SERIAL_NONSTANDARD is not set
3053 +# Serial drivers
3055 +# CONFIG_SERIAL_8250 is not set
3058 +# Non-8250 serial port support
3060 +CONFIG_SERIAL_ATMEL=y
3061 +CONFIG_SERIAL_ATMEL_CONSOLE=y
3062 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
3063 +CONFIG_SERIAL_CORE=y
3064 +CONFIG_SERIAL_CORE_CONSOLE=y
3065 +CONFIG_UNIX98_PTYS=y
3066 +CONFIG_LEGACY_PTYS=y
3067 +CONFIG_LEGACY_PTY_COUNT=256
3070 +# IPMI
3072 +# CONFIG_IPMI_HANDLER is not set
3073 +CONFIG_WATCHDOG=y
3074 +CONFIG_WATCHDOG_NOWAYOUT=y
3077 +# Watchdog Device Drivers
3079 +# CONFIG_SOFT_WATCHDOG is not set
3080 +# CONFIG_AT91RM9200_WATCHDOG is not set
3083 +# USB-based Watchdog Cards
3085 +# CONFIG_USBPCWATCHDOG is not set
3086 +CONFIG_HW_RANDOM=y
3087 +# CONFIG_NVRAM is not set
3088 +# CONFIG_R3964 is not set
3091 +# PCMCIA character devices
3093 +# CONFIG_SYNCLINK_CS is not set
3094 +# CONFIG_CARDMAN_4000 is not set
3095 +# CONFIG_CARDMAN_4040 is not set
3096 +# CONFIG_RAW_DRIVER is not set
3099 +# TPM devices
3101 +# CONFIG_TCG_TPM is not set
3102 +# CONFIG_AT91_SPI is not set
3103 +CONFIG_I2C=y
3104 +CONFIG_I2C_BOARDINFO=y
3105 +CONFIG_I2C_CHARDEV=y
3108 +# I2C Algorithms
3110 +CONFIG_I2C_ALGOBIT=y
3111 +# CONFIG_I2C_ALGOPCF is not set
3112 +# CONFIG_I2C_ALGOPCA is not set
3115 +# I2C Hardware Bus support
3117 +CONFIG_I2C_GPIO=y
3118 +# CONFIG_I2C_GPIO is not set
3119 +# CONFIG_I2C_OCORES is not set
3120 +# CONFIG_I2C_PARPORT_LIGHT is not set
3121 +# CONFIG_I2C_SIMTEC is not set
3122 +# CONFIG_I2C_STUB is not set
3123 +# CONFIG_I2C_TINY_USB is not set
3124 +# CONFIG_I2C_PCA is not set
3127 +# Miscellaneous I2C Chip support
3129 +# CONFIG_SENSORS_DS1337 is not set
3130 +# CONFIG_SENSORS_DS1374 is not set
3131 +# CONFIG_SENSORS_EEPROM is not set
3132 +# CONFIG_SENSORS_PCF8574 is not set
3133 +# CONFIG_SENSORS_PCA9539 is not set
3134 +# CONFIG_SENSORS_PCF8591 is not set
3135 +# CONFIG_SENSORS_MAX6875 is not set
3136 +# CONFIG_I2C_DEBUG_CORE is not set
3137 +# CONFIG_I2C_DEBUG_ALGO is not set
3138 +# CONFIG_I2C_DEBUG_BUS is not set
3139 +# CONFIG_I2C_DEBUG_CHIP is not set
3142 +# SPI support
3144 +CONFIG_SPI=y
3145 +CONFIG_SPI_MASTER=y
3148 +# SPI Master Controller Drivers
3150 +# CONFIG_SPI_ATMEL is not set
3151 +CONFIG_SPI_BITBANG=y
3152 +CONFIG_SPI_AT91=y
3155 +# SPI Protocol Masters
3157 +# CONFIG_SPI_AT25 is not set
3158 +# CONFIG_SPI_SPIDEV is not set
3161 +# Dallas's 1-wire bus
3163 +# CONFIG_W1 is not set
3164 +CONFIG_HWMON=y
3165 +# CONFIG_HWMON_VID is not set
3166 +# CONFIG_SENSORS_ABITUGURU is not set
3167 +# CONFIG_SENSORS_AD7418 is not set
3168 +# CONFIG_SENSORS_ADM1021 is not set
3169 +# CONFIG_SENSORS_ADM1025 is not set
3170 +# CONFIG_SENSORS_ADM1026 is not set
3171 +# CONFIG_SENSORS_ADM1029 is not set
3172 +# CONFIG_SENSORS_ADM1031 is not set
3173 +# CONFIG_SENSORS_ADM9240 is not set
3174 +# CONFIG_SENSORS_ASB100 is not set
3175 +# CONFIG_SENSORS_ATXP1 is not set
3176 +# CONFIG_SENSORS_DS1621 is not set
3177 +# CONFIG_SENSORS_F71805F is not set
3178 +# CONFIG_SENSORS_FSCHER is not set
3179 +# CONFIG_SENSORS_FSCPOS is not set
3180 +# CONFIG_SENSORS_GL518SM is not set
3181 +# CONFIG_SENSORS_GL520SM is not set
3182 +# CONFIG_SENSORS_IT87 is not set
3183 +# CONFIG_SENSORS_LM63 is not set
3184 +# CONFIG_SENSORS_LM70 is not set
3185 +# CONFIG_SENSORS_LM75 is not set
3186 +# CONFIG_SENSORS_LM77 is not set
3187 +# CONFIG_SENSORS_LM78 is not set
3188 +# CONFIG_SENSORS_LM80 is not set
3189 +# CONFIG_SENSORS_LM83 is not set
3190 +# CONFIG_SENSORS_LM85 is not set
3191 +# CONFIG_SENSORS_LM87 is not set
3192 +# CONFIG_SENSORS_LM90 is not set
3193 +# CONFIG_SENSORS_LM92 is not set
3194 +# CONFIG_SENSORS_MAX1619 is not set
3195 +# CONFIG_SENSORS_MAX6650 is not set
3196 +# CONFIG_SENSORS_PC87360 is not set
3197 +# CONFIG_SENSORS_PC87427 is not set
3198 +# CONFIG_SENSORS_SMSC47M1 is not set
3199 +# CONFIG_SENSORS_SMSC47M192 is not set
3200 +# CONFIG_SENSORS_SMSC47B397 is not set
3201 +# CONFIG_SENSORS_VT1211 is not set
3202 +# CONFIG_SENSORS_W83781D is not set
3203 +# CONFIG_SENSORS_W83791D is not set
3204 +# CONFIG_SENSORS_W83792D is not set
3205 +# CONFIG_SENSORS_W83793 is not set
3206 +# CONFIG_SENSORS_W83L785TS is not set
3207 +# CONFIG_SENSORS_W83627HF is not set
3208 +# CONFIG_SENSORS_W83627EHF is not set
3209 +# CONFIG_HWMON_DEBUG_CHIP is not set
3212 +# Misc devices
3214 +# CONFIG_BLINK is not set
3217 +# Multifunction device drivers
3219 +# CONFIG_MFD_SM501 is not set
3222 +# LED devices
3224 +CONFIG_NEW_LEDS=y
3225 +CONFIG_LEDS_CLASS=y
3228 +# LED drivers
3232 +# LED Triggers
3234 +# CONFIG_LEDS_TRIGGERS is not set
3237 +# Multimedia devices
3239 +# CONFIG_VIDEO_DEV is not set
3240 +# CONFIG_DVB_CORE is not set
3241 +CONFIG_DAB=y
3242 +# CONFIG_USB_DABUSB is not set
3245 +# Graphics support
3247 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
3250 +# Display device support
3252 +# CONFIG_DISPLAY_SUPPORT is not set
3253 +# CONFIG_VGASTATE is not set
3254 +# CONFIG_FB is not set
3257 +# Console display driver support
3259 +# CONFIG_VGA_CONSOLE is not set
3260 +CONFIG_DUMMY_CONSOLE=y
3263 +# Sound
3265 +# CONFIG_SOUND is not set
3268 +# HID Devices
3270 +CONFIG_HID=y
3271 +# CONFIG_HID_DEBUG is not set
3274 +# USB Input Devices
3276 +# CONFIG_USB_HID is not set
3279 +# USB HID Boot Protocol drivers
3281 +# CONFIG_USB_KBD is not set
3282 +# CONFIG_USB_MOUSE is not set
3285 +# USB support
3287 +CONFIG_USB_ARCH_HAS_HCD=y
3288 +CONFIG_USB_ARCH_HAS_OHCI=y
3289 +# CONFIG_USB_ARCH_HAS_EHCI is not set
3290 +CONFIG_USB=y
3291 +# CONFIG_USB_DEBUG is not set
3294 +# Miscellaneous USB options
3296 +CONFIG_USB_DEVICEFS=y
3297 +# CONFIG_USB_DEVICE_CLASS is not set
3298 +# CONFIG_USB_DYNAMIC_MINORS is not set
3299 +# CONFIG_USB_OTG is not set
3302 +# USB Host Controller Drivers
3304 +# CONFIG_USB_ISP116X_HCD is not set
3305 +CONFIG_USB_OHCI_HCD=y
3306 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
3307 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
3308 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
3309 +# CONFIG_USB_SL811_HCD is not set
3312 +# USB Device Class drivers
3314 +# CONFIG_USB_ACM is not set
3315 +CONFIG_USB_PRINTER=y
3318 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
3322 +# may also be needed; see USB_STORAGE Help for more information
3324 +CONFIG_USB_STORAGE=y
3325 +# CONFIG_USB_STORAGE_DEBUG is not set
3326 +# CONFIG_USB_STORAGE_DATAFAB is not set
3327 +# CONFIG_USB_STORAGE_FREECOM is not set
3328 +# CONFIG_USB_STORAGE_DPCM is not set
3329 +# CONFIG_USB_STORAGE_USBAT is not set
3330 +# CONFIG_USB_STORAGE_SDDR09 is not set
3331 +# CONFIG_USB_STORAGE_SDDR55 is not set
3332 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
3333 +# CONFIG_USB_STORAGE_ALAUDA is not set
3334 +# CONFIG_USB_STORAGE_KARMA is not set
3335 +# CONFIG_USB_LIBUSUAL is not set
3338 +# USB Imaging devices
3340 +# CONFIG_USB_MDC800 is not set
3341 +# CONFIG_USB_MICROTEK is not set
3342 +# CONFIG_USB_MON is not set
3345 +# USB port drivers
3349 +# USB Serial Converter support
3351 +# CONFIG_USB_SERIAL is not set
3354 +# USB Miscellaneous drivers
3356 +# CONFIG_USB_EMI62 is not set
3357 +# CONFIG_USB_EMI26 is not set
3358 +# CONFIG_USB_ADUTUX is not set
3359 +# CONFIG_USB_AUERSWALD is not set
3360 +# CONFIG_USB_RIO500 is not set
3361 +# CONFIG_USB_LEGOTOWER is not set
3362 +# CONFIG_USB_LCD is not set
3363 +# CONFIG_USB_BERRY_CHARGE is not set
3364 +# CONFIG_USB_LED is not set
3365 +# CONFIG_USB_CYPRESS_CY7C63 is not set
3366 +# CONFIG_USB_CYTHERM is not set
3367 +# CONFIG_USB_PHIDGET is not set
3368 +# CONFIG_USB_IDMOUSE is not set
3369 +# CONFIG_USB_FTDI_ELAN is not set
3370 +# CONFIG_USB_APPLEDISPLAY is not set
3371 +# CONFIG_USB_LD is not set
3372 +# CONFIG_USB_TRANCEVIBRATOR is not set
3373 +# CONFIG_USB_IOWARRIOR is not set
3374 +# CONFIG_USB_TEST is not set
3377 +# USB DSL modem support
3381 +# USB Gadget Support
3383 +CONFIG_USB_GADGET=y
3384 +# CONFIG_USB_GADGET_DEBUG_FILES is not set
3385 +CONFIG_USB_GADGET_SELECTED=y
3386 +# CONFIG_USB_GADGET_FSL_USB2 is not set
3387 +# CONFIG_USB_GADGET_NET2280 is not set
3388 +# CONFIG_USB_GADGET_PXA2XX is not set
3389 +# CONFIG_USB_GADGET_GOKU is not set
3390 +# CONFIG_USB_GADGET_LH7A40X is not set
3391 +# CONFIG_USB_GADGET_OMAP is not set
3392 +CONFIG_USB_GADGET_AT91=y
3393 +CONFIG_USB_AT91=y
3394 +# CONFIG_USB_GADGET_DUMMY_HCD is not set
3395 +# CONFIG_USB_GADGET_DUALSPEED is not set
3396 +# CONFIG_USB_ZERO is not set
3397 +# CONFIG_USB_ETH is not set
3398 +# CONFIG_USB_GADGETFS is not set
3399 +# CONFIG_USB_FILE_STORAGE is not set
3400 +# CONFIG_USB_G_SERIAL is not set
3401 +# CONFIG_USB_MIDI_GADGET is not set
3402 +CONFIG_MMC=y
3403 +CONFIG_MMC_DEBUG=y
3404 +# CONFIG_MMC_UNSAFE_RESUME is not set
3407 +# MMC/SD Card Drivers
3409 +CONFIG_MMC_BLOCK=y
3412 +# MMC/SD Host Controller Drivers
3414 +CONFIG_MMC_AT91=y
3417 +# Real Time Clock
3419 +CONFIG_RTC_LIB=y
3420 +CONFIG_RTC_CLASS=y
3421 +# CONFIG_RTC_HCTOSYS is not set
3422 +# CONFIG_RTC_DEBUG is not set
3425 +# RTC interfaces
3427 +CONFIG_RTC_INTF_SYSFS=y
3428 +CONFIG_RTC_INTF_PROC=y
3429 +CONFIG_RTC_INTF_DEV=y
3430 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
3431 +# CONFIG_RTC_DRV_TEST is not set
3434 +# I2C RTC drivers
3436 +# CONFIG_RTC_DRV_DS1307 is not set
3437 +# CONFIG_RTC_DRV_DS1672 is not set
3438 +# CONFIG_RTC_DRV_MAX6900 is not set
3439 +# CONFIG_RTC_DRV_RS5C372 is not set
3440 +# CONFIG_RTC_DRV_ISL1208 is not set
3441 +# CONFIG_RTC_DRV_X1205 is not set
3442 +# CONFIG_RTC_DRV_PCF8563 is not set
3443 +# CONFIG_RTC_DRV_PCF8583 is not set
3446 +# SPI RTC drivers
3448 +# CONFIG_RTC_DRV_RS5C348 is not set
3449 +# CONFIG_RTC_DRV_MAX6902 is not set
3452 +# Platform RTC drivers
3454 +# CONFIG_RTC_DRV_CMOS is not set
3455 +# CONFIG_RTC_DRV_DS1553 is not set
3456 +# CONFIG_RTC_DRV_DS1742 is not set
3457 +# CONFIG_RTC_DRV_M48T86 is not set
3458 +# CONFIG_RTC_DRV_V3020 is not set
3461 +# on-CPU RTC drivers
3463 +CONFIG_RTC_DRV_AT91RM9200=y
3466 +# File systems
3468 +CONFIG_EXT2_FS=y
3469 +# CONFIG_EXT2_FS_XATTR is not set
3470 +# CONFIG_EXT2_FS_XIP is not set
3471 +CONFIG_EXT3_FS=y
3472 +CONFIG_EXT3_FS_XATTR=y
3473 +# CONFIG_EXT3_FS_POSIX_ACL is not set
3474 +# CONFIG_EXT3_FS_SECURITY is not set
3475 +# CONFIG_EXT4DEV_FS is not set
3476 +CONFIG_JBD=y
3477 +# CONFIG_JBD_DEBUG is not set
3478 +CONFIG_FS_MBCACHE=y
3479 +CONFIG_REISERFS_FS=y
3480 +# CONFIG_REISERFS_CHECK is not set
3481 +# CONFIG_REISERFS_PROC_INFO is not set
3482 +# CONFIG_REISERFS_FS_XATTR is not set
3483 +# CONFIG_JFS_FS is not set
3484 +CONFIG_FS_POSIX_ACL=y
3485 +# CONFIG_XFS_FS is not set
3486 +# CONFIG_GFS2_FS is not set
3487 +# CONFIG_OCFS2_FS is not set
3488 +# CONFIG_MINIX_FS is not set
3489 +# CONFIG_ROMFS_FS is not set
3490 +CONFIG_INOTIFY=y
3491 +CONFIG_INOTIFY_USER=y
3492 +# CONFIG_QUOTA is not set
3493 +CONFIG_DNOTIFY=y
3494 +# CONFIG_AUTOFS_FS is not set
3495 +# CONFIG_AUTOFS4_FS is not set
3496 +# CONFIG_FUSE_FS is not set
3499 +# CD-ROM/DVD Filesystems
3501 +# CONFIG_ISO9660_FS is not set
3502 +# CONFIG_UDF_FS is not set
3505 +# DOS/FAT/NT Filesystems
3507 +# CONFIG_MSDOS_FS is not set
3508 +# CONFIG_VFAT_FS is not set
3509 +# CONFIG_NTFS_FS is not set
3512 +# Pseudo filesystems
3514 +CONFIG_PROC_FS=y
3515 +CONFIG_PROC_SYSCTL=y
3516 +CONFIG_SYSFS=y
3517 +CONFIG_TMPFS=y
3518 +# CONFIG_TMPFS_POSIX_ACL is not set
3519 +# CONFIG_HUGETLB_PAGE is not set
3520 +CONFIG_RAMFS=y
3521 +CONFIG_CONFIGFS_FS=y
3524 +# Miscellaneous filesystems
3526 +# CONFIG_ADFS_FS is not set
3527 +# CONFIG_AFFS_FS is not set
3528 +# CONFIG_HFS_FS is not set
3529 +# CONFIG_HFSPLUS_FS is not set
3530 +# CONFIG_BEFS_FS is not set
3531 +# CONFIG_BFS_FS is not set
3532 +# CONFIG_EFS_FS is not set
3533 +# CONFIG_JFFS2_FS is not set
3534 +CONFIG_CRAMFS=y
3535 +# CONFIG_VXFS_FS is not set
3536 +# CONFIG_HPFS_FS is not set
3537 +# CONFIG_QNX4FS_FS is not set
3538 +# CONFIG_SYSV_FS is not set
3539 +# CONFIG_UFS_FS is not set
3542 +# Network File Systems
3544 +CONFIG_NFS_FS=y
3545 +CONFIG_NFS_V3=y
3546 +CONFIG_NFS_V3_ACL=y
3547 +CONFIG_NFS_V4=y
3548 +# CONFIG_NFS_DIRECTIO is not set
3549 +# CONFIG_NFSD is not set
3550 +CONFIG_ROOT_NFS=y
3551 +CONFIG_LOCKD=y
3552 +CONFIG_LOCKD_V4=y
3553 +CONFIG_NFS_ACL_SUPPORT=y
3554 +CONFIG_NFS_COMMON=y
3555 +CONFIG_SUNRPC=y
3556 +CONFIG_SUNRPC_GSS=y
3557 +# CONFIG_SUNRPC_BIND34 is not set
3558 +CONFIG_RPCSEC_GSS_KRB5=y
3559 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
3560 +# CONFIG_SMB_FS is not set
3561 +# CONFIG_CIFS is not set
3562 +# CONFIG_NCP_FS is not set
3563 +# CONFIG_CODA_FS is not set
3564 +# CONFIG_AFS_FS is not set
3565 +# CONFIG_9P_FS is not set
3568 +# Partition Types
3570 +CONFIG_PARTITION_ADVANCED=y
3571 +# CONFIG_ACORN_PARTITION is not set
3572 +# CONFIG_OSF_PARTITION is not set
3573 +# CONFIG_AMIGA_PARTITION is not set
3574 +# CONFIG_ATARI_PARTITION is not set
3575 +# CONFIG_MAC_PARTITION is not set
3576 +CONFIG_MSDOS_PARTITION=y
3577 +# CONFIG_BSD_DISKLABEL is not set
3578 +# CONFIG_MINIX_SUBPARTITION is not set
3579 +# CONFIG_SOLARIS_X86_PARTITION is not set
3580 +# CONFIG_UNIXWARE_DISKLABEL is not set
3581 +# CONFIG_LDM_PARTITION is not set
3582 +# CONFIG_SGI_PARTITION is not set
3583 +# CONFIG_ULTRIX_PARTITION is not set
3584 +# CONFIG_SUN_PARTITION is not set
3585 +# CONFIG_KARMA_PARTITION is not set
3586 +# CONFIG_EFI_PARTITION is not set
3587 +# CONFIG_SYSV68_PARTITION is not set
3590 +# Native Language Support
3592 +CONFIG_NLS=y
3593 +CONFIG_NLS_DEFAULT="iso8859-1"
3594 +# CONFIG_NLS_CODEPAGE_437 is not set
3595 +# CONFIG_NLS_CODEPAGE_737 is not set
3596 +# CONFIG_NLS_CODEPAGE_775 is not set
3597 +# CONFIG_NLS_CODEPAGE_850 is not set
3598 +# CONFIG_NLS_CODEPAGE_852 is not set
3599 +# CONFIG_NLS_CODEPAGE_855 is not set
3600 +# CONFIG_NLS_CODEPAGE_857 is not set
3601 +# CONFIG_NLS_CODEPAGE_860 is not set
3602 +# CONFIG_NLS_CODEPAGE_861 is not set
3603 +# CONFIG_NLS_CODEPAGE_862 is not set
3604 +# CONFIG_NLS_CODEPAGE_863 is not set
3605 +# CONFIG_NLS_CODEPAGE_864 is not set
3606 +# CONFIG_NLS_CODEPAGE_865 is not set
3607 +# CONFIG_NLS_CODEPAGE_866 is not set
3608 +# CONFIG_NLS_CODEPAGE_869 is not set
3609 +# CONFIG_NLS_CODEPAGE_936 is not set
3610 +# CONFIG_NLS_CODEPAGE_950 is not set
3611 +# CONFIG_NLS_CODEPAGE_932 is not set
3612 +# CONFIG_NLS_CODEPAGE_949 is not set
3613 +# CONFIG_NLS_CODEPAGE_874 is not set
3614 +# CONFIG_NLS_ISO8859_8 is not set
3615 +# CONFIG_NLS_CODEPAGE_1250 is not set
3616 +# CONFIG_NLS_CODEPAGE_1251 is not set
3617 +# CONFIG_NLS_ASCII is not set
3618 +# CONFIG_NLS_ISO8859_1 is not set
3619 +# CONFIG_NLS_ISO8859_2 is not set
3620 +# CONFIG_NLS_ISO8859_3 is not set
3621 +# CONFIG_NLS_ISO8859_4 is not set
3622 +# CONFIG_NLS_ISO8859_5 is not set
3623 +# CONFIG_NLS_ISO8859_6 is not set
3624 +# CONFIG_NLS_ISO8859_7 is not set
3625 +# CONFIG_NLS_ISO8859_9 is not set
3626 +# CONFIG_NLS_ISO8859_13 is not set
3627 +# CONFIG_NLS_ISO8859_14 is not set
3628 +# CONFIG_NLS_ISO8859_15 is not set
3629 +# CONFIG_NLS_KOI8_R is not set
3630 +# CONFIG_NLS_KOI8_U is not set
3631 +# CONFIG_NLS_UTF8 is not set
3634 +# Distributed Lock Manager
3636 +# CONFIG_DLM is not set
3639 +# Profiling support
3641 +# CONFIG_PROFILING is not set
3644 +# Kernel hacking
3646 +# CONFIG_PRINTK_TIME is not set
3647 +CONFIG_ENABLE_MUST_CHECK=y
3648 +# CONFIG_MAGIC_SYSRQ is not set
3649 +# CONFIG_UNUSED_SYMBOLS is not set
3650 +# CONFIG_DEBUG_FS is not set
3651 +# CONFIG_HEADERS_CHECK is not set
3652 +# CONFIG_DEBUG_KERNEL is not set
3653 +CONFIG_DEBUG_BUGVERBOSE=y
3654 +CONFIG_FRAME_POINTER=y
3655 +CONFIG_DEBUG_USER=y
3658 +# Security options
3660 +# CONFIG_KEYS is not set
3661 +# CONFIG_SECURITY is not set
3664 +# Cryptographic options
3666 +CONFIG_CRYPTO=y
3667 +CONFIG_CRYPTO_ALGAPI=y
3668 +CONFIG_CRYPTO_BLKCIPHER=y
3669 +CONFIG_CRYPTO_MANAGER=y
3670 +# CONFIG_CRYPTO_HMAC is not set
3671 +# CONFIG_CRYPTO_XCBC is not set
3672 +# CONFIG_CRYPTO_NULL is not set
3673 +# CONFIG_CRYPTO_MD4 is not set
3674 +CONFIG_CRYPTO_MD5=y
3675 +CONFIG_CRYPTO_SHA1=y
3676 +# CONFIG_CRYPTO_SHA256 is not set
3677 +# CONFIG_CRYPTO_SHA512 is not set
3678 +# CONFIG_CRYPTO_WP512 is not set
3679 +# CONFIG_CRYPTO_TGR192 is not set
3680 +# CONFIG_CRYPTO_GF128MUL is not set
3681 +CONFIG_CRYPTO_ECB=y
3682 +CONFIG_CRYPTO_CBC=y
3683 +CONFIG_CRYPTO_PCBC=y
3684 +# CONFIG_CRYPTO_LRW is not set
3685 +# CONFIG_CRYPTO_CRYPTD is not set
3686 +CONFIG_CRYPTO_DES=y
3687 +# CONFIG_CRYPTO_FCRYPT is not set
3688 +# CONFIG_CRYPTO_BLOWFISH is not set
3689 +# CONFIG_CRYPTO_TWOFISH is not set
3690 +# CONFIG_CRYPTO_SERPENT is not set
3691 +CONFIG_CRYPTO_AES=y
3692 +# CONFIG_CRYPTO_CAST5 is not set
3693 +# CONFIG_CRYPTO_CAST6 is not set
3694 +# CONFIG_CRYPTO_TEA is not set
3695 +CONFIG_CRYPTO_ARC4=y
3696 +# CONFIG_CRYPTO_KHAZAD is not set
3697 +# CONFIG_CRYPTO_ANUBIS is not set
3698 +# CONFIG_CRYPTO_DEFLATE is not set
3699 +# CONFIG_CRYPTO_MICHAEL_MIC is not set
3700 +# CONFIG_CRYPTO_CRC32C is not set
3701 +# CONFIG_CRYPTO_CAMELLIA is not set
3702 +# CONFIG_CRYPTO_TEST is not set
3705 +# Hardware crypto devices
3709 +# Library routines
3711 +CONFIG_BITREVERSE=y
3712 +CONFIG_CRC_CCITT=y
3713 +# CONFIG_CRC16 is not set
3714 +# CONFIG_CRC_ITU_T is not set
3715 +CONFIG_CRC32=y
3716 +# CONFIG_LIBCRC32C is not set
3717 +CONFIG_ZLIB_INFLATE=y
3718 +CONFIG_PLIST=y
3719 +CONFIG_HAS_IOMEM=y
3720 +CONFIG_HAS_IOPORT=y
3721 +CONFIG_HAS_DMA=y
3722 diff --git a/arch/arm/configs/homematic_defconfig b/arch/arm/configs/homematic_defconfig
3723 new file mode 100644
3724 index 0000000..ed1c2eb
3725 --- /dev/null
3726 +++ b/arch/arm/configs/homematic_defconfig
3727 @@ -0,0 +1,1263 @@
3729 +# Automatically generated make config: don't edit
3730 +# Linux kernel version: 2.6.21.3
3731 +# Mon Jun 18 12:28:42 2007
3733 +CONFIG_ARM=y
3734 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
3735 +CONFIG_GENERIC_GPIO=y
3736 +# CONFIG_GENERIC_TIME is not set
3737 +CONFIG_MMU=y
3738 +# CONFIG_NO_IOPORT is not set
3739 +CONFIG_GENERIC_HARDIRQS=y
3740 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
3741 +CONFIG_HARDIRQS_SW_RESEND=y
3742 +CONFIG_GENERIC_IRQ_PROBE=y
3743 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
3744 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
3745 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
3746 +CONFIG_GENERIC_HWEIGHT=y
3747 +CONFIG_GENERIC_CALIBRATE_DELAY=y
3748 +CONFIG_ZONE_DMA=y
3749 +CONFIG_VECTORS_BASE=0xffff0000
3750 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
3753 +# Code maturity level options
3755 +CONFIG_EXPERIMENTAL=y
3756 +CONFIG_BROKEN_ON_SMP=y
3757 +CONFIG_INIT_ENV_ARG_LIMIT=32
3760 +# General setup
3762 +CONFIG_LOCALVERSION=""
3763 +CONFIG_LOCALVERSION_AUTO=y
3764 +# CONFIG_SWAP is not set
3765 +CONFIG_SYSVIPC=y
3766 +# CONFIG_IPC_NS is not set
3767 +CONFIG_SYSVIPC_SYSCTL=y
3768 +# CONFIG_POSIX_MQUEUE is not set
3769 +# CONFIG_BSD_PROCESS_ACCT is not set
3770 +# CONFIG_TASKSTATS is not set
3771 +# CONFIG_UTS_NS is not set
3772 +# CONFIG_AUDIT is not set
3773 +# CONFIG_IKCONFIG is not set
3774 +# CONFIG_SYSFS_DEPRECATED is not set
3775 +# CONFIG_RELAY is not set
3776 +CONFIG_BLK_DEV_INITRD=y
3777 +CONFIG_INITRAMFS_SOURCE=""
3778 +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
3779 +CONFIG_SYSCTL=y
3780 +# CONFIG_EMBEDDED is not set
3781 +CONFIG_UID16=y
3782 +CONFIG_SYSCTL_SYSCALL=y
3783 +CONFIG_KALLSYMS=y
3784 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
3785 +CONFIG_HOTPLUG=y
3786 +CONFIG_PRINTK=y
3787 +CONFIG_BUG=y
3788 +CONFIG_ELF_CORE=y
3789 +CONFIG_BASE_FULL=y
3790 +CONFIG_FUTEX=y
3791 +CONFIG_EPOLL=y
3792 +CONFIG_SHMEM=y
3793 +CONFIG_SLAB=y
3794 +CONFIG_VM_EVENT_COUNTERS=y
3795 +CONFIG_RT_MUTEXES=y
3796 +# CONFIG_TINY_SHMEM is not set
3797 +CONFIG_BASE_SMALL=0
3798 +# CONFIG_SLOB is not set
3801 +# Loadable module support
3803 +CONFIG_MODULES=y
3804 +CONFIG_MODULE_UNLOAD=y
3805 +# CONFIG_MODULE_FORCE_UNLOAD is not set
3806 +# CONFIG_MODVERSIONS is not set
3807 +# CONFIG_MODULE_SRCVERSION_ALL is not set
3808 +CONFIG_KMOD=y
3811 +# Block layer
3813 +CONFIG_BLOCK=y
3814 +# CONFIG_LBD is not set
3815 +# CONFIG_BLK_DEV_IO_TRACE is not set
3816 +# CONFIG_LSF is not set
3819 +# IO Schedulers
3821 +CONFIG_IOSCHED_NOOP=y
3822 +# CONFIG_IOSCHED_AS is not set
3823 +CONFIG_IOSCHED_DEADLINE=y
3824 +# CONFIG_IOSCHED_CFQ is not set
3825 +# CONFIG_DEFAULT_AS is not set
3826 +CONFIG_DEFAULT_DEADLINE=y
3827 +# CONFIG_DEFAULT_CFQ is not set
3828 +# CONFIG_DEFAULT_NOOP is not set
3829 +CONFIG_DEFAULT_IOSCHED="deadline"
3832 +# System Type
3834 +# CONFIG_ARCH_AAEC2000 is not set
3835 +# CONFIG_ARCH_INTEGRATOR is not set
3836 +# CONFIG_ARCH_REALVIEW is not set
3837 +# CONFIG_ARCH_VERSATILE is not set
3838 +CONFIG_ARCH_AT91=y
3839 +# CONFIG_ARCH_CLPS7500 is not set
3840 +# CONFIG_ARCH_CLPS711X is not set
3841 +# CONFIG_ARCH_CO285 is not set
3842 +# CONFIG_ARCH_EBSA110 is not set
3843 +# CONFIG_ARCH_EP93XX is not set
3844 +# CONFIG_ARCH_FOOTBRIDGE is not set
3845 +# CONFIG_ARCH_NETX is not set
3846 +# CONFIG_ARCH_H720X is not set
3847 +# CONFIG_ARCH_IMX is not set
3848 +# CONFIG_ARCH_IOP32X is not set
3849 +# CONFIG_ARCH_IOP33X is not set
3850 +# CONFIG_ARCH_IOP13XX is not set
3851 +# CONFIG_ARCH_IXP4XX is not set
3852 +# CONFIG_ARCH_IXP2000 is not set
3853 +# CONFIG_ARCH_IXP23XX is not set
3854 +# CONFIG_ARCH_L7200 is not set
3855 +# CONFIG_ARCH_NS9XXX is not set
3856 +# CONFIG_ARCH_PNX4008 is not set
3857 +# CONFIG_ARCH_PXA is not set
3858 +# CONFIG_ARCH_RPC is not set
3859 +# CONFIG_ARCH_SA1100 is not set
3860 +# CONFIG_ARCH_S3C2410 is not set
3861 +# CONFIG_ARCH_SHARK is not set
3862 +# CONFIG_ARCH_LH7A40X is not set
3863 +# CONFIG_ARCH_OMAP is not set
3866 +# Atmel AT91 System-on-Chip
3868 +CONFIG_ARCH_AT91RM9200=y
3869 +# CONFIG_ARCH_AT91SAM9260 is not set
3870 +# CONFIG_ARCH_AT91SAM9261 is not set
3871 +# CONFIG_ARCH_AT91SAM9263 is not set
3872 +# CONFIG_ARCH_AT91SAM9RL is not set
3875 +# AT91RM9200 Board Type
3877 +# CONFIG_MACH_ONEARM is not set
3878 +# CONFIG_ARCH_AT91RM9200DK is not set
3879 +# CONFIG_MACH_AT91RM9200EK is not set
3880 +# CONFIG_MACH_CSB337 is not set
3881 +# CONFIG_MACH_CSB637 is not set
3882 +# CONFIG_MACH_CARMEVA is not set
3883 +# CONFIG_MACH_ATEB9200 is not set
3884 +# CONFIG_MACH_KB9200 is not set
3885 +# CONFIG_MACH_KAFA is not set
3886 +# CONFIG_MACH_CHUB is not set
3887 +CONFIG_MACH_HOMEMATIC=y
3890 +# AT91 Board Options
3894 +# AT91 Feature Selections
3896 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
3897 +# CONFIG_ATMEL_TCLIB is not set
3900 +# Processor Type
3902 +CONFIG_CPU_32=y
3903 +CONFIG_CPU_ARM920T=y
3904 +CONFIG_CPU_32v4T=y
3905 +CONFIG_CPU_ABRT_EV4T=y
3906 +CONFIG_CPU_CACHE_V4WT=y
3907 +CONFIG_CPU_CACHE_VIVT=y
3908 +CONFIG_CPU_COPY_V4WB=y
3909 +CONFIG_CPU_TLB_V4WBI=y
3910 +CONFIG_CPU_CP15=y
3911 +CONFIG_CPU_CP15_MMU=y
3914 +# Processor Features
3916 +CONFIG_ARM_THUMB=y
3917 +# CONFIG_CPU_ICACHE_DISABLE is not set
3918 +# CONFIG_CPU_DCACHE_DISABLE is not set
3919 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
3920 +# CONFIG_OUTER_CACHE is not set
3923 +# Bus support
3927 +# PCCARD (PCMCIA/CardBus) support
3929 +# CONFIG_PCCARD is not set
3932 +# Kernel Features
3934 +# CONFIG_PREEMPT is not set
3935 +# CONFIG_NO_IDLE_HZ is not set
3936 +CONFIG_HZ=100
3937 +# CONFIG_AEABI is not set
3938 +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
3939 +CONFIG_SELECT_MEMORY_MODEL=y
3940 +CONFIG_FLATMEM_MANUAL=y
3941 +# CONFIG_DISCONTIGMEM_MANUAL is not set
3942 +# CONFIG_SPARSEMEM_MANUAL is not set
3943 +CONFIG_FLATMEM=y
3944 +CONFIG_FLAT_NODE_MEM_MAP=y
3945 +# CONFIG_SPARSEMEM_STATIC is not set
3946 +CONFIG_SPLIT_PTLOCK_CPUS=4096
3947 +# CONFIG_RESOURCES_64BIT is not set
3948 +CONFIG_ZONE_DMA_FLAG=1
3949 +# CONFIG_LEDS is not set
3950 +CONFIG_ALIGNMENT_TRAP=y
3953 +# Boot options
3955 +CONFIG_ZBOOT_ROM_TEXT=0x0
3956 +CONFIG_ZBOOT_ROM_BSS=0x0
3957 +CONFIG_CMDLINE=""
3958 +# CONFIG_XIP_KERNEL is not set
3959 +# CONFIG_KEXEC is not set
3962 +# Floating point emulation
3966 +# At least one emulation must be selected
3968 +CONFIG_FPE_NWFPE=y
3969 +# CONFIG_FPE_NWFPE_XP is not set
3970 +# CONFIG_FPE_FASTFPE is not set
3973 +# Userspace binary formats
3975 +CONFIG_BINFMT_ELF=y
3976 +# CONFIG_BINFMT_AOUT is not set
3977 +# CONFIG_BINFMT_MISC is not set
3978 +# CONFIG_ARTHUR is not set
3981 +# Power management options
3983 +# CONFIG_PM is not set
3986 +# Networking
3988 +CONFIG_NET=y
3991 +# Networking options
3993 +# CONFIG_NETDEBUG is not set
3994 +CONFIG_PACKET=y
3995 +# CONFIG_PACKET_MMAP is not set
3996 +CONFIG_UNIX=y
3997 +# CONFIG_NET_KEY is not set
3998 +CONFIG_INET=y
3999 +CONFIG_IP_MULTICAST=y
4000 +# CONFIG_IP_ADVANCED_ROUTER is not set
4001 +CONFIG_IP_FIB_HASH=y
4002 +CONFIG_IP_PNP=y
4003 +CONFIG_IP_PNP_DHCP=y
4004 +# CONFIG_IP_PNP_BOOTP is not set
4005 +# CONFIG_IP_PNP_RARP is not set
4006 +# CONFIG_NET_IPIP is not set
4007 +# CONFIG_NET_IPGRE is not set
4008 +# CONFIG_IP_MROUTE is not set
4009 +# CONFIG_ARPD is not set
4010 +# CONFIG_SYN_COOKIES is not set
4011 +# CONFIG_INET_AH is not set
4012 +# CONFIG_INET_ESP is not set
4013 +# CONFIG_INET_IPCOMP is not set
4014 +# CONFIG_INET_XFRM_TUNNEL is not set
4015 +# CONFIG_INET_TUNNEL is not set
4016 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
4017 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
4018 +# CONFIG_INET_XFRM_MODE_BEET is not set
4019 +CONFIG_INET_DIAG=y
4020 +CONFIG_INET_TCP_DIAG=y
4021 +# CONFIG_TCP_CONG_ADVANCED is not set
4022 +CONFIG_TCP_CONG_CUBIC=y
4023 +CONFIG_DEFAULT_TCP_CONG="cubic"
4024 +# CONFIG_TCP_MD5SIG is not set
4025 +# CONFIG_IPV6 is not set
4026 +# CONFIG_INET6_XFRM_TUNNEL is not set
4027 +# CONFIG_INET6_TUNNEL is not set
4028 +# CONFIG_NETWORK_SECMARK is not set
4029 +# CONFIG_NETFILTER is not set
4032 +# DCCP Configuration (EXPERIMENTAL)
4034 +# CONFIG_IP_DCCP is not set
4037 +# SCTP Configuration (EXPERIMENTAL)
4039 +# CONFIG_IP_SCTP is not set
4042 +# TIPC Configuration (EXPERIMENTAL)
4044 +# CONFIG_TIPC is not set
4045 +# CONFIG_ATM is not set
4046 +# CONFIG_BRIDGE is not set
4047 +# CONFIG_VLAN_8021Q is not set
4048 +# CONFIG_DECNET is not set
4049 +# CONFIG_LLC2 is not set
4050 +# CONFIG_IPX is not set
4051 +# CONFIG_ATALK is not set
4052 +# CONFIG_X25 is not set
4053 +# CONFIG_LAPB is not set
4054 +# CONFIG_ECONET is not set
4055 +# CONFIG_WAN_ROUTER is not set
4058 +# QoS and/or fair queueing
4060 +# CONFIG_NET_SCHED is not set
4063 +# Network testing
4065 +# CONFIG_NET_PKTGEN is not set
4066 +# CONFIG_HAMRADIO is not set
4067 +# CONFIG_IRDA is not set
4068 +# CONFIG_BT is not set
4069 +CONFIG_IEEE80211=m
4070 +# CONFIG_IEEE80211_DEBUG is not set
4071 +CONFIG_IEEE80211_CRYPT_WEP=m
4072 +CONFIG_IEEE80211_CRYPT_CCMP=m
4073 +CONFIG_IEEE80211_CRYPT_TKIP=m
4074 +CONFIG_IEEE80211_SOFTMAC=m
4075 +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
4076 +CONFIG_WIRELESS_EXT=y
4079 +# Device Drivers
4083 +# Generic Driver Options
4085 +CONFIG_STANDALONE=y
4086 +CONFIG_PREVENT_FIRMWARE_BUILD=y
4087 +CONFIG_FW_LOADER=y
4088 +# CONFIG_SYS_HYPERVISOR is not set
4091 +# Connector - unified userspace <-> kernelspace linker
4093 +# CONFIG_CONNECTOR is not set
4096 +# Memory Technology Devices (MTD)
4098 +CONFIG_MTD=y
4099 +# CONFIG_MTD_DEBUG is not set
4100 +# CONFIG_MTD_CONCAT is not set
4101 +CONFIG_MTD_PARTITIONS=y
4102 +# CONFIG_MTD_REDBOOT_PARTS is not set
4103 +CONFIG_MTD_CMDLINE_PARTS=y
4104 +# CONFIG_MTD_AFS_PARTS is not set
4107 +# User Modules And Translation Layers
4109 +CONFIG_MTD_CHAR=y
4110 +CONFIG_MTD_BLKDEVS=y
4111 +CONFIG_MTD_BLOCK=y
4112 +# CONFIG_FTL is not set
4113 +# CONFIG_NFTL is not set
4114 +# CONFIG_INFTL is not set
4115 +# CONFIG_RFD_FTL is not set
4116 +# CONFIG_SSFDC is not set
4119 +# RAM/ROM/Flash chip drivers
4121 +# CONFIG_MTD_CFI is not set
4122 +# CONFIG_MTD_JEDECPROBE is not set
4123 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
4124 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
4125 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
4126 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
4127 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
4128 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
4129 +CONFIG_MTD_CFI_I1=y
4130 +CONFIG_MTD_CFI_I2=y
4131 +# CONFIG_MTD_CFI_I4 is not set
4132 +# CONFIG_MTD_CFI_I8 is not set
4133 +# CONFIG_MTD_RAM is not set
4134 +# CONFIG_MTD_ROM is not set
4135 +# CONFIG_MTD_ABSENT is not set
4136 +# CONFIG_MTD_OBSOLETE_CHIPS is not set
4139 +# Mapping drivers for chip access
4141 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
4142 +# CONFIG_MTD_PLATRAM is not set
4145 +# Self-contained MTD device drivers
4147 +# CONFIG_MTD_SLRAM is not set
4148 +# CONFIG_MTD_PHRAM is not set
4149 +# CONFIG_MTD_MTDRAM is not set
4150 +# CONFIG_MTD_BLOCK2MTD is not set
4153 +# Disk-On-Chip Device Drivers
4155 +# CONFIG_MTD_DOC2000 is not set
4156 +# CONFIG_MTD_DOC2001 is not set
4157 +# CONFIG_MTD_DOC2001PLUS is not set
4158 +CONFIG_MTD_AT91_DATAFLASH=y
4161 +# NAND Flash Device Drivers
4163 +CONFIG_MTD_NAND=y
4164 +# CONFIG_MTD_NAND_VERIFY_WRITE is not set
4165 +# CONFIG_MTD_NAND_ECC_SMC is not set
4166 +CONFIG_MTD_NAND_IDS=y
4167 +# CONFIG_MTD_NAND_DISKONCHIP is not set
4168 +CONFIG_MTD_NAND_AT91=y
4169 +# CONFIG_MTD_NAND_NANDSIM is not set
4172 +# OneNAND Flash Device Drivers
4174 +# CONFIG_MTD_ONENAND is not set
4177 +# Parallel port support
4179 +# CONFIG_PARPORT is not set
4182 +# Plug and Play support
4184 +# CONFIG_PNPACPI is not set
4187 +# Block devices
4189 +# CONFIG_BLK_DEV_COW_COMMON is not set
4190 +# CONFIG_BLK_DEV_LOOP is not set
4191 +# CONFIG_BLK_DEV_NBD is not set
4192 +# CONFIG_BLK_DEV_UB is not set
4193 +CONFIG_BLK_DEV_RAM=y
4194 +CONFIG_BLK_DEV_RAM_COUNT=16
4195 +CONFIG_BLK_DEV_RAM_SIZE=4096
4196 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
4197 +# CONFIG_CDROM_PKTCDVD is not set
4198 +# CONFIG_ATA_OVER_ETH is not set
4201 +# SCSI device support
4203 +# CONFIG_RAID_ATTRS is not set
4204 +CONFIG_SCSI=y
4205 +# CONFIG_SCSI_TGT is not set
4206 +# CONFIG_SCSI_NETLINK is not set
4207 +# CONFIG_SCSI_PROC_FS is not set
4210 +# SCSI support type (disk, tape, CD-ROM)
4212 +CONFIG_BLK_DEV_SD=y
4213 +# CONFIG_CHR_DEV_ST is not set
4214 +# CONFIG_CHR_DEV_OSST is not set
4215 +# CONFIG_BLK_DEV_SR is not set
4216 +# CONFIG_CHR_DEV_SG is not set
4217 +# CONFIG_CHR_DEV_SCH is not set
4220 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
4222 +# CONFIG_SCSI_MULTI_LUN is not set
4223 +# CONFIG_SCSI_CONSTANTS is not set
4224 +# CONFIG_SCSI_LOGGING is not set
4225 +# CONFIG_SCSI_SCAN_ASYNC is not set
4228 +# SCSI Transports
4230 +# CONFIG_SCSI_SPI_ATTRS is not set
4231 +# CONFIG_SCSI_FC_ATTRS is not set
4232 +# CONFIG_SCSI_ISCSI_ATTRS is not set
4233 +# CONFIG_SCSI_SAS_ATTRS is not set
4234 +# CONFIG_SCSI_SAS_LIBSAS is not set
4237 +# SCSI low-level drivers
4239 +# CONFIG_ISCSI_TCP is not set
4240 +# CONFIG_SCSI_DEBUG is not set
4243 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
4245 +# CONFIG_ATA is not set
4248 +# Multi-device support (RAID and LVM)
4250 +# CONFIG_MD is not set
4253 +# Fusion MPT device support
4255 +# CONFIG_FUSION is not set
4258 +# IEEE 1394 (FireWire) support
4262 +# I2O device support
4266 +# Network device support
4268 +CONFIG_NETDEVICES=y
4269 +# CONFIG_DUMMY is not set
4270 +# CONFIG_BONDING is not set
4271 +# CONFIG_EQUALIZER is not set
4272 +# CONFIG_TUN is not set
4275 +# PHY device support
4277 +# CONFIG_PHYLIB is not set
4280 +# Ethernet (10 or 100Mbit)
4282 +CONFIG_NET_ETHERNET=y
4283 +CONFIG_MII=y
4284 +CONFIG_ARM_AT91_ETHER=y
4285 +# CONFIG_SMC91X is not set
4286 +# CONFIG_DM9000 is not set
4289 +# Ethernet (1000 Mbit)
4293 +# Ethernet (10000 Mbit)
4297 +# Token Ring devices
4301 +# Wireless LAN (non-hamradio)
4303 +CONFIG_NET_RADIO=y
4304 +# CONFIG_NET_WIRELESS_RTNETLINK is not set
4307 +# Obsolete Wireless cards support (pre-802.11)
4309 +# CONFIG_STRIP is not set
4310 +# CONFIG_USB_ZD1201 is not set
4311 +# CONFIG_HOSTAP is not set
4312 +CONFIG_ZD1211RW=m
4313 +# CONFIG_ZD1211RW_DEBUG is not set
4316 +# Wan interfaces
4318 +# CONFIG_WAN is not set
4319 +# CONFIG_PPP is not set
4320 +# CONFIG_SLIP is not set
4321 +# CONFIG_SHAPER is not set
4322 +# CONFIG_NETCONSOLE is not set
4323 +# CONFIG_NETPOLL is not set
4324 +# CONFIG_NET_POLL_CONTROLLER is not set
4327 +# ISDN subsystem
4329 +# CONFIG_ISDN is not set
4332 +# Input device support
4334 +CONFIG_INPUT=y
4335 +# CONFIG_INPUT_FF_MEMLESS is not set
4338 +# Userland interfaces
4340 +CONFIG_INPUT_MOUSEDEV=y
4341 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
4342 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
4343 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
4344 +# CONFIG_INPUT_JOYDEV is not set
4345 +# CONFIG_INPUT_TSDEV is not set
4346 +# CONFIG_INPUT_EVDEV is not set
4347 +# CONFIG_INPUT_EVBUG is not set
4350 +# Input Device Drivers
4352 +CONFIG_INPUT_KEYBOARD=y
4353 +CONFIG_KEYBOARD_ATKBD=y
4354 +# CONFIG_KEYBOARD_SUNKBD is not set
4355 +# CONFIG_KEYBOARD_LKKBD is not set
4356 +# CONFIG_KEYBOARD_XTKBD is not set
4357 +# CONFIG_KEYBOARD_NEWTON is not set
4358 +# CONFIG_KEYBOARD_STOWAWAY is not set
4359 +# CONFIG_KEYBOARD_GPIO is not set
4360 +# CONFIG_INPUT_MOUSE is not set
4361 +# CONFIG_INPUT_JOYSTICK is not set
4362 +# CONFIG_INPUT_TOUCHSCREEN is not set
4363 +# CONFIG_INPUT_MISC is not set
4366 +# Hardware I/O ports
4368 +CONFIG_SERIO=y
4369 +CONFIG_SERIO_SERPORT=y
4370 +CONFIG_SERIO_LIBPS2=y
4371 +# CONFIG_SERIO_RAW is not set
4372 +# CONFIG_GAMEPORT is not set
4375 +# Character devices
4377 +CONFIG_VT=y
4378 +CONFIG_VT_CONSOLE=y
4379 +CONFIG_HW_CONSOLE=y
4380 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
4381 +# CONFIG_SERIAL_NONSTANDARD is not set
4384 +# Serial drivers
4386 +# CONFIG_SERIAL_8250 is not set
4389 +# Non-8250 serial port support
4391 +CONFIG_SERIAL_ATMEL=y
4392 +CONFIG_SERIAL_ATMEL_CONSOLE=y
4393 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
4394 +CONFIG_SERIAL_CORE=y
4395 +CONFIG_SERIAL_CORE_CONSOLE=y
4396 +CONFIG_UNIX98_PTYS=y
4397 +CONFIG_LEGACY_PTYS=y
4398 +CONFIG_LEGACY_PTY_COUNT=256
4401 +# IPMI
4403 +# CONFIG_IPMI_HANDLER is not set
4406 +# Watchdog Cards
4408 +CONFIG_WATCHDOG=y
4409 +CONFIG_WATCHDOG_NOWAYOUT=y
4412 +# Watchdog Device Drivers
4414 +# CONFIG_SOFT_WATCHDOG is not set
4415 +CONFIG_AT91RM9200_WATCHDOG=y
4418 +# USB-based Watchdog Cards
4420 +# CONFIG_USBPCWATCHDOG is not set
4421 +# CONFIG_HW_RANDOM is not set
4422 +# CONFIG_NVRAM is not set
4423 +# CONFIG_DTLK is not set
4424 +# CONFIG_R3964 is not set
4425 +# CONFIG_RAW_DRIVER is not set
4428 +# TPM devices
4430 +# CONFIG_TCG_TPM is not set
4431 +CONFIG_AT91_SPI=y
4432 +# CONFIG_AT91_SPIDEV is not set
4435 +# I2C support
4437 +CONFIG_I2C=y
4438 +CONFIG_I2C_CHARDEV=m
4441 +# I2C Algorithms
4443 +# CONFIG_I2C_ALGOBIT is not set
4444 +# CONFIG_I2C_ALGOPCF is not set
4445 +# CONFIG_I2C_ALGOPCA is not set
4448 +# I2C Hardware Bus support
4450 +# CONFIG_I2C_AT91 is not set
4451 +# CONFIG_I2C_OCORES is not set
4452 +# CONFIG_I2C_PARPORT_LIGHT is not set
4453 +# CONFIG_I2C_STUB is not set
4454 +# CONFIG_I2C_PCA is not set
4455 +# CONFIG_I2C_PCA_ISA is not set
4458 +# Miscellaneous I2C Chip support
4460 +# CONFIG_SENSORS_DS1337 is not set
4461 +# CONFIG_SENSORS_DS1374 is not set
4462 +# CONFIG_SENSORS_EEPROM is not set
4463 +# CONFIG_SENSORS_PCF8574 is not set
4464 +# CONFIG_SENSORS_PCA9539 is not set
4465 +# CONFIG_SENSORS_PCF8591 is not set
4466 +# CONFIG_SENSORS_MAX6875 is not set
4467 +# CONFIG_I2C_DEBUG_CORE is not set
4468 +# CONFIG_I2C_DEBUG_ALGO is not set
4469 +# CONFIG_I2C_DEBUG_BUS is not set
4470 +# CONFIG_I2C_DEBUG_CHIP is not set
4473 +# SPI support
4475 +# CONFIG_SPI is not set
4476 +# CONFIG_SPI_MASTER is not set
4479 +# Dallas's 1-wire bus
4481 +# CONFIG_W1 is not set
4484 +# Hardware Monitoring support
4486 +# CONFIG_HWMON is not set
4487 +# CONFIG_HWMON_VID is not set
4490 +# Misc devices
4494 +# Multifunction device drivers
4496 +# CONFIG_MFD_SM501 is not set
4499 +# LED devices
4501 +# CONFIG_NEW_LEDS is not set
4504 +# LED drivers
4508 +# LED Triggers
4512 +# Multimedia devices
4514 +# CONFIG_VIDEO_DEV is not set
4517 +# Digital Video Broadcasting Devices
4519 +# CONFIG_DVB is not set
4520 +# CONFIG_USB_DABUSB is not set
4523 +# Graphics support
4525 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
4526 +# CONFIG_FB is not set
4529 +# Console display driver support
4531 +# CONFIG_VGA_CONSOLE is not set
4532 +CONFIG_DUMMY_CONSOLE=y
4535 +# Sound
4537 +# CONFIG_SOUND is not set
4540 +# HID Devices
4542 +# CONFIG_HID is not set
4545 +# USB support
4547 +CONFIG_USB_ARCH_HAS_HCD=y
4548 +CONFIG_USB_ARCH_HAS_OHCI=y
4549 +# CONFIG_USB_ARCH_HAS_EHCI is not set
4550 +CONFIG_USB=y
4551 +# CONFIG_USB_DEBUG is not set
4554 +# Miscellaneous USB options
4556 +CONFIG_USB_DEVICEFS=y
4557 +# CONFIG_USB_DYNAMIC_MINORS is not set
4558 +# CONFIG_USB_OTG is not set
4561 +# USB Host Controller Drivers
4563 +# CONFIG_USB_ISP116X_HCD is not set
4564 +CONFIG_USB_OHCI_HCD=y
4565 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
4566 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
4567 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
4568 +# CONFIG_USB_SL811_HCD is not set
4571 +# USB Device Class drivers
4573 +# CONFIG_USB_ACM is not set
4574 +# CONFIG_USB_PRINTER is not set
4577 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
4581 +# may also be needed; see USB_STORAGE Help for more information
4583 +CONFIG_USB_STORAGE=y
4584 +# CONFIG_USB_STORAGE_DEBUG is not set
4585 +# CONFIG_USB_STORAGE_DATAFAB is not set
4586 +# CONFIG_USB_STORAGE_FREECOM is not set
4587 +# CONFIG_USB_STORAGE_DPCM is not set
4588 +# CONFIG_USB_STORAGE_USBAT is not set
4589 +# CONFIG_USB_STORAGE_SDDR09 is not set
4590 +# CONFIG_USB_STORAGE_SDDR55 is not set
4591 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
4592 +# CONFIG_USB_STORAGE_ALAUDA is not set
4593 +# CONFIG_USB_STORAGE_KARMA is not set
4594 +# CONFIG_USB_LIBUSUAL is not set
4597 +# USB Input Devices
4599 +# CONFIG_USB_HID is not set
4602 +# USB HID Boot Protocol drivers
4604 +# CONFIG_USB_KBD is not set
4605 +# CONFIG_USB_MOUSE is not set
4606 +# CONFIG_USB_AIPTEK is not set
4607 +# CONFIG_USB_WACOM is not set
4608 +# CONFIG_USB_ACECAD is not set
4609 +# CONFIG_USB_KBTAB is not set
4610 +# CONFIG_USB_POWERMATE is not set
4611 +# CONFIG_USB_TOUCHSCREEN is not set
4612 +# CONFIG_USB_YEALINK is not set
4613 +# CONFIG_USB_XPAD is not set
4614 +# CONFIG_USB_ATI_REMOTE is not set
4615 +# CONFIG_USB_ATI_REMOTE2 is not set
4616 +# CONFIG_USB_KEYSPAN_REMOTE is not set
4617 +# CONFIG_USB_APPLETOUCH is not set
4618 +# CONFIG_USB_GTCO is not set
4621 +# USB Imaging devices
4623 +# CONFIG_USB_MDC800 is not set
4624 +# CONFIG_USB_MICROTEK is not set
4627 +# USB Network Adapters
4629 +# CONFIG_USB_CATC is not set
4630 +# CONFIG_USB_KAWETH is not set
4631 +# CONFIG_USB_PEGASUS is not set
4632 +# CONFIG_USB_RTL8150 is not set
4633 +# CONFIG_USB_USBNET_MII is not set
4634 +# CONFIG_USB_USBNET is not set
4635 +# CONFIG_USB_MON is not set
4638 +# USB port drivers
4642 +# USB Serial Converter support
4644 +CONFIG_USB_SERIAL=m
4645 +# CONFIG_USB_SERIAL_GENERIC is not set
4646 +# CONFIG_USB_SERIAL_AIRCABLE is not set
4647 +# CONFIG_USB_SERIAL_AIRPRIME is not set
4648 +# CONFIG_USB_SERIAL_ARK3116 is not set
4649 +# CONFIG_USB_SERIAL_BELKIN is not set
4650 +# CONFIG_USB_SERIAL_WHITEHEAT is not set
4651 +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
4652 +# CONFIG_USB_SERIAL_CP2101 is not set
4653 +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
4654 +# CONFIG_USB_SERIAL_EMPEG is not set
4655 +CONFIG_USB_SERIAL_FTDI_SIO=m
4656 +# CONFIG_USB_SERIAL_FUNSOFT is not set
4657 +# CONFIG_USB_SERIAL_VISOR is not set
4658 +# CONFIG_USB_SERIAL_IPAQ is not set
4659 +# CONFIG_USB_SERIAL_IR is not set
4660 +# CONFIG_USB_SERIAL_EDGEPORT is not set
4661 +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
4662 +# CONFIG_USB_SERIAL_GARMIN is not set
4663 +# CONFIG_USB_SERIAL_IPW is not set
4664 +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
4665 +# CONFIG_USB_SERIAL_KEYSPAN is not set
4666 +# CONFIG_USB_SERIAL_KLSI is not set
4667 +# CONFIG_USB_SERIAL_KOBIL_SCT is not set
4668 +# CONFIG_USB_SERIAL_MCT_U232 is not set
4669 +# CONFIG_USB_SERIAL_MOS7720 is not set
4670 +# CONFIG_USB_SERIAL_MOS7840 is not set
4671 +# CONFIG_USB_SERIAL_NAVMAN is not set
4672 +# CONFIG_USB_SERIAL_PL2303 is not set
4673 +# CONFIG_USB_SERIAL_HP4X is not set
4674 +# CONFIG_USB_SERIAL_SAFE is not set
4675 +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
4676 +# CONFIG_USB_SERIAL_TI is not set
4677 +# CONFIG_USB_SERIAL_CYBERJACK is not set
4678 +# CONFIG_USB_SERIAL_XIRCOM is not set
4679 +# CONFIG_USB_SERIAL_OPTION is not set
4680 +# CONFIG_USB_SERIAL_OMNINET is not set
4681 +# CONFIG_USB_SERIAL_DEBUG is not set
4684 +# USB Miscellaneous drivers
4686 +# CONFIG_USB_EMI62 is not set
4687 +# CONFIG_USB_EMI26 is not set
4688 +# CONFIG_USB_ADUTUX is not set
4689 +# CONFIG_USB_AUERSWALD is not set
4690 +# CONFIG_USB_RIO500 is not set
4691 +# CONFIG_USB_LEGOTOWER is not set
4692 +# CONFIG_USB_LCD is not set
4693 +# CONFIG_USB_BERRY_CHARGE is not set
4694 +# CONFIG_USB_LED is not set
4695 +# CONFIG_USB_CYPRESS_CY7C63 is not set
4696 +# CONFIG_USB_CYTHERM is not set
4697 +# CONFIG_USB_PHIDGET is not set
4698 +# CONFIG_USB_IDMOUSE is not set
4699 +# CONFIG_USB_FTDI_ELAN is not set
4700 +# CONFIG_USB_APPLEDISPLAY is not set
4701 +# CONFIG_USB_LD is not set
4702 +# CONFIG_USB_TRANCEVIBRATOR is not set
4703 +# CONFIG_USB_IOWARRIOR is not set
4704 +# CONFIG_USB_TEST is not set
4707 +# USB DSL modem support
4711 +# USB Gadget Support
4713 +CONFIG_USB_GADGET=m
4714 +# CONFIG_USB_GADGET_DEBUG_FILES is not set
4715 +CONFIG_USB_GADGET_SELECTED=y
4716 +# CONFIG_USB_GADGET_NET2280 is not set
4717 +# CONFIG_USB_GADGET_PXA2XX is not set
4718 +# CONFIG_USB_GADGET_GOKU is not set
4719 +# CONFIG_USB_GADGET_LH7A40X is not set
4720 +# CONFIG_USB_GADGET_OMAP is not set
4721 +CONFIG_USB_GADGET_AT91=y
4722 +CONFIG_USB_AT91=m
4723 +# CONFIG_USB_GADGET_DUMMY_HCD is not set
4724 +# CONFIG_USB_GADGET_DUALSPEED is not set
4725 +CONFIG_USB_ZERO=m
4726 +CONFIG_USB_ETH=m
4727 +CONFIG_USB_ETH_RNDIS=y
4728 +CONFIG_USB_GADGETFS=m
4729 +CONFIG_USB_FILE_STORAGE=m
4730 +CONFIG_USB_FILE_STORAGE_TEST=y
4731 +CONFIG_USB_G_SERIAL=m
4732 +# CONFIG_USB_MIDI_GADGET is not set
4735 +# MMC/SD Card support
4737 +# CONFIG_MMC is not set
4740 +# Real Time Clock
4742 +CONFIG_RTC_LIB=y
4743 +# CONFIG_RTC_CLASS is not set
4746 +# File systems
4748 +# CONFIG_EXT2_FS is not set
4749 +# CONFIG_EXT3_FS is not set
4750 +# CONFIG_EXT4DEV_FS is not set
4751 +# CONFIG_REISERFS_FS is not set
4752 +# CONFIG_JFS_FS is not set
4753 +# CONFIG_FS_POSIX_ACL is not set
4754 +# CONFIG_XFS_FS is not set
4755 +# CONFIG_GFS2_FS is not set
4756 +# CONFIG_OCFS2_FS is not set
4757 +CONFIG_MINIX_FS=y
4758 +# CONFIG_ROMFS_FS is not set
4759 +# CONFIG_INOTIFY is not set
4760 +# CONFIG_QUOTA is not set
4761 +CONFIG_DNOTIFY=y
4762 +# CONFIG_AUTOFS_FS is not set
4763 +# CONFIG_AUTOFS4_FS is not set
4764 +# CONFIG_FUSE_FS is not set
4767 +# CD-ROM/DVD Filesystems
4769 +# CONFIG_ISO9660_FS is not set
4770 +# CONFIG_UDF_FS is not set
4773 +# DOS/FAT/NT Filesystems
4775 +CONFIG_FAT_FS=m
4776 +CONFIG_MSDOS_FS=m
4777 +CONFIG_VFAT_FS=m
4778 +CONFIG_FAT_DEFAULT_CODEPAGE=437
4779 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
4780 +# CONFIG_NTFS_FS is not set
4783 +# Pseudo filesystems
4785 +CONFIG_PROC_FS=y
4786 +CONFIG_PROC_SYSCTL=y
4787 +CONFIG_SYSFS=y
4788 +CONFIG_TMPFS=y
4789 +# CONFIG_TMPFS_POSIX_ACL is not set
4790 +# CONFIG_HUGETLB_PAGE is not set
4791 +CONFIG_RAMFS=y
4792 +# CONFIG_CONFIGFS_FS is not set
4795 +# Miscellaneous filesystems
4797 +# CONFIG_ADFS_FS is not set
4798 +# CONFIG_AFFS_FS is not set
4799 +# CONFIG_HFS_FS is not set
4800 +# CONFIG_HFSPLUS_FS is not set
4801 +# CONFIG_BEFS_FS is not set
4802 +# CONFIG_BFS_FS is not set
4803 +# CONFIG_EFS_FS is not set
4804 +CONFIG_YAFFS_FS=y
4805 +CONFIG_YAFFS_YAFFS1=y
4806 +# CONFIG_YAFFS_DOES_ECC is not set
4807 +CONFIG_YAFFS_YAFFS2=y
4808 +CONFIG_YAFFS_AUTO_YAFFS2=y
4809 +# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
4810 +CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
4811 +# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
4812 +# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
4813 +CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
4814 +CONFIG_JFFS2_FS=y
4815 +CONFIG_JFFS2_FS_DEBUG=0
4816 +CONFIG_JFFS2_FS_WRITEBUFFER=y
4817 +# CONFIG_JFFS2_SUMMARY is not set
4818 +# CONFIG_JFFS2_FS_XATTR is not set
4819 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
4820 +CONFIG_JFFS2_ZLIB=y
4821 +CONFIG_JFFS2_RTIME=y
4822 +# CONFIG_JFFS2_RUBIN is not set
4823 +CONFIG_CRAMFS=y
4824 +# CONFIG_VXFS_FS is not set
4825 +# CONFIG_HPFS_FS is not set
4826 +# CONFIG_QNX4FS_FS is not set
4827 +# CONFIG_SYSV_FS is not set
4828 +# CONFIG_UFS_FS is not set
4831 +# Network File Systems
4833 +CONFIG_NFS_FS=y
4834 +CONFIG_NFS_V3=y
4835 +# CONFIG_NFS_V3_ACL is not set
4836 +# CONFIG_NFS_V4 is not set
4837 +# CONFIG_NFS_DIRECTIO is not set
4838 +# CONFIG_NFSD is not set
4839 +CONFIG_ROOT_NFS=y
4840 +CONFIG_LOCKD=y
4841 +CONFIG_LOCKD_V4=y
4842 +CONFIG_NFS_COMMON=y
4843 +CONFIG_SUNRPC=y
4844 +# CONFIG_RPCSEC_GSS_KRB5 is not set
4845 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
4846 +# CONFIG_SMB_FS is not set
4847 +# CONFIG_CIFS is not set
4848 +# CONFIG_NCP_FS is not set
4849 +# CONFIG_CODA_FS is not set
4850 +# CONFIG_AFS_FS is not set
4851 +# CONFIG_9P_FS is not set
4854 +# Partition Types
4856 +# CONFIG_PARTITION_ADVANCED is not set
4857 +CONFIG_MSDOS_PARTITION=y
4860 +# Native Language Support
4862 +CONFIG_NLS=m
4863 +CONFIG_NLS_DEFAULT="iso8859-1"
4864 +CONFIG_NLS_CODEPAGE_437=m
4865 +# CONFIG_NLS_CODEPAGE_737 is not set
4866 +# CONFIG_NLS_CODEPAGE_775 is not set
4867 +CONFIG_NLS_CODEPAGE_850=m
4868 +# CONFIG_NLS_CODEPAGE_852 is not set
4869 +# CONFIG_NLS_CODEPAGE_855 is not set
4870 +# CONFIG_NLS_CODEPAGE_857 is not set
4871 +# CONFIG_NLS_CODEPAGE_860 is not set
4872 +# CONFIG_NLS_CODEPAGE_861 is not set
4873 +# CONFIG_NLS_CODEPAGE_862 is not set
4874 +# CONFIG_NLS_CODEPAGE_863 is not set
4875 +# CONFIG_NLS_CODEPAGE_864 is not set
4876 +# CONFIG_NLS_CODEPAGE_865 is not set
4877 +# CONFIG_NLS_CODEPAGE_866 is not set
4878 +# CONFIG_NLS_CODEPAGE_869 is not set
4879 +# CONFIG_NLS_CODEPAGE_936 is not set
4880 +# CONFIG_NLS_CODEPAGE_950 is not set
4881 +# CONFIG_NLS_CODEPAGE_932 is not set
4882 +# CONFIG_NLS_CODEPAGE_949 is not set
4883 +# CONFIG_NLS_CODEPAGE_874 is not set
4884 +# CONFIG_NLS_ISO8859_8 is not set
4885 +# CONFIG_NLS_CODEPAGE_1250 is not set
4886 +# CONFIG_NLS_CODEPAGE_1251 is not set
4887 +# CONFIG_NLS_ASCII is not set
4888 +CONFIG_NLS_ISO8859_1=m
4889 +# CONFIG_NLS_ISO8859_2 is not set
4890 +# CONFIG_NLS_ISO8859_3 is not set
4891 +# CONFIG_NLS_ISO8859_4 is not set
4892 +# CONFIG_NLS_ISO8859_5 is not set
4893 +# CONFIG_NLS_ISO8859_6 is not set
4894 +# CONFIG_NLS_ISO8859_7 is not set
4895 +# CONFIG_NLS_ISO8859_9 is not set
4896 +# CONFIG_NLS_ISO8859_13 is not set
4897 +# CONFIG_NLS_ISO8859_14 is not set
4898 +# CONFIG_NLS_ISO8859_15 is not set
4899 +# CONFIG_NLS_KOI8_R is not set
4900 +# CONFIG_NLS_KOI8_U is not set
4901 +# CONFIG_NLS_UTF8 is not set
4904 +# Distributed Lock Manager
4906 +# CONFIG_DLM is not set
4909 +# Profiling support
4911 +# CONFIG_PROFILING is not set
4914 +# Kernel hacking
4916 +# CONFIG_PRINTK_TIME is not set
4917 +CONFIG_ENABLE_MUST_CHECK=y
4918 +# CONFIG_MAGIC_SYSRQ is not set
4919 +# CONFIG_UNUSED_SYMBOLS is not set
4920 +# CONFIG_DEBUG_FS is not set
4921 +# CONFIG_HEADERS_CHECK is not set
4922 +# CONFIG_DEBUG_KERNEL is not set
4923 +CONFIG_LOG_BUF_SHIFT=14
4924 +CONFIG_DEBUG_BUGVERBOSE=y
4925 +CONFIG_FRAME_POINTER=y
4926 +# CONFIG_DEBUG_USER is not set
4929 +# Security options
4931 +# CONFIG_KEYS is not set
4932 +# CONFIG_SECURITY is not set
4935 +# Cryptographic options
4937 +CONFIG_CRYPTO=y
4938 +CONFIG_CRYPTO_ALGAPI=m
4939 +CONFIG_CRYPTO_BLKCIPHER=m
4940 +CONFIG_CRYPTO_MANAGER=m
4941 +# CONFIG_CRYPTO_HMAC is not set
4942 +# CONFIG_CRYPTO_XCBC is not set
4943 +# CONFIG_CRYPTO_NULL is not set
4944 +# CONFIG_CRYPTO_MD4 is not set
4945 +# CONFIG_CRYPTO_MD5 is not set
4946 +# CONFIG_CRYPTO_SHA1 is not set
4947 +# CONFIG_CRYPTO_SHA256 is not set
4948 +# CONFIG_CRYPTO_SHA512 is not set
4949 +# CONFIG_CRYPTO_WP512 is not set
4950 +# CONFIG_CRYPTO_TGR192 is not set
4951 +# CONFIG_CRYPTO_GF128MUL is not set
4952 +CONFIG_CRYPTO_ECB=m
4953 +CONFIG_CRYPTO_CBC=m
4954 +CONFIG_CRYPTO_PCBC=m
4955 +# CONFIG_CRYPTO_LRW is not set
4956 +# CONFIG_CRYPTO_DES is not set
4957 +# CONFIG_CRYPTO_FCRYPT is not set
4958 +# CONFIG_CRYPTO_BLOWFISH is not set
4959 +# CONFIG_CRYPTO_TWOFISH is not set
4960 +# CONFIG_CRYPTO_SERPENT is not set
4961 +CONFIG_CRYPTO_AES=m
4962 +# CONFIG_CRYPTO_CAST5 is not set
4963 +# CONFIG_CRYPTO_CAST6 is not set
4964 +# CONFIG_CRYPTO_TEA is not set
4965 +CONFIG_CRYPTO_ARC4=m
4966 +# CONFIG_CRYPTO_KHAZAD is not set
4967 +# CONFIG_CRYPTO_ANUBIS is not set
4968 +# CONFIG_CRYPTO_DEFLATE is not set
4969 +CONFIG_CRYPTO_MICHAEL_MIC=m
4970 +# CONFIG_CRYPTO_CRC32C is not set
4971 +# CONFIG_CRYPTO_CAMELLIA is not set
4972 +# CONFIG_CRYPTO_TEST is not set
4975 +# Hardware crypto devices
4979 +# Library routines
4981 +CONFIG_BITREVERSE=y
4982 +# CONFIG_CRC_CCITT is not set
4983 +# CONFIG_CRC16 is not set
4984 +CONFIG_CRC32=y
4985 +# CONFIG_LIBCRC32C is not set
4986 +CONFIG_ZLIB_INFLATE=y
4987 +CONFIG_ZLIB_DEFLATE=y
4988 +CONFIG_PLIST=y
4989 +CONFIG_HAS_IOMEM=y
4990 +CONFIG_HAS_IOPORT=y
4991 diff --git a/arch/arm/configs/kafa_defconfig b/arch/arm/configs/kafa_defconfig
4992 index a0f48d5..ae51a40 100644
4993 --- a/arch/arm/configs/kafa_defconfig
4994 +++ b/arch/arm/configs/kafa_defconfig
4995 @@ -587,14 +587,14 @@ CONFIG_I2C_CHARDEV=y
4997 # I2C Algorithms
4999 -# CONFIG_I2C_ALGOBIT is not set
5000 +CONFIG_I2C_ALGOBIT=y
5001 # CONFIG_I2C_ALGOPCF is not set
5002 # CONFIG_I2C_ALGOPCA is not set
5005 # I2C Hardware Bus support
5007 -CONFIG_I2C_AT91=y
5008 +CONFIG_I2C_GPIO=y
5009 # CONFIG_I2C_PARPORT_LIGHT is not set
5010 # CONFIG_I2C_STUB is not set
5011 # CONFIG_I2C_PCA_ISA is not set
5012 diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig
5013 index c16537d..dad203e 100644
5014 --- a/arch/arm/configs/kb9202_defconfig
5015 +++ b/arch/arm/configs/kb9202_defconfig
5016 @@ -1,19 +1,31 @@
5018 # Automatically generated make config: don't edit
5019 -# Linux kernel version: 2.6.13-rc2
5020 -# Sun Aug 14 19:26:59 2005
5021 +# Linux kernel version: 2.6.21
5022 +# Mon May 7 11:43:14 2007
5024 CONFIG_ARM=y
5025 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
5026 +CONFIG_GENERIC_GPIO=y
5027 +# CONFIG_GENERIC_TIME is not set
5028 CONFIG_MMU=y
5029 -CONFIG_UID16=y
5030 +# CONFIG_NO_IOPORT is not set
5031 +CONFIG_GENERIC_HARDIRQS=y
5032 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
5033 +CONFIG_HARDIRQS_SW_RESEND=y
5034 +CONFIG_GENERIC_IRQ_PROBE=y
5035 CONFIG_RWSEM_GENERIC_SPINLOCK=y
5036 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
5037 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
5038 +CONFIG_GENERIC_HWEIGHT=y
5039 CONFIG_GENERIC_CALIBRATE_DELAY=y
5040 +CONFIG_ZONE_DMA=y
5041 +CONFIG_VECTORS_BASE=0xffff0000
5042 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
5045 # Code maturity level options
5047 -# CONFIG_EXPERIMENTAL is not set
5048 -CONFIG_CLEAN_COMPILE=y
5049 +CONFIG_EXPERIMENTAL=y
5050 CONFIG_BROKEN_ON_SMP=y
5051 CONFIG_INIT_ENV_ARG_LIMIT=32
5053 @@ -21,54 +33,103 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
5054 # General setup
5056 CONFIG_LOCALVERSION=""
5057 -# CONFIG_SWAP is not set
5058 -# CONFIG_SYSVIPC is not set
5059 -# CONFIG_BSD_PROCESS_ACCT is not set
5060 +CONFIG_LOCALVERSION_AUTO=y
5061 +CONFIG_SWAP=y
5062 +CONFIG_SYSVIPC=y
5063 +# CONFIG_IPC_NS is not set
5064 +CONFIG_SYSVIPC_SYSCTL=y
5065 +CONFIG_POSIX_MQUEUE=y
5066 +CONFIG_BSD_PROCESS_ACCT=y
5067 +# CONFIG_BSD_PROCESS_ACCT_V3 is not set
5068 +# CONFIG_TASKSTATS is not set
5069 +# CONFIG_UTS_NS is not set
5070 +CONFIG_AUDIT=y
5071 +CONFIG_IKCONFIG=y
5072 +CONFIG_IKCONFIG_PROC=y
5073 +CONFIG_SYSFS_DEPRECATED=y
5074 +# CONFIG_RELAY is not set
5075 +CONFIG_BLK_DEV_INITRD=y
5076 +CONFIG_INITRAMFS_SOURCE=""
5077 +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
5078 CONFIG_SYSCTL=y
5079 -# CONFIG_AUDIT is not set
5080 -CONFIG_HOTPLUG=y
5081 -# CONFIG_KOBJECT_UEVENT is not set
5082 -# CONFIG_IKCONFIG is not set
5083 # CONFIG_EMBEDDED is not set
5084 +CONFIG_UID16=y
5085 +CONFIG_SYSCTL_SYSCALL=y
5086 CONFIG_KALLSYMS=y
5087 # CONFIG_KALLSYMS_ALL is not set
5088 -# CONFIG_KALLSYMS_EXTRA_PASS is not set
5089 +CONFIG_KALLSYMS_EXTRA_PASS=y
5090 +CONFIG_HOTPLUG=y
5091 CONFIG_PRINTK=y
5092 CONFIG_BUG=y
5093 +CONFIG_ELF_CORE=y
5094 CONFIG_BASE_FULL=y
5095 CONFIG_FUTEX=y
5096 CONFIG_EPOLL=y
5097 -CONFIG_CC_OPTIMIZE_FOR_SIZE=y
5098 CONFIG_SHMEM=y
5099 -CONFIG_CC_ALIGN_FUNCTIONS=0
5100 -CONFIG_CC_ALIGN_LABELS=0
5101 -CONFIG_CC_ALIGN_LOOPS=0
5102 -CONFIG_CC_ALIGN_JUMPS=0
5103 +CONFIG_SLAB=y
5104 +CONFIG_VM_EVENT_COUNTERS=y
5105 +CONFIG_RT_MUTEXES=y
5106 # CONFIG_TINY_SHMEM is not set
5107 CONFIG_BASE_SMALL=0
5108 +# CONFIG_SLOB is not set
5111 # Loadable module support
5113 CONFIG_MODULES=y
5114 CONFIG_MODULE_UNLOAD=y
5115 -CONFIG_OBSOLETE_MODPARM=y
5116 -# CONFIG_MODULE_SRCVERSION_ALL is not set
5117 +# CONFIG_MODULE_FORCE_UNLOAD is not set
5118 +CONFIG_MODVERSIONS=y
5119 +CONFIG_MODULE_SRCVERSION_ALL=y
5120 CONFIG_KMOD=y
5123 +# Block layer
5125 +CONFIG_BLOCK=y
5126 +CONFIG_LBD=y
5127 +# CONFIG_BLK_DEV_IO_TRACE is not set
5128 +# CONFIG_LSF is not set
5131 +# IO Schedulers
5133 +CONFIG_IOSCHED_NOOP=y
5134 +CONFIG_IOSCHED_AS=y
5135 +CONFIG_IOSCHED_DEADLINE=y
5136 +CONFIG_IOSCHED_CFQ=y
5137 +# CONFIG_DEFAULT_AS is not set
5138 +# CONFIG_DEFAULT_DEADLINE is not set
5139 +CONFIG_DEFAULT_CFQ=y
5140 +# CONFIG_DEFAULT_NOOP is not set
5141 +CONFIG_DEFAULT_IOSCHED="cfq"
5144 # System Type
5146 +# CONFIG_ARCH_AAEC2000 is not set
5147 +# CONFIG_ARCH_INTEGRATOR is not set
5148 +# CONFIG_ARCH_REALVIEW is not set
5149 +# CONFIG_ARCH_VERSATILE is not set
5150 +CONFIG_ARCH_AT91=y
5151 # CONFIG_ARCH_CLPS7500 is not set
5152 # CONFIG_ARCH_CLPS711X is not set
5153 # CONFIG_ARCH_CO285 is not set
5154 # CONFIG_ARCH_EBSA110 is not set
5155 +# CONFIG_ARCH_EP93XX is not set
5156 # CONFIG_ARCH_FOOTBRIDGE is not set
5157 -# CONFIG_ARCH_INTEGRATOR is not set
5158 -# CONFIG_ARCH_IOP3XX is not set
5159 +# CONFIG_ARCH_NETX is not set
5160 +# CONFIG_ARCH_H720X is not set
5161 +# CONFIG_ARCH_IMX is not set
5162 +# CONFIG_ARCH_IOP32X is not set
5163 +# CONFIG_ARCH_IOP33X is not set
5164 +# CONFIG_ARCH_IOP13XX is not set
5165 # CONFIG_ARCH_IXP4XX is not set
5166 # CONFIG_ARCH_IXP2000 is not set
5167 +# CONFIG_ARCH_IXP23XX is not set
5168 # CONFIG_ARCH_L7200 is not set
5169 +# CONFIG_ARCH_NS9XXX is not set
5170 +# CONFIG_ARCH_PNX4008 is not set
5171 # CONFIG_ARCH_PXA is not set
5172 # CONFIG_ARCH_RPC is not set
5173 # CONFIG_ARCH_SA1100 is not set
5174 @@ -76,34 +137,52 @@ CONFIG_KMOD=y
5175 # CONFIG_ARCH_SHARK is not set
5176 # CONFIG_ARCH_LH7A40X is not set
5177 # CONFIG_ARCH_OMAP is not set
5178 -# CONFIG_ARCH_VERSATILE is not set
5179 -# CONFIG_ARCH_IMX is not set
5180 -# CONFIG_ARCH_H720X is not set
5181 -# CONFIG_ARCH_AAEC2000 is not set
5182 -CONFIG_ARCH_AT91=y
5185 +# Atmel AT91 System-on-Chip
5187 CONFIG_ARCH_AT91RM9200=y
5188 +# CONFIG_ARCH_AT91SAM9260 is not set
5189 +# CONFIG_ARCH_AT91SAM9261 is not set
5190 +# CONFIG_ARCH_AT91SAM9263 is not set
5193 -# AT91RM9200 Implementations
5194 +# AT91RM9200 Board Type
5196 +# CONFIG_MACH_ONEARM is not set
5197 # CONFIG_ARCH_AT91RM9200DK is not set
5198 # CONFIG_MACH_AT91RM9200EK is not set
5199 # CONFIG_MACH_CSB337 is not set
5200 # CONFIG_MACH_CSB637 is not set
5201 # CONFIG_MACH_CARMEVA is not set
5202 +# CONFIG_MACH_ATEB9200 is not set
5203 CONFIG_MACH_KB9200=y
5204 +# CONFIG_MACH_KAFA is not set
5205 +# CONFIG_MACH_CHUB is not set
5208 +# AT91 Board Options
5212 +# AT91 Feature Selections
5214 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
5215 +# CONFIG_ATMEL_TCLIB is not set
5218 # Processor Type
5220 CONFIG_CPU_32=y
5221 CONFIG_CPU_ARM920T=y
5222 -CONFIG_CPU_32v4=y
5223 +CONFIG_CPU_32v4T=y
5224 CONFIG_CPU_ABRT_EV4T=y
5225 CONFIG_CPU_CACHE_V4WT=y
5226 CONFIG_CPU_CACHE_VIVT=y
5227 CONFIG_CPU_COPY_V4WB=y
5228 CONFIG_CPU_TLB_V4WBI=y
5229 +CONFIG_CPU_CP15=y
5230 +CONFIG_CPU_CP15_MMU=y
5233 # Processor Features
5234 @@ -112,24 +191,44 @@ CONFIG_ARM_THUMB=y
5235 # CONFIG_CPU_ICACHE_DISABLE is not set
5236 # CONFIG_CPU_DCACHE_DISABLE is not set
5237 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
5238 +# CONFIG_OUTER_CACHE is not set
5241 # Bus support
5243 -CONFIG_ISA_DMA_API=y
5246 # PCCARD (PCMCIA/CardBus) support
5248 -# CONFIG_PCCARD is not set
5249 +CONFIG_PCCARD=m
5250 +# CONFIG_PCMCIA_DEBUG is not set
5251 +CONFIG_PCMCIA=m
5252 +CONFIG_PCMCIA_LOAD_CIS=y
5253 +CONFIG_PCMCIA_IOCTL=y
5256 +# PC-card bridges
5258 +# CONFIG_AT91_CF is not set
5261 # Kernel Features
5263 +# CONFIG_PREEMPT is not set
5264 # CONFIG_NO_IDLE_HZ is not set
5265 +CONFIG_HZ=100
5266 +# CONFIG_AEABI is not set
5267 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
5268 +CONFIG_SELECT_MEMORY_MODEL=y
5269 +CONFIG_FLATMEM_MANUAL=y
5270 +# CONFIG_DISCONTIGMEM_MANUAL is not set
5271 +# CONFIG_SPARSEMEM_MANUAL is not set
5272 CONFIG_FLATMEM=y
5273 CONFIG_FLAT_NODE_MEM_MAP=y
5274 +# CONFIG_SPARSEMEM_STATIC is not set
5275 +CONFIG_SPLIT_PTLOCK_CPUS=4096
5276 +# CONFIG_RESOURCES_64BIT is not set
5277 +CONFIG_ZONE_DMA_FLAG=1
5278 # CONFIG_LEDS is not set
5279 CONFIG_ALIGNMENT_TRAP=y
5281 @@ -138,8 +237,10 @@ CONFIG_ALIGNMENT_TRAP=y
5283 CONFIG_ZBOOT_ROM_TEXT=0x10000000
5284 CONFIG_ZBOOT_ROM_BSS=0x20040000
5285 -CONFIG_ZBOOT_ROM=y
5286 -CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
5287 +# CONFIG_ZBOOT_ROM is not set
5288 +CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M"
5289 +# CONFIG_XIP_KERNEL is not set
5290 +# CONFIG_KEXEC is not set
5293 # Floating point emulation
5294 @@ -150,6 +251,7 @@ CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
5296 CONFIG_FPE_NWFPE=y
5297 # CONFIG_FPE_NWFPE_XP is not set
5298 +# CONFIG_FPE_FASTFPE is not set
5301 # Userspace binary formats
5302 @@ -165,6 +267,96 @@ CONFIG_BINFMT_MISC=y
5303 # CONFIG_PM is not set
5306 +# Networking
5308 +CONFIG_NET=y
5311 +# Networking options
5313 +# CONFIG_NETDEBUG is not set
5314 +CONFIG_PACKET=y
5315 +# CONFIG_PACKET_MMAP is not set
5316 +CONFIG_UNIX=y
5317 +# CONFIG_NET_KEY is not set
5318 +CONFIG_INET=y
5319 +CONFIG_IP_MULTICAST=y
5320 +# CONFIG_IP_ADVANCED_ROUTER is not set
5321 +CONFIG_IP_FIB_HASH=y
5322 +CONFIG_IP_PNP=y
5323 +# CONFIG_IP_PNP_DHCP is not set
5324 +# CONFIG_IP_PNP_BOOTP is not set
5325 +# CONFIG_IP_PNP_RARP is not set
5326 +# CONFIG_NET_IPIP is not set
5327 +# CONFIG_NET_IPGRE is not set
5328 +# CONFIG_IP_MROUTE is not set
5329 +# CONFIG_ARPD is not set
5330 +# CONFIG_SYN_COOKIES is not set
5331 +# CONFIG_INET_AH is not set
5332 +# CONFIG_INET_ESP is not set
5333 +# CONFIG_INET_IPCOMP is not set
5334 +# CONFIG_INET_XFRM_TUNNEL is not set
5335 +# CONFIG_INET_TUNNEL is not set
5336 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
5337 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
5338 +# CONFIG_INET_XFRM_MODE_BEET is not set
5339 +# CONFIG_INET_DIAG is not set
5340 +# CONFIG_TCP_CONG_ADVANCED is not set
5341 +CONFIG_TCP_CONG_CUBIC=y
5342 +CONFIG_DEFAULT_TCP_CONG="cubic"
5343 +# CONFIG_TCP_MD5SIG is not set
5344 +# CONFIG_IPV6 is not set
5345 +# CONFIG_INET6_XFRM_TUNNEL is not set
5346 +# CONFIG_INET6_TUNNEL is not set
5347 +# CONFIG_NETWORK_SECMARK is not set
5348 +# CONFIG_NETFILTER is not set
5351 +# DCCP Configuration (EXPERIMENTAL)
5353 +# CONFIG_IP_DCCP is not set
5356 +# SCTP Configuration (EXPERIMENTAL)
5358 +CONFIG_IP_SCTP=m
5359 +# CONFIG_SCTP_DBG_MSG is not set
5360 +# CONFIG_SCTP_DBG_OBJCNT is not set
5361 +# CONFIG_SCTP_HMAC_NONE is not set
5362 +# CONFIG_SCTP_HMAC_SHA1 is not set
5363 +CONFIG_SCTP_HMAC_MD5=y
5366 +# TIPC Configuration (EXPERIMENTAL)
5368 +# CONFIG_TIPC is not set
5369 +# CONFIG_ATM is not set
5370 +# CONFIG_BRIDGE is not set
5371 +# CONFIG_VLAN_8021Q is not set
5372 +# CONFIG_DECNET is not set
5373 +# CONFIG_LLC2 is not set
5374 +# CONFIG_IPX is not set
5375 +# CONFIG_ATALK is not set
5376 +# CONFIG_X25 is not set
5377 +# CONFIG_LAPB is not set
5378 +# CONFIG_ECONET is not set
5379 +# CONFIG_WAN_ROUTER is not set
5382 +# QoS and/or fair queueing
5384 +# CONFIG_NET_SCHED is not set
5387 +# Network testing
5389 +# CONFIG_NET_PKTGEN is not set
5390 +# CONFIG_HAMRADIO is not set
5391 +# CONFIG_IRDA is not set
5392 +# CONFIG_BT is not set
5393 +# CONFIG_IEEE80211 is not set
5396 # Device Drivers
5399 @@ -173,13 +365,95 @@ CONFIG_BINFMT_MISC=y
5401 CONFIG_STANDALONE=y
5402 CONFIG_PREVENT_FIRMWARE_BUILD=y
5403 -# CONFIG_FW_LOADER is not set
5404 -CONFIG_DEBUG_DRIVER=y
5405 +CONFIG_FW_LOADER=y
5406 +# CONFIG_DEBUG_DRIVER is not set
5407 +# CONFIG_DEBUG_DEVRES is not set
5408 +# CONFIG_SYS_HYPERVISOR is not set
5411 +# Connector - unified userspace <-> kernelspace linker
5413 +# CONFIG_CONNECTOR is not set
5416 # Memory Technology Devices (MTD)
5418 -# CONFIG_MTD is not set
5419 +CONFIG_MTD=y
5420 +# CONFIG_MTD_DEBUG is not set
5421 +CONFIG_MTD_CONCAT=y
5422 +CONFIG_MTD_PARTITIONS=y
5423 +# CONFIG_MTD_REDBOOT_PARTS is not set
5424 +CONFIG_MTD_CMDLINE_PARTS=y
5425 +# CONFIG_MTD_AFS_PARTS is not set
5428 +# User Modules And Translation Layers
5430 +CONFIG_MTD_CHAR=y
5431 +CONFIG_MTD_BLKDEVS=y
5432 +CONFIG_MTD_BLOCK=y
5433 +# CONFIG_FTL is not set
5434 +# CONFIG_NFTL is not set
5435 +# CONFIG_INFTL is not set
5436 +# CONFIG_RFD_FTL is not set
5437 +# CONFIG_SSFDC is not set
5440 +# RAM/ROM/Flash chip drivers
5442 +# CONFIG_MTD_CFI is not set
5443 +# CONFIG_MTD_JEDECPROBE is not set
5444 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
5445 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
5446 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
5447 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
5448 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
5449 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
5450 +CONFIG_MTD_CFI_I1=y
5451 +CONFIG_MTD_CFI_I2=y
5452 +# CONFIG_MTD_CFI_I4 is not set
5453 +# CONFIG_MTD_CFI_I8 is not set
5454 +# CONFIG_MTD_RAM is not set
5455 +# CONFIG_MTD_ROM is not set
5456 +# CONFIG_MTD_ABSENT is not set
5457 +# CONFIG_MTD_OBSOLETE_CHIPS is not set
5460 +# Mapping drivers for chip access
5462 +CONFIG_MTD_COMPLEX_MAPPINGS=y
5463 +# CONFIG_MTD_PLATRAM is not set
5466 +# Self-contained MTD device drivers
5468 +# CONFIG_MTD_SLRAM is not set
5469 +# CONFIG_MTD_PHRAM is not set
5470 +# CONFIG_MTD_MTDRAM is not set
5471 +# CONFIG_MTD_BLOCK2MTD is not set
5474 +# Disk-On-Chip Device Drivers
5476 +# CONFIG_MTD_DOC2000 is not set
5477 +# CONFIG_MTD_DOC2001 is not set
5478 +# CONFIG_MTD_DOC2001PLUS is not set
5481 +# NAND Flash Device Drivers
5483 +CONFIG_MTD_NAND=y
5484 +# CONFIG_MTD_NAND_VERIFY_WRITE is not set
5485 +# CONFIG_MTD_NAND_ECC_SMC is not set
5486 +CONFIG_MTD_NAND_IDS=y
5487 +# CONFIG_MTD_NAND_DISKONCHIP is not set
5488 +CONFIG_MTD_NAND_AT91=y
5489 +# CONFIG_MTD_NAND_NANDSIM is not set
5492 +# OneNAND Flash Device Drivers
5494 +# CONFIG_MTD_ONENAND is not set
5497 # Parallel port support
5498 @@ -189,6 +463,7 @@ CONFIG_DEBUG_DRIVER=y
5500 # Plug and Play support
5502 +# CONFIG_PNPACPI is not set
5505 # Block devices
5506 @@ -196,28 +471,27 @@ CONFIG_DEBUG_DRIVER=y
5507 # CONFIG_BLK_DEV_COW_COMMON is not set
5508 CONFIG_BLK_DEV_LOOP=y
5509 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
5510 -CONFIG_BLK_DEV_NBD=y
5511 +# CONFIG_BLK_DEV_NBD is not set
5512 # CONFIG_BLK_DEV_UB is not set
5513 CONFIG_BLK_DEV_RAM=y
5514 CONFIG_BLK_DEV_RAM_COUNT=16
5515 -CONFIG_BLK_DEV_RAM_SIZE=4096
5516 -CONFIG_BLK_DEV_INITRD=y
5517 -CONFIG_INITRAMFS_SOURCE=""
5518 +CONFIG_BLK_DEV_RAM_SIZE=16384
5519 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
5520 # CONFIG_CDROM_PKTCDVD is not set
5521 +# CONFIG_ATA_OVER_ETH is not set
5524 -# IO Schedulers
5525 +# ATA/ATAPI/MFM/RLL support
5527 -CONFIG_IOSCHED_NOOP=y
5528 -CONFIG_IOSCHED_AS=y
5529 -CONFIG_IOSCHED_DEADLINE=y
5530 -CONFIG_IOSCHED_CFQ=y
5531 -# CONFIG_ATA_OVER_ETH is not set
5532 +# CONFIG_IDE is not set
5535 # SCSI device support
5537 +# CONFIG_RAID_ATTRS is not set
5538 CONFIG_SCSI=y
5539 +# CONFIG_SCSI_TGT is not set
5540 +# CONFIG_SCSI_NETLINK is not set
5541 CONFIG_SCSI_PROC_FS=y
5544 @@ -233,97 +507,61 @@ CONFIG_CHR_DEV_SG=y
5546 # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
5548 -# CONFIG_SCSI_MULTI_LUN is not set
5549 -# CONFIG_SCSI_CONSTANTS is not set
5550 -# CONFIG_SCSI_LOGGING is not set
5551 +CONFIG_SCSI_MULTI_LUN=y
5552 +CONFIG_SCSI_CONSTANTS=y
5553 +CONFIG_SCSI_LOGGING=y
5554 +# CONFIG_SCSI_SCAN_ASYNC is not set
5557 -# SCSI Transport Attributes
5558 +# SCSI Transports
5560 -# CONFIG_SCSI_SPI_ATTRS is not set
5561 +CONFIG_SCSI_SPI_ATTRS=m
5562 # CONFIG_SCSI_FC_ATTRS is not set
5563 # CONFIG_SCSI_ISCSI_ATTRS is not set
5564 +# CONFIG_SCSI_SAS_ATTRS is not set
5565 +# CONFIG_SCSI_SAS_LIBSAS is not set
5568 # SCSI low-level drivers
5570 -# CONFIG_SCSI_SATA is not set
5571 +# CONFIG_ISCSI_TCP is not set
5572 # CONFIG_SCSI_DEBUG is not set
5575 -# Multi-device support (RAID and LVM)
5576 +# PCMCIA SCSI adapter support
5578 -# CONFIG_MD is not set
5579 +# CONFIG_PCMCIA_AHA152X is not set
5580 +# CONFIG_PCMCIA_FDOMAIN is not set
5581 +# CONFIG_PCMCIA_NINJA_SCSI is not set
5582 +# CONFIG_PCMCIA_QLOGIC is not set
5583 +# CONFIG_PCMCIA_SYM53C500 is not set
5586 -# Fusion MPT device support
5587 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
5589 -# CONFIG_FUSION is not set
5590 +# CONFIG_ATA is not set
5593 -# IEEE 1394 (FireWire) support
5594 +# Multi-device support (RAID and LVM)
5596 +# CONFIG_MD is not set
5599 -# I2O device support
5600 +# Fusion MPT device support
5602 +# CONFIG_FUSION is not set
5605 -# Networking support
5606 +# IEEE 1394 (FireWire) support
5608 -CONFIG_NET=y
5611 -# Networking options
5613 -CONFIG_PACKET=y
5614 -# CONFIG_PACKET_MMAP is not set
5615 -CONFIG_UNIX=y
5616 -# CONFIG_NET_KEY is not set
5617 -CONFIG_INET=y
5618 -CONFIG_IP_MULTICAST=y
5619 -# CONFIG_IP_ADVANCED_ROUTER is not set
5620 -CONFIG_IP_FIB_HASH=y
5621 -CONFIG_IP_PNP=y
5622 -CONFIG_IP_PNP_DHCP=y
5623 -# CONFIG_IP_PNP_BOOTP is not set
5624 -# CONFIG_IP_PNP_RARP is not set
5625 -# CONFIG_NET_IPIP is not set
5626 -# CONFIG_NET_IPGRE is not set
5627 -# CONFIG_IP_MROUTE is not set
5628 -# CONFIG_SYN_COOKIES is not set
5629 -# CONFIG_INET_AH is not set
5630 -# CONFIG_INET_ESP is not set
5631 -# CONFIG_INET_IPCOMP is not set
5632 -# CONFIG_INET_TUNNEL is not set
5633 -# CONFIG_IP_TCPDIAG is not set
5634 -# CONFIG_IP_TCPDIAG_IPV6 is not set
5635 -# CONFIG_TCP_CONG_ADVANCED is not set
5636 -CONFIG_TCP_CONG_BIC=y
5637 -# CONFIG_IPV6 is not set
5638 -# CONFIG_NETFILTER is not set
5639 -# CONFIG_BRIDGE is not set
5640 -# CONFIG_VLAN_8021Q is not set
5641 -# CONFIG_DECNET is not set
5642 -# CONFIG_LLC2 is not set
5643 -# CONFIG_IPX is not set
5644 -# CONFIG_ATALK is not set
5647 -# QoS and/or fair queueing
5648 +# I2O device support
5650 -# CONFIG_NET_SCHED is not set
5651 -# CONFIG_NET_CLS_ROUTE is not set
5654 -# Network testing
5655 +# Network device support
5657 -# CONFIG_NET_PKTGEN is not set
5658 -# CONFIG_NETPOLL is not set
5659 -# CONFIG_NET_POLL_CONTROLLER is not set
5660 -# CONFIG_HAMRADIO is not set
5661 -# CONFIG_IRDA is not set
5662 -# CONFIG_BT is not set
5663 CONFIG_NETDEVICES=y
5664 # CONFIG_DUMMY is not set
5665 # CONFIG_BONDING is not set
5666 @@ -331,6 +569,11 @@ CONFIG_NETDEVICES=y
5667 # CONFIG_TUN is not set
5670 +# PHY device support
5672 +# CONFIG_PHYLIB is not set
5675 # Ethernet (10 or 100Mbit)
5677 CONFIG_NET_ETHERNET=y
5678 @@ -357,11 +600,20 @@ CONFIG_ARM_AT91_ETHER=y
5679 # CONFIG_NET_RADIO is not set
5682 +# PCMCIA network device support
5684 +# CONFIG_NET_PCMCIA is not set
5687 # Wan interfaces
5689 # CONFIG_WAN is not set
5690 # CONFIG_PPP is not set
5691 # CONFIG_SLIP is not set
5692 +# CONFIG_SHAPER is not set
5693 +# CONFIG_NETCONSOLE is not set
5694 +# CONFIG_NETPOLL is not set
5695 +# CONFIG_NET_POLL_CONTROLLER is not set
5698 # ISDN subsystem
5699 @@ -372,6 +624,7 @@ CONFIG_ARM_AT91_ETHER=y
5700 # Input device support
5702 CONFIG_INPUT=y
5703 +# CONFIG_INPUT_FF_MEMLESS is not set
5706 # Userland interfaces
5707 @@ -397,9 +650,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
5709 # Hardware I/O ports
5711 -CONFIG_SERIO=y
5712 -# CONFIG_SERIO_SERPORT is not set
5713 -# CONFIG_SERIO_RAW is not set
5714 +# CONFIG_SERIO is not set
5715 # CONFIG_GAMEPORT is not set
5718 @@ -408,6 +659,7 @@ CONFIG_SERIO=y
5719 CONFIG_VT=y
5720 CONFIG_VT_CONSOLE=y
5721 CONFIG_HW_CONSOLE=y
5722 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
5723 # CONFIG_SERIAL_NONSTANDARD is not set
5726 @@ -420,11 +672,11 @@ CONFIG_HW_CONSOLE=y
5728 CONFIG_SERIAL_ATMEL=y
5729 CONFIG_SERIAL_ATMEL_CONSOLE=y
5730 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
5731 CONFIG_SERIAL_CORE=y
5732 CONFIG_SERIAL_CORE_CONSOLE=y
5733 CONFIG_UNIX98_PTYS=y
5734 -CONFIG_LEGACY_PTYS=y
5735 -CONFIG_LEGACY_PTY_COUNT=256
5736 +# CONFIG_LEGACY_PTYS is not set
5739 # IPMI
5740 @@ -435,21 +687,23 @@ CONFIG_LEGACY_PTY_COUNT=256
5741 # Watchdog Cards
5743 # CONFIG_WATCHDOG is not set
5744 +# CONFIG_HW_RANDOM is not set
5745 # CONFIG_NVRAM is not set
5746 -# CONFIG_RTC is not set
5747 -# CONFIG_AT91RM9200_RTC is not set
5748 # CONFIG_DTLK is not set
5749 # CONFIG_R3964 is not set
5752 -# Ftape, the floppy tape device driver
5753 +# PCMCIA character devices
5755 +# CONFIG_SYNCLINK_CS is not set
5756 +# CONFIG_CARDMAN_4000 is not set
5757 +# CONFIG_CARDMAN_4040 is not set
5758 # CONFIG_RAW_DRIVER is not set
5761 # TPM devices
5763 -# CONFIG_AT91_SPI is not set
5764 +# CONFIG_TCG_TPM is not set
5767 # I2C support
5768 @@ -457,10 +711,50 @@ CONFIG_LEGACY_PTY_COUNT=256
5769 # CONFIG_I2C is not set
5772 +# SPI support
5774 +# CONFIG_SPI is not set
5775 +# CONFIG_SPI_MASTER is not set
5778 +# Dallas's 1-wire bus
5780 +# CONFIG_W1 is not set
5783 +# Hardware Monitoring support
5785 +CONFIG_HWMON=y
5786 +# CONFIG_HWMON_VID is not set
5787 +# CONFIG_SENSORS_ABITUGURU is not set
5788 +# CONFIG_SENSORS_F71805F is not set
5789 +# CONFIG_SENSORS_PC87427 is not set
5790 +# CONFIG_SENSORS_VT1211 is not set
5791 +CONFIG_HWMON_DEBUG_CHIP=y
5794 # Misc devices
5798 +# Multifunction device drivers
5800 +# CONFIG_MFD_SM501 is not set
5803 +# LED devices
5805 +# CONFIG_NEW_LEDS is not set
5808 +# LED drivers
5812 +# LED Triggers
5816 # Multimedia devices
5818 # CONFIG_VIDEO_DEV is not set
5819 @@ -469,17 +763,57 @@ CONFIG_LEGACY_PTY_COUNT=256
5820 # Digital Video Broadcasting Devices
5822 # CONFIG_DVB is not set
5823 +# CONFIG_USB_DABUSB is not set
5826 # Graphics support
5828 -# CONFIG_FB is not set
5829 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
5830 +CONFIG_BACKLIGHT_CLASS_DEVICE=y
5831 +# CONFIG_LCD_CLASS_DEVICE is not set
5832 +CONFIG_BACKLIGHT_KB920x=y
5833 +CONFIG_FB=y
5834 +# CONFIG_FIRMWARE_EDID is not set
5835 +# CONFIG_FB_DDC is not set
5836 +CONFIG_FB_CFB_FILLRECT=y
5837 +CONFIG_FB_CFB_COPYAREA=y
5838 +CONFIG_FB_CFB_IMAGEBLIT=y
5839 +# CONFIG_FB_SVGALIB is not set
5840 +# CONFIG_FB_MACMODES is not set
5841 +# CONFIG_FB_BACKLIGHT is not set
5842 +CONFIG_FB_MODE_HELPERS=y
5843 +CONFIG_FB_TILEBLITTING=y
5846 +# Frame buffer hardware drivers
5848 +CONFIG_FB_S1D15605=y
5849 +# CONFIG_FB_S1D13XXX is not set
5850 +# CONFIG_FB_VIRTUAL is not set
5853 # Console display driver support
5855 # CONFIG_VGA_CONSOLE is not set
5856 CONFIG_DUMMY_CONSOLE=y
5857 +CONFIG_FRAMEBUFFER_CONSOLE=y
5858 +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
5859 +CONFIG_FONTS=y
5860 +# CONFIG_FONT_8x8 is not set
5861 +# CONFIG_FONT_8x16 is not set
5862 +# CONFIG_FONT_6x11 is not set
5863 +# CONFIG_FONT_7x14 is not set
5864 +# CONFIG_FONT_PEARL_8x8 is not set
5865 +# CONFIG_FONT_ACORN_8x8 is not set
5866 +CONFIG_FONT_MINI_4x6=y
5867 +# CONFIG_FONT_SUN8x16 is not set
5868 +# CONFIG_FONT_SUN12x22 is not set
5869 +# CONFIG_FONT_10x18 is not set
5872 +# Logo configuration
5874 +# CONFIG_LOGO is not set
5877 # Sound
5878 @@ -487,82 +821,98 @@ CONFIG_DUMMY_CONSOLE=y
5879 # CONFIG_SOUND is not set
5882 +# HID Devices
5884 +CONFIG_HID=y
5885 +# CONFIG_HID_DEBUG is not set
5888 # USB support
5890 CONFIG_USB_ARCH_HAS_HCD=y
5891 CONFIG_USB_ARCH_HAS_OHCI=y
5892 +# CONFIG_USB_ARCH_HAS_EHCI is not set
5893 CONFIG_USB=y
5894 -CONFIG_USB_DEBUG=y
5895 +# CONFIG_USB_DEBUG is not set
5898 # Miscellaneous USB options
5900 CONFIG_USB_DEVICEFS=y
5901 +# CONFIG_USB_DYNAMIC_MINORS is not set
5902 +# CONFIG_USB_OTG is not set
5905 # USB Host Controller Drivers
5907 # CONFIG_USB_ISP116X_HCD is not set
5908 CONFIG_USB_OHCI_HCD=y
5909 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
5910 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
5911 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
5912 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
5913 # CONFIG_USB_SL811_HCD is not set
5916 # USB Device Class drivers
5918 -# CONFIG_USB_BLUETOOTH_TTY is not set
5919 # CONFIG_USB_ACM is not set
5920 # CONFIG_USB_PRINTER is not set
5923 -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
5924 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
5928 +# may also be needed; see USB_STORAGE Help for more information
5930 CONFIG_USB_STORAGE=y
5931 -CONFIG_USB_STORAGE_DEBUG=y
5932 +# CONFIG_USB_STORAGE_DEBUG is not set
5933 +# CONFIG_USB_STORAGE_DATAFAB is not set
5934 # CONFIG_USB_STORAGE_FREECOM is not set
5935 # CONFIG_USB_STORAGE_DPCM is not set
5936 +# CONFIG_USB_STORAGE_USBAT is not set
5937 +# CONFIG_USB_STORAGE_SDDR09 is not set
5938 +# CONFIG_USB_STORAGE_SDDR55 is not set
5939 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
5940 +# CONFIG_USB_STORAGE_ALAUDA is not set
5941 +# CONFIG_USB_STORAGE_KARMA is not set
5942 +CONFIG_USB_LIBUSUAL=y
5945 # USB Input Devices
5947 -# CONFIG_USB_HID is not set
5950 -# USB HID Boot Protocol drivers
5952 -# CONFIG_USB_KBD is not set
5953 -# CONFIG_USB_MOUSE is not set
5954 +CONFIG_USB_HID=y
5955 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
5956 +# CONFIG_HID_FF is not set
5957 +# CONFIG_USB_HIDDEV is not set
5958 # CONFIG_USB_AIPTEK is not set
5959 # CONFIG_USB_WACOM is not set
5960 # CONFIG_USB_ACECAD is not set
5961 # CONFIG_USB_KBTAB is not set
5962 # CONFIG_USB_POWERMATE is not set
5963 -# CONFIG_USB_MTOUCH is not set
5964 -# CONFIG_USB_ITMTOUCH is not set
5965 -# CONFIG_USB_EGALAX is not set
5966 +# CONFIG_USB_TOUCHSCREEN is not set
5967 +# CONFIG_USB_YEALINK is not set
5968 # CONFIG_USB_XPAD is not set
5969 # CONFIG_USB_ATI_REMOTE is not set
5970 +# CONFIG_USB_ATI_REMOTE2 is not set
5971 +# CONFIG_USB_KEYSPAN_REMOTE is not set
5972 +# CONFIG_USB_APPLETOUCH is not set
5973 +# CONFIG_USB_GTCO is not set
5976 # USB Imaging devices
5978 +# CONFIG_USB_MDC800 is not set
5979 # CONFIG_USB_MICROTEK is not set
5982 -# USB Multimedia devices
5984 -# CONFIG_USB_DABUSB is not set
5987 -# Video4Linux support is needed for USB Multimedia device support
5991 # USB Network Adapters
5993 +# CONFIG_USB_CATC is not set
5994 # CONFIG_USB_KAWETH is not set
5995 # CONFIG_USB_PEGASUS is not set
5996 +# CONFIG_USB_RTL8150 is not set
5997 +# CONFIG_USB_USBNET_MII is not set
5998 # CONFIG_USB_USBNET is not set
5999 # CONFIG_USB_MON is not set
6001 @@ -580,12 +930,23 @@ CONFIG_USB_STORAGE_DEBUG=y
6003 # CONFIG_USB_EMI62 is not set
6004 # CONFIG_USB_EMI26 is not set
6005 +# CONFIG_USB_ADUTUX is not set
6006 +# CONFIG_USB_AUERSWALD is not set
6007 +# CONFIG_USB_RIO500 is not set
6008 +# CONFIG_USB_LEGOTOWER is not set
6009 # CONFIG_USB_LCD is not set
6010 +# CONFIG_USB_BERRY_CHARGE is not set
6011 # CONFIG_USB_LED is not set
6012 +# CONFIG_USB_CYPRESS_CY7C63 is not set
6013 # CONFIG_USB_CYTHERM is not set
6014 -# CONFIG_USB_PHIDGETKIT is not set
6015 -# CONFIG_USB_PHIDGETSERVO is not set
6016 +# CONFIG_USB_PHIDGET is not set
6017 # CONFIG_USB_IDMOUSE is not set
6018 +# CONFIG_USB_FTDI_ELAN is not set
6019 +# CONFIG_USB_APPLEDISPLAY is not set
6020 +# CONFIG_USB_LD is not set
6021 +# CONFIG_USB_TRANCEVIBRATOR is not set
6022 +# CONFIG_USB_IOWARRIOR is not set
6023 +# CONFIG_USB_TEST is not set
6026 # USB DSL modem support
6027 @@ -599,36 +960,51 @@ CONFIG_USB_STORAGE_DEBUG=y
6029 # MMC/SD Card support
6031 -# CONFIG_MMC is not set
6032 +CONFIG_MMC=y
6033 +# CONFIG_MMC_DEBUG is not set
6034 +CONFIG_MMC_BLOCK=y
6035 +CONFIG_MMC_AT91=y
6038 +# Real Time Clock
6040 +CONFIG_RTC_LIB=y
6041 +# CONFIG_RTC_CLASS is not set
6044 # File systems
6046 CONFIG_EXT2_FS=y
6047 CONFIG_EXT2_FS_XATTR=y
6048 -# CONFIG_EXT2_FS_POSIX_ACL is not set
6049 -# CONFIG_EXT2_FS_SECURITY is not set
6050 +CONFIG_EXT2_FS_POSIX_ACL=y
6051 +CONFIG_EXT2_FS_SECURITY=y
6052 # CONFIG_EXT2_FS_XIP is not set
6053 CONFIG_EXT3_FS=y
6054 CONFIG_EXT3_FS_XATTR=y
6055 -# CONFIG_EXT3_FS_POSIX_ACL is not set
6056 -# CONFIG_EXT3_FS_SECURITY is not set
6057 +CONFIG_EXT3_FS_POSIX_ACL=y
6058 +CONFIG_EXT3_FS_SECURITY=y
6059 +# CONFIG_EXT4DEV_FS is not set
6060 CONFIG_JBD=y
6061 # CONFIG_JBD_DEBUG is not set
6062 CONFIG_FS_MBCACHE=y
6063 # CONFIG_REISERFS_FS is not set
6064 # CONFIG_JFS_FS is not set
6067 -# XFS support
6069 +CONFIG_FS_POSIX_ACL=y
6070 # CONFIG_XFS_FS is not set
6071 +# CONFIG_GFS2_FS is not set
6072 +# CONFIG_OCFS2_FS is not set
6073 # CONFIG_MINIX_FS is not set
6074 # CONFIG_ROMFS_FS is not set
6075 -# CONFIG_QUOTA is not set
6076 +CONFIG_INOTIFY=y
6077 +CONFIG_INOTIFY_USER=y
6078 +CONFIG_QUOTA=y
6079 +# CONFIG_QFMT_V1 is not set
6080 +CONFIG_QFMT_V2=y
6081 +CONFIG_QUOTACTL=y
6082 CONFIG_DNOTIFY=y
6083 -CONFIG_AUTOFS_FS=y
6084 +# CONFIG_AUTOFS_FS is not set
6085 CONFIG_AUTOFS4_FS=y
6086 +# CONFIG_FUSE_FS is not set
6089 # CD-ROM/DVD Filesystems
6090 @@ -643,25 +1019,40 @@ CONFIG_FAT_FS=y
6091 CONFIG_MSDOS_FS=y
6092 CONFIG_VFAT_FS=y
6093 CONFIG_FAT_DEFAULT_CODEPAGE=437
6094 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
6095 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
6096 # CONFIG_NTFS_FS is not set
6099 # Pseudo filesystems
6101 CONFIG_PROC_FS=y
6102 +CONFIG_PROC_SYSCTL=y
6103 CONFIG_SYSFS=y
6104 -CONFIG_DEVPTS_FS_XATTR=y
6105 -# CONFIG_DEVPTS_FS_SECURITY is not set
6106 CONFIG_TMPFS=y
6107 -# CONFIG_TMPFS_XATTR is not set
6108 +# CONFIG_TMPFS_POSIX_ACL is not set
6109 # CONFIG_HUGETLB_PAGE is not set
6110 CONFIG_RAMFS=y
6111 +CONFIG_CONFIGFS_FS=y
6114 # Miscellaneous filesystems
6116 +# CONFIG_ADFS_FS is not set
6117 +# CONFIG_AFFS_FS is not set
6118 +# CONFIG_HFS_FS is not set
6119 # CONFIG_HFSPLUS_FS is not set
6120 +# CONFIG_BEFS_FS is not set
6121 +# CONFIG_BFS_FS is not set
6122 +# CONFIG_EFS_FS is not set
6123 +CONFIG_JFFS2_FS=y
6124 +CONFIG_JFFS2_FS_DEBUG=0
6125 +CONFIG_JFFS2_FS_WRITEBUFFER=y
6126 +# CONFIG_JFFS2_SUMMARY is not set
6127 +# CONFIG_JFFS2_FS_XATTR is not set
6128 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
6129 +CONFIG_JFFS2_ZLIB=y
6130 +CONFIG_JFFS2_RTIME=y
6131 +# CONFIG_JFFS2_RUBIN is not set
6132 # CONFIG_CRAMFS is not set
6133 # CONFIG_VXFS_FS is not set
6134 # CONFIG_HPFS_FS is not set
6135 @@ -675,16 +1066,23 @@ CONFIG_RAMFS=y
6136 CONFIG_NFS_FS=y
6137 CONFIG_NFS_V3=y
6138 # CONFIG_NFS_V3_ACL is not set
6139 +CONFIG_NFS_V4=y
6140 +# CONFIG_NFS_DIRECTIO is not set
6141 # CONFIG_NFSD is not set
6142 CONFIG_ROOT_NFS=y
6143 CONFIG_LOCKD=y
6144 CONFIG_LOCKD_V4=y
6145 CONFIG_NFS_COMMON=y
6146 CONFIG_SUNRPC=y
6147 +CONFIG_SUNRPC_GSS=y
6148 +CONFIG_RPCSEC_GSS_KRB5=y
6149 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
6150 # CONFIG_SMB_FS is not set
6151 # CONFIG_CIFS is not set
6152 # CONFIG_NCP_FS is not set
6153 # CONFIG_CODA_FS is not set
6154 +# CONFIG_AFS_FS is not set
6155 +# CONFIG_9P_FS is not set
6158 # Partition Types
6159 @@ -734,26 +1132,51 @@ CONFIG_NLS_ASCII=y
6160 # CONFIG_NLS_ISO8859_15 is not set
6161 # CONFIG_NLS_KOI8_R is not set
6162 # CONFIG_NLS_KOI8_U is not set
6163 -# CONFIG_NLS_UTF8 is not set
6164 +CONFIG_NLS_UTF8=y
6167 +# Distributed Lock Manager
6169 +# CONFIG_DLM is not set
6172 +# Profiling support
6174 +# CONFIG_PROFILING is not set
6177 # Kernel hacking
6179 # CONFIG_PRINTK_TIME is not set
6180 +CONFIG_ENABLE_MUST_CHECK=y
6181 +CONFIG_MAGIC_SYSRQ=y
6182 +# CONFIG_UNUSED_SYMBOLS is not set
6183 +# CONFIG_DEBUG_FS is not set
6184 +# CONFIG_HEADERS_CHECK is not set
6185 CONFIG_DEBUG_KERNEL=y
6186 -# CONFIG_MAGIC_SYSRQ is not set
6187 -CONFIG_LOG_BUF_SHIFT=14
6188 +# CONFIG_DEBUG_SHIRQ is not set
6189 +CONFIG_LOG_BUF_SHIFT=17
6190 +CONFIG_DETECT_SOFTLOCKUP=y
6191 # CONFIG_SCHEDSTATS is not set
6192 +# CONFIG_TIMER_STATS is not set
6193 # CONFIG_DEBUG_SLAB is not set
6194 -# CONFIG_DEBUG_SPINLOCK is not set
6195 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
6196 +# CONFIG_DEBUG_RT_MUTEXES is not set
6197 +# CONFIG_RT_MUTEX_TESTER is not set
6198 +CONFIG_DEBUG_SPINLOCK=y
6199 +# CONFIG_DEBUG_MUTEXES is not set
6200 +CONFIG_DEBUG_SPINLOCK_SLEEP=y
6201 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
6202 # CONFIG_DEBUG_KOBJECT is not set
6203 CONFIG_DEBUG_BUGVERBOSE=y
6204 # CONFIG_DEBUG_INFO is not set
6205 -# CONFIG_DEBUG_FS is not set
6206 +# CONFIG_DEBUG_VM is not set
6207 +# CONFIG_DEBUG_LIST is not set
6208 CONFIG_FRAME_POINTER=y
6209 -CONFIG_DEBUG_USER=y
6210 -CONFIG_DEBUG_ERRORS=y
6211 +CONFIG_FORCED_INLINING=y
6212 +# CONFIG_RCU_TORTURE_TEST is not set
6213 +# CONFIG_FAULT_INJECTION is not set
6214 +# CONFIG_DEBUG_USER is not set
6215 +# CONFIG_DEBUG_ERRORS is not set
6216 CONFIG_DEBUG_LL=y
6217 # CONFIG_DEBUG_ICEDCC is not set
6219 @@ -766,7 +1189,43 @@ CONFIG_DEBUG_LL=y
6221 # Cryptographic options
6223 -# CONFIG_CRYPTO is not set
6224 +CONFIG_CRYPTO=y
6225 +CONFIG_CRYPTO_ALGAPI=y
6226 +CONFIG_CRYPTO_BLKCIPHER=y
6227 +CONFIG_CRYPTO_HASH=m
6228 +CONFIG_CRYPTO_MANAGER=y
6229 +CONFIG_CRYPTO_HMAC=m
6230 +# CONFIG_CRYPTO_XCBC is not set
6231 +# CONFIG_CRYPTO_NULL is not set
6232 +# CONFIG_CRYPTO_MD4 is not set
6233 +CONFIG_CRYPTO_MD5=y
6234 +# CONFIG_CRYPTO_SHA1 is not set
6235 +# CONFIG_CRYPTO_SHA256 is not set
6236 +# CONFIG_CRYPTO_SHA512 is not set
6237 +# CONFIG_CRYPTO_WP512 is not set
6238 +# CONFIG_CRYPTO_TGR192 is not set
6239 +# CONFIG_CRYPTO_GF128MUL is not set
6240 +# CONFIG_CRYPTO_ECB is not set
6241 +CONFIG_CRYPTO_CBC=y
6242 +CONFIG_CRYPTO_PCBC=m
6243 +# CONFIG_CRYPTO_LRW is not set
6244 +CONFIG_CRYPTO_DES=y
6245 +# CONFIG_CRYPTO_FCRYPT is not set
6246 +# CONFIG_CRYPTO_BLOWFISH is not set
6247 +# CONFIG_CRYPTO_TWOFISH is not set
6248 +# CONFIG_CRYPTO_SERPENT is not set
6249 +# CONFIG_CRYPTO_AES is not set
6250 +# CONFIG_CRYPTO_CAST5 is not set
6251 +# CONFIG_CRYPTO_CAST6 is not set
6252 +# CONFIG_CRYPTO_TEA is not set
6253 +# CONFIG_CRYPTO_ARC4 is not set
6254 +# CONFIG_CRYPTO_KHAZAD is not set
6255 +# CONFIG_CRYPTO_ANUBIS is not set
6256 +# CONFIG_CRYPTO_DEFLATE is not set
6257 +# CONFIG_CRYPTO_MICHAEL_MIC is not set
6258 +# CONFIG_CRYPTO_CRC32C is not set
6259 +# CONFIG_CRYPTO_CAMELLIA is not set
6260 +# CONFIG_CRYPTO_TEST is not set
6263 # Hardware crypto devices
6264 @@ -775,6 +1234,14 @@ CONFIG_DEBUG_LL=y
6266 # Library routines
6268 +CONFIG_BITREVERSE=y
6269 # CONFIG_CRC_CCITT is not set
6270 +# CONFIG_CRC16 is not set
6271 CONFIG_CRC32=y
6272 # CONFIG_LIBCRC32C is not set
6273 +CONFIG_AUDIT_GENERIC=y
6274 +CONFIG_ZLIB_INFLATE=y
6275 +CONFIG_ZLIB_DEFLATE=y
6276 +CONFIG_PLIST=y
6277 +CONFIG_HAS_IOMEM=y
6278 +CONFIG_HAS_IOPORT=y
6279 diff --git a/arch/arm/configs/picotux200_defconfig b/arch/arm/configs/picotux200_defconfig
6280 index 3c0c4f1..95a22f5 100644
6281 --- a/arch/arm/configs/picotux200_defconfig
6282 +++ b/arch/arm/configs/picotux200_defconfig
6283 @@ -727,14 +727,14 @@ CONFIG_I2C_CHARDEV=m
6285 # I2C Algorithms
6287 -# CONFIG_I2C_ALGOBIT is not set
6288 +CONFIG_I2C_ALGOBIT=m
6289 # CONFIG_I2C_ALGOPCF is not set
6290 # CONFIG_I2C_ALGOPCA is not set
6293 # I2C Hardware Bus support
6295 -CONFIG_I2C_AT91=m
6296 +CONFIG_I2C_GPIO=m
6297 # CONFIG_I2C_OCORES is not set
6298 # CONFIG_I2C_PARPORT_LIGHT is not set
6299 # CONFIG_I2C_STUB is not set
6300 diff --git a/arch/arm/configs/sam9_l9260_defconfig b/arch/arm/configs/sam9_l9260_defconfig
6301 new file mode 100644
6302 index 0000000..484dc97
6303 --- /dev/null
6304 +++ b/arch/arm/configs/sam9_l9260_defconfig
6305 @@ -0,0 +1,1098 @@
6307 +# Automatically generated make config: don't edit
6308 +# Linux kernel version: 2.6.23
6309 +# Sun Oct 14 02:01:07 2007
6311 +CONFIG_ARM=y
6312 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
6313 +CONFIG_GENERIC_GPIO=y
6314 +# CONFIG_GENERIC_TIME is not set
6315 +# CONFIG_GENERIC_CLOCKEVENTS is not set
6316 +CONFIG_MMU=y
6317 +# CONFIG_NO_IOPORT is not set
6318 +CONFIG_GENERIC_HARDIRQS=y
6319 +CONFIG_STACKTRACE_SUPPORT=y
6320 +CONFIG_LOCKDEP_SUPPORT=y
6321 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
6322 +CONFIG_HARDIRQS_SW_RESEND=y
6323 +CONFIG_GENERIC_IRQ_PROBE=y
6324 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
6325 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
6326 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
6327 +CONFIG_GENERIC_HWEIGHT=y
6328 +CONFIG_GENERIC_CALIBRATE_DELAY=y
6329 +CONFIG_ZONE_DMA=y
6330 +CONFIG_VECTORS_BASE=0xffff0000
6331 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
6334 +# General setup
6336 +CONFIG_EXPERIMENTAL=y
6337 +CONFIG_BROKEN_ON_SMP=y
6338 +CONFIG_LOCK_KERNEL=y
6339 +CONFIG_INIT_ENV_ARG_LIMIT=32
6340 +CONFIG_LOCALVERSION=""
6341 +# CONFIG_LOCALVERSION_AUTO is not set
6342 +CONFIG_SWAP=y
6343 +CONFIG_SYSVIPC=y
6344 +CONFIG_SYSVIPC_SYSCTL=y
6345 +CONFIG_POSIX_MQUEUE=y
6346 +CONFIG_BSD_PROCESS_ACCT=y
6347 +CONFIG_BSD_PROCESS_ACCT_V3=y
6348 +# CONFIG_TASKSTATS is not set
6349 +# CONFIG_USER_NS is not set
6350 +CONFIG_AUDIT=y
6351 +# CONFIG_IKCONFIG is not set
6352 +CONFIG_LOG_BUF_SHIFT=15
6353 +CONFIG_SYSFS_DEPRECATED=y
6354 +# CONFIG_RELAY is not set
6355 +CONFIG_BLK_DEV_INITRD=y
6356 +CONFIG_INITRAMFS_SOURCE=""
6357 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
6358 +CONFIG_SYSCTL=y
6359 +# CONFIG_EMBEDDED is not set
6360 +CONFIG_UID16=y
6361 +CONFIG_SYSCTL_SYSCALL=y
6362 +CONFIG_KALLSYMS=y
6363 +# CONFIG_KALLSYMS_ALL is not set
6364 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
6365 +CONFIG_HOTPLUG=y
6366 +CONFIG_PRINTK=y
6367 +CONFIG_BUG=y
6368 +CONFIG_ELF_CORE=y
6369 +CONFIG_BASE_FULL=y
6370 +CONFIG_FUTEX=y
6371 +CONFIG_ANON_INODES=y
6372 +CONFIG_EPOLL=y
6373 +CONFIG_SIGNALFD=y
6374 +CONFIG_EVENTFD=y
6375 +CONFIG_SHMEM=y
6376 +CONFIG_VM_EVENT_COUNTERS=y
6377 +CONFIG_SLAB=y
6378 +# CONFIG_SLUB is not set
6379 +# CONFIG_SLOB is not set
6380 +CONFIG_RT_MUTEXES=y
6381 +# CONFIG_TINY_SHMEM is not set
6382 +CONFIG_BASE_SMALL=0
6383 +# CONFIG_MODULES is not set
6384 +CONFIG_BLOCK=y
6385 +CONFIG_LBD=y
6386 +# CONFIG_BLK_DEV_IO_TRACE is not set
6387 +CONFIG_LSF=y
6388 +# CONFIG_BLK_DEV_BSG is not set
6391 +# IO Schedulers
6393 +CONFIG_IOSCHED_NOOP=y
6394 +CONFIG_IOSCHED_AS=y
6395 +CONFIG_IOSCHED_DEADLINE=y
6396 +CONFIG_IOSCHED_CFQ=y
6397 +# CONFIG_DEFAULT_AS is not set
6398 +# CONFIG_DEFAULT_DEADLINE is not set
6399 +CONFIG_DEFAULT_CFQ=y
6400 +# CONFIG_DEFAULT_NOOP is not set
6401 +CONFIG_DEFAULT_IOSCHED="cfq"
6404 +# System Type
6406 +# CONFIG_ARCH_AAEC2000 is not set
6407 +# CONFIG_ARCH_INTEGRATOR is not set
6408 +# CONFIG_ARCH_REALVIEW is not set
6409 +# CONFIG_ARCH_VERSATILE is not set
6410 +CONFIG_ARCH_AT91=y
6411 +# CONFIG_ARCH_CLPS7500 is not set
6412 +# CONFIG_ARCH_CLPS711X is not set
6413 +# CONFIG_ARCH_CO285 is not set
6414 +# CONFIG_ARCH_EBSA110 is not set
6415 +# CONFIG_ARCH_EP93XX is not set
6416 +# CONFIG_ARCH_FOOTBRIDGE is not set
6417 +# CONFIG_ARCH_NETX is not set
6418 +# CONFIG_ARCH_H720X is not set
6419 +# CONFIG_ARCH_IMX is not set
6420 +# CONFIG_ARCH_IOP13XX is not set
6421 +# CONFIG_ARCH_IOP32X is not set
6422 +# CONFIG_ARCH_IOP33X is not set
6423 +# CONFIG_ARCH_IXP23XX is not set
6424 +# CONFIG_ARCH_IXP2000 is not set
6425 +# CONFIG_ARCH_IXP4XX is not set
6426 +# CONFIG_ARCH_L7200 is not set
6427 +# CONFIG_ARCH_KS8695 is not set
6428 +# CONFIG_ARCH_NS9XXX is not set
6429 +# CONFIG_ARCH_MXC is not set
6430 +# CONFIG_ARCH_PNX4008 is not set
6431 +# CONFIG_ARCH_PXA is not set
6432 +# CONFIG_ARCH_RPC is not set
6433 +# CONFIG_ARCH_SA1100 is not set
6434 +# CONFIG_ARCH_S3C2410 is not set
6435 +# CONFIG_ARCH_SHARK is not set
6436 +# CONFIG_ARCH_LH7A40X is not set
6437 +# CONFIG_ARCH_DAVINCI is not set
6438 +# CONFIG_ARCH_OMAP is not set
6441 +# Boot options
6445 +# Power management
6449 +# Atmel AT91 System-on-Chip
6451 +# CONFIG_ARCH_AT91RM9200 is not set
6452 +CONFIG_ARCH_AT91SAM9260=y
6453 +# CONFIG_ARCH_AT91SAM9261 is not set
6454 +# CONFIG_ARCH_AT91SAM9263 is not set
6455 +# CONFIG_ARCH_AT91SAM9RL is not set
6458 +# AT91SAM9260 Variants
6460 +# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
6463 +# AT91SAM9260 / AT91SAM9XE Board Type
6465 +# CONFIG_MACH_AT91SAM9260EK is not set
6466 +# CONFIG_MACH_CAM60 is not set
6467 +CONFIG_MACH_SAM9_L9260=y
6470 +# AT91 Board Options
6472 +CONFIG_MTD_AT91_DATAFLASH_CARD=y
6475 +# AT91 Feature Selections
6477 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
6478 +# CONFIG_ATMEL_TCLIB is not set
6481 +# Processor Type
6483 +CONFIG_CPU_32=y
6484 +CONFIG_CPU_ARM926T=y
6485 +CONFIG_CPU_32v5=y
6486 +CONFIG_CPU_ABRT_EV5TJ=y
6487 +CONFIG_CPU_CACHE_VIVT=y
6488 +CONFIG_CPU_COPY_V4WB=y
6489 +CONFIG_CPU_TLB_V4WBI=y
6490 +CONFIG_CPU_CP15=y
6491 +CONFIG_CPU_CP15_MMU=y
6494 +# Processor Features
6496 +CONFIG_ARM_THUMB=y
6497 +# CONFIG_CPU_ICACHE_DISABLE is not set
6498 +# CONFIG_CPU_DCACHE_DISABLE is not set
6499 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
6500 +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
6501 +# CONFIG_OUTER_CACHE is not set
6504 +# Bus support
6506 +# CONFIG_PCI_SYSCALL is not set
6507 +# CONFIG_ARCH_SUPPORTS_MSI is not set
6510 +# PCCARD (PCMCIA/CardBus) support
6512 +# CONFIG_PCCARD is not set
6515 +# Kernel Features
6517 +# CONFIG_TICK_ONESHOT is not set
6518 +CONFIG_PREEMPT=y
6519 +# CONFIG_NO_IDLE_HZ is not set
6520 +CONFIG_HZ=100
6521 +# CONFIG_AEABI is not set
6522 +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
6523 +CONFIG_SELECT_MEMORY_MODEL=y
6524 +CONFIG_FLATMEM_MANUAL=y
6525 +# CONFIG_DISCONTIGMEM_MANUAL is not set
6526 +# CONFIG_SPARSEMEM_MANUAL is not set
6527 +CONFIG_FLATMEM=y
6528 +CONFIG_FLAT_NODE_MEM_MAP=y
6529 +# CONFIG_SPARSEMEM_STATIC is not set
6530 +CONFIG_SPLIT_PTLOCK_CPUS=4096
6531 +# CONFIG_RESOURCES_64BIT is not set
6532 +CONFIG_ZONE_DMA_FLAG=1
6533 +CONFIG_BOUNCE=y
6534 +CONFIG_VIRT_TO_BUS=y
6535 +CONFIG_LEDS=y
6536 +CONFIG_LEDS_TIMER=y
6537 +CONFIG_LEDS_CPU=y
6538 +CONFIG_ALIGNMENT_TRAP=y
6541 +# Boot options
6543 +CONFIG_ZBOOT_ROM_TEXT=0x0
6544 +CONFIG_ZBOOT_ROM_BSS=0x0
6545 +CONFIG_CMDLINE="console=ttyS0,115200 mem=64M initrd=0x21100000,4194304 root=/dev/ram0 rw"
6546 +# CONFIG_XIP_KERNEL is not set
6547 +# CONFIG_KEXEC is not set
6550 +# Floating point emulation
6554 +# At least one emulation must be selected
6556 +CONFIG_FPE_NWFPE=y
6557 +# CONFIG_FPE_NWFPE_XP is not set
6558 +# CONFIG_FPE_FASTFPE is not set
6559 +# CONFIG_VFP is not set
6562 +# Userspace binary formats
6564 +CONFIG_BINFMT_ELF=y
6565 +# CONFIG_BINFMT_AOUT is not set
6566 +# CONFIG_BINFMT_MISC is not set
6567 +# CONFIG_ARTHUR is not set
6570 +# Power management options
6572 +# CONFIG_PM is not set
6573 +CONFIG_SUSPEND_UP_POSSIBLE=y
6576 +# Networking
6578 +CONFIG_NET=y
6581 +# Networking options
6583 +CONFIG_PACKET=y
6584 +CONFIG_PACKET_MMAP=y
6585 +CONFIG_UNIX=y
6586 +CONFIG_XFRM=y
6587 +CONFIG_XFRM_USER=y
6588 +# CONFIG_XFRM_SUB_POLICY is not set
6589 +# CONFIG_XFRM_MIGRATE is not set
6590 +CONFIG_NET_KEY=y
6591 +# CONFIG_NET_KEY_MIGRATE is not set
6592 +CONFIG_INET=y
6593 +# CONFIG_IP_MULTICAST is not set
6594 +# CONFIG_IP_ADVANCED_ROUTER is not set
6595 +CONFIG_IP_FIB_HASH=y
6596 +# CONFIG_IP_PNP is not set
6597 +# CONFIG_NET_IPIP is not set
6598 +# CONFIG_NET_IPGRE is not set
6599 +# CONFIG_ARPD is not set
6600 +# CONFIG_SYN_COOKIES is not set
6601 +# CONFIG_INET_AH is not set
6602 +# CONFIG_INET_ESP is not set
6603 +# CONFIG_INET_IPCOMP is not set
6604 +# CONFIG_INET_XFRM_TUNNEL is not set
6605 +# CONFIG_INET_TUNNEL is not set
6606 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
6607 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
6608 +# CONFIG_INET_XFRM_MODE_BEET is not set
6609 +CONFIG_INET_DIAG=y
6610 +CONFIG_INET_TCP_DIAG=y
6611 +# CONFIG_TCP_CONG_ADVANCED is not set
6612 +CONFIG_TCP_CONG_CUBIC=y
6613 +CONFIG_DEFAULT_TCP_CONG="cubic"
6614 +# CONFIG_TCP_MD5SIG is not set
6615 +# CONFIG_IPV6 is not set
6616 +# CONFIG_INET6_XFRM_TUNNEL is not set
6617 +# CONFIG_INET6_TUNNEL is not set
6618 +# CONFIG_NETWORK_SECMARK is not set
6619 +# CONFIG_NETFILTER is not set
6620 +# CONFIG_IP_DCCP is not set
6621 +# CONFIG_IP_SCTP is not set
6622 +# CONFIG_TIPC is not set
6623 +# CONFIG_ATM is not set
6624 +# CONFIG_BRIDGE is not set
6625 +# CONFIG_VLAN_8021Q is not set
6626 +# CONFIG_DECNET is not set
6627 +# CONFIG_LLC2 is not set
6628 +# CONFIG_IPX is not set
6629 +# CONFIG_ATALK is not set
6630 +# CONFIG_X25 is not set
6631 +# CONFIG_LAPB is not set
6632 +# CONFIG_ECONET is not set
6633 +# CONFIG_WAN_ROUTER is not set
6636 +# QoS and/or fair queueing
6638 +# CONFIG_NET_SCHED is not set
6641 +# Network testing
6643 +# CONFIG_NET_PKTGEN is not set
6644 +# CONFIG_HAMRADIO is not set
6645 +# CONFIG_IRDA is not set
6646 +# CONFIG_BT is not set
6647 +# CONFIG_AF_RXRPC is not set
6650 +# Wireless
6652 +# CONFIG_CFG80211 is not set
6653 +# CONFIG_WIRELESS_EXT is not set
6654 +# CONFIG_MAC80211 is not set
6655 +# CONFIG_IEEE80211 is not set
6656 +# CONFIG_RFKILL is not set
6657 +# CONFIG_NET_9P is not set
6660 +# Device Drivers
6664 +# Generic Driver Options
6666 +CONFIG_STANDALONE=y
6667 +CONFIG_PREVENT_FIRMWARE_BUILD=y
6668 +CONFIG_FW_LOADER=y
6669 +# CONFIG_DEBUG_DRIVER is not set
6670 +# CONFIG_DEBUG_DEVRES is not set
6671 +# CONFIG_SYS_HYPERVISOR is not set
6672 +# CONFIG_CONNECTOR is not set
6673 +CONFIG_MTD=y
6674 +# CONFIG_MTD_DEBUG is not set
6675 +# CONFIG_MTD_CONCAT is not set
6676 +CONFIG_MTD_PARTITIONS=y
6677 +# CONFIG_MTD_REDBOOT_PARTS is not set
6678 +# CONFIG_MTD_CMDLINE_PARTS is not set
6679 +# CONFIG_MTD_AFS_PARTS is not set
6682 +# User Modules And Translation Layers
6684 +CONFIG_MTD_CHAR=y
6685 +CONFIG_MTD_BLKDEVS=y
6686 +CONFIG_MTD_BLOCK=y
6687 +# CONFIG_FTL is not set
6688 +# CONFIG_NFTL is not set
6689 +# CONFIG_INFTL is not set
6690 +# CONFIG_RFD_FTL is not set
6691 +# CONFIG_SSFDC is not set
6694 +# RAM/ROM/Flash chip drivers
6696 +# CONFIG_MTD_CFI is not set
6697 +# CONFIG_MTD_JEDECPROBE is not set
6698 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
6699 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
6700 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
6701 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
6702 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
6703 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
6704 +CONFIG_MTD_CFI_I1=y
6705 +CONFIG_MTD_CFI_I2=y
6706 +# CONFIG_MTD_CFI_I4 is not set
6707 +# CONFIG_MTD_CFI_I8 is not set
6708 +# CONFIG_MTD_RAM is not set
6709 +# CONFIG_MTD_ROM is not set
6710 +# CONFIG_MTD_ABSENT is not set
6713 +# Mapping drivers for chip access
6715 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
6716 +# CONFIG_MTD_PLATRAM is not set
6719 +# Self-contained MTD device drivers
6721 +# CONFIG_MTD_SLRAM is not set
6722 +# CONFIG_MTD_PHRAM is not set
6723 +# CONFIG_MTD_MTDRAM is not set
6724 +CONFIG_MTD_BLOCK2MTD=y
6727 +# Disk-On-Chip Device Drivers
6729 +# CONFIG_MTD_DOC2000 is not set
6730 +# CONFIG_MTD_DOC2001 is not set
6731 +# CONFIG_MTD_DOC2001PLUS is not set
6732 +CONFIG_MTD_NAND=y
6733 +# CONFIG_MTD_NAND_VERIFY_WRITE is not set
6734 +# CONFIG_MTD_NAND_ECC_SMC is not set
6735 +# CONFIG_MTD_NAND_MUSEUM_IDS is not set
6736 +CONFIG_MTD_NAND_IDS=y
6737 +# CONFIG_MTD_NAND_DISKONCHIP is not set
6738 +CONFIG_MTD_NAND_AT91=y
6739 +# CONFIG_MTD_NAND_NANDSIM is not set
6740 +CONFIG_MTD_NAND_PLATFORM=y
6741 +# CONFIG_MTD_ONENAND is not set
6744 +# UBI - Unsorted block images
6746 +CONFIG_MTD_UBI=y
6747 +CONFIG_MTD_UBI_WL_THRESHOLD=4096
6748 +CONFIG_MTD_UBI_BEB_RESERVE=3
6749 +CONFIG_MTD_UBI_GLUEBI=y
6752 +# UBI debugging options
6754 +# CONFIG_MTD_UBI_DEBUG is not set
6755 +# CONFIG_PARPORT is not set
6756 +CONFIG_BLK_DEV=y
6757 +# CONFIG_BLK_DEV_COW_COMMON is not set
6758 +CONFIG_BLK_DEV_LOOP=y
6759 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
6760 +# CONFIG_BLK_DEV_NBD is not set
6761 +# CONFIG_BLK_DEV_UB is not set
6762 +CONFIG_BLK_DEV_RAM=y
6763 +CONFIG_BLK_DEV_RAM_COUNT=16
6764 +CONFIG_BLK_DEV_RAM_SIZE=8192
6765 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
6766 +# CONFIG_CDROM_PKTCDVD is not set
6767 +# CONFIG_ATA_OVER_ETH is not set
6770 +# SCSI device support
6772 +CONFIG_RAID_ATTRS=y
6773 +CONFIG_SCSI=y
6774 +CONFIG_SCSI_DMA=y
6775 +# CONFIG_SCSI_TGT is not set
6776 +# CONFIG_SCSI_NETLINK is not set
6777 +CONFIG_SCSI_PROC_FS=y
6780 +# SCSI support type (disk, tape, CD-ROM)
6782 +CONFIG_BLK_DEV_SD=y
6783 +# CONFIG_CHR_DEV_ST is not set
6784 +# CONFIG_CHR_DEV_OSST is not set
6785 +# CONFIG_BLK_DEV_SR is not set
6786 +CONFIG_CHR_DEV_SG=y
6787 +# CONFIG_CHR_DEV_SCH is not set
6790 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
6792 +CONFIG_SCSI_MULTI_LUN=y
6793 +CONFIG_SCSI_CONSTANTS=y
6794 +CONFIG_SCSI_LOGGING=y
6795 +# CONFIG_SCSI_SCAN_ASYNC is not set
6798 +# SCSI Transports
6800 +# CONFIG_SCSI_SPI_ATTRS is not set
6801 +# CONFIG_SCSI_FC_ATTRS is not set
6802 +# CONFIG_SCSI_ISCSI_ATTRS is not set
6803 +# CONFIG_SCSI_SAS_LIBSAS is not set
6804 +# CONFIG_SCSI_LOWLEVEL is not set
6805 +# CONFIG_ATA is not set
6806 +# CONFIG_MD is not set
6807 +CONFIG_NETDEVICES=y
6808 +# CONFIG_NETDEVICES_MULTIQUEUE is not set
6809 +# CONFIG_DUMMY is not set
6810 +# CONFIG_BONDING is not set
6811 +# CONFIG_MACVLAN is not set
6812 +# CONFIG_EQUALIZER is not set
6813 +# CONFIG_TUN is not set
6814 +CONFIG_PHYLIB=y
6817 +# MII PHY device drivers
6819 +# CONFIG_MARVELL_PHY is not set
6820 +# CONFIG_DAVICOM_PHY is not set
6821 +# CONFIG_QSEMI_PHY is not set
6822 +# CONFIG_LXT_PHY is not set
6823 +# CONFIG_CICADA_PHY is not set
6824 +# CONFIG_VITESSE_PHY is not set
6825 +# CONFIG_SMSC_PHY is not set
6826 +# CONFIG_BROADCOM_PHY is not set
6827 +# CONFIG_ICPLUS_PHY is not set
6828 +# CONFIG_FIXED_PHY is not set
6829 +CONFIG_NET_ETHERNET=y
6830 +CONFIG_MII=y
6831 +CONFIG_MACB=y
6832 +# CONFIG_AX88796 is not set
6833 +# CONFIG_SMC91X is not set
6834 +# CONFIG_DM9000 is not set
6835 +# CONFIG_NETDEV_1000 is not set
6836 +# CONFIG_NETDEV_10000 is not set
6839 +# Wireless LAN
6841 +# CONFIG_WLAN_PRE80211 is not set
6842 +# CONFIG_WLAN_80211 is not set
6845 +# USB Network Adapters
6847 +# CONFIG_USB_CATC is not set
6848 +# CONFIG_USB_KAWETH is not set
6849 +# CONFIG_USB_PEGASUS is not set
6850 +# CONFIG_USB_RTL8150 is not set
6851 +# CONFIG_USB_USBNET_MII is not set
6852 +# CONFIG_USB_USBNET is not set
6853 +# CONFIG_WAN is not set
6854 +# CONFIG_PPP is not set
6855 +# CONFIG_SLIP is not set
6856 +# CONFIG_SHAPER is not set
6857 +# CONFIG_NETCONSOLE is not set
6858 +# CONFIG_NETPOLL is not set
6859 +# CONFIG_NET_POLL_CONTROLLER is not set
6860 +# CONFIG_ISDN is not set
6863 +# Input device support
6865 +CONFIG_INPUT=y
6866 +# CONFIG_INPUT_FF_MEMLESS is not set
6867 +# CONFIG_INPUT_POLLDEV is not set
6870 +# Userland interfaces
6872 +CONFIG_INPUT_MOUSEDEV=y
6873 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
6874 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
6875 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
6876 +# CONFIG_INPUT_JOYDEV is not set
6877 +# CONFIG_INPUT_TSDEV is not set
6878 +# CONFIG_INPUT_EVDEV is not set
6879 +# CONFIG_INPUT_EVBUG is not set
6882 +# Input Device Drivers
6884 +# CONFIG_INPUT_KEYBOARD is not set
6885 +# CONFIG_INPUT_MOUSE is not set
6886 +# CONFIG_INPUT_JOYSTICK is not set
6887 +# CONFIG_INPUT_TABLET is not set
6888 +# CONFIG_INPUT_TOUCHSCREEN is not set
6889 +# CONFIG_INPUT_MISC is not set
6892 +# Hardware I/O ports
6894 +# CONFIG_SERIO is not set
6895 +# CONFIG_GAMEPORT is not set
6898 +# Character devices
6900 +CONFIG_VT=y
6901 +CONFIG_VT_CONSOLE=y
6902 +CONFIG_HW_CONSOLE=y
6903 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
6904 +# CONFIG_SERIAL_NONSTANDARD is not set
6907 +# Serial drivers
6909 +# CONFIG_SERIAL_8250 is not set
6912 +# Non-8250 serial port support
6914 +CONFIG_SERIAL_ATMEL=y
6915 +CONFIG_SERIAL_ATMEL_CONSOLE=y
6916 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
6917 +CONFIG_SERIAL_CORE=y
6918 +CONFIG_SERIAL_CORE_CONSOLE=y
6919 +CONFIG_UNIX98_PTYS=y
6920 +CONFIG_LEGACY_PTYS=y
6921 +CONFIG_LEGACY_PTY_COUNT=16
6922 +# CONFIG_IPMI_HANDLER is not set
6923 +# CONFIG_WATCHDOG is not set
6924 +# CONFIG_HW_RANDOM is not set
6925 +# CONFIG_NVRAM is not set
6926 +# CONFIG_R3964 is not set
6927 +# CONFIG_RAW_DRIVER is not set
6928 +# CONFIG_TCG_TPM is not set
6929 +# CONFIG_I2C is not set
6932 +# SPI support
6934 +# CONFIG_SPI is not set
6935 +# CONFIG_SPI_MASTER is not set
6936 +# CONFIG_W1 is not set
6937 +# CONFIG_HWMON is not set
6938 +# CONFIG_MISC_DEVICES is not set
6941 +# Multifunction device drivers
6943 +# CONFIG_MFD_SM501 is not set
6944 +CONFIG_NEW_LEDS=y
6945 +CONFIG_LEDS_CLASS=y
6948 +# LED drivers
6950 +CONFIG_LEDS_GPIO=y
6953 +# LED Triggers
6955 +CONFIG_LEDS_TRIGGERS=y
6956 +CONFIG_LEDS_TRIGGER_TIMER=y
6957 +CONFIG_LEDS_TRIGGER_HEARTBEAT=y
6960 +# Multimedia devices
6962 +# CONFIG_VIDEO_DEV is not set
6963 +# CONFIG_DVB_CORE is not set
6964 +# CONFIG_DAB is not set
6967 +# Graphics support
6969 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
6972 +# Display device support
6974 +# CONFIG_DISPLAY_SUPPORT is not set
6975 +# CONFIG_VGASTATE is not set
6976 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
6977 +# CONFIG_FB is not set
6980 +# Console display driver support
6982 +# CONFIG_VGA_CONSOLE is not set
6983 +CONFIG_DUMMY_CONSOLE=y
6986 +# Sound
6988 +# CONFIG_SOUND is not set
6989 +# CONFIG_HID_SUPPORT is not set
6990 +CONFIG_USB_SUPPORT=y
6991 +CONFIG_USB_ARCH_HAS_HCD=y
6992 +CONFIG_USB_ARCH_HAS_OHCI=y
6993 +# CONFIG_USB_ARCH_HAS_EHCI is not set
6994 +CONFIG_USB=y
6995 +# CONFIG_USB_DEBUG is not set
6998 +# Miscellaneous USB options
7000 +CONFIG_USB_DEVICEFS=y
7001 +CONFIG_USB_DEVICE_CLASS=y
7002 +# CONFIG_USB_DYNAMIC_MINORS is not set
7003 +# CONFIG_USB_OTG is not set
7006 +# USB Host Controller Drivers
7008 +# CONFIG_USB_ISP116X_HCD is not set
7009 +CONFIG_USB_OHCI_HCD=y
7010 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
7011 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
7012 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
7013 +# CONFIG_USB_SL811_HCD is not set
7014 +# CONFIG_USB_R8A66597_HCD is not set
7017 +# USB Device Class drivers
7019 +# CONFIG_USB_ACM is not set
7020 +# CONFIG_USB_PRINTER is not set
7023 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
7027 +# may also be needed; see USB_STORAGE Help for more information
7029 +CONFIG_USB_STORAGE=y
7030 +# CONFIG_USB_STORAGE_DEBUG is not set
7031 +# CONFIG_USB_STORAGE_DATAFAB is not set
7032 +# CONFIG_USB_STORAGE_FREECOM is not set
7033 +# CONFIG_USB_STORAGE_DPCM is not set
7034 +# CONFIG_USB_STORAGE_USBAT is not set
7035 +# CONFIG_USB_STORAGE_SDDR09 is not set
7036 +# CONFIG_USB_STORAGE_SDDR55 is not set
7037 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
7038 +# CONFIG_USB_STORAGE_ALAUDA is not set
7039 +# CONFIG_USB_STORAGE_KARMA is not set
7040 +CONFIG_USB_LIBUSUAL=y
7043 +# USB Imaging devices
7045 +# CONFIG_USB_MDC800 is not set
7046 +# CONFIG_USB_MICROTEK is not set
7047 +# CONFIG_USB_MON is not set
7050 +# USB port drivers
7054 +# USB Serial Converter support
7056 +# CONFIG_USB_SERIAL is not set
7059 +# USB Miscellaneous drivers
7061 +# CONFIG_USB_EMI62 is not set
7062 +# CONFIG_USB_EMI26 is not set
7063 +# CONFIG_USB_ADUTUX is not set
7064 +# CONFIG_USB_AUERSWALD is not set
7065 +# CONFIG_USB_RIO500 is not set
7066 +# CONFIG_USB_LEGOTOWER is not set
7067 +# CONFIG_USB_LCD is not set
7068 +# CONFIG_USB_BERRY_CHARGE is not set
7069 +# CONFIG_USB_LED is not set
7070 +# CONFIG_USB_CYPRESS_CY7C63 is not set
7071 +# CONFIG_USB_CYTHERM is not set
7072 +# CONFIG_USB_PHIDGET is not set
7073 +# CONFIG_USB_IDMOUSE is not set
7074 +# CONFIG_USB_FTDI_ELAN is not set
7075 +# CONFIG_USB_APPLEDISPLAY is not set
7076 +# CONFIG_USB_LD is not set
7077 +# CONFIG_USB_TRANCEVIBRATOR is not set
7078 +# CONFIG_USB_IOWARRIOR is not set
7079 +# CONFIG_USB_TEST is not set
7082 +# USB DSL modem support
7086 +# USB Gadget Support
7088 +CONFIG_USB_GADGET=y
7089 +# CONFIG_USB_GADGET_DEBUG is not set
7090 +# CONFIG_USB_GADGET_DEBUG_FILES is not set
7091 +CONFIG_USB_GADGET_SELECTED=y
7092 +# CONFIG_USB_GADGET_AMD5536UDC is not set
7093 +# CONFIG_USB_GADGET_FSL_USB2 is not set
7094 +# CONFIG_USB_GADGET_NET2280 is not set
7095 +# CONFIG_USB_GADGET_PXA2XX is not set
7096 +# CONFIG_USB_GADGET_M66592 is not set
7097 +# CONFIG_USB_GADGET_GOKU is not set
7098 +# CONFIG_USB_GADGET_LH7A40X is not set
7099 +# CONFIG_USB_GADGET_OMAP is not set
7100 +# CONFIG_USB_GADGET_S3C2410 is not set
7101 +CONFIG_USB_GADGET_AT91=y
7102 +CONFIG_USB_AT91=y
7103 +# CONFIG_USB_GADGET_DUMMY_HCD is not set
7104 +# CONFIG_USB_GADGET_DUALSPEED is not set
7105 +# CONFIG_USB_ZERO is not set
7106 +CONFIG_USB_ETH=y
7107 +CONFIG_USB_ETH_RNDIS=y
7108 +# CONFIG_USB_GADGETFS is not set
7109 +# CONFIG_USB_FILE_STORAGE is not set
7110 +# CONFIG_USB_G_SERIAL is not set
7111 +# CONFIG_USB_MIDI_GADGET is not set
7112 +CONFIG_MMC=y
7113 +CONFIG_MMC_DEBUG=y
7114 +# CONFIG_MMC_UNSAFE_RESUME is not set
7117 +# MMC/SD Card Drivers
7119 +CONFIG_MMC_BLOCK=y
7120 +CONFIG_MMC_BLOCK_BOUNCE=y
7123 +# MMC/SD Host Controller Drivers
7125 +CONFIG_MMC_AT91=y
7126 +CONFIG_RTC_LIB=y
7127 +CONFIG_RTC_CLASS=y
7128 +CONFIG_RTC_HCTOSYS=y
7129 +CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
7130 +# CONFIG_RTC_DEBUG is not set
7133 +# RTC interfaces
7135 +CONFIG_RTC_INTF_SYSFS=y
7136 +CONFIG_RTC_INTF_PROC=y
7137 +CONFIG_RTC_INTF_DEV=y
7138 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
7139 +# CONFIG_RTC_DRV_TEST is not set
7142 +# SPI RTC drivers
7146 +# Platform RTC drivers
7148 +# CONFIG_RTC_DRV_CMOS is not set
7149 +CONFIG_RTC_DRV_DS1553=y
7150 +# CONFIG_RTC_DRV_STK17TA8 is not set
7151 +CONFIG_RTC_DRV_DS1742=y
7152 +CONFIG_RTC_DRV_M48T86=y
7153 +# CONFIG_RTC_DRV_M48T59 is not set
7154 +CONFIG_RTC_DRV_V3020=y
7157 +# on-CPU RTC drivers
7161 +# DMA Engine support
7163 +# CONFIG_DMA_ENGINE is not set
7166 +# DMA Clients
7170 +# DMA Devices
7174 +# File systems
7176 +CONFIG_EXT2_FS=y
7177 +CONFIG_EXT2_FS_XATTR=y
7178 +CONFIG_EXT2_FS_POSIX_ACL=y
7179 +CONFIG_EXT2_FS_SECURITY=y
7180 +# CONFIG_EXT2_FS_XIP is not set
7181 +CONFIG_EXT3_FS=y
7182 +CONFIG_EXT3_FS_XATTR=y
7183 +CONFIG_EXT3_FS_POSIX_ACL=y
7184 +CONFIG_EXT3_FS_SECURITY=y
7185 +# CONFIG_EXT4DEV_FS is not set
7186 +CONFIG_JBD=y
7187 +# CONFIG_JBD_DEBUG is not set
7188 +CONFIG_FS_MBCACHE=y
7189 +# CONFIG_REISERFS_FS is not set
7190 +# CONFIG_JFS_FS is not set
7191 +CONFIG_FS_POSIX_ACL=y
7192 +# CONFIG_XFS_FS is not set
7193 +# CONFIG_GFS2_FS is not set
7194 +# CONFIG_OCFS2_FS is not set
7195 +# CONFIG_MINIX_FS is not set
7196 +# CONFIG_ROMFS_FS is not set
7197 +CONFIG_INOTIFY=y
7198 +CONFIG_INOTIFY_USER=y
7199 +# CONFIG_QUOTA is not set
7200 +CONFIG_DNOTIFY=y
7201 +# CONFIG_AUTOFS_FS is not set
7202 +# CONFIG_AUTOFS4_FS is not set
7203 +# CONFIG_FUSE_FS is not set
7206 +# CD-ROM/DVD Filesystems
7208 +# CONFIG_ISO9660_FS is not set
7209 +# CONFIG_UDF_FS is not set
7212 +# DOS/FAT/NT Filesystems
7214 +CONFIG_FAT_FS=y
7215 +CONFIG_MSDOS_FS=y
7216 +CONFIG_VFAT_FS=y
7217 +CONFIG_FAT_DEFAULT_CODEPAGE=437
7218 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
7219 +# CONFIG_NTFS_FS is not set
7222 +# Pseudo filesystems
7224 +CONFIG_PROC_FS=y
7225 +CONFIG_PROC_SYSCTL=y
7226 +CONFIG_SYSFS=y
7227 +CONFIG_TMPFS=y
7228 +# CONFIG_TMPFS_POSIX_ACL is not set
7229 +# CONFIG_HUGETLB_PAGE is not set
7230 +CONFIG_RAMFS=y
7231 +# CONFIG_CONFIGFS_FS is not set
7234 +# Miscellaneous filesystems
7236 +# CONFIG_ADFS_FS is not set
7237 +# CONFIG_AFFS_FS is not set
7238 +# CONFIG_HFS_FS is not set
7239 +# CONFIG_HFSPLUS_FS is not set
7240 +# CONFIG_BEFS_FS is not set
7241 +# CONFIG_BFS_FS is not set
7242 +# CONFIG_EFS_FS is not set
7243 +CONFIG_JFFS2_FS=y
7244 +CONFIG_JFFS2_FS_DEBUG=0
7245 +CONFIG_JFFS2_FS_WRITEBUFFER=y
7246 +# CONFIG_JFFS2_SUMMARY is not set
7247 +# CONFIG_JFFS2_FS_XATTR is not set
7248 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
7249 +CONFIG_JFFS2_ZLIB=y
7250 +CONFIG_JFFS2_RTIME=y
7251 +# CONFIG_JFFS2_RUBIN is not set
7252 +# CONFIG_CRAMFS is not set
7253 +# CONFIG_VXFS_FS is not set
7254 +# CONFIG_HPFS_FS is not set
7255 +# CONFIG_QNX4FS_FS is not set
7256 +# CONFIG_SYSV_FS is not set
7257 +# CONFIG_UFS_FS is not set
7260 +# Network File Systems
7262 +CONFIG_NFS_FS=y
7263 +CONFIG_NFS_V3=y
7264 +# CONFIG_NFS_V3_ACL is not set
7265 +# CONFIG_NFS_V4 is not set
7266 +CONFIG_NFS_DIRECTIO=y
7267 +# CONFIG_NFSD is not set
7268 +CONFIG_LOCKD=y
7269 +CONFIG_LOCKD_V4=y
7270 +CONFIG_NFS_COMMON=y
7271 +CONFIG_SUNRPC=y
7272 +# CONFIG_SUNRPC_BIND34 is not set
7273 +# CONFIG_RPCSEC_GSS_KRB5 is not set
7274 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
7275 +# CONFIG_SMB_FS is not set
7276 +# CONFIG_CIFS is not set
7277 +# CONFIG_NCP_FS is not set
7278 +# CONFIG_CODA_FS is not set
7279 +# CONFIG_AFS_FS is not set
7282 +# Partition Types
7284 +# CONFIG_PARTITION_ADVANCED is not set
7285 +CONFIG_MSDOS_PARTITION=y
7288 +# Native Language Support
7290 +CONFIG_NLS=y
7291 +CONFIG_NLS_DEFAULT="iso8859-1"
7292 +CONFIG_NLS_CODEPAGE_437=y
7293 +CONFIG_NLS_CODEPAGE_737=y
7294 +CONFIG_NLS_CODEPAGE_775=y
7295 +CONFIG_NLS_CODEPAGE_850=y
7296 +CONFIG_NLS_CODEPAGE_852=y
7297 +CONFIG_NLS_CODEPAGE_855=y
7298 +CONFIG_NLS_CODEPAGE_857=y
7299 +CONFIG_NLS_CODEPAGE_860=y
7300 +CONFIG_NLS_CODEPAGE_861=y
7301 +CONFIG_NLS_CODEPAGE_862=y
7302 +CONFIG_NLS_CODEPAGE_863=y
7303 +CONFIG_NLS_CODEPAGE_864=y
7304 +CONFIG_NLS_CODEPAGE_865=y
7305 +CONFIG_NLS_CODEPAGE_866=y
7306 +CONFIG_NLS_CODEPAGE_869=y
7307 +CONFIG_NLS_CODEPAGE_936=y
7308 +CONFIG_NLS_CODEPAGE_950=y
7309 +CONFIG_NLS_CODEPAGE_932=y
7310 +CONFIG_NLS_CODEPAGE_949=y
7311 +CONFIG_NLS_CODEPAGE_874=y
7312 +CONFIG_NLS_ISO8859_8=y
7313 +CONFIG_NLS_CODEPAGE_1250=y
7314 +CONFIG_NLS_CODEPAGE_1251=y
7315 +CONFIG_NLS_ASCII=y
7316 +CONFIG_NLS_ISO8859_1=y
7317 +CONFIG_NLS_ISO8859_2=y
7318 +CONFIG_NLS_ISO8859_3=y
7319 +CONFIG_NLS_ISO8859_4=y
7320 +CONFIG_NLS_ISO8859_5=y
7321 +CONFIG_NLS_ISO8859_6=y
7322 +CONFIG_NLS_ISO8859_7=y
7323 +CONFIG_NLS_ISO8859_9=y
7324 +CONFIG_NLS_ISO8859_13=y
7325 +CONFIG_NLS_ISO8859_14=y
7326 +CONFIG_NLS_ISO8859_15=y
7327 +CONFIG_NLS_KOI8_R=y
7328 +CONFIG_NLS_KOI8_U=y
7329 +CONFIG_NLS_UTF8=y
7332 +# Distributed Lock Manager
7334 +# CONFIG_DLM is not set
7337 +# Profiling support
7339 +# CONFIG_PROFILING is not set
7342 +# Kernel hacking
7344 +# CONFIG_PRINTK_TIME is not set
7345 +CONFIG_ENABLE_MUST_CHECK=y
7346 +CONFIG_MAGIC_SYSRQ=y
7347 +CONFIG_UNUSED_SYMBOLS=y
7348 +CONFIG_DEBUG_FS=y
7349 +# CONFIG_HEADERS_CHECK is not set
7350 +CONFIG_DEBUG_KERNEL=y
7351 +# CONFIG_DEBUG_SHIRQ is not set
7352 +CONFIG_DETECT_SOFTLOCKUP=y
7353 +CONFIG_SCHED_DEBUG=y
7354 +# CONFIG_SCHEDSTATS is not set
7355 +# CONFIG_TIMER_STATS is not set
7356 +# CONFIG_DEBUG_SLAB is not set
7357 +CONFIG_DEBUG_PREEMPT=y
7358 +# CONFIG_DEBUG_RT_MUTEXES is not set
7359 +# CONFIG_RT_MUTEX_TESTER is not set
7360 +# CONFIG_DEBUG_SPINLOCK is not set
7361 +# CONFIG_DEBUG_MUTEXES is not set
7362 +# CONFIG_DEBUG_LOCK_ALLOC is not set
7363 +# CONFIG_PROVE_LOCKING is not set
7364 +# CONFIG_LOCK_STAT is not set
7365 +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
7366 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
7367 +# CONFIG_DEBUG_KOBJECT is not set
7368 +CONFIG_DEBUG_BUGVERBOSE=y
7369 +# CONFIG_DEBUG_INFO is not set
7370 +# CONFIG_DEBUG_VM is not set
7371 +# CONFIG_DEBUG_LIST is not set
7372 +CONFIG_FRAME_POINTER=y
7373 +CONFIG_FORCED_INLINING=y
7374 +# CONFIG_FAULT_INJECTION is not set
7375 +# CONFIG_DEBUG_USER is not set
7376 +# CONFIG_DEBUG_ERRORS is not set
7377 +CONFIG_DEBUG_LL=y
7378 +# CONFIG_DEBUG_ICEDCC is not set
7381 +# Security options
7383 +# CONFIG_KEYS is not set
7384 +# CONFIG_SECURITY is not set
7385 +# CONFIG_CRYPTO is not set
7388 +# Library routines
7390 +CONFIG_BITREVERSE=y
7391 +# CONFIG_CRC_CCITT is not set
7392 +# CONFIG_CRC16 is not set
7393 +# CONFIG_CRC_ITU_T is not set
7394 +CONFIG_CRC32=y
7395 +# CONFIG_CRC7 is not set
7396 +# CONFIG_LIBCRC32C is not set
7397 +CONFIG_AUDIT_GENERIC=y
7398 +CONFIG_ZLIB_INFLATE=y
7399 +CONFIG_ZLIB_DEFLATE=y
7400 +CONFIG_PLIST=y
7401 +CONFIG_HAS_IOMEM=y
7402 +CONFIG_HAS_IOPORT=y
7403 +CONFIG_HAS_DMA=y
7404 diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
7405 index 05a9f8a..a4110e5 100644
7406 --- a/arch/arm/mach-at91/Kconfig
7407 +++ b/arch/arm/mach-at91/Kconfig
7408 @@ -106,6 +106,32 @@ config MACH_KAFA
7409 help
7410 Select this if you are using Sperry-Sun's KAFA board.
7412 +config MACH_CHUB
7413 + bool "Promwad Chub board"
7414 + depends on ARCH_AT91RM9200
7415 + help
7416 + Select this if you are using Promwad's Chub board.
7418 +config MACH_HOMEMATIC
7419 + bool "eQ-3 HomeMatic"
7420 + depends on ARCH_AT91RM9200
7421 + help
7422 + Select this if you are using eQ-3's HomeMatic device.
7423 + <http://www.eq-3.com>
7425 +config MACH_ECBAT91
7426 + bool "emQbit ECB_AT91 SBC"
7427 + depends on ARCH_AT91RM9200
7428 + help
7429 + Select this if you are using emQbit's ECB_AT91 board.
7430 + <http://wiki.emqbit.com/free-ecb-at91>
7432 +config MACH_SWEDATMS
7433 + bool "Sweda TMS Board"
7434 + depends on ARCH_AT91RM9200
7435 + help
7436 + Select this if you are using Sweda TMS-100 board.
7438 endif
7440 # ----------------------------------------------------------
7441 @@ -130,6 +156,20 @@ config MACH_AT91SAM9260EK
7442 Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
7443 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
7445 +config MACH_CAM60
7446 + bool "KwikByte CAM60 board"
7447 + depends on ARCH_AT91SAM9260
7448 + help
7449 + Select this if you are using KwikByte's CAM60 board based on the Atmel AT91SAM9260.
7450 + <http://www.kwikbyte.com>
7452 +config MACH_SAM9_L9260
7453 + bool "Olimex SAM9-L9260 board"
7454 + depends on ARCH_AT91SAM9260
7455 + help
7456 + Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
7457 + http://www.olimex.com/dev/sam9-L9260.html
7459 endif
7461 # ----------------------------------------------------------
7462 @@ -198,7 +238,7 @@ comment "AT91 Board Options"
7464 config MTD_AT91_DATAFLASH_CARD
7465 bool "Enable DataFlash Card support"
7466 - depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK)
7467 + depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_ECBAT91 || MACH_SAM9_L9260)
7468 help
7469 Enable support for the DataFlash card.
7471 @@ -209,6 +249,20 @@ config MTD_NAND_AT91_BUSWIDTH_16
7472 On AT91SAM926x boards both types of NAND flash can be present
7473 (8 and 16 bit data bus width).
7475 +config CSB300_WAKE_SW0
7476 + bool "CSB300 SW0 irq0 wakeup"
7477 + depends on MACH_CSB337 && PM
7478 + help
7479 + If you have a CSB300 connected to your CSB337, this lets
7480 + SW0 serve as a wakeup button. It uses IRQ0.
7482 +config CSB300_WAKE_SW1
7483 + bool "CSB300 SW1 gpio wakeup"
7484 + depends on MACH_CSB337 && PM
7485 + help
7486 + If you have a CSB300 connected to your CSB337, this lets
7487 + SW1 serve as a wakeup button. It uses GPIO.
7489 # ----------------------------------------------------------
7491 comment "AT91 Feature Selections"
7492 @@ -219,6 +273,36 @@ config AT91_PROGRAMMABLE_CLOCKS
7493 Select this if you need to program one or more of the PCK0..PCK3
7494 programmable clock outputs.
7496 +config ATMEL_TCLIB
7497 + bool "Timer/Counter Library"
7498 + help
7499 + Select this if you want a library to allocate the Timer/Counter
7500 + blocks found on many Atmel processors. This facilitates using
7501 + these modules despite processor differences.
7503 +config AT91_SLOW_CLOCK
7504 + bool "Suspend-to-RAM uses slow clock mode (EXPERIMENTAL)"
7505 + depends on PM && EXPERIMENTAL
7506 + help
7507 + Select this if you wish to put the CPU into slow clock mode
7508 + while in the "Suspend to RAM" state, to save more power.
7510 +config AT91_TIMER_HZ
7511 + int "Kernel HZ (jiffies per second)"
7512 + range 32 1024
7513 + depends on ARCH_AT91
7514 + default "128" if ARCH_AT91RM9200
7515 + default "100"
7516 + help
7517 + On AT91rm9200 chips where you're using a system clock derived
7518 + from the 32768 Hz hardware clock, this tick rate should divide
7519 + it exactly: use a power-of-two value, such as 128 or 256, to
7520 + reduce timing errors caused by rounding.
7522 + On AT91sam926x chips, or otherwise using a higher precision
7523 + system clock (of at least several MHz), rounding is less of a
7524 + problem so it can be safer to use a decimal values like 100.
7526 endmenu
7528 endif
7529 diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
7530 index a21f08c..9684dc6 100644
7531 --- a/arch/arm/mach-at91/Makefile
7532 +++ b/arch/arm/mach-at91/Makefile
7533 @@ -9,6 +9,8 @@ obj- :=
7535 obj-$(CONFIG_AT91_PMC_UNIT) += clock.o
7536 obj-$(CONFIG_PM) += pm.o
7537 +obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o
7538 +obj-$(CONFIG_ATMEL_TCLIB) += tclib.o
7540 # CPU-specific support
7541 obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o
7542 @@ -28,11 +30,17 @@ obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o
7543 obj-$(CONFIG_MACH_KB9200) += board-kb9202.o
7544 obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o
7545 obj-$(CONFIG_MACH_KAFA) += board-kafa.o
7546 +obj-$(CONFIG_MACH_CHUB) += board-chub.o
7547 obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o
7548 obj-$(CONFIG_MACH_AT91EB01) += board-eb01.o
7549 +obj-$(CONFIG_MACH_HOMEMATIC) += board-homematic.o
7550 +obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o
7551 +obj-$(CONFIG_MACH_SWEDATMS) += board-tms.o
7553 # AT91SAM9260 board-specific support
7554 obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
7555 +obj-$(CONFIG_MACH_CAM60) += board-cam60.o
7556 +obj-$(CONFIG_MACH_SAM9_L9260) += board-sam9-l9260.o
7558 # AT91SAM9261 board-specific support
7559 obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
7560 @@ -51,10 +59,12 @@ led-$(CONFIG_MACH_CSB337) += leds.o
7561 led-$(CONFIG_MACH_CSB637) += leds.o
7562 led-$(CONFIG_MACH_KB9200) += leds.o
7563 led-$(CONFIG_MACH_KAFA) += leds.o
7564 +led-$(CONFIG_MACH_ECBAT91) += leds.o
7565 +led-$(CONFIG_MACH_SAM9_L9260) += leds.o
7566 obj-$(CONFIG_LEDS) += $(led-y)
7568 # VGA support
7569 -#obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
7570 +obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
7573 ifeq ($(CONFIG_PM_DEBUG),y)
7574 diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
7575 index 2cad2bf..84cad3b 100644
7576 --- a/arch/arm/mach-at91/at91rm9200.c
7577 +++ b/arch/arm/mach-at91/at91rm9200.c
7578 @@ -267,6 +267,33 @@ static void at91rm9200_reset(void)
7581 /* --------------------------------------------------------------------
7582 + * Timer/Counter library initialization
7583 + * -------------------------------------------------------------------- */
7584 +#ifdef CONFIG_ATMEL_TCLIB
7586 +#include "tclib.h"
7588 +static struct atmel_tcblock at91rm9200_tcblocks[] = {
7589 + [0] = {
7590 + .physaddr = AT91RM9200_BASE_TCB0,
7591 + .irq = { AT91RM9200_ID_TC0, AT91RM9200_ID_TC1, AT91RM9200_ID_TC2 },
7592 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
7593 + },
7594 + [1] = {
7595 + .physaddr = AT91RM9200_BASE_TCB1,
7596 + .irq = { AT91RM9200_ID_TC3, AT91RM9200_ID_TC4, AT91RM9200_ID_TC5 },
7597 + .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
7598 + },
7601 +#define at91rm9200_tc_init() atmel_tc_init(at91rm9200_tcblocks, ARRAY_SIZE(at91rm9200_tcblocks))
7603 +#else
7604 +#define at91rm9200_tc_init() do {} while(0)
7605 +#endif
7608 +/* --------------------------------------------------------------------
7609 * AT91RM9200 processor initialization
7610 * -------------------------------------------------------------------- */
7611 void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks)
7612 @@ -288,6 +315,9 @@ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks
7614 /* Initialize GPIO subsystem */
7615 at91_gpio_init(at91rm9200_gpio, banks);
7617 + /* Initialize the Timer/Counter blocks */
7618 + at91rm9200_tc_init();
7622 @@ -301,28 +331,28 @@ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks
7623 static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {
7624 7, /* Advanced Interrupt Controller (FIQ) */
7625 7, /* System Peripherals */
7626 - 0, /* Parallel IO Controller A */
7627 - 0, /* Parallel IO Controller B */
7628 - 0, /* Parallel IO Controller C */
7629 - 0, /* Parallel IO Controller D */
7630 - 6, /* USART 0 */
7631 - 6, /* USART 1 */
7632 - 6, /* USART 2 */
7633 - 6, /* USART 3 */
7634 + 1, /* Parallel IO Controller A */
7635 + 1, /* Parallel IO Controller B */
7636 + 1, /* Parallel IO Controller C */
7637 + 1, /* Parallel IO Controller D */
7638 + 5, /* USART 0 */
7639 + 5, /* USART 1 */
7640 + 5, /* USART 2 */
7641 + 5, /* USART 3 */
7642 0, /* Multimedia Card Interface */
7643 - 4, /* USB Device Port */
7644 - 0, /* Two-Wire Interface */
7645 - 6, /* Serial Peripheral Interface */
7646 - 5, /* Serial Synchronous Controller 0 */
7647 - 5, /* Serial Synchronous Controller 1 */
7648 - 5, /* Serial Synchronous Controller 2 */
7649 + 2, /* USB Device Port */
7650 + 6, /* Two-Wire Interface */
7651 + 5, /* Serial Peripheral Interface */
7652 + 4, /* Serial Synchronous Controller 0 */
7653 + 4, /* Serial Synchronous Controller 1 */
7654 + 4, /* Serial Synchronous Controller 2 */
7655 0, /* Timer Counter 0 */
7656 0, /* Timer Counter 1 */
7657 0, /* Timer Counter 2 */
7658 0, /* Timer Counter 3 */
7659 0, /* Timer Counter 4 */
7660 0, /* Timer Counter 5 */
7661 - 3, /* USB Host port */
7662 + 2, /* USB Host port */
7663 3, /* Ethernet MAC */
7664 0, /* Advanced Interrupt Controller (IRQ0) */
7665 0, /* Advanced Interrupt Controller (IRQ1) */
7666 diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c
7667 index 9296833..3c8e8c1 100644
7668 --- a/arch/arm/mach-at91/at91rm9200_devices.c
7669 +++ b/arch/arm/mach-at91/at91rm9200_devices.c
7670 @@ -512,7 +512,18 @@ void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
7671 * SPI
7672 * -------------------------------------------------------------------- */
7674 -#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
7675 +#if defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE) /* legacy SPI driver */
7676 +#define SPI_DEVNAME "at91_spi"
7678 +#elif defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) /* SPI bitbanging driver */
7679 +#define SPI_DEVNAME "at91_spi"
7681 +#elif defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE) /* new SPI driver */
7682 +#define SPI_DEVNAME "atmel_spi"
7684 +#endif
7686 +#ifdef SPI_DEVNAME
7687 static u64 spi_dmamask = 0xffffffffUL;
7689 static struct resource spi_resources[] = {
7690 @@ -529,7 +540,7 @@ static struct resource spi_resources[] = {
7693 static struct platform_device at91rm9200_spi_device = {
7694 - .name = "atmel_spi",
7695 + .name = SPI_DEVNAME,
7696 .id = 0,
7697 .dev = {
7698 .dma_mask = &spi_dmamask,
7699 @@ -557,8 +568,17 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
7700 else
7701 cs_pin = spi_standard_cs[devices[i].chip_select];
7703 - /* enable chip-select pin */
7704 - at91_set_gpio_output(cs_pin, 1);
7705 + if (devices[i].chip_select == 0) /* for CS0 errata */
7706 + at91_set_A_periph(cs_pin, 0);
7707 + else
7708 + at91_set_gpio_output(cs_pin, 1);
7710 +#if defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE)
7711 + /*
7712 + * Force peripheral mode when using the legacy SPI driver.
7713 + */
7714 + at91_set_A_periph(cs_pin, 0);
7715 +#endif
7717 /* pass chip-select pin to driver */
7718 devices[i].controller_data = (void *) cs_pin;
7719 @@ -634,6 +654,36 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
7720 #endif
7723 +#if defined(CONFIG_NEW_LEDS)
7724 +static struct gpio_led_platform_data led_data;
7726 +static struct platform_device at91_leds = {
7727 + .name = "leds-gpio",
7728 + .id = -1,
7729 + .dev = {
7730 + .platform_data = &led_data,
7734 +void __init at91_gpio_leds(struct gpio_led *leds, int nr)
7736 + int i;
7738 + if (!nr)
7739 + return;
7741 + for (i = 0; i < nr; i++)
7742 + at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
7744 + led_data.leds = leds;
7745 + led_data.num_leds = nr;
7746 + platform_device_register(&at91_leds);
7748 +#else
7749 +void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
7750 +#endif
7753 /* --------------------------------------------------------------------
7754 * UART
7755 * -------------------------------------------------------------------- */
7756 diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
7757 index e47381e..10eb802 100644
7758 --- a/arch/arm/mach-at91/at91sam9260.c
7759 +++ b/arch/arm/mach-at91/at91sam9260.c
7760 @@ -269,6 +269,33 @@ static void at91sam9260_reset(void)
7763 /* --------------------------------------------------------------------
7764 + * Timer/Counter library initialization
7765 + * -------------------------------------------------------------------- */
7766 +#ifdef CONFIG_ATMEL_TCLIB
7768 +#include "tclib.h"
7770 +static struct atmel_tcblock at91sam9260_tcblocks[] = {
7771 + [0] = {
7772 + .physaddr = AT91SAM9260_BASE_TCB0,
7773 + .irq = { AT91SAM9260_ID_TC0, AT91SAM9260_ID_TC1, AT91SAM9260_ID_TC2 },
7774 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
7775 + },
7776 + [1] = {
7777 + .physaddr = AT91SAM9260_BASE_TCB1,
7778 + .irq = { AT91SAM9260_ID_TC3, AT91SAM9260_ID_TC4, AT91SAM9260_ID_TC5 },
7779 + .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
7780 + },
7783 +#define at91sam9260_tc_init() atmel_tc_init(at91sam9260_tcblocks, ARRAY_SIZE(at91sam9260_tcblocks))
7785 +#else
7786 +#define at91sam9260_tc_init() do {} while(0)
7787 +#endif
7790 +/* --------------------------------------------------------------------
7791 * AT91SAM9260 processor initialization
7792 * -------------------------------------------------------------------- */
7794 @@ -315,6 +342,9 @@ void __init at91sam9260_initialize(unsigned long main_clock)
7796 /* Register GPIO subsystem */
7797 at91_gpio_init(at91sam9260_gpio, 3);
7799 + /* Initialize the Timer/Counter blocks */
7800 + at91sam9260_tc_init();
7803 /* --------------------------------------------------------------------
7804 @@ -327,30 +357,30 @@ void __init at91sam9260_initialize(unsigned long main_clock)
7805 static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
7806 7, /* Advanced Interrupt Controller */
7807 7, /* System Peripherals */
7808 - 0, /* Parallel IO Controller A */
7809 - 0, /* Parallel IO Controller B */
7810 - 0, /* Parallel IO Controller C */
7811 + 1, /* Parallel IO Controller A */
7812 + 1, /* Parallel IO Controller B */
7813 + 1, /* Parallel IO Controller C */
7814 0, /* Analog-to-Digital Converter */
7815 - 6, /* USART 0 */
7816 - 6, /* USART 1 */
7817 - 6, /* USART 2 */
7818 + 5, /* USART 0 */
7819 + 5, /* USART 1 */
7820 + 5, /* USART 2 */
7821 0, /* Multimedia Card Interface */
7822 - 4, /* USB Device Port */
7823 - 0, /* Two-Wire Interface */
7824 - 6, /* Serial Peripheral Interface 0 */
7825 - 6, /* Serial Peripheral Interface 1 */
7826 + 2, /* USB Device Port */
7827 + 6, /* Two-Wire Interface */
7828 + 5, /* Serial Peripheral Interface 0 */
7829 + 5, /* Serial Peripheral Interface 1 */
7830 5, /* Serial Synchronous Controller */
7833 0, /* Timer Counter 0 */
7834 0, /* Timer Counter 1 */
7835 0, /* Timer Counter 2 */
7836 - 3, /* USB Host port */
7837 + 2, /* USB Host port */
7838 3, /* Ethernet */
7839 0, /* Image Sensor Interface */
7840 - 6, /* USART 3 */
7841 - 6, /* USART 4 */
7842 - 6, /* USART 5 */
7843 + 5, /* USART 3 */
7844 + 5, /* USART 4 */
7845 + 5, /* USART 5 */
7846 0, /* Timer Counter 3 */
7847 0, /* Timer Counter 4 */
7848 0, /* Timer Counter 5 */
7849 diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
7850 index 3091bf4..883b5e7 100644
7851 --- a/arch/arm/mach-at91/at91sam9260_devices.c
7852 +++ b/arch/arm/mach-at91/at91sam9260_devices.c
7853 @@ -539,6 +539,46 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
7856 /* --------------------------------------------------------------------
7857 + * RTC (RTT)
7858 + * -------------------------------------------------------------------- */
7860 +#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
7861 +static struct platform_device at91sam9260_rtc_device = {
7862 + .name = "at91_rtc",
7863 + .id = -1,
7864 + .num_resources = 0,
7867 +static void __init at91_add_device_rtc(void)
7869 + platform_device_register(&at91sam9260_rtc_device);
7871 +#else
7872 +static void __init at91_add_device_rtc(void) {}
7873 +#endif
7876 +/* --------------------------------------------------------------------
7877 + * Watchdog
7878 + * -------------------------------------------------------------------- */
7880 +#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
7881 +static struct platform_device at91sam9260_wdt_device = {
7882 + .name = "at91_wdt",
7883 + .id = -1,
7884 + .num_resources = 0,
7887 +static void __init at91_add_device_watchdog(void)
7889 + platform_device_register(&at91sam9260_wdt_device);
7891 +#else
7892 +static void __init at91_add_device_watchdog(void) {}
7893 +#endif
7896 +/* --------------------------------------------------------------------
7897 * LEDs
7898 * -------------------------------------------------------------------- */
7900 @@ -560,6 +600,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
7901 #endif
7904 +#if defined(CONFIG_NEW_LEDS)
7905 +static struct gpio_led_platform_data led_data;
7907 +static struct platform_device at91_leds = {
7908 + .name = "leds-gpio",
7909 + .id = -1,
7910 + .dev = {
7911 + .platform_data = &led_data,
7915 +void __init at91_gpio_leds(struct gpio_led *leds, int nr)
7917 + int i;
7919 + if (!nr)
7920 + return;
7922 + at91_leds.dev.platform_data = leds;
7924 + for (i = 0; i < nr; i++)
7925 + at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
7927 + led_data.leds = leds;
7928 + led_data.num_leds = nr;
7929 + platform_device_register(&at91_leds);
7931 +#else
7932 +void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
7933 +#endif
7936 /* --------------------------------------------------------------------
7937 * UART
7938 * -------------------------------------------------------------------- */
7939 @@ -898,6 +970,8 @@ void __init at91_add_device_serial(void) {}
7941 static int __init at91_add_standard_devices(void)
7943 + at91_add_device_rtc();
7944 + at91_add_device_watchdog();
7945 return 0;
7948 diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c
7949 index dfe8c39..396bf2d 100644
7950 --- a/arch/arm/mach-at91/at91sam9261.c
7951 +++ b/arch/arm/mach-at91/at91sam9261.c
7952 @@ -247,6 +247,28 @@ static void at91sam9261_reset(void)
7955 /* --------------------------------------------------------------------
7956 + * Timer/Counter library initialization
7957 + * -------------------------------------------------------------------- */
7958 +#ifdef CONFIG_ATMEL_TCLIB
7960 +#include "tclib.h"
7962 +static struct atmel_tcblock at91sam9261_tcblocks[] = {
7963 + [0] = {
7964 + .physaddr = AT91SAM9261_BASE_TCB0,
7965 + .irq = { AT91SAM9261_ID_TC0, AT91SAM9261_ID_TC1, AT91SAM9261_ID_TC2 },
7966 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
7970 +#define at91sam9261_tc_init() atmel_tc_init(at91sam9261_tcblocks, ARRAY_SIZE(at91sam9261_tcblocks))
7972 +#else
7973 +#define at91sam9261_tc_init() do {} while(0)
7974 +#endif
7977 +/* --------------------------------------------------------------------
7978 * AT91SAM9261 processor initialization
7979 * -------------------------------------------------------------------- */
7981 @@ -267,6 +289,9 @@ void __init at91sam9261_initialize(unsigned long main_clock)
7983 /* Register GPIO subsystem */
7984 at91_gpio_init(at91sam9261_gpio, 3);
7986 + /* Initialize the Timer/Counter blocks */
7987 + at91sam9261_tc_init();
7990 /* --------------------------------------------------------------------
7991 @@ -279,25 +304,25 @@ void __init at91sam9261_initialize(unsigned long main_clock)
7992 static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = {
7993 7, /* Advanced Interrupt Controller */
7994 7, /* System Peripherals */
7995 - 0, /* Parallel IO Controller A */
7996 - 0, /* Parallel IO Controller B */
7997 - 0, /* Parallel IO Controller C */
7998 + 1, /* Parallel IO Controller A */
7999 + 1, /* Parallel IO Controller B */
8000 + 1, /* Parallel IO Controller C */
8002 - 6, /* USART 0 */
8003 - 6, /* USART 1 */
8004 - 6, /* USART 2 */
8005 + 5, /* USART 0 */
8006 + 5, /* USART 1 */
8007 + 5, /* USART 2 */
8008 0, /* Multimedia Card Interface */
8009 - 4, /* USB Device Port */
8010 - 0, /* Two-Wire Interface */
8011 - 6, /* Serial Peripheral Interface 0 */
8012 - 6, /* Serial Peripheral Interface 1 */
8013 - 5, /* Serial Synchronous Controller 0 */
8014 - 5, /* Serial Synchronous Controller 1 */
8015 - 5, /* Serial Synchronous Controller 2 */
8016 + 2, /* USB Device Port */
8017 + 6, /* Two-Wire Interface */
8018 + 5, /* Serial Peripheral Interface 0 */
8019 + 5, /* Serial Peripheral Interface 1 */
8020 + 4, /* Serial Synchronous Controller 0 */
8021 + 4, /* Serial Synchronous Controller 1 */
8022 + 4, /* Serial Synchronous Controller 2 */
8023 0, /* Timer Counter 0 */
8024 0, /* Timer Counter 1 */
8025 0, /* Timer Counter 2 */
8026 - 3, /* USB Host port */
8027 + 2, /* USB Host port */
8028 3, /* LCD Controller */
8031 diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
8032 index 64979a9..a47b95d 100644
8033 --- a/arch/arm/mach-at91/at91sam9261_devices.c
8034 +++ b/arch/arm/mach-at91/at91sam9261_devices.c
8035 @@ -507,6 +507,17 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
8036 return;
8039 +#if defined(CONFIG_FB_ATMEL_STN)
8040 + at91_set_A_periph(AT91_PIN_PB0, 0); /* LCDVSYNC */
8041 + at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */
8042 + at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */
8043 + at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */
8044 + at91_set_A_periph(AT91_PIN_PB4, 0); /* LCDCC */
8045 + at91_set_A_periph(AT91_PIN_PB5, 0); /* LCDD0 */
8046 + at91_set_A_periph(AT91_PIN_PB6, 0); /* LCDD1 */
8047 + at91_set_A_periph(AT91_PIN_PB7, 0); /* LCDD2 */
8048 + at91_set_A_periph(AT91_PIN_PB8, 0); /* LCDD3 */
8049 +#else
8050 at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */
8051 at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */
8052 at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */
8053 @@ -529,6 +540,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
8054 at91_set_B_periph(AT91_PIN_PB26, 0); /* LCDD21 */
8055 at91_set_B_periph(AT91_PIN_PB27, 0); /* LCDD22 */
8056 at91_set_B_periph(AT91_PIN_PB28, 0); /* LCDD23 */
8057 +#endif
8059 lcdc_data = *data;
8060 platform_device_register(&at91_lcdc_device);
8061 @@ -539,6 +551,46 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
8064 /* --------------------------------------------------------------------
8065 + * RTC (RTT)
8066 + * -------------------------------------------------------------------- */
8068 +#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
8069 +static struct platform_device at91sam9261_rtc_device = {
8070 + .name = "at91_rtc",
8071 + .id = -1,
8072 + .num_resources = 0,
8075 +static void __init at91_add_device_rtc(void)
8077 + platform_device_register(&at91sam9261_rtc_device);
8079 +#else
8080 +static void __init at91_add_device_rtc(void) {}
8081 +#endif
8084 +/* --------------------------------------------------------------------
8085 + * Watchdog
8086 + * -------------------------------------------------------------------- */
8088 +#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
8089 +static struct platform_device at91sam9261_wdt_device = {
8090 + .name = "at91_wdt",
8091 + .id = -1,
8092 + .num_resources = 0,
8095 +static void __init at91_add_device_watchdog(void)
8097 + platform_device_register(&at91sam9261_wdt_device);
8099 +#else
8100 +static void __init at91_add_device_watchdog(void) {}
8101 +#endif
8104 +/* --------------------------------------------------------------------
8105 * LEDs
8106 * -------------------------------------------------------------------- */
8108 @@ -560,6 +612,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
8109 #endif
8112 +#if defined(CONFIG_NEW_LEDS)
8113 +static struct gpio_led_platform_data led_data;
8115 +static struct platform_device at91_leds = {
8116 + .name = "leds-gpio",
8117 + .id = -1,
8118 + .dev = {
8119 + .platform_data = &led_data,
8123 +void __init at91_gpio_leds(struct gpio_led *leds, int nr)
8125 + int i;
8127 + if (!nr)
8128 + return;
8130 + at91_leds.dev.platform_data = leds;
8132 + for (i = 0; i < nr; i++)
8133 + at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
8135 + led_data.leds = leds;
8136 + led_data.num_leds = nr;
8137 + platform_device_register(&at91_leds);
8139 +#else
8140 +void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
8141 +#endif
8144 /* --------------------------------------------------------------------
8145 * UART
8146 * -------------------------------------------------------------------- */
8147 @@ -774,6 +858,8 @@ void __init at91_add_device_serial(void) {}
8149 static int __init at91_add_standard_devices(void)
8151 + at91_add_device_rtc();
8152 + at91_add_device_watchdog();
8153 return 0;
8156 diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c
8157 index 00e27b1..c836bf7 100644
8158 --- a/arch/arm/mach-at91/at91sam9263.c
8159 +++ b/arch/arm/mach-at91/at91sam9263.c
8160 @@ -273,6 +273,28 @@ static void at91sam9263_reset(void)
8163 /* --------------------------------------------------------------------
8164 + * Timer/Counter library initialization
8165 + * -------------------------------------------------------------------- */
8166 +#ifdef CONFIG_ATMEL_TCLIB
8168 +#include "tclib.h"
8170 +static struct atmel_tcblock at91sam9263_tcblocks[] = {
8171 + [0] = {
8172 + .physaddr = AT91SAM9263_BASE_TCB0,
8173 + .irq = { AT91SAM9263_ID_TCB, AT91SAM9263_ID_TCB, AT91SAM9263_ID_TCB },
8174 + .clk = { &tcb_clk, &tcb_clk, &tcb_clk },
8178 +#define at91sam9263_tc_init() atmel_tc_init(at91sam9263_tcblocks, ARRAY_SIZE(at91sam9263_tcblocks))
8180 +#else
8181 +#define at91sam9263_tc_init() do {} while(0)
8182 +#endif
8185 +/* --------------------------------------------------------------------
8186 * AT91SAM9263 processor initialization
8187 * -------------------------------------------------------------------- */
8189 @@ -292,6 +314,9 @@ void __init at91sam9263_initialize(unsigned long main_clock)
8191 /* Register GPIO subsystem */
8192 at91_gpio_init(at91sam9263_gpio, 5);
8194 + /* Initialize the Timer/Counter blocks */
8195 + at91sam9263_tc_init();
8198 /* --------------------------------------------------------------------
8199 @@ -304,34 +329,34 @@ void __init at91sam9263_initialize(unsigned long main_clock)
8200 static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = {
8201 7, /* Advanced Interrupt Controller (FIQ) */
8202 7, /* System Peripherals */
8203 - 0, /* Parallel IO Controller A */
8204 - 0, /* Parallel IO Controller B */
8205 - 0, /* Parallel IO Controller C, D and E */
8206 + 1, /* Parallel IO Controller A */
8207 + 1, /* Parallel IO Controller B */
8208 + 1, /* Parallel IO Controller C, D and E */
8211 - 6, /* USART 0 */
8212 - 6, /* USART 1 */
8213 - 6, /* USART 2 */
8214 + 5, /* USART 0 */
8215 + 5, /* USART 1 */
8216 + 5, /* USART 2 */
8217 0, /* Multimedia Card Interface 0 */
8218 0, /* Multimedia Card Interface 1 */
8219 - 4, /* CAN */
8220 - 0, /* Two-Wire Interface */
8221 - 6, /* Serial Peripheral Interface 0 */
8222 - 6, /* Serial Peripheral Interface 1 */
8223 - 5, /* Serial Synchronous Controller 0 */
8224 - 5, /* Serial Synchronous Controller 1 */
8225 - 6, /* AC97 Controller */
8226 + 3, /* CAN */
8227 + 6, /* Two-Wire Interface */
8228 + 5, /* Serial Peripheral Interface 0 */
8229 + 5, /* Serial Peripheral Interface 1 */
8230 + 4, /* Serial Synchronous Controller 0 */
8231 + 4, /* Serial Synchronous Controller 1 */
8232 + 5, /* AC97 Controller */
8233 0, /* Timer Counter 0, 1 and 2 */
8234 0, /* Pulse Width Modulation Controller */
8235 3, /* Ethernet */
8237 0, /* 2D Graphic Engine */
8238 - 3, /* USB Device Port */
8239 + 2, /* USB Device Port */
8240 0, /* Image Sensor Interface */
8241 3, /* LDC Controller */
8242 0, /* DMA Controller */
8244 - 3, /* USB Host port */
8245 + 2, /* USB Host port */
8246 0, /* Advanced Interrupt Controller (IRQ0) */
8247 0, /* Advanced Interrupt Controller (IRQ1) */
8249 diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
8250 index ac329a9..bb2ff26 100644
8251 --- a/arch/arm/mach-at91/at91sam9263_devices.c
8252 +++ b/arch/arm/mach-at91/at91sam9263_devices.c
8253 @@ -663,6 +663,56 @@ void __init at91_add_device_ac97(struct atmel_ac97_data *data) {}
8256 /* --------------------------------------------------------------------
8257 + * Image Sensor Interface
8258 + * -------------------------------------------------------------------- */
8260 +#if defined(CONFIG_VIDEO_AT91_ISI) || defined(CONFIG_VIDEO_AT91_ISI_MODULE)
8262 +struct resource isi_resources[] = {
8263 + [0] = {
8264 + .start = AT91SAM9263_BASE_ISI,
8265 + .end = AT91SAM9263_BASE_ISI + SZ_16K - 1,
8266 + .flags = IORESOURCE_MEM,
8267 + },
8268 + [1] = {
8269 + .start = AT91SAM9263_ID_ISI,
8270 + .end = AT91SAM9263_ID_ISI,
8271 + .flags = IORESOURCE_IRQ,
8272 + },
8275 +static struct platform_device at91sam9263_isi_device = {
8276 + .name = "at91_isi",
8277 + .id = -1,
8278 + .resource = isi_resources,
8279 + .num_resources = ARRAY_SIZE(isi_resources),
8282 +void __init at91_add_device_isi(void)
8284 + at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */
8285 + at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */
8286 + at91_set_A_periph(AT91_PIN_PE2, 0); /* ISI_D2 */
8287 + at91_set_A_periph(AT91_PIN_PE3, 0); /* ISI_D3 */
8288 + at91_set_A_periph(AT91_PIN_PE4, 0); /* ISI_D4 */
8289 + at91_set_A_periph(AT91_PIN_PE5, 0); /* ISI_D5 */
8290 + at91_set_A_periph(AT91_PIN_PE6, 0); /* ISI_D6 */
8291 + at91_set_A_periph(AT91_PIN_PE7, 0); /* ISI_D7 */
8292 + at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */
8293 + at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */
8294 + at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */
8295 + at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */
8296 + at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */
8297 + at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */
8298 + at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */
8299 + at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */
8301 +#else
8302 +void __init at91_add_device_isi(void) {}
8303 +#endif
8306 +/* --------------------------------------------------------------------
8307 * LCD Controller
8308 * -------------------------------------------------------------------- */
8310 @@ -732,6 +782,46 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
8313 /* --------------------------------------------------------------------
8314 + * RTC (RTT)
8315 + * -------------------------------------------------------------------- */
8317 +#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
8318 +static struct platform_device at91sam9263_rtc_device = {
8319 + .name = "at91_rtc",
8320 + .id = -1,
8321 + .num_resources = 0,
8324 +static void __init at91_add_device_rtc(void)
8326 + platform_device_register(&at91sam9263_rtc_device);
8328 +#else
8329 +static void __init at91_add_device_rtc(void) {}
8330 +#endif
8333 +/* --------------------------------------------------------------------
8334 + * Watchdog
8335 + * -------------------------------------------------------------------- */
8337 +#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
8338 +static struct platform_device at91sam9263_wdt_device = {
8339 + .name = "at91_wdt",
8340 + .id = -1,
8341 + .num_resources = 0,
8344 +static void __init at91_add_device_watchdog(void)
8346 + platform_device_register(&at91sam9263_wdt_device);
8348 +#else
8349 +static void __init at91_add_device_watchdog(void) {}
8350 +#endif
8353 +/* --------------------------------------------------------------------
8354 * LEDs
8355 * -------------------------------------------------------------------- */
8357 @@ -753,6 +843,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
8358 #endif
8361 +#if defined(CONFIG_NEW_LEDS)
8362 +static struct gpio_led_platform_data led_data;
8364 +static struct platform_device at91_leds = {
8365 + .name = "leds-gpio",
8366 + .id = -1,
8367 + .dev = {
8368 + .platform_data = &led_data,
8372 +void __init at91_gpio_leds(struct gpio_led *leds, int nr)
8374 + int i;
8376 + if (!nr)
8377 + return;
8379 + at91_leds.dev.platform_data = leds;
8381 + for (i = 0; i < nr; i++)
8382 + at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
8384 + led_data.leds = leds;
8385 + led_data.num_leds = nr;
8386 + platform_device_register(&at91_leds);
8388 +#else
8389 +void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
8390 +#endif
8393 /* --------------------------------------------------------------------
8394 * UART
8395 * -------------------------------------------------------------------- */
8396 @@ -971,6 +1093,8 @@ void __init at91_add_device_serial(void) {}
8398 static int __init at91_add_standard_devices(void)
8400 + at91_add_device_rtc();
8401 + at91_add_device_watchdog();
8402 return 0;
8405 diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c
8406 index 4813a35..dfe7a5f 100644
8407 --- a/arch/arm/mach-at91/at91sam9rl.c
8408 +++ b/arch/arm/mach-at91/at91sam9rl.c
8409 @@ -246,6 +246,28 @@ static void at91sam9rl_reset(void)
8412 /* --------------------------------------------------------------------
8413 + * Timer/Counter library initialization
8414 + * -------------------------------------------------------------------- */
8415 +#ifdef CONFIG_ATMEL_TCLIB
8417 +#include "tclib.h"
8419 +static struct atmel_tcblock at91sam9rl_tcblocks[] = {
8420 + [0] = {
8421 + .physaddr = AT91SAM9RL_BASE_TCB0,
8422 + .irq = { AT91SAM9RL_ID_TC0, AT91SAM9RL_ID_TC1, AT91SAM9RL_ID_TC2 },
8423 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
8427 +#define at91sam9rl_tc_init() atmel_tc_init(at91sam9rl_tcblocks, ARRAY_SIZE(at91sam9rl_tcblocks))
8429 +#else
8430 +#define at91sam9rl_tc_init() do {} while(0)
8431 +#endif
8434 +/* --------------------------------------------------------------------
8435 * AT91SAM9RL processor initialization
8436 * -------------------------------------------------------------------- */
8438 @@ -284,6 +306,9 @@ void __init at91sam9rl_initialize(unsigned long main_clock)
8440 /* Register GPIO subsystem */
8441 at91_gpio_init(at91sam9rl_gpio, 4);
8443 + /* Initialize the Timer/Counter blocks */
8444 + at91sam9rl_tc_init();
8447 /* --------------------------------------------------------------------
8448 diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
8449 index 2bd60a3..ad59471 100644
8450 --- a/arch/arm/mach-at91/at91sam9rl_devices.c
8451 +++ b/arch/arm/mach-at91/at91sam9rl_devices.c
8452 @@ -384,6 +384,46 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
8455 /* --------------------------------------------------------------------
8456 + * RTC (RTT)
8457 + * -------------------------------------------------------------------- */
8459 +#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
8460 +static struct platform_device at91sam9rl_rtc_device = {
8461 + .name = "at91_rtc",
8462 + .id = -1,
8463 + .num_resources = 0,
8466 +static void __init at91_add_device_rtc(void)
8468 + platform_device_register(&at91sam9rl_rtc_device);
8470 +#else
8471 +static void __init at91_add_device_rtc(void) {}
8472 +#endif
8475 +/* --------------------------------------------------------------------
8476 + * Watchdog
8477 + * -------------------------------------------------------------------- */
8479 +#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
8480 +static struct platform_device at91sam9rl_wdt_device = {
8481 + .name = "at91_wdt",
8482 + .id = -1,
8483 + .num_resources = 0,
8486 +static void __init at91_add_device_watchdog(void)
8488 + platform_device_register(&at91sam9rl_wdt_device);
8490 +#else
8491 +static void __init at91_add_device_watchdog(void) {}
8492 +#endif
8495 +/* --------------------------------------------------------------------
8496 * LEDs
8497 * -------------------------------------------------------------------- */
8499 @@ -405,6 +445,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
8500 #endif
8503 +#if defined(CONFIG_NEW_LEDS)
8504 +static struct gpio_led_platform_data led_data;
8506 +static struct platform_device at91_leds = {
8507 + .name = "leds-gpio",
8508 + .id = -1,
8509 + .dev = {
8510 + .platform_data = &led_data,
8514 +void __init at91_gpio_leds(struct gpio_led *leds, int nr)
8516 + int i;
8518 + if (!nr)
8519 + return;
8521 + at91_leds.dev.platform_data = leds;
8523 + for (i = 0; i < nr; i++)
8524 + at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
8526 + led_data.leds = leds;
8527 + led_data.num_leds = nr;
8528 + platform_device_register(&at91_leds);
8530 +#else
8531 +void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
8532 +#endif
8535 /* --------------------------------------------------------------------
8536 * UART
8537 * -------------------------------------------------------------------- */
8538 @@ -659,6 +731,8 @@ void __init at91_add_device_serial(void) {}
8540 static int __init at91_add_standard_devices(void)
8542 + at91_add_device_rtc();
8543 + at91_add_device_watchdog();
8544 return 0;
8547 diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c
8548 new file mode 100644
8549 index 0000000..9a5ab71
8550 --- /dev/null
8551 +++ b/arch/arm/mach-at91/board-cam60.c
8552 @@ -0,0 +1,148 @@
8554 + * KwikByte CAM60
8556 + * based on board-sam9260ek.c
8557 + * Copyright (C) 2005 SAN People
8558 + * Copyright (C) 2006 Atmel
8560 + * This program is free software; you can redistribute it and/or modify
8561 + * it under the terms of the GNU General Public License as published by
8562 + * the Free Software Foundation; either version 2 of the License, or
8563 + * (at your option) any later version.
8565 + * This program is distributed in the hope that it will be useful,
8566 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8567 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8568 + * GNU General Public License for more details.
8570 + * You should have received a copy of the GNU General Public License
8571 + * along with this program; if not, write to the Free Software
8572 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
8573 + */
8575 +#include <linux/types.h>
8576 +#include <linux/init.h>
8577 +#include <linux/mm.h>
8578 +#include <linux/module.h>
8579 +#include <linux/platform_device.h>
8580 +#include <linux/spi/spi.h>
8581 +#include <linux/spi/flash.h>
8583 +#include <asm/hardware.h>
8584 +#include <asm/setup.h>
8585 +#include <asm/mach-types.h>
8586 +#include <asm/irq.h>
8588 +#include <asm/mach/arch.h>
8589 +#include <asm/mach/map.h>
8590 +#include <asm/mach/irq.h>
8592 +#include <asm/arch/board.h>
8593 +#include <asm/arch/gpio.h>
8594 +#include <asm/arch/at91sam926x_mc.h>
8596 +#include "generic.h"
8600 + * Serial port configuration.
8601 + * 0 .. 5 = USART0 .. USART5
8602 + * 6 = DBGU
8603 + */
8604 +static struct at91_uart_config __initdata cam60_uart_config = {
8605 + .console_tty = 0, /* ttyS0 */
8606 + .nr_tty = 1,
8607 + .tty_map = { 6, -1, -1, -1, -1, -1, -1 } /* ttyS0, ..., ttyS6 */
8610 +static void __init cam60_map_io(void)
8612 + /* Initialize processor: 10 MHz crystal */
8613 + at91sam9260_initialize(10000000);
8615 + /* Setup the serial ports and console */
8616 + at91_init_serial(&cam60_uart_config);
8619 +static void __init cam60_init_irq(void)
8621 + at91sam9260_init_interrupts(NULL);
8626 + * SPI devices.
8627 + */
8628 +#if defined(CONFIG_MTD_DATAFLASH)
8629 +static struct mtd_partition __initdata cam60_spi_partitions[] = {
8631 + .name = "BOOT1",
8632 + .offset = 0,
8633 + .size = 4 * 1056,
8634 + },
8636 + .name = "BOOT2",
8637 + .offset = MTDPART_OFS_NXTBLK,
8638 + .size = 256 * 1056,
8639 + },
8641 + .name = "kernel",
8642 + .offset = MTDPART_OFS_NXTBLK,
8643 + .size = 2222 * 1056,
8644 + },
8646 + .name = "file system",
8647 + .offset = MTDPART_OFS_NXTBLK,
8648 + .size = MTDPART_SIZ_FULL,
8649 + },
8652 +static struct flash_platform_data __initdata cam60_spi_flash_platform_data = {
8653 + .name = "spi_flash",
8654 + .parts = cam60_spi_partitions,
8655 + .nr_parts = ARRAY_SIZE(cam60_spi_partitions)
8657 +#endif
8659 +static struct spi_board_info cam60_spi_devices[] = {
8660 +#if defined(CONFIG_MTD_DATAFLASH)
8661 + { /* DataFlash chip */
8662 + .modalias = "mtd_dataflash",
8663 + .chip_select = 0,
8664 + .max_speed_hz = 15 * 1000 * 1000,
8665 + .bus_num = 0,
8666 + .platform_data = &cam60_spi_flash_platform_data
8667 + },
8668 +#endif
8673 + * MACB Ethernet device
8674 + */
8675 +static struct __initdata at91_eth_data cam60_macb_data = {
8676 + .phy_irq_pin = AT91_PIN_PB5,
8677 + .is_rmii = 0,
8681 +static void __init cam60_board_init(void)
8683 + /* Serial */
8684 + at91_add_device_serial();
8685 + /* SPI */
8686 + at91_add_device_spi(cam60_spi_devices, ARRAY_SIZE(cam60_spi_devices));
8687 + /* Ethernet */
8688 + at91_add_device_eth(&cam60_macb_data);
8691 +MACHINE_START(CAM60, "KwikByte CAM60")
8692 + /* Maintainer: KwikByte */
8693 + .phys_io = AT91_BASE_SYS,
8694 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
8695 + .boot_params = AT91_SDRAM_BASE + 0x100,
8696 + .timer = &at91sam926x_timer,
8697 + .map_io = cam60_map_io,
8698 + .init_irq = cam60_init_irq,
8699 + .init_machine = cam60_board_init,
8700 +MACHINE_END
8701 diff --git a/arch/arm/mach-at91/board-chub.c b/arch/arm/mach-at91/board-chub.c
8702 new file mode 100644
8703 index 0000000..01d8ec5
8704 --- /dev/null
8705 +++ b/arch/arm/mach-at91/board-chub.c
8706 @@ -0,0 +1,132 @@
8708 + * linux/arch/arm/mach-at91/board-chub.c
8710 + * Copyright (C) 2005 SAN People, adapted for Promwad Chub board
8711 + * by Kuten Ivan
8713 + * This program is free software; you can redistribute it and/or modify
8714 + * it under the terms of the GNU General Public License as published by
8715 + * the Free Software Foundation; either version 2 of the License, or
8716 + * (at your option) any later version.
8718 + * This program is distributed in the hope that it will be useful,
8719 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8720 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8721 + * GNU General Public License for more details.
8723 + * You should have received a copy of the GNU General Public License
8724 + * along with this program; if not, write to the Free Software
8725 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
8726 + */
8728 +#include <linux/types.h>
8729 +#include <linux/init.h>
8730 +#include <linux/mm.h>
8731 +#include <linux/module.h>
8732 +#include <linux/platform_device.h>
8734 +#include <asm/hardware.h>
8735 +#include <asm/setup.h>
8736 +#include <asm/mach-types.h>
8737 +#include <asm/irq.h>
8739 +#include <asm/mach/arch.h>
8740 +#include <asm/mach/map.h>
8741 +#include <asm/mach/irq.h>
8743 +#include <asm/arch/board.h>
8744 +#include <asm/arch/gpio.h>
8746 +#include "generic.h"
8749 + * Serial port configuration.
8750 + * 0 .. 3 = USART0 .. USART3
8751 + * 4 = DBGU
8752 + */
8753 +static struct at91_uart_config __initdata chub_uart_config = {
8754 + .console_tty = 0, /* ttyS0 */
8755 + .nr_tty = 5,
8756 + .tty_map = { 4, 0, 1, 2, 3 } /* ttyS0, ..., ttyS4 */
8759 +static void __init chub_init_irq(void)
8761 + at91rm9200_init_interrupts(NULL);
8764 +static void __init chub_map_io(void)
8766 + /* Initialize clocks: 18.432 MHz crystal */
8767 + at91rm9200_initialize(18432000, AT91RM9200_PQFP);
8769 + /* Setup the serial ports and console */
8770 + at91_init_serial(&chub_uart_config);
8773 +static struct at91_eth_data __initdata chub_eth_data = {
8774 + .phy_irq_pin = AT91_PIN_PB29,
8775 + .is_rmii = 0,
8778 +static struct mtd_partition __initdata chub_nand_partition[] = {
8780 + .name = "NAND Partition 1",
8781 + .offset = 0,
8782 + .size = MTDPART_SIZ_FULL,
8783 + },
8786 +static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
8788 + *num_partitions = ARRAY_SIZE(chub_nand_partition);
8789 + return chub_nand_partition;
8792 +static struct at91_nand_data __initdata chub_nand_data = {
8793 + .ale = 22,
8794 + .cle = 21,
8795 + .enable_pin = AT91_PIN_PA27,
8796 + .partition_info = nand_partitions,
8799 +static struct spi_board_info chub_spi_devices[] = {
8800 + { /* DataFlash chip */
8801 + .modalias = "mtd_dataflash",
8802 + .chip_select = 0,
8803 + .max_speed_hz = 15 * 1000 * 1000,
8804 + },
8807 +static void __init chub_board_init(void)
8809 + /* Serial */
8810 + at91_add_device_serial();
8811 + /* I2C */
8812 + at91_add_device_i2c(NULL, 0);
8813 + /* Ethernet */
8814 + at91_add_device_eth(&chub_eth_data);
8815 + /* SPI */
8816 + at91_add_device_spi(chub_spi_devices, ARRAY_SIZE(chub_spi_devices));
8817 + /* NAND Flash */
8818 + at91_add_device_nand(&chub_nand_data);
8819 + /* Disable write protect for NAND */
8820 + at91_set_gpio_output(AT91_PIN_PB7, 1);
8821 + /* Power enable for 3x RS-232 and 1x RS-485 */
8822 + at91_set_gpio_output(AT91_PIN_PB9, 1);
8823 + /* Disable write protect for FRAM */
8824 + at91_set_gpio_output(AT91_PIN_PA21, 1);
8825 + /* Disable write protect for Dataflash */
8826 + at91_set_gpio_output(AT91_PIN_PA19, 1);
8829 +MACHINE_START(CHUB, "Promwad Chub")
8830 + /* Maintainer: Ivan Kuten AT Promwad DOT com */
8831 + .phys_io = AT91_BASE_SYS,
8832 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
8833 + .boot_params = AT91_SDRAM_BASE + 0x100,
8834 + .timer = &at91rm9200_timer,
8835 + .map_io = chub_map_io,
8836 + .init_irq = chub_init_irq,
8837 + .init_machine = chub_board_init,
8838 +MACHINE_END
8839 diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board-csb337.c
8840 index d0aa20c..9f1f4ea 100644
8841 --- a/arch/arm/mach-at91/board-csb337.c
8842 +++ b/arch/arm/mach-at91/board-csb337.c
8843 @@ -24,6 +24,7 @@
8844 #include <linux/module.h>
8845 #include <linux/platform_device.h>
8846 #include <linux/spi/spi.h>
8847 +#include <linux/interrupt.h>
8848 #include <linux/mtd/physmap.h>
8850 #include <asm/hardware.h>
8851 @@ -59,6 +60,7 @@ static void __init csb337_map_io(void)
8853 /* Setup the LEDs */
8854 at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);
8855 + at91_set_gpio_output(AT91_PIN_PB2, 1); /* third (unused) LED */
8857 /* Setup the serial ports and console */
8858 at91_init_serial(&csb337_uart_config);
8859 @@ -156,6 +158,58 @@ static struct platform_device csb_flash = {
8860 .num_resources = ARRAY_SIZE(csb_flash_resources),
8863 +static struct gpio_led csb337_leds[] = {
8865 + .name = "led0",
8866 + .gpio = AT91_PIN_PB0,
8867 + .active_low = 1,
8868 + .default_trigger = "heartbeat",
8869 + },
8871 + .name = "led1",
8872 + .gpio = AT91_PIN_PB1,
8873 + .active_low = 1,
8874 + .default_trigger = "timer",
8875 + },
8877 + .name = "led2",
8878 + .active_low = 1,
8879 + .gpio = AT91_PIN_PB2,
8883 +#if defined(CONFIG_CSB300_WAKE_SW0) || defined(CONFIG_CSB300_WAKE_SW1)
8884 +static irqreturn_t switch_irq_handler(int irq, void *context)
8886 + return IRQ_HANDLED;
8889 +static inline void __init switch_irq_setup(int irq, char *name, unsigned long mode)
8891 + int res;
8893 + res = request_irq(irq, switch_irq_handler, IRQF_SAMPLE_RANDOM | mode, name, NULL);
8894 + if (res == 0)
8895 + enable_irq_wake(irq);
8898 +static void __init csb300_switches(void)
8900 +#ifdef CONFIG_CSB300_WAKE_SW0
8901 + at91_set_A_periph(AT91_PIN_PB29, 1); /* IRQ0 */
8902 + switch_irq_setup(AT91RM9200_ID_IRQ0, "csb300_sw0", IRQF_TRIGGER_FALLING);
8903 +#endif
8904 +#ifdef CONFIG_CSB300_WAKE_SW1
8905 + at91_set_gpio_input(AT91_PIN_PB28, 1);
8906 + at91_set_deglitch(AT91_PIN_PB28, 1);
8907 + switch_irq_setup(AT91_PIN_PB28, "csb300_sw1", IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING);
8908 +#endif
8909 + /* there's also SW2 at PA21, GPIO or TIOA2 */
8911 +#else
8912 +static void __init csb300_switches(void) {}
8913 +#endif
8915 static void __init csb337_board_init(void)
8917 /* Serial */
8918 @@ -175,8 +229,12 @@ static void __init csb337_board_init(void)
8919 at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices));
8920 /* MMC */
8921 at91_add_device_mmc(0, &csb337_mmc_data);
8922 + /* LEDS */
8923 + at91_gpio_leds(csb337_leds, ARRAY_SIZE(csb337_leds));
8924 /* NOR flash */
8925 platform_device_register(&csb_flash);
8926 + /* Switches on CSB300 */
8927 + csb300_switches();
8930 MACHINE_START(CSB337, "Cogent CSB337")
8931 diff --git a/arch/arm/mach-at91/board-dk.c b/arch/arm/mach-at91/board-dk.c
8932 index 40c9e43..4d9c153 100644
8933 --- a/arch/arm/mach-at91/board-dk.c
8934 +++ b/arch/arm/mach-at91/board-dk.c
8935 @@ -73,6 +73,185 @@ static void __init dk_init_irq(void)
8936 at91rm9200_init_interrupts(NULL);
8939 +#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE)
8940 +#include <video/s1d13xxxfb.h>
8941 +#include <asm/arch/ics1523.h>
8943 +/* EPSON S1D13806 FB */
8944 +#define AT91_FB_REG_BASE 0x30000000L
8945 +#define AT91_FB_REG_SIZE 0x200
8946 +#define AT91_FB_VMEM_BASE 0x30200000L
8947 +#define AT91_FB_VMEM_SIZE 0x140000L
8949 +static void __init dk_init_video(void)
8951 + /* NWAIT Signal */
8952 + at91_set_A_periph(AT91_PIN_PC6, 0);
8954 + /* Initialization of the Static Memory Controller for Chip Select 2 */
8955 + at91_sys_write(AT91_SMC_CSR(2), AT91_SMC_DBW_16 /* 16 bit */
8956 + | AT91_SMC_WSEN | AT91_SMC_NWS_(4) /* wait states */
8957 + | AT91_SMC_TDF_(1) /* float time */
8958 + );
8960 + at91_ics1523_init();
8963 +/* CRT: (active) 640x480 60Hz (PCLK=CLKI=25.175MHz)
8964 + Memory: Embedded SDRAM (MCLK=CLKI3=50.000MHz) (BUSCLK=60.000MHz) */
8965 +static const struct s1d13xxxfb_regval dk_s1dfb_initregs[] = {
8966 + {S1DREG_MISC, 0x00}, /* Enable Memory/Register select bit */
8967 + {S1DREG_COM_DISP_MODE, 0x00}, /* disable display output */
8968 + {S1DREG_GPIO_CNF0, 0x00},
8969 + {S1DREG_GPIO_CNF1, 0x00},
8970 + {S1DREG_GPIO_CTL0, 0x08},
8971 + {S1DREG_GPIO_CTL1, 0x00},
8972 + {S1DREG_CLK_CNF, 0x01}, /* no divide, MCLK source is CLKI3 0x02*/
8973 + {S1DREG_LCD_CLK_CNF, 0x00},
8974 + {S1DREG_CRT_CLK_CNF, 0x00},
8975 + {S1DREG_MPLUG_CLK_CNF, 0x00},
8976 + {S1DREG_CPU2MEM_WST_SEL, 0x01}, /* 2*period(MCLK) - 4ns > period(BCLK) */
8977 + {S1DREG_SDRAM_REF_RATE, 0x03}, /* 32768 <= MCLK <= 50000 (MHz) */
8978 + {S1DREG_SDRAM_TC0, 0x00}, /* MCLK source freq (MHz): */
8979 + {S1DREG_SDRAM_TC1, 0x01}, /* 42 <= MCLK <= 50 */
8980 + {S1DREG_MEM_CNF, 0x80}, /* SDRAM Initialization - needed before mem access */
8981 + {S1DREG_PANEL_TYPE, 0x25}, /* std TFT 16bit, 8bit SCP format 2, single passive LCD */
8982 + {S1DREG_MOD_RATE, 0x00}, /* toggle every FPFRAME */
8983 + {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* 680 pix */
8984 + {S1DREG_LCD_NDISP_HPER, 0x12}, /* 152 pix */
8985 + {S1DREG_TFT_FPLINE_START, 0x01}, /* 13 pix */
8986 + {S1DREG_TFT_FPLINE_PWIDTH, 0x0B}, /* 96 pix */
8987 + {S1DREG_LCD_DISP_VHEIGHT0, 0xDF},
8988 + {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* 480 lines */
8989 + {S1DREG_LCD_NDISP_VPER, 0x2C}, /* 44 lines */
8990 + {S1DREG_TFT_FPFRAME_START, 0x0A}, /* 10 lines */
8991 + {S1DREG_TFT_FPFRAME_PWIDTH, 0x01}, /* 2 lines */
8992 + {S1DREG_LCD_DISP_MODE, 0x05}, /* 16 bpp */
8993 + {S1DREG_LCD_MISC, 0x00}, /* dithering enabled, dual panel buffer enabled */
8994 + {S1DREG_LCD_DISP_START0, 0x00},
8995 + {S1DREG_LCD_DISP_START1, 0xC8},
8996 + {S1DREG_LCD_DISP_START2, 0x00},
8997 + {S1DREG_LCD_MEM_OFF0, 0x80},
8998 + {S1DREG_LCD_MEM_OFF1, 0x02},
8999 + {S1DREG_LCD_PIX_PAN, 0x00},
9000 + {S1DREG_LCD_DISP_FIFO_HTC, 0x3B},
9001 + {S1DREG_LCD_DISP_FIFO_LTC, 0x3C},
9002 + {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* 680 pix */
9003 + {S1DREG_CRT_NDISP_HPER, 0x13}, /* 160 pix */
9004 + {S1DREG_CRT_HRTC_START, 0x01}, /* 13 pix */
9005 + {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* 96 pix */
9006 + {S1DREG_CRT_DISP_VHEIGHT0, 0xDF},
9007 + {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* 480 lines */
9008 + {S1DREG_CRT_NDISP_VPER, 0x2B}, /* 44 lines */
9009 + {S1DREG_CRT_VRTC_START, 0x09}, /* 10 lines */
9010 + {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* 2 lines */
9011 + {S1DREG_TV_OUT_CTL, 0x10},
9012 + {S1DREG_CRT_DISP_MODE, 0x05}, /* 16 bpp */
9013 + {S1DREG_CRT_DISP_START0, 0x00},
9014 + {S1DREG_CRT_DISP_START1, 0x00},
9015 + {S1DREG_CRT_DISP_START2, 0x00},
9016 + {S1DREG_CRT_MEM_OFF0, 0x80},
9017 + {S1DREG_CRT_MEM_OFF1, 0x02},
9018 + {S1DREG_CRT_PIX_PAN, 0x00},
9019 + {S1DREG_CRT_DISP_FIFO_HTC, 0x3B},
9020 + {S1DREG_CRT_DISP_FIFO_LTC, 0x3C},
9021 + {S1DREG_LCD_CUR_CTL, 0x00}, /* inactive */
9022 + {S1DREG_LCD_CUR_START, 0x01},
9023 + {S1DREG_LCD_CUR_XPOS0, 0x00},
9024 + {S1DREG_LCD_CUR_XPOS1, 0x00},
9025 + {S1DREG_LCD_CUR_YPOS0, 0x00},
9026 + {S1DREG_LCD_CUR_YPOS1, 0x00},
9027 + {S1DREG_LCD_CUR_BCTL0, 0x00},
9028 + {S1DREG_LCD_CUR_GCTL0, 0x00},
9029 + {S1DREG_LCD_CUR_RCTL0, 0x00},
9030 + {S1DREG_LCD_CUR_BCTL1, 0x1F},
9031 + {S1DREG_LCD_CUR_GCTL1, 0x3F},
9032 + {S1DREG_LCD_CUR_RCTL1, 0x1F},
9033 + {S1DREG_LCD_CUR_FIFO_HTC, 0x00},
9034 + {S1DREG_CRT_CUR_CTL, 0x00}, /* inactive */
9035 + {S1DREG_CRT_CUR_START, 0x01},
9036 + {S1DREG_CRT_CUR_XPOS0, 0x00},
9037 + {S1DREG_CRT_CUR_XPOS1, 0x00},
9038 + {S1DREG_CRT_CUR_YPOS0, 0x00},
9039 + {S1DREG_CRT_CUR_YPOS1, 0x00},
9040 + {S1DREG_CRT_CUR_BCTL0, 0x00},
9041 + {S1DREG_CRT_CUR_GCTL0, 0x00},
9042 + {S1DREG_CRT_CUR_RCTL0, 0x00},
9043 + {S1DREG_CRT_CUR_BCTL1, 0x1F},
9044 + {S1DREG_CRT_CUR_GCTL1, 0x3F},
9045 + {S1DREG_CRT_CUR_RCTL1, 0x1F},
9046 + {S1DREG_CRT_CUR_FIFO_HTC, 0x00},
9047 + {S1DREG_BBLT_CTL0, 0x00},
9048 + {S1DREG_BBLT_CTL0, 0x00},
9049 + {S1DREG_BBLT_CC_EXP, 0x00},
9050 + {S1DREG_BBLT_OP, 0x00},
9051 + {S1DREG_BBLT_SRC_START0, 0x00},
9052 + {S1DREG_BBLT_SRC_START1, 0x00},
9053 + {S1DREG_BBLT_SRC_START2, 0x00},
9054 + {S1DREG_BBLT_DST_START0, 0x00},
9055 + {S1DREG_BBLT_DST_START1, 0x00},
9056 + {S1DREG_BBLT_DST_START2, 0x00},
9057 + {S1DREG_BBLT_MEM_OFF0, 0x00},
9058 + {S1DREG_BBLT_MEM_OFF1, 0x00},
9059 + {S1DREG_BBLT_WIDTH0, 0x00},
9060 + {S1DREG_BBLT_WIDTH1, 0x00},
9061 + {S1DREG_BBLT_HEIGHT0, 0x00},
9062 + {S1DREG_BBLT_HEIGHT1, 0x00},
9063 + {S1DREG_BBLT_BGC0, 0x00},
9064 + {S1DREG_BBLT_BGC1, 0x00},
9065 + {S1DREG_BBLT_FGC0, 0x00},
9066 + {S1DREG_BBLT_FGC1, 0x00},
9067 + {S1DREG_LKUP_MODE, 0x00}, /* LCD LUT r | LCD and CRT/TV LUT w */
9068 + {S1DREG_LKUP_ADDR, 0x00},
9069 + {S1DREG_PS_CNF, 0x00}, /* Power Save disable */
9070 + {S1DREG_PS_STATUS, 0x02}, /* LCD Panel down, mem up */
9071 + {S1DREG_CPU2MEM_WDOGT, 0x00},
9072 + {S1DREG_COM_DISP_MODE, 0x02}, /* enable CRT display output */
9075 +static struct s1d13xxxfb_pdata dk_s1dfb_pdata = {
9076 + .initregs = dk_s1dfb_initregs,
9077 + .initregssize = ARRAY_SIZE(dk_s1dfb_initregs),
9078 + .platform_init_video = dk_init_video,
9081 +static u64 s1dfb_dmamask = 0xffffffffUL;
9083 +static struct resource dk_s1dfb_resource[] = {
9084 + [0] = { /* video mem */
9085 + .name = "s1d13806 memory",
9086 + .start = AT91_FB_VMEM_BASE,
9087 + .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1,
9088 + .flags = IORESOURCE_MEM,
9089 + },
9090 + [1] = { /* video registers */
9091 + .name = "s1d13806 registers",
9092 + .start = AT91_FB_REG_BASE,
9093 + .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1,
9094 + .flags = IORESOURCE_MEM,
9095 + },
9098 +static struct platform_device dk_s1dfb_device = {
9099 + .name = "s1d13806fb",
9100 + .id = -1,
9101 + .dev = {
9102 + .dma_mask = &s1dfb_dmamask,
9103 + .coherent_dma_mask = 0xffffffff,
9104 + .platform_data = &dk_s1dfb_pdata,
9105 + },
9106 + .resource = dk_s1dfb_resource,
9107 + .num_resources = ARRAY_SIZE(dk_s1dfb_resource),
9110 +static void __init dk_add_device_video(void)
9112 + platform_device_register(&dk_s1dfb_device);
9114 +#else
9115 +static void __init dk_add_device_video(void) {}
9116 +#endif
9118 static struct at91_eth_data __initdata dk_eth_data = {
9119 .phy_irq_pin = AT91_PIN_PC4,
9120 .is_rmii = 1,
9121 @@ -164,7 +343,7 @@ static struct at91_nand_data __initdata dk_nand_data = {
9122 #define DK_FLASH_SIZE 0x200000
9124 static struct physmap_flash_data dk_flash_data = {
9125 - .width = 2,
9126 + .width = 2,
9129 static struct resource dk_flash_resource = {
9130 @@ -183,6 +362,14 @@ static struct platform_device dk_flash = {
9131 .num_resources = 1,
9134 +static struct gpio_led dk_leds[] = {
9136 + .name = "led0",
9137 + .gpio = AT91_PIN_PB2,
9138 + .active_low = 1,
9139 + .default_trigger = "timer",
9143 static void __init dk_board_init(void)
9145 @@ -213,8 +400,10 @@ static void __init dk_board_init(void)
9146 at91_add_device_nand(&dk_nand_data);
9147 /* NOR Flash */
9148 platform_device_register(&dk_flash);
9149 + /* LEDs */
9150 + at91_gpio_leds(dk_leds, ARRAY_SIZE(dk_leds));
9151 /* VGA */
9152 -// dk_add_device_video();
9153 + dk_add_device_video();
9156 MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
9157 diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/board-ecbat91.c
9158 new file mode 100644
9159 index 0000000..46210c6
9160 --- /dev/null
9161 +++ b/arch/arm/mach-at91/board-ecbat91.c
9162 @@ -0,0 +1,183 @@
9164 + * linux/arch/arm/mach-at91rm9200/board-ecbat91.c
9165 + * Copyright (C) 2007 emQbit.com.
9167 + * We started from board-dk.c, which is Copyright (C) 2005 SAN People.
9169 + * This program is free software; you can redistribute it and/or modify
9170 + * it under the terms of the GNU General Public License as published by
9171 + * the Free Software Foundation; either version 2 of the License, or
9172 + * (at your option) any later version.
9174 + * This program is distributed in the hope that it will be useful,
9175 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9176 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9177 + * GNU General Public License for more details.
9179 + * You should have received a copy of the GNU General Public License
9180 + * along with this program; if not, write to the Free Software
9181 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9182 + */
9184 +#include <linux/types.h>
9185 +#include <linux/init.h>
9186 +#include <linux/mm.h>
9187 +#include <linux/module.h>
9188 +#include <linux/platform_device.h>
9189 +#include <linux/spi/spi.h>
9190 +#include <linux/spi/flash.h>
9192 +#include <asm/hardware.h>
9193 +#include <asm/setup.h>
9194 +#include <asm/mach-types.h>
9195 +#include <asm/irq.h>
9197 +#include <asm/mach/arch.h>
9198 +#include <asm/mach/map.h>
9199 +#include <asm/mach/irq.h>
9201 +#include <asm/arch/board.h>
9202 +#include <asm/arch/gpio.h>
9204 +#include "generic.h"
9208 + * Serial port configuration.
9209 + * 0 .. 3 = USART0 .. USART3
9210 + * 4 = DBGU
9211 + */
9212 +static struct at91_uart_config __initdata ecb_at91uart_config = {
9213 + .console_tty = 0, /* ttyS0 */
9214 + .nr_tty = 2,
9215 + .tty_map = { 4, 0, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
9218 +static void __init ecb_at91map_io(void)
9220 + /* Initialize processor: 18.432 MHz crystal */
9221 + at91rm9200_initialize(18432000, AT91RM9200_PQFP);
9223 + /* Setup the LEDs */
9224 + at91_init_leds(AT91_PIN_PC7, AT91_PIN_PC7);
9226 + /* Setup the serial ports and console */
9227 + at91_init_serial(&ecb_at91uart_config);
9230 +static void __init ecb_at91init_irq(void)
9232 + at91rm9200_init_interrupts(NULL);
9235 +static struct at91_eth_data __initdata ecb_at91eth_data = {
9236 + .phy_irq_pin = AT91_PIN_PC4,
9237 + .is_rmii = 0,
9240 +static struct at91_usbh_data __initdata ecb_at91usbh_data = {
9241 + .ports = 1,
9244 +static struct at91_mmc_data __initdata ecb_at91mmc_data = {
9245 + .slot_b = 0,
9246 + .wire4 = 1,
9250 +#if defined(CONFIG_MTD_DATAFLASH)
9251 +static struct mtd_partition __initdata my_flash0_partitions[] =
9253 + { /* 0x8400 */
9254 + .name = "Darrell-loader",
9255 + .offset = 0,
9256 + .size = 12* 1056,
9257 + },
9259 + .name = "U-boot",
9260 + .offset = MTDPART_OFS_NXTBLK,
9261 + .size = 110 * 1056,
9262 + },
9263 + { /* 1336 (167 blocks) pages * 1056 bytes = 0x158700 bytes */
9264 + .name = "Uoot-env",
9265 + .offset = MTDPART_OFS_NXTBLK,
9266 + .size = 8 * 1056,
9267 + },
9268 + { /* 1336 (167 blocks) pages * 1056 bytes = 0x158700 bytes */
9269 + .name = "Kernel",
9270 + .offset = MTDPART_OFS_NXTBLK,
9271 + .size = 1534 * 1056,
9272 + },
9273 + { /* 190200 - jffs2 root filesystem */
9274 + .name = "Filesystem",
9275 + .offset = MTDPART_OFS_NXTBLK,
9276 + .size = MTDPART_SIZ_FULL, /* 26 sectors */
9280 +static struct flash_platform_data __initdata my_flash0_platform = {
9281 + .name = "Removable flash card",
9282 + .parts = my_flash0_partitions,
9283 + .nr_parts = ARRAY_SIZE(my_flash0_partitions)
9286 +#endif
9288 +static struct spi_board_info __initdata ecb_at91spi_devices[] = {
9289 + { /* DataFlash chip */
9290 + .modalias = "mtd_dataflash",
9291 + .chip_select = 0,
9292 + .max_speed_hz = 10 * 1000 * 1000,
9293 + .bus_num = 0,
9294 +#if defined(CONFIG_MTD_DATAFLASH)
9295 + .platform_data = &my_flash0_platform,
9296 +#endif
9297 + },
9298 + { /* User accessable spi - cs1 (250KHz) */
9299 + .modalias = "spi-cs1",
9300 + .chip_select = 1,
9301 + .max_speed_hz = 250 * 1000,
9302 + },
9303 + { /* User accessable spi - cs2 (1MHz) */
9304 + .modalias = "spi-cs2",
9305 + .chip_select = 2,
9306 + .max_speed_hz = 1 * 1000 * 1000,
9307 + },
9308 + { /* User accessable spi - cs3 (10MHz) */
9309 + .modalias = "spi-cs3",
9310 + .chip_select = 3,
9311 + .max_speed_hz = 10 * 1000 * 1000,
9312 + },
9315 +static void __init ecb_at91board_init(void)
9317 + /* Serial */
9318 + at91_add_device_serial();
9320 + /* Ethernet */
9321 + at91_add_device_eth(&ecb_at91eth_data);
9323 + /* USB Host */
9324 + at91_add_device_usbh(&ecb_at91usbh_data);
9326 + /* I2C */
9327 + at91_add_device_i2c(NULL, 0);
9329 + /* MMC */
9330 + at91_add_device_mmc(0, &ecb_at91mmc_data);
9332 + /* SPI */
9333 + at91_add_device_spi(ecb_at91spi_devices, ARRAY_SIZE(ecb_at91spi_devices));
9336 +MACHINE_START(ECBAT91, "emQbit's ECB_AT91")
9337 + /* Maintainer: emQbit.com */
9338 + .phys_io = AT91_BASE_SYS,
9339 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
9340 + .boot_params = AT91_SDRAM_BASE + 0x100,
9341 + .timer = &at91rm9200_timer,
9342 + .map_io = ecb_at91map_io,
9343 + .init_irq = ecb_at91init_irq,
9344 + .init_machine = ecb_at91board_init,
9345 +MACHINE_END
9346 diff --git a/arch/arm/mach-at91/board-ek.c b/arch/arm/mach-at91/board-ek.c
9347 index d05b1b2..6a5d310 100644
9348 --- a/arch/arm/mach-at91/board-ek.c
9349 +++ b/arch/arm/mach-at91/board-ek.c
9350 @@ -73,6 +73,187 @@ static void __init ek_init_irq(void)
9351 at91rm9200_init_interrupts(NULL);
9354 +#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE)
9355 +#include <video/s1d13xxxfb.h>
9356 +#include <asm/arch/ics1523.h>
9358 +/* EPSON S1D13806 FB */
9359 +#define AT91_FB_REG_BASE 0x40000000L
9360 +#define AT91_FB_REG_SIZE 0x200
9361 +#define AT91_FB_VMEM_BASE 0x40200000L
9362 +#define AT91_FB_VMEM_SIZE 0x140000L
9364 +static void __init ek_init_video(void)
9366 + /* NWAIT Signal */
9367 + at91_set_A_periph(AT91_PIN_PC6, 0);
9369 + /* Initialization of the Static Memory Controller for Chip Select 3 */
9370 + at91_sys_write(AT91_SMC_CSR(3), AT91_SMC_DBW_16 /* 16 bit */
9371 + | AT91_SMC_WSEN | AT91_SMC_NWS_(5) /* wait states */
9372 + | AT91_SMC_TDF_(1) /* float time */
9373 + );
9375 + at91_ics1523_init();
9378 +/* CRT: (active) 640x480 60Hz (PCLK=CLKI=25.175MHz)
9379 + Memory: Embedded SDRAM (MCLK=CLKI3=50.000MHz) (BUSCLK=60.000MHz) */
9380 +static const struct s1d13xxxfb_regval ek_s1dfb_initregs[] = {
9381 + {S1DREG_MISC, 0x00}, /* Enable Memory/Register select bit */
9382 + {S1DREG_COM_DISP_MODE, 0x00}, /* disable display output */
9383 + {S1DREG_GPIO_CNF0, 0xFF}, // 0x00
9384 + {S1DREG_GPIO_CNF1, 0x1F}, // 0x08
9385 + {S1DREG_GPIO_CTL0, 0x00},
9386 + {S1DREG_GPIO_CTL1, 0x00},
9387 + {S1DREG_CLK_CNF, 0x01}, /* no divide, MCLK source is CLKI3 0x02*/
9388 + {S1DREG_LCD_CLK_CNF, 0x00},
9389 + {S1DREG_CRT_CLK_CNF, 0x00},
9390 + {S1DREG_MPLUG_CLK_CNF, 0x00},
9391 + {S1DREG_CPU2MEM_WST_SEL, 0x01}, /* 2*period(MCLK) - 4ns > period(BCLK) */
9392 + {S1DREG_SDRAM_REF_RATE, 0x03}, /* 32768 <= MCLK <= 50000 (MHz) */
9393 + {S1DREG_SDRAM_TC0, 0x00}, /* MCLK source freq (MHz): */
9394 + {S1DREG_SDRAM_TC1, 0x01}, /* 42 <= MCLK <= 50 */
9395 + {S1DREG_MEM_CNF, 0x80}, /* SDRAM Initialization - needed before mem access */
9396 + {S1DREG_PANEL_TYPE, 0x25}, /* std TFT 16bit, 8bit SCP format 2, single passive LCD */
9397 + {S1DREG_MOD_RATE, 0x00}, /* toggle every FPFRAME */
9398 + {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* 680 pix */
9399 + {S1DREG_LCD_NDISP_HPER, 0x12}, /* 152 pix */
9400 + {S1DREG_TFT_FPLINE_START, 0x01}, /* 13 pix */
9401 + {S1DREG_TFT_FPLINE_PWIDTH, 0x0B}, /* 96 pix */
9402 + {S1DREG_LCD_DISP_VHEIGHT0, 0xDF},
9403 + {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* 480 lines */
9404 + {S1DREG_LCD_NDISP_VPER, 0x2C}, /* 44 lines */
9405 + {S1DREG_TFT_FPFRAME_START, 0x0A}, /* 10 lines */
9406 + {S1DREG_TFT_FPFRAME_PWIDTH, 0x01}, /* 2 lines */
9407 + {S1DREG_LCD_DISP_MODE, 0x05}, /* 16 bpp */
9408 + {S1DREG_LCD_MISC, 0x00}, /* dithering enabled, dual panel buffer enabled */
9409 + {S1DREG_LCD_DISP_START0, 0x00},
9410 + {S1DREG_LCD_DISP_START1, 0xC8},
9411 + {S1DREG_LCD_DISP_START2, 0x00},
9412 + {S1DREG_LCD_MEM_OFF0, 0x80},
9413 + {S1DREG_LCD_MEM_OFF1, 0x02},
9414 + {S1DREG_LCD_PIX_PAN, 0x00},
9415 + {S1DREG_LCD_DISP_FIFO_HTC, 0x3B},
9416 + {S1DREG_LCD_DISP_FIFO_LTC, 0x3C},
9417 + {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* 680 pix */
9418 + {S1DREG_CRT_NDISP_HPER, 0x13}, /* 160 pix */
9419 + {S1DREG_CRT_HRTC_START, 0x01}, /* 13 pix */
9420 + {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* 96 pix */
9421 + {S1DREG_CRT_DISP_VHEIGHT0, 0xDF},
9422 + {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* 480 lines */
9423 + {S1DREG_CRT_NDISP_VPER, 0x2B}, /* 44 lines */
9424 + {S1DREG_CRT_VRTC_START, 0x09}, /* 10 lines */
9425 + {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* 2 lines */
9426 + {S1DREG_TV_OUT_CTL, 0x10},
9427 + {0x005E, 0x9F},
9428 + {0x005F, 0x00},
9429 + {S1DREG_CRT_DISP_MODE, 0x05}, /* 16 bpp */
9430 + {S1DREG_CRT_DISP_START0, 0x00},
9431 + {S1DREG_CRT_DISP_START1, 0x00},
9432 + {S1DREG_CRT_DISP_START2, 0x00},
9433 + {S1DREG_CRT_MEM_OFF0, 0x80},
9434 + {S1DREG_CRT_MEM_OFF1, 0x02},
9435 + {S1DREG_CRT_PIX_PAN, 0x00},
9436 + {S1DREG_CRT_DISP_FIFO_HTC, 0x3B},
9437 + {S1DREG_CRT_DISP_FIFO_LTC, 0x3C},
9438 + {S1DREG_LCD_CUR_CTL, 0x00}, /* inactive */
9439 + {S1DREG_LCD_CUR_START, 0x01},
9440 + {S1DREG_LCD_CUR_XPOS0, 0x00},
9441 + {S1DREG_LCD_CUR_XPOS1, 0x00},
9442 + {S1DREG_LCD_CUR_YPOS0, 0x00},
9443 + {S1DREG_LCD_CUR_YPOS1, 0x00},
9444 + {S1DREG_LCD_CUR_BCTL0, 0x00},
9445 + {S1DREG_LCD_CUR_GCTL0, 0x00},
9446 + {S1DREG_LCD_CUR_RCTL0, 0x00},
9447 + {S1DREG_LCD_CUR_BCTL1, 0x1F},
9448 + {S1DREG_LCD_CUR_GCTL1, 0x3F},
9449 + {S1DREG_LCD_CUR_RCTL1, 0x1F},
9450 + {S1DREG_LCD_CUR_FIFO_HTC, 0x00},
9451 + {S1DREG_CRT_CUR_CTL, 0x00}, /* inactive */
9452 + {S1DREG_CRT_CUR_START, 0x01},
9453 + {S1DREG_CRT_CUR_XPOS0, 0x00},
9454 + {S1DREG_CRT_CUR_XPOS1, 0x00},
9455 + {S1DREG_CRT_CUR_YPOS0, 0x00},
9456 + {S1DREG_CRT_CUR_YPOS1, 0x00},
9457 + {S1DREG_CRT_CUR_BCTL0, 0x00},
9458 + {S1DREG_CRT_CUR_GCTL0, 0x00},
9459 + {S1DREG_CRT_CUR_RCTL0, 0x00},
9460 + {S1DREG_CRT_CUR_BCTL1, 0x1F},
9461 + {S1DREG_CRT_CUR_GCTL1, 0x3F},
9462 + {S1DREG_CRT_CUR_RCTL1, 0x1F},
9463 + {S1DREG_CRT_CUR_FIFO_HTC, 0x00},
9464 + {S1DREG_BBLT_CTL0, 0x00},
9465 + {S1DREG_BBLT_CTL0, 0x00},
9466 + {S1DREG_BBLT_CC_EXP, 0x00},
9467 + {S1DREG_BBLT_OP, 0x00},
9468 + {S1DREG_BBLT_SRC_START0, 0x00},
9469 + {S1DREG_BBLT_SRC_START1, 0x00},
9470 + {S1DREG_BBLT_SRC_START2, 0x00},
9471 + {S1DREG_BBLT_DST_START0, 0x00},
9472 + {S1DREG_BBLT_DST_START1, 0x00},
9473 + {S1DREG_BBLT_DST_START2, 0x00},
9474 + {S1DREG_BBLT_MEM_OFF0, 0x00},
9475 + {S1DREG_BBLT_MEM_OFF1, 0x00},
9476 + {S1DREG_BBLT_WIDTH0, 0x00},
9477 + {S1DREG_BBLT_WIDTH1, 0x00},
9478 + {S1DREG_BBLT_HEIGHT0, 0x00},
9479 + {S1DREG_BBLT_HEIGHT1, 0x00},
9480 + {S1DREG_BBLT_BGC0, 0x00},
9481 + {S1DREG_BBLT_BGC1, 0x00},
9482 + {S1DREG_BBLT_FGC0, 0x00},
9483 + {S1DREG_BBLT_FGC1, 0x00},
9484 + {S1DREG_LKUP_MODE, 0x00}, /* LCD LUT r | LCD and CRT/TV LUT w */
9485 + {S1DREG_LKUP_ADDR, 0x00},
9486 + {S1DREG_PS_CNF, 0x10}, /* Power Save disable */
9487 + {S1DREG_PS_STATUS, 0x02}, /* LCD Panel down, mem up */
9488 + {S1DREG_CPU2MEM_WDOGT, 0x00},
9489 + {S1DREG_COM_DISP_MODE, 0x02}, /* enable CRT display output */
9492 +static struct s1d13xxxfb_pdata ek_s1dfb_pdata = {
9493 + .initregs = ek_s1dfb_initregs,
9494 + .initregssize = ARRAY_SIZE(ek_s1dfb_initregs),
9495 + .platform_init_video = ek_init_video,
9498 +static u64 s1dfb_dmamask = 0xffffffffUL;
9500 +static struct resource ek_s1dfb_resource[] = {
9501 + [0] = { /* video mem */
9502 + .name = "s1d13806 memory",
9503 + .start = AT91_FB_VMEM_BASE,
9504 + .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1,
9505 + .flags = IORESOURCE_MEM,
9506 + },
9507 + [1] = { /* video registers */
9508 + .name = "s1d13806 registers",
9509 + .start = AT91_FB_REG_BASE,
9510 + .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1,
9511 + .flags = IORESOURCE_MEM,
9512 + },
9515 +static struct platform_device ek_s1dfb_device = {
9516 + .name = "s1d13806fb",
9517 + .id = -1,
9518 + .dev = {
9519 + .dma_mask = &s1dfb_dmamask,
9520 + .coherent_dma_mask = 0xffffffff,
9521 + .platform_data = &ek_s1dfb_pdata,
9522 + },
9523 + .resource = ek_s1dfb_resource,
9524 + .num_resources = ARRAY_SIZE(ek_s1dfb_resource),
9527 +static void __init ek_add_device_video(void)
9529 + platform_device_register(&ek_s1dfb_device);
9531 +#else
9532 +static void __init ek_add_device_video(void) {}
9533 +#endif
9535 static struct at91_eth_data __initdata ek_eth_data = {
9536 .phy_irq_pin = AT91_PIN_PC4,
9537 .is_rmii = 1,
9538 @@ -109,11 +290,20 @@ static struct spi_board_info ek_spi_devices[] = {
9539 #endif
9542 +static struct i2c_board_info __initdata ek_i2c_devices[] = {
9544 + I2C_BOARD_INFO("ics1523", 0x26),
9545 + },
9547 + I2C_BOARD_INFO("dac3550", 0x4d),
9551 #define EK_FLASH_BASE AT91_CHIPSELECT_0
9552 #define EK_FLASH_SIZE 0x200000
9554 static struct physmap_flash_data ek_flash_data = {
9555 - .width = 2,
9556 + .width = 2,
9559 static struct resource ek_flash_resource = {
9560 @@ -132,6 +322,20 @@ static struct platform_device ek_flash = {
9561 .num_resources = 1,
9564 +static struct gpio_led ek_leds[] = {
9566 + .name = "led0",
9567 + .gpio = AT91_PIN_PB1,
9568 + .active_low = 1,
9569 + .default_trigger = "heartbeat",
9570 + },
9572 + .name = "led1",
9573 + .gpio = AT91_PIN_PB2,
9574 + .active_low = 1,
9575 + .default_trigger = "timer",
9579 static void __init ek_board_init(void)
9581 @@ -158,8 +362,10 @@ static void __init ek_board_init(void)
9582 #endif
9583 /* NOR Flash */
9584 platform_device_register(&ek_flash);
9585 + /* LEDs */
9586 + at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
9587 /* VGA */
9588 -// ek_add_device_video();
9589 + ek_add_device_video();
9592 MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK")
9593 diff --git a/arch/arm/mach-at91/board-homematic.c b/arch/arm/mach-at91/board-homematic.c
9594 new file mode 100644
9595 index 0000000..57d16c4
9596 --- /dev/null
9597 +++ b/arch/arm/mach-at91/board-homematic.c
9598 @@ -0,0 +1,163 @@
9600 + * linux/arch/arm/mach-at91/board-homematic.c
9602 + * Copyright (C) 2007 eQ-3 Entwicklung GmbH
9604 + * based on work
9605 + * Copyright (C) 2005 SAN People
9607 + * This program is free software; you can redistribute it and/or modify
9608 + * it under the terms of the GNU General Public License as published by
9609 + * the Free Software Foundation; either version 2 of the License, or
9610 + * (at your option) any later version.
9612 + * This program is distributed in the hope that it will be useful,
9613 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9614 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9615 + * GNU General Public License for more details.
9617 + * You should have received a copy of the GNU General Public License
9618 + * along with this program; if not, write to the Free Software
9619 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9620 + */
9622 +#include <linux/types.h>
9623 +#include <linux/init.h>
9624 +#include <linux/mm.h>
9625 +#include <linux/module.h>
9626 +#include <linux/platform_device.h>
9627 +#include <linux/spi/spi.h>
9628 +#include <linux/mtd/physmap.h>
9630 +#include <asm/hardware.h>
9631 +#include <asm/setup.h>
9632 +#include <asm/mach-types.h>
9633 +#include <asm/irq.h>
9635 +#include <asm/mach/arch.h>
9636 +#include <asm/mach/map.h>
9637 +#include <asm/mach/irq.h>
9639 +#include <asm/arch/board.h>
9640 +#include <asm/arch/gpio.h>
9641 +#include <asm/arch/at91rm9200_mc.h>
9643 +#include "generic.h"
9647 + * Serial port configuration.
9648 + * 0 .. 3 = USART0 .. USART3
9649 + * 4 = DBGU
9650 + */
9651 +static struct at91_uart_config __initdata homematic_uart_config = {
9652 + .console_tty = 0, /* ttyS0 */
9653 + .nr_tty = 2,
9654 + .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
9657 +static void __init homematic_map_io(void)
9659 + /* Initialize processor: 18.432 MHz crystal */
9660 + at91rm9200_initialize(18432000, AT91RM9200_BGA);
9662 + /* Setup the serial ports and console */
9663 + at91_init_serial(&homematic_uart_config);
9666 +static void __init homematic_init_irq(void)
9668 + at91rm9200_init_interrupts(NULL);
9671 +static struct at91_eth_data __initdata homematic_eth_data = {
9672 + .phy_irq_pin = AT91_PIN_PC4,
9673 + .is_rmii = 0,
9676 +static struct at91_usbh_data __initdata homematic_usbh_data = {
9677 + .ports = 2,
9680 +static struct at91_udc_data __initdata homematic_udc_data = {
9681 + .vbus_pin = AT91_PIN_PD4,
9682 + .pullup_pin = AT91_PIN_PD5,
9685 +static struct at91_mmc_data __initdata homematic_mmc_data = {
9686 + .slot_b = 0,
9687 + .wire4 = 1,
9690 +static struct spi_board_info homematic_spi_devices[] = {
9691 + { /* DataFlash chip */
9692 + .modalias = "mtd_dataflash",
9693 + .chip_select = 0,
9694 + .max_speed_hz = 15 * 1000 * 1000,
9695 + },
9698 +static struct mtd_partition __initdata homematic_nand_partition[] = {
9700 + .name = "root",
9701 + .offset = 0,
9702 + .size = 0x02000000,
9703 + }, {
9704 + .name = "storage",
9705 + .offset = 0x02000000,
9706 + .size = MTDPART_SIZ_FULL,
9707 + },
9710 +static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
9712 + *num_partitions = ARRAY_SIZE(homematic_nand_partition);
9713 + return homematic_nand_partition;
9716 +static struct at91_nand_data __initdata homematic_nand_data = {
9717 + .ale = 22,
9718 + .cle = 21,
9719 +// .det_pin = AT91_PIN_PB1,
9720 + .rdy_pin = AT91_PIN_PC2,
9721 + .enable_pin = AT91_PIN_PC0,
9722 + .partition_info = nand_partitions,
9725 +static void __init homematic_board_init(void)
9727 + /* Serial */
9728 + at91_add_device_serial();
9729 + /* Ethernet */
9730 + at91_add_device_eth(&homematic_eth_data);
9731 + /* USB Host */
9732 + at91_add_device_usbh(&homematic_usbh_data);
9733 + /* USB Device */
9734 + at91_add_device_udc(&homematic_udc_data);
9735 + at91_set_multi_drive(homematic_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */
9736 + /* I2C */
9737 + at91_add_device_i2c(NULL, 0);
9738 + /* SPI */
9739 + at91_add_device_spi(homematic_spi_devices, ARRAY_SIZE(homematic_spi_devices));
9740 +#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
9741 + /* DataFlash card */
9742 + at91_set_gpio_output(AT91_PIN_PB7, 0);
9743 +#else
9744 + /* MMC */
9745 + at91_set_gpio_output(AT91_PIN_PB7, 1); /* this MMC card slot can optionally use SPI signaling (CS3). */
9746 + at91_add_device_mmc(0, &homematic_mmc_data);
9747 +#endif
9748 + /* NAND */
9749 + at91_add_device_nand(&homematic_nand_data);
9752 +MACHINE_START(HOMEMATIC, "HomeMatic")
9753 + /* Maintainer: eQ-3 */
9754 + .phys_io = AT91_BASE_SYS,
9755 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
9756 + .boot_params = AT91_SDRAM_BASE + 0x100,
9757 + .timer = &at91rm9200_timer,
9758 + .map_io = homematic_map_io,
9759 + .init_irq = homematic_init_irq,
9760 + .init_machine = homematic_board_init,
9761 +MACHINE_END
9762 diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c
9763 index 4b39b9c..cc5a65a 100644
9764 --- a/arch/arm/mach-at91/board-kb9202.c
9765 +++ b/arch/arm/mach-at91/board-kb9202.c
9766 @@ -37,6 +37,8 @@
9767 #include <asm/arch/board.h>
9768 #include <asm/arch/gpio.h>
9770 +#include <asm/arch/at91rm9200_mc.h>
9772 #include "generic.h"
9775 @@ -111,6 +113,48 @@ static struct at91_nand_data __initdata kb9202_nand_data = {
9776 .partition_info = nand_partitions,
9780 +#if defined(CONFIG_FB_S1D15605)
9781 +#warning "Rather pass reset pin via platform_data"
9782 +static struct resource kb9202_lcd_resources[] = {
9783 + [0] = {
9784 + .start = AT91_CHIPSELECT_2,
9785 + .end = AT91_CHIPSELECT_2 + 0x200FF,
9786 + .flags = IORESOURCE_MEM
9787 + },
9788 + [1] = { /* reset pin */
9789 + .start = AT91_PIN_PC22,
9790 + .end = AT91_PIN_PC22,
9791 + .flags = IORESOURCE_MEM
9792 + },
9795 +static struct platform_device kb9202_lcd_device = {
9796 + .name = "s1d15605fb",
9797 + .id = 0,
9798 + .num_resources = ARRAY_SIZE(kb9202_lcd_resources),
9799 + .resource = kb9202_lcd_resources,
9802 +static void __init kb9202_add_device_lcd(void)
9804 + /* In case the boot loader did not set the chip select mode and timing */
9805 + at91_sys_write(AT91_SMC_CSR(2),
9806 + AT91_SMC_WSEN | AT91_SMC_NWS_(18) | AT91_SMC_TDF_(1) | AT91_SMC_DBW_8 |
9807 + AT91_SMC_RWSETUP_(1) | AT91_SMC_RWHOLD_(1));
9809 + /* Backlight pin = output, off */
9810 + at91_set_gpio_output(AT91_PIN_PC23, 0);
9812 + /* Reset pin = output, in reset */
9813 + at91_set_gpio_output(AT91_PIN_PC22, 0);
9815 + platform_device_register(&kb9202_lcd_device);
9817 +#else
9818 +static void __init kb9202_add_device_lcd(void) {}
9819 +#endif
9821 static void __init kb9202_board_init(void)
9823 /* Serial */
9824 @@ -129,6 +173,8 @@ static void __init kb9202_board_init(void)
9825 at91_add_device_spi(NULL, 0);
9826 /* NAND */
9827 at91_add_device_nand(&kb9202_nand_data);
9828 + /* LCD */
9829 + kb9202_add_device_lcd();
9832 MACHINE_START(KB9200, "KB920x")
9833 diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c
9834 new file mode 100644
9835 index 0000000..6bf6f0c
9836 --- /dev/null
9837 +++ b/arch/arm/mach-at91/board-sam9-l9260.c
9838 @@ -0,0 +1,200 @@
9840 + * linux/arch/arm/mach-at91/board-sam9-l9260.c
9842 + * Copyright (C) 2005 SAN People
9843 + * Copyright (C) 2006 Atmel
9844 + * Copyright (C) 2007 Olimex Ltd
9846 + * This program is free software; you can redistribute it and/or modify
9847 + * it under the terms of the GNU General Public License as published by
9848 + * the Free Software Foundation; either version 2 of the License, or
9849 + * (at your option) any later version.
9851 + * This program is distributed in the hope that it will be useful,
9852 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9853 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9854 + * GNU General Public License for more details.
9856 + * You should have received a copy of the GNU General Public License
9857 + * along with this program; if not, write to the Free Software
9858 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9859 + */
9861 +#include <linux/types.h>
9862 +#include <linux/init.h>
9863 +#include <linux/mm.h>
9864 +#include <linux/module.h>
9865 +#include <linux/platform_device.h>
9866 +#include <linux/spi/spi.h>
9868 +#include <asm/hardware.h>
9869 +#include <asm/setup.h>
9870 +#include <asm/mach-types.h>
9871 +#include <asm/irq.h>
9873 +#include <asm/mach/arch.h>
9874 +#include <asm/mach/map.h>
9875 +#include <asm/mach/irq.h>
9877 +#include <asm/arch/board.h>
9878 +#include <asm/arch/gpio.h>
9879 +#include <asm/arch/at91sam926x_mc.h>
9881 +#include "generic.h"
9885 + * Serial port configuration.
9886 + * 0 .. 5 = USART0 .. USART5
9887 + * 6 = DBGU
9888 + */
9889 +static struct at91_uart_config __initdata ek_uart_config = {
9890 + .console_tty = 0, /* ttyS0 */
9891 + .nr_tty = 3,
9892 + .tty_map = { 6, 0, 1, -1, -1, -1, -1 } /* ttyS0, ..., ttyS6 */
9895 +static void __init ek_map_io(void)
9897 + /* Initialize processor: 18.432 MHz crystal */
9898 + at91sam9260_initialize(18432000);
9900 + /* Setup the LEDs */
9901 + at91_init_leds(AT91_PIN_PA9, AT91_PIN_PA6);
9903 + /* Setup the serial ports and console */
9904 + at91_init_serial(&ek_uart_config);
9907 +static void __init ek_init_irq(void)
9909 + at91sam9260_init_interrupts(NULL);
9914 + * USB Host port
9915 + */
9916 +static struct at91_usbh_data __initdata ek_usbh_data = {
9917 + .ports = 2,
9921 + * USB Device port
9922 + */
9923 +static struct at91_udc_data __initdata ek_udc_data = {
9924 + .vbus_pin = AT91_PIN_PC5,
9925 + .pullup_pin = 0, /* pull-up driven by UDC */
9930 + * SPI devices.
9931 + */
9932 +static struct spi_board_info ek_spi_devices[] = {
9933 +#if !defined(CONFIG_MMC_AT91)
9934 + { /* DataFlash chip */
9935 + .modalias = "mtd_dataflash",
9936 + .chip_select = 1,
9937 + .max_speed_hz = 15 * 1000 * 1000,
9938 + .bus_num = 0,
9939 + },
9940 +#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
9941 + { /* DataFlash card */
9942 + .modalias = "mtd_dataflash",
9943 + .chip_select = 0,
9944 + .max_speed_hz = 15 * 1000 * 1000,
9945 + .bus_num = 0,
9946 + },
9947 +#endif
9948 +#endif
9953 + * MACB Ethernet device
9954 + */
9955 +static struct at91_eth_data __initdata ek_macb_data = {
9956 + .phy_irq_pin = AT91_PIN_PA7,
9957 + .is_rmii = 0,
9962 + * NAND flash
9963 + */
9964 +static struct mtd_partition __initdata ek_nand_partition[] = {
9966 + .name = "Bootloader Area",
9967 + .offset = 0,
9968 + .size = 10 * 1024 * 1024,
9969 + },
9971 + .name = "User Area",
9972 + .offset = 10 * 1024 * 1024,
9973 + .size = MTDPART_SIZ_FULL,
9974 + },
9977 +static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
9979 + *num_partitions = ARRAY_SIZE(ek_nand_partition);
9980 + return ek_nand_partition;
9983 +static struct at91_nand_data __initdata ek_nand_data = {
9984 + .ale = 21,
9985 + .cle = 22,
9986 +// .det_pin = ... not connected
9987 + .rdy_pin = AT91_PIN_PC13,
9988 + .enable_pin = AT91_PIN_PC14,
9989 + .partition_info = nand_partitions,
9990 +#if defined(CONFIG_MTD_NAND_AT91_BUSWIDTH_16)
9991 + .bus_width_16 = 1,
9992 +#else
9993 + .bus_width_16 = 0,
9994 +#endif
9999 + * MCI (SD/MMC)
10000 + */
10001 +static struct at91_mmc_data __initdata ek_mmc_data = {
10002 + .slot_b = 1,
10003 + .wire4 = 1,
10004 + .det_pin = AT91_PIN_PC8,
10005 + .wp_pin = AT91_PIN_PC4,
10006 +// .vcc_pin = ... not connected
10009 +static void __init ek_board_init(void)
10011 + /* Serial */
10012 + at91_add_device_serial();
10013 + /* USB Host */
10014 + at91_add_device_usbh(&ek_usbh_data);
10015 + /* USB Device */
10016 + at91_add_device_udc(&ek_udc_data);
10017 + /* SPI */
10018 + at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
10019 + /* NAND */
10020 + at91_add_device_nand(&ek_nand_data);
10021 + /* Ethernet */
10022 + at91_add_device_eth(&ek_macb_data);
10023 + /* MMC */
10024 + at91_add_device_mmc(0, &ek_mmc_data);
10025 + /* I2C */
10026 + at91_add_device_i2c(NULL, 0);
10029 +MACHINE_START(SAM9_L9260, "Olimex SAM9-L9260")
10030 + /* Maintainer: Olimex */
10031 + .phys_io = AT91_BASE_SYS,
10032 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
10033 + .boot_params = AT91_SDRAM_BASE + 0x100,
10034 + .timer = &at91sam926x_timer,
10035 + .map_io = ek_map_io,
10036 + .init_irq = ek_init_irq,
10037 + .init_machine = ek_board_init,
10038 +MACHINE_END
10039 diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c
10040 index 550ae59..5023ca9 100644
10041 --- a/arch/arm/mach-at91/board-sam9261ek.c
10042 +++ b/arch/arm/mach-at91/board-sam9261ek.c
10043 @@ -256,6 +256,7 @@ static struct spi_board_info ek_spi_devices[] = {
10044 .bus_num = 0,
10045 .platform_data = &ads_info,
10046 .irq = AT91SAM9261_ID_IRQ0,
10047 + .controller_data = AT91_PIN_PA28, /* CS pin */
10049 #endif
10050 #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
10051 @@ -280,6 +281,68 @@ static struct spi_board_info ek_spi_devices[] = {
10052 * LCD Controller
10054 #if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
10056 +#if defined(CONFIG_FB_ATMEL_STN)
10058 +/* STN */
10059 +static struct fb_videomode at91_stn_modes[] = {
10061 + .name = "SP06Q002 @ 75",
10062 + .refresh = 75,
10063 + .xres = 320, .yres = 240,
10064 + .pixclock = KHZ2PICOS(1440),
10066 + .left_margin = 1, .right_margin = 1,
10067 + .upper_margin = 0, .lower_margin = 0,
10068 + .hsync_len = 1, .vsync_len = 1,
10070 + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
10071 + .vmode = FB_VMODE_NONINTERLACED,
10072 + },
10075 +static struct fb_monspecs at91fb_default_stn_monspecs = {
10076 + .manufacturer = "HIT",
10077 + .monitor = "SP06Q002",
10079 + .modedb = at91_stn_modes,
10080 + .modedb_len = ARRAY_SIZE(at91_stn_modes),
10081 + .hfmin = 15000,
10082 + .hfmax = 64000,
10083 + .vfmin = 50,
10084 + .vfmax = 150,
10087 +#define AT91SAM9261_DEFAULT_STN_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
10088 + | ATMEL_LCDC_DISTYPE_STNMONO \
10089 + | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE \
10090 + | ATMEL_LCDC_IFWIDTH_4 \
10091 + | ATMEL_LCDC_SCANMOD_SINGLE)
10093 +static void at91_lcdc_stn_power_control(int on)
10095 + /* backlight */
10096 + if (on) { /* power up */
10097 + at91_set_gpio_value(AT91_PIN_PC14, 0);
10098 + at91_set_gpio_value(AT91_PIN_PC15, 0);
10099 + } else { /* power down */
10100 + at91_set_gpio_value(AT91_PIN_PC14, 1);
10101 + at91_set_gpio_value(AT91_PIN_PC15, 1);
10105 +static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
10106 + .default_bpp = 1,
10107 + .default_dmacon = ATMEL_LCDC_DMAEN,
10108 + .default_lcdcon2 = AT91SAM9261_DEFAULT_STN_LCDCON2,
10109 + .default_monspecs = &at91fb_default_stn_monspecs,
10110 + .atmel_lcdfb_power_control = at91_lcdc_stn_power_control,
10111 + .guard_time = 1,
10114 +#else
10116 +/* TFT */
10117 static struct fb_videomode at91_tft_vga_modes[] = {
10119 .name = "TX09D50VM1CCA @ 60",
10120 @@ -296,7 +359,7 @@ static struct fb_videomode at91_tft_vga_modes[] = {
10124 -static struct fb_monspecs at91fb_default_monspecs = {
10125 +static struct fb_monspecs at91fb_default_tft_monspecs = {
10126 .manufacturer = "HIT",
10127 .monitor = "TX09D50VM1CCA",
10129 @@ -308,11 +371,11 @@ static struct fb_monspecs at91fb_default_monspecs = {
10130 .vfmax = 150,
10133 -#define AT91SAM9261_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
10134 +#define AT91SAM9261_DEFAULT_TFT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
10135 | ATMEL_LCDC_DISTYPE_TFT \
10136 | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
10138 -static void at91_lcdc_power_control(int on)
10139 +static void at91_lcdc_tft_power_control(int on)
10141 if (on)
10142 at91_set_gpio_value(AT91_PIN_PA12, 0); /* power up */
10143 @@ -320,15 +383,15 @@ static void at91_lcdc_power_control(int on)
10144 at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */
10147 -/* Driver datas */
10148 static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
10149 .default_bpp = 16,
10150 .default_dmacon = ATMEL_LCDC_DMAEN,
10151 - .default_lcdcon2 = AT91SAM9261_DEFAULT_LCDCON2,
10152 - .default_monspecs = &at91fb_default_monspecs,
10153 - .atmel_lcdfb_power_control = at91_lcdc_power_control,
10154 + .default_lcdcon2 = AT91SAM9261_DEFAULT_TFT_LCDCON2,
10155 + .default_monspecs = &at91fb_default_tft_monspecs,
10156 + .atmel_lcdfb_power_control = at91_lcdc_tft_power_control,
10157 .guard_time = 1,
10159 +#endif
10161 #else
10162 static struct atmel_lcdfb_info __initdata ek_lcdc_data;
10163 diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c
10164 index ab9dcc0..dc862fe 100644
10165 --- a/arch/arm/mach-at91/board-sam9263ek.c
10166 +++ b/arch/arm/mach-at91/board-sam9263ek.c
10167 @@ -27,6 +27,8 @@
10168 #include <linux/spi/spi.h>
10169 #include <linux/spi/ads7846.h>
10170 #include <linux/fb.h>
10171 +#include <linux/gpio_keys.h>
10172 +#include <linux/input.h>
10174 #include <video/atmel_lcdc.h>
10176 @@ -163,6 +165,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
10177 * MACB Ethernet device
10179 static struct at91_eth_data __initdata ek_macb_data = {
10180 + .phy_irq_pin = AT91_PIN_PE31,
10181 .is_rmii = 1,
10184 @@ -263,6 +266,53 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data;
10185 #endif
10188 + /*
10189 + * GPIO Buttons
10190 + */
10191 +#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
10192 +static struct gpio_keys_button ek_buttons[] = {
10194 + .gpio = AT91_PIN_PC4,
10195 + .keycode = BTN_RIGHT,
10196 + .desc = "Right Button",
10197 + .active_low = 1,
10198 + },
10200 + .gpio = AT91_PIN_PC5,
10201 + .keycode = BTN_LEFT,
10202 + .desc = "Left Button",
10203 + .active_low = 1,
10207 +static struct gpio_keys_platform_data ek_button_data = {
10208 + .buttons = ek_buttons,
10209 + .nbuttons = ARRAY_SIZE(ek_buttons),
10212 +static struct platform_device ek_button_device = {
10213 + .name = "gpio-keys",
10214 + .id = -1,
10215 + .num_resources = 0,
10216 + .dev = {
10217 + .platform_data = &ek_button_data,
10221 +static void __init ek_add_device_buttons(void)
10223 + at91_set_gpio_input(AT91_PIN_PC5, 0); /* left button */
10224 + at91_set_deglitch(AT91_PIN_PC5, 1);
10225 + at91_set_gpio_input(AT91_PIN_PC4, 0); /* right button */
10226 + at91_set_deglitch(AT91_PIN_PC4, 1);
10228 + platform_device_register(&ek_button_device);
10230 +#else
10231 +static void __init ek_add_device_buttons(void) {}
10232 +#endif
10236 * AC97
10238 @@ -294,6 +344,8 @@ static void __init ek_board_init(void)
10239 at91_add_device_i2c(NULL, 0);
10240 /* LCD Controller */
10241 at91_add_device_lcdc(&ek_lcdc_data);
10242 + /* Push Buttons */
10243 + ek_add_device_buttons();
10244 /* AC97 */
10245 at91_add_device_ac97(&ek_ac97_data);
10247 diff --git a/arch/arm/mach-at91/board-tms.c b/arch/arm/mach-at91/board-tms.c
10248 new file mode 100644
10249 index 0000000..7c3d08d
10250 --- /dev/null
10251 +++ b/arch/arm/mach-at91/board-tms.c
10252 @@ -0,0 +1,198 @@
10254 +* linux/arch/arm/mach-at91/board-tms.c
10256 +* Copyright (C) 2005 SAN People
10258 +* Adapted from board-dk to sweda TMS-100 by Luiz de Barros <lboneto@gmail.com>
10260 +* This program is free software; you can redistribute it and/or modify
10261 +* it under the terms of the GNU General Public License as published by
10262 +* the Free Software Foundation; either version 2 of the License, or
10263 +* (at your option) any later version.
10265 +* This program is distributed in the hope that it will be useful,
10266 +* but WITHOUT ANY WARRANTY; without even the implied warranty of
10267 +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10268 +* GNU General Public License for more details.
10270 +* You should have received a copy of the GNU General Public License
10271 +* along with this program; if not, write to the Free Software
10272 +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
10275 +#include <linux/types.h>
10276 +#include <linux/init.h>
10277 +#include <linux/mm.h>
10278 +#include <linux/module.h>
10279 +#include <linux/platform_device.h>
10280 +#include <linux/spi/spi.h>
10281 +#include <linux/mtd/physmap.h>
10283 +#include <asm/hardware.h>
10284 +#include <asm/setup.h>
10285 +#include <asm/mach-types.h>
10286 +#include <asm/irq.h>
10288 +#include <asm/mach/arch.h>
10289 +#include <asm/mach/map.h>
10290 +#include <asm/mach/irq.h>
10292 +#include <asm/arch/board.h>
10293 +#include <asm/arch/gpio.h>
10294 +#include <asm/arch/at91rm9200_mc.h>
10296 +#include "generic.h"
10297 +#include <linux/serial_8250.h>
10300 +#define SERIAL_FLAGS (UPF_BOOT_AUTOCONF | UPF_IOREMAP| UPF_SHARE_IRQ)
10301 +#define SERIAL_CLK (1843200)
10304 +/*---------------------------------------------------------------------
10305 + * External UART
10306 + */
10308 +#define PORT(_base, _irq) \
10309 + { \
10310 + .mapbase = _base, \
10311 + .irq = _irq, \
10312 + .uartclk = SERIAL_CLK, \
10313 + .iotype = UPIO_MEM, \
10314 + .regshift = 0, \
10315 + .flags = SERIAL_FLAGS, \
10318 +static struct plat_serial8250_port tms_data[] = {
10319 + PORT(0x70000000, AT91_PIN_PC3),
10320 + PORT(0x80000000, AT91_PIN_PC5),
10321 + { },
10324 +static struct platform_device tms_device = {
10325 + .name = "serial8250",
10326 + .id = PLAT8250_DEV_PLATFORM,
10327 + .dev =
10329 + .platform_data = &tms_data,
10330 + },
10333 +static void setup_external_uart(void)
10335 + at91_sys_write(AT91_SMC_CSR(2),
10336 + AT91_SMC_ACSS_STD
10337 + | AT91_SMC_DBW_8
10338 + | AT91_SMC_BAT
10339 + | AT91_SMC_WSEN
10340 + | AT91_SMC_NWS_(32) /* wait states */
10341 + | AT91_SMC_RWSETUP_(6) /* setup time */
10342 + | AT91_SMC_RWHOLD_(4) /* hold time */
10344 + );
10345 + at91_sys_write(AT91_SMC_CSR(6),
10346 + AT91_SMC_ACSS_STD
10347 + | AT91_SMC_DBW_8
10348 + | AT91_SMC_BAT
10349 + | AT91_SMC_WSEN
10350 + | AT91_SMC_NWS_(32) /* wait states */
10351 + | AT91_SMC_RWSETUP_(6) /* setup time */
10352 + | AT91_SMC_RWHOLD_(4) /* hold time */
10354 + );
10355 + at91_sys_write(AT91_SMC_CSR(7),
10356 + AT91_SMC_ACSS_STD
10357 + | AT91_SMC_DBW_8
10358 + | AT91_SMC_BAT
10359 + | AT91_SMC_WSEN
10360 + | AT91_SMC_NWS_(32) /* wait states */
10361 + | AT91_SMC_RWSETUP_(6) /* setup time */
10362 + | AT91_SMC_RWHOLD_(4) /* hold time */
10363 + );
10365 + platform_device_register(&tms_device);
10370 + * Serial port configuration.
10371 + * 0 .. 3 = USART0 .. USART3
10372 + * 4 = DBGU
10373 + */
10374 +static struct at91_uart_config __initdata tms_uart_config = {
10375 + .console_tty = 0, /* ttyS0 */
10376 + .nr_tty = 5,
10377 + .tty_map = { 4, 0, 1, 2, 3 } /* ttyS0, ..., ttyS4 */
10380 +static void __init tms_map_io(void)
10382 + /* Initialize processor: 18.432 MHz crystal */
10383 + at91rm9200_initialize(18432000, AT91RM9200_BGA);
10385 + /* Setup the LEDs */
10386 + at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2);
10388 + /* Setup the serial ports and console */
10389 + at91_init_serial(&tms_uart_config);
10392 +static void __init tms_init_irq(void)
10394 + at91rm9200_init_interrupts(NULL);
10398 +static struct at91_eth_data __initdata tms_eth_data = {
10399 + .phy_irq_pin = AT91_PIN_PC4,
10400 + .is_rmii = 1,
10403 +static struct at91_usbh_data __initdata tms_usbh_data = {
10404 + .ports = 2,
10407 +static struct spi_board_info tms_spi_devices[] = {
10408 + { /* DataFlash chip */
10409 + .modalias = "mtd_dataflash",
10410 + .chip_select = 0,
10411 + .max_speed_hz = 15 * 1000 * 1000,
10412 + },
10413 + { /* DataFlash chip */
10414 + .modalias = "mtd_dataflash",
10415 + .chip_select = 1,
10416 + .max_speed_hz = 15 * 1000 * 1000,
10420 +static struct i2c_board_info __initdata tms_i2c_devices[] = {
10422 + I2C_BOARD_INFO("isl1208", 0x6f),
10426 +static void __init tms_board_init(void)
10428 + /* Serial */
10429 + at91_add_device_serial();
10430 + /* Ethernet */
10431 + at91_add_device_eth(&tms_eth_data);
10432 + at91_add_device_usbh(&tms_usbh_data);
10433 + /* I2C */
10434 + at91_add_device_i2c(tms_i2c_devices, ARRAY_SIZE(tms_i2c_devices));
10435 + /* SPI */
10436 + at91_add_device_spi(tms_spi_devices, ARRAY_SIZE(tms_spi_devices));
10437 + /* Two port external UART */
10438 + setup_external_uart();
10441 +MACHINE_START(SWEDATMS, "Sweda TMS-100 Board")
10442 + /* Maintainer: Luiz de Barros */
10443 + .phys_io = AT91_BASE_SYS,
10444 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
10445 + .boot_params = AT91_SDRAM_BASE + 0x100,
10446 + .timer = &at91rm9200_timer,
10447 + .map_io = tms_map_io,
10448 + .init_irq = tms_init_irq,
10449 + .init_machine = tms_board_init,
10450 +MACHINE_END
10451 diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c
10452 index 57c3b64..48de6a2 100644
10453 --- a/arch/arm/mach-at91/clock.c
10454 +++ b/arch/arm/mach-at91/clock.c
10455 @@ -32,6 +32,7 @@
10456 #include <asm/arch/cpu.h>
10458 #include "clock.h"
10459 +#include "generic.h"
10463 @@ -254,6 +255,23 @@ EXPORT_SYMBOL(clk_get_rate);
10465 /*------------------------------------------------------------------------*/
10467 +#ifdef CONFIG_PM
10469 +int clk_must_disable(struct clk *clk)
10471 + if (!at91_suspend_entering_slow_clock())
10472 + return 0;
10474 + while (clk->parent)
10475 + clk = clk->parent;
10476 + return clk != &clk32k;
10478 +EXPORT_SYMBOL(clk_must_disable);
10480 +#endif
10482 +/*------------------------------------------------------------------------*/
10484 #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
10487 diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h
10488 index 77d4c0a..27529d5 100644
10489 --- a/arch/arm/mach-at91/generic.h
10490 +++ b/arch/arm/mach-at91/generic.h
10491 @@ -39,6 +39,7 @@ extern void __init at91_clock_associate(const char *id, struct device *dev, cons
10492 /* Power Management */
10493 extern void at91_irq_suspend(void);
10494 extern void at91_irq_resume(void);
10495 +extern int at91_suspend_entering_slow_clock(void);
10497 /* GPIO */
10498 #define AT91RM9200_PQFP 3 /* AT91RM9200 PQFP package has 3 banks */
10499 diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c
10500 index aa2d365..6aeddd6 100644
10501 --- a/arch/arm/mach-at91/gpio.c
10502 +++ b/arch/arm/mach-at91/gpio.c
10503 @@ -13,6 +13,8 @@
10504 #include <linux/errno.h>
10505 #include <linux/interrupt.h>
10506 #include <linux/irq.h>
10507 +#include <linux/debugfs.h>
10508 +#include <linux/seq_file.h>
10509 #include <linux/kernel.h>
10510 #include <linux/list.h>
10511 #include <linux/module.h>
10512 @@ -414,6 +416,66 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)
10514 /*--------------------------------------------------------------------------*/
10516 +#ifdef CONFIG_DEBUG_FS
10518 +static int at91_gpio_show(struct seq_file *s, void *unused)
10520 + int bank, j;
10522 + /* print heading */
10523 + seq_printf(s, "Pin\t");
10524 + for (bank = 0; bank < gpio_banks; bank++) {
10525 + seq_printf(s, "PIO%c\t", 'A' + bank);
10526 + };
10527 + seq_printf(s, "\n\n");
10529 + /* print pin status */
10530 + for (j = 0; j < 32; j++) {
10531 + seq_printf(s, "%i:\t", j);
10533 + for (bank = 0; bank < gpio_banks; bank++) {
10534 + unsigned pin = PIN_BASE + (32 * bank) + j;
10535 + void __iomem *pio = pin_to_controller(pin);
10536 + unsigned mask = pin_to_mask(pin);
10538 + if (__raw_readl(pio + PIO_PSR) & mask)
10539 + seq_printf(s, "GPIO:%s", __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0");
10540 + else
10541 + seq_printf(s, "%s", __raw_readl(pio + PIO_ABSR) & mask ? "B" : "A");
10543 + seq_printf(s, "\t");
10546 + seq_printf(s, "\n");
10549 + return 0;
10552 +static int at91_gpio_open(struct inode *inode, struct file *file)
10554 + return single_open(file, at91_gpio_show, NULL);
10557 +static const struct file_operations at91_gpio_operations = {
10558 + .open = at91_gpio_open,
10559 + .read = seq_read,
10560 + .llseek = seq_lseek,
10561 + .release = single_release,
10564 +static int __init at91_gpio_debugfs_init(void)
10566 + /* /sys/kernel/debug/at91_gpio */
10567 + (void) debugfs_create_file("at91_gpio", S_IFREG | S_IRUGO, NULL, NULL, &at91_gpio_operations);
10568 + return 0;
10570 +postcore_initcall(at91_gpio_debugfs_init);
10572 +#endif
10574 +/*--------------------------------------------------------------------------*/
10577 * Called from the processor-specific init to enable GPIO interrupt support.
10579 diff --git a/arch/arm/mach-at91/ics1523.c b/arch/arm/mach-at91/ics1523.c
10580 new file mode 100644
10581 index 0000000..646fbac
10582 --- /dev/null
10583 +++ b/arch/arm/mach-at91/ics1523.c
10584 @@ -0,0 +1,207 @@
10586 + * arch/arm/mach-at91rm9200/ics1523.c
10588 + * Copyright (C) 2003 ATMEL Rousset
10590 + * This program is free software; you can redistribute it and/or modify
10591 + * it under the terms of the GNU General Public License as published by
10592 + * the Free Software Foundation; either version 2 of the License, or
10593 + * (at your option) any later version.
10595 + * This program is distributed in the hope that it will be useful,
10596 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
10597 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10598 + * GNU General Public License for more details.
10600 + * You should have received a copy of the GNU General Public License
10601 + * along with this program; if not, write to the Free Software
10602 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
10603 + */
10605 +#include <asm/hardware.h>
10606 +#include <asm/io.h>
10608 +#include <linux/clk.h>
10609 +#include <linux/delay.h>
10610 +#include <linux/err.h>
10611 +#include <linux/init.h>
10613 +#include <asm/arch/ics1523.h>
10614 +#include <asm/arch/at91_twi.h>
10615 +#include <asm/arch/gpio.h>
10617 +/* TWI Errors */
10618 +#define AT91_TWI_ERROR (AT91_TWI_NACK | AT91_TWI_UNRE | AT91_TWI_OVRE)
10621 +static void __iomem *twi_base;
10623 +#define at91_twi_read(reg) __raw_readl(twi_base + (reg))
10624 +#define at91_twi_write(reg, val) __raw_writel((val), twi_base + (reg))
10627 +/* -----------------------------------------------------------------------------
10628 + * Initialization of TWI CLOCK
10629 + * ----------------------------------------------------------------------------- */
10631 +static void at91_ics1523_SetTwiClock(unsigned int mck_khz)
10633 + int sclock;
10635 + /* Here, CKDIV = 1 and CHDIV = CLDIV ==> CLDIV = CHDIV = 1/4*((Fmclk/FTWI) -6) */
10636 + sclock = (10*mck_khz / ICS_TRANSFER_RATE);
10637 + if (sclock % 10 >= 5)
10638 + sclock = (sclock /10) - 5;
10639 + else
10640 + sclock = (sclock /10)- 6;
10641 + sclock = (sclock + (4 - sclock %4)) >> 2; /* div 4 */
10643 + at91_twi_write(AT91_TWI_CWGR, 0x00010000 | sclock | (sclock << 8));
10646 +/* -----------------------------------------------------------------------------
10647 + * Read a byte with TWI Interface from the Clock Generator ICS1523
10648 + * ----------------------------------------------------------------------------- */
10650 +static int at91_ics1523_ReadByte(unsigned char reg_address, unsigned char *data_in)
10652 + int Status, nb_trial;
10654 + at91_twi_write(AT91_TWI_MMR, AT91_TWI_MREAD | AT91_TWI_IADRSZ_1 | ((ICS_ADDR << 16) & AT91_TWI_DADR));
10655 + at91_twi_write(AT91_TWI_IADR, reg_address);
10656 + at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
10658 + /* Program temporizing period (300us) */
10659 + udelay(300);
10661 + /* Wait TXcomplete ... */
10662 + nb_trial = 0;
10663 + Status = at91_twi_read(AT91_TWI_SR);
10664 + while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
10665 + nb_trial++;
10666 + Status = at91_twi_read(AT91_TWI_SR);
10669 + if (Status & AT91_TWI_TXCOMP) {
10670 + *data_in = (unsigned char) at91_twi_read(AT91_TWI_RHR);
10671 + return ICS1523_ACCESS_OK;
10673 + else
10674 + return ICS1523_ACCESS_ERROR;
10677 +/* -----------------------------------------------------------------------------
10678 + * Write a byte with TWI Interface to the Clock Generator ICS1523
10679 + * ----------------------------------------------------------------------------- */
10681 +static int at91_ics1523_WriteByte(unsigned char reg_address, unsigned char data_out)
10683 + int Status, nb_trial;
10685 + at91_twi_write(AT91_TWI_MMR, AT91_TWI_IADRSZ_1 | ((ICS_ADDR << 16) & AT91_TWI_DADR));
10686 + at91_twi_write(AT91_TWI_IADR, reg_address);
10687 + at91_twi_write(AT91_TWI_THR, data_out);
10688 + at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
10690 + /* Program temporizing period (300us) */
10691 + udelay(300);
10693 + nb_trial = 0;
10694 + Status = at91_twi_read(AT91_TWI_SR);
10695 + while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
10696 + nb_trial++;
10697 + if (Status & AT91_TWI_ERROR) {
10698 + /* If Underrun OR NACK - Start again */
10699 + at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
10701 + /* Program temporizing period (300us) */
10702 + udelay(300);
10704 + Status = at91_twi_read(AT91_TWI_SR);
10705 + };
10707 + if (Status & AT91_TWI_TXCOMP)
10708 + return ICS1523_ACCESS_OK;
10709 + else
10710 + return ICS1523_ACCESS_ERROR;
10713 +/* -----------------------------------------------------------------------------
10714 + * Initialization of the Clock Generator ICS1523
10715 + * ----------------------------------------------------------------------------- */
10717 +int at91_ics1523_init(void)
10719 + int nb_trial;
10720 + int ack = ICS1523_ACCESS_OK;
10721 + unsigned int status = 0xffffffff;
10722 + struct clk *twi_clk;
10724 + /* Map in TWI peripheral */
10725 + twi_base = ioremap(AT91RM9200_BASE_TWI, SZ_16K);
10726 + if (!twi_base)
10727 + return -ENOMEM;
10729 + /* pins used for TWI interface */
10730 + at91_set_A_periph(AT91_PIN_PA25, 0); /* TWD */
10731 + at91_set_multi_drive(AT91_PIN_PA25, 1);
10732 + at91_set_A_periph(AT91_PIN_PA26, 0); /* TWCK */
10733 + at91_set_multi_drive(AT91_PIN_PA26, 1);
10735 + /* Enable the TWI clock */
10736 + twi_clk = clk_get(NULL, "twi_clk");
10737 + if (IS_ERR(twi_clk))
10738 + return ICS1523_ACCESS_ERROR;
10739 + clk_enable(twi_clk);
10741 + /* Disable interrupts */
10742 + at91_twi_write(AT91_TWI_IDR, -1);
10744 + /* Reset peripheral */
10745 + at91_twi_write(AT91_TWI_CR, AT91_TWI_SWRST);
10747 + /* Set Master mode */
10748 + at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN);
10750 + /* Set TWI Clock Waveform Generator Register */
10751 + at91_ics1523_SetTwiClock(60000); /* MCK in KHz = 60000 KHz */
10753 + /* ICS1523 Initialisation */
10754 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_ICR, (unsigned char) 0);
10755 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_OE, (unsigned char) (ICS_OEF | ICS_OET2 | ICS_OETCK));
10756 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_OD, (unsigned char) (ICS_INSEL | 0x7F));
10757 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0);
10759 + nb_trial = 0;
10760 + do {
10761 + nb_trial++;
10762 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_ICR, (unsigned char) (ICS_ENDLS | ICS_ENPLS | ICS_PDEN /*| ICS_FUNCSEL*/));
10763 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_LCR, (unsigned char) (ICS_PSD | ICS_PFD));
10764 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_FD0, (unsigned char) 0x39) ; /* 0x7A */
10765 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_FD1, (unsigned char) 0x00);
10766 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_SWRST, (unsigned char) (ICS_PLLR));
10768 + /* Program 1ms temporizing period */
10769 + mdelay(1);
10771 + at91_ics1523_ReadByte ((unsigned char) ICS_SR, (char *)&status);
10772 + } while (!((unsigned int) status & (unsigned int) ICS_PLLLOCK) && (nb_trial < 10));
10774 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAC, (unsigned char) 0x03) ; /* 0x01 */
10775 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_SWRST, (unsigned char) (ICS_DPAR));
10777 + /* Program 1ms temporizing period */
10778 + mdelay(1);
10780 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0x00);
10782 + /* Program 1ms temporizing period */
10783 + mdelay(1);
10785 + /* All done - cleanup */
10786 + iounmap(twi_base);
10787 + clk_disable(twi_clk);
10788 + clk_put(twi_clk);
10790 + return ack;
10792 diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
10793 index 98cb614..04e3475 100644
10794 --- a/arch/arm/mach-at91/pm.c
10795 +++ b/arch/arm/mach-at91/pm.c
10796 @@ -26,12 +26,24 @@
10797 #include <asm/mach-types.h>
10799 #include <asm/arch/at91_pmc.h>
10800 -#include <asm/arch/at91rm9200_mc.h>
10801 #include <asm/arch/gpio.h>
10802 #include <asm/arch/cpu.h>
10804 #include "generic.h"
10806 +#ifdef CONFIG_ARCH_AT91RM9200
10807 +#include <asm/arch/at91rm9200_mc.h>
10809 +#define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_SRR, 1)
10810 +#define sdram_selfrefresh_disable()
10812 +#else
10813 +#include <asm/arch/at91sam926x_mc.h>
10815 +#define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_LPR, AT91_SDRAMC_LPCB_SELF_REFRESH)
10816 +#define sdram_selfrefresh_disable() at91_sys_write(AT91_SDRAMC_LPR, AT91_SDRAMC_LPCB_DISABLE)
10818 +#endif
10820 static int at91_pm_valid_state(suspend_state_t state)
10822 @@ -62,6 +74,7 @@ static int at91_pm_set_target(suspend_state_t state)
10823 * Verify that all the clocks are correct before entering
10824 * slow-clock mode.
10826 +#warning "This should probably be moved to clocks.c"
10827 static int at91_pm_verify_clocks(void)
10829 unsigned long scsr;
10830 @@ -102,20 +115,15 @@ static int at91_pm_verify_clocks(void)
10834 - * Call this from platform driver suspend() to see how deeply to suspend.
10835 + * This is called from clk_must_disable(), to see how deeply to suspend.
10836 * For example, some controllers (like OHCI) need one of the PLL clocks
10837 * in order to act as a wakeup source, and those are not available when
10838 * going into slow clock mode.
10840 - * REVISIT: generalize as clk_will_be_available(clk)? Other platforms have
10841 - * the very same problem (but not using at91 main_clk), and it'd be better
10842 - * to add one generic API rather than lots of platform-specific ones.
10844 int at91_suspend_entering_slow_clock(void)
10846 return (target_state == PM_SUSPEND_MEM);
10848 -EXPORT_SYMBOL(at91_suspend_entering_slow_clock);
10851 static void (*slow_clock)(void);
10852 @@ -175,7 +183,7 @@ static int at91_pm_enter(suspend_state_t state)
10854 asm("b 1f; .align 5; 1:");
10855 asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
10856 - at91_sys_write(AT91_SDRAMC_SRR, 1); /* self-refresh mode */
10857 + sdram_selfrefresh_enable(); /* self-refresh mode */
10858 /* fall though to next state */
10860 case PM_SUSPEND_ON:
10861 @@ -191,6 +199,7 @@ static int at91_pm_enter(suspend_state_t state)
10862 at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
10864 error:
10865 + sdram_selfrefresh_disable();
10866 target_state = PM_SUSPEND_ON;
10867 at91_irq_resume();
10868 at91_gpio_resume();
10869 @@ -204,16 +213,23 @@ static struct platform_suspend_ops at91_pm_ops ={
10870 .enter = at91_pm_enter,
10873 +#ifdef CONFIG_AT91_SLOW_CLOCK
10874 +extern void at91rm9200_slow_clock(void);
10875 +extern u32 at91rm9200_slow_clock_sz;
10876 +#endif
10878 static int __init at91_pm_init(void)
10880 - printk("AT91: Power Management\n");
10882 -#ifdef CONFIG_AT91_PM_SLOW_CLOCK
10883 - /* REVISIT allocations of SRAM should be dynamically managed.
10884 +#ifdef CONFIG_AT91_SLOW_CLOCK
10885 + /*
10886 + * REVISIT allocations of SRAM should be dynamically managed.
10887 * FIQ handlers and other components will want SRAM/TCM too...
10889 - slow_clock = (void *) (AT91_VA_BASE_SRAM + (3 * SZ_4K));
10890 + slow_clock = (void *) (AT91_IO_VIRT_BASE - AT91RM9200_SRAM_SIZE + (3 * SZ_4K));
10891 memcpy(slow_clock, at91rm9200_slow_clock, at91rm9200_slow_clock_sz);
10892 + printk("AT91: Power Management (with slow clock mode)\n");
10893 +#else
10894 + printk("AT91: Power Management\n");
10895 #endif
10897 /* Disable SDRAM low-power mode. Cannot be used with self-refresh. */
10898 diff --git a/arch/arm/mach-at91/pm_slowclock.S b/arch/arm/mach-at91/pm_slowclock.S
10899 new file mode 100644
10900 index 0000000..3f5ba62
10901 --- /dev/null
10902 +++ b/arch/arm/mach-at91/pm_slowclock.S
10903 @@ -0,0 +1,172 @@
10905 + * arch/arm/mach-at91/pm_slow_clock.S
10907 + * Copyright (C) 2006 Savin Zlobec
10909 + * This program is free software; you can redistribute it and/or modify
10910 + * it under the terms of the GNU General Public License version 2 as
10911 + * published by the Free Software Foundation.
10913 + */
10915 +#include <linux/linkage.h>
10916 +#include <asm/hardware.h>
10917 +#include <asm/arch/at91_pmc.h>
10918 +#include <asm/arch/at91rm9200_mc.h>
10920 +#define MCKRDY_TIMEOUT 1000
10921 +#define MOSCRDY_TIMEOUT 1000
10922 +#define PLLALOCK_TIMEOUT 1000
10924 + .macro wait_mckrdy
10925 + mov r2, #MCKRDY_TIMEOUT
10926 +1: sub r2, r2, #1
10927 + cmp r2, #0
10928 + beq 2f
10929 + ldr r3, [r1, #AT91_PMC_SR]
10930 + tst r3, #AT91_PMC_MCKRDY
10931 + beq 1b
10933 + .endm
10935 + .macro wait_moscrdy
10936 + mov r2, #MOSCRDY_TIMEOUT
10937 +1: sub r2, r2, #1
10938 + cmp r2, #0
10939 + beq 2f
10940 + ldr r3, [r1, #AT91_PMC_SR]
10941 + tst r3, #AT91_PMC_MOSCS
10942 + beq 1b
10944 + .endm
10946 + .macro wait_pllalock
10947 + mov r2, #PLLALOCK_TIMEOUT
10948 +1: sub r2, r2, #1
10949 + cmp r2, #0
10950 + beq 2f
10951 + ldr r3, [r1, #AT91_PMC_SR]
10952 + tst r3, #AT91_PMC_LOCKA
10953 + beq 1b
10955 + .endm
10957 + .macro wait_plladis
10958 + mov r2, #PLLALOCK_TIMEOUT
10959 +1: sub r2, r2, #1
10960 + cmp r2, #0
10961 + beq 2f
10962 + ldr r3, [r1, #AT91_PMC_SR]
10963 + tst r3, #AT91_PMC_LOCKA
10964 + bne 1b
10966 + .endm
10968 + .text
10970 +ENTRY(at91rm9200_slow_clock)
10972 + ldr r1, .at91_va_base_sys
10974 + /* Put SDRAM in self refresh mode */
10976 + b 1f
10977 + .align 5
10978 +1: mcr p15, 0, r0, c7, c10, 4
10979 + mov r2, #1
10980 + str r2, [r1, #AT91_SDRAMC_SRR]
10982 + /* Save Master clock setting */
10984 + ldr r2, [r1, #AT91_PMC_MCKR]
10985 + str r2, .saved_mckr
10987 + /*
10988 + * Set the Master clock source to slow clock
10990 + * First set the CSS field, wait for MCKRDY
10991 + * and than set the PRES and MDIV fields.
10993 + * See eratta #2[78] for details.
10994 + */
10996 + bic r2, r2, #3
10997 + str r2, [r1, #AT91_PMC_MCKR]
10999 + wait_mckrdy
11001 + mov r2, #0
11002 + str r2, [r1, #AT91_PMC_MCKR]
11004 + /* Save PLLA setting and disable it */
11006 + ldr r2, [r1, #AT91_CKGR_PLLAR]
11007 + str r2, .saved_pllar
11009 + mov r2, #0
11010 + str r2, [r1, #AT91_CKGR_PLLAR]
11012 + wait_plladis
11014 + /* Turn off the main oscillator */
11016 + ldr r2, [r1, #AT91_CKGR_MOR]
11017 + bic r2, r2, #AT91_PMC_MOSCEN
11018 + str r2, [r1, #AT91_CKGR_MOR]
11020 + /* Wait for interrupt */
11022 + mcr p15, 0, r0, c7, c0, 4
11024 + /* Turn on the main oscillator */
11026 + ldr r2, [r1, #AT91_CKGR_MOR]
11027 + orr r2, r2, #AT91_PMC_MOSCEN
11028 + str r2, [r1, #AT91_CKGR_MOR]
11030 + wait_moscrdy
11032 + /* Restore PLLA setting */
11034 + ldr r2, .saved_pllar
11035 + str r2, [r1, #AT91_CKGR_PLLAR]
11037 + wait_pllalock
11039 + /*
11040 + * Restore master clock setting
11042 + * First set PRES if it was not 0,
11043 + * than set CSS and MDIV fields.
11044 + * After every change wait for
11045 + * MCKRDY.
11047 + * See eratta #2[78] for details.
11048 + */
11050 + ldr r2, .saved_mckr
11051 + tst r2, #0x1C
11052 + beq 2f
11053 + and r2, r2, #0x1C
11054 + str r2, [r1, #AT91_PMC_MCKR]
11056 + wait_mckrdy
11058 +2: ldr r2, .saved_mckr
11059 + str r2, [r1, #AT91_PMC_MCKR]
11061 + wait_mckrdy
11063 + mov pc, lr
11065 +.saved_mckr:
11066 + .word 0
11068 +.saved_pllar:
11069 + .word 0
11071 +.at91_va_base_sys:
11072 + .word AT91_VA_BASE_SYS
11074 +ENTRY(at91rm9200_slow_clock_sz)
11075 + .word .-at91rm9200_slow_clock
11076 diff --git a/arch/arm/mach-at91/tclib.c b/arch/arm/mach-at91/tclib.c
11077 new file mode 100644
11078 index 0000000..b6389ac
11079 --- /dev/null
11080 +++ b/arch/arm/mach-at91/tclib.c
11081 @@ -0,0 +1,17 @@
11082 +#include <linux/clk.h>
11083 +#include <linux/kernel.h>
11084 +#include <linux/module.h>
11086 +#include "tclib.h"
11088 +static struct atmel_tcblock *blocks;
11089 +static int nblocks;
11092 + * Called from the processor-specific init to register the TC Blocks.
11093 + */
11094 +void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n)
11096 + blocks = tcblocks;
11097 + nblocks = n;
11099 diff --git a/arch/arm/mach-at91/tclib.h b/arch/arm/mach-at91/tclib.h
11100 new file mode 100644
11101 index 0000000..dc5dfb6
11102 --- /dev/null
11103 +++ b/arch/arm/mach-at91/tclib.h
11104 @@ -0,0 +1,11 @@
11106 +#define TC_PER_TCB 3
11108 +struct atmel_tcblock {
11109 + u32 physaddr;
11110 + void __iomem *ioaddr;
11111 + struct clk *clk[TC_PER_TCB];
11112 + int irq[TC_PER_TCB];
11115 +extern void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n);
11116 diff --git a/arch/arm/mach-ks8695/Makefile b/arch/arm/mach-ks8695/Makefile
11117 index 2a07a28..a2ccbc2 100644
11118 --- a/arch/arm/mach-ks8695/Makefile
11119 +++ b/arch/arm/mach-ks8695/Makefile
11120 @@ -9,7 +9,11 @@ obj-n :=
11121 obj- :=
11123 # PCI support is optional
11124 -#obj-$(CONFIG_PCI) += pci.o
11125 +obj-$(CONFIG_PCI) += pci.o
11127 +# LEDs
11128 +obj-$(CONFIG_LEDS) += leds.o
11130 # Board-specific support
11131 obj-$(CONFIG_MACH_KS8695) += board-micrel.o
11133 diff --git a/arch/arm/mach-ks8695/board-micrel.c b/arch/arm/mach-ks8695/board-micrel.c
11134 index 2feeef8..05ac2bd 100644
11135 --- a/arch/arm/mach-ks8695/board-micrel.c
11136 +++ b/arch/arm/mach-ks8695/board-micrel.c
11137 @@ -40,7 +40,7 @@ static void __init micrel_init(void)
11138 printk(KERN_INFO "Micrel KS8695 Development Board initializing\n");
11140 #ifdef CONFIG_PCI
11141 -// ks8695_init_pci(&micrel_pci);
11142 + ks8695_init_pci(&micrel_pci);
11143 #endif
11145 /* Add devices */
11146 diff --git a/arch/arm/mach-ks8695/devices.c b/arch/arm/mach-ks8695/devices.c
11147 index 386593f..3db2ec6 100644
11148 --- a/arch/arm/mach-ks8695/devices.c
11149 +++ b/arch/arm/mach-ks8695/devices.c
11150 @@ -176,6 +176,27 @@ static void __init ks8695_add_device_watchdog(void) {}
11151 #endif
11154 +/* --------------------------------------------------------------------
11155 + * LEDs
11156 + * -------------------------------------------------------------------- */
11158 +#if defined(CONFIG_LEDS)
11159 +short ks8695_leds_cpu = -1;
11160 +short ks8695_leds_timer = -1;
11162 +void __init ks8695_init_leds(u8 cpu_led, u8 timer_led)
11164 + /* Enable GPIO to access the LEDs */
11165 + gpio_direction_output(cpu_led, 1);
11166 + gpio_direction_output(timer_led, 1);
11168 + ks8695_leds_cpu = cpu_led;
11169 + ks8695_leds_timer = timer_led;
11171 +#else
11172 +void __init ks8695_init_leds(u8 cpu_led, u8 timer_led) {}
11173 +#endif
11175 /* -------------------------------------------------------------------- */
11178 diff --git a/arch/arm/mach-ks8695/gpio.c b/arch/arm/mach-ks8695/gpio.c
11179 index b1aa3cb..5e46191 100644
11180 --- a/arch/arm/mach-ks8695/gpio.c
11181 +++ b/arch/arm/mach-ks8695/gpio.c
11182 @@ -20,6 +20,8 @@
11183 #include <linux/kernel.h>
11184 #include <linux/mm.h>
11185 #include <linux/init.h>
11186 +#include <linux/debugfs.h>
11187 +#include <linux/seq_file.h>
11188 #include <linux/module.h>
11190 #include <asm/io.h>
11191 @@ -216,3 +218,84 @@ int irq_to_gpio(unsigned int irq)
11192 return (irq - KS8695_IRQ_EXTERN0);
11194 EXPORT_SYMBOL(irq_to_gpio);
11197 +/* .... Debug interface ..................................................... */
11199 +#ifdef CONFIG_DEBUG_FS
11201 +static int ks8695_gpio_show(struct seq_file *s, void *unused)
11203 + unsigned int enable[] = { IOPC_IOEINT0EN, IOPC_IOEINT1EN, IOPC_IOEINT2EN, IOPC_IOEINT3EN, IOPC_IOTIM0EN, IOPC_IOTIM1EN };
11204 + unsigned int intmask[] = { IOPC_IOEINT0TM, IOPC_IOEINT1TM, IOPC_IOEINT2TM, IOPC_IOEINT3TM };
11205 + unsigned long mode, ctrl, data;
11206 + int i;
11208 + mode = __raw_readl(KS8695_GPIO_VA + KS8695_IOPM);
11209 + ctrl = __raw_readl(KS8695_GPIO_VA + KS8695_IOPC);
11210 + data = __raw_readl(KS8695_GPIO_VA + KS8695_IOPD);
11212 + seq_printf(s, "Pin\tI/O\tFunction\tState\n\n");
11214 + for (i = KS8695_GPIO_0; i <= KS8695_GPIO_15 ; i++) {
11215 + seq_printf(s, "%i:\t", i);
11217 + seq_printf(s, "%s\t", (mode & IOPM_(i)) ? "Output" : "Input");
11219 + if (i <= KS8695_GPIO_3) {
11220 + if (ctrl & enable[i]) {
11221 + seq_printf(s, "EXT%i ", i);
11223 + switch ((ctrl & intmask[i]) >> (4 * i)) {
11224 + case IOPC_TM_LOW:
11225 + seq_printf(s, "(Low)"); break;
11226 + case IOPC_TM_HIGH:
11227 + seq_printf(s, "(High)"); break;
11228 + case IOPC_TM_RISING:
11229 + seq_printf(s, "(Rising)"); break;
11230 + case IOPC_TM_FALLING:
11231 + seq_printf(s, "(Falling)"); break;
11232 + case IOPC_TM_EDGE:
11233 + seq_printf(s, "(Edges)"); break;
11236 + else
11237 + seq_printf(s, "GPIO\t");
11239 + else if (i <= KS8695_GPIO_5) {
11240 + if (ctrl & enable[i])
11241 + seq_printf(s, "TOUT%i\t", i - KS8695_GPIO_4);
11242 + else
11243 + seq_printf(s, "GPIO\t");
11245 + else
11246 + seq_printf(s, "GPIO\t");
11248 + seq_printf(s, "\t");
11250 + seq_printf(s, "%i\n", (data & IOPD_(i)) ? 1 : 0);
11252 + return 0;
11255 +static int ks8695_gpio_open(struct inode *inode, struct file *file)
11257 + return single_open(file, ks8695_gpio_show, NULL);
11260 +static const struct file_operations ks8695_gpio_operations = {
11261 + .open = ks8695_gpio_open,
11262 + .read = seq_read,
11263 + .llseek = seq_lseek,
11264 + .release = single_release,
11267 +static int __init ks8695_gpio_debugfs_init(void)
11269 + /* /sys/kernel/debug/ks8695_gpio */
11270 + (void) debugfs_create_file("ks8695_gpio", S_IFREG | S_IRUGO, NULL, NULL, &ks8695_gpio_operations);
11271 + return 0;
11273 +postcore_initcall(ks8695_gpio_debugfs_init);
11275 +#endif
11276 diff --git a/arch/arm/mach-ks8695/leds.c b/arch/arm/mach-ks8695/leds.c
11277 new file mode 100644
11278 index 0000000..d61762a
11279 --- /dev/null
11280 +++ b/arch/arm/mach-ks8695/leds.c
11281 @@ -0,0 +1,94 @@
11283 + * LED driver for KS8695-based boards.
11285 + * Copyright (C) Andrew Victor
11287 + * This program is free software; you can redistribute it and/or modify
11288 + * it under the terms of the GNU General Public License version 2 as
11289 + * published by the Free Software Foundation.
11290 + */
11292 +#include <linux/kernel.h>
11293 +#include <linux/module.h>
11294 +#include <linux/init.h>
11296 +#include <asm/mach-types.h>
11297 +#include <asm/leds.h>
11298 +#include <asm/arch/devices.h>
11299 +#include <asm/arch/gpio.h>
11302 +static inline void ks8695_led_on(unsigned int led)
11304 + gpio_set_value(led, 0);
11307 +static inline void ks8695_led_off(unsigned int led)
11309 + gpio_set_value(led, 1);
11312 +static inline void ks8695_led_toggle(unsigned int led)
11314 + unsigned long is_off = gpio_get_value(led);
11315 + if (is_off)
11316 + ks8695_led_on(led);
11317 + else
11318 + ks8695_led_off(led);
11323 + * Handle LED events.
11324 + */
11325 +static void ks8695_leds_event(led_event_t evt)
11327 + unsigned long flags;
11329 + local_irq_save(flags);
11331 + switch(evt) {
11332 + case led_start: /* System startup */
11333 + ks8695_led_on(ks8695_leds_cpu);
11334 + break;
11336 + case led_stop: /* System stop / suspend */
11337 + ks8695_led_off(ks8695_leds_cpu);
11338 + break;
11340 +#ifdef CONFIG_LEDS_TIMER
11341 + case led_timer: /* Every 50 timer ticks */
11342 + ks8695_led_toggle(ks8695_leds_timer);
11343 + break;
11344 +#endif
11346 +#ifdef CONFIG_LEDS_CPU
11347 + case led_idle_start: /* Entering idle state */
11348 + ks8695_led_off(ks8695_leds_cpu);
11349 + break;
11351 + case led_idle_end: /* Exit idle state */
11352 + ks8695_led_on(ks8695_leds_cpu);
11353 + break;
11354 +#endif
11356 + default:
11357 + break;
11360 + local_irq_restore(flags);
11364 +static int __init leds_init(void)
11366 + if ((ks8695_leds_timer == -1) || (ks8695_leds_cpu == -1))
11367 + return -ENODEV;
11369 + leds_event = ks8695_leds_event;
11371 + leds_event(led_start);
11372 + return 0;
11375 +__initcall(leds_init);
11376 diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c
11377 new file mode 100644
11378 index 0000000..4d2a5bf
11379 --- /dev/null
11380 +++ b/arch/arm/mach-ks8695/pci.c
11381 @@ -0,0 +1,324 @@
11383 + * arch/arm/mach-ks8695/pci.c
11385 + * Copyright (C) 2003, Micrel Semiconductors
11386 + * Copyright (C) 2006, Greg Ungerer <gerg@snapgear.com>
11387 + * Copyright (C) 2006, Ben Dooks
11389 + * This program is free software; you can redistribute it and/or modify
11390 + * it under the terms of the GNU General Public License as published by
11391 + * the Free Software Foundation; either version 2 of the License, or
11392 + * (at your option) any later version.
11394 + * This program is distributed in the hope that it will be useful,
11395 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11396 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11397 + * GNU General Public License for more details.
11399 + * You should have received a copy of the GNU General Public License
11400 + * along with this program; if not, write to the Free Software
11401 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
11402 + */
11404 +#include <linux/kernel.h>
11405 +#include <linux/pci.h>
11406 +#include <linux/mm.h>
11407 +#include <linux/init.h>
11408 +#include <linux/irq.h>
11409 +#include <linux/delay.h>
11411 +#include <asm/io.h>
11412 +#include <asm/mach/pci.h>
11413 +#include <asm/hardware.h>
11415 +#include <asm/arch/devices.h>
11416 +#include <asm/arch/regs-pci.h>
11419 +static int pci_dbg;
11420 +static int pci_cfg_dbg;
11423 +static void ks8695_pci_setupconfig(unsigned int bus_nr, unsigned int devfn, unsigned int where)
11425 + unsigned long pbca;
11427 + pbca = PBCA_ENABLE | (where & ~3);
11428 + pbca |= PCI_SLOT(devfn) << 11 ;
11429 + pbca |= PCI_FUNC(devfn) << 8;
11430 + pbca |= bus_nr << 16;
11432 + if (bus_nr == 0) {
11433 + /* use Type-0 transaction */
11434 + __raw_writel(pbca, KS8695_PCI_VA + KS8695_PBCA);
11435 + } else {
11436 + /* use Type-1 transaction */
11437 + __raw_writel(pbca | PBCA_TYPE1, KS8695_PCI_VA + KS8695_PBCA);
11443 + * The KS8695 datasheet prohibits anything other than 32bit accesses
11444 + * to the IO registers, so all our configuration must be done with
11445 + * 32bit operations, and the correct bit masking and shifting.
11446 + */
11448 +static int ks8695_pci_readconfig(struct pci_bus *bus,
11449 + unsigned int devfn, int where, int size, u32 *value)
11451 + ks8695_pci_setupconfig(bus->number, devfn, where);
11453 + *value = __raw_readl(KS8695_PCI_VA + KS8695_PBCD);
11455 + switch (size) {
11456 + case 4:
11457 + break;
11458 + case 2:
11459 + *value = *value >> ((where & 2) * 8);
11460 + *value &= 0xffff;
11461 + break;
11462 + case 1:
11463 + *value = *value >> ((where & 3) * 8);
11464 + *value &= 0xff;
11465 + break;
11468 + if (pci_cfg_dbg) {
11469 + printk("read: %d,%08x,%02x,%d: %08x (%08x)\n",
11470 + bus->number, devfn, where, size, *value,
11471 + __raw_readl(KS8695_PCI_VA + KS8695_PBCD));
11474 + return PCIBIOS_SUCCESSFUL;
11477 +static int ks8695_pci_writeconfig(struct pci_bus *bus,
11478 + unsigned int devfn, int where, int size, u32 value)
11480 + unsigned long tmp;
11482 + if (pci_cfg_dbg) {
11483 + printk("write: %d,%08x,%02x,%d: %08x\n",
11484 + bus->number, devfn, where, size, value);
11487 + ks8695_pci_setupconfig(bus->number, devfn, where);
11489 + switch (size) {
11490 + case 4:
11491 + __raw_writel(value, KS8695_PCI_VA + KS8695_PBCD);
11492 + break;
11493 + case 2:
11494 + tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD);
11495 + tmp &= ~(0xffff << ((where & 2) * 8));
11496 + tmp |= value << ((where & 2) * 8);
11498 + __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD);
11499 + break;
11500 + case 1:
11501 + tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD);
11502 + tmp &= ~(0xff << ((where & 3) * 8));
11503 + tmp |= value << ((where & 3) * 8);
11505 + __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD);
11506 + break;
11509 + return PCIBIOS_SUCCESSFUL;
11512 +static void ks8695_local_writeconfig(int where, u32 value)
11514 + ks8695_pci_setupconfig(0, 0, where);
11515 + __raw_writel(value, KS8695_PCI_VA + KS8695_PBCD);
11518 +static struct pci_ops ks8695_pci_ops = {
11519 + .read = ks8695_pci_readconfig,
11520 + .write = ks8695_pci_writeconfig,
11523 +static struct pci_bus *ks8695_pci_scan_bus(int nr, struct pci_sys_data *sys)
11525 + return pci_scan_bus(sys->busnr, &ks8695_pci_ops, sys);
11528 +static struct resource pci_mem = {
11529 + .name = "PCI Memory space",
11530 + .start = KS8695_PCIMEM_PA,
11531 + .end = KS8695_PCIMEM_PA + (KS8695_PCIMEM_SIZE - 1),
11532 + .flags = IORESOURCE_MEM,
11535 +static struct resource pci_io = {
11536 + .name = "PCI IO space",
11537 + .start = KS8695_PCIIO_PA,
11538 + .end = KS8695_PCIIO_PA + (KS8695_PCIIO_SIZE - 1),
11539 + .flags = IORESOURCE_IO,
11542 +static int __init ks8695_pci_setup(int nr, struct pci_sys_data *sys)
11544 + if (nr > 0)
11545 + return 0;
11547 + request_resource(&iomem_resource, &pci_mem);
11548 + request_resource(&ioport_resource, &pci_io);
11550 + sys->resource[0] = &pci_io;
11551 + sys->resource[1] = &pci_mem;
11552 + sys->resource[2] = NULL;
11554 + /* Assign and enable processor bridge */
11555 + ks8695_local_writeconfig(PCI_BASE_ADDRESS_0, KS8695_PCIMEM_PA);
11557 + /* Enable bus-master & Memory Space access */
11558 + ks8695_local_writeconfig(PCI_COMMAND, PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY);
11560 + /* Set cache-line size & latency. */
11561 + ks8695_local_writeconfig(PCI_CACHE_LINE_SIZE, (32 << 8) | (L1_CACHE_BYTES / sizeof(u32)));
11563 + /* Reserve PCI memory space for PCI-AHB resources */
11564 + if (!request_mem_region(KS8695_PCIMEM_PA, SZ_64M, "PCI-AHB Bridge")) {
11565 + printk(KERN_ERR "Cannot allocate PCI-AHB Bridge memory.\n");
11566 + return -EBUSY;
11569 + return 1;
11572 +static inline unsigned int size_mask(unsigned long size)
11574 + return (~size) + 1;
11577 +static int ks8695_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
11579 + unsigned long pc = instruction_pointer(regs);
11580 + unsigned long instr = *(unsigned long *)pc;
11581 + unsigned long cmdstat;
11583 + cmdstat = __raw_readl(KS8695_PCI_VA + KS8695_CRCFCS);
11585 + printk(KERN_ERR "PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx [%s%s%s%s%s]\n",
11586 + addr, fsr, regs->ARM_pc, regs->ARM_lr,
11587 + cmdstat & (PCI_STATUS_SIG_TARGET_ABORT << 16) ? "GenTarget" : " ",
11588 + cmdstat & (PCI_STATUS_REC_TARGET_ABORT << 16) ? "RecvTarget" : " ",
11589 + cmdstat & (PCI_STATUS_REC_MASTER_ABORT << 16) ? "MasterAbort" : " ",
11590 + cmdstat & (PCI_STATUS_SIG_SYSTEM_ERROR << 16) ? "SysError" : " ",
11591 + cmdstat & (PCI_STATUS_DETECTED_PARITY << 16) ? "Parity" : " "
11592 + );
11594 + __raw_writel(cmdstat, KS8695_PCI_VA + KS8695_CRCFCS);
11596 + /*
11597 + * If the instruction being executed was a read,
11598 + * make it look like it read all-ones.
11599 + */
11600 + if ((instr & 0x0c100000) == 0x04100000) {
11601 + int reg = (instr >> 12) & 15;
11602 + unsigned long val;
11604 + if (instr & 0x00400000)
11605 + val = 255;
11606 + else
11607 + val = -1;
11609 + regs->uregs[reg] = val;
11610 + regs->ARM_pc += 4;
11611 + return 0;
11614 + if ((instr & 0x0e100090) == 0x00100090) {
11615 + int reg = (instr >> 12) & 15;
11617 + regs->uregs[reg] = -1;
11618 + regs->ARM_pc += 4;
11619 + return 0;
11622 + return 1;
11625 +static void __init ks8695_pci_preinit(void)
11627 + /* stage 1 initialization, subid, subdevice = 0x0001 */
11628 + __raw_writel(0x00010001, KS8695_PCI_VA + KS8695_CRCSID);
11630 + /* stage 2 initialization */
11631 + /* prefetch limits with 16 words, retry enable */
11632 + __raw_writel(0x40000000, KS8695_PCI_VA + KS8695_PBCS);
11634 + /* configure memory mapping */
11635 + __raw_writel(KS8695_PCIMEM_PA, KS8695_PCI_VA + KS8695_PMBA);
11636 + __raw_writel(size_mask(KS8695_PCIMEM_SIZE), KS8695_PCI_VA + KS8695_PMBAM);
11637 + __raw_writel(KS8695_PCIMEM_PA, KS8695_PCI_VA + KS8695_PMBAT);
11638 + __raw_writel(0, KS8695_PCI_VA + KS8695_PMBAC);
11640 + /* configure IO mapping */
11641 + __raw_writel(KS8695_PCIIO_PA, KS8695_PCI_VA + KS8695_PIOBA);
11642 + __raw_writel(size_mask(KS8695_PCIIO_SIZE), KS8695_PCI_VA + KS8695_PIOBAM);
11643 + __raw_writel(KS8695_PCIIO_PA, KS8695_PCI_VA + KS8695_PIOBAT);
11644 + __raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC);
11646 + /* hook in fault handlers */
11647 + hook_fault_code(8, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch");
11648 + hook_fault_code(10, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch");
11651 +static void ks8695_show_pciregs(void)
11653 + if (!pci_dbg)
11654 + return;
11656 + printk(KERN_INFO "PCI: CRCFID = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFID));
11657 + printk(KERN_INFO "PCI: CRCFCS = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFCS));
11658 + printk(KERN_INFO "PCI: CRCFRV = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFRV));
11659 + printk(KERN_INFO "PCI: CRCFLT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFLT));
11660 + printk(KERN_INFO "PCI: CRCBMA = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCBMA));
11661 + printk(KERN_INFO "PCI: CRCSID = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCSID));
11662 + printk(KERN_INFO "PCI: CRCFIT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFIT));
11664 + printk(KERN_INFO "PCI: PBM = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PBM));
11665 + printk(KERN_INFO "PCI: PBCS = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PBCS));
11667 + printk(KERN_INFO "PCI: PMBA = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBA));
11668 + printk(KERN_INFO "PCI: PMBAC = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBAC));
11669 + printk(KERN_INFO "PCI: PMBAM = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBAM));
11670 + printk(KERN_INFO "PCI: PMBAT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBAT));
11672 + printk(KERN_INFO "PCI: PIOBA = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBA));
11673 + printk(KERN_INFO "PCI: PIOBAC = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBAC));
11674 + printk(KERN_INFO "PCI: PIOBAM = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBAM));
11675 + printk(KERN_INFO "PCI: PIOBAT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBAT));
11679 +static struct hw_pci ks8695_pci __initdata = {
11680 + .nr_controllers = 1,
11681 + .preinit = ks8695_pci_preinit,
11682 + .setup = ks8695_pci_setup,
11683 + .scan = ks8695_pci_scan_bus,
11684 + .postinit = NULL,
11685 + .swizzle = pci_std_swizzle,
11686 + .map_irq = NULL,
11689 +void __init ks8695_init_pci(struct ks8695_pci_cfg *cfg)
11691 + if (__raw_readl(KS8695_PCI_VA + KS8695_CRCFRV) & CFRV_GUEST) {
11692 + printk("PCI: KS8695 in guest mode, not initialising\n");
11693 + return;
11696 + printk(KERN_INFO "PCI: Initialising\n");
11697 + ks8695_show_pciregs();
11699 + /* set Mode */
11700 + __raw_writel(cfg->mode << 29, KS8695_PCI_VA + KS8695_PBM);
11702 + ks8695_pci.map_irq = cfg->map_irq; /* board-specific map_irq method */
11704 + pci_common_init(&ks8695_pci);
11706 diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
11707 index 0a9a5e7..1f10f00 100644
11708 --- a/arch/arm/tools/mach-types
11709 +++ b/arch/arm/tools/mach-types
11710 @@ -12,7 +12,7 @@
11712 # http://www.arm.linux.org.uk/developer/machines/?action=new
11714 -# Last update: Fri May 11 19:53:41 2007
11715 +# Last update: Mon Nov 12 14:39:37 2007
11717 # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
11719 @@ -266,7 +266,7 @@ stork_egg ARCH_STORK_EGG STORK_EGG 248
11720 wismo SA1100_WISMO WISMO 249
11721 ezlinx ARCH_EZLINX EZLINX 250
11722 at91rm9200 ARCH_AT91RM9200 AT91RM9200 251
11723 -orion ARCH_ORION ORION 252
11724 +adtech_orion ARCH_ADTECH_ORION ADTECH_ORION 252
11725 neptune ARCH_NEPTUNE NEPTUNE 253
11726 hackkit SA1100_HACKKIT HACKKIT 254
11727 pxa_wins30 ARCH_PXA_WINS30 PXA_WINS30 255
11728 @@ -661,7 +661,7 @@ a9200ec MACH_A9200EC A9200EC 645
11729 pnx0105 MACH_PNX0105 PNX0105 646
11730 adcpoecpu MACH_ADCPOECPU ADCPOECPU 647
11731 csb637 MACH_CSB637 CSB637 648
11732 -ml69q6203 MACH_ML69Q6203 ML69Q6203 649
11733 +ml675050 MACH_ML69Q6203 ML69Q6203 649
11734 mb9200 MACH_MB9200 MB9200 650
11735 kulun MACH_KULUN KULUN 651
11736 snapper MACH_SNAPPER SNAPPER 652
11737 @@ -953,7 +953,7 @@ fred_jack MACH_FRED_JACK FRED_JACK 939
11738 ttg_color1 MACH_TTG_COLOR1 TTG_COLOR1 940
11739 nxeb500hmi MACH_NXEB500HMI NXEB500HMI 941
11740 netdcu8 MACH_NETDCU8 NETDCU8 942
11741 -ml675050_cpu_boa MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943
11742 +ml675050_dev_sys MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943
11743 ng_fvx538 MACH_NG_FVX538 NG_FVX538 944
11744 ng_fvs338 MACH_NG_FVS338 NG_FVS338 945
11745 pnx4103 MACH_PNX4103 PNX4103 946
11746 @@ -1148,7 +1148,7 @@ aidx270 MACH_AIDX270 AIDX270 1134
11747 rema MACH_REMA REMA 1135
11748 bps1000 MACH_BPS1000 BPS1000 1136
11749 hw90350 MACH_HW90350 HW90350 1137
11750 -omap_sdp3430 MACH_OMAP_SDP3430 OMAP_SDP3430 1138
11751 +omap_3430sdp MACH_OMAP_3430SDP OMAP_3430SDP 1138
11752 bluetouch MACH_BLUETOUCH BLUETOUCH 1139
11753 vstms MACH_VSTMS VSTMS 1140
11754 xsbase270 MACH_XSBASE270 XSBASE270 1141
11755 @@ -1214,7 +1214,7 @@ osstbox MACH_OSSTBOX OSSTBOX 1203
11756 kbat9261 MACH_KBAT9261 KBAT9261 1204
11757 ct1100 MACH_CT1100 CT1100 1205
11758 akcppxa MACH_AKCPPXA AKCPPXA 1206
11759 -zevio_1020 MACH_ZEVIO_1020 ZEVIO_1020 1207
11760 +ochaya1020 MACH_OCHAYA1020 OCHAYA1020 1207
11761 hitrack MACH_HITRACK HITRACK 1208
11762 syme1 MACH_SYME1 SYME1 1209
11763 syhl1 MACH_SYHL1 SYHL1 1210
11764 @@ -1299,7 +1299,7 @@ xp179 MACH_XP179 XP179 1290
11765 h4300 MACH_H4300 H4300 1291
11766 goramo_mlr MACH_GORAMO_MLR GORAMO_MLR 1292
11767 mxc30020evb MACH_MXC30020EVB MXC30020EVB 1293
11768 -adsbitsymx MACH_ADSBITSIMX ADSBITSIMX 1294
11769 +adsbitsyg5 MACH_ADSBITSIMX ADSBITSIMX 1294
11770 adsportalplus MACH_ADSPORTALPLUS ADSPORTALPLUS 1295
11771 mmsp2plus MACH_MMSP2PLUS MMSP2PLUS 1296
11772 em_x270 MACH_EM_X270 EM_X270 1297
11773 @@ -1367,3 +1367,189 @@ db88f5281 MACH_DB88F5281 DB88F5281 1358
11774 csb726 MACH_CSB726 CSB726 1359
11775 tik27 MACH_TIK27 TIK27 1360
11776 mx_uc7420 MACH_MX_UC7420 MX_UC7420 1361
11777 +rirm3 MACH_RIRM3 RIRM3 1362
11778 +pelco_odyssey MACH_PELCO_ODYSSEY PELCO_ODYSSEY 1363
11779 +arm920t MACH_ARM920T ARM920T 1364
11780 +add_abox MACH_ADD_ABOX ADD_ABOX 1365
11781 +add_tpid MACH_ADD_TPID ADD_TPID 1366
11782 +minicheck MACH_MINICHECK MINICHECK 1367
11783 +idam MACH_IDAM IDAM 1368
11784 +mario_mx MACH_MARIO_MX MARIO_MX 1369
11785 +vi1888 MACH_VI1888 VI1888 1370
11786 +zr4230 MACH_ZR4230 ZR4230 1371
11787 +t1_ix_blue MACH_T1_IX_BLUE T1_IX_BLUE 1372
11788 +syhq2 MACH_SYHQ2 SYHQ2 1373
11789 +computime_r3 MACH_COMPUTIME_R3 COMPUTIME_R3 1374
11790 +oratis MACH_ORATIS ORATIS 1375
11791 +mikko MACH_MIKKO MIKKO 1376
11792 +holon MACH_HOLON HOLON 1377
11793 +olip8 MACH_OLIP8 OLIP8 1378
11794 +ghi270hg MACH_GHI270HG GHI270HG 1379
11795 +davinci_dm6467_evm MACH_DAVINCI_DM6467_EVM DAVINCI_DM6467_EVM 1380
11796 +davinci_dm355_evm MACH_DAVINCI_DM350_EVM DAVINCI_DM350_EVM 1381
11797 +ocearm MACH_OCEARMTEST OCEARMTEST 1382
11798 +blackriver MACH_BLACKRIVER BLACKRIVER 1383
11799 +sandgate_wp MACH_SANDGATEWP SANDGATEWP 1384
11800 +cdotbwsg MACH_CDOTBWSG CDOTBWSG 1385
11801 +quark963 MACH_QUARK963 QUARK963 1386
11802 +csb735 MACH_CSB735 CSB735 1387
11803 +littleton MACH_LITTLETON LITTLETON 1388
11804 +mio_p550 MACH_MIO_P550 MIO_P550 1389
11805 +motion2440 MACH_MOTION2440 MOTION2440 1390
11806 +imm500 MACH_IMM500 IMM500 1391
11807 +homematic MACH_HOMEMATIC HOMEMATIC 1392
11808 +ermine MACH_ERMINE ERMINE 1393
11809 +kb9202b MACH_KB9202B KB9202B 1394
11810 +hs1xx MACH_HS1XX HS1XX 1395
11811 +studentmate2440 MACH_STUDENTMATE2440 STUDENTMATE2440 1396
11812 +arvoo_l1_z1 MACH_ARVOO_L1_Z1 ARVOO_L1_Z1 1397
11813 +dep2410k MACH_DEP2410K DEP2410K 1398
11814 +xxsvideo MACH_XXSVIDEO XXSVIDEO 1399
11815 +im4004 MACH_IM4004 IM4004 1400
11816 +ochaya1050 MACH_OCHAYA1050 OCHAYA1050 1401
11817 +lep9261 MACH_LEP9261 LEP9261 1402
11818 +svenmeb MACH_SVENMEB SVENMEB 1403
11819 +fortunet2ne MACH_FORTUNET2NE FORTUNET2NE 1404
11820 +omap2 MACH_OMAP2 OMAP2 1405
11821 +nxhx MACH_NXHX NXHX 1406
11822 +realview_pb11mp MACH_REALVIEW_PB11MP REALVIEW_PB11MP 1407
11823 +ids500 MACH_IDS500 IDS500 1408
11824 +ors_n725 MACH_ORS_N725 ORS_N725 1409
11825 +hsdarm MACH_HSDARM HSDARM 1410
11826 +sha_pon003 MACH_SHA_PON003 SHA_PON003 1411
11827 +sha_pon004 MACH_SHA_PON004 SHA_PON004 1412
11828 +sha_pon007 MACH_SHA_PON007 SHA_PON007 1413
11829 +sha_pon011 MACH_SHA_PON011 SHA_PON011 1414
11830 +h6042 MACH_H6042 H6042 1415
11831 +h6043 MACH_H6043 H6043 1416
11832 +looxc550 MACH_LOOXC550 LOOXC550 1417
11833 +cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418
11834 +app3xx MACH_APP3XX APP3XX 1419
11835 +sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420
11836 +xscale_palmt700p MACH_XSCALE_PALMT700P XSCALE_PALMT700P 1421
11837 +xscale_palmt700w MACH_XSCALE_PALMT700W XSCALE_PALMT700W 1422
11838 +xscale_palmt750 MACH_XSCALE_PALMT750 XSCALE_PALMT750 1423
11839 +xscale_palmt755p MACH_XSCALE_PALMT755P XSCALE_PALMT755P 1424
11840 +ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425
11841 +sarge MACH_SARGE SARGE 1426
11842 +a696 MACH_A696 A696 1427
11843 +turtle1916 MACH_TURTLE TURTLE 1428
11844 +pxa1916 MACH_MY5910TURTLE MY5910TURTLE 1429
11845 +mx27_3ds MACH_MX27_3DS MX27_3DS 1430
11846 +bishop MACH_BISHOP BISHOP 1431
11847 +pxx MACH_PXX PXX 1432
11848 +redwood MACH_REDWOOD REDWOOD 1433
11849 +dummy MACH_OMAP2430DLP OMAP2430DLP 1434
11850 +dummy_board MACH_OMAP2430OSK OMAP2430OSK 1435
11851 +omap_2430dlp MACH_OMAP_2430DLP OMAP_2430DLP 1436
11852 +omap_2430osk MACH_OMAP_2430OSK OMAP_2430OSK 1437
11853 +sardine MACH_SARDINE SARDINE 1438
11854 +halibut MACH_HALIBUT HALIBUT 1439
11855 +trout MACH_TROUT TROUT 1440
11856 +goldfish MACH_GOLDFISH GOLDFISH 1441
11857 +gesbc2440 MACH_GESBC2440 GESBC2440 1442
11858 +nomad MACH_NOMAD NOMAD 1443
11859 +rosalind MACH_ROSALIND ROSALIND 1444
11860 +cc9p9215 MACH_CC9P9215 CC9P9215 1445
11861 +cc9p9210 MACH_CC9P9210 CC9P9210 1446
11862 +cc9p9215js MACH_CC9P9215JS CC9P9215JS 1447
11863 +cc9p9210js MACH_CC9P9210JS CC9P9210JS 1448
11864 +nasffe MACH_NASFFE NASFFE 1449
11865 +tn2x0bd MACH_TN2X0BD TN2X0BD 1450
11866 +gwmpxa MACH_GWMPXA GWMPXA 1451
11867 +exyplus MACH_EXYPLUS EXYPLUS 1452
11868 +jadoo21 MACH_JADOO21 JADOO21 1453
11869 +looxn560 MACH_LOOXN560 LOOXN560 1454
11870 +bonsai MACH_BONSAI BONSAI 1455
11871 +adsmilgato MACH_ADSMILGATO ADSMILGATO 1456
11872 +gba MACH_GBA GBA 1457
11873 +h6044 MACH_H6044 H6044 1458
11874 +app MACH_APP APP 1459
11875 +tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460
11876 +herald MACH_HERMES HERMES 1461
11877 +artemis MACH_ARTEMIS ARTEMIS 1462
11878 +htctitan MACH_HTCTITAN HTCTITAN 1463
11879 +qranium MACH_QRANIUM QRANIUM 1464
11880 +add_wsc2 MACH_ADD_WSC2 ADD_WSC2 1465
11881 +add_medinet MACH_ADD_MEDINET ADD_MEDINET 1466
11882 +bboard MACH_BBOARD BBOARD 1467
11883 +cambria MACH_CAMBRIA CAMBRIA 1468
11884 +mt7xxx MACH_MT7XXX MT7XXX 1469
11885 +matrix512 MACH_MATRIX512 MATRIX512 1470
11886 +matrix522 MACH_MATRIX522 MATRIX522 1471
11887 +ipac5010 MACH_IPAC5010 IPAC5010 1472
11888 +sakura MACH_SAKURA SAKURA 1473
11889 +grocx MACH_GROCX GROCX 1474
11890 +pm9263 MACH_PM9263 PM9263 1475
11891 +sim_one MACH_SIM_ONE SIM_ONE 1476
11892 +acq132 MACH_ACQ132 ACQ132 1477
11893 +datr MACH_DATR DATR 1478
11894 +actux1 MACH_ACTUX1 ACTUX1 1479
11895 +actux2 MACH_ACTUX2 ACTUX2 1480
11896 +actux3 MACH_ACTUX3 ACTUX3 1481
11897 +flexit MACH_FLEXIT FLEXIT 1482
11898 +bh2x0bd MACH_BH2X0BD BH2X0BD 1483
11899 +atb2002 MACH_ATB2002 ATB2002 1484
11900 +xenon MACH_XENON XENON 1485
11901 +fm607 MACH_FM607 FM607 1486
11902 +matrix514 MACH_MATRIX514 MATRIX514 1487
11903 +matrix524 MACH_MATRIX524 MATRIX524 1488
11904 +inpod MACH_INPOD INPOD 1489
11905 +jive MACH_JIVE JIVE 1490
11906 +tll_mx21 MACH_TLL_MX21 TLL_MX21 1491
11907 +sbc2800 MACH_SBC2800 SBC2800 1492
11908 +cc7ucamry MACH_CC7UCAMRY CC7UCAMRY 1493
11909 +ubisys_p9_sc15 MACH_UBISYS_P9_SC15 UBISYS_P9_SC15 1494
11910 +ubisys_p9_ssc2d10 MACH_UBISYS_P9_SSC2D10 UBISYS_P9_SSC2D10 1495
11911 +ubisys_p9_rcu3 MACH_UBISYS_P9_RCU3 UBISYS_P9_RCU3 1496
11912 +aml_m8000 MACH_AML_M8000 AML_M8000 1497
11913 +snapper_270 MACH_SNAPPER_270 SNAPPER_270 1498
11914 +omap_bbx MACH_OMAP_BBX OMAP_BBX 1499
11915 +ucn2410 MACH_UCN2410 UCN2410 1500
11916 +sam9_l9260 MACH_SAM9_L9260 SAM9_L9260 1501
11917 +eti_c2 MACH_ETI_C2 ETI_C2 1502
11918 +avalanche MACH_AVALANCHE AVALANCHE 1503
11919 +realview_pb1176 MACH_REALVIEW_PB1176 REALVIEW_PB1176 1504
11920 +dp1500 MACH_DP1500 DP1500 1505
11921 +apple_iphone MACH_APPLE_IPHONE APPLE_IPHONE 1506
11922 +yl9200 MACH_YL9200 YL9200 1507
11923 +rd88f5182 MACH_RD88F5182 RD88F5182 1508
11924 +kurobox_pro MACH_KUROBOX_PRO KUROBOX_PRO 1509
11925 +se_poet MACH_SE_POET SE_POET 1510
11926 +mx31_3ds MACH_MX31_3DS MX31_3DS 1511
11927 +r270 MACH_R270 R270 1512
11928 +armour21 MACH_ARMOUR21 ARMOUR21 1513
11929 +dt2 MACH_DT2 DT2 1514
11930 +vt4 MACH_VT4 VT4 1515
11931 +tyco320 MACH_TYCO320 TYCO320 1516
11932 +adma MACH_ADMA ADMA 1517
11933 +wp188 MACH_WP188 WP188 1518
11934 +corsica MACH_CORSICA CORSICA 1519
11935 +bigeye MACH_BIGEYE BIGEYE 1520
11936 +machine_is_arm2410 MACH_MACHINE_IS_ARM2410 MACHINE_IS_ARM2410 1521
11937 +tll5000 MACH_TLL5000 TLL5000 1522
11938 +hni270 MACH_HNI_X270 HNI_X270 1523
11939 +qong MACH_QONG QONG 1524
11940 +tcompact MACH_TCOMPACT TCOMPACT 1525
11941 +puma5 MACH_PUMA5 PUMA5 1526
11942 +elara MACH_ELARA ELARA 1527
11943 +ellington MACH_ELLINGTON ELLINGTON 1528
11944 +xda_atom MACH_XDA_ATOM XDA_ATOM 1529
11945 +energizer2 MACH_ENERGIZER2 ENERGIZER2 1530
11946 +odin MACH_ODIN ODIN 1531
11947 +actux4 MACH_ACTUX4 ACTUX4 1532
11948 +esl_omap MACH_ESL_OMAP ESL_OMAP 1533
11949 +omap2evm MACH_OMAP2EVM OMAP2EVM 1534
11950 +omap3evm MACH_OMAP3EVM OMAP3EVM 1535
11951 +add_pcu57 MACH_ADD_PCU57 ADD_PCU57 1536
11952 +monaco MACH_MONACO MONACO 1537
11953 +levante MACH_LEVANTE LEVANTE 1538
11954 +tmxipx425 MACH_TMXIPX425 TMXIPX425 1539
11955 +leep MACH_LEEP LEEP 1540
11956 +raad MACH_RAAD RAAD 1541
11957 +dns323 MACH_DNS323 DNS323 1542
11958 +ap1000 MACH_AP1000 AP1000 1543
11959 +a9sam6432 MACH_A9SAM6432 A9SAM6432 1544
11960 +shiny MACH_SHINY SHINY 1545
11961 +omap3_beagle MACH_OMAP3_BEAGLE OMAP3_BEAGLE 1546
11962 +csr_bdb2 MACH_CSR_BDB2 CSR_BDB2 1547
11963 diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
11964 index ef1ed5d..99be2d0 100644
11965 --- a/drivers/char/Kconfig
11966 +++ b/drivers/char/Kconfig
11967 @@ -1040,5 +1040,21 @@ config DEVPORT
11969 source "drivers/s390/char/Kconfig"
11971 +config AT91_SPI
11972 + bool "SPI driver (legacy) for AT91RM9200 processors"
11973 + depends on ARCH_AT91RM9200
11974 + default y
11975 + help
11976 + The SPI driver gives access to this serial bus on the AT91RM9200
11977 + processor.
11979 +config AT91_SPIDEV
11980 + bool "SPI device interface (legacy) for AT91RM9200 processors"
11981 + depends on ARCH_AT91RM9200 && AT91_SPI
11982 + default n
11983 + help
11984 + The SPI driver gives user mode access to this serial
11985 + bus on the AT91RM9200 processor.
11987 endmenu
11989 diff --git a/drivers/char/Makefile b/drivers/char/Makefile
11990 index 07304d5..359384c 100644
11991 --- a/drivers/char/Makefile
11992 +++ b/drivers/char/Makefile
11993 @@ -96,6 +96,8 @@ obj-$(CONFIG_CS5535_GPIO) += cs5535_gpio.o
11994 obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o
11995 obj-$(CONFIG_GPIO_TB0219) += tb0219.o
11996 obj-$(CONFIG_TELCLOCK) += tlclk.o
11997 +obj-$(CONFIG_AT91_SPI) += at91_spi.o
11998 +obj-$(CONFIG_AT91_SPIDEV) += at91_spidev.o
12000 obj-$(CONFIG_MWAVE) += mwave/
12001 obj-$(CONFIG_AGP) += agp/
12002 diff --git a/drivers/char/at91_spi.c b/drivers/char/at91_spi.c
12003 new file mode 100644
12004 index 0000000..08dec81
12005 --- /dev/null
12006 +++ b/drivers/char/at91_spi.c
12007 @@ -0,0 +1,336 @@
12009 + * Serial Peripheral Interface (SPI) driver for the Atmel AT91RM9200 (Thunder)
12011 + * Copyright (C) SAN People (Pty) Ltd
12013 + * This program is free software; you can redistribute it and/or
12014 + * modify it under the terms of the GNU General Public License
12015 + * as published by the Free Software Foundation; either version
12016 + * 2 of the License, or (at your option) any later version.
12017 + */
12019 +#include <linux/init.h>
12020 +#include <linux/dma-mapping.h>
12021 +#include <linux/module.h>
12022 +#include <linux/sched.h>
12023 +#include <linux/completion.h>
12024 +#include <linux/interrupt.h>
12025 +#include <linux/clk.h>
12026 +#include <linux/platform_device.h>
12027 +#include <linux/atmel_pdc.h>
12028 +#include <asm/io.h>
12029 +#include <asm/semaphore.h>
12031 +#include <asm/arch/at91_spi.h>
12032 +#include <asm/arch/board.h>
12033 +#include <asm/arch/spi.h>
12035 +#undef DEBUG_SPI
12037 +static struct spi_local spi_dev[NR_SPI_DEVICES]; /* state of the SPI devices */
12038 +static int spi_enabled = 0;
12039 +static struct semaphore spi_lock; /* protect access to SPI bus */
12040 +static int current_device = -1; /* currently selected SPI device */
12041 +static struct clk *spi_clk; /* SPI clock */
12042 +static void __iomem *spi_base; /* SPI peripheral base-address */
12044 +DECLARE_COMPLETION(transfer_complete);
12047 +#define at91_spi_read(reg) __raw_readl(spi_base + (reg))
12048 +#define at91_spi_write(reg, val) __raw_writel((val), spi_base + (reg))
12051 +/* ......................................................................... */
12054 + * Access and enable the SPI bus.
12055 + * This MUST be called before any transfers are performed.
12056 + */
12057 +void spi_access_bus(short device)
12059 + /* Ensure that requested device is valid */
12060 + if ((device < 0) || (device >= NR_SPI_DEVICES))
12061 + panic("at91_spi: spi_access_bus called with invalid device");
12063 + if (spi_enabled == 0) {
12064 + clk_enable(spi_clk); /* Enable Peripheral clock */
12065 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
12066 +#ifdef DEBUG_SPI
12067 + printk("SPI on\n");
12068 +#endif
12070 + spi_enabled++;
12072 + /* Lock the SPI bus */
12073 + down(&spi_lock);
12074 + current_device = device;
12076 + /* Configure SPI bus for device */
12077 + at91_spi_write(AT91_SPI_MR, AT91_SPI_MSTR | AT91_SPI_MODFDIS | (spi_dev[device].pcs << 16));
12081 + * Relinquish control of the SPI bus.
12082 + */
12083 +void spi_release_bus(short device)
12085 + if (device != current_device)
12086 + panic("at91_spi: spi_release called with invalid device");
12088 + /* Release the SPI bus */
12089 + current_device = -1;
12090 + up(&spi_lock);
12092 + spi_enabled--;
12093 + if (spi_enabled == 0) {
12094 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIDIS); /* Disable SPI */
12095 + clk_disable(spi_clk); /* Disable Peripheral clock */
12096 +#ifdef DEBUG_SPI
12097 + printk("SPI off\n");
12098 +#endif
12103 + * Perform a data transfer over the SPI bus
12104 + */
12105 +int spi_transfer(struct spi_transfer_list* list)
12107 + struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
12108 + int tx_size;
12110 + if (!list)
12111 + panic("at91_spi: spi_transfer called with NULL transfer list");
12112 + if (current_device == -1)
12113 + panic("at91_spi: spi_transfer called without acquiring bus");
12115 +#ifdef DEBUG_SPI
12116 + printk("SPI transfer start [%i]\n", list->nr_transfers);
12117 +#endif
12119 + /* If we are in 16-bit mode, we need to modify what we pass to the PDC */
12120 + tx_size = (at91_spi_read(AT91_SPI_CSR(current_device)) & AT91_SPI_BITS_16) ? 2 : 1;
12122 + /* Store transfer list */
12123 + device->xfers = list;
12124 + list->curr = 0;
12126 + /* Assume there must be at least one transfer */
12127 + device->tx = dma_map_single(NULL, list->tx[0], list->txlen[0], DMA_TO_DEVICE);
12128 + device->rx = dma_map_single(NULL, list->rx[0], list->rxlen[0], DMA_FROM_DEVICE);
12130 + /* Program PDC registers */
12131 + at91_spi_write(ATMEL_PDC_TPR, device->tx);
12132 + at91_spi_write(ATMEL_PDC_RPR, device->rx);
12133 + at91_spi_write(ATMEL_PDC_TCR, list->txlen[0] / tx_size);
12134 + at91_spi_write(ATMEL_PDC_RCR, list->rxlen[0] / tx_size);
12136 + /* Is there a second transfer? */
12137 + if (list->nr_transfers > 1) {
12138 + device->txnext = dma_map_single(NULL, list->tx[1], list->txlen[1], DMA_TO_DEVICE);
12139 + device->rxnext = dma_map_single(NULL, list->rx[1], list->rxlen[1], DMA_FROM_DEVICE);
12141 + /* Program Next PDC registers */
12142 + at91_spi_write(ATMEL_PDC_TNPR, device->txnext);
12143 + at91_spi_write(ATMEL_PDC_RNPR, device->rxnext);
12144 + at91_spi_write(ATMEL_PDC_TNCR, list->txlen[1] / tx_size);
12145 + at91_spi_write(ATMEL_PDC_RNCR, list->rxlen[1] / tx_size);
12147 + else {
12148 + device->txnext = 0;
12149 + device->rxnext = 0;
12150 + at91_spi_write(ATMEL_PDC_TNCR, 0);
12151 + at91_spi_write(ATMEL_PDC_RNCR, 0);
12154 + // TODO: If we are doing consecutive transfers (at high speed, or
12155 + // small buffers), then it might be worth modifying the 'Delay between
12156 + // Consecutive Transfers' in the CSR registers.
12157 + // This is an issue if we cannot chain the next buffer fast enough
12158 + // in the interrupt handler.
12160 + /* Enable transmitter and receiver */
12161 + at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN | ATMEL_PDC_TXTEN);
12163 + at91_spi_write(AT91_SPI_IER, AT91_SPI_ENDRX); /* enable buffer complete interrupt */
12164 + wait_for_completion(&transfer_complete);
12166 +#ifdef DEBUG_SPI
12167 + printk("SPI transfer end\n");
12168 +#endif
12170 + return 0;
12173 +/* ......................................................................... */
12176 + * Handle interrupts from the SPI controller.
12177 + */
12178 +static irqreturn_t at91spi_interrupt(int irq, void *dev_id)
12180 + unsigned int status;
12181 + struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
12182 + struct spi_transfer_list *list = device->xfers;
12184 +#ifdef DEBUG_SPI
12185 + printk("SPI interrupt %i\n", current_device);
12186 +#endif
12188 + if (!list)
12189 + panic("at91_spi: spi_interrupt with a NULL transfer list");
12191 + status = at91_spi_read(AT91_SPI_SR) & at91_spi_read(AT91_SPI_IMR); /* read status */
12193 + dma_unmap_single(NULL, device->tx, list->txlen[list->curr], DMA_TO_DEVICE);
12194 + dma_unmap_single(NULL, device->rx, list->rxlen[list->curr], DMA_FROM_DEVICE);
12196 + device->tx = device->txnext; /* move next transfer to current transfer */
12197 + device->rx = device->rxnext;
12199 + list->curr = list->curr + 1;
12200 + if (list->curr == list->nr_transfers) { /* all transfers complete */
12201 + at91_spi_write(AT91_SPI_IDR, AT91_SPI_ENDRX); /* disable interrupt */
12203 + /* Disable transmitter and receiver */
12204 + at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
12206 + device->xfers = NULL;
12207 + complete(&transfer_complete);
12209 + else if (list->curr+1 == list->nr_transfers) { /* no more next transfers */
12210 + device->txnext = 0;
12211 + device->rxnext = 0;
12212 + at91_spi_write(ATMEL_PDC_TNCR, 0);
12213 + at91_spi_write(ATMEL_PDC_RNCR, 0);
12215 + else {
12216 + int i = (list->curr)+1;
12218 + /* If we are in 16-bit mode, we need to modify what we pass to the PDC */
12219 + int tx_size = (at91_spi_read(AT91_SPI_CSR(current_device)) & AT91_SPI_BITS_16) ? 2 : 1;
12221 + device->txnext = dma_map_single(NULL, list->tx[i], list->txlen[i], DMA_TO_DEVICE);
12222 + device->rxnext = dma_map_single(NULL, list->rx[i], list->rxlen[i], DMA_FROM_DEVICE);
12223 + at91_spi_write(ATMEL_PDC_TNPR, device->txnext);
12224 + at91_spi_write(ATMEL_PDC_RNPR, device->rxnext);
12225 + at91_spi_write(ATMEL_PDC_TNCR, list->txlen[i] / tx_size);
12226 + at91_spi_write(ATMEL_PDC_RNCR, list->rxlen[i] / tx_size);
12228 + return IRQ_HANDLED;
12231 +/* ......................................................................... */
12234 + * Initialize the SPI controller
12235 + */
12236 +static int __init at91spi_probe(struct platform_device *pdev)
12238 + int i;
12239 + unsigned long scbr;
12240 + struct resource *res;
12242 + init_MUTEX(&spi_lock);
12244 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
12245 + if (!res)
12246 + return -ENXIO;
12248 + if (!request_mem_region(res->start, res->end - res->start + 1, "at91_spi"))
12249 + return -EBUSY;
12251 + spi_base = ioremap(res->start, res->end - res->start + 1);
12252 + if (!spi_base) {
12253 + release_mem_region(res->start, res->end - res->start + 1);
12254 + return -ENOMEM;
12257 + spi_clk = clk_get(NULL, "spi_clk");
12258 + if (IS_ERR(spi_clk)) {
12259 + printk(KERN_ERR "at91_spi: no clock defined\n");
12260 + iounmap(spi_base);
12261 + release_mem_region(res->start, res->end - res->start + 1);
12262 + return -ENODEV;
12265 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SWRST); /* software reset of SPI controller */
12267 + /*
12268 + * Calculate the correct SPI baud-rate divisor.
12269 + */
12270 + scbr = clk_get_rate(spi_clk) / (2 * DEFAULT_SPI_CLK);
12271 + scbr = scbr + 1; /* round up */
12273 + printk(KERN_INFO "at91_spi: Baud rate set to %ld\n", clk_get_rate(spi_clk) / (2 * scbr));
12275 + /* Set Chip Select registers to good defaults */
12276 + for (i = 0; i < 4; i++) {
12277 + at91_spi_write(AT91_SPI_CSR(i), AT91_SPI_CPOL | AT91_SPI_BITS_8 | (16 << 16) | (scbr << 8));
12280 + at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
12282 + memset(&spi_dev, 0, sizeof(spi_dev));
12283 + spi_dev[0].pcs = 0xE;
12284 + spi_dev[1].pcs = 0xD;
12285 + spi_dev[2].pcs = 0xB;
12286 + spi_dev[3].pcs = 0x7;
12288 + if (request_irq(AT91RM9200_ID_SPI, at91spi_interrupt, 0, "spi", NULL)) {
12289 + clk_put(spi_clk);
12290 + iounmap(spi_base);
12291 + release_mem_region(res->start, res->end - res->start + 1);
12292 + return -EBUSY;
12295 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
12297 + return 0;
12300 +static int __devexit at91spi_remove(struct platform_device *pdev)
12302 + struct resource *res;
12304 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIDIS); /* Disable SPI */
12305 + clk_put(spi_clk);
12307 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
12308 + iounmap(spi_base);
12309 + release_mem_region(res->start, res->end - res->start + 1);
12311 + free_irq(AT91RM9200_ID_SPI, 0);
12312 + return 0;
12315 +static struct platform_driver at91spi_driver = {
12316 + .probe = at91spi_probe,
12317 + .remove = __devexit_p(at91spi_remove),
12318 + .driver = {
12319 + .name = "at91_spi",
12320 + .owner = THIS_MODULE,
12321 + },
12324 +static int __init at91spi_init(void)
12326 + return platform_driver_register(&at91spi_driver);
12329 +static void __exit at91spi_exit(void)
12331 + platform_driver_unregister(&at91spi_driver);
12334 +EXPORT_SYMBOL(spi_access_bus);
12335 +EXPORT_SYMBOL(spi_release_bus);
12336 +EXPORT_SYMBOL(spi_transfer);
12338 +module_init(at91spi_init);
12339 +module_exit(at91spi_exit);
12341 +MODULE_LICENSE("GPL")
12342 +MODULE_AUTHOR("Andrew Victor")
12343 +MODULE_DESCRIPTION("SPI driver for Atmel AT91RM9200")
12344 diff --git a/drivers/char/at91_spidev.c b/drivers/char/at91_spidev.c
12345 new file mode 100644
12346 index 0000000..4819b74
12347 --- /dev/null
12348 +++ b/drivers/char/at91_spidev.c
12349 @@ -0,0 +1,233 @@
12351 + * User-space interface to the SPI bus on Atmel AT91RM9200
12353 + * Copyright (C) 2003 SAN People (Pty) Ltd
12355 + * Based on SPI driver by Rick Bronson
12357 + * This program is free software; you can redistribute it and/or
12358 + * modify it under the terms of the GNU General Public License
12359 + * as published by the Free Software Foundation; either version
12360 + * 2 of the License, or (at your option) any later version.
12361 + */
12363 +#include <linux/module.h>
12364 +#include <linux/init.h>
12365 +#include <linux/slab.h>
12366 +#include <linux/highmem.h>
12367 +#include <linux/pagemap.h>
12368 +#include <asm/arch/spi.h>
12370 +#ifdef CONFIG_DEVFS_FS
12371 +#include <linux/devfs_fs_kernel.h>
12372 +#endif
12375 +#undef DEBUG_SPIDEV
12377 +/* ......................................................................... */
12380 + * Read or Write to SPI bus.
12381 + */
12382 +static ssize_t spidev_rd_wr(struct file *file, char *buf, size_t count, loff_t *offset)
12384 + unsigned int spi_device = (unsigned int) file->private_data;
12386 + struct mm_struct * mm;
12387 + struct page ** maplist;
12388 + struct spi_transfer_list* list;
12389 + int pgcount;
12391 + unsigned int ofs, pagelen;
12392 + int res, i, err;
12394 + if (!count) {
12395 + return 0;
12398 + list = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
12399 + if (!list) {
12400 + return -ENOMEM;
12403 + mm = current->mm;
12405 + pgcount = ((unsigned long)buf+count+PAGE_SIZE-1)/PAGE_SIZE - (unsigned long)buf/PAGE_SIZE;
12407 + if (pgcount >= MAX_SPI_TRANSFERS) {
12408 + kfree(list);
12409 + return -EFBIG;
12412 + maplist = kmalloc (pgcount * sizeof (struct page *), GFP_KERNEL);
12414 + if (!maplist) {
12415 + kfree(list);
12416 + return -ENOMEM;
12418 + flush_cache_all();
12419 + down_read(&mm->mmap_sem);
12420 + err= get_user_pages(current, mm, (unsigned long)buf, pgcount, 1, 0, maplist, NULL);
12421 + up_read(&mm->mmap_sem);
12423 + if (err < 0) {
12424 + kfree(list);
12425 + kfree(maplist);
12426 + return err;
12428 + pgcount = err;
12430 +#ifdef DEBUG_SPIDEV
12431 + printk("spidev_rd_rw: %i %i\n", count, pgcount);
12432 +#endif
12434 + /* Set default return value = transfer length */
12435 + res = count;
12437 + /*
12438 + * At this point, the virtual area buf[0] .. buf[count-1] will have
12439 + * corresponding pages mapped in the physical memory and locked until
12440 + * we unmap the kiobuf. The pages cannot be swapped out or moved
12441 + * around.
12442 + */
12443 + ofs = (unsigned long) buf & (PAGE_SIZE -1);
12444 + pagelen = PAGE_SIZE - ofs;
12445 + if (count < pagelen)
12446 + pagelen = count;
12448 + for (i = 0; i < pgcount; i++) {
12449 + flush_dcache_page(maplist[i]);
12451 + list->tx[i] = list->rx[i] = page_address(maplist[i]) + ofs;
12452 + list->txlen[i] = list->rxlen[i] = pagelen;
12454 +#ifdef DEBUG_SPIDEV
12455 + printk(" %i: %x (%i)\n", i, list->tx[i], list->txlen[i]);
12456 +#endif
12458 + ofs = 0; /* all subsequent transfers start at beginning of a page */
12459 + count = count - pagelen;
12460 + pagelen = (count < PAGE_SIZE) ? count : PAGE_SIZE;
12462 + list->nr_transfers = pgcount;
12464 + /* Perform transfer on SPI bus */
12465 + spi_access_bus(spi_device);
12466 + spi_transfer(list);
12467 + spi_release_bus(spi_device);
12469 + while (pgcount--) {
12470 + page_cache_release (maplist[pgcount]);
12472 + flush_cache_all();
12474 + kfree(maplist);
12475 + kfree(list);
12477 + return res;
12480 +static int spidev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
12482 + int spi_device = MINOR(inode->i_rdev);
12484 + if (spi_device >= NR_SPI_DEVICES)
12485 + return -ENODEV;
12487 + // TODO: This interface can be used to configure the SPI bus.
12488 + // Configurable options could include: Speed, Clock Polarity, Clock Phase
12490 + switch(cmd) {
12491 + default:
12492 + return -ENOIOCTLCMD;
12497 + * Open the SPI device
12498 + */
12499 +static int spidev_open(struct inode *inode, struct file *file)
12501 + unsigned int spi_device = MINOR(inode->i_rdev);
12503 + if (spi_device >= NR_SPI_DEVICES)
12504 + return -ENODEV;
12506 + /*
12507 + * 'private_data' is actually a pointer, but we overload it with the
12508 + * value we want to store.
12509 + */
12510 + file->private_data = (void *)spi_device;
12512 + return 0;
12516 + * Close the SPI device
12517 + */
12518 +static int spidev_close(struct inode *inode, struct file *file)
12520 + return 0;
12523 +/* ......................................................................... */
12525 +static struct file_operations spidev_fops = {
12526 + .owner = THIS_MODULE,
12527 + .llseek = no_llseek,
12528 + .read = spidev_rd_wr,
12529 + .write = (int (*) (struct file *file, const char *buf, size_t count, loff_t *offset))spidev_rd_wr,
12530 + .ioctl = spidev_ioctl,
12531 + .open = spidev_open,
12532 + .release = spidev_close,
12536 + * Install the SPI /dev interface driver
12537 + */
12538 +static int __init at91_spidev_init(void)
12540 +#ifdef CONFIG_DEVFS_FS
12541 + int i;
12542 +#endif
12544 + if (register_chrdev(SPI_MAJOR, "spi", &spidev_fops)) {
12545 + printk(KERN_ERR "at91_spidev: Unable to get major %d for SPI bus\n", SPI_MAJOR);
12546 + return -EIO;
12549 +#ifdef CONFIG_DEVFS_FS
12550 + devfs_mk_dir("spi");
12551 + for (i = 0; i < NR_SPI_DEVICES; i++) {
12552 + devfs_mk_cdev(MKDEV(SPI_MAJOR, i), S_IFCHR | S_IRUSR | S_IWUSR, "spi/%d",i);
12554 +#endif
12555 + printk(KERN_INFO "AT91 SPI driver loaded\n");
12557 + return 0;
12561 + * Remove the SPI /dev interface driver
12562 + */
12563 +static void __exit at91_spidev_exit(void)
12565 +#ifdef CONFIG_DEVFS_FS
12566 + int i;
12567 + for (i = 0; i < NR_SPI_DEVICES; i++) {
12568 + devfs_remove("spi/%d", i);
12571 + devfs_remove("spi");
12572 +#endif
12574 + unregister_chrdev(SPI_MAJOR, "spi");
12577 +module_init(at91_spidev_init);
12578 +module_exit(at91_spidev_exit);
12580 +MODULE_LICENSE("GPL")
12581 +MODULE_AUTHOR("Andrew Victor")
12582 +MODULE_DESCRIPTION("SPI /dev interface for Atmel AT91RM9200")
12583 diff --git a/drivers/char/watchdog/at91sam9_wdt.c b/drivers/char/watchdog/at91sam9_wdt.c
12584 new file mode 100644
12585 index 0000000..43491fe
12586 --- /dev/null
12587 +++ b/drivers/char/watchdog/at91sam9_wdt.c
12588 @@ -0,0 +1,258 @@
12590 + * Watchdog driver for Atmel AT91SAM9x processors.
12592 + * Copyright (C) 2007 Renaud CERRATO r.cerrato@til-technologies.fr
12594 + * This program is free software; you can redistribute it and/or
12595 + * modify it under the terms of the GNU General Public License
12596 + * as published by the Free Software Foundation; either version
12597 + * 2 of the License, or (at your option) any later version.
12598 + */
12601 + * The Watchdog Timer Mode Register can be only written to once. If the
12602 + * timeout need to be set from Linux, be sure that the bootstrap or the
12603 + * bootloader doesn't write to this register.
12604 + */
12606 +#include <linux/errno.h>
12607 +#include <linux/fs.h>
12608 +#include <linux/init.h>
12609 +#include <linux/kernel.h>
12610 +#include <linux/miscdevice.h>
12611 +#include <linux/module.h>
12612 +#include <linux/moduleparam.h>
12613 +#include <linux/platform_device.h>
12614 +#include <linux/types.h>
12615 +#include <linux/watchdog.h>
12616 +#include <linux/bitops.h>
12617 +#include <linux/uaccess.h>
12619 +#include <asm/arch/at91_wdt.h>
12622 +#define WDT_MAX_TIME 16 /* seconds */
12624 +static int wdt_timeout = -1; /* invalid */
12626 +module_param(wdt_timeout, int, 0);
12627 +MODULE_PARM_DESC(wdt_timeout, "Watchdog time in seconds. (default = disabled)");
12630 +static unsigned long at91wdt_busy;
12632 +/* ......................................................................... */
12635 + * Reload the watchdog timer. (ie, pat the watchdog)
12636 + */
12637 +static void inline at91_wdt_reload(void)
12639 + at91_sys_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
12642 +/* ......................................................................... */
12645 + * Watchdog device is opened, and watchdog starts running.
12646 + */
12647 +static int at91_wdt_open(struct inode *inode, struct file *file)
12649 + if (test_and_set_bit(0, &at91wdt_busy))
12650 + return -EBUSY;
12652 + return nonseekable_open(inode, file);
12656 + * Close the watchdog device.
12657 + */
12658 +static int at91_wdt_close(struct inode *inode, struct file *file)
12660 + clear_bit(0, &at91wdt_busy);
12661 + return 0;
12665 + * Change the watchdog time interval.
12666 + */
12667 +static int at91_wdt_settimeout(int new_time)
12669 + unsigned int reg, mr;
12670 + /*
12671 + * All counting occurs at SLOW_CLOCK / 128 = 256 Hz
12673 + * Since WDV is a 12-bit counter, the maximum period is
12674 + * 4096 / 256 = 16 seconds.
12675 + */
12676 + if ((new_time <= 0) || (new_time > WDT_MAX_TIME))
12677 + return -EINVAL;
12679 + wdt_timeout = new_time;
12681 + /* Program the Watchdog */
12682 + reg = AT91_WDT_WDRSTEN /* causes watchdog reset */
12683 + | AT91_WDT_WDRPROC /* causes processor reset */
12684 + | AT91_WDT_WDDBGHLT /* disabled in debug mode */
12685 + | AT91_WDT_WDD /* restart at any time */
12686 + | (((wdt_timeout * 256) - 1) & AT91_WDT_WDV); /* timer value */
12687 + at91_sys_write(AT91_WDT_MR, reg);
12689 + /* Check if watchdog could be programmed */
12690 + mr = at91_sys_read(AT91_WDT_MR);
12691 + if (mr != reg) {
12692 + printk(KERN_ERR "at91sam9_wdt: Watchdog register already programmed.\n");
12693 + return -EIO;
12696 + at91_wdt_reload();
12698 + printk(KERN_INFO "AT91SAM9 Watchdog enabled (%d seconds, nowayout)\n", wdt_timeout);
12699 + return 0;
12702 +static struct watchdog_info at91_wdt_info = {
12703 + .identity = "at91sam9 watchdog",
12704 + .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
12708 + * Handle commands from user-space.
12709 + */
12710 +static int at91_wdt_ioctl(struct inode *inode, struct file *file,
12711 + unsigned int cmd, unsigned long arg)
12713 + void __user *argp = (void __user *)arg;
12714 + int __user *p = argp;
12715 + int new_value, err;
12717 + switch (cmd) {
12718 + case WDIOC_KEEPALIVE:
12719 + at91_wdt_reload(); /* pat the watchdog */
12720 + return 0;
12722 + case WDIOC_GETSUPPORT:
12723 + return copy_to_user(argp, &at91_wdt_info, sizeof(at91_wdt_info)) ? -EFAULT : 0;
12725 + case WDIOC_SETTIMEOUT:
12726 + if (get_user(new_value, p))
12727 + return -EFAULT;
12729 + err = at91_wdt_settimeout(new_value);
12730 + if (err)
12731 + return err;
12733 + return put_user(wdt_timeout, p); /* return current value */
12735 + case WDIOC_GETTIMEOUT:
12736 + return put_user(wdt_timeout, p);
12738 + case WDIOC_GETSTATUS:
12739 + case WDIOC_GETBOOTSTATUS:
12740 + return put_user(0, p);
12742 + return -ENOTTY;
12746 + * Pat the watchdog whenever device is written to.
12747 + */
12748 +static ssize_t at91_wdt_write(struct file *file, const char *data, size_t len, loff_t *ppos)
12750 + at91_wdt_reload(); /* pat the watchdog */
12751 + return len;
12754 +/* ......................................................................... */
12756 +static const struct file_operations at91wdt_fops = {
12757 + .owner = THIS_MODULE,
12758 + .llseek = no_llseek,
12759 + .ioctl = at91_wdt_ioctl,
12760 + .open = at91_wdt_open,
12761 + .release = at91_wdt_close,
12762 + .write = at91_wdt_write,
12765 +static struct miscdevice at91wdt_miscdev = {
12766 + .minor = WATCHDOG_MINOR,
12767 + .name = "watchdog",
12768 + .fops = &at91wdt_fops,
12771 +static int __init at91wdt_probe(struct platform_device *pdev)
12773 + int res;
12775 + if (at91wdt_miscdev.parent)
12776 + return -EBUSY;
12777 + at91wdt_miscdev.parent = &pdev->dev;
12779 + res = misc_register(&at91wdt_miscdev);
12780 + if (res)
12781 + return res;
12783 + /* Set watchdog */
12784 + if (at91_wdt_settimeout(wdt_timeout) == -EINVAL) {
12785 + pr_info("at91sam9_wdt: invalid timeout (must be between 1 and %d)\n", WDT_MAX_TIME);
12786 + return 0;
12789 + return 0;
12792 +static int __exit at91wdt_remove(struct platform_device *pdev)
12794 + int res;
12796 + res = misc_deregister(&at91wdt_miscdev);
12797 + if (!res)
12798 + at91wdt_miscdev.parent = NULL;
12800 + return res;
12803 +#ifdef CONFIG_PM
12805 +static int at91wdt_suspend(struct platform_device *pdev, pm_message_t message)
12807 + return 0;
12810 +static int at91wdt_resume(struct platform_device *pdev)
12812 + return 0;
12815 +#else
12816 +#define at91wdt_suspend NULL
12817 +#define at91wdt_resume NULL
12818 +#endif
12820 +static struct platform_driver at91wdt_driver = {
12821 + .remove = __exit_p(at91wdt_remove),
12822 + .suspend = at91wdt_suspend,
12823 + .resume = at91wdt_resume,
12824 + .driver = {
12825 + .name = "at91_wdt",
12826 + .owner = THIS_MODULE,
12827 + },
12830 +static int __init at91sam_wdt_init(void)
12832 + return platform_driver_probe(&at91wdt_driver, at91wdt_probe);
12835 +static void __exit at91sam_wdt_exit(void)
12837 + platform_driver_unregister(&at91wdt_driver);
12840 +module_init(at91sam_wdt_init);
12841 +module_exit(at91sam_wdt_exit);
12843 +MODULE_AUTHOR("Renaud CERRATO");
12844 +MODULE_DESCRIPTION("Watchdog driver for Atmel AT91SAM9x processors");
12845 +MODULE_LICENSE("GPL");
12846 +MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
12847 diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
12848 index c466c6c..bebd065 100644
12849 --- a/drivers/i2c/busses/Kconfig
12850 +++ b/drivers/i2c/busses/Kconfig
12851 @@ -88,6 +88,14 @@ config I2C_AT91
12852 to support combined I2C messages. Use the i2c-gpio driver
12853 unless your system can cope with those limitations.
12855 +config I2C_AT91_CLOCKRATE
12856 + prompt "Atmel AT91 I2C/TWI clock-rate"
12857 + depends on I2C_AT91
12858 + int
12859 + default 100000
12860 + help
12861 + Set the AT91 I2C/TWI clock-rate.
12863 config I2C_AU1550
12864 tristate "Au1550/Au1200 SMBus interface"
12865 depends on SOC_AU1550 || SOC_AU1200
12866 @@ -629,6 +637,14 @@ config I2C_VOODOO3
12867 This driver can also be built as a module. If so, the module
12868 will be called i2c-voodoo3.
12870 +config I2C_PCA
12871 + tristate "PCA9564"
12872 + depends on I2C
12873 + select I2C_ALGOPCA
12874 + help
12875 + This driver support the Philips PCA 9564 Parallel bus to I2C
12876 + bus controller.
12878 config I2C_PCA_ISA
12879 tristate "PCA9564 on an ISA bus"
12880 depends on ISA
12881 diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
12882 index 81d43c2..7498339 100644
12883 --- a/drivers/i2c/busses/Makefile
12884 +++ b/drivers/i2c/busses/Makefile
12885 @@ -30,6 +30,7 @@ obj-$(CONFIG_I2C_OMAP) += i2c-omap.o
12886 obj-$(CONFIG_I2C_PARPORT) += i2c-parport.o
12887 obj-$(CONFIG_I2C_PARPORT_LIGHT) += i2c-parport-light.o
12888 obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o
12889 +obj-$(CONFIG_I2C_PCA) += i2c-pca.o
12890 obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o
12891 obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o
12892 obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o
12893 diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
12894 index 9c8b6d5..34e1f6e 100644
12895 --- a/drivers/i2c/busses/i2c-at91.c
12896 +++ b/drivers/i2c/busses/i2c-at91.c
12897 @@ -31,8 +31,11 @@
12898 #include <asm/arch/board.h>
12899 #include <asm/arch/cpu.h>
12901 -#define TWI_CLOCK 100000 /* Hz. max 400 Kbits/sec */
12903 +/* Clockrate is configurable - max 400 Kbits/sec */
12904 +static unsigned int clockrate = CONFIG_I2C_AT91_CLOCKRATE;
12905 +module_param(clockrate, uint, 0);
12906 +MODULE_PARM_DESC(clockrate, "The TWI clockrate");
12908 static struct clk *twi_clk;
12909 static void __iomem *twi_base;
12910 @@ -53,7 +56,7 @@ static void __devinit at91_twi_hwinit(void)
12911 at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN); /* Set Master mode */
12913 /* Calcuate clock dividers */
12914 - cdiv = (clk_get_rate(twi_clk) / (2 * TWI_CLOCK)) - 3;
12915 + cdiv = (clk_get_rate(twi_clk) / (2 * clockrate)) - 3;
12916 cdiv = cdiv + 1; /* round up */
12917 ckdiv = 0;
12918 while (cdiv > 255) {
12919 @@ -61,11 +64,12 @@ static void __devinit at91_twi_hwinit(void)
12920 cdiv = cdiv >> 1;
12923 - if (cpu_is_at91rm9200()) { /* AT91RM9200 Errata #22 */
12924 - if (ckdiv > 5) {
12925 - printk(KERN_ERR "AT91 I2C: Invalid TWI_CLOCK value!\n");
12926 - ckdiv = 5;
12928 + if (cpu_is_at91rm9200() && (ckdiv > 5)) { /* AT91RM9200 Errata #22 */
12929 + printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
12930 + ckdiv = 5;
12931 + } else if (ckdiv > 7) {
12932 + printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
12933 + ckdiv = 7;
12936 at91_twi_write(AT91_TWI_CWGR, (ckdiv << 16) | (cdiv << 8) | cdiv);
12937 diff --git a/drivers/i2c/busses/i2c-pca.c b/drivers/i2c/busses/i2c-pca.c
12938 new file mode 100644
12939 index 0000000..7379567
12940 --- /dev/null
12941 +++ b/drivers/i2c/busses/i2c-pca.c
12942 @@ -0,0 +1,213 @@
12944 + * Platform driver for PCA9564 I2C bus controller.
12946 + * (C) 2006 Andrew Victor
12948 + * Based on i2c-pca-isa.c driver for PCA9564 on ISA boards
12949 + * Copyright (C) 2004 Arcom Control Systems
12951 + * This program is free software; you can redistribute it and/or modify
12952 + * it under the terms of the GNU General Public License as published by
12953 + * the Free Software Foundation; either version 2 of the License, or
12954 + * (at your option) any later version.
12956 + * This program is distributed in the hope that it will be useful,
12957 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12958 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12959 + * GNU General Public License for more details.
12961 + * You should have received a copy of the GNU General Public License
12962 + * along with this program; if not, write to the Free Software
12963 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
12964 + */
12966 +#include <linux/kernel.h>
12967 +#include <linux/module.h>
12968 +#include <linux/moduleparam.h>
12969 +#include <linux/delay.h>
12970 +#include <linux/init.h>
12971 +#include <linux/interrupt.h>
12972 +#include <linux/wait.h>
12973 +#include <linux/platform_device.h>
12975 +#include <linux/i2c.h>
12976 +#include <linux/i2c-algo-pca.h>
12978 +#include <asm/io.h>
12980 +#include "../algos/i2c-algo-pca.h"
12982 +#define PCA_OWN_ADDRESS 0x55 /* our address for slave mode */
12983 +#define PCA_CLOCK I2C_PCA_CON_59kHz
12985 +//#define REG_SHIFT 2
12986 +#define REG_SHIFT 0
12988 +//#define DEBUG_IO
12990 +#define PCA_IO_SIZE 4
12992 +static void __iomem *base_addr;
12993 +static int irq;
12994 +static wait_queue_head_t pca_wait;
12996 +static int pca_getown(struct i2c_algo_pca_data *adap)
12998 + return PCA_OWN_ADDRESS;
13001 +static int pca_getclock(struct i2c_algo_pca_data *adap)
13003 + return PCA_CLOCK;
13006 +static void pca_writebyte(struct i2c_algo_pca_data *adap, int reg, int val)
13008 +#ifdef DEBUG_IO
13009 + static char *names[] = { "T/O", "DAT", "ADR", "CON" };
13010 + printk("*** write %s at %#lx <= %#04x\n", names[reg], (unsigned long) base_addr+reg, val);
13011 +#endif
13012 + udelay(1);
13013 + outb(val, base_addr + (reg << REG_SHIFT));
13016 +static int pca_readbyte(struct i2c_algo_pca_data *adap, int reg)
13018 + int res;
13020 + udelay(1);
13021 + res = inb(base_addr + (reg << REG_SHIFT));
13022 +#ifdef DEBUG_IO
13024 + static char *names[] = { "STA", "DAT", "ADR", "CON" };
13025 + printk("*** read %s => %#04x\n", names[reg], res);
13027 +#endif
13028 + return res;
13031 +static int pca_waitforinterrupt(struct i2c_algo_pca_data *adap)
13033 + int ret = 0;
13035 + if (irq > -1) {
13036 + ret = wait_event_interruptible(pca_wait,
13037 + pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI);
13038 + } else {
13039 + while ((pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0)
13040 + udelay(100);
13042 + return ret;
13045 +static irqreturn_t pca_handler(int this_irq, void *dev_id)
13047 + wake_up_interruptible(&pca_wait);
13048 + return IRQ_HANDLED;
13051 +static struct i2c_algo_pca_data pca_i2c_data = {
13052 + .get_own = pca_getown,
13053 + .get_clock = pca_getclock,
13054 + .write_byte = pca_writebyte,
13055 + .read_byte = pca_readbyte,
13056 + .wait_for_interrupt = pca_waitforinterrupt,
13059 +static struct i2c_adapter pca_i2c_ops = {
13060 + .owner = THIS_MODULE,
13061 + .id = I2C_HW_A_PLAT,
13062 + .algo_data = &pca_i2c_data,
13063 + .name = "PCA9564",
13064 + .class = I2C_CLASS_HWMON,
13067 +static int __devinit pca_i2c_probe(struct platform_device *pdev)
13069 + struct resource *res;
13071 + init_waitqueue_head(&pca_wait);
13073 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
13074 + if (!res)
13075 + return -ENODEV;
13077 + if (!request_mem_region(res->start, PCA_IO_SIZE, "PCA9564"))
13078 + return -ENXIO;
13080 + base_addr = ioremap(res->start, PCA_IO_SIZE);
13081 + if (base_addr == NULL)
13082 + goto out_region;
13084 + irq = platform_get_irq(pdev, 0);
13085 + if (irq > -1) {
13086 + if (request_irq(irq, pca_handler, 0, "pca9564", NULL) < 0) {
13087 + printk(KERN_ERR "i2c-pca: Request irq%d failed\n", irq);
13088 + goto out_remap;
13092 + /* set up the driverfs linkage to our parent device */
13093 + pca_i2c_ops.dev.parent = &pdev->dev;
13095 + if (i2c_pca_add_bus(&pca_i2c_ops) < 0) {
13096 + printk(KERN_ERR "i2c-pca: Failed to add i2c bus\n");
13097 + goto out_irq;
13100 + return 0;
13102 + out_irq:
13103 + if (irq > -1)
13104 + free_irq(irq, &pca_i2c_ops);
13106 + out_remap:
13107 + iounmap(base_addr);
13109 + out_region:
13110 + release_mem_region(res->start, PCA_IO_SIZE);
13111 + return -ENODEV;
13114 +static int __devexit pca_i2c_remove(struct platform_device *pdev)
13116 + struct resource *res;
13118 + i2c_del_adapter(&pca_i2c_ops);
13120 + if (irq > 0)
13121 + free_irq(irq, NULL);
13123 + iounmap(base_addr);
13125 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
13126 + release_mem_region(res->start, PCA_IO_SIZE);
13128 + return 0;
13131 +static struct platform_driver pca_i2c_driver = {
13132 + .probe = pca_i2c_probe,
13133 + .remove = __devexit_p(pca_i2c_remove),
13134 + .driver = {
13135 + .name = "pca9564",
13136 + .owner = THIS_MODULE,
13137 + },
13140 +static int __init pca_i2c_init(void)
13142 + return platform_driver_register(&pca_i2c_driver);
13145 +static void __exit pca_i2c_exit(void)
13147 + platform_driver_unregister(&pca_i2c_driver);
13150 +module_init(pca_i2c_init);
13151 +module_exit(pca_i2c_exit);
13153 +MODULE_AUTHOR("Andrew Victor");
13154 +MODULE_DESCRIPTION("PCA9564 platform driver");
13155 +MODULE_LICENSE("GPL");
13156 diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig
13157 index 811d56f..098a540 100644
13158 --- a/drivers/mtd/devices/Kconfig
13159 +++ b/drivers/mtd/devices/Kconfig
13160 @@ -270,5 +270,17 @@ config MTD_DOCPROBE_55AA
13161 LinuxBIOS or if you need to recover a DiskOnChip Millennium on which
13162 you have managed to wipe the first block.
13164 -endmenu
13165 +config MTD_AT91_DATAFLASH
13166 + tristate "AT91RM9200 DataFlash AT45DBxxx (legacy driver)"
13167 + depends on MTD && ARCH_AT91RM9200 && AT91_SPI
13168 + help
13169 + This enables access to the DataFlash (AT45DBxxx) on the AT91RM9200.
13170 + If you have such a board, say 'Y'.
13172 +config DATAFLASH_ALWAYS_ADD_DEVICE
13173 + bool "Register whole DataFlash device"
13174 + depends on MTD_AT91_DATAFLASH
13175 + help
13176 + Always add the whole DataFlash device when using MTD partitions.
13178 +endmenu
13179 diff --git a/drivers/mtd/devices/Makefile b/drivers/mtd/devices/Makefile
13180 index 0f788d5..9e56ad7 100644
13181 --- a/drivers/mtd/devices/Makefile
13182 +++ b/drivers/mtd/devices/Makefile
13183 @@ -17,3 +17,4 @@ obj-$(CONFIG_MTD_LART) += lart.o
13184 obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o
13185 obj-$(CONFIG_MTD_DATAFLASH) += mtd_dataflash.o
13186 obj-$(CONFIG_MTD_M25P80) += m25p80.o
13187 +obj-$(CONFIG_MTD_AT91_DATAFLASH)+= at91_dataflash.o
13188 diff --git a/drivers/mtd/devices/at91_dataflash.c b/drivers/mtd/devices/at91_dataflash.c
13189 new file mode 100644
13190 index 0000000..a724938
13191 --- /dev/null
13192 +++ b/drivers/mtd/devices/at91_dataflash.c
13193 @@ -0,0 +1,673 @@
13195 + * Atmel DataFlash driver for Atmel AT91RM9200 (Thunder)
13197 + * Copyright (C) SAN People (Pty) Ltd
13199 + * This program is free software; you can redistribute it and/or
13200 + * modify it under the terms of the GNU General Public License
13201 + * as published by the Free Software Foundation; either version
13202 + * 2 of the License, or (at your option) any later version.
13205 +#include <linux/module.h>
13206 +#include <linux/init.h>
13207 +#include <linux/slab.h>
13208 +#include <linux/pci.h>
13209 +#include <linux/mtd/mtd.h>
13210 +#include <linux/mtd/partitions.h>
13212 +#include <asm/mach-types.h>
13214 +#include <asm/arch/spi.h>
13217 +#undef DEBUG_DATAFLASH
13219 +#define DATAFLASH_MAX_DEVICES 4 /* max number of dataflash devices */
13221 +#define OP_READ_CONTINUOUS 0xE8
13222 +#define OP_READ_PAGE 0xD2
13223 +#define OP_READ_BUFFER1 0xD4
13224 +#define OP_READ_BUFFER2 0xD6
13225 +#define OP_READ_STATUS 0xD7
13227 +#define OP_ERASE_PAGE 0x81
13228 +#define OP_ERASE_BLOCK 0x50
13230 +#define OP_TRANSFER_BUF1 0x53
13231 +#define OP_TRANSFER_BUF2 0x55
13232 +#define OP_COMPARE_BUF1 0x60
13233 +#define OP_COMPARE_BUF2 0x61
13235 +#define OP_PROGRAM_VIA_BUF1 0x82
13236 +#define OP_PROGRAM_VIA_BUF2 0x85
13238 +struct dataflash_local
13240 + int spi; /* SPI chip-select number */
13242 + unsigned int page_size; /* number of bytes per page */
13243 + unsigned short page_offset; /* page offset in flash address */
13247 +/* Detected DataFlash devices */
13248 +static struct mtd_info* mtd_devices[DATAFLASH_MAX_DEVICES];
13249 +static int nr_devices = 0;
13251 +/* ......................................................................... */
13253 +#ifdef CONFIG_MTD_PARTITIONS
13255 +static struct mtd_partition static_partitions_2M[] =
13258 + .name = "bootloader",
13259 + .offset = 0,
13260 + .size = 1 * 32 * 8 * 528, /* 1st sector = 32 blocks * 8 pages * 528 bytes */
13261 + .mask_flags = MTD_WRITEABLE, /* read-only */
13262 + },
13264 + .name = "kernel",
13265 + .offset = MTDPART_OFS_NXTBLK,
13266 + .size = 6 * 32 * 8 * 528, /* 6 sectors */
13267 + },
13269 + .name = "filesystem",
13270 + .offset = MTDPART_OFS_NXTBLK,
13271 + .size = MTDPART_SIZ_FULL, /* rest = 9 sectors */
13275 +static struct mtd_partition static_partitions_4M[] =
13278 + .name = "bootloader",
13279 + .offset = 0,
13280 + .size = 1 * 64 * 8 * 528, /* 1st sector = 64 blocks * 8 pages * 528 bytes */
13281 + .mask_flags = MTD_WRITEABLE, /* read-only */
13282 + },
13284 + .name = "kernel",
13285 + .offset = MTDPART_OFS_NXTBLK,
13286 + .size = 4 * 64 * 8 * 528, /* 4 sectors */
13287 + },
13289 + .name = "filesystem",
13290 + .offset = MTDPART_OFS_NXTBLK,
13291 + .size = MTDPART_SIZ_FULL, /* rest = 11 sectors */
13295 +#if defined(CONFIG_MACH_KAFA)
13296 +static struct mtd_partition static_partitions_8M[] =
13299 + name: "romboot",
13300 + offset: 0,
13301 + size: 16 * 1056, /* 160 Kb */
13302 + mask_flags: MTD_WRITEABLE, /* read-only */
13303 + },
13305 + name: "uboot",
13306 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
13307 + size: 128 * 1056, /* 1 MB */
13308 + },
13310 + name: "kernel",
13311 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
13312 + size: 1024 * 1056, /* 1 MB */
13313 + },
13315 + name: "filesystem",
13316 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
13317 + size: MTDPART_SIZ_FULL,
13321 +#elif defined(CONFIG_MACH_MULTMDP)
13323 +static struct mtd_partition static_partitions_8M[] =
13326 + .name = "bootloader",
13327 + .offset = 0,
13328 + .size = 12 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
13329 + .mask_flags = MTD_WRITEABLE, /* read-only */
13330 + },
13332 + .name = "configuration",
13333 + .offset = MTDPART_OFS_NXTBLK,
13334 + .size = 20 * 1056,
13335 + },
13337 + .name = "kernel",
13338 + .offset = MTDPART_OFS_NXTBLK,
13339 + .size = 1520 * 1056,
13340 + },
13342 + .name = "filesystem",
13343 + .offset = MTDPART_OFS_NXTBLK,
13344 + .size = MTDPART_SIZ_FULL,
13348 +#else
13350 +static struct mtd_partition static_partitions_8M[] =
13353 + .name = "bootloader",
13354 + .offset = 0,
13355 + .size = 1 * 32 * 8 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
13356 + .mask_flags = MTD_WRITEABLE, /* read-only */
13357 + },
13359 + .name = "kernel",
13360 + .offset = MTDPART_OFS_NXTBLK,
13361 + .size = 5 * 32 * 8 * 1056, /* 5 sectors */
13362 + },
13364 + .name = "filesystem",
13365 + .offset = MTDPART_OFS_NXTBLK,
13366 + .size = MTDPART_SIZ_FULL, /* rest = 26 sectors */
13369 +#endif
13371 +static const char *part_probes[] = { "cmdlinepart", NULL, };
13373 +#endif
13375 +/* ......................................................................... */
13377 +/* Allocate a single SPI transfer descriptor. We're assuming that if multiple
13378 + SPI transfers occur at the same time, spi_access_bus() will serialize them.
13379 + If this is not valid, then either (i) each dataflash 'priv' structure
13380 + needs it's own transfer descriptor, (ii) we lock this one, or (iii) use
13381 + another mechanism. */
13382 +static struct spi_transfer_list* spi_transfer_desc;
13385 + * Perform a SPI transfer to access the DataFlash device.
13386 + */
13387 +static int do_spi_transfer(int nr, char* tx, int tx_len, char* rx, int rx_len,
13388 + char* txnext, int txnext_len, char* rxnext, int rxnext_len)
13390 + struct spi_transfer_list* list = spi_transfer_desc;
13392 + list->tx[0] = tx; list->txlen[0] = tx_len;
13393 + list->rx[0] = rx; list->rxlen[0] = rx_len;
13395 + list->tx[1] = txnext; list->txlen[1] = txnext_len;
13396 + list->rx[1] = rxnext; list->rxlen[1] = rxnext_len;
13398 + list->nr_transfers = nr;
13400 + return spi_transfer(list);
13403 +/* ......................................................................... */
13406 + * Poll the DataFlash device until it is READY.
13407 + */
13408 +static void at91_dataflash_waitready(void)
13410 + char* command = kmalloc(2, GFP_KERNEL);
13412 + if (!command)
13413 + return;
13415 + do {
13416 + command[0] = OP_READ_STATUS;
13417 + command[1] = 0;
13419 + do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
13420 + } while ((command[1] & 0x80) == 0);
13422 + kfree(command);
13426 + * Return the status of the DataFlash device.
13427 + */
13428 +static unsigned short at91_dataflash_status(void)
13430 + unsigned short status;
13431 + char* command = kmalloc(2, GFP_KERNEL);
13433 + if (!command)
13434 + return 0;
13436 + command[0] = OP_READ_STATUS;
13437 + command[1] = 0;
13439 + do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
13440 + status = command[1];
13442 + kfree(command);
13443 + return status;
13446 +/* ......................................................................... */
13449 + * Erase blocks of flash.
13450 + */
13451 +static int at91_dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
13453 + struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
13454 + unsigned int pageaddr;
13455 + char* command;
13457 +#ifdef DEBUG_DATAFLASH
13458 + printk("dataflash_erase: addr=%i len=%i\n", instr->addr, instr->len);
13459 +#endif
13461 + /* Sanity checks */
13462 + if (instr->addr + instr->len > mtd->size)
13463 + return -EINVAL;
13464 + if ((instr->len % mtd->erasesize != 0) || (instr->len % priv->page_size != 0))
13465 + return -EINVAL;
13466 + if ((instr->addr % priv->page_size) != 0)
13467 + return -EINVAL;
13469 + command = kmalloc(4, GFP_KERNEL);
13470 + if (!command)
13471 + return -ENOMEM;
13473 + while (instr->len > 0) {
13474 + /* Calculate flash page address */
13475 + pageaddr = (instr->addr / priv->page_size) << priv->page_offset;
13477 + command[0] = OP_ERASE_PAGE;
13478 + command[1] = (pageaddr & 0x00FF0000) >> 16;
13479 + command[2] = (pageaddr & 0x0000FF00) >> 8;
13480 + command[3] = 0;
13481 +#ifdef DEBUG_DATAFLASH
13482 + printk("ERASE: (%x) %x %x %x [%i]\n", command[0], command[1], command[2], command[3], pageaddr);
13483 +#endif
13485 + /* Send command to SPI device */
13486 + spi_access_bus(priv->spi);
13487 + do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
13489 + at91_dataflash_waitready(); /* poll status until ready */
13490 + spi_release_bus(priv->spi);
13492 + instr->addr += priv->page_size; /* next page */
13493 + instr->len -= priv->page_size;
13496 + kfree(command);
13498 + /* Inform MTD subsystem that erase is complete */
13499 + instr->state = MTD_ERASE_DONE;
13500 + if (instr->callback)
13501 + instr->callback(instr);
13503 + return 0;
13507 + * Read from the DataFlash device.
13508 + * from : Start offset in flash device
13509 + * len : Amount to read
13510 + * retlen : About of data actually read
13511 + * buf : Buffer containing the data
13512 + */
13513 +static int at91_dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
13515 + struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
13516 + unsigned int addr;
13517 + char* command;
13519 +#ifdef DEBUG_DATAFLASH
13520 + printk("dataflash_read: %lli .. %lli\n", from, from+len);
13521 +#endif
13523 + *retlen = 0;
13525 + /* Sanity checks */
13526 + if (!len)
13527 + return 0;
13528 + if (from + len > mtd->size)
13529 + return -EINVAL;
13531 + /* Calculate flash page/byte address */
13532 + addr = (((unsigned)from / priv->page_size) << priv->page_offset) + ((unsigned)from % priv->page_size);
13534 + command = kmalloc(8, GFP_KERNEL);
13535 + if (!command)
13536 + return -ENOMEM;
13538 + command[0] = OP_READ_CONTINUOUS;
13539 + command[1] = (addr & 0x00FF0000) >> 16;
13540 + command[2] = (addr & 0x0000FF00) >> 8;
13541 + command[3] = (addr & 0x000000FF);
13542 +#ifdef DEBUG_DATAFLASH
13543 + printk("READ: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
13544 +#endif
13546 + /* Send command to SPI device */
13547 + spi_access_bus(priv->spi);
13548 + do_spi_transfer(2, command, 8, command, 8, buf, len, buf, len);
13549 + spi_release_bus(priv->spi);
13551 + *retlen = len;
13552 + kfree(command);
13553 + return 0;
13557 + * Write to the DataFlash device.
13558 + * to : Start offset in flash device
13559 + * len : Amount to write
13560 + * retlen : Amount of data actually written
13561 + * buf : Buffer containing the data
13562 + */
13563 +static int at91_dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
13565 + struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
13566 + unsigned int pageaddr, addr, offset, writelen;
13567 + size_t remaining;
13568 + u_char *writebuf;
13569 + unsigned short status;
13570 + int res = 0;
13571 + char* command;
13572 + char* tmpbuf = NULL;
13574 +#ifdef DEBUG_DATAFLASH
13575 + printk("dataflash_write: %lli .. %lli\n", to, to+len);
13576 +#endif
13578 + *retlen = 0;
13580 + /* Sanity checks */
13581 + if (!len)
13582 + return 0;
13583 + if (to + len > mtd->size)
13584 + return -EINVAL;
13586 + command = kmalloc(4, GFP_KERNEL);
13587 + if (!command)
13588 + return -ENOMEM;
13590 + pageaddr = ((unsigned)to / priv->page_size);
13591 + offset = ((unsigned)to % priv->page_size);
13592 + if (offset + len > priv->page_size)
13593 + writelen = priv->page_size - offset;
13594 + else
13595 + writelen = len;
13596 + writebuf = (u_char *)buf;
13597 + remaining = len;
13599 + /* Allocate temporary buffer */
13600 + tmpbuf = kmalloc(priv->page_size, GFP_KERNEL);
13601 + if (!tmpbuf) {
13602 + kfree(command);
13603 + return -ENOMEM;
13606 + /* Gain access to the SPI bus */
13607 + spi_access_bus(priv->spi);
13609 + while (remaining > 0) {
13610 +#ifdef DEBUG_DATAFLASH
13611 + printk("write @ %i:%i len=%i\n", pageaddr, offset, writelen);
13612 +#endif
13614 + /* (1) Transfer to Buffer1 */
13615 + if (writelen != priv->page_size) {
13616 + addr = pageaddr << priv->page_offset;
13617 + command[0] = OP_TRANSFER_BUF1;
13618 + command[1] = (addr & 0x00FF0000) >> 16;
13619 + command[2] = (addr & 0x0000FF00) >> 8;
13620 + command[3] = 0;
13621 +#ifdef DEBUG_DATAFLASH
13622 + printk("TRANSFER: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
13623 +#endif
13624 + do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
13625 + at91_dataflash_waitready();
13628 + /* (2) Program via Buffer1 */
13629 + addr = (pageaddr << priv->page_offset) + offset;
13630 + command[0] = OP_PROGRAM_VIA_BUF1;
13631 + command[1] = (addr & 0x00FF0000) >> 16;
13632 + command[2] = (addr & 0x0000FF00) >> 8;
13633 + command[3] = (addr & 0x000000FF);
13634 +#ifdef DEBUG_DATAFLASH
13635 + printk("PROGRAM: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
13636 +#endif
13637 + do_spi_transfer(2, command, 4, command, 4, writebuf, writelen, tmpbuf, writelen);
13638 + at91_dataflash_waitready();
13640 + /* (3) Compare to Buffer1 */
13641 + addr = pageaddr << priv->page_offset;
13642 + command[0] = OP_COMPARE_BUF1;
13643 + command[1] = (addr & 0x00FF0000) >> 16;
13644 + command[2] = (addr & 0x0000FF00) >> 8;
13645 + command[3] = 0;
13646 +#ifdef DEBUG_DATAFLASH
13647 + printk("COMPARE: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
13648 +#endif
13649 + do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
13650 + at91_dataflash_waitready();
13652 + /* Get result of the compare operation */
13653 + status = at91_dataflash_status();
13654 + if (status & 0x40) {
13655 + printk("at91_dataflash: Write error on page %i\n", pageaddr);
13656 + remaining = 0;
13657 + writelen = 0;
13658 + res = -EIO;
13661 + remaining = remaining - writelen;
13662 + pageaddr++;
13663 + offset = 0;
13664 + writebuf += writelen;
13665 + *retlen += writelen;
13667 + if (remaining > priv->page_size)
13668 + writelen = priv->page_size;
13669 + else
13670 + writelen = remaining;
13673 + /* Release SPI bus */
13674 + spi_release_bus(priv->spi);
13676 + kfree(tmpbuf);
13677 + kfree(command);
13678 + return res;
13681 +/* ......................................................................... */
13684 + * Initialize and register DataFlash device with MTD subsystem.
13685 + */
13686 +static int __init add_dataflash(int channel, char *name, int IDsize,
13687 + int nr_pages, int pagesize, int pageoffset)
13689 + struct mtd_info *device;
13690 + struct dataflash_local *priv;
13691 +#ifdef CONFIG_MTD_PARTITIONS
13692 + struct mtd_partition *mtd_parts = 0;
13693 + int mtd_parts_nr = 0;
13694 +#endif
13696 + if (nr_devices >= DATAFLASH_MAX_DEVICES) {
13697 + printk(KERN_ERR "at91_dataflash: Too many devices detected\n");
13698 + return 0;
13701 + device = kmalloc(sizeof(struct mtd_info) + strlen(name) + 8, GFP_KERNEL);
13702 + if (!device)
13703 + return -ENOMEM;
13704 + memset(device, 0, sizeof(struct mtd_info));
13706 + device->name = (char *)&device[1];
13707 + sprintf(device->name, "%s.spi%d", name, channel);
13708 + device->size = nr_pages * pagesize;
13709 + device->erasesize = pagesize;
13710 + device->writesize = pagesize;
13711 + device->owner = THIS_MODULE;
13712 + device->type = MTD_DATAFLASH;
13713 + device->flags = MTD_WRITEABLE;
13714 + device->erase = at91_dataflash_erase;
13715 + device->read = at91_dataflash_read;
13716 + device->write = at91_dataflash_write;
13718 + priv = (struct dataflash_local *) kmalloc(sizeof(struct dataflash_local), GFP_KERNEL);
13719 + if (!priv) {
13720 + kfree(device);
13721 + return -ENOMEM;
13723 + memset(priv, 0, sizeof(struct dataflash_local));
13725 + priv->spi = channel;
13726 + priv->page_size = pagesize;
13727 + priv->page_offset = pageoffset;
13728 + device->priv = priv;
13730 + mtd_devices[nr_devices] = device;
13731 + nr_devices++;
13732 + printk("at91_dataflash: %s detected [spi%i] (%i bytes)\n", name, channel, device->size);
13734 +#ifdef CONFIG_MTD_PARTITIONS
13735 +#ifdef CONFIG_MTD_CMDLINE_PARTS
13736 + mtd_parts_nr = parse_mtd_partitions(device, part_probes, &mtd_parts, 0);
13737 +#endif
13738 + if (mtd_parts_nr <= 0) {
13739 + switch (IDsize) {
13740 + case SZ_2M:
13741 + mtd_parts = static_partitions_2M;
13742 + mtd_parts_nr = ARRAY_SIZE(static_partitions_2M);
13743 + break;
13744 + case SZ_4M:
13745 + mtd_parts = static_partitions_4M;
13746 + mtd_parts_nr = ARRAY_SIZE(static_partitions_4M);
13747 + break;
13748 + case SZ_8M:
13749 + mtd_parts = static_partitions_8M;
13750 + mtd_parts_nr = ARRAY_SIZE(static_partitions_8M);
13751 + break;
13755 + if (mtd_parts_nr > 0) {
13756 +#ifdef CONFIG_DATAFLASH_ALWAYS_ADD_DEVICE
13757 + add_mtd_device(device);
13758 +#endif
13759 + return add_mtd_partitions(device, mtd_parts, mtd_parts_nr);
13761 +#endif
13762 + return add_mtd_device(device); /* add whole device */
13766 + * Detect and initialize DataFlash device connected to specified SPI channel.
13768 + * Device Density ID code Nr Pages Page Size Page offset
13769 + * AT45DB011B 1Mbit (128K) xx0011xx (0x0c) 512 264 9
13770 + * AT45DB021B 2Mbit (256K) xx0101xx (0x14) 1025 264 9
13771 + * AT45DB041B 4Mbit (512K) xx0111xx (0x1c) 2048 264 9
13772 + * AT45DB081B 8Mbit (1M) xx1001xx (0x24) 4096 264 9
13773 + * AT45DB0161B 16Mbit (2M) xx1011xx (0x2c) 4096 528 10
13774 + * AT45DB0321B 32Mbit (4M) xx1101xx (0x34) 8192 528 10
13775 + * AT45DB0642 64Mbit (8M) xx1111xx (0x3c) 8192 1056 11
13776 + * AT45DB1282 128Mbit (16M) xx0100xx (0x10) 16384 1056 11
13777 + */
13778 +static int __init at91_dataflash_detect(int channel)
13780 + int res = 0;
13781 + unsigned short status;
13783 + spi_access_bus(channel);
13784 + status = at91_dataflash_status();
13785 + spi_release_bus(channel);
13786 + if (status != 0xff) { /* no dataflash device there */
13787 + switch (status & 0x3c) {
13788 + case 0x0c: /* 0 0 1 1 */
13789 + res = add_dataflash(channel, "AT45DB011B", SZ_128K, 512, 264, 9);
13790 + break;
13791 + case 0x14: /* 0 1 0 1 */
13792 + res = add_dataflash(channel, "AT45DB021B", SZ_256K, 1025, 264, 9);
13793 + break;
13794 + case 0x1c: /* 0 1 1 1 */
13795 + res = add_dataflash(channel, "AT45DB041B", SZ_512K, 2048, 264, 9);
13796 + break;
13797 + case 0x24: /* 1 0 0 1 */
13798 + res = add_dataflash(channel, "AT45DB081B", SZ_1M, 4096, 264, 9);
13799 + break;
13800 + case 0x2c: /* 1 0 1 1 */
13801 + res = add_dataflash(channel, "AT45DB161B", SZ_2M, 4096, 528, 10);
13802 + break;
13803 + case 0x34: /* 1 1 0 1 */
13804 + res = add_dataflash(channel, "AT45DB321B", SZ_4M, 8192, 528, 10);
13805 + break;
13806 + case 0x3c: /* 1 1 1 1 */
13807 + res = add_dataflash(channel, "AT45DB642", SZ_8M, 8192, 1056, 11);
13808 + break;
13809 +// Currently unsupported since Atmel removed the "Main Memory Program via Buffer" commands.
13810 +// case 0x10: /* 0 1 0 0 */
13811 +// res = add_dataflash(channel, "AT45DB1282", SZ_16M, 16384, 1056, 11);
13812 +// break;
13813 + default:
13814 + printk(KERN_ERR "at91_dataflash: Unknown device (%x)\n", status & 0x3c);
13818 + return res;
13821 +static int __init at91_dataflash_init(void)
13823 + spi_transfer_desc = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
13824 + if (!spi_transfer_desc)
13825 + return -ENOMEM;
13827 + /* DataFlash (SPI chip select 0) */
13828 + at91_dataflash_detect(0);
13830 + if (machine_is_sweda_tms())
13831 + at91_dataflash_detect(1); /* DataFlash device (SPI chip select 1) */
13833 +#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
13834 + /* DataFlash card (SPI chip select 3) */
13835 + at91_dataflash_detect(3);
13836 +#endif
13838 + return 0;
13841 +static void __exit at91_dataflash_exit(void)
13843 + int i;
13845 + for (i = 0; i < DATAFLASH_MAX_DEVICES; i++) {
13846 + if (mtd_devices[i]) {
13847 +#ifdef CONFIG_MTD_PARTITIONS
13848 + del_mtd_partitions(mtd_devices[i]);
13849 +#else
13850 + del_mtd_device(mtd_devices[i]);
13851 +#endif
13852 + kfree(mtd_devices[i]->priv);
13853 + kfree(mtd_devices[i]);
13856 + nr_devices = 0;
13857 + kfree(spi_transfer_desc);
13861 +module_init(at91_dataflash_init);
13862 +module_exit(at91_dataflash_exit);
13864 +MODULE_LICENSE("GPL");
13865 +MODULE_AUTHOR("Andrew Victor");
13866 +MODULE_DESCRIPTION("DataFlash driver for Atmel AT91RM9200");
13867 diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
13868 index a5ed6d2..b35e481 100644
13869 --- a/drivers/mtd/devices/mtd_dataflash.c
13870 +++ b/drivers/mtd/devices/mtd_dataflash.c
13871 @@ -420,7 +420,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
13872 status = dataflash_waitready(priv->spi);
13874 /* Check result of the compare operation */
13875 - if ((status & (1 << 6)) == 1) {
13876 + if (status & (1 << 6)) {
13877 printk(KERN_ERR "%s: compare page %u, err %d\n",
13878 spi->dev.bus_id, pageaddr, status);
13879 remaining = 0;
13880 diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c
13881 index 25b114a..68771b3 100644
13882 --- a/drivers/net/arm/at91_ether.c
13883 +++ b/drivers/net/arm/at91_ether.c
13884 @@ -894,6 +894,7 @@ static void at91ether_rx(struct net_device *dev)
13885 skb_reserve(skb, 2);
13886 memcpy(skb_put(skb, pktlen), p_recv, pktlen);
13888 + skb->dev = dev;
13889 skb->protocol = eth_type_trans(skb, dev);
13890 dev->last_rx = jiffies;
13891 lp->stats.rx_bytes += pktlen;
13892 @@ -980,14 +981,24 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
13893 unsigned int val;
13894 int res;
13895 DECLARE_MAC_BUF(mac);
13896 + struct resource *res;
13897 + int ret;
13899 dev = alloc_etherdev(sizeof(struct at91_private));
13900 if (!dev)
13901 return -ENOMEM;
13903 + /* Get I/O base address and IRQ */
13904 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
13905 + if (!res) {
13906 + free_netdev(dev);
13907 + return -ENODEV;
13909 dev->base_addr = AT91_VA_BASE_EMAC;
13910 dev->irq = AT91RM9200_ID_EMAC;
13912 + SET_MODULE_OWNER(dev);
13914 /* Install the interrupt handler */
13915 if (request_irq(dev->irq, at91ether_interrupt, 0, dev->name, dev)) {
13916 free_netdev(dev);
13917 @@ -1043,7 +1054,9 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
13918 } else if (machine_is_csb337()) {
13919 /* mix link activity status into LED2 link state */
13920 write_phy(phy_address, MII_LEDCTRL_REG, 0x0d22);
13922 + } else if (machine_is_ecbat91())
13923 + write_phy(phy_address, MII_LEDCTRL_REG, 0x156A);
13925 disable_mdi();
13926 spin_unlock_irq(&lp->lock);
13928 @@ -1058,12 +1071,12 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
13929 lp->phy_address = phy_address; /* MDI address of PHY */
13931 /* Register the network interface */
13932 - res = register_netdev(dev);
13933 - if (res) {
13934 + ret = register_netdev(dev);
13935 + if (ret) {
13936 free_irq(dev->irq, dev);
13937 free_netdev(dev);
13938 dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);
13939 - return res;
13940 + return ret;
13943 /* Determine current link speed */
13944 diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
13945 index 1e6715e..641ea18 100644
13946 --- a/drivers/rtc/Kconfig
13947 +++ b/drivers/rtc/Kconfig
13948 @@ -445,6 +445,12 @@ config RTC_DRV_AT91RM9200
13949 help
13950 Driver for the Atmel AT91RM9200's internal RTC (Realtime Clock).
13952 +config RTC_DRV_AT91SAM9
13953 + tristate "AT91SAM926X"
13954 + depends on ARCH_AT91 && !ARCH_AT91RM9200
13955 + help
13956 + Driver for the Atmel AT91SAM9x's internal RTC (Realtime Clock).
13958 config RTC_DRV_BFIN
13959 tristate "Blackfin On-Chip RTC"
13960 depends on BLACKFIN
13961 diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
13962 index 465db4d..e075c5a 100644
13963 --- a/drivers/rtc/Makefile
13964 +++ b/drivers/rtc/Makefile
13965 @@ -19,6 +19,7 @@ rtc-core-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o
13967 obj-$(CONFIG_RTC_DRV_AT32AP700X)+= rtc-at32ap700x.o
13968 obj-$(CONFIG_RTC_DRV_AT91RM9200)+= rtc-at91rm9200.o
13969 +obj-$(CONFIG_RTC_DRV_AT91SAM9) += rtc-at91sam9.o
13970 obj-$(CONFIG_RTC_DRV_BFIN) += rtc-bfin.o
13971 obj-$(CONFIG_RTC_DRV_CMOS) += rtc-cmos.o
13972 obj-$(CONFIG_RTC_DRV_DS1216) += rtc-ds1216.o
13973 diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
13974 new file mode 100644
13975 index 0000000..020e579
13976 --- /dev/null
13977 +++ b/drivers/rtc/rtc-at91sam9.c
13978 @@ -0,0 +1,437 @@
13980 + * Real Time Clock driver for Atmel AT91SAM926x family of SoC
13982 + * Uses the RTT peripheral of the AT91SAM926x and a 32 bit word
13983 + * of the General Purpose Backup Registers (GPBR).
13985 + * (C) 2007 Michel Benoit
13987 + * Based on rtc-at91rm9200.c by Rick Bronson
13989 + * This program is free software; you can redistribute it and/or
13990 + * modify it under the terms of the GNU General Public License
13991 + * as published by the Free Software Foundation; either version
13992 + * 2 of the License, or (at your option) any later version.
13993 + */
13995 +#include <linux/module.h>
13996 +#include <linux/kernel.h>
13997 +#include <linux/platform_device.h>
13998 +#include <linux/time.h>
13999 +#include <linux/rtc.h>
14000 +#include <linux/interrupt.h>
14001 +#include <linux/ioctl.h>
14003 +#include <asm/mach/time.h>
14004 +#include <asm/arch/board.h>
14005 +#include <asm/arch/at91_rtt.h>
14007 +#define AT91_RTC_FREQ 1
14008 +#define ALARM_DISABLED 0xFFFFFFFF
14010 +#define RTC_GPBR_REG 0
14013 + * Read current time and date in RTC
14014 + */
14015 +static int at91_rtc_readtime(struct device *dev, struct rtc_time *tm)
14017 + unsigned long secs, secs2;
14018 + unsigned long base;
14020 + /* retrieve time base from battery backup register */
14021 + base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
14023 + /* read the second counter twice as it can be about to change */
14024 + secs = at91_sys_read(AT91_RTT_VR);
14025 + secs2 = at91_sys_read(AT91_RTT_VR);
14026 + if (secs != secs2)
14027 + secs = at91_sys_read(AT91_RTT_VR);
14029 + rtc_time_to_tm(base + secs, tm);
14031 + pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
14032 + 1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
14033 + tm->tm_hour, tm->tm_min, tm->tm_sec);
14035 + return 0;
14039 + * Set current time and date in RTC
14040 + */
14041 +static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)
14043 + int err;
14044 + unsigned long base, alarm, mr;
14045 + unsigned long secs;
14047 + pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
14048 + 1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
14049 + tm->tm_hour, tm->tm_min, tm->tm_sec);
14051 + err = rtc_tm_to_time(tm, &secs);
14052 + if (err != 0)
14053 + return err;
14055 + mr = at91_sys_read(AT91_RTT_MR);
14057 + /* disable interrupts */
14058 + at91_sys_write(AT91_RTT_MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
14060 + /* read current time base */
14061 + base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
14063 + /* store the new base time in a battery backup register */
14064 + secs += 1;
14065 + at91_sys_write(AT91_GPBR + RTC_GPBR_REG, secs);
14067 + /* adjust the alarm time for the new base */
14068 + alarm = at91_sys_read(AT91_RTT_AR);
14069 + if (alarm != ALARM_DISABLED) {
14070 + if (base > secs) {
14071 + /* time jumped backwards, increase time until alarm */
14072 + alarm += (base - secs);
14073 + } else if ((alarm + base) > secs) {
14074 + /* time jumped forwards, decrease time until alarm */
14075 + alarm -= (secs - base);
14076 + } else {
14077 + /* time jumped past the alarm, disable alarm */
14078 + alarm = ALARM_DISABLED;
14080 + at91_sys_write(AT91_RTT_AR, alarm);
14083 + /* reset the timer, and re-enable interrupts */
14084 + at91_sys_write(AT91_RTT_MR, mr | AT91_RTT_RTTRST);
14086 + return 0;
14090 + * Read alarm time and date in RTC
14091 + */
14092 +static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
14094 + struct rtc_time *tm = &alrm->time;
14095 + unsigned long base;
14096 + unsigned long alarm;
14098 + alarm = at91_sys_read(AT91_RTT_AR);
14100 + if (alarm == ALARM_DISABLED)
14101 + memset(tm, 0, sizeof(tm));
14102 + else {
14103 + base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
14105 + rtc_time_to_tm(base + alarm, tm);
14107 + pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
14108 + 1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
14109 + tm->tm_hour, tm->tm_min, tm->tm_sec);
14112 + return 0;
14116 + * Set alarm time and date in RTC
14117 + */
14118 +static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
14120 + struct rtc_time *tm = &alrm->time;
14121 + unsigned long secs;
14122 + unsigned long base;
14123 + int err;
14125 + err = rtc_tm_to_time(tm, &secs);
14126 + if (err != 0)
14127 + return err;
14129 + base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
14130 + if (base == 0) {
14131 + /* time is not set */
14132 + return -1;
14135 + if (secs <= base) {
14136 + /* alarm is before base time, disable alarm */
14137 + at91_sys_write(AT91_RTT_AR, ALARM_DISABLED);
14138 + return -1;
14141 + at91_sys_write(AT91_RTT_AR, secs - base);
14143 + pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
14144 + tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour,
14145 + tm->tm_min, tm->tm_sec);
14147 + return 0;
14151 + * Handle commands from user-space
14152 + */
14153 +static int at91_rtc_ioctl(struct device *dev, unsigned int cmd,
14154 + unsigned long arg)
14156 + int ret = 0;
14157 + unsigned long mr = at91_sys_read(AT91_RTT_MR);
14159 + pr_debug("%s(): cmd=%08x, arg=%08lx.\n", __FUNCTION__, cmd, arg);
14161 + switch (cmd) {
14162 + case RTC_AIE_OFF: /* alarm off */
14163 + at91_sys_write(AT91_RTT_MR, mr & ~AT91_RTT_ALMIEN);
14164 + break;
14165 + case RTC_AIE_ON: /* alarm on */
14166 + at91_sys_write(AT91_RTT_MR, mr | AT91_RTT_ALMIEN);
14167 + break;
14168 + case RTC_UIE_OFF: /* update off */
14169 + case RTC_PIE_OFF: /* periodic off */
14170 + at91_sys_write(AT91_RTT_MR, mr & ~AT91_RTT_RTTINCIEN);
14171 + break;
14172 + case RTC_UIE_ON: /* update on */
14173 + case RTC_PIE_ON: /* periodic on */
14174 + at91_sys_write(AT91_RTT_MR, mr | AT91_RTT_RTTINCIEN);
14175 + break;
14176 + case RTC_IRQP_READ: /* read periodic alarm frequency */
14177 + ret = put_user(AT91_RTC_FREQ, (unsigned long *) arg);
14178 + break;
14179 + case RTC_IRQP_SET: /* set periodic alarm frequency */
14180 + if (arg != AT91_RTC_FREQ)
14181 + ret = -EINVAL;
14182 + break;
14183 + default:
14184 + ret = -ENOIOCTLCMD;
14185 + break;
14188 + return ret;
14192 + * Provide additional RTC information in /proc/driver/rtc
14193 + */
14194 +static int at91_rtc_proc(struct device *dev, struct seq_file *seq)
14196 + unsigned long mr = at91_sys_read(AT91_RTT_MR);
14198 + seq_printf(seq, "alarm_IRQ\t: %s\n",
14199 + (mr & AT91_RTT_ALMIEN) ? "yes" : "no");
14200 + seq_printf(seq, "periodic_IRQ\t: %s\n",
14201 + (mr & AT91_RTT_RTTINCIEN) ? "yes" : "no");
14202 + seq_printf(seq, "periodic_freq\t: %ld\n",
14203 + (unsigned long) AT91_RTC_FREQ);
14204 + return 0;
14208 + * IRQ handler for the RTC
14209 + */
14210 +static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id)
14212 + struct platform_device *pdev = dev_id;
14213 + struct rtc_device *rtc = platform_get_drvdata(pdev);
14214 + unsigned long sr, mr;
14215 + unsigned long events = 0;
14217 + mr = at91_sys_read(AT91_RTT_MR);
14218 + sr = at91_sys_read(AT91_RTT_SR);
14220 + if ((sr & AT91_RTT_ALMS) && (mr & AT91_RTT_ALMIEN)) /* alarm status */
14221 + events |= (RTC_AF | RTC_IRQF);
14223 + if ((sr & AT91_RTT_RTTINC) && (mr & AT91_RTT_RTTINCIEN)) /* timer increment */
14224 + events |= (RTC_UF | RTC_IRQF);
14226 + /* this interrupt is shared */
14227 + if (events) {
14228 + rtc_update_irq(rtc, 1, events);
14230 + pr_debug("%s(): num=%ld, events=0x%02lx\n", __FUNCTION__,
14231 + events >> 8, events & 0x000000FF);
14233 + return IRQ_HANDLED;
14235 + return IRQ_NONE; /* not handled */
14238 +static const struct rtc_class_ops at91_rtc_ops = {
14239 + .ioctl = at91_rtc_ioctl,
14240 + .read_time = at91_rtc_readtime,
14241 + .set_time = at91_rtc_settime,
14242 + .read_alarm = at91_rtc_readalarm,
14243 + .set_alarm = at91_rtc_setalarm,
14244 + .proc = at91_rtc_proc,
14248 + * Initialize and install RTC driver
14249 + */
14250 +static int __init at91_rtc_probe(struct platform_device *pdev)
14252 + struct rtc_device *rtc;
14253 + int ret;
14254 + unsigned int mr;
14256 + mr = at91_sys_read(AT91_RTT_MR);
14258 + /* set prescalar value to 1 Hz */
14259 + mr &= ~AT91_RTT_RTPRES;
14260 + mr |= (AT91_SLOW_CLOCK & AT91_RTT_RTPRES);
14262 + /* disable all interrupts */
14263 + at91_sys_write(AT91_RTT_MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
14265 + /* Install RTC interrupt handler */
14266 + ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt,
14267 + IRQF_DISABLED | IRQF_SHARED,
14268 + "at91_rtt", pdev);
14269 + if (ret) {
14270 + printk(KERN_ERR "rtc-at91sam9: IRQ %d already in use.\n", AT91_ID_SYS);
14271 + return ret;
14274 + /* cpu init code should really have flagged this device as
14275 + * being wake-capable; if it didn't, do that here.
14276 + */
14277 + if (!device_can_wakeup(&pdev->dev))
14278 + device_init_wakeup(&pdev->dev, 1);
14280 + rtc = rtc_device_register(pdev->name, &pdev->dev,
14281 + &at91_rtc_ops, THIS_MODULE);
14282 + if (IS_ERR(rtc)) {
14283 + free_irq(AT91_ID_SYS, pdev);
14284 + return PTR_ERR(rtc);
14286 + platform_set_drvdata(pdev, rtc);
14288 + /* TODO re-enable interrupts that were set? */
14289 + at91_sys_write(AT91_RTT_MR, mr);
14291 + printk(KERN_INFO "AT91SAM9 Real Time Clock driver.\n");
14292 + return 0;
14296 + * Disable and remove the RTC driver
14297 + */
14298 +static int __exit at91_rtc_remove(struct platform_device *pdev)
14300 + struct rtc_device *rtc = platform_get_drvdata(pdev);
14301 + unsigned long mr;
14303 + device_init_wakeup(&pdev->dev, 0);
14305 + /* disable all interrupts */
14306 + mr = at91_sys_read(AT91_RTT_MR);
14307 + at91_sys_write(AT91_RTT_MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
14309 + free_irq(AT91_ID_SYS, pdev);
14311 + rtc_device_unregister(rtc);
14312 + platform_set_drvdata(pdev, NULL);
14314 + return 0;
14317 +#ifdef CONFIG_PM
14319 +/* AT91SAM9260 RTC Power management control */
14321 +static struct timespec at91_rtc_delta;
14322 +static u32 at91_rtc_imr;
14324 +static int at91_rtc_suspend(struct platform_device *pdev,
14325 + pm_message_t state)
14327 + struct rtc_time tm;
14328 + struct timespec time;
14329 + unsigned long mr;
14331 + time.tv_nsec = 0;
14333 + /* calculate time delta for suspend */
14334 + at91_rtc_readtime(&pdev->dev, &tm);
14335 + rtc_tm_to_time(&tm, &time.tv_sec);
14336 + save_time_delta(&at91_rtc_delta, &time);
14338 + /*
14339 + * this IRQ is shared with DBGU and other hardware which isn't
14340 + * necessarily doing PM like we are...
14341 + */
14342 + mr = at91_sys_read(AT91_RTT_MR);
14343 + at91_rtc_imr = mr & (AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN); /* save enabled interrupts */
14344 + if (at91_rtc_imr) {
14345 + if (device_may_wakeup(&pdev->dev))
14346 + enable_irq_wake(AT91_ID_SYS);
14347 + else
14348 + at91_sys_write(AT91_RTT_MR, mr & ~at91_rtc_imr);
14351 + pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
14352 + 1900 + tm.tm_year, tm.tm_mon, tm.tm_mday,
14353 + tm.tm_hour, tm.tm_min, tm.tm_sec);
14355 + return 0;
14358 +static int at91_rtc_resume(struct platform_device *pdev)
14360 + struct rtc_time tm;
14361 + struct timespec time;
14362 + unsigned int mr;
14364 + time.tv_nsec = 0;
14366 + at91_rtc_readtime(&pdev->dev, &tm);
14367 + rtc_tm_to_time(&tm, &time.tv_sec);
14368 + restore_time_delta(&at91_rtc_delta, &time);
14370 + if (at91_rtc_imr) {
14371 + if (device_may_wakeup(&pdev->dev))
14372 + disable_irq_wake(AT91_ID_SYS);
14373 + else {
14374 + mr = at91_sys_read(AT91_RTT_MR);
14375 + at91_sys_write(AT91_RTT_MR, mr | at91_rtc_imr);
14379 + pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
14380 + 1900 + tm.tm_year, tm.tm_mon, tm.tm_mday,
14381 + tm.tm_hour, tm.tm_min, tm.tm_sec);
14383 + return 0;
14385 +#else
14386 +#define at91_rtc_suspend NULL
14387 +#define at91_rtc_resume NULL
14388 +#endif
14390 +static struct platform_driver at91_rtc_driver = {
14391 + .remove = __exit_p(at91_rtc_remove),
14392 + .suspend = at91_rtc_suspend,
14393 + .resume = at91_rtc_resume,
14394 + .driver = {
14395 + .name = "at91_rtc",
14396 + .owner = THIS_MODULE,
14397 + },
14400 +static int __init at91_rtc_init(void)
14402 + return platform_driver_probe(&at91_rtc_driver, at91_rtc_probe);
14405 +static void __exit at91_rtc_exit(void)
14407 + platform_driver_unregister(&at91_rtc_driver);
14410 +module_init(at91_rtc_init);
14411 +module_exit(at91_rtc_exit);
14413 +MODULE_AUTHOR("Michel Benoit");
14414 +MODULE_DESCRIPTION("RTC driver for Atmel AT91SAM926x");
14415 +MODULE_LICENSE("GPL");
14416 diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c
14417 index 111da57..0f8c25a 100644
14418 --- a/drivers/serial/atmel_serial.c
14419 +++ b/drivers/serial/atmel_serial.c
14420 @@ -7,6 +7,8 @@
14421 * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.
14422 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
14424 + * DMA support added by Chip Coldwell.
14426 * This program is free software; you can redistribute it and/or modify
14427 * it under the terms of the GNU General Public License as published by
14428 * the Free Software Foundation; either version 2 of the License, or
14429 @@ -33,6 +35,7 @@
14430 #include <linux/sysrq.h>
14431 #include <linux/tty_flip.h>
14432 #include <linux/platform_device.h>
14433 +#include <linux/dma-mapping.h>
14434 #include <linux/atmel_pdc.h>
14436 #include <asm/io.h>
14437 @@ -47,6 +50,11 @@
14439 #include "atmel_serial.h"
14441 +#define SUPPORT_PDC
14442 +#define PDC_BUFFER_SIZE (L1_CACHE_BYTES << 3)
14443 +#warning "Revisit"
14444 +#define PDC_RX_TIMEOUT (3 * 10) /* 3 bytes */
14446 #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
14447 #define SUPPORT_SYSRQ
14448 #endif
14449 @@ -107,6 +115,13 @@
14450 static int (*atmel_open_hook)(struct uart_port *);
14451 static void (*atmel_close_hook)(struct uart_port *);
14453 +struct atmel_dma_buffer {
14454 + unsigned char *buf;
14455 + dma_addr_t dma_addr;
14456 + size_t dma_size;
14457 + unsigned int ofs;
14461 * We wrap our port structure around the generic uart_port.
14463 @@ -115,10 +130,20 @@ struct atmel_uart_port {
14464 struct clk *clk; /* uart clock */
14465 unsigned short suspended; /* is port suspended? */
14466 int break_active; /* break being received */
14468 + short use_dma_rx; /* enable PDC receiver */
14469 + short pdc_rx_idx; /* current PDC RX buffer */
14470 + struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */
14472 + short use_dma_tx; /* enable PDC transmitter */
14473 + struct atmel_dma_buffer pdc_tx; /* PDC transmitter */
14476 static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
14478 +#define PDC_RX_BUF(port) &(port)->pdc_rx[(port)->pdc_rx_idx]
14479 +#define PDC_RX_SWITCH(port) (port)->pdc_rx_idx = !(port)->pdc_rx_idx
14481 #ifdef SUPPORT_SYSRQ
14482 static struct console atmel_console;
14483 #endif
14484 @@ -204,7 +229,14 @@ static u_int atmel_get_mctrl(struct uart_port *port)
14486 static void atmel_stop_tx(struct uart_port *port)
14488 - UART_PUT_IDR(port, ATMEL_US_TXRDY);
14489 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14491 + if (atmel_port->use_dma_tx) {
14492 + UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
14493 + UART_PUT_IDR(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
14495 + else
14496 + UART_PUT_IDR(port, ATMEL_US_TXRDY);
14500 @@ -212,7 +244,19 @@ static void atmel_stop_tx(struct uart_port *port)
14502 static void atmel_start_tx(struct uart_port *port)
14504 - UART_PUT_IER(port, ATMEL_US_TXRDY);
14505 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14507 + if (atmel_port->use_dma_tx) {
14508 + if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN)
14509 + /* The transmitter is already running. Yes, we
14510 + really need this.*/
14511 + return;
14513 + UART_PUT_IER(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
14514 + UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
14516 + else
14517 + UART_PUT_IER(port, ATMEL_US_TXRDY);
14521 @@ -220,7 +264,14 @@ static void atmel_start_tx(struct uart_port *port)
14523 static void atmel_stop_rx(struct uart_port *port)
14525 - UART_PUT_IDR(port, ATMEL_US_RXRDY);
14526 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14528 + if (atmel_port->use_dma_rx) {
14529 + UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS); /* disable PDC receive */
14530 + UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
14532 + else
14533 + UART_PUT_IDR(port, ATMEL_US_RXRDY);
14537 @@ -243,6 +294,134 @@ static void atmel_break_ctl(struct uart_port *port, int break_state)
14541 + * Receive data via the PDC. A buffer has been fulled.
14542 + */
14543 +static void atmel_pdc_endrx(struct uart_port *port)
14545 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14546 + struct tty_struct *tty = port->info->tty;
14547 + struct atmel_dma_buffer *pdc = PDC_RX_BUF(atmel_port);
14548 + unsigned int count;
14550 + count = pdc->dma_size - pdc->ofs;
14551 + if (likely(count > 0)) {
14552 + dma_sync_single_for_cpu(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
14553 + tty_insert_flip_string(tty, pdc->buf + pdc->ofs, count);
14554 + tty_flip_buffer_push(tty);
14556 + port->icount.rx += count;
14559 + /* Set this buffer as the next receive buffer */
14560 + pdc->ofs = 0;
14561 + UART_PUT_RNPR(port, pdc->dma_addr);
14562 + UART_PUT_RNCR(port, pdc->dma_size);
14564 + /* Switch to next buffer */
14565 + PDC_RX_SWITCH(atmel_port); /* next PDC buffer */
14569 + * Receive data via the PDC. At least one byte was received, but the
14570 + * buffer was not full when the inter-character timeout expired.
14571 + */
14572 +static void atmel_pdc_timeout(struct uart_port *port)
14574 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14575 + struct tty_struct *tty = port->info->tty;
14576 + struct atmel_dma_buffer *pdc = PDC_RX_BUF(atmel_port);
14577 + /* unsigned */ int ofs, count;
14579 + ofs = UART_GET_RPR(port) - pdc->dma_addr; /* current DMA adress */
14580 + count = ofs - pdc->ofs;
14582 + if (likely(count > 0)) {
14583 + dma_sync_single_for_cpu(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
14584 + tty_insert_flip_string(tty, pdc->buf + pdc->ofs, count);
14585 + tty_flip_buffer_push(tty);
14587 + pdc->ofs = ofs;
14588 + port->icount.rx += count;
14591 + /* reset the UART timeout */
14592 + UART_PUT_CR(port, ATMEL_US_STTTO);
14596 + * Deal with parity, framing and overrun errors.
14597 + */
14598 +static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status)
14600 + /* clear error */
14601 + UART_PUT_CR(port, ATMEL_US_RSTSTA);
14603 + if (status & ATMEL_US_RXBRK) {
14604 + status &= ~(ATMEL_US_PARE | ATMEL_US_FRAME); /* ignore side-effect */
14605 + port->icount.brk++;
14607 + if (status & ATMEL_US_PARE)
14608 + port->icount.parity++;
14609 + if (status & ATMEL_US_FRAME)
14610 + port->icount.frame++;
14611 + if (status & ATMEL_US_OVRE)
14612 + port->icount.overrun++;
14616 + * A transmission via the PDC is complete.
14617 + */
14618 +static void atmel_pdc_endtx(struct uart_port *port)
14620 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14621 + struct circ_buf *xmit = &port->info->xmit;
14622 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
14624 + xmit->tail += pdc->ofs;
14625 + if (xmit->tail >= SERIAL_XMIT_SIZE)
14626 + xmit->tail -= SERIAL_XMIT_SIZE;
14628 + port->icount.tx += pdc->ofs;
14629 + pdc->ofs = 0;
14631 + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
14632 + uart_write_wakeup(port);
14636 + * The PDC transmitter is idle, so either start the next transfer or
14637 + * disable the transmitter.
14638 + */
14639 +static void atmel_pdc_txbufe(struct uart_port *port)
14641 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14642 + struct circ_buf *xmit = &port->info->xmit;
14643 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
14644 + int count;
14646 + if (!uart_circ_empty(xmit)) {
14647 + /* more to transmit - setup next transfer */
14648 + UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
14649 + dma_sync_single_for_device(port->dev, pdc->dma_addr, pdc->dma_size, DMA_TO_DEVICE);
14651 + if (xmit->tail < xmit->head)
14652 + count = xmit->head - xmit->tail;
14653 + else
14654 + count = SERIAL_XMIT_SIZE - xmit->tail;
14655 + pdc->ofs = count;
14657 + UART_PUT_TPR(port, pdc->dma_addr + xmit->tail);
14658 + UART_PUT_TCR(port, count);
14659 + UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
14661 + else {
14662 + /* nothing left to transmit - disable the transmitter */
14663 + UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
14664 + UART_PUT_IDR(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
14669 * Characters received (called from interrupt handler)
14671 static void atmel_rx_chars(struct uart_port *port)
14672 @@ -361,6 +540,14 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
14673 status = UART_GET_CSR(port);
14674 pending = status & UART_GET_IMR(port);
14675 while (pending) {
14676 + /* PDC receive */
14677 + if (pending & ATMEL_US_ENDRX)
14678 + atmel_pdc_endrx(port);
14679 + if (pending & ATMEL_US_TIMEOUT)
14680 + atmel_pdc_timeout(port);
14681 + if (atmel_port->use_dma_rx && pending & (ATMEL_US_RXBRK | ATMEL_US_OVRE | ATMEL_US_FRAME | ATMEL_US_PARE))
14682 + atmel_pdc_rxerr(port, pending);
14684 /* Interrupt receive */
14685 if (pending & ATMEL_US_RXRDY)
14686 atmel_rx_chars(port);
14687 @@ -385,6 +572,12 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
14688 if (pending & (ATMEL_US_RIIC | ATMEL_US_DSRIC | ATMEL_US_DCDIC | ATMEL_US_CTSIC))
14689 wake_up_interruptible(&port->info->delta_msr_wait);
14691 + /* PDC transmit */
14692 + if (pending & ATMEL_US_ENDTX)
14693 + atmel_pdc_endtx(port);
14694 + if (pending & ATMEL_US_TXBUFE)
14695 + atmel_pdc_txbufe(port);
14697 /* Interrupt transmit */
14698 if (pending & ATMEL_US_TXRDY)
14699 atmel_tx_chars(port);
14700 @@ -404,6 +597,7 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
14701 static int atmel_startup(struct uart_port *port)
14703 int retval;
14704 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14707 * Ensure that no interrupts are enabled otherwise when
14708 @@ -422,6 +616,47 @@ static int atmel_startup(struct uart_port *port)
14712 + * Initialize DMA (if necessary)
14713 + */
14714 + if (atmel_port->use_dma_rx) {
14715 + int i;
14717 + for (i = 0; i < 2; i++) {
14718 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
14720 + pdc->buf = kmalloc(PDC_BUFFER_SIZE, GFP_KERNEL);
14721 + if (pdc->buf == NULL) {
14722 + if (i != 0) {
14723 + dma_unmap_single(port->dev, atmel_port->pdc_rx[0].dma_addr, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
14724 + kfree(atmel_port->pdc_rx[0].buf);
14726 + free_irq(port->irq, port);
14727 + return -ENOMEM;
14729 + pdc->dma_addr = dma_map_single(port->dev, pdc->buf, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
14730 + pdc->dma_size = PDC_BUFFER_SIZE;
14731 + pdc->ofs = 0;
14734 + atmel_port->pdc_rx_idx = 0;
14736 + UART_PUT_RPR(port, atmel_port->pdc_rx[0].dma_addr);
14737 + UART_PUT_RCR(port, PDC_BUFFER_SIZE);
14739 + UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr);
14740 + UART_PUT_RNCR(port, PDC_BUFFER_SIZE);
14742 + if (atmel_port->use_dma_tx) {
14743 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
14744 + struct circ_buf *xmit = &port->info->xmit;
14746 + pdc->buf = xmit->buf;
14747 + pdc->dma_addr = dma_map_single(port->dev, pdc->buf, SERIAL_XMIT_SIZE, DMA_TO_DEVICE);
14748 + pdc->dma_size = SERIAL_XMIT_SIZE;
14749 + pdc->ofs = 0;
14752 + /*
14753 * If there is a specific "open" function (to register
14754 * control line interrupts)
14756 @@ -439,7 +674,15 @@ static int atmel_startup(struct uart_port *port)
14757 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
14758 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); /* enable xmit & rcvr */
14760 - UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
14761 + if (atmel_port->use_dma_rx) {
14762 + UART_PUT_RTOR(port, PDC_RX_TIMEOUT); /* set UART timeout */
14763 + UART_PUT_CR(port, ATMEL_US_STTTO);
14765 + UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
14766 + UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); /* enable PDC controller */
14768 + else
14769 + UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
14771 return 0;
14773 @@ -449,6 +692,33 @@ static int atmel_startup(struct uart_port *port)
14775 static void atmel_shutdown(struct uart_port *port)
14777 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14779 + /*
14780 + * Ensure everything is stopped.
14781 + */
14782 + atmel_stop_rx(port);
14783 + atmel_stop_tx(port);
14785 + /*
14786 + * Shut-down the DMA.
14787 + */
14788 + if (atmel_port->use_dma_rx) {
14789 + int i;
14791 + for (i = 0; i < 2; i++) {
14792 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
14794 + dma_unmap_single(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
14795 + kfree(pdc->buf);
14798 + if (atmel_port->use_dma_tx) {
14799 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
14801 + dma_unmap_single(port->dev, pdc->dma_addr, pdc->dma_size, DMA_TO_DEVICE);
14805 * Disable all interrupts, port and break condition.
14807 @@ -500,6 +770,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state, unsigned
14809 static void atmel_set_termios(struct uart_port *port, struct ktermios * termios, struct ktermios * old)
14811 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14812 unsigned long flags;
14813 unsigned int mode, imr, quot, baud;
14815 @@ -509,7 +780,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios * termios,
14816 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
14817 quot = uart_get_divisor(port, baud);
14819 - if (quot > 65535) { /* BRGR is 16-bit, so switch to slower clock */
14820 + if (quot > 65535) { /* BRGR is 16-bit, so switch to slower clock */
14821 quot /= 8;
14822 mode |= ATMEL_US_USCLKS_MCK_DIV8;
14824 @@ -558,6 +829,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios * termios,
14825 if (termios->c_iflag & (BRKINT | PARMRK))
14826 port->read_status_mask |= ATMEL_US_RXBRK;
14828 + if (atmel_port->use_dma_rx) /* need to enable error interrupts */
14829 + UART_PUT_IER(port, port->read_status_mask);
14832 * Characters to ignore
14834 @@ -736,6 +1010,13 @@ static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port, struct
14835 clk_enable(atmel_port->clk);
14836 port->uartclk = clk_get_rate(atmel_port->clk);
14839 +#ifdef SUPPORT_PDC
14840 + atmel_port->use_dma_rx = data->use_dma_rx;
14841 + atmel_port->use_dma_tx = data->use_dma_tx;
14842 + if (atmel_port->use_dma_tx)
14843 + port->fifosize = PDC_BUFFER_SIZE;
14844 +#endif
14848 @@ -912,7 +1193,8 @@ static int atmel_serial_suspend(struct platform_device *pdev, pm_message_t state
14849 struct uart_port *port = platform_get_drvdata(pdev);
14850 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
14852 - if (device_may_wakeup(&pdev->dev) && !at91_suspend_entering_slow_clock())
14853 + if (device_may_wakeup(&pdev->dev)
14854 + && !clk_must_disable(atmel_port->clk))
14855 enable_irq_wake(port->irq);
14856 else {
14857 uart_suspend_port(&atmel_uart, port);
14858 diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
14859 index abf0504..b655bbc 100644
14860 --- a/drivers/spi/Kconfig
14861 +++ b/drivers/spi/Kconfig
14862 @@ -100,6 +100,15 @@ config SPI_BUTTERFLY
14863 inexpensive battery powered microcontroller evaluation board.
14864 This same cable can be used to flash new firmware.
14866 +config SPI_AT91
14867 + tristate "AT91RM9200 Bitbang SPI Master"
14868 + depends on SPI_MASTER && ARCH_AT91RM9200 && !SPI_ATMEL && EXPERIMENTAL
14869 + select SPI_BITBANG
14870 + help
14871 + This is dumb PIO bitbanging driver for the Atmel AT91RM9200.
14872 + The SPI_ATMEL driver will be its replacement, using the native
14873 + SPI hardware and its DMA controller.
14875 config SPI_IMX
14876 tristate "Freescale iMX SPI controller"
14877 depends on SPI_MASTER && ARCH_IMX && EXPERIMENTAL
14878 diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
14879 index 41fbac4..124aeec 100644
14880 --- a/drivers/spi/Makefile
14881 +++ b/drivers/spi/Makefile
14882 @@ -27,6 +27,7 @@ obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
14883 obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
14884 obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
14885 obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
14886 +obj-$(CONFIG_SPI_AT91) += spi_at91_bitbang.o
14887 # ... add above this line ...
14889 # SPI protocol drivers (device/link on bus)
14890 diff --git a/drivers/spi/spi_at91_bitbang.c b/drivers/spi/spi_at91_bitbang.c
14891 new file mode 100644
14892 index 0000000..b8d82c2
14893 --- /dev/null
14894 +++ b/drivers/spi/spi_at91_bitbang.c
14895 @@ -0,0 +1,207 @@
14897 + * at91_spi.c - at91 SPI driver (BOOTSTRAP/BITBANG VERSION)
14899 + * Copyright (C) 2006 David Brownell
14901 + * This program is free software; you can redistribute it and/or modify
14902 + * it under the terms of the GNU General Public License as published by
14903 + * the Free Software Foundation; either version 2 of the License, or
14904 + * (at your option) any later version.
14906 + * This program is distributed in the hope that it will be useful,
14907 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
14908 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14909 + * GNU General Public License for more details.
14911 + * You should have received a copy of the GNU General Public License
14912 + * along with this program; if not, write to the Free Software
14913 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
14914 + */
14915 +#include <linux/kernel.h>
14916 +#include <linux/init.h>
14917 +#include <linux/platform_device.h>
14919 +#include <linux/spi/spi.h>
14920 +#include <linux/spi/spi_bitbang.h>
14922 +#include <asm/arch/gpio.h>
14926 + * FIXME this bitbanging version is just to help bootstrap systems until
14927 + * there's a native SPI+IRQ+DMA controller driver ... such a driver should
14928 + * be a drop-in replacement for this one, and much faster.
14930 + * remember:
14932 + * - other at91 parts (like at91sam9) have multiple controllers
14933 + * and different pin muxing; this version is at91rm9200 specfic.
14935 + * - at91sam9261 SPI0 pins are directly muxed with MMC/SD pins.
14937 + * - rm9200 spi chipselects drop wrongly, so the native driver
14938 + * will need to use gpios much like this does.
14940 + * - real hardware only allows 8..16 bits per word, while this
14941 + * bitbanger allows 1..32 (incompatible superset).
14943 + * - this disregards clock parameters. with inlined gpio calls,
14944 + * gcc 3.4.4 produces about 1.5 mbit/sec, more than 2x faster
14945 + * than using the subroutined veresion from txrx_word().
14947 + * - suspend/resume and <linux/clk.h> support is missing ...
14948 + */
14950 +#define spi_miso_bit AT91_PIN_PA0
14951 +#define spi_mosi_bit AT91_PIN_PA1
14952 +#define spi_sck_bit AT91_PIN_PA2
14954 +struct at91_spi {
14955 + struct spi_bitbang bitbang;
14956 + struct platform_device *pdev;
14959 +/*----------------------------------------------------------------------*/
14961 +static inline void setsck(struct spi_device *spi, int is_on)
14963 + at91_set_gpio_value(spi_sck_bit, is_on);
14966 +static inline void setmosi(struct spi_device *spi, int is_on)
14968 + at91_set_gpio_value(spi_mosi_bit, is_on);
14971 +static inline int getmiso(struct spi_device *spi)
14973 + return at91_get_gpio_value(spi_miso_bit);
14976 +static void at91_spi_chipselect(struct spi_device *spi, int is_active)
14978 + unsigned long cs = (unsigned long) spi->controller_data;
14980 + /* set default clock polarity */
14981 + if (is_active)
14982 + setsck(spi, spi->mode & SPI_CPOL);
14984 + /* only support active-low (default) */
14985 + at91_set_gpio_value(cs, !is_active);
14989 + * NOTE: this is "as fast as we can"; it should be a function of
14990 + * the device clock ...
14991 + */
14992 +#define spidelay(X) do{} while(0)
14994 +#define EXPAND_BITBANG_TXRX
14995 +#include <linux/spi/spi_bitbang.h>
14997 +static u32 at91_spi_txrx_word_mode0(struct spi_device *spi,
14998 + unsigned nsecs, u32 word, u8 bits)
15000 + return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, 8);
15003 +static u32 at91_spi_txrx_word_mode1(struct spi_device *spi,
15004 + unsigned nsecs, u32 word, u8 bits)
15006 + return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, 8);
15009 +static u32 at91_spi_txrx_word_mode2(struct spi_device *spi,
15010 + unsigned nsecs, u32 word, u8 bits)
15012 + return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, 8);
15015 +static u32 at91_spi_txrx_word_mode3(struct spi_device *spi,
15016 + unsigned nsecs, u32 word, u8 bits)
15018 + return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, 8);
15021 +/*----------------------------------------------------------------------*/
15023 +static int __init at91_spi_probe(struct platform_device *pdev)
15025 + int status;
15026 + struct spi_master *master;
15027 + struct at91_spi *at91_spi;
15029 + if (pdev->id != 0) /* SPI0 bus */
15030 + return -EINVAL;
15032 + master = spi_alloc_master(&pdev->dev, sizeof *at91_spi);
15033 + if (!master)
15034 + return -ENOMEM;
15036 + at91_spi = spi_master_get_devdata(master);
15037 + at91_spi->pdev = pdev;
15038 + platform_set_drvdata(pdev, at91_spi);
15040 + /* SPI and bitbang hookup */
15041 + master->bus_num = 0;
15042 + master->num_chipselect = 4;
15044 + at91_spi->bitbang.master = spi_master_get(master);
15045 + at91_spi->bitbang.chipselect = at91_spi_chipselect;
15046 + at91_spi->bitbang.txrx_word[SPI_MODE_0] = at91_spi_txrx_word_mode0;
15047 + at91_spi->bitbang.txrx_word[SPI_MODE_1] = at91_spi_txrx_word_mode1;
15048 + at91_spi->bitbang.txrx_word[SPI_MODE_2] = at91_spi_txrx_word_mode2;
15049 + at91_spi->bitbang.txrx_word[SPI_MODE_3] = at91_spi_txrx_word_mode3;
15051 + status = spi_bitbang_start(&at91_spi->bitbang);
15052 + if (status < 0)
15053 + (void) spi_master_put(at91_spi->bitbang.master);
15055 + return status;
15058 +static int __exit at91_spi_remove(struct platform_device *pdev)
15060 + struct at91_spi *at91_spi = platform_get_drvdata(pdev);
15061 + int status;
15063 + /* stop() unregisters child devices too */
15064 + status = spi_bitbang_stop(&at91_spi->bitbang);
15065 + (void) spi_master_put(at91_spi->bitbang.master);
15067 + platform_set_drvdata(pdev, NULL);
15068 + return status;
15071 +static struct platform_driver at91_spi_driver = {
15072 + .probe = at91_spi_probe,
15073 + .remove = __exit_p(at91_spi_remove),
15074 + .driver = {
15075 + .name = "at91_spi",
15076 + .owner = THIS_MODULE,
15077 + },
15080 +static int __init at91_spi_init(void)
15082 + at91_set_gpio_output(spi_sck_bit, 0);
15083 + at91_set_gpio_output(spi_mosi_bit, 0);
15084 + at91_set_gpio_input(spi_miso_bit, 1 /* pullup */);
15086 + /* register driver */
15087 + return platform_driver_register(&at91_spi_driver);
15090 +static void __exit at91_spi_exit(void)
15092 + platform_driver_unregister(&at91_spi_driver);
15095 +device_initcall(at91_spi_init);
15096 +module_exit(at91_spi_exit);
15098 +MODULE_ALIAS("at91_spi.0");
15100 +MODULE_DESCRIPTION("AT91 SPI support (BOOTSTRAP/BITBANG VERSION)");
15101 +MODULE_AUTHOR("David Brownell");
15102 +MODULE_LICENSE("GPL");
15103 diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
15104 index cd62b02..4e08216 100644
15105 --- a/drivers/usb/gadget/at91_udc.c
15106 +++ b/drivers/usb/gadget/at91_udc.c
15107 @@ -1784,7 +1784,7 @@ static int at91udc_suspend(struct platform_device *pdev, pm_message_t mesg)
15109 if ((!udc->suspended && udc->addr)
15110 || !wake
15111 - || at91_suspend_entering_slow_clock()) {
15112 + || clk_must_disable(udc->fclk)) {
15113 pullup(udc, 0);
15114 wake = 0;
15115 } else
15116 diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
15117 index d849c80..aeed2ba 100644
15118 --- a/drivers/usb/host/ohci-at91.c
15119 +++ b/drivers/usb/host/ohci-at91.c
15120 @@ -299,7 +299,7 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
15122 * REVISIT: some boards will be able to turn VBUS off...
15124 - if (at91_suspend_entering_slow_clock()) {
15125 + if (clk_must_disable(fclk)) {
15126 ohci_usb_reset (ohci);
15127 at91_stop_clock();
15129 diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
15130 index 5b3dbcf..94e8243 100644
15131 --- a/drivers/video/Kconfig
15132 +++ b/drivers/video/Kconfig
15133 @@ -876,6 +876,17 @@ config FB_EPSON1355
15134 framebuffer. Product specs at
15135 <http://www.erd.epson.com/vdc/html/products.htm>.
15137 +config FB_S1D15605
15138 + tristate "Epson S1D15605 framebuffer support"
15139 + depends on FB
15140 + default m if MACH_KB9200
15141 + select FB_CFB_FILLRECT
15142 + select FB_CFB_COPYAREA
15143 + select FB_CFB_IMAGEBLIT
15144 + help
15145 + Build in support for the S1D15605 Epson Research 128x64
15146 + LCD controller as a framebuffer.
15148 config FB_S1D13XXX
15149 tristate "Epson S1D13XXX framebuffer support"
15150 depends on FB
15151 @@ -889,7 +900,7 @@ config FB_S1D13XXX
15153 config FB_ATMEL
15154 tristate "AT91/AT32 LCD Controller support"
15155 - depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || AVR32)
15156 + depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || AVR32)
15157 select FB_CFB_FILLRECT
15158 select FB_CFB_COPYAREA
15159 select FB_CFB_IMAGEBLIT
15160 diff --git a/drivers/video/Makefile b/drivers/video/Makefile
15161 index 83e02b3..d84b004 100644
15162 --- a/drivers/video/Makefile
15163 +++ b/drivers/video/Makefile
15164 @@ -87,7 +87,8 @@ obj-$(CONFIG_FB_G364) += g364fb.o
15165 obj-$(CONFIG_FB_SA1100) += sa1100fb.o
15166 obj-$(CONFIG_FB_HIT) += hitfb.o
15167 obj-$(CONFIG_FB_EPSON1355) += epson1355fb.o
15168 -obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
15169 +obj-$(CONFIG_FB_S1D15605) += s1d15605fb.o
15170 +obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
15171 obj-$(CONFIG_FB_PVR2) += pvr2fb.o
15172 obj-$(CONFIG_FB_VOODOO1) += sstfb.o
15173 obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o
15174 diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
15175 index 9609a6c..e6dde97 100644
15176 --- a/drivers/video/backlight/Kconfig
15177 +++ b/drivers/video/backlight/Kconfig
15178 @@ -90,3 +90,11 @@ config BACKLIGHT_CARILLO_RANCH
15179 help
15180 If you have a Intel LE80578 (Carillo Ranch) say Y to enable the
15181 backlight driver.
15183 +config BACKLIGHT_KB920x
15184 + tristate "KwikByte KB9202 Backlight Driver"
15185 + depends on BACKLIGHT_CLASS_DEVICE && MACH_KB9200
15186 + default y
15187 + help
15188 + If you have a KwikByte KB9202 board, say Y to enable the
15189 + backlight driver.
15190 diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
15191 index 965a78b..13886a7 100644
15192 --- a/drivers/video/backlight/Makefile
15193 +++ b/drivers/video/backlight/Makefile
15194 @@ -9,3 +9,4 @@ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
15195 obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
15196 obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
15197 obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
15198 +obj-$(CONFIG_BACKLIGHT_KB920x) += kb920x_bl.o
15199 diff --git a/drivers/video/backlight/kb920x_bl.c b/drivers/video/backlight/kb920x_bl.c
15200 new file mode 100644
15201 index 0000000..bab1e29
15202 --- /dev/null
15203 +++ b/drivers/video/backlight/kb920x_bl.c
15204 @@ -0,0 +1,164 @@
15206 + * Backlight Driver for KB9202
15208 + * Copyright (c) 2006 KwikByte
15210 + * Based on Sharp's Corgi Backlight Driver
15212 + * This file is subject to the terms and conditions of the GNU General Public
15213 + * License. See the file "COPYING" in the main directory of this archive
15214 + * for more details.
15215 + */
15217 +#include <linux/module.h>
15218 +#include <linux/kernel.h>
15219 +#include <linux/init.h>
15220 +#include <linux/platform_device.h>
15221 +#include <linux/spinlock.h>
15222 +#include <linux/fb.h>
15223 +#include <linux/backlight.h>
15225 +#include <asm/arch/gpio.h>
15227 +/* The backlight is on(1)/off(0) */
15228 +#define KB9202_DEFAULT_INTENSITY 1
15229 +#define KB9202_MAX_INTENSITY 1
15231 +static int kb9202bl_suspended;
15232 +static int current_intensity = 0;
15233 +static DEFINE_SPINLOCK(bl_lock);
15235 +static int kb9202bl_set_intensity(struct backlight_device *bd)
15237 + unsigned long flags;
15238 + int intensity = bd->props.brightness;
15240 + if (bd->props.power != FB_BLANK_UNBLANK)
15241 + intensity = 0;
15242 + if (bd->props.fb_blank != FB_BLANK_UNBLANK)
15243 + intensity = 0;
15244 + if (kb9202bl_suspended)
15245 + intensity = 0;
15247 + if ((!current_intensity) && (bd->props.power == FB_BLANK_UNBLANK))
15248 + intensity = 1;
15250 + spin_lock_irqsave(&bl_lock, flags);
15251 + if (intensity)
15252 + gpio_set_value(AT91_PIN_PC23, 1);
15253 + else
15254 + gpio_set_value(AT91_PIN_PC23, 0);
15255 + spin_unlock_irqrestore(&bl_lock, flags);
15257 + current_intensity = intensity;
15259 + return 0;
15262 +static int kb9202bl_get_intensity(struct backlight_device *bd)
15264 + return current_intensity;
15267 +static struct backlight_ops kb9202bl_ops = {
15268 + .get_brightness = kb9202bl_get_intensity,
15269 + .update_status = kb9202bl_set_intensity,
15272 +static int __init kb9202bl_probe(struct platform_device *pdev)
15274 + struct backlight_device *bd;
15276 + bd = backlight_device_register ("kb9202-bl", &pdev->dev, NULL, &kb9202bl_ops);
15277 + if (IS_ERR(bd))
15278 + return PTR_ERR(bd);
15280 + platform_set_drvdata(pdev, bd);
15282 + bd->props.max_brightness = KB9202_MAX_INTENSITY;
15283 + bd->props.brightness = KB9202_DEFAULT_INTENSITY;
15284 + (void) kb9202bl_set_intensity(bd);
15286 + return 0;
15289 +static int kb9202bl_remove(struct platform_device *pdev)
15291 + struct backlight_device *bd = platform_get_drvdata(pdev);
15293 + bd->props.brightness = 0;
15294 + bd->props.power = 0;
15295 + (void) kb9202bl_set_intensity(bd);
15297 + backlight_device_unregister(bd);
15299 + return 0;
15302 +#ifdef CONFIG_PM
15303 +static int kb9202bl_suspend(struct platform_device *pdev, pm_message_t state)
15305 + struct backlight_device *bd = platform_get_drvdata(pdev);
15307 + kb9202bl_suspended = 1;
15308 + (void) kb9202bl_set_intensity(bd);
15309 + return 0;
15312 +static int kb9202bl_resume(struct platform_device *pdev)
15314 + struct backlight_device *bd = platform_get_drvdata(pdev);
15316 + kb9202bl_suspended = 0;
15317 + (void) kb9202bl_set_intensity(bd);
15318 + return 0;
15320 +#else
15321 +#define kb9202bl_suspend NULL
15322 +#define kb9202bl_resume NULL
15323 +#endif
15325 +static struct platform_driver kb9202bl_driver = {
15326 + .probe = kb9202bl_probe,
15327 + .remove = kb9202bl_remove,
15328 + .suspend = kb9202bl_suspend,
15329 + .resume = kb9202bl_resume,
15330 + .driver = {
15331 + .name = "kb9202-bl",
15332 + .owner = THIS_MODULE,
15333 + },
15336 +static struct platform_device *kb9202bl_device;
15338 +static int __init kb9202bl_init(void)
15340 + int ret;
15342 + ret = platform_driver_register(&kb9202bl_driver);
15343 + if (!ret) {
15344 + kb9202bl_device = platform_device_alloc("kb9202-bl", -1);
15345 + if (!kb9202bl_device)
15346 + return -ENOMEM;
15348 + ret = platform_device_add(kb9202bl_device);
15349 + if (ret) {
15350 + platform_device_put(kb9202bl_device);
15351 + platform_driver_unregister(&kb9202bl_driver);
15354 + return ret;
15357 +static void __exit kb9202bl_exit(void)
15359 + platform_device_unregister(kb9202bl_device);
15360 + platform_driver_unregister(&kb9202bl_driver);
15363 +module_init(kb9202bl_init);
15364 +module_exit(kb9202bl_exit);
15366 +MODULE_AUTHOR("KwikByte <kb9200_dev@kwikbyte.com>");
15367 +MODULE_DESCRIPTION("KB9202 Backlight Driver");
15368 +MODULE_LICENSE("GPL");
15369 diff --git a/drivers/video/s1d15605fb.c b/drivers/video/s1d15605fb.c
15370 new file mode 100644
15371 index 0000000..00fa4c6
15372 --- /dev/null
15373 +++ b/drivers/video/s1d15605fb.c
15374 @@ -0,0 +1,658 @@
15376 + * drivers/video/s1d15605.c
15378 + * Adapted from several sources including:
15379 + * 1) Driver for AT91 LCD Controller
15380 + * Copyright (C) 2006 Atmel
15382 + * 2) Copyright (C) 2005 S. Kevin Hester
15384 + * This file is subject to the terms and conditions of the GNU General Public
15385 + * License. See the file COPYING in the main directory of this archive for
15386 + * more details.
15388 + * This is a basic framebuffer driver for the Optrex F-51320 128x64 mono LCD
15389 + * display. This display uses a clone of the common Epson SED 1531 display
15390 + * controller.
15392 + * I've heavily borrowed code from the vfb.c driver.
15394 + * This program is free software; you can redistribute it and/or modify
15395 + * it under the terms of the GNU General Public License as published by
15396 + * the Free Software Foundation; either version 2 of the License, or
15397 + * (at your option) any later version.
15399 + * This program is distributed in the hope that it will be useful,
15400 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
15401 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15402 + * GNU General Public License for more details.
15404 + * You should have received a copy of the GNU General Public License
15405 + * along with this program; if not, write to the Free Software
15406 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15407 + */
15409 +#ifdef DEBUG
15410 +#define MSG(string, args...) printk("s1d15605fb:" string, ##args)
15411 +#else
15412 +#define MSG(string, args...)
15413 +#endif
15415 +#include <linux/kernel.h>
15416 +#include <linux/platform_device.h>
15417 +#include <linux/dma-mapping.h>
15418 +#include <linux/interrupt.h>
15419 +#include <linux/clk.h>
15420 +#include <linux/fb.h>
15421 +#include <linux/init.h>
15422 +#include <linux/delay.h>
15424 +#include <asm/uaccess.h>
15426 +#include <asm/arch/board.h>
15427 +#include <asm/arch/gpio.h>
15429 +#ifdef CONFIG_PMAC_BACKLIGHT
15430 +#include <asm/backlight.h>
15431 +#endif
15433 +#define VIDEOWIDTH 128
15434 +#define VIDEOHEIGHT 64
15435 +#define VIDEODEPTH 1 /* bits/pixel */
15436 +#define VIDEOWIDTH_BYTES ((VIDEOWIDTH * VIDEODEPTH) / 8)
15438 +/* The number of bytes that actually go to the device */
15439 +#define ACTUALVIDEOMEMSIZE (VIDEOWIDTH_BYTES * VIDEOHEIGHT)
15440 +#define VIDEOMEMSIZE PAGE_SIZE
15442 +static struct fb_var_screeninfo s1d15605_default __initdata = {
15443 + .xres = VIDEOWIDTH,
15444 + .yres = VIDEOHEIGHT,
15445 + .xres_virtual = VIDEOWIDTH,
15446 + .yres_virtual = VIDEOHEIGHT,
15447 + .bits_per_pixel = VIDEODEPTH,
15448 + .red = { 0, 1, 0 },
15449 + .green = { 0, 1, 0 },
15450 + .blue = { 0, 1, 0 },
15451 + .activate = FB_ACTIVATE_NOW,
15452 + .pixclock = 20000,
15453 + .vmode = FB_VMODE_NONINTERLACED,
15456 +static struct fb_fix_screeninfo s1d15605_fix __initdata = {
15457 + .id = "s1d15605",
15458 + .type = FB_TYPE_PACKED_PIXELS,
15459 + .visual = FB_VISUAL_MONO10,
15460 + .xpanstep = 0,
15461 + .ypanstep = 0,
15462 + .ywrapstep = 0,
15463 + .accel = FB_ACCEL_NONE,
15466 +struct s1d15605fb_info {
15467 + struct fb_info *info;
15468 + char *mmio;
15469 + unsigned long reset_pin;
15470 + struct platform_device *pdev;
15474 + * LCD device interface
15475 + */
15476 +#define RESET_DISPLAY 0xE2
15477 +#define LCD_BIAS_1_9 0xA2
15478 +#define ADC_SELECT_REVERSE 0xA1
15479 +#define COMMON_OUTPUT_NORMAL 0xC0
15480 +#define V5_RESISTOR_RATIO 0x26
15481 +#define ELECTRONIC_VOLUME_SET 0x81
15482 +#define ELECTRONIC_VOLUME_INIT 0x20
15483 +#define POWER_CONTROL_SET 0x28
15484 +#define VOLTAGE_REGULATOR 0x02
15485 +#define VOLTAGE_FOLLOWER 0x01
15486 +#define BOOSTER_CIRCUIT 0x04
15487 +#define DISPLAY_ON 0xAF
15488 +#define START_LINE_SET 0x40
15489 +#define PAGE_ADDRESS_SET 0xB0
15490 +#define COLUMN_ADDRESS_HIGH 0x10
15491 +#define COLUMN_ADDRESS_LOW 0x00
15492 +#define RESISTOR_RATIO_START 0x20
15494 +#define NUM_OF_PAGES 8
15495 +#define NUM_OF_COLUMNS 128
15497 +#define WRITE_COMMAND(x) __raw_writeb((x), (sinfo)->mmio)
15498 +#define READ_COMMAND __raw_readb((sinfo)->mmio)
15499 +#define WRITE_DATA(x) __raw_writeb((x), (sinfo)->mmio + (0x10000))
15500 +#define READ_DATA __raw_readb((sinfo)->mmio + (0x10000))
15504 + * s1d15605fb_resize_framebuffer
15506 + * Free allocated space if different. Allocate on new of changed.
15507 + * Returns -ENOMEM if the new framebuffer can not be allocated,
15508 + * zero on success.
15509 + */
15510 +static int s1d15605fb_resize_framebuffer(struct s1d15605fb_info *sinfo)
15512 + struct fb_info *info = sinfo->info;
15513 + struct fb_fix_screeninfo *fix = &info->fix;
15514 + struct fb_var_screeninfo *var = &info->var;
15515 + unsigned int new_size;
15516 + void *new_vaddr;
15518 + new_size = ((var->xres_virtual * var->yres_virtual * var->bits_per_pixel) / 8);
15520 + MSG("%s: x (%d) y (%d) bpp (%d): new size 0x%08x\n", __FUNCTION__,
15521 + var->xres_virtual, var->yres_virtual, var->bits_per_pixel, new_size);
15523 + if (new_size == fix->smem_len)
15524 + return 0;
15526 + if (fix->smem_len) {
15527 + kfree(info->screen_base);
15530 + new_vaddr = kmalloc(new_size, GFP_KERNEL);
15532 + if (!new_vaddr) {
15533 + fix->smem_len = 0;
15534 + return -ENOMEM;
15537 + info->screen_base = new_vaddr;
15538 + fix->smem_start = (unsigned)new_vaddr;
15539 + fix->smem_len = new_size;
15540 + fix->line_length = (var->xres_virtual * var->bits_per_pixel) / 8;
15542 + dev_info(info->device,
15543 + "%luKiB frame buffer at %08lx (mapped at %p)\n",
15544 + (unsigned long)info->fix.smem_len / 1024,
15545 + (unsigned long)info->fix.smem_start,
15546 + info->screen_base);
15548 + return 0;
15553 + * The s1d15605 seems to be divided into eight 128 pixel wide pages (from top to
15554 + * bottom) each page seems to be eight pixels high, where these eight pixels are
15555 + * one byte
15556 + */
15557 +static void s1d15605_update(struct fb_info *info)
15559 + struct s1d15605fb_info *sinfo = info->par;
15560 + int page, i, row, colmask;
15561 + u8 retVal, *rowPtr;
15563 + WRITE_COMMAND(START_LINE_SET);
15564 + for (page = 0; page < NUM_OF_PAGES; ++page) {
15565 + WRITE_COMMAND(PAGE_ADDRESS_SET + page);
15566 + WRITE_COMMAND(COLUMN_ADDRESS_HIGH);
15567 + WRITE_COMMAND(COLUMN_ADDRESS_LOW);
15569 + for (i = 0; i < NUM_OF_COLUMNS; ++i)
15571 + /* point of opportunity: optimization */
15572 + colmask = (1 << (i & 0x7));
15573 + rowPtr = (u8*)(info->screen_base);
15574 + rowPtr += (VIDEOWIDTH_BYTES * 8 * page);
15575 + rowPtr += (i >> 3);
15576 + retVal = 0;
15577 + for (row = 0; row < 8; ++row)
15579 + retVal = (retVal >> 1) | (((*rowPtr) & colmask) ? 0x80 : 0);
15580 + rowPtr += VIDEOWIDTH_BYTES;
15582 + WRITE_DATA(retVal);
15586 + WRITE_COMMAND(DISPLAY_ON);
15591 + * Setting the video mode has been split into two parts.
15592 + * First part, xxxfb_check_var, must not write anything
15593 + * to hardware, it should only verify and adjust var.
15594 + * This means it doesn't alter par but it does use hardware
15595 + * data from it to check this var.
15596 + */
15597 +static int s1d15605_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
15599 + /*
15600 + * Some very basic checks
15601 + */
15602 + if (!var->xres)
15603 + var->xres = 1;
15604 + if (!var->yres)
15605 + var->yres = 1;
15606 + if (var->xres > var->xres_virtual)
15607 + var->xres_virtual = var->xres;
15608 + if (var->yres > var->yres_virtual)
15609 + var->yres_virtual = var->yres;
15611 + if(var->bits_per_pixel > VIDEODEPTH)
15612 + return -EINVAL;
15614 + /*
15615 + * Memory limit
15616 + */
15617 + if (((var->yres_virtual * var->bits_per_pixel * var->yres_virtual) >> 3) >
15618 + ACTUALVIDEOMEMSIZE)
15619 + return -ENOMEM;
15621 + /*
15622 + * Now that we checked it we alter var. The reason being is that the video
15623 + * mode passed in might not work but slight changes to it might make it
15624 + * work. This way we let the user know what is acceptable.
15625 + */
15626 + switch (var->bits_per_pixel) {
15627 + case 1:
15628 + var->red.offset = var->green.offset = var->blue.offset = 0;
15629 + var->red.length = var->green.length = var->blue.length
15630 + = var->bits_per_pixel;
15631 + break;
15632 + default:
15633 + return -EINVAL;
15636 + var->xoffset = var->yoffset = 0;
15637 + var->red.msb_right = var->green.msb_right = var->blue.msb_right =
15638 + var->transp.msb_right = 0;
15640 + return 0;
15645 + * This routine actually sets the video mode. It's in here where we
15646 + * the hardware state info->par and fix which can be affected by the
15647 + * change in par. For this driver it doesn't do much.
15648 + */
15649 +static int s1d15605_set_par(struct fb_info *info)
15651 + int ret;
15653 + MSG("%s:\n", __func__);
15654 + MSG(" * resolution: %ux%u (%ux%u virtual)\n",
15655 + info->var.xres, info->var.yres,
15656 + info->var.xres_virtual, info->var.yres_virtual);
15658 + ret = s1d15605fb_resize_framebuffer(info->par);
15660 + info->fix.visual = FB_VISUAL_MONO10;
15661 + return ret;
15666 + * Set a single color register. The values supplied are already
15667 + * rounded down to the hardware's capabilities (according to the
15668 + * entries in the var structure). Return != 0 for invalid regno.
15669 + */
15670 +static int s1d15605_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
15671 + u_int transp, struct fb_info *info)
15673 + if (regno > 1) /* no. of hw registers - we only do mono now */
15674 + return 1;
15676 + return 0;
15681 + * Currently, the routine will simply shut-off the backlight and prevent
15682 + * updates/refreshes. Modify according to application.
15684 + * 0 unblank, 1 blank, 2 no vsync, 3 no hsync, 4 off
15685 + */
15686 +static int s1d15605_blank(int blank, struct fb_info *info)
15688 +#ifdef CONFIG_PMAC_BACKLIGHT
15689 + if (blank)
15690 + pmac_backlight->props.power = FB_BLANK_POWERDOWN;
15691 + else
15692 + pmac_backlight->props.power = FB_BLANK_UNBLANK;
15693 + backlight_update_status(pmac_backlight);
15694 +#endif
15695 + return 1;
15700 + * Pan or Wrap the Display
15702 + * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag
15703 + */
15705 +static int s1d15605_pan_display(struct fb_var_screeninfo *var,
15706 + struct fb_info *info)
15708 + if (var->vmode & FB_VMODE_YWRAP) {
15709 + if (var->yoffset < 0
15710 + || var->yoffset >= info->var.yres_virtual
15711 + || var->xoffset)
15712 + return -EINVAL;
15713 + } else {
15714 + if (var->xoffset + var->xres > info->var.xres_virtual ||
15715 + var->yoffset + var->yres > info->var.yres_virtual)
15716 + return -EINVAL;
15718 + info->var.xoffset = var->xoffset;
15719 + info->var.yoffset = var->yoffset;
15720 + if (var->vmode & FB_VMODE_YWRAP)
15721 + info->var.vmode |= FB_VMODE_YWRAP;
15722 + else
15723 + info->var.vmode &= ~FB_VMODE_YWRAP;
15724 + return 0;
15729 +static void s1d15605_copyarea(struct fb_info *info, const struct fb_copyarea *region)
15731 + cfb_copyarea(info, region);
15732 + s1d15605_update(info);
15736 +static void s1d15605_fillrect (struct fb_info *info, const struct fb_fillrect *rect)
15738 + cfb_fillrect(info, rect);
15739 + s1d15605_update(info);
15743 +static void s1d15605_imageblit(struct fb_info *p, const struct fb_image *image)
15745 + cfb_imageblit(p, image);
15746 + s1d15605_update(p);
15751 + * Write the users data to our framebuffer, and then trigger a psuedo DMA
15752 + */
15753 +static ssize_t s1d15605_write(struct file *file, const char *buf,
15754 + size_t count, loff_t *ppos)
15756 + unsigned long p = *ppos;
15757 + struct inode *inode = file->f_dentry->d_inode;
15758 + int fbidx = iminor(inode);
15759 + struct fb_info *info = registered_fb[fbidx];
15760 + int err;
15762 + if (p > info->fix.smem_len)
15763 + return -ENOSPC;
15764 + if (count >= info->fix.smem_len)
15765 + count = info->fix.smem_len;
15766 + err = 0;
15767 + if (count + p > info->fix.smem_len) {
15768 + count = info->fix.smem_len - p;
15769 + err = -ENOSPC;
15771 + if (count) {
15772 + char *base_addr;
15774 + base_addr = info->screen_base;
15775 + count -= copy_from_user(base_addr+p, buf, count);
15776 + *ppos += count;
15777 + err = -EFAULT;
15780 + s1d15605_update(info);
15782 + if (count)
15783 + return count;
15785 + return err;
15788 +#ifdef USE_PRIVATE_VMA_FXS
15789 +static void s1d15605_vma_open(struct vm_area_struct *vma)
15791 + // FIXME - store stats in the device data via vm_private_data
15795 +static void s1d15605_vma_close(struct vm_area_struct *vma)
15797 + // FIXME - store stats in the device data via vm_private_data
15801 +static struct page *s1d15605_vma_nopage(struct vm_area_struct *vma,
15802 + unsigned long address, int *type)
15804 + struct page *page;
15805 + struct fb_info *info = vma->vm_private_data;
15807 + page = virt_to_page(info->screen_base);
15808 + get_page(page);
15810 + // FIXME - now someone has a link to our page, start periodically blitting
15811 + // latest updates to the actual device.
15813 + return page;
15817 +static struct vm_operations_struct s1d15605_vm_ops = {
15818 + .open = s1d15605_vma_open,
15819 + .close = s1d15605_vma_close,
15820 + .nopage = s1d15605_vma_nopage
15824 +/* We don't do much here - because we have special vm_ops */
15825 +static int s1d15605_mmap(struct fb_info *info, struct vm_area_struct *vma)
15827 + vma->vm_ops = &s1d15605_vm_ops;
15828 + vma->vm_flags |= VM_RESERVED;
15829 + vma->vm_private_data = info;
15830 + s1d15605_vma_open(vma);
15832 + return 0;
15834 +#endif /* USE_PRIVATE_VMA_FXS */
15837 +static struct fb_ops s1d15605fb_ops = {
15838 + .owner = THIS_MODULE,
15839 + .fb_check_var = s1d15605_check_var,
15840 + .fb_set_par = s1d15605_set_par,
15841 + .fb_setcolreg = s1d15605_setcolreg,
15842 + .fb_blank = s1d15605_blank,
15843 +// .fb_pan_display = s1d15605_pan_display,
15844 + .fb_fillrect = s1d15605_fillrect,
15845 + .fb_copyarea = s1d15605_copyarea,
15846 + .fb_imageblit = s1d15605_imageblit,
15847 + .fb_write = s1d15605_write,
15848 +#ifdef USE_PRIVATE_VMA_FXS
15849 + .fb_mmap = s1d15605_mmap,
15850 +#endif
15854 +static void s1d15605_device_init(struct s1d15605fb_info *sinfo) {
15856 + char value;
15858 + /* release the reset line by reading the device - proto hardware */
15859 + value = READ_COMMAND;
15860 + value = READ_COMMAND;
15862 +#ifdef CONFIG_MACH_KB9200
15863 + /* new boards have dedicated reset line */
15864 + gpio_set_value(sinfo->reset_pin, 1);
15865 +#endif
15867 + /* initialize the device within 5ms */
15868 + WRITE_COMMAND(RESET_DISPLAY);
15869 + WRITE_COMMAND(LCD_BIAS_1_9);
15870 + WRITE_COMMAND(ADC_SELECT_REVERSE);
15871 + WRITE_COMMAND(COMMON_OUTPUT_NORMAL);
15872 + WRITE_COMMAND(V5_RESISTOR_RATIO);
15873 + WRITE_COMMAND(ELECTRONIC_VOLUME_SET);
15874 + WRITE_COMMAND(ELECTRONIC_VOLUME_INIT);
15875 + WRITE_COMMAND(POWER_CONTROL_SET | VOLTAGE_REGULATOR | VOLTAGE_FOLLOWER | BOOSTER_CIRCUIT);
15876 + WRITE_COMMAND(DISPLAY_ON);
15878 + WRITE_COMMAND(RESISTOR_RATIO_START + 4);
15879 + WRITE_COMMAND(ELECTRONIC_VOLUME_SET);
15880 + WRITE_COMMAND(0x33);
15884 +static int __init s1d15605fb_probe(struct platform_device *pdev)
15886 + struct device *dev = &pdev->dev;
15887 + struct fb_info *info;
15888 + struct s1d15605fb_info *sinfo;
15889 + int ret;
15891 + MSG("%s\n", __func__);
15893 + if (!(info = framebuffer_alloc(sizeof(struct s1d15605fb_info), dev))) {
15894 + dev_err(dev, "Cannot allocate framebuffer struct\n");
15895 + return -ENOMEM;
15898 + sinfo = info->par;
15899 + sinfo->info = info;
15900 + sinfo->pdev = pdev;
15902 + if (pdev->num_resources < 2) {
15903 + dev_err(dev, "Resources unusable\n");
15904 + ret = -ENODEV;
15905 + goto free_info;
15908 + info->fbops = &s1d15605fb_ops;
15909 + strcpy(info->fix.id, pdev->name);
15911 + info->fix.mmio_start = pdev->resource[0].start;
15912 + info->fix.mmio_len = pdev->resource[0].end - pdev->resource[0].start + 1;
15913 + sinfo->reset_pin = pdev->resource[1].start;
15915 + ret = s1d15605fb_resize_framebuffer(sinfo);
15916 + if (ret < 0) {
15917 + dev_err(dev, "Cannot resize framebuffer: %d\n", ret);
15918 + goto free_fb;
15921 + if (!request_mem_region(info->fix.mmio_start,
15922 + info->fix.mmio_len, pdev->name)) {
15923 + ret = -EBUSY;
15924 + goto free_fb;
15927 + sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len);
15928 + if (!sinfo->mmio) {
15929 + dev_err(dev, "Cannot map LCD memory region\n");
15930 + goto release_mem;
15933 + s1d15605_device_init(sinfo);
15935 + ret = fb_find_mode(&info->var, info, NULL, NULL, 0, NULL, 1);
15937 + if (!ret || (ret == 4))
15938 + info->var = s1d15605_default;
15940 + info->fix = s1d15605_fix;
15941 + info->flags = FBINFO_FLAG_DEFAULT |
15942 +/* FBINFO_HWACCEL_YPAN | */
15943 + FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;
15945 + ret = register_framebuffer(info);
15946 + if (ret < 0) {
15947 + dev_err(dev, "Failed to register framebuffer device: %d\n", ret);
15948 + goto unmap_mmio;
15951 + dev_set_drvdata(dev, info);
15953 + memset(info->screen_base, 0, info->fix.smem_len);
15954 + info->var.activate |= FB_ACTIVATE_NOW;
15955 + ret = fb_set_var(info, &info->var);
15956 + if (ret) {
15957 + dev_warn(dev, "Unable to set display parameters\n");
15960 + info->var.activate &= ~(FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW);
15962 + dev_dbg(dev, "%s SUCCESS\n", __func__);
15964 + dev_info(dev, "Driver $Revision: 1.1 $\n");
15966 + return 0;
15968 +unmap_mmio:
15969 + iounmap(sinfo->mmio);
15970 +release_mem:
15971 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
15972 +free_fb:
15973 + kfree(info->screen_base);
15975 +free_info:
15976 + framebuffer_release(info);
15978 + dev_dbg(dev, "%s FAILED\n", __func__);
15979 + return ret;
15983 +static int __exit s1d15605fb_remove(struct platform_device *pdev)
15985 + struct device *dev = &pdev->dev;
15986 + struct fb_info *info = dev_get_drvdata(dev);
15987 + struct s1d15605fb_info *sinfo = info->par;
15989 + if (!sinfo)
15990 + return 0;
15992 + unregister_framebuffer(info);
15994 + iounmap(sinfo->mmio);
15995 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
15997 + kfree(info->screen_base);
15999 + dev_set_drvdata(dev, NULL);
16000 + framebuffer_release(info);
16001 + return 0;
16005 +static struct platform_driver s1d15605fb_driver = {
16006 + .remove = __exit_p(s1d15605fb_remove),
16007 + .driver = {
16008 + .name = "s1d15605fb",
16009 + .owner = THIS_MODULE,
16010 + },
16014 +static int __init s1d15605fb_init(void)
16016 + return platform_driver_probe(&s1d15605fb_driver, s1d15605fb_probe);
16020 +static void __exit s1d15605fb_exit(void)
16022 + platform_driver_unregister(&s1d15605fb_driver);
16026 +module_init(s1d15605fb_init);
16027 +module_exit(s1d15605fb_exit);
16030 +MODULE_AUTHOR("KwikByte");
16031 +MODULE_DESCRIPTION("Epson S1D15605 LCD Controller framebuffer driver");
16032 +MODULE_LICENSE("GPL");
16033 diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
16034 index 52dff40..acb4bbf 100644
16035 --- a/drivers/watchdog/Kconfig
16036 +++ b/drivers/watchdog/Kconfig
16037 @@ -66,6 +66,14 @@ config AT91RM9200_WATCHDOG
16038 Watchdog timer embedded into AT91RM9200 chips. This will reboot your
16039 system when the timeout is reached.
16041 +config AT91SAM9_WATCHDOG
16042 + tristate "AT91SAM9 watchdog"
16043 + depends on ARCH_AT91 && !ARCH_AT91RM9200
16044 + select WATCHDOG_NOWAYOUT
16045 + help
16046 + Watchdog timer embedded into AT91SAM9 chips. This will reboot your
16047 + system when the timeout is reached.
16049 config 21285_WATCHDOG
16050 tristate "DC21285 watchdog"
16051 depends on FOOTBRIDGE
16052 diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
16053 index 87483cc..26babbc 100644
16054 --- a/drivers/watchdog/Makefile
16055 +++ b/drivers/watchdog/Makefile
16056 @@ -26,6 +26,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
16058 # ARM Architecture
16059 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
16060 +obj-$(CONFIG_AT91SAM9_WATCHDOG) += at91sam9_wdt.o
16061 obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
16062 obj-$(CONFIG_21285_WATCHDOG) += wdt285.o
16063 obj-$(CONFIG_977_WATCHDOG) += wdt977.o
16064 diff --git a/include/asm-arm/arch-at91/at91_lcdc.h b/include/asm-arm/arch-at91/at91_lcdc.h
16065 deleted file mode 100644
16066 index ab040a4..0000000
16067 --- a/include/asm-arm/arch-at91/at91_lcdc.h
16068 +++ /dev/null
16069 @@ -1,148 +0,0 @@
16071 - * include/asm-arm/arch-at91/at91_lcdc.h
16073 - * LCD Controller (LCDC).
16074 - * Based on AT91SAM9261 datasheet revision E.
16076 - * This program is free software; you can redistribute it and/or modify
16077 - * it under the terms of the GNU General Public License as published by
16078 - * the Free Software Foundation; either version 2 of the License, or
16079 - * (at your option) any later version.
16080 - */
16082 -#ifndef AT91_LCDC_H
16083 -#define AT91_LCDC_H
16085 -#define AT91_LCDC_DMABADDR1 0x00 /* DMA Base Address Register 1 */
16086 -#define AT91_LCDC_DMABADDR2 0x04 /* DMA Base Address Register 2 */
16087 -#define AT91_LCDC_DMAFRMPT1 0x08 /* DMA Frame Pointer Register 1 */
16088 -#define AT91_LCDC_DMAFRMPT2 0x0c /* DMA Frame Pointer Register 2 */
16089 -#define AT91_LCDC_DMAFRMADD1 0x10 /* DMA Frame Address Register 1 */
16090 -#define AT91_LCDC_DMAFRMADD2 0x14 /* DMA Frame Address Register 2 */
16092 -#define AT91_LCDC_DMAFRMCFG 0x18 /* DMA Frame Configuration Register */
16093 -#define AT91_LCDC_FRSIZE (0x7fffff << 0) /* Frame Size */
16094 -#define AT91_LCDC_BLENGTH (0x7f << 24) /* Burst Length */
16096 -#define AT91_LCDC_DMACON 0x1c /* DMA Control Register */
16097 -#define AT91_LCDC_DMAEN (0x1 << 0) /* DMA Enable */
16098 -#define AT91_LCDC_DMARST (0x1 << 1) /* DMA Reset */
16099 -#define AT91_LCDC_DMABUSY (0x1 << 2) /* DMA Busy */
16101 -#define AT91_LCDC_LCDCON1 0x0800 /* LCD Control Register 1 */
16102 -#define AT91_LCDC_BYPASS (1 << 0) /* Bypass lcd_dotck divider */
16103 -#define AT91_LCDC_CLKVAL (0x1ff << 12) /* Clock Divider */
16104 -#define AT91_LCDC_LINCNT (0x7ff << 21) /* Line Counter */
16106 -#define AT91_LCDC_LCDCON2 0x0804 /* LCD Control Register 2 */
16107 -#define AT91_LCDC_DISTYPE (3 << 0) /* Display Type */
16108 -#define AT91_LCDC_DISTYPE_STNMONO (0 << 0)
16109 -#define AT91_LCDC_DISTYPE_STNCOLOR (1 << 0)
16110 -#define AT91_LCDC_DISTYPE_TFT (2 << 0)
16111 -#define AT91_LCDC_SCANMOD (1 << 2) /* Scan Mode */
16112 -#define AT91_LCDC_SCANMOD_SINGLE (0 << 2)
16113 -#define AT91_LCDC_SCANMOD_DUAL (1 << 2)
16114 -#define AT91_LCDC_IFWIDTH (3 << 3) /*Interface Width */
16115 -#define AT91_LCDC_IFWIDTH_4 (0 << 3)
16116 -#define AT91_LCDC_IFWIDTH_8 (1 << 3)
16117 -#define AT91_LCDC_IFWIDTH_16 (2 << 3)
16118 -#define AT91_LCDC_PIXELSIZE (7 << 5) /* Bits per pixel */
16119 -#define AT91_LCDC_PIXELSIZE_1 (0 << 5)
16120 -#define AT91_LCDC_PIXELSIZE_2 (1 << 5)
16121 -#define AT91_LCDC_PIXELSIZE_4 (2 << 5)
16122 -#define AT91_LCDC_PIXELSIZE_8 (3 << 5)
16123 -#define AT91_LCDC_PIXELSIZE_16 (4 << 5)
16124 -#define AT91_LCDC_PIXELSIZE_24 (5 << 5)
16125 -#define AT91_LCDC_INVVD (1 << 8) /* LCD Data polarity */
16126 -#define AT91_LCDC_INVVD_NORMAL (0 << 8)
16127 -#define AT91_LCDC_INVVD_INVERTED (1 << 8)
16128 -#define AT91_LCDC_INVFRAME (1 << 9 ) /* LCD VSync polarity */
16129 -#define AT91_LCDC_INVFRAME_NORMAL (0 << 9)
16130 -#define AT91_LCDC_INVFRAME_INVERTED (1 << 9)
16131 -#define AT91_LCDC_INVLINE (1 << 10) /* LCD HSync polarity */
16132 -#define AT91_LCDC_INVLINE_NORMAL (0 << 10)
16133 -#define AT91_LCDC_INVLINE_INVERTED (1 << 10)
16134 -#define AT91_LCDC_INVCLK (1 << 11) /* LCD dotclk polarity */
16135 -#define AT91_LCDC_INVCLK_NORMAL (0 << 11)
16136 -#define AT91_LCDC_INVCLK_INVERTED (1 << 11)
16137 -#define AT91_LCDC_INVDVAL (1 << 12) /* LCD dval polarity */
16138 -#define AT91_LCDC_INVDVAL_NORMAL (0 << 12)
16139 -#define AT91_LCDC_INVDVAL_INVERTED (1 << 12)
16140 -#define AT91_LCDC_CLKMOD (1 << 15) /* LCD dotclk mode */
16141 -#define AT91_LCDC_CLKMOD_ACTIVEDISPLAY (0 << 15)
16142 -#define AT91_LCDC_CLKMOD_ALWAYSACTIVE (1 << 15)
16143 -#define AT91_LCDC_MEMOR (1 << 31) /* Memory Ordering Format */
16144 -#define AT91_LCDC_MEMOR_BIG (0 << 31)
16145 -#define AT91_LCDC_MEMOR_LITTLE (1 << 31)
16147 -#define AT91_LCDC_TIM1 0x0808 /* LCD Timing Register 1 */
16148 -#define AT91_LCDC_VFP (0xff << 0) /* Vertical Front Porch */
16149 -#define AT91_LCDC_VBP (0xff << 8) /* Vertical Back Porch */
16150 -#define AT91_LCDC_VPW (0x3f << 16) /* Vertical Synchronization Pulse Width */
16151 -#define AT91_LCDC_VHDLY (0xf << 24) /* Vertical to Horizontal Delay */
16153 -#define AT91_LCDC_TIM2 0x080c /* LCD Timing Register 2 */
16154 -#define AT91_LCDC_HBP (0xff << 0) /* Horizontal Back Porch */
16155 -#define AT91_LCDC_HPW (0x3f << 8) /* Horizontal Synchronization Pulse Width */
16156 -#define AT91_LCDC_HFP (0x7ff << 21) /* Horizontal Front Porch */
16158 -#define AT91_LCDC_LCDFRMCFG 0x0810 /* LCD Frame Configuration Register */
16159 -#define AT91_LCDC_LINEVAL (0x7ff << 0) /* Vertical Size of LCD Module */
16160 -#define AT91_LCDC_HOZVAL (0x7ff << 21) /* Horizontal Size of LCD Module */
16162 -#define AT91_LCDC_FIFO 0x0814 /* LCD FIFO Register */
16163 -#define AT91_LCDC_FIFOTH (0xffff) /* FIFO Threshold */
16165 -#define AT91_LCDC_DP1_2 0x081c /* Dithering Pattern DP1_2 Register */
16166 -#define AT91_LCDC_DP4_7 0x0820 /* Dithering Pattern DP4_7 Register */
16167 -#define AT91_LCDC_DP3_5 0x0824 /* Dithering Pattern DP3_5 Register */
16168 -#define AT91_LCDC_DP2_3 0x0828 /* Dithering Pattern DP2_3 Register */
16169 -#define AT91_LCDC_DP5_7 0x082c /* Dithering Pattern DP5_7 Register */
16170 -#define AT91_LCDC_DP3_4 0x0830 /* Dithering Pattern DP3_4 Register */
16171 -#define AT91_LCDC_DP4_5 0x0834 /* Dithering Pattern DP4_5 Register */
16172 -#define AT91_LCDC_DP6_7 0x0838 /* Dithering Pattern DP6_7 Register */
16173 -#define AT91_LCDC_DP1_2_VAL (0xff)
16174 -#define AT91_LCDC_DP4_7_VAL (0xfffffff)
16175 -#define AT91_LCDC_DP3_5_VAL (0xfffff)
16176 -#define AT91_LCDC_DP2_3_VAL (0xfff)
16177 -#define AT91_LCDC_DP5_7_VAL (0xfffffff)
16178 -#define AT91_LCDC_DP3_4_VAL (0xffff)
16179 -#define AT91_LCDC_DP4_5_VAL (0xfffff)
16180 -#define AT91_LCDC_DP6_7_VAL (0xfffffff)
16182 -#define AT91_LCDC_PWRCON 0x083c /* Power Control Register */
16183 -#define AT91_LCDC_PWR (1 << 0) /* LCD Module Power Control */
16184 -#define AT91_LCDC_GUARDT (0x7f << 1) /* Delay in Frame Period */
16185 -#define AT91_LCDC_BUSY (1 << 31) /* LCD Busy */
16187 -#define AT91_LCDC_CONTRAST_CTR 0x0840 /* Contrast Control Register */
16188 -#define AT91_LCDC_PS (3 << 0) /* Contrast Counter Prescaler */
16189 -#define AT91_LCDC_PS_DIV1 (0 << 0)
16190 -#define AT91_LCDC_PS_DIV2 (1 << 0)
16191 -#define AT91_LCDC_PS_DIV4 (2 << 0)
16192 -#define AT91_LCDC_PS_DIV8 (3 << 0)
16193 -#define AT91_LCDC_POL (1 << 2) /* Polarity of output Pulse */
16194 -#define AT91_LCDC_POL_NEGATIVE (0 << 2)
16195 -#define AT91_LCDC_POL_POSITIVE (1 << 2)
16196 -#define AT91_LCDC_ENA (1 << 3) /* PWM generator Control */
16197 -#define AT91_LCDC_ENA_PWMDISABLE (0 << 3)
16198 -#define AT91_LCDC_ENA_PWMENABLE (1 << 3)
16200 -#define AT91_LCDC_CONTRAST_VAL 0x0844 /* Contrast Value Register */
16201 -#define AT91_LCDC_CVAL (0xff) /* PWM compare value */
16203 -#define AT91_LCDC_IER 0x0848 /* Interrupt Enable Register */
16204 -#define AT91_LCDC_IDR 0x084c /* Interrupt Disable Register */
16205 -#define AT91_LCDC_IMR 0x0850 /* Interrupt Mask Register */
16206 -#define AT91_LCDC_ISR 0x0854 /* Interrupt Enable Register */
16207 -#define AT91_LCDC_ICR 0x0858 /* Interrupt Clear Register */
16208 -#define AT91_LCDC_LNI (1 << 0) /* Line Interrupt */
16209 -#define AT91_LCDC_LSTLNI (1 << 1) /* Last Line Interrupt */
16210 -#define AT91_LCDC_EOFI (1 << 2) /* DMA End Of Frame Interrupt */
16211 -#define AT91_LCDC_UFLWI (1 << 4) /* FIFO Underflow Interrupt */
16212 -#define AT91_LCDC_OWRI (1 << 5) /* FIFO Overwrite Interrupt */
16213 -#define AT91_LCDC_MERI (1 << 6) /* DMA Memory Error Interrupt */
16215 -#define AT91_LCDC_LUT_(n) (0x0c00 + ((n)*4)) /* Palette Entry 0..255 */
16217 -#endif
16218 diff --git a/include/asm-arm/arch-at91/at91_pmc.h b/include/asm-arm/arch-at91/at91_pmc.h
16219 index 33ff5b6..0469e71 100644
16220 --- a/include/asm-arm/arch-at91/at91_pmc.h
16221 +++ b/include/asm-arm/arch-at91/at91_pmc.h
16222 @@ -37,7 +37,9 @@
16223 #define AT91_PMC_PCDR (AT91_PMC + 0x14) /* Peripheral Clock Disable Register */
16224 #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */
16226 -#define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register */
16227 +#define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL only] */
16229 +#define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */
16230 #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */
16231 #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [AT91SAM926x only] */
16232 #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */
16233 diff --git a/include/asm-arm/arch-at91/at91_twi.h b/include/asm-arm/arch-at91/at91_twi.h
16234 index ca9a907..f9f2e3c 100644
16235 --- a/include/asm-arm/arch-at91/at91_twi.h
16236 +++ b/include/asm-arm/arch-at91/at91_twi.h
16237 @@ -21,6 +21,8 @@
16238 #define AT91_TWI_STOP (1 << 1) /* Send a Stop Condition */
16239 #define AT91_TWI_MSEN (1 << 2) /* Master Transfer Enable */
16240 #define AT91_TWI_MSDIS (1 << 3) /* Master Transfer Disable */
16241 +#define AT91_TWI_SVEN (1 << 4) /* Slave Transfer Enable [SAM9260 only] */
16242 +#define AT91_TWI_SVDIS (1 << 5) /* Slave Transfer Disable [SAM9260 only] */
16243 #define AT91_TWI_SWRST (1 << 7) /* Software Reset */
16245 #define AT91_TWI_MMR 0x04 /* Master Mode Register */
16246 @@ -32,6 +34,9 @@
16247 #define AT91_TWI_MREAD (1 << 12) /* Master Read Direction */
16248 #define AT91_TWI_DADR (0x7f << 16) /* Device Address */
16250 +#define AT91_TWI_SMR 0x08 /* Slave Mode Register [SAM9260 only] */
16251 +#define AT91_TWI_SADR (0x7f << 16) /* Slave Address */
16253 #define AT91_TWI_IADR 0x0c /* Internal Address Register */
16255 #define AT91_TWI_CWGR 0x10 /* Clock Waveform Generator Register */
16256 @@ -43,9 +48,15 @@
16257 #define AT91_TWI_TXCOMP (1 << 0) /* Transmission Complete */
16258 #define AT91_TWI_RXRDY (1 << 1) /* Receive Holding Register Ready */
16259 #define AT91_TWI_TXRDY (1 << 2) /* Transmit Holding Register Ready */
16260 +#define AT91_TWI_SVREAD (1 << 3) /* Slave Read [SAM9260 only] */
16261 +#define AT91_TWI_SVACC (1 << 4) /* Slave Access [SAM9260 only] */
16262 +#define AT91_TWI_GACC (1 << 5) /* General Call Access [SAM9260 only] */
16263 #define AT91_TWI_OVRE (1 << 6) /* Overrun Error [AT91RM9200 only] */
16264 #define AT91_TWI_UNRE (1 << 7) /* Underrun Error [AT91RM9200 only] */
16265 #define AT91_TWI_NACK (1 << 8) /* Not Acknowledged */
16266 +#define AT91_TWI_ARBLST (1 << 9) /* Arbitration Lost [SAM9260 only] */
16267 +#define AT91_TWI_SCLWS (1 << 10) /* Clock Wait State [SAM9260 only] */
16268 +#define AT91_TWI_EOSACC (1 << 11) /* End of Slave Address [SAM9260 only] */
16270 #define AT91_TWI_IER 0x24 /* Interrupt Enable Register */
16271 #define AT91_TWI_IDR 0x28 /* Interrupt Disable Register */
16272 diff --git a/include/asm-arm/arch-at91/at91sam9260_matrix.h b/include/asm-arm/arch-at91/at91sam9260_matrix.h
16273 index aacb1e9..a8e9fec 100644
16274 --- a/include/asm-arm/arch-at91/at91sam9260_matrix.h
16275 +++ b/include/asm-arm/arch-at91/at91sam9260_matrix.h
16276 @@ -67,7 +67,7 @@
16277 #define AT91_MATRIX_CS4A (1 << 4) /* Chip Select 4 Assignment */
16278 #define AT91_MATRIX_CS4A_SMC (0 << 4)
16279 #define AT91_MATRIX_CS4A_SMC_CF1 (1 << 4)
16280 -#define AT91_MATRIX_CS5A (1 << 5 ) /* Chip Select 5 Assignment */
16281 +#define AT91_MATRIX_CS5A (1 << 5) /* Chip Select 5 Assignment */
16282 #define AT91_MATRIX_CS5A_SMC (0 << 5)
16283 #define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5)
16284 #define AT91_MATRIX_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */
16285 diff --git a/include/asm-arm/arch-at91/board.h b/include/asm-arm/arch-at91/board.h
16286 index 7905496..9de42e9 100644
16287 --- a/include/asm-arm/arch-at91/board.h
16288 +++ b/include/asm-arm/arch-at91/board.h
16289 @@ -35,6 +35,7 @@
16290 #include <linux/device.h>
16291 #include <linux/i2c.h>
16292 #include <linux/spi/spi.h>
16293 +#include <linux/leds.h>
16295 /* USB Device */
16296 struct at91_udc_data {
16297 @@ -126,6 +127,9 @@ struct atmel_ac97_data {
16299 extern void __init at91_add_device_ac97(struct atmel_ac97_data *data);
16301 + /* ISI */
16302 +extern void __init at91_add_device_isi(void);
16304 /* LEDs */
16305 extern u8 at91_leds_cpu;
16306 extern u8 at91_leds_timer;
16307 @@ -133,5 +137,6 @@ extern void __init at91_init_leds(u8 cpu_led, u8 timer_led);
16309 /* FIXME: this needs a better location, but gets stuff building again */
16310 extern int at91_suspend_entering_slow_clock(void);
16311 +extern void __init at91_gpio_leds(struct gpio_led *leds, int nr);
16313 #endif
16314 diff --git a/include/asm-arm/arch-at91/entry-macro.S b/include/asm-arm/arch-at91/entry-macro.S
16315 index cc1d850..1005eee 100644
16316 --- a/include/asm-arm/arch-at91/entry-macro.S
16317 +++ b/include/asm-arm/arch-at91/entry-macro.S
16318 @@ -17,13 +17,13 @@
16319 .endm
16321 .macro get_irqnr_preamble, base, tmp
16322 + ldr \base, =(AT91_VA_BASE_SYS + AT91_AIC) @ base virtual address of AIC peripheral
16323 .endm
16325 .macro arch_ret_to_user, tmp1, tmp2
16326 .endm
16328 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
16329 - ldr \base, =(AT91_VA_BASE_SYS + AT91_AIC) @ base virtual address of AIC peripheral
16330 ldr \irqnr, [\base, #(AT91_AIC_IVR - AT91_AIC)] @ read IRQ vector register: de-asserts nIRQ to processor (and clears interrupt)
16331 ldr \irqstat, [\base, #(AT91_AIC_ISR - AT91_AIC)] @ read interrupt source number
16332 teq \irqstat, #0 @ ISR is 0 when no current interrupt, or spurious interrupt
16333 diff --git a/include/asm-arm/arch-at91/ics1523.h b/include/asm-arm/arch-at91/ics1523.h
16334 new file mode 100644
16335 index 0000000..f281f5d
16336 --- /dev/null
16337 +++ b/include/asm-arm/arch-at91/ics1523.h
16338 @@ -0,0 +1,154 @@
16339 +//*----------------------------------------------------------------------------
16340 +//* ATMEL Microcontroller Software Support - ROUSSET -
16341 +//*----------------------------------------------------------------------------
16342 +//* The software is delivered "AS IS" without warranty or condition of any
16343 +//* kind, either express, implied or statutory. This includes without
16344 +//* limitation any warranty or condition with respect to merchantability or
16345 +//* fitness for any particular purpose, or against the infringements of
16346 +//* intellectual property rights of others.
16347 +//*----------------------------------------------------------------------------
16348 +//* File Name : ics1523.h
16349 +//* Object : Clock Generator Prototyping File.
16350 +//*
16351 +//* 1.0 08/28/02 ED : Creation
16352 +//* 1.2 13/01/03 FB : Update on lib V3
16353 +//*----------------------------------------------------------------------------
16355 +#ifndef ics1523_h
16356 +#define ics1523_h
16358 +/*-------------------------------------------*/
16359 +/* ICS1523 TWI Serial Clock Definition */
16360 +/*-------------------------------------------*/
16362 +#define ICS_MIN_CLOCK 100 /* Min Frequency Access Clock KHz */
16363 +#define ICS_MAX_CLOCK 400 /* Max Frequency Access Clock KHz */
16364 +#define ICS_TRANSFER_RATE ICS_MAX_CLOCK /* Transfer speed to apply */
16366 +#define ICS_WRITE_CLK_PNB 30 /* TWCK Clock Periods required to write */
16367 +#define ICS_READ_CLK_PNB 40 /* TWCK Clock Periods required to read */
16369 +/*-------------------------------------------*/
16370 +/* ICS1523 Write Operation Definition */
16371 +/*-------------------------------------------*/
16373 +#define ICS1523_ACCESS_OK 0 /* OK */
16374 +#define ICS1523_ACCESS_ERROR -1 /* NOK */
16376 +/*-------------------------------------------*/
16377 +/* ICS1523 Device Addresses Definition */
16378 +/*-------------------------------------------*/
16380 +#define ICS_ADDR 0x26 /* Device Address */
16382 +/*--------------------------------------------------*/
16383 +/* ICS1523 Registers Internal Addresses Definition */
16384 +/*--------------------------------------------------*/
16386 +#define ICS_ICR 0x0 /* Input Control Register */
16387 +#define ICS_LCR 0x1 /* Loop Control Register */
16388 +#define ICS_FD0 0x2 /* PLL FeedBack Divider LSBs */
16389 +#define ICS_FD1 0x3 /* PLL FeedBack Divider MSBs */
16390 +#define ICS_DPAO 0x4 /* Dynamic Phase Aligner Offset */
16391 +#define ICS_DPAC 0x5 /* Dynamic Phase Aligner Resolution */
16392 +#define ICS_OE 0x6 /* Output Enables Register */
16393 +#define ICS_OD 0x7 /* Osc Divider Register */
16394 +#define ICS_SWRST 0x8 /* DPA & PLL Reset Register */
16395 +#define ICS_VID 0x10 /* Chip Version Register */
16396 +#define ICS_RID 0x11 /* Chip Revision Register */
16397 +#define ICS_SR 0x12 /* Status Register */
16399 +/*------------------------------------------------------*/
16400 +/* ICS1523 Input Control Register Bits Definition */
16401 +/*------------------------------------------------------*/
16403 +#define ICS_PDEN 0x1 /* Phase Detector Enable */
16404 +#define ICS_PDPOL 0x2 /* Phase Detector Enable Polarity */
16405 +#define ICS_REFPOL 0x4 /* External Reference Polarity */
16406 +#define ICS_FBKPOL 0x8 /* External Feedback Polarity */
16407 +#define ICS_FBKSEL 0x10 /* External Feedback Select */
16408 +#define ICS_FUNCSEL 0x20 /* Function Out Select */
16409 +#define ICS_ENPLS 0x40 /* Enable PLL Lock/Ref Status Output */
16410 +#define ICS_ENDLS 0x80 /* Enable DPA Lock/Ref Status Output */
16412 +/*-----------------------------------------------------*/
16413 +/* ICS1523 Loop Control Register Bits Definition */
16414 +/*-----------------------------------------------------*/
16416 +#define ICS_PFD 0x7 /* Phase Detector Gain */
16417 +#define ICS_PSD 0x30 /* Post-Scaler Divider */
16419 +/*----------------------------------------------------*/
16420 +/* ICS1523 PLL FeedBack Divider LSBs Definition */
16421 +/*----------------------------------------------------*/
16423 +#define ICS_FBDL 0xFF /* PLL FeedBack Divider LSBs */
16425 +/*----------------------------------------------------*/
16426 +/* ICS1523 PLL FeedBack Divider MSBs Definition */
16427 +/*----------------------------------------------------*/
16429 +#define ICS_FBDM 0xF /* PLL FeedBack Divider MSBs */
16431 +/*------------------------------------------------------------*/
16432 +/* ICS1523 Dynamic Phase Aligner Offset Bits Definition */
16433 +/*------------------------------------------------------------*/
16435 +#define ICS_DPAOS 0x2F /* Dynamic Phase Aligner Offset */
16436 +#define ICS_FILSEL 0x80 /* Loop Filter Select */
16438 +/*----------------------------------------------------------------*/
16439 +/* ICS1523 Dynamic Phase Aligner Resolution Bits Definition */
16440 +/*----------------------------------------------------------------*/
16442 +#define ICS_DPARES 0x3 /* Dynamic Phase Aligner Resolution */
16443 +#define ICS_MMREV 0xFC /* Metal Mask Revision Number */
16445 +/*-------------------------------------------------------*/
16446 +/* ICS1523 Output Enables Register Bits Definition */
16447 +/*-------------------------------------------------------*/
16449 +#define ICS_OEPCK 0x1 /* Output Enable for PECL PCLK Outputs */
16450 +#define ICS_OETCK 0x2 /* Output Enable for STTL CLK Output */
16451 +#define ICS_OEP2 0x4 /* Output Enable for PECL CLK/2 Outputs */
16452 +#define ICS_OET2 0x8 /* Output Enable for STTL CLK/2 Output */
16453 +#define ICS_OEF 0x10 /* Output Enable for STTL FUNC Output */
16454 +#define ICS_CLK2INV 0x20 /* CLK/2 Invert */
16455 +#define ICS_OSCL 0xC0 /* SSTL Clock Scaler */
16457 +/*----------------------------------------------------*/
16458 +/* ICS1523 Osc Divider Register Bits Definition */
16459 +/*----------------------------------------------------*/
16461 +#define ICS_OSCDIV 0x7F /* Oscillator Divider Modulus */
16462 +#define ICS_INSEL 0x80 /* Input Select */
16464 +/*---------------------------------------------------*/
16465 +/* ICS1523 DPA & PLL Reset Register Definition */
16466 +/*---------------------------------------------------*/
16468 +#define ICS_DPAR 0x0A /* DPA Reset Command */
16469 +#define ICS_PLLR 0x50 /* PLL Reset Command */
16471 +/*------------------------------------------------*/
16472 +/* ICS1523 Chip Version Register Definition */
16473 +/*------------------------------------------------*/
16475 +#define ICS_CHIPV 0xFF /* Chip Version */
16477 +/*-------------------------------------------------*/
16478 +/* ICS1523 Chip Revision Register Definition */
16479 +/*-------------------------------------------------*/
16481 +#define ICS_CHIPR 0xFF /* Chip Revision */
16483 +/*------------------------------------------*/
16484 +/* ICS1523 Status Register Definition */
16485 +/*------------------------------------------*/
16487 +#define ICS_DPALOCK 0x1 /* DPA Lock Status */
16488 +#define ICS_PLLLOCK 0x2 /* PLL Lock Status */
16490 +int at91_ics1523_init(void);
16492 +#endif /* ics1523_h */
16493 diff --git a/include/asm-arm/arch-at91/spi.h b/include/asm-arm/arch-at91/spi.h
16494 new file mode 100644
16495 index 0000000..1385466
16496 --- /dev/null
16497 +++ b/include/asm-arm/arch-at91/spi.h
16498 @@ -0,0 +1,54 @@
16500 + * Serial Peripheral Interface (SPI) driver for the Atmel AT91RM9200
16502 + * (c) SAN People (Pty) Ltd
16504 + * This program is free software; you can redistribute it and/or
16505 + * modify it under the terms of the GNU General Public License
16506 + * as published by the Free Software Foundation; either version
16507 + * 2 of the License, or (at your option) any later version.
16508 + */
16510 +#ifndef AT91_LEGACY_SPI_H
16511 +#define AT91_LEGACY_SPI_H
16513 +#define SPI_MAJOR 153 /* registered device number */
16515 +#define DEFAULT_SPI_CLK 6000000
16518 +/* Maximum number of buffers in a single SPI transfer.
16519 + * DataFlash uses maximum of 2
16520 + * spidev interface supports up to 8.
16521 + */
16522 +#define MAX_SPI_TRANSFERS 8
16523 +#define NR_SPI_DEVICES 4 /* number of devices on SPI bus */
16526 + * Describes the buffers for a SPI transfer.
16527 + * A transmit & receive buffer must be specified for each transfer
16528 + */
16529 +struct spi_transfer_list {
16530 + void* tx[MAX_SPI_TRANSFERS]; /* transmit */
16531 + int txlen[MAX_SPI_TRANSFERS];
16532 + void* rx[MAX_SPI_TRANSFERS]; /* receive */
16533 + int rxlen[MAX_SPI_TRANSFERS];
16534 + int nr_transfers; /* number of transfers */
16535 + int curr; /* current transfer */
16538 +struct spi_local {
16539 + unsigned int pcs; /* Peripheral Chip Select value */
16541 + struct spi_transfer_list *xfers; /* current transfer list */
16542 + dma_addr_t tx, rx; /* DMA address for current transfer */
16543 + dma_addr_t txnext, rxnext; /* DMA address for next transfer */
16547 +/* Exported functions */
16548 +extern void spi_access_bus(short device);
16549 +extern void spi_release_bus(short device);
16550 +extern int spi_transfer(struct spi_transfer_list* list);
16552 +#endif
16553 diff --git a/include/asm-arm/arch-ks8695/devices.h b/include/asm-arm/arch-ks8695/devices.h
16554 index b0364dc..7ad2c65 100644
16555 --- a/include/asm-arm/arch-ks8695/devices.h
16556 +++ b/include/asm-arm/arch-ks8695/devices.h
16557 @@ -18,6 +18,11 @@ extern void __init ks8695_add_device_wan(void);
16558 extern void __init ks8695_add_device_lan(void);
16559 extern void __init ks8695_add_device_hpna(void);
16561 + /* LEDs */
16562 +extern short ks8695_leds_cpu;
16563 +extern short ks8695_leds_timer;
16564 +extern void __init ks8695_init_leds(u8 cpu_led, u8 timer_led);
16566 /* PCI */
16567 #define KS8695_MODE_PCI 0
16568 #define KS8695_MODE_MINIPCI 1
16569 diff --git a/include/asm-arm/arch-ks8695/regs-gpio.h b/include/asm-arm/arch-ks8695/regs-gpio.h
16570 index 57fcf9f..6b95d77 100644
16571 --- a/include/asm-arm/arch-ks8695/regs-gpio.h
16572 +++ b/include/asm-arm/arch-ks8695/regs-gpio.h
16573 @@ -49,5 +49,7 @@
16574 #define IOPC_TM_FALLING (4) /* Falling Edge Detection */
16575 #define IOPC_TM_EDGE (6) /* Both Edge Detection */
16577 +/* Port Data Register */
16578 +#define IOPD_(x) (1 << (x)) /* Signal Level of GPIO Pin x */
16580 #endif
16581 diff --git a/include/linux/clk.h b/include/linux/clk.h
16582 index 5ca8c6f..1a31d7a 100644
16583 --- a/include/linux/clk.h
16584 +++ b/include/linux/clk.h
16585 @@ -121,4 +121,24 @@ int clk_set_parent(struct clk *clk, struct clk *parent);
16587 struct clk *clk_get_parent(struct clk *clk);
16589 +/**
16590 + * clk_must_disable - report whether a clock's users must disable it
16591 + * @clk: one node in the clock tree
16593 + * This routine returns true only if the upcoming system state requires
16594 + * disabling the specified clock.
16596 + * It's common for platform power states to constrain certain clocks (and
16597 + * their descendants) to be unavailable, while other states allow that
16598 + * clock to be active. A platform's power states often include an "all on"
16599 + * mode; system wide sleep states like "standby" or "suspend-to-RAM"; and
16600 + * operating states which sacrifice functionality for lower power usage.
16602 + * The constraint value is commonly tested in device driver suspend(), to
16603 + * leave clocks active if they are needed for features like wakeup events.
16604 + * On platforms that support reduced functionality operating states, the
16605 + * constraint may also need to be tested during resume() and probe() calls.
16606 + */
16607 +int clk_must_disable(struct clk *clk);
16609 #endif
16610 diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h
16611 index 88c8140..32985d9 100644
16612 --- a/include/linux/i2c-id.h
16613 +++ b/include/linux/i2c-id.h
16614 @@ -207,6 +207,7 @@
16616 /* --- PCA 9564 based algorithms */
16617 #define I2C_HW_A_ISA 0x1a0000 /* generic ISA Bus interface card */
16618 +#define I2C_HW_A_PLAT 0x1a0001 /* generic platform_bus interface */
16620 /* --- ACPI Embedded controller algorithms */
16621 #define I2C_HW_ACPI_EC 0x1f0000
16622 diff --git a/sound/soc/at91/eti_b1_wm8731.c b/sound/soc/at91/eti_b1_wm8731.c
16623 index 820a676..8da5884 100644
16624 --- a/sound/soc/at91/eti_b1_wm8731.c
16625 +++ b/sound/soc/at91/eti_b1_wm8731.c
16626 @@ -34,8 +34,7 @@
16627 #include <sound/soc.h>
16628 #include <sound/soc-dapm.h>
16630 -#include <asm/arch/hardware.h>
16631 -#include <asm/arch/at91_pio.h>
16632 +#include <asm/hardware.h>
16633 #include <asm/arch/gpio.h>
16635 #include "../codecs/wm8731.h"
16636 @@ -48,13 +47,6 @@
16637 #define DBG(x...)
16638 #endif
16640 -#define AT91_PIO_TF1 (1 << (AT91_PIN_PB6 - PIN_BASE) % 32)
16641 -#define AT91_PIO_TK1 (1 << (AT91_PIN_PB7 - PIN_BASE) % 32)
16642 -#define AT91_PIO_TD1 (1 << (AT91_PIN_PB8 - PIN_BASE) % 32)
16643 -#define AT91_PIO_RD1 (1 << (AT91_PIN_PB9 - PIN_BASE) % 32)
16644 -#define AT91_PIO_RK1 (1 << (AT91_PIN_PB10 - PIN_BASE) % 32)
16645 -#define AT91_PIO_RF1 (1 << (AT91_PIN_PB11 - PIN_BASE) % 32)
16647 static struct clk *pck1_clk;
16648 static struct clk *pllb_clk;
16650 @@ -277,7 +269,6 @@ static struct platform_device *eti_b1_snd_device;
16651 static int __init eti_b1_init(void)
16653 int ret;
16654 - u32 ssc_pio_lines;
16655 struct at91_ssc_periph *ssc = eti_b1_dai.cpu_dai->private_data;
16657 if (!request_mem_region(AT91RM9200_BASE_SSC1, SZ_16K, "soc-audio")) {
16658 @@ -311,19 +302,12 @@ static int __init eti_b1_init(void)
16659 goto fail_io_unmap;
16662 - ssc_pio_lines = AT91_PIO_TF1 | AT91_PIO_TK1 | AT91_PIO_TD1
16663 - | AT91_PIO_RD1 /* | AT91_PIO_RK1 */ | AT91_PIO_RF1;
16665 - /* Reset all PIO registers and assign lines to peripheral A */
16666 - at91_sys_write(AT91_PIOB + PIO_PDR, ssc_pio_lines);
16667 - at91_sys_write(AT91_PIOB + PIO_ODR, ssc_pio_lines);
16668 - at91_sys_write(AT91_PIOB + PIO_IFDR, ssc_pio_lines);
16669 - at91_sys_write(AT91_PIOB + PIO_CODR, ssc_pio_lines);
16670 - at91_sys_write(AT91_PIOB + PIO_IDR, ssc_pio_lines);
16671 - at91_sys_write(AT91_PIOB + PIO_MDDR, ssc_pio_lines);
16672 - at91_sys_write(AT91_PIOB + PIO_PUDR, ssc_pio_lines);
16673 - at91_sys_write(AT91_PIOB + PIO_ASR, ssc_pio_lines);
16674 - at91_sys_write(AT91_PIOB + PIO_OWDR, ssc_pio_lines);
16675 + at91_set_A_periph(AT91_PIN_PB6, 0); /* TF1 */
16676 + at91_set_A_periph(AT91_PIN_PB7, 0); /* TK1 */
16677 + at91_set_A_periph(AT91_PIN_PB8, 0); /* TD1 */
16678 + at91_set_A_periph(AT91_PIN_PB9, 0); /* RD1 */
16679 +/* at91_set_A_periph(AT91_PIN_PB10, 0);*/ /* RK1 */
16680 + at91_set_A_periph(AT91_PIN_PB11, 0); /* RF1 */
16683 * Set PCK1 parent to PLLB and its rate to 12 Mhz.
16685 1.5.2.5