diff -Naur linux-2.6.20-at92_e1.6.1/arch/arm/configs/som9260_defconfig linux-2.6.20-at92_e1.6.2/arch/arm/configs/som9260_defconfig
--- linux-2.6.20-at92_e1.6.1/arch/arm/configs/som9260_defconfig	1969-12-31 18:00:00.000000000 -0600
+++ linux-2.6.20-at92_e1.6.2/arch/arm/configs/som9260_defconfig	2008-04-02 17:35:08.000000000 -0500
@@ -0,0 +1,1302 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Wed Mar 19 17:14:46 2008
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=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_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS 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_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# 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_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX 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_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+CONFIG_ARCH_AT91SAM9260=y
+# CONFIG_ARCH_AT91SAM9261 is not set
+# CONFIG_ARCH_AT91SAM9263 is not set
+
+#
+# AT91SAM9260 Variants
+#
+# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
+
+#
+# AT91SAM9260 / AT91SAM9XE Board Type
+#
+# CONFIG_MACH_AT91SAM9260EK is not set
+CONFIG_MACH_SOM9260M=y
+# CONFIG_ARMSTRONG_HWMS is not set
+CONFIG_SOM_150ES=y
+
+#
+# AT91 Board Options
+#
+# CONFIG_RTSCLS is not set
+
+#
+# AT91 Feature Selections
+#
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+# CONFIG_AT91_SLOW_CLOCK is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=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 is not set
+# 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
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE 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_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# 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 is not set
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# 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 is not set
+# 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_DIAG is not set
+# 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 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_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
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+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_OTP=y
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x10000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH 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 is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=2
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# 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 is not set
+
+#
+# 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_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+CONFIG_LXT_PHY=y
+# 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_FIXED_PHY is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+CONFIG_MACB_TX_SRAM=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# 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_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# IO expansion
+#
+CONFIG_ECOREEX=y
+# CONFIG_ECOREEX_TGPIO is not set
+# CONFIG_ECOREEX_SGPWM is not set
+# CONFIG_ECOREEX_GCMB is not set
+# CONFIG_ECOREEX_DENM is not set
+# CONFIG_ECOREEX_HWMS is not set
+CONFIG_ECOREEX_SOM150=y
+# CONFIG_ECOREEX_KEY is not set
+CONFIG_BOARDSPEC=y
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# 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_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=10
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_AT91=y
+CONFIG_I2C_AT91_CLOCKRATE=100000
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 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
+
+#
+# SPI support
+#
+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
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# misc device classes
+#
+CONFIG_GPIOCLASS=y
+CONFIG_GPIOCLASS_SYSFS=y
+CONFIG_GPIOCLASS_CHAR=y
+CONFIG_PWMCLASS=y
+CONFIG_PWMCLASS_SYSFS=y
+CONFIG_MMCCLASS=y
+CONFIG_SPICLASS=y
+CONFIG_SPICLASS_SYSFS=y
+CONFIG_SPICLASS_CHAR=y
+CONFIG_LSI2ESC=y
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+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
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+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_DPCM 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_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# 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_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# 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_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_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=y
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS 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_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_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET 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_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+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
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_AT91=y
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# Real Time Clock
+#
+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
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_AT91SAM926X=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 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=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# 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_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# 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_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+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 is not set
+# 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 is not set
+# 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 is not set
+# 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 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff -Naur linux-2.6.20-at92_e1.6.1/arch/arm/mach-at91rm9200/board-som9260m.c linux-2.6.20-at92_e1.6.2/arch/arm/mach-at91rm9200/board-som9260m.c
--- linux-2.6.20-at92_e1.6.1/arch/arm/mach-at91rm9200/board-som9260m.c	2008-04-02 17:48:10.000000000 -0500
+++ linux-2.6.20-at92_e1.6.2/arch/arm/mach-at91rm9200/board-som9260m.c	2008-04-02 17:32:44.000000000 -0500
@@ -29,10 +29,10 @@
 #include <linux/clk.h>
 #include <linux/ioex/ecoreex.h>
 #include <linux/mtd/physmap.h>
-#ifdef CONFIG_SPI_CLASS
+#ifdef CONFIG_SPICLASS
 #include <linux/class/spi.h>
 #include <linux/class/spi_interface.h>
