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
8 + @ Promwad Chub : 1181
9 + mov r3, #(MACH_TYPE_CHUB & 0xff)
10 + orr r3, r3, #(MACH_TYPE_CHUB & 0xff00)
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
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
29 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
30 +CONFIG_GENERIC_GPIO=y
31 # CONFIG_GENERIC_TIME is not set
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
44 CONFIG_VECTORS_BASE=0xffff0000
45 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
48 # CONFIG_SWAP is not set
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
68 +# CONFIG_LBD is not set
69 # CONFIG_BLK_DEV_IO_TRACE is not set
70 +# CONFIG_LSF is not set
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
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
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
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
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
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
143 # Power management options
145 # CONFIG_PM is not set
146 -# CONFIG_APM is not set
152 # CONFIG_PACKET_MMAP is not set
155 -# CONFIG_XFRM_USER is not set
156 -# CONFIG_XFRM_SUB_POLICY is not set
157 # CONFIG_NET_KEY is not set
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
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
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
189 # Plug and Play support
191 +# CONFIG_PNPACPI is not set
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
205 # CONFIG_RAID_ATTRS is not set
207 +# CONFIG_SCSI_TGT is not set
208 # CONFIG_SCSI_NETLINK is not set
209 CONFIG_SCSI_PROC_FS=y
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
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
233 # Network device support
235 -# CONFIG_NETDEVICES is not set
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
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
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
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
299 -# CONFIG_TIFM_CORE is not set
302 +# Multifunction device drivers
304 +# CONFIG_MFD_SM501 is not set
312 -# CONFIG_FIRMWARE_EDID is not set
313 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
314 # CONFIG_FB is not set
319 # CONFIG_VGA_CONSOLE is not set
320 CONFIG_DUMMY_CONSOLE=y
321 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
326 # CONFIG_SOUND is not set
332 +# CONFIG_HID_DEBUG is not set
337 CONFIG_USB_ARCH_HAS_HCD=y
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
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
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
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
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
381 # CONFIG_NLS_UTF8 is not set
384 +# Distributed Lock Manager
386 +# CONFIG_DLM is not set
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
424 # CONFIG_DEBUG_ERRORS is not set
426 @@ -941,9 +1029,12 @@
431 # CONFIG_CRC_CCITT is not set
432 # CONFIG_CRC16 is not set
434 # CONFIG_LIBCRC32C is not set
435 CONFIG_ZLIB_INFLATE=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
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
451 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
452 +CONFIG_GENERIC_GPIO=y
453 # CONFIG_GENERIC_TIME is not set
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
466 CONFIG_VECTORS_BASE=0xffff0000
467 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
470 # CONFIG_SWAP is not set
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
490 +# CONFIG_LBD is not set
491 # CONFIG_BLK_DEV_IO_TRACE is not set
492 +# CONFIG_LSF is not set
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
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 @@
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
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
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
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
557 # Power management options
559 # CONFIG_PM is not set
560 -# CONFIG_APM is not set
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
571 # CONFIG_IP_MULTICAST is not set
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
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
589 # User Modules And Translation Layers
591 # CONFIG_MTD_CHAR is not set
592 +CONFIG_MTD_BLKDEVS=y
594 # CONFIG_FTL is not set
595 # CONFIG_NFTL is not set
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
607 # Plug and Play support
609 +# CONFIG_PNPACPI is not set
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
623 # CONFIG_RAID_ATTRS is not set
625 +# CONFIG_SCSI_TGT is not set
626 # CONFIG_SCSI_NETLINK is not set
627 CONFIG_SCSI_PROC_FS=y
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
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
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
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
679 # I2C Hardware Bus support
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
690 -# CONFIG_SPI is not set
691 -# CONFIG_SPI_MASTER is not set
693 +# CONFIG_SPI_DEBUG is not set
697 +# SPI Master Controller Drivers
700 +# CONFIG_SPI_BITBANG is not set
703 +# SPI Protocol Masters
705 +# CONFIG_SPI_AT25 is not set
708 # Dallas's 1-wire bus
713 -# CONFIG_TIFM_CORE is not set
716 +# Multifunction device drivers
718 +# CONFIG_MFD_SM501 is not set
726 -# CONFIG_FIRMWARE_EDID is not set
727 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
728 # CONFIG_FB is not set
733 # CONFIG_VGA_CONSOLE is not set
734 CONFIG_DUMMY_CONSOLE=y
735 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
740 # CONFIG_SOUND is not set
746 +# CONFIG_HID_DEBUG is not set
751 CONFIG_USB_ARCH_HAS_HCD=y
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
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
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
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
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
795 # CONFIG_MMC_DEBUG is not set
798 -# CONFIG_MMC_TIFM_SD is not set
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
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
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
854 # CONFIG_DEBUG_ERRORS is not set
856 @@ -1097,9 +1163,12 @@
861 # CONFIG_CRC_CCITT is not set
862 # CONFIG_CRC16 is not set
864 # CONFIG_LIBCRC32C is not set
865 CONFIG_ZLIB_INFLATE=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
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
881 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
882 +CONFIG_GENERIC_GPIO=y
883 # CONFIG_GENERIC_TIME is not set
885 +# CONFIG_NO_IOPORT is not set
886 CONFIG_GENERIC_HARDIRQS=y
887 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
888 CONFIG_HARDIRQS_SW_RESEND=y
890 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
891 CONFIG_GENERIC_HWEIGHT=y
892 CONFIG_GENERIC_CALIBRATE_DELAY=y
894 CONFIG_VECTORS_BASE=0xffff0000
895 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
898 # CONFIG_SWAP is not set
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
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
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
922 # AT91 Feature Selections
924 # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
925 +# CONFIG_ATMEL_TCLIB is not set
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
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
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
954 # Power management options
956 # CONFIG_PM is not set
957 -# CONFIG_APM is not set
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
971 # Plug and Play support
973 +# CONFIG_PNPACPI is not set
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
987 CONFIG_NET_ETHERNET=y
990 # CONFIG_SMC91X is not set
991 # CONFIG_DM9000 is not set
994 # I2C Hardware Bus support
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
1003 # SPI Protocol Masters
1005 +# CONFIG_SPI_AT25 is not set
1008 # Dallas's 1-wire bus
1009 @@ -737,7 +751,11 @@
1013 -# CONFIG_TIFM_CORE is not set
1016 +# Multifunction device drivers
1018 +# CONFIG_MFD_SM501 is not set
1022 @@ -766,15 +784,23 @@
1026 -# CONFIG_FIRMWARE_EDID is not set
1027 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
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
1048 # Logo configuration
1050 # CONFIG_LOGO is not set
1051 -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1059 +# CONFIG_HID_DEBUG is not set
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
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
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
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
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
1108 # CONFIG_MMC_DEBUG is not set
1111 -# CONFIG_MMC_TIFM_SD is not set
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
1139 # CONFIG_DEBUG_ERRORS is not set
1141 @@ -1180,5 +1209,7 @@
1143 # CONFIG_LIBCRC32C is not set
1144 CONFIG_ZLIB_INFLATE=y
1145 +CONFIG_ZLIB_DEFLATE=y
1147 -CONFIG_IOMAP_COPY=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
1155 +# Automatically generated make config: don't edit
1156 +# Linux kernel version: 2.6.21
1157 +# Mon May 7 16:30:40 2007
1160 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
1161 +CONFIG_GENERIC_GPIO=y
1162 +# CONFIG_GENERIC_TIME is not set
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
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
1188 +CONFIG_LOCALVERSION=""
1189 +# CONFIG_LOCALVERSION_AUTO is not set
1190 +# CONFIG_SWAP is not set
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
1206 +# CONFIG_EMBEDDED is not set
1208 +CONFIG_SYSCTL_SYSCALL=y
1210 +# CONFIG_KALLSYMS_ALL is not set
1211 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
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
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
1241 +# CONFIG_LBD is not set
1242 +# CONFIG_BLK_DEV_IO_TRACE is not set
1243 +# CONFIG_LSF is not set
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"
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
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
1319 +CONFIG_CPU_ARM926T=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
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
1343 +# PCCARD (PCMCIA/CardBus) support
1345 +# CONFIG_PCCARD is not set
1350 +# CONFIG_PREEMPT is not set
1351 +# CONFIG_NO_IDLE_HZ is not set
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
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
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
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
1408 +# Networking options
1410 +# CONFIG_NETDEBUG is not set
1411 +# CONFIG_PACKET is not set
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
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
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)
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
1476 +CONFIG_MTD_BLKDEVS=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
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
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
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
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
1641 +# CONFIG_ISDN is not set
1644 +# Input device support
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
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
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
1714 +# CONFIG_IPMI_HANDLER is not set
1720 +CONFIG_WATCHDOG_NOWAYOUT=y
1723 +# Watchdog Device Drivers
1725 +# CONFIG_SOFT_WATCHDOG is not set
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
1735 +# CONFIG_TCG_TPM is not set
1740 +# CONFIG_I2C is not set
1746 +# CONFIG_SPI_DEBUG is not set
1747 +CONFIG_SPI_MASTER=y
1750 +# SPI Master Controller Drivers
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
1776 +# Multifunction device drivers
1778 +# CONFIG_MFD_SM501 is not set
1783 +# CONFIG_NEW_LEDS is not set
1794 +# Multimedia devices
1796 +# CONFIG_VIDEO_DEV is not set
1799 +# Digital Video Broadcasting Devices
1805 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
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
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
1843 +# Advanced Linux Sound Architecture
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
1860 +CONFIG_SND_DEBUG_DETECT=y
1861 +# CONFIG_SND_PCM_XRUN_DEBUG is not set
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
1877 +# SoC audio support
1879 +# CONFIG_SND_SOC is not set
1882 +# Open Sound System
1884 +# CONFIG_SOUND_PRIME is not set
1890 +# CONFIG_HID_DEBUG is not set
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
1913 +# CONFIG_MMC_DEBUG is not set
1921 +# CONFIG_RTC_CLASS is not set
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
1940 +CONFIG_INOTIFY_USER=y
1941 +# CONFIG_QUOTA is not set
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
1959 +CONFIG_FAT_DEFAULT_CODEPAGE=437
1960 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1961 +# CONFIG_NTFS_FS is not set
1964 +# Pseudo filesystems
1967 +CONFIG_PROC_SYSCTL=y
1970 +# CONFIG_TMPFS_POSIX_ACL is not set
1971 +# CONFIG_HUGETLB_PAGE is not set
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
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
2000 +# CONFIG_PARTITION_ADVANCED is not set
2001 +CONFIG_MSDOS_PARTITION=y
2004 +# Native Language Support
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
2048 +# Profiling support
2050 +# CONFIG_PROFILING is not set
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
2086 +# CONFIG_DEBUG_ICEDCC is not set
2091 +# CONFIG_KEYS is not set
2092 +# CONFIG_SECURITY is not set
2095 +# Cryptographic options
2097 +# CONFIG_CRYPTO is not set
2102 +CONFIG_BITREVERSE=y
2103 +# CONFIG_CRC_CCITT is not set
2104 +# CONFIG_CRC16 is not set
2106 +# CONFIG_LIBCRC32C is not set
2107 +CONFIG_ZLIB_INFLATE=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
2116 +# Automatically generated make config: don't edit
2117 +# Linux kernel version: 2.6.20
2118 +# Tue May 1 21:06:33 2007
2121 +# CONFIG_GENERIC_TIME is not set
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
2145 +CONFIG_LOCALVERSION=""
2146 +# CONFIG_LOCALVERSION_AUTO is not set
2147 +# CONFIG_SWAP is not set
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
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
2162 +# CONFIG_EMBEDDED is not set
2164 +CONFIG_SYSCTL_SYSCALL=y
2166 +# CONFIG_KALLSYMS_ALL is not set
2167 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
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
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
2197 +# CONFIG_LBD is not set
2198 +# CONFIG_BLK_DEV_IO_TRACE is not set
2199 +# CONFIG_LSF is not set
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"
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
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
2274 +CONFIG_CPU_ARM926T=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
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
2297 +# PCCARD (PCMCIA/CardBus) support
2299 +# CONFIG_PCCARD is not set
2304 +# CONFIG_PREEMPT is not set
2305 +# CONFIG_NO_IDLE_HZ is not set
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
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
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
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
2362 +# Networking options
2364 +# CONFIG_NETDEBUG is not set
2366 +# CONFIG_PACKET_MMAP is not set
2369 +# CONFIG_XFRM_USER is not set
2370 +# CONFIG_XFRM_SUB_POLICY is not set
2371 +# CONFIG_NET_KEY is not set
2373 +# CONFIG_IP_MULTICAST is not set
2374 +# CONFIG_IP_ADVANCED_ROUTER is not set
2375 +CONFIG_IP_FIB_HASH=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
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
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
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)
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
2477 +CONFIG_MTD_BLKDEVS=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
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
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
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
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
2652 +# CONFIG_ISDN is not set
2655 +# Input device support
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
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
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
2716 +# CONFIG_IPMI_HANDLER is not set
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
2731 +# CONFIG_TCG_TPM is not set
2736 +# CONFIG_I2C is not set
2742 +# CONFIG_SPI_DEBUG is not set
2743 +CONFIG_SPI_MASTER=y
2746 +# SPI Master Controller Drivers
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
2769 +# CONFIG_TIFM_CORE is not set
2774 +# CONFIG_NEW_LEDS is not set
2785 +# Multimedia devices
2787 +# CONFIG_VIDEO_DEV is not set
2790 +# Digital Video Broadcasting Devices
2792 +# CONFIG_DVB is not set
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
2810 +# CONFIG_SOUND is not set
2815 +# CONFIG_HID is not set
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
2843 +# CONFIG_RTC_CLASS is not set
2849 +# CONFIG_EXT2_FS_XATTR is not set
2850 +# CONFIG_EXT2_FS_XIP is not set
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
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
2868 +CONFIG_INOTIFY_USER=y
2869 +# CONFIG_QUOTA is not set
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
2885 +# CONFIG_MSDOS_FS is not set
2887 +CONFIG_FAT_DEFAULT_CODEPAGE=437
2888 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2889 +# CONFIG_NTFS_FS is not set
2892 +# Pseudo filesystems
2895 +CONFIG_PROC_SYSCTL=y
2898 +# CONFIG_TMPFS_POSIX_ACL is not set
2899 +# CONFIG_HUGETLB_PAGE is not set
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
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
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
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
2941 +CONFIG_NFS_COMMON=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
2955 +# CONFIG_PARTITION_ADVANCED is not set
2956 +CONFIG_MSDOS_PARTITION=y
2959 +# Native Language Support
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
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
3044 +# CONFIG_DEBUG_ICEDCC is not set
3049 +# CONFIG_KEYS is not set
3050 +# CONFIG_SECURITY is not set
3053 +# Cryptographic options
3055 +# CONFIG_CRYPTO is not set
3060 +CONFIG_BITREVERSE=y
3061 +# CONFIG_CRC_CCITT is not set
3062 +# CONFIG_CRC16 is not set
3064 +# CONFIG_LIBCRC32C is not set
3065 +CONFIG_ZLIB_INFLATE=y
3066 +CONFIG_ZLIB_DEFLATE=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
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
3081 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
3082 +CONFIG_GENERIC_GPIO=y
3083 +# CONFIG_GENERIC_TIME is not set
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
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 @@
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
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
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
3135 -# CONFIG_AUDIT is not set
3137 -# CONFIG_KOBJECT_UEVENT is not set
3138 -# CONFIG_IKCONFIG is not set
3139 # CONFIG_EMBEDDED is not set
3141 +CONFIG_SYSCTL_SYSCALL=y
3143 # CONFIG_KALLSYMS_ALL is not set
3144 -# CONFIG_KALLSYMS_EXTRA_PASS is not set
3145 +CONFIG_KALLSYMS_EXTRA_PASS=y
3153 -CONFIG_CC_OPTIMIZE_FOR_SIZE=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
3160 +CONFIG_VM_EVENT_COUNTERS=y
3161 +CONFIG_RT_MUTEXES=y
3162 # CONFIG_TINY_SHMEM is not set
3164 +# CONFIG_SLOB is not set
3167 # Loadable module support
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
3183 +# CONFIG_BLK_DEV_IO_TRACE is not set
3184 +# CONFIG_LSF is not set
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"
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
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
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
3277 CONFIG_CPU_ARM920T=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
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
3299 -CONFIG_ISA_DMA_API=y
3302 # PCCARD (PCMCIA/CardBus) support
3304 -# CONFIG_PCCARD is not set
3306 +# CONFIG_PCMCIA_DEBUG is not set
3308 +CONFIG_PCMCIA_LOAD_CIS=y
3309 +CONFIG_PCMCIA_IOCTL=y
3314 +# CONFIG_AT91_CF is not set
3319 +# CONFIG_PREEMPT is not set
3320 # CONFIG_NO_IDLE_HZ is not set
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
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
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
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
3367 +# Networking options
3369 +# CONFIG_NETDEBUG is not set
3371 +# CONFIG_PACKET_MMAP is not set
3373 +# CONFIG_NET_KEY is not set
3375 +CONFIG_IP_MULTICAST=y
3376 +# CONFIG_IP_ADVANCED_ROUTER is not set
3377 +CONFIG_IP_FIB_HASH=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)
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
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
3455 @@ -173,13 +365,95 @@
3458 CONFIG_PREVENT_FIRMWARE_BUILD=y
3459 -# CONFIG_FW_LOADER is not set
3460 -CONFIG_DEBUG_DRIVER=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
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
3487 +CONFIG_MTD_BLKDEVS=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
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
3556 # Plug and Play support
3558 +# CONFIG_PNPACPI is not set
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
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
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
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
3663 +# CONFIG_FUSION is not set
3666 -# Networking options
3667 +# IEEE 1394 (FireWire) support
3670 -# CONFIG_PACKET_MMAP is not set
3672 -# CONFIG_NET_KEY is not set
3674 -CONFIG_IP_MULTICAST=y
3675 -# CONFIG_IP_ADVANCED_ROUTER is not set
3676 -CONFIG_IP_FIB_HASH=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
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
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
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
3756 # Input device support
3759 +# CONFIG_INPUT_FF_MEMLESS is not set
3762 # Userland interfaces
3765 # Hardware I/O ports
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
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
3796 @@ -435,21 +687,23 @@
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
3819 -# CONFIG_AT91_SPI is not set
3820 +# CONFIG_TCG_TPM is not set
3824 @@ -457,10 +711,50 @@
3825 # CONFIG_I2C is not set
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
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
3854 +# Multifunction device drivers
3856 +# CONFIG_MFD_SM501 is not set
3861 +# CONFIG_NEW_LEDS is not set
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
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
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
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
3934 @@ -487,82 +821,98 @@
3935 # CONFIG_SOUND is not set
3941 +# CONFIG_HID_DEBUG is not set
3946 CONFIG_USB_ARCH_HAS_HCD=y
3947 CONFIG_USB_ARCH_HAS_OHCI=y
3948 +# CONFIG_USB_ARCH_HAS_EHCI is not set
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
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
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
4089 +# CONFIG_MMC_DEBUG is not set
4097 +# CONFIG_RTC_CLASS is not set
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
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
4117 # CONFIG_JBD_DEBUG is not set
4119 # CONFIG_REISERFS_FS is not set
4120 # CONFIG_JFS_FS is not set
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
4133 +CONFIG_INOTIFY_USER=y
4135 +# CONFIG_QFMT_V1 is not set
4140 +# CONFIG_AUTOFS_FS is not set
4142 +# CONFIG_FUSE_FS is not set
4145 # CD-ROM/DVD Filesystems
4146 @@ -643,25 +1019,40 @@
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
4158 +CONFIG_PROC_SYSCTL=y
4160 -CONFIG_DEVPTS_FS_XATTR=y
4161 -# CONFIG_DEVPTS_FS_SECURITY is not set
4163 -# CONFIG_TMPFS_XATTR is not set
4164 +# CONFIG_TMPFS_POSIX_ACL is not set
4165 # CONFIG_HUGETLB_PAGE is not set
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
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 @@
4194 # CONFIG_NFS_V3_ACL is not set
4196 +# CONFIG_NFS_DIRECTIO is not set
4197 # CONFIG_NFSD is not set
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
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
4223 +# Distributed Lock Manager
4225 +# CONFIG_DLM is not set
4228 +# Profiling support
4230 +# CONFIG_PROFILING is not set
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
4273 # CONFIG_DEBUG_ICEDCC is not set
4275 @@ -766,7 +1189,43 @@
4277 # Cryptographic options
4279 -# CONFIG_CRYPTO is not set
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 @@
4324 +CONFIG_BITREVERSE=y
4325 # CONFIG_CRC_CCITT is not set
4326 +# CONFIG_CRC16 is not set
4328 # CONFIG_LIBCRC32C is not set
4329 +CONFIG_AUDIT_GENERIC=y
4330 +CONFIG_ZLIB_INFLATE=y
4331 +CONFIG_ZLIB_DEFLATE=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
4339 config ARCH_AT91SAM9263
4342 +config ARCH_AT91SAM9RL
4347 # ----------------------------------------------------------
4350 Select this if you are using Sperry-Sun's KAFA board.
4353 + bool "Promwad Chub board"
4354 + depends on ARCH_AT91RM9200
4356 + Select this if you are using Promwad's Chub board.
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>
4366 + bool "KwikByte CAM60 board"
4367 + depends on ARCH_AT91SAM9260
4369 + Select this if you are using KwikByte's CAM60 board based on the Atmel AT91SAM9260.
4370 + <http://www.kwikbyte.com>
4374 # ----------------------------------------------------------
4375 @@ -145,6 +161,20 @@
4377 # ----------------------------------------------------------
4381 +comment "AT91SAM9RL Board Type"
4383 +config MACH_AT91SAM9RLEK
4384 + bool "Atmel AT91SAM9RL-EK Evaluation Kit"
4385 + depends on ARCH_AT91SAM9RL
4387 + Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit.
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
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
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.
4422 + bool "Timer/Counter Library"
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
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.
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
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
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
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
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
4484 obj-$(CONFIG_LEDS) += $(led-y)
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 = {
4516 .pmc_mask = 1 << AT91RM9200_ID_TC0,
4528 @@ -250,6 +267,33 @@
4531 /* --------------------------------------------------------------------
4532 + * Timer/Counter library initialization
4533 + * -------------------------------------------------------------------- */
4534 +#ifdef CONFIG_ATMEL_TCLIB
4538 +static struct atmel_tcblock at91rm9200_tcblocks[] = {
4540 + .physaddr = AT91RM9200_BASE_TCB0,
4541 + .irq = { AT91RM9200_ID_TC0, AT91RM9200_ID_TC1, AT91RM9200_ID_TC2 },
4542 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
4545 + .physaddr = AT91RM9200_BASE_TCB1,
4546 + .irq = { AT91RM9200_ID_TC3, AT91RM9200_ID_TC4, AT91RM9200_ID_TC5 },
4547 + .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
4551 +#define at91rm9200_tc_init() atmel_tc_init(at91rm9200_tcblocks, ARRAY_SIZE(at91rm9200_tcblocks))
4554 +#define at91rm9200_tc_init() do {} while(0)
4558 +/* --------------------------------------------------------------------
4559 * AT91RM9200 processor initialization
4560 * -------------------------------------------------------------------- */
4561 void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks)
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 */
4584 + 1, /* Parallel IO Controller A */
4585 + 1, /* Parallel IO Controller B */
4586 + 1, /* Parallel IO Controller C */
4587 + 1, /* Parallel IO Controller D */
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 @@
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"
4636 static u64 spi_dmamask = 0xffffffffUL;
4638 static struct resource spi_resources[] = {
4642 static struct platform_device at91rm9200_spi_device = {
4643 - .name = "at91_spi",
4644 + .name = SPI_DEVNAME,
4647 .dma_mask = &spi_dmamask,
4648 @@ -606,6 +617,32 @@
4652 +#if defined(CONFIG_NEW_LEDS)
4654 +static struct platform_device at91_leds = {
4655 + .name = "at91_leds",
4659 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
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);
4674 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
4678 /* --------------------------------------------------------------------
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 = {
4695 .pmc_mask = 1 << AT91SAM9260_ID_TC0,
4705 @@ -264,6 +269,33 @@
4708 /* --------------------------------------------------------------------
4709 + * Timer/Counter library initialization
4710 + * -------------------------------------------------------------------- */
4711 +#ifdef CONFIG_ATMEL_TCLIB
4715 +static struct atmel_tcblock at91sam9260_tcblocks[] = {
4717 + .physaddr = AT91SAM9260_BASE_TCB0,
4718 + .irq = { AT91SAM9260_ID_TC0, AT91SAM9260_ID_TC1, AT91SAM9260_ID_TC2 },
4719 + .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
4722 + .physaddr = AT91SAM9260_BASE_TCB1,
4723 + .irq = { AT91SAM9260_ID_TC3, AT91SAM9260_ID_TC4, AT91SAM9260_ID_TC5 },
4724 + .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
4728 +#define at91sam9260_tc_init() atmel_tc_init(at91sam9260_tcblocks, ARRAY_SIZE(at91sam9260_tcblocks))
4731 +#define at91sam9260_tc_init() do {} while(0)
4735 +/* --------------------------------------------------------------------
4736 * AT91SAM9260 processor initialization
4737 * -------------------------------------------------------------------- */
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 */
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 */
4784 0, /* Image Sensor Interface */
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 @@
4801 +#if defined(CONFIG_NEW_LEDS)
4803 +static struct platform_device at91_leds = {
4804 + .name = "at91_leds",
4808 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
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);
4823 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
4827 /* --------------------------------------------------------------------
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
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 = {
4854 .pmc_mask = 1 << AT91SAM9261_ID_TC0,
4866 @@ -230,6 +247,28 @@
4869 /* --------------------------------------------------------------------
4870 + * Timer/Counter library initialization
4871 + * -------------------------------------------------------------------- */
4872 +#ifdef CONFIG_ATMEL_TCLIB
4876 +static struct atmel_tcblock at91sam9261_tcblocks[] = {
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))
4887 +#define at91sam9261_tc_init() do {} while(0)
4891 +/* --------------------------------------------------------------------
4892 * AT91SAM9261 processor initialization
4893 * -------------------------------------------------------------------- */
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 */
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
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>
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[] = {
4973 static struct platform_device at91_lcdc_device = {
4974 - .name = "at91-fb",
4975 + .name = "atmel_lcdfb",
4978 .dma_mask = &lcdc_dmamask,
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)
4989 platform_device_register(&at91_lcdc_device);
4992 -void __init at91_add_device_lcdc(struct at91fb_info *data) {}
4993 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
4997 @@ -525,6 +528,32 @@
5001 +#if defined(CONFIG_NEW_LEDS)
5003 +static struct platform_device at91_leds = {
5004 + .name = "at91_leds",
5008 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
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);
5023 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
5027 /* --------------------------------------------------------------------
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
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 = {
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 = {
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 = {
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 = {
5091 .pmc_mask = 1 << AT91SAM9263_ID_UDP,
5092 @@ -142,20 +177,21 @@
5120 @@ -237,6 +273,28 @@
5123 /* --------------------------------------------------------------------
5124 + * Timer/Counter library initialization
5125 + * -------------------------------------------------------------------- */
5126 +#ifdef CONFIG_ATMEL_TCLIB
5130 +static struct atmel_tcblock at91sam9263_tcblocks[] = {
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))
5141 +#define at91sam9263_tc_init() do {} while(0)
5145 +/* --------------------------------------------------------------------
5146 * AT91SAM9263 processor initialization
5147 * -------------------------------------------------------------------- */
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 */
5177 0, /* Multimedia Card Interface 0 */
5178 0, /* Multimedia Card Interface 1 */
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 */
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 */
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
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 /* --------------------------------------------------------------------
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[] = {
5235 + .start = AT91SAM9263_BASE_AC97C,
5236 + .end = AT91SAM9263_BASE_AC97C + SZ_16K - 1,
5237 + .flags = IORESOURCE_MEM,
5240 + .start = AT91SAM9263_ID_AC97C,
5241 + .end = AT91SAM9263_ID_AC97C,
5242 + .flags = IORESOURCE_IRQ,
5246 +static struct platform_device at91sam9263_ac97_device = {
5250 + .dma_mask = &ac97_dmamask,
5251 + .coherent_dma_mask = 0xffffffff,
5252 + .platform_data = &ac97_data,
5254 + .resource = ac97_resources,
5255 + .num_resources = ARRAY_SIZE(ac97_resources),
5258 +void __init at91_add_device_ac97(struct atmel_ac97_data *data)
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 */
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);
5276 +void __init at91_add_device_ac97(struct atmel_ac97_data *data) {}
5280 +/* --------------------------------------------------------------------
5281 + * Image Sensor Interface
5282 + * -------------------------------------------------------------------- */
5284 +#if defined(CONFIG_VIDEO_AT91_ISI) || defined(CONFIG_VIDEO_AT91_ISI_MODULE)
5286 +struct resource isi_resources[] = {
5288 + .start = AT91SAM9263_BASE_ISI,
5289 + .end = AT91SAM9263_BASE_ISI + SZ_16K - 1,
5290 + .flags = IORESOURCE_MEM,
5293 + .start = AT91SAM9263_ID_ISI,
5294 + .end = AT91SAM9263_ID_ISI,
5295 + .flags = IORESOURCE_IRQ,
5299 +static struct platform_device at91sam9263_isi_device = {
5300 + .name = "at91_isi",
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 */
5326 +void __init at91_add_device_isi(void) {}
5330 +/* --------------------------------------------------------------------
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[] = {
5340 + .start = AT91SAM9263_LCDC_BASE,
5341 + .end = AT91SAM9263_LCDC_BASE + SZ_4K - 1,
5342 + .flags = IORESOURCE_MEM,
5345 + .start = AT91SAM9263_ID_LCDC,
5346 + .end = AT91SAM9263_ID_LCDC,
5347 + .flags = IORESOURCE_IRQ,
5351 +static struct platform_device at91_lcdc_device = {
5352 + .name = "atmel_lcdfb",
5355 + .dma_mask = &lcdc_dmamask,
5356 + .coherent_dma_mask = 0xffffffff,
5357 + .platform_data = &lcdc_data,
5359 + .resource = lcdc_resources,
5360 + .num_resources = ARRAY_SIZE(lcdc_resources),
5363 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
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);
5395 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
5399 +/* --------------------------------------------------------------------
5401 * -------------------------------------------------------------------- */
5403 @@ -594,6 +771,32 @@
5407 +#if defined(CONFIG_NEW_LEDS)
5409 +static struct platform_device at91_leds = {
5410 + .name = "at91_leds",
5414 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
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);
5429 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
5433 /* --------------------------------------------------------------------
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
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
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"
5463 +static struct map_desc at91sam9rl_io_desc[] __initdata = {
5465 + .virtual = AT91_VA_BASE_SYS,
5466 + .pfn = __phys_to_pfn(AT91_BASE_SYS),
5468 + .type = MT_DEVICE,
5472 +static struct map_desc at91sam9rl_sram_desc[] __initdata = {
5474 + .pfn = __phys_to_pfn(AT91SAM9RL_SRAM_BASE),
5475 + .type = MT_DEVICE,
5479 +/* --------------------------------------------------------------------
5481 + * -------------------------------------------------------------------- */
5484 + * The peripheral clocks.
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 = {
5630 + * The two programmable clocks.
5631 + * You must configure pin multiplexing to bring these signals out.
5633 +static struct clk pck0 = {
5635 + .pmc_mask = AT91_PMC_PCK0,
5636 + .type = CLK_TYPE_PROGRAMMABLE,
5639 +static struct clk pck1 = {
5641 + .pmc_mask = AT91_PMC_PCK1,
5642 + .type = CLK_TYPE_PROGRAMMABLE,
5646 +static void __init at91sam9rl_register_clocks(void)
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 +/* --------------------------------------------------------------------
5659 + * -------------------------------------------------------------------- */
5661 +static struct at91_gpio_bank at91sam9rl_gpio[] = {
5663 + .id = AT91SAM9RL_ID_PIOA,
5664 + .offset = AT91_PIOA,
5665 + .clock = &pioA_clk,
5667 + .id = AT91SAM9RL_ID_PIOB,
5668 + .offset = AT91_PIOB,
5669 + .clock = &pioB_clk,
5671 + .id = AT91SAM9RL_ID_PIOC,
5672 + .offset = AT91_PIOC,
5673 + .clock = &pioC_clk,
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
5694 +static struct atmel_tcblock at91sam9rl_tcblocks[] = {
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))
5705 +#define at91sam9rl_tc_init() do {} while(0)
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;
5726 + case AT91_CIDR_SRAMSIZ_16K:
5728 + sram_size = SZ_16K;
5731 + at91sam9rl_sram_desc->virtual = AT91_IO_VIRT_BASE - sram_size;
5732 + at91sam9rl_sram_desc->length = sram_size;
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).
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 */
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 */
5781 + 0, /* Touch Screen Controller */
5782 + 0, /* DMA Controller */
5783 + 2, /* USB Device High speed port */
5784 + 2, /* LCD Controller */
5785 + 6, /* AC97 Controller */
5792 + 0, /* Advanced Interrupt Controller */
5795 +void __init at91sam9rl_init_interrupts(unsigned int priority[NR_AIC_IRQS])
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
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
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 +/* --------------------------------------------------------------------
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[] = {
5849 + .start = AT91SAM9RL_BASE_MCI,
5850 + .end = AT91SAM9RL_BASE_MCI + SZ_16K - 1,
5851 + .flags = IORESOURCE_MEM,
5854 + .start = AT91SAM9RL_ID_MCI,
5855 + .end = AT91SAM9RL_ID_MCI,
5856 + .flags = IORESOURCE_IRQ,
5860 +static struct platform_device at91sam9rl_mmc_device = {
5861 + .name = "at91_mci",
5864 + .dma_mask = &mmc_dmamask,
5865 + .coherent_dma_mask = 0xffffffff,
5866 + .platform_data = &mmc_data,
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)
5878 + if (data->det_pin) {
5879 + at91_set_gpio_input(data->det_pin, 1);
5880 + at91_set_deglitch(data->det_pin, 1);
5883 + at91_set_gpio_input(data->wp_pin, 1);
5884 + if (data->vcc_pin)
5885 + at91_set_gpio_output(data->vcc_pin, 0);
5888 + at91_set_A_periph(AT91_PIN_PA2, 0);
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);
5902 + platform_device_register(&at91sam9rl_mmc_device);
5905 +void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
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",
5930 + .platform_data = &nand_data,
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;
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));
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);
5977 +void __init at91_add_device_nand(struct at91_nand_data *data) {}
5981 +/* --------------------------------------------------------------------
5983 + * -------------------------------------------------------------------- */
5985 +#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
5987 +static struct resource twi_resources[] = {
5989 + .start = AT91SAM9RL_BASE_TWI0,
5990 + .end = AT91SAM9RL_BASE_TWI0 + SZ_16K - 1,
5991 + .flags = IORESOURCE_MEM,
5994 + .start = AT91SAM9RL_ID_TWI0,
5995 + .end = AT91SAM9RL_ID_TWI0,
5996 + .flags = IORESOURCE_IRQ,
6000 +static struct platform_device at91sam9rl_twi_device = {
6001 + .name = "at91_i2c",
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);
6019 +void __init at91_add_device_i2c(void) {}
6023 +/* --------------------------------------------------------------------
6025 + * -------------------------------------------------------------------- */
6027 +#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
6028 +static u64 spi_dmamask = 0xffffffffUL;
6030 +static struct resource spi_resources[] = {
6032 + .start = AT91SAM9RL_BASE_SPI,
6033 + .end = AT91SAM9RL_BASE_SPI + SZ_16K - 1,
6034 + .flags = IORESOURCE_MEM,
6037 + .start = AT91SAM9RL_ID_SPI,
6038 + .end = AT91SAM9RL_ID_SPI,
6039 + .flags = IORESOURCE_IRQ,
6043 +static struct platform_device at91sam9rl_spi_device = {
6044 + .name = "atmel_spi",
6047 + .dma_mask = &spi_dmamask,
6048 + .coherent_dma_mask = 0xffffffff,
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)
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;
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);
6084 +void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) {}
6088 +/* --------------------------------------------------------------------
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[] = {
6098 + .start = AT91SAM9RL_LCDC_BASE,
6099 + .end = AT91SAM9RL_LCDC_BASE + SZ_4K - 1,
6100 + .flags = IORESOURCE_MEM,
6103 + .start = AT91SAM9RL_ID_LCDC,
6104 + .end = AT91SAM9RL_ID_LCDC,
6105 + .flags = IORESOURCE_IRQ,
6107 +#if defined(CONFIG_FB_INTSRAM)
6109 + .start = AT91SAM9RL_SRAM_BASE,
6110 + .end = AT91SAM9RL_SRAM_BASE + AT91SAM9RL_SRAM_SIZE - 1,
6111 + .flags = IORESOURCE_MEM,
6116 +static struct platform_device at91_lcdc_device = {
6117 + .name = "atmel_lcdfb",
6120 + .dma_mask = &lcdc_dmamask,
6121 + .coherent_dma_mask = 0xffffffff,
6122 + .platform_data = &lcdc_data,
6124 + .resource = lcdc_resources,
6125 + .num_resources = ARRAY_SIZE(lcdc_resources),
6128 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
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);
6160 +void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
6164 +/* --------------------------------------------------------------------
6166 + * -------------------------------------------------------------------- */
6168 +#if defined(CONFIG_LEDS)
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;
6182 +void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
6186 +#if defined(CONFIG_NEW_LEDS)
6188 +static struct platform_device at91_leds = {
6189 + .name = "at91_leds",
6193 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr)
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);
6208 +void __init at91_gpio_leds(struct at91_gpio_led *leds, int nr) {}
6212 +/* --------------------------------------------------------------------
6214 + * -------------------------------------------------------------------- */
6216 +#if defined(CONFIG_SERIAL_ATMEL)
6217 +static struct resource dbgu_resources[] = {
6219 + .start = AT91_VA_BASE_SYS + AT91_DBGU,
6220 + .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
6221 + .flags = IORESOURCE_MEM,
6224 + .start = AT91_ID_SYS,
6225 + .end = AT91_ID_SYS,
6226 + .flags = IORESOURCE_IRQ,
6230 +static struct atmel_uart_data dbgu_data = {
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",
6240 + .platform_data = &dbgu_data,
6241 + .coherent_dma_mask = 0xffffffff,
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[] = {
6255 + .start = AT91SAM9RL_BASE_US0,
6256 + .end = AT91SAM9RL_BASE_US0 + SZ_16K - 1,
6257 + .flags = IORESOURCE_MEM,
6260 + .start = AT91SAM9RL_ID_US0,
6261 + .end = AT91SAM9RL_ID_US0,
6262 + .flags = IORESOURCE_IRQ,
6266 +static struct atmel_uart_data uart0_data = {
6271 +static struct platform_device at91sam9rl_uart0_device = {
6272 + .name = "atmel_usart",
6275 + .platform_data = &uart0_data,
6276 + .coherent_dma_mask = 0xffffffff,
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[] = {
6292 + .start = AT91SAM9RL_BASE_US1,
6293 + .end = AT91SAM9RL_BASE_US1 + SZ_16K - 1,
6294 + .flags = IORESOURCE_MEM,
6297 + .start = AT91SAM9RL_ID_US1,
6298 + .end = AT91SAM9RL_ID_US1,
6299 + .flags = IORESOURCE_IRQ,
6303 +static struct atmel_uart_data uart1_data = {
6308 +static struct platform_device at91sam9rl_uart1_device = {
6309 + .name = "atmel_usart",
6312 + .platform_data = &uart1_data,
6313 + .coherent_dma_mask = 0xffffffff,
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[] = {
6327 + .start = AT91SAM9RL_BASE_US2,
6328 + .end = AT91SAM9RL_BASE_US2 + SZ_16K - 1,
6329 + .flags = IORESOURCE_MEM,
6332 + .start = AT91SAM9RL_ID_US2,
6333 + .end = AT91SAM9RL_ID_US2,
6334 + .flags = IORESOURCE_IRQ,
6338 +static struct atmel_uart_data uart2_data = {
6343 +static struct platform_device at91sam9rl_uart2_device = {
6344 + .name = "atmel_usart",
6347 + .platform_data = &uart2_data,
6348 + .coherent_dma_mask = 0xffffffff,
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[] = {
6362 + .start = AT91SAM9RL_BASE_US3,
6363 + .end = AT91SAM9RL_BASE_US3 + SZ_16K - 1,
6364 + .flags = IORESOURCE_MEM,
6367 + .start = AT91SAM9RL_ID_US3,
6368 + .end = AT91SAM9RL_ID_US3,
6369 + .flags = IORESOURCE_IRQ,
6373 +static struct atmel_uart_data uart3_data = {
6378 +static struct platform_device at91sam9rl_uart3_device = {
6379 + .name = "atmel_usart",
6382 + .platform_data = &uart3_data,
6383 + .coherent_dma_mask = 0xffffffff,
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)
6402 + /* Fill in list of supported UARTs */
6403 + for (i = 0; i < config->nr_tty; i++) {
6404 + switch (config->tty_map[i]) {
6406 + configure_usart0_pins();
6407 + at91_uarts[i] = &at91sam9rl_uart0_device;
6408 + at91_clock_associate("usart0_clk", &at91sam9rl_uart0_device.dev, "usart");
6411 + configure_usart1_pins();
6412 + at91_uarts[i] = &at91sam9rl_uart1_device;
6413 + at91_clock_associate("usart1_clk", &at91sam9rl_uart1_device.dev, "usart");
6416 + configure_usart2_pins();
6417 + at91_uarts[i] = &at91sam9rl_uart2_device;
6418 + at91_clock_associate("usart2_clk", &at91sam9rl_uart2_device.dev, "usart");
6421 + configure_usart3_pins();
6422 + at91_uarts[i] = &at91sam9rl_uart3_device;
6423 + at91_clock_associate("usart3_clk", &at91sam9rl_uart3_device.dev, "usart");
6426 + configure_dbgu_pins();
6427 + at91_uarts[i] = &at91sam9rl_dbgu_device;
6428 + at91_clock_associate("mck", &at91sam9rl_dbgu_device.dev, "usart");
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)
6447 + for (i = 0; i < ATMEL_MAX_UART; i++) {
6448 + if (at91_uarts[i])
6449 + platform_device_register(at91_uarts[i]);
6453 +void __init at91_init_serial(struct at91_uart_config *config) {}
6454 +void __init at91_add_device_serial(void) {}
6458 +/* -------------------------------------------------------------------- */
6461 + * These devices are always present and don't need any board-specific
6464 +static int __init at91_add_standard_devices(void)
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
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
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
6525 +static struct at91_uart_config __initdata cam60_uart_config = {
6526 + .console_tty = 0, /* ttyS0 */
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);
6549 +#if defined(CONFIG_MTD_DATAFLASH)
6550 +static struct mtd_partition __initdata cam60_spi_partitions[] = {
6558 + .offset = MTDPART_OFS_NXTBLK,
6559 + .size = 256 * 1056,
6563 + .offset = MTDPART_OFS_NXTBLK,
6564 + .size = 2222 * 1056,
6567 + .name = "file system",
6568 + .offset = MTDPART_OFS_NXTBLK,
6569 + .size = MTDPART_SIZ_FULL,
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)
6580 +static struct spi_board_info cam60_spi_devices[] = {
6581 +#if defined(CONFIG_MTD_DATAFLASH)
6582 + { /* DataFlash chip */
6583 + .modalias = "mtd_dataflash",
6585 + .max_speed_hz = 15 * 1000 * 1000,
6587 + .platform_data = &cam60_spi_flash_platform_data
6594 + * MACB Ethernet device
6596 +static struct __initdata at91_eth_data cam60_macb_data = {
6597 + .phy_irq_pin = AT91_PIN_PB5,
6602 +static void __init cam60_board_init(void)
6605 + at91_add_device_serial();
6607 + at91_add_device_spi(cam60_spi_devices, ARRAY_SIZE(cam60_spi_devices));
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,
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
6627 + * linux/arch/arm/mach-at91/board-chub.c
6629 + * Copyright (C) 2005 SAN People, adapted for Promwad Chub board
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
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
6672 +static struct at91_uart_config __initdata chub_uart_config = {
6673 + .console_tty = 0, /* ttyS0 */
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,
6697 +static struct mtd_partition __initdata chub_nand_partition[] = {
6699 + .name = "NAND Partition 1",
6701 + .size = MTDPART_SIZ_FULL,
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 = {
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",
6722 + .max_speed_hz = 15 * 1000 * 1000,
6726 +static void __init chub_board_init(void)
6729 + at91_add_device_serial();
6731 + at91_add_device_i2c();
6733 + at91_add_device_eth(&chub_eth_data);
6735 + at91_add_device_spi(chub_spi_devices, ARRAY_SIZE(chub_spi_devices));
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,
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
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>
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[] = {
6784 + .gpio = AT91_PIN_PB0,
6785 + .trigger = "heartbeat",
6789 + .gpio = AT91_PIN_PB1,
6790 + .trigger = "timer",
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)
6808 + res = request_irq(irq, switch_irq_handler, IRQF_SAMPLE_RANDOM | mode, name, NULL);
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);
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);
6824 + /* there's also SW2 at PA21, GPIO or TIOA2 */
6827 +static void __init csb300_switches(void) {}
6830 static void __init csb337_board_init(void)
6833 @@ -168,8 +219,12 @@
6834 at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices));
6836 at91_add_device_mmc(0, &csb337_mmc_data);
6838 + at91_gpio_leds(csb337_leds, ARRAY_SIZE(csb337_leds));
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
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 */
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,
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,
7012 +static struct platform_device dk_s1dfb_device = {
7013 + .name = "s1d13806fb",
7016 + .dma_mask = &s1dfb_dmamask,
7017 + .coherent_dma_mask = 0xffffffff,
7018 + .platform_data = &dk_s1dfb_pdata,
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);
7029 +static void __init dk_add_device_video(void) {}
7032 static struct at91_eth_data __initdata dk_eth_data = {
7033 .phy_irq_pin = AT91_PIN_PC4,
7036 #define DK_FLASH_SIZE 0x200000
7038 static struct physmap_flash_data dk_flash_data = {
7043 static struct resource dk_flash_resource = {
7044 @@ -170,6 +349,13 @@
7048 +static struct at91_gpio_led dk_leds[] = {
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);
7061 platform_device_register(&dk_flash);
7063 + at91_gpio_leds(dk_leds, ARRAY_SIZE(dk_leds));
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
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 */
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},
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,
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,
7238 +static struct platform_device ek_s1dfb_device = {
7239 + .name = "s1d13806fb",
7242 + .dma_mask = &s1dfb_dmamask,
7243 + .coherent_dma_mask = 0xffffffff,
7244 + .platform_data = &ek_s1dfb_pdata,
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);
7255 +static void __init ek_add_device_video(void) {}
7258 static struct at91_eth_data __initdata ek_eth_data = {
7259 .phy_irq_pin = AT91_PIN_PC4,
7262 #define EK_FLASH_SIZE 0x200000
7264 static struct physmap_flash_data ek_flash_data = {
7269 static struct resource ek_flash_resource = {
7270 @@ -132,6 +313,18 @@
7274 +static struct at91_gpio_led ek_leds[] = {
7277 + .gpio = AT91_PIN_PB1,
7278 + .trigger = "heartbeat",
7282 + .gpio = AT91_PIN_PB2,
7283 + .trigger = "timer",
7287 static void __init ek_board_init(void)
7289 @@ -158,8 +351,10 @@
7292 platform_device_register(&ek_flash);
7294 + at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
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
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[] = {
7322 + .start = AT91_CHIPSELECT_2,
7323 + .end = AT91_CHIPSELECT_2 + 0x200FF,
7324 + .flags = IORESOURCE_MEM
7326 + [1] = { /* reset pin */
7327 + .start = AT91_PIN_PC22,
7328 + .end = AT91_PIN_PC22,
7329 + .flags = IORESOURCE_MEM
7333 +static struct platform_device kb9202_lcd_device = {
7334 + .name = "s1d15605fb",
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);
7356 +static void __init kb9202_add_device_lcd(void) {}
7359 static void __init kb9202_board_init(void)
7363 at91_add_device_spi(NULL, 0);
7365 at91_add_device_nand(&kb9202_nand_data);
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
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",
7384 .max_speed_hz = 10 * 1000 * 1000,
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,
7396 at91_add_device_eth(&ek_macb_data);
7398 at91_add_device_mmc(0, &ek_mmc_data);
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
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>
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
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 = {
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 */
7464 +static void __init ek_add_device_ts(void) {}
7470 static struct spi_board_info ek_spi_devices[] = {
7471 @@ -204,6 +246,17 @@
7472 .max_speed_hz = 15 * 1000 * 1000,
7475 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
7477 + .modalias = "ads7846",
7479 + .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */
7481 + .platform_data = &ads_info,
7482 + .irq = AT91SAM9261_ID_IRQ0,
7483 + .controller_data = AT91_PIN_PA28, /* CS pin */
7486 #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
7487 { /* DataFlash card - jumper (J12) configurable to CS3 or CS0 */
7488 .modalias = "mtd_dataflash",
7490 .max_speed_hz = 15 * 1000 * 1000,
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",
7499 .max_speed_hz = 10 * 1000 * 1000,
7501 @@ -222,6 +275,65 @@
7508 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
7509 +static struct fb_videomode at91_tft_vga_modes[] = {
7511 + .name = "TX09D50VM1CCA @ 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,
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),
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)
7544 + at91_set_gpio_value(AT91_PIN_PA12, 0); /* power up */
7546 + at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */
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,
7560 +static struct atmel_lcdfb_info __initdata ek_lcdc_data;
7564 static void __init ek_board_init(void)
7567 @@ -241,10 +353,14 @@
7568 #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
7570 at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
7572 + ek_add_device_ts();
7575 at91_add_device_mmc(0, &ek_mmc_data);
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
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>
7600 + * ADS7846 Touchscreen
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 = {
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 */
7630 +static void __init ek_add_device_ts(void) {}
7636 static struct spi_board_info ek_spi_devices[] = {
7641 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
7643 + .modalias = "ads7846",
7645 + .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */
7647 + .platform_data = &ads_info,
7648 + .irq = AT91SAM9263_ID_IRQ1,
7654 @@ -112,6 +160,14 @@
7658 + * MACB Ethernet device
7660 +static struct at91_eth_data __initdata ek_macb_data = {
7668 static struct mtd_partition __initdata ek_nand_partition[] = {
7669 @@ -148,6 +204,73 @@
7676 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
7677 +static struct fb_videomode at91_tft_vga_modes[] = {
7679 + .name = "TX09D50VM1CCA @ 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,
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),
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)
7712 + at91_set_gpio_value(AT91_PIN_PD12, 0); /* power up */
7714 + at91_set_gpio_value(AT91_PIN_PD12, 1); /* power down */
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,
7728 +static struct atmel_lcdfb_info __initdata ek_lcdc_data;
7735 +static struct atmel_ac97_data ek_ac97_data = {
7736 + .reset_pin = AT91_PIN_PA13,
7740 static void __init ek_board_init(void)
7743 @@ -157,11 +280,22 @@
7745 at91_add_device_udc(&ek_udc_data);
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));
7750 + ek_add_device_ts();
7752 at91_add_device_mmc(1, &ek_mmc_data);
7754 + at91_add_device_eth(&ek_macb_data);
7756 at91_add_device_nand(&ek_nand_data);
7758 + at91_add_device_i2c();
7759 + /* LCD Controller */
7760 + at91_add_device_lcdc(&ek_lcdc_data);
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
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
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
7811 +static struct at91_uart_config __initdata ek_uart_config = {
7812 + .console_tty = 0, /* ttyS0 */
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);
7835 +static struct at91_mmc_data __initdata ek_mmc_data = {
7837 + .det_pin = AT91_PIN_PA15,
7838 +// .wp_pin = ... not connected
7839 +// .vcc_pin = ... not connected
7846 +static struct mtd_partition __initdata ek_nand_partition[] = {
7848 + .name = "Partition 1",
7850 + .size = 256 * 1024,
7853 + .name = "Partition 2",
7854 + .offset = 256 * 1024 ,
7855 + .size = MTDPART_SIZ_FULL,
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 = {
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,
7879 +static struct spi_board_info ek_spi_devices[] = {
7880 + { /* DataFlash chip */
7881 + .modalias = "mtd_dataflash",
7883 + .max_speed_hz = 15 * 1000 * 1000,
7892 +#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
7893 +static struct fb_videomode at91_tft_vga_modes[] = {
7895 + .name = "TX09D50VM1CCA @ 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,
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),
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)
7928 + at91_set_gpio_value(AT91_PIN_PA30, 0); /* power up */
7930 + at91_set_gpio_value(AT91_PIN_PA30, 1); /* power down */
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,
7944 +static struct atmel_lcdfb_info __initdata ek_lcdc_data;
7948 +static void __init ek_board_init(void)
7951 + at91_add_device_serial();
7953 + at91_add_device_i2c();
7955 + at91_add_device_nand(&ek_nand_data);
7957 + at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
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,
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
7978 #include <asm/arch/cpu.h>
7981 +#include "generic.h"
7985 @@ -254,6 +255,23 @@
7987 /*------------------------------------------------------------------------*/
7991 +int clk_must_disable(struct clk *clk)
7993 + if (!at91_suspend_entering_slow_clock())
7996 + while (clk->parent)
7997 + clk = clk->parent;
7998 + return clk != &clk32k;
8000 +EXPORT_SYMBOL(clk_must_disable);
8004 +/*------------------------------------------------------------------------*/
8006 #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
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
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);
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[]);
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);
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
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
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>
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)
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;
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) */
8123 + /* Wait TXcomplete ... */
8125 + Status = at91_twi_read(AT91_TWI_SR);
8126 + while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
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;
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) */
8156 + Status = at91_twi_read(AT91_TWI_SR);
8157 + while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
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) */
8166 + Status = at91_twi_read(AT91_TWI_SR);
8169 + if (Status & AT91_TWI_TXCOMP)
8170 + return ICS1523_ACCESS_OK;
8172 + return ICS1523_ACCESS_ERROR;
8175 +/* -----------------------------------------------------------------------------
8176 + * Initialization of the Clock Generator ICS1523
8177 + * ----------------------------------------------------------------------------- */
8179 +int at91_ics1523_init(void)
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);
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);
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 */
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 */
8242 + ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0x00);
8244 + /* Program 1ms temporizing period */
8247 + /* All done - cleanup */
8248 + iounmap(twi_base);
8249 + clk_disable(twi_clk);
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
8258 * Verify that all the clocks are correct before entering
8261 +#warning "SAM9260 only has 3 programmable clocks."
8262 static int at91_pm_verify_clocks(void)
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;
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
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");
8312 + printk("AT91: Power Management\n");
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
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.
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
8345 + ldr r3, [r1, #AT91_PMC_SR]
8346 + tst r3, #AT91_PMC_MCKRDY
8351 + .macro wait_moscrdy
8352 + mov r2, #MOSCRDY_TIMEOUT
8356 + ldr r3, [r1, #AT91_PMC_SR]
8357 + tst r3, #AT91_PMC_MOSCS
8362 + .macro wait_pllalock
8363 + mov r2, #PLLALOCK_TIMEOUT
8367 + ldr r3, [r1, #AT91_PMC_SR]
8368 + tst r3, #AT91_PMC_LOCKA
8373 + .macro wait_plladis
8374 + mov r2, #PLLALOCK_TIMEOUT
8378 + ldr r3, [r1, #AT91_PMC_SR]
8379 + tst r3, #AT91_PMC_LOCKA
8386 +ENTRY(at91rm9200_slow_clock)
8388 + ldr r1, .at91_va_base_sys
8390 + /* Put SDRAM in self refresh mode */
8394 +1: mcr p15, 0, r0, c7, c10, 4
8396 + str r2, [r1, #AT91_SDRAMC_SRR]
8398 + /* Save Master clock setting */
8400 + ldr r2, [r1, #AT91_PMC_MCKR]
8401 + str r2, .saved_mckr
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.
8413 + str r2, [r1, #AT91_PMC_MCKR]
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
8426 + str r2, [r1, #AT91_CKGR_PLLAR]
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]
8448 + /* Restore PLLA setting */
8450 + ldr r2, .saved_pllar
8451 + str r2, [r1, #AT91_CKGR_PLLAR]
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
8463 + * See eratta #2[78] for details.
8466 + ldr r2, .saved_mckr
8470 + str r2, [r1, #AT91_PMC_MCKR]
8474 +2: ldr r2, .saved_mckr
8475 + str r2, [r1, #AT91_PMC_MCKR]
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
8496 +#include <linux/clk.h>
8497 +#include <linux/kernel.h>
8498 +#include <linux/module.h>
8502 +static struct atmel_tcblock *blocks;
8503 +static int nblocks;
8506 + * Called from the processor-specific init to register the TC Blocks.
8508 +void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n)
8510 + blocks = tcblocks;
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
8518 +#define TC_PER_TCB 3
8520 +struct atmel_tcblock {
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
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
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.
8586 + bool "SPI driver (legacy) for AT91RM9200 processors"
8587 + depends on ARCH_AT91RM9200
8590 + The SPI driver gives access to this serial bus on the AT91RM9200
8594 + bool "SPI device interface (legacy) for AT91RM9200 processors"
8595 + depends on ARCH_AT91RM9200 && AT91_SPI
8598 + The SPI driver gives user mode access to this serial
8599 + bus on the AT91RM9200 processor.
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
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
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.
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>
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.
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 */
8678 + printk("SPI on\n");
8683 + /* Lock the SPI bus */
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.
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;
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 */
8708 + printk("SPI off\n");
8714 + * Perform a data transfer over the SPI bus
8716 +int spi_transfer(struct spi_transfer_list* list)
8718 + struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
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");
8727 + printk("SPI transfer start [%i]\n", list->nr_transfers);
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;
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);
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);
8778 + printk("SPI transfer end\n");
8784 +/* ......................................................................... */
8787 + * Handle interrupts from the SPI controller.
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;
8796 + printk("SPI interrupt %i\n", current_device);
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);
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
8847 +static int __init at91spi_probe(struct platform_device *pdev)
8850 + unsigned long scbr;
8851 + struct resource *res;
8853 + init_MUTEX(&spi_lock);
8855 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
8859 + if (!request_mem_region(res->start, res->end - res->start + 1, "at91_spi"))
8862 + spi_base = ioremap(res->start, res->end - res->start + 1);
8864 + release_mem_region(res->start, res->end - res->start + 1);
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);
8876 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SWRST); /* software reset of SPI controller */
8879 + * Calculate the correct SPI baud-rate divisor.
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)) {
8901 + iounmap(spi_base);
8902 + release_mem_region(res->start, res->end - res->start + 1);
8906 + at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
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 */
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);
8926 +static struct platform_driver at91spi_driver = {
8927 + .probe = at91spi_probe,
8928 + .remove = __devexit_p(at91spi_remove),
8930 + .name = "at91_spi",
8931 + .owner = THIS_MODULE,
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
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.
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>
8984 +#undef DEBUG_SPIDEV
8986 +/* ......................................................................... */
8989 + * Read or Write to SPI bus.
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;
9000 + unsigned int ofs, pagelen;
9007 + list = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
9014 + pgcount = ((unsigned long)buf+count+PAGE_SIZE-1)/PAGE_SIZE - (unsigned long)buf/PAGE_SIZE;
9016 + if (pgcount >= MAX_SPI_TRANSFERS) {
9021 + maplist = kmalloc (pgcount * sizeof (struct page *), GFP_KERNEL);
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);
9039 +#ifdef DEBUG_SPIDEV
9040 + printk("spidev_rd_rw: %i %i\n", count, pgcount);
9043 + /* Set default return value = transfer length */
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
9052 + ofs = (unsigned long) buf & (PAGE_SIZE -1);
9053 + pagelen = PAGE_SIZE - ofs;
9054 + if (count < pagelen)
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]);
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();
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)
9096 + // TODO: This interface can be used to configure the SPI bus.
9097 + // Configurable options could include: Speed, Clock Polarity, Clock Phase
9101 + return -ENOIOCTLCMD;
9106 + * Open the SPI device
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)
9116 + * 'private_data' is actually a pointer, but we overload it with the
9117 + * value we want to store.
9119 + file->private_data = (void *)spi_device;
9125 + * Close the SPI device
9127 +static int spidev_close(struct inode *inode, struct file *file)
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
9147 +static int __init at91_spidev_init(void)
9149 +#ifdef CONFIG_DEVFS_FS
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);
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);
9164 + printk(KERN_INFO "AT91 SPI driver loaded\n");
9170 + * Remove the SPI /dev interface driver
9172 +static void __exit at91_spidev_exit(void)
9174 +#ifdef CONFIG_DEVFS_FS
9176 + for (i = 0; i < NR_SPI_DEVICES; i++) {
9177 + devfs_remove("spi/%d", i);
9180 + devfs_remove("spi");
9183 + if (unregister_chrdev(SPI_MAJOR, "spi")) {
9184 + printk(KERN_ERR "at91_spidev: Unable to release major %d for SPI bus\n", SPI_MAJOR);
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
9199 This supports the use of the I2C interface on Atmel AT91
9202 +config I2C_AT91_CLOCKRATE
9203 + prompt "Atmel AT91 I2C/TWI clock-rate"
9204 + depends on I2C_AT91
9208 + Set the AT91 I2C/TWI clock-rate.
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.
9218 + tristate "PCA9564"
9220 + select I2C_ALGOPCA
9222 + This driver support the Philips PCA 9564 Parallel bus to I2C
9226 tristate "PCA9564 on an ISA bus"
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
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
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;
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 */
9263 while (cdiv > 255) {
9268 - if (cpu_is_at91rm9200()) { /* AT91RM9200 Errata #22 */
9270 - printk(KERN_ERR "AT91 I2C: Invalid TWI_CLOCK value!\n");
9273 + if (cpu_is_at91rm9200() && (ckdiv > 5)) { /* AT91RM9200 Errata #22 */
9274 + printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
9276 + } else if (ckdiv > 7) {
9277 + printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
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
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.
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
9333 +#define PCA_IO_SIZE 4
9335 +static void __iomem *base_addr;
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)
9349 +static void pca_writebyte(struct i2c_algo_pca_data *adap, int reg, int val)
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);
9356 + outb(val, base_addr + (reg << REG_SHIFT));
9359 +static int pca_readbyte(struct i2c_algo_pca_data *adap, int reg)
9364 + res = inb(base_addr + (reg << REG_SHIFT));
9367 + static char *names[] = { "STA", "DAT", "ADR", "CON" };
9368 + printk("*** read %s => %#04x\n", names[reg], res);
9374 +static int pca_waitforinterrupt(struct i2c_algo_pca_data *adap)
9379 + ret = wait_event_interruptible(pca_wait,
9380 + pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI);
9382 + while ((pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0)
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);
9420 + if (!request_mem_region(res->start, PCA_IO_SIZE, "PCA9564"))
9423 + base_addr = ioremap(res->start, PCA_IO_SIZE);
9424 + if (base_addr == NULL)
9427 + irq = platform_get_irq(pdev, 0);
9429 + if (request_irq(irq, pca_handler, 0, "pca9564", NULL) < 0) {
9430 + printk(KERN_ERR "i2c-pca: Request irq%d failed\n", irq);
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");
9447 + free_irq(irq, &pca_i2c_ops);
9450 + iounmap(base_addr);
9453 + release_mem_region(res->start, PCA_IO_SIZE);
9457 +static int __devexit pca_i2c_remove(struct platform_device *pdev)
9459 + struct resource *res;
9461 + i2c_del_adapter(&pca_i2c_ops);
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);
9474 +static struct platform_driver pca_i2c_driver = {
9475 + .probe = pca_i2c_probe,
9476 + .remove = __devexit_p(pca_i2c_remove),
9478 + .name = "pca9564",
9479 + .owner = THIS_MODULE,
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
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);
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
9555 This option enables support for the Soekris net4801 and net4826 error
9559 + tristate "LED support using AT91 GPIOs"
9560 + depends on LEDS_CLASS && ARCH_AT91 && !LEDS
9562 + This option enables support for LEDs connected to GPIO lines
9563 + on AT91-based boards.
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
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
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
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.
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 */
9604 + struct led_classdev cdev;
9605 + struct list_head list;
9606 + struct at91_gpio_led *led_data;
9610 + * Change the state of the LED.
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? */
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);
9635 +static int __init at91_led_probe(struct platform_device *pdev)
9638 + struct at91_gpio_led *pdata = pdev->dev.platform_data;
9640 + struct at91_led *led;
9645 + nr_leds = pdata->index; /* first index stores number of LEDs */
9647 + while (nr_leds--) {
9648 + led = kzalloc(sizeof(struct at91_led), GFP_KERNEL);
9650 + dev_err(&pdev->dev, "No memory for device\n");
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);
9661 + dev_err(&pdev->dev, "led_classdev_register failed - %d\n", status);
9663 + at91_led_remove(pdev);
9666 + list_add(&led->list, &at91_led_list);
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);
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);
9693 +#define at91_led_suspend NULL
9694 +#define at91_led_resume NULL
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,
9703 + .name = "at91_leds",
9704 + .owner = THIS_MODULE,
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
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))
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) {
9762 if (int_status & AT91_MCI_UNRE)
9763 pr_debug("MMC: Underrun error\n");
9764 if (int_status & AT91_MCI_OVRE)
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;
9778 + device_init_wakeup(&pdev->dev, 1);
9781 * monitor card insertion/removal if we can
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);
9799 + if (device_may_wakeup(&pdev->dev))
9800 + enable_irq_wake(host->board->det_pin);
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);
9812 + if (device_may_wakeup(&pdev->dev))
9813 + disable_irq_wake(host->board->det_pin);
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.
9826 +config MTD_AT91_DATAFLASH
9827 + tristate "AT91RM9200 DataFlash AT45DBxxx (legacy driver)"
9828 + depends on MTD && ARCH_AT91RM9200 && AT91_SPI
9830 + This enables access to the DataFlash (AT45DBxxx) on the AT91RM9200.
9831 + If you have such a board, say 'Y'.
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
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
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",
9910 + .size = 1 * 32 * 8 * 528, /* 1st sector = 32 blocks * 8 pages * 528 bytes */
9911 + .mask_flags = MTD_WRITEABLE, /* read-only */
9915 + .offset = MTDPART_OFS_NXTBLK,
9916 + .size = 6 * 32 * 8 * 528, /* 6 sectors */
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",
9930 + .size = 1 * 64 * 8 * 528, /* 1st sector = 64 blocks * 8 pages * 528 bytes */
9931 + .mask_flags = MTD_WRITEABLE, /* read-only */
9935 + .offset = MTDPART_OFS_NXTBLK,
9936 + .size = 4 * 64 * 8 * 528, /* 4 sectors */
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[] =
9951 + size: 16 * 1056, /* 160 Kb */
9952 + mask_flags: MTD_WRITEABLE, /* read-only */
9956 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
9957 + size: 128 * 1056, /* 1 MB */
9961 + offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
9962 + size: 1024 * 1056, /* 1 MB */
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",
9978 + .size = 12 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
9979 + .mask_flags = MTD_WRITEABLE, /* read-only */
9982 + .name = "configuration",
9983 + .offset = MTDPART_OFS_NXTBLK,
9984 + .size = 20 * 1056,
9988 + .offset = MTDPART_OFS_NXTBLK,
9989 + .size = 1520 * 1056,
9992 + .name = "filesystem",
9993 + .offset = MTDPART_OFS_NXTBLK,
9994 + .size = MTDPART_SIZ_FULL,
10000 +static struct mtd_partition static_partitions_8M[] =
10003 + .name = "bootloader",
10005 + .size = 1 * 32 * 8 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
10006 + .mask_flags = MTD_WRITEABLE, /* read-only */
10009 + .name = "kernel",
10010 + .offset = MTDPART_OFS_NXTBLK,
10011 + .size = 5 * 32 * 8 * 1056, /* 5 sectors */
10014 + .name = "filesystem",
10015 + .offset = MTDPART_OFS_NXTBLK,
10016 + .size = MTDPART_SIZ_FULL, /* rest = 26 sectors */
10021 +static const char *part_probes[] = { "cmdlinepart", NULL, };
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.
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.
10058 +static void at91_dataflash_waitready(void)
10060 + char* command = kmalloc(2, GFP_KERNEL);
10066 + command[0] = OP_READ_STATUS;
10069 + do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
10070 + } while ((command[1] & 0x80) == 0);
10076 + * Return the status of the DataFlash device.
10078 +static unsigned short at91_dataflash_status(void)
10080 + unsigned short status;
10081 + char* command = kmalloc(2, GFP_KERNEL);
10086 + command[0] = OP_READ_STATUS;
10089 + do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
10090 + status = command[1];
10096 +/* ......................................................................... */
10099 + * Erase blocks of flash.
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;
10107 +#ifdef DEBUG_DATAFLASH
10108 + printk("dataflash_erase: addr=%i len=%i\n", instr->addr, instr->len);
10111 + /* Sanity checks */
10112 + if (instr->addr + instr->len > mtd->size)
10114 + if ((instr->len % mtd->erasesize != 0) || (instr->len % priv->page_size != 0))
10116 + if ((instr->addr % priv->page_size) != 0)
10119 + command = kmalloc(4, GFP_KERNEL);
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;
10131 +#ifdef DEBUG_DATAFLASH
10132 + printk("ERASE: (%x) %x %x %x [%i]\n", command[0], command[1], command[2], command[3], pageaddr);
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;
10148 + /* Inform MTD subsystem that erase is complete */
10149 + instr->state = MTD_ERASE_DONE;
10150 + if (instr->callback)
10151 + instr->callback(instr);
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
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;
10169 +#ifdef DEBUG_DATAFLASH
10170 + printk("dataflash_read: %lli .. %lli\n", from, from+len);
10175 + /* Sanity checks */
10178 + if (from + len > mtd->size)
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);
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]);
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);
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
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;
10222 + char* tmpbuf = NULL;
10224 +#ifdef DEBUG_DATAFLASH
10225 + printk("dataflash_write: %lli .. %lli\n", to, to+len);
10230 + /* Sanity checks */
10233 + if (to + len > mtd->size)
10236 + command = kmalloc(4, GFP_KERNEL);
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;
10246 + writebuf = (u_char *)buf;
10249 + /* Allocate temporary buffer */
10250 + tmpbuf = kmalloc(priv->page_size, GFP_KERNEL);
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);
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;
10271 +#ifdef DEBUG_DATAFLASH
10272 + printk("TRANSFER: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
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]);
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;
10296 +#ifdef DEBUG_DATAFLASH
10297 + printk("COMPARE: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
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);
10310 + remaining = remaining - writelen;
10313 + writebuf += writelen;
10314 + *retlen += writelen;
10316 + if (remaining > priv->page_size)
10317 + writelen = priv->page_size;
10319 + writelen = remaining;
10322 + /* Release SPI bus */
10323 + spi_release_bus(priv->spi);
10330 +/* ......................................................................... */
10333 + * Initialize and register DataFlash device with MTD subsystem.
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;
10345 + if (nr_devices >= DATAFLASH_MAX_DEVICES) {
10346 + printk(KERN_ERR "at91_dataflash: Too many devices detected\n");
10350 + device = kmalloc(sizeof(struct mtd_info) + strlen(name) + 8, GFP_KERNEL);
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);
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;
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);
10387 + if (mtd_parts_nr <= 0) {
10388 + switch (IDsize) {
10390 + mtd_parts = static_partitions_2M;
10391 + mtd_parts_nr = ARRAY_SIZE(static_partitions_2M);
10394 + mtd_parts = static_partitions_4M;
10395 + mtd_parts_nr = ARRAY_SIZE(static_partitions_4M);
10398 + mtd_parts = static_partitions_8M;
10399 + mtd_parts_nr = ARRAY_SIZE(static_partitions_8M);
10404 + if (mtd_parts_nr > 0) {
10405 +#ifdef DATAFLASH_ALWAYS_ADD_DEVICE
10406 + add_mtd_device(device);
10408 + return add_mtd_partitions(device, mtd_parts, mtd_parts_nr);
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
10427 +static int __init at91_dataflash_detect(int channel)
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);
10440 + case 0x14: /* 0 1 0 1 */
10441 + res = add_dataflash(channel, "AT45DB021B", SZ_256K, 1025, 264, 9);
10443 + case 0x1c: /* 0 1 1 1 */
10444 + res = add_dataflash(channel, "AT45DB041B", SZ_512K, 2048, 264, 9);
10446 + case 0x24: /* 1 0 0 1 */
10447 + res = add_dataflash(channel, "AT45DB081B", SZ_1M, 4096, 264, 9);
10449 + case 0x2c: /* 1 0 1 1 */
10450 + res = add_dataflash(channel, "AT45DB161B", SZ_2M, 4096, 528, 10);
10452 + case 0x34: /* 1 1 0 1 */
10453 + res = add_dataflash(channel, "AT45DB321B", SZ_4M, 8192, 528, 10);
10455 + case 0x3c: /* 1 1 1 1 */
10456 + res = add_dataflash(channel, "AT45DB642", SZ_8M, 8192, 1056, 11);
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);
10463 + printk(KERN_ERR "at91_dataflash: Unknown device (%x)\n", status & 0x3c);
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)
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);
10487 +static void __exit at91_dataflash_exit(void)
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]);
10496 + del_mtd_device(mtd_devices[i]);
10498 + kfree(mtd_devices[i]->priv);
10499 + kfree(mtd_devices[i]);
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
10517 at91_set_gpio_value(host->board->enable_pin, 1);
10520 +#ifdef CONFIG_MTD_PARTITIONS
10521 +const char *part_probes[] = { "cmdlinepart", NULL };
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
10533 + mtd->name = "at91_nand";
10534 + num_partitions = parse_mtd_partitions(mtd, part_probes, &partitions, 0);
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)))
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)))
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)))
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);
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);
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;
10616 + struct resource *res;
10619 dev = alloc_etherdev(sizeof(struct at91_private));
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);
10628 + free_netdev(dev);
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);
10643 + ret = register_netdev(dev);
10645 free_irq(dev->irq, dev);
10647 dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);
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);
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);
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);
10766 - disable_irq_wake(board->det_pin);
10767 - if (board->irq_pin)
10768 - disable_irq_wake(board->irq_pin);
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);
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
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
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>
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
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;
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;
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);
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.*/
10897 + UART_PUT_IER(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
10898 + UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
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);
10915 + UART_PUT_IDR(port, ATMEL_US_RXRDY);
10919 @@ -248,6 +293,134 @@
10923 + * Receive data via the PDC. A buffer has been fulled.
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 */
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.
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);
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.
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.
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;
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.
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;
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;
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 */
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);
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)
11088 + if (atmel_port->use_dma_rx) {
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) {
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);
11103 + pdc->dma_addr = dma_map_single(port->dev, pdc->buf, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
11104 + pdc->dma_size = PDC_BUFFER_SIZE;
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;
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 */
11143 + UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
11147 @@ -431,6 +667,31 @@
11148 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
11151 + * Ensure everything is stopped.
11153 + atmel_stop_rx(port);
11154 + atmel_stop_tx(port);
11157 + * Shut-down the DMA.
11159 + if (atmel_port->use_dma_rx) {
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);
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);
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 */
11197 + mode |= ATMEL_US_USCLKS_MCK_DIV8;
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;
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);
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
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
11254 tristate "Atmel SPI Controller"
11255 depends on (ARCH_AT91 || AVR32) && SPI_MASTER
11256 + select SPI_AT91_MANUAL_CS if ARCH_AT91RM9200
11258 This selects a driver for the Atmel SPI Controller, present on
11259 many AT32 (AVR32) and AT91 (ARM) chips.
11261 inexpensive battery powered microcontroller evaluation board.
11262 This same cable can be used to flash new firmware.
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
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
11276 + depends on ARCH_AT91RM9200
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.
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
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
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.
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.
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 ...
11354 +#define spi_miso_bit AT91_PIN_PA0
11355 +#define spi_mosi_bit AT91_PIN_PA1
11356 +#define spi_sck_bit AT91_PIN_PA2
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 */
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 ...
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)
11430 + struct spi_master *master;
11431 + struct at91_spi *at91_spi;
11433 + if (pdev->id != 0) /* SPI0 bus */
11436 + master = spi_alloc_master(&pdev->dev, sizeof *at91_spi);
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);
11457 + (void) spi_master_put(at91_spi->bitbang.master);
11462 +static int __exit at91_spi_remove(struct platform_device *pdev)
11464 + struct at91_spi *at91_spi = platform_get_drvdata(pdev);
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);
11475 +static struct platform_driver at91_spi_driver = {
11476 + .probe = at91_spi_probe,
11477 + .remove = __exit_p(at91_spi_remove),
11479 + .name = "at91_spi",
11480 + .owner = THIS_MODULE,
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
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)
11526 - || at91_suspend_entering_slow_clock()) {
11527 + || clk_must_disable(udc->fclk)) {
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);
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"
11553 + default m if MACH_KB9200
11554 + select FB_CFB_FILLRECT
11555 + select FB_CFB_COPYAREA
11556 + select FB_CFB_IMAGEBLIT
11558 + Build in support for the S1D15605 Epson Research 128x64
11559 + LCD controller as a framebuffer.
11562 tristate "Epson S1D13XXX framebuffer support"
11564 @@ -674,6 +685,22 @@
11565 working with S1D13806). Product specs at
11566 <http://www.erd.epson.com/vdc/html/legacy_13xxx.htm>
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
11575 + This enables support for the AT91/AT32 LCD Controller.
11578 + bool "Frame Buffer in internal SRAM"
11579 + depends on FB_ATMEL && ARCH_AT91SAM9261
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.
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
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
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
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
11638 +#define ATMEL_LCDC_FIFO_SIZE 512
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)
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);
11675 +static struct fb_fix_screeninfo atmel_lcdfb_fix __initdata = {
11676 + .type = FB_TYPE_PACKED_PIXELS,
11677 + .visual = FB_VISUAL_TRUECOLOR,
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);
11712 + * atmel_lcdfb_alloc_video_memory - Allocate framebuffer memory
11713 + * @sinfo: the frame buffer to allocate memory for
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) {
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.
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));
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) {
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;
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;
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;
11808 + dev_err(dev, "color depth %d not supported\n",
11809 + var->bits_per_pixel);
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.
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;
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))
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);
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)
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");
11952 +static inline unsigned int chan_to_field(unsigned int chan, const struct fb_bitfield *bf)
11955 + chan >>= 16 - bf->length;
11956 + return chan << bf->offset;
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.
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;
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;
12011 + case FB_VISUAL_PSEUDOCOLOR:
12012 + if (regno < 256) {
12013 + val = ((red >> 11) & 0x001f);
12014 + val |= ((green >> 6) & 0x03e0);
12015 + val |= ((blue >> 1) & 0x7c00);
12018 + * TODO: intensity bit. Maybe something like
12019 + * ~(red[10] ^ green[10] ^ blue[10]) & 1
12022 + lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val);
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);
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;
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;
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);
12080 + dev_err(info->device, "Alloc color map failed\n");
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;
12110 + dev_dbg(dev, "%s BEGIN\n", __func__);
12113 + info = framebuffer_alloc(sizeof(struct atmel_lcdfb_info), dev);
12115 + dev_err(dev, "cannot allocate memory\n");
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;
12130 + dev_err(dev, "cannot get default configuration\n");
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);
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);
12163 + dev_err(dev, "no suitable video mode found\n");
12168 + regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
12170 + dev_err(dev, "resources unusable\n");
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;
12182 + /* Initialize video memory */
12183 + map = platform_get_resource(pdev, IORESOURCE_MEM, 1);
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)) {
12194 + info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
12195 + if (!info->screen_base)
12196 + goto release_intmem;
12198 + /* alocate memory buffer */
12199 + ret = atmel_lcdfb_alloc_video_memory(sinfo);
12201 + dev_err(dev, "cannot allocate framebuffer: %d\n", ret);
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)) {
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;
12223 + ret = request_irq(sinfo->irq_base, atmel_lcdfb_interrupt, 0, pdev->name, info);
12225 + dev_err(dev, "request_irq failed: %d\n", ret);
12229 + ret = atmel_lcdfb_init_fbinfo(sinfo);
12231 + dev_err(dev, "init fbinfo failed: %d\n", ret);
12232 + goto unregister_irqs;
12236 + * This makes sure that our colour bitfield
12237 + * descriptors are correctly initialised.
12239 + atmel_lcdfb_check_var(&info->var, info);
12241 + ret = fb_set_var(info, &info->var);
12243 + dev_warn(dev, "unable to set display parameters\n");
12247 + dev_set_drvdata(dev, info);
12250 + * Tell the world that we're ready to go
12252 + ret = register_framebuffer(info);
12254 + dev_err(dev, "failed to register framebuffer device: %d\n", ret);
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);
12269 + fb_dealloc_cmap(&info->cmap);
12271 + free_irq(sinfo->irq_base, info);
12273 + iounmap(sinfo->mmio);
12275 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
12278 + iounmap(info->screen_base);
12280 + atmel_lcdfb_free_video_memory(sinfo);
12284 + release_mem_region(info->fix.smem_start, info->fix.smem_len);
12286 + atmel_lcdfb_stop_clock(sinfo);
12287 + clk_put(sinfo->lcdc_clk);
12289 + if (sinfo->bus_clk)
12290 + clk_put(sinfo->bus_clk);
12292 + framebuffer_release(info);
12294 + dev_dbg(dev, "%s FAILED\n", __func__);
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;
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);
12322 + atmel_lcdfb_free_video_memory(sinfo);
12325 + dev_set_drvdata(dev, NULL);
12326 + framebuffer_release(info);
12331 +static struct platform_driver atmel_lcdfb_driver = {
12332 + .remove = __exit_p(atmel_lcdfb_remove),
12334 + .name = "atmel_lcdfb",
12335 + .owner = THIS_MODULE,
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
12360 If you have a Frontpath ProGear say Y to enable the
12363 +config BACKLIGHT_KB920x
12364 + tristate "KwikByte KB9202 Backlight Driver"
12365 + depends on BACKLIGHT_CLASS_DEVICE && MACH_KB9200
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
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
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.
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)
12419 + if (bd->props.fb_blank != FB_BLANK_UNBLANK)
12421 + if (kb9202bl_suspended)
12424 + if ((!current_intensity) && (bd->props.power == FB_BLANK_UNBLANK))
12427 + spin_lock_irqsave(&bl_lock, flags);
12429 + gpio_set_value(AT91_PIN_PC23, 1);
12431 + gpio_set_value(AT91_PIN_PC23, 0);
12432 + spin_unlock_irqrestore(&bl_lock, flags);
12434 + current_intensity = intensity;
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);
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);
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);
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);
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);
12498 +#define kb9202bl_suspend NULL
12499 +#define kb9202bl_resume NULL
12502 +static struct platform_driver kb9202bl_driver = {
12503 + .probe = kb9202bl_probe,
12504 + .remove = kb9202bl_remove,
12505 + .suspend = kb9202bl_suspend,
12506 + .resume = kb9202bl_resume,
12508 + .name = "kb9202-bl",
12509 + .owner = THIS_MODULE,
12513 +static struct platform_device *kb9202bl_device;
12515 +static int __init kb9202bl_init(void)
12519 + ret = platform_driver_register(&kb9202bl_driver);
12521 + kb9202bl_device = platform_device_alloc("kb9202-bl", -1);
12522 + if (!kb9202bl_device)
12525 + ret = platform_device_add(kb9202bl_device);
12527 + platform_device_put(kb9202bl_device);
12528 + platform_driver_unregister(&kb9202bl_driver);
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
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
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
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
12585 +#define MSG(string, args...) printk("s1d15605fb:" string, ##args)
12587 +#define MSG(string, args...)
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>
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,
12638 + .accel = FB_ACCEL_NONE,
12641 +struct s1d15605fb_info {
12642 + struct fb_info *info;
12644 + unsigned long reset_pin;
12645 + struct platform_device *pdev;
12649 + * LCD device interface
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.
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;
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)
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;
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);
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
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);
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.
12772 +static int s1d15605_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
12775 + * Some very basic checks
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)
12792 + if (((var->yres_virtual * var->bits_per_pixel * var->yres_virtual) >> 3) >
12793 + ACTUALVIDEOMEMSIZE)
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.
12801 + switch (var->bits_per_pixel) {
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;
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;
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.
12824 +static int s1d15605_set_par(struct fb_info *info)
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;
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.
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 */
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
12861 +static int s1d15605_blank(int blank, struct fb_info *info)
12863 +#ifdef CONFIG_PMAC_BACKLIGHT
12865 + pmac_backlight->props.power = FB_BLANK_POWERDOWN;
12867 + pmac_backlight->props.power = FB_BLANK_UNBLANK;
12868 + backlight_update_status(pmac_backlight);
12875 + * Pan or Wrap the Display
12877 + * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag
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
12889 + if (var->xoffset + var->xres > info->var.xres_virtual ||
12890 + var->yoffset + var->yres > info->var.yres_virtual)
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;
12898 + info->var.vmode &= ~FB_VMODE_YWRAP;
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
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];
12937 + if (p > info->fix.smem_len)
12939 + if (count >= info->fix.smem_len)
12940 + count = info->fix.smem_len;
12942 + if (count + p > info->fix.smem_len) {
12943 + count = info->fix.smem_len - p;
12949 + base_addr = info->screen_base;
12950 + count -= copy_from_user(base_addr+p, buf, count);
12955 + s1d15605_update(info);
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);
12985 + // FIXME - now someone has a link to our page, start periodically blitting
12986 + // latest updates to the actual device.
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);
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,
13029 +static void s1d15605_device_init(struct s1d15605fb_info *sinfo) {
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);
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;
13066 + MSG("%s\n", __func__);
13068 + if (!(info = framebuffer_alloc(sizeof(struct s1d15605fb_info), dev))) {
13069 + dev_err(dev, "Cannot allocate framebuffer struct\n");
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");
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);
13092 + dev_err(dev, "Cannot resize framebuffer: %d\n", ret);
13096 + if (!request_mem_region(info->fix.mmio_start,
13097 + info->fix.mmio_len, pdev->name)) {
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);
13122 + dev_err(dev, "Failed to register framebuffer device: %d\n", ret);
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);
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");
13144 + iounmap(sinfo->mmio);
13146 + release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
13148 + kfree(info->screen_base);
13151 + framebuffer_release(info);
13153 + dev_dbg(dev, "%s FAILED\n", __func__);
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;
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);
13180 +static struct platform_driver s1d15605fb_driver = {
13181 + .probe = s1d15605fb_probe,
13182 + .remove = s1d15605fb_remove,
13184 + .name = "s1d15605fb",
13185 + .owner = THIS_MODULE,
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
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.
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)
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
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
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 */
13310 - * PIO pin definitions (peripheral A/B multiplexing).
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 */
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 */
13499 - * PIO pin definitions (peripheral A/B multiplexing).
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
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 */
13528 - * PIO pin definitions (peripheral A/B multiplexing).
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 */
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 */
13727 - * PIO pin definitions (peripheral A/B multiplexing).
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
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
13752 +#ifndef AT91SAM9RL_H
13753 +#define AT91SAM9RL_H
13756 + * Peripheral identifiers/interrupts.
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.
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)
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.
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 */
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
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
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)
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
13954 extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data);
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);
13970 +struct atmel_ac97_data {
13971 + u8 reset_pin; /* reset */
13973 +extern void __init at91_add_device_ac97(struct atmel_ac97_data *data);
13976 +extern void __init at91_add_device_isi(void);
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);
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
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);
14006 #define cpu_is_at91sam9263() (0)
14009 +#ifdef CONFIG_ARCH_AT91SAM9RL
14010 +#define cpu_is_at91sam9rl() (at91_cpu_identify() == ARCH_ID_AT91SAM9RL64)
14012 +#define cpu_is_at91sam9rl() (0)
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
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>
14026 #error "Unsupported AT91 processor"
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);
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
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.
14067 +//* 1.0 08/28/02 ED : Creation
14068 +//* 1.2 13/01/03 FB : Update on lib V3
14069 +//*----------------------------------------------------------------------------
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
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);
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
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
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.
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.
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
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);
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
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)
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
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);
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.
14356 +int clk_must_disable(struct clk *clk);
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
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
14395 +#ifndef __ATMEL_LCDC_H__
14396 +#define __ATMEL_LCDC_H__
14398 + /* LCD Controller info data structure */
14399 +struct atmel_lcdfb_info {
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
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"
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)
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.