- import buildroot
[buildroot.git] / target / device / Atmel / arch-arm / kernel-patches-2.6.21.5 / 2.6.21.5-at91.patch
blob90e7dfd5146de4af09573aba56bf8fbd44617c25
1 diff -urN -x CVS linux-2.6.21/arch/arm/boot/compressed/head-at91rm9200.S linux-2.6-stable/arch/arm/boot/compressed/head-at91rm9200.S
2 --- linux-2.6.21/arch/arm/boot/compressed/head-at91rm9200.S Thu Apr 26 05:08:32 2007
3 +++ linux-2.6-stable/arch/arm/boot/compressed/head-at91rm9200.S Tue May 8 12:13:30 2007
4 @@ -67,6 +67,12 @@
5 cmp r7, r3
6 beq 99f
8 + @ Promwad Chub : 1181
9 + mov r3, #(MACH_TYPE_CHUB & 0xff)
10 + orr r3, r3, #(MACH_TYPE_CHUB & 0xff00)
11 + cmp r7, r3
12 + beq 99f
14 @ Unknown board, use the AT91RM9200DK board
15 @ mov r7, #MACH_TYPE_AT91RM9200
16 mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
17 diff -urN -x CVS linux-2.6.21/arch/arm/configs/at91sam9260ek_defconfig linux-2.6-stable/arch/arm/configs/at91sam9260ek_defconfig
18 --- linux-2.6.21/arch/arm/configs/at91sam9260ek_defconfig Thu Apr 26 05:08:32 2007
19 +++ linux-2.6-stable/arch/arm/configs/at91sam9260ek_defconfig Tue May 8 12:13:30 2007
20 @@ -1,18 +1,24 @@
22 # Automatically generated make config: don't edit
23 -# Linux kernel version: 2.6.19-rc6
24 -# Fri Nov 17 18:42:21 2006
25 +# Linux kernel version: 2.6.21
26 +# Mon May 7 11:42:02 2007
28 CONFIG_ARM=y
29 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
30 +CONFIG_GENERIC_GPIO=y
31 # CONFIG_GENERIC_TIME is not set
32 CONFIG_MMU=y
33 +# CONFIG_NO_IOPORT is not set
34 CONFIG_GENERIC_HARDIRQS=y
35 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
36 CONFIG_HARDIRQS_SW_RESEND=y
37 CONFIG_GENERIC_IRQ_PROBE=y
38 CONFIG_RWSEM_GENERIC_SPINLOCK=y
39 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
40 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
41 CONFIG_GENERIC_HWEIGHT=y
42 CONFIG_GENERIC_CALIBRATE_DELAY=y
43 +CONFIG_ZONE_DMA=y
44 CONFIG_VECTORS_BASE=0xffff0000
45 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
47 @@ -31,13 +37,16 @@
48 # CONFIG_SWAP is not set
49 CONFIG_SYSVIPC=y
50 # CONFIG_IPC_NS is not set
51 +CONFIG_SYSVIPC_SYSCTL=y
52 # CONFIG_POSIX_MQUEUE is not set
53 # CONFIG_BSD_PROCESS_ACCT is not set
54 # CONFIG_TASKSTATS is not set
55 # CONFIG_UTS_NS is not set
56 # CONFIG_AUDIT is not set
57 # CONFIG_IKCONFIG is not set
58 +CONFIG_SYSFS_DEPRECATED=y
59 # CONFIG_RELAY is not set
60 +CONFIG_BLK_DEV_INITRD=y
61 CONFIG_INITRAMFS_SOURCE=""
62 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
63 CONFIG_SYSCTL=y
64 @@ -76,7 +85,9 @@
65 # Block layer
67 CONFIG_BLOCK=y
68 +# CONFIG_LBD is not set
69 # CONFIG_BLK_DEV_IO_TRACE is not set
70 +# CONFIG_LSF is not set
73 # IO Schedulers
74 @@ -110,10 +121,12 @@
75 # CONFIG_ARCH_IMX is not set
76 # CONFIG_ARCH_IOP32X is not set
77 # CONFIG_ARCH_IOP33X is not set
78 +# CONFIG_ARCH_IOP13XX is not set
79 # CONFIG_ARCH_IXP4XX is not set
80 # CONFIG_ARCH_IXP2000 is not set
81 # CONFIG_ARCH_IXP23XX is not set
82 # CONFIG_ARCH_L7200 is not set
83 +# CONFIG_ARCH_NS9XXX is not set
84 # CONFIG_ARCH_PNX4008 is not set
85 # CONFIG_ARCH_PXA is not set
86 # CONFIG_ARCH_RPC is not set
87 @@ -129,21 +142,29 @@
88 # CONFIG_ARCH_AT91RM9200 is not set
89 CONFIG_ARCH_AT91SAM9260=y
90 # CONFIG_ARCH_AT91SAM9261 is not set
91 +# CONFIG_ARCH_AT91SAM9263 is not set
94 +# AT91SAM9260 Variants
96 +# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
99 -# AT91SAM9260 Board Type
100 +# AT91SAM9260 / AT91SAM9XE Board Type
102 CONFIG_MACH_AT91SAM9260EK=y
105 # AT91 Board Options
107 +# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
108 # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
111 # AT91 Feature Selections
113 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
114 +# CONFIG_ATMEL_TCLIB is not set
117 # Processor Type
118 @@ -166,6 +187,7 @@
119 # CONFIG_CPU_DCACHE_DISABLE is not set
120 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
121 # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
122 +# CONFIG_OUTER_CACHE is not set
125 # Bus support
126 @@ -193,6 +215,7 @@
127 # CONFIG_SPARSEMEM_STATIC is not set
128 CONFIG_SPLIT_PTLOCK_CPUS=4096
129 # CONFIG_RESOURCES_64BIT is not set
130 +CONFIG_ZONE_DMA_FLAG=1
131 # CONFIG_LEDS is not set
132 CONFIG_ALIGNMENT_TRAP=y
134 @@ -203,6 +226,7 @@
135 CONFIG_ZBOOT_ROM_BSS=0x0
136 CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
137 # CONFIG_XIP_KERNEL is not set
138 +# CONFIG_KEXEC is not set
141 # Floating point emulation
142 @@ -228,7 +252,6 @@
143 # Power management options
145 # CONFIG_PM is not set
146 -# CONFIG_APM is not set
149 # Networking
150 @@ -242,9 +265,6 @@
151 CONFIG_PACKET=y
152 # CONFIG_PACKET_MMAP is not set
153 CONFIG_UNIX=y
154 -CONFIG_XFRM=y
155 -# CONFIG_XFRM_USER is not set
156 -# CONFIG_XFRM_SUB_POLICY is not set
157 # CONFIG_NET_KEY is not set
158 CONFIG_INET=y
159 # CONFIG_IP_MULTICAST is not set
160 @@ -263,14 +283,15 @@
161 # CONFIG_INET_IPCOMP is not set
162 # CONFIG_INET_XFRM_TUNNEL is not set
163 # CONFIG_INET_TUNNEL is not set
164 -CONFIG_INET_XFRM_MODE_TRANSPORT=y
165 -CONFIG_INET_XFRM_MODE_TUNNEL=y
166 -CONFIG_INET_XFRM_MODE_BEET=y
167 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
168 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
169 +# CONFIG_INET_XFRM_MODE_BEET is not set
170 CONFIG_INET_DIAG=y
171 CONFIG_INET_TCP_DIAG=y
172 # CONFIG_TCP_CONG_ADVANCED is not set
173 CONFIG_TCP_CONG_CUBIC=y
174 CONFIG_DEFAULT_TCP_CONG="cubic"
175 +# CONFIG_TCP_MD5SIG is not set
176 # CONFIG_IPV6 is not set
177 # CONFIG_INET6_XFRM_TUNNEL is not set
178 # CONFIG_INET6_TUNNEL is not set
179 @@ -328,6 +349,7 @@
180 CONFIG_PREVENT_FIRMWARE_BUILD=y
181 # CONFIG_FW_LOADER is not set
182 # CONFIG_DEBUG_DRIVER is not set
183 +# CONFIG_DEBUG_DEVRES is not set
184 # CONFIG_SYS_HYPERVISOR is not set
187 @@ -348,6 +370,7 @@
189 # Plug and Play support
191 +# CONFIG_PNPACPI is not set
194 # Block devices
195 @@ -360,7 +383,6 @@
196 CONFIG_BLK_DEV_RAM_COUNT=16
197 CONFIG_BLK_DEV_RAM_SIZE=8192
198 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
199 -CONFIG_BLK_DEV_INITRD=y
200 # CONFIG_CDROM_PKTCDVD is not set
201 # CONFIG_ATA_OVER_ETH is not set
203 @@ -369,6 +391,7 @@
205 # CONFIG_RAID_ATTRS is not set
206 CONFIG_SCSI=y
207 +# CONFIG_SCSI_TGT is not set
208 # CONFIG_SCSI_NETLINK is not set
209 CONFIG_SCSI_PROC_FS=y
211 @@ -388,6 +411,7 @@
212 CONFIG_SCSI_MULTI_LUN=y
213 # CONFIG_SCSI_CONSTANTS is not set
214 # CONFIG_SCSI_LOGGING is not set
215 +# CONFIG_SCSI_SCAN_ASYNC is not set
218 # SCSI Transports
219 @@ -405,6 +429,11 @@
220 # CONFIG_SCSI_DEBUG is not set
223 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
225 +# CONFIG_ATA is not set
228 # Multi-device support (RAID and LVM)
230 # CONFIG_MD is not set
231 @@ -425,7 +454,51 @@
233 # Network device support
235 -# CONFIG_NETDEVICES is not set
236 +CONFIG_NETDEVICES=y
237 +# CONFIG_DUMMY is not set
238 +# CONFIG_BONDING is not set
239 +# CONFIG_EQUALIZER is not set
240 +# CONFIG_TUN is not set
243 +# PHY device support
245 +# CONFIG_PHYLIB is not set
248 +# Ethernet (10 or 100Mbit)
250 +CONFIG_NET_ETHERNET=y
251 +CONFIG_MII=y
252 +CONFIG_MACB=y
253 +# CONFIG_SMC91X is not set
254 +# CONFIG_DM9000 is not set
257 +# Ethernet (1000 Mbit)
261 +# Ethernet (10000 Mbit)
265 +# Token Ring devices
269 +# Wireless LAN (non-hamradio)
271 +# CONFIG_NET_RADIO is not set
274 +# Wan interfaces
276 +# CONFIG_WAN is not set
277 +# CONFIG_PPP is not set
278 +# CONFIG_SLIP is not set
279 +# CONFIG_SHAPER is not set
280 +# CONFIG_NETCONSOLE is not set
281 # CONFIG_NETPOLL is not set
282 # CONFIG_NET_POLL_CONTROLLER is not set
284 @@ -517,10 +590,6 @@
285 # CONFIG_NVRAM is not set
286 # CONFIG_DTLK is not set
287 # CONFIG_R3964 is not set
290 -# Ftape, the floppy tape device driver
292 # CONFIG_RAW_DRIVER is not set
295 @@ -553,7 +622,11 @@
297 # Misc devices
299 -# CONFIG_TIFM_CORE is not set
302 +# Multifunction device drivers
304 +# CONFIG_MFD_SM501 is not set
307 # LED devices
308 @@ -582,7 +655,7 @@
310 # Graphics support
312 -# CONFIG_FIRMWARE_EDID is not set
313 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
314 # CONFIG_FB is not set
317 @@ -590,7 +663,6 @@
319 # CONFIG_VGA_CONSOLE is not set
320 CONFIG_DUMMY_CONSOLE=y
321 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
324 # Sound
325 @@ -598,6 +670,12 @@
326 # CONFIG_SOUND is not set
329 +# HID Devices
331 +CONFIG_HID=y
332 +# CONFIG_HID_DEBUG is not set
335 # USB support
337 CONFIG_USB_ARCH_HAS_HCD=y
338 @@ -610,7 +688,6 @@
339 # Miscellaneous USB options
341 CONFIG_USB_DEVICEFS=y
342 -# CONFIG_USB_BANDWIDTH is not set
343 # CONFIG_USB_DYNAMIC_MINORS is not set
344 # CONFIG_USB_OTG is not set
346 @@ -619,7 +696,8 @@
348 # CONFIG_USB_ISP116X_HCD is not set
349 CONFIG_USB_OHCI_HCD=y
350 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
351 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
352 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
353 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
354 # CONFIG_USB_SL811_HCD is not set
356 @@ -671,6 +749,7 @@
357 # CONFIG_USB_ATI_REMOTE2 is not set
358 # CONFIG_USB_KEYSPAN_REMOTE is not set
359 # CONFIG_USB_APPLETOUCH is not set
360 +# CONFIG_USB_GTCO is not set
363 # USB Imaging devices
364 @@ -708,6 +787,7 @@
365 # CONFIG_USB_RIO500 is not set
366 # CONFIG_USB_LEGOTOWER is not set
367 # CONFIG_USB_LCD is not set
368 +# CONFIG_USB_BERRY_CHARGE is not set
369 # CONFIG_USB_LED is not set
370 # CONFIG_USB_CYPRESS_CY7C63 is not set
371 # CONFIG_USB_CYTHERM is not set
372 @@ -717,6 +797,7 @@
373 # CONFIG_USB_APPLEDISPLAY is not set
374 # CONFIG_USB_LD is not set
375 # CONFIG_USB_TRANCEVIBRATOR is not set
376 +# CONFIG_USB_IOWARRIOR is not set
377 # CONFIG_USB_TEST is not set
380 @@ -889,6 +970,11 @@
381 # CONFIG_NLS_UTF8 is not set
384 +# Distributed Lock Manager
386 +# CONFIG_DLM is not set
389 # Profiling support
391 # CONFIG_PROFILING is not set
392 @@ -900,28 +986,30 @@
393 CONFIG_ENABLE_MUST_CHECK=y
394 # CONFIG_MAGIC_SYSRQ is not set
395 # CONFIG_UNUSED_SYMBOLS is not set
396 +# CONFIG_DEBUG_FS is not set
397 +# CONFIG_HEADERS_CHECK is not set
398 CONFIG_DEBUG_KERNEL=y
399 +# CONFIG_DEBUG_SHIRQ is not set
400 CONFIG_LOG_BUF_SHIFT=14
401 CONFIG_DETECT_SOFTLOCKUP=y
402 # CONFIG_SCHEDSTATS is not set
403 +# CONFIG_TIMER_STATS is not set
404 # CONFIG_DEBUG_SLAB is not set
405 # CONFIG_DEBUG_RT_MUTEXES is not set
406 # CONFIG_RT_MUTEX_TESTER is not set
407 # CONFIG_DEBUG_SPINLOCK is not set
408 # CONFIG_DEBUG_MUTEXES is not set
409 -# CONFIG_DEBUG_RWSEMS is not set
410 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
411 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
412 # CONFIG_DEBUG_KOBJECT is not set
413 CONFIG_DEBUG_BUGVERBOSE=y
414 # CONFIG_DEBUG_INFO is not set
415 -# CONFIG_DEBUG_FS is not set
416 # CONFIG_DEBUG_VM is not set
417 # CONFIG_DEBUG_LIST is not set
418 CONFIG_FRAME_POINTER=y
419 CONFIG_FORCED_INLINING=y
420 -# CONFIG_HEADERS_CHECK is not set
421 # CONFIG_RCU_TORTURE_TEST is not set
422 +# CONFIG_FAULT_INJECTION is not set
423 CONFIG_DEBUG_USER=y
424 # CONFIG_DEBUG_ERRORS is not set
425 CONFIG_DEBUG_LL=y
426 @@ -941,9 +1029,12 @@
428 # Library routines
430 +CONFIG_BITREVERSE=y
431 # CONFIG_CRC_CCITT is not set
432 # CONFIG_CRC16 is not set
433 CONFIG_CRC32=y
434 # CONFIG_LIBCRC32C is not set
435 CONFIG_ZLIB_INFLATE=y
436 CONFIG_PLIST=y
437 +CONFIG_HAS_IOMEM=y
438 +CONFIG_HAS_IOPORT=y
439 diff -urN -x CVS linux-2.6.21/arch/arm/configs/at91sam9261ek_defconfig linux-2.6-stable/arch/arm/configs/at91sam9261ek_defconfig
440 --- linux-2.6.21/arch/arm/configs/at91sam9261ek_defconfig Thu Apr 26 05:08:32 2007
441 +++ linux-2.6-stable/arch/arm/configs/at91sam9261ek_defconfig Tue May 8 12:13:30 2007
442 @@ -1,18 +1,24 @@
444 # Automatically generated make config: don't edit
445 -# Linux kernel version: 2.6.19-rc6
446 -# Fri Nov 17 18:00:38 2006
447 +# Linux kernel version: 2.6.21
448 +# Mon May 7 11:42:30 2007
450 CONFIG_ARM=y
451 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
452 +CONFIG_GENERIC_GPIO=y
453 # CONFIG_GENERIC_TIME is not set
454 CONFIG_MMU=y
455 +# CONFIG_NO_IOPORT is not set
456 CONFIG_GENERIC_HARDIRQS=y
457 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
458 CONFIG_HARDIRQS_SW_RESEND=y
459 CONFIG_GENERIC_IRQ_PROBE=y
460 CONFIG_RWSEM_GENERIC_SPINLOCK=y
461 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
462 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
463 CONFIG_GENERIC_HWEIGHT=y
464 CONFIG_GENERIC_CALIBRATE_DELAY=y
465 +CONFIG_ZONE_DMA=y
466 CONFIG_VECTORS_BASE=0xffff0000
467 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
469 @@ -31,13 +37,16 @@
470 # CONFIG_SWAP is not set
471 CONFIG_SYSVIPC=y
472 # CONFIG_IPC_NS is not set
473 +CONFIG_SYSVIPC_SYSCTL=y
474 # CONFIG_POSIX_MQUEUE is not set
475 # CONFIG_BSD_PROCESS_ACCT is not set
476 # CONFIG_TASKSTATS is not set
477 # CONFIG_UTS_NS is not set
478 # CONFIG_AUDIT is not set
479 # CONFIG_IKCONFIG is not set
480 +CONFIG_SYSFS_DEPRECATED=y
481 # CONFIG_RELAY is not set
482 +CONFIG_BLK_DEV_INITRD=y
483 CONFIG_INITRAMFS_SOURCE=""
484 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
485 CONFIG_SYSCTL=y
486 @@ -76,7 +85,9 @@
487 # Block layer
489 CONFIG_BLOCK=y
490 +# CONFIG_LBD is not set
491 # CONFIG_BLK_DEV_IO_TRACE is not set
492 +# CONFIG_LSF is not set
495 # IO Schedulers
496 @@ -110,10 +121,12 @@
497 # CONFIG_ARCH_IMX is not set
498 # CONFIG_ARCH_IOP32X is not set
499 # CONFIG_ARCH_IOP33X is not set
500 +# CONFIG_ARCH_IOP13XX is not set
501 # CONFIG_ARCH_IXP4XX is not set
502 # CONFIG_ARCH_IXP2000 is not set
503 # CONFIG_ARCH_IXP23XX is not set
504 # CONFIG_ARCH_L7200 is not set
505 +# CONFIG_ARCH_NS9XXX is not set
506 # CONFIG_ARCH_PNX4008 is not set
507 # CONFIG_ARCH_PXA is not set
508 # CONFIG_ARCH_RPC is not set
509 @@ -129,6 +142,7 @@
510 # CONFIG_ARCH_AT91RM9200 is not set
511 # CONFIG_ARCH_AT91SAM9260 is not set
512 CONFIG_ARCH_AT91SAM9261=y
513 +# CONFIG_ARCH_AT91SAM9263 is not set
516 # AT91SAM9261 Board Type
517 @@ -138,12 +152,14 @@
519 # AT91 Board Options
521 +# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
522 # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
525 # AT91 Feature Selections
527 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
528 +# CONFIG_ATMEL_TCLIB is not set
531 # Processor Type
532 @@ -166,6 +182,7 @@
533 # CONFIG_CPU_DCACHE_DISABLE is not set
534 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
535 # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
536 +# CONFIG_OUTER_CACHE is not set
539 # Bus support
540 @@ -193,6 +210,7 @@
541 # CONFIG_SPARSEMEM_STATIC is not set
542 CONFIG_SPLIT_PTLOCK_CPUS=4096
543 # CONFIG_RESOURCES_64BIT is not set
544 +CONFIG_ZONE_DMA_FLAG=1
545 # CONFIG_LEDS is not set
546 CONFIG_ALIGNMENT_TRAP=y
548 @@ -203,6 +221,7 @@
549 CONFIG_ZBOOT_ROM_BSS=0x0
550 CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
551 # CONFIG_XIP_KERNEL is not set
552 +# CONFIG_KEXEC is not set
555 # Floating point emulation
556 @@ -228,7 +247,6 @@
557 # Power management options
559 # CONFIG_PM is not set
560 -# CONFIG_APM is not set
563 # Networking
564 @@ -245,6 +263,7 @@
565 CONFIG_XFRM=y
566 # CONFIG_XFRM_USER is not set
567 # CONFIG_XFRM_SUB_POLICY is not set
568 +# CONFIG_XFRM_MIGRATE is not set
569 # CONFIG_NET_KEY is not set
570 CONFIG_INET=y
571 # CONFIG_IP_MULTICAST is not set
572 @@ -271,6 +290,7 @@
573 # CONFIG_TCP_CONG_ADVANCED is not set
574 CONFIG_TCP_CONG_CUBIC=y
575 CONFIG_DEFAULT_TCP_CONG="cubic"
576 +# CONFIG_TCP_MD5SIG is not set
577 # CONFIG_IPV6 is not set
578 # CONFIG_INET6_XFRM_TUNNEL is not set
579 # CONFIG_INET6_TUNNEL is not set
580 @@ -328,6 +348,7 @@
581 CONFIG_PREVENT_FIRMWARE_BUILD=y
582 # CONFIG_FW_LOADER is not set
583 # CONFIG_DEBUG_DRIVER is not set
584 +# CONFIG_DEBUG_DEVRES is not set
585 # CONFIG_SYS_HYPERVISOR is not set
588 @@ -350,6 +371,7 @@
589 # User Modules And Translation Layers
591 # CONFIG_MTD_CHAR is not set
592 +CONFIG_MTD_BLKDEVS=y
593 CONFIG_MTD_BLOCK=y
594 # CONFIG_FTL is not set
595 # CONFIG_NFTL is not set
596 @@ -386,6 +408,8 @@
598 # Self-contained MTD device drivers
600 +# CONFIG_MTD_DATAFLASH is not set
601 +# CONFIG_MTD_M25P80 is not set
602 # CONFIG_MTD_SLRAM is not set
603 # CONFIG_MTD_PHRAM is not set
604 # CONFIG_MTD_MTDRAM is not set
605 @@ -422,6 +446,7 @@
607 # Plug and Play support
609 +# CONFIG_PNPACPI is not set
612 # Block devices
613 @@ -434,7 +459,6 @@
614 CONFIG_BLK_DEV_RAM_COUNT=16
615 CONFIG_BLK_DEV_RAM_SIZE=8192
616 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
617 -CONFIG_BLK_DEV_INITRD=y
618 # CONFIG_CDROM_PKTCDVD is not set
619 # CONFIG_ATA_OVER_ETH is not set
621 @@ -443,6 +467,7 @@
623 # CONFIG_RAID_ATTRS is not set
624 CONFIG_SCSI=y
625 +# CONFIG_SCSI_TGT is not set
626 # CONFIG_SCSI_NETLINK is not set
627 CONFIG_SCSI_PROC_FS=y
629 @@ -462,6 +487,7 @@
630 CONFIG_SCSI_MULTI_LUN=y
631 # CONFIG_SCSI_CONSTANTS is not set
632 # CONFIG_SCSI_LOGGING is not set
633 +# CONFIG_SCSI_SCAN_ASYNC is not set
636 # SCSI Transports
637 @@ -479,6 +505,11 @@
638 # CONFIG_SCSI_DEBUG is not set
641 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
643 +# CONFIG_ATA is not set
646 # Multi-device support (RAID and LVM)
648 # CONFIG_MD is not set
649 @@ -575,7 +606,16 @@
650 # CONFIG_INPUT_KEYBOARD is not set
651 # CONFIG_INPUT_MOUSE is not set
652 # CONFIG_INPUT_JOYSTICK is not set
653 -# CONFIG_INPUT_TOUCHSCREEN is not set
654 +CONFIG_INPUT_TOUCHSCREEN=y
655 +CONFIG_TOUCHSCREEN_ADS7846=y
656 +# CONFIG_TOUCHSCREEN_GUNZE is not set
657 +# CONFIG_TOUCHSCREEN_ELO is not set
658 +# CONFIG_TOUCHSCREEN_MTOUCH is not set
659 +# CONFIG_TOUCHSCREEN_MK712 is not set
660 +# CONFIG_TOUCHSCREEN_PENMOUNT is not set
661 +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
662 +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
663 +# CONFIG_TOUCHSCREEN_UCB1400 is not set
664 # CONFIG_INPUT_MISC is not set
667 @@ -634,10 +674,6 @@
668 # CONFIG_NVRAM is not set
669 # CONFIG_DTLK is not set
670 # CONFIG_R3964 is not set
673 -# Ftape, the floppy tape device driver
675 # CONFIG_RAW_DRIVER is not set
678 @@ -662,6 +698,7 @@
679 # I2C Hardware Bus support
681 CONFIG_I2C_AT91=y
682 +CONFIG_I2C_AT91_CLOCKRATE=100000
683 # CONFIG_I2C_OCORES is not set
684 # CONFIG_I2C_PARPORT_LIGHT is not set
685 # CONFIG_I2C_STUB is not set
686 @@ -686,8 +723,20 @@
688 # SPI support
690 -# CONFIG_SPI is not set
691 -# CONFIG_SPI_MASTER is not set
692 +CONFIG_SPI=y
693 +# CONFIG_SPI_DEBUG is not set
694 +CONFIG_SPI_MASTER=y
697 +# SPI Master Controller Drivers
699 +CONFIG_SPI_ATMEL=y
700 +# CONFIG_SPI_BITBANG is not set
703 +# SPI Protocol Masters
705 +# CONFIG_SPI_AT25 is not set
708 # Dallas's 1-wire bus
709 @@ -703,7 +752,11 @@
711 # Misc devices
713 -# CONFIG_TIFM_CORE is not set
716 +# Multifunction device drivers
718 +# CONFIG_MFD_SM501 is not set
721 # LED devices
722 @@ -732,7 +785,7 @@
724 # Graphics support
726 -# CONFIG_FIRMWARE_EDID is not set
727 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
728 # CONFIG_FB is not set
731 @@ -740,7 +793,6 @@
733 # CONFIG_VGA_CONSOLE is not set
734 CONFIG_DUMMY_CONSOLE=y
735 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
738 # Sound
739 @@ -748,6 +800,12 @@
740 # CONFIG_SOUND is not set
743 +# HID Devices
745 +CONFIG_HID=y
746 +# CONFIG_HID_DEBUG is not set
749 # USB support
751 CONFIG_USB_ARCH_HAS_HCD=y
752 @@ -760,7 +818,6 @@
753 # Miscellaneous USB options
755 CONFIG_USB_DEVICEFS=y
756 -# CONFIG_USB_BANDWIDTH is not set
757 # CONFIG_USB_DYNAMIC_MINORS is not set
758 # CONFIG_USB_OTG is not set
760 @@ -769,7 +826,8 @@
762 # CONFIG_USB_ISP116X_HCD is not set
763 CONFIG_USB_OHCI_HCD=y
764 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
765 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
766 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
767 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
768 # CONFIG_USB_SL811_HCD is not set
770 @@ -821,6 +879,7 @@
771 # CONFIG_USB_ATI_REMOTE2 is not set
772 # CONFIG_USB_KEYSPAN_REMOTE is not set
773 # CONFIG_USB_APPLETOUCH is not set
774 +# CONFIG_USB_GTCO is not set
777 # USB Imaging devices
778 @@ -858,6 +917,7 @@
779 # CONFIG_USB_RIO500 is not set
780 # CONFIG_USB_LEGOTOWER is not set
781 # CONFIG_USB_LCD is not set
782 +# CONFIG_USB_BERRY_CHARGE is not set
783 # CONFIG_USB_LED is not set
784 # CONFIG_USB_CYPRESS_CY7C63 is not set
785 # CONFIG_USB_CYTHERM is not set
786 @@ -867,6 +927,7 @@
787 # CONFIG_USB_APPLEDISPLAY is not set
788 # CONFIG_USB_LD is not set
789 # CONFIG_USB_TRANCEVIBRATOR is not set
790 +# CONFIG_USB_IOWARRIOR is not set
791 # CONFIG_USB_TEST is not set
794 @@ -903,7 +964,6 @@
795 # CONFIG_MMC_DEBUG is not set
796 CONFIG_MMC_BLOCK=y
797 CONFIG_MMC_AT91=m
798 -# CONFIG_MMC_TIFM_SD is not set
801 # Real Time Clock
802 @@ -973,7 +1033,6 @@
803 # CONFIG_BEFS_FS is not set
804 # CONFIG_BFS_FS is not set
805 # CONFIG_EFS_FS is not set
806 -# CONFIG_JFFS_FS is not set
807 # CONFIG_JFFS2_FS is not set
808 CONFIG_CRAMFS=y
809 # CONFIG_VXFS_FS is not set
810 @@ -1045,6 +1104,11 @@
811 # CONFIG_NLS_UTF8 is not set
814 +# Distributed Lock Manager
816 +# CONFIG_DLM is not set
819 # Profiling support
821 # CONFIG_PROFILING is not set
822 @@ -1056,28 +1120,30 @@
823 CONFIG_ENABLE_MUST_CHECK=y
824 # CONFIG_MAGIC_SYSRQ is not set
825 # CONFIG_UNUSED_SYMBOLS is not set
826 +# CONFIG_DEBUG_FS is not set
827 +# CONFIG_HEADERS_CHECK is not set
828 CONFIG_DEBUG_KERNEL=y
829 +# CONFIG_DEBUG_SHIRQ is not set
830 CONFIG_LOG_BUF_SHIFT=14
831 CONFIG_DETECT_SOFTLOCKUP=y
832 # CONFIG_SCHEDSTATS is not set
833 +# CONFIG_TIMER_STATS is not set
834 # CONFIG_DEBUG_SLAB is not set
835 # CONFIG_DEBUG_RT_MUTEXES is not set
836 # CONFIG_RT_MUTEX_TESTER is not set
837 # CONFIG_DEBUG_SPINLOCK is not set
838 # CONFIG_DEBUG_MUTEXES is not set
839 -# CONFIG_DEBUG_RWSEMS is not set
840 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
841 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
842 # CONFIG_DEBUG_KOBJECT is not set
843 CONFIG_DEBUG_BUGVERBOSE=y
844 # CONFIG_DEBUG_INFO is not set
845 -# CONFIG_DEBUG_FS is not set
846 # CONFIG_DEBUG_VM is not set
847 # CONFIG_DEBUG_LIST is not set
848 CONFIG_FRAME_POINTER=y
849 CONFIG_FORCED_INLINING=y
850 -# CONFIG_HEADERS_CHECK is not set
851 # CONFIG_RCU_TORTURE_TEST is not set
852 +# CONFIG_FAULT_INJECTION is not set
853 CONFIG_DEBUG_USER=y
854 # CONFIG_DEBUG_ERRORS is not set
855 CONFIG_DEBUG_LL=y
856 @@ -1097,9 +1163,12 @@
858 # Library routines
860 +CONFIG_BITREVERSE=y
861 # CONFIG_CRC_CCITT is not set
862 # CONFIG_CRC16 is not set
863 CONFIG_CRC32=y
864 # CONFIG_LIBCRC32C is not set
865 CONFIG_ZLIB_INFLATE=y
866 CONFIG_PLIST=y
867 +CONFIG_HAS_IOMEM=y
868 +CONFIG_HAS_IOPORT=y
869 diff -urN -x CVS linux-2.6.21/arch/arm/configs/at91sam9263ek_defconfig linux-2.6-stable/arch/arm/configs/at91sam9263ek_defconfig
870 --- linux-2.6.21/arch/arm/configs/at91sam9263ek_defconfig Thu Apr 26 05:08:32 2007
871 +++ linux-2.6-stable/arch/arm/configs/at91sam9263ek_defconfig Tue May 8 12:13:30 2007
872 @@ -1,11 +1,14 @@
874 # Automatically generated make config: don't edit
875 -# Linux kernel version: 2.6.20-rc1
876 -# Mon Jan 8 16:06:54 2007
877 +# Linux kernel version: 2.6.21
878 +# Mon May 7 11:42:49 2007
880 CONFIG_ARM=y
881 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
882 +CONFIG_GENERIC_GPIO=y
883 # CONFIG_GENERIC_TIME is not set
884 CONFIG_MMU=y
885 +# CONFIG_NO_IOPORT is not set
886 CONFIG_GENERIC_HARDIRQS=y
887 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
888 CONFIG_HARDIRQS_SW_RESEND=y
889 @@ -15,6 +18,7 @@
890 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
891 CONFIG_GENERIC_HWEIGHT=y
892 CONFIG_GENERIC_CALIBRATE_DELAY=y
893 +CONFIG_ZONE_DMA=y
894 CONFIG_VECTORS_BASE=0xffff0000
895 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
897 @@ -33,6 +37,7 @@
898 # CONFIG_SWAP is not set
899 CONFIG_SYSVIPC=y
900 # CONFIG_IPC_NS is not set
901 +CONFIG_SYSVIPC_SYSCTL=y
902 # CONFIG_POSIX_MQUEUE is not set
903 # CONFIG_BSD_PROCESS_ACCT is not set
904 # CONFIG_TASKSTATS is not set
905 @@ -41,6 +46,7 @@
906 # CONFIG_IKCONFIG is not set
907 CONFIG_SYSFS_DEPRECATED=y
908 # CONFIG_RELAY is not set
909 +CONFIG_BLK_DEV_INITRD=y
910 CONFIG_INITRAMFS_SOURCE=""
911 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
912 CONFIG_SYSCTL=y
913 @@ -120,6 +126,7 @@
914 # CONFIG_ARCH_IXP2000 is not set
915 # CONFIG_ARCH_IXP23XX is not set
916 # CONFIG_ARCH_L7200 is not set
917 +# CONFIG_ARCH_NS9XXX is not set
918 # CONFIG_ARCH_PNX4008 is not set
919 # CONFIG_ARCH_PXA is not set
920 # CONFIG_ARCH_RPC is not set
921 @@ -152,6 +159,7 @@
922 # AT91 Feature Selections
924 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
925 +# CONFIG_ATMEL_TCLIB is not set
928 # Processor Type
929 @@ -174,6 +182,7 @@
930 # CONFIG_CPU_DCACHE_DISABLE is not set
931 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
932 # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
933 +# CONFIG_OUTER_CACHE is not set
936 # Bus support
937 @@ -201,6 +210,7 @@
938 # CONFIG_SPARSEMEM_STATIC is not set
939 CONFIG_SPLIT_PTLOCK_CPUS=4096
940 # CONFIG_RESOURCES_64BIT is not set
941 +CONFIG_ZONE_DMA_FLAG=1
942 # CONFIG_LEDS is not set
943 CONFIG_ALIGNMENT_TRAP=y
945 @@ -211,6 +221,7 @@
946 CONFIG_ZBOOT_ROM_BSS=0x0
947 CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
948 # CONFIG_XIP_KERNEL is not set
949 +# CONFIG_KEXEC is not set
952 # Floating point emulation
953 @@ -236,7 +247,6 @@
954 # Power management options
956 # CONFIG_PM is not set
957 -# CONFIG_APM is not set
960 # Networking
961 @@ -333,6 +343,7 @@
962 CONFIG_PREVENT_FIRMWARE_BUILD=y
963 # CONFIG_FW_LOADER is not set
964 # CONFIG_DEBUG_DRIVER is not set
965 +# CONFIG_DEBUG_DEVRES is not set
966 # CONFIG_SYS_HYPERVISOR is not set
969 @@ -430,6 +441,7 @@
971 # Plug and Play support
973 +# CONFIG_PNPACPI is not set
976 # Block devices
977 @@ -443,7 +455,6 @@
978 CONFIG_BLK_DEV_RAM_COUNT=16
979 CONFIG_BLK_DEV_RAM_SIZE=8192
980 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
981 -CONFIG_BLK_DEV_INITRD=y
982 # CONFIG_CDROM_PKTCDVD is not set
983 # CONFIG_ATA_OVER_ETH is not set
985 @@ -531,6 +542,7 @@
987 CONFIG_NET_ETHERNET=y
988 CONFIG_MII=y
989 +CONFIG_MACB=y
990 # CONFIG_SMC91X is not set
991 # CONFIG_DM9000 is not set
993 @@ -685,6 +697,7 @@
994 # I2C Hardware Bus support
996 CONFIG_I2C_AT91=y
997 +CONFIG_I2C_AT91_CLOCKRATE=100000
998 # CONFIG_I2C_OCORES is not set
999 # CONFIG_I2C_PARPORT_LIGHT is not set
1000 # CONFIG_I2C_STUB is not set
1001 @@ -722,6 +735,7 @@
1003 # SPI Protocol Masters
1005 +# CONFIG_SPI_AT25 is not set
1008 # Dallas's 1-wire bus
1009 @@ -737,7 +751,11 @@
1011 # Misc devices
1013 -# CONFIG_TIFM_CORE is not set
1016 +# Multifunction device drivers
1018 +# CONFIG_MFD_SM501 is not set
1021 # LED devices
1022 @@ -766,15 +784,23 @@
1024 # Graphics support
1026 -# CONFIG_FIRMWARE_EDID is not set
1027 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1028 CONFIG_FB=y
1029 +# CONFIG_FIRMWARE_EDID is not set
1030 +# CONFIG_FB_DDC is not set
1031 # CONFIG_FB_CFB_FILLRECT is not set
1032 # CONFIG_FB_CFB_COPYAREA is not set
1033 # CONFIG_FB_CFB_IMAGEBLIT is not set
1034 +# CONFIG_FB_SVGALIB is not set
1035 # CONFIG_FB_MACMODES is not set
1036 # CONFIG_FB_BACKLIGHT is not set
1037 # CONFIG_FB_MODE_HELPERS is not set
1038 # CONFIG_FB_TILEBLITTING is not set
1041 +# Frame buffer hardware drivers
1043 +# CONFIG_FB_S1D15605 is not set
1044 # CONFIG_FB_S1D13XXX is not set
1045 # CONFIG_FB_VIRTUAL is not set
1047 @@ -789,7 +815,6 @@
1048 # Logo configuration
1050 # CONFIG_LOGO is not set
1051 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1054 # Sound
1055 @@ -800,6 +825,7 @@
1056 # HID Devices
1058 CONFIG_HID=y
1059 +# CONFIG_HID_DEBUG is not set
1062 # USB support
1063 @@ -814,9 +840,7 @@
1064 # Miscellaneous USB options
1066 CONFIG_USB_DEVICEFS=y
1067 -# CONFIG_USB_BANDWIDTH is not set
1068 # CONFIG_USB_DYNAMIC_MINORS is not set
1069 -# CONFIG_USB_MULTITHREAD_PROBE is not set
1070 # CONFIG_USB_OTG is not set
1073 @@ -824,7 +848,8 @@
1075 # CONFIG_USB_ISP116X_HCD is not set
1076 CONFIG_USB_OHCI_HCD=y
1077 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
1078 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1079 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1080 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1081 # CONFIG_USB_SL811_HCD is not set
1083 @@ -877,6 +902,7 @@
1084 # CONFIG_USB_ATI_REMOTE2 is not set
1085 # CONFIG_USB_KEYSPAN_REMOTE is not set
1086 # CONFIG_USB_APPLETOUCH is not set
1087 +# CONFIG_USB_GTCO is not set
1090 # USB Imaging devices
1091 @@ -914,6 +940,7 @@
1092 # CONFIG_USB_RIO500 is not set
1093 # CONFIG_USB_LEGOTOWER is not set
1094 # CONFIG_USB_LCD is not set
1095 +# CONFIG_USB_BERRY_CHARGE is not set
1096 # CONFIG_USB_LED is not set
1097 # CONFIG_USB_CYPRESS_CY7C63 is not set
1098 # CONFIG_USB_CYTHERM is not set
1099 @@ -923,6 +950,7 @@
1100 # CONFIG_USB_APPLEDISPLAY is not set
1101 # CONFIG_USB_LD is not set
1102 # CONFIG_USB_TRANCEVIBRATOR is not set
1103 +# CONFIG_USB_IOWARRIOR is not set
1104 # CONFIG_USB_TEST is not set
1107 @@ -959,7 +987,6 @@
1108 # CONFIG_MMC_DEBUG is not set
1109 CONFIG_MMC_BLOCK=y
1110 CONFIG_MMC_AT91=m
1111 -# CONFIG_MMC_TIFM_SD is not set
1114 # Real Time Clock
1115 @@ -1136,15 +1163,16 @@
1116 # CONFIG_DEBUG_FS is not set
1117 # CONFIG_HEADERS_CHECK is not set
1118 CONFIG_DEBUG_KERNEL=y
1119 +# CONFIG_DEBUG_SHIRQ is not set
1120 CONFIG_LOG_BUF_SHIFT=14
1121 CONFIG_DETECT_SOFTLOCKUP=y
1122 # CONFIG_SCHEDSTATS is not set
1123 +# CONFIG_TIMER_STATS is not set
1124 # CONFIG_DEBUG_SLAB is not set
1125 # CONFIG_DEBUG_RT_MUTEXES is not set
1126 # CONFIG_RT_MUTEX_TESTER is not set
1127 # CONFIG_DEBUG_SPINLOCK is not set
1128 # CONFIG_DEBUG_MUTEXES is not set
1129 -# CONFIG_DEBUG_RWSEMS is not set
1130 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1131 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1132 # CONFIG_DEBUG_KOBJECT is not set
1133 @@ -1155,6 +1183,7 @@
1134 CONFIG_FRAME_POINTER=y
1135 CONFIG_FORCED_INLINING=y
1136 # CONFIG_RCU_TORTURE_TEST is not set
1137 +# CONFIG_FAULT_INJECTION is not set
1138 CONFIG_DEBUG_USER=y
1139 # CONFIG_DEBUG_ERRORS is not set
1140 CONFIG_DEBUG_LL=y
1141 @@ -1180,5 +1209,7 @@
1142 CONFIG_CRC32=y
1143 # CONFIG_LIBCRC32C is not set
1144 CONFIG_ZLIB_INFLATE=y
1145 +CONFIG_ZLIB_DEFLATE=y
1146 CONFIG_PLIST=y
1147 -CONFIG_IOMAP_COPY=y
1148 +CONFIG_HAS_IOMEM=y
1149 +CONFIG_HAS_IOPORT=y
1150 diff -urN -x CVS linux-2.6.21/arch/arm/configs/at91sam9rlek_defconfig linux-2.6-stable/arch/arm/configs/at91sam9rlek_defconfig
1151 --- linux-2.6.21/arch/arm/configs/at91sam9rlek_defconfig Thu Jan 1 02:00:00 1970
1152 +++ linux-2.6-stable/arch/arm/configs/at91sam9rlek_defconfig Wed May 9 10:20:54 2007
1153 @@ -0,0 +1,957 @@
1155 +# Automatically generated make config: don't edit
1156 +# Linux kernel version: 2.6.21
1157 +# Mon May 7 16:30:40 2007
1159 +CONFIG_ARM=y
1160 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
1161 +CONFIG_GENERIC_GPIO=y
1162 +# CONFIG_GENERIC_TIME is not set
1163 +CONFIG_MMU=y
1164 +# CONFIG_NO_IOPORT is not set
1165 +CONFIG_GENERIC_HARDIRQS=y
1166 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1167 +CONFIG_HARDIRQS_SW_RESEND=y
1168 +CONFIG_GENERIC_IRQ_PROBE=y
1169 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
1170 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
1171 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
1172 +CONFIG_GENERIC_HWEIGHT=y
1173 +CONFIG_GENERIC_CALIBRATE_DELAY=y
1174 +CONFIG_ZONE_DMA=y
1175 +CONFIG_VECTORS_BASE=0xffff0000
1176 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
1179 +# Code maturity level options
1181 +CONFIG_EXPERIMENTAL=y
1182 +CONFIG_BROKEN_ON_SMP=y
1183 +CONFIG_INIT_ENV_ARG_LIMIT=32
1186 +# General setup
1188 +CONFIG_LOCALVERSION=""
1189 +# CONFIG_LOCALVERSION_AUTO is not set
1190 +# CONFIG_SWAP is not set
1191 +CONFIG_SYSVIPC=y
1192 +# CONFIG_IPC_NS is not set
1193 +CONFIG_SYSVIPC_SYSCTL=y
1194 +# CONFIG_POSIX_MQUEUE is not set
1195 +# CONFIG_BSD_PROCESS_ACCT is not set
1196 +# CONFIG_TASKSTATS is not set
1197 +# CONFIG_UTS_NS is not set
1198 +# CONFIG_AUDIT is not set
1199 +# CONFIG_IKCONFIG is not set
1200 +CONFIG_SYSFS_DEPRECATED=y
1201 +# CONFIG_RELAY is not set
1202 +CONFIG_BLK_DEV_INITRD=y
1203 +CONFIG_INITRAMFS_SOURCE=""
1204 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
1205 +CONFIG_SYSCTL=y
1206 +# CONFIG_EMBEDDED is not set
1207 +CONFIG_UID16=y
1208 +CONFIG_SYSCTL_SYSCALL=y
1209 +CONFIG_KALLSYMS=y
1210 +# CONFIG_KALLSYMS_ALL is not set
1211 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
1212 +CONFIG_HOTPLUG=y
1213 +CONFIG_PRINTK=y
1214 +CONFIG_BUG=y
1215 +CONFIG_ELF_CORE=y
1216 +CONFIG_BASE_FULL=y
1217 +CONFIG_FUTEX=y
1218 +CONFIG_EPOLL=y
1219 +CONFIG_SHMEM=y
1220 +CONFIG_SLAB=y
1221 +CONFIG_VM_EVENT_COUNTERS=y
1222 +CONFIG_RT_MUTEXES=y
1223 +# CONFIG_TINY_SHMEM is not set
1224 +CONFIG_BASE_SMALL=0
1225 +# CONFIG_SLOB is not set
1228 +# Loadable module support
1230 +CONFIG_MODULES=y
1231 +CONFIG_MODULE_UNLOAD=y
1232 +# CONFIG_MODULE_FORCE_UNLOAD is not set
1233 +# CONFIG_MODVERSIONS is not set
1234 +# CONFIG_MODULE_SRCVERSION_ALL is not set
1235 +CONFIG_KMOD=y
1238 +# Block layer
1240 +CONFIG_BLOCK=y
1241 +# CONFIG_LBD is not set
1242 +# CONFIG_BLK_DEV_IO_TRACE is not set
1243 +# CONFIG_LSF is not set
1246 +# IO Schedulers
1248 +CONFIG_IOSCHED_NOOP=y
1249 +CONFIG_IOSCHED_AS=y
1250 +# CONFIG_IOSCHED_DEADLINE is not set
1251 +# CONFIG_IOSCHED_CFQ is not set
1252 +CONFIG_DEFAULT_AS=y
1253 +# CONFIG_DEFAULT_DEADLINE is not set
1254 +# CONFIG_DEFAULT_CFQ is not set
1255 +# CONFIG_DEFAULT_NOOP is not set
1256 +CONFIG_DEFAULT_IOSCHED="anticipatory"
1259 +# System Type
1261 +# CONFIG_ARCH_AAEC2000 is not set
1262 +# CONFIG_ARCH_INTEGRATOR is not set
1263 +# CONFIG_ARCH_REALVIEW is not set
1264 +# CONFIG_ARCH_VERSATILE is not set
1265 +CONFIG_ARCH_AT91=y
1266 +# CONFIG_ARCH_CLPS7500 is not set
1267 +# CONFIG_ARCH_CLPS711X is not set
1268 +# CONFIG_ARCH_CO285 is not set
1269 +# CONFIG_ARCH_EBSA110 is not set
1270 +# CONFIG_ARCH_EP93XX is not set
1271 +# CONFIG_ARCH_FOOTBRIDGE is not set
1272 +# CONFIG_ARCH_NETX is not set
1273 +# CONFIG_ARCH_H720X is not set
1274 +# CONFIG_ARCH_IMX is not set
1275 +# CONFIG_ARCH_IOP32X is not set
1276 +# CONFIG_ARCH_IOP33X is not set
1277 +# CONFIG_ARCH_IOP13XX is not set
1278 +# CONFIG_ARCH_IXP4XX is not set
1279 +# CONFIG_ARCH_IXP2000 is not set
1280 +# CONFIG_ARCH_IXP23XX is not set
1281 +# CONFIG_ARCH_L7200 is not set
1282 +# CONFIG_ARCH_NS9XXX is not set
1283 +# CONFIG_ARCH_PNX4008 is not set
1284 +# CONFIG_ARCH_PXA is not set
1285 +# CONFIG_ARCH_RPC is not set
1286 +# CONFIG_ARCH_SA1100 is not set
1287 +# CONFIG_ARCH_S3C2410 is not set
1288 +# CONFIG_ARCH_SHARK is not set
1289 +# CONFIG_ARCH_LH7A40X is not set
1290 +# CONFIG_ARCH_OMAP is not set
1293 +# Atmel AT91 System-on-Chip
1295 +# CONFIG_ARCH_AT91RM9200 is not set
1296 +# CONFIG_ARCH_AT91SAM9260 is not set
1297 +# CONFIG_ARCH_AT91SAM9261 is not set
1298 +# CONFIG_ARCH_AT91SAM9263 is not set
1299 +CONFIG_ARCH_AT91SAM9RL=y
1302 +# AT91SAM9RL Board Type
1304 +CONFIG_MACH_AT91SAM9RLEK=y
1307 +# AT91 Board Options
1311 +# AT91 Feature Selections
1313 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
1316 +# Processor Type
1318 +CONFIG_CPU_32=y
1319 +CONFIG_CPU_ARM926T=y
1320 +CONFIG_CPU_32v5=y
1321 +CONFIG_CPU_ABRT_EV5TJ=y
1322 +CONFIG_CPU_CACHE_VIVT=y
1323 +CONFIG_CPU_COPY_V4WB=y
1324 +CONFIG_CPU_TLB_V4WBI=y
1325 +CONFIG_CPU_CP15=y
1326 +CONFIG_CPU_CP15_MMU=y
1329 +# Processor Features
1331 +# CONFIG_ARM_THUMB is not set
1332 +# CONFIG_CPU_ICACHE_DISABLE is not set
1333 +# CONFIG_CPU_DCACHE_DISABLE is not set
1334 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
1335 +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
1336 +# CONFIG_OUTER_CACHE is not set
1339 +# Bus support
1343 +# PCCARD (PCMCIA/CardBus) support
1345 +# CONFIG_PCCARD is not set
1348 +# Kernel Features
1350 +# CONFIG_PREEMPT is not set
1351 +# CONFIG_NO_IDLE_HZ is not set
1352 +CONFIG_HZ=100
1353 +# CONFIG_AEABI is not set
1354 +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
1355 +CONFIG_SELECT_MEMORY_MODEL=y
1356 +CONFIG_FLATMEM_MANUAL=y
1357 +# CONFIG_DISCONTIGMEM_MANUAL is not set
1358 +# CONFIG_SPARSEMEM_MANUAL is not set
1359 +CONFIG_FLATMEM=y
1360 +CONFIG_FLAT_NODE_MEM_MAP=y
1361 +# CONFIG_SPARSEMEM_STATIC is not set
1362 +CONFIG_SPLIT_PTLOCK_CPUS=4096
1363 +# CONFIG_RESOURCES_64BIT is not set
1364 +CONFIG_ZONE_DMA_FLAG=1
1365 +# CONFIG_LEDS is not set
1366 +CONFIG_ALIGNMENT_TRAP=y
1369 +# Boot options
1371 +CONFIG_ZBOOT_ROM_TEXT=0x0
1372 +CONFIG_ZBOOT_ROM_BSS=0x0
1373 +CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,17105363 root=/dev/ram0 rw"
1374 +# CONFIG_XIP_KERNEL is not set
1375 +# CONFIG_KEXEC is not set
1378 +# Floating point emulation
1382 +# At least one emulation must be selected
1384 +CONFIG_FPE_NWFPE=y
1385 +# CONFIG_FPE_NWFPE_XP is not set
1386 +# CONFIG_FPE_FASTFPE is not set
1387 +# CONFIG_VFP is not set
1390 +# Userspace binary formats
1392 +CONFIG_BINFMT_ELF=y
1393 +# CONFIG_BINFMT_AOUT is not set
1394 +# CONFIG_BINFMT_MISC is not set
1395 +# CONFIG_ARTHUR is not set
1398 +# Power management options
1400 +# CONFIG_PM is not set
1403 +# Networking
1405 +CONFIG_NET=y
1408 +# Networking options
1410 +# CONFIG_NETDEBUG is not set
1411 +# CONFIG_PACKET is not set
1412 +CONFIG_UNIX=y
1413 +# CONFIG_NET_KEY is not set
1414 +# CONFIG_INET is not set
1415 +# CONFIG_NETWORK_SECMARK is not set
1416 +# CONFIG_NETFILTER is not set
1417 +# CONFIG_ATM is not set
1418 +# CONFIG_BRIDGE is not set
1419 +# CONFIG_VLAN_8021Q is not set
1420 +# CONFIG_DECNET is not set
1421 +# CONFIG_LLC2 is not set
1422 +# CONFIG_IPX is not set
1423 +# CONFIG_ATALK is not set
1424 +# CONFIG_X25 is not set
1425 +# CONFIG_LAPB is not set
1426 +# CONFIG_WAN_ROUTER is not set
1429 +# QoS and/or fair queueing
1431 +# CONFIG_NET_SCHED is not set
1434 +# Network testing
1436 +# CONFIG_NET_PKTGEN is not set
1437 +# CONFIG_HAMRADIO is not set
1438 +# CONFIG_IRDA is not set
1439 +# CONFIG_BT is not set
1440 +# CONFIG_IEEE80211 is not set
1443 +# Device Drivers
1447 +# Generic Driver Options
1449 +CONFIG_STANDALONE=y
1450 +CONFIG_PREVENT_FIRMWARE_BUILD=y
1451 +# CONFIG_FW_LOADER is not set
1452 +# CONFIG_DEBUG_DRIVER is not set
1453 +# CONFIG_DEBUG_DEVRES is not set
1454 +# CONFIG_SYS_HYPERVISOR is not set
1457 +# Connector - unified userspace <-> kernelspace linker
1459 +# CONFIG_CONNECTOR is not set
1462 +# Memory Technology Devices (MTD)
1464 +CONFIG_MTD=y
1465 +# CONFIG_MTD_DEBUG is not set
1466 +CONFIG_MTD_CONCAT=y
1467 +CONFIG_MTD_PARTITIONS=y
1468 +# CONFIG_MTD_REDBOOT_PARTS is not set
1469 +CONFIG_MTD_CMDLINE_PARTS=y
1470 +# CONFIG_MTD_AFS_PARTS is not set
1473 +# User Modules And Translation Layers
1475 +CONFIG_MTD_CHAR=y
1476 +CONFIG_MTD_BLKDEVS=y
1477 +CONFIG_MTD_BLOCK=y
1478 +# CONFIG_FTL is not set
1479 +# CONFIG_NFTL is not set
1480 +# CONFIG_INFTL is not set
1481 +# CONFIG_RFD_FTL is not set
1482 +# CONFIG_SSFDC is not set
1485 +# RAM/ROM/Flash chip drivers
1487 +# CONFIG_MTD_CFI is not set
1488 +# CONFIG_MTD_JEDECPROBE is not set
1489 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
1490 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
1491 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
1492 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
1493 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
1494 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
1495 +CONFIG_MTD_CFI_I1=y
1496 +CONFIG_MTD_CFI_I2=y
1497 +# CONFIG_MTD_CFI_I4 is not set
1498 +# CONFIG_MTD_CFI_I8 is not set
1499 +# CONFIG_MTD_RAM is not set
1500 +# CONFIG_MTD_ROM is not set
1501 +# CONFIG_MTD_ABSENT is not set
1502 +# CONFIG_MTD_OBSOLETE_CHIPS is not set
1505 +# Mapping drivers for chip access
1507 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
1508 +# CONFIG_MTD_PLATRAM is not set
1511 +# Self-contained MTD device drivers
1513 +CONFIG_MTD_DATAFLASH=y
1514 +# CONFIG_MTD_M25P80 is not set
1515 +# CONFIG_MTD_SLRAM is not set
1516 +# CONFIG_MTD_PHRAM is not set
1517 +# CONFIG_MTD_MTDRAM is not set
1518 +# CONFIG_MTD_BLOCK2MTD is not set
1521 +# Disk-On-Chip Device Drivers
1523 +# CONFIG_MTD_DOC2000 is not set
1524 +# CONFIG_MTD_DOC2001 is not set
1525 +# CONFIG_MTD_DOC2001PLUS is not set
1528 +# NAND Flash Device Drivers
1530 +CONFIG_MTD_NAND=y
1531 +# CONFIG_MTD_NAND_VERIFY_WRITE is not set
1532 +# CONFIG_MTD_NAND_ECC_SMC is not set
1533 +CONFIG_MTD_NAND_IDS=y
1534 +# CONFIG_MTD_NAND_DISKONCHIP is not set
1535 +CONFIG_MTD_NAND_AT91=y
1536 +# CONFIG_MTD_NAND_NANDSIM is not set
1539 +# OneNAND Flash Device Drivers
1541 +# CONFIG_MTD_ONENAND is not set
1544 +# Parallel port support
1546 +# CONFIG_PARPORT is not set
1549 +# Plug and Play support
1551 +# CONFIG_PNPACPI is not set
1554 +# Block devices
1556 +# CONFIG_BLK_DEV_COW_COMMON is not set
1557 +CONFIG_BLK_DEV_LOOP=y
1558 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
1559 +# CONFIG_BLK_DEV_NBD is not set
1560 +CONFIG_BLK_DEV_RAM=y
1561 +CONFIG_BLK_DEV_RAM_COUNT=4
1562 +CONFIG_BLK_DEV_RAM_SIZE=24576
1563 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
1564 +# CONFIG_CDROM_PKTCDVD is not set
1565 +# CONFIG_ATA_OVER_ETH is not set
1568 +# SCSI device support
1570 +# CONFIG_RAID_ATTRS is not set
1571 +CONFIG_SCSI=y
1572 +# CONFIG_SCSI_TGT is not set
1573 +# CONFIG_SCSI_NETLINK is not set
1574 +CONFIG_SCSI_PROC_FS=y
1577 +# SCSI support type (disk, tape, CD-ROM)
1579 +CONFIG_BLK_DEV_SD=y
1580 +# CONFIG_CHR_DEV_ST is not set
1581 +# CONFIG_CHR_DEV_OSST is not set
1582 +# CONFIG_BLK_DEV_SR is not set
1583 +# CONFIG_CHR_DEV_SG is not set
1584 +# CONFIG_CHR_DEV_SCH is not set
1587 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
1589 +CONFIG_SCSI_MULTI_LUN=y
1590 +# CONFIG_SCSI_CONSTANTS is not set
1591 +# CONFIG_SCSI_LOGGING is not set
1592 +# CONFIG_SCSI_SCAN_ASYNC is not set
1595 +# SCSI Transports
1597 +# CONFIG_SCSI_SPI_ATTRS is not set
1598 +# CONFIG_SCSI_FC_ATTRS is not set
1599 +# CONFIG_SCSI_ISCSI_ATTRS is not set
1600 +# CONFIG_SCSI_SAS_ATTRS is not set
1601 +# CONFIG_SCSI_SAS_LIBSAS is not set
1604 +# SCSI low-level drivers
1606 +# CONFIG_SCSI_DEBUG is not set
1609 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
1611 +# CONFIG_ATA is not set
1614 +# Multi-device support (RAID and LVM)
1616 +# CONFIG_MD is not set
1619 +# Fusion MPT device support
1621 +# CONFIG_FUSION is not set
1624 +# IEEE 1394 (FireWire) support
1628 +# I2O device support
1632 +# Network device support
1634 +# CONFIG_NETDEVICES is not set
1635 +# CONFIG_NETPOLL is not set
1636 +# CONFIG_NET_POLL_CONTROLLER is not set
1639 +# ISDN subsystem
1641 +# CONFIG_ISDN is not set
1644 +# Input device support
1646 +CONFIG_INPUT=y
1647 +# CONFIG_INPUT_FF_MEMLESS is not set
1650 +# Userland interfaces
1652 +CONFIG_INPUT_MOUSEDEV=y
1653 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
1654 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
1655 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
1656 +# CONFIG_INPUT_JOYDEV is not set
1657 +# CONFIG_INPUT_TSDEV is not set
1658 +CONFIG_INPUT_EVDEV=y
1659 +# CONFIG_INPUT_EVBUG is not set
1662 +# Input Device Drivers
1664 +# CONFIG_INPUT_KEYBOARD is not set
1665 +# CONFIG_INPUT_MOUSE is not set
1666 +# CONFIG_INPUT_JOYSTICK is not set
1667 +CONFIG_INPUT_TOUCHSCREEN=y
1668 +# CONFIG_TOUCHSCREEN_ADS7846 is not set
1669 +# CONFIG_TOUCHSCREEN_GUNZE is not set
1670 +# CONFIG_TOUCHSCREEN_ELO is not set
1671 +# CONFIG_TOUCHSCREEN_MTOUCH is not set
1672 +# CONFIG_TOUCHSCREEN_MK712 is not set
1673 +# CONFIG_TOUCHSCREEN_PENMOUNT is not set
1674 +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
1675 +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
1676 +# CONFIG_TOUCHSCREEN_UCB1400 is not set
1677 +# CONFIG_INPUT_MISC is not set
1680 +# Hardware I/O ports
1682 +# CONFIG_SERIO is not set
1683 +# CONFIG_GAMEPORT is not set
1686 +# Character devices
1688 +CONFIG_VT=y
1689 +CONFIG_VT_CONSOLE=y
1690 +CONFIG_HW_CONSOLE=y
1691 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
1692 +# CONFIG_SERIAL_NONSTANDARD is not set
1695 +# Serial drivers
1697 +# CONFIG_SERIAL_8250 is not set
1700 +# Non-8250 serial port support
1702 +CONFIG_SERIAL_ATMEL=y
1703 +CONFIG_SERIAL_ATMEL_CONSOLE=y
1704 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
1705 +CONFIG_SERIAL_CORE=y
1706 +CONFIG_SERIAL_CORE_CONSOLE=y
1707 +CONFIG_UNIX98_PTYS=y
1708 +CONFIG_LEGACY_PTYS=y
1709 +CONFIG_LEGACY_PTY_COUNT=256
1712 +# IPMI
1714 +# CONFIG_IPMI_HANDLER is not set
1717 +# Watchdog Cards
1719 +CONFIG_WATCHDOG=y
1720 +CONFIG_WATCHDOG_NOWAYOUT=y
1723 +# Watchdog Device Drivers
1725 +# CONFIG_SOFT_WATCHDOG is not set
1726 +CONFIG_HW_RANDOM=y
1727 +# CONFIG_NVRAM is not set
1728 +# CONFIG_DTLK is not set
1729 +# CONFIG_R3964 is not set
1730 +# CONFIG_RAW_DRIVER is not set
1733 +# TPM devices
1735 +# CONFIG_TCG_TPM is not set
1738 +# I2C support
1740 +# CONFIG_I2C is not set
1743 +# SPI support
1745 +CONFIG_SPI=y
1746 +# CONFIG_SPI_DEBUG is not set
1747 +CONFIG_SPI_MASTER=y
1750 +# SPI Master Controller Drivers
1752 +CONFIG_SPI_ATMEL=y
1753 +# CONFIG_SPI_BITBANG is not set
1756 +# SPI Protocol Masters
1758 +# CONFIG_SPI_AT25 is not set
1761 +# Dallas's 1-wire bus
1763 +# CONFIG_W1 is not set
1766 +# Hardware Monitoring support
1768 +# CONFIG_HWMON is not set
1769 +# CONFIG_HWMON_VID is not set
1772 +# Misc devices
1776 +# Multifunction device drivers
1778 +# CONFIG_MFD_SM501 is not set
1781 +# LED devices
1783 +# CONFIG_NEW_LEDS is not set
1786 +# LED drivers
1790 +# LED Triggers
1794 +# Multimedia devices
1796 +# CONFIG_VIDEO_DEV is not set
1799 +# Digital Video Broadcasting Devices
1803 +# Graphics support
1805 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1806 +CONFIG_FB=y
1807 +# CONFIG_FIRMWARE_EDID is not set
1808 +# CONFIG_FB_DDC is not set
1809 +CONFIG_FB_CFB_FILLRECT=y
1810 +CONFIG_FB_CFB_COPYAREA=y
1811 +CONFIG_FB_CFB_IMAGEBLIT=y
1812 +# CONFIG_FB_SVGALIB is not set
1813 +# CONFIG_FB_MACMODES is not set
1814 +# CONFIG_FB_BACKLIGHT is not set
1815 +# CONFIG_FB_MODE_HELPERS is not set
1816 +# CONFIG_FB_TILEBLITTING is not set
1819 +# Frame buffer hardware drivers
1821 +# CONFIG_FB_S1D13XXX is not set
1822 +CONFIG_FB_ATMEL=y
1823 +# CONFIG_FB_VIRTUAL is not set
1826 +# Console display driver support
1828 +# CONFIG_VGA_CONSOLE is not set
1829 +CONFIG_DUMMY_CONSOLE=y
1830 +# CONFIG_FRAMEBUFFER_CONSOLE is not set
1833 +# Logo configuration
1835 +# CONFIG_LOGO is not set
1838 +# Sound
1840 +CONFIG_SOUND=y
1843 +# Advanced Linux Sound Architecture
1845 +CONFIG_SND=y
1846 +CONFIG_SND_TIMER=y
1847 +CONFIG_SND_PCM=y
1848 +CONFIG_SND_SEQUENCER=y
1849 +CONFIG_SND_SEQ_DUMMY=y
1850 +CONFIG_SND_OSSEMUL=y
1851 +CONFIG_SND_MIXER_OSS=y
1852 +CONFIG_SND_PCM_OSS=y
1853 +CONFIG_SND_PCM_OSS_PLUGINS=y
1854 +CONFIG_SND_SEQUENCER_OSS=y
1855 +# CONFIG_SND_DYNAMIC_MINORS is not set
1856 +CONFIG_SND_SUPPORT_OLD_API=y
1857 +CONFIG_SND_VERBOSE_PROCFS=y
1858 +CONFIG_SND_VERBOSE_PRINTK=y
1859 +CONFIG_SND_DEBUG=y
1860 +CONFIG_SND_DEBUG_DETECT=y
1861 +# CONFIG_SND_PCM_XRUN_DEBUG is not set
1864 +# Generic devices
1866 +# CONFIG_SND_DUMMY is not set
1867 +# CONFIG_SND_VIRMIDI is not set
1868 +# CONFIG_SND_MTPAV is not set
1869 +# CONFIG_SND_SERIAL_U16550 is not set
1870 +# CONFIG_SND_MPU401 is not set
1873 +# ALSA ARM devices
1877 +# SoC audio support
1879 +# CONFIG_SND_SOC is not set
1882 +# Open Sound System
1884 +# CONFIG_SOUND_PRIME is not set
1887 +# HID Devices
1889 +CONFIG_HID=y
1890 +# CONFIG_HID_DEBUG is not set
1893 +# USB support
1895 +CONFIG_USB_ARCH_HAS_HCD=y
1896 +CONFIG_USB_ARCH_HAS_OHCI=y
1897 +# CONFIG_USB_ARCH_HAS_EHCI is not set
1898 +# CONFIG_USB is not set
1901 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1905 +# USB Gadget Support
1907 +# CONFIG_USB_GADGET is not set
1910 +# MMC/SD Card support
1912 +CONFIG_MMC=y
1913 +# CONFIG_MMC_DEBUG is not set
1914 +CONFIG_MMC_BLOCK=y
1915 +CONFIG_MMC_AT91=y
1918 +# Real Time Clock
1920 +CONFIG_RTC_LIB=y
1921 +# CONFIG_RTC_CLASS is not set
1924 +# File systems
1926 +CONFIG_EXT2_FS=y
1927 +# CONFIG_EXT2_FS_XATTR is not set
1928 +# CONFIG_EXT2_FS_XIP is not set
1929 +# CONFIG_EXT3_FS is not set
1930 +# CONFIG_EXT4DEV_FS is not set
1931 +# CONFIG_REISERFS_FS is not set
1932 +# CONFIG_JFS_FS is not set
1933 +# CONFIG_FS_POSIX_ACL is not set
1934 +# CONFIG_XFS_FS is not set
1935 +# CONFIG_GFS2_FS is not set
1936 +# CONFIG_OCFS2_FS is not set
1937 +# CONFIG_MINIX_FS is not set
1938 +# CONFIG_ROMFS_FS is not set
1939 +CONFIG_INOTIFY=y
1940 +CONFIG_INOTIFY_USER=y
1941 +# CONFIG_QUOTA is not set
1942 +CONFIG_DNOTIFY=y
1943 +# CONFIG_AUTOFS_FS is not set
1944 +# CONFIG_AUTOFS4_FS is not set
1945 +# CONFIG_FUSE_FS is not set
1948 +# CD-ROM/DVD Filesystems
1950 +# CONFIG_ISO9660_FS is not set
1951 +# CONFIG_UDF_FS is not set
1954 +# DOS/FAT/NT Filesystems
1956 +CONFIG_FAT_FS=y
1957 +CONFIG_MSDOS_FS=y
1958 +CONFIG_VFAT_FS=y
1959 +CONFIG_FAT_DEFAULT_CODEPAGE=437
1960 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1961 +# CONFIG_NTFS_FS is not set
1964 +# Pseudo filesystems
1966 +CONFIG_PROC_FS=y
1967 +CONFIG_PROC_SYSCTL=y
1968 +CONFIG_SYSFS=y
1969 +CONFIG_TMPFS=y
1970 +# CONFIG_TMPFS_POSIX_ACL is not set
1971 +# CONFIG_HUGETLB_PAGE is not set
1972 +CONFIG_RAMFS=y
1973 +# CONFIG_CONFIGFS_FS is not set
1976 +# Miscellaneous filesystems
1978 +# CONFIG_ADFS_FS is not set
1979 +# CONFIG_AFFS_FS is not set
1980 +# CONFIG_HFS_FS is not set
1981 +# CONFIG_HFSPLUS_FS is not set
1982 +# CONFIG_BEFS_FS is not set
1983 +# CONFIG_BFS_FS is not set
1984 +# CONFIG_EFS_FS is not set
1985 +# CONFIG_JFFS2_FS is not set
1986 +CONFIG_CRAMFS=y
1987 +# CONFIG_VXFS_FS is not set
1988 +# CONFIG_HPFS_FS is not set
1989 +# CONFIG_QNX4FS_FS is not set
1990 +# CONFIG_SYSV_FS is not set
1991 +# CONFIG_UFS_FS is not set
1994 +# Network File Systems
1998 +# Partition Types
2000 +# CONFIG_PARTITION_ADVANCED is not set
2001 +CONFIG_MSDOS_PARTITION=y
2004 +# Native Language Support
2006 +CONFIG_NLS=y
2007 +CONFIG_NLS_DEFAULT="iso8859-1"
2008 +CONFIG_NLS_CODEPAGE_437=y
2009 +# CONFIG_NLS_CODEPAGE_737 is not set
2010 +# CONFIG_NLS_CODEPAGE_775 is not set
2011 +CONFIG_NLS_CODEPAGE_850=y
2012 +# CONFIG_NLS_CODEPAGE_852 is not set
2013 +# CONFIG_NLS_CODEPAGE_855 is not set
2014 +# CONFIG_NLS_CODEPAGE_857 is not set
2015 +# CONFIG_NLS_CODEPAGE_860 is not set
2016 +# CONFIG_NLS_CODEPAGE_861 is not set
2017 +# CONFIG_NLS_CODEPAGE_862 is not set
2018 +# CONFIG_NLS_CODEPAGE_863 is not set
2019 +# CONFIG_NLS_CODEPAGE_864 is not set
2020 +# CONFIG_NLS_CODEPAGE_865 is not set
2021 +# CONFIG_NLS_CODEPAGE_866 is not set
2022 +# CONFIG_NLS_CODEPAGE_869 is not set
2023 +# CONFIG_NLS_CODEPAGE_936 is not set
2024 +# CONFIG_NLS_CODEPAGE_950 is not set
2025 +# CONFIG_NLS_CODEPAGE_932 is not set
2026 +# CONFIG_NLS_CODEPAGE_949 is not set
2027 +# CONFIG_NLS_CODEPAGE_874 is not set
2028 +# CONFIG_NLS_ISO8859_8 is not set
2029 +# CONFIG_NLS_CODEPAGE_1250 is not set
2030 +# CONFIG_NLS_CODEPAGE_1251 is not set
2031 +# CONFIG_NLS_ASCII is not set
2032 +CONFIG_NLS_ISO8859_1=y
2033 +# CONFIG_NLS_ISO8859_2 is not set
2034 +# CONFIG_NLS_ISO8859_3 is not set
2035 +# CONFIG_NLS_ISO8859_4 is not set
2036 +# CONFIG_NLS_ISO8859_5 is not set
2037 +# CONFIG_NLS_ISO8859_6 is not set
2038 +# CONFIG_NLS_ISO8859_7 is not set
2039 +# CONFIG_NLS_ISO8859_9 is not set
2040 +# CONFIG_NLS_ISO8859_13 is not set
2041 +# CONFIG_NLS_ISO8859_14 is not set
2042 +CONFIG_NLS_ISO8859_15=y
2043 +# CONFIG_NLS_KOI8_R is not set
2044 +# CONFIG_NLS_KOI8_U is not set
2045 +CONFIG_NLS_UTF8=y
2048 +# Profiling support
2050 +# CONFIG_PROFILING is not set
2053 +# Kernel hacking
2055 +# CONFIG_PRINTK_TIME is not set
2056 +CONFIG_ENABLE_MUST_CHECK=y
2057 +# CONFIG_MAGIC_SYSRQ is not set
2058 +# CONFIG_UNUSED_SYMBOLS is not set
2059 +# CONFIG_DEBUG_FS is not set
2060 +# CONFIG_HEADERS_CHECK is not set
2061 +CONFIG_DEBUG_KERNEL=y
2062 +# CONFIG_DEBUG_SHIRQ is not set
2063 +CONFIG_LOG_BUF_SHIFT=14
2064 +CONFIG_DETECT_SOFTLOCKUP=y
2065 +# CONFIG_SCHEDSTATS is not set
2066 +# CONFIG_TIMER_STATS is not set
2067 +# CONFIG_DEBUG_SLAB is not set
2068 +# CONFIG_DEBUG_RT_MUTEXES is not set
2069 +# CONFIG_RT_MUTEX_TESTER is not set
2070 +# CONFIG_DEBUG_SPINLOCK is not set
2071 +# CONFIG_DEBUG_MUTEXES is not set
2072 +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
2073 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
2074 +# CONFIG_DEBUG_KOBJECT is not set
2075 +CONFIG_DEBUG_BUGVERBOSE=y
2076 +CONFIG_DEBUG_INFO=y
2077 +# CONFIG_DEBUG_VM is not set
2078 +# CONFIG_DEBUG_LIST is not set
2079 +CONFIG_FRAME_POINTER=y
2080 +CONFIG_FORCED_INLINING=y
2081 +# CONFIG_RCU_TORTURE_TEST is not set
2082 +# CONFIG_FAULT_INJECTION is not set
2083 +CONFIG_DEBUG_USER=y
2084 +# CONFIG_DEBUG_ERRORS is not set
2085 +CONFIG_DEBUG_LL=y
2086 +# CONFIG_DEBUG_ICEDCC is not set
2089 +# Security options
2091 +# CONFIG_KEYS is not set
2092 +# CONFIG_SECURITY is not set
2095 +# Cryptographic options
2097 +# CONFIG_CRYPTO is not set
2100 +# Library routines
2102 +CONFIG_BITREVERSE=y
2103 +# CONFIG_CRC_CCITT is not set
2104 +# CONFIG_CRC16 is not set
2105 +CONFIG_CRC32=y
2106 +# CONFIG_LIBCRC32C is not set
2107 +CONFIG_ZLIB_INFLATE=y
2108 +CONFIG_PLIST=y
2109 +CONFIG_HAS_IOMEM=y
2110 +CONFIG_HAS_IOPORT=y
2111 diff -urN -x CVS linux-2.6.21/arch/arm/configs/cam60_defconfig linux-2.6-stable/arch/arm/configs/cam60_defconfig
2112 --- linux-2.6.21/arch/arm/configs/cam60_defconfig Thu Jan 1 02:00:00 1970
2113 +++ linux-2.6-stable/arch/arm/configs/cam60_defconfig Tue May 8 12:13:30 2007
2114 @@ -0,0 +1,954 @@
2116 +# Automatically generated make config: don't edit
2117 +# Linux kernel version: 2.6.20
2118 +# Tue May 1 21:06:33 2007
2120 +CONFIG_ARM=y
2121 +# CONFIG_GENERIC_TIME is not set
2122 +CONFIG_MMU=y
2123 +CONFIG_GENERIC_HARDIRQS=y
2124 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
2125 +CONFIG_HARDIRQS_SW_RESEND=y
2126 +CONFIG_GENERIC_IRQ_PROBE=y
2127 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
2128 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
2129 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
2130 +CONFIG_GENERIC_HWEIGHT=y
2131 +CONFIG_GENERIC_CALIBRATE_DELAY=y
2132 +CONFIG_VECTORS_BASE=0xffff0000
2133 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
2136 +# Code maturity level options
2138 +CONFIG_EXPERIMENTAL=y
2139 +CONFIG_BROKEN_ON_SMP=y
2140 +CONFIG_INIT_ENV_ARG_LIMIT=32
2143 +# General setup
2145 +CONFIG_LOCALVERSION=""
2146 +# CONFIG_LOCALVERSION_AUTO is not set
2147 +# CONFIG_SWAP is not set
2148 +CONFIG_SYSVIPC=y
2149 +# CONFIG_IPC_NS is not set
2150 +# CONFIG_POSIX_MQUEUE is not set
2151 +# CONFIG_BSD_PROCESS_ACCT is not set
2152 +# CONFIG_TASKSTATS is not set
2153 +# CONFIG_UTS_NS is not set
2154 +# CONFIG_AUDIT is not set
2155 +CONFIG_IKCONFIG=y
2156 +CONFIG_IKCONFIG_PROC=y
2157 +CONFIG_SYSFS_DEPRECATED=y
2158 +# CONFIG_RELAY is not set
2159 +CONFIG_INITRAMFS_SOURCE=""
2160 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
2161 +CONFIG_SYSCTL=y
2162 +# CONFIG_EMBEDDED is not set
2163 +CONFIG_UID16=y
2164 +CONFIG_SYSCTL_SYSCALL=y
2165 +CONFIG_KALLSYMS=y
2166 +# CONFIG_KALLSYMS_ALL is not set
2167 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
2168 +CONFIG_HOTPLUG=y
2169 +CONFIG_PRINTK=y
2170 +CONFIG_BUG=y
2171 +CONFIG_ELF_CORE=y
2172 +CONFIG_BASE_FULL=y
2173 +CONFIG_FUTEX=y
2174 +CONFIG_EPOLL=y
2175 +CONFIG_SHMEM=y
2176 +CONFIG_SLAB=y
2177 +CONFIG_VM_EVENT_COUNTERS=y
2178 +CONFIG_RT_MUTEXES=y
2179 +# CONFIG_TINY_SHMEM is not set
2180 +CONFIG_BASE_SMALL=0
2181 +# CONFIG_SLOB is not set
2184 +# Loadable module support
2186 +CONFIG_MODULES=y
2187 +CONFIG_MODULE_UNLOAD=y
2188 +CONFIG_MODULE_FORCE_UNLOAD=y
2189 +# CONFIG_MODVERSIONS is not set
2190 +# CONFIG_MODULE_SRCVERSION_ALL is not set
2191 +# CONFIG_KMOD is not set
2194 +# Block layer
2196 +CONFIG_BLOCK=y
2197 +# CONFIG_LBD is not set
2198 +# CONFIG_BLK_DEV_IO_TRACE is not set
2199 +# CONFIG_LSF is not set
2202 +# IO Schedulers
2204 +CONFIG_IOSCHED_NOOP=y
2205 +CONFIG_IOSCHED_AS=y
2206 +# CONFIG_IOSCHED_DEADLINE is not set
2207 +# CONFIG_IOSCHED_CFQ is not set
2208 +CONFIG_DEFAULT_AS=y
2209 +# CONFIG_DEFAULT_DEADLINE is not set
2210 +# CONFIG_DEFAULT_CFQ is not set
2211 +# CONFIG_DEFAULT_NOOP is not set
2212 +CONFIG_DEFAULT_IOSCHED="anticipatory"
2215 +# System Type
2217 +# CONFIG_ARCH_AAEC2000 is not set
2218 +# CONFIG_ARCH_INTEGRATOR is not set
2219 +# CONFIG_ARCH_REALVIEW is not set
2220 +# CONFIG_ARCH_VERSATILE is not set
2221 +CONFIG_ARCH_AT91=y
2222 +# CONFIG_ARCH_CLPS7500 is not set
2223 +# CONFIG_ARCH_CLPS711X is not set
2224 +# CONFIG_ARCH_CO285 is not set
2225 +# CONFIG_ARCH_EBSA110 is not set
2226 +# CONFIG_ARCH_EP93XX is not set
2227 +# CONFIG_ARCH_FOOTBRIDGE is not set
2228 +# CONFIG_ARCH_NETX is not set
2229 +# CONFIG_ARCH_H720X is not set
2230 +# CONFIG_ARCH_IMX is not set
2231 +# CONFIG_ARCH_IOP32X is not set
2232 +# CONFIG_ARCH_IOP33X is not set
2233 +# CONFIG_ARCH_IOP13XX is not set
2234 +# CONFIG_ARCH_IXP4XX is not set
2235 +# CONFIG_ARCH_IXP2000 is not set
2236 +# CONFIG_ARCH_IXP23XX is not set
2237 +# CONFIG_ARCH_L7200 is not set
2238 +# CONFIG_ARCH_PNX4008 is not set
2239 +# CONFIG_ARCH_PXA is not set
2240 +# CONFIG_ARCH_RPC is not set
2241 +# CONFIG_ARCH_SA1100 is not set
2242 +# CONFIG_ARCH_S3C2410 is not set
2243 +# CONFIG_ARCH_SHARK is not set
2244 +# CONFIG_ARCH_LH7A40X is not set
2245 +# CONFIG_ARCH_OMAP is not set
2248 +# Atmel AT91 System-on-Chip
2250 +# CONFIG_ARCH_AT91RM9200 is not set
2251 +CONFIG_ARCH_AT91SAM9260=y
2252 +# CONFIG_ARCH_AT91SAM9261 is not set
2253 +# CONFIG_ARCH_AT91SAM9263 is not set
2256 +# AT91SAM9260 Board Type
2258 +# CONFIG_MACH_AT91SAM9260EK is not set
2259 +CONFIG_MACH_CAM60=y
2262 +# AT91 Board Options
2266 +# AT91 Feature Selections
2268 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
2271 +# Processor Type
2273 +CONFIG_CPU_32=y
2274 +CONFIG_CPU_ARM926T=y
2275 +CONFIG_CPU_32v5=y
2276 +CONFIG_CPU_ABRT_EV5TJ=y
2277 +CONFIG_CPU_CACHE_VIVT=y
2278 +CONFIG_CPU_COPY_V4WB=y
2279 +CONFIG_CPU_TLB_V4WBI=y
2280 +CONFIG_CPU_CP15=y
2281 +CONFIG_CPU_CP15_MMU=y
2284 +# Processor Features
2286 +# CONFIG_ARM_THUMB is not set
2287 +# CONFIG_CPU_ICACHE_DISABLE is not set
2288 +# CONFIG_CPU_DCACHE_DISABLE is not set
2289 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
2290 +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
2293 +# Bus support
2297 +# PCCARD (PCMCIA/CardBus) support
2299 +# CONFIG_PCCARD is not set
2302 +# Kernel Features
2304 +# CONFIG_PREEMPT is not set
2305 +# CONFIG_NO_IDLE_HZ is not set
2306 +CONFIG_HZ=100
2307 +# CONFIG_AEABI is not set
2308 +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
2309 +CONFIG_SELECT_MEMORY_MODEL=y
2310 +CONFIG_FLATMEM_MANUAL=y
2311 +# CONFIG_DISCONTIGMEM_MANUAL is not set
2312 +# CONFIG_SPARSEMEM_MANUAL is not set
2313 +CONFIG_FLATMEM=y
2314 +CONFIG_FLAT_NODE_MEM_MAP=y
2315 +# CONFIG_SPARSEMEM_STATIC is not set
2316 +CONFIG_SPLIT_PTLOCK_CPUS=4096
2317 +# CONFIG_RESOURCES_64BIT is not set
2318 +# CONFIG_LEDS is not set
2319 +CONFIG_ALIGNMENT_TRAP=y
2322 +# Boot options
2324 +CONFIG_ZBOOT_ROM_TEXT=0x22000000
2325 +CONFIG_ZBOOT_ROM_BSS=0x20004000
2326 +# CONFIG_ZBOOT_ROM is not set
2327 +CONFIG_CMDLINE="console=ttyS0,115200 noinitrd root=/dev/mtdblock3 rootfstype=jffs2 mem=64M"
2328 +# CONFIG_XIP_KERNEL is not set
2331 +# Floating point emulation
2335 +# At least one emulation must be selected
2337 +CONFIG_FPE_NWFPE=y
2338 +# CONFIG_FPE_NWFPE_XP is not set
2339 +# CONFIG_FPE_FASTFPE is not set
2340 +# CONFIG_VFP is not set
2343 +# Userspace binary formats
2345 +CONFIG_BINFMT_ELF=y
2346 +# CONFIG_BINFMT_AOUT is not set
2347 +# CONFIG_BINFMT_MISC is not set
2348 +# CONFIG_ARTHUR is not set
2351 +# Power management options
2353 +# CONFIG_PM is not set
2354 +# CONFIG_APM is not set
2357 +# Networking
2359 +CONFIG_NET=y
2362 +# Networking options
2364 +# CONFIG_NETDEBUG is not set
2365 +CONFIG_PACKET=y
2366 +# CONFIG_PACKET_MMAP is not set
2367 +CONFIG_UNIX=y
2368 +CONFIG_XFRM=y
2369 +# CONFIG_XFRM_USER is not set
2370 +# CONFIG_XFRM_SUB_POLICY is not set
2371 +# CONFIG_NET_KEY is not set
2372 +CONFIG_INET=y
2373 +# CONFIG_IP_MULTICAST is not set
2374 +# CONFIG_IP_ADVANCED_ROUTER is not set
2375 +CONFIG_IP_FIB_HASH=y
2376 +CONFIG_IP_PNP=y
2377 +# CONFIG_IP_PNP_DHCP is not set
2378 +CONFIG_IP_PNP_BOOTP=y
2379 +# CONFIG_IP_PNP_RARP is not set
2380 +# CONFIG_NET_IPIP is not set
2381 +# CONFIG_NET_IPGRE is not set
2382 +# CONFIG_ARPD is not set
2383 +# CONFIG_SYN_COOKIES is not set
2384 +# CONFIG_INET_AH is not set
2385 +# CONFIG_INET_ESP is not set
2386 +# CONFIG_INET_IPCOMP is not set
2387 +# CONFIG_INET_XFRM_TUNNEL is not set
2388 +# CONFIG_INET_TUNNEL is not set
2389 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
2390 +CONFIG_INET_XFRM_MODE_TUNNEL=y
2391 +CONFIG_INET_XFRM_MODE_BEET=y
2392 +CONFIG_INET_DIAG=y
2393 +CONFIG_INET_TCP_DIAG=y
2394 +# CONFIG_TCP_CONG_ADVANCED is not set
2395 +CONFIG_TCP_CONG_CUBIC=y
2396 +CONFIG_DEFAULT_TCP_CONG="cubic"
2397 +# CONFIG_TCP_MD5SIG is not set
2398 +# CONFIG_IPV6 is not set
2399 +# CONFIG_INET6_XFRM_TUNNEL is not set
2400 +# CONFIG_INET6_TUNNEL is not set
2401 +# CONFIG_NETWORK_SECMARK is not set
2402 +# CONFIG_NETFILTER is not set
2405 +# DCCP Configuration (EXPERIMENTAL)
2407 +# CONFIG_IP_DCCP is not set
2410 +# SCTP Configuration (EXPERIMENTAL)
2412 +# CONFIG_IP_SCTP is not set
2415 +# TIPC Configuration (EXPERIMENTAL)
2417 +# CONFIG_TIPC is not set
2418 +# CONFIG_ATM is not set
2419 +# CONFIG_BRIDGE is not set
2420 +# CONFIG_VLAN_8021Q is not set
2421 +# CONFIG_DECNET is not set
2422 +# CONFIG_LLC2 is not set
2423 +# CONFIG_IPX is not set
2424 +# CONFIG_ATALK is not set
2425 +# CONFIG_X25 is not set
2426 +# CONFIG_LAPB is not set
2427 +# CONFIG_ECONET is not set
2428 +# CONFIG_WAN_ROUTER is not set
2431 +# QoS and/or fair queueing
2433 +# CONFIG_NET_SCHED is not set
2436 +# Network testing
2438 +# CONFIG_NET_PKTGEN is not set
2439 +# CONFIG_HAMRADIO is not set
2440 +# CONFIG_IRDA is not set
2441 +# CONFIG_BT is not set
2442 +# CONFIG_IEEE80211 is not set
2445 +# Device Drivers
2449 +# Generic Driver Options
2451 +CONFIG_STANDALONE=y
2452 +CONFIG_PREVENT_FIRMWARE_BUILD=y
2453 +# CONFIG_FW_LOADER is not set
2454 +# CONFIG_DEBUG_DRIVER is not set
2455 +# CONFIG_SYS_HYPERVISOR is not set
2458 +# Connector - unified userspace <-> kernelspace linker
2460 +# CONFIG_CONNECTOR is not set
2463 +# Memory Technology Devices (MTD)
2465 +CONFIG_MTD=y
2466 +# CONFIG_MTD_DEBUG is not set
2467 +CONFIG_MTD_CONCAT=y
2468 +CONFIG_MTD_PARTITIONS=y
2469 +# CONFIG_MTD_REDBOOT_PARTS is not set
2470 +CONFIG_MTD_CMDLINE_PARTS=y
2471 +# CONFIG_MTD_AFS_PARTS is not set
2474 +# User Modules And Translation Layers
2476 +CONFIG_MTD_CHAR=y
2477 +CONFIG_MTD_BLKDEVS=y
2478 +CONFIG_MTD_BLOCK=y
2479 +# CONFIG_FTL is not set
2480 +# CONFIG_NFTL is not set
2481 +# CONFIG_INFTL is not set
2482 +# CONFIG_RFD_FTL is not set
2483 +# CONFIG_SSFDC is not set
2486 +# RAM/ROM/Flash chip drivers
2488 +CONFIG_MTD_CFI=y
2489 +# CONFIG_MTD_JEDECPROBE is not set
2490 +CONFIG_MTD_GEN_PROBE=y
2491 +# CONFIG_MTD_CFI_ADV_OPTIONS is not set
2492 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
2493 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
2494 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
2495 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
2496 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
2497 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
2498 +CONFIG_MTD_CFI_I1=y
2499 +CONFIG_MTD_CFI_I2=y
2500 +# CONFIG_MTD_CFI_I4 is not set
2501 +# CONFIG_MTD_CFI_I8 is not set
2502 +# CONFIG_MTD_CFI_INTELEXT is not set
2503 +# CONFIG_MTD_CFI_AMDSTD is not set
2504 +# CONFIG_MTD_CFI_STAA is not set
2505 +# CONFIG_MTD_RAM is not set
2506 +# CONFIG_MTD_ROM is not set
2507 +# CONFIG_MTD_ABSENT is not set
2508 +# CONFIG_MTD_OBSOLETE_CHIPS is not set
2511 +# Mapping drivers for chip access
2513 +CONFIG_MTD_COMPLEX_MAPPINGS=y
2514 +# CONFIG_MTD_PHYSMAP is not set
2515 +# CONFIG_MTD_ARM_INTEGRATOR is not set
2516 +# CONFIG_MTD_PLATRAM is not set
2519 +# Self-contained MTD device drivers
2521 +CONFIG_MTD_DATAFLASH=y
2522 +# CONFIG_MTD_M25P80 is not set
2523 +# CONFIG_MTD_SLRAM is not set
2524 +# CONFIG_MTD_PHRAM is not set
2525 +# CONFIG_MTD_MTDRAM is not set
2526 +# CONFIG_MTD_BLOCK2MTD is not set
2529 +# Disk-On-Chip Device Drivers
2531 +# CONFIG_MTD_DOC2000 is not set
2532 +# CONFIG_MTD_DOC2001 is not set
2533 +# CONFIG_MTD_DOC2001PLUS is not set
2536 +# NAND Flash Device Drivers
2538 +# CONFIG_MTD_NAND is not set
2541 +# OneNAND Flash Device Drivers
2543 +# CONFIG_MTD_ONENAND is not set
2546 +# Parallel port support
2548 +# CONFIG_PARPORT is not set
2551 +# Plug and Play support
2555 +# Block devices
2557 +# CONFIG_BLK_DEV_COW_COMMON is not set
2558 +# CONFIG_BLK_DEV_LOOP is not set
2559 +# CONFIG_BLK_DEV_NBD is not set
2560 +CONFIG_BLK_DEV_RAM=y
2561 +CONFIG_BLK_DEV_RAM_COUNT=16
2562 +CONFIG_BLK_DEV_RAM_SIZE=8192
2563 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
2564 +CONFIG_BLK_DEV_INITRD=y
2565 +# CONFIG_CDROM_PKTCDVD is not set
2566 +# CONFIG_ATA_OVER_ETH is not set
2569 +# SCSI device support
2571 +# CONFIG_RAID_ATTRS is not set
2572 +# CONFIG_SCSI is not set
2573 +# CONFIG_SCSI_NETLINK is not set
2576 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
2578 +# CONFIG_ATA is not set
2581 +# Multi-device support (RAID and LVM)
2583 +# CONFIG_MD is not set
2586 +# Fusion MPT device support
2588 +# CONFIG_FUSION is not set
2591 +# IEEE 1394 (FireWire) support
2595 +# I2O device support
2599 +# Network device support
2601 +CONFIG_NETDEVICES=y
2602 +# CONFIG_DUMMY is not set
2603 +# CONFIG_BONDING is not set
2604 +# CONFIG_EQUALIZER is not set
2605 +# CONFIG_TUN is not set
2608 +# PHY device support
2610 +# CONFIG_PHYLIB is not set
2613 +# Ethernet (10 or 100Mbit)
2615 +CONFIG_NET_ETHERNET=y
2616 +CONFIG_MII=y
2617 +CONFIG_MACB=y
2618 +# CONFIG_SMC91X is not set
2619 +# CONFIG_DM9000 is not set
2622 +# Ethernet (1000 Mbit)
2626 +# Ethernet (10000 Mbit)
2630 +# Token Ring devices
2634 +# Wireless LAN (non-hamradio)
2636 +# CONFIG_NET_RADIO is not set
2639 +# Wan interfaces
2641 +# CONFIG_WAN is not set
2642 +# CONFIG_PPP is not set
2643 +# CONFIG_SLIP is not set
2644 +# CONFIG_SHAPER is not set
2645 +# CONFIG_NETCONSOLE is not set
2646 +# CONFIG_NETPOLL is not set
2647 +# CONFIG_NET_POLL_CONTROLLER is not set
2650 +# ISDN subsystem
2652 +# CONFIG_ISDN is not set
2655 +# Input device support
2657 +CONFIG_INPUT=y
2658 +# CONFIG_INPUT_FF_MEMLESS is not set
2661 +# Userland interfaces
2663 +CONFIG_INPUT_MOUSEDEV=y
2664 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
2665 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
2666 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
2667 +# CONFIG_INPUT_JOYDEV is not set
2668 +# CONFIG_INPUT_TSDEV is not set
2669 +# CONFIG_INPUT_EVDEV is not set
2670 +# CONFIG_INPUT_EVBUG is not set
2673 +# Input Device Drivers
2675 +# CONFIG_INPUT_KEYBOARD is not set
2676 +# CONFIG_INPUT_MOUSE is not set
2677 +# CONFIG_INPUT_JOYSTICK is not set
2678 +# CONFIG_INPUT_TOUCHSCREEN is not set
2679 +# CONFIG_INPUT_MISC is not set
2682 +# Hardware I/O ports
2684 +# CONFIG_SERIO is not set
2685 +# CONFIG_GAMEPORT is not set
2688 +# Character devices
2690 +CONFIG_VT=y
2691 +CONFIG_VT_CONSOLE=y
2692 +CONFIG_HW_CONSOLE=y
2693 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
2694 +# CONFIG_SERIAL_NONSTANDARD is not set
2697 +# Serial drivers
2699 +# CONFIG_SERIAL_8250 is not set
2702 +# Non-8250 serial port support
2704 +CONFIG_SERIAL_ATMEL=y
2705 +CONFIG_SERIAL_ATMEL_CONSOLE=y
2706 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
2707 +CONFIG_SERIAL_CORE=y
2708 +CONFIG_SERIAL_CORE_CONSOLE=y
2709 +CONFIG_UNIX98_PTYS=y
2710 +CONFIG_LEGACY_PTYS=y
2711 +CONFIG_LEGACY_PTY_COUNT=256
2714 +# IPMI
2716 +# CONFIG_IPMI_HANDLER is not set
2719 +# Watchdog Cards
2721 +# CONFIG_WATCHDOG is not set
2722 +# CONFIG_HW_RANDOM is not set
2723 +# CONFIG_NVRAM is not set
2724 +# CONFIG_DTLK is not set
2725 +# CONFIG_R3964 is not set
2726 +# CONFIG_RAW_DRIVER is not set
2729 +# TPM devices
2731 +# CONFIG_TCG_TPM is not set
2734 +# I2C support
2736 +# CONFIG_I2C is not set
2739 +# SPI support
2741 +CONFIG_SPI=y
2742 +# CONFIG_SPI_DEBUG is not set
2743 +CONFIG_SPI_MASTER=y
2746 +# SPI Master Controller Drivers
2748 +CONFIG_SPI_ATMEL=y
2749 +# CONFIG_SPI_BITBANG is not set
2752 +# SPI Protocol Masters
2756 +# Dallas's 1-wire bus
2758 +# CONFIG_W1 is not set
2761 +# Hardware Monitoring support
2763 +# CONFIG_HWMON is not set
2764 +# CONFIG_HWMON_VID is not set
2767 +# Misc devices
2769 +# CONFIG_TIFM_CORE is not set
2772 +# LED devices
2774 +# CONFIG_NEW_LEDS is not set
2777 +# LED drivers
2781 +# LED Triggers
2785 +# Multimedia devices
2787 +# CONFIG_VIDEO_DEV is not set
2790 +# Digital Video Broadcasting Devices
2792 +# CONFIG_DVB is not set
2795 +# Graphics support
2797 +# CONFIG_FIRMWARE_EDID is not set
2798 +# CONFIG_FB is not set
2801 +# Console display driver support
2803 +# CONFIG_VGA_CONSOLE is not set
2804 +CONFIG_DUMMY_CONSOLE=y
2805 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
2808 +# Sound
2810 +# CONFIG_SOUND is not set
2813 +# HID Devices
2815 +# CONFIG_HID is not set
2818 +# USB support
2820 +CONFIG_USB_ARCH_HAS_HCD=y
2821 +CONFIG_USB_ARCH_HAS_OHCI=y
2822 +# CONFIG_USB_ARCH_HAS_EHCI is not set
2823 +# CONFIG_USB is not set
2826 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
2830 +# USB Gadget Support
2832 +# CONFIG_USB_GADGET is not set
2835 +# MMC/SD Card support
2837 +# CONFIG_MMC is not set
2840 +# Real Time Clock
2842 +CONFIG_RTC_LIB=y
2843 +# CONFIG_RTC_CLASS is not set
2846 +# File systems
2848 +CONFIG_EXT2_FS=y
2849 +# CONFIG_EXT2_FS_XATTR is not set
2850 +# CONFIG_EXT2_FS_XIP is not set
2851 +CONFIG_EXT3_FS=y
2852 +CONFIG_EXT3_FS_XATTR=y
2853 +# CONFIG_EXT3_FS_POSIX_ACL is not set
2854 +# CONFIG_EXT3_FS_SECURITY is not set
2855 +# CONFIG_EXT4DEV_FS is not set
2856 +CONFIG_JBD=y
2857 +# CONFIG_JBD_DEBUG is not set
2858 +CONFIG_FS_MBCACHE=y
2859 +# CONFIG_REISERFS_FS is not set
2860 +# CONFIG_JFS_FS is not set
2861 +# CONFIG_FS_POSIX_ACL is not set
2862 +# CONFIG_XFS_FS is not set
2863 +# CONFIG_GFS2_FS is not set
2864 +# CONFIG_OCFS2_FS is not set
2865 +# CONFIG_MINIX_FS is not set
2866 +# CONFIG_ROMFS_FS is not set
2867 +CONFIG_INOTIFY=y
2868 +CONFIG_INOTIFY_USER=y
2869 +# CONFIG_QUOTA is not set
2870 +CONFIG_DNOTIFY=y
2871 +# CONFIG_AUTOFS_FS is not set
2872 +CONFIG_AUTOFS4_FS=y
2873 +# CONFIG_FUSE_FS is not set
2876 +# CD-ROM/DVD Filesystems
2878 +# CONFIG_ISO9660_FS is not set
2879 +# CONFIG_UDF_FS is not set
2882 +# DOS/FAT/NT Filesystems
2884 +CONFIG_FAT_FS=y
2885 +# CONFIG_MSDOS_FS is not set
2886 +CONFIG_VFAT_FS=y
2887 +CONFIG_FAT_DEFAULT_CODEPAGE=437
2888 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2889 +# CONFIG_NTFS_FS is not set
2892 +# Pseudo filesystems
2894 +CONFIG_PROC_FS=y
2895 +CONFIG_PROC_SYSCTL=y
2896 +CONFIG_SYSFS=y
2897 +CONFIG_TMPFS=y
2898 +# CONFIG_TMPFS_POSIX_ACL is not set
2899 +# CONFIG_HUGETLB_PAGE is not set
2900 +CONFIG_RAMFS=y
2901 +# CONFIG_CONFIGFS_FS is not set
2904 +# Miscellaneous filesystems
2906 +# CONFIG_ADFS_FS is not set
2907 +# CONFIG_AFFS_FS is not set
2908 +# CONFIG_HFS_FS is not set
2909 +# CONFIG_HFSPLUS_FS is not set
2910 +# CONFIG_BEFS_FS is not set
2911 +# CONFIG_BFS_FS is not set
2912 +# CONFIG_EFS_FS is not set
2913 +CONFIG_JFFS2_FS=y
2914 +CONFIG_JFFS2_FS_DEBUG=0
2915 +CONFIG_JFFS2_FS_WRITEBUFFER=y
2916 +# CONFIG_JFFS2_SUMMARY is not set
2917 +# CONFIG_JFFS2_FS_XATTR is not set
2918 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
2919 +CONFIG_JFFS2_ZLIB=y
2920 +CONFIG_JFFS2_RTIME=y
2921 +# CONFIG_JFFS2_RUBIN is not set
2922 +CONFIG_CRAMFS=y
2923 +# CONFIG_VXFS_FS is not set
2924 +# CONFIG_HPFS_FS is not set
2925 +# CONFIG_QNX4FS_FS is not set
2926 +# CONFIG_SYSV_FS is not set
2927 +# CONFIG_UFS_FS is not set
2930 +# Network File Systems
2932 +CONFIG_NFS_FS=y
2933 +CONFIG_NFS_V3=y
2934 +# CONFIG_NFS_V3_ACL is not set
2935 +# CONFIG_NFS_V4 is not set
2936 +# CONFIG_NFS_DIRECTIO is not set
2937 +# CONFIG_NFSD is not set
2938 +CONFIG_ROOT_NFS=y
2939 +CONFIG_LOCKD=y
2940 +CONFIG_LOCKD_V4=y
2941 +CONFIG_NFS_COMMON=y
2942 +CONFIG_SUNRPC=y
2943 +# CONFIG_RPCSEC_GSS_KRB5 is not set
2944 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
2945 +# CONFIG_SMB_FS is not set
2946 +# CONFIG_CIFS is not set
2947 +# CONFIG_NCP_FS is not set
2948 +# CONFIG_CODA_FS is not set
2949 +# CONFIG_AFS_FS is not set
2950 +# CONFIG_9P_FS is not set
2953 +# Partition Types
2955 +# CONFIG_PARTITION_ADVANCED is not set
2956 +CONFIG_MSDOS_PARTITION=y
2959 +# Native Language Support
2961 +CONFIG_NLS=y
2962 +CONFIG_NLS_DEFAULT="iso8859-1"
2963 +CONFIG_NLS_CODEPAGE_437=y
2964 +# CONFIG_NLS_CODEPAGE_737 is not set
2965 +# CONFIG_NLS_CODEPAGE_775 is not set
2966 +CONFIG_NLS_CODEPAGE_850=y
2967 +# CONFIG_NLS_CODEPAGE_852 is not set
2968 +# CONFIG_NLS_CODEPAGE_855 is not set
2969 +# CONFIG_NLS_CODEPAGE_857 is not set
2970 +# CONFIG_NLS_CODEPAGE_860 is not set
2971 +# CONFIG_NLS_CODEPAGE_861 is not set
2972 +# CONFIG_NLS_CODEPAGE_862 is not set
2973 +# CONFIG_NLS_CODEPAGE_863 is not set
2974 +# CONFIG_NLS_CODEPAGE_864 is not set
2975 +# CONFIG_NLS_CODEPAGE_865 is not set
2976 +# CONFIG_NLS_CODEPAGE_866 is not set
2977 +# CONFIG_NLS_CODEPAGE_869 is not set
2978 +# CONFIG_NLS_CODEPAGE_936 is not set
2979 +# CONFIG_NLS_CODEPAGE_950 is not set
2980 +# CONFIG_NLS_CODEPAGE_932 is not set
2981 +# CONFIG_NLS_CODEPAGE_949 is not set
2982 +# CONFIG_NLS_CODEPAGE_874 is not set
2983 +# CONFIG_NLS_ISO8859_8 is not set
2984 +# CONFIG_NLS_CODEPAGE_1250 is not set
2985 +# CONFIG_NLS_CODEPAGE_1251 is not set
2986 +# CONFIG_NLS_ASCII is not set
2987 +CONFIG_NLS_ISO8859_1=y
2988 +# CONFIG_NLS_ISO8859_2 is not set
2989 +# CONFIG_NLS_ISO8859_3 is not set
2990 +# CONFIG_NLS_ISO8859_4 is not set
2991 +# CONFIG_NLS_ISO8859_5 is not set
2992 +# CONFIG_NLS_ISO8859_6 is not set
2993 +# CONFIG_NLS_ISO8859_7 is not set
2994 +# CONFIG_NLS_ISO8859_9 is not set
2995 +# CONFIG_NLS_ISO8859_13 is not set
2996 +# CONFIG_NLS_ISO8859_14 is not set
2997 +# CONFIG_NLS_ISO8859_15 is not set
2998 +# CONFIG_NLS_KOI8_R is not set
2999 +# CONFIG_NLS_KOI8_U is not set
3000 +# CONFIG_NLS_UTF8 is not set
3003 +# Distributed Lock Manager
3005 +# CONFIG_DLM is not set
3008 +# Profiling support
3010 +# CONFIG_PROFILING is not set
3013 +# Kernel hacking
3015 +# CONFIG_PRINTK_TIME is not set
3016 +CONFIG_ENABLE_MUST_CHECK=y
3017 +# CONFIG_MAGIC_SYSRQ is not set
3018 +# CONFIG_UNUSED_SYMBOLS is not set
3019 +# CONFIG_DEBUG_FS is not set
3020 +# CONFIG_HEADERS_CHECK is not set
3021 +CONFIG_DEBUG_KERNEL=y
3022 +CONFIG_LOG_BUF_SHIFT=14
3023 +CONFIG_DETECT_SOFTLOCKUP=y
3024 +# CONFIG_SCHEDSTATS is not set
3025 +# CONFIG_DEBUG_SLAB is not set
3026 +# CONFIG_DEBUG_RT_MUTEXES is not set
3027 +# CONFIG_RT_MUTEX_TESTER is not set
3028 +# CONFIG_DEBUG_SPINLOCK is not set
3029 +# CONFIG_DEBUG_MUTEXES is not set
3030 +# CONFIG_DEBUG_RWSEMS is not set
3031 +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
3032 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
3033 +# CONFIG_DEBUG_KOBJECT is not set
3034 +CONFIG_DEBUG_BUGVERBOSE=y
3035 +# CONFIG_DEBUG_INFO is not set
3036 +# CONFIG_DEBUG_VM is not set
3037 +# CONFIG_DEBUG_LIST is not set
3038 +CONFIG_FRAME_POINTER=y
3039 +CONFIG_FORCED_INLINING=y
3040 +# CONFIG_RCU_TORTURE_TEST is not set
3041 +CONFIG_DEBUG_USER=y
3042 +# CONFIG_DEBUG_ERRORS is not set
3043 +CONFIG_DEBUG_LL=y
3044 +# CONFIG_DEBUG_ICEDCC is not set
3047 +# Security options
3049 +# CONFIG_KEYS is not set
3050 +# CONFIG_SECURITY is not set
3053 +# Cryptographic options
3055 +# CONFIG_CRYPTO is not set
3058 +# Library routines
3060 +CONFIG_BITREVERSE=y
3061 +# CONFIG_CRC_CCITT is not set
3062 +# CONFIG_CRC16 is not set
3063 +CONFIG_CRC32=y
3064 +# CONFIG_LIBCRC32C is not set
3065 +CONFIG_ZLIB_INFLATE=y
3066 +CONFIG_ZLIB_DEFLATE=y
3067 +CONFIG_PLIST=y
3068 +CONFIG_IOMAP_COPY=y
3069 diff -urN -x CVS linux-2.6.21/arch/arm/configs/kb9202_defconfig linux-2.6-stable/arch/arm/configs/kb9202_defconfig
3070 --- linux-2.6.21/arch/arm/configs/kb9202_defconfig Thu Apr 26 05:08:32 2007
3071 +++ linux-2.6-stable/arch/arm/configs/kb9202_defconfig Tue May 8 12:13:30 2007
3072 @@ -1,19 +1,31 @@
3074 # Automatically generated make config: don't edit
3075 -# Linux kernel version: 2.6.13-rc2
3076 -# Sun Aug 14 19:26:59 2005
3077 +# Linux kernel version: 2.6.21
3078 +# Mon May 7 11:43:14 2007
3080 CONFIG_ARM=y
3081 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
3082 +CONFIG_GENERIC_GPIO=y
3083 +# CONFIG_GENERIC_TIME is not set
3084 CONFIG_MMU=y
3085 -CONFIG_UID16=y
3086 +# CONFIG_NO_IOPORT is not set
3087 +CONFIG_GENERIC_HARDIRQS=y
3088 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
3089 +CONFIG_HARDIRQS_SW_RESEND=y
3090 +CONFIG_GENERIC_IRQ_PROBE=y
3091 CONFIG_RWSEM_GENERIC_SPINLOCK=y
3092 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
3093 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
3094 +CONFIG_GENERIC_HWEIGHT=y
3095 CONFIG_GENERIC_CALIBRATE_DELAY=y
3096 +CONFIG_ZONE_DMA=y
3097 +CONFIG_VECTORS_BASE=0xffff0000
3098 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
3101 # Code maturity level options
3103 -# CONFIG_EXPERIMENTAL is not set
3104 -CONFIG_CLEAN_COMPILE=y
3105 +CONFIG_EXPERIMENTAL=y
3106 CONFIG_BROKEN_ON_SMP=y
3107 CONFIG_INIT_ENV_ARG_LIMIT=32
3109 @@ -21,54 +33,103 @@
3110 # General setup
3112 CONFIG_LOCALVERSION=""
3113 -# CONFIG_SWAP is not set
3114 -# CONFIG_SYSVIPC is not set
3115 -# CONFIG_BSD_PROCESS_ACCT is not set
3116 +CONFIG_LOCALVERSION_AUTO=y
3117 +CONFIG_SWAP=y
3118 +CONFIG_SYSVIPC=y
3119 +# CONFIG_IPC_NS is not set
3120 +CONFIG_SYSVIPC_SYSCTL=y
3121 +CONFIG_POSIX_MQUEUE=y
3122 +CONFIG_BSD_PROCESS_ACCT=y
3123 +# CONFIG_BSD_PROCESS_ACCT_V3 is not set
3124 +# CONFIG_TASKSTATS is not set
3125 +# CONFIG_UTS_NS is not set
3126 +CONFIG_AUDIT=y
3127 +CONFIG_IKCONFIG=y
3128 +CONFIG_IKCONFIG_PROC=y
3129 +CONFIG_SYSFS_DEPRECATED=y
3130 +# CONFIG_RELAY is not set
3131 +CONFIG_BLK_DEV_INITRD=y
3132 +CONFIG_INITRAMFS_SOURCE=""
3133 +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
3134 CONFIG_SYSCTL=y
3135 -# CONFIG_AUDIT is not set
3136 -CONFIG_HOTPLUG=y
3137 -# CONFIG_KOBJECT_UEVENT is not set
3138 -# CONFIG_IKCONFIG is not set
3139 # CONFIG_EMBEDDED is not set
3140 +CONFIG_UID16=y
3141 +CONFIG_SYSCTL_SYSCALL=y
3142 CONFIG_KALLSYMS=y
3143 # CONFIG_KALLSYMS_ALL is not set
3144 -# CONFIG_KALLSYMS_EXTRA_PASS is not set
3145 +CONFIG_KALLSYMS_EXTRA_PASS=y
3146 +CONFIG_HOTPLUG=y
3147 CONFIG_PRINTK=y
3148 CONFIG_BUG=y
3149 +CONFIG_ELF_CORE=y
3150 CONFIG_BASE_FULL=y
3151 CONFIG_FUTEX=y
3152 CONFIG_EPOLL=y
3153 -CONFIG_CC_OPTIMIZE_FOR_SIZE=y
3154 CONFIG_SHMEM=y
3155 -CONFIG_CC_ALIGN_FUNCTIONS=0
3156 -CONFIG_CC_ALIGN_LABELS=0
3157 -CONFIG_CC_ALIGN_LOOPS=0
3158 -CONFIG_CC_ALIGN_JUMPS=0
3159 +CONFIG_SLAB=y
3160 +CONFIG_VM_EVENT_COUNTERS=y
3161 +CONFIG_RT_MUTEXES=y
3162 # CONFIG_TINY_SHMEM is not set
3163 CONFIG_BASE_SMALL=0
3164 +# CONFIG_SLOB is not set
3167 # Loadable module support
3169 CONFIG_MODULES=y
3170 CONFIG_MODULE_UNLOAD=y
3171 -CONFIG_OBSOLETE_MODPARM=y
3172 -# CONFIG_MODULE_SRCVERSION_ALL is not set
3173 +# CONFIG_MODULE_FORCE_UNLOAD is not set
3174 +CONFIG_MODVERSIONS=y
3175 +CONFIG_MODULE_SRCVERSION_ALL=y
3176 CONFIG_KMOD=y
3179 +# Block layer
3181 +CONFIG_BLOCK=y
3182 +CONFIG_LBD=y
3183 +# CONFIG_BLK_DEV_IO_TRACE is not set
3184 +# CONFIG_LSF is not set
3187 +# IO Schedulers
3189 +CONFIG_IOSCHED_NOOP=y
3190 +CONFIG_IOSCHED_AS=y
3191 +CONFIG_IOSCHED_DEADLINE=y
3192 +CONFIG_IOSCHED_CFQ=y
3193 +# CONFIG_DEFAULT_AS is not set
3194 +# CONFIG_DEFAULT_DEADLINE is not set
3195 +CONFIG_DEFAULT_CFQ=y
3196 +# CONFIG_DEFAULT_NOOP is not set
3197 +CONFIG_DEFAULT_IOSCHED="cfq"
3200 # System Type
3202 +# CONFIG_ARCH_AAEC2000 is not set
3203 +# CONFIG_ARCH_INTEGRATOR is not set
3204 +# CONFIG_ARCH_REALVIEW is not set
3205 +# CONFIG_ARCH_VERSATILE is not set
3206 +CONFIG_ARCH_AT91=y
3207 # CONFIG_ARCH_CLPS7500 is not set
3208 # CONFIG_ARCH_CLPS711X is not set
3209 # CONFIG_ARCH_CO285 is not set
3210 # CONFIG_ARCH_EBSA110 is not set
3211 +# CONFIG_ARCH_EP93XX is not set
3212 # CONFIG_ARCH_FOOTBRIDGE is not set
3213 -# CONFIG_ARCH_INTEGRATOR is not set
3214 -# CONFIG_ARCH_IOP3XX is not set
3215 +# CONFIG_ARCH_NETX is not set
3216 +# CONFIG_ARCH_H720X is not set
3217 +# CONFIG_ARCH_IMX is not set
3218 +# CONFIG_ARCH_IOP32X is not set
3219 +# CONFIG_ARCH_IOP33X is not set
3220 +# CONFIG_ARCH_IOP13XX is not set
3221 # CONFIG_ARCH_IXP4XX is not set
3222 # CONFIG_ARCH_IXP2000 is not set
3223 +# CONFIG_ARCH_IXP23XX is not set
3224 # CONFIG_ARCH_L7200 is not set
3225 +# CONFIG_ARCH_NS9XXX is not set
3226 +# CONFIG_ARCH_PNX4008 is not set
3227 # CONFIG_ARCH_PXA is not set
3228 # CONFIG_ARCH_RPC is not set
3229 # CONFIG_ARCH_SA1100 is not set
3230 @@ -76,34 +137,52 @@
3231 # CONFIG_ARCH_SHARK is not set
3232 # CONFIG_ARCH_LH7A40X is not set
3233 # CONFIG_ARCH_OMAP is not set
3234 -# CONFIG_ARCH_VERSATILE is not set
3235 -# CONFIG_ARCH_IMX is not set
3236 -# CONFIG_ARCH_H720X is not set
3237 -# CONFIG_ARCH_AAEC2000 is not set
3238 -CONFIG_ARCH_AT91=y
3241 +# Atmel AT91 System-on-Chip
3243 CONFIG_ARCH_AT91RM9200=y
3244 +# CONFIG_ARCH_AT91SAM9260 is not set
3245 +# CONFIG_ARCH_AT91SAM9261 is not set
3246 +# CONFIG_ARCH_AT91SAM9263 is not set
3249 -# AT91RM9200 Implementations
3250 +# AT91RM9200 Board Type
3252 +# CONFIG_MACH_ONEARM is not set
3253 # CONFIG_ARCH_AT91RM9200DK is not set
3254 # CONFIG_MACH_AT91RM9200EK is not set
3255 # CONFIG_MACH_CSB337 is not set
3256 # CONFIG_MACH_CSB637 is not set
3257 # CONFIG_MACH_CARMEVA is not set
3258 +# CONFIG_MACH_ATEB9200 is not set
3259 CONFIG_MACH_KB9200=y
3260 +# CONFIG_MACH_KAFA is not set
3261 +# CONFIG_MACH_CHUB is not set
3264 +# AT91 Board Options
3268 +# AT91 Feature Selections
3270 +# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
3271 +# CONFIG_ATMEL_TCLIB is not set
3274 # Processor Type
3276 CONFIG_CPU_32=y
3277 CONFIG_CPU_ARM920T=y
3278 -CONFIG_CPU_32v4=y
3279 +CONFIG_CPU_32v4T=y
3280 CONFIG_CPU_ABRT_EV4T=y
3281 CONFIG_CPU_CACHE_V4WT=y
3282 CONFIG_CPU_CACHE_VIVT=y
3283 CONFIG_CPU_COPY_V4WB=y
3284 CONFIG_CPU_TLB_V4WBI=y
3285 +CONFIG_CPU_CP15=y
3286 +CONFIG_CPU_CP15_MMU=y
3289 # Processor Features
3290 @@ -112,24 +191,44 @@
3291 # CONFIG_CPU_ICACHE_DISABLE is not set
3292 # CONFIG_CPU_DCACHE_DISABLE is not set
3293 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
3294 +# CONFIG_OUTER_CACHE is not set
3297 # Bus support
3299 -CONFIG_ISA_DMA_API=y
3302 # PCCARD (PCMCIA/CardBus) support
3304 -# CONFIG_PCCARD is not set
3305 +CONFIG_PCCARD=m
3306 +# CONFIG_PCMCIA_DEBUG is not set
3307 +CONFIG_PCMCIA=m
3308 +CONFIG_PCMCIA_LOAD_CIS=y
3309 +CONFIG_PCMCIA_IOCTL=y
3312 +# PC-card bridges
3314 +# CONFIG_AT91_CF is not set
3317 # Kernel Features
3319 +# CONFIG_PREEMPT is not set
3320 # CONFIG_NO_IDLE_HZ is not set
3321 +CONFIG_HZ=100
3322 +# CONFIG_AEABI is not set
3323 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
3324 +CONFIG_SELECT_MEMORY_MODEL=y
3325 +CONFIG_FLATMEM_MANUAL=y
3326 +# CONFIG_DISCONTIGMEM_MANUAL is not set
3327 +# CONFIG_SPARSEMEM_MANUAL is not set
3328 CONFIG_FLATMEM=y
3329 CONFIG_FLAT_NODE_MEM_MAP=y
3330 +# CONFIG_SPARSEMEM_STATIC is not set
3331 +CONFIG_SPLIT_PTLOCK_CPUS=4096
3332 +# CONFIG_RESOURCES_64BIT is not set
3333 +CONFIG_ZONE_DMA_FLAG=1
3334 # CONFIG_LEDS is not set
3335 CONFIG_ALIGNMENT_TRAP=y
3337 @@ -138,8 +237,10 @@
3339 CONFIG_ZBOOT_ROM_TEXT=0x10000000
3340 CONFIG_ZBOOT_ROM_BSS=0x20040000
3341 -CONFIG_ZBOOT_ROM=y
3342 -CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
3343 +# CONFIG_ZBOOT_ROM is not set
3344 +CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M"
3345 +# CONFIG_XIP_KERNEL is not set
3346 +# CONFIG_KEXEC is not set
3349 # Floating point emulation
3350 @@ -150,6 +251,7 @@
3352 CONFIG_FPE_NWFPE=y
3353 # CONFIG_FPE_NWFPE_XP is not set
3354 +# CONFIG_FPE_FASTFPE is not set
3357 # Userspace binary formats
3358 @@ -165,6 +267,96 @@
3359 # CONFIG_PM is not set
3362 +# Networking
3364 +CONFIG_NET=y
3367 +# Networking options
3369 +# CONFIG_NETDEBUG is not set
3370 +CONFIG_PACKET=y
3371 +# CONFIG_PACKET_MMAP is not set
3372 +CONFIG_UNIX=y
3373 +# CONFIG_NET_KEY is not set
3374 +CONFIG_INET=y
3375 +CONFIG_IP_MULTICAST=y
3376 +# CONFIG_IP_ADVANCED_ROUTER is not set
3377 +CONFIG_IP_FIB_HASH=y
3378 +CONFIG_IP_PNP=y
3379 +# CONFIG_IP_PNP_DHCP is not set
3380 +# CONFIG_IP_PNP_BOOTP is not set
3381 +# CONFIG_IP_PNP_RARP is not set
3382 +# CONFIG_NET_IPIP is not set
3383 +# CONFIG_NET_IPGRE is not set
3384 +# CONFIG_IP_MROUTE is not set
3385 +# CONFIG_ARPD is not set
3386 +# CONFIG_SYN_COOKIES is not set
3387 +# CONFIG_INET_AH is not set
3388 +# CONFIG_INET_ESP is not set
3389 +# CONFIG_INET_IPCOMP is not set
3390 +# CONFIG_INET_XFRM_TUNNEL is not set
3391 +# CONFIG_INET_TUNNEL is not set
3392 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
3393 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
3394 +# CONFIG_INET_XFRM_MODE_BEET is not set
3395 +# CONFIG_INET_DIAG is not set
3396 +# CONFIG_TCP_CONG_ADVANCED is not set
3397 +CONFIG_TCP_CONG_CUBIC=y
3398 +CONFIG_DEFAULT_TCP_CONG="cubic"
3399 +# CONFIG_TCP_MD5SIG is not set
3400 +# CONFIG_IPV6 is not set
3401 +# CONFIG_INET6_XFRM_TUNNEL is not set
3402 +# CONFIG_INET6_TUNNEL is not set
3403 +# CONFIG_NETWORK_SECMARK is not set
3404 +# CONFIG_NETFILTER is not set
3407 +# DCCP Configuration (EXPERIMENTAL)
3409 +# CONFIG_IP_DCCP is not set
3412 +# SCTP Configuration (EXPERIMENTAL)
3414 +CONFIG_IP_SCTP=m
3415 +# CONFIG_SCTP_DBG_MSG is not set
3416 +# CONFIG_SCTP_DBG_OBJCNT is not set
3417 +# CONFIG_SCTP_HMAC_NONE is not set
3418 +# CONFIG_SCTP_HMAC_SHA1 is not set
3419 +CONFIG_SCTP_HMAC_MD5=y
3422 +# TIPC Configuration (EXPERIMENTAL)
3424 +# CONFIG_TIPC is not set
3425 +# CONFIG_ATM is not set
3426 +# CONFIG_BRIDGE is not set
3427 +# CONFIG_VLAN_8021Q is not set
3428 +# CONFIG_DECNET is not set
3429 +# CONFIG_LLC2 is not set
3430 +# CONFIG_IPX is not set
3431 +# CONFIG_ATALK is not set
3432 +# CONFIG_X25 is not set
3433 +# CONFIG_LAPB is not set
3434 +# CONFIG_ECONET is not set
3435 +# CONFIG_WAN_ROUTER is not set
3438 +# QoS and/or fair queueing
3440 +# CONFIG_NET_SCHED is not set
3443 +# Network testing
3445 +# CONFIG_NET_PKTGEN is not set
3446 +# CONFIG_HAMRADIO is not set
3447 +# CONFIG_IRDA is not set
3448 +# CONFIG_BT is not set
3449 +# CONFIG_IEEE80211 is not set
3452 # Device Drivers
3455 @@ -173,13 +365,95 @@
3457 CONFIG_STANDALONE=y
3458 CONFIG_PREVENT_FIRMWARE_BUILD=y
3459 -# CONFIG_FW_LOADER is not set
3460 -CONFIG_DEBUG_DRIVER=y
3461 +CONFIG_FW_LOADER=y
3462 +# CONFIG_DEBUG_DRIVER is not set
3463 +# CONFIG_DEBUG_DEVRES is not set
3464 +# CONFIG_SYS_HYPERVISOR is not set
3467 +# Connector - unified userspace <-> kernelspace linker
3469 +# CONFIG_CONNECTOR is not set
3472 # Memory Technology Devices (MTD)
3474 -# CONFIG_MTD is not set
3475 +CONFIG_MTD=y
3476 +# CONFIG_MTD_DEBUG is not set
3477 +CONFIG_MTD_CONCAT=y
3478 +CONFIG_MTD_PARTITIONS=y
3479 +# CONFIG_MTD_REDBOOT_PARTS is not set
3480 +CONFIG_MTD_CMDLINE_PARTS=y
3481 +# CONFIG_MTD_AFS_PARTS is not set
3484 +# User Modules And Translation Layers
3486 +CONFIG_MTD_CHAR=y
3487 +CONFIG_MTD_BLKDEVS=y
3488 +CONFIG_MTD_BLOCK=y
3489 +# CONFIG_FTL is not set
3490 +# CONFIG_NFTL is not set
3491 +# CONFIG_INFTL is not set
3492 +# CONFIG_RFD_FTL is not set
3493 +# CONFIG_SSFDC is not set
3496 +# RAM/ROM/Flash chip drivers
3498 +# CONFIG_MTD_CFI is not set
3499 +# CONFIG_MTD_JEDECPROBE is not set
3500 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
3501 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
3502 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
3503 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
3504 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
3505 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
3506 +CONFIG_MTD_CFI_I1=y
3507 +CONFIG_MTD_CFI_I2=y
3508 +# CONFIG_MTD_CFI_I4 is not set
3509 +# CONFIG_MTD_CFI_I8 is not set
3510 +# CONFIG_MTD_RAM is not set
3511 +# CONFIG_MTD_ROM is not set
3512 +# CONFIG_MTD_ABSENT is not set
3513 +# CONFIG_MTD_OBSOLETE_CHIPS is not set
3516 +# Mapping drivers for chip access
3518 +CONFIG_MTD_COMPLEX_MAPPINGS=y
3519 +# CONFIG_MTD_PLATRAM is not set
3522 +# Self-contained MTD device drivers
3524 +# CONFIG_MTD_SLRAM is not set
3525 +# CONFIG_MTD_PHRAM is not set
3526 +# CONFIG_MTD_MTDRAM is not set
3527 +# CONFIG_MTD_BLOCK2MTD is not set
3530 +# Disk-On-Chip Device Drivers
3532 +# CONFIG_MTD_DOC2000 is not set
3533 +# CONFIG_MTD_DOC2001 is not set
3534 +# CONFIG_MTD_DOC2001PLUS is not set
3537 +# NAND Flash Device Drivers
3539 +CONFIG_MTD_NAND=y
3540 +# CONFIG_MTD_NAND_VERIFY_WRITE is not set
3541 +# CONFIG_MTD_NAND_ECC_SMC is not set
3542 +CONFIG_MTD_NAND_IDS=y
3543 +# CONFIG_MTD_NAND_DISKONCHIP is not set
3544 +CONFIG_MTD_NAND_AT91=y
3545 +# CONFIG_MTD_NAND_NANDSIM is not set
3548 +# OneNAND Flash Device Drivers
3550 +# CONFIG_MTD_ONENAND is not set
3553 # Parallel port support
3554 @@ -189,6 +463,7 @@
3556 # Plug and Play support
3558 +# CONFIG_PNPACPI is not set
3561 # Block devices
3562 @@ -196,28 +471,27 @@
3563 # CONFIG_BLK_DEV_COW_COMMON is not set
3564 CONFIG_BLK_DEV_LOOP=y
3565 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
3566 -CONFIG_BLK_DEV_NBD=y
3567 +# CONFIG_BLK_DEV_NBD is not set
3568 # CONFIG_BLK_DEV_UB is not set
3569 CONFIG_BLK_DEV_RAM=y
3570 CONFIG_BLK_DEV_RAM_COUNT=16
3571 -CONFIG_BLK_DEV_RAM_SIZE=4096
3572 -CONFIG_BLK_DEV_INITRD=y
3573 -CONFIG_INITRAMFS_SOURCE=""
3574 +CONFIG_BLK_DEV_RAM_SIZE=16384
3575 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
3576 # CONFIG_CDROM_PKTCDVD is not set
3577 +# CONFIG_ATA_OVER_ETH is not set
3580 -# IO Schedulers
3581 +# ATA/ATAPI/MFM/RLL support
3583 -CONFIG_IOSCHED_NOOP=y
3584 -CONFIG_IOSCHED_AS=y
3585 -CONFIG_IOSCHED_DEADLINE=y
3586 -CONFIG_IOSCHED_CFQ=y
3587 -# CONFIG_ATA_OVER_ETH is not set
3588 +# CONFIG_IDE is not set
3591 # SCSI device support
3593 +# CONFIG_RAID_ATTRS is not set
3594 CONFIG_SCSI=y
3595 +# CONFIG_SCSI_TGT is not set
3596 +# CONFIG_SCSI_NETLINK is not set
3597 CONFIG_SCSI_PROC_FS=y
3600 @@ -233,97 +507,61 @@
3602 # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
3604 -# CONFIG_SCSI_MULTI_LUN is not set
3605 -# CONFIG_SCSI_CONSTANTS is not set
3606 -# CONFIG_SCSI_LOGGING is not set
3607 +CONFIG_SCSI_MULTI_LUN=y
3608 +CONFIG_SCSI_CONSTANTS=y
3609 +CONFIG_SCSI_LOGGING=y
3610 +# CONFIG_SCSI_SCAN_ASYNC is not set
3613 -# SCSI Transport Attributes
3614 +# SCSI Transports
3616 -# CONFIG_SCSI_SPI_ATTRS is not set
3617 +CONFIG_SCSI_SPI_ATTRS=m
3618 # CONFIG_SCSI_FC_ATTRS is not set
3619 # CONFIG_SCSI_ISCSI_ATTRS is not set
3620 +# CONFIG_SCSI_SAS_ATTRS is not set
3621 +# CONFIG_SCSI_SAS_LIBSAS is not set
3624 # SCSI low-level drivers
3626 -# CONFIG_SCSI_SATA is not set
3627 +# CONFIG_ISCSI_TCP is not set
3628 # CONFIG_SCSI_DEBUG is not set
3631 -# Multi-device support (RAID and LVM)
3633 -# CONFIG_MD is not set
3636 -# Fusion MPT device support
3637 +# PCMCIA SCSI adapter support
3639 -# CONFIG_FUSION is not set
3640 +# CONFIG_PCMCIA_AHA152X is not set
3641 +# CONFIG_PCMCIA_FDOMAIN is not set
3642 +# CONFIG_PCMCIA_NINJA_SCSI is not set
3643 +# CONFIG_PCMCIA_QLOGIC is not set
3644 +# CONFIG_PCMCIA_SYM53C500 is not set
3647 -# IEEE 1394 (FireWire) support
3648 +# Serial ATA (prod) and Parallel ATA (experimental) drivers
3650 +# CONFIG_ATA is not set
3653 -# I2O device support
3654 +# Multi-device support (RAID and LVM)
3656 +# CONFIG_MD is not set
3659 -# Networking support
3660 +# Fusion MPT device support
3662 -CONFIG_NET=y
3663 +# CONFIG_FUSION is not set
3666 -# Networking options
3667 +# IEEE 1394 (FireWire) support
3669 -CONFIG_PACKET=y
3670 -# CONFIG_PACKET_MMAP is not set
3671 -CONFIG_UNIX=y
3672 -# CONFIG_NET_KEY is not set
3673 -CONFIG_INET=y
3674 -CONFIG_IP_MULTICAST=y
3675 -# CONFIG_IP_ADVANCED_ROUTER is not set
3676 -CONFIG_IP_FIB_HASH=y
3677 -CONFIG_IP_PNP=y
3678 -CONFIG_IP_PNP_DHCP=y
3679 -# CONFIG_IP_PNP_BOOTP is not set
3680 -# CONFIG_IP_PNP_RARP is not set
3681 -# CONFIG_NET_IPIP is not set
3682 -# CONFIG_NET_IPGRE is not set
3683 -# CONFIG_IP_MROUTE is not set
3684 -# CONFIG_SYN_COOKIES is not set
3685 -# CONFIG_INET_AH is not set
3686 -# CONFIG_INET_ESP is not set
3687 -# CONFIG_INET_IPCOMP is not set
3688 -# CONFIG_INET_TUNNEL is not set
3689 -# CONFIG_IP_TCPDIAG is not set
3690 -# CONFIG_IP_TCPDIAG_IPV6 is not set
3691 -# CONFIG_TCP_CONG_ADVANCED is not set
3692 -CONFIG_TCP_CONG_BIC=y
3693 -# CONFIG_IPV6 is not set
3694 -# CONFIG_NETFILTER is not set
3695 -# CONFIG_BRIDGE is not set
3696 -# CONFIG_VLAN_8021Q is not set
3697 -# CONFIG_DECNET is not set
3698 -# CONFIG_LLC2 is not set
3699 -# CONFIG_IPX is not set
3700 -# CONFIG_ATALK is not set
3703 -# QoS and/or fair queueing
3704 +# I2O device support
3706 -# CONFIG_NET_SCHED is not set
3707 -# CONFIG_NET_CLS_ROUTE is not set
3710 -# Network testing
3711 +# Network device support
3713 -# CONFIG_NET_PKTGEN is not set
3714 -# CONFIG_NETPOLL is not set
3715 -# CONFIG_NET_POLL_CONTROLLER is not set
3716 -# CONFIG_HAMRADIO is not set
3717 -# CONFIG_IRDA is not set
3718 -# CONFIG_BT is not set
3719 CONFIG_NETDEVICES=y
3720 # CONFIG_DUMMY is not set
3721 # CONFIG_BONDING is not set
3722 @@ -331,6 +569,11 @@
3723 # CONFIG_TUN is not set
3726 +# PHY device support
3728 +# CONFIG_PHYLIB is not set
3731 # Ethernet (10 or 100Mbit)
3733 CONFIG_NET_ETHERNET=y
3734 @@ -357,11 +600,20 @@
3735 # CONFIG_NET_RADIO is not set
3738 +# PCMCIA network device support
3740 +# CONFIG_NET_PCMCIA is not set
3743 # Wan interfaces
3745 # CONFIG_WAN is not set
3746 # CONFIG_PPP is not set
3747 # CONFIG_SLIP is not set
3748 +# CONFIG_SHAPER is not set
3749 +# CONFIG_NETCONSOLE is not set
3750 +# CONFIG_NETPOLL is not set
3751 +# CONFIG_NET_POLL_CONTROLLER is not set
3754 # ISDN subsystem
3755 @@ -372,6 +624,7 @@
3756 # Input device support
3758 CONFIG_INPUT=y
3759 +# CONFIG_INPUT_FF_MEMLESS is not set
3762 # Userland interfaces
3763 @@ -397,9 +650,7 @@
3765 # Hardware I/O ports
3767 -CONFIG_SERIO=y
3768 -# CONFIG_SERIO_SERPORT is not set
3769 -# CONFIG_SERIO_RAW is not set
3770 +# CONFIG_SERIO is not set
3771 # CONFIG_GAMEPORT is not set
3774 @@ -408,6 +659,7 @@
3775 CONFIG_VT=y
3776 CONFIG_VT_CONSOLE=y
3777 CONFIG_HW_CONSOLE=y
3778 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
3779 # CONFIG_SERIAL_NONSTANDARD is not set
3782 @@ -420,11 +672,11 @@
3784 CONFIG_SERIAL_ATMEL=y
3785 CONFIG_SERIAL_ATMEL_CONSOLE=y
3786 +# CONFIG_SERIAL_ATMEL_TTYAT is not set
3787 CONFIG_SERIAL_CORE=y
3788 CONFIG_SERIAL_CORE_CONSOLE=y
3789 CONFIG_UNIX98_PTYS=y
3790 -CONFIG_LEGACY_PTYS=y
3791 -CONFIG_LEGACY_PTY_COUNT=256
3792 +# CONFIG_LEGACY_PTYS is not set
3795 # IPMI
3796 @@ -435,21 +687,23 @@
3797 # Watchdog Cards
3799 # CONFIG_WATCHDOG is not set
3800 +# CONFIG_HW_RANDOM is not set
3801 # CONFIG_NVRAM is not set
3802 -# CONFIG_RTC is not set
3803 -# CONFIG_AT91RM9200_RTC is not set
3804 # CONFIG_DTLK is not set
3805 # CONFIG_R3964 is not set
3808 -# Ftape, the floppy tape device driver
3809 +# PCMCIA character devices
3811 +# CONFIG_SYNCLINK_CS is not set
3812 +# CONFIG_CARDMAN_4000 is not set
3813 +# CONFIG_CARDMAN_4040 is not set
3814 # CONFIG_RAW_DRIVER is not set
3817 # TPM devices
3819 -# CONFIG_AT91_SPI is not set
3820 +# CONFIG_TCG_TPM is not set
3823 # I2C support
3824 @@ -457,10 +711,50 @@
3825 # CONFIG_I2C is not set
3828 +# SPI support
3830 +# CONFIG_SPI is not set
3831 +# CONFIG_SPI_MASTER is not set
3834 +# Dallas's 1-wire bus
3836 +# CONFIG_W1 is not set
3839 +# Hardware Monitoring support
3841 +CONFIG_HWMON=y
3842 +# CONFIG_HWMON_VID is not set
3843 +# CONFIG_SENSORS_ABITUGURU is not set
3844 +# CONFIG_SENSORS_F71805F is not set
3845 +# CONFIG_SENSORS_PC87427 is not set
3846 +# CONFIG_SENSORS_VT1211 is not set
3847 +CONFIG_HWMON_DEBUG_CHIP=y
3850 # Misc devices
3854 +# Multifunction device drivers
3856 +# CONFIG_MFD_SM501 is not set
3859 +# LED devices
3861 +# CONFIG_NEW_LEDS is not set
3864 +# LED drivers
3868 +# LED Triggers
3872 # Multimedia devices
3874 # CONFIG_VIDEO_DEV is not set
3875 @@ -469,17 +763,57 @@
3876 # Digital Video Broadcasting Devices
3878 # CONFIG_DVB is not set
3879 +# CONFIG_USB_DABUSB is not set
3882 # Graphics support
3884 -# CONFIG_FB is not set
3885 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
3886 +CONFIG_BACKLIGHT_CLASS_DEVICE=y
3887 +# CONFIG_LCD_CLASS_DEVICE is not set
3888 +CONFIG_BACKLIGHT_KB920x=y
3889 +CONFIG_FB=y
3890 +# CONFIG_FIRMWARE_EDID is not set
3891 +# CONFIG_FB_DDC is not set
3892 +CONFIG_FB_CFB_FILLRECT=y
3893 +CONFIG_FB_CFB_COPYAREA=y
3894 +CONFIG_FB_CFB_IMAGEBLIT=y
3895 +# CONFIG_FB_SVGALIB is not set
3896 +# CONFIG_FB_MACMODES is not set
3897 +# CONFIG_FB_BACKLIGHT is not set
3898 +CONFIG_FB_MODE_HELPERS=y
3899 +CONFIG_FB_TILEBLITTING=y
3902 +# Frame buffer hardware drivers
3904 +CONFIG_FB_S1D15605=y
3905 +# CONFIG_FB_S1D13XXX is not set
3906 +# CONFIG_FB_VIRTUAL is not set
3909 # Console display driver support
3911 # CONFIG_VGA_CONSOLE is not set
3912 CONFIG_DUMMY_CONSOLE=y
3913 +CONFIG_FRAMEBUFFER_CONSOLE=y
3914 +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
3915 +CONFIG_FONTS=y
3916 +# CONFIG_FONT_8x8 is not set
3917 +# CONFIG_FONT_8x16 is not set
3918 +# CONFIG_FONT_6x11 is not set
3919 +# CONFIG_FONT_7x14 is not set
3920 +# CONFIG_FONT_PEARL_8x8 is not set
3921 +# CONFIG_FONT_ACORN_8x8 is not set
3922 +CONFIG_FONT_MINI_4x6=y
3923 +# CONFIG_FONT_SUN8x16 is not set
3924 +# CONFIG_FONT_SUN12x22 is not set
3925 +# CONFIG_FONT_10x18 is not set
3928 +# Logo configuration
3930 +# CONFIG_LOGO is not set
3933 # Sound
3934 @@ -487,82 +821,98 @@
3935 # CONFIG_SOUND is not set
3938 +# HID Devices
3940 +CONFIG_HID=y
3941 +# CONFIG_HID_DEBUG is not set
3944 # USB support
3946 CONFIG_USB_ARCH_HAS_HCD=y
3947 CONFIG_USB_ARCH_HAS_OHCI=y
3948 +# CONFIG_USB_ARCH_HAS_EHCI is not set
3949 CONFIG_USB=y
3950 -CONFIG_USB_DEBUG=y
3951 +# CONFIG_USB_DEBUG is not set
3954 # Miscellaneous USB options
3956 CONFIG_USB_DEVICEFS=y
3957 +# CONFIG_USB_DYNAMIC_MINORS is not set
3958 +# CONFIG_USB_OTG is not set
3961 # USB Host Controller Drivers
3963 # CONFIG_USB_ISP116X_HCD is not set
3964 CONFIG_USB_OHCI_HCD=y
3965 -# CONFIG_USB_OHCI_BIG_ENDIAN is not set
3966 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
3967 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
3968 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
3969 # CONFIG_USB_SL811_HCD is not set
3972 # USB Device Class drivers
3974 -# CONFIG_USB_BLUETOOTH_TTY is not set
3975 # CONFIG_USB_ACM is not set
3976 # CONFIG_USB_PRINTER is not set
3979 -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
3980 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
3984 +# may also be needed; see USB_STORAGE Help for more information
3986 CONFIG_USB_STORAGE=y
3987 -CONFIG_USB_STORAGE_DEBUG=y
3988 +# CONFIG_USB_STORAGE_DEBUG is not set
3989 +# CONFIG_USB_STORAGE_DATAFAB is not set
3990 # CONFIG_USB_STORAGE_FREECOM is not set
3991 # CONFIG_USB_STORAGE_DPCM is not set
3992 +# CONFIG_USB_STORAGE_USBAT is not set
3993 +# CONFIG_USB_STORAGE_SDDR09 is not set
3994 +# CONFIG_USB_STORAGE_SDDR55 is not set
3995 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
3996 +# CONFIG_USB_STORAGE_ALAUDA is not set
3997 +# CONFIG_USB_STORAGE_KARMA is not set
3998 +CONFIG_USB_LIBUSUAL=y
4001 # USB Input Devices
4003 -# CONFIG_USB_HID is not set
4006 -# USB HID Boot Protocol drivers
4008 -# CONFIG_USB_KBD is not set
4009 -# CONFIG_USB_MOUSE is not set
4010 +CONFIG_USB_HID=y
4011 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
4012 +# CONFIG_HID_FF is not set
4013 +# CONFIG_USB_HIDDEV is not set
4014 # CONFIG_USB_AIPTEK is not set
4015 # CONFIG_USB_WACOM is not set
4016 # CONFIG_USB_ACECAD is not set
4017 # CONFIG_USB_KBTAB is not set
4018 # CONFIG_USB_POWERMATE is not set
4019 -# CONFIG_USB_MTOUCH is not set
4020 -# CONFIG_USB_ITMTOUCH is not set
4021 -# CONFIG_USB_EGALAX is not set
4022 +# CONFIG_USB_TOUCHSCREEN is not set
4023 +# CONFIG_USB_YEALINK is not set
4024 # CONFIG_USB_XPAD is not set
4025 # CONFIG_USB_ATI_REMOTE is not set
4026 +# CONFIG_USB_ATI_REMOTE2 is not set
4027 +# CONFIG_USB_KEYSPAN_REMOTE is not set
4028 +# CONFIG_USB_APPLETOUCH is not set
4029 +# CONFIG_USB_GTCO is not set
4032 # USB Imaging devices
4034 +# CONFIG_USB_MDC800 is not set
4035 # CONFIG_USB_MICROTEK is not set
4038 -# USB Multimedia devices
4040 -# CONFIG_USB_DABUSB is not set
4043 -# Video4Linux support is needed for USB Multimedia device support
4047 # USB Network Adapters
4049 +# CONFIG_USB_CATC is not set
4050 # CONFIG_USB_KAWETH is not set
4051 # CONFIG_USB_PEGASUS is not set
4052 +# CONFIG_USB_RTL8150 is not set
4053 +# CONFIG_USB_USBNET_MII is not set
4054 # CONFIG_USB_USBNET is not set
4055 # CONFIG_USB_MON is not set
4057 @@ -580,12 +930,23 @@
4059 # CONFIG_USB_EMI62 is not set
4060 # CONFIG_USB_EMI26 is not set
4061 +# CONFIG_USB_ADUTUX is not set
4062 +# CONFIG_USB_AUERSWALD is not set
4063 +# CONFIG_USB_RIO500 is not set
4064 +# CONFIG_USB_LEGOTOWER is not set
4065 # CONFIG_USB_LCD is not set
4066 +# CONFIG_USB_BERRY_CHARGE is not set
4067 # CONFIG_USB_LED is not set
4068 +# CONFIG_USB_CYPRESS_CY7C63 is not set
4069 # CONFIG_USB_CYTHERM is not set
4070 -# CONFIG_USB_PHIDGETKIT is not set
4071 -# CONFIG_USB_PHIDGETSERVO is not set
4072 +# CONFIG_USB_PHIDGET is not set
4073 # CONFIG_USB_IDMOUSE is not set
4074 +# CONFIG_USB_FTDI_ELAN is not set
4075 +# CONFIG_USB_APPLEDISPLAY is not set
4076 +# CONFIG_USB_LD is not set
4077 +# CONFIG_USB_TRANCEVIBRATOR is not set
4078 +# CONFIG_USB_IOWARRIOR is not set
4079 +# CONFIG_USB_TEST is not set
4082 # USB DSL modem support
4083 @@ -599,36 +960,51 @@
4085 # MMC/SD Card support
4087 -# CONFIG_MMC is not set
4088 +CONFIG_MMC=y
4089 +# CONFIG_MMC_DEBUG is not set
4090 +CONFIG_MMC_BLOCK=y
4091 +CONFIG_MMC_AT91=y
4094 +# Real Time Clock
4096 +CONFIG_RTC_LIB=y
4097 +# CONFIG_RTC_CLASS is not set
4100 # File systems
4102 CONFIG_EXT2_FS=y
4103 CONFIG_EXT2_FS_XATTR=y
4104 -# CONFIG_EXT2_FS_POSIX_ACL is not set
4105 -# CONFIG_EXT2_FS_SECURITY is not set
4106 +CONFIG_EXT2_FS_POSIX_ACL=y
4107 +CONFIG_EXT2_FS_SECURITY=y
4108 # CONFIG_EXT2_FS_XIP is not set
4109 CONFIG_EXT3_FS=y
4110 CONFIG_EXT3_FS_XATTR=y
4111 -# CONFIG_EXT3_FS_POSIX_ACL is not set
4112 -# CONFIG_EXT3_FS_SECURITY is not set
4113 +CONFIG_EXT3_FS_POSIX_ACL=y
4114 +CONFIG_EXT3_FS_SECURITY=y
4115 +# CONFIG_EXT4DEV_FS is not set
4116 CONFIG_JBD=y
4117 # CONFIG_JBD_DEBUG is not set
4118 CONFIG_FS_MBCACHE=y
4119 # CONFIG_REISERFS_FS is not set
4120 # CONFIG_JFS_FS is not set
4123 -# XFS support
4125 +CONFIG_FS_POSIX_ACL=y
4126 # CONFIG_XFS_FS is not set
4127 +# CONFIG_GFS2_FS is not set
4128 +# CONFIG_OCFS2_FS is not set
4129 # CONFIG_MINIX_FS is not set
4130 # CONFIG_ROMFS_FS is not set
4131 -# CONFIG_QUOTA is not set
4132 +CONFIG_INOTIFY=y
4133 +CONFIG_INOTIFY_USER=y
4134 +CONFIG_QUOTA=y
4135 +# CONFIG_QFMT_V1 is not set
4136 +CONFIG_QFMT_V2=y
4137 +CONFIG_QUOTACTL=y
4138 CONFIG_DNOTIFY=y
4139 -CONFIG_AUTOFS_FS=y
4140 +# CONFIG_AUTOFS_FS is not set
4141 CONFIG_AUTOFS4_FS=y
4142 +# CONFIG_FUSE_FS is not set
4145 # CD-ROM/DVD Filesystems
4146 @@ -643,25 +1019,40 @@
4147 CONFIG_MSDOS_FS=y
4148 CONFIG_VFAT_FS=y
4149 CONFIG_FAT_DEFAULT_CODEPAGE=437
4150 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
4151 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
4152 # CONFIG_NTFS_FS is not set
4155 # Pseudo filesystems
4157 CONFIG_PROC_FS=y
4158 +CONFIG_PROC_SYSCTL=y
4159 CONFIG_SYSFS=y
4160 -CONFIG_DEVPTS_FS_XATTR=y
4161 -# CONFIG_DEVPTS_FS_SECURITY is not set
4162 CONFIG_TMPFS=y
4163 -# CONFIG_TMPFS_XATTR is not set
4164 +# CONFIG_TMPFS_POSIX_ACL is not set
4165 # CONFIG_HUGETLB_PAGE is not set
4166 CONFIG_RAMFS=y
4167 +CONFIG_CONFIGFS_FS=y
4170 # Miscellaneous filesystems
4172 +# CONFIG_ADFS_FS is not set
4173 +# CONFIG_AFFS_FS is not set
4174 +# CONFIG_HFS_FS is not set
4175 # CONFIG_HFSPLUS_FS is not set
4176 +# CONFIG_BEFS_FS is not set
4177 +# CONFIG_BFS_FS is not set
4178 +# CONFIG_EFS_FS is not set
4179 +CONFIG_JFFS2_FS=y
4180 +CONFIG_JFFS2_FS_DEBUG=0
4181 +CONFIG_JFFS2_FS_WRITEBUFFER=y
4182 +# CONFIG_JFFS2_SUMMARY is not set
4183 +# CONFIG_JFFS2_FS_XATTR is not set
4184 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
4185 +CONFIG_JFFS2_ZLIB=y
4186 +CONFIG_JFFS2_RTIME=y
4187 +# CONFIG_JFFS2_RUBIN is not set
4188 # CONFIG_CRAMFS is not set
4189 # CONFIG_VXFS_FS is not set
4190 # CONFIG_HPFS_FS is not set
4191 @@ -675,16 +1066,23 @@
4192 CONFIG_NFS_FS=y
4193 CONFIG_NFS_V3=y
4194 # CONFIG_NFS_V3_ACL is not set
4195 +CONFIG_NFS_V4=y
4196 +# CONFIG_NFS_DIRECTIO is not set
4197 # CONFIG_NFSD is not set
4198 CONFIG_ROOT_NFS=y
4199 CONFIG_LOCKD=y
4200 CONFIG_LOCKD_V4=y
4201 CONFIG_NFS_COMMON=y
4202 CONFIG_SUNRPC=y
4203 +CONFIG_SUNRPC_GSS=y
4204 +CONFIG_RPCSEC_GSS_KRB5=y
4205 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
4206 # CONFIG_SMB_FS is not set
4207 # CONFIG_CIFS is not set
4208 # CONFIG_NCP_FS is not set
4209 # CONFIG_CODA_FS is not set
4210 +# CONFIG_AFS_FS is not set
4211 +# CONFIG_9P_FS is not set
4214 # Partition Types
4215 @@ -734,26 +1132,51 @@
4216 # CONFIG_NLS_ISO8859_15 is not set
4217 # CONFIG_NLS_KOI8_R is not set
4218 # CONFIG_NLS_KOI8_U is not set
4219 -# CONFIG_NLS_UTF8 is not set
4220 +CONFIG_NLS_UTF8=y
4223 +# Distributed Lock Manager
4225 +# CONFIG_DLM is not set
4228 +# Profiling support
4230 +# CONFIG_PROFILING is not set
4233 # Kernel hacking
4235 # CONFIG_PRINTK_TIME is not set
4236 +CONFIG_ENABLE_MUST_CHECK=y
4237 +CONFIG_MAGIC_SYSRQ=y
4238 +# CONFIG_UNUSED_SYMBOLS is not set
4239 +# CONFIG_DEBUG_FS is not set
4240 +# CONFIG_HEADERS_CHECK is not set
4241 CONFIG_DEBUG_KERNEL=y
4242 -# CONFIG_MAGIC_SYSRQ is not set
4243 -CONFIG_LOG_BUF_SHIFT=14
4244 +# CONFIG_DEBUG_SHIRQ is not set
4245 +CONFIG_LOG_BUF_SHIFT=17
4246 +CONFIG_DETECT_SOFTLOCKUP=y
4247 # CONFIG_SCHEDSTATS is not set
4248 +# CONFIG_TIMER_STATS is not set
4249 # CONFIG_DEBUG_SLAB is not set
4250 -# CONFIG_DEBUG_SPINLOCK is not set
4251 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
4252 +# CONFIG_DEBUG_RT_MUTEXES is not set
4253 +# CONFIG_RT_MUTEX_TESTER is not set
4254 +CONFIG_DEBUG_SPINLOCK=y
4255 +# CONFIG_DEBUG_MUTEXES is not set
4256 +CONFIG_DEBUG_SPINLOCK_SLEEP=y
4257 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
4258 # CONFIG_DEBUG_KOBJECT is not set
4259 CONFIG_DEBUG_BUGVERBOSE=y
4260 # CONFIG_DEBUG_INFO is not set
4261 -# CONFIG_DEBUG_FS is not set
4262 +# CONFIG_DEBUG_VM is not set
4263 +# CONFIG_DEBUG_LIST is not set
4264 CONFIG_FRAME_POINTER=y
4265 -CONFIG_DEBUG_USER=y
4266 -CONFIG_DEBUG_ERRORS=y
4267 +CONFIG_FORCED_INLINING=y
4268 +# CONFIG_RCU_TORTURE_TEST is not set
4269 +# CONFIG_FAULT_INJECTION is not set
4270 +# CONFIG_DEBUG_USER is not set
4271 +# CONFIG_DEBUG_ERRORS is not set
4272 CONFIG_DEBUG_LL=y
4273 # CONFIG_DEBUG_ICEDCC is not set
4275 @@ -766,7 +1189,43 @@
4277 # Cryptographic options
4279 -# CONFIG_CRYPTO is not set
4280 +CONFIG_CRYPTO=y
4281 +CONFIG_CRYPTO_ALGAPI=y
4282 +CONFIG_CRYPTO_BLKCIPHER=y
4283 +CONFIG_CRYPTO_HASH=m
4284 +CONFIG_CRYPTO_MANAGER=y
4285 +CONFIG_CRYPTO_HMAC=m
4286 +# CONFIG_CRYPTO_XCBC is not set
4287 +# CONFIG_CRYPTO_NULL is not set
4288 +# CONFIG_CRYPTO_MD4 is not set
4289 +CONFIG_CRYPTO_MD5=y
4290 +# CONFIG_CRYPTO_SHA1 is not set
4291 +# CONFIG_CRYPTO_SHA256 is not set
4292 +# CONFIG_CRYPTO_SHA512 is not set
4293 +# CONFIG_CRYPTO_WP512 is not set
4294 +# CONFIG_CRYPTO_TGR192 is not set
4295 +# CONFIG_CRYPTO_GF128MUL is not set
4296 +# CONFIG_CRYPTO_ECB is not set
4297 +CONFIG_CRYPTO_CBC=y
4298 +CONFIG_CRYPTO_PCBC=m
4299 +# CONFIG_CRYPTO_LRW is not set
4300 +CONFIG_CRYPTO_DES=y
4301 +# CONFIG_CRYPTO_FCRYPT is not set
4302 +# CONFIG_CRYPTO_BLOWFISH is not set
4303 +# CONFIG_CRYPTO_TWOFISH is not set
4304 +# CONFIG_CRYPTO_SERPENT is not set
4305 +# CONFIG_CRYPTO_AES is not set
4306 +# CONFIG_CRYPTO_CAST5 is not set
4307 +# CONFIG_CRYPTO_CAST6 is not set
4308 +# CONFIG_CRYPTO_TEA is not set
4309 +# CONFIG_CRYPTO_ARC4 is not set
4310 +# CONFIG_CRYPTO_KHAZAD is not set
4311 +# CONFIG_CRYPTO_ANUBIS is not set
4312 +# CONFIG_CRYPTO_DEFLATE is not set
4313 +# CONFIG_CRYPTO_MICHAEL_MIC is not set
4314 +# CONFIG_CRYPTO_CRC32C is not set
4315 +# CONFIG_CRYPTO_CAMELLIA is not set
4316 +# CONFIG_CRYPTO_TEST is not set
4319 # Hardware crypto devices
4320 @@ -775,6 +1234,14 @@
4322 # Library routines
4324 +CONFIG_BITREVERSE=y
4325 # CONFIG_CRC_CCITT is not set
4326 +# CONFIG_CRC16 is not set
4327 CONFIG_CRC32=y
4328 # CONFIG_LIBCRC32C is not set
4329 +CONFIG_AUDIT_GENERIC=y
4330 +CONFIG_ZLIB_INFLATE=y
4331 +CONFIG_ZLIB_DEFLATE=y
4332 +CONFIG_PLIST=y
4333 +CONFIG_HAS_IOMEM=y
4334 +CONFIG_HAS_IOPORT=y
4335 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/Kconfig linux-2.6-stable/arch/arm/mach-at91/Kconfig
4336 --- linux-2.6.21/arch/arm/mach-at91/Kconfig Thu Apr 26 05:08:32 2007
4337 +++ linux-2.6-stable/arch/arm/mach-at91/Kconfig Wed May 9 10:20:54 2007
4338 @@ -17,6 +17,9 @@
4339 config ARCH_AT91SAM9263
4340 bool "AT91SAM9263"
4342 +config ARCH_AT91SAM9RL
4343 + bool "AT91SAM9RL"
4345 endchoice
4347 # ----------------------------------------------------------
4348 @@ -87,6 +90,12 @@
4349 help
4350 Select this if you are using Sperry-Sun's KAFA board.
4352 +config MACH_CHUB
4353 + bool "Promwad Chub board"
4354 + depends on ARCH_AT91RM9200
4355 + help
4356 + Select this if you are using Promwad's Chub board.
4358 endif
4360 # ----------------------------------------------------------
4361 @@ -111,6 +120,13 @@
4362 Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
4363 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
4365 +config MACH_CAM60
4366 + bool "KwikByte CAM60 board"
4367 + depends on ARCH_AT91SAM9260
4368 + help
4369 + Select this if you are using KwikByte's CAM60 board based on the Atmel AT91SAM9260.
4370 + <http://www.kwikbyte.com>
4372 endif
4374 # ----------------------------------------------------------
4375 @@ -145,6 +161,20 @@
4377 # ----------------------------------------------------------
4379 +if ARCH_AT91SAM9RL
4381 +comment "AT91SAM9RL Board Type"
4383 +config MACH_AT91SAM9RLEK
4384 + bool "Atmel AT91SAM9RL-EK Evaluation Kit"
4385 + depends on ARCH_AT91SAM9RL
4386 + help
4387 + Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit.
4389 +endif
4391 +# ----------------------------------------------------------
4393 comment "AT91 Board Options"
4395 config MTD_AT91_DATAFLASH_CARD
4396 @@ -160,6 +190,20 @@
4397 On AT91SAM926x boards both types of NAND flash can be present
4398 (8 and 16 bit data bus width).
4400 +config CSB300_WAKE_SW0
4401 + bool "CSB300 SW0 irq0 wakeup"
4402 + depends on MACH_CSB337 && PM
4403 + help
4404 + If you have a CSB300 connected to your CSB337, this lets
4405 + SW0 serve as a wakeup button. It uses IRQ0.
4407 +config CSB300_WAKE_SW1
4408 + bool "CSB300 SW1 gpio wakeup"
4409 + depends on MACH_CSB337 && PM
4410 + help
4411 + If you have a CSB300 connected to your CSB337, this lets
4412 + SW1 serve as a wakeup button. It uses GPIO.
4414 # ----------------------------------------------------------
4416 comment "AT91 Feature Selections"
4417 @@ -170,6 +214,20 @@
4418 Select this if you need to program one or more of the PCK0..PCK3
4419 programmable clock outputs.
4421 +config ATMEL_TCLIB
4422 + bool "Timer/Counter Library"
4423 + help
4424 + Select this if you want a library to allocate the Timer/Counter
4425 + blocks found on many Atmel processors. This facilitates using
4426 + these modules despite processor differences.
4428 +config AT91_SLOW_CLOCK
4429 + bool "Suspend-to-RAM uses slow clock mode (EXPERIMENTAL)"
4430 + depends on PM && EXPERIMENTAL
4431 + help
4432 + Select this if you wish to put the CPU into slow clock mode
4433 + while in the "Suspend to RAM" state, to save more power.
4435 endmenu
4437 endif
4438 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/Makefile linux-2.6-stable/arch/arm/mach-at91/Makefile
4439 --- linux-2.6.21/arch/arm/mach-at91/Makefile Thu Apr 26 05:08:32 2007
4440 +++ linux-2.6-stable/arch/arm/mach-at91/Makefile Wed May 9 12:37:19 2007
4441 @@ -8,12 +8,15 @@
4442 obj- :=
4444 obj-$(CONFIG_PM) += pm.o
4445 +obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o
4446 +obj-$(CONFIG_ATMEL_TCLIB) += tclib.o
4448 # CPU-specific support
4449 obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o
4450 obj-$(CONFIG_ARCH_AT91SAM9260) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o
4451 obj-$(CONFIG_ARCH_AT91SAM9261) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o
4452 obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o
4453 +obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o
4455 # AT91RM9200 board-specific support
4456 obj-$(CONFIG_MACH_ONEARM) += board-1arm.o
4457 @@ -25,9 +28,11 @@
4458 obj-$(CONFIG_MACH_KB9200) += board-kb9202.o
4459 obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o
4460 obj-$(CONFIG_MACH_KAFA) += board-kafa.o
4461 +obj-$(CONFIG_MACH_CHUB) += board-chub.o
4463 # AT91SAM9260 board-specific support
4464 obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
4465 +obj-$(CONFIG_MACH_CAM60) += board-cam60.o
4467 # AT91SAM9261 board-specific support
4468 obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
4469 @@ -35,9 +40,13 @@
4470 # AT91SAM9263 board-specific support
4471 obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
4473 +# AT91SAM9RL board-specific support
4474 +obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
4476 # LEDs support
4477 led-$(CONFIG_ARCH_AT91RM9200DK) += leds.o
4478 led-$(CONFIG_MACH_AT91RM9200EK) += leds.o
4479 +led-$(CONFIG_MACH_AT91SAM9261EK)+= leds.o
4480 led-$(CONFIG_MACH_CSB337) += leds.o
4481 led-$(CONFIG_MACH_CSB637) += leds.o
4482 led-$(CONFIG_MACH_KB9200) += leds.o
4483 @@ -45,7 +54,7 @@
4484 obj-$(CONFIG_LEDS) += $(led-y)
4486 # VGA support
4487 -#obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
4488 +obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
4491 ifeq ($(CONFIG_PM_DEBUG),y)
4492 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91rm9200.c linux-2.6-stable/arch/arm/mach-at91/at91rm9200.c
4493 --- linux-2.6.21/arch/arm/mach-at91/at91rm9200.c Thu Apr 26 05:08:32 2007
4494 +++ linux-2.6-stable/arch/arm/mach-at91/at91rm9200.c Tue May 8 12:13:30 2007
4495 @@ -117,6 +117,21 @@
4496 .pmc_mask = 1 << AT91RM9200_ID_PIOD,
4497 .type = CLK_TYPE_PERIPHERAL,
4499 +static struct clk ssc0_clk = {
4500 + .name = "ssc0_clk",
4501 + .pmc_mask = 1 << AT91RM9200_ID_SSC0,
4502 + .type = CLK_TYPE_PERIPHERAL,
4504 +static struct clk ssc1_clk = {
4505 + .name = "ssc1_clk",
4506 + .pmc_mask = 1 << AT91RM9200_ID_SSC1,
4507 + .type = CLK_TYPE_PERIPHERAL,
4509 +static struct clk ssc2_clk = {
4510 + .name = "ssc2_clk",
4511 + .pmc_mask = 1 << AT91RM9200_ID_SSC2,
4512 + .type = CLK_TYPE_PERIPHERAL,
4514 static struct clk tc0_clk = {
4515 .name = "tc0_clk",
4516 .pmc_mask = 1 << AT91RM9200_ID_TC0,
4517 @@ -161,7 +176,9 @@
4518 &udc_clk,
4519 &twi_clk,
4520 &spi_clk,
4521 - // ssc 0 .. ssc2
4522 + &ssc0_clk,
4523 + &ssc1_clk,
4524 + &ssc2_clk,
4525 &tc0_clk,
4526 &tc1_clk,
4527 &tc2_clk,
4528 @@ -250,6 +267,33 @@
4531 /* --------------------------------------------------------------------
4532 + * Timer/Counter library initialization
4533 + * -------------------------------------------------------------------- */
4534 +#ifdef CONFIG_ATMEL_TCLIB
4536 +#include "tclib.h"
4538 +static struct atmel_tcblock at91rm9200_tcblocks[] = {
4539 + [0] = {
4540 + .physaddr = AT91RM9200_BASE_TCB0,
4541 + .irq = { AT91RM9200_ID_TC0, AT91RM9200_ID_TC1, AT91RM9200_ID_TC2 },
4542 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
4543 + },
4544 + [1] = {
4545 + .physaddr = AT91RM9200_BASE_TCB1,
4546 + .irq = { AT91RM9200_ID_TC3, AT91RM9200_ID_TC4, AT91RM9200_ID_TC5 },
4547 + .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
4548 + },
4551 +#define at91rm9200_tc_init() atmel_tc_init(at91rm9200_tcblocks, ARRAY_SIZE(at91rm9200_tcblocks))
4553 +#else
4554 +#define at91rm9200_tc_init() do {} while(0)
4555 +#endif
4558 +/* --------------------------------------------------------------------
4559 * AT91RM9200 processor initialization
4560 * -------------------------------------------------------------------- */
4561 void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks)
4562 @@ -271,6 +315,9 @@
4564 /* Initialize GPIO subsystem */
4565 at91_gpio_init(at91rm9200_gpio, banks);
4567 + /* Initialize the Timer/Counter blocks */
4568 + at91rm9200_tc_init();
4572 @@ -284,28 +331,28 @@
4573 static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {
4574 7, /* Advanced Interrupt Controller (FIQ) */
4575 7, /* System Peripherals */
4576 - 0, /* Parallel IO Controller A */
4577 - 0, /* Parallel IO Controller B */
4578 - 0, /* Parallel IO Controller C */
4579 - 0, /* Parallel IO Controller D */
4580 - 6, /* USART 0 */
4581 - 6, /* USART 1 */
4582 - 6, /* USART 2 */
4583 - 6, /* USART 3 */
4584 + 1, /* Parallel IO Controller A */
4585 + 1, /* Parallel IO Controller B */
4586 + 1, /* Parallel IO Controller C */
4587 + 1, /* Parallel IO Controller D */
4588 + 5, /* USART 0 */
4589 + 5, /* USART 1 */
4590 + 5, /* USART 2 */
4591 + 5, /* USART 3 */
4592 0, /* Multimedia Card Interface */
4593 - 4, /* USB Device Port */
4594 - 0, /* Two-Wire Interface */
4595 - 6, /* Serial Peripheral Interface */
4596 - 5, /* Serial Synchronous Controller 0 */
4597 - 5, /* Serial Synchronous Controller 1 */
4598 - 5, /* Serial Synchronous Controller 2 */
4599 + 2, /* USB Device Port */
4600 + 6, /* Two-Wire Interface */
4601 + 5, /* Serial Peripheral Interface */
4602 + 4, /* Serial Synchronous Controller 0 */
4603 + 4, /* Serial Synchronous Controller 1 */
4604 + 4, /* Serial Synchronous Controller 2 */
4605 0, /* Timer Counter 0 */
4606 0, /* Timer Counter 1 */
4607 0, /* Timer Counter 2 */
4608 0, /* Timer Counter 3 */
4609 0, /* Timer Counter 4 */
4610 0, /* Timer Counter 5 */
4611 - 3, /* USB Host port */
4612 + 2, /* USB Host port */
4613 3, /* Ethernet MAC */
4614 0, /* Advanced Interrupt Controller (IRQ0) */
4615 0, /* Advanced Interrupt Controller (IRQ1) */
4616 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91rm9200_devices.c linux-2.6-stable/arch/arm/mach-at91/at91rm9200_devices.c
4617 --- linux-2.6.21/arch/arm/mach-at91/at91rm9200_devices.c Thu Apr 26 05:08:32 2007
4618 +++ linux-2.6-stable/arch/arm/mach-at91/at91rm9200_devices.c Tue May 8 12:13:30 2007
4619 @@ -480,7 +480,18 @@
4620 * SPI
4621 * -------------------------------------------------------------------- */
4623 -#if defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) || defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE)
4624 +#if defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE) /* legacy SPI driver */
4625 +#define SPI_DEVNAME "at91_spi"
4627 +#elif defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) /* SPI bitbanging driver */
4628 +#define SPI_DEVNAME "at91_spi"
4630 +#elif defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE) /* new SPI driver */
4631 +#define SPI_DEVNAME "atmel_spi"
4633 +#endif
4635 +#ifdef SPI_DEVNAME
4636 static u64 spi_dmamask = 0xffffffffUL;
4638 static struct resource spi_resources[] = {
4639 @@ -497,7 +508,7 @@
4642 static struct platform_device at91rm9200_spi_device = {
4643 - .name = "at91_spi",
4644 + .name = SPI_DEVNAME,
4645 .id = 0,
4646 .dev = {
4647 .dma_mask = &spi_dmamask,
4648 @@ -606,6 +617,32 @@
4649 #endif
4652 +#if defined(CONFIG_NEW_LEDS)
4654 +static struct platform_device at91_leds = {
4655 + .name = "at91_leds",
4656 + .id = -1,
4659 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
4661 + if (!nr)
4662 + return;
4664 + at91_leds.dev.platform_data = leds;
4666 + for ( ; nr; nr--, leds++) {
4667 + leds->index = nr; /* first record stores number of leds */
4668 + at91_set_gpio_output(leds->gpio, (leds->flags & 1) == 0);
4671 + platform_device_register(&at91_leds);
4673 +#else
4674 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
4675 +#endif
4678 /* --------------------------------------------------------------------
4679 * UART
4680 * -------------------------------------------------------------------- */
4681 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9260.c linux-2.6-stable/arch/arm/mach-at91/at91sam9260.c
4682 --- linux-2.6.21/arch/arm/mach-at91/at91sam9260.c Thu Apr 26 05:08:32 2007
4683 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9260.c Tue May 8 12:13:30 2007
4684 @@ -119,6 +119,11 @@
4685 .pmc_mask = 1 << AT91SAM9260_ID_SPI1,
4686 .type = CLK_TYPE_PERIPHERAL,
4688 +static struct clk ssc_clk = {
4689 + .name = "ssc_clk",
4690 + .pmc_mask = 1 << AT91SAM9260_ID_SSC,
4691 + .type = CLK_TYPE_PERIPHERAL,
4693 static struct clk tc0_clk = {
4694 .name = "tc0_clk",
4695 .pmc_mask = 1 << AT91SAM9260_ID_TC0,
4696 @@ -193,7 +198,7 @@
4697 &twi_clk,
4698 &spi0_clk,
4699 &spi1_clk,
4700 - // ssc
4701 + &ssc_clk,
4702 &tc0_clk,
4703 &tc1_clk,
4704 &tc2_clk,
4705 @@ -264,6 +269,33 @@
4708 /* --------------------------------------------------------------------
4709 + * Timer/Counter library initialization
4710 + * -------------------------------------------------------------------- */
4711 +#ifdef CONFIG_ATMEL_TCLIB
4713 +#include "tclib.h"
4715 +static struct atmel_tcblock at91sam9260_tcblocks[] = {
4716 + [0] = {
4717 + .physaddr = AT91SAM9260_BASE_TCB0,
4718 + .irq = { AT91SAM9260_ID_TC0, AT91SAM9260_ID_TC1, AT91SAM9260_ID_TC2 },
4719 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
4720 + },
4721 + [1] = {
4722 + .physaddr = AT91SAM9260_BASE_TCB1,
4723 + .irq = { AT91SAM9260_ID_TC3, AT91SAM9260_ID_TC4, AT91SAM9260_ID_TC5 },
4724 + .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
4725 + },
4728 +#define at91sam9260_tc_init() atmel_tc_init(at91sam9260_tcblocks, ARRAY_SIZE(at91sam9260_tcblocks))
4730 +#else
4731 +#define at91sam9260_tc_init() do {} while(0)
4732 +#endif
4735 +/* --------------------------------------------------------------------
4736 * AT91SAM9260 processor initialization
4737 * -------------------------------------------------------------------- */
4739 @@ -310,6 +342,9 @@
4741 /* Register GPIO subsystem */
4742 at91_gpio_init(at91sam9260_gpio, 3);
4744 + /* Initialize the Timer/Counter blocks */
4745 + at91sam9260_tc_init();
4748 /* --------------------------------------------------------------------
4749 @@ -322,30 +357,30 @@
4750 static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
4751 7, /* Advanced Interrupt Controller */
4752 7, /* System Peripherals */
4753 - 0, /* Parallel IO Controller A */
4754 - 0, /* Parallel IO Controller B */
4755 - 0, /* Parallel IO Controller C */
4756 + 1, /* Parallel IO Controller A */
4757 + 1, /* Parallel IO Controller B */
4758 + 1, /* Parallel IO Controller C */
4759 0, /* Analog-to-Digital Converter */
4760 - 6, /* USART 0 */
4761 - 6, /* USART 1 */
4762 - 6, /* USART 2 */
4763 + 5, /* USART 0 */
4764 + 5, /* USART 1 */
4765 + 5, /* USART 2 */
4766 0, /* Multimedia Card Interface */
4767 - 4, /* USB Device Port */
4768 - 0, /* Two-Wire Interface */
4769 - 6, /* Serial Peripheral Interface 0 */
4770 - 6, /* Serial Peripheral Interface 1 */
4771 + 2, /* USB Device Port */
4772 + 6, /* Two-Wire Interface */
4773 + 5, /* Serial Peripheral Interface 0 */
4774 + 5, /* Serial Peripheral Interface 1 */
4775 5, /* Serial Synchronous Controller */
4778 0, /* Timer Counter 0 */
4779 0, /* Timer Counter 1 */
4780 0, /* Timer Counter 2 */
4781 - 3, /* USB Host port */
4782 + 2, /* USB Host port */
4783 3, /* Ethernet */
4784 0, /* Image Sensor Interface */
4785 - 6, /* USART 3 */
4786 - 6, /* USART 4 */
4787 - 6, /* USART 5 */
4788 + 5, /* USART 3 */
4789 + 5, /* USART 4 */
4790 + 5, /* USART 5 */
4791 0, /* Timer Counter 3 */
4792 0, /* Timer Counter 4 */
4793 0, /* Timer Counter 5 */
4794 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6-stable/arch/arm/mach-at91/at91sam9260_devices.c
4795 --- linux-2.6.21/arch/arm/mach-at91/at91sam9260_devices.c Thu Apr 26 05:08:32 2007
4796 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9260_devices.c Tue May 8 12:13:30 2007
4797 @@ -527,6 +527,32 @@
4798 #endif
4801 +#if defined(CONFIG_NEW_LEDS)
4803 +static struct platform_device at91_leds = {
4804 + .name = "at91_leds",
4805 + .id = -1,
4808 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
4810 + if (!nr)
4811 + return;
4813 + at91_leds.dev.platform_data = leds;
4815 + for ( ; nr; nr--, leds++) {
4816 + leds->index = nr; /* first record stores number of leds */
4817 + at91_set_gpio_output(leds->gpio, (leds->flags & 1) == 0);
4820 + platform_device_register(&at91_leds);
4822 +#else
4823 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
4824 +#endif
4827 /* --------------------------------------------------------------------
4828 * UART
4829 * -------------------------------------------------------------------- */
4830 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9261.c linux-2.6-stable/arch/arm/mach-at91/at91sam9261.c
4831 --- linux-2.6.21/arch/arm/mach-at91/at91sam9261.c Thu Apr 26 05:08:32 2007
4832 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9261.c Tue May 8 12:13:30 2007
4833 @@ -97,6 +97,21 @@
4834 .pmc_mask = 1 << AT91SAM9261_ID_SPI1,
4835 .type = CLK_TYPE_PERIPHERAL,
4837 +static struct clk ssc0_clk = {
4838 + .name = "ssc0_clk",
4839 + .pmc_mask = 1 << AT91SAM9261_ID_SSC0,
4840 + .type = CLK_TYPE_PERIPHERAL,
4842 +static struct clk ssc1_clk = {
4843 + .name = "ssc1_clk",
4844 + .pmc_mask = 1 << AT91SAM9261_ID_SSC1,
4845 + .type = CLK_TYPE_PERIPHERAL,
4847 +static struct clk ssc2_clk = {
4848 + .name = "ssc2_clk",
4849 + .pmc_mask = 1 << AT91SAM9261_ID_SSC2,
4850 + .type = CLK_TYPE_PERIPHERAL,
4852 static struct clk tc0_clk = {
4853 .name = "tc0_clk",
4854 .pmc_mask = 1 << AT91SAM9261_ID_TC0,
4855 @@ -135,7 +150,9 @@
4856 &twi_clk,
4857 &spi0_clk,
4858 &spi1_clk,
4859 - // ssc 0 .. ssc2
4860 + &ssc0_clk,
4861 + &ssc1_clk,
4862 + &ssc2_clk,
4863 &tc0_clk,
4864 &tc1_clk,
4865 &tc2_clk,
4866 @@ -230,6 +247,28 @@
4869 /* --------------------------------------------------------------------
4870 + * Timer/Counter library initialization
4871 + * -------------------------------------------------------------------- */
4872 +#ifdef CONFIG_ATMEL_TCLIB
4874 +#include "tclib.h"
4876 +static struct atmel_tcblock at91sam9261_tcblocks[] = {
4877 + [0] = {
4878 + .physaddr = AT91SAM9261_BASE_TCB0,
4879 + .irq = { AT91SAM9261_ID_TC0, AT91SAM9261_ID_TC1, AT91SAM9261_ID_TC2 },
4880 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
4884 +#define at91sam9261_tc_init() atmel_tc_init(at91sam9261_tcblocks, ARRAY_SIZE(at91sam9261_tcblocks))
4886 +#else
4887 +#define at91sam9261_tc_init() do {} while(0)
4888 +#endif
4891 +/* --------------------------------------------------------------------
4892 * AT91SAM9261 processor initialization
4893 * -------------------------------------------------------------------- */
4895 @@ -250,6 +289,9 @@
4897 /* Register GPIO subsystem */
4898 at91_gpio_init(at91sam9261_gpio, 3);
4900 + /* Initialize the Timer/Counter blocks */
4901 + at91sam9261_tc_init();
4904 /* --------------------------------------------------------------------
4905 @@ -262,25 +304,25 @@
4906 static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = {
4907 7, /* Advanced Interrupt Controller */
4908 7, /* System Peripherals */
4909 - 0, /* Parallel IO Controller A */
4910 - 0, /* Parallel IO Controller B */
4911 - 0, /* Parallel IO Controller C */
4912 + 1, /* Parallel IO Controller A */
4913 + 1, /* Parallel IO Controller B */
4914 + 1, /* Parallel IO Controller C */
4916 - 6, /* USART 0 */
4917 - 6, /* USART 1 */
4918 - 6, /* USART 2 */
4919 + 5, /* USART 0 */
4920 + 5, /* USART 1 */
4921 + 5, /* USART 2 */
4922 0, /* Multimedia Card Interface */
4923 - 4, /* USB Device Port */
4924 - 0, /* Two-Wire Interface */
4925 - 6, /* Serial Peripheral Interface 0 */
4926 - 6, /* Serial Peripheral Interface 1 */
4927 - 5, /* Serial Synchronous Controller 0 */
4928 - 5, /* Serial Synchronous Controller 1 */
4929 - 5, /* Serial Synchronous Controller 2 */
4930 + 2, /* USB Device Port */
4931 + 6, /* Two-Wire Interface */
4932 + 5, /* Serial Peripheral Interface 0 */
4933 + 5, /* Serial Peripheral Interface 1 */
4934 + 4, /* Serial Synchronous Controller 0 */
4935 + 4, /* Serial Synchronous Controller 1 */
4936 + 4, /* Serial Synchronous Controller 2 */
4937 0, /* Timer Counter 0 */
4938 0, /* Timer Counter 1 */
4939 0, /* Timer Counter 2 */
4940 - 3, /* USB Host port */
4941 + 2, /* USB Host port */
4942 3, /* LCD Controller */
4945 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9261_devices.c linux-2.6-stable/arch/arm/mach-at91/at91sam9261_devices.c
4946 --- linux-2.6.21/arch/arm/mach-at91/at91sam9261_devices.c Thu Apr 26 05:08:32 2007
4947 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9261_devices.c Tue May 8 12:56:33 2007
4948 @@ -14,6 +14,9 @@
4949 #include <asm/mach/map.h>
4951 #include <linux/platform_device.h>
4952 +#include <linux/fb.h>
4954 +#include <video/atmel_lcdc.h>
4956 #include <asm/arch/board.h>
4957 #include <asm/arch/gpio.h>
4958 @@ -430,9 +433,9 @@
4959 * LCD Controller
4960 * -------------------------------------------------------------------- */
4962 -#if defined(CONFIG_FB_AT91) || defined(CONFIG_FB_AT91_MODULE)
4963 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
4964 static u64 lcdc_dmamask = 0xffffffffUL;
4965 -static struct at91fb_info lcdc_data;
4966 +static struct atmel_lcdfb_info lcdc_data;
4968 static struct resource lcdc_resources[] = {
4969 [0] = {
4970 @@ -455,7 +458,7 @@
4973 static struct platform_device at91_lcdc_device = {
4974 - .name = "at91-fb",
4975 + .name = "atmel_lcdfb",
4976 .id = 0,
4977 .dev = {
4978 .dma_mask = &lcdc_dmamask,
4979 @@ -466,7 +469,7 @@
4980 .num_resources = ARRAY_SIZE(lcdc_resources),
4983 -void __init at91_add_device_lcdc(struct at91fb_info *data)
4984 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
4986 if (!data) {
4987 return;
4988 @@ -499,7 +502,7 @@
4989 platform_device_register(&at91_lcdc_device);
4991 #else
4992 -void __init at91_add_device_lcdc(struct at91fb_info *data) {}
4993 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
4994 #endif
4997 @@ -525,6 +528,32 @@
4998 #endif
5001 +#if defined(CONFIG_NEW_LEDS)
5003 +static struct platform_device at91_leds = {
5004 + .name = "at91_leds",
5005 + .id = -1,
5008 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
5010 + if (!nr)
5011 + return;
5013 + at91_leds.dev.platform_data = leds;
5015 + for ( ; nr; nr--, leds++) {
5016 + leds->index = nr; /* first record stores number of leds */
5017 + at91_set_gpio_output(leds->gpio, (leds->flags & 1) == 0);
5020 + platform_device_register(&at91_leds);
5022 +#else
5023 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
5024 +#endif
5027 /* --------------------------------------------------------------------
5028 * UART
5029 * -------------------------------------------------------------------- */
5030 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9263.c linux-2.6-stable/arch/arm/mach-at91/at91sam9263.c
5031 --- linux-2.6.21/arch/arm/mach-at91/at91sam9263.c Thu Apr 26 05:08:32 2007
5032 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9263.c Tue May 8 12:13:30 2007
5033 @@ -87,6 +87,11 @@
5034 .pmc_mask = 1 << AT91SAM9263_ID_MCI1,
5035 .type = CLK_TYPE_PERIPHERAL,
5037 +static struct clk can_clk = {
5038 + .name = "can_clk",
5039 + .pmc_mask = 1 << AT91SAM9263_ID_CAN,
5040 + .type = CLK_TYPE_PERIPHERAL,
5042 static struct clk twi_clk = {
5043 .name = "twi_clk",
5044 .pmc_mask = 1 << AT91SAM9263_ID_TWI,
5045 @@ -102,16 +107,46 @@
5046 .pmc_mask = 1 << AT91SAM9263_ID_SPI1,
5047 .type = CLK_TYPE_PERIPHERAL,
5049 +static struct clk ssc0_clk = {
5050 + .name = "ssc0_clk",
5051 + .pmc_mask = 1 << AT91SAM9263_ID_SSC0,
5052 + .type = CLK_TYPE_PERIPHERAL,
5054 +static struct clk ssc1_clk = {
5055 + .name = "ssc1_clk",
5056 + .pmc_mask = 1 << AT91SAM9263_ID_SSC1,
5057 + .type = CLK_TYPE_PERIPHERAL,
5059 +static struct clk ac97_clk = {
5060 + .name = "ac97_clk",
5061 + .pmc_mask = 1 << AT91SAM9263_ID_AC97C,
5062 + .type = CLK_TYPE_PERIPHERAL,
5064 static struct clk tcb_clk = {
5065 .name = "tcb_clk",
5066 .pmc_mask = 1 << AT91SAM9263_ID_TCB,
5067 .type = CLK_TYPE_PERIPHERAL,
5069 +static struct clk pwmc_clk = {
5070 + .name = "pwmc_clk",
5071 + .pmc_mask = 1 << AT91SAM9263_ID_PWMC,
5072 + .type = CLK_TYPE_PERIPHERAL,
5074 static struct clk macb_clk = {
5075 .name = "macb_clk",
5076 .pmc_mask = 1 << AT91SAM9263_ID_EMAC,
5077 .type = CLK_TYPE_PERIPHERAL,
5079 +static struct clk dma_clk = {
5080 + .name = "dma_clk",
5081 + .pmc_mask = 1 << AT91SAM9263_ID_DMA,
5082 + .type = CLK_TYPE_PERIPHERAL,
5084 +static struct clk twodge_clk = {
5085 + .name = "2dge_clk",
5086 + .pmc_mask = 1 << AT91SAM9263_ID_2DGE,
5087 + .type = CLK_TYPE_PERIPHERAL,
5089 static struct clk udc_clk = {
5090 .name = "udc_clk",
5091 .pmc_mask = 1 << AT91SAM9263_ID_UDP,
5092 @@ -142,20 +177,21 @@
5093 &usart2_clk,
5094 &mmc0_clk,
5095 &mmc1_clk,
5096 - // can
5097 + &can_clk,
5098 &twi_clk,
5099 &spi0_clk,
5100 &spi1_clk,
5101 - // ssc0 .. ssc1
5102 - // ac97
5103 + &ssc0_clk,
5104 + &ssc1_clk,
5105 + &ac97_clk,
5106 &tcb_clk,
5107 - // pwmc
5108 + &pwmc_clk,
5109 &macb_clk,
5110 - // 2dge
5111 + &twodge_clk,
5112 &udc_clk,
5113 &isi_clk,
5114 &lcdc_clk,
5115 - // dma
5116 + &dma_clk,
5117 &ohci_clk,
5118 // irq0 .. irq1
5120 @@ -237,6 +273,28 @@
5123 /* --------------------------------------------------------------------
5124 + * Timer/Counter library initialization
5125 + * -------------------------------------------------------------------- */
5126 +#ifdef CONFIG_ATMEL_TCLIB
5128 +#include "tclib.h"
5130 +static struct atmel_tcblock at91sam9263_tcblocks[] = {
5131 + [0] = {
5132 + .physaddr = AT91SAM9263_BASE_TCB0,
5133 + .irq = { AT91SAM9263_ID_TCB, AT91SAM9263_ID_TCB, AT91SAM9263_ID_TCB },
5134 + .clk = { &tcb_clk, &tcb_clk, &tcb_clk },
5138 +#define at91sam9263_tc_init() atmel_tc_init(at91sam9263_tcblocks, ARRAY_SIZE(at91sam9263_tcblocks))
5140 +#else
5141 +#define at91sam9263_tc_init() do {} while(0)
5142 +#endif
5145 +/* --------------------------------------------------------------------
5146 * AT91SAM9263 processor initialization
5147 * -------------------------------------------------------------------- */
5149 @@ -256,6 +314,9 @@
5151 /* Register GPIO subsystem */
5152 at91_gpio_init(at91sam9263_gpio, 5);
5154 + /* Initialize the Timer/Counter blocks */
5155 + at91sam9263_tc_init();
5158 /* --------------------------------------------------------------------
5159 @@ -268,34 +329,34 @@
5160 static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = {
5161 7, /* Advanced Interrupt Controller (FIQ) */
5162 7, /* System Peripherals */
5163 - 0, /* Parallel IO Controller A */
5164 - 0, /* Parallel IO Controller B */
5165 - 0, /* Parallel IO Controller C, D and E */
5166 + 1, /* Parallel IO Controller A */
5167 + 1, /* Parallel IO Controller B */
5168 + 1, /* Parallel IO Controller C, D and E */
5171 - 6, /* USART 0 */
5172 - 6, /* USART 1 */
5173 - 6, /* USART 2 */
5174 + 5, /* USART 0 */
5175 + 5, /* USART 1 */
5176 + 5, /* USART 2 */
5177 0, /* Multimedia Card Interface 0 */
5178 0, /* Multimedia Card Interface 1 */
5179 - 4, /* CAN */
5180 - 0, /* Two-Wire Interface */
5181 - 6, /* Serial Peripheral Interface 0 */
5182 - 6, /* Serial Peripheral Interface 1 */
5183 - 5, /* Serial Synchronous Controller 0 */
5184 - 5, /* Serial Synchronous Controller 1 */
5185 - 6, /* AC97 Controller */
5186 + 3, /* CAN */
5187 + 6, /* Two-Wire Interface */
5188 + 5, /* Serial Peripheral Interface 0 */
5189 + 5, /* Serial Peripheral Interface 1 */
5190 + 4, /* Serial Synchronous Controller 0 */
5191 + 4, /* Serial Synchronous Controller 1 */
5192 + 5, /* AC97 Controller */
5193 0, /* Timer Counter 0, 1 and 2 */
5194 0, /* Pulse Width Modulation Controller */
5195 3, /* Ethernet */
5197 0, /* 2D Graphic Engine */
5198 - 3, /* USB Device Port */
5199 + 2, /* USB Device Port */
5200 0, /* Image Sensor Interface */
5201 3, /* LDC Controller */
5202 0, /* DMA Controller */
5204 - 3, /* USB Host port */
5205 + 2, /* USB Host port */
5206 0, /* Advanced Interrupt Controller (IRQ0) */
5207 0, /* Advanced Interrupt Controller (IRQ1) */
5209 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9263_devices.c linux-2.6-stable/arch/arm/mach-at91/at91sam9263_devices.c
5210 --- linux-2.6.21/arch/arm/mach-at91/at91sam9263_devices.c Thu Apr 26 05:08:32 2007
5211 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9263_devices.c Thu May 10 12:23:46 2007
5212 @@ -13,6 +13,9 @@
5213 #include <asm/mach/map.h>
5215 #include <linux/platform_device.h>
5216 +#include <linux/fb.h>
5218 +#include <video/atmel_lcdc.h>
5220 #include <asm/arch/board.h>
5221 #include <asm/arch/gpio.h>
5222 @@ -573,6 +576,180 @@
5225 /* --------------------------------------------------------------------
5226 + * AC97
5227 + * -------------------------------------------------------------------- */
5229 +#if defined(CONFIG_SND_AT91_AC97) || defined(CONFIG_SND_AT91_AC97_MODULE)
5230 +static u64 ac97_dmamask = 0xffffffffUL;
5231 +static struct atmel_ac97_data ac97_data;
5233 +static struct resource ac97_resources[] = {
5234 + [0] = {
5235 + .start = AT91SAM9263_BASE_AC97C,
5236 + .end = AT91SAM9263_BASE_AC97C + SZ_16K - 1,
5237 + .flags = IORESOURCE_MEM,
5238 + },
5239 + [1] = {
5240 + .start = AT91SAM9263_ID_AC97C,
5241 + .end = AT91SAM9263_ID_AC97C,
5242 + .flags = IORESOURCE_IRQ,
5243 + },
5246 +static struct platform_device at91sam9263_ac97_device = {
5247 + .name = "ac97c",
5248 + .id = 1,
5249 + .dev = {
5250 + .dma_mask = &ac97_dmamask,
5251 + .coherent_dma_mask = 0xffffffff,
5252 + .platform_data = &ac97_data,
5253 + },
5254 + .resource = ac97_resources,
5255 + .num_resources = ARRAY_SIZE(ac97_resources),
5258 +void __init at91_add_device_ac97(struct atmel_ac97_data *data)
5260 + if (!data)
5261 + return;
5263 + at91_set_A_periph(AT91_PIN_PB0, 0); /* AC97FS */
5264 + at91_set_A_periph(AT91_PIN_PB1, 0); /* AC97CK */
5265 + at91_set_A_periph(AT91_PIN_PB2, 0); /* AC97TX */
5266 + at91_set_A_periph(AT91_PIN_PB3, 0); /* AC97RX */
5268 + /* reset */
5269 + if (data->reset_pin)
5270 + at91_set_gpio_output(data->reset_pin, 0);
5272 + ac97_data = *ek_data;
5273 + platform_device_register(&at91sam9263_ac97_device);
5275 +#else
5276 +void __init at91_add_device_ac97(struct atmel_ac97_data *data) {}
5277 +#endif
5280 +/* --------------------------------------------------------------------
5281 + * Image Sensor Interface
5282 + * -------------------------------------------------------------------- */
5284 +#if defined(CONFIG_VIDEO_AT91_ISI) || defined(CONFIG_VIDEO_AT91_ISI_MODULE)
5286 +struct resource isi_resources[] = {
5287 + [0] = {
5288 + .start = AT91SAM9263_BASE_ISI,
5289 + .end = AT91SAM9263_BASE_ISI + SZ_16K - 1,
5290 + .flags = IORESOURCE_MEM,
5291 + },
5292 + [1] = {
5293 + .start = AT91SAM9263_ID_ISI,
5294 + .end = AT91SAM9263_ID_ISI,
5295 + .flags = IORESOURCE_IRQ,
5296 + },
5299 +static struct platform_device at91sam9263_isi_device = {
5300 + .name = "at91_isi",
5301 + .id = -1,
5302 + .resource = isi_resources,
5303 + .num_resources = ARRAY_SIZE(isi_resources),
5306 +void __init at91_add_device_isi(void)
5308 + at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */
5309 + at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */
5310 + at91_set_A_periph(AT91_PIN_PE2, 0); /* ISI_D2 */
5311 + at91_set_A_periph(AT91_PIN_PE3, 0); /* ISI_D3 */
5312 + at91_set_A_periph(AT91_PIN_PE4, 0); /* ISI_D4 */
5313 + at91_set_A_periph(AT91_PIN_PE5, 0); /* ISI_D5 */
5314 + at91_set_A_periph(AT91_PIN_PE6, 0); /* ISI_D6 */
5315 + at91_set_A_periph(AT91_PIN_PE7, 0); /* ISI_D7 */
5316 + at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */
5317 + at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */
5318 + at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */
5319 + at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */
5320 + at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */
5321 + at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */
5322 + at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */
5323 + at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */
5325 +#else
5326 +void __init at91_add_device_isi(void) {}
5327 +#endif
5330 +/* --------------------------------------------------------------------
5331 + * LCD Controller
5332 + * -------------------------------------------------------------------- */
5334 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
5335 +static u64 lcdc_dmamask = 0xffffffffUL;
5336 +static struct atmel_lcdfb_info lcdc_data;
5338 +static struct resource lcdc_resources[] = {
5339 + [0] = {
5340 + .start = AT91SAM9263_LCDC_BASE,
5341 + .end = AT91SAM9263_LCDC_BASE + SZ_4K - 1,
5342 + .flags = IORESOURCE_MEM,
5343 + },
5344 + [1] = {
5345 + .start = AT91SAM9263_ID_LCDC,
5346 + .end = AT91SAM9263_ID_LCDC,
5347 + .flags = IORESOURCE_IRQ,
5348 + },
5351 +static struct platform_device at91_lcdc_device = {
5352 + .name = "atmel_lcdfb",
5353 + .id = 0,
5354 + .dev = {
5355 + .dma_mask = &lcdc_dmamask,
5356 + .coherent_dma_mask = 0xffffffff,
5357 + .platform_data = &lcdc_data,
5358 + },
5359 + .resource = lcdc_resources,
5360 + .num_resources = ARRAY_SIZE(lcdc_resources),
5363 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
5365 + if (!data)
5366 + return;
5368 + at91_set_A_periph(AT91_PIN_PC1, 0); /* LCDHSYNC */
5369 + at91_set_A_periph(AT91_PIN_PC2, 0); /* LCDDOTCK */
5370 + at91_set_A_periph(AT91_PIN_PC3, 0); /* LCDDEN */
5371 + at91_set_B_periph(AT91_PIN_PB9, 0); /* LCDCC */
5372 + at91_set_A_periph(AT91_PIN_PC6, 0); /* LCDD2 */
5373 + at91_set_A_periph(AT91_PIN_PC7, 0); /* LCDD3 */
5374 + at91_set_A_periph(AT91_PIN_PC8, 0); /* LCDD4 */
5375 + at91_set_A_periph(AT91_PIN_PC9, 0); /* LCDD5 */
5376 + at91_set_A_periph(AT91_PIN_PC10, 0); /* LCDD6 */
5377 + at91_set_A_periph(AT91_PIN_PC11, 0); /* LCDD7 */
5378 + at91_set_A_periph(AT91_PIN_PC14, 0); /* LCDD10 */
5379 + at91_set_A_periph(AT91_PIN_PC15, 0); /* LCDD11 */
5380 + at91_set_A_periph(AT91_PIN_PC16, 0); /* LCDD12 */
5381 + at91_set_B_periph(AT91_PIN_PC12, 0); /* LCDD13 */
5382 + at91_set_A_periph(AT91_PIN_PC18, 0); /* LCDD14 */
5383 + at91_set_A_periph(AT91_PIN_PC19, 0); /* LCDD15 */
5384 + at91_set_A_periph(AT91_PIN_PC22, 0); /* LCDD18 */
5385 + at91_set_A_periph(AT91_PIN_PC23, 0); /* LCDD19 */
5386 + at91_set_A_periph(AT91_PIN_PC24, 0); /* LCDD20 */
5387 + at91_set_B_periph(AT91_PIN_PC17, 0); /* LCDD21 */
5388 + at91_set_A_periph(AT91_PIN_PC26, 0); /* LCDD22 */
5389 + at91_set_A_periph(AT91_PIN_PC27, 0); /* LCDD23 */
5391 + lcdc_data = *data;
5392 + platform_device_register(&at91_lcdc_device);
5394 +#else
5395 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
5396 +#endif
5399 +/* --------------------------------------------------------------------
5400 * LEDs
5401 * -------------------------------------------------------------------- */
5403 @@ -594,6 +771,32 @@
5404 #endif
5407 +#if defined(CONFIG_NEW_LEDS)
5409 +static struct platform_device at91_leds = {
5410 + .name = "at91_leds",
5411 + .id = -1,
5414 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
5416 + if (!nr)
5417 + return;
5419 + at91_leds.dev.platform_data = leds;
5421 + for ( ; nr; nr--, leds++) {
5422 + leds->index = nr; /* first record stores number of leds */
5423 + at91_set_gpio_output(leds->gpio, (leds->flags & 1) == 0);
5426 + platform_device_register(&at91_leds);
5428 +#else
5429 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
5430 +#endif
5433 /* --------------------------------------------------------------------
5434 * UART
5435 * -------------------------------------------------------------------- */
5436 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9rl.c linux-2.6-stable/arch/arm/mach-at91/at91sam9rl.c
5437 --- linux-2.6.21/arch/arm/mach-at91/at91sam9rl.c Thu Jan 1 02:00:00 1970
5438 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9rl.c Fri May 11 15:48:14 2007
5439 @@ -0,0 +1,366 @@
5441 + * arch/arm/mach-at91/at91sam9rl.c
5443 + * Copyright (C) 2005 SAN People
5444 + * Copyright (C) 2007 Atmel Corporation
5446 + * This file is subject to the terms and conditions of the GNU General Public
5447 + * License. See the file COPYING in the main directory of this archive for
5448 + * more details.
5449 + */
5451 +#include <linux/module.h>
5453 +#include <asm/mach/arch.h>
5454 +#include <asm/mach/map.h>
5455 +#include <asm/arch/cpu.h>
5456 +#include <asm/arch/at91sam9rl.h>
5457 +#include <asm/arch/at91_pmc.h>
5458 +#include <asm/arch/at91_rstc.h>
5460 +#include "generic.h"
5461 +#include "clock.h"
5463 +static struct map_desc at91sam9rl_io_desc[] __initdata = {
5465 + .virtual = AT91_VA_BASE_SYS,
5466 + .pfn = __phys_to_pfn(AT91_BASE_SYS),
5467 + .length = SZ_16K,
5468 + .type = MT_DEVICE,
5469 + },
5472 +static struct map_desc at91sam9rl_sram_desc[] __initdata = {
5474 + .pfn = __phys_to_pfn(AT91SAM9RL_SRAM_BASE),
5475 + .type = MT_DEVICE,
5479 +/* --------------------------------------------------------------------
5480 + * Clocks
5481 + * -------------------------------------------------------------------- */
5484 + * The peripheral clocks.
5485 + */
5486 +static struct clk pioA_clk = {
5487 + .name = "pioA_clk",
5488 + .pmc_mask = 1 << AT91SAM9RL_ID_PIOA,
5489 + .type = CLK_TYPE_PERIPHERAL,
5491 +static struct clk pioB_clk = {
5492 + .name = "pioB_clk",
5493 + .pmc_mask = 1 << AT91SAM9RL_ID_PIOB,
5494 + .type = CLK_TYPE_PERIPHERAL,
5496 +static struct clk pioC_clk = {
5497 + .name = "pioC_clk",
5498 + .pmc_mask = 1 << AT91SAM9RL_ID_PIOC,
5499 + .type = CLK_TYPE_PERIPHERAL,
5501 +static struct clk pioD_clk = {
5502 + .name = "pioD_clk",
5503 + .pmc_mask = 1 << AT91SAM9RL_ID_PIOD,
5504 + .type = CLK_TYPE_PERIPHERAL,
5506 +static struct clk usart0_clk = {
5507 + .name = "usart0_clk",
5508 + .pmc_mask = 1 << AT91SAM9RL_ID_US0,
5509 + .type = CLK_TYPE_PERIPHERAL,
5511 +static struct clk usart1_clk = {
5512 + .name = "usart1_clk",
5513 + .pmc_mask = 1 << AT91SAM9RL_ID_US1,
5514 + .type = CLK_TYPE_PERIPHERAL,
5516 +static struct clk usart2_clk = {
5517 + .name = "usart2_clk",
5518 + .pmc_mask = 1 << AT91SAM9RL_ID_US2,
5519 + .type = CLK_TYPE_PERIPHERAL,
5521 +static struct clk usart3_clk = {
5522 + .name = "usart3_clk",
5523 + .pmc_mask = 1 << AT91SAM9RL_ID_US3,
5524 + .type = CLK_TYPE_PERIPHERAL,
5526 +static struct clk mmc_clk = {
5527 + .name = "mci_clk",
5528 + .pmc_mask = 1 << AT91SAM9RL_ID_MCI,
5529 + .type = CLK_TYPE_PERIPHERAL,
5531 +static struct clk twi0_clk = {
5532 + .name = "twi0_clk",
5533 + .pmc_mask = 1 << AT91SAM9RL_ID_TWI0,
5534 + .type = CLK_TYPE_PERIPHERAL,
5536 +static struct clk twi1_clk = {
5537 + .name = "twi1_clk",
5538 + .pmc_mask = 1 << AT91SAM9RL_ID_TWI1,
5539 + .type = CLK_TYPE_PERIPHERAL,
5541 +static struct clk spi_clk = {
5542 + .name = "spi_clk",
5543 + .pmc_mask = 1 << AT91SAM9RL_ID_SPI,
5544 + .type = CLK_TYPE_PERIPHERAL,
5546 +static struct clk ssc0_clk = {
5547 + .name = "ssc0_clk",
5548 + .pmc_mask = 1 << AT91SAM9RL_ID_SSC0,
5549 + .type = CLK_TYPE_PERIPHERAL,
5551 +static struct clk ssc1_clk = {
5552 + .name = "ssc1_clk",
5553 + .pmc_mask = 1 << AT91SAM9RL_ID_SSC1,
5554 + .type = CLK_TYPE_PERIPHERAL,
5556 +static struct clk tc0_clk = {
5557 + .name = "tc0_clk",
5558 + .pmc_mask = 1 << AT91SAM9RL_ID_TC0,
5559 + .type = CLK_TYPE_PERIPHERAL,
5561 +static struct clk tc1_clk = {
5562 + .name = "tc1_clk",
5563 + .pmc_mask = 1 << AT91SAM9RL_ID_TC1,
5564 + .type = CLK_TYPE_PERIPHERAL,
5566 +static struct clk tc2_clk = {
5567 + .name = "tc2_clk",
5568 + .pmc_mask = 1 << AT91SAM9RL_ID_TC2,
5569 + .type = CLK_TYPE_PERIPHERAL,
5571 +static struct clk pwmc_clk = {
5572 + .name = "pwmc_clk",
5573 + .pmc_mask = 1 << AT91SAM9RL_ID_PWMC,
5574 + .type = CLK_TYPE_PERIPHERAL,
5576 +static struct clk tsc_clk = {
5577 + .name = "tsc_clk",
5578 + .pmc_mask = 1 << AT91SAM9RL_ID_TSC,
5579 + .type = CLK_TYPE_PERIPHERAL,
5581 +static struct clk dma_clk = {
5582 + .name = "dma_clk",
5583 + .pmc_mask = 1 << AT91SAM9RL_ID_DMA,
5584 + .type = CLK_TYPE_PERIPHERAL,
5586 +static struct clk udphs_clk = {
5587 + .name = "udphs_clk",
5588 + .pmc_mask = 1 << AT91SAM9RL_ID_UDPHS,
5589 + .type = CLK_TYPE_PERIPHERAL,
5591 +static struct clk lcdc_clk = {
5592 + .name = "lcdc_clk",
5593 + .pmc_mask = 1 << AT91SAM9RL_ID_LCDC,
5594 + .type = CLK_TYPE_PERIPHERAL,
5596 +static struct clk ac97_clk = {
5597 + .name = "ac97_clk",
5598 + .pmc_mask = 1 << AT91SAM9RL_ID_AC97C,
5599 + .type = CLK_TYPE_PERIPHERAL,
5602 +static struct clk *periph_clocks[] __initdata = {
5603 + &pioA_clk,
5604 + &pioB_clk,
5605 + &pioC_clk,
5606 + &pioD_clk,
5607 + &usart0_clk,
5608 + &usart1_clk,
5609 + &usart2_clk,
5610 + &usart3_clk,
5611 + &mmc_clk,
5612 + &twi0_clk,
5613 + &twi1_clk,
5614 + &spi_clk,
5615 + &ssc0_clk,
5616 + &ssc1_clk,
5617 + &tc0_clk,
5618 + &tc1_clk,
5619 + &tc2_clk,
5620 + &pwmc_clk,
5621 + &tsc_clk,
5622 + &dma_clk,
5623 + &udphs_clk,
5624 + &lcdc_clk,
5625 + &ac97_clk,
5626 + // irq0
5630 + * The two programmable clocks.
5631 + * You must configure pin multiplexing to bring these signals out.
5632 + */
5633 +static struct clk pck0 = {
5634 + .name = "pck0",
5635 + .pmc_mask = AT91_PMC_PCK0,
5636 + .type = CLK_TYPE_PROGRAMMABLE,
5637 + .id = 0,
5639 +static struct clk pck1 = {
5640 + .name = "pck1",
5641 + .pmc_mask = AT91_PMC_PCK1,
5642 + .type = CLK_TYPE_PROGRAMMABLE,
5643 + .id = 1,
5646 +static void __init at91sam9rl_register_clocks(void)
5648 + int i;
5650 + for (i = 0; i < ARRAY_SIZE(periph_clocks); i++)
5651 + clk_register(periph_clocks[i]);
5653 + clk_register(&pck0);
5654 + clk_register(&pck1);
5657 +/* --------------------------------------------------------------------
5658 + * GPIO
5659 + * -------------------------------------------------------------------- */
5661 +static struct at91_gpio_bank at91sam9rl_gpio[] = {
5663 + .id = AT91SAM9RL_ID_PIOA,
5664 + .offset = AT91_PIOA,
5665 + .clock = &pioA_clk,
5666 + }, {
5667 + .id = AT91SAM9RL_ID_PIOB,
5668 + .offset = AT91_PIOB,
5669 + .clock = &pioB_clk,
5670 + }, {
5671 + .id = AT91SAM9RL_ID_PIOC,
5672 + .offset = AT91_PIOC,
5673 + .clock = &pioC_clk,
5674 + }, {
5675 + .id = AT91SAM9RL_ID_PIOD,
5676 + .offset = AT91_PIOD,
5677 + .clock = &pioD_clk,
5681 +static void at91sam9rl_reset(void)
5683 + at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
5687 +/* --------------------------------------------------------------------
5688 + * Timer/Counter library initialization
5689 + * -------------------------------------------------------------------- */
5690 +#ifdef CONFIG_ATMEL_TCLIB
5692 +#include "tclib.h"
5694 +static struct atmel_tcblock at91sam9rl_tcblocks[] = {
5695 + [0] = {
5696 + .physaddr = AT91SAM9RL_BASE_TCB0,
5697 + .irq = { AT91SAM9RL_ID_TC0, AT91SAM9RL_ID_TC1, AT91SAM9RL_ID_TC2 },
5698 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
5702 +#define at91sam9rl_tc_init() atmel_tc_init(at91sam9rl_tcblocks, ARRAY_SIZE(at91sam9rl_tcblocks))
5704 +#else
5705 +#define at91sam9rl_tc_init() do {} while(0)
5706 +#endif
5709 +/* --------------------------------------------------------------------
5710 + * AT91SAM9RL processor initialization
5711 + * -------------------------------------------------------------------- */
5713 +void __init at91sam9rl_initialize(unsigned long main_clock)
5715 + unsigned long cidr, sram_size;
5717 + /* Map peripherals */
5718 + iotable_init(at91sam9rl_io_desc, ARRAY_SIZE(at91sam9rl_io_desc));
5720 + cidr = at91_sys_read(AT91_DBGU_CIDR);
5722 + switch (cidr & AT91_CIDR_SRAMSIZ) {
5723 + case AT91_CIDR_SRAMSIZ_32K:
5724 + sram_size = 2 * SZ_16K;
5725 + break;
5726 + case AT91_CIDR_SRAMSIZ_16K:
5727 + default:
5728 + sram_size = SZ_16K;
5731 + at91sam9rl_sram_desc->virtual = AT91_IO_VIRT_BASE - sram_size;
5732 + at91sam9rl_sram_desc->length = sram_size;
5734 + /* Map SRAM */
5735 + iotable_init(at91sam9rl_sram_desc, ARRAY_SIZE(at91sam9rl_sram_desc));
5737 + at91_arch_reset = at91sam9rl_reset;
5738 + at91_extern_irq = (1 << AT91SAM9RL_ID_IRQ0);
5740 + /* Init clock subsystem */
5741 + at91_clock_init(main_clock);
5743 + /* Register the processor-specific clocks */
5744 + at91sam9rl_register_clocks();
5746 + /* Register GPIO subsystem */
5747 + at91_gpio_init(at91sam9rl_gpio, 4);
5749 + /* Initialize the Timer/Counter blocks */
5750 + at91sam9rl_tc_init();
5753 +/* --------------------------------------------------------------------
5754 + * Interrupt initialization
5755 + * -------------------------------------------------------------------- */
5758 + * The default interrupt priority levels (0 = lowest, 7 = highest).
5759 + */
5760 +static unsigned int at91sam9rl_default_irq_priority[NR_AIC_IRQS] __initdata = {
5761 + 7, /* Advanced Interrupt Controller */
5762 + 7, /* System Peripherals */
5763 + 1, /* Parallel IO Controller A */
5764 + 1, /* Parallel IO Controller B */
5765 + 1, /* Parallel IO Controller C */
5766 + 1, /* Parallel IO Controller D */
5767 + 5, /* USART 0 */
5768 + 5, /* USART 1 */
5769 + 5, /* USART 2 */
5770 + 5, /* USART 3 */
5771 + 0, /* Multimedia Card Interface */
5772 + 6, /* Two-Wire Interface 0 */
5773 + 6, /* Two-Wire Interface 1 */
5774 + 5, /* Serial Peripheral Interface */
5775 + 4, /* Serial Synchronous Controller 0 */
5776 + 4, /* Serial Synchronous Controller 1 */
5777 + 0, /* Timer Counter 0 */
5778 + 0, /* Timer Counter 1 */
5779 + 0, /* Timer Counter 2 */
5780 + 0,
5781 + 0, /* Touch Screen Controller */
5782 + 0, /* DMA Controller */
5783 + 2, /* USB Device High speed port */
5784 + 2, /* LCD Controller */
5785 + 6, /* AC97 Controller */
5786 + 0,
5787 + 0,
5788 + 0,
5789 + 0,
5790 + 0,
5791 + 0,
5792 + 0, /* Advanced Interrupt Controller */
5795 +void __init at91sam9rl_init_interrupts(unsigned int priority[NR_AIC_IRQS])
5797 + if (!priority)
5798 + priority = at91sam9rl_default_irq_priority;
5800 + /* Initialize the AIC interrupt controller */
5801 + at91_aic_init(priority);
5803 + /* Enable GPIO interrupts */
5804 + at91_gpio_irq_setup();
5806 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/at91sam9rl_devices.c linux-2.6-stable/arch/arm/mach-at91/at91sam9rl_devices.c
5807 --- linux-2.6.21/arch/arm/mach-at91/at91sam9rl_devices.c Thu Jan 1 02:00:00 1970
5808 +++ linux-2.6-stable/arch/arm/mach-at91/at91sam9rl_devices.c Fri May 11 16:03:25 2007
5809 @@ -0,0 +1,660 @@
5811 + * Copyright (C) 2007 Atmel Corporation
5813 + * This file is subject to the terms and conditions of the GNU General Public
5814 + * License. See the file COPYING in the main directory of this archive for
5815 + * more details.
5816 + */
5818 +#include <asm/mach/arch.h>
5819 +#include <asm/mach/map.h>
5821 +#include <linux/platform_device.h>
5822 +#include <linux/fb.h>
5824 +#include <video/atmel_lcdc.h>
5826 +#include <asm/arch/board.h>
5827 +#include <asm/arch/gpio.h>
5828 +#include <asm/arch/at91sam9rl.h>
5829 +#include <asm/arch/at91sam9rl_matrix.h>
5830 +#include <asm/arch/at91sam926x_mc.h>
5832 +#include "generic.h"
5834 +#define SZ_512 0x00000200
5835 +#define SZ_256 0x00000100
5836 +#define SZ_16 0x00000010
5839 +/* --------------------------------------------------------------------
5840 + * MMC / SD
5841 + * -------------------------------------------------------------------- */
5843 +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
5844 +static u64 mmc_dmamask = 0xffffffffUL;
5845 +static struct at91_mmc_data mmc_data;
5847 +static struct resource mmc_resources[] = {
5848 + [0] = {
5849 + .start = AT91SAM9RL_BASE_MCI,
5850 + .end = AT91SAM9RL_BASE_MCI + SZ_16K - 1,
5851 + .flags = IORESOURCE_MEM,
5852 + },
5853 + [1] = {
5854 + .start = AT91SAM9RL_ID_MCI,
5855 + .end = AT91SAM9RL_ID_MCI,
5856 + .flags = IORESOURCE_IRQ,
5857 + },
5860 +static struct platform_device at91sam9rl_mmc_device = {
5861 + .name = "at91_mci",
5862 + .id = -1,
5863 + .dev = {
5864 + .dma_mask = &mmc_dmamask,
5865 + .coherent_dma_mask = 0xffffffff,
5866 + .platform_data = &mmc_data,
5867 + },
5868 + .resource = mmc_resources,
5869 + .num_resources = ARRAY_SIZE(mmc_resources),
5872 +void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
5874 + if (!data)
5875 + return;
5877 + /* input/irq */
5878 + if (data->det_pin) {
5879 + at91_set_gpio_input(data->det_pin, 1);
5880 + at91_set_deglitch(data->det_pin, 1);
5882 + if (data->wp_pin)
5883 + at91_set_gpio_input(data->wp_pin, 1);
5884 + if (data->vcc_pin)
5885 + at91_set_gpio_output(data->vcc_pin, 0);
5887 + /* CLK */
5888 + at91_set_A_periph(AT91_PIN_PA2, 0);
5890 + /* CMD */
5891 + at91_set_A_periph(AT91_PIN_PA1, 1);
5893 + /* DAT0, maybe DAT1..DAT3 */
5894 + at91_set_A_periph(AT91_PIN_PA0, 1);
5895 + if (data->wire4) {
5896 + at91_set_A_periph(AT91_PIN_PA3, 1);
5897 + at91_set_A_periph(AT91_PIN_PA4, 1);
5898 + at91_set_A_periph(AT91_PIN_PA5, 1);
5901 + mmc_data = *data;
5902 + platform_device_register(&at91sam9rl_mmc_device);
5904 +#else
5905 +void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
5906 +#endif
5909 +/* --------------------------------------------------------------------
5910 + * NAND / SmartMedia
5911 + * -------------------------------------------------------------------- */
5913 +#if defined(CONFIG_MTD_NAND_AT91) || defined(CONFIG_MTD_NAND_AT91_MODULE)
5914 +static struct at91_nand_data nand_data;
5916 +#define NAND_BASE AT91_CHIPSELECT_3
5918 +static struct resource nand_resources[] = {
5920 + .start = NAND_BASE,
5921 + .end = NAND_BASE + SZ_256M - 1,
5922 + .flags = IORESOURCE_MEM,
5926 +static struct platform_device at91_nand_device = {
5927 + .name = "at91_nand",
5928 + .id = -1,
5929 + .dev = {
5930 + .platform_data = &nand_data,
5931 + },
5932 + .resource = nand_resources,
5933 + .num_resources = ARRAY_SIZE(nand_resources),
5936 +void __init at91_add_device_nand(struct at91_nand_data *data)
5938 + unsigned long csa;
5940 + if (!data)
5941 + return;
5943 + csa = at91_sys_read(AT91_MATRIX_EBICSA);
5944 + at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
5946 + /* set the bus interface characteristics */
5947 + at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0)
5948 + | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0));
5950 + at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(2) | AT91_SMC_NCS_WRPULSE_(5)
5951 + | AT91_SMC_NRDPULSE_(2) | AT91_SMC_NCS_RDPULSE_(5));
5953 + at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7));
5955 + at91_sys_write(AT91_SMC_MODE(3), AT91_SMC_DBW_8 | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(1));
5957 + /* enable pin */
5958 + if (data->enable_pin)
5959 + at91_set_gpio_output(data->enable_pin, 1);
5961 + /* ready/busy pin */
5962 + if (data->rdy_pin)
5963 + at91_set_gpio_input(data->rdy_pin, 1);
5965 + /* card detect pin */
5966 + if (data->det_pin)
5967 + at91_set_gpio_input(data->det_pin, 1);
5969 + at91_set_A_periph(AT91_PIN_PB4, 0); /* NANDOE */
5970 + at91_set_A_periph(AT91_PIN_PB5, 0); /* NANDWE */
5972 + nand_data = *data;
5973 + platform_device_register(&at91_nand_device);
5976 +#else
5977 +void __init at91_add_device_nand(struct at91_nand_data *data) {}
5978 +#endif
5981 +/* --------------------------------------------------------------------
5982 + * TWI (i2c)
5983 + * -------------------------------------------------------------------- */
5985 +#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
5987 +static struct resource twi_resources[] = {
5988 + [0] = {
5989 + .start = AT91SAM9RL_BASE_TWI0,
5990 + .end = AT91SAM9RL_BASE_TWI0 + SZ_16K - 1,
5991 + .flags = IORESOURCE_MEM,
5992 + },
5993 + [1] = {
5994 + .start = AT91SAM9RL_ID_TWI0,
5995 + .end = AT91SAM9RL_ID_TWI0,
5996 + .flags = IORESOURCE_IRQ,
5997 + },
6000 +static struct platform_device at91sam9rl_twi_device = {
6001 + .name = "at91_i2c",
6002 + .id = -1,
6003 + .resource = twi_resources,
6004 + .num_resources = ARRAY_SIZE(twi_resources),
6007 +void __init at91_add_device_i2c(void)
6009 + /* pins used for TWI interface */
6010 + at91_set_A_periph(AT91_PIN_PA23, 0); /* TWD */
6011 + at91_set_multi_drive(AT91_PIN_PA23, 1);
6013 + at91_set_A_periph(AT91_PIN_PA24, 0); /* TWCK */
6014 + at91_set_multi_drive(AT91_PIN_PA24, 1);
6016 + platform_device_register(&at91sam9rl_twi_device);
6018 +#else
6019 +void __init at91_add_device_i2c(void) {}
6020 +#endif
6023 +/* --------------------------------------------------------------------
6024 + * SPI
6025 + * -------------------------------------------------------------------- */
6027 +#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
6028 +static u64 spi_dmamask = 0xffffffffUL;
6030 +static struct resource spi_resources[] = {
6031 + [0] = {
6032 + .start = AT91SAM9RL_BASE_SPI,
6033 + .end = AT91SAM9RL_BASE_SPI + SZ_16K - 1,
6034 + .flags = IORESOURCE_MEM,
6035 + },
6036 + [1] = {
6037 + .start = AT91SAM9RL_ID_SPI,
6038 + .end = AT91SAM9RL_ID_SPI,
6039 + .flags = IORESOURCE_IRQ,
6040 + },
6043 +static struct platform_device at91sam9rl_spi_device = {
6044 + .name = "atmel_spi",
6045 + .id = 0,
6046 + .dev = {
6047 + .dma_mask = &spi_dmamask,
6048 + .coherent_dma_mask = 0xffffffff,
6049 + },
6050 + .resource = spi_resources,
6051 + .num_resources = ARRAY_SIZE(spi_resources),
6054 +static const unsigned spi_standard_cs[4] = { AT91_PIN_PA28, AT91_PIN_PB7, AT91_PIN_PD8, AT91_PIN_PD9 };
6057 +void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
6059 + int i;
6060 + unsigned long cs_pin;
6062 + at91_set_A_periph(AT91_PIN_PA25, 0); /* MISO */
6063 + at91_set_A_periph(AT91_PIN_PA26, 0); /* MOSI */
6064 + at91_set_A_periph(AT91_PIN_PA27, 0); /* SPCK */
6066 + /* Enable SPI chip-selects */
6067 + for (i = 0; i < nr_devices; i++) {
6068 + if (devices[i].controller_data)
6069 + cs_pin = (unsigned long) devices[i].controller_data;
6070 + else
6071 + cs_pin = spi_standard_cs[devices[i].chip_select];
6073 + /* enable chip-select pin */
6074 + at91_set_gpio_output(cs_pin, 1);
6076 + /* pass chip-select pin to driver */
6077 + devices[i].controller_data = (void *) cs_pin;
6080 + spi_register_board_info(devices, nr_devices);
6081 + platform_device_register(&at91sam9rl_spi_device);
6083 +#else
6084 +void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) {}
6085 +#endif
6088 +/* --------------------------------------------------------------------
6089 + * LCD Controller
6090 + * -------------------------------------------------------------------- */
6092 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
6093 +static u64 lcdc_dmamask = 0xffffffffUL;
6094 +static struct atmel_lcdfb_info lcdc_data;
6096 +static struct resource lcdc_resources[] = {
6097 + [0] = {
6098 + .start = AT91SAM9RL_LCDC_BASE,
6099 + .end = AT91SAM9RL_LCDC_BASE + SZ_4K - 1,
6100 + .flags = IORESOURCE_MEM,
6101 + },
6102 + [1] = {
6103 + .start = AT91SAM9RL_ID_LCDC,
6104 + .end = AT91SAM9RL_ID_LCDC,
6105 + .flags = IORESOURCE_IRQ,
6106 + },
6107 +#if defined(CONFIG_FB_INTSRAM)
6108 + [2] = {
6109 + .start = AT91SAM9RL_SRAM_BASE,
6110 + .end = AT91SAM9RL_SRAM_BASE + AT91SAM9RL_SRAM_SIZE - 1,
6111 + .flags = IORESOURCE_MEM,
6112 + },
6113 +#endif
6116 +static struct platform_device at91_lcdc_device = {
6117 + .name = "atmel_lcdfb",
6118 + .id = 0,
6119 + .dev = {
6120 + .dma_mask = &lcdc_dmamask,
6121 + .coherent_dma_mask = 0xffffffff,
6122 + .platform_data = &lcdc_data,
6123 + },
6124 + .resource = lcdc_resources,
6125 + .num_resources = ARRAY_SIZE(lcdc_resources),
6128 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
6130 + if (!data) {
6131 + return;
6134 +#warning "Check this"
6135 + at91_set_B_periph(AT91_PIN_PC5, 0); /* LCDHSYNC */
6136 + at91_set_B_periph(AT91_PIN_PC6, 0); /* LCDDOTCK */
6137 + at91_set_B_periph(AT91_PIN_PC7, 0); /* LCDDEN */
6138 + at91_set_B_periph(AT91_PIN_PC3, 0); /* LCDCC */
6139 + at91_set_B_periph(AT91_PIN_PC9, 0); /* LCDD3 */
6140 + at91_set_B_periph(AT91_PIN_PC10, 0); /* LCDD4 */
6141 + at91_set_B_periph(AT91_PIN_PC11, 0); /* LCDD5 */
6142 + at91_set_B_periph(AT91_PIN_PC12, 0); /* LCDD6 */
6143 + at91_set_B_periph(AT91_PIN_PC13, 0); /* LCDD7 */
6144 + at91_set_B_periph(AT91_PIN_PC15, 0); /* LCDD11 */
6145 + at91_set_B_periph(AT91_PIN_PC16, 0); /* LCDD12 */
6146 + at91_set_B_periph(AT91_PIN_PC17, 0); /* LCDD13 */
6147 + at91_set_B_periph(AT91_PIN_PC18, 0); /* LCDD14 */
6148 + at91_set_B_periph(AT91_PIN_PC19, 0); /* LCDD15 */
6149 + at91_set_B_periph(AT91_PIN_PC20, 0); /* LCDD18 */
6150 + at91_set_B_periph(AT91_PIN_PC21, 0); /* LCDD19 */
6151 + at91_set_B_periph(AT91_PIN_PC22, 0); /* LCDD20 */
6152 + at91_set_B_periph(AT91_PIN_PC23, 0); /* LCDD21 */
6153 + at91_set_B_periph(AT91_PIN_PC24, 0); /* LCDD22 */
6154 + at91_set_B_periph(AT91_PIN_PC25, 0); /* LCDD23 */
6156 + lcdc_data = *data;
6157 + platform_device_register(&at91_lcdc_device);
6159 +#else
6160 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
6161 +#endif
6164 +/* --------------------------------------------------------------------
6165 + * LEDs
6166 + * -------------------------------------------------------------------- */
6168 +#if defined(CONFIG_LEDS)
6169 +u8 at91_leds_cpu;
6170 +u8 at91_leds_timer;
6172 +void __init at91_init_leds(u8 cpu_led, u8 timer_led)
6174 + /* Enable GPIO to access the LEDs */
6175 + at91_set_gpio_output(cpu_led, 1);
6176 + at91_set_gpio_output(timer_led, 1);
6178 + at91_leds_cpu = cpu_led;
6179 + at91_leds_timer = timer_led;
6181 +#else
6182 +void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
6183 +#endif
6186 +#if defined(CONFIG_NEW_LEDS)
6188 +static struct platform_device at91_leds = {
6189 + .name = "at91_leds",
6190 + .id = -1,
6193 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
6195 + if (!nr)
6196 + return;
6198 + at91_leds.dev.platform_data = leds;
6200 + for ( ; nr; nr--, leds++) {
6201 + leds->index = nr; /* first record stores number of leds */
6202 + at91_set_gpio_output(leds->gpio, (leds->flags & 1) == 0);
6205 + platform_device_register(&at91_leds);
6207 +#else
6208 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
6209 +#endif
6212 +/* --------------------------------------------------------------------
6213 + * UART
6214 + * -------------------------------------------------------------------- */
6216 +#if defined(CONFIG_SERIAL_ATMEL)
6217 +static struct resource dbgu_resources[] = {
6218 + [0] = {
6219 + .start = AT91_VA_BASE_SYS + AT91_DBGU,
6220 + .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
6221 + .flags = IORESOURCE_MEM,
6222 + },
6223 + [1] = {
6224 + .start = AT91_ID_SYS,
6225 + .end = AT91_ID_SYS,
6226 + .flags = IORESOURCE_IRQ,
6227 + },
6230 +static struct atmel_uart_data dbgu_data = {
6231 + .use_dma_tx = 0,
6232 + .use_dma_rx = 0, /* DBGU not capable of receive DMA */
6233 + .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
6236 +static struct platform_device at91sam9rl_dbgu_device = {
6237 + .name = "atmel_usart",
6238 + .id = 0,
6239 + .dev = {
6240 + .platform_data = &dbgu_data,
6241 + .coherent_dma_mask = 0xffffffff,
6242 + },
6243 + .resource = dbgu_resources,
6244 + .num_resources = ARRAY_SIZE(dbgu_resources),
6247 +static inline void configure_dbgu_pins(void)
6249 + at91_set_A_periph(AT91_PIN_PA21, 0); /* DRXD */
6250 + at91_set_A_periph(AT91_PIN_PA22, 1); /* DTXD */
6253 +static struct resource uart0_resources[] = {
6254 + [0] = {
6255 + .start = AT91SAM9RL_BASE_US0,
6256 + .end = AT91SAM9RL_BASE_US0 + SZ_16K - 1,
6257 + .flags = IORESOURCE_MEM,
6258 + },
6259 + [1] = {
6260 + .start = AT91SAM9RL_ID_US0,
6261 + .end = AT91SAM9RL_ID_US0,
6262 + .flags = IORESOURCE_IRQ,
6263 + },
6266 +static struct atmel_uart_data uart0_data = {
6267 + .use_dma_tx = 1,
6268 + .use_dma_rx = 1,
6271 +static struct platform_device at91sam9rl_uart0_device = {
6272 + .name = "atmel_usart",
6273 + .id = 1,
6274 + .dev = {
6275 + .platform_data = &uart0_data,
6276 + .coherent_dma_mask = 0xffffffff,
6277 + },
6278 + .resource = uart0_resources,
6279 + .num_resources = ARRAY_SIZE(uart0_resources),
6282 +static inline void configure_usart0_pins(void)
6284 + at91_set_A_periph(AT91_PIN_PA6, 1); /* TXD0 */
6285 + at91_set_A_periph(AT91_PIN_PA7, 0); /* RXD0 */
6286 + at91_set_A_periph(AT91_PIN_PA9, 0); /* RTS0 */
6287 + at91_set_A_periph(AT91_PIN_PA10, 0); /* CTS0 */
6290 +static struct resource uart1_resources[] = {
6291 + [0] = {
6292 + .start = AT91SAM9RL_BASE_US1,
6293 + .end = AT91SAM9RL_BASE_US1 + SZ_16K - 1,
6294 + .flags = IORESOURCE_MEM,
6295 + },
6296 + [1] = {
6297 + .start = AT91SAM9RL_ID_US1,
6298 + .end = AT91SAM9RL_ID_US1,
6299 + .flags = IORESOURCE_IRQ,
6300 + },
6303 +static struct atmel_uart_data uart1_data = {
6304 + .use_dma_tx = 1,
6305 + .use_dma_rx = 1,
6308 +static struct platform_device at91sam9rl_uart1_device = {
6309 + .name = "atmel_usart",
6310 + .id = 2,
6311 + .dev = {
6312 + .platform_data = &uart1_data,
6313 + .coherent_dma_mask = 0xffffffff,
6314 + },
6315 + .resource = uart1_resources,
6316 + .num_resources = ARRAY_SIZE(uart1_resources),
6319 +static inline void configure_usart1_pins(void)
6321 + at91_set_A_periph(AT91_PIN_PA11, 1); /* TXD1 */
6322 + at91_set_A_periph(AT91_PIN_PA12, 0); /* RXD1 */
6325 +static struct resource uart2_resources[] = {
6326 + [0] = {
6327 + .start = AT91SAM9RL_BASE_US2,
6328 + .end = AT91SAM9RL_BASE_US2 + SZ_16K - 1,
6329 + .flags = IORESOURCE_MEM,
6330 + },
6331 + [1] = {
6332 + .start = AT91SAM9RL_ID_US2,
6333 + .end = AT91SAM9RL_ID_US2,
6334 + .flags = IORESOURCE_IRQ,
6335 + },
6338 +static struct atmel_uart_data uart2_data = {
6339 + .use_dma_tx = 1,
6340 + .use_dma_rx = 1,
6343 +static struct platform_device at91sam9rl_uart2_device = {
6344 + .name = "atmel_usart",
6345 + .id = 3,
6346 + .dev = {
6347 + .platform_data = &uart2_data,
6348 + .coherent_dma_mask = 0xffffffff,
6349 + },
6350 + .resource = uart2_resources,
6351 + .num_resources = ARRAY_SIZE(uart2_resources),
6354 +static inline void configure_usart2_pins(void)
6356 + at91_set_A_periph(AT91_PIN_PA13, 1); /* TXD2 */
6357 + at91_set_A_periph(AT91_PIN_PA14, 0); /* RXD2 */
6360 +static struct resource uart3_resources[] = {
6361 + [0] = {
6362 + .start = AT91SAM9RL_BASE_US3,
6363 + .end = AT91SAM9RL_BASE_US3 + SZ_16K - 1,
6364 + .flags = IORESOURCE_MEM,
6365 + },
6366 + [1] = {
6367 + .start = AT91SAM9RL_ID_US3,
6368 + .end = AT91SAM9RL_ID_US3,
6369 + .flags = IORESOURCE_IRQ,
6370 + },
6373 +static struct atmel_uart_data uart3_data = {
6374 + .use_dma_tx = 1,
6375 + .use_dma_rx = 1,
6378 +static struct platform_device at91sam9rl_uart3_device = {
6379 + .name = "atmel_usart",
6380 + .id = 4,
6381 + .dev = {
6382 + .platform_data = &uart3_data,
6383 + .coherent_dma_mask = 0xffffffff,
6384 + },
6385 + .resource = uart3_resources,
6386 + .num_resources = ARRAY_SIZE(uart3_resources),
6389 +static inline void configure_usart3_pins(void)
6391 + at91_set_A_periph(AT91_PIN_PB0, 1); /* TXD3 */
6392 + at91_set_A_periph(AT91_PIN_PB1, 0); /* RXD3 */
6395 +struct platform_device *at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */
6396 +struct platform_device *atmel_default_console_device; /* the serial console device */
6398 +void __init at91_init_serial(struct at91_uart_config *config)
6400 + int i;
6402 + /* Fill in list of supported UARTs */
6403 + for (i = 0; i < config->nr_tty; i++) {
6404 + switch (config->tty_map[i]) {
6405 + case 0:
6406 + configure_usart0_pins();
6407 + at91_uarts[i] = &at91sam9rl_uart0_device;
6408 + at91_clock_associate("usart0_clk", &at91sam9rl_uart0_device.dev, "usart");
6409 + break;
6410 + case 1:
6411 + configure_usart1_pins();
6412 + at91_uarts[i] = &at91sam9rl_uart1_device;
6413 + at91_clock_associate("usart1_clk", &at91sam9rl_uart1_device.dev, "usart");
6414 + break;
6415 + case 2:
6416 + configure_usart2_pins();
6417 + at91_uarts[i] = &at91sam9rl_uart2_device;
6418 + at91_clock_associate("usart2_clk", &at91sam9rl_uart2_device.dev, "usart");
6419 + break;
6420 + case 3:
6421 + configure_usart3_pins();
6422 + at91_uarts[i] = &at91sam9rl_uart3_device;
6423 + at91_clock_associate("usart3_clk", &at91sam9rl_uart3_device.dev, "usart");
6424 + break;
6425 + case 4:
6426 + configure_dbgu_pins();
6427 + at91_uarts[i] = &at91sam9rl_dbgu_device;
6428 + at91_clock_associate("mck", &at91sam9rl_dbgu_device.dev, "usart");
6429 + break;
6430 + default:
6431 + continue;
6433 + at91_uarts[i]->id = i; /* update ID number to mapped ID */
6436 + /* Set serial console device */
6437 + if (config->console_tty < ATMEL_MAX_UART)
6438 + atmel_default_console_device = at91_uarts[config->console_tty];
6439 + if (!atmel_default_console_device)
6440 + printk(KERN_INFO "AT91: No default serial console defined.\n");
6443 +void __init at91_add_device_serial(void)
6445 + int i;
6447 + for (i = 0; i < ATMEL_MAX_UART; i++) {
6448 + if (at91_uarts[i])
6449 + platform_device_register(at91_uarts[i]);
6452 +#else
6453 +void __init at91_init_serial(struct at91_uart_config *config) {}
6454 +void __init at91_add_device_serial(void) {}
6455 +#endif
6458 +/* -------------------------------------------------------------------- */
6461 + * These devices are always present and don't need any board-specific
6462 + * setup.
6463 + */
6464 +static int __init at91_add_standard_devices(void)
6466 + return 0;
6469 +arch_initcall(at91_add_standard_devices);
6470 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-cam60.c linux-2.6-stable/arch/arm/mach-at91/board-cam60.c
6471 --- linux-2.6.21/arch/arm/mach-at91/board-cam60.c Thu Jan 1 02:00:00 1970
6472 +++ linux-2.6-stable/arch/arm/mach-at91/board-cam60.c Tue May 8 12:13:30 2007
6473 @@ -0,0 +1,148 @@
6475 + * KwikByte CAM60
6477 + * based on board-sam9260ek.c
6478 + * Copyright (C) 2005 SAN People
6479 + * Copyright (C) 2006 Atmel
6481 + * This program is free software; you can redistribute it and/or modify
6482 + * it under the terms of the GNU General Public License as published by
6483 + * the Free Software Foundation; either version 2 of the License, or
6484 + * (at your option) any later version.
6486 + * This program is distributed in the hope that it will be useful,
6487 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
6488 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6489 + * GNU General Public License for more details.
6491 + * You should have received a copy of the GNU General Public License
6492 + * along with this program; if not, write to the Free Software
6493 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6494 + */
6496 +#include <linux/types.h>
6497 +#include <linux/init.h>
6498 +#include <linux/mm.h>
6499 +#include <linux/module.h>
6500 +#include <linux/platform_device.h>
6501 +#include <linux/spi/spi.h>
6502 +#include <linux/spi/flash.h>
6504 +#include <asm/hardware.h>
6505 +#include <asm/setup.h>
6506 +#include <asm/mach-types.h>
6507 +#include <asm/irq.h>
6509 +#include <asm/mach/arch.h>
6510 +#include <asm/mach/map.h>
6511 +#include <asm/mach/irq.h>
6513 +#include <asm/arch/board.h>
6514 +#include <asm/arch/gpio.h>
6515 +#include <asm/arch/at91sam926x_mc.h>
6517 +#include "generic.h"
6521 + * Serial port configuration.
6522 + * 0 .. 5 = USART0 .. USART5
6523 + * 6 = DBGU
6524 + */
6525 +static struct at91_uart_config __initdata cam60_uart_config = {
6526 + .console_tty = 0, /* ttyS0 */
6527 + .nr_tty = 1,
6528 + .tty_map = { 6, -1, -1, -1, -1, -1, -1 } /* ttyS0, ..., ttyS6 */
6531 +static void __init cam60_map_io(void)
6533 + /* Initialize processor: 10 MHz crystal */
6534 + at91sam9260_initialize(10000000);
6536 + /* Setup the serial ports and console */
6537 + at91_init_serial(&cam60_uart_config);
6540 +static void __init cam60_init_irq(void)
6542 + at91sam9260_init_interrupts(NULL);
6547 + * SPI devices.
6548 + */
6549 +#if defined(CONFIG_MTD_DATAFLASH)
6550 +static struct mtd_partition __initdata cam60_spi_partitions[] = {
6552 + .name = "BOOT1",
6553 + .offset = 0,
6554 + .size = 4 * 1056,
6555 + },
6557 + .name = "BOOT2",
6558 + .offset = MTDPART_OFS_NXTBLK,
6559 + .size = 256 * 1056,
6560 + },
6562 + .name = "kernel",
6563 + .offset = MTDPART_OFS_NXTBLK,
6564 + .size = 2222 * 1056,
6565 + },
6567 + .name = "file system",
6568 + .offset = MTDPART_OFS_NXTBLK,
6569 + .size = MTDPART_SIZ_FULL,
6570 + },
6573 +static struct flash_platform_data __initdata cam60_spi_flash_platform_data = {
6574 + .name = "spi_flash",
6575 + .parts = cam60_spi_partitions,
6576 + .nr_parts = ARRAY_SIZE(cam60_spi_partitions)
6578 +#endif
6580 +static struct spi_board_info cam60_spi_devices[] = {
6581 +#if defined(CONFIG_MTD_DATAFLASH)
6582 + { /* DataFlash chip */
6583 + .modalias = "mtd_dataflash",
6584 + .chip_select = 0,
6585 + .max_speed_hz = 15 * 1000 * 1000,
6586 + .bus_num = 0,
6587 + .platform_data = &cam60_spi_flash_platform_data
6588 + },
6589 +#endif
6594 + * MACB Ethernet device
6595 + */
6596 +static struct __initdata at91_eth_data cam60_macb_data = {
6597 + .phy_irq_pin = AT91_PIN_PB5,
6598 + .is_rmii = 0,
6602 +static void __init cam60_board_init(void)
6604 + /* Serial */
6605 + at91_add_device_serial();
6606 + /* SPI */
6607 + at91_add_device_spi(cam60_spi_devices, ARRAY_SIZE(cam60_spi_devices));
6608 + /* Ethernet */
6609 + at91_add_device_eth(&cam60_macb_data);
6612 +MACHINE_START(CAM60, "KwikByte CAM60")
6613 + /* Maintainer: KwikByte */
6614 + .phys_io = AT91_BASE_SYS,
6615 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
6616 + .boot_params = AT91_SDRAM_BASE + 0x100,
6617 + .timer = &at91sam926x_timer,
6618 + .map_io = cam60_map_io,
6619 + .init_irq = cam60_init_irq,
6620 + .init_machine = cam60_board_init,
6621 +MACHINE_END
6622 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-chub.c linux-2.6-stable/arch/arm/mach-at91/board-chub.c
6623 --- linux-2.6.21/arch/arm/mach-at91/board-chub.c Thu Jan 1 02:00:00 1970
6624 +++ linux-2.6-stable/arch/arm/mach-at91/board-chub.c Tue May 8 12:13:30 2007
6625 @@ -0,0 +1,132 @@
6627 + * linux/arch/arm/mach-at91/board-chub.c
6629 + * Copyright (C) 2005 SAN People, adapted for Promwad Chub board
6630 + * by Kuten Ivan
6632 + * This program is free software; you can redistribute it and/or modify
6633 + * it under the terms of the GNU General Public License as published by
6634 + * the Free Software Foundation; either version 2 of the License, or
6635 + * (at your option) any later version.
6637 + * This program is distributed in the hope that it will be useful,
6638 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
6639 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6640 + * GNU General Public License for more details.
6642 + * You should have received a copy of the GNU General Public License
6643 + * along with this program; if not, write to the Free Software
6644 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6645 + */
6647 +#include <linux/types.h>
6648 +#include <linux/init.h>
6649 +#include <linux/mm.h>
6650 +#include <linux/module.h>
6651 +#include <linux/platform_device.h>
6653 +#include <asm/hardware.h>
6654 +#include <asm/setup.h>
6655 +#include <asm/mach-types.h>
6656 +#include <asm/irq.h>
6658 +#include <asm/mach/arch.h>
6659 +#include <asm/mach/map.h>
6660 +#include <asm/mach/irq.h>
6662 +#include <asm/arch/board.h>
6663 +#include <asm/arch/gpio.h>
6665 +#include "generic.h"
6668 + * Serial port configuration.
6669 + * 0 .. 3 = USART0 .. USART3
6670 + * 4 = DBGU
6671 + */
6672 +static struct at91_uart_config __initdata chub_uart_config = {
6673 + .console_tty = 0, /* ttyS0 */
6674 + .nr_tty = 5,
6675 + .tty_map = { 4, 0, 1, 2, 3 } /* ttyS0, ..., ttyS4 */
6678 +static void __init chub_init_irq(void)
6680 + at91rm9200_init_interrupts(NULL);
6683 +static void __init chub_map_io(void)
6685 + /* Initialize clocks: 18.432 MHz crystal */
6686 + at91rm9200_initialize(18432000, AT91RM9200_PQFP);
6688 + /* Setup the serial ports and console */
6689 + at91_init_serial(&chub_uart_config);
6692 +static struct at91_eth_data __initdata chub_eth_data = {
6693 + .phy_irq_pin = AT91_PIN_PB29,
6694 + .is_rmii = 0,
6697 +static struct mtd_partition __initdata chub_nand_partition[] = {
6699 + .name = "NAND Partition 1",
6700 + .offset = 0,
6701 + .size = MTDPART_SIZ_FULL,
6702 + },
6705 +static struct mtd_partition *nand_partitions(int size, int *num_partitions)
6707 + *num_partitions = ARRAY_SIZE(chub_nand_partition);
6708 + return chub_nand_partition;
6711 +static struct at91_nand_data __initdata chub_nand_data = {
6712 + .ale = 22,
6713 + .cle = 21,
6714 + .enable_pin = AT91_PIN_PA27,
6715 + .partition_info = nand_partitions,
6718 +static struct spi_board_info chub_spi_devices[] = {
6719 + { /* DataFlash chip */
6720 + .modalias = "mtd_dataflash",
6721 + .chip_select = 0,
6722 + .max_speed_hz = 15 * 1000 * 1000,
6723 + },
6726 +static void __init chub_board_init(void)
6728 + /* Serial */
6729 + at91_add_device_serial();
6730 + /* I2C */
6731 + at91_add_device_i2c();
6732 + /* Ethernet */
6733 + at91_add_device_eth(&chub_eth_data);
6734 + /* SPI */
6735 + at91_add_device_spi(chub_spi_devices, ARRAY_SIZE(chub_spi_devices));
6736 + /* NAND Flash */
6737 + at91_add_device_nand(&chub_nand_data);
6738 + /* Disable write protect for NAND */
6739 + at91_set_gpio_output(AT91_PIN_PB7, 1);
6740 + /* Power enable for 3x RS-232 and 1x RS-485 */
6741 + at91_set_gpio_output(AT91_PIN_PB9, 1);
6742 + /* Disable write protect for FRAM */
6743 + at91_set_gpio_output(AT91_PIN_PA21, 1);
6744 + /* Disable write protect for Dataflash */
6745 + at91_set_gpio_output(AT91_PIN_PA19, 1);
6748 +MACHINE_START(CHUB, "Promwad Chub")
6749 + /* Maintainer: Ivan Kuten AT Promwad DOT com */
6750 + .phys_io = AT91_BASE_SYS,
6751 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
6752 + .boot_params = AT91_SDRAM_BASE + 0x100,
6753 + .timer = &at91rm9200_timer,
6754 + .map_io = chub_map_io,
6755 + .init_irq = chub_init_irq,
6756 + .init_machine = chub_board_init,
6757 +MACHINE_END
6758 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-csb337.c linux-2.6-stable/arch/arm/mach-at91/board-csb337.c
6759 --- linux-2.6.21/arch/arm/mach-at91/board-csb337.c Thu Apr 26 05:08:32 2007
6760 +++ linux-2.6-stable/arch/arm/mach-at91/board-csb337.c Tue May 8 12:13:30 2007
6761 @@ -24,6 +24,7 @@
6762 #include <linux/module.h>
6763 #include <linux/platform_device.h>
6764 #include <linux/spi/spi.h>
6765 +#include <linux/interrupt.h>
6766 #include <linux/mtd/physmap.h>
6768 #include <asm/hardware.h>
6769 @@ -59,6 +60,7 @@
6771 /* Setup the LEDs */
6772 at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);
6773 + at91_set_gpio_output(AT91_PIN_PB2, 1); /* third (unused) LED */
6775 /* Setup the serial ports and console */
6776 at91_init_serial(&csb337_uart_config);
6777 @@ -149,6 +151,55 @@
6778 .num_resources = ARRAY_SIZE(csb_flash_resources),
6781 +static struct at91_gpio_led csb337_leds[] = {
6783 + .name = "led0",
6784 + .gpio = AT91_PIN_PB0,
6785 + .trigger = "heartbeat",
6786 + },
6788 + .name = "led1",
6789 + .gpio = AT91_PIN_PB1,
6790 + .trigger = "timer",
6791 + },
6793 + .name = "led2",
6794 + .gpio = AT91_PIN_PB2,
6798 +#if defined(CONFIG_CSB300_WAKE_SW0) || defined(CONFIG_CSB300_WAKE_SW1)
6799 +static irqreturn_t switch_irq_handler(int irq, void *context)
6801 + return IRQ_HANDLED;
6804 +static inline void __init switch_irq_setup(int irq, char *name, unsigned long mode)
6806 + int res;
6808 + res = request_irq(irq, switch_irq_handler, IRQF_SAMPLE_RANDOM | mode, name, NULL);
6809 + if (res == 0)
6810 + enable_irq_wake(irq);
6813 +static void __init csb300_switches(void)
6815 +#ifdef CONFIG_CSB300_WAKE_SW0
6816 + at91_set_A_periph(AT91_PIN_PB29, 1); /* IRQ0 */
6817 + switch_irq_setup(AT91RM9200_ID_IRQ0, "csb300_sw0", IRQF_TRIGGER_FALLING);
6818 +#endif
6819 +#ifdef CONFIG_CSB300_WAKE_SW1
6820 + at91_set_gpio_input(AT91_PIN_PB28, 1);
6821 + at91_set_deglitch(AT91_PIN_PB28, 1);
6822 + switch_irq_setup(AT91_PIN_PB28, "csb300_sw1", IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING);
6823 +#endif
6824 + /* there's also SW2 at PA21, GPIO or TIOA2 */
6826 +#else
6827 +static void __init csb300_switches(void) {}
6828 +#endif
6830 static void __init csb337_board_init(void)
6832 /* Serial */
6833 @@ -168,8 +219,12 @@
6834 at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices));
6835 /* MMC */
6836 at91_add_device_mmc(0, &csb337_mmc_data);
6837 + /* LEDS */
6838 + at91_gpio_leds(csb337_leds, ARRAY_SIZE(csb337_leds));
6839 /* NOR flash */
6840 platform_device_register(&csb_flash);
6841 + /* Switches on CSB300 */
6842 + csb300_switches();
6845 MACHINE_START(CSB337, "Cogent CSB337")
6846 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-dk.c linux-2.6-stable/arch/arm/mach-at91/board-dk.c
6847 --- linux-2.6.21/arch/arm/mach-at91/board-dk.c Thu Apr 26 05:08:32 2007
6848 +++ linux-2.6-stable/arch/arm/mach-at91/board-dk.c Tue May 8 14:29:12 2007
6849 @@ -73,6 +73,185 @@
6850 at91rm9200_init_interrupts(NULL);
6853 +#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE)
6854 +#include <video/s1d13xxxfb.h>
6855 +#include <asm/arch/ics1523.h>
6857 +/* EPSON S1D13806 FB */
6858 +#define AT91_FB_REG_BASE 0x30000000L
6859 +#define AT91_FB_REG_SIZE 0x200
6860 +#define AT91_FB_VMEM_BASE 0x30200000L
6861 +#define AT91_FB_VMEM_SIZE 0x140000L
6863 +static void __init dk_init_video(void)
6865 + /* NWAIT Signal */
6866 + at91_set_A_periph(AT91_PIN_PC6, 0);
6868 + /* Initialization of the Static Memory Controller for Chip Select 2 */
6869 + at91_sys_write(AT91_SMC_CSR(2), AT91_SMC_DBW_16 /* 16 bit */
6870 + | AT91_SMC_WSEN | AT91_SMC_NWS_(4) /* wait states */
6871 + | AT91_SMC_TDF_(1) /* float time */
6872 + );
6874 + at91_ics1523_init();
6877 +/* CRT: (active) 640x480 60Hz (PCLK=CLKI=25.175MHz)
6878 + Memory: Embedded SDRAM (MCLK=CLKI3=50.000MHz) (BUSCLK=60.000MHz) */
6879 +static const struct s1d13xxxfb_regval dk_s1dfb_initregs[] = {
6880 + {S1DREG_MISC, 0x00}, /* Enable Memory/Register select bit */
6881 + {S1DREG_COM_DISP_MODE, 0x00}, /* disable display output */
6882 + {S1DREG_GPIO_CNF0, 0x00},
6883 + {S1DREG_GPIO_CNF1, 0x00},
6884 + {S1DREG_GPIO_CTL0, 0x08},
6885 + {S1DREG_GPIO_CTL1, 0x00},
6886 + {S1DREG_CLK_CNF, 0x01}, /* no divide, MCLK source is CLKI3 0x02*/
6887 + {S1DREG_LCD_CLK_CNF, 0x00},
6888 + {S1DREG_CRT_CLK_CNF, 0x00},
6889 + {S1DREG_MPLUG_CLK_CNF, 0x00},
6890 + {S1DREG_CPU2MEM_WST_SEL, 0x01}, /* 2*period(MCLK) - 4ns > period(BCLK) */
6891 + {S1DREG_SDRAM_REF_RATE, 0x03}, /* 32768 <= MCLK <= 50000 (MHz) */
6892 + {S1DREG_SDRAM_TC0, 0x00}, /* MCLK source freq (MHz): */
6893 + {S1DREG_SDRAM_TC1, 0x01}, /* 42 <= MCLK <= 50 */
6894 + {S1DREG_MEM_CNF, 0x80}, /* SDRAM Initialization - needed before mem access */
6895 + {S1DREG_PANEL_TYPE, 0x25}, /* std TFT 16bit, 8bit SCP format 2, single passive LCD */
6896 + {S1DREG_MOD_RATE, 0x00}, /* toggle every FPFRAME */
6897 + {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* 680 pix */
6898 + {S1DREG_LCD_NDISP_HPER, 0x12}, /* 152 pix */
6899 + {S1DREG_TFT_FPLINE_START, 0x01}, /* 13 pix */
6900 + {S1DREG_TFT_FPLINE_PWIDTH, 0x0B}, /* 96 pix */
6901 + {S1DREG_LCD_DISP_VHEIGHT0, 0xDF},
6902 + {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* 480 lines */
6903 + {S1DREG_LCD_NDISP_VPER, 0x2C}, /* 44 lines */
6904 + {S1DREG_TFT_FPFRAME_START, 0x0A}, /* 10 lines */
6905 + {S1DREG_TFT_FPFRAME_PWIDTH, 0x01}, /* 2 lines */
6906 + {S1DREG_LCD_DISP_MODE, 0x05}, /* 16 bpp */
6907 + {S1DREG_LCD_MISC, 0x00}, /* dithering enabled, dual panel buffer enabled */
6908 + {S1DREG_LCD_DISP_START0, 0x00},
6909 + {S1DREG_LCD_DISP_START1, 0xC8},
6910 + {S1DREG_LCD_DISP_START2, 0x00},
6911 + {S1DREG_LCD_MEM_OFF0, 0x80},
6912 + {S1DREG_LCD_MEM_OFF1, 0x02},
6913 + {S1DREG_LCD_PIX_PAN, 0x00},
6914 + {S1DREG_LCD_DISP_FIFO_HTC, 0x3B},
6915 + {S1DREG_LCD_DISP_FIFO_LTC, 0x3C},
6916 + {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* 680 pix */
6917 + {S1DREG_CRT_NDISP_HPER, 0x13}, /* 160 pix */
6918 + {S1DREG_CRT_HRTC_START, 0x01}, /* 13 pix */
6919 + {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* 96 pix */
6920 + {S1DREG_CRT_DISP_VHEIGHT0, 0xDF},
6921 + {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* 480 lines */
6922 + {S1DREG_CRT_NDISP_VPER, 0x2B}, /* 44 lines */
6923 + {S1DREG_CRT_VRTC_START, 0x09}, /* 10 lines */
6924 + {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* 2 lines */
6925 + {S1DREG_TV_OUT_CTL, 0x10},
6926 + {S1DREG_CRT_DISP_MODE, 0x05}, /* 16 bpp */
6927 + {S1DREG_CRT_DISP_START0, 0x00},
6928 + {S1DREG_CRT_DISP_START1, 0x00},
6929 + {S1DREG_CRT_DISP_START2, 0x00},
6930 + {S1DREG_CRT_MEM_OFF0, 0x80},
6931 + {S1DREG_CRT_MEM_OFF1, 0x02},
6932 + {S1DREG_CRT_PIX_PAN, 0x00},
6933 + {S1DREG_CRT_DISP_FIFO_HTC, 0x3B},
6934 + {S1DREG_CRT_DISP_FIFO_LTC, 0x3C},
6935 + {S1DREG_LCD_CUR_CTL, 0x00}, /* inactive */
6936 + {S1DREG_LCD_CUR_START, 0x01},
6937 + {S1DREG_LCD_CUR_XPOS0, 0x00},
6938 + {S1DREG_LCD_CUR_XPOS1, 0x00},
6939 + {S1DREG_LCD_CUR_YPOS0, 0x00},
6940 + {S1DREG_LCD_CUR_YPOS1, 0x00},
6941 + {S1DREG_LCD_CUR_BCTL0, 0x00},
6942 + {S1DREG_LCD_CUR_GCTL0, 0x00},
6943 + {S1DREG_LCD_CUR_RCTL0, 0x00},
6944 + {S1DREG_LCD_CUR_BCTL1, 0x1F},
6945 + {S1DREG_LCD_CUR_GCTL1, 0x3F},
6946 + {S1DREG_LCD_CUR_RCTL1, 0x1F},
6947 + {S1DREG_LCD_CUR_FIFO_HTC, 0x00},
6948 + {S1DREG_CRT_CUR_CTL, 0x00}, /* inactive */
6949 + {S1DREG_CRT_CUR_START, 0x01},
6950 + {S1DREG_CRT_CUR_XPOS0, 0x00},
6951 + {S1DREG_CRT_CUR_XPOS1, 0x00},
6952 + {S1DREG_CRT_CUR_YPOS0, 0x00},
6953 + {S1DREG_CRT_CUR_YPOS1, 0x00},
6954 + {S1DREG_CRT_CUR_BCTL0, 0x00},
6955 + {S1DREG_CRT_CUR_GCTL0, 0x00},
6956 + {S1DREG_CRT_CUR_RCTL0, 0x00},
6957 + {S1DREG_CRT_CUR_BCTL1, 0x1F},
6958 + {S1DREG_CRT_CUR_GCTL1, 0x3F},
6959 + {S1DREG_CRT_CUR_RCTL1, 0x1F},
6960 + {S1DREG_CRT_CUR_FIFO_HTC, 0x00},
6961 + {S1DREG_BBLT_CTL0, 0x00},
6962 + {S1DREG_BBLT_CTL0, 0x00},
6963 + {S1DREG_BBLT_CC_EXP, 0x00},
6964 + {S1DREG_BBLT_OP, 0x00},
6965 + {S1DREG_BBLT_SRC_START0, 0x00},
6966 + {S1DREG_BBLT_SRC_START1, 0x00},
6967 + {S1DREG_BBLT_SRC_START2, 0x00},
6968 + {S1DREG_BBLT_DST_START0, 0x00},
6969 + {S1DREG_BBLT_DST_START1, 0x00},
6970 + {S1DREG_BBLT_DST_START2, 0x00},
6971 + {S1DREG_BBLT_MEM_OFF0, 0x00},
6972 + {S1DREG_BBLT_MEM_OFF1, 0x00},
6973 + {S1DREG_BBLT_WIDTH0, 0x00},
6974 + {S1DREG_BBLT_WIDTH1, 0x00},
6975 + {S1DREG_BBLT_HEIGHT0, 0x00},
6976 + {S1DREG_BBLT_HEIGHT1, 0x00},
6977 + {S1DREG_BBLT_BGC0, 0x00},
6978 + {S1DREG_BBLT_BGC1, 0x00},
6979 + {S1DREG_BBLT_FGC0, 0x00},
6980 + {S1DREG_BBLT_FGC1, 0x00},
6981 + {S1DREG_LKUP_MODE, 0x00}, /* LCD LUT r | LCD and CRT/TV LUT w */
6982 + {S1DREG_LKUP_ADDR, 0x00},
6983 + {S1DREG_PS_CNF, 0x00}, /* Power Save disable */
6984 + {S1DREG_PS_STATUS, 0x02}, /* LCD Panel down, mem up */
6985 + {S1DREG_CPU2MEM_WDOGT, 0x00},
6986 + {S1DREG_COM_DISP_MODE, 0x02}, /* enable CRT display output */
6989 +static struct s1d13xxxfb_pdata dk_s1dfb_pdata = {
6990 + .initregs = dk_s1dfb_initregs,
6991 + .initregssize = ARRAY_SIZE(dk_s1dfb_initregs),
6992 + .platform_init_video = dk_init_video,
6995 +static u64 s1dfb_dmamask = 0xffffffffUL;
6997 +static struct resource dk_s1dfb_resource[] = {
6998 + [0] = { /* video mem */
6999 + .name = "s1d13806 memory",
7000 + .start = AT91_FB_VMEM_BASE,
7001 + .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1,
7002 + .flags = IORESOURCE_MEM,
7003 + },
7004 + [1] = { /* video registers */
7005 + .name = "s1d13806 registers",
7006 + .start = AT91_FB_REG_BASE,
7007 + .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1,
7008 + .flags = IORESOURCE_MEM,
7009 + },
7012 +static struct platform_device dk_s1dfb_device = {
7013 + .name = "s1d13806fb",
7014 + .id = -1,
7015 + .dev = {
7016 + .dma_mask = &s1dfb_dmamask,
7017 + .coherent_dma_mask = 0xffffffff,
7018 + .platform_data = &dk_s1dfb_pdata,
7019 + },
7020 + .resource = dk_s1dfb_resource,
7021 + .num_resources = ARRAY_SIZE(dk_s1dfb_resource),
7024 +static void __init dk_add_device_video(void)
7026 + platform_device_register(&dk_s1dfb_device);
7028 +#else
7029 +static void __init dk_add_device_video(void) {}
7030 +#endif
7032 static struct at91_eth_data __initdata dk_eth_data = {
7033 .phy_irq_pin = AT91_PIN_PC4,
7034 .is_rmii = 1,
7035 @@ -151,7 +330,7 @@
7036 #define DK_FLASH_SIZE 0x200000
7038 static struct physmap_flash_data dk_flash_data = {
7039 - .width = 2,
7040 + .width = 2,
7043 static struct resource dk_flash_resource = {
7044 @@ -170,6 +349,13 @@
7045 .num_resources = 1,
7048 +static struct at91_gpio_led dk_leds[] = {
7050 + .name = "led0",
7051 + .gpio = AT91_PIN_PB2,
7052 + .trigger = "timer",
7056 static void __init dk_board_init(void)
7058 @@ -200,8 +386,10 @@
7059 at91_add_device_nand(&dk_nand_data);
7060 /* NOR Flash */
7061 platform_device_register(&dk_flash);
7062 + /* LEDs */
7063 + at91_gpio_leds(dk_leds, ARRAY_SIZE(dk_leds));
7064 /* VGA */
7065 -// dk_add_device_video();
7066 + dk_add_device_video();
7069 MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
7070 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-ek.c linux-2.6-stable/arch/arm/mach-at91/board-ek.c
7071 --- linux-2.6.21/arch/arm/mach-at91/board-ek.c Thu Apr 26 05:08:32 2007
7072 +++ linux-2.6-stable/arch/arm/mach-at91/board-ek.c Tue May 8 14:29:22 2007
7073 @@ -73,6 +73,187 @@
7074 at91rm9200_init_interrupts(NULL);
7077 +#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE)
7078 +#include <video/s1d13xxxfb.h>
7079 +#include <asm/arch/ics1523.h>
7081 +/* EPSON S1D13806 FB */
7082 +#define AT91_FB_REG_BASE 0x40000000L
7083 +#define AT91_FB_REG_SIZE 0x200
7084 +#define AT91_FB_VMEM_BASE 0x40200000L
7085 +#define AT91_FB_VMEM_SIZE 0x140000L
7087 +static void __init ek_init_video(void)
7089 + /* NWAIT Signal */
7090 + at91_set_A_periph(AT91_PIN_PC6, 0);
7092 + /* Initialization of the Static Memory Controller for Chip Select 3 */
7093 + at91_sys_write(AT91_SMC_CSR(3), AT91_SMC_DBW_16 /* 16 bit */
7094 + | AT91_SMC_WSEN | AT91_SMC_NWS_(5) /* wait states */
7095 + | AT91_SMC_TDF_(1) /* float time */
7096 + );
7098 + at91_ics1523_init();
7101 +/* CRT: (active) 640x480 60Hz (PCLK=CLKI=25.175MHz)
7102 + Memory: Embedded SDRAM (MCLK=CLKI3=50.000MHz) (BUSCLK=60.000MHz) */
7103 +static const struct s1d13xxxfb_regval ek_s1dfb_initregs[] = {
7104 + {S1DREG_MISC, 0x00}, /* Enable Memory/Register select bit */
7105 + {S1DREG_COM_DISP_MODE, 0x00}, /* disable display output */
7106 + {S1DREG_GPIO_CNF0, 0xFF}, // 0x00
7107 + {S1DREG_GPIO_CNF1, 0x1F}, // 0x08
7108 + {S1DREG_GPIO_CTL0, 0x00},
7109 + {S1DREG_GPIO_CTL1, 0x00},
7110 + {S1DREG_CLK_CNF, 0x01}, /* no divide, MCLK source is CLKI3 0x02*/
7111 + {S1DREG_LCD_CLK_CNF, 0x00},
7112 + {S1DREG_CRT_CLK_CNF, 0x00},
7113 + {S1DREG_MPLUG_CLK_CNF, 0x00},
7114 + {S1DREG_CPU2MEM_WST_SEL, 0x01}, /* 2*period(MCLK) - 4ns > period(BCLK) */
7115 + {S1DREG_SDRAM_REF_RATE, 0x03}, /* 32768 <= MCLK <= 50000 (MHz) */
7116 + {S1DREG_SDRAM_TC0, 0x00}, /* MCLK source freq (MHz): */
7117 + {S1DREG_SDRAM_TC1, 0x01}, /* 42 <= MCLK <= 50 */
7118 + {S1DREG_MEM_CNF, 0x80}, /* SDRAM Initialization - needed before mem access */
7119 + {S1DREG_PANEL_TYPE, 0x25}, /* std TFT 16bit, 8bit SCP format 2, single passive LCD */
7120 + {S1DREG_MOD_RATE, 0x00}, /* toggle every FPFRAME */
7121 + {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* 680 pix */
7122 + {S1DREG_LCD_NDISP_HPER, 0x12}, /* 152 pix */
7123 + {S1DREG_TFT_FPLINE_START, 0x01}, /* 13 pix */
7124 + {S1DREG_TFT_FPLINE_PWIDTH, 0x0B}, /* 96 pix */
7125 + {S1DREG_LCD_DISP_VHEIGHT0, 0xDF},
7126 + {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* 480 lines */
7127 + {S1DREG_LCD_NDISP_VPER, 0x2C}, /* 44 lines */
7128 + {S1DREG_TFT_FPFRAME_START, 0x0A}, /* 10 lines */
7129 + {S1DREG_TFT_FPFRAME_PWIDTH, 0x01}, /* 2 lines */
7130 + {S1DREG_LCD_DISP_MODE, 0x05}, /* 16 bpp */
7131 + {S1DREG_LCD_MISC, 0x00}, /* dithering enabled, dual panel buffer enabled */
7132 + {S1DREG_LCD_DISP_START0, 0x00},
7133 + {S1DREG_LCD_DISP_START1, 0xC8},
7134 + {S1DREG_LCD_DISP_START2, 0x00},
7135 + {S1DREG_LCD_MEM_OFF0, 0x80},
7136 + {S1DREG_LCD_MEM_OFF1, 0x02},
7137 + {S1DREG_LCD_PIX_PAN, 0x00},
7138 + {S1DREG_LCD_DISP_FIFO_HTC, 0x3B},
7139 + {S1DREG_LCD_DISP_FIFO_LTC, 0x3C},
7140 + {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* 680 pix */
7141 + {S1DREG_CRT_NDISP_HPER, 0x13}, /* 160 pix */
7142 + {S1DREG_CRT_HRTC_START, 0x01}, /* 13 pix */
7143 + {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* 96 pix */
7144 + {S1DREG_CRT_DISP_VHEIGHT0, 0xDF},
7145 + {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* 480 lines */
7146 + {S1DREG_CRT_NDISP_VPER, 0x2B}, /* 44 lines */
7147 + {S1DREG_CRT_VRTC_START, 0x09}, /* 10 lines */
7148 + {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* 2 lines */
7149 + {S1DREG_TV_OUT_CTL, 0x10},
7150 + {0x005E, 0x9F},
7151 + {0x005F, 0x00},
7152 + {S1DREG_CRT_DISP_MODE, 0x05}, /* 16 bpp */
7153 + {S1DREG_CRT_DISP_START0, 0x00},
7154 + {S1DREG_CRT_DISP_START1, 0x00},
7155 + {S1DREG_CRT_DISP_START2, 0x00},
7156 + {S1DREG_CRT_MEM_OFF0, 0x80},
7157 + {S1DREG_CRT_MEM_OFF1, 0x02},
7158 + {S1DREG_CRT_PIX_PAN, 0x00},
7159 + {S1DREG_CRT_DISP_FIFO_HTC, 0x3B},
7160 + {S1DREG_CRT_DISP_FIFO_LTC, 0x3C},
7161 + {S1DREG_LCD_CUR_CTL, 0x00}, /* inactive */
7162 + {S1DREG_LCD_CUR_START, 0x01},
7163 + {S1DREG_LCD_CUR_XPOS0, 0x00},
7164 + {S1DREG_LCD_CUR_XPOS1, 0x00},
7165 + {S1DREG_LCD_CUR_YPOS0, 0x00},
7166 + {S1DREG_LCD_CUR_YPOS1, 0x00},
7167 + {S1DREG_LCD_CUR_BCTL0, 0x00},
7168 + {S1DREG_LCD_CUR_GCTL0, 0x00},
7169 + {S1DREG_LCD_CUR_RCTL0, 0x00},
7170 + {S1DREG_LCD_CUR_BCTL1, 0x1F},
7171 + {S1DREG_LCD_CUR_GCTL1, 0x3F},
7172 + {S1DREG_LCD_CUR_RCTL1, 0x1F},
7173 + {S1DREG_LCD_CUR_FIFO_HTC, 0x00},
7174 + {S1DREG_CRT_CUR_CTL, 0x00}, /* inactive */
7175 + {S1DREG_CRT_CUR_START, 0x01},
7176 + {S1DREG_CRT_CUR_XPOS0, 0x00},
7177 + {S1DREG_CRT_CUR_XPOS1, 0x00},
7178 + {S1DREG_CRT_CUR_YPOS0, 0x00},
7179 + {S1DREG_CRT_CUR_YPOS1, 0x00},
7180 + {S1DREG_CRT_CUR_BCTL0, 0x00},
7181 + {S1DREG_CRT_CUR_GCTL0, 0x00},
7182 + {S1DREG_CRT_CUR_RCTL0, 0x00},
7183 + {S1DREG_CRT_CUR_BCTL1, 0x1F},
7184 + {S1DREG_CRT_CUR_GCTL1, 0x3F},
7185 + {S1DREG_CRT_CUR_RCTL1, 0x1F},
7186 + {S1DREG_CRT_CUR_FIFO_HTC, 0x00},
7187 + {S1DREG_BBLT_CTL0, 0x00},
7188 + {S1DREG_BBLT_CTL0, 0x00},
7189 + {S1DREG_BBLT_CC_EXP, 0x00},
7190 + {S1DREG_BBLT_OP, 0x00},
7191 + {S1DREG_BBLT_SRC_START0, 0x00},
7192 + {S1DREG_BBLT_SRC_START1, 0x00},
7193 + {S1DREG_BBLT_SRC_START2, 0x00},
7194 + {S1DREG_BBLT_DST_START0, 0x00},
7195 + {S1DREG_BBLT_DST_START1, 0x00},
7196 + {S1DREG_BBLT_DST_START2, 0x00},
7197 + {S1DREG_BBLT_MEM_OFF0, 0x00},
7198 + {S1DREG_BBLT_MEM_OFF1, 0x00},
7199 + {S1DREG_BBLT_WIDTH0, 0x00},
7200 + {S1DREG_BBLT_WIDTH1, 0x00},
7201 + {S1DREG_BBLT_HEIGHT0, 0x00},
7202 + {S1DREG_BBLT_HEIGHT1, 0x00},
7203 + {S1DREG_BBLT_BGC0, 0x00},
7204 + {S1DREG_BBLT_BGC1, 0x00},
7205 + {S1DREG_BBLT_FGC0, 0x00},
7206 + {S1DREG_BBLT_FGC1, 0x00},
7207 + {S1DREG_LKUP_MODE, 0x00}, /* LCD LUT r | LCD and CRT/TV LUT w */
7208 + {S1DREG_LKUP_ADDR, 0x00},
7209 + {S1DREG_PS_CNF, 0x10}, /* Power Save disable */
7210 + {S1DREG_PS_STATUS, 0x02}, /* LCD Panel down, mem up */
7211 + {S1DREG_CPU2MEM_WDOGT, 0x00},
7212 + {S1DREG_COM_DISP_MODE, 0x02}, /* enable CRT display output */
7215 +static struct s1d13xxxfb_pdata ek_s1dfb_pdata = {
7216 + .initregs = ek_s1dfb_initregs,
7217 + .initregssize = ARRAY_SIZE(ek_s1dfb_initregs),
7218 + .platform_init_video = ek_init_video,
7221 +static u64 s1dfb_dmamask = 0xffffffffUL;
7223 +static struct resource ek_s1dfb_resource[] = {
7224 + [0] = { /* video mem */
7225 + .name = "s1d13806 memory",
7226 + .start = AT91_FB_VMEM_BASE,
7227 + .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1,
7228 + .flags = IORESOURCE_MEM,
7229 + },
7230 + [1] = { /* video registers */
7231 + .name = "s1d13806 registers",
7232 + .start = AT91_FB_REG_BASE,
7233 + .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1,
7234 + .flags = IORESOURCE_MEM,
7235 + },
7238 +static struct platform_device ek_s1dfb_device = {
7239 + .name = "s1d13806fb",
7240 + .id = -1,
7241 + .dev = {
7242 + .dma_mask = &s1dfb_dmamask,
7243 + .coherent_dma_mask = 0xffffffff,
7244 + .platform_data = &ek_s1dfb_pdata,
7245 + },
7246 + .resource = ek_s1dfb_resource,
7247 + .num_resources = ARRAY_SIZE(ek_s1dfb_resource),
7250 +static void __init ek_add_device_video(void)
7252 + platform_device_register(&ek_s1dfb_device);
7254 +#else
7255 +static void __init ek_add_device_video(void) {}
7256 +#endif
7258 static struct at91_eth_data __initdata ek_eth_data = {
7259 .phy_irq_pin = AT91_PIN_PC4,
7260 .is_rmii = 1,
7261 @@ -113,7 +294,7 @@
7262 #define EK_FLASH_SIZE 0x200000
7264 static struct physmap_flash_data ek_flash_data = {
7265 - .width = 2,
7266 + .width = 2,
7269 static struct resource ek_flash_resource = {
7270 @@ -132,6 +313,18 @@
7271 .num_resources = 1,
7274 +static struct at91_gpio_led ek_leds[] = {
7276 + .name = "led0",
7277 + .gpio = AT91_PIN_PB1,
7278 + .trigger = "heartbeat",
7279 + },
7281 + .name = "led1",
7282 + .gpio = AT91_PIN_PB2,
7283 + .trigger = "timer",
7287 static void __init ek_board_init(void)
7289 @@ -158,8 +351,10 @@
7290 #endif
7291 /* NOR Flash */
7292 platform_device_register(&ek_flash);
7293 + /* LEDs */
7294 + at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
7295 /* VGA */
7296 -// ek_add_device_video();
7297 + ek_add_device_video();
7300 MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK")
7301 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-kb9202.c linux-2.6-stable/arch/arm/mach-at91/board-kb9202.c
7302 --- linux-2.6.21/arch/arm/mach-at91/board-kb9202.c Thu Apr 26 05:08:32 2007
7303 +++ linux-2.6-stable/arch/arm/mach-at91/board-kb9202.c Tue May 8 12:21:31 2007
7304 @@ -37,6 +37,8 @@
7305 #include <asm/arch/board.h>
7306 #include <asm/arch/gpio.h>
7308 +#include <asm/arch/at91rm9200_mc.h>
7310 #include "generic.h"
7313 @@ -111,6 +113,48 @@
7314 .partition_info = nand_partitions,
7318 +#if defined(CONFIG_FB_S1D15605)
7319 +#warning "Rather pass reset pin via platform_data"
7320 +static struct resource kb9202_lcd_resources[] = {
7321 + [0] = {
7322 + .start = AT91_CHIPSELECT_2,
7323 + .end = AT91_CHIPSELECT_2 + 0x200FF,
7324 + .flags = IORESOURCE_MEM
7325 + },
7326 + [1] = { /* reset pin */
7327 + .start = AT91_PIN_PC22,
7328 + .end = AT91_PIN_PC22,
7329 + .flags = IORESOURCE_MEM
7330 + },
7333 +static struct platform_device kb9202_lcd_device = {
7334 + .name = "s1d15605fb",
7335 + .id = 0,
7336 + .num_resources = ARRAY_SIZE(kb9202_lcd_resources),
7337 + .resource = kb9202_lcd_resources,
7340 +static void __init kb9202_add_device_lcd(void)
7342 + /* In case the boot loader did not set the chip select mode and timing */
7343 + at91_sys_write(AT91_SMC_CSR(2),
7344 + AT91_SMC_WSEN | AT91_SMC_NWS_(18) | AT91_SMC_TDF_(1) | AT91_SMC_DBW_8 |
7345 + AT91_SMC_RWSETUP_(1) | AT91_SMC_RWHOLD_(1));
7347 + /* Backlight pin = output, off */
7348 + at91_set_gpio_output(AT91_PIN_PC23, 0);
7350 + /* Reset pin = output, in reset */
7351 + at91_set_gpio_output(AT91_PIN_PC22, 0);
7353 + platform_device_register(&kb9202_lcd_device);
7355 +#else
7356 +static void __init kb9202_add_device_lcd(void) {}
7357 +#endif
7359 static void __init kb9202_board_init(void)
7361 /* Serial */
7362 @@ -129,6 +173,8 @@
7363 at91_add_device_spi(NULL, 0);
7364 /* NAND */
7365 at91_add_device_nand(&kb9202_nand_data);
7366 + /* LCD */
7367 + kb9202_add_device_lcd();
7370 MACHINE_START(KB9200, "KB920x")
7371 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-sam9260ek.c linux-2.6-stable/arch/arm/mach-at91/board-sam9260ek.c
7372 --- linux-2.6.21/arch/arm/mach-at91/board-sam9260ek.c Thu Apr 26 05:08:32 2007
7373 +++ linux-2.6-stable/arch/arm/mach-at91/board-sam9260ek.c Tue May 8 12:13:30 2007
7374 @@ -104,9 +104,9 @@
7376 #endif
7377 #endif
7378 -#if defined(CONFIG_SND_AT73C213)
7379 +#if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
7380 { /* AT73C213 DAC */
7381 - .modalias = "snd_at73c213",
7382 + .modalias = "at73c213",
7383 .chip_select = 0,
7384 .max_speed_hz = 10 * 1000 * 1000,
7385 .bus_num = 1,
7386 @@ -118,7 +118,7 @@
7388 * MACB Ethernet device
7390 -static struct __initdata at91_eth_data ek_macb_data = {
7391 +static struct at91_eth_data __initdata ek_macb_data = {
7392 .phy_irq_pin = AT91_PIN_PA7,
7393 .is_rmii = 1,
7395 @@ -188,6 +188,8 @@
7396 at91_add_device_eth(&ek_macb_data);
7397 /* MMC */
7398 at91_add_device_mmc(0, &ek_mmc_data);
7399 + /* I2C */
7400 + at91_add_device_i2c();
7403 MACHINE_START(AT91SAM9260EK, "Atmel AT91SAM9260-EK")
7404 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-sam9261ek.c linux-2.6-stable/arch/arm/mach-at91/board-sam9261ek.c
7405 --- linux-2.6.21/arch/arm/mach-at91/board-sam9261ek.c Thu Apr 26 05:08:32 2007
7406 +++ linux-2.6-stable/arch/arm/mach-at91/board-sam9261ek.c Wed May 9 12:37:19 2007
7407 @@ -25,7 +25,11 @@
7408 #include <linux/module.h>
7409 #include <linux/platform_device.h>
7410 #include <linux/spi/spi.h>
7411 +#include <linux/spi/ads7846.h>
7412 #include <linux/dm9000.h>
7413 +#include <linux/fb.h>
7415 +#include <video/atmel_lcdc.h>
7417 #include <asm/hardware.h>
7418 #include <asm/setup.h>
7419 @@ -59,6 +63,9 @@
7420 /* Initialize processor: 18.432 MHz crystal */
7421 at91sam9261_initialize(18432000);
7423 + /* Setup the LEDs */
7424 + at91_init_leds(AT91_PIN_PA13, AT91_PIN_PA14);
7426 /* Setup the serial ports and console */
7427 at91_init_serial(&ek_uart_config);
7429 @@ -195,6 +202,41 @@
7433 + * ADS7846 Touchscreen
7434 + */
7435 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
7437 +static int ads7843_pendown_state(void)
7439 + return !at91_get_gpio_value(AT91_PIN_PC2); /* Touchscreen PENIRQ */
7442 +static struct ads7846_platform_data ads_info = {
7443 + .model = 7843,
7444 + .x_min = 150,
7445 + .x_max = 3830,
7446 + .y_min = 190,
7447 + .y_max = 3830,
7448 + .vref_delay_usecs = 100,
7449 + .x_plate_ohms = 450,
7450 + .y_plate_ohms = 250,
7451 + .pressure_max = 15000,
7452 + .debounce_max = 1,
7453 + .debounce_rep = 0,
7454 + .debounce_tol = (~0),
7455 + .get_pendown_state = ads7843_pendown_state,
7458 +static void __init ek_add_device_ts(void)
7460 + at91_set_B_periph(AT91_PIN_PC2, 1); /* External IRQ0, with pullup */
7461 + at91_set_gpio_input(AT91_PIN_PA11, 1); /* Touchscreen BUSY signal */
7463 +#else
7464 +static void __init ek_add_device_ts(void) {}
7465 +#endif
7468 * SPI devices
7470 static struct spi_board_info ek_spi_devices[] = {
7471 @@ -204,6 +246,17 @@
7472 .max_speed_hz = 15 * 1000 * 1000,
7473 .bus_num = 0,
7475 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
7477 + .modalias = "ads7846",
7478 + .chip_select = 2,
7479 + .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */
7480 + .bus_num = 0,
7481 + .platform_data = &ads_info,
7482 + .irq = AT91SAM9261_ID_IRQ0,
7483 + .controller_data = AT91_PIN_PA28, /* CS pin */
7484 + },
7485 +#endif
7486 #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
7487 { /* DataFlash card - jumper (J12) configurable to CS3 or CS0 */
7488 .modalias = "mtd_dataflash",
7489 @@ -211,9 +264,9 @@
7490 .max_speed_hz = 15 * 1000 * 1000,
7491 .bus_num = 0,
7493 -#elif defined(CONFIG_SND_AT73C213)
7494 +#elif defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
7495 { /* AT73C213 DAC */
7496 - .modalias = "snd_at73c213",
7497 + .modalias = "at73c213",
7498 .chip_select = 3,
7499 .max_speed_hz = 10 * 1000 * 1000,
7500 .bus_num = 0,
7501 @@ -222,6 +275,65 @@
7506 + * LCD Controller
7507 + */
7508 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
7509 +static struct fb_videomode at91_tft_vga_modes[] = {
7511 + .name = "TX09D50VM1CCA @ 60",
7512 + .refresh = 60,
7513 + .xres = 240, .yres = 320,
7514 + .pixclock = KHZ2PICOS(4965),
7516 + .left_margin = 1, .right_margin = 33,
7517 + .upper_margin = 1, .lower_margin = 0,
7518 + .hsync_len = 5, .vsync_len = 1,
7520 + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
7521 + .vmode = FB_VMODE_NONINTERLACED,
7522 + },
7525 +static struct fb_monspecs at91fb_default_monspecs = {
7526 + .manufacturer = "HIT",
7527 + .monitor = "TX09D50VM1CCA",
7529 + .modedb = at91_tft_vga_modes,
7530 + .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
7531 + .hfmin = 15000,
7532 + .hfmax = 64000,
7533 + .vfmin = 50,
7534 + .vfmax = 150,
7537 +#define AT91SAM9261_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
7538 + | ATMEL_LCDC_DISTYPE_TFT \
7539 + | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
7541 +static void at91_lcdc_power_control(int on)
7543 + if (on)
7544 + at91_set_gpio_value(AT91_PIN_PA12, 0); /* power up */
7545 + else
7546 + at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */
7549 +/* Driver datas */
7550 +static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
7551 + .default_bpp = 16,
7552 + .default_dmacon = ATMEL_LCDC_DMAEN,
7553 + .default_lcdcon2 = AT91SAM9261_DEFAULT_LCDCON2,
7554 + .default_monspecs = &at91fb_default_monspecs,
7555 + .atmel_lcdfb_power_control = at91_lcdc_power_control,
7556 + .guard_time = 1,
7559 +#else
7560 +static struct atmel_lcdfb_info __initdata ek_lcdc_data;
7561 +#endif
7564 static void __init ek_board_init(void)
7566 /* Serial */
7567 @@ -241,10 +353,14 @@
7568 #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
7569 /* SPI */
7570 at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
7571 + /* Touchscreen */
7572 + ek_add_device_ts();
7573 #else
7574 /* MMC */
7575 at91_add_device_mmc(0, &ek_mmc_data);
7576 #endif
7577 + /* LCD Controller */
7578 + at91_add_device_lcdc(&ek_lcdc_data);
7581 MACHINE_START(AT91SAM9261EK, "Atmel AT91SAM9261-EK")
7582 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-sam9263ek.c linux-2.6-stable/arch/arm/mach-at91/board-sam9263ek.c
7583 --- linux-2.6.21/arch/arm/mach-at91/board-sam9263ek.c Thu Apr 26 05:08:32 2007
7584 +++ linux-2.6-stable/arch/arm/mach-at91/board-sam9263ek.c Tue May 8 12:56:33 2007
7585 @@ -25,6 +25,10 @@
7586 #include <linux/module.h>
7587 #include <linux/platform_device.h>
7588 #include <linux/spi/spi.h>
7589 +#include <linux/spi/ads7846.h>
7590 +#include <linux/fb.h>
7592 +#include <video/atmel_lcdc.h>
7594 #include <asm/hardware.h>
7595 #include <asm/setup.h>
7596 @@ -86,6 +90,40 @@
7600 + * ADS7846 Touchscreen
7601 + */
7602 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
7603 +static int ads7843_pendown_state(void)
7605 + return !at91_get_gpio_value(AT91_PIN_PA15); /* Touchscreen PENIRQ */
7608 +static struct ads7846_platform_data ads_info = {
7609 + .model = 7843,
7610 + .x_min = 150,
7611 + .x_max = 3830,
7612 + .y_min = 190,
7613 + .y_max = 3830,
7614 + .vref_delay_usecs = 100,
7615 + .x_plate_ohms = 450,
7616 + .y_plate_ohms = 250,
7617 + .pressure_max = 15000,
7618 + .debounce_max = 1,
7619 + .debounce_rep = 0,
7620 + .debounce_tol = (~0),
7621 + .get_pendown_state = ads7843_pendown_state,
7624 +static void __init ek_add_device_ts(void)
7626 + at91_set_B_periph(AT91_PIN_PA15, 1); /* External IRQ1, with pullup */
7627 + at91_set_gpio_input(AT91_PIN_PA31, 1); /* Touchscreen BUSY signal */
7629 +#else
7630 +static void __init ek_add_device_ts(void) {}
7631 +#endif
7634 * SPI devices.
7636 static struct spi_board_info ek_spi_devices[] = {
7637 @@ -97,6 +135,16 @@
7638 .bus_num = 0,
7640 #endif
7641 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
7643 + .modalias = "ads7846",
7644 + .chip_select = 3,
7645 + .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */
7646 + .bus_num = 0,
7647 + .platform_data = &ads_info,
7648 + .irq = AT91SAM9263_ID_IRQ1,
7649 + },
7650 +#endif
7654 @@ -112,6 +160,14 @@
7658 + * MACB Ethernet device
7659 + */
7660 +static struct at91_eth_data __initdata ek_macb_data = {
7661 + .is_rmii = 1,
7666 * NAND flash
7668 static struct mtd_partition __initdata ek_nand_partition[] = {
7669 @@ -148,6 +204,73 @@
7674 + * LCD Controller
7675 + */
7676 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
7677 +static struct fb_videomode at91_tft_vga_modes[] = {
7679 + .name = "TX09D50VM1CCA @ 60",
7680 + .refresh = 60,
7681 + .xres = 240, .yres = 320,
7682 + .pixclock = KHZ2PICOS(4965),
7684 + .left_margin = 1, .right_margin = 33,
7685 + .upper_margin = 1, .lower_margin = 0,
7686 + .hsync_len = 5, .vsync_len = 1,
7688 + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
7689 + .vmode = FB_VMODE_NONINTERLACED,
7690 + },
7693 +static struct fb_monspecs at91fb_default_monspecs = {
7694 + .manufacturer = "HIT",
7695 + .monitor = "TX09D70VM1CCA",
7697 + .modedb = at91_tft_vga_modes,
7698 + .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
7699 + .hfmin = 15000,
7700 + .hfmax = 64000,
7701 + .vfmin = 50,
7702 + .vfmax = 150,
7705 +#define AT91SAM9263_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
7706 + | ATMEL_LCDC_DISTYPE_TFT \
7707 + | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
7709 +static void at91_lcdc_power_control(int on)
7711 + if (on)
7712 + at91_set_gpio_value(AT91_PIN_PD12, 0); /* power up */
7713 + else
7714 + at91_set_gpio_value(AT91_PIN_PD12, 1); /* power down */
7717 +/* Driver datas */
7718 +static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
7719 + .default_bpp = 16,
7720 + .default_dmacon = ATMEL_LCDC_DMAEN,
7721 + .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2,
7722 + .default_monspecs = &at91fb_default_monspecs,
7723 + .atmel_lcdfb_power_control = at91_lcdc_power_control,
7724 + .guard_time = 1,
7727 +#else
7728 +static struct atmel_lcdfb_info __initdata ek_lcdc_data;
7729 +#endif
7733 + * AC97
7734 + */
7735 +static struct atmel_ac97_data ek_ac97_data = {
7736 + .reset_pin = AT91_PIN_PA13,
7740 static void __init ek_board_init(void)
7742 /* Serial */
7743 @@ -157,11 +280,22 @@
7744 /* USB Device */
7745 at91_add_device_udc(&ek_udc_data);
7746 /* SPI */
7747 + at91_set_gpio_output(AT91_PIN_PE20, 1); /* select spi0 clock */
7748 at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
7749 + /* Touchscreen */
7750 + ek_add_device_ts();
7751 /* MMC */
7752 at91_add_device_mmc(1, &ek_mmc_data);
7753 + /* Ethernet */
7754 + at91_add_device_eth(&ek_macb_data);
7755 /* NAND */
7756 at91_add_device_nand(&ek_nand_data);
7757 + /* I2C */
7758 + at91_add_device_i2c();
7759 + /* LCD Controller */
7760 + at91_add_device_lcdc(&ek_lcdc_data);
7761 + /* AC97 */
7762 + at91_add_device_ac97(&ek_ac97_data);
7765 MACHINE_START(AT91SAM9263EK, "Atmel AT91SAM9263-EK")
7766 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/board-sam9rlek.c linux-2.6-stable/arch/arm/mach-at91/board-sam9rlek.c
7767 --- linux-2.6.21/arch/arm/mach-at91/board-sam9rlek.c Thu Jan 1 02:00:00 1970
7768 +++ linux-2.6-stable/arch/arm/mach-at91/board-sam9rlek.c Wed May 9 10:58:34 2007
7769 @@ -0,0 +1,204 @@
7771 + * Copyright (C) 2005 SAN People
7772 + * Copyright (C) 2007 Atmel Corporation
7774 + * This file is subject to the terms and conditions of the GNU General Public
7775 + * License. See the file COPYING in the main directory of this archive for
7776 + * more details.
7777 + */
7779 +#include <linux/types.h>
7780 +#include <linux/init.h>
7781 +#include <linux/mm.h>
7782 +#include <linux/module.h>
7783 +#include <linux/platform_device.h>
7784 +#include <linux/spi/spi.h>
7785 +#include <linux/fb.h>
7786 +#include <linux/clk.h>
7788 +#include <video/atmel_lcdc.h>
7790 +#include <asm/hardware.h>
7791 +#include <asm/setup.h>
7792 +#include <asm/mach-types.h>
7793 +#include <asm/irq.h>
7795 +#include <asm/mach/arch.h>
7796 +#include <asm/mach/map.h>
7797 +#include <asm/mach/irq.h>
7799 +#include <asm/arch/board.h>
7800 +#include <asm/arch/gpio.h>
7801 +#include <asm/arch/at91sam926x_mc.h>
7803 +#include "generic.h"
7807 + * Serial port configuration.
7808 + * 0 .. 3 = USART0 .. USART3
7809 + * 4 = DBGU
7810 + */
7811 +static struct at91_uart_config __initdata ek_uart_config = {
7812 + .console_tty = 0, /* ttyS0 */
7813 + .nr_tty = 2,
7814 + .tty_map = { 4, 0, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
7817 +static void __init ek_map_io(void)
7819 + /* Initialize processor: 12.000 MHz crystal */
7820 + at91sam9rl_initialize(12000000);
7822 + /* Setup the serial ports and console */
7823 + at91_init_serial(&ek_uart_config);
7826 +static void __init ek_init_irq(void)
7828 + at91sam9rl_init_interrupts(NULL);
7833 + * MCI (SD/MMC)
7834 + */
7835 +static struct at91_mmc_data __initdata ek_mmc_data = {
7836 + .wire4 = 1,
7837 + .det_pin = AT91_PIN_PA15,
7838 +// .wp_pin = ... not connected
7839 +// .vcc_pin = ... not connected
7844 + * NAND flash
7845 + */
7846 +static struct mtd_partition __initdata ek_nand_partition[] = {
7848 + .name = "Partition 1",
7849 + .offset = 0,
7850 + .size = 256 * 1024,
7851 + },
7853 + .name = "Partition 2",
7854 + .offset = 256 * 1024 ,
7855 + .size = MTDPART_SIZ_FULL,
7856 + },
7859 +static struct mtd_partition *nand_partitions(int size, int *num_partitions)
7861 + *num_partitions = ARRAY_SIZE(ek_nand_partition);
7862 + return ek_nand_partition;
7865 +static struct at91_nand_data __initdata ek_nand_data = {
7866 + .ale = 21,
7867 + .cle = 22,
7868 +// .det_pin = ... not connected
7869 + .rdy_pin = AT91_PIN_PD17,
7870 + .enable_pin = AT91_PIN_PB6,
7871 + .partition_info = nand_partitions,
7872 + .bus_width_16 = 0,
7877 + * SPI devices
7878 + */
7879 +static struct spi_board_info ek_spi_devices[] = {
7880 + { /* DataFlash chip */
7881 + .modalias = "mtd_dataflash",
7882 + .chip_select = 0,
7883 + .max_speed_hz = 15 * 1000 * 1000,
7884 + .bus_num = 0,
7885 + },
7890 + * LCD Controller
7891 + */
7892 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
7893 +static struct fb_videomode at91_tft_vga_modes[] = {
7895 + .name = "TX09D50VM1CCA @ 60",
7896 + .refresh = 60,
7897 + .xres = 240, .yres = 320,
7898 + .pixclock = KHZ2PICOS(4965),
7900 + .left_margin = 1, .right_margin = 33,
7901 + .upper_margin = 1, .lower_margin = 0,
7902 + .hsync_len = 5, .vsync_len = 1,
7904 + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
7905 + .vmode = FB_VMODE_NONINTERLACED,
7906 + },
7909 +static struct fb_monspecs at91fb_default_monspecs = {
7910 + .manufacturer = "HIT",
7911 + .monitor = "TX09D50VM1CCA",
7913 + .modedb = at91_tft_vga_modes,
7914 + .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
7915 + .hfmin = 15000,
7916 + .hfmax = 64000,
7917 + .vfmin = 50,
7918 + .vfmax = 150,
7921 +#define AT91SAM9RL_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
7922 + | ATMEL_LCDC_DISTYPE_TFT \
7923 + | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
7925 +static void at91_lcdc_power_control(int on)
7927 + if (on)
7928 + at91_set_gpio_value(AT91_PIN_PA30, 0); /* power up */
7929 + else
7930 + at91_set_gpio_value(AT91_PIN_PA30, 1); /* power down */
7933 +/* Driver datas */
7934 +static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
7935 + .default_bpp = 16,
7936 + .default_dmacon = ATMEL_LCDC_DMAEN,
7937 + .default_lcdcon2 = AT91SAM9RL_DEFAULT_LCDCON2,
7938 + .default_monspecs = &at91fb_default_monspecs,
7939 + .atmel_lcdfb_power_control = at91_lcdc_power_control,
7940 + .guard_time = 1,
7943 +#else
7944 +static struct atmel_lcdfb_info __initdata ek_lcdc_data;
7945 +#endif
7948 +static void __init ek_board_init(void)
7950 + /* Serial */
7951 + at91_add_device_serial();
7952 + /* I2C */
7953 + at91_add_device_i2c();
7954 + /* NAND */
7955 + at91_add_device_nand(&ek_nand_data);
7956 + /* SPI */
7957 + at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
7958 + /* MMC */
7959 + at91_add_device_mmc(0, &ek_mmc_data);
7960 + /* LCD Controller */
7961 + at91_add_device_lcdc(&ek_lcdc_data);
7964 +MACHINE_START(AT91SAM9RLEK, "Atmel AT91SAM9RL-EK")
7965 + /* Maintainer: Atmel */
7966 + .phys_io = AT91_BASE_SYS,
7967 + .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
7968 + .boot_params = AT91_SDRAM_BASE + 0x100,
7969 + .timer = &at91sam926x_timer,
7970 + .map_io = ek_map_io,
7971 + .init_irq = ek_init_irq,
7972 + .init_machine = ek_board_init,
7973 +MACHINE_END
7974 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/clock.c linux-2.6-stable/arch/arm/mach-at91/clock.c
7975 --- linux-2.6.21/arch/arm/mach-at91/clock.c Thu Apr 26 05:08:32 2007
7976 +++ linux-2.6-stable/arch/arm/mach-at91/clock.c Tue May 8 12:13:30 2007
7977 @@ -32,6 +32,7 @@
7978 #include <asm/arch/cpu.h>
7980 #include "clock.h"
7981 +#include "generic.h"
7985 @@ -254,6 +255,23 @@
7987 /*------------------------------------------------------------------------*/
7989 +#ifdef CONFIG_PM
7991 +int clk_must_disable(struct clk *clk)
7993 + if (!at91_suspend_entering_slow_clock())
7994 + return 0;
7996 + while (clk->parent)
7997 + clk = clk->parent;
7998 + return clk != &clk32k;
8000 +EXPORT_SYMBOL(clk_must_disable);
8002 +#endif
8004 +/*------------------------------------------------------------------------*/
8006 #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
8009 @@ -375,6 +393,7 @@
8010 seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR));
8012 seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR));
8013 +#warning "Hard-coded PCK"
8014 for (i = 0; i < 4; i++)
8015 seq_printf(s, "PCK%d = %8x\n", i, at91_sys_read(AT91_PMC_PCKR(i)));
8016 seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR));
8017 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/generic.h linux-2.6-stable/arch/arm/mach-at91/generic.h
8018 --- linux-2.6.21/arch/arm/mach-at91/generic.h Thu Apr 26 05:08:32 2007
8019 +++ linux-2.6-stable/arch/arm/mach-at91/generic.h Wed May 9 10:20:54 2007
8020 @@ -13,12 +13,14 @@
8021 extern void __init at91sam9260_initialize(unsigned long main_clock);
8022 extern void __init at91sam9261_initialize(unsigned long main_clock);
8023 extern void __init at91sam9263_initialize(unsigned long main_clock);
8024 +extern void __init at91sam9rl_initialize(unsigned long main_clock);
8026 /* Interrupts */
8027 extern void __init at91rm9200_init_interrupts(unsigned int priority[]);
8028 extern void __init at91sam9260_init_interrupts(unsigned int priority[]);
8029 extern void __init at91sam9261_init_interrupts(unsigned int priority[]);
8030 extern void __init at91sam9263_init_interrupts(unsigned int priority[]);
8031 +extern void __init at91sam9rl_init_interrupts(unsigned int priority[]);
8032 extern void __init at91_aic_init(unsigned int priority[]);
8034 /* Timer */
8035 @@ -34,6 +36,7 @@
8036 /* Power Management */
8037 extern void at91_irq_suspend(void);
8038 extern void at91_irq_resume(void);
8039 +extern int at91_suspend_entering_slow_clock(void);
8041 /* GPIO */
8042 #define AT91RM9200_PQFP 3 /* AT91RM9200 PQFP package has 3 banks */
8043 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/ics1523.c linux-2.6-stable/arch/arm/mach-at91/ics1523.c
8044 --- linux-2.6.21/arch/arm/mach-at91/ics1523.c Thu Jan 1 02:00:00 1970
8045 +++ linux-2.6-stable/arch/arm/mach-at91/ics1523.c Tue May 8 12:13:30 2007
8046 @@ -0,0 +1,207 @@
8048 + * arch/arm/mach-at91rm9200/ics1523.c
8050 + * Copyright (C) 2003 ATMEL Rousset
8052 + * This program is free software; you can redistribute it and/or modify
8053 + * it under the terms of the GNU General Public License as published by
8054 + * the Free Software Foundation; either version 2 of the License, or
8055 + * (at your option) any later version.
8057 + * This program is distributed in the hope that it will be useful,
8058 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8059 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8060 + * GNU General Public License for more details.
8062 + * You should have received a copy of the GNU General Public License
8063 + * along with this program; if not, write to the Free Software
8064 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
8065 + */
8067 +#include <asm/hardware.h>
8068 +#include <asm/io.h>
8070 +#include <linux/clk.h>
8071 +#include <linux/delay.h>
8072 +#include <linux/err.h>
8073 +#include <linux/init.h>
8075 +#include <asm/arch/ics1523.h>
8076 +#include <asm/arch/at91_twi.h>
8077 +#include <asm/arch/gpio.h>
8079 +/* TWI Errors */
8080 +#define AT91_TWI_ERROR (AT91_TWI_NACK | AT91_TWI_UNRE | AT91_TWI_OVRE)
8083 +static void __iomem *twi_base;
8085 +#define at91_twi_read(reg) __raw_readl(twi_base + (reg))
8086 +#define at91_twi_write(reg, val) __raw_writel((val), twi_base + (reg))
8089 +/* -----------------------------------------------------------------------------
8090 + * Initialization of TWI CLOCK
8091 + * ----------------------------------------------------------------------------- */
8093 +static void at91_ics1523_SetTwiClock(unsigned int mck_khz)
8095 + int sclock;
8097 + /* Here, CKDIV = 1 and CHDIV = CLDIV ==> CLDIV = CHDIV = 1/4*((Fmclk/FTWI) -6) */
8098 + sclock = (10*mck_khz / ICS_TRANSFER_RATE);
8099 + if (sclock % 10 >= 5)
8100 + sclock = (sclock /10) - 5;
8101 + else
8102 + sclock = (sclock /10)- 6;
8103 + sclock = (sclock + (4 - sclock %4)) >> 2; /* div 4 */
8105 + at91_twi_write(AT91_TWI_CWGR, 0x00010000 | sclock | (sclock << 8));
8108 +/* -----------------------------------------------------------------------------
8109 + * Read a byte with TWI Interface from the Clock Generator ICS1523
8110 + * ----------------------------------------------------------------------------- */
8112 +static int at91_ics1523_ReadByte(unsigned char reg_address, unsigned char *data_in)
8114 + int Status, nb_trial;
8116 + at91_twi_write(AT91_TWI_MMR, AT91_TWI_MREAD | AT91_TWI_IADRSZ_1 | ((ICS_ADDR << 16) & AT91_TWI_DADR));
8117 + at91_twi_write(AT91_TWI_IADR, reg_address);
8118 + at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
8120 + /* Program temporizing period (300us) */
8121 + udelay(300);
8123 + /* Wait TXcomplete ... */
8124 + nb_trial = 0;
8125 + Status = at91_twi_read(AT91_TWI_SR);
8126 + while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
8127 + nb_trial++;
8128 + Status = at91_twi_read(AT91_TWI_SR);
8131 + if (Status & AT91_TWI_TXCOMP) {
8132 + *data_in = (unsigned char) at91_twi_read(AT91_TWI_RHR);
8133 + return ICS1523_ACCESS_OK;
8135 + else
8136 + return ICS1523_ACCESS_ERROR;
8139 +/* -----------------------------------------------------------------------------
8140 + * Write a byte with TWI Interface to the Clock Generator ICS1523
8141 + * ----------------------------------------------------------------------------- */
8143 +static int at91_ics1523_WriteByte(unsigned char reg_address, unsigned char data_out)
8145 + int Status, nb_trial;
8147 + at91_twi_write(AT91_TWI_MMR, AT91_TWI_IADRSZ_1 | ((ICS_ADDR << 16) & AT91_TWI_DADR));
8148 + at91_twi_write(AT91_TWI_IADR, reg_address);
8149 + at91_twi_write(AT91_TWI_THR, data_out);
8150 + at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
8152 + /* Program temporizing period (300us) */
8153 + udelay(300);
8155 + nb_trial = 0;
8156 + Status = at91_twi_read(AT91_TWI_SR);
8157 + while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
8158 + nb_trial++;
8159 + if (Status & AT91_TWI_ERROR) {
8160 + /* If Underrun OR NACK - Start again */
8161 + at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
8163 + /* Program temporizing period (300us) */
8164 + udelay(300);
8166 + Status = at91_twi_read(AT91_TWI_SR);
8167 + };
8169 + if (Status & AT91_TWI_TXCOMP)
8170 + return ICS1523_ACCESS_OK;
8171 + else
8172 + return ICS1523_ACCESS_ERROR;
8175 +/* -----------------------------------------------------------------------------
8176 + * Initialization of the Clock Generator ICS1523
8177 + * ----------------------------------------------------------------------------- */
8179 +int at91_ics1523_init(void)
8181 + int nb_trial;
8182 + int ack = ICS1523_ACCESS_OK;
8183 + unsigned int status = 0xffffffff;
8184 + struct clk *twi_clk;
8186 + /* Map in TWI peripheral */
8187 + twi_base = ioremap(AT91RM9200_BASE_TWI, SZ_16K);
8188 + if (!twi_base)
8189 + return -ENOMEM;
8191 + /* pins used for TWI interface */
8192 + at91_set_A_periph(AT91_PIN_PA25, 0); /* TWD */
8193 + at91_set_multi_drive(AT91_PIN_PA25, 1);
8194 + at91_set_A_periph(AT91_PIN_PA26, 0); /* TWCK */
8195 + at91_set_multi_drive(AT91_PIN_PA26, 1);
8197 + /* Enable the TWI clock */
8198 + twi_clk = clk_get(NULL, "twi_clk");
8199 + if (IS_ERR(twi_clk))
8200 + return ICS1523_ACCESS_ERROR;
8201 + clk_enable(twi_clk);
8203 + /* Disable interrupts */
8204 + at91_twi_write(AT91_TWI_IDR, -1);
8206 + /* Reset peripheral */
8207 + at91_twi_write(AT91_TWI_CR, AT91_TWI_SWRST);
8209 + /* Set Master mode */
8210 + at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN);
8212 + /* Set TWI Clock Waveform Generator Register */
8213 + at91_ics1523_SetTwiClock(60000); /* MCK in KHz = 60000 KHz */
8215 + /* ICS1523 Initialisation */
8216 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_ICR, (unsigned char) 0);
8217 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_OE, (unsigned char) (ICS_OEF | ICS_OET2 | ICS_OETCK));
8218 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_OD, (unsigned char) (ICS_INSEL | 0x7F));
8219 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0);
8221 + nb_trial = 0;
8222 + do {
8223 + nb_trial++;
8224 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_ICR, (unsigned char) (ICS_ENDLS | ICS_ENPLS | ICS_PDEN /*| ICS_FUNCSEL*/));
8225 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_LCR, (unsigned char) (ICS_PSD | ICS_PFD));
8226 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_FD0, (unsigned char) 0x39) ; /* 0x7A */
8227 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_FD1, (unsigned char) 0x00);
8228 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_SWRST, (unsigned char) (ICS_PLLR));
8230 + /* Program 1ms temporizing period */
8231 + mdelay(1);
8233 + at91_ics1523_ReadByte ((unsigned char) ICS_SR, (char *)&status);
8234 + } while (!((unsigned int) status & (unsigned int) ICS_PLLLOCK) && (nb_trial < 10));
8236 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAC, (unsigned char) 0x03) ; /* 0x01 */
8237 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_SWRST, (unsigned char) (ICS_DPAR));
8239 + /* Program 1ms temporizing period */
8240 + mdelay(1);
8242 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0x00);
8244 + /* Program 1ms temporizing period */
8245 + mdelay(1);
8247 + /* All done - cleanup */
8248 + iounmap(twi_base);
8249 + clk_disable(twi_clk);
8250 + clk_put(twi_clk);
8252 + return ack;
8254 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/pm.c linux-2.6-stable/arch/arm/mach-at91/pm.c
8255 --- linux-2.6.21/arch/arm/mach-at91/pm.c Thu Apr 26 05:08:32 2007
8256 +++ linux-2.6-stable/arch/arm/mach-at91/pm.c Tue May 8 12:13:31 2007
8257 @@ -63,6 +63,7 @@
8258 * Verify that all the clocks are correct before entering
8259 * slow-clock mode.
8261 +#warning "SAM9260 only has 3 programmable clocks."
8262 static int at91_pm_verify_clocks(void)
8264 unsigned long scsr;
8265 @@ -104,20 +105,15 @@
8269 - * Call this from platform driver suspend() to see how deeply to suspend.
8270 + * This is called from clk_must_disable(), to see how deeply to suspend.
8271 * For example, some controllers (like OHCI) need one of the PLL clocks
8272 * in order to act as a wakeup source, and those are not available when
8273 * going into slow clock mode.
8275 - * REVISIT: generalize as clk_will_be_available(clk)? Other platforms have
8276 - * the very same problem (but not using at91 main_clk), and it'd be better
8277 - * to add one generic API rather than lots of platform-specific ones.
8279 int at91_suspend_entering_slow_clock(void)
8281 return (target_state == PM_SUSPEND_MEM);
8283 -EXPORT_SYMBOL(at91_suspend_entering_slow_clock);
8286 static void (*slow_clock)(void);
8287 @@ -207,16 +203,23 @@
8288 .enter = at91_pm_enter,
8291 +#ifdef CONFIG_AT91_SLOW_CLOCK
8292 +extern void at91rm9200_slow_clock(void);
8293 +extern u32 at91rm9200_slow_clock_sz;
8294 +#endif
8296 static int __init at91_pm_init(void)
8298 - printk("AT91: Power Management\n");
8300 -#ifdef CONFIG_AT91_PM_SLOW_CLOCK
8301 - /* REVISIT allocations of SRAM should be dynamically managed.
8302 +#ifdef CONFIG_AT91_SLOW_CLOCK
8303 + /*
8304 + * REVISIT allocations of SRAM should be dynamically managed.
8305 * FIQ handlers and other components will want SRAM/TCM too...
8307 - slow_clock = (void *) (AT91_VA_BASE_SRAM + (3 * SZ_4K));
8308 + slow_clock = (void *) (AT91_IO_VIRT_BASE - AT91RM9200_SRAM_SIZE + (3 * SZ_4K));
8309 memcpy(slow_clock, at91rm9200_slow_clock, at91rm9200_slow_clock_sz);
8310 + printk("AT91: Power Management (with slow clock mode)\n");
8311 +#else
8312 + printk("AT91: Power Management\n");
8313 #endif
8315 /* Disable SDRAM low-power mode. Cannot be used with self-refresh. */
8316 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/pm_slowclock.S linux-2.6-stable/arch/arm/mach-at91/pm_slowclock.S
8317 --- linux-2.6.21/arch/arm/mach-at91/pm_slowclock.S Thu Jan 1 02:00:00 1970
8318 +++ linux-2.6-stable/arch/arm/mach-at91/pm_slowclock.S Tue May 8 12:13:31 2007
8319 @@ -0,0 +1,172 @@
8321 + * arch/arm/mach-at91/pm_slow_clock.S
8323 + * Copyright (C) 2006 Savin Zlobec
8325 + * This program is free software; you can redistribute it and/or modify
8326 + * it under the terms of the GNU General Public License version 2 as
8327 + * published by the Free Software Foundation.
8329 + */
8331 +#include <linux/linkage.h>
8332 +#include <asm/hardware.h>
8333 +#include <asm/arch/at91_pmc.h>
8334 +#include <asm/arch/at91rm9200_mc.h>
8336 +#define MCKRDY_TIMEOUT 1000
8337 +#define MOSCRDY_TIMEOUT 1000
8338 +#define PLLALOCK_TIMEOUT 1000
8340 + .macro wait_mckrdy
8341 + mov r2, #MCKRDY_TIMEOUT
8342 +1: sub r2, r2, #1
8343 + cmp r2, #0
8344 + beq 2f
8345 + ldr r3, [r1, #AT91_PMC_SR]
8346 + tst r3, #AT91_PMC_MCKRDY
8347 + beq 1b
8349 + .endm
8351 + .macro wait_moscrdy
8352 + mov r2, #MOSCRDY_TIMEOUT
8353 +1: sub r2, r2, #1
8354 + cmp r2, #0
8355 + beq 2f
8356 + ldr r3, [r1, #AT91_PMC_SR]
8357 + tst r3, #AT91_PMC_MOSCS
8358 + beq 1b
8360 + .endm
8362 + .macro wait_pllalock
8363 + mov r2, #PLLALOCK_TIMEOUT
8364 +1: sub r2, r2, #1
8365 + cmp r2, #0
8366 + beq 2f
8367 + ldr r3, [r1, #AT91_PMC_SR]
8368 + tst r3, #AT91_PMC_LOCKA
8369 + beq 1b
8371 + .endm
8373 + .macro wait_plladis
8374 + mov r2, #PLLALOCK_TIMEOUT
8375 +1: sub r2, r2, #1
8376 + cmp r2, #0
8377 + beq 2f
8378 + ldr r3, [r1, #AT91_PMC_SR]
8379 + tst r3, #AT91_PMC_LOCKA
8380 + bne 1b
8382 + .endm
8384 + .text
8386 +ENTRY(at91rm9200_slow_clock)
8388 + ldr r1, .at91_va_base_sys
8390 + /* Put SDRAM in self refresh mode */
8392 + b 1f
8393 + .align 5
8394 +1: mcr p15, 0, r0, c7, c10, 4
8395 + mov r2, #1
8396 + str r2, [r1, #AT91_SDRAMC_SRR]
8398 + /* Save Master clock setting */
8400 + ldr r2, [r1, #AT91_PMC_MCKR]
8401 + str r2, .saved_mckr
8403 + /*
8404 + * Set the Master clock source to slow clock
8406 + * First set the CSS field, wait for MCKRDY
8407 + * and than set the PRES and MDIV fields.
8409 + * See eratta #2[78] for details.
8410 + */
8412 + bic r2, r2, #3
8413 + str r2, [r1, #AT91_PMC_MCKR]
8415 + wait_mckrdy
8417 + mov r2, #0
8418 + str r2, [r1, #AT91_PMC_MCKR]
8420 + /* Save PLLA setting and disable it */
8422 + ldr r2, [r1, #AT91_CKGR_PLLAR]
8423 + str r2, .saved_pllar
8425 + mov r2, #0
8426 + str r2, [r1, #AT91_CKGR_PLLAR]
8428 + wait_plladis
8430 + /* Turn off the main oscillator */
8432 + ldr r2, [r1, #AT91_CKGR_MOR]
8433 + bic r2, r2, #AT91_PMC_MOSCEN
8434 + str r2, [r1, #AT91_CKGR_MOR]
8436 + /* Wait for interrupt */
8438 + mcr p15, 0, r0, c7, c0, 4
8440 + /* Turn on the main oscillator */
8442 + ldr r2, [r1, #AT91_CKGR_MOR]
8443 + orr r2, r2, #AT91_PMC_MOSCEN
8444 + str r2, [r1, #AT91_CKGR_MOR]
8446 + wait_moscrdy
8448 + /* Restore PLLA setting */
8450 + ldr r2, .saved_pllar
8451 + str r2, [r1, #AT91_CKGR_PLLAR]
8453 + wait_pllalock
8455 + /*
8456 + * Restore master clock setting
8458 + * First set PRES if it was not 0,
8459 + * than set CSS and MDIV fields.
8460 + * After every change wait for
8461 + * MCKRDY.
8463 + * See eratta #2[78] for details.
8464 + */
8466 + ldr r2, .saved_mckr
8467 + tst r2, #0x1C
8468 + beq 2f
8469 + and r2, r2, #0x1C
8470 + str r2, [r1, #AT91_PMC_MCKR]
8472 + wait_mckrdy
8474 +2: ldr r2, .saved_mckr
8475 + str r2, [r1, #AT91_PMC_MCKR]
8477 + wait_mckrdy
8479 + mov pc, lr
8481 +.saved_mckr:
8482 + .word 0
8484 +.saved_pllar:
8485 + .word 0
8487 +.at91_va_base_sys:
8488 + .word AT91_VA_BASE_SYS
8490 +ENTRY(at91rm9200_slow_clock_sz)
8491 + .word .-at91rm9200_slow_clock
8492 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/tclib.c linux-2.6-stable/arch/arm/mach-at91/tclib.c
8493 --- linux-2.6.21/arch/arm/mach-at91/tclib.c Thu Jan 1 02:00:00 1970
8494 +++ linux-2.6-stable/arch/arm/mach-at91/tclib.c Tue May 8 12:13:31 2007
8495 @@ -0,0 +1,17 @@
8496 +#include <linux/clk.h>
8497 +#include <linux/kernel.h>
8498 +#include <linux/module.h>
8500 +#include "tclib.h"
8502 +static struct atmel_tcblock *blocks;
8503 +static int nblocks;
8506 + * Called from the processor-specific init to register the TC Blocks.
8507 + */
8508 +void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n)
8510 + blocks = tcblocks;
8511 + nblocks = n;
8513 diff -urN -x CVS linux-2.6.21/arch/arm/mach-at91/tclib.h linux-2.6-stable/arch/arm/mach-at91/tclib.h
8514 --- linux-2.6.21/arch/arm/mach-at91/tclib.h Thu Jan 1 02:00:00 1970
8515 +++ linux-2.6-stable/arch/arm/mach-at91/tclib.h Tue May 8 12:13:31 2007
8516 @@ -0,0 +1,11 @@
8518 +#define TC_PER_TCB 3
8520 +struct atmel_tcblock {
8521 + u32 physaddr;
8522 + void __iomem *ioaddr;
8523 + struct clk *clk[TC_PER_TCB];
8524 + int irq[TC_PER_TCB];
8527 +extern void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n);
8528 diff -urN -x CVS linux-2.6.21/arch/arm/mm/Kconfig linux-2.6-stable/arch/arm/mm/Kconfig
8529 --- linux-2.6.21/arch/arm/mm/Kconfig Thu Apr 26 05:08:32 2007
8530 +++ linux-2.6-stable/arch/arm/mm/Kconfig Wed May 9 10:20:54 2007
8531 @@ -171,8 +171,8 @@
8532 # ARM926T
8533 config CPU_ARM926T
8534 bool "Support ARM926T processor"
8535 - depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_NS9XXX
8536 - default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_NS9XXX
8537 + depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_NS9XXX
8538 + default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_NS9XXX
8539 select CPU_32v5
8540 select CPU_ABRT_EV5TJ
8541 select CPU_CACHE_VIVT
8542 diff -urN -x CVS linux-2.6.21/arch/arm/tools/mach-types linux-2.6-stable/arch/arm/tools/mach-types
8543 --- linux-2.6.21/arch/arm/tools/mach-types Thu Apr 26 05:08:32 2007
8544 +++ linux-2.6-stable/arch/arm/tools/mach-types Tue May 8 12:13:31 2007
8545 @@ -1335,3 +1335,32 @@
8546 comtech_router MACH_COMTECH_ROUTER COMTECH_ROUTER 1327
8547 sbc2410x MACH_SBC2410X SBC2410X 1328
8548 at4x0bd MACH_AT4X0BD AT4X0BD 1329
8549 +cbifr MACH_CBIFR CBIFR 1330
8550 +arcom_quantum MACH_ARCOM_QUANTUM ARCOM_QUANTUM 1331
8551 +matrix520 MACH_MATRIX520 MATRIX520 1332
8552 +matrix510 MACH_MATRIX510 MATRIX510 1333
8553 +matrix500 MACH_MATRIX500 MATRIX500 1334
8554 +m501 MACH_M501 M501 1335
8555 +aaeon1270 MACH_AAEON1270 AAEON1270 1336
8556 +matrix500ev MACH_MATRIX500EV MATRIX500EV 1337
8557 +pac500 MACH_PAC500 PAC500 1338
8558 +pnx8181 MACH_PNX8181 PNX8181 1339
8559 +colibri320 MACH_COLIBRI320 COLIBRI320 1340
8560 +aztoolbb MACH_AZTOOLBB AZTOOLBB 1341
8561 +aztoolg2 MACH_AZTOOLG2 AZTOOLG2 1342
8562 +dvlhost MACH_DVLHOST DVLHOST 1343
8563 +zir9200 MACH_ZIR9200 ZIR9200 1344
8564 +zir9260 MACH_ZIR9260 ZIR9260 1345
8565 +cocopah MACH_COCOPAH COCOPAH 1346
8566 +nds MACH_NDS NDS 1347
8567 +rosencrantz MACH_ROSENCRANTZ ROSENCRANTZ 1348
8568 +fttx_odsc MACH_FTTX_ODSC FTTX_ODSC 1349
8569 +classe_r6904 MACH_CLASSE_R6904 CLASSE_R6904 1350
8570 +cam60 MACH_CAM60 CAM60 1351
8571 +mxc30031ads MACH_MXC30031ADS MXC30031ADS 1352
8572 +datacall MACH_DATACALL DATACALL 1353
8573 +at91eb01 MACH_AT91EB01 AT91EB01 1354
8574 +rty MACH_RTY RTY 1355
8575 +dwl2100 MACH_DWL2100 DWL2100 1356
8576 +vinsi MACH_VINSI VINSI 1357
8577 +db88f5281 MACH_DB88F5281 DB88F5281 1358
8578 diff -urN -x CVS linux-2.6.21/drivers/char/Kconfig linux-2.6-stable/drivers/char/Kconfig
8579 --- linux-2.6.21/drivers/char/Kconfig Thu Apr 26 05:08:32 2007
8580 +++ linux-2.6-stable/drivers/char/Kconfig Tue May 8 14:31:24 2007
8581 @@ -1071,5 +1071,21 @@
8582 /sys/devices/platform/telco_clock, with a number of files for
8583 controlling the behavior of this hardware.
8585 +config AT91_SPI
8586 + bool "SPI driver (legacy) for AT91RM9200 processors"
8587 + depends on ARCH_AT91RM9200
8588 + default y
8589 + help
8590 + The SPI driver gives access to this serial bus on the AT91RM9200
8591 + processor.
8593 +config AT91_SPIDEV
8594 + bool "SPI device interface (legacy) for AT91RM9200 processors"
8595 + depends on ARCH_AT91RM9200 && AT91_SPI
8596 + default n
8597 + help
8598 + The SPI driver gives user mode access to this serial
8599 + bus on the AT91RM9200 processor.
8601 endmenu
8603 diff -urN -x CVS linux-2.6.21/drivers/char/Makefile linux-2.6-stable/drivers/char/Makefile
8604 --- linux-2.6.21/drivers/char/Makefile Thu Apr 26 05:08:32 2007
8605 +++ linux-2.6-stable/drivers/char/Makefile Tue May 8 14:31:24 2007
8606 @@ -93,6 +93,8 @@
8607 obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o
8608 obj-$(CONFIG_TANBAC_TB0219) += tb0219.o
8609 obj-$(CONFIG_TELCLOCK) += tlclk.o
8610 +obj-$(CONFIG_AT91_SPI) += at91_spi.o
8611 +obj-$(CONFIG_AT91_SPIDEV) += at91_spidev.o
8613 obj-$(CONFIG_WATCHDOG) += watchdog/
8614 obj-$(CONFIG_MWAVE) += mwave/
8615 diff -urN -x CVS linux-2.6.21/drivers/char/at91_spi.c linux-2.6-stable/drivers/char/at91_spi.c
8616 --- linux-2.6.21/drivers/char/at91_spi.c Thu Jan 1 02:00:00 1970
8617 +++ linux-2.6-stable/drivers/char/at91_spi.c Tue May 8 14:31:24 2007
8618 @@ -0,0 +1,336 @@
8620 + * Serial Peripheral Interface (SPI) driver for the Atmel AT91RM9200 (Thunder)
8622 + * Copyright (C) SAN People (Pty) Ltd
8624 + * This program is free software; you can redistribute it and/or
8625 + * modify it under the terms of the GNU General Public License
8626 + * as published by the Free Software Foundation; either version
8627 + * 2 of the License, or (at your option) any later version.
8628 + */
8630 +#include <linux/init.h>
8631 +#include <linux/dma-mapping.h>
8632 +#include <linux/module.h>
8633 +#include <linux/sched.h>
8634 +#include <linux/completion.h>
8635 +#include <linux/interrupt.h>
8636 +#include <linux/clk.h>
8637 +#include <linux/platform_device.h>
8638 +#include <linux/atmel_pdc.h>
8639 +#include <asm/io.h>
8640 +#include <asm/semaphore.h>
8642 +#include <asm/arch/at91_spi.h>
8643 +#include <asm/arch/board.h>
8644 +#include <asm/arch/spi.h>
8646 +#undef DEBUG_SPI
8648 +static struct spi_local spi_dev[NR_SPI_DEVICES]; /* state of the SPI devices */
8649 +static int spi_enabled = 0;
8650 +static struct semaphore spi_lock; /* protect access to SPI bus */
8651 +static int current_device = -1; /* currently selected SPI device */
8652 +static struct clk *spi_clk; /* SPI clock */
8653 +static void __iomem *spi_base; /* SPI peripheral base-address */
8655 +DECLARE_COMPLETION(transfer_complete);
8658 +#define at91_spi_read(reg) __raw_readl(spi_base + (reg))
8659 +#define at91_spi_write(reg, val) __raw_writel((val), spi_base + (reg))
8662 +/* ......................................................................... */
8665 + * Access and enable the SPI bus.
8666 + * This MUST be called before any transfers are performed.
8667 + */
8668 +void spi_access_bus(short device)
8670 + /* Ensure that requested device is valid */
8671 + if ((device < 0) || (device >= NR_SPI_DEVICES))
8672 + panic("at91_spi: spi_access_bus called with invalid device");
8674 + if (spi_enabled == 0) {
8675 + clk_enable(spi_clk); /* Enable Peripheral clock */
8676 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
8677 +#ifdef DEBUG_SPI
8678 + printk("SPI on\n");
8679 +#endif
8681 + spi_enabled++;
8683 + /* Lock the SPI bus */
8684 + down(&spi_lock);
8685 + current_device = device;
8687 + /* Configure SPI bus for device */
8688 + at91_spi_write(AT91_SPI_MR, AT91_SPI_MSTR | AT91_SPI_MODFDIS | (spi_dev[device].pcs << 16));
8692 + * Relinquish control of the SPI bus.
8693 + */
8694 +void spi_release_bus(short device)
8696 + if (device != current_device)
8697 + panic("at91_spi: spi_release called with invalid device");
8699 + /* Release the SPI bus */
8700 + current_device = -1;
8701 + up(&spi_lock);
8703 + spi_enabled--;
8704 + if (spi_enabled == 0) {
8705 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIDIS); /* Disable SPI */
8706 + clk_disable(spi_clk); /* Disable Peripheral clock */
8707 +#ifdef DEBUG_SPI
8708 + printk("SPI off\n");
8709 +#endif
8714 + * Perform a data transfer over the SPI bus
8715 + */
8716 +int spi_transfer(struct spi_transfer_list* list)
8718 + struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
8719 + int tx_size;
8721 + if (!list)
8722 + panic("at91_spi: spi_transfer called with NULL transfer list");
8723 + if (current_device == -1)
8724 + panic("at91_spi: spi_transfer called without acquiring bus");
8726 +#ifdef DEBUG_SPI
8727 + printk("SPI transfer start [%i]\n", list->nr_transfers);
8728 +#endif
8730 + /* If we are in 16-bit mode, we need to modify what we pass to the PDC */
8731 + tx_size = (at91_spi_read(AT91_SPI_CSR(current_device)) & AT91_SPI_BITS_16) ? 2 : 1;
8733 + /* Store transfer list */
8734 + device->xfers = list;
8735 + list->curr = 0;
8737 + /* Assume there must be at least one transfer */
8738 + device->tx = dma_map_single(NULL, list->tx[0], list->txlen[0], DMA_TO_DEVICE);
8739 + device->rx = dma_map_single(NULL, list->rx[0], list->rxlen[0], DMA_FROM_DEVICE);
8741 + /* Program PDC registers */
8742 + at91_spi_write(ATMEL_PDC_TPR, device->tx);
8743 + at91_spi_write(ATMEL_PDC_RPR, device->rx);
8744 + at91_spi_write(ATMEL_PDC_TCR, list->txlen[0] / tx_size);
8745 + at91_spi_write(ATMEL_PDC_RCR, list->rxlen[0] / tx_size);
8747 + /* Is there a second transfer? */
8748 + if (list->nr_transfers > 1) {
8749 + device->txnext = dma_map_single(NULL, list->tx[1], list->txlen[1], DMA_TO_DEVICE);
8750 + device->rxnext = dma_map_single(NULL, list->rx[1], list->rxlen[1], DMA_FROM_DEVICE);
8752 + /* Program Next PDC registers */
8753 + at91_spi_write(ATMEL_PDC_TNPR, device->txnext);
8754 + at91_spi_write(ATMEL_PDC_RNPR, device->rxnext);
8755 + at91_spi_write(ATMEL_PDC_TNCR, list->txlen[1] / tx_size);
8756 + at91_spi_write(ATMEL_PDC_RNCR, list->rxlen[1] / tx_size);
8758 + else {
8759 + device->txnext = 0;
8760 + device->rxnext = 0;
8761 + at91_spi_write(ATMEL_PDC_TNCR, 0);
8762 + at91_spi_write(ATMEL_PDC_RNCR, 0);
8765 + // TODO: If we are doing consecutive transfers (at high speed, or
8766 + // small buffers), then it might be worth modifying the 'Delay between
8767 + // Consecutive Transfers' in the CSR registers.
8768 + // This is an issue if we cannot chain the next buffer fast enough
8769 + // in the interrupt handler.
8771 + /* Enable transmitter and receiver */
8772 + at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN | ATMEL_PDC_TXTEN);
8774 + at91_spi_write(AT91_SPI_IER, AT91_SPI_ENDRX); /* enable buffer complete interrupt */
8775 + wait_for_completion(&transfer_complete);
8777 +#ifdef DEBUG_SPI
8778 + printk("SPI transfer end\n");
8779 +#endif
8781 + return 0;
8784 +/* ......................................................................... */
8787 + * Handle interrupts from the SPI controller.
8788 + */
8789 +static irqreturn_t at91spi_interrupt(int irq, void *dev_id)
8791 + unsigned int status;
8792 + struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
8793 + struct spi_transfer_list *list = device->xfers;
8795 +#ifdef DEBUG_SPI
8796 + printk("SPI interrupt %i\n", current_device);
8797 +#endif
8799 + if (!list)
8800 + panic("at91_spi: spi_interrupt with a NULL transfer list");
8802 + status = at91_spi_read(AT91_SPI_SR) & at91_spi_read(AT91_SPI_IMR); /* read status */
8804 + dma_unmap_single(NULL, device->tx, list->txlen[list->curr], DMA_TO_DEVICE);
8805 + dma_unmap_single(NULL, device->rx, list->rxlen[list->curr], DMA_FROM_DEVICE);
8807 + device->tx = device->txnext; /* move next transfer to current transfer */
8808 + device->rx = device->rxnext;
8810 + list->curr = list->curr + 1;
8811 + if (list->curr == list->nr_transfers) { /* all transfers complete */
8812 + at91_spi_write(AT91_SPI_IDR, AT91_SPI_ENDRX); /* disable interrupt */
8814 + /* Disable transmitter and receiver */
8815 + at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
8817 + device->xfers = NULL;
8818 + complete(&transfer_complete);
8820 + else if (list->curr+1 == list->nr_transfers) { /* no more next transfers */
8821 + device->txnext = 0;
8822 + device->rxnext = 0;
8823 + at91_spi_write(ATMEL_PDC_TNCR, 0);
8824 + at91_spi_write(ATMEL_PDC_RNCR, 0);
8826 + else {
8827 + int i = (list->curr)+1;
8829 + /* If we are in 16-bit mode, we need to modify what we pass to the PDC */
8830 + int tx_size = (at91_spi_read(AT91_SPI_CSR(current_device)) & AT91_SPI_BITS_16) ? 2 : 1;
8832 + device->txnext = dma_map_single(NULL, list->tx[i], list->txlen[i], DMA_TO_DEVICE);
8833 + device->rxnext = dma_map_single(NULL, list->rx[i], list->rxlen[i], DMA_FROM_DEVICE);
8834 + at91_spi_write(ATMEL_PDC_TNPR, device->txnext);
8835 + at91_spi_write(ATMEL_PDC_RNPR, device->rxnext);
8836 + at91_spi_write(ATMEL_PDC_TNCR, list->txlen[i] / tx_size);
8837 + at91_spi_write(ATMEL_PDC_RNCR, list->rxlen[i] / tx_size);
8839 + return IRQ_HANDLED;
8842 +/* ......................................................................... */
8845 + * Initialize the SPI controller
8846 + */
8847 +static int __init at91spi_probe(struct platform_device *pdev)
8849 + int i;
8850 + unsigned long scbr;
8851 + struct resource *res;
8853 + init_MUTEX(&spi_lock);
8855 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
8856 + if (!res)
8857 + return -ENXIO;
8859 + if (!request_mem_region(res->start, res->end - res->start + 1, "at91_spi"))
8860 + return -EBUSY;
8862 + spi_base = ioremap(res->start, res->end - res->start + 1);
8863 + if (!spi_base) {
8864 + release_mem_region(res->start, res->end - res->start + 1);
8865 + return -ENOMEM;
8868 + spi_clk = clk_get(NULL, "spi_clk");
8869 + if (IS_ERR(spi_clk)) {
8870 + printk(KERN_ERR "at91_spi: no clock defined\n");
8871 + iounmap(spi_base);
8872 + release_mem_region(res->start, res->end - res->start + 1);
8873 + return -ENODEV;
8876 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SWRST); /* software reset of SPI controller */
8878 + /*
8879 + * Calculate the correct SPI baud-rate divisor.
8880 + */
8881 + scbr = clk_get_rate(spi_clk) / (2 * DEFAULT_SPI_CLK);
8882 + scbr = scbr + 1; /* round up */
8884 + printk(KERN_INFO "at91_spi: Baud rate set to %ld\n", clk_get_rate(spi_clk) / (2 * scbr));
8886 + /* Set Chip Select registers to good defaults */
8887 + for (i = 0; i < 4; i++) {
8888 + at91_spi_write(AT91_SPI_CSR(i), AT91_SPI_CPOL | AT91_SPI_BITS_8 | (16 << 16) | (scbr << 8));
8891 + at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
8893 + memset(&spi_dev, 0, sizeof(spi_dev));
8894 + spi_dev[0].pcs = 0xE;
8895 + spi_dev[1].pcs = 0xD;
8896 + spi_dev[2].pcs = 0xB;
8897 + spi_dev[3].pcs = 0x7;
8899 + if (request_irq(AT91RM9200_ID_SPI, at91spi_interrupt, 0, "spi", NULL)) {
8900 + clk_put(spi_clk);
8901 + iounmap(spi_base);
8902 + release_mem_region(res->start, res->end - res->start + 1);
8903 + return -EBUSY;
8906 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
8908 + return 0;
8911 +static int __devexit at91spi_remove(struct platform_device *pdev)
8913 + struct resource *res;
8915 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIDIS); /* Disable SPI */
8916 + clk_put(spi_clk);
8918 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
8919 + iounmap(spi_base);
8920 + release_mem_region(res->start, res->end - res->start + 1);
8922 + free_irq(AT91RM9200_ID_SPI, 0);
8923 + return 0;
8926 +static struct platform_driver at91spi_driver = {
8927 + .probe = at91spi_probe,
8928 + .remove = __devexit_p(at91spi_remove),
8929 + .driver = {
8930 + .name = "at91_spi",
8931 + .owner = THIS_MODULE,
8932 + },
8935 +static int __init at91spi_init(void)
8937 + return platform_driver_register(&at91spi_driver);
8940 +static void __exit at91spi_exit(void)
8942 + platform_driver_unregister(&at91spi_driver);
8945 +EXPORT_SYMBOL(spi_access_bus);
8946 +EXPORT_SYMBOL(spi_release_bus);
8947 +EXPORT_SYMBOL(spi_transfer);
8949 +module_init(at91spi_init);
8950 +module_exit(at91spi_exit);
8952 +MODULE_LICENSE("GPL")
8953 +MODULE_AUTHOR("Andrew Victor")
8954 +MODULE_DESCRIPTION("SPI driver for Atmel AT91RM9200")
8955 diff -urN -x CVS linux-2.6.21/drivers/char/at91_spidev.c linux-2.6-stable/drivers/char/at91_spidev.c
8956 --- linux-2.6.21/drivers/char/at91_spidev.c Thu Jan 1 02:00:00 1970
8957 +++ linux-2.6-stable/drivers/char/at91_spidev.c Tue May 8 14:31:24 2007
8958 @@ -0,0 +1,236 @@
8960 + * User-space interface to the SPI bus on Atmel AT91RM9200
8962 + * Copyright (C) 2003 SAN People (Pty) Ltd
8964 + * Based on SPI driver by Rick Bronson
8966 + * This program is free software; you can redistribute it and/or
8967 + * modify it under the terms of the GNU General Public License
8968 + * as published by the Free Software Foundation; either version
8969 + * 2 of the License, or (at your option) any later version.
8970 + */
8972 +#include <linux/module.h>
8973 +#include <linux/init.h>
8974 +#include <linux/slab.h>
8975 +#include <linux/highmem.h>
8976 +#include <linux/pagemap.h>
8977 +#include <asm/arch/spi.h>
8979 +#ifdef CONFIG_DEVFS_FS
8980 +#include <linux/devfs_fs_kernel.h>
8981 +#endif
8984 +#undef DEBUG_SPIDEV
8986 +/* ......................................................................... */
8989 + * Read or Write to SPI bus.
8990 + */
8991 +static ssize_t spidev_rd_wr(struct file *file, char *buf, size_t count, loff_t *offset)
8993 + unsigned int spi_device = (unsigned int) file->private_data;
8995 + struct mm_struct * mm;
8996 + struct page ** maplist;
8997 + struct spi_transfer_list* list;
8998 + int pgcount;
9000 + unsigned int ofs, pagelen;
9001 + int res, i, err;
9003 + if (!count) {
9004 + return 0;
9007 + list = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
9008 + if (!list) {
9009 + return -ENOMEM;
9012 + mm = current->mm;
9014 + pgcount = ((unsigned long)buf+count+PAGE_SIZE-1)/PAGE_SIZE - (unsigned long)buf/PAGE_SIZE;
9016 + if (pgcount >= MAX_SPI_TRANSFERS) {
9017 + kfree(list);
9018 + return -EFBIG;
9021 + maplist = kmalloc (pgcount * sizeof (struct page *), GFP_KERNEL);
9023 + if (!maplist) {
9024 + kfree(list);
9025 + return -ENOMEM;
9027 + flush_cache_all();
9028 + down_read(&mm->mmap_sem);
9029 + err= get_user_pages(current, mm, (unsigned long)buf, pgcount, 1, 0, maplist, NULL);
9030 + up_read(&mm->mmap_sem);
9032 + if (err < 0) {
9033 + kfree(list);
9034 + kfree(maplist);
9035 + return err;
9037 + pgcount = err;
9039 +#ifdef DEBUG_SPIDEV
9040 + printk("spidev_rd_rw: %i %i\n", count, pgcount);
9041 +#endif
9043 + /* Set default return value = transfer length */
9044 + res = count;
9046 + /*
9047 + * At this point, the virtual area buf[0] .. buf[count-1] will have
9048 + * corresponding pages mapped in the physical memory and locked until
9049 + * we unmap the kiobuf. The pages cannot be swapped out or moved
9050 + * around.
9051 + */
9052 + ofs = (unsigned long) buf & (PAGE_SIZE -1);
9053 + pagelen = PAGE_SIZE - ofs;
9054 + if (count < pagelen)
9055 + pagelen = count;
9057 + for (i = 0; i < pgcount; i++) {
9058 + flush_dcache_page(maplist[i]);
9060 + list->tx[i] = list->rx[i] = page_address(maplist[i]) + ofs;
9061 + list->txlen[i] = list->rxlen[i] = pagelen;
9063 +#ifdef DEBUG_SPIDEV
9064 + printk(" %i: %x (%i)\n", i, list->tx[i], list->txlen[i]);
9065 +#endif
9067 + ofs = 0; /* all subsequent transfers start at beginning of a page */
9068 + count = count - pagelen;
9069 + pagelen = (count < PAGE_SIZE) ? count : PAGE_SIZE;
9071 + list->nr_transfers = pgcount;
9073 + /* Perform transfer on SPI bus */
9074 + spi_access_bus(spi_device);
9075 + spi_transfer(list);
9076 + spi_release_bus(spi_device);
9078 + while (pgcount--) {
9079 + page_cache_release (maplist[pgcount]);
9081 + flush_cache_all();
9083 + kfree(maplist);
9084 + kfree(list);
9086 + return res;
9089 +static int spidev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
9091 + int spi_device = MINOR(inode->i_rdev);
9093 + if (spi_device >= NR_SPI_DEVICES)
9094 + return -ENODEV;
9096 + // TODO: This interface can be used to configure the SPI bus.
9097 + // Configurable options could include: Speed, Clock Polarity, Clock Phase
9099 + switch(cmd) {
9100 + default:
9101 + return -ENOIOCTLCMD;
9106 + * Open the SPI device
9107 + */
9108 +static int spidev_open(struct inode *inode, struct file *file)
9110 + unsigned int spi_device = MINOR(inode->i_rdev);
9112 + if (spi_device >= NR_SPI_DEVICES)
9113 + return -ENODEV;
9115 + /*
9116 + * 'private_data' is actually a pointer, but we overload it with the
9117 + * value we want to store.
9118 + */
9119 + file->private_data = (void *)spi_device;
9121 + return 0;
9125 + * Close the SPI device
9126 + */
9127 +static int spidev_close(struct inode *inode, struct file *file)
9129 + return 0;
9132 +/* ......................................................................... */
9134 +static struct file_operations spidev_fops = {
9135 + .owner = THIS_MODULE,
9136 + .llseek = no_llseek,
9137 + .read = spidev_rd_wr,
9138 + .write = (int (*) (struct file *file, const char *buf, size_t count, loff_t *offset))spidev_rd_wr,
9139 + .ioctl = spidev_ioctl,
9140 + .open = spidev_open,
9141 + .release = spidev_close,
9145 + * Install the SPI /dev interface driver
9146 + */
9147 +static int __init at91_spidev_init(void)
9149 +#ifdef CONFIG_DEVFS_FS
9150 + int i;
9151 +#endif
9153 + if (register_chrdev(SPI_MAJOR, "spi", &spidev_fops)) {
9154 + printk(KERN_ERR "at91_spidev: Unable to get major %d for SPI bus\n", SPI_MAJOR);
9155 + return -EIO;
9158 +#ifdef CONFIG_DEVFS_FS
9159 + devfs_mk_dir("spi");
9160 + for (i = 0; i < NR_SPI_DEVICES; i++) {
9161 + devfs_mk_cdev(MKDEV(SPI_MAJOR, i), S_IFCHR | S_IRUSR | S_IWUSR, "spi/%d",i);
9163 +#endif
9164 + printk(KERN_INFO "AT91 SPI driver loaded\n");
9166 + return 0;
9170 + * Remove the SPI /dev interface driver
9171 + */
9172 +static void __exit at91_spidev_exit(void)
9174 +#ifdef CONFIG_DEVFS_FS
9175 + int i;
9176 + for (i = 0; i < NR_SPI_DEVICES; i++) {
9177 + devfs_remove("spi/%d", i);
9180 + devfs_remove("spi");
9181 +#endif
9183 + if (unregister_chrdev(SPI_MAJOR, "spi")) {
9184 + printk(KERN_ERR "at91_spidev: Unable to release major %d for SPI bus\n", SPI_MAJOR);
9185 + return;
9189 +module_init(at91_spidev_init);
9190 +module_exit(at91_spidev_exit);
9192 +MODULE_LICENSE("GPL")
9193 +MODULE_AUTHOR("Andrew Victor")
9194 +MODULE_DESCRIPTION("SPI /dev interface for Atmel AT91RM9200")
9195 diff -urN -x CVS linux-2.6.21/drivers/i2c/busses/Kconfig linux-2.6-stable/drivers/i2c/busses/Kconfig
9196 --- linux-2.6.21/drivers/i2c/busses/Kconfig Thu Apr 26 05:08:32 2007
9197 +++ linux-2.6-stable/drivers/i2c/busses/Kconfig Tue May 8 12:13:31 2007
9198 @@ -81,6 +81,14 @@
9199 This supports the use of the I2C interface on Atmel AT91
9200 processors.
9202 +config I2C_AT91_CLOCKRATE
9203 + prompt "Atmel AT91 I2C/TWI clock-rate"
9204 + depends on I2C_AT91
9205 + int
9206 + default 100000
9207 + help
9208 + Set the AT91 I2C/TWI clock-rate.
9210 config I2C_AU1550
9211 tristate "Au1550/Au1200 SMBus interface"
9212 depends on I2C && (SOC_AU1550 || SOC_AU1200)
9213 @@ -545,6 +553,14 @@
9214 This driver can also be built as a module. If so, the module
9215 will be called i2c-voodoo3.
9217 +config I2C_PCA
9218 + tristate "PCA9564"
9219 + depends on I2C
9220 + select I2C_ALGOPCA
9221 + help
9222 + This driver support the Philips PCA 9564 Parallel bus to I2C
9223 + bus controller.
9225 config I2C_PCA_ISA
9226 tristate "PCA9564 on an ISA bus"
9227 depends on I2C
9228 diff -urN -x CVS linux-2.6.21/drivers/i2c/busses/Makefile linux-2.6-stable/drivers/i2c/busses/Makefile
9229 --- linux-2.6.21/drivers/i2c/busses/Makefile Thu Apr 26 05:08:32 2007
9230 +++ linux-2.6-stable/drivers/i2c/busses/Makefile Tue May 8 12:13:31 2007
9231 @@ -28,6 +28,7 @@
9232 obj-$(CONFIG_I2C_PARPORT) += i2c-parport.o
9233 obj-$(CONFIG_I2C_PARPORT_LIGHT) += i2c-parport-light.o
9234 obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o
9235 +obj-$(CONFIG_I2C_PCA) += i2c-pca.o
9236 obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o
9237 obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o
9238 obj-$(CONFIG_I2C_PNX) += i2c-pnx.o
9239 diff -urN -x CVS linux-2.6.21/drivers/i2c/busses/i2c-at91.c linux-2.6-stable/drivers/i2c/busses/i2c-at91.c
9240 --- linux-2.6.21/drivers/i2c/busses/i2c-at91.c Thu Apr 26 05:08:32 2007
9241 +++ linux-2.6-stable/drivers/i2c/busses/i2c-at91.c Tue May 8 12:13:31 2007
9242 @@ -31,8 +31,11 @@
9243 #include <asm/arch/board.h>
9244 #include <asm/arch/cpu.h>
9246 -#define TWI_CLOCK 100000 /* Hz. max 400 Kbits/sec */
9248 +/* Clockrate is configurable - max 400 Kbits/sec */
9249 +static unsigned int clockrate = CONFIG_I2C_AT91_CLOCKRATE;
9250 +module_param(clockrate, uint, 0);
9251 +MODULE_PARM_DESC(clockrate, "The TWI clockrate");
9253 static struct clk *twi_clk;
9254 static void __iomem *twi_base;
9255 @@ -53,7 +56,7 @@
9256 at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN); /* Set Master mode */
9258 /* Calcuate clock dividers */
9259 - cdiv = (clk_get_rate(twi_clk) / (2 * TWI_CLOCK)) - 3;
9260 + cdiv = (clk_get_rate(twi_clk) / (2 * clockrate)) - 3;
9261 cdiv = cdiv + 1; /* round up */
9262 ckdiv = 0;
9263 while (cdiv > 255) {
9264 @@ -61,11 +64,12 @@
9265 cdiv = cdiv >> 1;
9268 - if (cpu_is_at91rm9200()) { /* AT91RM9200 Errata #22 */
9269 - if (ckdiv > 5) {
9270 - printk(KERN_ERR "AT91 I2C: Invalid TWI_CLOCK value!\n");
9271 - ckdiv = 5;
9273 + if (cpu_is_at91rm9200() && (ckdiv > 5)) { /* AT91RM9200 Errata #22 */
9274 + printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
9275 + ckdiv = 5;
9276 + } else if (ckdiv > 7) {
9277 + printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
9278 + ckdiv = 7;
9281 at91_twi_write(AT91_TWI_CWGR, (ckdiv << 16) | (cdiv << 8) | cdiv);
9282 diff -urN -x CVS linux-2.6.21/drivers/i2c/busses/i2c-pca.c linux-2.6-stable/drivers/i2c/busses/i2c-pca.c
9283 --- linux-2.6.21/drivers/i2c/busses/i2c-pca.c Thu Jan 1 02:00:00 1970
9284 +++ linux-2.6-stable/drivers/i2c/busses/i2c-pca.c Tue May 8 12:13:31 2007
9285 @@ -0,0 +1,213 @@
9287 + * Platform driver for PCA9564 I2C bus controller.
9289 + * (C) 2006 Andrew Victor
9291 + * Based on i2c-pca-isa.c driver for PCA9564 on ISA boards
9292 + * Copyright (C) 2004 Arcom Control Systems
9294 + * This program is free software; you can redistribute it and/or modify
9295 + * it under the terms of the GNU General Public License as published by
9296 + * the Free Software Foundation; either version 2 of the License, or
9297 + * (at your option) any later version.
9299 + * This program is distributed in the hope that it will be useful,
9300 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9301 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9302 + * GNU General Public License for more details.
9304 + * You should have received a copy of the GNU General Public License
9305 + * along with this program; if not, write to the Free Software
9306 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
9307 + */
9309 +#include <linux/kernel.h>
9310 +#include <linux/module.h>
9311 +#include <linux/moduleparam.h>
9312 +#include <linux/delay.h>
9313 +#include <linux/init.h>
9314 +#include <linux/interrupt.h>
9315 +#include <linux/wait.h>
9316 +#include <linux/platform_device.h>
9318 +#include <linux/i2c.h>
9319 +#include <linux/i2c-algo-pca.h>
9321 +#include <asm/io.h>
9323 +#include "../algos/i2c-algo-pca.h"
9325 +#define PCA_OWN_ADDRESS 0x55 /* our address for slave mode */
9326 +#define PCA_CLOCK I2C_PCA_CON_59kHz
9328 +//#define REG_SHIFT 2
9329 +#define REG_SHIFT 0
9331 +//#define DEBUG_IO
9333 +#define PCA_IO_SIZE 4
9335 +static void __iomem *base_addr;
9336 +static int irq;
9337 +static wait_queue_head_t pca_wait;
9339 +static int pca_getown(struct i2c_algo_pca_data *adap)
9341 + return PCA_OWN_ADDRESS;
9344 +static int pca_getclock(struct i2c_algo_pca_data *adap)
9346 + return PCA_CLOCK;
9349 +static void pca_writebyte(struct i2c_algo_pca_data *adap, int reg, int val)
9351 +#ifdef DEBUG_IO
9352 + static char *names[] = { "T/O", "DAT", "ADR", "CON" };
9353 + printk("*** write %s at %#lx <= %#04x\n", names[reg], (unsigned long) base_addr+reg, val);
9354 +#endif
9355 + udelay(1);
9356 + outb(val, base_addr + (reg << REG_SHIFT));
9359 +static int pca_readbyte(struct i2c_algo_pca_data *adap, int reg)
9361 + int res;
9363 + udelay(1);
9364 + res = inb(base_addr + (reg << REG_SHIFT));
9365 +#ifdef DEBUG_IO
9367 + static char *names[] = { "STA", "DAT", "ADR", "CON" };
9368 + printk("*** read %s => %#04x\n", names[reg], res);
9370 +#endif
9371 + return res;
9374 +static int pca_waitforinterrupt(struct i2c_algo_pca_data *adap)
9376 + int ret = 0;
9378 + if (irq > -1) {
9379 + ret = wait_event_interruptible(pca_wait,
9380 + pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI);
9381 + } else {
9382 + while ((pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0)
9383 + udelay(100);
9385 + return ret;
9388 +static irqreturn_t pca_handler(int this_irq, void *dev_id)
9390 + wake_up_interruptible(&pca_wait);
9391 + return IRQ_HANDLED;
9394 +static struct i2c_algo_pca_data pca_i2c_data = {
9395 + .get_own = pca_getown,
9396 + .get_clock = pca_getclock,
9397 + .write_byte = pca_writebyte,
9398 + .read_byte = pca_readbyte,
9399 + .wait_for_interrupt = pca_waitforinterrupt,
9402 +static struct i2c_adapter pca_i2c_ops = {
9403 + .owner = THIS_MODULE,
9404 + .id = I2C_HW_A_PLAT,
9405 + .algo_data = &pca_i2c_data,
9406 + .name = "PCA9564",
9407 + .class = I2C_CLASS_HWMON,
9410 +static int __devinit pca_i2c_probe(struct platform_device *pdev)
9412 + struct resource *res;
9414 + init_waitqueue_head(&pca_wait);
9416 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
9417 + if (!res)
9418 + return -ENODEV;
9420 + if (!request_mem_region(res->start, PCA_IO_SIZE, "PCA9564"))
9421 + return -ENXIO;
9423 + base_addr = ioremap(res->start, PCA_IO_SIZE);
9424 + if (base_addr == NULL)
9425 + goto out_region;
9427 + irq = platform_get_irq(pdev, 0);
9428 + if (irq > -1) {
9429 + if (request_irq(irq, pca_handler, 0, "pca9564", NULL) < 0) {
9430 + printk(KERN_ERR "i2c-pca: Request irq%d failed\n", irq);
9431 + goto out_remap;
9435 + /* set up the driverfs linkage to our parent device */
9436 + pca_i2c_ops.dev.parent = &pdev->dev;
9438 + if (i2c_pca_add_bus(&pca_i2c_ops) < 0) {
9439 + printk(KERN_ERR "i2c-pca: Failed to add i2c bus\n");
9440 + goto out_irq;
9443 + return 0;
9445 + out_irq:
9446 + if (irq > -1)
9447 + free_irq(irq, &pca_i2c_ops);
9449 + out_remap:
9450 + iounmap(base_addr);
9452 + out_region:
9453 + release_mem_region(res->start, PCA_IO_SIZE);
9454 + return -ENODEV;
9457 +static int __devexit pca_i2c_remove(struct platform_device *pdev)
9459 + struct resource *res;
9461 + i2c_del_adapter(&pca_i2c_ops);
9463 + if (irq > 0)
9464 + free_irq(irq, NULL);
9466 + iounmap(base_addr);
9468 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
9469 + release_mem_region(res->start, PCA_IO_SIZE);
9471 + return 0;
9474 +static struct platform_driver pca_i2c_driver = {
9475 + .probe = pca_i2c_probe,
9476 + .remove = __devexit_p(pca_i2c_remove),
9477 + .driver = {
9478 + .name = "pca9564",
9479 + .owner = THIS_MODULE,
9480 + },
9483 +static int __init pca_i2c_init(void)
9485 + return platform_driver_register(&pca_i2c_driver);
9488 +static void __exit pca_i2c_exit(void)
9490 + platform_driver_unregister(&pca_i2c_driver);
9493 +module_init(pca_i2c_init);
9494 +module_exit(pca_i2c_exit);
9496 +MODULE_AUTHOR("Andrew Victor");
9497 +MODULE_DESCRIPTION("PCA9564 platform driver");
9498 +MODULE_LICENSE("GPL");
9499 diff -urN -x CVS linux-2.6.21/drivers/input/touchscreen/ads7846.c linux-2.6-stable/drivers/input/touchscreen/ads7846.c
9500 --- linux-2.6.21/drivers/input/touchscreen/ads7846.c Thu Apr 26 05:08:32 2007
9501 +++ linux-2.6-stable/drivers/input/touchscreen/ads7846.c Tue May 8 12:56:33 2007
9502 @@ -39,7 +39,8 @@
9504 * This code has been heavily tested on a Nokia 770, and lightly
9505 * tested on other ads7846 devices (OSK/Mistral, Lubbock).
9506 - * Support for ads7843 and ads7845 has only been stubbed in.
9507 + * Support for ads7843 tested on Atmel at91sam926x-EK.
9508 + * Support for ads7845 has only been stubbed in.
9510 * IRQ handling needs a workaround because of a shortcoming in handling
9511 * edge triggered IRQs on some platforms like the OMAP1/2. These
9512 @@ -246,18 +247,16 @@
9514 /* REVISIT: take a few more samples, and compare ... */
9516 - /* maybe off internal vREF */
9517 - if (use_internal) {
9518 - req->ref_off = REF_OFF;
9519 - req->xfer[4].tx_buf = &req->ref_off;
9520 - req->xfer[4].len = 1;
9521 - spi_message_add_tail(&req->xfer[4], &req->msg);
9523 - req->xfer[5].rx_buf = &req->scratch;
9524 - req->xfer[5].len = 2;
9525 - CS_CHANGE(req->xfer[5]);
9526 - spi_message_add_tail(&req->xfer[5], &req->msg);
9528 + /* converter in low power mode & enable PENIRQ */
9529 + req->ref_off = PWRDOWN;
9530 + req->xfer[4].tx_buf = &req->ref_off;
9531 + req->xfer[4].len = 1;
9532 + spi_message_add_tail(&req->xfer[4], &req->msg);
9534 + req->xfer[5].rx_buf = &req->scratch;
9535 + req->xfer[5].len = 2;
9536 + CS_CHANGE(req->xfer[5]);
9537 + spi_message_add_tail(&req->xfer[5], &req->msg);
9539 ts->irq_disabled = 1;
9540 disable_irq(spi->irq);
9541 @@ -536,6 +535,9 @@
9542 } else
9543 Rt = 0;
9545 + if (ts->model == 7843)
9546 + Rt = ts->pressure_max / 2;
9548 /* Sample found inconsistent by debouncing or pressure is beyond
9549 * the maximum. Don't report it to user space, repeat at least
9550 * once more the measurement
9551 diff -urN -x CVS linux-2.6.21/drivers/leds/Kconfig linux-2.6-stable/drivers/leds/Kconfig
9552 --- linux-2.6.21/drivers/leds/Kconfig Thu Apr 26 05:08:32 2007
9553 +++ linux-2.6-stable/drivers/leds/Kconfig Tue May 8 12:13:31 2007
9554 @@ -76,6 +76,13 @@
9555 This option enables support for the Soekris net4801 and net4826 error
9556 LED.
9558 +config LEDS_AT91
9559 + tristate "LED support using AT91 GPIOs"
9560 + depends on LEDS_CLASS && ARCH_AT91 && !LEDS
9561 + help
9562 + This option enables support for LEDs connected to GPIO lines
9563 + on AT91-based boards.
9565 config LEDS_WRAP
9566 tristate "LED Support for the WRAP series LEDs"
9567 depends on LEDS_CLASS && SCx200_GPIO
9568 diff -urN -x CVS linux-2.6.21/drivers/leds/Makefile linux-2.6-stable/drivers/leds/Makefile
9569 --- linux-2.6.21/drivers/leds/Makefile Thu Apr 26 05:08:32 2007
9570 +++ linux-2.6-stable/drivers/leds/Makefile Tue May 8 12:13:31 2007
9571 @@ -16,6 +16,7 @@
9572 obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
9573 obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
9574 obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
9575 +obj-$(CONFIG_LEDS_AT91) += leds-at91.o
9577 # LED Triggers
9578 obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
9579 diff -urN -x CVS linux-2.6.21/drivers/leds/leds-at91.c linux-2.6-stable/drivers/leds/leds-at91.c
9580 --- linux-2.6.21/drivers/leds/leds-at91.c Thu Jan 1 02:00:00 1970
9581 +++ linux-2.6-stable/drivers/leds/leds-at91.c Tue May 8 12:13:31 2007
9582 @@ -0,0 +1,140 @@
9584 + * AT91 GPIO based LED driver
9586 + * Copyright (C) 2006 David Brownell
9588 + * This program is free software; you can redistribute it and/or modify
9589 + * it under the terms of the GNU General Public License version 2 as
9590 + * published by the Free Software Foundation.
9591 + */
9593 +#include <linux/kernel.h>
9594 +#include <linux/init.h>
9595 +#include <linux/platform_device.h>
9596 +#include <linux/leds.h>
9598 +#include <asm/arch/board.h>
9599 +#include <asm/arch/gpio.h>
9601 +static LIST_HEAD(at91_led_list); /* list of AT91 LEDs */
9603 +struct at91_led {
9604 + struct led_classdev cdev;
9605 + struct list_head list;
9606 + struct at91_gpio_led *led_data;
9610 + * Change the state of the LED.
9611 + */
9612 +static void at91_led_set(struct led_classdev *cdev, enum led_brightness value)
9614 + struct at91_led *led = container_of(cdev, struct at91_led, cdev);
9615 + short active = (value == LED_OFF);
9617 + if (led->led_data->flags & 1) /* active high/low? */
9618 + active = !active;
9619 + at91_set_gpio_value(led->led_data->gpio, active);
9622 +static int __devexit at91_led_remove(struct platform_device *pdev)
9624 + struct at91_led *led;
9626 + list_for_each_entry (led, &at91_led_list, list)
9627 + led_classdev_unregister(&led->cdev);
9629 +#warning "Free allocated memory"
9630 + // TODO: Free memory. kfree(led);
9632 + return 0;
9635 +static int __init at91_led_probe(struct platform_device *pdev)
9637 + int status = 0;
9638 + struct at91_gpio_led *pdata = pdev->dev.platform_data;
9639 + unsigned nr_leds;
9640 + struct at91_led *led;
9642 + if (!pdata)
9643 + return -ENODEV;
9645 + nr_leds = pdata->index; /* first index stores number of LEDs */
9647 + while (nr_leds--) {
9648 + led = kzalloc(sizeof(struct at91_led), GFP_KERNEL);
9649 + if (!led) {
9650 + dev_err(&pdev->dev, "No memory for device\n");
9651 + status = -ENOMEM;
9652 + goto cleanup;
9654 + led->led_data = pdata;
9655 + led->cdev.name = pdata->name;
9656 + led->cdev.brightness_set = at91_led_set,
9657 + led->cdev.default_trigger = pdata->trigger;
9659 + status = led_classdev_register(&pdev->dev, &led->cdev);
9660 + if (status < 0) {
9661 + dev_err(&pdev->dev, "led_classdev_register failed - %d\n", status);
9662 +cleanup:
9663 + at91_led_remove(pdev);
9664 + break;
9666 + list_add(&led->list, &at91_led_list);
9667 + pdata++;
9669 + return status;
9672 +#ifdef CONFIG_PM
9673 +static int at91_led_suspend(struct platform_device *dev, pm_message_t state)
9675 + struct at91_led *led;
9677 + list_for_each_entry (led, &at91_led_list, list)
9678 + led_classdev_suspend(&led->cdev);
9680 + return 0;
9683 +static int at91_led_resume(struct platform_device *dev)
9685 + struct at91_led *led;
9687 + list_for_each_entry (led, &at91_led_list, list)
9688 + led_classdev_resume(&led->cdev);
9690 + return 0;
9692 +#else
9693 +#define at91_led_suspend NULL
9694 +#define at91_led_resume NULL
9695 +#endif
9697 +static struct platform_driver at91_led_driver = {
9698 + .probe = at91_led_probe,
9699 + .remove = __devexit_p(at91_led_remove),
9700 + .suspend = at91_led_suspend,
9701 + .resume = at91_led_resume,
9702 + .driver = {
9703 + .name = "at91_leds",
9704 + .owner = THIS_MODULE,
9705 + },
9708 +static int __init at91_led_init(void)
9710 + return platform_driver_register(&at91_led_driver);
9712 +module_init(at91_led_init);
9714 +static void __exit at91_led_exit(void)
9716 + platform_driver_unregister(&at91_led_driver);
9718 +module_exit(at91_led_exit);
9720 +MODULE_DESCRIPTION("AT91 GPIO LED driver");
9721 +MODULE_AUTHOR("David Brownell");
9722 +MODULE_LICENSE("GPL");
9723 diff -urN -x CVS linux-2.6.21/drivers/mmc/at91_mci.c linux-2.6-stable/drivers/mmc/at91_mci.c
9724 --- linux-2.6.21/drivers/mmc/at91_mci.c Thu Apr 26 05:08:32 2007
9725 +++ linux-2.6-stable/drivers/mmc/at91_mci.c Fri May 11 17:13:13 2007
9726 @@ -86,7 +86,7 @@
9728 #define AT91_MCI_ERRORS (AT91_MCI_RINDE | AT91_MCI_RDIRE | AT91_MCI_RCRCE \
9729 | AT91_MCI_RENDE | AT91_MCI_RTOE | AT91_MCI_DCRCE \
9730 - | AT91_MCI_DTOE | AT91_MCI_OVRE | AT91_MCI_UNRE)
9731 + | AT91_MCI_DTOE | AT91_MCI_OVRE | AT91_MCI_UNRE)
9733 #define at91_mci_read(host, reg) __raw_readl((host)->baseaddr + (reg))
9734 #define at91_mci_write(host, reg, val) __raw_writel((val), (host)->baseaddr + (reg))
9735 @@ -561,9 +561,7 @@
9736 pr_debug("Status = %08X [%08X %08X %08X %08X]\n",
9737 status, cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
9739 - if (status & (AT91_MCI_RINDE | AT91_MCI_RDIRE | AT91_MCI_RCRCE |
9740 - AT91_MCI_RENDE | AT91_MCI_RTOE | AT91_MCI_DCRCE |
9741 - AT91_MCI_DTOE | AT91_MCI_OVRE | AT91_MCI_UNRE)) {
9742 + if (status & AT91_MCI_ERRORS) {
9743 if ((status & AT91_MCI_RCRCE) &&
9744 ((cmd->opcode == MMC_SEND_OP_COND) || (cmd->opcode == SD_APP_OP_COND))) {
9745 cmd->error = MMC_ERR_NONE;
9746 @@ -665,15 +663,15 @@
9748 int_status = at91_mci_read(host, AT91_MCI_SR);
9749 int_mask = at91_mci_read(host, AT91_MCI_IMR);
9752 pr_debug("MCI irq: status = %08X, %08X, %08X\n", int_status, int_mask,
9753 int_status & int_mask);
9756 int_status = int_status & int_mask;
9758 if (int_status & AT91_MCI_ERRORS) {
9759 completed = 1;
9762 if (int_status & AT91_MCI_UNRE)
9763 pr_debug("MMC: Underrun error\n");
9764 if (int_status & AT91_MCI_OVRE)
9765 @@ -821,7 +819,7 @@
9766 mmc->f_min = 375000;
9767 mmc->f_max = 25000000;
9768 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
9769 - mmc->caps = MMC_CAP_BYTEBLOCK;
9770 + mmc->caps = MMC_CAP_BYTEBLOCK | MMC_CAP_MULTIWRITE;
9772 mmc->max_blk_size = 4095;
9773 mmc->max_blk_count = mmc->max_req_size;
9774 @@ -895,6 +893,8 @@
9776 mmc_add_host(mmc);
9778 + device_init_wakeup(&pdev->dev, 1);
9781 * monitor card insertion/removal if we can
9783 @@ -924,6 +924,8 @@
9785 host = mmc_priv(mmc);
9787 + device_init_wakeup(&pdev->dev, 0);
9789 if (host->present != -1) {
9790 free_irq(host->board->det_pin, host);
9791 cancel_delayed_work(&host->mmc->detect);
9792 @@ -951,8 +953,12 @@
9793 static int at91_mci_suspend(struct platform_device *pdev, pm_message_t state)
9795 struct mmc_host *mmc = platform_get_drvdata(pdev);
9796 + struct at91mci_host *host = mmc_priv(mmc);
9797 int ret = 0;
9799 + if (device_may_wakeup(&pdev->dev))
9800 + enable_irq_wake(host->board->det_pin);
9802 if (mmc)
9803 ret = mmc_suspend_host(mmc, state);
9805 @@ -962,8 +968,12 @@
9806 static int at91_mci_resume(struct platform_device *pdev)
9808 struct mmc_host *mmc = platform_get_drvdata(pdev);
9809 + struct at91mci_host *host = mmc_priv(mmc);
9810 int ret = 0;
9812 + if (device_may_wakeup(&pdev->dev))
9813 + disable_irq_wake(host->board->det_pin);
9815 if (mmc)
9816 ret = mmc_resume_host(mmc);
9818 diff -urN -x CVS linux-2.6.21/drivers/mtd/devices/Kconfig linux-2.6-stable/drivers/mtd/devices/Kconfig
9819 --- linux-2.6.21/drivers/mtd/devices/Kconfig Thu Apr 26 05:08:32 2007
9820 +++ linux-2.6-stable/drivers/mtd/devices/Kconfig Tue May 8 14:31:24 2007
9821 @@ -267,5 +267,11 @@
9822 LinuxBIOS or if you need to recover a DiskOnChip Millennium on which
9823 you have managed to wipe the first block.
9825 -endmenu
9826 +config MTD_AT91_DATAFLASH
9827 + tristate "AT91RM9200 DataFlash AT45DBxxx (legacy driver)"
9828 + depends on MTD && ARCH_AT91RM9200 && AT91_SPI
9829 + help
9830 + This enables access to the DataFlash (AT45DBxxx) on the AT91RM9200.
9831 + If you have such a board, say 'Y'.
9833 +endmenu
9834 diff -urN -x CVS linux-2.6.21/drivers/mtd/devices/Makefile linux-2.6-stable/drivers/mtd/devices/Makefile
9835 --- linux-2.6.21/drivers/mtd/devices/Makefile Thu Apr 26 05:08:32 2007
9836 +++ linux-2.6-stable/drivers/mtd/devices/Makefile Tue May 8 14:31:24 2007
9837 @@ -17,3 +17,4 @@
9838 obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o
9839 obj-$(CONFIG_MTD_DATAFLASH) += mtd_dataflash.o
9840 obj-$(CONFIG_MTD_M25P80) += m25p80.o
9841 +obj-$(CONFIG_MTD_AT91_DATAFLASH)+= at91_dataflash.o
9842 diff -urN -x CVS linux-2.6.21/drivers/mtd/devices/at91_dataflash.c linux-2.6-stable/drivers/mtd/devices/at91_dataflash.c
9843 --- linux-2.6.21/drivers/mtd/devices/at91_dataflash.c Thu Jan 1 02:00:00 1970
9844 +++ linux-2.6-stable/drivers/mtd/devices/at91_dataflash.c Tue May 8 14:31:24 2007
9845 @@ -0,0 +1,667 @@
9847 + * Atmel DataFlash driver for Atmel AT91RM9200 (Thunder)
9849 + * Copyright (C) SAN People (Pty) Ltd
9851 + * This program is free software; you can redistribute it and/or
9852 + * modify it under the terms of the GNU General Public License
9853 + * as published by the Free Software Foundation; either version
9854 + * 2 of the License, or (at your option) any later version.
9857 +#include <linux/module.h>
9858 +#include <linux/init.h>
9859 +#include <linux/slab.h>
9860 +#include <linux/pci.h>
9861 +#include <linux/mtd/mtd.h>
9862 +#include <linux/mtd/partitions.h>
9864 +#include <asm/arch/spi.h>
9866 +#undef DEBUG_DATAFLASH
9868 +#define DATAFLASH_MAX_DEVICES 4 /* max number of dataflash devices */
9869 +#undef DATAFLASH_ALWAYS_ADD_DEVICE /* always add whole device when using partitions? */
9871 +#define OP_READ_CONTINUOUS 0xE8
9872 +#define OP_READ_PAGE 0xD2
9873 +#define OP_READ_BUFFER1 0xD4
9874 +#define OP_READ_BUFFER2 0xD6
9875 +#define OP_READ_STATUS 0xD7
9877 +#define OP_ERASE_PAGE 0x81
9878 +#define OP_ERASE_BLOCK 0x50
9880 +#define OP_TRANSFER_BUF1 0x53
9881 +#define OP_TRANSFER_BUF2 0x55
9882 +#define OP_COMPARE_BUF1 0x60
9883 +#define OP_COMPARE_BUF2 0x61
9885 +#define OP_PROGRAM_VIA_BUF1 0x82
9886 +#define OP_PROGRAM_VIA_BUF2 0x85
9888 +struct dataflash_local
9890 + int spi; /* SPI chip-select number */
9892 + unsigned int page_size; /* number of bytes per page */
9893 + unsigned short page_offset; /* page offset in flash address */
9897 +/* Detected DataFlash devices */
9898 +static struct mtd_info* mtd_devices[DATAFLASH_MAX_DEVICES];
9899 +static int nr_devices = 0;
9901 +/* ......................................................................... */
9903 +#ifdef CONFIG_MTD_PARTITIONS
9905 +static struct mtd_partition static_partitions_2M[] =
9908 + .name = "bootloader",
9909 + .offset = 0,
9910 + .size = 1 * 32 * 8 * 528, /* 1st sector = 32 blocks * 8 pages * 528 bytes */
9911 + .mask_flags = MTD_WRITEABLE, /* read-only */
9912 + },
9914 + .name = "kernel",
9915 + .offset = MTDPART_OFS_NXTBLK,
9916 + .size = 6 * 32 * 8 * 528, /* 6 sectors */
9917 + },
9919 + .name = "filesystem",
9920 + .offset = MTDPART_OFS_NXTBLK,
9921 + .size = MTDPART_SIZ_FULL, /* rest = 9 sectors */
9925 +static struct mtd_partition static_partitions_4M[] =
9928 + .name = "bootloader",
9929 + .offset = 0,
9930 + .size = 1 * 64 * 8 * 528, /* 1st sector = 64 blocks * 8 pages * 528 bytes */
9931 + .mask_flags = MTD_WRITEABLE, /* read-only */
9932 + },
9934 + .name = "kernel",
9935 + .offset = MTDPART_OFS_NXTBLK,
9936 + .size = 4 * 64 * 8 * 528, /* 4 sectors */
9937 + },
9939 + .name = "filesystem",
9940 + .offset = MTDPART_OFS_NXTBLK,
9941 + .size = MTDPART_SIZ_FULL, /* rest = 11 sectors */
9945 +#if defined(CONFIG_MACH_KAFA)
9946 +static struct mtd_partition static_partitions_8M[] =
9949 + name: "romboot",
9950 + offset: 0,
9951 + size: 16 * 1056, /* 160 Kb */
9952 + mask_flags: MTD_WRITEABLE, /* read-only */
9953 + },
9955 + name: "uboot",
9956 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
9957 + size: 128 * 1056, /* 1 MB */
9958 + },
9960 + name: "kernel",
9961 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
9962 + size: 1024 * 1056, /* 1 MB */
9963 + },
9965 + name: "filesystem",
9966 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
9967 + size: MTDPART_SIZ_FULL,
9971 +#elif defined(CONFIG_MACH_MULTMDP)
9973 +static struct mtd_partition static_partitions_8M[] =
9976 + .name = "bootloader",
9977 + .offset = 0,
9978 + .size = 12 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
9979 + .mask_flags = MTD_WRITEABLE, /* read-only */
9980 + },
9982 + .name = "configuration",
9983 + .offset = MTDPART_OFS_NXTBLK,
9984 + .size = 20 * 1056,
9985 + },
9987 + .name = "kernel",
9988 + .offset = MTDPART_OFS_NXTBLK,
9989 + .size = 1520 * 1056,
9990 + },
9992 + .name = "filesystem",
9993 + .offset = MTDPART_OFS_NXTBLK,
9994 + .size = MTDPART_SIZ_FULL,
9998 +#else
10000 +static struct mtd_partition static_partitions_8M[] =
10003 + .name = "bootloader",
10004 + .offset = 0,
10005 + .size = 1 * 32 * 8 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
10006 + .mask_flags = MTD_WRITEABLE, /* read-only */
10007 + },
10009 + .name = "kernel",
10010 + .offset = MTDPART_OFS_NXTBLK,
10011 + .size = 5 * 32 * 8 * 1056, /* 5 sectors */
10012 + },
10014 + .name = "filesystem",
10015 + .offset = MTDPART_OFS_NXTBLK,
10016 + .size = MTDPART_SIZ_FULL, /* rest = 26 sectors */
10019 +#endif
10021 +static const char *part_probes[] = { "cmdlinepart", NULL, };
10023 +#endif
10025 +/* ......................................................................... */
10027 +/* Allocate a single SPI transfer descriptor. We're assuming that if multiple
10028 + SPI transfers occur at the same time, spi_access_bus() will serialize them.
10029 + If this is not valid, then either (i) each dataflash 'priv' structure
10030 + needs it's own transfer descriptor, (ii) we lock this one, or (iii) use
10031 + another mechanism. */
10032 +static struct spi_transfer_list* spi_transfer_desc;
10035 + * Perform a SPI transfer to access the DataFlash device.
10036 + */
10037 +static int do_spi_transfer(int nr, char* tx, int tx_len, char* rx, int rx_len,
10038 + char* txnext, int txnext_len, char* rxnext, int rxnext_len)
10040 + struct spi_transfer_list* list = spi_transfer_desc;
10042 + list->tx[0] = tx; list->txlen[0] = tx_len;
10043 + list->rx[0] = rx; list->rxlen[0] = rx_len;
10045 + list->tx[1] = txnext; list->txlen[1] = txnext_len;
10046 + list->rx[1] = rxnext; list->rxlen[1] = rxnext_len;
10048 + list->nr_transfers = nr;
10050 + return spi_transfer(list);
10053 +/* ......................................................................... */
10056 + * Poll the DataFlash device until it is READY.
10057 + */
10058 +static void at91_dataflash_waitready(void)
10060 + char* command = kmalloc(2, GFP_KERNEL);
10062 + if (!command)
10063 + return;
10065 + do {
10066 + command[0] = OP_READ_STATUS;
10067 + command[1] = 0;
10069 + do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
10070 + } while ((command[1] & 0x80) == 0);
10072 + kfree(command);
10076 + * Return the status of the DataFlash device.
10077 + */
10078 +static unsigned short at91_dataflash_status(void)
10080 + unsigned short status;
10081 + char* command = kmalloc(2, GFP_KERNEL);
10083 + if (!command)
10084 + return 0;
10086 + command[0] = OP_READ_STATUS;
10087 + command[1] = 0;
10089 + do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
10090 + status = command[1];
10092 + kfree(command);
10093 + return status;
10096 +/* ......................................................................... */
10099 + * Erase blocks of flash.
10100 + */
10101 +static int at91_dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
10103 + struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
10104 + unsigned int pageaddr;
10105 + char* command;
10107 +#ifdef DEBUG_DATAFLASH
10108 + printk("dataflash_erase: addr=%i len=%i\n", instr->addr, instr->len);
10109 +#endif
10111 + /* Sanity checks */
10112 + if (instr->addr + instr->len > mtd->size)
10113 + return -EINVAL;
10114 + if ((instr->len % mtd->erasesize != 0) || (instr->len % priv->page_size != 0))
10115 + return -EINVAL;
10116 + if ((instr->addr % priv->page_size) != 0)
10117 + return -EINVAL;
10119 + command = kmalloc(4, GFP_KERNEL);
10120 + if (!command)
10121 + return -ENOMEM;
10123 + while (instr->len > 0) {
10124 + /* Calculate flash page address */
10125 + pageaddr = (instr->addr / priv->page_size) << priv->page_offset;
10127 + command[0] = OP_ERASE_PAGE;
10128 + command[1] = (pageaddr & 0x00FF0000) >> 16;
10129 + command[2] = (pageaddr & 0x0000FF00) >> 8;
10130 + command[3] = 0;
10131 +#ifdef DEBUG_DATAFLASH
10132 + printk("ERASE: (%x) %x %x %x [%i]\n", command[0], command[1], command[2], command[3], pageaddr);
10133 +#endif
10135 + /* Send command to SPI device */
10136 + spi_access_bus(priv->spi);
10137 + do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
10139 + at91_dataflash_waitready(); /* poll status until ready */
10140 + spi_release_bus(priv->spi);
10142 + instr->addr += priv->page_size; /* next page */
10143 + instr->len -= priv->page_size;
10146 + kfree(command);
10148 + /* Inform MTD subsystem that erase is complete */
10149 + instr->state = MTD_ERASE_DONE;
10150 + if (instr->callback)
10151 + instr->callback(instr);
10153 + return 0;
10157 + * Read from the DataFlash device.
10158 + * from : Start offset in flash device
10159 + * len : Amount to read
10160 + * retlen : About of data actually read
10161 + * buf : Buffer containing the data
10162 + */
10163 +static int at91_dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
10165 + struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
10166 + unsigned int addr;
10167 + char* command;
10169 +#ifdef DEBUG_DATAFLASH
10170 + printk("dataflash_read: %lli .. %lli\n", from, from+len);
10171 +#endif
10173 + *retlen = 0;
10175 + /* Sanity checks */
10176 + if (!len)
10177 + return 0;
10178 + if (from + len > mtd->size)
10179 + return -EINVAL;
10181 + /* Calculate flash page/byte address */
10182 + addr = (((unsigned)from / priv->page_size) << priv->page_offset) + ((unsigned)from % priv->page_size);
10184 + command = kmalloc(8, GFP_KERNEL);
10185 + if (!command)
10186 + return -ENOMEM;
10188 + command[0] = OP_READ_CONTINUOUS;
10189 + command[1] = (addr & 0x00FF0000) >> 16;
10190 + command[2] = (addr & 0x0000FF00) >> 8;
10191 + command[3] = (addr & 0x000000FF);
10192 +#ifdef DEBUG_DATAFLASH
10193 + printk("READ: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
10194 +#endif
10196 + /* Send command to SPI device */
10197 + spi_access_bus(priv->spi);
10198 + do_spi_transfer(2, command, 8, command, 8, buf, len, buf, len);
10199 + spi_release_bus(priv->spi);
10201 + *retlen = len;
10202 + kfree(command);
10203 + return 0;
10207 + * Write to the DataFlash device.
10208 + * to : Start offset in flash device
10209 + * len : Amount to write
10210 + * retlen : Amount of data actually written
10211 + * buf : Buffer containing the data
10212 + */
10213 +static int at91_dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
10215 + struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
10216 + unsigned int pageaddr, addr, offset, writelen;
10217 + size_t remaining;
10218 + u_char *writebuf;
10219 + unsigned short status;
10220 + int res = 0;
10221 + char* command;
10222 + char* tmpbuf = NULL;
10224 +#ifdef DEBUG_DATAFLASH
10225 + printk("dataflash_write: %lli .. %lli\n", to, to+len);
10226 +#endif
10228 + *retlen = 0;
10230 + /* Sanity checks */
10231 + if (!len)
10232 + return 0;
10233 + if (to + len > mtd->size)
10234 + return -EINVAL;
10236 + command = kmalloc(4, GFP_KERNEL);
10237 + if (!command)
10238 + return -ENOMEM;
10240 + pageaddr = ((unsigned)to / priv->page_size);
10241 + offset = ((unsigned)to % priv->page_size);
10242 + if (offset + len > priv->page_size)
10243 + writelen = priv->page_size - offset;
10244 + else
10245 + writelen = len;
10246 + writebuf = (u_char *)buf;
10247 + remaining = len;
10249 + /* Allocate temporary buffer */
10250 + tmpbuf = kmalloc(priv->page_size, GFP_KERNEL);
10251 + if (!tmpbuf) {
10252 + kfree(command);
10253 + return -ENOMEM;
10256 + /* Gain access to the SPI bus */
10257 + spi_access_bus(priv->spi);
10259 + while (remaining > 0) {
10260 +#ifdef DEBUG_DATAFLASH
10261 + printk("write @ %i:%i len=%i\n", pageaddr, offset, writelen);
10262 +#endif
10264 + /* (1) Transfer to Buffer1 */
10265 + if (writelen != priv->page_size) {
10266 + addr = pageaddr << priv->page_offset;
10267 + command[0] = OP_TRANSFER_BUF1;
10268 + command[1] = (addr & 0x00FF0000) >> 16;
10269 + command[2] = (addr & 0x0000FF00) >> 8;
10270 + command[3] = 0;
10271 +#ifdef DEBUG_DATAFLASH
10272 + printk("TRANSFER: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
10273 +#endif
10274 + do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
10275 + at91_dataflash_waitready();
10278 + /* (2) Program via Buffer1 */
10279 + addr = (pageaddr << priv->page_offset) + offset;
10280 + command[0] = OP_PROGRAM_VIA_BUF1;
10281 + command[1] = (addr & 0x00FF0000) >> 16;
10282 + command[2] = (addr & 0x0000FF00) >> 8;
10283 + command[3] = (addr & 0x000000FF);
10284 +#ifdef DEBUG_DATAFLASH
10285 + printk("PROGRAM: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
10286 +#endif
10287 + do_spi_transfer(2, command, 4, command, 4, writebuf, writelen, tmpbuf, writelen);
10288 + at91_dataflash_waitready();
10290 + /* (3) Compare to Buffer1 */
10291 + addr = pageaddr << priv->page_offset;
10292 + command[0] = OP_COMPARE_BUF1;
10293 + command[1] = (addr & 0x00FF0000) >> 16;
10294 + command[2] = (addr & 0x0000FF00) >> 8;
10295 + command[3] = 0;
10296 +#ifdef DEBUG_DATAFLASH
10297 + printk("COMPARE: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
10298 +#endif
10299 + do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
10300 + at91_dataflash_waitready();
10302 + /* Get result of the compare operation */
10303 + status = at91_dataflash_status();
10304 + if ((status & 0x40) == 1) {
10305 + printk("at91_dataflash: Write error on page %i\n", pageaddr);
10306 + remaining = 0;
10307 + res = -EIO;
10310 + remaining = remaining - writelen;
10311 + pageaddr++;
10312 + offset = 0;
10313 + writebuf += writelen;
10314 + *retlen += writelen;
10316 + if (remaining > priv->page_size)
10317 + writelen = priv->page_size;
10318 + else
10319 + writelen = remaining;
10322 + /* Release SPI bus */
10323 + spi_release_bus(priv->spi);
10325 + kfree(tmpbuf);
10326 + kfree(command);
10327 + return res;
10330 +/* ......................................................................... */
10333 + * Initialize and register DataFlash device with MTD subsystem.
10334 + */
10335 +static int __init add_dataflash(int channel, char *name, int IDsize,
10336 + int nr_pages, int pagesize, int pageoffset)
10338 + struct mtd_info *device;
10339 + struct dataflash_local *priv;
10340 +#ifdef CONFIG_MTD_PARTITIONS
10341 + struct mtd_partition *mtd_parts = 0;
10342 + int mtd_parts_nr = 0;
10343 +#endif
10345 + if (nr_devices >= DATAFLASH_MAX_DEVICES) {
10346 + printk(KERN_ERR "at91_dataflash: Too many devices detected\n");
10347 + return 0;
10350 + device = kmalloc(sizeof(struct mtd_info) + strlen(name) + 8, GFP_KERNEL);
10351 + if (!device)
10352 + return -ENOMEM;
10353 + memset(device, 0, sizeof(struct mtd_info));
10355 + device->name = (char *)&device[1];
10356 + sprintf(device->name, "%s.spi%d", name, channel);
10357 + device->size = nr_pages * pagesize;
10358 + device->erasesize = pagesize;
10359 + device->writesize = pagesize;
10360 + device->owner = THIS_MODULE;
10361 + device->type = MTD_DATAFLASH;
10362 + device->flags = MTD_WRITEABLE;
10363 + device->erase = at91_dataflash_erase;
10364 + device->read = at91_dataflash_read;
10365 + device->write = at91_dataflash_write;
10367 + priv = (struct dataflash_local *) kmalloc(sizeof(struct dataflash_local), GFP_KERNEL);
10368 + if (!priv) {
10369 + kfree(device);
10370 + return -ENOMEM;
10372 + memset(priv, 0, sizeof(struct dataflash_local));
10374 + priv->spi = channel;
10375 + priv->page_size = pagesize;
10376 + priv->page_offset = pageoffset;
10377 + device->priv = priv;
10379 + mtd_devices[nr_devices] = device;
10380 + nr_devices++;
10381 + printk("at91_dataflash: %s detected [spi%i] (%i bytes)\n", name, channel, device->size);
10383 +#ifdef CONFIG_MTD_PARTITIONS
10384 +#ifdef CONFIG_MTD_CMDLINE_PARTS
10385 + mtd_parts_nr = parse_mtd_partitions(device, part_probes, &mtd_parts, 0);
10386 +#endif
10387 + if (mtd_parts_nr <= 0) {
10388 + switch (IDsize) {
10389 + case SZ_2M:
10390 + mtd_parts = static_partitions_2M;
10391 + mtd_parts_nr = ARRAY_SIZE(static_partitions_2M);
10392 + break;
10393 + case SZ_4M:
10394 + mtd_parts = static_partitions_4M;
10395 + mtd_parts_nr = ARRAY_SIZE(static_partitions_4M);
10396 + break;
10397 + case SZ_8M:
10398 + mtd_parts = static_partitions_8M;
10399 + mtd_parts_nr = ARRAY_SIZE(static_partitions_8M);
10400 + break;
10404 + if (mtd_parts_nr > 0) {
10405 +#ifdef DATAFLASH_ALWAYS_ADD_DEVICE
10406 + add_mtd_device(device);
10407 +#endif
10408 + return add_mtd_partitions(device, mtd_parts, mtd_parts_nr);
10410 +#endif
10411 + return add_mtd_device(device); /* add whole device */
10415 + * Detect and initialize DataFlash device connected to specified SPI channel.
10417 + * Device Density ID code Nr Pages Page Size Page offset
10418 + * AT45DB011B 1Mbit (128K) xx0011xx (0x0c) 512 264 9
10419 + * AT45DB021B 2Mbit (256K) xx0101xx (0x14) 1025 264 9
10420 + * AT45DB041B 4Mbit (512K) xx0111xx (0x1c) 2048 264 9
10421 + * AT45DB081B 8Mbit (1M) xx1001xx (0x24) 4096 264 9
10422 + * AT45DB0161B 16Mbit (2M) xx1011xx (0x2c) 4096 528 10
10423 + * AT45DB0321B 32Mbit (4M) xx1101xx (0x34) 8192 528 10
10424 + * AT45DB0642 64Mbit (8M) xx1111xx (0x3c) 8192 1056 11
10425 + * AT45DB1282 128Mbit (16M) xx0100xx (0x10) 16384 1056 11
10426 + */
10427 +static int __init at91_dataflash_detect(int channel)
10429 + int res = 0;
10430 + unsigned short status;
10432 + spi_access_bus(channel);
10433 + status = at91_dataflash_status();
10434 + spi_release_bus(channel);
10435 + if (status != 0xff) { /* no dataflash device there */
10436 + switch (status & 0x3c) {
10437 + case 0x0c: /* 0 0 1 1 */
10438 + res = add_dataflash(channel, "AT45DB011B", SZ_128K, 512, 264, 9);
10439 + break;
10440 + case 0x14: /* 0 1 0 1 */
10441 + res = add_dataflash(channel, "AT45DB021B", SZ_256K, 1025, 264, 9);
10442 + break;
10443 + case 0x1c: /* 0 1 1 1 */
10444 + res = add_dataflash(channel, "AT45DB041B", SZ_512K, 2048, 264, 9);
10445 + break;
10446 + case 0x24: /* 1 0 0 1 */
10447 + res = add_dataflash(channel, "AT45DB081B", SZ_1M, 4096, 264, 9);
10448 + break;
10449 + case 0x2c: /* 1 0 1 1 */
10450 + res = add_dataflash(channel, "AT45DB161B", SZ_2M, 4096, 528, 10);
10451 + break;
10452 + case 0x34: /* 1 1 0 1 */
10453 + res = add_dataflash(channel, "AT45DB321B", SZ_4M, 8192, 528, 10);
10454 + break;
10455 + case 0x3c: /* 1 1 1 1 */
10456 + res = add_dataflash(channel, "AT45DB642", SZ_8M, 8192, 1056, 11);
10457 + break;
10458 +// Currently unsupported since Atmel removed the "Main Memory Program via Buffer" commands.
10459 +// case 0x10: /* 0 1 0 0 */
10460 +// res = add_dataflash(channel, "AT45DB1282", SZ_16M, 16384, 1056, 11);
10461 +// break;
10462 + default:
10463 + printk(KERN_ERR "at91_dataflash: Unknown device (%x)\n", status & 0x3c);
10467 + return res;
10470 +static int __init at91_dataflash_init(void)
10472 + spi_transfer_desc = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
10473 + if (!spi_transfer_desc)
10474 + return -ENOMEM;
10476 + /* DataFlash (SPI chip select 0) */
10477 + at91_dataflash_detect(0);
10479 +#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
10480 + /* DataFlash card (SPI chip select 3) */
10481 + at91_dataflash_detect(3);
10482 +#endif
10484 + return 0;
10487 +static void __exit at91_dataflash_exit(void)
10489 + int i;
10491 + for (i = 0; i < DATAFLASH_MAX_DEVICES; i++) {
10492 + if (mtd_devices[i]) {
10493 +#ifdef CONFIG_MTD_PARTITIONS
10494 + del_mtd_partitions(mtd_devices[i]);
10495 +#else
10496 + del_mtd_device(mtd_devices[i]);
10497 +#endif
10498 + kfree(mtd_devices[i]->priv);
10499 + kfree(mtd_devices[i]);
10502 + nr_devices = 0;
10503 + kfree(spi_transfer_desc);
10507 +module_init(at91_dataflash_init);
10508 +module_exit(at91_dataflash_exit);
10510 +MODULE_LICENSE("GPL");
10511 +MODULE_AUTHOR("Andrew Victor");
10512 +MODULE_DESCRIPTION("DataFlash driver for Atmel AT91RM9200");
10513 diff -urN -x CVS linux-2.6.21/drivers/mtd/nand/at91_nand.c linux-2.6-stable/drivers/mtd/nand/at91_nand.c
10514 --- linux-2.6.21/drivers/mtd/nand/at91_nand.c Thu Apr 26 05:08:32 2007
10515 +++ linux-2.6-stable/drivers/mtd/nand/at91_nand.c Tue May 8 12:13:31 2007
10516 @@ -82,6 +82,10 @@
10517 at91_set_gpio_value(host->board->enable_pin, 1);
10520 +#ifdef CONFIG_MTD_PARTITIONS
10521 +const char *part_probes[] = { "cmdlinepart", NULL };
10522 +#endif
10525 * Probe for the NAND device.
10527 @@ -151,6 +155,12 @@
10528 #ifdef CONFIG_MTD_PARTITIONS
10529 if (host->board->partition_info)
10530 partitions = host->board->partition_info(mtd->size, &num_partitions);
10531 +#ifdef CONFIG_MTD_CMDLINE_PARTS
10532 + else {
10533 + mtd->name = "at91_nand";
10534 + num_partitions = parse_mtd_partitions(mtd, part_probes, &partitions, 0);
10536 +#endif
10538 if ((!partitions) || (num_partitions == 0)) {
10539 printk(KERN_ERR "at91_nand: No parititions defined, or unsupported device.\n");
10540 diff -urN -x CVS linux-2.6.21/drivers/net/arm/at91_ether.c linux-2.6-stable/drivers/net/arm/at91_ether.c
10541 --- linux-2.6.21/drivers/net/arm/at91_ether.c Thu Apr 26 05:08:32 2007
10542 +++ linux-2.6-stable/drivers/net/arm/at91_ether.c Tue May 8 12:13:31 2007
10543 @@ -225,6 +225,16 @@
10544 if (!(phy & ((1 << 2) | 1)))
10545 goto done;
10547 + else if (lp->phy_type == MII_T78Q21x3_ID) { /* ack interrupt in Teridian PHY */
10548 + read_phy(lp->phy_address, MII_T78Q21INT_REG, &phy);
10549 + if (!(phy & ((1 << 2) | 1)))
10550 + goto done;
10552 + else if (lp->phy_type == MII_DP83848_ID) {
10553 + read_phy(lp->phy_address, MII_DPPHYSTS_REG, &phy); /* ack interrupt in DP83848 PHY */
10554 + if (!(phy & (1 << 7)))
10555 + goto done;
10558 update_linkspeed(dev, 0);
10560 @@ -280,6 +290,19 @@
10561 dsintr = (1 << 10) | ( 1 << 8);
10562 write_phy(lp->phy_address, MII_TPISTATUS, dsintr);
10564 + else if (lp->phy_type == MII_T78Q21x3_ID) { /* for Teridian PHY */
10565 + read_phy(lp->phy_address, MII_T78Q21INT_REG, &dsintr);
10566 + dsintr = dsintr | 0x500; /* set bits 8, 10 */
10567 + write_phy(lp->phy_address, MII_T78Q21INT_REG, dsintr);
10569 + else if (lp->phy_type == MII_DP83848_ID) { /* National Semiconductor DP83848 PHY */
10570 + read_phy(lp->phy_address, MII_DPMISR_REG, &dsintr);
10571 + dsintr = dsintr | 0x3c; /* set bits 2..5 */
10572 + write_phy(lp->phy_address, MII_DPMISR_REG, dsintr);
10573 + read_phy(lp->phy_address, MII_DPMICR_REG, &dsintr);
10574 + dsintr = dsintr | 0x3; /* set bits 0,1 */
10575 + write_phy(lp->phy_address, MII_DPMICR_REG, dsintr);
10578 disable_mdi();
10579 spin_unlock_irq(&lp->lock);
10580 @@ -323,6 +346,19 @@
10581 dsintr = ~((1 << 10) | (1 << 8));
10582 write_phy(lp->phy_address, MII_TPISTATUS, dsintr);
10584 + else if (lp->phy_type == MII_T78Q21x3_ID) { /* for Teridian PHY */
10585 + read_phy(lp->phy_address, MII_T78Q21INT_REG, &dsintr);
10586 + dsintr = dsintr & ~0x500; /* clear bits 8, 10 */
10587 + write_phy(lp->phy_address, MII_T78Q21INT_REG, dsintr);
10589 + else if (lp->phy_type == MII_DP83848_ID) { /* National Semiconductor DP83848 PHY */
10590 + read_phy(lp->phy_address, MII_DPMICR_REG, &dsintr);
10591 + dsintr = dsintr & ~0x3; /* clear bits 0, 1 */
10592 + write_phy(lp->phy_address, MII_DPMICR_REG, dsintr);
10593 + read_phy(lp->phy_address, MII_DPMISR_REG, &dsintr);
10594 + dsintr = dsintr & ~0x3c; /* clear bits 2..5 */
10595 + write_phy(lp->phy_address, MII_DPMISR_REG, dsintr);
10598 disable_mdi();
10599 spin_unlock_irq(&lp->lock);
10600 @@ -535,8 +571,8 @@
10601 mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
10604 - at91_emac_write(AT91_EMAC_HSH, mc_filter[0]);
10605 - at91_emac_write(AT91_EMAC_HSL, mc_filter[1]);
10606 + at91_emac_write(AT91_EMAC_HSL, mc_filter[0]);
10607 + at91_emac_write(AT91_EMAC_HSH, mc_filter[1]);
10611 @@ -943,14 +979,22 @@
10612 struct net_device *dev;
10613 struct at91_private *lp;
10614 unsigned int val;
10615 - int res;
10616 + struct resource *res;
10617 + int ret;
10619 dev = alloc_etherdev(sizeof(struct at91_private));
10620 if (!dev)
10621 return -ENOMEM;
10623 - dev->base_addr = AT91_VA_BASE_EMAC;
10624 - dev->irq = AT91RM9200_ID_EMAC;
10625 + /* Get I/O base address and IRQ */
10626 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
10627 + if (!res) {
10628 + free_netdev(dev);
10629 + return -ENODEV;
10631 + dev->base_addr = res->start;
10632 + dev->irq = platform_get_irq(pdev, 0);
10634 SET_MODULE_OWNER(dev);
10636 /* Install the interrupt handler */
10637 @@ -1023,12 +1067,12 @@
10638 lp->phy_address = phy_address; /* MDI address of PHY */
10640 /* Register the network interface */
10641 - res = register_netdev(dev);
10642 - if (res) {
10643 + ret = register_netdev(dev);
10644 + if (ret) {
10645 free_irq(dev->irq, dev);
10646 free_netdev(dev);
10647 dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);
10648 - return res;
10649 + return ret;
10652 /* Determine current link speed */
10653 @@ -1063,10 +1107,16 @@
10654 printk(KERN_INFO "%s: Broadcom BCM5221 PHY\n", dev->name);
10655 else if (phy_type == MII_DP83847_ID)
10656 printk(KERN_INFO "%s: National Semiconductor DP83847 PHY\n", dev->name);
10657 + else if (phy_type == MII_DP83848_ID)
10658 + printk(KERN_INFO "%s: National Semiconductor DP83848 PHY\n", dev->name);
10659 else if (phy_type == MII_AC101L_ID)
10660 printk(KERN_INFO "%s: Altima AC101L PHY\n", dev->name);
10661 else if (phy_type == MII_KS8721_ID)
10662 printk(KERN_INFO "%s: Micrel KS8721 PHY\n", dev->name);
10663 + else if (phy_type == MII_T78Q21x3_ID)
10664 + printk(KERN_INFO "%s: Teridian 78Q21x3 PHY\n", dev->name);
10665 + else if (phy_type == MII_LAN83C185_ID)
10666 + printk(KERN_INFO "%s: SMSC LAN83C185 PHY\n", dev->name);
10668 return 0;
10670 @@ -1104,8 +1154,11 @@
10671 case MII_RTL8201_ID: /* Realtek RTL8201: PHY_ID1 = 0, PHY_ID2 = 0x8201 */
10672 case MII_BCM5221_ID: /* Broadcom BCM5221: PHY_ID1 = 0x40, PHY_ID2 = 0x61e0 */
10673 case MII_DP83847_ID: /* National Semiconductor DP83847: */
10674 + case MII_DP83848_ID: /* National Semiconductor DP83848: */
10675 case MII_AC101L_ID: /* Altima AC101L: PHY_ID1 = 0x22, PHY_ID2 = 0x5520 */
10676 case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */
10677 + case MII_T78Q21x3_ID: /* Teridian 78Q21x3: PHY_ID1 = 0x0E, PHY_ID2 = 7237 */
10678 + case MII_LAN83C185_ID: /* SMSC LAN83C185: PHY_ID1 = 0x0007, PHY_ID2 = 0xC0A1 */
10679 detected = at91ether_setup(phy_id, phy_address, pdev, ether_clk);
10680 break;
10682 diff -urN -x CVS linux-2.6.21/drivers/net/arm/at91_ether.h linux-2.6-stable/drivers/net/arm/at91_ether.h
10683 --- linux-2.6.21/drivers/net/arm/at91_ether.h Thu Apr 26 05:08:32 2007
10684 +++ linux-2.6-stable/drivers/net/arm/at91_ether.h Tue May 8 12:13:31 2007
10685 @@ -17,39 +17,46 @@
10688 /* Davicom 9161 PHY */
10689 -#define MII_DM9161_ID 0x0181b880
10690 -#define MII_DM9161A_ID 0x0181b8a0
10692 -/* Davicom specific registers */
10693 -#define MII_DSCR_REG 16
10694 -#define MII_DSCSR_REG 17
10695 -#define MII_DSINTR_REG 21
10696 +#define MII_DM9161_ID 0x0181b880
10697 +#define MII_DM9161A_ID 0x0181b8a0
10698 +#define MII_DSCR_REG 16
10699 +#define MII_DSCSR_REG 17
10700 +#define MII_DSINTR_REG 21
10702 /* Intel LXT971A PHY */
10703 -#define MII_LXT971A_ID 0x001378E0
10705 -/* Intel specific registers */
10706 -#define MII_ISINTE_REG 18
10707 -#define MII_ISINTS_REG 19
10708 -#define MII_LEDCTRL_REG 20
10709 +#define MII_LXT971A_ID 0x001378E0
10710 +#define MII_ISINTE_REG 18
10711 +#define MII_ISINTS_REG 19
10712 +#define MII_LEDCTRL_REG 20
10714 /* Realtek RTL8201 PHY */
10715 -#define MII_RTL8201_ID 0x00008200
10716 +#define MII_RTL8201_ID 0x00008200
10718 /* Broadcom BCM5221 PHY */
10719 -#define MII_BCM5221_ID 0x004061e0
10721 -/* Broadcom specific registers */
10722 -#define MII_BCMINTR_REG 26
10723 +#define MII_BCM5221_ID 0x004061e0
10724 +#define MII_BCMINTR_REG 26
10726 /* National Semiconductor DP83847 */
10727 -#define MII_DP83847_ID 0x20005c30
10728 +#define MII_DP83847_ID 0x20005c30
10730 +/* National Semiconductor DP83848 */
10731 +#define MII_DP83848_ID 0x20005c90
10732 +#define MII_DPPHYSTS_REG 16
10733 +#define MII_DPMICR_REG 17
10734 +#define MII_DPMISR_REG 18
10736 /* Altima AC101L PHY */
10737 -#define MII_AC101L_ID 0x00225520
10738 +#define MII_AC101L_ID 0x00225520
10740 /* Micrel KS8721 PHY */
10741 -#define MII_KS8721_ID 0x00221610
10742 +#define MII_KS8721_ID 0x00221610
10744 +/* Teridian 78Q2123/78Q2133 */
10745 +#define MII_T78Q21x3_ID 0x000e7230
10746 +#define MII_T78Q21INT_REG 17
10748 +/* SMSC LAN83C185 */
10749 +#define MII_LAN83C185_ID 0x0007C0A0
10751 /* ........................................................................ */
10753 diff -urN -x CVS linux-2.6.21/drivers/pcmcia/at91_cf.c linux-2.6-stable/drivers/pcmcia/at91_cf.c
10754 --- linux-2.6.21/drivers/pcmcia/at91_cf.c Thu Apr 26 05:08:32 2007
10755 +++ linux-2.6-stable/drivers/pcmcia/at91_cf.c Tue May 8 12:13:31 2007
10756 @@ -332,20 +332,27 @@
10757 struct at91_cf_data *board = cf->board;
10759 pcmcia_socket_dev_suspend(&pdev->dev, mesg);
10761 if (device_may_wakeup(&pdev->dev)) {
10762 enable_irq_wake(board->det_pin);
10763 if (board->irq_pin)
10764 enable_irq_wake(board->irq_pin);
10765 - } else {
10766 - disable_irq_wake(board->det_pin);
10767 - if (board->irq_pin)
10768 - disable_irq_wake(board->irq_pin);
10771 return 0;
10774 static int at91_cf_resume(struct platform_device *pdev)
10776 + struct at91_cf_socket *cf = platform_get_drvdata(pdev);
10777 + struct at91_cf_data *board = cf->board;
10779 + if (device_may_wakeup(&pdev->dev)) {
10780 + disable_irq_wake(board->det_pin);
10781 + if (board->irq_pin)
10782 + disable_irq_wake(board->irq_pin);
10785 pcmcia_socket_dev_resume(&pdev->dev);
10786 return 0;
10788 @@ -360,7 +367,6 @@
10789 .name = (char *) driver_name,
10790 .owner = THIS_MODULE,
10792 - .probe = at91_cf_probe,
10793 .remove = __exit_p(at91_cf_remove),
10794 .suspend = at91_cf_suspend,
10795 .resume = at91_cf_resume,
10796 @@ -370,7 +376,7 @@
10798 static int __init at91_cf_init(void)
10800 - return platform_driver_register(&at91_cf_driver);
10801 + return platform_driver_probe(&at91_cf_driver, at91_cf_probe);
10803 module_init(at91_cf_init);
10805 diff -urN -x CVS linux-2.6.21/drivers/serial/atmel_serial.c linux-2.6-stable/drivers/serial/atmel_serial.c
10806 --- linux-2.6.21/drivers/serial/atmel_serial.c Thu Apr 26 05:08:32 2007
10807 +++ linux-2.6-stable/drivers/serial/atmel_serial.c Tue May 8 12:13:31 2007
10808 @@ -7,6 +7,8 @@
10809 * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.
10810 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
10812 + * DMA support added by Chip Coldwell.
10814 * This program is free software; you can redistribute it and/or modify
10815 * it under the terms of the GNU General Public License as published by
10816 * the Free Software Foundation; either version 2 of the License, or
10817 @@ -33,6 +35,7 @@
10818 #include <linux/sysrq.h>
10819 #include <linux/tty_flip.h>
10820 #include <linux/platform_device.h>
10821 +#include <linux/dma-mapping.h>
10822 #include <linux/atmel_pdc.h>
10824 #include <asm/io.h>
10825 @@ -47,6 +50,11 @@
10827 #include "atmel_serial.h"
10829 +#define SUPPORT_PDC
10830 +#define PDC_BUFFER_SIZE (L1_CACHE_BYTES << 3)
10831 +#warning "Revisit"
10832 +#define PDC_RX_TIMEOUT (3 * 10) /* 3 bytes */
10834 #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
10835 #define SUPPORT_SYSRQ
10836 #endif
10837 @@ -107,6 +115,13 @@
10838 static int (*atmel_open_hook)(struct uart_port *);
10839 static void (*atmel_close_hook)(struct uart_port *);
10841 +struct atmel_dma_buffer {
10842 + unsigned char *buf;
10843 + dma_addr_t dma_addr;
10844 + size_t dma_size;
10845 + unsigned int ofs;
10849 * We wrap our port structure around the generic uart_port.
10851 @@ -114,10 +129,20 @@
10852 struct uart_port uart; /* uart */
10853 struct clk *clk; /* uart clock */
10854 unsigned short suspended; /* is port suspended? */
10856 + short use_dma_rx; /* enable PDC receiver */
10857 + short pdc_rx_idx; /* current PDC RX buffer */
10858 + struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */
10860 + short use_dma_tx; /* enable PDC transmitter */
10861 + struct atmel_dma_buffer pdc_tx; /* PDC transmitter */
10864 static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
10866 +#define PDC_RX_BUF(port) &(port)->pdc_rx[(port)->pdc_rx_idx]
10867 +#define PDC_RX_SWITCH(port) (port)->pdc_rx_idx = !(port)->pdc_rx_idx
10869 #ifdef SUPPORT_SYSRQ
10870 static struct console atmel_console;
10871 #endif
10872 @@ -205,7 +230,12 @@
10874 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
10876 - UART_PUT_IDR(port, ATMEL_US_TXRDY);
10877 + if (atmel_port->use_dma_tx) {
10878 + UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
10879 + UART_PUT_IDR(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
10881 + else
10882 + UART_PUT_IDR(port, ATMEL_US_TXRDY);
10886 @@ -215,7 +245,17 @@
10888 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
10890 - UART_PUT_IER(port, ATMEL_US_TXRDY);
10891 + if (atmel_port->use_dma_tx) {
10892 + if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN)
10893 + /* The transmitter is already running. Yes, we
10894 + really need this.*/
10895 + return;
10897 + UART_PUT_IER(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
10898 + UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
10900 + else
10901 + UART_PUT_IER(port, ATMEL_US_TXRDY);
10905 @@ -225,7 +265,12 @@
10907 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
10909 - UART_PUT_IDR(port, ATMEL_US_RXRDY);
10910 + if (atmel_port->use_dma_rx) {
10911 + UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS); /* disable PDC receive */
10912 + UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
10914 + else
10915 + UART_PUT_IDR(port, ATMEL_US_RXRDY);
10919 @@ -248,6 +293,134 @@
10923 + * Receive data via the PDC. A buffer has been fulled.
10924 + */
10925 +static void atmel_pdc_endrx(struct uart_port *port)
10927 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
10928 + struct tty_struct *tty = port->info->tty;
10929 + struct atmel_dma_buffer *pdc = PDC_RX_BUF(atmel_port);
10930 + unsigned int count;
10932 + count = pdc->dma_size - pdc->ofs;
10933 + if (likely(count > 0)) {
10934 + dma_sync_single_for_cpu(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
10935 + tty_insert_flip_string(tty, pdc->buf + pdc->ofs, count);
10936 + tty_flip_buffer_push(tty);
10938 + port->icount.rx += count;
10941 + /* Set this buffer as the next receive buffer */
10942 + pdc->ofs = 0;
10943 + UART_PUT_RNPR(port, pdc->dma_addr);
10944 + UART_PUT_RNCR(port, pdc->dma_size);
10946 + /* Switch to next buffer */
10947 + PDC_RX_SWITCH(atmel_port); /* next PDC buffer */
10951 + * Receive data via the PDC. At least one byte was received, but the
10952 + * buffer was not full when the inter-character timeout expired.
10953 + */
10954 +static void atmel_pdc_timeout(struct uart_port *port)
10956 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
10957 + struct tty_struct *tty = port->info->tty;
10958 + struct atmel_dma_buffer *pdc = PDC_RX_BUF(atmel_port);
10959 + /* unsigned */ int ofs, count;
10961 + ofs = UART_GET_RPR(port) - pdc->dma_addr; /* current DMA adress */
10962 + count = ofs - pdc->ofs;
10964 + if (likely(count > 0)) {
10965 + dma_sync_single_for_cpu(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
10966 + tty_insert_flip_string(tty, pdc->buf + pdc->ofs, count);
10967 + tty_flip_buffer_push(tty);
10969 + pdc->ofs = ofs;
10970 + port->icount.rx += count;
10973 + /* reset the UART timeout */
10974 + UART_PUT_CR(port, ATMEL_US_STTTO);
10978 + * Deal with parity, framing and overrun errors.
10979 + */
10980 +static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status)
10982 + /* clear error */
10983 + UART_PUT_CR(port, ATMEL_US_RSTSTA);
10985 + if (status & ATMEL_US_RXBRK) {
10986 + status &= ~(ATMEL_US_PARE | ATMEL_US_FRAME); /* ignore side-effect */
10987 + port->icount.brk++;
10989 + if (status & ATMEL_US_PARE)
10990 + port->icount.parity++;
10991 + if (status & ATMEL_US_FRAME)
10992 + port->icount.frame++;
10993 + if (status & ATMEL_US_OVRE)
10994 + port->icount.overrun++;
10998 + * A transmission via the PDC is complete.
10999 + */
11000 +static void atmel_pdc_endtx(struct uart_port *port)
11002 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
11003 + struct circ_buf *xmit = &port->info->xmit;
11004 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
11006 + xmit->tail += pdc->ofs;
11007 + if (xmit->tail >= SERIAL_XMIT_SIZE)
11008 + xmit->tail -= SERIAL_XMIT_SIZE;
11010 + port->icount.tx += pdc->ofs;
11011 + pdc->ofs = 0;
11013 + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
11014 + uart_write_wakeup(port);
11018 + * The PDC transmitter is idle, so either start the next transfer or
11019 + * disable the transmitter.
11020 + */
11021 +static void atmel_pdc_txbufe(struct uart_port *port)
11023 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
11024 + struct circ_buf *xmit = &port->info->xmit;
11025 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
11026 + int count;
11028 + if (!uart_circ_empty(xmit)) {
11029 + /* more to transmit - setup next transfer */
11030 + UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
11031 + dma_sync_single_for_device(port->dev, pdc->dma_addr, pdc->dma_size, DMA_TO_DEVICE);
11033 + if (xmit->tail < xmit->head)
11034 + count = xmit->head - xmit->tail;
11035 + else
11036 + count = SERIAL_XMIT_SIZE - xmit->tail;
11037 + pdc->ofs = count;
11039 + UART_PUT_TPR(port, pdc->dma_addr + xmit->tail);
11040 + UART_PUT_TCR(port, count);
11041 + UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
11043 + else {
11044 + /* nothing left to transmit - disable the transmitter */
11045 + UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
11046 + UART_PUT_IDR(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
11051 * Characters received (called from interrupt handler)
11053 static void atmel_rx_chars(struct uart_port *port)
11054 @@ -349,6 +522,14 @@
11055 status = UART_GET_CSR(port);
11056 pending = status & UART_GET_IMR(port);
11057 while (pending) {
11058 + /* PDC receive */
11059 + if (pending & ATMEL_US_ENDRX)
11060 + atmel_pdc_endrx(port);
11061 + if (pending & ATMEL_US_TIMEOUT)
11062 + atmel_pdc_timeout(port);
11063 + if (atmel_port->use_dma_rx && pending & (ATMEL_US_RXBRK | ATMEL_US_OVRE | ATMEL_US_FRAME | ATMEL_US_PARE))
11064 + atmel_pdc_rxerr(port, pending);
11066 /* Interrupt receive */
11067 if (pending & ATMEL_US_RXRDY)
11068 atmel_rx_chars(port);
11069 @@ -363,6 +544,12 @@
11070 if (pending & (ATMEL_US_RIIC | ATMEL_US_DSRIC | ATMEL_US_DCDIC | ATMEL_US_CTSIC))
11071 wake_up_interruptible(&port->info->delta_msr_wait);
11073 + /* PDC transmit */
11074 + if (pending & ATMEL_US_ENDTX)
11075 + atmel_pdc_endtx(port);
11076 + if (pending & ATMEL_US_TXBUFE)
11077 + atmel_pdc_txbufe(port);
11079 /* Interrupt transmit */
11080 if (pending & ATMEL_US_TXRDY)
11081 atmel_tx_chars(port);
11082 @@ -401,6 +588,47 @@
11086 + * Initialize DMA (if necessary)
11087 + */
11088 + if (atmel_port->use_dma_rx) {
11089 + int i;
11091 + for (i = 0; i < 2; i++) {
11092 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
11094 + pdc->buf = kmalloc(PDC_BUFFER_SIZE, GFP_KERNEL);
11095 + if (pdc->buf == NULL) {
11096 + if (i != 0) {
11097 + dma_unmap_single(port->dev, atmel_port->pdc_rx[0].dma_addr, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
11098 + kfree(atmel_port->pdc_rx[0].buf);
11100 + free_irq(port->irq, port);
11101 + return -ENOMEM;
11103 + pdc->dma_addr = dma_map_single(port->dev, pdc->buf, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
11104 + pdc->dma_size = PDC_BUFFER_SIZE;
11105 + pdc->ofs = 0;
11108 + atmel_port->pdc_rx_idx = 0;
11110 + UART_PUT_RPR(port, atmel_port->pdc_rx[0].dma_addr);
11111 + UART_PUT_RCR(port, PDC_BUFFER_SIZE);
11113 + UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr);
11114 + UART_PUT_RNCR(port, PDC_BUFFER_SIZE);
11116 + if (atmel_port->use_dma_tx) {
11117 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
11118 + struct circ_buf *xmit = &port->info->xmit;
11120 + pdc->buf = xmit->buf;
11121 + pdc->dma_addr = dma_map_single(port->dev, pdc->buf, SERIAL_XMIT_SIZE, DMA_TO_DEVICE);
11122 + pdc->dma_size = SERIAL_XMIT_SIZE;
11123 + pdc->ofs = 0;
11126 + /*
11127 * If there is a specific "open" function (to register
11128 * control line interrupts)
11130 @@ -418,7 +646,15 @@
11131 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
11132 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); /* enable xmit & rcvr */
11134 - UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
11135 + if (atmel_port->use_dma_rx) {
11136 + UART_PUT_RTOR(port, PDC_RX_TIMEOUT); /* set UART timeout */
11137 + UART_PUT_CR(port, ATMEL_US_STTTO);
11139 + UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
11140 + UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); /* enable PDC controller */
11142 + else
11143 + UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
11145 return 0;
11147 @@ -431,6 +667,31 @@
11148 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
11151 + * Ensure everything is stopped.
11152 + */
11153 + atmel_stop_rx(port);
11154 + atmel_stop_tx(port);
11156 + /*
11157 + * Shut-down the DMA.
11158 + */
11159 + if (atmel_port->use_dma_rx) {
11160 + int i;
11162 + for (i = 0; i < 2; i++) {
11163 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
11165 + dma_unmap_single(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
11166 + kfree(pdc->buf);
11169 + if (atmel_port->use_dma_tx) {
11170 + struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
11172 + dma_unmap_single(port->dev, pdc->dma_addr, pdc->dma_size, DMA_TO_DEVICE);
11175 + /*
11176 * Disable all interrupts, port and break condition.
11178 UART_PUT_CR(port, ATMEL_US_RSTSTA);
11179 @@ -481,14 +742,20 @@
11181 static void atmel_set_termios(struct uart_port *port, struct ktermios * termios, struct ktermios * old)
11183 + struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
11184 unsigned long flags;
11185 unsigned int mode, imr, quot, baud;
11187 + /* Get current mode register */
11188 + mode = UART_GET_MR(port) & ~(ATMEL_US_USCLKS | ATMEL_US_CHRL | ATMEL_US_NBSTOP | ATMEL_US_PAR);
11190 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
11191 quot = uart_get_divisor(port, baud);
11193 - /* Get current mode register */
11194 - mode = UART_GET_MR(port) & ~(ATMEL_US_CHRL | ATMEL_US_NBSTOP | ATMEL_US_PAR);
11195 + if (quot > 65535) { /* BRGR is 16-bit, so switch to slower clock */
11196 + quot /= 8;
11197 + mode |= ATMEL_US_USCLKS_MCK_DIV8;
11200 /* byte size */
11201 switch (termios->c_cflag & CSIZE) {
11202 @@ -534,6 +801,9 @@
11203 if (termios->c_iflag & (BRKINT | PARMRK))
11204 port->read_status_mask |= ATMEL_US_RXBRK;
11206 + if (atmel_port->use_dma_rx) /* need to enable error interrupts */
11207 + UART_PUT_IER(port, port->read_status_mask);
11210 * Characters to ignore
11212 @@ -712,6 +982,13 @@
11213 clk_enable(atmel_port->clk);
11214 port->uartclk = clk_get_rate(atmel_port->clk);
11217 +#ifdef SUPPORT_PDC
11218 + atmel_port->use_dma_rx = data->use_dma_rx;
11219 + atmel_port->use_dma_tx = data->use_dma_tx;
11220 + if (atmel_port->use_dma_tx)
11221 + port->fifosize = PDC_BUFFER_SIZE;
11222 +#endif
11226 @@ -888,7 +1165,8 @@
11227 struct uart_port *port = platform_get_drvdata(pdev);
11228 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
11230 - if (device_may_wakeup(&pdev->dev) && !at91_suspend_entering_slow_clock())
11231 + if (device_may_wakeup(&pdev->dev)
11232 + && !clk_must_disable(atmel_port->clk))
11233 enable_irq_wake(port->irq);
11234 else {
11235 uart_suspend_port(&atmel_uart, port);
11236 diff -urN -x CVS linux-2.6.21/drivers/serial/atmel_serial.h linux-2.6-stable/drivers/serial/atmel_serial.h
11237 --- linux-2.6.21/drivers/serial/atmel_serial.h Thu Apr 26 05:08:32 2007
11238 +++ linux-2.6-stable/drivers/serial/atmel_serial.h Tue May 8 12:13:31 2007
11239 @@ -46,6 +46,9 @@
11240 #define ATMEL_US_USMODE_ISO7816_T1 6
11241 #define ATMEL_US_USMODE_IRDA 8
11242 #define ATMEL_US_USCLKS (3 << 4) /* Clock Selection */
11243 +#define ATMEL_US_USCLKS_MCK (0 << 4)
11244 +#define ATMEL_US_USCLKS_MCK_DIV8 (1 << 4)
11245 +#define ATMEL_US_USCLKS_SCK (3 << 4)
11246 #define ATMEL_US_CHRL (3 << 6) /* Character Length */
11247 #define ATMEL_US_CHRL_5 (0 << 6)
11248 #define ATMEL_US_CHRL_6 (1 << 6)
11249 diff -urN -x CVS linux-2.6.21/drivers/spi/Kconfig linux-2.6-stable/drivers/spi/Kconfig
11250 --- linux-2.6.21/drivers/spi/Kconfig Thu Apr 26 05:08:32 2007
11251 +++ linux-2.6-stable/drivers/spi/Kconfig Tue May 8 14:31:24 2007
11252 @@ -54,6 +54,7 @@
11253 config SPI_ATMEL
11254 tristate "Atmel SPI Controller"
11255 depends on (ARCH_AT91 || AVR32) && SPI_MASTER
11256 + select SPI_AT91_MANUAL_CS if ARCH_AT91RM9200
11257 help
11258 This selects a driver for the Atmel SPI Controller, present on
11259 many AT32 (AVR32) and AT91 (ARM) chips.
11260 @@ -82,6 +83,24 @@
11261 inexpensive battery powered microcontroller evaluation board.
11262 This same cable can be used to flash new firmware.
11264 +config SPI_AT91
11265 + tristate "AT91RM9200 Bitbang SPI Master"
11266 + depends on SPI_MASTER && ARCH_AT91RM9200 && !SPI_ATMEL && EXPERIMENTAL
11267 + select SPI_BITBANG
11268 + select SPI_AT91_MANUAL_CS
11269 + help
11270 + This is dumb PIO bitbanging driver for the Atmel AT91RM9200.
11271 + The SPI_ATMEL driver will be its replacement, using the native
11272 + SPI hardware and its DMA controller.
11274 +config SPI_AT91_MANUAL_CS
11275 + bool
11276 + depends on ARCH_AT91RM9200
11277 + help
11278 + Works around an AT91RM9200 problem whereby the SPI chip-select
11279 + will be wrongly disabled. The workaround uses those pins as
11280 + GPIOs instead of letting the SPI controller manage them.
11282 config SPI_IMX
11283 tristate "Freescale iMX SPI controller"
11284 depends on SPI_MASTER && ARCH_IMX && EXPERIMENTAL
11285 diff -urN -x CVS linux-2.6.21/drivers/spi/Makefile linux-2.6-stable/drivers/spi/Makefile
11286 --- linux-2.6.21/drivers/spi/Makefile Thu Apr 26 05:08:32 2007
11287 +++ linux-2.6-stable/drivers/spi/Makefile Tue May 8 14:31:24 2007
11288 @@ -20,6 +20,7 @@
11289 obj-$(CONFIG_SPI_MPC83xx) += spi_mpc83xx.o
11290 obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
11291 obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
11292 +obj-$(CONFIG_SPI_AT91) += spi_at91_bitbang.o
11293 # ... add above this line ...
11295 # SPI protocol drivers (device/link on bus)
11296 diff -urN -x CVS linux-2.6.21/drivers/spi/spi_at91_bitbang.c linux-2.6-stable/drivers/spi/spi_at91_bitbang.c
11297 --- linux-2.6.21/drivers/spi/spi_at91_bitbang.c Thu Jan 1 02:00:00 1970
11298 +++ linux-2.6-stable/drivers/spi/spi_at91_bitbang.c Tue May 8 14:31:24 2007
11299 @@ -0,0 +1,207 @@
11301 + * at91_spi.c - at91 SPI driver (BOOTSTRAP/BITBANG VERSION)
11303 + * Copyright (C) 2006 David Brownell
11305 + * This program is free software; you can redistribute it and/or modify
11306 + * it under the terms of the GNU General Public License as published by
11307 + * the Free Software Foundation; either version 2 of the License, or
11308 + * (at your option) any later version.
11310 + * This program is distributed in the hope that it will be useful,
11311 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
11312 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11313 + * GNU General Public License for more details.
11315 + * You should have received a copy of the GNU General Public License
11316 + * along with this program; if not, write to the Free Software
11317 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11318 + */
11319 +#include <linux/kernel.h>
11320 +#include <linux/init.h>
11321 +#include <linux/platform_device.h>
11323 +#include <linux/spi/spi.h>
11324 +#include <linux/spi/spi_bitbang.h>
11326 +#include <asm/arch/gpio.h>
11330 + * FIXME this bitbanging version is just to help bootstrap systems until
11331 + * there's a native SPI+IRQ+DMA controller driver ... such a driver should
11332 + * be a drop-in replacement for this one, and much faster.
11334 + * remember:
11336 + * - other at91 parts (like at91sam9) have multiple controllers
11337 + * and different pin muxing; this version is at91rm9200 specfic.
11339 + * - at91sam9261 SPI0 pins are directly muxed with MMC/SD pins.
11341 + * - rm9200 spi chipselects drop wrongly, so the native driver
11342 + * will need to use gpios much like this does.
11344 + * - real hardware only allows 8..16 bits per word, while this
11345 + * bitbanger allows 1..32 (incompatible superset).
11347 + * - this disregards clock parameters. with inlined gpio calls,
11348 + * gcc 3.4.4 produces about 1.5 mbit/sec, more than 2x faster
11349 + * than using the subroutined veresion from txrx_word().
11351 + * - suspend/resume and <linux/clk.h> support is missing ...
11352 + */
11354 +#define spi_miso_bit AT91_PIN_PA0
11355 +#define spi_mosi_bit AT91_PIN_PA1
11356 +#define spi_sck_bit AT91_PIN_PA2
11358 +struct at91_spi {
11359 + struct spi_bitbang bitbang;
11360 + struct platform_device *pdev;
11363 +/*----------------------------------------------------------------------*/
11365 +static inline void setsck(struct spi_device *spi, int is_on)
11367 + at91_set_gpio_value(spi_sck_bit, is_on);
11370 +static inline void setmosi(struct spi_device *spi, int is_on)
11372 + at91_set_gpio_value(spi_mosi_bit, is_on);
11375 +static inline int getmiso(struct spi_device *spi)
11377 + return at91_get_gpio_value(spi_miso_bit);
11380 +static void at91_spi_chipselect(struct spi_device *spi, int is_active)
11382 + unsigned long cs = (unsigned long) spi->controller_data;
11384 + /* set default clock polarity */
11385 + if (is_active)
11386 + setsck(spi, spi->mode & SPI_CPOL);
11388 + /* only support active-low (default) */
11389 + at91_set_gpio_value(cs, !is_active);
11393 + * NOTE: this is "as fast as we can"; it should be a function of
11394 + * the device clock ...
11395 + */
11396 +#define spidelay(X) do{} while(0)
11398 +#define EXPAND_BITBANG_TXRX
11399 +#include <linux/spi/spi_bitbang.h>
11401 +static u32 at91_spi_txrx_word_mode0(struct spi_device *spi,
11402 + unsigned nsecs, u32 word, u8 bits)
11404 + return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, 8);
11407 +static u32 at91_spi_txrx_word_mode1(struct spi_device *spi,
11408 + unsigned nsecs, u32 word, u8 bits)
11410 + return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, 8);
11413 +static u32 at91_spi_txrx_word_mode2(struct spi_device *spi,
11414 + unsigned nsecs, u32 word, u8 bits)
11416 + return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, 8);
11419 +static u32 at91_spi_txrx_word_mode3(struct spi_device *spi,
11420 + unsigned nsecs, u32 word, u8 bits)
11422 + return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, 8);
11425 +/*----------------------------------------------------------------------*/
11427 +static int __init at91_spi_probe(struct platform_device *pdev)
11429 + int status;
11430 + struct spi_master *master;
11431 + struct at91_spi *at91_spi;
11433 + if (pdev->id != 0) /* SPI0 bus */
11434 + return -EINVAL;
11436 + master = spi_alloc_master(&pdev->dev, sizeof *at91_spi);
11437 + if (!master)
11438 + return -ENOMEM;
11440 + at91_spi = spi_master_get_devdata(master);
11441 + at91_spi->pdev = pdev;
11442 + platform_set_drvdata(pdev, at91_spi);
11444 + /* SPI and bitbang hookup */
11445 + master->bus_num = 0;
11446 + master->num_chipselect = 4;
11448 + at91_spi->bitbang.master = spi_master_get(master);
11449 + at91_spi->bitbang.chipselect = at91_spi_chipselect;
11450 + at91_spi->bitbang.txrx_word[SPI_MODE_0] = at91_spi_txrx_word_mode0;
11451 + at91_spi->bitbang.txrx_word[SPI_MODE_1] = at91_spi_txrx_word_mode1;
11452 + at91_spi->bitbang.txrx_word[SPI_MODE_2] = at91_spi_txrx_word_mode2;
11453 + at91_spi->bitbang.txrx_word[SPI_MODE_3] = at91_spi_txrx_word_mode3;
11455 + status = spi_bitbang_start(&at91_spi->bitbang);
11456 + if (status < 0)
11457 + (void) spi_master_put(at91_spi->bitbang.master);
11459 + return status;
11462 +static int __exit at91_spi_remove(struct platform_device *pdev)
11464 + struct at91_spi *at91_spi = platform_get_drvdata(pdev);
11465 + int status;
11467 + /* stop() unregisters child devices too */
11468 + status = spi_bitbang_stop(&at91_spi->bitbang);
11469 + (void) spi_master_put(at91_spi->bitbang.master);
11471 + platform_set_drvdata(pdev, NULL);
11472 + return status;
11475 +static struct platform_driver at91_spi_driver = {
11476 + .probe = at91_spi_probe,
11477 + .remove = __exit_p(at91_spi_remove),
11478 + .driver = {
11479 + .name = "at91_spi",
11480 + .owner = THIS_MODULE,
11481 + },
11484 +static int __init at91_spi_init(void)
11486 + at91_set_gpio_output(spi_sck_bit, 0);
11487 + at91_set_gpio_output(spi_mosi_bit, 0);
11488 + at91_set_gpio_input(spi_miso_bit, 1 /* pullup */);
11490 + /* register driver */
11491 + return platform_driver_register(&at91_spi_driver);
11494 +static void __exit at91_spi_exit(void)
11496 + platform_driver_unregister(&at91_spi_driver);
11499 +device_initcall(at91_spi_init);
11500 +module_exit(at91_spi_exit);
11502 +MODULE_ALIAS("at91_spi.0");
11504 +MODULE_DESCRIPTION("AT91 SPI support (BOOTSTRAP/BITBANG VERSION)");
11505 +MODULE_AUTHOR("David Brownell");
11506 +MODULE_LICENSE("GPL");
11507 diff -urN -x CVS linux-2.6.21/drivers/usb/gadget/Kconfig linux-2.6-stable/drivers/usb/gadget/Kconfig
11508 --- linux-2.6.21/drivers/usb/gadget/Kconfig Thu Apr 26 05:08:32 2007
11509 +++ linux-2.6-stable/drivers/usb/gadget/Kconfig Wed May 9 10:20:54 2007
11510 @@ -189,7 +189,7 @@
11512 config USB_GADGET_AT91
11513 boolean "AT91 USB Device Port"
11514 - depends on ARCH_AT91
11515 + depends on ARCH_AT91 && !ARCH_AT91SAM9RL
11516 select USB_GADGET_SELECTED
11517 help
11518 Many Atmel AT91 processors (such as the AT91RM2000) have a
11519 diff -urN -x CVS linux-2.6.21/drivers/usb/gadget/at91_udc.c linux-2.6-stable/drivers/usb/gadget/at91_udc.c
11520 --- linux-2.6.21/drivers/usb/gadget/at91_udc.c Thu Apr 26 05:08:32 2007
11521 +++ linux-2.6-stable/drivers/usb/gadget/at91_udc.c Tue May 8 12:13:31 2007
11522 @@ -1804,7 +1804,7 @@
11524 if ((!udc->suspended && udc->addr)
11525 || !wake
11526 - || at91_suspend_entering_slow_clock()) {
11527 + || clk_must_disable(udc->fclk)) {
11528 pullup(udc, 0);
11529 wake = 0;
11530 } else
11531 diff -urN -x CVS linux-2.6.21/drivers/usb/host/ohci-at91.c linux-2.6-stable/drivers/usb/host/ohci-at91.c
11532 --- linux-2.6.21/drivers/usb/host/ohci-at91.c Thu Apr 26 05:08:32 2007
11533 +++ linux-2.6-stable/drivers/usb/host/ohci-at91.c Tue May 8 12:13:31 2007
11534 @@ -299,7 +299,7 @@
11536 * REVISIT: some boards will be able to turn VBUS off...
11538 - if (at91_suspend_entering_slow_clock()) {
11539 + if (clk_must_disable(fclk)) {
11540 ohci_usb_reset (ohci);
11541 at91_stop_clock();
11543 diff -urN -x CVS linux-2.6.21/drivers/video/Kconfig linux-2.6-stable/drivers/video/Kconfig
11544 --- linux-2.6.21/drivers/video/Kconfig Thu Apr 26 05:08:32 2007
11545 +++ linux-2.6-stable/drivers/video/Kconfig Thu May 10 12:34:41 2007
11546 @@ -663,6 +663,17 @@
11547 framebuffer. Product specs at
11548 <http://www.erd.epson.com/vdc/html/products.htm>.
11550 +config FB_S1D15605
11551 + tristate "Epson S1D15605 framebuffer support"
11552 + depends on FB
11553 + default m if MACH_KB9200
11554 + select FB_CFB_FILLRECT
11555 + select FB_CFB_COPYAREA
11556 + select FB_CFB_IMAGEBLIT
11557 + help
11558 + Build in support for the S1D15605 Epson Research 128x64
11559 + LCD controller as a framebuffer.
11561 config FB_S1D13XXX
11562 tristate "Epson S1D13XXX framebuffer support"
11563 depends on FB
11564 @@ -674,6 +685,22 @@
11565 working with S1D13806). Product specs at
11566 <http://www.erd.epson.com/vdc/html/legacy_13xxx.htm>
11568 +config FB_ATMEL
11569 + tristate "AT91/AT32 LCD Controller support"
11570 + depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || AVR32)
11571 + select FB_CFB_FILLRECT
11572 + select FB_CFB_COPYAREA
11573 + select FB_CFB_IMAGEBLIT
11574 + help
11575 + This enables support for the AT91/AT32 LCD Controller.
11577 +config FB_INTSRAM
11578 + bool "Frame Buffer in internal SRAM"
11579 + depends on FB_ATMEL && ARCH_AT91SAM9261
11580 + help
11581 + Say Y if you want to map Frame Buffer in internal SRAM. Say N if you want
11582 + to let frame buffer in external SDRAM.
11584 config FB_NVIDIA
11585 tristate "nVidia Framebuffer Support"
11586 depends on FB && PCI
11587 diff -urN -x CVS linux-2.6.21/drivers/video/Makefile linux-2.6-stable/drivers/video/Makefile
11588 --- linux-2.6.21/drivers/video/Makefile Thu Apr 26 05:08:32 2007
11589 +++ linux-2.6-stable/drivers/video/Makefile Thu May 10 12:34:01 2007
11590 @@ -75,6 +75,8 @@
11591 obj-$(CONFIG_FB_SA1100) += sa1100fb.o
11592 obj-$(CONFIG_FB_HIT) += hitfb.o
11593 obj-$(CONFIG_FB_EPSON1355) += epson1355fb.o
11594 +obj-$(CONFIG_FB_S1D15605) += s1d15605fb.o
11595 +obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
11596 obj-$(CONFIG_FB_PVR2) += pvr2fb.o
11597 obj-$(CONFIG_FB_VOODOO1) += sstfb.o
11598 obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o
11599 diff -urN -x CVS linux-2.6.21/drivers/video/atmel_lcdfb.c linux-2.6-stable/drivers/video/atmel_lcdfb.c
11600 --- linux-2.6.21/drivers/video/atmel_lcdfb.c Thu Jan 1 02:00:00 1970
11601 +++ linux-2.6-stable/drivers/video/atmel_lcdfb.c Thu May 10 12:34:01 2007
11602 @@ -0,0 +1,752 @@
11604 + * Driver for AT91/AT32 LCD Controller
11606 + * Copyright (C) 2007 Atmel Corporation
11608 + * This file is subject to the terms and conditions of the GNU General Public
11609 + * License. See the file COPYING in the main directory of this archive for
11610 + * more details.
11611 + */
11613 +#include <linux/kernel.h>
11614 +#include <linux/platform_device.h>
11615 +#include <linux/dma-mapping.h>
11616 +#include <linux/interrupt.h>
11617 +#include <linux/clk.h>
11618 +#include <linux/fb.h>
11619 +#include <linux/init.h>
11620 +#include <linux/delay.h>
11622 +#include <asm/arch/board.h>
11623 +#include <asm/arch/cpu.h>
11624 +#include <asm/arch/gpio.h>
11626 +#include <video/atmel_lcdc.h>
11628 +#define lcdc_readl(sinfo, reg) __raw_readl((sinfo)->mmio+(reg))
11629 +#define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg))
11631 +/* configurable parameters */
11632 +#define ATMEL_LCDC_CVAL_DEFAULT 0xc8
11633 +#define ATMEL_LCDC_DMA_BURST_LEN 8
11635 +#if defined(CONFIG_ARCH_AT91SAM9263)
11636 +#define ATMEL_LCDC_FIFO_SIZE 2048
11637 +#else
11638 +#define ATMEL_LCDC_FIFO_SIZE 512
11639 +#endif
11641 +#if defined(CONFIG_ARCH_AT91)
11642 +#define ATMEL_LCDFB_FBINFO_DEFAULT FBINFO_DEFAULT
11644 +static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
11645 + struct fb_var_screeninfo *var)
11649 +#elif defined(CONFIG_AVR32)
11650 +#define ATMEL_LCDFB_FBINFO_DEFAULT (FBINFO_DEFAULT \
11651 + | FBINFO_PARTIAL_PAN_OK \
11652 + | FBINFO_HWACCEL_XPAN \
11653 + | FBINFO_HWACCEL_YPAN)
11655 +static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo,
11656 + struct fb_var_screeninfo *var)
11658 + u32 dma2dcfg;
11659 + u32 pixeloff;
11661 + pixeloff = (var->xoffset * var->bits_per_pixel) & 0x1f;
11663 + dma2dcfg = ((var->xres_virtual - var->xres) * var->bits_per_pixel) / 8;
11664 + dma2dcfg |= pixeloff << ATMEL_LCDC_PIXELOFF_OFFSET;
11665 + lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg);
11667 + /* Update configuration */
11668 + lcdc_writel(sinfo, ATMEL_LCDC_DMACON,
11669 + lcdc_readl(sinfo, ATMEL_LCDC_DMACON)
11670 + | ATMEL_LCDC_DMAUPDT);
11672 +#endif
11675 +static struct fb_fix_screeninfo atmel_lcdfb_fix __initdata = {
11676 + .type = FB_TYPE_PACKED_PIXELS,
11677 + .visual = FB_VISUAL_TRUECOLOR,
11678 + .xpanstep = 0,
11679 + .ypanstep = 0,
11680 + .ywrapstep = 0,
11681 + .accel = FB_ACCEL_NONE,
11685 +static void atmel_lcdfb_update_dma(struct fb_info *info,
11686 + struct fb_var_screeninfo *var)
11688 + struct atmel_lcdfb_info *sinfo = info->par;
11689 + struct fb_fix_screeninfo *fix = &info->fix;
11690 + unsigned long dma_addr;
11692 + dma_addr = (fix->smem_start + var->yoffset * fix->line_length
11693 + + var->xoffset * var->bits_per_pixel / 8);
11695 + dma_addr &= ~3UL;
11697 + /* Set framebuffer DMA base address and pixel offset */
11698 + lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr);
11700 + atmel_lcdfb_update_dma2d(sinfo, var);
11703 +static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo)
11705 + struct fb_info *info = sinfo->info;
11707 + dma_free_writecombine(info->device, info->fix.smem_len,
11708 + info->screen_base, info->fix.smem_start);
11711 +/**
11712 + * atmel_lcdfb_alloc_video_memory - Allocate framebuffer memory
11713 + * @sinfo: the frame buffer to allocate memory for
11714 + */
11715 +static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo)
11717 + struct fb_info *info = sinfo->info;
11718 + struct fb_var_screeninfo *var = &info->var;
11720 + info->fix.smem_len = (var->xres_virtual * var->yres_virtual
11721 + * ((var->bits_per_pixel + 7) / 8));
11723 + info->screen_base = dma_alloc_writecombine(info->device, info->fix.smem_len,
11724 + (dma_addr_t *)&info->fix.smem_start, GFP_KERNEL);
11726 + if (!info->screen_base) {
11727 + return -ENOMEM;
11730 + return 0;
11733 +/**
11734 + * atmel_lcdfb_check_var - Validates a var passed in.
11735 + * @var: frame buffer variable screen structure
11736 + * @info: frame buffer structure that represents a single frame buffer
11738 + * Checks to see if the hardware supports the state requested by
11739 + * var passed in. This function does not alter the hardware
11740 + * state!!! This means the data stored in struct fb_info and
11741 + * struct atmel_lcdfb_info do not change. This includes the var
11742 + * inside of struct fb_info. Do NOT change these. This function
11743 + * can be called on its own if we intent to only test a mode and
11744 + * not actually set it. The stuff in modedb.c is a example of
11745 + * this. If the var passed in is slightly off by what the
11746 + * hardware can support then we alter the var PASSED in to what
11747 + * we can do. If the hardware doesn't support mode change a
11748 + * -EINVAL will be returned by the upper layers. You don't need
11749 + * to implement this function then. If you hardware doesn't
11750 + * support changing the resolution then this function is not
11751 + * needed. In this case the driver would just provide a var that
11752 + * represents the static state the screen is in.
11754 + * Returns negative errno on error, or zero on success.
11755 + */
11756 +static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
11757 + struct fb_info *info)
11759 + struct device *dev = info->device;
11760 + struct atmel_lcdfb_info *sinfo = info->par;
11761 + unsigned long clk_value_khz;
11763 + clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000;
11765 + dev_dbg(dev, "%s:\n", __func__);
11766 + dev_dbg(dev, " resolution: %ux%u\n", var->xres, var->yres);
11767 + dev_dbg(dev, " pixclk: %lu KHz\n", PICOS2KHZ(var->pixclock));
11768 + dev_dbg(dev, " bpp: %u\n", var->bits_per_pixel);
11769 + dev_dbg(dev, " clk: %lu KHz\n", clk_value_khz);
11771 + if ((PICOS2KHZ(var->pixclock) * var->bits_per_pixel / 8) > clk_value_khz) {
11772 + dev_err(dev, "%lu KHz pixel clock is too fast\n", PICOS2KHZ(var->pixclock));
11773 + return -EINVAL;
11776 + /* Force same alignment for each line */
11777 + var->xres = (var->xres + 3) & ~3UL;
11778 + var->xres_virtual = (var->xres_virtual + 3) & ~3UL;
11780 + var->red.msb_right = var->green.msb_right = var->blue.msb_right = 0;
11781 + var->transp.msb_right = 0;
11782 + var->transp.offset = var->transp.length = 0;
11783 + var->xoffset = var->yoffset = 0;
11785 + switch (var->bits_per_pixel) {
11786 + case 2:
11787 + case 4:
11788 + case 8:
11789 + var->red.offset = var->green.offset = var->blue.offset = 0;
11790 + var->red.length = var->green.length = var->blue.length
11791 + = var->bits_per_pixel;
11792 + break;
11793 + case 15:
11794 + case 16:
11795 + var->red.offset = 0;
11796 + var->green.offset = 5;
11797 + var->blue.offset = 10;
11798 + var->red.length = var->green.length = var->blue.length = 5;
11799 + break;
11800 + case 24:
11801 + case 32:
11802 + var->red.offset = 0;
11803 + var->green.offset = 8;
11804 + var->blue.offset = 16;
11805 + var->red.length = var->green.length = var->blue.length = 8;
11806 + break;
11807 + default:
11808 + dev_err(dev, "color depth %d not supported\n",
11809 + var->bits_per_pixel);
11810 + return -EINVAL;
11813 + return 0;
11816 +/**
11817 + * atmel_lcdfb_set_par - Alters the hardware state.
11818 + * @info: frame buffer structure that represents a single frame buffer
11820 + * Using the fb_var_screeninfo in fb_info we set the resolution
11821 + * of the this particular framebuffer. This function alters the
11822 + * par AND the fb_fix_screeninfo stored in fb_info. It doesn't
11823 + * not alter var in fb_info since we are using that data. This
11824 + * means we depend on the data in var inside fb_info to be
11825 + * supported by the hardware. atmel_lcdfb_check_var is always called
11826 + * before atmel_lcdfb_set_par to ensure this. Again if you can't
11827 + * change the resolution you don't need this function.
11829 + */
11830 +static int atmel_lcdfb_set_par(struct fb_info *info)
11832 + struct atmel_lcdfb_info *sinfo = info->par;
11833 + unsigned long value;
11834 + unsigned long clk_value_khz;
11836 + dev_dbg(info->device, "%s:\n", __func__);
11837 + dev_dbg(info->device, " * resolution: %ux%u (%ux%u virtual)\n",
11838 + info->var.xres, info->var.yres,
11839 + info->var.xres_virtual, info->var.yres_virtual);
11841 + /* Turn off the LCD controller and the DMA controller */
11842 + lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET);
11844 + lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0);
11846 + if (info->var.bits_per_pixel <= 8)
11847 + info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
11848 + else
11849 + info->fix.visual = FB_VISUAL_TRUECOLOR;
11851 + info->fix.line_length = info->var.xres_virtual * (info->var.bits_per_pixel / 8);
11853 + /* Re-initialize the DMA engine... */
11854 + dev_dbg(info->device, " * update DMA engine\n");
11855 + atmel_lcdfb_update_dma(info, &info->var);
11857 + /* ...set frame size and burst length = 8 words (?) */
11858 + value = (info->var.yres * info->var.xres * info->var.bits_per_pixel) / 32;
11859 + value |= ((ATMEL_LCDC_DMA_BURST_LEN - 1) << ATMEL_LCDC_BLENGTH_OFFSET);
11860 + lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value);
11862 + /* Now, the LCDC core... */
11864 + /* Set pixel clock */
11865 + clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000;
11867 + value = clk_value_khz / PICOS2KHZ(info->var.pixclock);
11869 + if (clk_value_khz % PICOS2KHZ(info->var.pixclock))
11870 + value++;
11872 + value = (value / 2) - 1;
11874 + if (value <= 0) {
11875 + dev_notice(info->device, "Bypassing pixel clock divider\n");
11876 + lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS);
11877 + } else
11878 + lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, value << ATMEL_LCDC_CLKVAL_OFFSET);
11880 + /* Initialize control register 2 */
11881 + value = sinfo->default_lcdcon2;
11883 + if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
11884 + value |= ATMEL_LCDC_INVLINE_INVERTED;
11885 + if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
11886 + value |= ATMEL_LCDC_INVFRAME_INVERTED;
11888 + switch (info->var.bits_per_pixel) {
11889 + case 1: value |= ATMEL_LCDC_PIXELSIZE_1; break;
11890 + case 2: value |= ATMEL_LCDC_PIXELSIZE_2; break;
11891 + case 4: value |= ATMEL_LCDC_PIXELSIZE_4; break;
11892 + case 8: value |= ATMEL_LCDC_PIXELSIZE_8; break;
11893 + case 15: /* fall through */
11894 + case 16: value |= ATMEL_LCDC_PIXELSIZE_16; break;
11895 + case 24: value |= ATMEL_LCDC_PIXELSIZE_24; break;
11896 + case 32: value |= ATMEL_LCDC_PIXELSIZE_32; break;
11897 + default: BUG(); break;
11899 + dev_dbg(info->device, " * LCDCON2 = %08lx\n", value);
11900 + lcdc_writel(sinfo, ATMEL_LCDC_LCDCON2, value);
11902 + /* Vertical timing */
11903 + value = (info->var.vsync_len - 1) << ATMEL_LCDC_VPW_OFFSET;
11904 + value |= info->var.upper_margin << ATMEL_LCDC_VBP_OFFSET;
11905 + value |= info->var.lower_margin;
11906 + dev_dbg(info->device, " * LCDTIM1 = %08lx\n", value);
11907 + lcdc_writel(sinfo, ATMEL_LCDC_TIM1, value);
11909 + /* Horizontal timing */
11910 + value = (info->var.right_margin - 1) << ATMEL_LCDC_HFP_OFFSET;
11911 + value |= (info->var.hsync_len - 1) << ATMEL_LCDC_HPW_OFFSET;
11912 + value |= (info->var.left_margin - 1);
11913 + dev_dbg(info->device, " * LCDTIM2 = %08lx\n", value);
11914 + lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value);
11916 + /* Display size */
11917 + value = (info->var.xres - 1) << ATMEL_LCDC_HOZVAL_OFFSET;
11918 + value |= info->var.yres - 1;
11919 + lcdc_writel(sinfo, ATMEL_LCDC_LCDFRMCFG, value);
11921 + /* FIFO Threshold: Use formula from data sheet */
11922 + value = ATMEL_LCDC_FIFO_SIZE - (2 * ATMEL_LCDC_DMA_BURST_LEN + 3);
11923 + lcdc_writel(sinfo, ATMEL_LCDC_FIFO, value);
11925 + /* Toggle LCD_MODE every frame */
11926 + lcdc_writel(sinfo, ATMEL_LCDC_MVAL, 0);
11928 + /* Disable all interrupts */
11929 + lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL);
11931 + /* Set contrast */
11932 + value = ATMEL_LCDC_PS_DIV8 | ATMEL_LCDC_POL_POSITIVE | ATMEL_LCDC_ENA_PWMENABLE;
11933 + lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, value);
11934 + lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT);
11935 + /* ...wait for DMA engine to become idle... */
11936 + while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY)
11937 + msleep(10);
11939 + dev_dbg(info->device, " * re-enable DMA engine\n");
11940 + /* ...and enable it with updated configuration */
11941 + lcdc_writel(sinfo, ATMEL_LCDC_DMACON, sinfo->default_dmacon);
11943 + dev_dbg(info->device, " * re-enable LCDC core\n");
11944 + lcdc_writel(sinfo, ATMEL_LCDC_PWRCON,
11945 + (sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET) | ATMEL_LCDC_PWR);
11947 + dev_dbg(info->device, " * DONE\n");
11949 + return 0;
11952 +static inline unsigned int chan_to_field(unsigned int chan, const struct fb_bitfield *bf)
11954 + chan &= 0xffff;
11955 + chan >>= 16 - bf->length;
11956 + return chan << bf->offset;
11959 +/**
11960 + * atmel_lcdfb_setcolreg - Optional function. Sets a color register.
11961 + * @regno: Which register in the CLUT we are programming
11962 + * @red: The red value which can be up to 16 bits wide
11963 + * @green: The green value which can be up to 16 bits wide
11964 + * @blue: The blue value which can be up to 16 bits wide.
11965 + * @transp: If supported the alpha value which can be up to 16 bits wide.
11966 + * @info: frame buffer info structure
11968 + * Set a single color register. The values supplied have a 16 bit
11969 + * magnitude which needs to be scaled in this function for the hardware.
11970 + * Things to take into consideration are how many color registers, if
11971 + * any, are supported with the current color visual. With truecolor mode
11972 + * no color palettes are supported. Here a psuedo palette is created
11973 + * which we store the value in pseudo_palette in struct fb_info. For
11974 + * pseudocolor mode we have a limited color palette. To deal with this
11975 + * we can program what color is displayed for a particular pixel value.
11976 + * DirectColor is similar in that we can program each color field. If
11977 + * we have a static colormap we don't need to implement this function.
11979 + * Returns negative errno on error, or zero on success. In an
11980 + * ideal world, this would have been the case, but as it turns
11981 + * out, the other drivers return 1 on failure, so that's what
11982 + * we're going to do.
11983 + */
11984 +static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,
11985 + unsigned int green, unsigned int blue,
11986 + unsigned int transp, struct fb_info *info)
11988 + struct atmel_lcdfb_info *sinfo = info->par;
11989 + unsigned int val;
11990 + u32 *pal;
11991 + int ret = 1;
11993 + if (info->var.grayscale)
11994 + red = green = blue = (19595 * red + 38470 * green
11995 + + 7471 * blue) >> 16;
11997 + switch (info->fix.visual) {
11998 + case FB_VISUAL_TRUECOLOR:
11999 + if (regno < 16) {
12000 + pal = info->pseudo_palette;
12002 + val = chan_to_field(red, &info->var.red);
12003 + val |= chan_to_field(green, &info->var.green);
12004 + val |= chan_to_field(blue, &info->var.blue);
12006 + pal[regno] = val;
12007 + ret = 0;
12009 + break;
12011 + case FB_VISUAL_PSEUDOCOLOR:
12012 + if (regno < 256) {
12013 + val = ((red >> 11) & 0x001f);
12014 + val |= ((green >> 6) & 0x03e0);
12015 + val |= ((blue >> 1) & 0x7c00);
12017 + /*
12018 + * TODO: intensity bit. Maybe something like
12019 + * ~(red[10] ^ green[10] ^ blue[10]) & 1
12020 + */
12022 + lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val);
12023 + ret = 0;
12025 + break;
12028 + return ret;
12031 +static int atmel_lcdfb_pan_display(struct fb_var_screeninfo *var,
12032 + struct fb_info *info)
12034 + dev_dbg(info->device, "%s\n", __func__);
12036 + atmel_lcdfb_update_dma(info, var);
12038 + return 0;
12041 +static struct fb_ops atmel_lcdfb_ops = {
12042 + .owner = THIS_MODULE,
12043 + .fb_check_var = atmel_lcdfb_check_var,
12044 + .fb_set_par = atmel_lcdfb_set_par,
12045 + .fb_setcolreg = atmel_lcdfb_setcolreg,
12046 + .fb_pan_display = atmel_lcdfb_pan_display,
12047 + .fb_fillrect = cfb_fillrect,
12048 + .fb_copyarea = cfb_copyarea,
12049 + .fb_imageblit = cfb_imageblit,
12052 +static irqreturn_t atmel_lcdfb_interrupt(int irq, void *dev_id)
12054 + struct fb_info *info = dev_id;
12055 + struct atmel_lcdfb_info *sinfo = info->par;
12056 + u32 status;
12058 + status = lcdc_readl(sinfo, ATMEL_LCDC_ISR);
12059 + lcdc_writel(sinfo, ATMEL_LCDC_IDR, status);
12060 + return IRQ_HANDLED;
12063 +static int __init atmel_lcdfb_init_fbinfo(struct atmel_lcdfb_info *sinfo)
12065 + struct fb_info *info = sinfo->info;
12066 + int ret = 0;
12068 + memset_io(info->screen_base, 0, info->fix.smem_len);
12069 + info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW;
12071 + dev_info(info->device,
12072 + "%luKiB frame buffer at %08lx (mapped at %p)\n",
12073 + (unsigned long)info->fix.smem_len / 1024,
12074 + (unsigned long)info->fix.smem_start,
12075 + info->screen_base);
12077 + /* Allocate colormap */
12078 + ret = fb_alloc_cmap(&info->cmap, 256, 0);
12079 + if (ret < 0)
12080 + dev_err(info->device, "Alloc color map failed\n");
12082 + return ret;
12085 +static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo)
12087 + if (sinfo->bus_clk)
12088 + clk_enable(sinfo->bus_clk);
12089 + clk_enable(sinfo->lcdc_clk);
12092 +static void atmel_lcdfb_stop_clock(struct atmel_lcdfb_info *sinfo)
12094 + if (sinfo->bus_clk)
12095 + clk_disable(sinfo->bus_clk);
12096 + clk_disable(sinfo->lcdc_clk);
12100 +static int __init atmel_lcdfb_probe(struct platform_device *pdev)
12102 + struct device *dev = &pdev->dev;
12103 + struct fb_info *info;
12104 + struct atmel_lcdfb_info *sinfo;
12105 + struct atmel_lcdfb_info *pdata_sinfo;
12106 + struct resource *regs = NULL;
12107 + struct resource *map = NULL;
12108 + int ret;
12110 + dev_dbg(dev, "%s BEGIN\n", __func__);
12112 + ret = -ENOMEM;
12113 + info = framebuffer_alloc(sizeof(struct atmel_lcdfb_info), dev);
12114 + if (!info) {
12115 + dev_err(dev, "cannot allocate memory\n");
12116 + goto out;
12119 + sinfo = info->par;
12121 + if (dev->platform_data) {
12122 + pdata_sinfo = (struct atmel_lcdfb_info *)dev->platform_data;
12123 + sinfo->default_bpp = pdata_sinfo->default_bpp;
12124 + sinfo->default_dmacon = pdata_sinfo->default_dmacon;
12125 + sinfo->default_lcdcon2 = pdata_sinfo->default_lcdcon2;
12126 + sinfo->default_monspecs = pdata_sinfo->default_monspecs;
12127 + sinfo->atmel_lcdfb_power_control = pdata_sinfo->atmel_lcdfb_power_control;
12128 + sinfo->guard_time = pdata_sinfo->guard_time;
12129 + } else {
12130 + dev_err(dev, "cannot get default configuration\n");
12131 + goto free_info;
12133 + sinfo->info = info;
12134 + sinfo->pdev = pdev;
12136 + strcpy(info->fix.id, sinfo->pdev->name);
12137 + info->flags = ATMEL_LCDFB_FBINFO_DEFAULT;
12138 + info->pseudo_palette = sinfo->pseudo_palette;
12139 + info->fbops = &atmel_lcdfb_ops;
12141 + memcpy(&info->monspecs, sinfo->default_monspecs, sizeof(info->monspecs));
12142 + info->fix = atmel_lcdfb_fix;
12144 + /* Enable LCDC Clocks */
12145 + if (cpu_is_at91sam9261() {
12146 + sinfo->bus_clk = clk_get(dev, "hck1");
12147 + if (IS_ERR(sinfo->bus_clk)) {
12148 + ret = PTR_ERR(sinfo->bus_clk);
12149 + goto free_info;
12152 + sinfo->lcdc_clk = clk_get(dev, "lcdc_clk");
12153 + if (IS_ERR(sinfo->lcdc_clk)) {
12154 + ret = PTR_ERR(sinfo->lcdc_clk);
12155 + goto put_bus_clk;
12157 + atmel_lcdfb_start_clock(sinfo);
12159 + ret = fb_find_mode(&info->var, info, NULL, info->monspecs.modedb,
12160 + info->monspecs.modedb_len, info->monspecs.modedb,
12161 + sinfo->default_bpp);
12162 + if (!ret) {
12163 + dev_err(dev, "no suitable video mode found\n");
12164 + goto stop_clk;
12168 + regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
12169 + if (!regs) {
12170 + dev_err(dev, "resources unusable\n");
12171 + ret = -ENXIO;
12172 + goto stop_clk;
12175 + sinfo->irq_base = platform_get_irq(pdev, 0);
12176 + if (sinfo->irq_base < 0) {
12177 + dev_err(dev, "unable to get irq\n");
12178 + ret = sinfo->irq_base;
12179 + goto stop_clk;
12182 + /* Initialize video memory */
12183 + map = platform_get_resource(pdev, IORESOURCE_MEM, 1);
12184 + if (map) {
12185 + /* use a pre-allocated memory buffer */
12186 + info->fix.smem_start = map->start;
12187 + info->fix.smem_len = map->end - map->start + 1;
12188 + if (!request_mem_region(info->fix.smem_start,
12189 + info->fix.smem_len, pdev->name)) {
12190 + ret = -EBUSY;
12191 + goto stop_clk;
12194 + info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
12195 + if (!info->screen_base)
12196 + goto release_intmem;
12197 + } else {
12198 + /* alocate memory buffer */
12199 + ret = atmel_lcdfb_alloc_video_memory(sinfo);
12200 + if (ret < 0) {
12201 + dev_err(dev, "cannot allocate framebuffer: %d\n", ret);
12202 + goto stop_clk;
12206 + /* LCDC registers */
12207 + info->fix.mmio_start = regs->start;
12208 + info->fix.mmio_len = regs->end - regs->start + 1;
12210 + if (!request_mem_region(info->fix.mmio_start,
12211 + info->fix.mmio_len, pdev->name)) {
12212 + ret = -EBUSY;
12213 + goto free_fb;
12216 + sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len);
12217 + if (!sinfo->mmio) {
12218 + dev_err(dev, "cannot map LCDC registers\n");
12219 + goto release_mem;
12222 + /* interrupt */
12223 + ret = request_irq(sinfo->irq_base, atmel_lcdfb_interrupt, 0, pdev->name, info);
12224 + if (ret) {
12225 + dev_err(dev, "request_irq failed: %d\n", ret);
12226 + goto unmap_mmio;
12229 + ret = atmel_lcdfb_init_fbinfo(sinfo);
12230 + if (ret < 0) {
12231 + dev_err(dev, "init fbinfo failed: %d\n", ret);
12232 + goto unregister_irqs;
12235 + /*
12236 + * This makes sure that our colour bitfield
12237 + * descriptors are correctly initialised.
12238 + */
12239 + atmel_lcdfb_check_var(&info->var, info);
12241 + ret = fb_set_var(info, &info->var);
12242 + if (ret) {
12243 + dev_warn(dev, "unable to set display parameters\n");
12244 + goto free_cmap;
12247 + dev_set_drvdata(dev, info);
12249 + /*
12250 + * Tell the world that we're ready to go
12251 + */
12252 + ret = register_framebuffer(info);
12253 + if (ret < 0) {
12254 + dev_err(dev, "failed to register framebuffer device: %d\n", ret);
12255 + goto free_cmap;
12258 + /* Power up the LCDC screen */
12259 + if (sinfo->atmel_lcdfb_power_control)
12260 + sinfo->atmel_lcdfb_power_control(1);
12262 + dev_info(dev, "fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n",
12263 + info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base);
12265 + return 0;
12268 +free_cmap:
12269 + fb_dealloc_cmap(&info->cmap);
12270 +unregister_irqs:
12271 + free_irq(sinfo->irq_base, info);
12272 +unmap_mmio:
12273 + iounmap(sinfo->mmio);
12274 +release_mem:
12275 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
12276 +free_fb:
12277 + if (map)
12278 + iounmap(info->screen_base);
12279 + else
12280 + atmel_lcdfb_free_video_memory(sinfo);
12282 +release_intmem:
12283 + if (map)
12284 + release_mem_region(info->fix.smem_start, info->fix.smem_len);
12285 +stop_clk:
12286 + atmel_lcdfb_stop_clock(sinfo);
12287 + clk_put(sinfo->lcdc_clk);
12288 +put_bus_clk:
12289 + if (sinfo->bus_clk)
12290 + clk_put(sinfo->bus_clk);
12291 +free_info:
12292 + framebuffer_release(info);
12293 +out:
12294 + dev_dbg(dev, "%s FAILED\n", __func__);
12295 + return ret;
12298 +static int __exit atmel_lcdfb_remove(struct platform_device *pdev)
12300 + struct device *dev = &pdev->dev;
12301 + struct fb_info *info = dev_get_drvdata(dev);
12302 + struct atmel_lcdfb_info *sinfo = info->par;
12304 + if (!sinfo)
12305 + return 0;
12307 + if (sinfo->atmel_lcdfb_power_control)
12308 + sinfo->atmel_lcdfb_power_control(0);
12309 + unregister_framebuffer(info);
12310 + atmel_lcdfb_stop_clock(sinfo);
12311 + clk_put(sinfo->lcdc_clk);
12312 + if (sinfo->bus_clk)
12313 + clk_put(sinfo->bus_clk);
12314 + fb_dealloc_cmap(&info->cmap);
12315 + free_irq(sinfo->irq_base, info);
12316 + iounmap(sinfo->mmio);
12317 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
12318 + if (platform_get_resource(pdev, IORESOURCE_MEM, 1)) {
12319 + iounmap(info->screen_base);
12320 + release_mem_region(info->fix.smem_start, info->fix.smem_len);
12321 + } else {
12322 + atmel_lcdfb_free_video_memory(sinfo);
12325 + dev_set_drvdata(dev, NULL);
12326 + framebuffer_release(info);
12328 + return 0;
12331 +static struct platform_driver atmel_lcdfb_driver = {
12332 + .remove = __exit_p(atmel_lcdfb_remove),
12333 + .driver = {
12334 + .name = "atmel_lcdfb",
12335 + .owner = THIS_MODULE,
12336 + },
12339 +static int __init atmel_lcdfb_init(void)
12341 + return platform_driver_probe(&atmel_lcdfb_driver, atmel_lcdfb_probe);
12344 +static void __exit atmel_lcdfb_exit(void)
12346 + platform_driver_unregister(&atmel_lcdfb_driver);
12349 +module_init(atmel_lcdfb_init);
12350 +module_exit(atmel_lcdfb_exit);
12352 +MODULE_DESCRIPTION("AT91/AT32 LCD Controller framebuffer driver");
12353 +MODULE_AUTHOR("Nicolas Ferre <nicolas.ferre@rfo.atmel.com>");
12354 +MODULE_LICENSE("GPL");
12355 diff -urN -x CVS linux-2.6.21/drivers/video/backlight/Kconfig linux-2.6-stable/drivers/video/backlight/Kconfig
12356 --- linux-2.6.21/drivers/video/backlight/Kconfig Thu Apr 26 05:08:32 2007
12357 +++ linux-2.6-stable/drivers/video/backlight/Kconfig Tue May 8 12:13:31 2007
12358 @@ -63,3 +63,11 @@
12359 help
12360 If you have a Frontpath ProGear say Y to enable the
12361 backlight driver.
12363 +config BACKLIGHT_KB920x
12364 + tristate "KwikByte KB9202 Backlight Driver"
12365 + depends on BACKLIGHT_CLASS_DEVICE && MACH_KB9200
12366 + default y
12367 + help
12368 + If you have a KwikByte KB9202 board, say Y to enable the
12369 + backlight driver.
12370 diff -urN -x CVS linux-2.6.21/drivers/video/backlight/Makefile linux-2.6-stable/drivers/video/backlight/Makefile
12371 --- linux-2.6.21/drivers/video/backlight/Makefile Thu Apr 26 05:08:32 2007
12372 +++ linux-2.6-stable/drivers/video/backlight/Makefile Tue May 8 12:13:31 2007
12373 @@ -6,3 +6,4 @@
12374 obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
12375 obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
12376 obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
12377 +obj-$(CONFIG_BACKLIGHT_KB920x) += kb920x_bl.o
12378 diff -urN -x CVS linux-2.6.21/drivers/video/backlight/kb920x_bl.c linux-2.6-stable/drivers/video/backlight/kb920x_bl.c
12379 --- linux-2.6.21/drivers/video/backlight/kb920x_bl.c Thu Jan 1 02:00:00 1970
12380 +++ linux-2.6-stable/drivers/video/backlight/kb920x_bl.c Tue May 8 12:13:31 2007
12381 @@ -0,0 +1,164 @@
12383 + * Backlight Driver for KB9202
12385 + * Copyright (c) 2006 KwikByte
12387 + * Based on Sharp's Corgi Backlight Driver
12389 + * This file is subject to the terms and conditions of the GNU General Public
12390 + * License. See the file "COPYING" in the main directory of this archive
12391 + * for more details.
12392 + */
12394 +#include <linux/module.h>
12395 +#include <linux/kernel.h>
12396 +#include <linux/init.h>
12397 +#include <linux/platform_device.h>
12398 +#include <linux/spinlock.h>
12399 +#include <linux/fb.h>
12400 +#include <linux/backlight.h>
12402 +#include <asm/arch/gpio.h>
12404 +/* The backlight is on(1)/off(0) */
12405 +#define KB9202_DEFAULT_INTENSITY 1
12406 +#define KB9202_MAX_INTENSITY 1
12408 +static int kb9202bl_suspended;
12409 +static int current_intensity = 0;
12410 +static DEFINE_SPINLOCK(bl_lock);
12412 +static int kb9202bl_set_intensity(struct backlight_device *bd)
12414 + unsigned long flags;
12415 + int intensity = bd->props.brightness;
12417 + if (bd->props.power != FB_BLANK_UNBLANK)
12418 + intensity = 0;
12419 + if (bd->props.fb_blank != FB_BLANK_UNBLANK)
12420 + intensity = 0;
12421 + if (kb9202bl_suspended)
12422 + intensity = 0;
12424 + if ((!current_intensity) && (bd->props.power == FB_BLANK_UNBLANK))
12425 + intensity = 1;
12427 + spin_lock_irqsave(&bl_lock, flags);
12428 + if (intensity)
12429 + gpio_set_value(AT91_PIN_PC23, 1);
12430 + else
12431 + gpio_set_value(AT91_PIN_PC23, 0);
12432 + spin_unlock_irqrestore(&bl_lock, flags);
12434 + current_intensity = intensity;
12436 + return 0;
12439 +static int kb9202bl_get_intensity(struct backlight_device *bd)
12441 + return current_intensity;
12444 +static struct backlight_ops kb9202bl_ops = {
12445 + .get_brightness = kb9202bl_get_intensity,
12446 + .update_status = kb9202bl_set_intensity,
12449 +static int __init kb9202bl_probe(struct platform_device *pdev)
12451 + struct backlight_device *bd;
12453 + bd = backlight_device_register ("kb9202-bl", &pdev->dev, NULL, &kb9202bl_ops);
12454 + if (IS_ERR(bd))
12455 + return PTR_ERR(bd);
12457 + platform_set_drvdata(pdev, bd);
12459 + bd->props.max_brightness = KB9202_MAX_INTENSITY;
12460 + bd->props.brightness = KB9202_DEFAULT_INTENSITY;
12461 + (void) kb9202bl_set_intensity(bd);
12463 + return 0;
12466 +static int kb9202bl_remove(struct platform_device *pdev)
12468 + struct backlight_device *bd = platform_get_drvdata(pdev);
12470 + bd->props.brightness = 0;
12471 + bd->props.power = 0;
12472 + (void) kb9202bl_set_intensity(bd);
12474 + backlight_device_unregister(bd);
12476 + return 0;
12479 +#ifdef CONFIG_PM
12480 +static int kb9202bl_suspend(struct platform_device *dev, pm_message_t state)
12482 + struct backlight_device *bd = platform_get_drvdata(pdev);
12484 + kb9202bl_suspended = 1;
12485 + (void) kb9202bl_set_intensity(bd);
12486 + return 0;
12489 +static int kb9202bl_resume(struct platform_device *dev)
12491 + struct backlight_device *bd = platform_get_drvdata(pdev);
12493 + kb9202bl_suspended = 0;
12494 + (void) kb9202bl_set_intensity(bd);
12495 + return 0;
12497 +#else
12498 +#define kb9202bl_suspend NULL
12499 +#define kb9202bl_resume NULL
12500 +#endif
12502 +static struct platform_driver kb9202bl_driver = {
12503 + .probe = kb9202bl_probe,
12504 + .remove = kb9202bl_remove,
12505 + .suspend = kb9202bl_suspend,
12506 + .resume = kb9202bl_resume,
12507 + .driver = {
12508 + .name = "kb9202-bl",
12509 + .owner = THIS_MODULE,
12510 + },
12513 +static struct platform_device *kb9202bl_device;
12515 +static int __init kb9202bl_init(void)
12517 + int ret;
12519 + ret = platform_driver_register(&kb9202bl_driver);
12520 + if (!ret) {
12521 + kb9202bl_device = platform_device_alloc("kb9202-bl", -1);
12522 + if (!kb9202bl_device)
12523 + return -ENOMEM;
12525 + ret = platform_device_add(kb9202bl_device);
12526 + if (ret) {
12527 + platform_device_put(kb9202bl_device);
12528 + platform_driver_unregister(&kb9202bl_driver);
12531 + return ret;
12534 +static void __exit kb9202bl_exit(void)
12536 + platform_device_unregister(kb9202bl_device);
12537 + platform_driver_unregister(&kb9202bl_driver);
12540 +module_init(kb9202bl_init);
12541 +module_exit(kb9202bl_exit);
12543 +MODULE_AUTHOR("KwikByte <kb9200_dev@kwikbyte.com>");
12544 +MODULE_DESCRIPTION("KB9202 Backlight Driver");
12545 +MODULE_LICENSE("GPL");
12546 diff -urN -x CVS linux-2.6.21/drivers/video/s1d15605fb.c linux-2.6-stable/drivers/video/s1d15605fb.c
12547 --- linux-2.6.21/drivers/video/s1d15605fb.c Thu Jan 1 02:00:00 1970
12548 +++ linux-2.6-stable/drivers/video/s1d15605fb.c Tue May 8 12:13:31 2007
12549 @@ -0,0 +1,659 @@
12551 + * drivers/video/s1d15605.c
12553 + * Adapted from several sources including:
12554 + * 1) Driver for AT91 LCD Controller
12555 + * Copyright (C) 2006 Atmel
12557 + * 2) Copyright (C) 2005 S. Kevin Hester
12559 + * This file is subject to the terms and conditions of the GNU General Public
12560 + * License. See the file COPYING in the main directory of this archive for
12561 + * more details.
12563 + * This is a basic framebuffer driver for the Optrex F-51320 128x64 mono LCD
12564 + * display. This display uses a clone of the common Epson SED 1531 display
12565 + * controller.
12567 + * I've heavily borrowed code from the vfb.c driver.
12569 + * This program is free software; you can redistribute it and/or modify
12570 + * it under the terms of the GNU General Public License as published by
12571 + * the Free Software Foundation; either version 2 of the License, or
12572 + * (at your option) any later version.
12574 + * This program is distributed in the hope that it will be useful,
12575 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
12576 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12577 + * GNU General Public License for more details.
12579 + * You should have received a copy of the GNU General Public License
12580 + * along with this program; if not, write to the Free Software
12581 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
12582 + */
12584 +#ifdef DEBUG
12585 +#define MSG(string, args...) printk("s1d15605fb:" string, ##args)
12586 +#else
12587 +#define MSG(string, args...)
12588 +#endif
12590 +#include <linux/kernel.h>
12591 +#include <linux/platform_device.h>
12592 +#include <linux/dma-mapping.h>
12593 +#include <linux/interrupt.h>
12594 +#include <linux/clk.h>
12595 +#include <linux/fb.h>
12596 +#include <linux/init.h>
12597 +#include <linux/delay.h>
12599 +#include <asm/uaccess.h>
12601 +#include <asm/arch/board.h>
12602 +#include <asm/arch/gpio.h>
12604 +#ifdef CONFIG_PMAC_BACKLIGHT
12605 +#include <asm/backlight.h>
12606 +#endif
12608 +#define VIDEOWIDTH 128
12609 +#define VIDEOHEIGHT 64
12610 +#define VIDEODEPTH 1 /* bits/pixel */
12611 +#define VIDEOWIDTH_BYTES ((VIDEOWIDTH * VIDEODEPTH) / 8)
12613 +/* The number of bytes that actually go to the device */
12614 +#define ACTUALVIDEOMEMSIZE (VIDEOWIDTH_BYTES * VIDEOHEIGHT)
12615 +#define VIDEOMEMSIZE PAGE_SIZE
12617 +static struct fb_var_screeninfo s1d15605_default __initdata = {
12618 + .xres = VIDEOWIDTH,
12619 + .yres = VIDEOHEIGHT,
12620 + .xres_virtual = VIDEOWIDTH,
12621 + .yres_virtual = VIDEOHEIGHT,
12622 + .bits_per_pixel = VIDEODEPTH,
12623 + .red = { 0, 1, 0 },
12624 + .green = { 0, 1, 0 },
12625 + .blue = { 0, 1, 0 },
12626 + .activate = FB_ACTIVATE_NOW,
12627 + .pixclock = 20000,
12628 + .vmode = FB_VMODE_NONINTERLACED,
12631 +static struct fb_fix_screeninfo s1d15605_fix __initdata = {
12632 + .id = "s1d15605",
12633 + .type = FB_TYPE_PACKED_PIXELS,
12634 + .visual = FB_VISUAL_MONO10,
12635 + .xpanstep = 0,
12636 + .ypanstep = 0,
12637 + .ywrapstep = 0,
12638 + .accel = FB_ACCEL_NONE,
12641 +struct s1d15605fb_info {
12642 + struct fb_info *info;
12643 + char *mmio;
12644 + unsigned long reset_pin;
12645 + struct platform_device *pdev;
12649 + * LCD device interface
12650 + */
12651 +#define RESET_DISPLAY 0xE2
12652 +#define LCD_BIAS_1_9 0xA2
12653 +#define ADC_SELECT_REVERSE 0xA1
12654 +#define COMMON_OUTPUT_NORMAL 0xC0
12655 +#define V5_RESISTOR_RATIO 0x26
12656 +#define ELECTRONIC_VOLUME_SET 0x81
12657 +#define ELECTRONIC_VOLUME_INIT 0x20
12658 +#define POWER_CONTROL_SET 0x28
12659 +#define VOLTAGE_REGULATOR 0x02
12660 +#define VOLTAGE_FOLLOWER 0x01
12661 +#define BOOSTER_CIRCUIT 0x04
12662 +#define DISPLAY_ON 0xAF
12663 +#define START_LINE_SET 0x40
12664 +#define PAGE_ADDRESS_SET 0xB0
12665 +#define COLUMN_ADDRESS_HIGH 0x10
12666 +#define COLUMN_ADDRESS_LOW 0x00
12667 +#define RESISTOR_RATIO_START 0x20
12669 +#define NUM_OF_PAGES 8
12670 +#define NUM_OF_COLUMNS 128
12672 +#define WRITE_COMMAND(x) __raw_writeb((x), (sinfo)->mmio)
12673 +#define READ_COMMAND __raw_readb((sinfo)->mmio)
12674 +#define WRITE_DATA(x) __raw_writeb((x), (sinfo)->mmio + (0x10000))
12675 +#define READ_DATA __raw_readb((sinfo)->mmio + (0x10000))
12679 + * s1d15605fb_resize_framebuffer
12681 + * Free allocated space if different. Allocate on new of changed.
12682 + * Returns -ENOMEM if the new framebuffer can not be allocated,
12683 + * zero on success.
12684 + */
12685 +static int s1d15605fb_resize_framebuffer(struct s1d15605fb_info *sinfo)
12687 + struct fb_info *info = sinfo->info;
12688 + struct fb_fix_screeninfo *fix = &info->fix;
12689 + struct fb_var_screeninfo *var = &info->var;
12690 + unsigned int new_size;
12691 + void *new_vaddr;
12693 + new_size = ((var->xres_virtual * var->yres_virtual * var->bits_per_pixel) / 8);
12695 + MSG("%s: x (%d) y (%d) bpp (%d): new size 0x%08x\n", __FUNCTION__,
12696 + var->xres_virtual, var->yres_virtual, var->bits_per_pixel, new_size);
12698 + if (new_size == fix->smem_len)
12699 + return 0;
12701 + if (fix->smem_len) {
12702 + kfree(info->screen_base);
12705 + new_vaddr = kmalloc(new_size, GFP_KERNEL);
12707 + if (!new_vaddr) {
12708 + fix->smem_len = 0;
12709 + return -ENOMEM;
12712 + info->screen_base = new_vaddr;
12713 + fix->smem_start = (unsigned)new_vaddr;
12714 + fix->smem_len = new_size;
12715 + fix->line_length = (var->xres_virtual * var->bits_per_pixel) / 8;
12717 + dev_info(info->device,
12718 + "%luKiB frame buffer at %08lx (mapped at %p)\n",
12719 + (unsigned long)info->fix.smem_len / 1024,
12720 + (unsigned long)info->fix.smem_start,
12721 + info->screen_base);
12723 + return 0;
12728 + * The s1d15605 seems to be divided into eight 128 pixel wide pages (from top to
12729 + * bottom) each page seems to be eight pixels high, where these eight pixels are
12730 + * one byte
12731 + */
12732 +static void s1d15605_update(struct fb_info *info)
12734 + struct s1d15605fb_info *sinfo = info->par;
12735 + int page, i, row, colmask;
12736 + u8 retVal, *rowPtr;
12738 + WRITE_COMMAND(START_LINE_SET);
12739 + for (page = 0; page < NUM_OF_PAGES; ++page) {
12740 + WRITE_COMMAND(PAGE_ADDRESS_SET + page);
12741 + WRITE_COMMAND(COLUMN_ADDRESS_HIGH);
12742 + WRITE_COMMAND(COLUMN_ADDRESS_LOW);
12744 + for (i = 0; i < NUM_OF_COLUMNS; ++i)
12746 + /* point of opportunity: optimization */
12747 + colmask = (1 << (i & 0x7));
12748 + rowPtr = (u8*)(info->screen_base);
12749 + rowPtr += (VIDEOWIDTH_BYTES * 8 * page);
12750 + rowPtr += (i >> 3);
12751 + retVal = 0;
12752 + for (row = 0; row < 8; ++row)
12754 + retVal = (retVal >> 1) | (((*rowPtr) & colmask) ? 0x80 : 0);
12755 + rowPtr += VIDEOWIDTH_BYTES;
12757 + WRITE_DATA(retVal);
12761 + WRITE_COMMAND(DISPLAY_ON);
12766 + * Setting the video mode has been split into two parts.
12767 + * First part, xxxfb_check_var, must not write anything
12768 + * to hardware, it should only verify and adjust var.
12769 + * This means it doesn't alter par but it does use hardware
12770 + * data from it to check this var.
12771 + */
12772 +static int s1d15605_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
12774 + /*
12775 + * Some very basic checks
12776 + */
12777 + if (!var->xres)
12778 + var->xres = 1;
12779 + if (!var->yres)
12780 + var->yres = 1;
12781 + if (var->xres > var->xres_virtual)
12782 + var->xres_virtual = var->xres;
12783 + if (var->yres > var->yres_virtual)
12784 + var->yres_virtual = var->yres;
12786 + if(var->bits_per_pixel > VIDEODEPTH)
12787 + return -EINVAL;
12789 + /*
12790 + * Memory limit
12791 + */
12792 + if (((var->yres_virtual * var->bits_per_pixel * var->yres_virtual) >> 3) >
12793 + ACTUALVIDEOMEMSIZE)
12794 + return -ENOMEM;
12796 + /*
12797 + * Now that we checked it we alter var. The reason being is that the video
12798 + * mode passed in might not work but slight changes to it might make it
12799 + * work. This way we let the user know what is acceptable.
12800 + */
12801 + switch (var->bits_per_pixel) {
12802 + case 1:
12803 + var->red.offset = var->green.offset = var->blue.offset = 0;
12804 + var->red.length = var->green.length = var->blue.length
12805 + = var->bits_per_pixel;
12806 + break;
12807 + default:
12808 + return -EINVAL;
12811 + var->xoffset = var->yoffset = 0;
12812 + var->red.msb_right = var->green.msb_right = var->blue.msb_right =
12813 + var->transp.msb_right = 0;
12815 + return 0;
12820 + * This routine actually sets the video mode. It's in here where we
12821 + * the hardware state info->par and fix which can be affected by the
12822 + * change in par. For this driver it doesn't do much.
12823 + */
12824 +static int s1d15605_set_par(struct fb_info *info)
12826 + int ret;
12828 + MSG("%s:\n", __func__);
12829 + MSG(" * resolution: %ux%u (%ux%u virtual)\n",
12830 + info->var.xres, info->var.yres,
12831 + info->var.xres_virtual, info->var.yres_virtual);
12833 + ret = s1d15605fb_resize_framebuffer(info->par);
12835 + info->fix.visual = FB_VISUAL_MONO10;
12836 + return ret;
12841 + * Set a single color register. The values supplied are already
12842 + * rounded down to the hardware's capabilities (according to the
12843 + * entries in the var structure). Return != 0 for invalid regno.
12844 + */
12845 +static int s1d15605_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
12846 + u_int transp, struct fb_info *info)
12848 + if (regno > 1) /* no. of hw registers - we only do mono now */
12849 + return 1;
12851 + return 0;
12856 + * Currently, the routine will simply shut-off the backlight and prevent
12857 + * updates/refreshes. Modify according to application.
12859 + * 0 unblank, 1 blank, 2 no vsync, 3 no hsync, 4 off
12860 + */
12861 +static int s1d15605_blank(int blank, struct fb_info *info)
12863 +#ifdef CONFIG_PMAC_BACKLIGHT
12864 + if (blank)
12865 + pmac_backlight->props.power = FB_BLANK_POWERDOWN;
12866 + else
12867 + pmac_backlight->props.power = FB_BLANK_UNBLANK;
12868 + backlight_update_status(pmac_backlight);
12869 +#endif
12870 + return 1;
12875 + * Pan or Wrap the Display
12877 + * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag
12878 + */
12880 +static int s1d15605_pan_display(struct fb_var_screeninfo *var,
12881 + struct fb_info *info)
12883 + if (var->vmode & FB_VMODE_YWRAP) {
12884 + if (var->yoffset < 0
12885 + || var->yoffset >= info->var.yres_virtual
12886 + || var->xoffset)
12887 + return -EINVAL;
12888 + } else {
12889 + if (var->xoffset + var->xres > info->var.xres_virtual ||
12890 + var->yoffset + var->yres > info->var.yres_virtual)
12891 + return -EINVAL;
12893 + info->var.xoffset = var->xoffset;
12894 + info->var.yoffset = var->yoffset;
12895 + if (var->vmode & FB_VMODE_YWRAP)
12896 + info->var.vmode |= FB_VMODE_YWRAP;
12897 + else
12898 + info->var.vmode &= ~FB_VMODE_YWRAP;
12899 + return 0;
12904 +static void s1d15605_copyarea(struct fb_info *info, const struct fb_copyarea *region)
12906 + cfb_copyarea(info, region);
12907 + s1d15605_update(info);
12911 +static void s1d15605_fillrect (struct fb_info *info, const struct fb_fillrect *rect)
12913 + cfb_fillrect(info, rect);
12914 + s1d15605_update(info);
12918 +static void s1d15605_imageblit(struct fb_info *p, const struct fb_image *image)
12920 + cfb_imageblit(p, image);
12921 + s1d15605_update(p);
12926 + * Write the users data to our framebuffer, and then trigger a psuedo DMA
12927 + */
12928 +static ssize_t s1d15605_write(struct file *file, const char *buf,
12929 + size_t count, loff_t *ppos)
12931 + unsigned long p = *ppos;
12932 + struct inode *inode = file->f_dentry->d_inode;
12933 + int fbidx = iminor(inode);
12934 + struct fb_info *info = registered_fb[fbidx];
12935 + int err;
12937 + if (p > info->fix.smem_len)
12938 + return -ENOSPC;
12939 + if (count >= info->fix.smem_len)
12940 + count = info->fix.smem_len;
12941 + err = 0;
12942 + if (count + p > info->fix.smem_len) {
12943 + count = info->fix.smem_len - p;
12944 + err = -ENOSPC;
12946 + if (count) {
12947 + char *base_addr;
12949 + base_addr = info->screen_base;
12950 + count -= copy_from_user(base_addr+p, buf, count);
12951 + *ppos += count;
12952 + err = -EFAULT;
12955 + s1d15605_update(info);
12957 + if (count)
12958 + return count;
12960 + return err;
12963 +#ifdef USE_PRIVATE_VMA_FXS
12964 +static void s1d15605_vma_open(struct vm_area_struct *vma)
12966 + // FIXME - store stats in the device data via vm_private_data
12970 +static void s1d15605_vma_close(struct vm_area_struct *vma)
12972 + // FIXME - store stats in the device data via vm_private_data
12976 +static struct page *s1d15605_vma_nopage(struct vm_area_struct *vma,
12977 + unsigned long address, int *type)
12979 + struct page *page;
12980 + struct fb_info *info = vma->vm_private_data;
12982 + page = virt_to_page(info->screen_base);
12983 + get_page(page);
12985 + // FIXME - now someone has a link to our page, start periodically blitting
12986 + // latest updates to the actual device.
12988 + return page;
12992 +static struct vm_operations_struct s1d15605_vm_ops = {
12993 + .open = s1d15605_vma_open,
12994 + .close = s1d15605_vma_close,
12995 + .nopage = s1d15605_vma_nopage
12999 +/* We don't do much here - because we have special vm_ops */
13000 +static int s1d15605_mmap(struct fb_info *info, struct vm_area_struct *vma)
13002 + vma->vm_ops = &s1d15605_vm_ops;
13003 + vma->vm_flags |= VM_RESERVED;
13004 + vma->vm_private_data = info;
13005 + s1d15605_vma_open(vma);
13007 + return 0;
13009 +#endif /* USE_PRIVATE_VMA_FXS */
13012 +static struct fb_ops s1d15605fb_ops = {
13013 + .owner = THIS_MODULE,
13014 + .fb_check_var = s1d15605_check_var,
13015 + .fb_set_par = s1d15605_set_par,
13016 + .fb_setcolreg = s1d15605_setcolreg,
13017 + .fb_blank = s1d15605_blank,
13018 +// .fb_pan_display = s1d15605_pan_display,
13019 + .fb_fillrect = s1d15605_fillrect,
13020 + .fb_copyarea = s1d15605_copyarea,
13021 + .fb_imageblit = s1d15605_imageblit,
13022 + .fb_write = s1d15605_write,
13023 +#ifdef USE_PRIVATE_VMA_FXS
13024 + .fb_mmap = s1d15605_mmap,
13025 +#endif
13029 +static void s1d15605_device_init(struct s1d15605fb_info *sinfo) {
13031 + char value;
13033 + /* release the reset line by reading the device - proto hardware */
13034 + value = READ_COMMAND;
13035 + value = READ_COMMAND;
13037 +#ifdef CONFIG_MACH_KB9200
13038 + /* new boards have dedicated reset line */
13039 + gpio_set_value(sinfo->reset_pin, 1);
13040 +#endif
13042 + /* initialize the device within 5ms */
13043 + WRITE_COMMAND(RESET_DISPLAY);
13044 + WRITE_COMMAND(LCD_BIAS_1_9);
13045 + WRITE_COMMAND(ADC_SELECT_REVERSE);
13046 + WRITE_COMMAND(COMMON_OUTPUT_NORMAL);
13047 + WRITE_COMMAND(V5_RESISTOR_RATIO);
13048 + WRITE_COMMAND(ELECTRONIC_VOLUME_SET);
13049 + WRITE_COMMAND(ELECTRONIC_VOLUME_INIT);
13050 + WRITE_COMMAND(POWER_CONTROL_SET | VOLTAGE_REGULATOR | VOLTAGE_FOLLOWER | BOOSTER_CIRCUIT);
13051 + WRITE_COMMAND(DISPLAY_ON);
13053 + WRITE_COMMAND(RESISTOR_RATIO_START + 4);
13054 + WRITE_COMMAND(ELECTRONIC_VOLUME_SET);
13055 + WRITE_COMMAND(0x33);
13059 +static int s1d15605fb_probe(struct platform_device *pdev)
13061 + struct device *dev = &pdev->dev;
13062 + struct fb_info *info;
13063 + struct s1d15605fb_info *sinfo;
13064 + int ret;
13066 + MSG("%s\n", __func__);
13068 + if (!(info = framebuffer_alloc(sizeof(struct s1d15605fb_info), dev))) {
13069 + dev_err(dev, "Cannot allocate framebuffer struct\n");
13070 + return -ENOMEM;
13073 + sinfo = info->par;
13074 + sinfo->info = info;
13075 + sinfo->pdev = pdev;
13077 + if (pdev->num_resources < 2) {
13078 + dev_err(dev, "Resources unusable\n");
13079 + ret = -ENODEV;
13080 + goto free_info;
13083 + info->fbops = &s1d15605fb_ops;
13084 + strcpy(info->fix.id, pdev->name);
13086 + info->fix.mmio_start = pdev->resource[0].start;
13087 + info->fix.mmio_len = pdev->resource[0].end - pdev->resource[0].start + 1;
13088 + sinfo->reset_pin = pdev->resource[1].start;
13090 + ret = s1d15605fb_resize_framebuffer(sinfo);
13091 + if (ret < 0) {
13092 + dev_err(dev, "Cannot resize framebuffer: %d\n", ret);
13093 + goto free_fb;
13096 + if (!request_mem_region(info->fix.mmio_start,
13097 + info->fix.mmio_len, pdev->name)) {
13098 + ret = -EBUSY;
13099 + goto free_fb;
13102 + sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len);
13103 + if (!sinfo->mmio) {
13104 + dev_err(dev, "Cannot map LCD memory region\n");
13105 + goto release_mem;
13108 + s1d15605_device_init(sinfo);
13110 + ret = fb_find_mode(&info->var, info, NULL, NULL, 0, NULL, 1);
13112 + if (!ret || (ret == 4))
13113 + info->var = s1d15605_default;
13115 + info->fix = s1d15605_fix;
13116 + info->flags = FBINFO_FLAG_DEFAULT |
13117 +/* FBINFO_HWACCEL_YPAN | */
13118 + FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;
13120 + ret = register_framebuffer(info);
13121 + if (ret < 0) {
13122 + dev_err(dev, "Failed to register framebuffer device: %d\n", ret);
13123 + goto unmap_mmio;
13126 + dev_set_drvdata(dev, info);
13128 + memset(info->screen_base, 0, info->fix.smem_len);
13129 + info->var.activate |= FB_ACTIVATE_NOW;
13130 + ret = fb_set_var(info, &info->var);
13131 + if (ret) {
13132 + dev_warn(dev, "Unable to set display parameters\n");
13135 + info->var.activate &= ~(FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW);
13137 + dev_dbg(dev, "%s SUCCESS\n", __func__);
13139 + dev_info(dev, "Driver $Revision: 1.1 $\n");
13141 + return 0;
13143 +unmap_mmio:
13144 + iounmap(sinfo->mmio);
13145 +release_mem:
13146 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
13147 +free_fb:
13148 + kfree(info->screen_base);
13150 +free_info:
13151 + framebuffer_release(info);
13153 + dev_dbg(dev, "%s FAILED\n", __func__);
13154 + return ret;
13158 +static int s1d15605fb_remove(struct platform_device *pdev)
13160 + struct device *dev = &pdev->dev;
13161 + struct fb_info *info = dev_get_drvdata(dev);
13162 + struct s1d15605fb_info *sinfo = info->par;
13164 + if (!sinfo)
13165 + return 0;
13167 + unregister_framebuffer(info);
13169 + iounmap(sinfo->mmio);
13170 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
13172 + kfree(info->screen_base);
13174 + dev_set_drvdata(dev, NULL);
13175 + framebuffer_release(info);
13176 + return 0;
13180 +static struct platform_driver s1d15605fb_driver = {
13181 + .probe = s1d15605fb_probe,
13182 + .remove = s1d15605fb_remove,
13183 + .driver = {
13184 + .name = "s1d15605fb",
13185 + .owner = THIS_MODULE,
13186 + },
13190 +static int __init s1d15605fb_init(void)
13192 + return platform_driver_register(&s1d15605fb_driver);
13196 +static void __exit s1d15605fb_exit(void)
13198 + platform_driver_unregister(&s1d15605fb_driver);
13202 +module_init(s1d15605fb_init);
13203 +module_exit(s1d15605fb_exit);
13206 +MODULE_AUTHOR("KwikByte");
13207 +MODULE_DESCRIPTION("Epson S1D15605 LCD Controller framebuffer driver");
13208 +MODULE_LICENSE("GPL");
13209 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91_adc.h linux-2.6-stable/include/asm-arm/arch-at91/at91_adc.h
13210 --- linux-2.6.21/include/asm-arm/arch-at91/at91_adc.h Thu Jan 1 02:00:00 1970
13211 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91_adc.h Tue May 8 12:13:31 2007
13212 @@ -0,0 +1,61 @@
13214 + * include/asm-arm/arch-at91/at91_adc.h
13216 + * Copyright (C) SAN People
13218 + * Analog-to-Digital Converter (ADC) registers.
13219 + * Based on AT91SAM9260 datasheet revision D.
13221 + * This program is free software; you can redistribute it and/or modify
13222 + * it under the terms of the GNU General Public License as published by
13223 + * the Free Software Foundation; either version 2 of the License, or
13224 + * (at your option) any later version.
13225 + */
13227 +#ifndef AT91_ADC_H
13228 +#define AT91_ADC_H
13230 +#define AT91_ADC_CR 0x00 /* Control Register */
13231 +#define AT91_ADC_SWRST (1 << 0) /* Software Reset */
13232 +#define AT91_ADC_START (1 << 1) /* Start Conversion */
13234 +#define AT91_ADC_MR 0x04 /* Mode Register */
13235 +#define AT91_ADC_TRGEN (1 << 0) /* Trigger Enable */
13236 +#define AT91_ADC_TRGSEL (7 << 1) /* Trigger Selection */
13237 +#define AT91_ADC_TRGSEL_TC0 (0 << 1)
13238 +#define AT91_ADC_TRGSEL_TC1 (1 << 1)
13239 +#define AT91_ADC_TRGSEL_TC2 (2 << 1)
13240 +#define AT91_ADC_TRGSEL_EXTERNAL (6 << 1)
13241 +#define AT91_ADC_LOWRES (1 << 4) /* Low Resolution */
13242 +#define AT91_ADC_SLEEP (1 << 5) /* Sleep Mode */
13243 +#define AT91_ADC_PRESCAL (0x3f << 8) /* Prescalar Rate Selection */
13244 +#define AT91_ADC_PRESCAL_(x) ((x) << 8)
13245 +#define AT91_ADC_STARTUP (0x1f << 16) /* Startup Up Time */
13246 +#define AT91_ADC_STARTUP_(x) ((x) << 16)
13247 +#define AT91_ADC_SHTIM (0xf << 24) /* Sample & Hold Time */
13248 +#define AT91_ADC_SHTIM_(x) ((x) << 24)
13250 +#define AT91_ADC_CHER 0x10 /* Channel Enable Register */
13251 +#define AT91_ADC_CHDR 0x14 /* Channel Disable Register */
13252 +#define AT91_ADC_CHSR 0x18 /* Channel Status Register */
13253 +#define AT91_ADC_CH(n) (1 << (n)) /* Channel Number */
13255 +#define AT91_ADC_SR 0x1C /* Status Register */
13256 +#define AT91_ADC_EOC(n) (1 << (n)) /* End of Conversion on Channel N */
13257 +#define AT91_ADC_OVRE(n) (1 << ((n) + 8))/* Overrun Error on Channel N */
13258 +#define AT91_ADC_DRDY (1 << 16) /* Data Ready */
13259 +#define AT91_ADC_GOVRE (1 << 17) /* General Overrun Error */
13260 +#define AT91_ADC_ENDRX (1 << 18) /* End of RX Buffer */
13261 +#define AT91_ADC_RXFUFF (1 << 19) /* RX Buffer Full */
13263 +#define AT91_ADC_LCDR 0x20 /* Last Converted Data Register */
13264 +#define AT91_ADC_LDATA (0x3ff)
13266 +#define AT91_ADC_IER 0x24 /* Interrupt Enable Register */
13267 +#define AT91_ADC_IDR 0x28 /* Interrupt Disable Register */
13268 +#define AT91_ADC_IMR 0x2C /* Interrupt Mask Register */
13270 +#define AT91_ADC_CHR(n) (0x30 + ((n) * 4) /* Channel Data Register N */
13271 +#define AT91_ADC_DATA (0x3ff)
13273 +#endif
13274 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91_mci.h linux-2.6-stable/include/asm-arm/arch-at91/at91_mci.h
13275 --- linux-2.6.21/include/asm-arm/arch-at91/at91_mci.h Thu Apr 26 05:08:32 2007
13276 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91_mci.h Tue May 8 12:13:31 2007
13277 @@ -26,6 +26,9 @@
13278 #define AT91_MCI_MR 0x04 /* Mode Register */
13279 #define AT91_MCI_CLKDIV (0xff << 0) /* Clock Divider */
13280 #define AT91_MCI_PWSDIV (7 << 8) /* Power Saving Divider */
13281 +#define AT91_MCI_RDPROOF (1 << 11) /* Read Proof Enable [SAM926[03] only] */
13282 +#define AT91_MCI_WRPROOF (1 << 12) /* Write Proof Enable [SAM926[03] only] */
13283 +#define AT91_MCI_PDCFBYTE (1 << 13) /* PDC Force Byte Transfer [SAM926[03] only] */
13284 #define AT91_MCI_PDCPADV (1 << 14) /* PDC Padding Value */
13285 #define AT91_MCI_PDCMODE (1 << 15) /* PDC-orientated Mode */
13286 #define AT91_MCI_BLKLEN (0xfff << 18) /* Data Block Length */
13287 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91_pmc.h linux-2.6-stable/include/asm-arm/arch-at91/at91_pmc.h
13288 --- linux-2.6.21/include/asm-arm/arch-at91/at91_pmc.h Thu Apr 26 05:08:32 2007
13289 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91_pmc.h Fri May 11 16:45:00 2007
13290 @@ -37,7 +37,9 @@
13291 #define AT91_PMC_PCDR (AT91_PMC + 0x14) /* Peripheral Clock Disable Register */
13292 #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */
13294 -#define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register */
13295 +#define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL only] */
13297 +#define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */
13298 #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */
13299 #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [AT91SAM926x only] */
13300 #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */
13301 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91rm9200.h linux-2.6-stable/include/asm-arm/arch-at91/at91rm9200.h
13302 --- linux-2.6.21/include/asm-arm/arch-at91/at91rm9200.h Thu Apr 26 05:08:32 2007
13303 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91rm9200.h Tue May 8 12:56:33 2007
13304 @@ -107,185 +107,4 @@
13305 #define AT91RM9200_UHP_BASE 0x00300000 /* USB Host controller */
13308 -#if 0
13310 - * PIO pin definitions (peripheral A/B multiplexing).
13311 - */
13312 -#define AT91_PA0_MISO (1 << 0) /* A: SPI Master-In Slave-Out */
13313 -#define AT91_PA0_PCK3 (1 << 0) /* B: PMC Programmable Clock Output 3 */
13314 -#define AT91_PA1_MOSI (1 << 1) /* A: SPI Master-Out Slave-In */
13315 -#define AT91_PA1_PCK0 (1 << 1) /* B: PMC Programmable Clock Output 0 */
13316 -#define AT91_PA2_SPCK (1 << 2) /* A: SPI Serial Clock */
13317 -#define AT91_PA2_IRQ4 (1 << 2) /* B: External Interrupt 4 */
13318 -#define AT91_PA3_NPCS0 (1 << 3) /* A: SPI Peripheral Chip Select 0 */
13319 -#define AT91_PA3_IRQ5 (1 << 3) /* B: External Interrupt 5 */
13320 -#define AT91_PA4_NPCS1 (1 << 4) /* A: SPI Peripheral Chip Select 1 */
13321 -#define AT91_PA4_PCK1 (1 << 4) /* B: PMC Programmable Clock Output 1 */
13322 -#define AT91_PA5_NPCS2 (1 << 5) /* A: SPI Peripheral Chip Select 2 */
13323 -#define AT91_PA5_TXD3 (1 << 5) /* B: USART Transmit Data 3 */
13324 -#define AT91_PA6_NPCS3 (1 << 6) /* A: SPI Peripheral Chip Select 3 */
13325 -#define AT91_PA6_RXD3 (1 << 6) /* B: USART Receive Data 3 */
13326 -#define AT91_PA7_ETXCK_EREFCK (1 << 7) /* A: Ethernet Reference Clock / Transmit Clock */
13327 -#define AT91_PA7_PCK2 (1 << 7) /* B: PMC Programmable Clock Output 2 */
13328 -#define AT91_PA8_ETXEN (1 << 8) /* A: Ethernet Transmit Enable */
13329 -#define AT91_PA8_MCCDB (1 << 8) /* B: MMC Multimedia Card B Command */
13330 -#define AT91_PA9_ETX0 (1 << 9) /* A: Ethernet Transmit Data 0 */
13331 -#define AT91_PA9_MCDB0 (1 << 9) /* B: MMC Multimedia Card B Data 0 */
13332 -#define AT91_PA10_ETX1 (1 << 10) /* A: Ethernet Transmit Data 1 */
13333 -#define AT91_PA10_MCDB1 (1 << 10) /* B: MMC Multimedia Card B Data 1 */
13334 -#define AT91_PA11_ECRS_ECRSDV (1 << 11) /* A: Ethernet Carrier Sense / Data Valid */
13335 -#define AT91_PA11_MCDB2 (1 << 11) /* B: MMC Multimedia Card B Data 2 */
13336 -#define AT91_PA12_ERX0 (1 << 12) /* A: Ethernet Receive Data 0 */
13337 -#define AT91_PA12_MCDB3 (1 << 12) /* B: MMC Multimedia Card B Data 3 */
13338 -#define AT91_PA13_ERX1 (1 << 13) /* A: Ethernet Receive Data 1 */
13339 -#define AT91_PA13_TCLK0 (1 << 13) /* B: TC External Clock Input 0 */
13340 -#define AT91_PA14_ERXER (1 << 14) /* A: Ethernet Receive Error */
13341 -#define AT91_PA14_TCLK1 (1 << 14) /* B: TC External Clock Input 1 */
13342 -#define AT91_PA15_EMDC (1 << 15) /* A: Ethernet Management Data Clock */
13343 -#define AT91_PA15_TCLK2 (1 << 15) /* B: TC External Clock Input 2 */
13344 -#define AT91_PA16_EMDIO (1 << 16) /* A: Ethernet Management Data I/O */
13345 -#define AT91_PA16_IRQ6 (1 << 16) /* B: External Interrupt 6 */
13346 -#define AT91_PA17_TXD0 (1 << 17) /* A: USART Transmit Data 0 */
13347 -#define AT91_PA17_TIOA0 (1 << 17) /* B: TC I/O Line A 0 */
13348 -#define AT91_PA18_RXD0 (1 << 18) /* A: USART Receive Data 0 */
13349 -#define AT91_PA18_TIOB0 (1 << 18) /* B: TC I/O Line B 0 */
13350 -#define AT91_PA19_SCK0 (1 << 19) /* A: USART Serial Clock 0 */
13351 -#define AT91_PA19_TIOA1 (1 << 19) /* B: TC I/O Line A 1 */
13352 -#define AT91_PA20_CTS0 (1 << 20) /* A: USART Clear To Send 0 */
13353 -#define AT91_PA20_TIOB1 (1 << 20) /* B: TC I/O Line B 1 */
13354 -#define AT91_PA21_RTS0 (1 << 21) /* A: USART Ready To Send 0 */
13355 -#define AT91_PA21_TIOA2 (1 << 21) /* B: TC I/O Line A 2 */
13356 -#define AT91_PA22_RXD2 (1 << 22) /* A: USART Receive Data 2 */
13357 -#define AT91_PA22_TIOB2 (1 << 22) /* B: TC I/O Line B 2 */
13358 -#define AT91_PA23_TXD2 (1 << 23) /* A: USART Transmit Data 2 */
13359 -#define AT91_PA23_IRQ3 (1 << 23) /* B: External Interrupt 3 */
13360 -#define AT91_PA24_SCK2 (1 << 24) /* A: USART Serial Clock 2 */
13361 -#define AT91_PA24_PCK1 (1 << 24) /* B: PMC Programmable Clock Output 1 */
13362 -#define AT91_PA25_TWD (1 << 25) /* A: TWI Two-wire Serial Data */
13363 -#define AT91_PA25_IRQ2 (1 << 25) /* B: External Interrupt 2 */
13364 -#define AT91_PA26_TWCK (1 << 26) /* A: TWI Two-wire Serial Clock */
13365 -#define AT91_PA26_IRQ1 (1 << 26) /* B: External Interrupt 1 */
13366 -#define AT91_PA27_MCCK (1 << 27) /* A: MMC Multimedia Card Clock */
13367 -#define AT91_PA27_TCLK3 (1 << 27) /* B: TC External Clock Input 3 */
13368 -#define AT91_PA28_MCCDA (1 << 28) /* A: MMC Multimedia Card A Command */
13369 -#define AT91_PA28_TCLK4 (1 << 28) /* B: TC External Clock Input 4 */
13370 -#define AT91_PA29_MCDA0 (1 << 29) /* A: MMC Multimedia Card A Data 0 */
13371 -#define AT91_PA29_TCLK5 (1 << 29) /* B: TC External Clock Input 5 */
13372 -#define AT91_PA30_DRXD (1 << 30) /* A: DBGU Receive Data */
13373 -#define AT91_PA30_CTS2 (1 << 30) /* B: USART Clear To Send 2 */
13374 -#define AT91_PA31_DTXD (1 << 31) /* A: DBGU Transmit Data */
13375 -#define AT91_PA31_RTS2 (1 << 31) /* B: USART Ready To Send 2 */
13377 -#define AT91_PB0_TF0 (1 << 0) /* A: SSC Transmit Frame Sync 0 */
13378 -#define AT91_PB0_RTS3 (1 << 0) /* B: USART Ready To Send 3 */
13379 -#define AT91_PB1_TK0 (1 << 1) /* A: SSC Transmit Clock 0 */
13380 -#define AT91_PB1_CTS3 (1 << 1) /* B: USART Clear To Send 3 */
13381 -#define AT91_PB2_TD0 (1 << 2) /* A: SSC Transmit Data 0 */
13382 -#define AT91_PB2_SCK3 (1 << 2) /* B: USART Serial Clock 3 */
13383 -#define AT91_PB3_RD0 (1 << 3) /* A: SSC Receive Data 0 */
13384 -#define AT91_PB3_MCDA1 (1 << 3) /* B: MMC Multimedia Card A Data 1 */
13385 -#define AT91_PB4_RK0 (1 << 4) /* A: SSC Receive Clock 0 */
13386 -#define AT91_PB4_MCDA2 (1 << 4) /* B: MMC Multimedia Card A Data 2 */
13387 -#define AT91_PB5_RF0 (1 << 5) /* A: SSC Receive Frame Sync 0 */
13388 -#define AT91_PB5_MCDA3 (1 << 5) /* B: MMC Multimedia Card A Data 3 */
13389 -#define AT91_PB6_TF1 (1 << 6) /* A: SSC Transmit Frame Sync 1 */
13390 -#define AT91_PB6_TIOA3 (1 << 6) /* B: TC I/O Line A 3 */
13391 -#define AT91_PB7_TK1 (1 << 7) /* A: SSC Transmit Clock 1 */
13392 -#define AT91_PB7_TIOB3 (1 << 7) /* B: TC I/O Line B 3 */
13393 -#define AT91_PB8_TD1 (1 << 8) /* A: SSC Transmit Data 1 */
13394 -#define AT91_PB8_TIOA4 (1 << 8) /* B: TC I/O Line A 4 */
13395 -#define AT91_PB9_RD1 (1 << 9) /* A: SSC Receive Data 1 */
13396 -#define AT91_PB9_TIOB4 (1 << 9) /* B: TC I/O Line B 4 */
13397 -#define AT91_PB10_RK1 (1 << 10) /* A: SSC Receive Clock 1 */
13398 -#define AT91_PB10_TIOA5 (1 << 10) /* B: TC I/O Line A 5 */
13399 -#define AT91_PB11_RF1 (1 << 11) /* A: SSC Receive Frame Sync 1 */
13400 -#define AT91_PB11_TIOB5 (1 << 11) /* B: TC I/O Line B 5 */
13401 -#define AT91_PB12_TF2 (1 << 12) /* A: SSC Transmit Frame Sync 2 */
13402 -#define AT91_PB12_ETX2 (1 << 12) /* B: Ethernet Transmit Data 2 */
13403 -#define AT91_PB13_TK2 (1 << 13) /* A: SSC Transmit Clock 3 */
13404 -#define AT91_PB13_ETX3 (1 << 13) /* B: Ethernet Transmit Data 3 */
13405 -#define AT91_PB14_TD2 (1 << 14) /* A: SSC Transmit Data 2 */
13406 -#define AT91_PB14_ETXER (1 << 14) /* B: Ethernet Transmit Coding Error */
13407 -#define AT91_PB15_RD2 (1 << 15) /* A: SSC Receive Data 2 */
13408 -#define AT91_PB15_ERX2 (1 << 15) /* B: Ethernet Receive Data 2 */
13409 -#define AT91_PB16_RK2 (1 << 16) /* A: SSC Receive Clock 2 */
13410 -#define AT91_PB16_ERX3 (1 << 16) /* B: Ethernet Receive Data 3 */
13411 -#define AT91_PB17_RF2 (1 << 17) /* A: SSC Receive Frame Sync 2 */
13412 -#define AT91_PB17_ERXDV (1 << 17) /* B: Ethernet Receive Data Valid */
13413 -#define AT91_PB18_RI1 (1 << 18) /* A: USART Ring Indicator 1 */
13414 -#define AT91_PB18_ECOL (1 << 18) /* B: Ethernet Collision Detected */
13415 -#define AT91_PB19_DTR1 (1 << 19) /* A: USART Data Terminal Ready 1 */
13416 -#define AT91_PB19_ERXCK (1 << 19) /* B: Ethernet Receive Clock */
13417 -#define AT91_PB20_TXD1 (1 << 20) /* A: USART Transmit Data 1 */
13418 -#define AT91_PB21_RXD1 (1 << 21) /* A: USART Receive Data 1 */
13419 -#define AT91_PB22_SCK1 (1 << 22) /* A: USART Serial Clock 1 */
13420 -#define AT91_PB23_DCD1 (1 << 23) /* A: USART Data Carrier Detect 1 */
13421 -#define AT91_PB24_CTS1 (1 << 24) /* A: USART Clear To Send 1 */
13422 -#define AT91_PB25_DSR1 (1 << 25) /* A: USART Data Set Ready 1 */
13423 -#define AT91_PB25_EF100 (1 << 25) /* B: Ethernet Force 100 Mbit */
13424 -#define AT91_PB26_RTS1 (1 << 26) /* A: USART Ready To Send 1 */
13425 -#define AT91_PB27_PCK0 (1 << 27) /* B: PMC Programmable Clock Output 0 */
13426 -#define AT91_PB28_FIQ (1 << 28) /* A: Fast Interrupt */
13427 -#define AT91_PB29_IRQ0 (1 << 29) /* A: External Interrupt 0 */
13429 -#define AT91_PC0_BFCK (1 << 0) /* A: Burst Flash Clock */
13430 -#define AT91_PC1_BFRDY_SMOE (1 << 1) /* A: Burst Flash Ready / SmartMedia Output Enable */
13431 -#define AT91_PC2_BFAVD (1 << 2) /* A: Burst Flash Address Valid */
13432 -#define AT91_PC3_BFBAA_SMWE (1 << 3) /* A: Burst Flash Address Advance / SmartMedia Write Enable */
13433 -#define AT91_PC4_BFOE (1 << 4) /* A: Burst Flash Output Enable */
13434 -#define AT91_PC5_BFWE (1 << 5) /* A: Burst Flash Write Enable */
13435 -#define AT91_PC6_NWAIT (1 << 6) /* A: SMC Wait Signal */
13436 -#define AT91_PC7_A23 (1 << 7) /* A: Address Bus 23 */
13437 -#define AT91_PC8_A24 (1 << 8) /* A: Address Bus 24 */
13438 -#define AT91_PC9_A25_CFRNW (1 << 9) /* A: Address Bus 25 / Compact Flash Read Not Write */
13439 -#define AT91_PC10_NCS4_CFCS (1 << 10) /* A: SMC Chip Select 4 / Compact Flash Chip Select */
13440 -#define AT91_PC11_NCS5_CFCE1 (1 << 11) /* A: SMC Chip Select 5 / Compact Flash Chip Enable 1 */
13441 -#define AT91_PC12_NCS6_CFCE2 (1 << 12) /* A: SMC Chip Select 6 / Compact Flash Chip Enable 2 */
13442 -#define AT91_PC13_NCS7 (1 << 13) /* A: Chip Select 7 */
13444 -#define AT91_PD0_ETX0 (1 << 0) /* A: Ethernet Transmit Data 0 */
13445 -#define AT91_PD1_ETX1 (1 << 1) /* A: Ethernet Transmit Data 1 */
13446 -#define AT91_PD2_ETX2 (1 << 2) /* A: Ethernet Transmit Data 2 */
13447 -#define AT91_PD3_ETX3 (1 << 3) /* A: Ethernet Transmit Data 3 */
13448 -#define AT91_PD4_ETXEN (1 << 4) /* A: Ethernet Transmit Enable */
13449 -#define AT91_PD5_ETXER (1 << 5) /* A: Ethernet Transmit Coding Error */
13450 -#define AT91_PD6_DTXD (1 << 6) /* A: DBGU Transmit Data */
13451 -#define AT91_PD7_PCK0 (1 << 7) /* A: PMC Programmable Clock Output 0 */
13452 -#define AT91_PD7_TSYNC (1 << 7) /* B: ETM Trace Synchronization Signal */
13453 -#define AT91_PD8_PCK1 (1 << 8) /* A: PMC Programmable Clock Output 1 */
13454 -#define AT91_PD8_TCLK (1 << 8) /* B: ETM Trace Clock */
13455 -#define AT91_PD9_PCK2 (1 << 9) /* A: PMC Programmable Clock Output 2 */
13456 -#define AT91_PD9_TPS0 (1 << 9) /* B: ETM Trace ARM Pipeline Status 0 */
13457 -#define AT91_PD10_PCK3 (1 << 10) /* A: PMC Programmable Clock Output 3 */
13458 -#define AT91_PD10_TPS1 (1 << 10) /* B: ETM Trace ARM Pipeline Status 1 */
13459 -#define AT91_PD11_TPS2 (1 << 11) /* B: ETM Trace ARM Pipeline Status 2 */
13460 -#define AT91_PD12_TPK0 (1 << 12) /* B: ETM Trace Packet Port 0 */
13461 -#define AT91_PD13_TPK1 (1 << 13) /* B: ETM Trace Packet Port 1 */
13462 -#define AT91_PD14_TPK2 (1 << 14) /* B: ETM Trace Packet Port 2 */
13463 -#define AT91_PD15_TD0 (1 << 15) /* A: SSC Transmit Data 0 */
13464 -#define AT91_PD15_TPK3 (1 << 15) /* B: ETM Trace Packet Port 3 */
13465 -#define AT91_PD16_TD1 (1 << 16) /* A: SSC Transmit Data 1 */
13466 -#define AT91_PD16_TPK4 (1 << 16) /* B: ETM Trace Packet Port 4 */
13467 -#define AT91_PD17_TD2 (1 << 17) /* A: SSC Transmit Data 2 */
13468 -#define AT91_PD17_TPK5 (1 << 17) /* B: ETM Trace Packet Port 5 */
13469 -#define AT91_PD18_NPCS1 (1 << 18) /* A: SPI Peripheral Chip Select 1 */
13470 -#define AT91_PD18_TPK6 (1 << 18) /* B: ETM Trace Packet Port 6 */
13471 -#define AT91_PD19_NPCS2 (1 << 19) /* A: SPI Peripheral Chip Select 2 */
13472 -#define AT91_PD19_TPK7 (1 << 19) /* B: ETM Trace Packet Port 7 */
13473 -#define AT91_PD20_NPCS3 (1 << 20) /* A: SPI Peripheral Chip Select 3 */
13474 -#define AT91_PD20_TPK8 (1 << 20) /* B: ETM Trace Packet Port 8 */
13475 -#define AT91_PD21_RTS0 (1 << 21) /* A: USART Ready To Send 0 */
13476 -#define AT91_PD21_TPK9 (1 << 21) /* B: ETM Trace Packet Port 9 */
13477 -#define AT91_PD22_RTS1 (1 << 22) /* A: USART Ready To Send 1 */
13478 -#define AT91_PD22_TPK10 (1 << 22) /* B: ETM Trace Packet Port 10 */
13479 -#define AT91_PD23_RTS2 (1 << 23) /* A: USART Ready To Send 2 */
13480 -#define AT91_PD23_TPK11 (1 << 23) /* B: ETM Trace Packet Port 11 */
13481 -#define AT91_PD24_RTS3 (1 << 24) /* A: USART Ready To Send 3 */
13482 -#define AT91_PD24_TPK12 (1 << 24) /* B: ETM Trace Packet Port 12 */
13483 -#define AT91_PD25_DTR1 (1 << 25) /* A: USART Data Terminal Ready 1 */
13484 -#define AT91_PD25_TPK13 (1 << 25) /* B: ETM Trace Packet Port 13 */
13485 -#define AT91_PD26_TPK14 (1 << 26) /* B: ETM Trace Packet Port 14 */
13486 -#define AT91_PD27_TPK15 (1 << 27) /* B: ETM Trace Packet Port 15 */
13487 -#endif
13489 #endif
13490 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91sam9260.h linux-2.6-stable/include/asm-arm/arch-at91/at91sam9260.h
13491 --- linux-2.6.21/include/asm-arm/arch-at91/at91sam9260.h Thu Apr 26 05:08:32 2007
13492 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91sam9260.h Tue May 8 12:56:33 2007
13493 @@ -117,13 +117,4 @@
13494 #define AT91SAM9XE_SRAM_BASE 0x00300000 /* Internal SRAM base address */
13497 -#if 0
13499 - * PIO pin definitions (peripheral A/B multiplexing).
13500 - */
13502 -// TODO: Add
13504 -#endif
13506 #endif
13507 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91sam9260_matrix.h linux-2.6-stable/include/asm-arm/arch-at91/at91sam9260_matrix.h
13508 --- linux-2.6.21/include/asm-arm/arch-at91/at91sam9260_matrix.h Thu Apr 26 05:08:32 2007
13509 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91sam9260_matrix.h Fri May 11 16:20:33 2007
13510 @@ -67,7 +67,7 @@
13511 #define AT91_MATRIX_CS4A (1 << 4) /* Chip Select 4 Assignment */
13512 #define AT91_MATRIX_CS4A_SMC (0 << 4)
13513 #define AT91_MATRIX_CS4A_SMC_CF1 (1 << 4)
13514 -#define AT91_MATRIX_CS5A (1 << 5 ) /* Chip Select 5 Assignment */
13515 +#define AT91_MATRIX_CS5A (1 << 5) /* Chip Select 5 Assignment */
13516 #define AT91_MATRIX_CS5A_SMC (0 << 5)
13517 #define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5)
13518 #define AT91_MATRIX_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */
13519 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91sam9261.h linux-2.6-stable/include/asm-arm/arch-at91/at91sam9261.h
13520 --- linux-2.6.21/include/asm-arm/arch-at91/at91sam9261.h Thu Apr 26 05:08:32 2007
13521 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91sam9261.h Tue May 8 12:56:33 2007
13522 @@ -98,195 +98,4 @@
13523 #define AT91SAM9261_LCDC_BASE 0x00600000 /* LDC controller */
13526 -#if 0
13528 - * PIO pin definitions (peripheral A/B multiplexing).
13529 - */
13530 -#define AT91_PA0_SPI0_MISO (1 << 0) /* A: SPI0 Master In Slave */
13531 -#define AT91_PA0_MCDA0 (1 << 0) /* B: Multimedia Card A Data 0 */
13532 -#define AT91_PA1_SPI0_MOSI (1 << 1) /* A: SPI0 Master Out Slave */
13533 -#define AT91_PA1_MCCDA (1 << 1) /* B: Multimedia Card A Command */
13534 -#define AT91_PA2_SPI0_SPCK (1 << 2) /* A: SPI0 Serial Clock */
13535 -#define AT91_PA2_MCCK (1 << 2) /* B: Multimedia Card Clock */
13536 -#define AT91_PA3_SPI0_NPCS0 (1 << 3) /* A: SPI0 Peripheral Chip Select 0 */
13537 -#define AT91_PA4_SPI0_NPCS1 (1 << 4) /* A: SPI0 Peripheral Chip Select 1 */
13538 -#define AT91_PA4_MCDA1 (1 << 4) /* B: Multimedia Card A Data 1 */
13539 -#define AT91_PA5_SPI0_NPCS2 (1 << 5) /* A: SPI0 Peripheral Chip Select 2 */
13540 -#define AT91_PA5_MCDA2 (1 << 5) /* B: Multimedia Card A Data 2 */
13541 -#define AT91_PA6_SPI0_NPCS3 (1 << 6) /* A: SPI0 Peripheral Chip Select 3 */
13542 -#define AT91_PA6_MCDA3 (1 << 6) /* B: Multimedia Card A Data 3 */
13543 -#define AT91_PA7_TWD (1 << 7) /* A: TWI Two-wire Serial Data */
13544 -#define AT91_PA7_PCK0 (1 << 7) /* B: PMC Programmable clock Output 0 */
13545 -#define AT91_PA8_TWCK (1 << 8) /* A: TWI Two-wire Serial Clock */
13546 -#define AT91_PA8_PCK1 (1 << 8) /* B: PMC Programmable clock Output 1 */
13547 -#define AT91_PA9_DRXD (1 << 9) /* A: DBGU Debug Receive Data */
13548 -#define AT91_PA9_PCK2 (1 << 9) /* B: PMC Programmable clock Output 2 */
13549 -#define AT91_PA10_DTXD (1 << 10) /* A: DBGU Debug Transmit Data */
13550 -#define AT91_PA10_PCK3 (1 << 10) /* B: PMC Programmable clock Output 3 */
13551 -#define AT91_PA11_TSYNC (1 << 11) /* A: Trace Synchronization Signal */
13552 -#define AT91_PA11_SCK1 (1 << 11) /* B: USART1 Serial Clock */
13553 -#define AT91_PA12_TCLK (1 << 12) /* A: Trace Clock */
13554 -#define AT91_PA12_RTS1 (1 << 12) /* B: USART1 Ready To Send */
13555 -#define AT91_PA13_TPS0 (1 << 13) /* A: Trace ARM Pipeline Status 0 */
13556 -#define AT91_PA13_CTS1 (1 << 13) /* B: USART1 Clear To Send */
13557 -#define AT91_PA14_TPS1 (1 << 14) /* A: Trace ARM Pipeline Status 1 */
13558 -#define AT91_PA14_SCK2 (1 << 14) /* B: USART2 Serial Clock */
13559 -#define AT91_PA15_TPS2 (1 << 15) /* A: Trace ARM Pipeline Status 2 */
13560 -#define AT91_PA15_RTS2 (1 << 15) /* B: USART2 Ready To Send */
13561 -#define AT91_PA16_TPK0 (1 << 16) /* A: Trace Packet Port 0 */
13562 -#define AT91_PA16_CTS2 (1 << 16) /* B: USART2 Clear To Send */
13563 -#define AT91_PA17_TPK1 (1 << 17) /* A: Trace Packet Port 1 */
13564 -#define AT91_PA17_TF1 (1 << 17) /* B: SSC1 Transmit Frame Sync */
13565 -#define AT91_PA18_TPK2 (1 << 18) /* A: Trace Packet Port 2 */
13566 -#define AT91_PA18_TK1 (1 << 18) /* B: SSC1 Transmit Clock */
13567 -#define AT91_PA19_TPK3 (1 << 19) /* A: Trace Packet Port 3 */
13568 -#define AT91_PA19_TD1 (1 << 19) /* B: SSC1 Transmit Data */
13569 -#define AT91_PA20_TPK4 (1 << 20) /* A: Trace Packet Port 4 */
13570 -#define AT91_PA20_RD1 (1 << 20) /* B: SSC1 Receive Data */
13571 -#define AT91_PA21_TPK5 (1 << 21) /* A: Trace Packet Port 5 */
13572 -#define AT91_PA21_RK1 (1 << 21) /* B: SSC1 Receive Clock */
13573 -#define AT91_PA22_TPK6 (1 << 22) /* A: Trace Packet Port 6 */
13574 -#define AT91_PA22_RF1 (1 << 22) /* B: SSC1 Receive Frame Sync */
13575 -#define AT91_PA23_TPK7 (1 << 23) /* A: Trace Packet Port 7 */
13576 -#define AT91_PA23_RTS0 (1 << 23) /* B: USART0 Ready To Send */
13577 -#define AT91_PA24_TPK8 (1 << 24) /* A: Trace Packet Port 8 */
13578 -#define AT91_PA24_SPI1_NPCS1 (1 << 24) /* B: SPI1 Peripheral Chip Select 1 */
13579 -#define AT91_PA25_TPK9 (1 << 25) /* A: Trace Packet Port 9 */
13580 -#define AT91_PA25_SPI1_NPCS2 (1 << 25) /* B: SPI1 Peripheral Chip Select 2 */
13581 -#define AT91_PA26_TPK10 (1 << 26) /* A: Trace Packet Port 10 */
13582 -#define AT91_PA26_SPI1_NPCS3 (1 << 26) /* B: SPI1 Peripheral Chip Select 3 */
13583 -#define AT91_PA27_TPK11 (1 << 27) /* A: Trace Packet Port 11 */
13584 -#define AT91_PA27_SPI0_NPCS1 (1 << 27) /* B: SPI0 Peripheral Chip Select 1 */
13585 -#define AT91_PA28_TPK12 (1 << 28) /* A: Trace Packet Port 12 */
13586 -#define AT91_PA28_SPI0_NPCS2 (1 << 28) /* B: SPI0 Peripheral Chip Select 2 */
13587 -#define AT91_PA29_TPK13 (1 << 29) /* A: Trace Packet Port 13 */
13588 -#define AT91_PA29_SPI0_NPCS3 (1 << 29) /* B: SPI0 Peripheral Chip Select 3 */
13589 -#define AT91_PA30_TPK14 (1 << 30) /* A: Trace Packet Port 14 */
13590 -#define AT91_PA30_A23 (1 << 30) /* B: Address Bus bit 23 */
13591 -#define AT91_PA31_TPK15 (1 << 31) /* A: Trace Packet Port 15 */
13592 -#define AT91_PA31_A24 (1 << 31) /* B: Address Bus bit 24 */
13594 -#define AT91_PB0_LCDVSYNC (1 << 0) /* A: LCD Vertical Synchronization */
13595 -#define AT91_PB1_LCDHSYNC (1 << 1) /* A: LCD Horizontal Synchronization */
13596 -#define AT91_PB2_LCDDOTCK (1 << 2) /* A: LCD Dot Clock */
13597 -#define AT91_PB2_PCK0 (1 << 2) /* B: PMC Programmable clock Output 0 */
13598 -#define AT91_PB3_LCDDEN (1 << 3) /* A: LCD Data Enable */
13599 -#define AT91_PB4_LCDCC (1 << 4) /* A: LCD Contrast Control */
13600 -#define AT91_PB4_LCDD2 (1 << 4) /* B: LCD Data Bus Bit 2 */
13601 -#define AT91_PB5_LCDD0 (1 << 5) /* A: LCD Data Bus Bit 0 */
13602 -#define AT91_PB5_LCDD3 (1 << 5) /* B: LCD Data Bus Bit 3 */
13603 -#define AT91_PB6_LCDD1 (1 << 6) /* A: LCD Data Bus Bit 1 */
13604 -#define AT91_PB6_LCDD4 (1 << 6) /* B: LCD Data Bus Bit 4 */
13605 -#define AT91_PB7_LCDD2 (1 << 7) /* A: LCD Data Bus Bit 2 */
13606 -#define AT91_PB7_LCDD5 (1 << 7) /* B: LCD Data Bus Bit 5 */
13607 -#define AT91_PB8_LCDD3 (1 << 8) /* A: LCD Data Bus Bit 3 */
13608 -#define AT91_PB8_LCDD6 (1 << 8) /* B: LCD Data Bus Bit 6 */
13609 -#define AT91_PB9_LCDD4 (1 << 9) /* A: LCD Data Bus Bit 4 */
13610 -#define AT91_PB9_LCDD7 (1 << 9) /* B: LCD Data Bus Bit 7 */
13611 -#define AT91_PB10_LCDD5 (1 << 10) /* A: LCD Data Bus Bit 5 */
13612 -#define AT91_PB10_LCDD10 (1 << 10) /* B: LCD Data Bus Bit 10 */
13613 -#define AT91_PB11_LCDD6 (1 << 11) /* A: LCD Data Bus Bit 6 */
13614 -#define AT91_PB11_LCDD11 (1 << 11) /* B: LCD Data Bus Bit 11 */
13615 -#define AT91_PB12_LCDD7 (1 << 12) /* A: LCD Data Bus Bit 7 */
13616 -#define AT91_PB12_LCDD12 (1 << 12) /* B: LCD Data Bus Bit 12 */
13617 -#define AT91_PB13_LCDD8 (1 << 13) /* A: LCD Data Bus Bit 8 */
13618 -#define AT91_PB13_LCDD13 (1 << 13) /* B: LCD Data Bus Bit 13 */
13619 -#define AT91_PB14_LCDD9 (1 << 14) /* A: LCD Data Bus Bit 9 */
13620 -#define AT91_PB14_LCDD14 (1 << 14) /* B: LCD Data Bus Bit 14 */
13621 -#define AT91_PB15_LCDD10 (1 << 15) /* A: LCD Data Bus Bit 10 */
13622 -#define AT91_PB15_LCDD15 (1 << 15) /* B: LCD Data Bus Bit 15 */
13623 -#define AT91_PB16_LCDD11 (1 << 16) /* A: LCD Data Bus Bit 11 */
13624 -#define AT91_PB16_LCDD19 (1 << 16) /* B: LCD Data Bus Bit 19 */
13625 -#define AT91_PB17_LCDD12 (1 << 17) /* A: LCD Data Bus Bit 12 */
13626 -#define AT91_PB17_LCDD20 (1 << 17) /* B: LCD Data Bus Bit 20 */
13627 -#define AT91_PB18_LCDD13 (1 << 18) /* A: LCD Data Bus Bit 13 */
13628 -#define AT91_PB18_LCDD21 (1 << 18) /* B: LCD Data Bus Bit 21 */
13629 -#define AT91_PB19_LCDD14 (1 << 19) /* A: LCD Data Bus Bit 14 */
13630 -#define AT91_PB19_LCDD22 (1 << 19) /* B: LCD Data Bus Bit 22 */
13631 -#define AT91_PB20_LCDD15 (1 << 20) /* A: LCD Data Bus Bit 15 */
13632 -#define AT91_PB20_LCDD23 (1 << 20) /* B: LCD Data Bus Bit 23 */
13633 -#define AT91_PB21_TF0 (1 << 21) /* A: SSC0 Transmit Frame Sync */
13634 -#define AT91_PB21_LCDD16 (1 << 21) /* B: LCD Data Bus Bit 16 */
13635 -#define AT91_PB22_TK0 (1 << 22) /* A: SSC0 Transmit Clock */
13636 -#define AT91_PB22_LCDD17 (1 << 22) /* B: LCD Data Bus Bit 17 */
13637 -#define AT91_PB23_TD0 (1 << 23) /* A: SSC0 Transmit Data */
13638 -#define AT91_PB23_LCDD18 (1 << 23) /* B: LCD Data Bus Bit 18 */
13639 -#define AT91_PB24_RD0 (1 << 24) /* A: SSC0 Receive Data */
13640 -#define AT91_PB24_LCDD19 (1 << 24) /* B: LCD Data Bus Bit 19 */
13641 -#define AT91_PB25_RK0 (1 << 25) /* A: SSC0 Receive Clock */
13642 -#define AT91_PB25_LCDD20 (1 << 25) /* B: LCD Data Bus Bit 20 */
13643 -#define AT91_PB26_RF0 (1 << 26) /* A: SSC0 Receive Frame Sync */
13644 -#define AT91_PB26_LCDD21 (1 << 26) /* B: LCD Data Bus Bit 21 */
13645 -#define AT91_PB27_SPI1_NPCS1 (1 << 27) /* A: SPI1 Peripheral Chip Select 1 */
13646 -#define AT91_PB27_LCDD22 (1 << 27) /* B: LCD Data Bus Bit 22 */
13647 -#define AT91_PB28_SPI1_NPCS0 (1 << 28) /* A: SPI1 Peripheral Chip Select 0 */
13648 -#define AT91_PB28_LCDD23 (1 << 28) /* B: LCD Data Bus Bit 23 */
13649 -#define AT91_PB29_SPI1_SPCK (1 << 29) /* A: SPI1 Serial Clock */
13650 -#define AT91_PB29_IRQ2 (1 << 29) /* B: Interrupt input 2 */
13651 -#define AT91_PB30_SPI1_MISO (1 << 30) /* A: SPI1 Master In Slave */
13652 -#define AT91_PB30_IRQ1 (1 << 30) /* B: Interrupt input 1 */
13653 -#define AT91_PB31_SPI1_MOSI (1 << 31) /* A: SPI1 Master Out Slave */
13654 -#define AT91_PB31_PCK2 (1 << 31) /* B: PMC Programmable clock Output 2 */
13656 -#define AT91_PC0_SMOE (1 << 0) /* A: SmartMedia Output Enable */
13657 -#define AT91_PC0_NCS6 (1 << 0) /* B: Chip Select 6 */
13658 -#define AT91_PC1_SMWE (1 << 1) /* A: SmartMedia Write Enable */
13659 -#define AT91_PC1_NCS7 (1 << 1) /* B: Chip Select 7 */
13660 -#define AT91_PC2_NWAIT (1 << 2) /* A: NWAIT */
13661 -#define AT91_PC2_IRQ0 (1 << 2) /* B: Interrupt input 0 */
13662 -#define AT91_PC3_A25_CFRNW (1 << 3) /* A: Address Bus[25] / Compact Flash Read Not Write */
13663 -#define AT91_PC4_NCS4_CFCS0 (1 << 4) /* A: Chip Select 4 / CompactFlash Chip Select 0 */
13664 -#define AT91_PC5_NCS5_CFCS1 (1 << 5) /* A: Chip Select 5 / CompactFlash Chip Select 1 */
13665 -#define AT91_PC6_CFCE1 (1 << 6) /* A: CompactFlash Chip Enable 1 */
13666 -#define AT91_PC7_CFCE2 (1 << 7) /* A: CompactFlash Chip Enable 2 */
13667 -#define AT91_PC8_TXD0 (1 << 8) /* A: USART0 Transmit Data */
13668 -#define AT91_PC8_PCK2 (1 << 8) /* B: PMC Programmable clock Output 2 */
13669 -#define AT91_PC9_RXD0 (1 << 9) /* A: USART0 Receive Data */
13670 -#define AT91_PC9_PCK3 (1 << 9) /* B: PMC Programmable clock Output 3 */
13671 -#define AT91_PC10_RTS0 (1 << 10) /* A: USART0 Ready To Send */
13672 -#define AT91_PC10_SCK0 (1 << 10) /* B: USART0 Serial Clock */
13673 -#define AT91_PC11_CTS0 (1 << 11) /* A: USART0 Clear To Send */
13674 -#define AT91_PC11_FIQ (1 << 11) /* B: AIC Fast Interrupt Input */
13675 -#define AT91_PC12_TXD1 (1 << 12) /* A: USART1 Transmit Data */
13676 -#define AT91_PC12_NCS6 (1 << 12) /* B: Chip Select 6 */
13677 -#define AT91_PC13_RXD1 (1 << 13) /* A: USART1 Receive Data */
13678 -#define AT91_PC13_NCS7 (1 << 13) /* B: Chip Select 7 */
13679 -#define AT91_PC14_TXD2 (1 << 14) /* A: USART2 Transmit Data */
13680 -#define AT91_PC14_SPI1_NPCS2 (1 << 14) /* B: SPI1 Peripheral Chip Select 2 */
13681 -#define AT91_PC15_RXD2 (1 << 15) /* A: USART2 Receive Data */
13682 -#define AT91_PC15_SPI1_NPCS3 (1 << 15) /* B: SPI1 Peripheral Chip Select 3 */
13683 -#define AT91_PC16_D16 (1 << 16) /* A: Data Bus [16] */
13684 -#define AT91_PC16_TCLK0 (1 << 16) /* B: Timer Counter 0 external clock input */
13685 -#define AT91_PC17_D17 (1 << 17) /* A: Data Bus [17] */
13686 -#define AT91_PC17_TCLK1 (1 << 17) /* B: Timer Counter 1 external clock input */
13687 -#define AT91_PC18_D18 (1 << 18) /* A: Data Bus [18] */
13688 -#define AT91_PC18_TCLK2 (1 << 18) /* B: Timer Counter 2 external clock input */
13689 -#define AT91_PC19_D19 (1 << 19) /* A: Data Bus [19] */
13690 -#define AT91_PC19_TIOA0 (1 << 19) /* B: Timer Counter 0 Multipurpose Timer I/O Pin A */
13691 -#define AT91_PC20_D20 (1 << 20) /* A: Data Bus [20] */
13692 -#define AT91_PC20_TIOB0 (1 << 20) /* B: Timer Counter 0 Multipurpose Timer I/O Pin B */
13693 -#define AT91_PC21_D21 (1 << 21) /* A: Data Bus [21] */
13694 -#define AT91_PC21_TIOA1 (1 << 21) /* B: Timer Counter 1 Multipurpose Timer I/O Pin A */
13695 -#define AT91_PC22_D22 (1 << 22) /* A: Data Bus [22] */
13696 -#define AT91_PC22_TIOB1 (1 << 22) /* B: Timer Counter 1 Multipurpose Timer I/O Pin B */
13697 -#define AT91_PC23_D23 (1 << 23) /* A: Data Bus [23] */
13698 -#define AT91_PC23_TIOA2 (1 << 23) /* B: Timer Counter 2 Multipurpose Timer I/O Pin A */
13699 -#define AT91_PC24_D24 (1 << 24) /* A: Data Bus [24] */
13700 -#define AT91_PC24_TIOB2 (1 << 24) /* B: Timer Counter 2 Multipurpose Timer I/O Pin B */
13701 -#define AT91_PC25_D25 (1 << 25) /* A: Data Bus [25] */
13702 -#define AT91_PC25_TF2 (1 << 25) /* B: SSC2 Transmit Frame Sync */
13703 -#define AT91_PC26_D26 (1 << 26) /* A: Data Bus [26] */
13704 -#define AT91_PC26_TK2 (1 << 26) /* B: SSC2 Transmit Clock */
13705 -#define AT91_PC27_D27 (1 << 27) /* A: Data Bus [27] */
13706 -#define AT91_PC27_TD2 (1 << 27) /* B: SSC2 Transmit Data */
13707 -#define AT91_PC28_D28 (1 << 28) /* A: Data Bus [28] */
13708 -#define AT91_PC28_RD2 (1 << 28) /* B: SSC2 Receive Data */
13709 -#define AT91_PC29_D29 (1 << 29) /* A: Data Bus [29] */
13710 -#define AT91_PC29_RK2 (1 << 29) /* B: SSC2 Receive Clock */
13711 -#define AT91_PC30_D30 (1 << 30) /* A: Data Bus [30] */
13712 -#define AT91_PC30_RF2 (1 << 30) /* B: SSC2 Receive Frame Sync */
13713 -#define AT91_PC31_D31 (1 << 31) /* A: Data Bus [31] */
13714 -#define AT91_PC31_PCK1 (1 << 31) /* B: PMC Programmable clock Output 1 */
13715 -#endif
13717 #endif
13718 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91sam9263.h linux-2.6-stable/include/asm-arm/arch-at91/at91sam9263.h
13719 --- linux-2.6.21/include/asm-arm/arch-at91/at91sam9263.h Thu Apr 26 05:08:32 2007
13720 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91sam9263.h Tue May 8 12:56:33 2007
13721 @@ -119,13 +119,5 @@
13722 #define AT91SAM9263_DMAC_BASE 0x00800000 /* DMA Controller */
13723 #define AT91SAM9263_UHP_BASE 0x00a00000 /* USB Host controller */
13725 -#if 0
13727 - * PIO pin definitions (peripheral A/B multiplexing).
13728 - */
13730 -// TODO: Add
13732 -#endif
13734 #endif
13735 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91sam9rl.h linux-2.6-stable/include/asm-arm/arch-at91/at91sam9rl.h
13736 --- linux-2.6.21/include/asm-arm/arch-at91/at91sam9rl.h Thu Jan 1 02:00:00 1970
13737 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91sam9rl.h Fri May 11 14:53:48 2007
13738 @@ -0,0 +1,110 @@
13740 + * include/asm-arm/arch-at91/at91sam9260.h
13742 + * Copyright (C) 2007 Atmel Corporation
13744 + * Common definitions.
13745 + * Based on AT91SAM9RL datasheet revision A. (Preliminary)
13747 + * This file is subject to the terms and conditions of the GNU General Public
13748 + * License. See the file COPYING in the main directory of this archive for
13749 + * more details.
13750 + */
13752 +#ifndef AT91SAM9RL_H
13753 +#define AT91SAM9RL_H
13756 + * Peripheral identifiers/interrupts.
13757 + */
13758 +#define AT91_ID_FIQ 0 /* Advanced Interrupt Controller (FIQ) */
13759 +#define AT91_ID_SYS 1 /* System Controller */
13760 +#define AT91SAM9RL_ID_PIOA 2 /* Parallel IO Controller A */
13761 +#define AT91SAM9RL_ID_PIOB 3 /* Parallel IO Controller B */
13762 +#define AT91SAM9RL_ID_PIOC 4 /* Parallel IO Controller C */
13763 +#define AT91SAM9RL_ID_PIOD 5 /* Parallel IO Controller D */
13764 +#define AT91SAM9RL_ID_US0 6 /* USART 0 */
13765 +#define AT91SAM9RL_ID_US1 7 /* USART 1 */
13766 +#define AT91SAM9RL_ID_US2 8 /* USART 2 */
13767 +#define AT91SAM9RL_ID_US3 9 /* USART 3 */
13768 +#define AT91SAM9RL_ID_MCI 10 /* Multimedia Card Interface */
13769 +#define AT91SAM9RL_ID_TWI0 11 /* TWI 0 */
13770 +#define AT91SAM9RL_ID_TWI1 12 /* TWI 1 */
13771 +#define AT91SAM9RL_ID_SPI 13 /* Serial Peripheral Interface */
13772 +#define AT91SAM9RL_ID_SSC0 14 /* Serial Synchronous Controller 0 */
13773 +#define AT91SAM9RL_ID_SSC1 15 /* Serial Synchronous Controller 1 */
13774 +#define AT91SAM9RL_ID_TC0 16 /* Timer Counter 0 */
13775 +#define AT91SAM9RL_ID_TC1 17 /* Timer Counter 1 */
13776 +#define AT91SAM9RL_ID_TC2 18 /* Timer Counter 2 */
13777 +#define AT91SAM9RL_ID_PWMC 19 /* Pulse Width Modulation Controller */
13778 +#define AT91SAM9RL_ID_TSC 20 /* Touch Screen Controller */
13779 +#define AT91SAM9RL_ID_DMA 21 /* DMA Controller */
13780 +#define AT91SAM9RL_ID_UDPHS 22 /* USB Device HS */
13781 +#define AT91SAM9RL_ID_LCDC 23 /* LCD Controller */
13782 +#define AT91SAM9RL_ID_AC97C 24 /* AC97 Controller */
13783 +#define AT91SAM9RL_ID_IRQ0 31 /* Advanced Interrupt Controller (IRQ0) */
13787 + * User Peripheral physical base addresses.
13788 + */
13789 +#define AT91SAM9RL_BASE_TCB0 0xfffa0000
13790 +#define AT91SAM9RL_BASE_TC0 0xfffa0000
13791 +#define AT91SAM9RL_BASE_TC1 0xfffa0040
13792 +#define AT91SAM9RL_BASE_TC2 0xfffa0080
13793 +#define AT91SAM9RL_BASE_MCI 0xfffa4000
13794 +#define AT91SAM9RL_BASE_TWI0 0xfffa8000
13795 +#define AT91SAM9RL_BASE_TWI1 0xfffac000
13796 +#define AT91SAM9RL_BASE_US0 0xfffb0000
13797 +#define AT91SAM9RL_BASE_US1 0xfffb4000
13798 +#define AT91SAM9RL_BASE_US2 0xfffb8000
13799 +#define AT91SAM9RL_BASE_US3 0xfffbc000
13800 +#define AT91SAM9RL_BASE_SSC0 0xfffc0000
13801 +#define AT91SAM9RL_BASE_SSC1 0xfffc4000
13802 +#define AT91SAM9RL_BASE_PWMC 0xfffc8000
13803 +#define AT91SAM9RL_BASE_SPI 0xfffcc000
13804 +#define AT91SAM9RL_BASE_TSC 0xfffd0000
13805 +#define AT91SAM9RL_BASE_UDPHS 0xfffd4000
13806 +#define AT91SAM9RL_BASE_AC97C 0xfffd8000
13807 +#define AT91_BASE_SYS 0xffffc000
13811 + * System Peripherals (offset from AT91_BASE_SYS)
13812 + */
13813 +#define AT91_DMA (0xffffe600 - AT91_BASE_SYS)
13814 +#define AT91_ECC (0xffffe800 - AT91_BASE_SYS)
13815 +#define AT91_SDRAMC (0xffffea00 - AT91_BASE_SYS)
13816 +#define AT91_SMC (0xffffec00 - AT91_BASE_SYS)
13817 +#define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS)
13818 +#define AT91_CCFG (0xffffef10 - AT91_BASE_SYS)
13819 +#define AT91_AIC (0xfffff000 - AT91_BASE_SYS)
13820 +#define AT91_DBGU (0xfffff200 - AT91_BASE_SYS)
13821 +#define AT91_PIOA (0xfffff400 - AT91_BASE_SYS)
13822 +#define AT91_PIOB (0xfffff600 - AT91_BASE_SYS)
13823 +#define AT91_PIOC (0xfffff800 - AT91_BASE_SYS)
13824 +#define AT91_PIOD (0xfffffa00 - AT91_BASE_SYS)
13825 +#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
13826 +#define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
13827 +#define AT91_SHDWC (0xfffffd10 - AT91_BASE_SYS)
13828 +#define AT91_RTT (0xfffffd20 - AT91_BASE_SYS)
13829 +#define AT91_PIT (0xfffffd30 - AT91_BASE_SYS)
13830 +#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
13831 +#define AT91_SCKCR (0xfffffd50 - AT91_BASE_SYS)
13832 +#define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
13833 +#define AT91_RTC (0xfffffe00 - AT91_BASE_SYS)
13837 + * Internal Memory.
13838 + */
13839 +#define AT91SAM9RL_SRAM_BASE 0x00300000 /* Internal SRAM base address */
13840 +#define AT91SAM9RL_SRAM_SIZE SZ_16K /* Internal SRAM size (16Kb) */
13842 +#define AT91SAM9RL_ROM_BASE 0x00400000 /* Internal ROM base address */
13843 +#define AT91SAM9RL_ROM_SIZE (2 * SZ_16K) /* Internal ROM size (32Kb) */
13845 +#define AT91SAM9RL_LCDC_BASE 0x00500000 /* LCD Controller */
13846 +#define AT91SAM9RL_UDPHS_BASE 0x00600000 /* USB Device HS controller */
13848 +#endif
13849 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/at91sam9rl_matrix.h linux-2.6-stable/include/asm-arm/arch-at91/at91sam9rl_matrix.h
13850 --- linux-2.6.21/include/asm-arm/arch-at91/at91sam9rl_matrix.h Thu Jan 1 02:00:00 1970
13851 +++ linux-2.6-stable/include/asm-arm/arch-at91/at91sam9rl_matrix.h Fri May 11 16:18:45 2007
13852 @@ -0,0 +1,96 @@
13854 + * include/asm-arm/arch-at91/at91sam9rl_matrix.h
13856 + * Copyright (C) 2007 Atmel Corporation
13858 + * Memory Controllers (MATRIX, EBI) - System peripherals registers.
13859 + * Based on AT91SAM9RL datasheet revision A. (Preliminary)
13861 + * This file is subject to the terms and conditions of the GNU General Public
13862 + * License. See the file COPYING in the main directory of this archive for
13863 + * more details.
13864 + */
13866 +#ifndef AT91SAM9RL_MATRIX_H
13867 +#define AT91SAM9RL_MATRIX_H
13869 +#define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00) /* Master Configuration Register 0 */
13870 +#define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04) /* Master Configuration Register 1 */
13871 +#define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08) /* Master Configuration Register 2 */
13872 +#define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C) /* Master Configuration Register 3 */
13873 +#define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10) /* Master Configuration Register 4 */
13874 +#define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14) /* Master Configuration Register 5 */
13875 +#define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */
13876 +#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
13877 +#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
13878 +#define AT91_MATRIX_ULBT_FOUR (2 << 0)
13879 +#define AT91_MATRIX_ULBT_EIGHT (3 << 0)
13880 +#define AT91_MATRIX_ULBT_SIXTEEN (4 << 0)
13882 +#define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40) /* Slave Configuration Register 0 */
13883 +#define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44) /* Slave Configuration Register 1 */
13884 +#define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48) /* Slave Configuration Register 2 */
13885 +#define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C) /* Slave Configuration Register 3 */
13886 +#define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50) /* Slave Configuration Register 4 */
13887 +#define AT91_MATRIX_SCFG5 (AT91_MATRIX + 0x54) /* Slave Configuration Register 5 */
13888 +#define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */
13889 +#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */
13890 +#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
13891 +#define AT91_MATRIX_DEFMSTR_TYPE_LAST (1 << 16)
13892 +#define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16)
13893 +#define AT91_MATRIX_FIXED_DEFMSTR (7 << 18) /* Fixed Index of Default Master */
13894 +#define AT91_MATRIX_ARBT (3 << 24) /* Arbitration Type */
13895 +#define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24)
13896 +#define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
13898 +#define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80) /* Priority Register A for Slave 0 */
13899 +#define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88) /* Priority Register A for Slave 1 */
13900 +#define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90) /* Priority Register A for Slave 2 */
13901 +#define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98) /* Priority Register A for Slave 3 */
13902 +#define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0) /* Priority Register A for Slave 4 */
13903 +#define AT91_MATRIX_PRAS5 (AT91_MATRIX + 0xA8) /* Priority Register A for Slave 5 */
13904 +#define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */
13905 +#define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */
13906 +#define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */
13907 +#define AT91_MATRIX_M3PR (3 << 12) /* Master 3 Priority */
13908 +#define AT91_MATRIX_M4PR (3 << 16) /* Master 4 Priority */
13909 +#define AT91_MATRIX_M5PR (3 << 20) /* Master 5 Priority */
13911 +#define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100) /* Master Remap Control Register */
13912 +#define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
13913 +#define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
13914 +#define AT91_MATRIX_RCB2 (1 << 2)
13915 +#define AT91_MATRIX_RCB3 (1 << 3)
13916 +#define AT91_MATRIX_RCB4 (1 << 4)
13917 +#define AT91_MATRIX_RCB5 (1 << 5)
13919 +#define AT91_MATRIX_TCMR (AT91_MATRIX + 0x114) /* TCM Configuration Register */
13920 +#define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */
13921 +#define AT91_MATRIX_ITCM_0 (0 << 0)
13922 +#define AT91_MATRIX_ITCM_16 (5 << 0)
13923 +#define AT91_MATRIX_ITCM_32 (6 << 0)
13924 +#define AT91_MATRIX_DTCM_SIZE (0xf << 4) /* Size of DTCM enabled memory block */
13925 +#define AT91_MATRIX_DTCM_0 (0 << 4)
13926 +#define AT91_MATRIX_DTCM_16 (5 << 4)
13927 +#define AT91_MATRIX_DTCM_32 (6 << 4)
13929 +#define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI0 Chip Select Assignment Register */
13930 +#define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */
13931 +#define AT91_MATRIX_CS1A_SMC (0 << 1)
13932 +#define AT91_MATRIX_CS1A_SDRAMC (1 << 1)
13933 +#define AT91_MATRIX_CS3A (1 << 3) /* Chip Select 3 Assignment */
13934 +#define AT91_MATRIX_CS3A_SMC (0 << 3)
13935 +#define AT91_MATRIX_CS3A_SMC_SMARTMEDIA (1 << 3)
13936 +#define AT91_MATRIX_CS4A (1 << 4) /* Chip Select 4 Assignment */
13937 +#define AT91_MATRIX_CS4A_SMC (0 << 4)
13938 +#define AT91_MATRIX_CS4A_SMC_CF1 (1 << 4)
13939 +#define AT91_MATRIX_CS5A (1 << 5) /* Chip Select 5 Assignment */
13940 +#define AT91_MATRIX_CS5A_SMC (0 << 5)
13941 +#define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5)
13942 +#define AT91_MATRIX_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */
13943 +#define AT91_MATRIX_VDDIOMSEL (1 << 16) /* Memory voltage selection */
13944 +#define AT91_MATRIX_VDDIOMSEL_1_8V (0 << 16)
13945 +#define AT91_MATRIX_VDDIOMSEL_3_3V (1 << 16)
13948 +#endif
13949 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/board.h linux-2.6-stable/include/asm-arm/arch-at91/board.h
13950 --- linux-2.6.21/include/asm-arm/arch-at91/board.h Thu Apr 26 05:08:32 2007
13951 +++ linux-2.6-stable/include/asm-arm/arch-at91/board.h Thu May 10 12:21:10 2007
13952 @@ -62,7 +62,7 @@
13954 extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data);
13956 - /* Ethernet */
13957 + /* Ethernet (EMAC & MACB) */
13958 struct at91_eth_data {
13959 u8 phy_irq_pin; /* PHY IRQ */
13960 u8 is_rmii; /* using RMII interface? */
13961 @@ -114,9 +114,31 @@
13963 extern void __init at91_add_device_serial(void);
13965 + /* LCD Controller */
13966 +struct atmel_lcdfb_info;
13967 +extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data);
13969 + /* AC97 */
13970 +struct atmel_ac97_data {
13971 + u8 reset_pin; /* reset */
13973 +extern void __init at91_add_device_ac97(struct atmel_ac97_data *data);
13975 + /* ISI */
13976 +extern void __init at91_add_device_isi(void);
13978 /* LEDs */
13979 extern u8 at91_leds_cpu;
13980 extern u8 at91_leds_timer;
13981 extern void __init at91_init_leds(u8 cpu_led, u8 timer_led);
13983 +struct at91_gpio_led {
13984 + u8 index; /* index of LED */
13985 + char* name; /* name of LED */
13986 + u8 gpio; /* AT91_PIN_xx */
13987 + u8 flags; /* 1=active-high */
13988 + char* trigger; /* default trigger */
13990 +extern void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr);
13992 #endif
13993 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/cpu.h linux-2.6-stable/include/asm-arm/arch-at91/cpu.h
13994 --- linux-2.6.21/include/asm-arm/arch-at91/cpu.h Thu Apr 26 05:08:32 2007
13995 +++ linux-2.6-stable/include/asm-arm/arch-at91/cpu.h Wed May 9 10:20:54 2007
13996 @@ -26,6 +26,8 @@
13997 #define ARCH_ID_AT91SAM9XE256 0x329a93a0
13998 #define ARCH_ID_AT91SAM9XE512 0x329aa3a0
14000 +#define ARCH_ID_AT91SAM9RL64 0x019b03a0
14002 static inline unsigned long at91_cpu_identify(void)
14004 return (at91_sys_read(AT91_DBGU_CIDR) & ~AT91_CIDR_VERSION);
14005 @@ -68,4 +70,10 @@
14006 #define cpu_is_at91sam9263() (0)
14007 #endif
14009 +#ifdef CONFIG_ARCH_AT91SAM9RL
14010 +#define cpu_is_at91sam9rl() (at91_cpu_identify() == ARCH_ID_AT91SAM9RL64)
14011 +#else
14012 +#define cpu_is_at91sam9rl() (0)
14013 +#endif
14015 #endif
14016 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/hardware.h linux-2.6-stable/include/asm-arm/arch-at91/hardware.h
14017 --- linux-2.6.21/include/asm-arm/arch-at91/hardware.h Thu Apr 26 05:08:32 2007
14018 +++ linux-2.6-stable/include/asm-arm/arch-at91/hardware.h Fri May 11 14:45:12 2007
14019 @@ -24,6 +24,8 @@
14020 #include <asm/arch/at91sam9261.h>
14021 #elif defined(CONFIG_ARCH_AT91SAM9263)
14022 #include <asm/arch/at91sam9263.h>
14023 +#elif defined(CONFIG_ARCH_AT91SAM9RL)
14024 +#include <asm/arch/at91sam9rl.h>
14025 #else
14026 #error "Unsupported AT91 processor"
14027 #endif
14028 @@ -69,22 +71,5 @@
14029 /* Clocks */
14030 #define AT91_SLOW_CLOCK 32768 /* slow clock */
14032 -#ifndef __ASSEMBLY__
14033 -#include <asm/io.h>
14035 -static inline unsigned int at91_sys_read(unsigned int reg_offset)
14037 - void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
14039 - return __raw_readl(addr + reg_offset);
14042 -static inline void at91_sys_write(unsigned int reg_offset, unsigned long value)
14044 - void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
14046 - __raw_writel(value, addr + reg_offset);
14048 -#endif
14050 #endif
14051 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/ics1523.h linux-2.6-stable/include/asm-arm/arch-at91/ics1523.h
14052 --- linux-2.6.21/include/asm-arm/arch-at91/ics1523.h Thu Jan 1 02:00:00 1970
14053 +++ linux-2.6-stable/include/asm-arm/arch-at91/ics1523.h Tue May 8 12:13:31 2007
14054 @@ -0,0 +1,154 @@
14055 +//*----------------------------------------------------------------------------
14056 +//* ATMEL Microcontroller Software Support - ROUSSET -
14057 +//*----------------------------------------------------------------------------
14058 +//* The software is delivered "AS IS" without warranty or condition of any
14059 +//* kind, either express, implied or statutory. This includes without
14060 +//* limitation any warranty or condition with respect to merchantability or
14061 +//* fitness for any particular purpose, or against the infringements of
14062 +//* intellectual property rights of others.
14063 +//*----------------------------------------------------------------------------
14064 +//* File Name : ics1523.h
14065 +//* Object : Clock Generator Prototyping File.
14066 +//*
14067 +//* 1.0 08/28/02 ED : Creation
14068 +//* 1.2 13/01/03 FB : Update on lib V3
14069 +//*----------------------------------------------------------------------------
14071 +#ifndef ics1523_h
14072 +#define ics1523_h
14074 +/*-------------------------------------------*/
14075 +/* ICS1523 TWI Serial Clock Definition */
14076 +/*-------------------------------------------*/
14078 +#define ICS_MIN_CLOCK 100 /* Min Frequency Access Clock KHz */
14079 +#define ICS_MAX_CLOCK 400 /* Max Frequency Access Clock KHz */
14080 +#define ICS_TRANSFER_RATE ICS_MAX_CLOCK /* Transfer speed to apply */
14082 +#define ICS_WRITE_CLK_PNB 30 /* TWCK Clock Periods required to write */
14083 +#define ICS_READ_CLK_PNB 40 /* TWCK Clock Periods required to read */
14085 +/*-------------------------------------------*/
14086 +/* ICS1523 Write Operation Definition */
14087 +/*-------------------------------------------*/
14089 +#define ICS1523_ACCESS_OK 0 /* OK */
14090 +#define ICS1523_ACCESS_ERROR -1 /* NOK */
14092 +/*-------------------------------------------*/
14093 +/* ICS1523 Device Addresses Definition */
14094 +/*-------------------------------------------*/
14096 +#define ICS_ADDR 0x26 /* Device Address */
14098 +/*--------------------------------------------------*/
14099 +/* ICS1523 Registers Internal Addresses Definition */
14100 +/*--------------------------------------------------*/
14102 +#define ICS_ICR 0x0 /* Input Control Register */
14103 +#define ICS_LCR 0x1 /* Loop Control Register */
14104 +#define ICS_FD0 0x2 /* PLL FeedBack Divider LSBs */
14105 +#define ICS_FD1 0x3 /* PLL FeedBack Divider MSBs */
14106 +#define ICS_DPAO 0x4 /* Dynamic Phase Aligner Offset */
14107 +#define ICS_DPAC 0x5 /* Dynamic Phase Aligner Resolution */
14108 +#define ICS_OE 0x6 /* Output Enables Register */
14109 +#define ICS_OD 0x7 /* Osc Divider Register */
14110 +#define ICS_SWRST 0x8 /* DPA & PLL Reset Register */
14111 +#define ICS_VID 0x10 /* Chip Version Register */
14112 +#define ICS_RID 0x11 /* Chip Revision Register */
14113 +#define ICS_SR 0x12 /* Status Register */
14115 +/*------------------------------------------------------*/
14116 +/* ICS1523 Input Control Register Bits Definition */
14117 +/*------------------------------------------------------*/
14119 +#define ICS_PDEN 0x1 /* Phase Detector Enable */
14120 +#define ICS_PDPOL 0x2 /* Phase Detector Enable Polarity */
14121 +#define ICS_REFPOL 0x4 /* External Reference Polarity */
14122 +#define ICS_FBKPOL 0x8 /* External Feedback Polarity */
14123 +#define ICS_FBKSEL 0x10 /* External Feedback Select */
14124 +#define ICS_FUNCSEL 0x20 /* Function Out Select */
14125 +#define ICS_ENPLS 0x40 /* Enable PLL Lock/Ref Status Output */
14126 +#define ICS_ENDLS 0x80 /* Enable DPA Lock/Ref Status Output */
14128 +/*-----------------------------------------------------*/
14129 +/* ICS1523 Loop Control Register Bits Definition */
14130 +/*-----------------------------------------------------*/
14132 +#define ICS_PFD 0x7 /* Phase Detector Gain */
14133 +#define ICS_PSD 0x30 /* Post-Scaler Divider */
14135 +/*----------------------------------------------------*/
14136 +/* ICS1523 PLL FeedBack Divider LSBs Definition */
14137 +/*----------------------------------------------------*/
14139 +#define ICS_FBDL 0xFF /* PLL FeedBack Divider LSBs */
14141 +/*----------------------------------------------------*/
14142 +/* ICS1523 PLL FeedBack Divider MSBs Definition */
14143 +/*----------------------------------------------------*/
14145 +#define ICS_FBDM 0xF /* PLL FeedBack Divider MSBs */
14147 +/*------------------------------------------------------------*/
14148 +/* ICS1523 Dynamic Phase Aligner Offset Bits Definition */
14149 +/*------------------------------------------------------------*/
14151 +#define ICS_DPAOS 0x2F /* Dynamic Phase Aligner Offset */
14152 +#define ICS_FILSEL 0x80 /* Loop Filter Select */
14154 +/*----------------------------------------------------------------*/
14155 +/* ICS1523 Dynamic Phase Aligner Resolution Bits Definition */
14156 +/*----------------------------------------------------------------*/
14158 +#define ICS_DPARES 0x3 /* Dynamic Phase Aligner Resolution */
14159 +#define ICS_MMREV 0xFC /* Metal Mask Revision Number */
14161 +/*-------------------------------------------------------*/
14162 +/* ICS1523 Output Enables Register Bits Definition */
14163 +/*-------------------------------------------------------*/
14165 +#define ICS_OEPCK 0x1 /* Output Enable for PECL PCLK Outputs */
14166 +#define ICS_OETCK 0x2 /* Output Enable for STTL CLK Output */
14167 +#define ICS_OEP2 0x4 /* Output Enable for PECL CLK/2 Outputs */
14168 +#define ICS_OET2 0x8 /* Output Enable for STTL CLK/2 Output */
14169 +#define ICS_OEF 0x10 /* Output Enable for STTL FUNC Output */
14170 +#define ICS_CLK2INV 0x20 /* CLK/2 Invert */
14171 +#define ICS_OSCL 0xC0 /* SSTL Clock Scaler */
14173 +/*----------------------------------------------------*/
14174 +/* ICS1523 Osc Divider Register Bits Definition */
14175 +/*----------------------------------------------------*/
14177 +#define ICS_OSCDIV 0x7F /* Oscillator Divider Modulus */
14178 +#define ICS_INSEL 0x80 /* Input Select */
14180 +/*---------------------------------------------------*/
14181 +/* ICS1523 DPA & PLL Reset Register Definition */
14182 +/*---------------------------------------------------*/
14184 +#define ICS_DPAR 0x0A /* DPA Reset Command */
14185 +#define ICS_PLLR 0x50 /* PLL Reset Command */
14187 +/*------------------------------------------------*/
14188 +/* ICS1523 Chip Version Register Definition */
14189 +/*------------------------------------------------*/
14191 +#define ICS_CHIPV 0xFF /* Chip Version */
14193 +/*-------------------------------------------------*/
14194 +/* ICS1523 Chip Revision Register Definition */
14195 +/*-------------------------------------------------*/
14197 +#define ICS_CHIPR 0xFF /* Chip Revision */
14199 +/*------------------------------------------*/
14200 +/* ICS1523 Status Register Definition */
14201 +/*------------------------------------------*/
14203 +#define ICS_DPALOCK 0x1 /* DPA Lock Status */
14204 +#define ICS_PLLLOCK 0x2 /* PLL Lock Status */
14206 +int at91_ics1523_init(void);
14208 +#endif /* ics1523_h */
14209 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/io.h linux-2.6-stable/include/asm-arm/arch-at91/io.h
14210 --- linux-2.6.21/include/asm-arm/arch-at91/io.h Thu Apr 26 05:08:32 2007
14211 +++ linux-2.6-stable/include/asm-arm/arch-at91/io.h Fri May 11 14:45:12 2007
14212 @@ -29,4 +29,22 @@
14213 #define __mem_pci(a) (a)
14216 +#ifndef __ASSEMBLY__
14218 +static inline unsigned int at91_sys_read(unsigned int reg_offset)
14220 + void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
14222 + return __raw_readl(addr + reg_offset);
14225 +static inline void at91_sys_write(unsigned int reg_offset, unsigned long value)
14227 + void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
14229 + __raw_writel(value, addr + reg_offset);
14232 +#endif
14234 #endif
14235 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/irqs.h linux-2.6-stable/include/asm-arm/arch-at91/irqs.h
14236 --- linux-2.6.21/include/asm-arm/arch-at91/irqs.h Thu Apr 26 05:08:32 2007
14237 +++ linux-2.6-stable/include/asm-arm/arch-at91/irqs.h Fri May 11 14:45:12 2007
14238 @@ -21,6 +21,7 @@
14239 #ifndef __ASM_ARCH_IRQS_H
14240 #define __ASM_ARCH_IRQS_H
14242 +#include <asm/io.h>
14243 #include <asm/arch/at91_aic.h>
14245 #define NR_AIC_IRQS 32
14246 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/spi.h linux-2.6-stable/include/asm-arm/arch-at91/spi.h
14247 --- linux-2.6.21/include/asm-arm/arch-at91/spi.h Thu Jan 1 02:00:00 1970
14248 +++ linux-2.6-stable/include/asm-arm/arch-at91/spi.h Tue May 8 14:31:24 2007
14249 @@ -0,0 +1,54 @@
14251 + * Serial Peripheral Interface (SPI) driver for the Atmel AT91RM9200
14253 + * (c) SAN People (Pty) Ltd
14255 + * This program is free software; you can redistribute it and/or
14256 + * modify it under the terms of the GNU General Public License
14257 + * as published by the Free Software Foundation; either version
14258 + * 2 of the License, or (at your option) any later version.
14259 + */
14261 +#ifndef AT91_LEGACY_SPI_H
14262 +#define AT91_LEGACY_SPI_H
14264 +#define SPI_MAJOR 153 /* registered device number */
14266 +#define DEFAULT_SPI_CLK 6000000
14269 +/* Maximum number of buffers in a single SPI transfer.
14270 + * DataFlash uses maximum of 2
14271 + * spidev interface supports up to 8.
14272 + */
14273 +#define MAX_SPI_TRANSFERS 8
14274 +#define NR_SPI_DEVICES 4 /* number of devices on SPI bus */
14277 + * Describes the buffers for a SPI transfer.
14278 + * A transmit & receive buffer must be specified for each transfer
14279 + */
14280 +struct spi_transfer_list {
14281 + void* tx[MAX_SPI_TRANSFERS]; /* transmit */
14282 + int txlen[MAX_SPI_TRANSFERS];
14283 + void* rx[MAX_SPI_TRANSFERS]; /* receive */
14284 + int rxlen[MAX_SPI_TRANSFERS];
14285 + int nr_transfers; /* number of transfers */
14286 + int curr; /* current transfer */
14289 +struct spi_local {
14290 + unsigned int pcs; /* Peripheral Chip Select value */
14292 + struct spi_transfer_list *xfers; /* current transfer list */
14293 + dma_addr_t tx, rx; /* DMA address for current transfer */
14294 + dma_addr_t txnext, rxnext; /* DMA address for next transfer */
14298 +/* Exported functions */
14299 +extern void spi_access_bus(short device);
14300 +extern void spi_release_bus(short device);
14301 +extern int spi_transfer(struct spi_transfer_list* list);
14303 +#endif
14304 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/timex.h linux-2.6-stable/include/asm-arm/arch-at91/timex.h
14305 --- linux-2.6.21/include/asm-arm/arch-at91/timex.h Thu Apr 26 05:08:32 2007
14306 +++ linux-2.6-stable/include/asm-arm/arch-at91/timex.h Wed May 9 10:20:53 2007
14307 @@ -37,6 +37,11 @@
14308 #define AT91SAM9_MASTER_CLOCK 99959500
14309 #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16)
14311 +#elif defined(CONFIG_ARCH_AT91SAM9RL)
14313 +#define AT91SAM9_MASTER_CLOCK 100000000
14314 +#define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16)
14316 #endif
14318 #endif
14319 diff -urN -x CVS linux-2.6.21/include/asm-arm/arch-at91/uncompress.h linux-2.6-stable/include/asm-arm/arch-at91/uncompress.h
14320 --- linux-2.6.21/include/asm-arm/arch-at91/uncompress.h Thu Apr 26 05:08:32 2007
14321 +++ linux-2.6-stable/include/asm-arm/arch-at91/uncompress.h Fri May 11 14:45:12 2007
14322 @@ -21,7 +21,7 @@
14323 #ifndef __ASM_ARCH_UNCOMPRESS_H
14324 #define __ASM_ARCH_UNCOMPRESS_H
14326 -#include <asm/hardware.h>
14327 +#include <asm/io.h>
14328 #include <asm/arch/at91_dbgu.h>
14331 diff -urN -x CVS linux-2.6.21/include/linux/clk.h linux-2.6-stable/include/linux/clk.h
14332 --- linux-2.6.21/include/linux/clk.h Thu Apr 26 05:08:32 2007
14333 +++ linux-2.6-stable/include/linux/clk.h Tue May 8 12:13:31 2007
14334 @@ -121,4 +121,24 @@
14336 struct clk *clk_get_parent(struct clk *clk);
14338 +/**
14339 + * clk_must_disable - report whether a clock's users must disable it
14340 + * @clk: one node in the clock tree
14342 + * This routine returns true only if the upcoming system state requires
14343 + * disabling the specified clock.
14345 + * It's common for platform power states to constrain certain clocks (and
14346 + * their descendants) to be unavailable, while other states allow that
14347 + * clock to be active. A platform's power states often include an "all on"
14348 + * mode; system wide sleep states like "standby" or "suspend-to-RAM"; and
14349 + * operating states which sacrifice functionality for lower power usage.
14351 + * The constraint value is commonly tested in device driver suspend(), to
14352 + * leave clocks active if they are needed for features like wakeup events.
14353 + * On platforms that support reduced functionality operating states, the
14354 + * constraint may also need to be tested during resume() and probe() calls.
14355 + */
14356 +int clk_must_disable(struct clk *clk);
14358 #endif
14359 diff -urN -x CVS linux-2.6.21/include/linux/i2c-id.h linux-2.6-stable/include/linux/i2c-id.h
14360 --- linux-2.6.21/include/linux/i2c-id.h Thu Apr 26 05:08:32 2007
14361 +++ linux-2.6-stable/include/linux/i2c-id.h Tue May 8 12:13:31 2007
14362 @@ -202,6 +202,7 @@
14364 /* --- PCA 9564 based algorithms */
14365 #define I2C_HW_A_ISA 0x1a0000 /* generic ISA Bus interface card */
14366 +#define I2C_HW_A_PLAT 0x1a0001 /* generic platform_bus interface */
14368 /* --- ACPI Embedded controller algorithms */
14369 #define I2C_HW_ACPI_EC 0x1f0000
14370 diff -urN -x CVS linux-2.6.21/include/video/atmel_lcdc.h linux-2.6-stable/include/video/atmel_lcdc.h
14371 --- linux-2.6.21/include/video/atmel_lcdc.h Thu Jan 1 02:00:00 1970
14372 +++ linux-2.6-stable/include/video/atmel_lcdc.h Thu May 10 12:34:01 2007
14373 @@ -0,0 +1,196 @@
14375 + * Header file for AT91/AT32 LCD Controller
14377 + * Data structure and register user interface
14379 + * Copyright (C) 2007 Atmel Corporation
14381 + * This program is free software; you can redistribute it and/or modify
14382 + * it under the terms of the GNU General Public License as published by
14383 + * the Free Software Foundation; either version 2 of the License, or
14384 + * (at your option) any later version.
14386 + * This program is distributed in the hope that it will be useful,
14387 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
14388 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14389 + * GNU General Public License for more details.
14391 + * You should have received a copy of the GNU General Public License
14392 + * along with this program; if not, write to the Free Software
14393 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
14394 + */
14395 +#ifndef __ATMEL_LCDC_H__
14396 +#define __ATMEL_LCDC_H__
14398 + /* LCD Controller info data structure */
14399 +struct atmel_lcdfb_info {
14400 + spinlock_t lock;
14401 + struct fb_info *info;
14402 + void __iomem *mmio;
14403 + unsigned long irq_base;
14405 + unsigned int guard_time;
14406 + struct platform_device *pdev;
14407 + struct clk *bus_clk;
14408 + struct clk *lcdc_clk;
14409 + unsigned int default_bpp;
14410 + unsigned int default_lcdcon2;
14411 + unsigned int default_dmacon;
14412 + void (*atmel_lcdfb_power_control)(int on);
14413 + struct fb_monspecs *default_monspecs;
14414 + u32 pseudo_palette[16];
14417 +#define ATMEL_LCDC_DMABADDR1 0x00
14418 +#define ATMEL_LCDC_DMABADDR2 0x04
14419 +#define ATMEL_LCDC_DMAFRMPT1 0x08
14420 +#define ATMEL_LCDC_DMAFRMPT2 0x0c
14421 +#define ATMEL_LCDC_DMAFRMADD1 0x10
14422 +#define ATMEL_LCDC_DMAFRMADD2 0x14
14424 +#define ATMEL_LCDC_DMAFRMCFG 0x18
14425 +#define ATMEL_LCDC_FRSIZE (0x7fffff << 0)
14426 +#define ATMEL_LCDC_BLENGTH_OFFSET 24
14427 +#define ATMEL_LCDC_BLENGTH (0x7f << ATMEL_LCDC_BLENGTH_OFFSET)
14429 +#define ATMEL_LCDC_DMACON 0x1c
14430 +#define ATMEL_LCDC_DMAEN (0x1 << 0)
14431 +#define ATMEL_LCDC_DMARST (0x1 << 1)
14432 +#define ATMEL_LCDC_DMABUSY (0x1 << 2)
14433 +#define ATMEL_LCDC_DMAUPDT (0x1 << 3)
14434 +#define ATMEL_LCDC_DMA2DEN (0x1 << 4)
14436 +#define ATMEL_LCDC_DMA2DCFG 0x20
14437 +#define ATMEL_LCDC_ADDRINC_OFFSET 0
14438 +#define ATMEL_LCDC_ADDRINC (0xffff)
14439 +#define ATMEL_LCDC_PIXELOFF_OFFSET 24
14440 +#define ATMEL_LCDC_PIXELOFF (0x1f << 24)
14442 +#define ATMEL_LCDC_LCDCON1 0x0800
14443 +#define ATMEL_LCDC_BYPASS (1 << 0)
14444 +#define ATMEL_LCDC_CLKVAL_OFFSET 12
14445 +#define ATMEL_LCDC_CLKVAL (0x1ff << ATMEL_LCDC_CLKVAL_OFFSET)
14446 +#define ATMEL_LCDC_LINCNT (0x7ff << 21)
14448 +#define ATMEL_LCDC_LCDCON2 0x0804
14449 +#define ATMEL_LCDC_DISTYPE (3 << 0)
14450 +#define ATMEL_LCDC_DISTYPE_STNMONO (0 << 0)
14451 +#define ATMEL_LCDC_DISTYPE_STNCOLOR (1 << 0)
14452 +#define ATMEL_LCDC_DISTYPE_TFT (2 << 0)
14453 +#define ATMEL_LCDC_SCANMOD (1 << 2)
14454 +#define ATMEL_LCDC_SCANMOD_SINGLE (0 << 2)
14455 +#define ATMEL_LCDC_SCANMOD_DUAL (1 << 2)
14456 +#define ATMEL_LCDC_IFWIDTH (3 << 3)
14457 +#define ATMEL_LCDC_IFWIDTH_4 (0 << 3)
14458 +#define ATMEL_LCDC_IFWIDTH_8 (1 << 3)
14459 +#define ATMEL_LCDC_IFWIDTH_16 (2 << 3)
14460 +#define ATMEL_LCDC_PIXELSIZE (7 << 5)
14461 +#define ATMEL_LCDC_PIXELSIZE_1 (0 << 5)
14462 +#define ATMEL_LCDC_PIXELSIZE_2 (1 << 5)
14463 +#define ATMEL_LCDC_PIXELSIZE_4 (2 << 5)
14464 +#define ATMEL_LCDC_PIXELSIZE_8 (3 << 5)
14465 +#define ATMEL_LCDC_PIXELSIZE_16 (4 << 5)
14466 +#define ATMEL_LCDC_PIXELSIZE_24 (5 << 5)
14467 +#define ATMEL_LCDC_PIXELSIZE_32 (6 << 5)
14468 +#define ATMEL_LCDC_INVVD (1 << 8)
14469 +#define ATMEL_LCDC_INVVD_NORMAL (0 << 8)
14470 +#define ATMEL_LCDC_INVVD_INVERTED (1 << 8)
14471 +#define ATMEL_LCDC_INVFRAME (1 << 9 )
14472 +#define ATMEL_LCDC_INVFRAME_NORMAL (0 << 9)
14473 +#define ATMEL_LCDC_INVFRAME_INVERTED (1 << 9)
14474 +#define ATMEL_LCDC_INVLINE (1 << 10)
14475 +#define ATMEL_LCDC_INVLINE_NORMAL (0 << 10)
14476 +#define ATMEL_LCDC_INVLINE_INVERTED (1 << 10)
14477 +#define ATMEL_LCDC_INVCLK (1 << 11)
14478 +#define ATMEL_LCDC_INVCLK_NORMAL (0 << 11)
14479 +#define ATMEL_LCDC_INVCLK_INVERTED (1 << 11)
14480 +#define ATMEL_LCDC_INVDVAL (1 << 12)
14481 +#define ATMEL_LCDC_INVDVAL_NORMAL (0 << 12)
14482 +#define ATMEL_LCDC_INVDVAL_INVERTED (1 << 12)
14483 +#define ATMEL_LCDC_CLKMOD (1 << 15)
14484 +#define ATMEL_LCDC_CLKMOD_ACTIVEDISPLAY (0 << 15)
14485 +#define ATMEL_LCDC_CLKMOD_ALWAYSACTIVE (1 << 15)
14486 +#define ATMEL_LCDC_MEMOR (1 << 31)
14487 +#define ATMEL_LCDC_MEMOR_BIG (0 << 31)
14488 +#define ATMEL_LCDC_MEMOR_LITTLE (1 << 31)
14490 +#define ATMEL_LCDC_TIM1 0x0808
14491 +#define ATMEL_LCDC_VFP (0xff << 0)
14492 +#define ATMEL_LCDC_VBP_OFFSET 8
14493 +#define ATMEL_LCDC_VBP (0xff << ATMEL_LCDC_VBP_OFFSET)
14494 +#define ATMEL_LCDC_VPW_OFFSET 16
14495 +#define ATMEL_LCDC_VPW (0x3f << ATMEL_LCDC_VPW_OFFSET)
14496 +#define ATMEL_LCDC_VHDLY_OFFSET 24
14497 +#define ATMEL_LCDC_VHDLY (0xf << ATMEL_LCDC_VHDLY_OFFSET)
14499 +#define ATMEL_LCDC_TIM2 0x080c
14500 +#define ATMEL_LCDC_HBP (0xff << 0)
14501 +#define ATMEL_LCDC_HPW_OFFSET 8
14502 +#define ATMEL_LCDC_HPW (0x3f << ATMEL_LCDC_HPW_OFFSET)
14503 +#define ATMEL_LCDC_HFP_OFFSET 21
14504 +#define ATMEL_LCDC_HFP (0x7ff << ATMEL_LCDC_HFP_OFFSET)
14506 +#define ATMEL_LCDC_LCDFRMCFG 0x0810
14507 +#define ATMEL_LCDC_LINEVAL (0x7ff << 0)
14508 +#define ATMEL_LCDC_HOZVAL_OFFSET 21
14509 +#define ATMEL_LCDC_HOZVAL (0x7ff << ATMEL_LCDC_HOZVAL_OFFSET)
14511 +#define ATMEL_LCDC_FIFO 0x0814
14512 +#define ATMEL_LCDC_FIFOTH (0xffff)
14514 +#define ATMEL_LCDC_MVAL 0x0818
14516 +#define ATMEL_LCDC_DP1_2 0x081c
14517 +#define ATMEL_LCDC_DP4_7 0x0820
14518 +#define ATMEL_LCDC_DP3_5 0x0824
14519 +#define ATMEL_LCDC_DP2_3 0x0828
14520 +#define ATMEL_LCDC_DP5_7 0x082c
14521 +#define ATMEL_LCDC_DP3_4 0x0830
14522 +#define ATMEL_LCDC_DP4_5 0x0834
14523 +#define ATMEL_LCDC_DP6_7 0x0838
14524 +#define ATMEL_LCDC_DP1_2_VAL (0xff)
14525 +#define ATMEL_LCDC_DP4_7_VAL (0xfffffff)
14526 +#define ATMEL_LCDC_DP3_5_VAL (0xfffff)
14527 +#define ATMEL_LCDC_DP2_3_VAL (0xfff)
14528 +#define ATMEL_LCDC_DP5_7_VAL (0xfffffff)
14529 +#define ATMEL_LCDC_DP3_4_VAL (0xffff)
14530 +#define ATMEL_LCDC_DP4_5_VAL (0xfffff)
14531 +#define ATMEL_LCDC_DP6_7_VAL (0xfffffff)
14533 +#define ATMEL_LCDC_PWRCON 0x083c
14534 +#define ATMEL_LCDC_PWR (1 << 0)
14535 +#define ATMEL_LCDC_GUARDT_OFFSET 1
14536 +#define ATMEL_LCDC_GUARDT (0x7f << ATMEL_LCDC_GUARDT_OFFSET)
14537 +#define ATMEL_LCDC_BUSY (1 << 31)
14539 +#define ATMEL_LCDC_CONTRAST_CTR 0x0840
14540 +#define ATMEL_LCDC_PS (3 << 0)
14541 +#define ATMEL_LCDC_PS_DIV1 (0 << 0)
14542 +#define ATMEL_LCDC_PS_DIV2 (1 << 0)
14543 +#define ATMEL_LCDC_PS_DIV4 (2 << 0)
14544 +#define ATMEL_LCDC_PS_DIV8 (3 << 0)
14545 +#define ATMEL_LCDC_POL (1 << 2)
14546 +#define ATMEL_LCDC_POL_NEGATIVE (0 << 2)
14547 +#define ATMEL_LCDC_POL_POSITIVE (1 << 2)
14548 +#define ATMEL_LCDC_ENA (1 << 3)
14549 +#define ATMEL_LCDC_ENA_PWMDISABLE (0 << 3)
14550 +#define ATMEL_LCDC_ENA_PWMENABLE (1 << 3)
14552 +#define ATMEL_LCDC_CONTRAST_VAL 0x0844
14553 +#define ATMEL_LCDC_CVAL (0xff)
14555 +#define ATMEL_LCDC_IER 0x0848
14556 +#define ATMEL_LCDC_IDR 0x084c
14557 +#define ATMEL_LCDC_IMR 0x0850
14558 +#define ATMEL_LCDC_ISR 0x0854
14559 +#define ATMEL_LCDC_ICR 0x0858
14560 +#define ATMEL_LCDC_LNI (1 << 0)
14561 +#define ATMEL_LCDC_LSTLNI (1 << 1)
14562 +#define ATMEL_LCDC_EOFI (1 << 2)
14563 +#define ATMEL_LCDC_UFLWI (1 << 4)
14564 +#define ATMEL_LCDC_OWRI (1 << 5)
14565 +#define ATMEL_LCDC_MERI (1 << 6)
14567 +#define ATMEL_LCDC_LUT(n) (0x0c00 + ((n)*4))
14569 +#endif /* __ATMEL_LCDC_H__ */
14570 diff -urN -x CVS linux-2.6.21/sound/soc/at91/eti_b1_wm8731.c linux-2.6-stable/sound/soc/at91/eti_b1_wm8731.c
14571 --- linux-2.6.21/sound/soc/at91/eti_b1_wm8731.c Thu Apr 26 05:08:32 2007
14572 +++ linux-2.6-stable/sound/soc/at91/eti_b1_wm8731.c Tue May 8 12:13:58 2007
14573 @@ -34,8 +34,7 @@
14574 #include <sound/soc.h>
14575 #include <sound/soc-dapm.h>
14577 -#include <asm/arch/hardware.h>
14578 -#include <asm/arch/at91_pio.h>
14579 +#include <asm/hardware.h>
14580 #include <asm/arch/gpio.h>
14582 #include "../codecs/wm8731.h"
14583 @@ -48,13 +47,6 @@
14584 #define DBG(x...)
14585 #endif
14587 -#define AT91_PIO_TF1 (1 << (AT91_PIN_PB6 - PIN_BASE) % 32)
14588 -#define AT91_PIO_TK1 (1 << (AT91_PIN_PB7 - PIN_BASE) % 32)
14589 -#define AT91_PIO_TD1 (1 << (AT91_PIN_PB8 - PIN_BASE) % 32)
14590 -#define AT91_PIO_RD1 (1 << (AT91_PIN_PB9 - PIN_BASE) % 32)
14591 -#define AT91_PIO_RK1 (1 << (AT91_PIN_PB10 - PIN_BASE) % 32)
14592 -#define AT91_PIO_RF1 (1 << (AT91_PIN_PB11 - PIN_BASE) % 32)
14594 static struct clk *pck1_clk;
14595 static struct clk *pllb_clk;
14597 @@ -277,7 +269,6 @@
14598 static int __init eti_b1_init(void)
14600 int ret;
14601 - u32 ssc_pio_lines;
14602 struct at91_ssc_periph *ssc = eti_b1_dai.cpu_dai->private_data;
14604 if (!request_mem_region(AT91RM9200_BASE_SSC1, SZ_16K, "soc-audio")) {
14605 @@ -311,19 +302,12 @@
14606 goto fail_io_unmap;
14609 - ssc_pio_lines = AT91_PIO_TF1 | AT91_PIO_TK1 | AT91_PIO_TD1
14610 - | AT91_PIO_RD1 /* | AT91_PIO_RK1 */ | AT91_PIO_RF1;
14612 - /* Reset all PIO registers and assign lines to peripheral A */
14613 - at91_sys_write(AT91_PIOB + PIO_PDR, ssc_pio_lines);
14614 - at91_sys_write(AT91_PIOB + PIO_ODR, ssc_pio_lines);
14615 - at91_sys_write(AT91_PIOB + PIO_IFDR, ssc_pio_lines);
14616 - at91_sys_write(AT91_PIOB + PIO_CODR, ssc_pio_lines);
14617 - at91_sys_write(AT91_PIOB + PIO_IDR, ssc_pio_lines);
14618 - at91_sys_write(AT91_PIOB + PIO_MDDR, ssc_pio_lines);
14619 - at91_sys_write(AT91_PIOB + PIO_PUDR, ssc_pio_lines);
14620 - at91_sys_write(AT91_PIOB + PIO_ASR, ssc_pio_lines);
14621 - at91_sys_write(AT91_PIOB + PIO_OWDR, ssc_pio_lines);
14622 + at91_set_A_periph(AT91_PIN_PB6, 0); /* TF1 */
14623 + at91_set_A_periph(AT91_PIN_PB7, 0); /* TK1 */
14624 + at91_set_A_periph(AT91_PIN_PB8, 0); /* TD1 */
14625 + at91_set_A_periph(AT91_PIN_PB9, 0); /* RD1 */
14626 +/* at91_set_A_periph(AT91_PIN_PB10, 0);*/ /* RK1 */
14627 + at91_set_A_periph(AT91_PIN_PB11, 0); /* RF1 */
14630 * Set PCK1 parent to PLLB and its rate to 12 Mhz.