linux: added support for at91sam9263ek in 2.6.30 (not default)
authorMarcin Juszkiewicz <marcin@juszkiewicz.com.pl>
Tue, 14 Jul 2009 19:57:03 +0000 (21:57 +0200)
committerMarcin Juszkiewicz <marcin@juszkiewicz.com.pl>
Tue, 14 Jul 2009 20:09:09 +0000 (22:09 +0200)
Board boots fine with this kernel and gives the same features as 2.6.28.

hrw-linux-2.6.30-exp.patch is stripped version of linux-2.6.28-exp.patch
used in 2.6.28 recipe. It adds sound support and keeps Ethernet buffers
in SRAM to avoid Tx underruns.

Result was not too much tested.

recipes/linux/linux-2.6.30/at91sam9263ek/defconfig [new file with mode: 0644]
recipes/linux/linux-2.6.30/at91sam9263ek/hrw-linux-2.6.30-exp.patch [new file with mode: 0644]
recipes/linux/linux_2.6.30.bb

diff --git a/recipes/linux/linux-2.6.30/at91sam9263ek/defconfig b/recipes/linux/linux-2.6.30/at91sam9263ek/defconfig
new file mode 100644 (file)
index 0000000..a42673b
--- /dev/null
@@ -0,0 +1,1855 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.30
+# Tue Jul 14 22:02:26 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_W90X900 is not set
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+CONFIG_ARCH_AT91SAM9263=y
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91SAM9G20 is not set
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT572D940HF is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+# CONFIG_MACH_NEOCORE926 is not set
+
+#
+# AT91SAM9263 Board Type
+#
+CONFIG_MACH_AT91SAM9263EK=y
+# CONFIG_MACH_USB_A9263 is not set
+# CONFIG_MACH_CSB737 is not set
+# CONFIG_MACH_TOTEMNOVA is not set
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+# CONFIG_AT91_SLOW_CLOCK is not set
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+CONFIG_LEDS=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M console=ttyS0,115200 root=/dev/mmcblk0p1 rootfstype=ext2 rootdelay=5"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=m
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETLABEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NET_DROP_MONITOR is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTSDIO=m
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_WIRELESS is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
+# CONFIG_MTD_DATAFLASH_OTP is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_BLOCK2MTD=y
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_ATMEL=y
+CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
+# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
+# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+CONFIG_MTD_UBI_GLUEBI=y
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_MISC_DEVICES=y
+CONFIG_ATMEL_PWM=y
+CONFIG_ATMEL_TCLIB=y
+CONFIG_ATMEL_TCB_CLKSRC=y
+CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
+# CONFIG_ICS932S401 is not set
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+CONFIG_EEPROM_AT24=y
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+CONFIG_COMPAT_NET_DEV_OPS=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+CONFIG_DAVICOM_PHY=y
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+CONFIG_MACB_TX_SRAM=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_CDC_EEM is not set
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_SMSC95XX is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+CONFIG_SERIAL_ATMEL_PDC=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+CONFIG_I2C_GPIO=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91SAM9X_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D15605 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_ATMEL_LCDC=y
+CONFIG_BACKLIGHT_ATMEL_PWM=y
+CONFIG_BACKLIGHT_GENERIC=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_VERBOSE_PRINTK=y
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+CONFIG_SND_AC97_CODEC=y
+# CONFIG_SND_DRIVERS is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_AT91_AC97=y
+
+#
+# Atmel devices (AVR32 and AT91)
+#
+# CONFIG_SND_SPI is not set
+# CONFIG_SND_USB is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_ATMEL_SOC=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_DRAGONRISE_FF is not set
+CONFIG_HID_EZKEY=y
+CONFIG_HID_KYE=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_KENSINGTON=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_GREENASIA_FF is not set
+CONFIG_HID_TOPSEED=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_EZUSB is not set
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP210X is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_SYMBOL is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=m
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_AT91=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ATMEL_PWM=y
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_REGULATOR is not set
+CONFIG_UIO=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
+# CONFIG_UIO_SMX is not set
+# CONFIG_UIO_SERCOS3 is not set
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=m
+# CONFIG_EXT4DEV_COMPAT is not set
+# CONFIG_EXT4_FS_XATTR is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+# CONFIG_JFFS2_CMODE_PRIORITY is not set
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_JFFS2_CMODE_FAVOURLZO=y
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_XATTR=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+CONFIG_NLS_CODEPAGE_865=y
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+CONFIG_TRACING_SUPPORT=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_EVENT_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_PATH is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+# CONFIG_SECURITY_TOMOYO is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+CONFIG_BINARY_PRINTF=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-2.6.30/at91sam9263ek/hrw-linux-2.6.30-exp.patch b/recipes/linux/linux-2.6.30/at91sam9263ek/hrw-linux-2.6.30-exp.patch
new file mode 100644 (file)
index 0000000..0e377b0
--- /dev/null
@@ -0,0 +1,1816 @@
+This is hacked version of linux-2.6.28-exp.patch from Atmel. I removed most of
+things not related to at91sam9263ek so it is not safe to use it on other
+boards (probably not so save also on this one).
+
+This adds sound support, touchscreen pressure and ability to use SRAM for
+Ethernet buffers.
+
+OE-Signed-off-by: Marcin Juszkiewicz <marcin@juszkiewicz.com.pl>
+
+---
+ arch/arm/mach-at91/include/mach/at91_pmc.h |   27 
+ drivers/input/touchscreen/atmel_tsadcc.c   |   16 
+ drivers/mmc/host/at91_mci.c                |   39 -
+ drivers/net/Kconfig                        |    6 
+ drivers/net/macb.c                         |   72 ++
+ drivers/net/macb.h                         |    9 
+ sound/arm/Kconfig                          |    9 
+ sound/arm/Makefile                         |    4 
+ sound/arm/at91-ac97.c                      |  911 +++++++++++++++++++++++++++++
+ sound/arm/at91-ac97.h                      |  295 +++++++++
+ 11 files changed, 1485 insertions(+), 62 deletions(-)
+
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/at91_pmc.h
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/at91_pmc.h
+@@ -21,11 +21,11 @@
+ #define       AT91_PMC_SCSR           (AT91_PMC + 0x08)       /* System Clock Status Register */
+ #define               AT91_PMC_PCK            (1 <<  0)               /* Processor Clock */
+ #define               AT91RM9200_PMC_UDP      (1 <<  1)               /* USB Devcice Port Clock [AT91RM9200 only] */
+ #define               AT91RM9200_PMC_MCKUDP   (1 <<  2)               /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */
+-#define               AT91CAP9_PMC_DDR        (1 <<  2)               /* DDR Clock [AT91CAP9 revC only] */
++#define               AT91CAP9_PMC_DDR        (1 <<  2)               /* DDR Clock Enable [some SAM9 only] */
+ #define               AT91RM9200_PMC_UHP      (1 <<  4)               /* USB Host Port Clock [AT91RM9200 only] */
+ #define               AT91SAM926x_PMC_UHP     (1 <<  6)               /* USB Host Port Clock [AT91SAM926x only] */
+ #define               AT91CAP9_PMC_UHP        (1 <<  6)               /* USB Host Port Clock [AT91CAP9 only] */
+ #define               AT91SAM926x_PMC_UDP     (1 <<  7)               /* USB Devcice Port Clock [AT91SAM926x only] */
+ #define               AT91_PMC_PCK0           (1 <<  8)               /* Programmable Clock 0 */
+@@ -38,15 +38,15 @@
+ #define       AT91_PMC_PCER           (AT91_PMC + 0x10)       /* Peripheral Clock Enable Register */
+ #define       AT91_PMC_PCDR           (AT91_PMC + 0x14)       /* Peripheral Clock Disable Register */
+ #define       AT91_PMC_PCSR           (AT91_PMC + 0x18)       /* Peripheral Clock Status Register */
+-#define       AT91_CKGR_UCKR          (AT91_PMC + 0x1C)       /* UTMI Clock Register [SAM9RL, CAP9] */
++#define       AT91_CKGR_UCKR          (AT91_PMC + 0x1C)       /* UTMI Clock Register [some SAM9, CAP9] */
+ #define               AT91_PMC_UPLLEN         (1   << 16)             /* UTMI PLL Enable */
+ #define               AT91_PMC_UPLLCOUNT      (0xf << 20)             /* UTMI PLL Start-up Time */
+ #define               AT91_PMC_BIASEN         (1   << 24)             /* UTMI BIAS Enable */
+-#define               AT91_PMC_BIASCOUNT      (0xf << 28)             /* UTMI PLL Start-up Time */
++#define               AT91_PMC_BIASCOUNT      (0xf << 28)             /* UTMI BIAS Start-up Time */
+ #define       AT91_CKGR_MOR           (AT91_PMC + 0x20)       /* Main Oscillator Register [not on SAM9RL] */
+ #define               AT91_PMC_MOSCEN         (1    << 0)             /* Main Oscillator Enable */
+ #define               AT91_PMC_OSCBYPASS      (1    << 1)             /* Oscillator Bypass [SAM9x, CAP9] */
+ #define               AT91_PMC_OSCOUNT        (0xff << 8)             /* Main Oscillator Start-up Time */
+@@ -71,10 +71,11 @@
+ #define               AT91_PMC_CSS            (3 <<  0)               /* Master Clock Selection */
+ #define                       AT91_PMC_CSS_SLOW               (0 << 0)
+ #define                       AT91_PMC_CSS_MAIN               (1 << 0)
+ #define                       AT91_PMC_CSS_PLLA               (2 << 0)
+ #define                       AT91_PMC_CSS_PLLB               (3 << 0)
++#define                       AT91_PMC_CSS_UPLL               (3 << 0)        /* [some SAM9 only] */
+ #define               AT91_PMC_PRES           (7 <<  2)               /* Master Clock Prescaler */
+ #define                       AT91_PMC_PRES_1                 (0 << 2)
+ #define                       AT91_PMC_PRES_2                 (1 << 2)
+ #define                       AT91_PMC_PRES_4                 (2 << 2)
+ #define                       AT91_PMC_PRES_8                 (3 << 2)
+@@ -87,25 +88,39 @@
+ #define                       AT91RM9200_PMC_MDIV_3           (2 << 8)
+ #define                       AT91RM9200_PMC_MDIV_4           (3 << 8)
+ #define                       AT91SAM9_PMC_MDIV_1             (0 << 8)        /* [SAM9,CAP9 only] */
+ #define                       AT91SAM9_PMC_MDIV_2             (1 << 8)
+ #define                       AT91SAM9_PMC_MDIV_4             (2 << 8)
+-#define                       AT91SAM9_PMC_MDIV_6             (3 << 8)
++#define                       AT91SAM9_PMC_MDIV_6             (3 << 8)        /* [some SAM9 only] */
++#define                       AT91SAM9_PMC_MDIV_3             (3 << 8)        /* [some SAM9 only] */
+ #define               AT91_PMC_PDIV           (1 << 12)               /* Processor Clock Division [some SAM9 only] */
+ #define                       AT91_PMC_PDIV_1                 (0 << 12)
+ #define                       AT91_PMC_PDIV_2                 (1 << 12)
+-#define       AT91_PMC_PCKR(n)        (AT91_PMC + 0x40 + ((n) * 4))   /* Programmable Clock 0-4 Registers */
++#define               AT91_PMC_PLLADIV2       (1 << 12)               /* PLLA divisor by 2 [some SAM9 only] */
++#define                       AT91_PMC_PLLADIV2_OFF           (0 << 12)
++#define                       AT91_PMC_PLLADIV2_ON            (1 << 12)
++
++#define       AT91_PMC_USB            (AT91_PMC + 0x38)       /* USB Clock Register [some SAM9 only] */
++#define               AT91_PMC_USBS           (0x1 <<  0)             /* USB OHCI Input clock selection */
++#define                       AT91_PMC_USBS_PLLA              (0 << 0)
++#define                       AT91_PMC_USBS_UPLL              (1 << 0)
++#define               AT91_PMC_OHCIUSBDIV     (0xF <<  8)             /* Divider for USB OHCI Clock */
++
++#define       AT91_PMC_PCKR(n)        (AT91_PMC + 0x40 + ((n) * 4))   /* Programmable Clock 0-N Registers */
++#define               AT91_PMC_CSSMCK         (0x1 <<  8)             /* CSS or Master Clock Selection */
++#define                       AT91_PMC_CSSMCK_CSS             (0 << 8)
++#define                       AT91_PMC_CSSMCK_MCK             (1 << 8)
+ #define       AT91_PMC_IER            (AT91_PMC + 0x60)       /* Interrupt Enable Register */
+ #define       AT91_PMC_IDR            (AT91_PMC + 0x64)       /* Interrupt Disable Register */
+ #define       AT91_PMC_SR             (AT91_PMC + 0x68)       /* Status Register */
+ #define               AT91_PMC_MOSCS          (1 <<  0)               /* MOSCS Flag */
+ #define               AT91_PMC_LOCKA          (1 <<  1)               /* PLLA Lock */
+ #define               AT91_PMC_LOCKB          (1 <<  2)               /* PLLB Lock */
+ #define               AT91_PMC_MCKRDY         (1 <<  3)               /* Master Clock */
+-#define               AT91_PMC_LOCKU          (1 <<  6)               /* UPLL Lock [AT91CAP9 only] */
++#define               AT91_PMC_LOCKU          (1 <<  6)               /* UPLL Lock [some SAM9, AT91CAP9 only] */
+ #define               AT91_PMC_OSCSEL         (1 <<  7)               /* Slow Clock Oscillator [AT91CAP9 revC only] */
+ #define               AT91_PMC_PCK0RDY        (1 <<  8)               /* Programmable Clock 0 */
+ #define               AT91_PMC_PCK1RDY        (1 <<  9)               /* Programmable Clock 1 */
+ #define               AT91_PMC_PCK2RDY        (1 << 10)               /* Programmable Clock 2 */
+ #define               AT91_PMC_PCK3RDY        (1 << 11)               /* Programmable Clock 3 */
+--- linux-2.6.30.orig/drivers/input/touchscreen/atmel_tsadcc.c
++++ linux-2.6.30/drivers/input/touchscreen/atmel_tsadcc.c
+@@ -34,10 +34,11 @@
+ #define           ATMEL_TSADCC_TSAMOD_ADC_ONLY_MODE   (0x0)   /* ADC Mode */
+ #define           ATMEL_TSADCC_TSAMOD_TS_ONLY_MODE    (0x1)   /* Touch Screen Only Mode */
+ #define         ATMEL_TSADCC_LOWRES   (1    <<  4)    /* Resolution selection */
+ #define         ATMEL_TSADCC_SLEEP    (1    <<  5)    /* Sleep mode */
+ #define         ATMEL_TSADCC_PENDET   (1    <<  6)    /* Pen Detect selection */
++#define         ATMEL_TSADCC_PRES     (1    <<  7)    /* Pressure Measurement Selection */
+ #define         ATMEL_TSADCC_PRESCAL  (0x3f <<  8)    /* Prescalar Rate Selection */
+ #define         ATMEL_TSADCC_STARTUP  (0x7f << 16)    /* Start Up time */
+ #define         ATMEL_TSADCC_SHTIM    (0xf  << 24)    /* Sample & Hold time */
+ #define         ATMEL_TSADCC_PENDBC   (0xf  << 28)    /* Pen Detect debouncing time */
+@@ -82,20 +83,25 @@
+ #define ATMEL_TSADCC_CDR2     0x38    /* Channel Data 2 */
+ #define ATMEL_TSADCC_CDR3     0x3C    /* Channel Data 3 */
+ #define ATMEL_TSADCC_CDR4     0x40    /* Channel Data 4 */
+ #define ATMEL_TSADCC_CDR5     0x44    /* Channel Data 5 */
++#define ATMEL_TSADCC_XPOS     0x50
++#define ATMEL_TSADCC_Z1DAT    0x54
++#define ATMEL_TSADCC_Z2DAT    0x58
++
++
+ #define ADC_CLOCK     1000000
+ struct atmel_tsadcc {
+       struct input_dev        *input;
+       char                    phys[32];
+       struct clk              *clk;
+       int                     irq;
+       unsigned int            prev_absx;
+       unsigned int            prev_absy;
+-      unsigned char           bufferedmeasure;
++      unsigned char   bufferedmeasure;
+ };
+ static void __iomem           *tsc_base;
+ #define atmel_tsadcc_read(reg)                __raw_readl(tsc_base + (reg))
+@@ -122,10 +128,13 @@ static irqreturn_t atmel_tsadcc_interrup
+                                  ATMEL_TSADCC_EOC(3) | ATMEL_TSADCC_NOCNT);
+               atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);
+               input_report_key(input_dev, BTN_TOUCH, 0);
+               ts_dev->bufferedmeasure = 0;
++#ifdef        CONFIG_TS_ABS_PRESSURE
++              input_report_abs(input_dev, ABS_PRESSURE, 0);
++#endif
+               input_sync(input_dev);
+       } else if (status & ATMEL_TSADCC_PENCNT) {
+               /* Pen detected */
+               reg = atmel_tsadcc_read(ATMEL_TSADCC_MR);
+@@ -146,10 +155,13 @@ static irqreturn_t atmel_tsadcc_interrup
+                        * be erroneous.
+                        * Always report previous measurement */
+                       input_report_abs(input_dev, ABS_X, ts_dev->prev_absx);
+                       input_report_abs(input_dev, ABS_Y, ts_dev->prev_absy);
+                       input_report_key(input_dev, BTN_TOUCH, 1);
++#ifdef        CONFIG_TS_ABS_PRESSURE
++                      input_report_abs(input_dev, ABS_PRESSURE, 7500);
++#endif
+                       input_sync(input_dev);
+               } else
+                       ts_dev->bufferedmeasure = 1;
+               /* Now make new measurement */
+@@ -245,10 +257,11 @@ static int __devinit atmel_tsadcc_probe(
+       input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+       input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+       input_set_abs_params(input_dev, ABS_X, 0, 0x3FF, 0, 0);
+       input_set_abs_params(input_dev, ABS_Y, 0, 0x3FF, 0, 0);
++      input_set_abs_params(input_dev, ABS_PRESSURE, 0, 15000, 0, 0);
+       /* clk_enable() always returns 0, no need to check it */
+       clk_enable(ts_dev->clk);
+       prsc = clk_get_rate(ts_dev->clk);
+@@ -297,10 +310,11 @@ err_free_mem:
+ static int __devexit atmel_tsadcc_remove(struct platform_device *pdev)
+ {
+       struct atmel_tsadcc *ts_dev = dev_get_drvdata(&pdev->dev);
+       struct resource *res;
++      disable_irq(ts_dev->irq);
+       free_irq(ts_dev->irq, ts_dev);
+       input_unregister_device(ts_dev->input);
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+--- linux-2.6.30.orig/drivers/mmc/host/at91_mci.c
++++ linux-2.6.30/drivers/mmc/host/at91_mci.c
+@@ -77,10 +77,20 @@
+ #include <mach/cpu.h>
+ #include <mach/at91_mci.h>
+ #define DRIVER_NAME "at91_mci"
++static inline int at91mci_is_rev2(void)
++{
++      return (   cpu_is_at91sam9260()
++              || cpu_is_at91sam9263()
++              || cpu_is_at91cap9()
++              || cpu_is_at91sam9rl()
++              || cpu_is_at91sam9g20()
++              );
++}
++
+ #define FL_SENT_COMMAND       (1 << 0)
+ #define FL_SENT_STOP  (1 << 1)
+ #define AT91_MCI_ERRORS       (AT91_MCI_RINDE | AT91_MCI_RDIRE | AT91_MCI_RCRCE       \
+               | AT91_MCI_RENDE | AT91_MCI_RTOE | AT91_MCI_DCRCE               \
+@@ -199,12 +209,12 @@ static inline void at91_mci_sg_to_dma(st
+       unsigned *dmabuf = host->buffer;
+       size = data->blksz * data->blocks;
+       len = data->sg_len;
+-      /* AT91SAM926[0/3] Data Write Operation and number of bytes erratum */
+-      if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++      /* at91mci rev2 Data Write Operation and number of bytes erratum */
++      if (at91mci_is_rev2())
+               if (host->total_length == 12)
+                       memset(dmabuf, 0, 12);
+       /*
+        * Just loop through all entries. Size might not
+@@ -460,11 +470,11 @@ static void at91_mci_enable(struct at91m
+       at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIEN);
+       at91_mci_write(host, AT91_MCI_IDR, 0xffffffff);
+       at91_mci_write(host, AT91_MCI_DTOR, AT91_MCI_DTOMUL_1M | AT91_MCI_DTOCYC);
+       mr = AT91_MCI_PDCMODE | 0x34a;
+-      if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++      if (at91mci_is_rev2())
+               mr |= AT91_MCI_RDPROOF | AT91_MCI_WRPROOF;
+       at91_mci_write(host, AT91_MCI_MR, mr);
+       /* use Slot A or B (only one at same time) */
+@@ -613,14 +623,14 @@ static void at91_mci_send_command(struct
+                               /*
+                                * Handle a write
+                                */
+                               host->total_length = block_length * blocks;
+                               /*
+-                               * AT91SAM926[0/3] Data Write Operation and
++                               * at91mci rev2 Data Write Operation and
+                                * number of bytes erratum
+                                */
+-                              if (cpu_is_at91sam9260 () || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++                              if (at91mci_is_rev2())
+                                       if (host->total_length < 12)
+                                               host->total_length = 12;
+                               host->buffer = kmalloc(host->total_length, GFP_KERNEL);
+                               if (!host->buffer) {
+@@ -676,15 +686,14 @@ static void at91_mci_process_next(struct
+       else if ((!(host->flags & FL_SENT_STOP)) && host->request->stop) {
+               host->flags |= FL_SENT_STOP;
+               at91_mci_send_command(host, host->request->stop);
+       } else {
+               del_timer(&host->timer);
+-              /* the at91rm9200 mci controller hangs after some transfers,
++              /* the mci controller hangs after some transfers,
+                * and the workaround is to reset it after each transfer.
+                */
+-              if (cpu_is_at91rm9200())
+-                      at91_reset_host(host);
++              at91_reset_host(host);
+               mmc_request_done(host->mmc, host->request);
+       }
+ }
+ /*
+@@ -1005,28 +1014,35 @@ static int __init at91_mci_probe(struct 
+       mmc->ops = &at91_mci_ops;
+       mmc->f_min = 375000;
+       mmc->f_max = 25000000;
+       mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
+-      mmc->caps = MMC_CAP_SDIO_IRQ;
++      mmc->caps = 0;
+       mmc->max_blk_size = 4095;
+       mmc->max_blk_count = mmc->max_req_size;
+       host = mmc_priv(mmc);
+       host->mmc = mmc;
+       host->buffer = NULL;
+       host->bus_mode = 0;
+       host->board = pdev->dev.platform_data;
+       if (host->board->wire4) {
+-              if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++              if (at91mci_is_rev2())
+                       mmc->caps |= MMC_CAP_4_BIT_DATA;
+               else
+                       dev_warn(&pdev->dev, "4 wire bus mode not supported"
+                               " - using 1 wire\n");
+       }
++      /* Add SDIO capability when  available */
++      if (at91mci_is_rev2()) {
++              /* at91mci rev2 sdio interrupt erratum */
++              if (host->board->wire4 || !host->board->slot_b)
++                      mmc->caps |= MMC_CAP_SDIO_IRQ;
++      }
++
+       /*
+        * Reserve GPIOs ... board init code makes sure these pins are set
+        * up as GPIOs with the right direction (input, except for vcc)
+        */
+       if (host->board->det_pin) {
+@@ -1079,12 +1095,11 @@ static int __init at91_mci_probe(struct 
+       /*
+        * Allocate the MCI interrupt
+        */
+       host->irq = platform_get_irq(pdev, 0);
+-      ret = request_irq(host->irq, at91_mci_irq, IRQF_SHARED,
+-                      mmc_hostname(mmc), host);
++      ret = request_irq(host->irq, at91_mci_irq, 0, mmc_hostname(mmc), host);
+       if (ret) {
+               dev_dbg(&pdev->dev, "request MCI interrupt failed\n");
+               goto fail0;
+       }
+--- linux-2.6.30.orig/drivers/net/Kconfig
++++ linux-2.6.30/drivers/net/Kconfig
+@@ -226,10 +226,16 @@ config MACB
+         parts. Say Y to include support for the MACB chip.
+         To compile this driver as a module, choose M here: the module
+         will be called macb.
++config MACB_TX_SRAM
++      bool "Atmel MACB TX buffers in internal SRAM"
++      depends on NET_ETHERNET && MACB && (ARCH_AT91SAM9260 || ARCH_AT91SAM9263)
++      help
++              Use internal SRAM for TX buffers.
++
+ source "drivers/net/arm/Kconfig"
+ config AX88796
+       tristate "ASIX AX88796 NE2000 clone support"
+       depends on ARM || MIPS || SUPERH
+--- linux-2.6.30.orig/drivers/net/macb.c
++++ linux-2.6.30/drivers/net/macb.c
+@@ -31,13 +31,25 @@
+ #define RX_RING_BYTES         (sizeof(struct dma_desc) * RX_RING_SIZE)
+ /* Make the IP header word-aligned (the ethernet header is 14 bytes) */
+ #define RX_OFFSET             2
+-#define TX_RING_SIZE          128
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      #if defined(CONFIG_ARCH_AT91SAM9260)
++              #define TX_RING_SIZE       2
++      #elif defined(CONFIG_ARCH_AT91SAM9263)
++              #define TX_RING_SIZE       32
++      #endif
++      #define TX_BUFFER_SIZE       1536
++      #define TX_RING_BYTES        (sizeof(struct dma_desc) * TX_RING_SIZE)
++      #define TX_DMA_SIZE      ((TX_RING_BYTES) + (TX_RING_SIZE) * (TX_BUFFER_SIZE))
++#else
++      #define TX_RING_SIZE     128
++      #define TX_RING_BYTES        (sizeof(struct dma_desc) * TX_RING_SIZE)
++#endif
++
+ #define DEF_TX_RING_PENDING   (TX_RING_SIZE - 1)
+-#define TX_RING_BYTES         (sizeof(struct dma_desc) * TX_RING_SIZE)
+ #define TX_RING_GAP(bp)                                               \
+       (TX_RING_SIZE - (bp)->tx_pending)
+ #define TX_BUFFS_AVAIL(bp)                                    \
+       (((bp)->tx_tail <= (bp)->tx_head) ?                     \
+@@ -376,12 +388,14 @@ static void macb_tx(struct macb *bp)
+               if (!(bufstat & MACB_BIT(TX_USED)))
+                       break;
+               dev_dbg(&bp->pdev->dev, "skb %u (data %p) TX complete\n",
+                       tail, skb->data);
++#if !defined(CONFIG_MACB_TX_SRAM)
+               dma_unmap_single(&bp->pdev->dev, rp->mapping, skb->len,
+                                DMA_TO_DEVICE);
++#endif
+               bp->stats.tx_packets++;
+               bp->stats.tx_bytes += skb->len;
+               rp->skb = NULL;
+               dev_kfree_skb_irq(skb);
+       }
+@@ -633,23 +647,30 @@ static int macb_start_xmit(struct sk_buf
+               return 1;
+       }
+       entry = bp->tx_head;
+       dev_dbg(&bp->pdev->dev, "Allocated ring entry %u\n", entry);
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      mapping = bp->tx_ring[entry].addr;
++      memcpy(bp->tx_buffers + entry * TX_BUFFER_SIZE, skb->data, len);
++#else
+       mapping = dma_map_single(&bp->pdev->dev, skb->data,
+                                len, DMA_TO_DEVICE);
++#endif
+       bp->tx_skb[entry].skb = skb;
+       bp->tx_skb[entry].mapping = mapping;
+       dev_dbg(&bp->pdev->dev, "Mapped skb data %p to DMA addr %08lx\n",
+               skb->data, (unsigned long)mapping);
+       ctrl = MACB_BF(TX_FRMLEN, len);
+       ctrl |= MACB_BIT(TX_LAST);
+       if (entry == (TX_RING_SIZE - 1))
+               ctrl |= MACB_BIT(TX_WRAP);
++#if !defined(CONFIG_MACB_TX_SRAM)
+       bp->tx_ring[entry].addr = mapping;
++#endif
+       bp->tx_ring[entry].ctrl = ctrl;
+       wmb();
+       entry = NEXT_TX(entry);
+       bp->tx_head = entry;
+@@ -676,20 +697,29 @@ static void macb_free_consistent(struct 
+               dma_free_coherent(&bp->pdev->dev, RX_RING_BYTES,
+                                 bp->rx_ring, bp->rx_ring_dma);
+               bp->rx_ring = NULL;
+       }
+       if (bp->tx_ring) {
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++              iounmap((void *)bp->tx_ring);
++#else
+               dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES,
+                                 bp->tx_ring, bp->tx_ring_dma);
++#endif
+               bp->tx_ring = NULL;
+       }
+       if (bp->rx_buffers) {
+               dma_free_coherent(&bp->pdev->dev,
+                                 RX_RING_SIZE * RX_BUFFER_SIZE,
+                                 bp->rx_buffers, bp->rx_buffers_dma);
+               bp->rx_buffers = NULL;
+       }
++
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      if (bp->tx_ring_dma)
++              release_mem_region(bp->tx_ring_dma, TX_DMA_SIZE);
++#endif
+ }
+ static int macb_alloc_consistent(struct macb *bp)
+ {
+       int size;
+@@ -706,18 +736,48 @@ static int macb_alloc_consistent(struct 
+               goto out_err;
+       dev_dbg(&bp->pdev->dev,
+               "Allocated RX ring of %d bytes at %08lx (mapped %p)\n",
+               size, (unsigned long)bp->rx_ring_dma, bp->rx_ring);
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++#if  defined(CONFIG_ARCH_AT91SAM9260)
++      if (request_mem_region(AT91SAM9260_SRAM0_BASE, TX_DMA_SIZE, "macb")) {
++              bp->tx_ring_dma = AT91SAM9260_SRAM0_BASE;
++      } else {
++              if (request_mem_region(AT91SAM9260_SRAM1_BASE, TX_DMA_SIZE, "macb")) {
++                      bp->tx_ring_dma = AT91SAM9260_SRAM1_BASE;
++              } else {
++                      printk(KERN_WARNING "Cannot request SRAM memory for TX ring, already used\n");
++                      return -EBUSY;
++              }
++      }
++#elif defined(CONFIG_ARCH_AT91SAM9263)
++      if (request_mem_region(AT91SAM9263_SRAM0_BASE, TX_DMA_SIZE, "macb")) {
++              bp->tx_ring_dma = AT91SAM9263_SRAM0_BASE;
++      } else {
++              printk(KERN_WARNING "Cannot request SRAM memory for TX ring, already used\n");
++              return -EBUSY;
++      }
++#endif
++
++      bp->tx_ring = ioremap(bp->tx_ring_dma, TX_DMA_SIZE);
++      if (!bp->tx_ring)
++              return -ENOMEM;
++
++      bp->tx_buffers_dma = bp->tx_ring_dma + TX_RING_BYTES;
++      bp->tx_buffers = (char *) bp->tx_ring + TX_RING_BYTES;
++#else
+       size = TX_RING_BYTES;
+       bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size,
+                                        &bp->tx_ring_dma, GFP_KERNEL);
+       if (!bp->tx_ring)
+               goto out_err;
++
+       dev_dbg(&bp->pdev->dev,
+               "Allocated TX ring of %d bytes at %08lx (mapped %p)\n",
+               size, (unsigned long)bp->tx_ring_dma, bp->tx_ring);
++#endif
+       size = RX_RING_SIZE * RX_BUFFER_SIZE;
+       bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size,
+                                           &bp->rx_buffers_dma, GFP_KERNEL);
+       if (!bp->rx_buffers)
+@@ -744,14 +804,22 @@ static void macb_init_rings(struct macb 
+               bp->rx_ring[i].ctrl = 0;
+               addr += RX_BUFFER_SIZE;
+       }
+       bp->rx_ring[RX_RING_SIZE - 1].addr |= MACB_BIT(RX_WRAP);
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      for (i = 0; i < TX_RING_SIZE; i++) {
++              bp->tx_ring[i].addr = bp->tx_buffers_dma + i * TX_BUFFER_SIZE;
++              bp->tx_ring[i].ctrl = MACB_BIT(TX_USED);
++      }
++#else
+       for (i = 0; i < TX_RING_SIZE; i++) {
+               bp->tx_ring[i].addr = 0;
+               bp->tx_ring[i].ctrl = MACB_BIT(TX_USED);
+       }
++#endif
++
+       bp->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP);
+       bp->rx_tail = bp->tx_head = bp->tx_tail = 0;
+ }
+--- linux-2.6.30.orig/drivers/net/macb.h
++++ linux-2.6.30/drivers/net/macb.h
+@@ -367,12 +367,17 @@ struct macb {
+       unsigned int            tx_head, tx_tail;
+       struct dma_desc         *tx_ring;
+       struct ring_info        *tx_skb;
++#if defined(CONFIG_ARCH_AT91)
++      void            *tx_buffers;
++#endif
++
+       spinlock_t              lock;
+       struct platform_device  *pdev;
++      struct clk      *macb_clk;
+       struct clk              *pclk;
+       struct clk              *hclk;
+       struct net_device       *dev;
+       struct napi_struct      napi;
+       struct net_device_stats stats;
+@@ -380,10 +385,14 @@ struct macb {
+       dma_addr_t              rx_ring_dma;
+       dma_addr_t              tx_ring_dma;
+       dma_addr_t              rx_buffers_dma;
++#if defined(CONFIG_ARCH_AT91)
++      dma_addr_t      tx_buffers_dma;
++#endif
++
+       unsigned int            rx_pending, tx_pending;
+       struct mii_bus          *mii_bus;
+       struct phy_device       *phy_dev;
+       unsigned int            link;
+--- linux-2.6.30.orig/sound/arm/Kconfig
++++ linux-2.6.30/sound/arm/Kconfig
+@@ -37,7 +37,16 @@ config SND_PXA2XX_AC97
+       select SND_PXA2XX_LIB_AC97
+       help
+         Say Y or M if you want to support any AC97 codec attached to
+         the PXA2xx AC97 interface.
++config SND_AT91_AC97
++      tristate "AC97 Controller driver for SAM926X familly from ATMEL"
++      depends on SND && ARCH_AT91
++      select SND_PCM
++      select SND_AC97_CODEC
++      help
++        Say Y or M if you want to support any AC97 codec attached to
++        the SAM926X AC97 Controller.
++
+ endif # SND_ARM
+--- linux-2.6.30.orig/sound/arm/Makefile
++++ linux-2.6.30/sound/arm/Makefile
+@@ -12,5 +12,9 @@ obj-$(CONFIG_SND_PXA2XX_LIB) += snd-pxa2
+ snd-pxa2xx-lib-y              := pxa2xx-pcm-lib.o
+ snd-pxa2xx-lib-$(CONFIG_SND_PXA2XX_LIB_AC97)  += pxa2xx-ac97-lib.o
+ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
+ snd-pxa2xx-ac97-objs          := pxa2xx-ac97.o
++
++obj-$(CONFIG_SND_AT91_AC97)   += snd-at91-ac97.o
++snd-at91-ac97-objs            := at91-ac97.o
++
+--- /dev/null
++++ linux-2.6.30/sound/arm/at91-ac97.c
+@@ -0,0 +1,911 @@
++/*
++ * at91-ac97.c  --  AC'97 driver for atmel boards.
++ *
++ *  Copyright (C) 2005 SAN People
++ *  Copyright (C) 2006 Atmel
++ *
++ * Author:    Patrice Vilchez <patrice.vilchez@atmel.com>
++ *            Sedji Gaouaou <sedji.gaouaou@atmel.com>
++ *            ATMEL CORP.
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#include <linux/platform_device.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/delay.h>
++#include <linux/clk.h>
++#include <linux/atmel_pdc.h>
++#include <linux/io.h>
++
++#include <sound/core.h>
++#include <sound/initval.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/ac97_codec.h>
++#include <sound/soc.h>
++
++#include <asm/cacheflush.h>
++
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++#include <mach/board.h>
++
++#include "at91-ac97.h"
++
++
++/*
++ * module parameters
++ */
++static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
++static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
++static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
++
++module_param_array(index, int, NULL, 0444);
++MODULE_PARM_DESC(index, "Index value for AC97 controller");
++module_param_array(id, charp, NULL, 0444);
++MODULE_PARM_DESC(id, "ID string for AC97 controller");
++module_param_array(enable, bool, NULL, 0444);
++MODULE_PARM_DESC(enable, "Enable AC97 controller");
++
++typedef struct at91_ac97 {
++      spinlock_t lock;
++      void *regs;
++      int period;
++      struct clk *ac97_clk;
++      struct snd_pcm_substream *playback_substream;
++      struct snd_pcm_substream *capture_substream;
++      struct snd_card *card;
++      struct snd_pcm *pcm;
++      struct snd_ac97 *ac97;
++      struct snd_ac97_bus *ac97_bus;
++      int irq;
++      struct platform_device *pdev;
++      u8 reset_pin;
++} at91_ac97_t;
++
++
++/*
++ * PIO management functions
++ */
++void at91_ac97c_drive_reset(at91_ac97_t *chip, unsigned int value)
++{
++      at91_set_gpio_value(chip->reset_pin, value);
++}
++
++static const char driver_name[] = "at91-ac97";
++
++
++/*
++ * PCM part
++ */
++static struct snd_pcm_hardware snd_at91_ac97_playback_hw = {
++      .info                   = (SNDRV_PCM_INFO_INTERLEAVED
++                                 | SNDRV_PCM_INFO_MMAP
++                                 | SNDRV_PCM_INFO_MMAP_VALID
++                                 | SNDRV_PCM_INFO_BLOCK_TRANSFER),
++      .formats                = (SNDRV_PCM_FMTBIT_S16_LE
++                                 | SNDRV_PCM_FMTBIT_S16_BE),
++      .rates                  = SNDRV_PCM_RATE_CONTINUOUS,
++      .rate_min               = 8000,
++      .rate_max               = 48000,
++      .channels_min           = 2,
++      .channels_max           = 2,
++      .buffer_bytes_max       = 256*1024,
++      .period_bytes_min       = 1024,
++      .period_bytes_max       = 4*1024,
++      .periods_min            = 1,
++      .periods_max            = 64,
++};
++
++static struct snd_pcm_hardware snd_at91_ac97_capture_hw = {
++      .info                   = (SNDRV_PCM_INFO_INTERLEAVED
++                                 | SNDRV_PCM_INFO_MMAP
++                                 | SNDRV_PCM_INFO_MMAP_VALID
++                                 | SNDRV_PCM_INFO_BLOCK_TRANSFER),
++      .formats                = (SNDRV_PCM_FMTBIT_S16_LE
++                                 | SNDRV_PCM_FMTBIT_S16_BE),
++      .rates                  = SNDRV_PCM_RATE_CONTINUOUS,
++      .rate_min               = 8000,
++      .rate_max               = 48000,
++      .channels_min           = 1,
++      .channels_max           = 2,
++      .buffer_bytes_max       = 256*1024,
++      .period_bytes_min       = 1024,
++      .period_bytes_max       = 4*1024,
++      .periods_min            = 1,
++      .periods_max            = 64,
++};
++
++static int snd_at91_ac97_playback_open(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      struct snd_pcm_runtime *runtime = substream->runtime;
++
++      runtime->hw = snd_at91_ac97_playback_hw;
++      chip->playback_substream = substream;
++      chip->period = 0;
++
++      pr_debug("%s : snd_at91_ac97_playback_open\n\r", driver_name);
++
++      return 0;
++}
++
++static int snd_at91_ac97_capture_open(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      struct snd_pcm_runtime *runtime = substream->runtime;
++
++      runtime->hw = snd_at91_ac97_capture_hw;
++      chip->capture_substream = substream;
++      chip->period = 0;
++
++      pr_debug("%s : snd_at91_ac97_capture_open\n\r", driver_name);
++
++      return 0;
++}
++
++static int snd_at91_ac97_playback_close(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++
++      chip->playback_substream = NULL;
++
++      return 0;
++}
++
++static int snd_at91_ac97_capture_close(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++
++      chip->capture_substream = NULL;
++
++      return 0;
++}
++
++static int snd_at91_ac97_playback_hw_params(struct snd_pcm_substream *substream,
++                                  struct snd_pcm_hw_params *hw_params)
++{
++      int err;
++
++      err = snd_pcm_lib_malloc_pages(substream,
++                                     params_buffer_bytes(hw_params));
++
++      return err;
++}
++
++static int snd_at91_ac97_capture_hw_params(struct snd_pcm_substream *substream,
++                                  struct snd_pcm_hw_params *hw_params)
++{
++      int err;
++
++      err = snd_pcm_lib_malloc_pages(substream,
++                                     params_buffer_bytes(hw_params));
++
++      return err;
++}
++
++static int snd_at91_ac97_playback_hw_free(struct snd_pcm_substream *substream)
++{
++
++      snd_pcm_lib_free_pages(substream);
++
++      return 0;
++}
++
++static int snd_at91_ac97_capture_hw_free(struct snd_pcm_substream *substream)
++{
++
++      snd_pcm_lib_free_pages(substream);
++
++      return 0;
++}
++
++static int snd_at91_ac97_playback_prepare(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      struct snd_pcm_runtime *runtime = substream->runtime;
++      int block_size = frames_to_bytes(runtime, runtime->period_size);
++      unsigned long word = 0;
++
++      pr_debug("%s : block_size = %d\n\r", driver_name, block_size);
++
++      /* Assign slots to channels */
++      switch (substream->runtime->channels) {
++      /* TODO: Support more than two channels */
++      case 1:
++              word |= AT91C_AC97C_CHID3_CA;
++              break;
++      case 2:
++      default:
++              /* Assign Left and Right slots (3,4) to Channel A */
++              word |= AT91C_AC97C_CHID3_CA | AT91C_AC97C_CHID4_CA;
++              break;
++      }
++
++      ac97c_writel(chip, OCA, word);
++
++      /*
++       * Configure sample format and size..
++       */
++      word = AT91C_AC97C_PDCEN | AT91C_AC97C_SIZE_16_BITS;
++
++      switch (runtime->format) {
++      case SNDRV_PCM_FORMAT_S16_BE:
++              word |= AT91C_AC97C_CEM;
++              break;
++      case SNDRV_PCM_FORMAT_S16_LE:
++      default:
++              break;
++      }
++
++      ac97c_writel(chip, CAMR, word);
++
++      /* Set variable rate if needed */
++      if (runtime->rate != 48000) {
++              word = ac97c_readl(chip, MR);
++              word |= AT91C_AC97C_VRA;
++              ac97c_writel(chip, MR, word);
++      } else {
++              /* Clear Variable Rate Bit */
++              word = ac97c_readl(chip, MR);
++              word &= ~AT91C_AC97C_VRA;
++              ac97c_writel(chip, MR, word);
++      }
++
++      /* Set rate */
++      snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate);
++
++      pr_debug("%s : dma_addr = %x\n\r : dma_area = %x\n\r"
++                      " : dma_bytes = %d\n\r",
++                      driver_name, runtime->dma_addr,
++                      runtime->dma_area, runtime->dma_bytes);
++
++      /* Initialize and start the PDC */
++      writel(runtime->dma_addr, chip->regs + ATMEL_PDC_TPR);
++      writel(block_size / 2, chip->regs + ATMEL_PDC_TCR);
++      writel(runtime->dma_addr + block_size, chip->regs + ATMEL_PDC_TNPR);
++      writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
++
++      /* Enable Channel A interrupts */
++      ac97c_writel(chip, IER, AT91C_AC97C_CAEVT);
++
++      pr_debug("%s : snd_at91_ac97_playback_prepare\n\r", driver_name);
++
++      return 0;
++}
++
++static int snd_at91_ac97_capture_prepare(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      struct snd_pcm_runtime *runtime = substream->runtime;
++      int block_size = frames_to_bytes(runtime, runtime->period_size);
++      unsigned long word = 0;
++
++      pr_debug("%s : block_size = %d\n\r", driver_name, block_size);
++
++
++      /* Assign slots to channels */
++      switch (substream->runtime->channels) {
++      /* TODO: Support more than two channels */
++      case 1:
++              word |= AT91C_AC97C_CHID3_CA;
++              break;
++      case 2:
++      default:
++              /* Assign Left and Right slots (3,4) to Channel A */
++              word |= AT91C_AC97C_CHID3_CA | AT91C_AC97C_CHID4_CA;
++              break;
++      }
++
++      ac97c_writel(chip, ICA, word);
++
++      /*
++       * Configure sample format and size.
++       */
++      word = AT91C_AC97C_PDCEN | AT91C_AC97C_SIZE_16_BITS;
++
++      switch (runtime->format) {
++      case SNDRV_PCM_FORMAT_S16_BE:
++              word |= AT91C_AC97C_CEM;
++              break;
++      case SNDRV_PCM_FORMAT_S16_LE:
++              break;
++      }
++
++      ac97c_writel(chip, CAMR, word);
++
++      /* Set variable rate if needed */
++      if (runtime->rate != 48000) {
++              word = ac97c_readl(chip, MR);
++              word |= AT91C_AC97C_VRA;
++              ac97c_writel(chip, MR, word);
++      } else {
++              /* Clear Variable Rate Bit */
++              word = ac97c_readl(chip, MR);
++              word &= ~AT91C_AC97C_VRA;
++              ac97c_writel(chip, MR, word);
++      }
++
++      /* Set rate */
++      snd_ac97_set_rate(chip->ac97, AC97_PCM_LR_ADC_RATE, runtime->rate);
++
++      pr_debug("%s : dma_addr = %x\n\r : dma_area = %x\n\r"
++                      " : dma_bytes = %d\n\r",
++                      driver_name, runtime->dma_addr,
++                      runtime->dma_area, runtime->dma_bytes);
++
++      /* Initialize and start the PDC */
++      writel(runtime->dma_addr, chip->regs + ATMEL_PDC_RPR);
++      writel(block_size / 2, chip->regs + ATMEL_PDC_RCR);
++      writel(runtime->dma_addr + block_size, chip->regs + ATMEL_PDC_RNPR);
++      writel(block_size / 2, chip->regs + ATMEL_PDC_RNCR);
++
++      /* Enable Channel A interrupts */
++      ac97c_writel(chip, IER, AT91C_AC97C_CAEVT);
++
++      pr_debug("%s : snd_at91_ac97_capture_prepare\n\r", driver_name);
++
++      return 0;
++}
++
++static int snd_at91_ac97_playback_trigger(struct snd_pcm_substream *substream,
++                                              int cmd)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      unsigned long camr, ptcr = 0, flags;
++      int err = 0;
++
++      spin_lock_irqsave(&chip->lock, flags);
++      camr = ac97c_readl(chip, CAMR);
++
++      switch (cmd) {
++      case SNDRV_PCM_TRIGGER_START:
++              camr |= (AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
++              ptcr = ATMEL_PDC_TXTEN;
++              break;
++      case SNDRV_PCM_TRIGGER_STOP:
++              camr &= ~(AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
++              ptcr = ATMEL_PDC_TXTDIS;
++              break;
++      default:
++              err = -EINVAL;
++              break;
++      }
++
++      ac97c_writel(chip, CAMR, camr);
++
++      writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
++
++      spin_unlock_irqrestore(&chip->lock, flags);
++
++      pr_debug("%s : snd_at91_ac97_playback_trigger\n\r", driver_name);
++
++      return err;
++}
++
++static int snd_at91_ac97_capture_trigger(struct snd_pcm_substream *substream,
++                                              int cmd)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      unsigned long camr, ptcr = 0, flags;
++      int err = 0;
++
++      spin_lock_irqsave(&chip->lock, flags);
++      camr = ac97c_readl(chip, CAMR);
++
++      switch (cmd) {
++      case SNDRV_PCM_TRIGGER_START:
++              camr |= (AT91C_AC97C_CEN |
++                              AT91C_AC97C_ENDRX |
++                              AT91C_AC97C_OVRUN);
++              ptcr = ATMEL_PDC_RXTEN;
++              break;
++      case SNDRV_PCM_TRIGGER_STOP:
++              camr &= ~(AT91C_AC97C_CEN |
++                              AT91C_AC97C_ENDRX |
++                              AT91C_AC97C_OVRUN);
++              ptcr = ATMEL_PDC_RXTDIS;
++              break;
++      default:
++              err = -EINVAL;
++              break;
++      }
++
++      ac97c_writel(chip, CAMR, camr);
++
++      writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
++
++      spin_unlock_irqrestore(&chip->lock, flags);
++
++      pr_debug("%s : snd_at91_ac97_capture_trigger\n\r", driver_name);
++
++      return err;
++}
++
++static snd_pcm_uframes_t
++snd_at91_ac97_playback_pointer(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      struct snd_pcm_runtime *runtime = substream->runtime;
++      snd_pcm_uframes_t pos;
++      unsigned long bytes;
++
++      bytes = readl(chip->regs + ATMEL_PDC_TPR) - runtime->dma_addr;
++
++      pos = bytes_to_frames(runtime, bytes);
++
++      if (pos >= runtime->buffer_size)
++              pos -= runtime->buffer_size;
++
++      pr_debug("%s : snd_at91_ac97_playback_pointer\n\r", driver_name);
++
++      return pos;
++}
++
++static  snd_pcm_uframes_t
++snd_at91_ac97_capture_pointer(struct snd_pcm_substream *substream)
++{
++      at91_ac97_t *chip = snd_pcm_substream_chip(substream);
++      struct snd_pcm_runtime *runtime = substream->runtime;
++      snd_pcm_uframes_t pos;
++      unsigned long bytes;
++
++      bytes = readl(chip->regs + ATMEL_PDC_RPR) - runtime->dma_addr;
++      pos = bytes_to_frames(runtime, bytes);
++      if (pos >= runtime->buffer_size)
++              pos -= runtime->buffer_size;
++
++      pr_debug("%s : snd_at91_ac97_capture_pointer\n\r", driver_name);
++
++      return pos;
++}
++
++static struct snd_pcm_ops at91_ac97_playback_ops = {
++      .open           = snd_at91_ac97_playback_open,
++      .close          = snd_at91_ac97_playback_close,
++      .ioctl          = snd_pcm_lib_ioctl,
++      .hw_params      = snd_at91_ac97_playback_hw_params,
++      .hw_free        = snd_at91_ac97_playback_hw_free,
++      .prepare        = snd_at91_ac97_playback_prepare,
++      .trigger        = snd_at91_ac97_playback_trigger,
++      .pointer        = snd_at91_ac97_playback_pointer,
++};
++
++static struct snd_pcm_ops at91_ac97_capture_ops = {
++      .open           = snd_at91_ac97_capture_open,
++      .close          = snd_at91_ac97_capture_close,
++      .ioctl          = snd_pcm_lib_ioctl,
++      .hw_params      = snd_at91_ac97_capture_hw_params,
++      .hw_free        = snd_at91_ac97_capture_hw_free,
++      .prepare        = snd_at91_ac97_capture_prepare,
++      .trigger        = snd_at91_ac97_capture_trigger,
++      .pointer        = snd_at91_ac97_capture_pointer,
++};
++
++static struct ac97_pcm at91_ac97_pcm_defs[] __devinitdata = {
++      /* Playback */
++      {
++              .exclusive = 1,
++              .r = { {
++                      .slots = ((1 << AC97_SLOT_PCM_LEFT)
++                                | (1 << AC97_SLOT_PCM_RIGHT)),
++              } },
++      },
++      /* PCM in */
++      {
++              .stream = 1,
++              .exclusive = 1,
++              .r = { {
++                      .slots = ((1 << AC97_SLOT_PCM_LEFT)
++                                      | (1 << AC97_SLOT_PCM_RIGHT)),
++              } }
++      },
++      /* Mic in */
++      {
++              .stream = 1,
++              .exclusive = 1,
++              .r = { {
++                      .slots = (1<<AC97_SLOT_MIC),
++              } }
++      },
++};
++
++static int __devinit snd_at91_ac97_pcm_new(at91_ac97_t *chip)
++{
++      struct snd_pcm *pcm;
++      int err;
++
++      err = snd_ac97_pcm_assign(chip->ac97_bus,
++                                      ARRAY_SIZE(at91_ac97_pcm_defs),
++                                      at91_ac97_pcm_defs);
++      if (err)
++              return err;
++
++      err = snd_pcm_new(chip->card, "Atmel AC97", 0, 1, 1, &pcm);
++      if (err)
++              return err;
++
++      snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
++                                            &chip->pdev->dev,
++                                            128 * 1024, 256 * 1024);
++
++      snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
++                                      &at91_ac97_playback_ops);
++      snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &at91_ac97_capture_ops);
++
++      pcm->private_data = chip;
++      pcm->info_flags = 0;
++      strcpy(pcm->name, "Atmel AC97");
++      chip->pcm = pcm;
++
++      return 0;
++}
++
++
++/*
++ * Mixer part
++ */
++static int snd_at91_ac97_mixer_new(at91_ac97_t *chip)
++{
++      int err;
++      struct snd_ac97_template template;
++
++      memset(&template, 0, sizeof(template));
++      template.private_data = chip;
++      template.num = 0;
++      template.addr = 0;
++      err = snd_ac97_mixer(chip->ac97_bus, &template, &chip->ac97);
++
++      return err;
++}
++
++static irqreturn_t snd_at91_ac97_interrupt(int irq, void *dev_id)
++{
++      at91_ac97_t *chip = dev_id;
++      unsigned long status;
++      unsigned long dummy;
++
++      status = ac97c_readl(chip, SR);
++
++      if (status & AT91C_AC97C_CAEVT) {
++              struct snd_pcm_runtime *runtime;
++              int offset, next_period, block_size;
++              unsigned long casr, camr, test;
++
++              casr = ac97c_readl(chip, CASR);
++              camr = ac97c_readl(chip, CAMR);
++              test = casr & camr;
++
++              if ((casr & camr) & AT91C_AC97C_ENDTX) {
++                      runtime = chip->playback_substream->runtime;
++                      block_size = frames_to_bytes(runtime,
++                                                      runtime->period_size);
++                      chip->period++;
++
++                      if (chip->period == runtime->periods)
++                              chip->period = 0;
++                      next_period = chip->period + 1;
++                      if (next_period == runtime->periods)
++                              next_period = 0;
++
++                      offset = block_size * next_period;
++
++                      writel(runtime->dma_addr + offset,
++                                              chip->regs + ATMEL_PDC_TNPR);
++                      writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
++
++                      snd_pcm_period_elapsed(chip->playback_substream);
++              }
++              if ((casr & camr) & AT91C_AC97C_ENDRX) {
++                      runtime = chip->capture_substream->runtime;
++                      block_size = frames_to_bytes(runtime,
++                                                      runtime->period_size);
++                      chip->period++;
++
++                      if (chip->period == runtime->periods)
++                              chip->period = 0;
++                      next_period = chip->period + 1;
++                      if (next_period == runtime->periods)
++                              next_period = 0;
++
++                      offset = block_size * next_period;
++
++                      writel(runtime->dma_addr + offset,
++                                              chip->regs + ATMEL_PDC_RNPR);
++                      writel(block_size / 2, chip->regs + ATMEL_PDC_RNCR);
++                      snd_pcm_period_elapsed(chip->capture_substream);
++              }
++              if ((casr & camr) & AT91C_AC97C_OVRUN)
++                      printk(KERN_INFO " AC97_irq - overrun!\n");
++      } else {
++              printk(KERN_WARNING
++                     "Spurious AC97 interrupt, status = 0x%08lx\n",
++                     status);
++      }
++
++      dummy = ac97c_readl(chip, SR);
++
++      return IRQ_HANDLED;
++}
++
++
++/*
++ * CODEC part
++ */
++static void snd_at91_ac97_hard_reset(at91_ac97_t *chip)
++{
++       /* Enable AC97 Controller.*/
++       /* Perform a cold (hard) reset of the AC97 codec.*/
++       ac97c_writel(chip, MR, 0);
++       ac97c_writel(chip, MR, AT91C_AC97C_ENA);
++
++       at91_ac97c_drive_reset(chip, 0);
++       udelay(1);
++       at91_ac97c_drive_reset(chip, 1);
++       udelay(1);
++}
++
++static void snd_at91_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
++                               unsigned short val)
++{
++      at91_ac97_t *chip = ac97->private_data;
++      unsigned long word;
++      int timeout = 0x100;
++
++      pr_debug("%s : Writing codec register 0x%x = 0x%x\n\r",
++                                              driver_name, reg, val);
++
++      word = (reg & 0x7f) << 16 | val;
++
++      do {
++              if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY) {
++                      ac97c_writel(chip, COTHR, word);
++                      return;
++              }
++              udelay(1);
++      } while (--timeout);
++
++      snd_printk(KERN_WARNING "at91-ac97: codec write timeout\n\r");
++}
++
++static unsigned short snd_at91_ac97_read(struct snd_ac97 *ac97,
++                                        unsigned short reg)
++{
++      at91_ac97_t *chip = ac97->private_data;
++      unsigned long word;
++      int timeout = 40;
++
++      word = (0x80 | (reg & 0x7f)) << 16;
++
++      do {
++              if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY) {
++                      ac97c_writel(chip, COTHR, word);
++                      break;
++              }
++              udelay(1);
++      } while (--timeout);
++
++      if (!timeout)
++              goto timed_out;
++
++      timeout = 0x100;
++
++      do {
++              if (ac97c_readl(chip, COSR) & AT91C_AC97C_RXRDY) {
++                      unsigned short val =
++                              (unsigned short) ac97c_readl(chip, CORHR);
++                      return val;
++              }
++              udelay(1);
++      } while (--timeout);
++
++      if (!timeout)
++              goto timed_out;
++
++timed_out:
++      snd_printk(KERN_WARNING "at91-ac97: codec write timeout\n\r");
++      return 0xffff;
++}
++
++static void snd_at91_ac97_warm_reset(struct snd_ac97 *ac97)
++{
++      at91_ac97_t *chip = ac97->private_data;
++      unsigned int mr = ac97c_readl(chip, MR);
++
++      mr |= AT91C_AC97C_WRST;
++
++      ac97c_writel(chip, MR, mr);
++      udelay(1);
++
++      mr &= ~AT91C_AC97C_WRST;
++      ac97c_writel(chip, MR, mr);
++}
++
++static void snd_at91_ac97_destroy(struct snd_card *card)
++{
++      at91_ac97_t *chip = get_chip(card);
++
++      if (chip->irq != -1)
++              free_irq(chip->irq, chip);
++
++      if (chip->regs)
++              iounmap(chip->regs);
++}
++
++static int __devinit snd_at91_ac97_create(struct snd_card *card,
++                                         struct platform_device *pdev)
++{
++      static struct snd_ac97_bus_ops ops = {
++              .write  = snd_at91_ac97_write,
++              .read   = snd_at91_ac97_read,
++              .reset  = snd_at91_ac97_warm_reset,
++      };
++
++      at91_ac97_t *chip = get_chip(card);
++      int irq, err = 0;
++
++
++
++      card->private_free = snd_at91_ac97_destroy;
++
++      spin_lock_init(&chip->lock);
++      chip->card = card;
++      chip->pdev = pdev;
++      chip->irq = -1;
++
++      if (!(platform_resource_flags(pdev, 0) & IORESOURCE_MEM)
++          || !(platform_resource_flags(pdev, 1) & IORESOURCE_IRQ))
++              return -ENODEV;
++
++      irq = platform_resource_start(pdev, 1);
++
++      err = request_irq(irq, snd_at91_ac97_interrupt, 0, "ac97", chip);
++      if (err) {
++              snd_printk(KERN_WARNING "unable to request IRQ%d\n", irq);
++              return err;
++      }
++
++      chip->irq = irq;
++      snd_printk(KERN_INFO "AC97C regs = %08X \n",
++                                      platform_resource_start(pdev, 0));
++      snd_printk(KERN_INFO "AC97C irq  = %d \n", irq);
++
++      chip->regs = ioremap(platform_resource_start(pdev, 0),
++                           platform_resource_len(pdev, 0));
++      if (!chip->regs) {
++              snd_printk(KERN_WARNING "unable to remap AC97C io memory\n");
++              return -ENOMEM;
++      }
++
++      snd_card_set_dev(card, &pdev->dev);
++
++      err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus);
++
++      return err;
++}
++
++static int __devinit snd_at91_ac97_probe(struct platform_device *pdev)
++{
++      static int dev;
++      struct atmel_ac97_data *pdata = pdev->dev.platform_data;
++      struct snd_card *card;
++      at91_ac97_t *chip;
++      int err;
++
++      if (dev >= SNDRV_CARDS)
++              return -ENODEV;
++      if (!enable[dev]) {
++              dev++;
++              return -ENOENT;
++      }
++
++      card = snd_card_new(index[dev], id[dev], THIS_MODULE,
++                          sizeof(at91_ac97_t));
++      if (!card)
++              return -ENOMEM;
++      chip = get_chip(card);
++
++      err = snd_at91_ac97_create(card, pdev);
++      if (err)
++              goto out_free_card;
++
++      /* Enable AC97 Controller clock*/
++      chip->reset_pin = pdata->reset_pin;
++      chip->ac97_clk = clk_get(NULL, "ac97_clk");
++      if (!chip->ac97_clk)
++              goto out_free_card;
++
++      clk_enable(chip->ac97_clk);
++
++      /* Perform a codec hard reset.*/
++      /* This also enables the AC97 Controller.*/
++      snd_at91_ac97_hard_reset(chip);
++
++      err = snd_at91_ac97_mixer_new(chip);
++      if (err)
++              goto out_free_card;
++
++      err = snd_at91_ac97_pcm_new(chip);
++      if (err)
++              goto out_free_card;
++
++      strcpy(card->driver, "ac97c");
++      strcpy(card->shortname, "Atmel AC97");
++      sprintf(card->longname, "Atmel AC97 Controller at %#lx, irq %i",
++              (unsigned long) platform_resource_start(pdev, 0),
++              (int) chip->irq);
++
++      err = snd_card_register(card);
++      if (err)
++              goto out_free_card;
++
++      dev_set_drvdata(&pdev->dev, card);
++      dev++;
++      return 0;
++
++out_free_card:
++      snd_card_free(card);
++      return err;
++}
++
++static int __devexit snd_at91_ac97_remove(struct  platform_device *pdev)
++{
++      struct snd_card *card = dev_get_drvdata(&pdev->dev);
++      at91_ac97_t *chip = get_chip(card);
++
++
++      snd_card_free(card);
++
++      /* Disable AC97 Controller*/
++      ac97c_writel(chip, MR, 0);
++
++      /* Disable AC97 Controller clock*/
++      clk_disable(chip->ac97_clk);
++
++      dev_set_drvdata(&pdev->dev, NULL);
++
++      return 0;
++}
++
++static struct platform_driver at91_ac97_driver = {
++      .probe      = snd_at91_ac97_probe,
++      .remove     = __devexit_p(snd_at91_ac97_remove),
++      .driver     =
++      {
++              .name       = "ac97c",
++      }
++      ,
++};
++
++static int __init at91_ac97_init(void)
++{
++      return platform_driver_register(&at91_ac97_driver);
++}
++
++static void __exit at91_ac97_exit(void)
++{
++      platform_driver_unregister(&at91_ac97_driver);
++}
++
++module_init(at91_ac97_init);
++module_exit(at91_ac97_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("Driver for Atmel AC97 Controller");
++MODULE_AUTHOR("Atmel");
+--- /dev/null
++++ linux-2.6.30/sound/arm/at91-ac97.h
+@@ -0,0 +1,295 @@
++/*
++ * at91-ac97.h  --  Hardware definition for the ac97c peripheral
++ *                    in the ATMEL at91sam926x processor
++ *
++ *  Copyright (C) 2005 SAN People
++ *  Copyright (C) 2006 Atmel
++ *
++ * Author:    Patrice Vilchez <patrice.vilchez@atmel.com>
++ *            ATMEL CORP.
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef __AC97C_H
++#define __AC97C_H
++
++/* -------------------------------------------------------- */
++/* AC97C ID definitions for  AT91SAM926x           */
++/* -------------------------------------------------------- */
++#ifndef AT91C_ID_AC97C
++#define AT91C_ID_AC97C        18 /**< AC97 Controller id */
++#endif /* AT91C_ID_AC97C */
++
++/* -------------------------------------------------------- */
++/* AC97C Base Address definitions for  AT91SAM926x   */
++/* -------------------------------------------------------- */
++#define AT91C_BASE_AC97C      0xFFFA0000 /**< AC97C base address */
++
++/* -------------------------------------------------------- */
++/* PIO definition for AC97C hardware peripheral */
++/* -------------------------------------------------------- */
++#define AT91C_PB1_AC97CK      (1 << 1) /**<  */
++#define AT91C_PB0_AC97FS      (1 << 0) /**<  */
++#define AT91C_PB3_AC97RX      (1 << 3) /**<  */
++#define AT91C_PB2_AC97TX      (1 << 2) /**<  */
++
++/* -------------------------------------------------------- */
++/* Register offset definition for AC97C hardware peripheral */
++/* -------------------------------------------------------- */
++#define AC97C_MR      (0x0008)        /**< Mode Register */
++#define AC97C_ICA     (0x0010)        /**< Input Channel AssignementRegister */
++#define AC97C_OCA     (0x0014)        /**< Output Channel Assignement Register */
++#define AC97C_CARHR   (0x0020)        /**< Channel A Receive Holding Register */
++#define AC97C_CATHR   (0x0024)        /**< Channel A Transmit Holding Register */
++#define AC97C_CASR    (0x0028)        /**< Channel A Status Register */
++#define AC97C_CAMR    (0x002C)        /**< Channel A Mode Register */
++#define AC97C_CBRHR   (0x0030)        /**< Channel B Receive Holding Register (optional) */
++#define AC97C_CBTHR   (0x0034)        /**< Channel B Transmit Holding Register (optional) */
++#define AC97C_CBSR    (0x0038)        /**< Channel B Status Register */
++#define AC97C_CBMR    (0x003C)        /**< Channel B Mode Register */
++#define AC97C_CORHR   (0x0040)        /**< COdec Transmit Holding Register */
++#define AC97C_COTHR   (0x0044)        /**< COdec Transmit Holding Register */
++#define AC97C_COSR    (0x0048)        /**< CODEC Status Register */
++#define AC97C_COMR    (0x004C)        /**< CODEC Mask Status Register */
++#define AC97C_SR      (0x0050)        /**< Status Register */
++#define AC97C_IER     (0x0054)        /**< Interrupt Enable Register */
++#define AC97C_IDR     (0x0058)        /**< Interrupt Disable Register */
++#define AC97C_IMR     (0x005C)        /**< Interrupt Mask Register */
++#define AC97C_VERSION         (0x00FC)        /**< Version Register */
++
++/* -------------------------------------------------------- */
++/* Bitfields definition for AC97C hardware peripheral */
++/* -------------------------------------------------------- */
++/* --- Register AC97C_MR */
++#define AT91C_AC97C_ENA       (0x1 << 0) /**< (AC97C) AC97 Controller Global Enable */
++#define AT91C_AC97C_WRST      (0x1 << 1) /**< (AC97C) Warm Reset */
++#define AT91C_AC97C_VRA       (0x1 << 2) /**< (AC97C) Variable RAte (for Data Slots) */
++/* --- Register AC97C_ICA */
++#define AT91C_AC97C_CHID3     (0x7 << 0) /**< (AC97C) Channel Id for the input slot 3 */
++#define       AT91C_AC97C_CHID3_NONE                 0x0 /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID3_CA                   0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID3_CB                   0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID3_CC                   0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4     (0x7 << 3) /**< (AC97C) Channel Id for the input slot 4 */
++#define       AT91C_AC97C_CHID4_NONE                 (0x0 <<  3) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID4_CA                   (0x1 <<  3) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID4_CB                   (0x2 <<  3) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID4_CC                   (0x3 <<  3) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5     (0x7 << 6) /**< (AC97C) Channel Id for the input slot 5 */
++#define       AT91C_AC97C_CHID5_NONE                 (0x0 <<  6) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID5_CA                   (0x1 <<  6) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID5_CB                   (0x2 <<  6) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID5_CC                   (0x3 <<  6) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6     (0x7 << 9) /**< (AC97C) Channel Id for the input slot 6 */
++#define       AT91C_AC97C_CHID6_NONE                 (0x0 <<  9) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID6_CA                   (0x1 <<  9) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID6_CB                   (0x2 <<  9) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID6_CC                   (0x3 <<  9) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7     (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
++#define       AT91C_AC97C_CHID7_NONE                 (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID7_CA                   (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID7_CB                   (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID7_CC                   (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8     (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
++#define       AT91C_AC97C_CHID8_NONE                 (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID8_CA                   (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID8_CB                   (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID8_CC                   (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9     (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
++#define       AT91C_AC97C_CHID9_NONE                 (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID9_CA                   (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID9_CB                   (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID9_CC                   (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10    (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
++#define       AT91C_AC97C_CHID10_NONE                 (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID10_CA                   (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID10_CB                   (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID10_CC                   (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11    (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
++#define       AT91C_AC97C_CHID11_NONE                 (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID11_CA                   (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID11_CB                   (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID11_CC                   (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12    (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
++#define       AT91C_AC97C_CHID12_NONE                 (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID12_CA                   (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID12_CB                   (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID12_CC                   (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
++/* --- Register AC97C_OCA */
++#define AT91C_AC97C_CHID3     (0x7 << 0) /**< (AC97C) Channel Id for the input slot 3 */
++#define       AT91C_AC97C_CHID3_NONE                 0x0 /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID3_CA                   0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID3_CB                   0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID3_CC                   0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID4     (0x7 << 3) /**< (AC97C) Channel Id for the input slot 4 */
++#define       AT91C_AC97C_CHID4_NONE                 (0x0 <<  3) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID4_CA                   (0x1 <<  3) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID4_CB                   (0x2 <<  3) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID4_CC                   (0x3 <<  3) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID5     (0x7 << 6) /**< (AC97C) Channel Id for the input slot 5 */
++#define       AT91C_AC97C_CHID5_NONE                 (0x0 <<  6) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID5_CA                   (0x1 <<  6) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID5_CB                   (0x2 <<  6) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID5_CC                   (0x3 <<  6) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID6     (0x7 << 9) /**< (AC97C) Channel Id for the input slot 6 */
++#define       AT91C_AC97C_CHID6_NONE                 (0x0 <<  9) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID6_CA                   (0x1 <<  9) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID6_CB                   (0x2 <<  9) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID6_CC                   (0x3 <<  9) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID7     (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
++#define       AT91C_AC97C_CHID7_NONE                 (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID7_CA                   (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID7_CB                   (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID7_CC                   (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID8     (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
++#define       AT91C_AC97C_CHID8_NONE                 (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID8_CA                   (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID8_CB                   (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID8_CC                   (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID9     (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
++#define       AT91C_AC97C_CHID9_NONE                 (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID9_CA                   (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID9_CB                   (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID9_CC                   (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID10    (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
++#define       AT91C_AC97C_CHID10_NONE                 (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID10_CA                   (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID10_CB                   (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID10_CC                   (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID11    (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
++#define       AT91C_AC97C_CHID11_NONE                 (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID11_CA                   (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID11_CB                   (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID11_CC                   (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
++#define AT91C_AC97C_CHID12    (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
++#define       AT91C_AC97C_CHID12_NONE                 (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID12_CA                   (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID12_CB                   (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
++#define       AT91C_AC97C_CHID12_CC                   (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
++/* --- Register AC97C_CARHR */
++#define AT91C_AC97C_RDATA     (0xFFFFF << 0) /**< (AC97C) Receive data */
++/* --- Register AC97C_CATHR */
++#define AT91C_AC97C_TDATA     (0xFFFFF << 0) /**< (AC97C) Transmit data */
++/* --- Register AC97C_CASR */
++#define AT91C_AC97C_TXRDY     (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_TXEMPTY   (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_UNRUN     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_RXRDY     (0x1 << 4) /**< (AC97C)  */
++#define AT91C_AC97C_OVRUN     (0x1 << 5) /**< (AC97C)  */
++#define AT91C_AC97C_ENDTX     (0x1 << 10) /**< (AC97C)  */
++#define AT91C_AC97C_TXBUFE    (0x1 << 11) /**< (AC97C)  */
++#define AT91C_AC97C_ENDRX     (0x1 << 14) /**< (AC97C)  */
++#define AT91C_AC97C_RXBUFF    (0x1 << 15) /**< (AC97C)  */
++/* --- Register AC97C_CAMR */
++#define AT91C_AC97C_TXRDY     (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_TXEMPTY   (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_UNRUN     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_RXRDY     (0x1 << 4) /**< (AC97C)  */
++#define AT91C_AC97C_OVRUN     (0x1 << 5) /**< (AC97C)  */
++#define AT91C_AC97C_ENDTX     (0x1 << 10) /**< (AC97C)  */
++#define AT91C_AC97C_TXBUFE    (0x1 << 11) /**< (AC97C)  */
++#define AT91C_AC97C_ENDRX     (0x1 << 14) /**< (AC97C)  */
++#define AT91C_AC97C_RXBUFF    (0x1 << 15) /**< (AC97C)  */
++#define AT91C_AC97C_SIZE      (0x3 << 16) /**< (AC97C)  */
++#define       AT91C_AC97C_SIZE_20_BITS              (0x0 << 16) /**< (AC97C) Data size is 20 bits */
++#define       AT91C_AC97C_SIZE_18_BITS              (0x1 << 16) /**< (AC97C) Data size is 18 bits */
++#define       AT91C_AC97C_SIZE_16_BITS              (0x2 << 16) /**< (AC97C) Data size is 16 bits */
++#define       AT91C_AC97C_SIZE_10_BITS              (0x3 << 16) /**< (AC97C) Data size is 10 bits */
++#define AT91C_AC97C_CEM       (0x1 << 18) /**< (AC97C)  */
++#define AT91C_AC97C_CEN       (0x1 << 21) /**< (AC97C)  */
++#define AT91C_AC97C_PDCEN     (0x1 << 22) /**< (AC97C)  */
++/* --- Register AC97C_CBRHR */
++#define AT91C_AC97C_RDATA     (0xFFFFF << 0) /**< (AC97C) Receive data */
++/* --- Register AC97C_CBTHR */
++#define AT91C_AC97C_TDATA     (0xFFFFF << 0) /**< (AC97C) Transmit data */
++/* --- Register AC97C_CBSR */
++#define AT91C_AC97C_TXRDY     (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_TXEMPTY   (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_UNRUN     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_RXRDY     (0x1 << 4) /**< (AC97C)  */
++#define AT91C_AC97C_OVRUN     (0x1 << 5) /**< (AC97C)  */
++/* --- Register AC97C_CBMR */
++#define AT91C_AC97C_TXRDY     (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_TXEMPTY   (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_UNRUN     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_RXRDY     (0x1 << 4) /**< (AC97C)  */
++#define AT91C_AC97C_OVRUN     (0x1 << 5) /**< (AC97C)  */
++#define AT91C_AC97C_SIZE      (0x3 << 16) /**< (AC97C)  */
++#define       AT91C_AC97C_SIZE_20_BITS              (0x0 << 16) /**< (AC97C) Data size is 20 bits */
++#define       AT91C_AC97C_SIZE_18_BITS              (0x1 << 16) /**< (AC97C) Data size is 18 bits */
++#define       AT91C_AC97C_SIZE_16_BITS              (0x2 << 16) /**< (AC97C) Data size is 16 bits */
++#define       AT91C_AC97C_SIZE_10_BITS              (0x3 << 16) /**< (AC97C) Data size is 10 bits */
++#define AT91C_AC97C_CEM       (0x1 << 18) /**< (AC97C)  */
++#define AT91C_AC97C_CEN       (0x1 << 21) /**< (AC97C)  */
++/* --- Register AC97C_CORHR */
++#define AT91C_AC97C_SDATA     (0xFFFF << 0) /**< (AC97C) Status Data */
++/* --- Register AC97C_COTHR */
++#define AT91C_AC97C_CDATA     (0xFFFF << 0) /**< (AC97C) Command Data */
++#define AT91C_AC97C_CADDR     (0x7F << 16) /**< (AC97C) COdec control register index */
++#define AT91C_AC97C_READ      (0x1 << 23) /**< (AC97C) Read/Write command */
++/* --- Register AC97C_COSR */
++#define AT91C_AC97C_TXRDY     (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_TXEMPTY   (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_UNRUN     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_RXRDY     (0x1 << 4) /**< (AC97C)  */
++/* --- Register AC97C_COMR */
++#define AT91C_AC97C_TXRDY     (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_TXEMPTY   (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_UNRUN     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_RXRDY     (0x1 << 4) /**< (AC97C)  */
++/* --- Register AC97C_SR */
++#define AT91C_AC97C_SOF       (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_WKUP      (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_COEVT     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_CAEVT     (0x1 << 3) /**< (AC97C)  */
++#define AT91C_AC97C_CBEVT     (0x1 << 4) /**< (AC97C)  */
++/* --- Register AC97C_IER */
++#define AT91C_AC97C_SOF       (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_WKUP      (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_COEVT     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_CAEVT     (0x1 << 3) /**< (AC97C)  */
++#define AT91C_AC97C_CBEVT     (0x1 << 4) /**< (AC97C)  */
++/* --- Register AC97C_IDR */
++#define AT91C_AC97C_SOF       (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_WKUP      (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_COEVT     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_CAEVT     (0x1 << 3) /**< (AC97C)  */
++#define AT91C_AC97C_CBEVT     (0x1 << 4) /**< (AC97C)  */
++/* --- Register AC97C_IMR */
++#define AT91C_AC97C_SOF       (0x1 << 0) /**< (AC97C)  */
++#define AT91C_AC97C_WKUP      (0x1 << 1) /**< (AC97C)  */
++#define AT91C_AC97C_COEVT     (0x1 << 2) /**< (AC97C)  */
++#define AT91C_AC97C_CAEVT     (0x1 << 3) /**< (AC97C)  */
++#define AT91C_AC97C_CBEVT     (0x1 << 4) /**< (AC97C)  */
++
++#define platform_num_resources(dev)     ((dev)->num_resources)
++#define platform_resource_start(dev, i) ((dev)->resource[(i)].start)
++#define platform_resource_end(dev, i)   ((dev)->resource[(i)].end)
++#define platform_resource_flags(dev, i) ((dev)->resource[(i)].flags)
++#define platform_resource_len(dev, i)                 \
++      (platform_resource_end((dev), (i)) -            \
++      platform_resource_start((dev), (i)) + 1)
++
++#define get_chip(card) ((at91_ac97_t *)(card)->private_data)
++
++#define ac97c_writel(chip, reg, val)                  \
++      writel((val), (chip)->regs + AC97C_##reg)
++
++#define ac97c_readl(chip, reg)                                \
++      readl((chip)->regs + AC97C_##reg)
++
++#endif /* __AC97C_H */
index b168bfc..5dc9451 100644 (file)
@@ -9,8 +9,13 @@ DEFAULT_PREFERENCE = "-1"
 DEFAULT_PREFERENCE_mpc8315e-rdb = "1"
 DEFAULT_PREFERENCE_mx27ads = "1"
 
+# machine boots with it, works but was not tested too much
+DEFAULT_PREFERENCE_at91sam9263ek = "-1"
+
 SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
            http://maxim.org.za/AT91RM9200/2.6/2.6.30-at91.patch.gz;patch=1 \
            file://defconfig"
 
 SRC_URI_append_mpc8315e-rdb = " file://mpc8315erdb-add-msi-to-dts.patch;patch=1"
+
+SRC_URI_append_at91sam9263ek = " file://hrw-linux-2.6.30-exp.patch;patch=1 "