-#endif /* CONFIG_SPI_CLASS */
+#endif /* CONFIG_SPICLASS */
 
 #include <asm/hardware.h>
 #include <asm/setup.h>
@@ -163,7 +163,7 @@
 /************************************************************
  * mcp3208 atod interface over EMAC SPI class
  */
-#ifdef CONFIG_ARMSTRONG_HWMS
+#if defined(CONFIG_ARMSTRONG_HWMS) || defined(CONFIG_SOM_150ES)
 static struct spi_s mcp3208_spi = 
 {
  .name = "mcp3208",
@@ -202,7 +202,7 @@
 		.bus_num	= 1,
 	},
 #endif
-#if defined(CONFIG_ARMSTRONG_HWMS)
+#if defined(CONFIG_ARMSTRONG_HWMS) || defined(CONFIG_SOM_150ES)
 	{ /* mcp3208 ADC */
 	  .modalias = "lsi2esc", /* use the SPI class interface */
 	  .chip_select = 0,
diff -Naur linux-2.6.20-at92_e1.6.1/arch/arm/mach-at91rm9200/Kconfig linux-2.6.20-at92_e1.6.2/arch/arm/mach-at91rm9200/Kconfig
--- linux-2.6.20-at92_e1.6.1/arch/arm/mach-at91rm9200/Kconfig	2008-04-02 17:48:10.000000000 -0500
+++ linux-2.6.20-at92_e1.6.2/arch/arm/mach-at91rm9200/Kconfig	2008-04-02 17:32:44.000000000 -0500
@@ -125,6 +125,13 @@
 	  board and peripherals. Enables compilation of drivers
 	  for ADC and counter.
 
+config SOM_150ES
+	bool "EMAC SOM-150 Carrier Support"
+	depends on MACH_SOM9260M
+	help
+	  Support for the EMAC.Inc SOM-150ES project carrier
+	  board and peripherals.	  
+
 endif
 # ----------------------------------------------------------
 
diff -Naur linux-2.6.20-at92_e1.6.1/drivers/ioex/ecoreex.c linux-2.6.20-at92_e1.6.2/drivers/ioex/ecoreex.c
--- linux-2.6.20-at92_e1.6.1/drivers/ioex/ecoreex.c	2008-04-02 17:48:10.000000000 -0500
+++ linux-2.6.20-at92_e1.6.2/drivers/ioex/ecoreex.c	2008-04-02 17:57:45.000000000 -0500
@@ -79,6 +79,100 @@
 
 #endif /* CONFIG_ECOREEX_HWMS */
 
+
+#ifdef CONFIG_ECOREEX_SOM150
+#define CPLD_SOM150_NAME "EMAC SoM-150ES GPI/O expansion R1.0"
+#define CPLD_SOM150 0xC0
+
+/**
+ * handler currently just indicates the that interrupt was handled and returns
+ */
+static irqreturn_t som150_interrupt(int irq, void *na){
+    return IRQ_HANDLED;
+}
+
+static inline int CPLD_SOM150_map(unsigned long phys_addr, u8 *virt_addr, 
+        unsigned long size, const char *name, struct ecoreex_data *data)
+{   
+    gpio_t *gpio_lcd;
+    gpio_t *gpio_porta;
+    gpio_t *gpio_portb;
+    gpio_t *gpio_portc;
+    gpio_t *gpio_keypad;
+    gpio_t *gpio_gpout;
+    gpio_t *gpio_gpin;    
+
+    if (request_mem_region(phys_addr, size, name) == NULL) {
+        printk("Could not obtain physical memory at %lx for EMAC core\n", phys_addr);
+        iounmap(virt_addr);
+    }
+    gpio_declare();
+    
+    
+    
+    gpio_lcd = gpio_device_create_unregistered(&virt_addr[0], NULL, "lcd");
+    gpio_lcd->index_write = gpio_index_write;
+    gpio_lcd->index_read = gpio_index_read;
+    gpio_lcd->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_lcd);
+    
+  
+    gpio_porta = gpio_device_create_unregistered(&virt_addr[2], NULL, "porta");
+    gpio_porta->index_write = gpio_index_write;
+    gpio_porta->index_read = gpio_index_read;
+    gpio_porta->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_porta);
+    
+    gpio_portb = gpio_device_create_unregistered(&virt_addr[4], NULL, "portb");
+    gpio_portb->index_write = gpio_index_write;
+    gpio_portb->index_read = gpio_index_read;
+    gpio_portb->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_portb);
+       
+    gpio_portc = gpio_device_create_unregistered(&virt_addr[6], NULL, "portc");
+    gpio_portc->index_write = gpio_index_write;
+    gpio_portc->index_read = gpio_index_read;
+    gpio_portc->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_portc);
+    
+    gpio_keypad = gpio_device_create_unregistered(&virt_addr[8], NULL, "keypad");
+    gpio_keypad->index_write = NULL;
+    gpio_keypad->index_read = NULL;
+    ecoreex_setup_data_access(data->e_access, gpio_keypad);
+    
+    gpio_gpout = gpio_device_create_unregistered(&virt_addr[9], NULL, "gpout");
+    gpio_gpout->index_write = NULL;
+    gpio_gpout->index_read = NULL;
+    ecoreex_setup_data_access(data->e_access, gpio_gpout);
+    
+    gpio_gpin = gpio_device_create_unregistered(&virt_addr[10], NULL, "gpin");
+    gpio_gpin->index_write = NULL;
+    gpio_gpin->index_read = NULL;
+    ecoreex_setup_data_access(data->e_access, gpio_gpin);
+    
+    gpio_register_class_device(gpio_lcd);
+    gpio_register_class_device(gpio_porta);
+    gpio_register_class_device(gpio_portb);
+    gpio_register_class_device(gpio_portc);
+    gpio_register_class_device(gpio_keypad);
+    gpio_register_class_device(gpio_gpout);
+    gpio_register_class_device(gpio_gpin);
+
+    /*
+     * Allocate the IRQ
+     */
+    if(data->irq){
+        int err = request_irq(data->irq, som150_interrupt,IRQT_RISING,name, NULL);
+        if(err<0)
+            printk("ecoreex request for irq %d failed with %d\n",data->irq,err);
+        else set_irq_wake(data->irq,1);//if the board provides an irq, register it to wake up pm.
+    }
+
+    return 0;
+}
+
+#endif /* CONFIG_ECOREEX_SOM150 */
+
 //---------------------------------------------------------------------------------
 #ifdef CONFIG_ECOREEX_TGPIO
 #define CPLD_BASE_NAME "iPac GPI/O expansion R1.0" 
@@ -349,6 +443,11 @@
             CPLD_HWMS_map(phys_addr, virt_addr, size, CPLD_HWMS_NAME, data);
         break;
 #endif
+#ifdef CONFIG_ECOREEX_SOM150
+        case CPLD_SOM150:
+            CPLD_SOM150_map(phys_addr, virt_addr, size, CPLD_SOM150_NAME, data);
+        break;
+#endif
 			//-----------------------------------------------------------
 			#ifdef CONFIG_ECOREEX_TGPIO
 			case CPLD_BASE:
diff -Naur linux-2.6.20-at92_e1.6.1/drivers/ioex/ecoreex.c.orig linux-2.6.20-at92_e1.6.2/drivers/ioex/ecoreex.c.orig
--- linux-2.6.20-at92_e1.6.1/drivers/ioex/ecoreex.c.orig	1969-12-31 18:00:00.000000000 -0600
+++ linux-2.6.20-at92_e1.6.2/drivers/ioex/ecoreex.c.orig	2008-04-02 17:32:44.000000000 -0500
@@ -0,0 +1,535 @@
+/***************************************************************************
+                          		ecoreex.c    
+					EMAC soft cores device registration             
+                             -------------------
+	author				 : NZG
+    rewrite              : Tue May 15 2007
+    copyright          	 : (C) 2007 by EMAC.Inc
+    email                : support@emacinc.com
+ ***************************************************************************/
+ 
+#include <linux/kernel.h>
+#include <linux/autoconf.h>
+#include <linux/ioport.h>
+#include <linux/device.h>
+#include <linux/platform_device.h>
+#include <linux/class/gpio.h>
+#include <linux/class/pwm.h>
+#include <linux/class/mmcprot.h>
+#include <linux/ioex/ecoreex.h>
+#include <linux/ioex/pwmd.h>
+#include <linux/interrupt.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/irq.h>
+
+/*********************************************************************/
+#ifdef CONFIG_ECOREEX_HWMS
+#define CPLD_HWMS_NAME "HWMS GPI/O expansion R1.0"
+#define CPLD_HWMS 0xC0
+
+/**
+ * handler currently just indicates the that interrupt was handled and returns
+ */
+static irqreturn_t hwms_interrupt(int irq, void *na){
+    return IRQ_HANDLED;
+}
+
+static inline int CPLD_HWMS_map(unsigned long phys_addr, u8 *virt_addr, 
+        unsigned long size, const char *name, struct ecoreex_data *data)
+{   
+    gpio_t *gpio_counter;
+    gpio_t *gpio_control;
+    
+    if (request_mem_region(phys_addr, size, name) == NULL) {
+        printk("Could not obtain physical memory at %lx for EMAC core\n", phys_addr);
+        iounmap(virt_addr);
+    }
+    gpio_declare();
+    
+    gpio_control = gpio_device_create_unregistered(&virt_addr[0], NULL, "control");
+    ecoreex_setup_data_access(data->e_access, gpio_control);
+    /* no index read or write for the control -- only one register */
+    gpio_control->index_write = NULL;
+    gpio_control->index_read = NULL; 
+    
+    gpio_counter = gpio_device_create_unregistered(&virt_addr[1], NULL, "counter");
+    gpio_counter->index_write = gpio_index_write;
+    gpio_counter->index_read = gpio_index_read;
+    gpio_counter->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_counter);
+    
+    gpio_register_class_device(gpio_control);
+    gpio_register_class_device(gpio_counter);
+    
+    /*
+     * Allocate the IRQ
+     */
+    if(data->irq){
+        int err = request_irq(data->irq, hwms_interrupt,IRQT_RISING,name, NULL);
+        if(err<0)
+            printk("ecoreex request for irq %d failed with %d\n",data->irq,err);
+        //printk("ecoreex request for irq %d failed\n",e->irq);
+
+        else set_irq_wake(data->irq,1);//if the board provides an irq, register it to wake up pm.
+    }
+
+    return 0;
+}
+
+#endif /* CONFIG_ECOREEX_HWMS */
+
+
+#ifdef CONFIG_ECOREEX_SOM150
+#define CPLD_SOM150_NAME "EMAC SoM-150ES GPI/O expansion R1.0"
+#define CPLD_SOM150 0xC0
+
+/**
+ * handler currently just indicates the that interrupt was handled and returns
+ */
+static irqreturn_t som150_interrupt(int irq, void *na){
+    return IRQ_HANDLED;
+}
+
+static inline int CPLD_SOM150_map(unsigned long phys_addr, u8 *virt_addr, 
+        unsigned long size, const char *name, struct ecoreex_data *data)
+{   
+    gpio_t *gpio_lcd;
+    gpio_t *gpio_porta;
+    gpio_t *gpio_portb;
+    gpio_t *gpio_portc;
+    gpio_t *gpio_keypad;
+    gpio_t *gpio_gpout;
+    gpio_t *gpio_gpin;    
+
+    if (request_mem_region(phys_addr, size, name) == NULL) {
+        printk("Could not obtain physical memory at %lx for EMAC core\n", phys_addr);
+        iounmap(virt_addr);
+    }
+    gpio_declare();
+    
+    
+    
+    gpio_lcd = gpio_device_create_unregistered(&virt_addr[0], NULL, "lcd");
+    gpio_lcd->index_write = gpio_index_write;
+    gpio_lcd->index_read = gpio_index_read;
+    gpio_lcd->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_lcd);
+    
+  
+    gpio_porta = gpio_device_create_unregistered(&virt_addr[2], NULL, "porta");
+    gpio_porta->index_write = gpio_index_write;
+    gpio_porta->index_read = gpio_index_read;
+    gpio_porta->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_porta);
+    
+    gpio_portb = gpio_device_create_unregistered(&virt_addr[4], NULL, "portb");
+    gpio_portb->index_write = gpio_index_write;
+    gpio_portb->index_read = gpio_index_read;
+    gpio_portb->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_portb);
+       
+    gpio_portc = gpio_device_create_unregistered(&virt_addr[6], NULL, "portc");
+    gpio_portc->index_write = gpio_index_write;
+    gpio_portc->index_read = gpio_index_read;
+    gpio_portc->range = 1;
+    ecoreex_setup_data_access(data->e_access, gpio_portc);
+    
+    gpio_keypad = gpio_device_create_unregistered(&virt_addr[8], NULL, "keypad");
+    gpio_keypad->index_write = NULL;
+    gpio_keypad->index_read = NULL;
+    ecoreex_setup_data_access(data->e_access, gpio_keypad);
+    
+    gpio_gpout = gpio_device_create_unregistered(&virt_addr[9], NULL, "gpout");
+    gpio_gpout->index_write = NULL;
+    gpio_gpout->index_read = NULL;
+    ecoreex_setup_data_access(data->e_access, gpio_gpout);
+    
+    gpio_gpin = gpio_device_create_unregistered(&virt_addr[10], NULL, "gpin");
+    gpio_gpin->index_write = NULL;
+    gpio_gpin->index_read = NULL;
+    ecoreex_setup_data_access(data->e_access, gpio_gpin);
+    
+    gpio_register_class_device(gpio_lcd);
+    gpio_register_class_device(gpio_porta);
+    gpio_register_class_device(gpio_portb);
+    gpio_register_class_device(gpio_portc);
+    gpio_register_class_device(gpio_keypad);
+    gpio_register_class_device(gpio_gpout);
+    gpio_register_class_device(gpio_gpin);
+
+    /*
+     * Allocate the IRQ
+     */
+    if(data->irq){
+        int err = request_irq(data->irq, som150_interrupt,IRQT_RISING,name, NULL);
+        if(err<0)
+            printk("ecoreex request for irq %d failed with %d\n",data->irq,err);
+        else set_irq_wake(data->irq,1);//if the board provides an irq, register it to wake up pm.
+    }
+
+    return 0;
+}
+
+#endif /* CONFIG_ECOREEX_SOM150 */
+
+//---------------------------------------------------------------------------------
+#ifdef CONFIG_ECOREEX_TGPIO
+#define CPLD_BASE_NAME "iPac GPI/O expansion R1.0" 
+#define CPLD_BASE 0xA0
+
+#define CPLD_BASE_NAME_11 "iPac GPI/O expansion R1.1" 
+#define CPLD_BASE_11 0xA3
+
+static inline int CPLD_BASE_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name){
+	
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}			
+	//add appropriate class devices for this version to the system
+	printk("%s detected at %lx\n",name,phys_addr);
+
+#ifdef CONFIG_GPIOCLASS
+	gpio_declare();
+	gpio_device_create(&virt_addr[0], &virt_addr[1],"portw");
+	gpio_device_create(&virt_addr[2], &virt_addr[3],"portx");
+	gpio_device_create(&virt_addr[4], &virt_addr[5],"porty");
+	gpio_device_create(&virt_addr[6], &virt_addr[7],"portz");
+#endif
+				
+return 0;
+}
+#endif //CONFIG_ECOREEX_TGPIO
+//---------------------------------------------------------------------------------
+#ifdef CONFIG_ECOREEX_SGPWM
+#define CPLD_GPWM_NAME "iPac Shadow GPI/O & PWM expansion R1.0"
+#define CPLD_GPWM 0xA1
+
+#define CPLD_GPWM_NAME_11 "iPac Shadow GPI/O & PWM expansion R1.1"
+#define CPLD_GPWM_11 0xA2
+
+#define CPLD_GPWM_NAME_12 "iPac Shadow GPI/O & PWM expansion R1.2"
+#define CPLD_GPWM_12 0xA4
+
+static int gpwm_carddetect(mmcslot_t *s){
+	u8 status = atomic_gpio_data_read(s->pd[MMCCD]);
+	return (status&1)?0:1;
+}
+
+static int gpwm_writeprotect(mmcslot_t *s){
+	u8 status = atomic_gpio_data_read(s->pd[MMCWP]);
+	return (status&2)?1:0;
+}
+
+static inline int CPLD_GPWM_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name,struct ecoreex_data *e){
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}
+	
+	printk("%s detected at %lx\n",name,phys_addr);			
+	//add appropriate class devices for this version to the system
+
+#ifdef CONFIG_GPIOCLASS	
+{
+	struct class_device *status = gpi_device_create(&virt_addr[6],"status");
+	gpi_device_create(&virt_addr[0],"portw");
+	gpo_device_create(&virt_addr[1],"portx");
+	gpo_device_create(&virt_addr[2],"porty");
+	gpi_device_create(&virt_addr[3],"portz");
+	gpo_device_create(&virt_addr[7],"control");
+	 
+	if(e->mmcslot){//implement MMC CD and WP functions
+		e->mmcslot->carddetect = gpwm_carddetect;
+		e->mmcslot->writeprotect = gpwm_writeprotect;
+		e->mmcslot->pd[MMCWP]=e->mmcslot->pd[MMCCD]=status->class_data;//pass back gpio class structures
+	}
+}
+#endif	//CONFIG_GPIOCLASS
+
+#ifdef CONFIG_PWMCLASS
+	pwmd_device_create(&virt_addr[4],"gpwma",e->read_periodusa);
+	pwmd_device_create(&virt_addr[5],"gpwmb",e->read_periodusa);
+#endif	
+
+
+
+return 0;
+}
+
+#endif //CONFIG_ECOREEX_SGPWM
+
+//---------------------------------------------------------------------------------
+#ifdef CONFIG_ECOREEX_GCMB
+#define CPLD_GCMB_NAME_10 "GCMB CPLD expansion R1.0"
+#define CPLD_GCMB 0xB0
+
+static inline int CPLD_GCMB_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name){
+	
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}
+	
+	printk("%s detected at %lx\n",name,phys_addr);			
+	//add appropriate class devices for this version to the system
+
+#ifdef CONFIG_GPIOCLASS	
+	gpio_declare();
+	gpo_device_create(&virt_addr[0],"dlais321");
+	gpi_device_create(&virt_addr[4],"rlwc3210");
+	gpio_device_create(&virt_addr[2], NULL,"spi_7730");
+#endif	//CONFIG_GPIOCLASS
+
+return 0;
+}
+
+#endif //CONFIG_ECOREEX_GCMB
+
+//---------------------------------------------------------------------------------
+#ifdef CONFIG_ECOREEX_DENM
+#define CPLD_DENM_NAME_12 "DENM CPLD expansion R1.2/R1.3"
+#define CPLD_DENM_NAME_14 "DENM CPLD expansion R1.4"
+#define CPLD_DENM_NAME_15 "DENM CPLD expansion R1.5"
+#define CPLD_DENM_NAME_16 "DENM CPLD expansion R1.6"
+#define CPLD_DENM_NAME_17 "DENM CPLD expansion R1.7"
+#define CPLD_DENM_NAME_18 "DENM CPLD expansion R1.8"
+#define CPLD_DENM 0x92
+#define CPLD_DENM14 0x93
+#define CPLD_DENM15 0x94
+#define CPLD_DENM16 0x95
+#define CPLD_DENM17 0x98
+#define CPLD_DENM18 0x99
+
+static inline int CPLD_DENM_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name){
+	
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}
+	
+	printk("%s detected at %lx\n",name,phys_addr);			
+	//add appropriate class devices for this version to the system
+
+#ifdef CONFIG_GPIOCLASS	
+	gpio_declare();
+	gpi_device_create(&virt_addr[2],"counter0");
+	gpi_device_create(&virt_addr[4],"counter1");
+	gpi_device_create(&virt_addr[5],"counter2");
+	gpi_device_create(&virt_addr[8],"counter3");
+	gpi_device_create(&virt_addr[10],"counter4");
+	gpi_device_create(&virt_addr[12],"counter5");
+	gpi_device_create(&virt_addr[14],"ct543210");
+	
+	gpo_device_create(&virt_addr[16],"oxrs4321");
+	gpo_device_create(&virt_addr[17],"xxrt321b");
+	
+	gpio_device_create(&virt_addr[3], NULL,"rollover");
+#endif	//CONFIG_GPIOCLASS
+
+return 0;
+}
+
+static inline int CPLD_DENM14_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name){
+	
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}
+	
+	printk("%s detected at %lx\n",name,phys_addr);			
+	//add appropriate class devices for this version to the system
+
+#ifdef CONFIG_GPIOCLASS	
+	gpio_declare();
+	gpi_device_create(&virt_addr[2],"counter0");
+	gpi_device_create(&virt_addr[4],"counter1");
+	gpi_device_create(&virt_addr[6],"counter2");
+	gpi_device_create(&virt_addr[8],"counter3");
+	gpi_device_create(&virt_addr[10],"counter4");
+	gpi_device_create(&virt_addr[12],"counter5");
+	gpi_device_create(&virt_addr[14],"ct543210");
+	
+	gpio_device_create(&virt_addr[16],NULL,"oxrs4321");
+	gpio_device_create(&virt_addr[17],NULL,"xxrt321b");
+	gpio_device_create(&virt_addr[3], NULL,"rollover");
+	gpo_device_create(&virt_addr[1],"debounce");
+	
+#endif	//CONFIG_GPIOCLASS
+
+return 0;
+}
+
+/**
+ * handler currently just indicates the that interrupt was handled and returns
+ */
+static irqreturn_t denm_interrupt(int irq, void *na){
+	//printk("denm interrupt\n");
+	return IRQ_HANDLED;
+}
+
+
+static inline int CPLD_DENM15_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name,struct ecoreex_data *e){
+	
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}
+	
+	printk("%s detected at %lx\n",name,phys_addr);			
+	//add appropriate class devices for this version to the system
+
+#ifdef CONFIG_GPIOCLASS	
+	gpio_declare();
+	gpi_device_create(&virt_addr[2],"counter0");
+	gpi_device_create(&virt_addr[4],"counter1");
+	gpi_device_create(&virt_addr[6],"counter2");
+	gpi_device_create(&virt_addr[8],"counter3");
+	gpi_device_create(&virt_addr[10],"counter4");
+	gpi_device_create(&virt_addr[12],"counter5");
+	gpi_device_create(&virt_addr[14],"ct543210");
+	
+	gpio_device_create(&virt_addr[16],NULL,"oxrs4321");
+	gpio_device_create(&virt_addr[17],NULL,"xxrt321b");
+	gpio_device_create(&virt_addr[3], NULL,"rollover");
+	gpio_device_create(&virt_addr[1],NULL,"debounce");
+	
+	/*
+		 * Allocate the IRQ
+		 */
+	if(e->irq){
+		int err = request_irq(e->irq, denm_interrupt,IRQT_RISING,name, NULL);
+		if(err<0)
+			printk("ecoreex request for irq %d failed with %d\n",e->irq,err);
+			//printk("ecoreex request for irq %d failed\n",e->irq);
+		
+		else set_irq_wake(e->irq,1);//if the board provides an irq, register it to wake up pm.
+	}
+	
+#endif	//CONFIG_GPIOCLASS
+
+return 0;
+}
+
+#endif //CONFIG_ECOREEX_DENM
+
+/************************************************************
+ * core mappings based upon a key
+ */
+static inline void map_core(unsigned long phys_addr, unsigned long size, struct ecoreex_data *data)
+{
+    u8 *virt_addr = ioremap_nocache(phys_addr,size);
+    int version = VERSION_KEY;
+    
+    if(virt_addr==NULL)printk("could not remap physical memory at %lx for EMAC core\n",phys_addr);
+    else{
+        if (VERSION_KEY == -1)
+            version =ioread8(&virt_addr[data->key_offset]);
+        //    version = data->e_access->ecoreex_key_read(data->key_offset, virt_addr);
+        /* else the version is predefined */
+		printk("EMAC core version %x detected at %lx\n",version,phys_addr+data->key_offset );
+		switch(version){
+#ifdef CONFIG_ECOREEX_HWMS
+        case CPLD_HWMS:
+            CPLD_HWMS_map(phys_addr, virt_addr, size, CPLD_HWMS_NAME, data);
+        break;
+#endif
+#ifdef CONFIG_ECOREEX_SOM150
+        case CPLD_SOM150:
+            CPLD_SOM150_map(phys_addr, virt_addr, size, CPLD_SOM150_NAME, data);
+        break;
+#endif
+			//-----------------------------------------------------------
+			#ifdef CONFIG_ECOREEX_TGPIO
+			case CPLD_BASE:
+				CPLD_BASE_map(phys_addr,virt_addr,size,CPLD_BASE_NAME);
+			break;
+			case CPLD_BASE_11:
+				CPLD_BASE_map(phys_addr,virt_addr,size,CPLD_BASE_NAME_11);
+			break;
+			#endif //CONFIG_ECOREEX_TGPIO
+			//-----------------------------------------------------------
+			#ifdef CONFIG_ECOREEX_SGPWM
+			case CPLD_GPWM:
+				CPLD_GPWM_map(phys_addr,virt_addr,size,CPLD_GPWM_NAME,data);
+			break;
+			case CPLD_GPWM_11:
+				CPLD_GPWM_map(phys_addr,virt_addr,size,CPLD_GPWM_NAME_11,data);
+			break;
+			case CPLD_GPWM_12:
+				CPLD_GPWM_map(phys_addr,virt_addr,size,CPLD_GPWM_NAME_12,data);
+			break;
+			#endif //CONFIG_ECOREEX_SGPWM
+			//-----------------------------------------------------------
+			#ifdef CONFIG_ECOREEX_GCMB
+			case CPLD_GCMB:
+				CPLD_GCMB_map(phys_addr,virt_addr,size,CPLD_GCMB_NAME_10);
+			break;
+			#endif //CONFIG_ECOREEX_GCMB
+			//-----------------------------------------------------------			
+			#ifdef CONFIG_ECOREEX_DENM
+			case CPLD_DENM:
+				CPLD_DENM_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_12);
+			break;
+			case CPLD_DENM14:
+				CPLD_DENM14_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_14);
+			break;
+			case CPLD_DENM15:
+				CPLD_DENM15_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_15,data);
+			break;
+			case CPLD_DENM16:
+				CPLD_DENM15_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_16,data);	
+			break;
+			case CPLD_DENM17:
+				CPLD_DENM15_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_17,data);	
+			break;
+			case CPLD_DENM18:
+				CPLD_DENM15_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_18,data);	
+			break;			
+			#endif //CONFIG_ECOREEX_DENM
+			//--------------------------------------------------------
+			
+			default://unrecognized CPLD or no CPLD available, silently fail and the physical memory region
+				iounmap(virt_addr);
+			}
+		}
+}
+
+static int ecoreex_probe(struct platform_device *pdev){
+	//printk("ecoreex_probe\n");	
+	if (pdev == NULL)return -ENODEV;
+	map_core(pdev->resource->start,(pdev->resource->end-pdev->resource->start+1),pdev->dev.platform_data);
+	return 0;
+}
+
+//driver currently has no removal method.
+static struct platform_driver ecoreex_driver = {
+	.probe		= ecoreex_probe,
+	.driver		= {
+		.name	= "ecoreex",
+	},
+};
+
+#define DRV_MODULE_NAME 	"ecoreex"
+#define DRV_MODULE_VERSION 	"1.2"
+static int __init ecoreex_init_module(void)
+{
+	printk(KERN_INFO DRV_MODULE_NAME " version " DRV_MODULE_VERSION " loading\n");
+	return platform_driver_register(&ecoreex_driver);
+}
+
+static void __exit ecoreex_cleanup_module(void)
+{
+	platform_driver_unregister(&ecoreex_driver);
+}
+
+module_init(ecoreex_init_module);
+module_exit(ecoreex_cleanup_module);
+
diff -Naur linux-2.6.20-at92_e1.6.1/drivers/ioex/Kconfig linux-2.6.20-at92_e1.6.2/drivers/ioex/Kconfig
--- linux-2.6.20-at92_e1.6.1/drivers/ioex/Kconfig	2008-04-02 17:48:10.000000000 -0500
+++ linux-2.6.20-at92_e1.6.2/drivers/ioex/Kconfig	2008-04-02 17:32:44.000000000 -0500
@@ -40,7 +40,13 @@
         bool "Armstrong HWMS expansion I/O"
         ---help---
         Provides support for the Armstrong HWMS PLD
-        
+
+config ECOREEX_SOM150
+        depends on ECOREEX
+        bool "EMAC SoM-150-ES expansion I/O"
+        ---help---
+        Provides support for the EMAC SoM-150-ES PLD
+
 config ECOREEX_KEY
         depends on ECOREEX
         bool "Define static version key"
