Update 1 of the 2.6.34 linux kernel release linux-2.6.34_lpc32x0_v1.02
authorKevin Wells <wellsk40@gmail.com>
Fri, 16 Jul 2010 15:57:38 +0000 (08:57 -0700)
committerKevin Wells <wellsk40@gmail.com>
Fri, 16 Jul 2010 15:57:38 +0000 (08:57 -0700)
    *  Fixed an issue with USB clock/enable disable that could sometimes prevent USB clock from starting
    * Revised SD card clock rate set, get, and rounding functions
    * Fixed scatter/gather linked list support (fixes an audio issue)
    * Added support in DMA driver for scatter/gather specific for NAND and software burst enable
    * Fixed a potential compilation issue in the ea3250.c file when the LCD is disabled
    * Re-sized and added/removed MTD partitions for NAND for EA and Phytec boards
    * Added DMA support for NAND/MTD for EA and Phytec boards
    * Fixed an issue with gpiolib that would return a wrong state for GPIO banks 3 input pins
    * Fixed several incorrectly named definitions (was LCP, now LPC)
    * Removed wakeup event clear logic from IRQ driver when interrupt is cleared, not needed
    * SD/MMC driver data handling completely re-written, now supports scatter/gather and is better optimized
    * Updated card detect, write protect, and power control logic for the SD card controller driver for the Phytec board (uses driver functions now instead of callbacks)
    * Added a simple GPIO interrupt and event wakeup example for the Phytec board using the BTN1 button
    * Added wakeup support to the touchscreen driver
    * Added suspend/resume functions to the high speed UART driver
    * NAND/MTD driver now supports hardware ECC
    * Fixed and improved alarm functions in the RTC driver
    * Fixed and enabled gadget driver DMA support
    * Fixed an issue with the gadget driver where the USB D pulldown would get stuck asserted when the module was removed
    * Fixed several clock crash issues with the gadget driver related to module removal and cable removal
    * Added default configurations in arch/arm/configs for the EA3250 and PHY3250 boards

18 files changed:
arch/arm/configs/ea3250_defconfig [new file with mode: 0644]
arch/arm/configs/phy3250_defconfig [new file with mode: 0644]
arch/arm/mach-lpc32xx/clock.c
arch/arm/mach-lpc32xx/dma.c
arch/arm/mach-lpc32xx/ea3250.c
arch/arm/mach-lpc32xx/gpiolib.c
arch/arm/mach-lpc32xx/include/mach/dma.h
arch/arm/mach-lpc32xx/include/mach/platform.h
arch/arm/mach-lpc32xx/irq.c
arch/arm/mach-lpc32xx/phy3250.c
arch/arm/mach-lpc32xx/timer.c
drivers/input/touchscreen/lpc32xx_ts.c
drivers/mmc/host/mmci.c
drivers/mtd/nand/lpc32xx_nand.c
drivers/rtc/rtc-lpc32xx.c
drivers/serial/lpc32xx_hs.c
drivers/usb/gadget/lpc32xx_udc.c
drivers/usb/gadget/lpc32xx_udc.h

diff --git a/arch/arm/configs/ea3250_defconfig b/arch/arm/configs/ea3250_defconfig
new file mode 100644 (file)
index 0000000..2a55605
--- /dev/null
@@ -0,0 +1,1669 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.34
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_HAVE_PROC_CPU=y
+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_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# 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=y
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO 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_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_LZO is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=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_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+
+#
+# GCOV-based kernel profiling
+#
+# 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_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+# CONFIG_FREEZER is not set
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# 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 is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X 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_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+CONFIG_ARCH_LPC32XX=y
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_NUC93X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_SHMOBILE 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_S5P6440 is not set
+# CONFIG_ARCH_S5P6442 is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_MACH_PHY3250 is not set
+CONFIG_MACH_EA3250=y
+
+#
+# Embedded Artists Display Selection
+#
+CONFIG_EA3250_QVGA_3_2_LCD=y
+# CONFIG_EA3250_QVGA_2_8_OLED is not set
+
+#
+# Standard UARTS
+#
+# CONFIG_ARCH_LPC32XX_UART3_SELECT is not set
+# CONFIG_ARCH_LPC32XX_UART4_SELECT is not set
+CONFIG_ARCH_LPC32XX_UART5_SELECT=y
+# CONFIG_ARCH_LPC32XX_UART6_SELECT is not set
+
+#
+# High speed UARTS
+#
+# CONFIG_ARCH_LPC32XX_HSUART1_SELECT is not set
+# CONFIG_ARCH_LPC32XX_HSUART2_SELECT is not set
+# CONFIG_ARCH_LPC32XX_HSUART7_SELECT is not set
+
+#
+# LPC32XX chip components
+#
+# CONFIG_ARCH_LPC32XX_IRAM_FOR_NET is not set
+# CONFIG_ARCH_LPC32XX_MII_SUPPORT is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_LEGACY=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_ARM_L1_CACHE_SHIFT=5
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# 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_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# 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=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n81 root=/dev/ram0"
+# 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_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_SUSPEND is not set
+# CONFIG_APM_EMULATION is not set
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# 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_IP_MROUTE 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_LRO 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_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS 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_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT 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_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# 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_TESTS is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# 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 is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L 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
+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=y
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SLC_LPC32XX=y
+# 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 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=y
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+CONFIG_EEPROM_AT25=y
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# 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=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
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+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=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG 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_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+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 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=y
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MICREL_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=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_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+CONFIG_LPC_ENET=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_WLAN 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 is not set
+# CONFIG_USB_IPHETH is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# 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_ADP5588 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_LPC32XX is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# 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_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_EETI 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_LPC32XX is not set
+# CONFIG_TOUCHSCREEN_MCS5000 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_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_AMBAKMI is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 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=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_AMBA_PL010 is not set
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_HS_LPC32XX is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
+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 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_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PNX=y
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX 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
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PL022=y
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_PL061 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_PNX4008_WATCHDOG=y
+# CONFIG_MAX63XX_WATCHDOG is not set
+
+#
+# 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_88PM860X 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_HTC_I2CPLD is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_AB4500_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT 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_ARMCLCD=y
+# CONFIG_FB_S1D13XXX is not set
+# 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 is not set
+
+#
+# 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=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_JACK=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY 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_SEQUENCER_OSS=y
+# CONFIG_SND_HRTIMER is not set
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+# CONFIG_SND_SPI is not set
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_UA101 is not set
+# CONFIG_SND_USB_CAIAQ is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_LPC3XXX_SOC=y
+CONFIG_SND_LPC3XXX_SOC_I2S_UDA1380=y
+CONFIG_SND_LPC32XX_USEI2S1=y
+# CONFIG_SND_LPC32XX_USEI2S_SLAVE_MODETX is not set
+# CONFIG_SND_LPC32XX_USEI2S_SLAVE_MODERX is not set
+CONFIG_SND_LPC32XX_SLAVE_TX_CLK_TO_RX=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_UDA1380=y
+# CONFIG_SOUND_PRIME is not set
+# CONFIG_HID_SUPPORT 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=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB 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_ISP1362_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
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# 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=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL 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_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_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ULPI 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 is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_ARMMMCI=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+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=y
+# 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_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 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
+# CONFIG_RTC_DRV_PCF2123 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_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+CONFIG_RTC_DRV_LPC32XX=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# 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 is not set
+# CONFIG_EXT4_FS is not set
+# 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_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE 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=y
+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 is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_LOGFS 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_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=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_CEPH_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
+
+#
+# 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="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 is not set
+# 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=y
+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=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS 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_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_DETECT_HUNG_TASK is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_PREEMPT 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_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_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+CONFIG_FRAME_POINTER=y
+# 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_DEBUG_FORCE_WEAK_PER_CPU 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_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_ARM_UNWIND is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+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_HASH2=y
+CONFIG_CRYPTO_RNG=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
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# 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=y
+# 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 is not set
+# 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 is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=y
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
diff --git a/arch/arm/configs/phy3250_defconfig b/arch/arm/configs/phy3250_defconfig
new file mode 100644 (file)
index 0000000..f9aa9b4
--- /dev/null
@@ -0,0 +1,1708 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.34
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_HAVE_PROC_CPU=y
+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_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# 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=y
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO 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_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_LZO is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=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_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+
+#
+# GCOV-based kernel profiling
+#
+# 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_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# 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 is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X 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_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+CONFIG_ARCH_LPC32XX=y
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_NUC93X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_SHMOBILE 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_S5P6440 is not set
+# CONFIG_ARCH_S5P6442 is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_MACH_PHY3250=y
+# CONFIG_MACH_EA3250 is not set
+
+#
+# Standard UARTS
+#
+# CONFIG_ARCH_LPC32XX_UART3_SELECT is not set
+# CONFIG_ARCH_LPC32XX_UART4_SELECT is not set
+CONFIG_ARCH_LPC32XX_UART5_SELECT=y
+# CONFIG_ARCH_LPC32XX_UART6_SELECT is not set
+
+#
+# High speed UARTS
+#
+# CONFIG_ARCH_LPC32XX_HSUART1_SELECT is not set
+# CONFIG_ARCH_LPC32XX_HSUART2_SELECT is not set
+# CONFIG_ARCH_LPC32XX_HSUART7_SELECT is not set
+
+#
+# LPC32XX chip components
+#
+# CONFIG_ARCH_LPC32XX_IRAM_FOR_NET is not set
+# CONFIG_ARCH_LPC32XX_MII_SUPPORT is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_LEGACY=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_ARM_L1_CACHE_SHIFT=5
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# 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_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# 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=999999
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n81 root=/dev/ram0"
+# 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_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=y
+# 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 is not set
+# CONFIG_PM_RUNTIME is not set
+CONFIG_PM_OPS=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# 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_IP_MROUTE 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_LRO 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_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS 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_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT 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_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# 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_TESTS is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# 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 is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L 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
+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=y
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SLC_LPC32XX=y
+# 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 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=y
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+CONFIG_EEPROM_AT25=y
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# 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=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
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+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=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG 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_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+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 is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+CONFIG_SMSC_PHY=y
+# 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_MICREL_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=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_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+CONFIG_LPC_ENET=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_WLAN 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 is not set
+# CONFIG_USB_IPHETH is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# 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_ADP5588 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_LPC32XX is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# 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 is not set
+# 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_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_EETI 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_LPC32XX=y
+# CONFIG_TOUCHSCREEN_MCS5000 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_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_AMBAKMI is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 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=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_AMBA_PL010 is not set
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_HS_LPC32XX is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
+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 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_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PNX=y
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX 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
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PL022=y
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_PL061 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_PNX4008_WATCHDOG=y
+# CONFIG_MAX63XX_WATCHDOG is not set
+
+#
+# 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_88PM860X 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_HTC_I2CPLD is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_AB4500_CORE is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT 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_ARMCLCD=y
+# CONFIG_FB_S1D13XXX is not set
+# 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 is not set
+
+#
+# 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=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_JACK=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY 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_SEQUENCER_OSS=y
+# CONFIG_SND_HRTIMER is not set
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+# CONFIG_SND_SPI is not set
+CONFIG_SND_USB=y
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_UA101 is not set
+# CONFIG_SND_USB_CAIAQ is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_LPC3XXX_SOC=y
+CONFIG_SND_LPC3XXX_SOC_I2S_UDA1380=y
+CONFIG_SND_LPC32XX_USEI2S1=y
+# CONFIG_SND_LPC32XX_USEI2S_SLAVE_MODETX is not set
+# CONFIG_SND_LPC32XX_USEI2S_SLAVE_MODERX is not set
+CONFIG_SND_LPC32XX_SLAVE_TX_CLK_TO_RX=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_UDA1380=y
+# CONFIG_SOUND_PRIME is not set
+# CONFIG_HID_SUPPORT 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 is not set
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MON is not set
+# 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_ISP1362_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 is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# 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=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL 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_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_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+CONFIG_USB_GADGET_LPC32XX=y
+CONFIG_USB_LPC32XX=y
+# 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_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 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_LANGWELL 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_AUDIO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_MASS_STORAGE 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
+# CONFIG_USB_G_NOKIA is not set
+# CONFIG_USB_G_MULTI is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ULPI 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 is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_ARMMMCI=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+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=y
+# 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_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 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
+# CONFIG_RTC_DRV_PCF2123 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_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+CONFIG_RTC_DRV_LPC32XX=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# 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 is not set
+# CONFIG_EXT4_FS is not set
+# 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_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE 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=y
+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=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_LOGFS 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_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=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_CEPH_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
+
+#
+# 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="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 is not set
+# 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=y
+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=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS 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_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_DETECT_HUNG_TASK is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_PREEMPT 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_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_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+CONFIG_FRAME_POINTER=y
+# 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_DEBUG_FORCE_WEAK_PER_CPU 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_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+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_HASH2=y
+CONFIG_CRYPTO_RNG=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
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# 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=y
+# 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 is not set
+# 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 is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=y
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
index 182d2a6..d9fbb4c 100644 (file)
@@ -431,13 +431,18 @@ static int local_usbpll_enable(struct clk *clk, int enable)
                /*
                 * Gate clock from PLL if PLL is locked
                 */
-               if (ret == 0)
+               if (ret == 0) {
                        __raw_writel(reg | LPC32XX_CLKPWR_USBCTRL_CLK_EN2,
                                LPC32XX_CLKPWR_USB_CTRL);
-               else
+               }
+               else {
                        __raw_writel(reg & ~(LPC32XX_CLKPWR_USBCTRL_CLK_EN1 |
                                LPC32XX_CLKPWR_USBCTRL_PLL_PWRUP),
                                LPC32XX_CLKPWR_USB_CTRL);
+               }
+       } else if ((enable == 0) && usb_pll_valid  && usb_pll_enable) {
+               usb_pll_valid = 0;
+               usb_pll_enable = 0;
        }
 
        return ret;
@@ -488,9 +493,6 @@ static int local_usbpll_set_rate(struct clk *clk, unsigned long rate)
        if (local_clk_find_pll_cfg(clkin, rate, &pllsetup) == 0)
                return -EINVAL;
 
-       usb_pll_valid = 1;
-       usb_pll_enable = 1;
-
        /*
         * Disable PLL clocks during PLL change
         */
@@ -501,7 +503,10 @@ static int local_usbpll_set_rate(struct clk *clk, unsigned long rate)
        /*
         * Start USB PLL and check PLL status
         */
+
+       usb_pll_valid = 1;
        usb_pll_enable = 1;
+
        ret = local_usbpll_enable(clk, 1);
        if (ret >= 0)
                clk->rate = clk_check_pll_setup(clkin, &pllsetup);
@@ -766,6 +771,10 @@ static int mmc_onoff_enable(struct clk *clk, int enable)
        if (enable != 0)
                tmp |= LPC32XX_CLKPWR_MSCARD_SDCARD_EN;
 
+       /* Start clock at highest rate */
+       if (!(tmp & LPC32XX_CLKPWR_MSCARD_SDCARD_DIV(0xF)))
+               tmp |= LPC32XX_CLKPWR_MSCARD_SDCARD_DIV(1);
+
        __raw_writel(tmp, LPC32XX_CLKPWR_MS_CTRL);
 
        return 0;
@@ -773,14 +782,9 @@ static int mmc_onoff_enable(struct clk *clk, int enable)
 
 static unsigned long mmc_get_rate(struct clk *clk)
 {
-       u32 div, rate, oldclk;
+       u32 div, rate;
 
-       /* The MMC clock must be on when accessing an MMC register */
-       oldclk = __raw_readl(LPC32XX_CLKPWR_MS_CTRL);
-       __raw_writel(oldclk | LPC32XX_CLKPWR_MSCARD_SDCARD_EN,
-               LPC32XX_CLKPWR_MS_CTRL);
        div = __raw_readl(LPC32XX_CLKPWR_MS_CTRL);
-       __raw_writel(oldclk, LPC32XX_CLKPWR_MS_CTRL);
 
        /* Get the parent clock rate */
        rate = clk->parent->get_rate(clk->parent);
@@ -808,12 +812,19 @@ static unsigned long mmc_round_rate(struct clk *clk, unsigned long rate)
        if (div > 0xf)
                div = 0xf;
 
+       /*
+        * The divider is forced to 1 to keep the SD clock granularity
+        * good. Using a non-0 divider will limit the SD card clock rates
+        * the SD driver can generate. Remove it if your feeling crazy.
+        */
+       div = 1;
+
        return prate / div;
 }
 
 static int mmc_set_rate(struct clk *clk, unsigned long rate)
 {
-       u32 oldclk, tmp;
+       u32 tmp;
        unsigned long prate, div, crate = mmc_round_rate(clk, rate);
 
        prate = clk->parent->get_rate(clk->parent);
@@ -821,19 +832,17 @@ static int mmc_set_rate(struct clk *clk, unsigned long rate)
        div = prate / crate;
 
        /* The MMC clock must be on when accessing an MMC register */
-       oldclk = __raw_readl(LPC32XX_CLKPWR_MS_CTRL);
-       __raw_writel(oldclk | LPC32XX_CLKPWR_MSCARD_SDCARD_EN,
-               LPC32XX_CLKPWR_MS_CTRL);
        tmp = __raw_readl(LPC32XX_CLKPWR_MS_CTRL) &
                ~LPC32XX_CLKPWR_MSCARD_SDCARD_DIV(0xf);
        tmp |= LPC32XX_CLKPWR_MSCARD_SDCARD_DIV(div);
        __raw_writel(tmp, LPC32XX_CLKPWR_MS_CTRL);
 
-       __raw_writel(oldclk, LPC32XX_CLKPWR_MS_CTRL);
-
        return 0;
 }
 
+/*
+ * This is the MMC IP clock, not the MMC CLK signal rate!
+ */
 static struct clk clk_mmc = {
        .parent         = &clk_armpll,
        .set_rate       = mmc_set_rate,
index 926fe26..e960941 100644 (file)
@@ -72,7 +72,7 @@ struct dma_channel {
        u32 list_vstart; /* Allocated (virtual) address of list */
        u32 list_pstart; /* Allocated (physical) address of list */
        int free_entries; /* Number of free descriptors */
-       struct dma_list_ctrl *list_head, *list_tail;
+       struct dma_list_ctrl *list_head, *list_tail, *list_curr;
 };
 
 struct dma_control {
@@ -399,13 +399,17 @@ u32 lpc32xx_dma_alloc_llist(int ch,
        if ((!VALID_CHANNEL(ch)) || (dma_ctrl.dma_channels[ch].name == NULL))
                return 0;
 
-       /* Limit number of list entries */
+       /*
+        * Limit number of list entries, but add 1 extra entry as a spot holder
+        * for the end of the list
+        */
        if (entries < 2) {
                entries = 2;
        }
        if (entries > 64) {
                entries = 64;
        }
+       entries++;
 
        /* Save list information */
        dma_ctrl.dma_channels[ch].list_entries = entries;
@@ -434,9 +438,10 @@ u32 lpc32xx_dma_alloc_llist(int ch,
        pdmalist->prev_list_phy = lpc32xx_dma_llist_v_to_p(ch, (u32) pdmalist->prev_list_addr);
 
        /* Save current free descriptors and current head/tail */
-       dma_ctrl.dma_channels[ch].free_entries = entries;
+       dma_ctrl.dma_channels[ch].free_entries = entries - 1;
        dma_ctrl.dma_channels[ch].list_head = pdmalist;
        dma_ctrl.dma_channels[ch].list_tail = pdmalist;
+       dma_ctrl.dma_channels[ch].list_curr = pdmalist;
 
        return dma_ctrl.dma_channels[ch].list_vstart;
 }
@@ -486,8 +491,10 @@ extern void lpc32xx_dma_flush_llist(int ch) {
                dma_ctrl.dma_channels[ch].list_vstart;
        dma_ctrl.dma_channels[ch].list_tail = (struct dma_list_ctrl *)
                dma_ctrl.dma_channels[ch].list_vstart;
+       dma_ctrl.dma_channels[ch].list_curr = (struct dma_list_ctrl *)
+               dma_ctrl.dma_channels[ch].list_vstart;
        dma_ctrl.dma_channels[ch].free_entries =
-               dma_ctrl.dma_channels[ch].list_entries;
+               dma_ctrl.dma_channels[ch].list_entries - 1;
 }
 EXPORT_SYMBOL_GPL(lpc32xx_dma_flush_llist);
 
@@ -543,6 +550,24 @@ u32 lpc32xx_dma_queue_llist_entry(int ch,
                __raw_writel(ctrl, DMACH_CONTROL(DMAIOBASE, ch));
                __raw_writel(cfg, DMACH_CONFIG_CH(DMAIOBASE, ch));
        }
+       else if (__raw_readl(DMACH_LLI(DMAIOBASE, ch)) == 0) {
+               /* Update current entry to next entry */
+               __raw_writel(dma_ctrl.dma_channels[ch].list_tail->next_list_phy,
+                       DMACH_LLI(DMAIOBASE, ch));
+
+               /*
+                * If the channel was stopped before the next entry made it into the
+                * hardware descriptor, the next entry didn't make it there fast enough,
+                * so load the new descriptor here.
+                */
+               if ((__raw_readl(DMACH_CONFIG_CH(DMAIOBASE, ch)) & DMAC_CHAN_ENABLE) == 0) {
+                       __raw_writel((u32) src, DMACH_SRC_ADDR(DMAIOBASE, ch));
+                       __raw_writel((u32) dst, DMACH_DEST_ADDR(DMAIOBASE, ch));
+                       __raw_writel(0, DMACH_LLI(DMAIOBASE, ch));
+                       __raw_writel(ctrl, DMACH_CONTROL(DMAIOBASE, ch));
+                       __raw_writel(cfg, DMACH_CONFIG_CH(DMAIOBASE, ch));
+               }
+       }
 
        /* Process next link on next call */
        dma_ctrl.dma_channels[ch].list_head = plhead->next_list_addr;
@@ -579,6 +604,69 @@ extern u32 lpc32xx_get_free_llist_entry(int ch) {
 }
 EXPORT_SYMBOL_GPL(lpc32xx_get_free_llist_entry);
 
+int lpc32xx_dma_start_xfer(int ch, u32 config)
+{
+       struct dma_list_ctrl *plhead;
+       
+       if ((!VALID_CHANNEL(ch)) || (dma_ctrl.dma_channels[ch].name == NULL) ||
+               (dma_ctrl.dma_channels[ch].list_vstart == 0))
+               return -1;
+
+       plhead = dma_ctrl.dma_channels[ch].list_head;
+       __dma_regs_lock();
+       __raw_writel(plhead->dmall.src, DMACH_SRC_ADDR(DMAIOBASE, ch));
+       __raw_writel(plhead->dmall.dest, DMACH_DEST_ADDR(DMAIOBASE, ch));
+       __raw_writel(plhead->dmall.next_lli, DMACH_LLI(DMAIOBASE, ch));
+       __raw_writel(plhead->dmall.ctrl, DMACH_CONTROL(DMAIOBASE, ch));
+       __raw_writel(config, DMACH_CONFIG_CH(DMAIOBASE, ch));
+       __dma_regs_unlock();
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(lpc32xx_dma_start_xfer);
+
+u32 lpc32xx_dma_queue_llist(int ch, void *src, void *dst,
+                                 int size, u32 ctrl)
+{
+       struct dma_list_ctrl *plhead;
+
+       if ((!VALID_CHANNEL(ch)) || (dma_ctrl.dma_channels[ch].name == NULL) ||
+               (dma_ctrl.dma_channels[ch].list_vstart == 0))
+               return 0;
+
+       /* Exit if all the buffers are used */
+       if (dma_ctrl.dma_channels[ch].free_entries == 0) {
+               return 0;
+       }
+
+       /* Next available DMA link descriptor */
+       plhead = dma_ctrl.dma_channels[ch].list_curr;
+
+       /* Populate DMA linked data structure */
+       plhead->dmall.src = (u32) src;
+       plhead->dmall.dest = (u32) dst;
+       plhead->dmall.next_lli = 0;
+       plhead->dmall.ctrl = ctrl;
+
+       /* Append this link to the end of the previous link */
+       plhead->prev_list_addr->dmall.next_lli = lpc32xx_dma_llist_v_to_p(ch, (u32) plhead);
+
+       /* Decrement available buffers */
+       dma_ctrl.dma_channels[ch].free_entries--;
+
+       /* Process next link on next call */
+       dma_ctrl.dma_channels[ch].list_curr = plhead->next_list_addr;
+
+       return (u32) plhead;
+}
+EXPORT_SYMBOL_GPL(lpc32xx_dma_queue_llist);
+
+extern void lpc32xx_dma_force_burst(int ch, int src)
+{
+       __raw_writel(1 << src, DMA_SW_BURST_REQ(DMAIOBASE));
+}
+EXPORT_SYMBOL_GPL(lpc32xx_dma_force_burst);
+
 static irqreturn_t dma_irq_handler(int irq, void *dev_id)
 {
        int i;
@@ -624,8 +712,6 @@ static int __init lpc32xx_dma_init(void)
 {
        int ret;
 
-       printk(KERN_INFO "LPC32XX DMA driver\n");
-
        ret = request_irq(IRQ_LPC32XX_DMA, dma_irq_handler, 0, "DMA", NULL);
        if (ret) {
                printk(KERN_CRIT "Wow!  Can't register IRQ for DMA\n");
@@ -657,5 +743,3 @@ out:
        return ret;
 }
 arch_initcall(lpc32xx_dma_init);
-
-
index e2ffd36..320f913 100644 (file)
@@ -235,6 +235,7 @@ static int __init ea3250_spi_devices_register(void)
 }
 arch_initcall(ea3250_spi_devices_register);
 
+#if defined (CONFIG_FB_ARMCLCD)
 /*
  * LCDC AMBA Driver Board Functions
  */
@@ -529,6 +530,7 @@ struct amba_device lpc32xx_clcd_device = {
         .dma_mask                       = ~0,
         .irq                            = {IRQ_LPC32XX_LCD, NO_IRQ},
 };
+#endif
 
 /*
  * SPI LCDC Driver Probe function
@@ -575,7 +577,9 @@ void __init ea3250_spi_lcdc_drv_init(void)
 /* AMBA based devices list */
 static struct amba_device *amba_devs[] __initdata = {
        &lpc32xx_ssp0_device,
+#if defined (CONFIG_FB_ARMCLCD)
        &lpc32xx_clcd_device,
+#endif
 };
 
 /*
@@ -610,27 +614,27 @@ static int nandwp_enable(int enable)
 
         return 1;
 }
-#define BLK_SIZE (1024 * 128)
+#define BLK_SIZE (2048 * 64)
 static struct mtd_partition __initdata ea3250_nand_partition[] = {
         {
                 .name   = "ea3250-boot",
                 .offset = 0,
-                .size   = (BLK_SIZE * 7)
+                .size   = (BLK_SIZE * 25)
         },
         {
-                .name   = "ea3250-ubt-prms",
+                .name   = "ea3250-uboot",
                 .offset = MTDPART_OFS_APPEND,
-                .size   = (BLK_SIZE * 1)
+                .size   = (BLK_SIZE * 100)
         },
         {
-                .name   = "ea3250-kernel",
+                .name   = "ea3250-ubt-prms",
                 .offset = MTDPART_OFS_APPEND,
-                .size   = (BLK_SIZE * 32)
+                .size   = (BLK_SIZE * 2)
         },
         {
-                .name   = "ea3250-rootfs",
+                .name   = "ea3250-kernel",
                 .offset = MTDPART_OFS_APPEND,
-                .size   = (BLK_SIZE * 40)
+                .size   = (BLK_SIZE * 32)
         },
         {
                 .name   = "ea3250-jffs2",
@@ -675,11 +679,16 @@ static struct resource slc_nand_resources[] = {
         },
 
 };
+
+static u64 lpc32xx_slc_dma_mask = 0xffffffffUL;
 static struct platform_device lpc32xx_slc_nand_device = {
         .name           = "lpc32xx-nand",
         .id             = 0,
         .dev            = {
                                 .platform_data  = &lpc32xx_nandcfg,
+                                .dma_mask    = &lpc32xx_slc_dma_mask,
+                                .coherent_dma_mask = ~0UL,
+
         },
         .num_resources  = ARRAY_SIZE(slc_nand_resources),
         .resource       = slc_nand_resources,
index 2f60faf..0d99331 100644 (file)
@@ -59,7 +59,7 @@
 #define GPO3_PIN_TO_BIT(x)                     (1 << (x))
 #define GPIO012_PIN_IN_SEL(x, y)               (((x) >> (y)) & 1)
 #define GPIO3_PIN_IN_SHIFT(x)                  ((x) == 5 ? 24 : 10 + (x))
-#define GPIO3_PIN_IN_SEL(x, y)                 ((x) >> GPIO3_PIN_IN_SHIFT(y))
+#define GPIO3_PIN_IN_SEL(x, y)                 (((x) >> GPIO3_PIN_IN_SHIFT(y)) & 1)
 #define GPIO3_PIN5_IN_SEL(x)                   (((x) >> 24) & 1)
 #define GPI3_PIN_IN_SEL(x, y)                  (((x) >> (y)) & 1)
 
index 840163c..075b722 100644 (file)
 
 #define MAX_DMA_CHANNELS 8
 
-#define DMA_CH_SDCARD_TX 0
-#define DMA_CH_SDCARD_RX 1
-#define DMA_CH_I2S_TX 2
-#define DMA_CH_I2S_RX 3
+#define DMA_CH_SDCARD_TX       0
+#define DMA_CH_SDCARD_RX       1
+#define DMA_CH_I2S_TX          2
+#define DMA_CH_I2S_RX          3
+#define DMA_CH_SLCNAND         4
 
 enum {
        DMA_INT_UNKNOWN = 0,
@@ -99,6 +100,12 @@ extern u32 lpc32xx_dma_queue_llist_entry(int ch,
                                         void *dst,
                                         int size);
 extern u32 lpc32xx_get_free_llist_entry(int ch);
+extern u32 lpc32xx_dma_queue_llist(int ch,
+                                  void *src,
+                                  void *dst,
+                                  int size,
+                                  u32 ctrl);
+extern int lpc32xx_dma_start_xfer(int chan, u32 config);
+extern void lpc32xx_dma_force_burst(int ch, int src);
 
 #endif /* _ASM_ARCH_DMA_H */
-
index 14ea8d1..85f9aff 100644 (file)
 /*
  * Timer/counter register offsets
  */
-#define LCP32XX_TIMER_IR(x)                    io_p2v((x) + 0x00)
-#define LCP32XX_TIMER_TCR(x)                   io_p2v((x) + 0x04)
-#define LCP32XX_TIMER_TC(x)                    io_p2v((x) + 0x08)
-#define LCP32XX_TIMER_PR(x)                    io_p2v((x) + 0x0C)
-#define LCP32XX_TIMER_PC(x)                    io_p2v((x) + 0x10)
-#define LCP32XX_TIMER_MCR(x)                   io_p2v((x) + 0x14)
-#define LCP32XX_TIMER_MR0(x)                   io_p2v((x) + 0x18)
-#define LCP32XX_TIMER_MR1(x)                   io_p2v((x) + 0x1C)
-#define LCP32XX_TIMER_MR2(x)                   io_p2v((x) + 0x20)
-#define LCP32XX_TIMER_MR3(x)                   io_p2v((x) + 0x24)
-#define LCP32XX_TIMER_CCR(x)                   io_p2v((x) + 0x28)
-#define LCP32XX_TIMER_CR0(x)                   io_p2v((x) + 0x2C)
-#define LCP32XX_TIMER_CR1(x)                   io_p2v((x) + 0x30)
-#define LCP32XX_TIMER_CR2(x)                   io_p2v((x) + 0x34)
-#define LCP32XX_TIMER_CR3(x)                   io_p2v((x) + 0x38)
-#define LCP32XX_TIMER_EMR(x)                   io_p2v((x) + 0x3C)
-#define LCP32XX_TIMER_CTCR(x)                  io_p2v((x) + 0x70)
+#define LPC32XX_TIMER_IR(x)                    io_p2v((x) + 0x00)
+#define LPC32XX_TIMER_TCR(x)                   io_p2v((x) + 0x04)
+#define LPC32XX_TIMER_TC(x)                    io_p2v((x) + 0x08)
+#define LPC32XX_TIMER_PR(x)                    io_p2v((x) + 0x0C)
+#define LPC32XX_TIMER_PC(x)                    io_p2v((x) + 0x10)
+#define LPC32XX_TIMER_MCR(x)                   io_p2v((x) + 0x14)
+#define LPC32XX_TIMER_MR0(x)                   io_p2v((x) + 0x18)
+#define LPC32XX_TIMER_MR1(x)                   io_p2v((x) + 0x1C)
+#define LPC32XX_TIMER_MR2(x)                   io_p2v((x) + 0x20)
+#define LPC32XX_TIMER_MR3(x)                   io_p2v((x) + 0x24)
+#define LPC32XX_TIMER_CCR(x)                   io_p2v((x) + 0x28)
+#define LPC32XX_TIMER_CR0(x)                   io_p2v((x) + 0x2C)
+#define LPC32XX_TIMER_CR1(x)                   io_p2v((x) + 0x30)
+#define LPC32XX_TIMER_CR2(x)                   io_p2v((x) + 0x34)
+#define LPC32XX_TIMER_CR3(x)                   io_p2v((x) + 0x38)
+#define LPC32XX_TIMER_EMR(x)                   io_p2v((x) + 0x3C)
+#define LPC32XX_TIMER_CTCR(x)                  io_p2v((x) + 0x70)
 
 /*
  * ir register definitions
  */
-#define LCP32XX_TIMER_CNTR_MTCH_BIT(n)         (1 << ((n) & 0x3))
-#define LCP32XX_TIMER_CNTR_CAPT_BIT(n)         (1 << (4 + ((n) & 0x3)))
+#define LPC32XX_TIMER_CNTR_MTCH_BIT(n)         (1 << ((n) & 0x3))
+#define LPC32XX_TIMER_CNTR_CAPT_BIT(n)         (1 << (4 + ((n) & 0x3)))
 
 /*
  * tcr register definitions
  */
-#define LCP32XX_TIMER_CNTR_TCR_EN              0x1
-#define LCP32XX_TIMER_CNTR_TCR_RESET           0x2
+#define LPC32XX_TIMER_CNTR_TCR_EN              0x1
+#define LPC32XX_TIMER_CNTR_TCR_RESET           0x2
 
 /*
  * mcr register definitions
  */
-#define LCP32XX_TIMER_CNTR_MCR_MTCH(n)         (0x1 << ((n) * 3))
-#define LCP32XX_TIMER_CNTR_MCR_RESET(n)                (0x1 << (((n) * 3) + 1))
-#define LCP32XX_TIMER_CNTR_MCR_STOP(n)         (0x1 << (((n) * 3) + 2))
+#define LPC32XX_TIMER_CNTR_MCR_MTCH(n)         (0x1 << ((n) * 3))
+#define LPC32XX_TIMER_CNTR_MCR_RESET(n)                (0x1 << (((n) * 3) + 1))
+#define LPC32XX_TIMER_CNTR_MCR_STOP(n)         (0x1 << (((n) * 3) + 2))
 
 /*
  * Standard UART register offsets
index c7df879..8452395 100644 (file)
@@ -311,10 +311,6 @@ static int lpc32xx_irq_wake(unsigned int irqno, unsigned int state)
                return 0;
        }
 
-       /* Clear event */
-       __raw_writel(lpc32xx_events[irqno].mask,
-               lpc32xx_events[irqno].event_group->rawstat_reg);
-
        return -ENODEV;
 }
 
index 56f24f8..280415b 100644 (file)
@@ -52,7 +52,8 @@
 #define LED_GPIO               LPC32XX_GPIO(LPC32XX_GPO_P3_GRP, 1)
 #define NAND_WP_GPIO           LPC32XX_GPIO(LPC32XX_GPO_P3_GRP, 19)
 #define        MMC_PWR_ENABLE_GPIO     LPC32XX_GPIO(LPC32XX_GPO_P3_GRP, 5)
-#define        MMC_STATUS_GPIO         LPC32XX_GPIO(LPC32XX_GPIO_P3_GRP, 1)
+#define        MMC_CD_GPIO             LPC32XX_GPIO(LPC32XX_GPIO_P3_GRP, 1)
+#define        MMC_WP_GPIO             LPC32XX_GPIO(LPC32XX_GPIO_P3_GRP, 0)
 
 /*
  * AMBA LCD controller
@@ -337,23 +338,15 @@ static struct platform_device lpc32xx_kscan_device = {
 };
 
 #if defined (CONFIG_MMC_ARMMMCI)
-/*
- * Returns 0 when card is removed, !0 when installed
- */
-unsigned int mmc_status(struct device *dev)
+static u32 mmc_translate_vdd(struct device *dev, unsigned int vdd)
 {
-       return gpio_get_value(MMC_STATUS_GPIO) & 1;
-}
-
-/*
- * Enable or disable SD slot power
- */
-void mmc_power_enable(int enable)
-{
-       if (enable != 0)
+       /* Only on and off are supported */
+       if (vdd != 0)
                gpio_set_value(MMC_PWR_ENABLE_GPIO,1);
        else
                gpio_set_value(MMC_PWR_ENABLE_GPIO,0);
+
+       return 0;
 }
 
 /*
@@ -361,10 +354,10 @@ void mmc_power_enable(int enable)
  */
 struct mmci_platform_data lpc32xx_plat_data = {
         .ocr_mask       = MMC_VDD_30_31|MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34,
-        .status         = mmc_status,
+       .translate_vdd  = mmc_translate_vdd,
        .capabilities   = MMC_CAP_4_BIT_DATA,
-        .gpio_wp        = -1,
-        .gpio_cd        = -1,
+        .gpio_wp        = MMC_WP_GPIO,
+        .gpio_cd        = MMC_CD_GPIO,
 };
 
 /*
@@ -405,12 +398,17 @@ static struct mtd_partition __initdata phy3250_nand_partition[] = {
         {
                 .name   = "phy3250-boot",
                 .offset = 0,
-                .size   = (BLK_SIZE * 90)
+                .size   = (BLK_SIZE * 25)
+        },
+        {
+                .name   = "phy3250-uboot",
+                .offset = MTDPART_OFS_APPEND,
+                .size   = (BLK_SIZE * 100)
         },
         {
                 .name   = "phy3250-ubt-prms",
                 .offset = MTDPART_OFS_APPEND,
-                .size   = (BLK_SIZE * 10)
+                .size   = (BLK_SIZE * 4)
         },
         {
                 .name   = "phy3250-kernel",
@@ -460,11 +458,14 @@ static struct resource slc_nand_resources[] = {
         },
 
 };
+static u64 lpc32xx_slc_dma_mask = 0xffffffffUL;
 static struct platform_device lpc32xx_slc_nand_device = {
         .name           = "lpc32xx-nand",
         .id             = 0,
         .dev            = {
                                 .platform_data  = &lpc32xx_nandcfg,
+                                .dma_mask    = &lpc32xx_slc_dma_mask,
+                                .coherent_dma_mask = ~0UL,
         },
         .num_resources  = ARRAY_SIZE(slc_nand_resources),
         .resource       = slc_nand_resources,
@@ -555,10 +556,12 @@ static void __init phy3250_board_init(void)
                printk(KERN_ERR "Error setting gpio %u to output",
                                SPI0_CS_GPIO);
 
-#if defined (CONFIG_MMC_ARMMMCI)
-        /* Enable SD slot power */
-        mmc_power_enable(1);
-#endif
+       if (gpio_request(MMC_PWR_ENABLE_GPIO, "mmc_power_en"))
+               printk(KERN_ERR "Error requesting gpio %u",
+                               MMC_PWR_ENABLE_GPIO);
+       else if (gpio_direction_output(MMC_PWR_ENABLE_GPIO, 1))
+               printk(KERN_ERR "Error setting gpio %u to output",
+                               MMC_PWR_ENABLE_GPIO);
 
        /* Setup network interface for RMII mode */
        tmp = __raw_readl(LPC32XX_CLKPWR_MACCLK_CTRL);
@@ -646,6 +649,51 @@ static int __init lpc32xx_display_uid(void)
 }
 arch_initcall(lpc32xx_display_uid);
 
+/*
+ * Example code for setting up the BTN1 button (on GPI3) for system
+ * wakeup and IRQ support. This will allow the GPI3 input to wake
+ * up the system on a low edge. Edge based interrupts won't be
+ * registered in the interrupt controller when the system is asleep,
+ * although they will be registered in the event manager. For this,
+ * reason, a level based interrupt state is recommended for GPIOs when
+ * using IRQ and wakeup from GPI edge state.
+ * 
+ */
+#define BTN1_GPIO              LPC32XX_GPIO(LPC32XX_GPI_P3_GRP, 3)
+static irqreturn_t phy3250_btn1_irq(int irq, void *dev)
+{
+       printk(KERN_INFO "GPIO IRQ!\n");
+
+       return IRQ_HANDLED;
+}
+
+static int __init phy3250_button_setup(void)
+{
+       int ret;
+
+       if (gpio_request(BTN1_GPIO, "Button 1")) {
+               printk(KERN_ERR "Error requesting gpio %u", BTN1_GPIO);
+               return 0;
+       }
+
+       /*
+        * Wakeup/irq on low edge - the wakeup state will use the same
+        * state as the IRQ edge state.
+        */
+       set_irq_type(IRQ_LPC32XX_GPI_03, IRQ_TYPE_EDGE_FALLING);
+       ret = request_irq(IRQ_LPC32XX_GPI_03, phy3250_btn1_irq,
+               IRQF_DISABLED, "gpio_btn1_irq", NULL);
+       if (ret < 0) {
+               printk(KERN_ERR "Can't request interrupt\n");
+               return 0;
+       }
+
+       enable_irq_wake(IRQ_LPC32XX_GPI_03);
+
+       return 1;
+}
+device_initcall(phy3250_button_setup);
+
 MACHINE_START(PHY3250, "Phytec 3250 board with the LPC3250 Microcontroller")
        /* Maintainer: Kevin Wells, NXP Semiconductors */
        .phys_io        = LPC32XX_UART5_BASE,
index 630dd4a..791100b 100644 (file)
@@ -33,7 +33,7 @@
 
 static cycle_t lpc32xx_clksrc_read(struct clocksource *cs)
 {
-       return (cycle_t)__raw_readl(LCP32XX_TIMER_TC(LPC32XX_TIMER1_BASE));
+       return (cycle_t)__raw_readl(LPC32XX_TIMER_TC(LPC32XX_TIMER1_BASE));
 }
 
 static struct clocksource lpc32xx_clksrc = {
@@ -48,11 +48,11 @@ static struct clocksource lpc32xx_clksrc = {
 static int lpc32xx_clkevt_next_event(unsigned long delta,
     struct clock_event_device *dev)
 {
-       __raw_writel(LCP32XX_TIMER_CNTR_TCR_RESET,
-               LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
-       __raw_writel(delta, LCP32XX_TIMER_PR(LPC32XX_TIMER0_BASE));
-       __raw_writel(LCP32XX_TIMER_CNTR_TCR_EN,
-               LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_TCR_RESET,
+               LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
+       __raw_writel(delta, LPC32XX_TIMER_PR(LPC32XX_TIMER0_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_TCR_EN,
+               LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
 
        return 0;
 }
@@ -72,7 +72,7 @@ static void lpc32xx_clkevt_mode(enum clock_event_mode mode,
                 * disable the timer to wait for the first call to
                 * set_next_event().
                 */
-               __raw_writel(0, LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
+               __raw_writel(0, LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
                break;
 
        case CLOCK_EVT_MODE_UNUSED:
@@ -95,8 +95,8 @@ static irqreturn_t lpc32xx_timer_interrupt(int irq, void *dev_id)
        struct clock_event_device *evt = &lpc32xx_clkevt;
 
        /* Clear match */
-       __raw_writel(LCP32XX_TIMER_CNTR_MTCH_BIT(0),
-               LCP32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_MTCH_BIT(0),
+               LPC32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
 
        evt->event_handler(evt);
 
@@ -142,14 +142,14 @@ static void __init lpc32xx_timer_init(void)
        clkrate = clkrate / clk_get_pclk_div();
 
        /* Initial timer setup */
-       __raw_writel(0, LCP32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
-       __raw_writel(LCP32XX_TIMER_CNTR_MTCH_BIT(0),
-               LCP32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
-       __raw_writel(1, LCP32XX_TIMER_MR0(LPC32XX_TIMER0_BASE));
-       __raw_writel(LCP32XX_TIMER_CNTR_MCR_MTCH(0) |
-               LCP32XX_TIMER_CNTR_MCR_STOP(0) |
-               LCP32XX_TIMER_CNTR_MCR_RESET(0),
-               LCP32XX_TIMER_MCR(LPC32XX_TIMER0_BASE));
+       __raw_writel(0, LPC32XX_TIMER_TCR(LPC32XX_TIMER0_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_MTCH_BIT(0),
+               LPC32XX_TIMER_IR(LPC32XX_TIMER0_BASE));
+       __raw_writel(1, LPC32XX_TIMER_MR0(LPC32XX_TIMER0_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_MCR_MTCH(0) |
+               LPC32XX_TIMER_CNTR_MCR_STOP(0) |
+               LPC32XX_TIMER_CNTR_MCR_RESET(0),
+               LPC32XX_TIMER_MCR(LPC32XX_TIMER0_BASE));
 
        /* Setup tick interrupt */
        setup_irq(IRQ_LPC32XX_TIMER0, &lpc32xx_timer_irq);
@@ -165,12 +165,12 @@ static void __init lpc32xx_timer_init(void)
        clockevents_register_device(&lpc32xx_clkevt);
 
        /* Use timer1 as clock source. */
-       __raw_writel(LCP32XX_TIMER_CNTR_TCR_RESET,
-               LCP32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
-       __raw_writel(0, LCP32XX_TIMER_PR(LPC32XX_TIMER1_BASE));
-       __raw_writel(0, LCP32XX_TIMER_MCR(LPC32XX_TIMER1_BASE));
-       __raw_writel(LCP32XX_TIMER_CNTR_TCR_EN,
-               LCP32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_TCR_RESET,
+               LPC32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
+       __raw_writel(0, LPC32XX_TIMER_PR(LPC32XX_TIMER1_BASE));
+       __raw_writel(0, LPC32XX_TIMER_MCR(LPC32XX_TIMER1_BASE));
+       __raw_writel(LPC32XX_TIMER_CNTR_TCR_EN,
+               LPC32XX_TIMER_TCR(LPC32XX_TIMER1_BASE));
        lpc32xx_clksrc.mult = clocksource_hz2mult(clkrate,
                lpc32xx_clksrc.shift);
        clocksource_register(&lpc32xx_clksrc);
index d29a7e3..73b9d8b 100644 (file)
@@ -67,6 +67,7 @@ struct lpc32xx_tsc_t {
        void __iomem *tsc_base;
        int irq;
        struct clk *clk;
+       int suspended;
 };
 
 static void lpc32xx_fifo_clear(struct lpc32xx_tsc_t *lpc32xx_tsc_dat)
@@ -253,6 +254,8 @@ static int __devinit lpc32xx_ts_probe(struct platform_device *pdev)
                goto err_free_irq;
        }
 
+       device_init_wakeup(&pdev->dev, 1);
+
        return 0;
 
 err_free_irq:
@@ -301,11 +304,52 @@ static int __devexit lpc32xx_ts_remove(struct platform_device *pdev)
        return 0;
 }
 
+#if defined (CONFIG_PM)
+static int lpc32xx_ts_suspend(struct device *dev)
+{
+       struct lpc32xx_tsc_t *lpc32xx_tsc_dat = dev_get_drvdata(dev);
+
+       if (device_may_wakeup(dev))
+               enable_irq_wake(lpc32xx_tsc_dat->irq);
+       else {
+               lpc32xx_tsc_dat->suspended = 1;
+               stop_tsc(lpc32xx_tsc_dat);
+               clk_disable(lpc32xx_tsc_dat->clk);
+       }
+
+       return 0;
+}
+
+static int lpc32xx_ts_resume(struct device *dev)
+{
+       struct lpc32xx_tsc_t *lpc32xx_tsc_dat = dev_get_drvdata(dev);
+
+       if (lpc32xx_tsc_dat->suspended) {
+               clk_enable(lpc32xx_tsc_dat->clk);
+               setup_tsc(lpc32xx_tsc_dat);
+               lpc32xx_tsc_dat->suspended = 0;
+       } else
+               disable_irq_wake(lpc32xx_tsc_dat->irq);
+
+       return 0;
+}
+
+static const struct dev_pm_ops lpc32xx_ts_pm_ops = {
+       .suspend        = lpc32xx_ts_suspend,
+       .resume         = lpc32xx_ts_resume,
+};
+#define LPC32XX_TS_PM_OPS (&lpc32xx_ts_pm_ops)
+#else
+#define LPC32XX_TS_PM_OPS NULL
+#endif
+
 static struct platform_driver lpc32xx_ts_driver = {
        .probe          = lpc32xx_ts_probe,
        .remove         = __devexit_p(lpc32xx_ts_remove),
        .driver         = {
                .name   = MOD_NAME,
+               .owner  = THIS_MODULE,
+               .pm     = LPC32XX_TS_PM_OPS,
        },
 };
 
index a5357fc..966c853 100644 (file)
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved.
  *  Copyright (C) 2010 ST-Ericsson AB.
+ *  Copyright (C) 2010 NXP Semiconductors (LPC32xx DMA modifications)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -22,9 +23,7 @@
 #include <linux/amba/bus.h>
 #include <linux/clk.h>
 #include <linux/scatterlist.h>
-#if defined (CONFIG_ARCH_LPC32XX)
 #include <linux/dma-mapping.h>
-#endif
 #include <linux/gpio.h>
 #include <linux/amba/mmci.h>
 #include <linux/regulator/consumer.h>
 #include <asm/io.h>
 #include <asm/sizes.h>
 
-#if defined (CONFIG_ARCH_LPC32XX)
 #include <mach/clkdev.h>
 #include <mach/dmac.h>
 #include <mach/sdcard.h>
 #include <mach/dma.h>
 #include <mach/hardware.h>
-#endif
 
 #include "mmci.h"
 
 #define DRIVER_NAME "mmci-pl18x"
 
-#if defined (CONFIG_ARCH_LPC32XX)
 static unsigned int fmax = 26000000; /* 26MHz bit rate max */
 
 #define DMA_BUFF_SIZE SZ_64K
-static void *dma_p_base, *dma_v_base;
-static struct dma_config dmacfgrx, dmacfgtx;
-static int lastch = DMA_CH_SDCARD_TX;
+
+struct LPC32XX_SDDRV_DATA {
+       struct dma_config dmacfgtx;
+       struct dma_config dmacfgrx;
+       struct device *dev;
+       int lastch;
+       dma_addr_t dma_handle_tx;
+       void *dma_v_base;
+       int mapped;
+};
+static struct LPC32XX_SDDRV_DATA lpc32xx_drvdat;
 
 #define MCI_WIDEBUS (1 << 11)
 #undef MCI_IRQENABLE
@@ -61,121 +65,214 @@ static int lastch = DMA_CH_SDCARD_TX;
         MCI_DATATIMEOUTMASK|MCI_TXUNDERRUNMASK|MCI_RXOVERRUNMASK|       \
         MCI_CMDRESPENDMASK|MCI_CMDSENTMASK)
 
-#else
-static unsigned int fmax = 515633;
-#endif
-
-#if defined (CONFIG_ARCH_LPC32XX)
 static int mmc_dma_setup(void)
 {
+       u32 llptrrx, llptrtx;
+       int ret = 0;
+
+       /*
+        * There is a quirk with the LPC32XX and SD burst DMA. DMA sg
+        * transfers where DMA is the flow controller will not transfer
+        * the last few bytes to or from the SD card controller and
+        * memory. For RX, the last few bytes in the SD transfer can be
+        * forced out with a software DMA burst request. For TX, this
+        * can't be done, so TX sg support cannot be supported. For TX,
+        * a temporary bouncing buffer is used if more than 1 sg segment
+        * is passed in the data request. The bouncing buffer will get a
+        * contiguous copy of the TX data and it will be used instead.
+        */
+
+        /* Allocate a chunk of memory for the DMA TX buffers */
+        lpc32xx_drvdat.dma_v_base = dma_alloc_coherent(lpc32xx_drvdat.dev,
+               DMA_BUFF_SIZE, &lpc32xx_drvdat.dma_handle_tx, GFP_KERNEL);
+        if (lpc32xx_drvdat.dma_v_base == NULL) {
+                dev_err(lpc32xx_drvdat.dev, "error getting DMA region\n");
+                ret = -ENOMEM;
+                goto dma_no_tx_buff;
+        }
+        dev_info(lpc32xx_drvdat.dev, "DMA buffer: phy:%p, virt:%p\n",
+                (void *) lpc32xx_drvdat.dma_handle_tx, lpc32xx_drvdat.dma_v_base);
+
         /* Setup TX DMA channel */
-        dmacfgtx.ch = DMA_CH_SDCARD_TX;
-        dmacfgtx.tc_inten = 0;
-        dmacfgtx.err_inten = 0;
-        dmacfgtx.src_size = 4;
-        dmacfgtx.src_inc = 1;
-        dmacfgtx.src_ahb1 = 0;
-        dmacfgtx.src_bsize = DMAC_CHAN_SRC_BURST_8;
-        dmacfgtx.src_prph = DMAC_SRC_PERIP(DMA_PERID_SDCARD);
-        dmacfgtx.dst_size = 4;
-        dmacfgtx.dst_inc = 0;
-        dmacfgtx.dst_ahb1 = 0;
-        dmacfgtx.dst_bsize = DMAC_CHAN_DEST_BURST_8;
-        dmacfgtx.dst_prph = DMAC_DEST_PERIP(DMA_PERID_SDCARD);
-        dmacfgtx.flowctrl = DMAC_CHAN_FLOW_P_M2P;
-        if (lpc32xx_dma_ch_get(&dmacfgtx, "dma_sd_tx", NULL, NULL) < 0)
+        lpc32xx_drvdat.dmacfgtx.ch = DMA_CH_SDCARD_TX;
+        lpc32xx_drvdat.dmacfgtx.tc_inten = 0;
+        lpc32xx_drvdat.dmacfgtx.err_inten = 0;
+        lpc32xx_drvdat.dmacfgtx.src_size = 4;
+        lpc32xx_drvdat.dmacfgtx.src_inc = 1;
+        lpc32xx_drvdat.dmacfgtx.src_ahb1 = 0;
+        lpc32xx_drvdat.dmacfgtx.src_bsize = DMAC_CHAN_SRC_BURST_8;
+        lpc32xx_drvdat.dmacfgtx.src_prph = DMAC_SRC_PERIP(DMA_PERID_SDCARD);
+        lpc32xx_drvdat.dmacfgtx.dst_size = 4;
+        lpc32xx_drvdat.dmacfgtx.dst_inc = 0;
+        lpc32xx_drvdat.dmacfgtx.dst_ahb1 = 0;
+        lpc32xx_drvdat.dmacfgtx.dst_bsize = DMAC_CHAN_DEST_BURST_8;
+        lpc32xx_drvdat.dmacfgtx.dst_prph = DMAC_DEST_PERIP(DMA_PERID_SDCARD);
+        lpc32xx_drvdat.dmacfgtx.flowctrl = DMAC_CHAN_FLOW_P_M2P;
+        if (lpc32xx_dma_ch_get(&lpc32xx_drvdat.dmacfgtx, "dma_sd_tx", NULL, NULL) < 0)
         {
-                printk(KERN_ERR "Error setting up SD card TX DMA channel\n");
-                return -ENODEV;
+                dev_err(lpc32xx_drvdat.dev, "Error setting up SD card TX DMA channel\n");
+                ret = -ENODEV;
+               goto dma_no_txch;
         }
 
+       /* Allocate a linked list for DMA support */
+       llptrtx = lpc32xx_dma_alloc_llist(lpc32xx_drvdat.dmacfgtx.ch, NR_SG * 2);
+       if (llptrtx == 0) {
+               dev_err(lpc32xx_drvdat.dev, "Error allocating list buffer (MMC TX)\n");
+               ret = -ENOMEM;
+               goto dma_no_txlist;
+       }
+
         /* Setup RX DMA channel */
-        dmacfgrx.ch = DMA_CH_SDCARD_RX;
-        dmacfgrx.tc_inten = 0;
-        dmacfgrx.err_inten = 0;
-        dmacfgrx.src_size = 4;
-        dmacfgrx.src_inc = 0;
-        dmacfgrx.src_ahb1 = 0;
-        dmacfgrx.src_bsize = DMAC_CHAN_SRC_BURST_8;
-        dmacfgrx.src_prph = DMAC_SRC_PERIP(DMA_PERID_SDCARD);
-        dmacfgrx.dst_size = 4;
-        dmacfgrx.dst_inc = 1;
-        dmacfgrx.dst_ahb1 = 0;
-        dmacfgrx.dst_bsize = DMAC_CHAN_DEST_BURST_8;
-        dmacfgrx.dst_prph = DMAC_DEST_PERIP(DMA_PERID_SDCARD);
-        dmacfgrx.flowctrl = DMAC_CHAN_FLOW_P_P2M;
-        if (lpc32xx_dma_ch_get(&dmacfgrx, "dma_sd_rx", NULL, NULL) < 0)
+        lpc32xx_drvdat.dmacfgrx.ch = DMA_CH_SDCARD_RX;
+        lpc32xx_drvdat.dmacfgrx.tc_inten = 0;
+        lpc32xx_drvdat.dmacfgrx.err_inten = 0;
+        lpc32xx_drvdat.dmacfgrx.src_size = 4;
+        lpc32xx_drvdat.dmacfgrx.src_inc = 0;
+        lpc32xx_drvdat.dmacfgrx.src_ahb1 = 0;
+        lpc32xx_drvdat.dmacfgrx.src_bsize = DMAC_CHAN_SRC_BURST_8;
+        lpc32xx_drvdat.dmacfgrx.src_prph = DMAC_SRC_PERIP(DMA_PERID_SDCARD);
+        lpc32xx_drvdat.dmacfgrx.dst_size = 4;
+        lpc32xx_drvdat.dmacfgrx.dst_inc = 1;
+        lpc32xx_drvdat.dmacfgrx.dst_ahb1 = 0;
+        lpc32xx_drvdat.dmacfgrx.dst_bsize = DMAC_CHAN_DEST_BURST_8;
+        lpc32xx_drvdat.dmacfgrx.dst_prph = DMAC_DEST_PERIP(DMA_PERID_SDCARD);
+        lpc32xx_drvdat.dmacfgrx.flowctrl = DMAC_CHAN_FLOW_D_P2M;
+        if (lpc32xx_dma_ch_get(&lpc32xx_drvdat.dmacfgrx, "dma_sd_rx", NULL, NULL) < 0)
         {
-                printk(KERN_ERR "Error setting up SD card RX DMA channel\n");
-                return -ENODEV;
+                dev_err(lpc32xx_drvdat.dev, "Error setting up SD card RX DMA channel\n");
+                ret = -ENODEV;
+               goto dma_no_rxch;
         }
 
-        return 0;
-}
+       /* Allocate a linked list for DMA support */
+       llptrrx = lpc32xx_dma_alloc_llist(lpc32xx_drvdat.dmacfgrx.ch, NR_SG * 2);
+       if (llptrrx == 0) {
+               dev_err(lpc32xx_drvdat.dev, "Error allocating list buffer (MMC RX)\n");
+               ret = -ENOMEM;
+               goto dma_no_rxlist;
+       }
 
-static void mmc_dma_start(int ch)
-{
-        if (ch == DMA_CH_SDCARD_TX)
-        {
-                lpc32xx_dma_start_pflow_xfer(DMA_CH_SDCARD_TX,
-                        dma_p_base, (void *) SD_FIFO(LPC32XX_SD_BASE), 1);
-        }
-        else
-        {
-                lpc32xx_dma_start_pflow_xfer(DMA_CH_SDCARD_RX,
-                        (void *) SD_FIFO(LPC32XX_SD_BASE), dma_p_base, 1); 
-        }
+       return 0;
+
+dma_no_rxlist:
+       lpc32xx_dma_ch_put(lpc32xx_drvdat.dmacfgrx.ch);
+       lpc32xx_drvdat.dmacfgrx.ch = -1;
+dma_no_rxch:
+       lpc32xx_dma_dealloc_llist(lpc32xx_drvdat.dmacfgtx.ch);
+dma_no_txlist:
+       lpc32xx_dma_ch_put(lpc32xx_drvdat.dmacfgtx.ch);
+       lpc32xx_drvdat.dmacfgtx.ch = -1;
+dma_no_txch:
+        dma_free_coherent(lpc32xx_drvdat.dev, DMA_BUFF_SIZE,
+                lpc32xx_drvdat.dma_v_base, lpc32xx_drvdat.dma_handle_tx);
+dma_no_tx_buff:
+        return ret;
 }
 
-static void mmc_dma_stop(int ch)
+static void mmc_dma_dealloc(void)
 {
-        lpc32xx_dma_ch_disable(ch);
+       lpc32xx_dma_dealloc_llist(lpc32xx_drvdat.dmacfgrx.ch);
+       lpc32xx_dma_ch_put(lpc32xx_drvdat.dmacfgrx.ch);
+       lpc32xx_drvdat.dmacfgrx.ch = -1;
+       lpc32xx_dma_dealloc_llist(lpc32xx_drvdat.dmacfgtx.ch);
+       lpc32xx_dma_ch_put(lpc32xx_drvdat.dmacfgtx.ch);
+       lpc32xx_drvdat.dmacfgtx.ch = -1;
+        dma_free_coherent(lpc32xx_drvdat.dev, DMA_BUFF_SIZE,
+                lpc32xx_drvdat.dma_v_base, lpc32xx_drvdat.dma_handle_tx);
 }
 
-static void mmc_tx_dma_copy(struct mmci_host *host)
+/* Supports scatter/gather */
+static void mmc_dma_rx_start(struct mmci_host *host)
 {
-        char *src_buffer, *dst_buffer;
-        unsigned long flags;
+       unsigned int len;
+       int i, dma_len;
+       struct scatterlist *sg;
+       struct mmc_request *mrq = host->mrq;
+       struct mmc_data *reqdata = mrq->data;
+       void *dmaaddr;
+       u32 dmalen, dmaxferlen;
+
+       sg = reqdata->sg;
+       len = reqdata->sg_len;
+
+       dma_len = dma_map_sg(mmc_dev(host->mmc), reqdata->sg, reqdata->sg_len, DMA_FROM_DEVICE);
+       if (dma_len == 0)
+               return;
+
+       /* Setup transfer */
+        for (i = 0; i < len; i++) {
+               dmalen = (u32) sg_dma_len(&sg[i]);
+               dmaaddr = (void *) sg_dma_address(&sg[i]);
+
+               /* Build a list with a max size if 15872 bytes per seg */
+               while (dmalen > 0) {
+                       dmaxferlen = dmalen;
+                       if (dmaxferlen > 15872)
+                               dmaxferlen = 15872;
+
+                       lpc32xx_dma_queue_llist_entry(lpc32xx_drvdat.lastch,
+                               (void *) SD_FIFO(LPC32XX_SD_BASE),
+                               dmaaddr, dmaxferlen);
+
+                               dmaaddr += dmaxferlen;
+                               dmalen -= dmaxferlen;
+               }
+       }
+
+//printk("DMARX %d\n", len);
 
-        dst_buffer = (char *) dma_v_base;
-        do
-        {
-                /*
-                * Map the current scatter buffer, copy data, and unmap
-                */
-                src_buffer = mmci_kmap_atomic(host, &flags) + host->sg_off;
-                memcpy(dst_buffer, src_buffer, host->sg_ptr->length);
-                dst_buffer += host->sg_ptr->length;
-                mmci_kunmap_atomic(host, src_buffer, &flags);
-
-                if (!mmci_next_sg(host))
-                        break;
-        } while (1);
 }
 
-static void mmc_dma_rx_copy(struct mmci_host *host)
+/* May need to reorganize buffer for scatter/gather */
+static void mmc_dma_tx_start(struct mmci_host *host)
 {
+       unsigned int len;
+       int dma_len;
+       struct scatterlist *sg;
+       struct mmc_request *mrq = host->mrq;
+       struct mmc_data *reqdata = mrq->data;
+       void *dmaaddr;
         char *src_buffer, *dst_buffer;
         unsigned long flags;
 
-        src_buffer = (char *) dma_v_base;
-        do
-        {
-                /*
-                * Map the current scatter buffer, copy data, and unmap
-                */
-                dst_buffer = mmci_kmap_atomic(host, &flags) + host->sg_off;
-                memcpy(dst_buffer, src_buffer, host->sg_ptr->length);
-                src_buffer += host->sg_ptr->length;
-                mmci_kunmap_atomic(host, dst_buffer, &flags);
+       sg = reqdata->sg;
+       len = reqdata->sg_len;
+
+       /* Only 1 segment? */
+       if (len == 1) {
+               dma_len = dma_map_sg(mmc_dev(host->mmc), reqdata->sg,
+                       reqdata->sg_len, DMA_TO_DEVICE);
+               if (dma_len == 0)
+                       return;
 
-                flush_dcache_page(sg_page(host->sg_ptr));
+               dmaaddr = (void *) sg_dma_address(&sg[0]);
+               lpc32xx_drvdat.mapped = 1;
+       }
+       else {
+               /* Move data to contiguous buffer first, then transfer it */
+               dst_buffer = (char *) lpc32xx_drvdat.dma_v_base;
+               do
+               {
+                       /*
+                        * Map the current scatter buffer, copy data, and unmap
+                        */
+                       src_buffer = mmci_kmap_atomic(host, &flags) + host->sg_off;
+                       memcpy(dst_buffer, src_buffer, host->sg_ptr->length);
+                       dst_buffer += host->sg_ptr->length;
+                       mmci_kunmap_atomic(host, src_buffer, &flags);
+
+                       if (!mmci_next_sg(host))
+                               break;
+               } while (1);
+
+               lpc32xx_drvdat.mapped = 0;
+               dmaaddr = (void *) lpc32xx_drvdat.dma_handle_tx;
+       }
 
-                if (!mmci_next_sg(host))
-                        break;
-        } while (1);
+       lpc32xx_dma_start_pflow_xfer(DMA_CH_SDCARD_TX, dmaaddr,
+               (void *) SD_FIFO(LPC32XX_SD_BASE), 1);
 }
-#endif
 
 /*
  * This must be called with host->lock held
@@ -198,7 +295,7 @@ static void mmci_set_clkreg(struct mmci_host *host, unsigned int desired)
                        clk |= MCI_FCEN; /* Bug fix in ST IP block */
                clk |= MCI_CLK_ENABLE;
                /* This hasn't proven to be worthwhile */
-               /* clk |= MCI_CLK_PWRSAVE; */
+               clk |= MCI_CLK_PWRSAVE;
        }
 
        if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_4)
@@ -234,9 +331,6 @@ static void mmci_stop_data(struct mmci_host *host)
        writel(0, host->base + MMCIDATACTRL);
        writel(0, host->base + MMCIMASK1);
        host->data = NULL;
-#if defined(CONFIG_ARCH_LPC32XX)
-       mmc_dma_stop(lastch);
-#endif
 }
 
 static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
@@ -262,55 +356,26 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
 
        base = host->base;
        writel(timeout, base + MMCIDATATIMER);
-#if defined (CONFIG_ARCH_LPC32XX)
         writel((host->size * data->blocks), base + MMCIDATALENGTH);
-
         blksz_bits = ffs(data->blksz) - 1;
         BUG_ON(1 << blksz_bits != data->blksz);
 
         datactrl = MCI_DPSM_ENABLE | MCI_DPSM_DMAENABLE | blksz_bits << 4;
+
         if (data->flags & MMC_DATA_READ) {
                 datactrl |= MCI_DPSM_DIRECTION;
-                lastch = DMA_CH_SDCARD_RX;
-        } else {
-                /* Copy data buffer to DMA buffer and start transfer */
-                lastch = DMA_CH_SDCARD_TX;
-                mmc_tx_dma_copy(host);
+                lpc32xx_drvdat.lastch = DMA_CH_SDCARD_RX;
+               mmc_dma_rx_start(host);
         }
-        mmc_dma_start(lastch);
+       else {
+                lpc32xx_drvdat.lastch = DMA_CH_SDCARD_TX;
+               mmc_dma_tx_start(host);
+       }
 
         writel(datactrl, base + MMCIDATACTRL);
         datactrl = readl(base + MMCIMASK0) & ~MCI_DATABLOCKENDMASK;
         writel(datactrl | MCI_DATAENDMASK, base + MMCIMASK0);
 
-#else
-       writel(host->size, base + MMCIDATALENGTH);
-
-       blksz_bits = ffs(data->blksz) - 1;
-       BUG_ON(1 << blksz_bits != data->blksz);
-
-       datactrl = MCI_DPSM_ENABLE | blksz_bits << 4;
-       if (data->flags & MMC_DATA_READ) {
-               datactrl |= MCI_DPSM_DIRECTION;
-               irqmask = MCI_RXFIFOHALFFULLMASK;
-
-               /*
-                * If we have less than a FIFOSIZE of bytes to transfer,
-                * trigger a PIO interrupt as soon as any data is available.
-                */
-               if (host->size < MCI_FIFOSIZE)
-                       irqmask |= MCI_RXDATAAVLBLMASK;
-       } else {
-               /*
-                * We don't actually need to include "FIFO empty" here
-                * since its implicit in "FIFO half empty".
-                */
-               irqmask = MCI_TXFIFOHALFEMPTYMASK;
-       }
-
-       writel(datactrl, base + MMCIDATACTRL);
-       writel(readl(base + MMCIMASK0) & ~MCI_DATAENDMASK, base + MMCIMASK0);
-#endif
        writel(irqmask, base + MMCIMASK1);
 }
 
@@ -346,14 +411,9 @@ static void
 mmci_data_irq(struct mmci_host *host, struct mmc_data *data,
              unsigned int status)
 {
-#if defined (CONFIG_ARCH_LPC32XX)
         if (status & MCI_DATAEND) {
                 host->data_xfered += data->blksz * data->blocks;
-#else
 
-       if (status & MCI_DATABLOCKEND) {
-               host->data_xfered += data->blksz;
-#endif
 #ifdef CONFIG_ARCH_U300
                /*
                 * On the U300 some signal or other is
@@ -376,25 +436,29 @@ mmci_data_irq(struct mmci_host *host, struct mmc_data *data,
                        data->error = -EIO;
                status |= MCI_DATAEND;
 
-#if !defined (CONFIG_ARCH_LPC32XX)
                /*
                 * We hit an error condition.  Ensure that any data
                 * partially written to a page is properly coherent.
                 */
                if (host->sg_len && data->flags & MMC_DATA_READ)
                        flush_dcache_page(sg_page(host->sg_ptr));
-#endif
        }
+
        if (status & MCI_DATAEND) {
+               if (data->flags & MMC_DATA_READ) {
+                       lpc32xx_dma_force_burst(lpc32xx_drvdat.lastch, DMA_PERID_SDCARD);
+                       lpc32xx_dma_flush_llist(lpc32xx_drvdat.lastch);
+                       dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len, DMA_FROM_DEVICE);
+               }
+               else {
+                       lpc32xx_dma_ch_disable(lpc32xx_drvdat.lastch);
+                       if (lpc32xx_drvdat.mapped)
+                               dma_unmap_sg(mmc_dev(host->mmc), data->sg,
+                                       data->sg_len, DMA_TO_DEVICE);
+               }
+
                mmci_stop_data(host);
-#if defined (CONFIG_ARCH_LPC32XX)
-                /* Copy DMA buffer to MMC buffer */
-                if (lastch == DMA_CH_SDCARD_RX)
-                {
-                        /* Copy DMA buffer to data buffer */
-                        mmc_dma_rx_copy(host);
-                }
-#endif
+
                if (!data->stop) {
                        mmci_request_end(host, data->mrq);
                } else {
@@ -426,9 +490,8 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
                if (host->data)
                        mmci_stop_data(host);
                mmci_request_end(host, cmd->mrq);
-       } else if (!(cmd->data->flags & MMC_DATA_READ)) {
+       } else if (!(cmd->data->flags & MMC_DATA_READ))
                mmci_start_data(host, cmd->data);
-       }
 }
 
 static int mmci_pio_read(struct mmci_host *host, char *buffer, unsigned int remain)
@@ -590,11 +653,7 @@ static irqreturn_t mmci_irq(int irq, void *dev_id)
 
                status = readl(host->base + MMCISTATUS);
                status &= readl(host->base + MMCIMASK0);
-#if defined (CONFIG_ARCH_LPC32XX)
                 writel((status | MCI_DATABLOCKEND), host->base + MMCICLEAR);
-#else
-               writel(status, host->base + MMCICLEAR);
-#endif
 
                dev_dbg(mmc_dev(host->mmc), "irq0 (data+cmd) %08x\n", status);
 
@@ -752,9 +811,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
        struct mmci_host *host;
        struct mmc_host *mmc;
        int ret;
-#if defined (CONFIG_ARCH_LPC32XX)
-        dma_addr_t dma_handle;
-#endif
 
        /* must have platform data */
        if (!plat) {
@@ -762,29 +818,9 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
                goto out;
        }
 
-#if defined (CONFIG_ARCH_LPC32XX)
-        /* Allocate a chunk of memory for the DMA buffers */
-        dma_v_base = dma_alloc_coherent(&dev->dev, DMA_BUFF_SIZE,
-                &dma_handle, GFP_KERNEL);
-        if (dma_v_base == NULL)
-        {
-                printk("%s: error getting DMA region.\n", DRIVER_NAME);
-                ret = -ENOMEM;
-                goto out;
-        }
-        dma_p_base = (void *) dma_handle;
-        printk(KERN_INFO "%s: DMA buffer(%x bytes), P:0x%08x, V:0x%08x\n",
-                DRIVER_NAME, DMA_BUFF_SIZE, (u32) dma_p_base, (u32) dma_v_base);
-#endif
-
        ret = amba_request_regions(dev, DRIVER_NAME);
-       if (ret) {
-#if defined (CONFIG_ARCH_LPC32XX)
-                goto out_free_dma;
-#else
+       if (ret)
                 goto out;
-#endif
-       }
        mmc = mmc_alloc_host(sizeof(struct mmci_host), &dev->dev);
        if (!mmc) {
                ret = -ENOMEM;
@@ -880,7 +916,12 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
         * Set the maximum segment size.  Since we aren't doing DMA
         * (yet) we are only limited by the data length register.
         */
-       mmc->max_seg_size = mmc->max_req_size;
+       /*
+        * The LPC32x0 DMA controller can handle up to a 16383 byte DMA
+        * transfer. We'll rely on the mmc core to make sure the passed
+        * size for a request is block aligned.
+        */
+       mmc->max_seg_size = 65535;
 
        /*
         * Block size can be up to 2048 bytes, but must be a power of two.
@@ -892,12 +933,12 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
         */
        mmc->max_blk_count = mmc->max_req_size;
 
-#if defined (CONFIG_ARCH_LPC32XX)
         /*
         * Setup DMA for the interface
         */
-        mmc_dma_setup();
-#endif
+       lpc32xx_drvdat.dev = &dev->dev;
+        if (mmc_dma_setup())
+               goto err_dma_setup;
 
        spin_lock_init(&host->lock);
 
@@ -931,11 +972,7 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
        ret = request_irq(dev->irq[1], mmci_pio_irq, IRQF_SHARED, DRIVER_NAME " (pio)", host);
        if (ret)
                goto irq0_free;
-#if defined (CONFIG_ARCH_LPC32XX)
-        writel(MCI_IRQENABLE|MCI_DATAENDMASK, host->base + MMCIMASK0);
-#else
        writel(MCI_IRQENABLE, host->base + MMCIMASK0);
-#endif
        amba_set_drvdata(dev, mmc);
        host->oldstat = mmci_get_cd(host->mmc);
 
@@ -962,6 +999,8 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
        if (host->gpio_cd != -ENOSYS)
                gpio_free(host->gpio_cd);
  err_gpio_cd:
+       mmc_dma_dealloc();
+ err_dma_setup:
        iounmap(host->base);
  clk_disable:
        clk_disable(host->clk);
@@ -971,11 +1010,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
        mmc_free_host(mmc);
  rel_regions:
        amba_release_regions(dev);
-#if defined (CONFIG_ARCH_LPC32XX)
- out_free_dma:
-        dma_free_coherent(&dev->dev, DMA_BUFF_SIZE,
-                dma_v_base, (dma_addr_t) dma_p_base);
-#endif
  out:
        return ret;
 }
@@ -1007,6 +1041,8 @@ static int __devexit mmci_remove(struct amba_device *dev)
                if (host->gpio_cd != -ENOSYS)
                        gpio_free(host->gpio_cd);
 
+               mmc_dma_dealloc();
+
                iounmap(host->base);
                clk_disable(host->clk);
                clk_put(host->clk);
@@ -1018,10 +1054,6 @@ static int __devexit mmci_remove(struct amba_device *dev)
                mmc_free_host(mmc);
 
                amba_release_regions(dev);
-#if defined (CONFIG_ARCH_LPC32XX)
-                dma_free_coherent(&dev->dev, DMA_BUFF_SIZE,
-                        dma_v_base, (dma_addr_t) dma_p_base);
-#endif
        }
 
        return 0;
index 186f375..52f0f61 100644 (file)
@@ -1,7 +1,9 @@
 /*
- *  drivers/mtd/nand/lpc32xx_nand.c
+ * drivers/mtd/nand/lpc32xx_nand.c
  *
- *  Copyright (C) 2008 NXP Semiconductors
+ * Author: Kevin Wells <kevin.wells@nxp.com>
+ *
+ * Copyright (C) 2010 NXP Semiconductors
  *
  * 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
  * 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/slab.h>
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <linux/delay.h>
+#include <linux/completion.h>
 
 #include <asm/io.h>
+#include <linux/mm.h>
+#include <linux/dma-mapping.h>
+#include <linux/mtd/nand_ecc.h>
+
 #include <asm/sizes.h>
 #include <mach/hardware.h>
 #include <mach/board.h>
 #include <mach/slcnand.h>
+#include <mach/dmac.h>
+#include <mach/dma.h>
+
+/*
+ * LPC3250 has 3 bytes of ECC data but due to DMA
+ * word transfer limitation, we'll use 4 bytes
+ */
+#define NAND_ECC_LEN_PER_SUBPAGE        0x4
+#define NAND_ECC_SUBPAGE_LEN            256
+
+#define NAND_LARGE_BLOCK_PAGE_SIZE      2048
+#define NAND_SMALL_BLOCK_PAGE_SIZE      512
+
+#define NAND_ERASED_BLOCK_ECC_VALUE    0xFFFFFFFF
+
+static struct nand_ecclayout lpc32xx_nand_oob_16 = {
+        .eccbytes = 8,
+        .eccpos = {8, 9, 10, 11, 12, 13, 14, 15},
+        .oobfree = {
+                {.offset = 0,
+                 . length = 5},
+                {.offset = 6,
+                 . length = 2}}
+};
+
+static struct nand_ecclayout lpc32xx_nand_oob_64 = {
+        .eccbytes = 32,
+        .eccpos = { 8, 9, 10, 11, 12, 13, 14, 15,
+                   24, 25, 26, 27, 28, 29, 30, 31,
+                   40, 41, 42, 43, 44, 45, 46, 47,
+                   56, 57, 58, 59, 60, 61, 62, 63},
+        .oobfree = {
+                {.offset = 2,
+                 . length = 6},
+                {.offset = 16,
+                 . length = 8},
+                {.offset = 32,
+                 . length = 8},
+                {.offset = 48,
+                 . length = 8}}
+};
 
 struct lpc32xx_nand_host {
        struct nand_chip        nand_chip;
@@ -40,8 +84,47 @@ struct lpc32xx_nand_host {
        struct mtd_info         mtd;
        void __iomem            *io_base;
        struct lpc32XX_nand_cfg *ncfg;
+       struct completion       comp;
+       struct dma_config dmacfg;
+       int dmach;
+       uint32_t dma_xfer_status;
+       uint32_t llptr;
+       uint32_t dma_buf_len;
+       /*
+        * Physical addresses of ECC buffer,DMA data buffers,OOB data buffer
+        */
+       dma_addr_t oob_buf_phy;
+       dma_addr_t ecc_calc_buf_phy;
+       dma_addr_t dma_buf_phy;
+       /*
+        * Virtual addresses of ECC buffer,DMA data buffers,OOB data buffer
+        */
+       uint8_t *oob_buf;
+       uint8_t *ecc_calc_buf;
+       uint8_t * dma_buf;
+       /* Physical address of DMA base address */
+       dma_addr_t io_base_phy;
+       uint8_t *erase_buf_data;
 };
 
+#ifdef CONFIG_MTD_PARTITIONS
+const char *part_probes[] = { "cmdlinepart", NULL };
+#endif
+
+static uint8_t nand_slc_bit_cnt16(uint16_t ch)
+{
+        ch = (ch & 0x5555) + ((ch & ~0x5555) >> 1);
+        ch = (ch & 0x3333) + ((ch & ~0x3333) >> 2);
+        ch = (ch & 0x0F0F) + ((ch & ~0x0F0F) >> 4);
+        return (ch + (ch >> 8)) & 0xFF;
+}
+
+static uint8_t bit_cnt32(uint32_t val)
+{
+        return nand_slc_bit_cnt16(val & 0xFFFF) +
+                nand_slc_bit_cnt16(val >> 16);
+}
+
 static void lpc32xx_nand_setup(struct lpc32xx_nand_host *host)
 {
        u32 clkrate, tmp;
@@ -58,7 +141,7 @@ static void lpc32xx_nand_setup(struct lpc32xx_nand_host *host)
        /* Get base clock for SLC block */
        clkrate = clk_get_rate(host->clk);
        if (clkrate == 0)
-               clkrate = 104000000;
+               clkrate = 133000000;
 
        /* Compute clock setup values */
        tmp = SLCTAC_WDR(host->ncfg->wdr_clks) |
@@ -174,9 +257,394 @@ static void lpc32xx_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
                __raw_writel((u32) buf[i], SLC_DATA(host->io_base));
 }
 
-#ifdef CONFIG_MTD_PARTITIONS
-const char *part_probes[] = { "cmdlinepart", NULL };
-#endif
+/*
+ * DMA ISR - occurs when DMA transfer complete.
+ */
+static void lpc3xxx_nand_dma_irq(int channel, int cause,
+                       struct lpc32xx_nand_host *host)
+{
+       /* Flush DMA link list */
+       lpc32xx_dma_flush_llist(host->dmach);
+
+       host->dma_xfer_status = (cause & DMA_TC_INT)? 0: 1;
+       complete(&host->comp);
+}
+
+/*
+ * Get DMA channel and allocate DMA descriptors memory.
+ * Prepare DMA descriptors link lists
+ */
+static int lpc32xx_nand_dma_setup(struct lpc32xx_nand_host *host, int num_entries)
+{
+       int ret = 0;
+
+       host->dmach = DMA_CH_SLCNAND;
+       host->dmacfg.ch = DMA_CH_SLCNAND;
+       
+       /*
+        * All the DMA configuration parameters will
+        * be overwritten in lpc32xx_nand_dma_configure().
+        */     
+       host->dmacfg.tc_inten = 1;
+       host->dmacfg.err_inten = 1;
+       host->dmacfg.src_size = 4;
+       host->dmacfg.src_inc = 1;
+       host->dmacfg.src_ahb1 = 1;
+       host->dmacfg.src_bsize = DMAC_CHAN_SRC_BURST_4;
+       host->dmacfg.src_prph = 0;
+       host->dmacfg.dst_size = 4;
+       host->dmacfg.dst_inc = 0;
+       host->dmacfg.dst_bsize = DMAC_CHAN_DEST_BURST_4;
+       host->dmacfg.dst_ahb1 = 0;
+       host->dmacfg.dst_prph = DMAC_DEST_PERIP(DMA_PERID_NAND1);
+       host->dmacfg.flowctrl = DMAC_CHAN_FLOW_D_M2P;
+       if (lpc32xx_dma_ch_get(&host->dmacfg, "dma_slcnand",
+                               &lpc3xxx_nand_dma_irq, host) < 0) {
+               printk(KERN_ERR "Error setting up SLC NAND DMA channel\n");
+               ret = -ENODEV;
+               goto dma_ch_err;
+       }
+
+       /* 
+        * Allocate Linked list of total DMA Descriptors.
+        * For Large Block: 17 descriptors = ((16 Data and ECC Read) + 1 Spare Area)
+        * For Small Block: 5 descriptors = ((4 Data and ECC Read) + 1 Spare Area)
+        */
+       host->llptr = lpc32xx_dma_alloc_llist(host->dmach, num_entries);
+       if (host->llptr == 0) {
+               lpc32xx_dma_ch_put(host->dmach);
+               host->dmach = -1;
+               printk(KERN_ERR "Error allocating list buffer for SLC NAND\n");
+               ret = -ENOMEM;
+               goto dma_alloc_err;
+       }
+
+       return ret;
+dma_alloc_err:
+       lpc32xx_dma_ch_put(host->dmach);
+dma_ch_err:
+       return ret;
+}
+
+/*
+ * Configure DMA descriptors and start DMA x'fer
+ */
+static void lpc32xx_nand_dma_configure(struct mtd_info *mtd,
+               dma_addr_t buffer, int size, int read)
+{
+       struct nand_chip *chip = mtd->priv;
+       struct lpc32xx_nand_host *host = chip->priv;
+       uint32_t page_divider = (size == NAND_LARGE_BLOCK_PAGE_SIZE) ? 8: 2;
+       uint32_t dmasrc, dmadst, ctrl, ecc_ctrl, oob_ctrl;
+       int i;
+       uint32_t *eccpos = chip->ecc.layout->eccpos;
+
+       /* 
+        * CTRL descriptor entry for reading ECC
+        * Copy Multiple times to sync DMA with Flash Controller
+        */
+       ecc_ctrl =  (0x5 |
+                       DMAC_CHAN_SRC_BURST_1 |
+                       DMAC_CHAN_DEST_BURST_1 |
+                       DMAC_CHAN_SRC_WIDTH_32 |
+                       DMAC_CHAN_DEST_WIDTH_32 |
+                       DMAC_CHAN_DEST_AHB1);
+
+       /* CTRL descriptor entry for reading/writing data */
+       ctrl =     ((mtd->writesize / page_divider) / 4) |
+               DMAC_CHAN_SRC_BURST_4 |
+               DMAC_CHAN_DEST_BURST_4 |
+               DMAC_CHAN_SRC_WIDTH_32 |
+               DMAC_CHAN_DEST_WIDTH_32 |
+               DMAC_CHAN_DEST_AHB1;
+
+       /* CTRL descriptor entry for reading/writing Spare Area */
+       oob_ctrl =  ((mtd->oobsize / 4) |
+                        DMAC_CHAN_SRC_BURST_4 |
+                        DMAC_CHAN_DEST_BURST_4 |
+                        DMAC_CHAN_SRC_WIDTH_32 |
+                        DMAC_CHAN_DEST_WIDTH_32 |
+                        DMAC_CHAN_DEST_AHB1);
+
+        if (read) {
+                dmasrc = (uint32_t) SLC_DMA_DATA(host->io_base_phy);
+                dmadst = (uint32_t) (buffer);
+                ctrl |= DMAC_CHAN_DEST_AUTOINC;
+        } else {
+                dmadst = (uint32_t) SLC_DMA_DATA(host->io_base_phy);
+                dmasrc = (uint32_t) (buffer);
+                ctrl |= DMAC_CHAN_SRC_AUTOINC;
+        }
+
+       /*
+        * Write Operation Sequence for Small Block NAND
+        * ----------------------------------------------------------
+        * 1. X'fer 256 bytes of data from Memory to Flash.
+        * 2. Copy generated ECC data from Register to Spare Area
+        * 3. X'fer next 256 bytes of data from Memory to Flash.
+        * 4. Copy generated ECC data from Register to Spare Area.
+        * 5. X'fer 16 byets of Spare area from Memory to Flash.
+        *
+        * Read Operation Sequence for Small Block NAND
+        * ----------------------------------------------------------
+        * 1. X'fer 256 bytes of data from Flash to Memory.
+        * 2. Copy generated ECC data from Register to ECC calc Buffer.
+        * 3. X'fer next 256 bytes of data from Flash to Memory.
+        * 4. Copy generated ECC data from Register to ECC calc Buffer.
+        * 5. X'fer 16 bytes of Spare area from Flash to Memory.
+        *
+        * Write Operation Sequence for Large Block NAND
+        * ----------------------------------------------------------
+        * 1. Steps(1-4) of Write Operations repeate for four times
+        * which generates 16 DMA descriptors to X'fer 2048 byets of
+        * data & 32 bytes of ECC data.
+        * 2. X'fer 64 bytes of Spare area from Memory to Flash.
+        *
+        * Read Operation Sequence for Large Block NAND
+        * ----------------------------------------------------------
+        * 1. Steps(1-4) of Read Operations repeate for four times
+        * which generates 16 DMA descriptors to X'fer 2048 byets of 
+        * data & 32 bytes of ECC data.
+        * 2. X'fer 64 bytes of Spare area from Flash to Memory.
+        */
+        for (i = 0; i < size/256; i++) {
+               lpc32xx_dma_queue_llist(host->dmach,
+                               (void *)(read ?(dmasrc) :(dmasrc + (i*256))), 
+                               (void *)(read ?(dmadst + (i*256)) :dmadst),
+                               -1, ctrl);
+               lpc32xx_dma_queue_llist(host->dmach,
+                               (void *)SLC_ECC(host->io_base_phy),
+                               (void *)(read ?((uint32_t) host->ecc_calc_buf_phy + (i*4)):
+                                ((uint32_t) host->oob_buf_phy + eccpos[i*4])),
+                               -1, ecc_ctrl);
+        }
+
+        if (read) {
+                dmasrc = (uint32_t) (uint32_t) SLC_DMA_DATA(host->io_base_phy);
+                dmadst = (uint32_t) (host->oob_buf_phy);
+                oob_ctrl |= DMAC_CHAN_DEST_AUTOINC;
+        } else {
+                dmadst = (uint32_t) (uint32_t) SLC_DMA_DATA(host->io_base_phy);
+                dmasrc = (uint32_t) (host->oob_buf_phy);
+                oob_ctrl |= DMAC_CHAN_SRC_AUTOINC;
+        }
+
+        /* Read/ Write Spare Area Data To/From Flash */
+       lpc32xx_dma_queue_llist(host->dmach, (void *)dmasrc, (void *)dmadst, -1,
+                       oob_ctrl | DMAC_CHAN_INT_TC_EN);
+}
+
+static void lpc32xx_nand_dma_xfer(struct mtd_info *mtd, u_char *buf, int len, int read)
+{
+       struct nand_chip *this = mtd->priv;
+       uint32_t config;
+       struct lpc32xx_nand_host *host = this->priv;
+       dma_addr_t buf_phy = (dma_addr_t) 0;
+       int dma_mapped = 0;
+
+       /* Calculate the physical address of the Buffer */
+       /* Check if memory not allocated by vmalloc */
+       if (likely((void *) buf < high_memory)) {
+               buf_phy = dma_map_single(mtd->dev.parent,
+                               buf, len, read ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
+               if (unlikely(dma_mapping_error(mtd->dev.parent, buf_phy))) {
+                       dev_err(mtd->dev.parent, "Unable to DMA map a buffer "
+                                       "of size %d\r\n", len);
+                       dma_mapped = 0;
+               }else {
+                       dma_mapped = 1;
+               }
+       }
+
+       if (!dma_mapped) {
+               memcpy(host->dma_buf, buf, len);
+               buf_phy = host->dma_buf_phy;
+       }
+
+       config = DMAC_CHAN_ITC | DMAC_CHAN_IE |
+               (read ? DMAC_CHAN_FLOW_D_P2M : DMAC_CHAN_FLOW_D_M2P) |
+               (read ? DMAC_DEST_PERIP(0) : DMAC_DEST_PERIP(DMA_PERID_NAND1)) |
+               (read ? DMAC_SRC_PERIP(DMA_PERID_NAND1) : DMAC_SRC_PERIP(0)) |
+               DMAC_CHAN_ENABLE;
+
+       /* Prepare descriptors for read transfer */
+       lpc32xx_nand_dma_configure(mtd, buf_phy, len, read);
+
+       /* This should start the DMA transfers */
+       lpc32xx_dma_start_xfer(host->dmach, config);
+       __raw_writel(__raw_readl(SLC_CTRL(host->io_base)) | SLCCTRL_DMA_START,
+                       SLC_CTRL(host->io_base));
+
+       /* Wait for NAND to be ready */
+       nand_wait_ready(mtd);
+       
+       /* Wait till DMA transfer is DONE! */
+       wait_for_completion(&host->comp);
+       if (unlikely(host->dma_xfer_status != 0)) {
+               dev_err(mtd->dev.parent, "DMA transfer error!\r\n");
+               WARN_ON(1);
+       }
+
+       if (dma_mapped)
+               dma_unmap_single(mtd->dev.parent, buf_phy, len,
+                               read ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
+
+        /* Stop DMA & HW ECC */
+       __raw_writel(__raw_readl(SLC_CTRL(host->io_base)) & ~SLCCTRL_DMA_START,
+                       SLC_CTRL(host->io_base));
+       __raw_writel( __raw_readl(SLC_CFG(host->io_base)) &
+                       ~(SLCCFG_DMA_BURST | SLCCFG_ECC_EN |
+                         SLCCFG_DMA_ECC | SLCCFG_DMA_DIR),
+                       SLC_CFG(host->io_base));
+}
+
+static int lpc32xx_nand_correct_data(struct mtd_info *mtd, u_char *dat,
+                u_char *read_ecc, u_char *calc_ecc)
+{
+        int ret = 0;
+        uint32_t tmp, err;
+        uint32_t *ecc_stored = (uint32_t*)read_ecc;
+        uint32_t *ecc_gen = (uint32_t*)calc_ecc;
+
+
+        err = *ecc_stored ^ *ecc_gen;
+        /* Only perform ECC processing if an error is detected */
+        if (err) {
+                /* ECC Failure in i-th block */
+                tmp = bit_cnt32(err);
+                if (tmp == 11) {
+                        uint32_t byte = err >> 6;
+                        uint32_t bit = 0;
+                        bit = ((err & _BIT(1)) >> 1)|((err & _BIT(3)) >> 2)|
+                                ((err & _BIT(5)) >> 3);
+
+                        /* Calculate Byte offset */
+                        byte = ((byte & _BIT(1)) >> 1)|((byte & _BIT(3)) >> 2)|
+                                ((byte & _BIT(5)) >> 3)|((byte & _BIT(7)) >> 4)|
+                                ((byte & _BIT(9)) >> 5)|((byte & _BIT(11)) >> 6)|
+                                ((byte & _BIT(13)) >> 7)|((byte & _BIT(15)) >> 8);
+
+                        /* Do the correction */
+                        dat[byte] ^= _BIT(bit);
+                        ret = 1;
+                }else {
+                        /* Non-corrrectable */
+                        ret = -1;
+                }
+        }
+        return ret;
+}
+
+/* Prepares SLC for transfers with H/W ECC enabled */
+static void lpc32xx_ecc_enable(struct mtd_info *mtd, int mode)
+{
+       struct nand_chip *this = mtd->priv;
+       struct lpc32xx_nand_host *host = this->priv;
+
+       /* Clear ECC, start DMA */
+       __raw_writel(SLCCTRL_ECC_CLEAR, SLC_CTRL(host->io_base));
+
+       if (mode == NAND_ECC_READ) {
+               __raw_writel( __raw_readl(SLC_CFG(host->io_base)) |
+                       SLCCFG_DMA_DIR, SLC_CFG(host->io_base));
+       }
+       else  { /* NAND_ECC_WRITE */
+               __raw_writel( __raw_readl(SLC_CFG(host->io_base)) &
+                       ~SLCCFG_DMA_DIR, SLC_CFG(host->io_base));
+       }
+
+       __raw_writel( __raw_readl(SLC_CFG(host->io_base)) |
+                       SLCCFG_DMA_BURST | SLCCFG_ECC_EN | SLCCFG_DMA_ECC,
+                       SLC_CFG(host->io_base));
+
+       /* Set transfer count */
+       __raw_writel(this->ecc.size + mtd->oobsize, SLC_TC(host->io_base));
+}
+
+/* Function to calculate inverted ECC from the ECC got from H/W */
+static int lpc32xx_ecc_calculate(struct mtd_info *mtd, const uint8_t *dat,
+                                uint8_t *ecc_code)
+{
+       return 0;
+}
+
+static void lpc32xx_nand_write_page_hwecc(struct mtd_info *mtd,
+                               struct nand_chip *chip, const uint8_t *buf)
+{
+       struct nand_chip *this = mtd->priv;
+       struct lpc32xx_nand_host *host = this->priv;
+        int eccsize = chip->ecc.size;
+
+       /* 
+        * Skip writting page which has all 0xFF data as this will
+        * generate 0x0 value.
+        */
+        if(memcmp(buf, host->erase_buf_data, mtd->writesize) == 0)
+                return;
+
+        /* Enable H/W ECC & DMA */
+        chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
+       
+       /* Copy OOB data from kernel buffer to DMA memory */
+       memcpy(host->oob_buf, chip->oob_poi,mtd->oobsize);
+
+        /* Configure DMA Desriptor for NAND Write Operation */
+        lpc32xx_nand_dma_xfer(mtd, (uint8_t *)buf, eccsize, 0);
+}
+
+static int lpc32xx_nand_read_page_hwecc(struct mtd_info *mtd,
+                                 struct nand_chip *chip, uint8_t *buf, int page)
+{
+       struct nand_chip *this = mtd->priv;
+       struct lpc32xx_nand_host *host = this->priv;
+        int i, eccsize = chip->ecc.size;
+        int eccsteps = (mtd->writesize/NAND_ECC_SUBPAGE_LEN);
+        uint8_t *p = buf;
+        uint8_t *ecc_calc = chip->buffers->ecccalc;
+        uint8_t *ecc_code = chip->buffers->ecccode;
+        uint32_t *eccpos = chip->ecc.layout->eccpos;
+
+       memset(host->ecc_calc_buf, 0x0, this->ecc.bytes);
+
+        /* Enable HW ECC & DMA */
+        chip->ecc.hwctl(mtd, NAND_ECC_READ);
+
+        /* Configure DMA Desriptor for NAND Read Operation */
+        lpc32xx_nand_dma_xfer(mtd, buf, eccsize, 1);
+
+       /* Copy OOB data from DMA memory to kernel buffer */
+       memcpy(chip->oob_poi, host->oob_buf, mtd->oobsize);
+       
+        /* Copy only ECC data which are stored into Flash */
+        for (i = 0; i < chip->ecc.total; i++) {
+                ecc_code[i] = chip->oob_poi[eccpos[i]];
+                ecc_calc[i] = host->ecc_calc_buf[i];
+       }
+
+        /*
+        * LPC3250 has 4 bytes of ECC data per 256 bytes of data block
+        * As eccsteps are calucated based on subpage size.
+        */
+        for (i = 0; eccsteps; eccsteps--, i += NAND_ECC_LEN_PER_SUBPAGE,
+                         p += NAND_ECC_SUBPAGE_LEN) {
+                int stat;
+
+               /*
+                * Once block is erased, all the data including OOB data are 0xFF.
+                * ECC generator always generate zero value ECC for such page while,
+                * stored value is 0xFFFFFFFF.
+                */ 
+               if(*((uint32_t *)&ecc_code[i]) == NAND_ERASED_BLOCK_ECC_VALUE)
+                       continue;
+               
+               stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
+                if (stat == -1)
+                        mtd->ecc_stats.failed++;
+                else
+                        mtd->ecc_stats.corrected += stat;
+        }
+        return 0;
+}
 
 /*
  * Probe for NAND controller
@@ -186,6 +654,7 @@ static int __init lpc32xx_nand_probe(struct platform_device *pdev)
        struct lpc32xx_nand_host *host;
        struct mtd_info *mtd;
        struct nand_chip *nand_chip;
+       struct resource *rc;
        int res;
 
 #ifdef CONFIG_MTD_PARTITIONS
@@ -196,14 +665,20 @@ static int __init lpc32xx_nand_probe(struct platform_device *pdev)
        /* Allocate memory for the device structure (and zero it) */
        host = kzalloc(sizeof(struct lpc32xx_nand_host), GFP_KERNEL);
        if (!host) {
-               printk(KERN_ERR "lpc32xx_nand: failed to allocate device structure.\n");
+                dev_err(&pdev->dev,"lpc32xx_nand: failed to allocate device structure.\n");
                return -ENOMEM;
        }
+       
+       rc = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (rc == NULL) {
+               dev_err(&pdev->dev,"No memory resource found for device!\r\n");
+               res = -ENXIO;
+               goto err_exit1;
+       }
 
-       host->io_base = ioremap(pdev->resource[0].start,
-                               pdev->resource[0].end - pdev->resource[0].start + 1);
+       host->io_base = ioremap(rc->start, rc->end - rc->start + 1);
        if (host->io_base == NULL) {
-               printk(KERN_ERR "lpc32xx_nand: ioremap failed\n");
+                dev_err(&pdev->dev,"lpc32xx_nand: ioremap failed\n");
                res = -EIO;
                goto err_exit1;
        }
@@ -215,11 +690,12 @@ static int __init lpc32xx_nand_probe(struct platform_device *pdev)
        nand_chip->priv = host;         /* link the private data structures */
        mtd->priv = nand_chip;
        mtd->owner = THIS_MODULE;
+       mtd->dev.parent = &pdev->dev;
 
        /* Get NAND clock */
        host->clk = clk_get(&pdev->dev, "nand_ck");
        if (IS_ERR(host->clk)) {
-               printk(KERN_ERR "lpc32xx_nand: Clock failure\n");
+                dev_err(&pdev->dev,"lpc32xx_nand: Clock failure\n");
                res = -ENOENT;
                goto err_exit2;
        }
@@ -230,7 +706,6 @@ static int __init lpc32xx_nand_probe(struct platform_device *pdev)
        nand_chip->IO_ADDR_W = SLC_DATA(host->io_base);
        nand_chip->cmd_ctrl = lpc32xx_nand_cmd_ctrl;
        nand_chip->dev_ready = lpc32xx_nand_device_ready;
-       nand_chip->ecc.mode = NAND_ECC_SOFT;    /* enable ECC */
        nand_chip->chip_delay = 20;             /* 20us command delay time */
        nand_chip->read_byte = lpc32xx_read_byte;
        nand_chip->read_buf = lpc32xx_read_buf;
@@ -243,12 +718,94 @@ static int __init lpc32xx_nand_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, host);
 
-       /* Scan to find existance of the device */
-       if (nand_scan(mtd, 1)) {
+       /*
+        * Scan to find existance of the device and
+        * Get the type of NAND device SMALL block or LARGE block
+        */
+       if (nand_scan_ident(mtd, 1)) {
+               res = -ENXIO;
+               goto err_exit3;
+       }
+
+       nand_chip->ecc.mode = NAND_ECC_HW;
+       nand_chip->ecc.size = mtd->writesize;
+       nand_chip->ecc.bytes = (mtd->writesize / 256) * 4;
+        nand_chip->ecc.read_page_raw = lpc32xx_nand_read_page_hwecc;
+        nand_chip->ecc.read_page = lpc32xx_nand_read_page_hwecc;
+        nand_chip->ecc.write_page = lpc32xx_nand_write_page_hwecc;
+
+       switch (mtd->oobsize) {
+               case 16:
+                       nand_chip->ecc.layout = &lpc32xx_nand_oob_16;
+                       break;
+               case 64:
+                       nand_chip->ecc.layout = &lpc32xx_nand_oob_64;
+                       break;
+               default:
+                        dev_err(&pdev->dev, "No oob scheme defined for "
+                                       "oobsize %d\n", mtd->oobsize);
+                       BUG();
+       }
+
+       /* H/W ECC specific functions */
+       nand_chip->ecc.hwctl = lpc32xx_ecc_enable;
+       nand_chip->ecc.correct = lpc32xx_nand_correct_data;
+       nand_chip->ecc.calculate = lpc32xx_ecc_calculate;
+
+       /*
+        * Fills out all the uninitialized function pointers with the defaults
+        * And scans for a bad block table if appropriate.
+        */
+       if (nand_scan_tail(mtd)) {
                res = -ENXIO;
                goto err_exit3;
        }
 
+       /* Get free DMA channel and alloc DMA descriptor link list */
+       res = lpc32xx_nand_dma_setup(host,((mtd->writesize/128) + 1));
+       if(res) {
+               res = -EIO;     
+               goto err_exit3;
+       }
+
+       /* allocate DMA buffer */
+       host->dma_buf_len = 
+               (/* OOB size area for storing OOB data including ECC */
+                mtd->oobsize + 
+                /* Page Size area for storing Page RAW data */
+                mtd->writesize +
+                /* ECC bytes area for storing Calculated ECC at the time reading page */
+                nand_chip->ecc.bytes);
+
+       host->oob_buf = dmam_alloc_coherent(&pdev->dev, host->dma_buf_len,
+                       &host->oob_buf_phy, GFP_KERNEL);
+       if (host->oob_buf == NULL) {
+               dev_err(&pdev->dev, "Unable to allocate DMA memory!\r\n");
+               res = -ENOMEM;
+               goto err_exit4;
+       }
+
+       host->dma_buf = (uint8_t *)host->oob_buf + mtd->oobsize;
+       host->ecc_calc_buf = (uint8_t *)host->dma_buf + mtd->writesize;
+       host->dma_buf_phy = host->oob_buf_phy + mtd->oobsize;
+       host->ecc_calc_buf_phy = host->dma_buf_phy + mtd->writesize;
+
+       host->io_base_phy = platform_get_resource(pdev, IORESOURCE_MEM, 0)->start;
+
+       /* 
+        * Allocate a page size buffer to check all 0xFF data
+        * at the time page writting.
+        */
+       host->erase_buf_data = kmalloc(mtd->writesize, GFP_KERNEL);
+       if (!host->erase_buf_data) {
+                dev_err(&pdev->dev,"lpc32xx_nand: failed to allocate device structure.\n");
+               return -ENOMEM;
+               goto err_exit5;
+       }
+        memset(host->erase_buf_data, 0xFF, mtd->writesize);
+       init_completion(&host->comp);
+
 #ifdef CONFIG_MTD_PARTITIONS
 #ifdef CONFIG_MTD_CMDLINE_PARTS
        mtd->name = "lpc32xx_nand";
@@ -261,22 +818,32 @@ static int __init lpc32xx_nand_probe(struct platform_device *pdev)
        }
 
        if ((!partitions) || (num_partitions == 0)) {
-               printk(KERN_ERR "lpc32xx_nand: No parititions defined, or unsupported device.\n");
+                dev_err(&pdev->dev,"lpc32xx_nand: No parititions defined, or unsupported device.\n");
                res = ENXIO;
-               nand_release(mtd);
-               goto err_exit3;
+               goto err_exit6;
        }
 
        res = add_mtd_partitions(mtd, partitions, num_partitions);
 #else
        res = add_mtd_device(mtd);
 #endif
-
        if (!res)
                return res;
 
        nand_release(mtd);
+err_exit6:
+       kfree(host->erase_buf_data);
+err_exit5:
+       dma_free_coherent(&pdev->dev, host->dma_buf_len,
+                                host->oob_buf, host->oob_buf_phy);
+err_exit4:
+       /* Free the DMA channel used by us */
+       lpc32xx_dma_ch_disable(host->dmach);
+       lpc32xx_dma_dealloc_llist(host->dmach);
+       lpc32xx_dma_ch_put(host->dmach);
+       host->dmach = -1;
 err_exit3:
+       clk_disable(host->clk);
        clk_put(host->clk);
        platform_set_drvdata(pdev, NULL);
 err_exit2:
@@ -297,6 +864,14 @@ static int __devexit lpc32xx_nand_remove(struct platform_device *pdev)
        struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
        struct mtd_info *mtd = &host->mtd;
 
+       /* Free the DMA channel used by us */
+       lpc32xx_dma_ch_disable(host->dmach);
+       lpc32xx_dma_dealloc_llist(host->dmach);
+       lpc32xx_dma_ch_put(host->dmach);
+       host->dmach = -1;
+
+       dma_free_coherent(&pdev->dev, host->dma_buf_len,
+                                host->oob_buf, host->oob_buf_phy);
        nand_release(mtd);
 
        /* Force CE high */
@@ -309,12 +884,14 @@ static int __devexit lpc32xx_nand_remove(struct platform_device *pdev)
        clk_put(host->clk);
 
        iounmap(host->io_base);
+       
+       kfree(host->erase_buf_data);
        kfree(host);
 
        return 0;
 }
 
-#if defined(CONFIG_PM)
+#if defined (CONFIG_PM)
 static int lpc32xx_nand_resume(struct platform_device *pdev)
 {
        struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
@@ -376,7 +953,6 @@ static void __exit lpc32xx_nand_exit(void)
        platform_driver_unregister(&lpc32xx_nand_driver);
 }
 
-
 module_init(lpc32xx_nand_init);
 module_exit(lpc32xx_nand_exit);
 
index 1c1c4db..4c331b4 100644 (file)
@@ -305,7 +305,7 @@ static int __devinit lpc32xx_rtc_probe(struct platform_device *pdev)
        }
 
        retval = request_irq(lpc32xx_rtc_dat->irq, lpc32xx_rtc_alarm_interrupt,
-               0, "rtcalarm", lpc32xx_rtc_dat);
+               IRQF_DISABLED, "rtcalarm", lpc32xx_rtc_dat);
        if (retval < 0) {
                dev_err(&pdev->dev, "Can't request interrupt\n");
                goto err_free_irq;
@@ -346,18 +346,12 @@ static int lpc32xx_rtc_suspend(struct device *dev)
        struct platform_device *pdev = to_platform_device(dev);
        struct lpc32xx_rtc_priv *lpc32xx_rtc_dat =
                platform_get_drvdata(pdev);
-       u32 tmp;
-
-       spin_lock_irq(&lpc32xx_rtc_dat->lock);
-       tmp = readl(RTC_CTRL(lpc32xx_rtc_dat->rtc_base));
 
        if (device_may_wakeup(&pdev->dev))
-               tmp |= RTC_MATCH0_EN;
+               enable_irq_wake(lpc32xx_rtc_dat->irq);
        else
-               tmp &= ~RTC_MATCH0_EN;
+               disable_irq_wake(lpc32xx_rtc_dat->irq);
 
-       writel(tmp, RTC_CTRL(lpc32xx_rtc_dat->rtc_base));
-       spin_unlock_irq(&lpc32xx_rtc_dat->lock);
 
        return 0;
 }
index c7454b5..f949580 100644 (file)
@@ -680,10 +680,45 @@ static int __devexit serial_hs_lpc32xx_remove(struct platform_device *pdev)
        return 0;
 }
 
+
+#if defined (CONFIG_PM)
+static int serial_hs_lpc32xx_suspend(struct platform_device *dev, pm_message_t state)
+{
+       int i;
+
+       for (i = 0; i < uarts_registered; i++) {
+               struct lpc32xx_hsuart_port *p = &lpc32xx_hs_ports[i];
+
+               if (p->port.type != PORT_UNKNOWN && p->port.dev == &dev->dev)
+                       uart_suspend_port(&lpc32xx_hs_reg, &p->port);
+       }
+
+       return 0;
+}
+
+static int serial_hs_lpc32xx_resume(struct platform_device *dev)
+{
+       int i;
+
+       for (i = 0; i < uarts_registered; i++) {
+               struct lpc32xx_hsuart_port *p = &lpc32xx_hs_ports[i];
+
+               if (p->port.type != PORT_UNKNOWN && p->port.dev == &dev->dev)
+                       uart_resume_port(&lpc32xx_hs_reg, &p->port);
+       }
+
+       return 0;
+}
+#else
+#define serial_hs_lpc32xx_suspend      NULL
+#define serial_hs_lpc32xx_resume       NULL
+#endif
+
 static struct platform_driver serial_hs_lpc32xx_driver = {
        .probe          = serial_hs_lpc32xx_probe,
        .remove         = __devexit_p(serial_hs_lpc32xx_remove),
-       /* Suspend and resume are not needed, as the UART autoclocks */
+       .suspend        = serial_hs_lpc32xx_suspend,
+       .resume         = serial_hs_lpc32xx_resume,
        .driver         = {
                .name   = MODNAME,
                .owner  = THIS_MODULE,
index af0f676..039f2cd 100644 (file)
@@ -270,7 +270,7 @@ static int isp1301_probe(struct i2c_client *client, const struct i2c_device_id *
 static int isp1301_remove(struct i2c_client *client);
 
 static const unsigned short normal_i2c[] =
-{ ISP1301_I2C_ADDR, I2C_CLIENT_END };
+{ ISP1301_I2C_ADDR, ISP1301_I2C_ADDR + 1, I2C_CLIENT_END };
 
 static const struct i2c_device_id isp1301_id[] = {
        { "isp1301_pnx", 0 },
@@ -1019,9 +1019,15 @@ static void udc_set_address(struct lpc32xx_udc *udc, u32 addr) {
 /* USB device reset - resets USB to a default state with just EP0
    enabled */
 static void uda_usb_reset(struct lpc32xx_udc *udc) {
+       u32 i = 0;
        /* Re-init device controller and EP0 */
        udc_enable(udc);
        udc->gadget.speed = USB_SPEED_FULL;
+       
+       for (i = 1; i < NUM_ENDPOINTS; i++) {
+               struct lpc32xx_ep *ep = &udc->ep[i];
+               ep->req_pending = 0;
+       }
 }
 
 /* Send a ZLP on EP0 */
@@ -1152,9 +1158,19 @@ static void stop_activity(struct lpc32xx_udc *udc)
                struct lpc32xx_ep *ep = &udc->ep[i];
                nuke(ep, -ESHUTDOWN);
        }
-       if (driver)
+       if (driver) {
                driver->disconnect(&udc->gadget);
+                /*
+                *  Wait for all the endpoints to disable,
+                *  before disabling clocks. Don't wait if 
+                *  endpoints are not enabled. 
+                */
+               if(atomic_read(&udc->enabled_ep_cnt))
+                       wait_event_interruptible(udc->ep_disable_wait_queue,
+                                       (atomic_read(&udc->enabled_ep_cnt) == 0));
+       }
 
+       isp1301_pullup_enable(0);
        udc_disable(udc);
        udc_reinit(udc);
 }
@@ -1216,6 +1232,9 @@ static int lpc32xx_ep_disable (struct usb_ep * _ep)
 
        local_irq_restore(flags);
 
+        atomic_dec(&udc->enabled_ep_cnt);
+        wake_up(&udc->ep_disable_wait_queue);
+
        return 0;
 }
 
@@ -1318,6 +1337,7 @@ static int lpc32xx_ep_enable(struct usb_ep *_ep,
 
        local_irq_restore(flags);
 
+       atomic_inc(&udc->enabled_ep_cnt);
        return 0;
 }
 
@@ -1561,17 +1581,15 @@ static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
 {
        struct lpc32xx_request *req;
        u32 hwep = ep->hwep_num;
-       u32 epstatus;
 
        ep->req_pending = 1;
-       epstatus = udc_clearep_getsts(udc, ep->hwep_num);
 
        /* There will always be a request waiting here */
        req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
 
        /* Place the DD Descriptor into the UDCA */
        udc->udca_v_base[hwep] = (u32) req->dd_desc_ptr->this_dma;
-       udelay(100);
+       
        /* Enable DMA and interrupt for the HW EP */
        udc_ep_dma_enable(udc, hwep);
 
@@ -1593,7 +1611,7 @@ static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
 
        /* Place the DD Descriptor into the UDCA */
        udc->udca_v_base[hwep] = (u32) req->dd_desc_ptr->this_dma;
-       udelay(100);
+       
        /* Enable DMA and interrupt for the HW EP */
        udc_ep_dma_enable(udc, hwep);
 
@@ -1627,11 +1645,13 @@ void udc_handle_eps(struct lpc32xx_udc *udc, u32 epints) {
        done(ep, req, 0);
 
        /* Start another request if ready */
-       if (!list_entry(ep->queue.next, struct lpc32xx_request, queue)) {
-               if (ep->is_in)
+       if(!list_empty((&ep->queue))) {
+               if (ep->is_in) {
                        udc_ep_in_req_dma(udc, ep);
-               else
+               }
+               else {
                        udc_ep_out_req_dma(udc, ep);
+               }
        }
        else
                ep->req_pending = 0;
@@ -1650,14 +1670,13 @@ void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep,
 
 /* DMA end of transfer completion */
 static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) {
-       u32 status, epstatus;
+       u32 status;
        struct lpc32xx_request *req;
        struct lpc32xx_usbd_dd_gad *dd;
 
 #ifdef CONFIG_USB_GADGET_DEBUG_FILES
        ep->totalints++;
 #endif
-
        req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
        if (!req) {
                ep_err(ep, "DMA interrupt on no req!\n");
@@ -1761,36 +1780,18 @@ static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) {
        /* Transfer request is complete */
        done(ep, req, 0);
 
-       epstatus = udc_clearep_getsts(udc, ep->hwep_num);
+       udc_clearep_getsts(udc, ep->hwep_num);
+       /* Start another request if ready */
        if(!list_empty((&ep->queue))) {
-               if (ep->is_in)
+               if (ep->is_in) {
                        udc_ep_in_req_dma(udc, ep);
-               else
+               }
+               else {
                        udc_ep_out_req_dma(udc, ep);
+               }
        }
        else 
                ep->req_pending = 0;
-#if 0
-       bufst = epstatus & EP_SEL_F;
-
-       if (ep->is_in) {
-               if(list_empty((&ep->queue))) {
-
-                       if (!bufst)
-                               return;
-               }
-               ep->req_pending = 0;
-               if(bufst)
-                       return;
-       }
-
-       if(!list_empty((&ep->queue))) {
-               if (ep->is_in) 
-                       udc_ep_in_req_dma(udc, ep);
-               else
-                       udc_ep_out_req_dma(udc, ep);
-       }
-#endif
 }
 
 #else
@@ -2749,21 +2750,6 @@ static int vbus_handler_thread(void *udc_)
 
        /* The main loop */
        while (!kthread_should_stop()) {
-               /* Get the interrupt from the transceiver */
-               value = i2c_read(ISP1301_I2C_INTERRUPT_LATCH);
-
-               /* Discharge VBUS real quick */
-               i2c_write(OTG1_VBUS_DISCHRG, ISP1301_I2C_OTG_CONTROL_1);
-
-               /* Give VBUS some time (200mS) to discharge */
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               schedule_timeout(200 / (1000 / HZ));
-               set_current_state(TASK_INTERRUPTIBLE);
-
-               /* Disable VBUS discharge resistor */
-               i2c_write(OTG1_VBUS_DISCHRG,
-                               (ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR));
-
                if (udc->enabled != 0) {
                        /* Get the VBUS status from the transceiver */
                        value = i2c_read(ISP1301_I2C_OTG_CONTROL_2);
@@ -2790,9 +2776,6 @@ static int vbus_handler_thread(void *udc_)
                        }
                }
 
-               /* Clear interrupt */
-               i2c_write(~0, ISP1301_I2C_INTERRUPT_LATCH | ISP1301_I2C_REG_CLEAR_ADDR);
-
                /* sleep if nothing to send */
                set_current_state(TASK_INTERRUPTIBLE);
                schedule();
@@ -2807,6 +2790,19 @@ static irqreturn_t lpc32xx_usb_vbus_irq(int irq, void *_udc)
 {
        struct lpc32xx_udc *udc = _udc;
 
+       /* Discharge VBUS real quick */
+       i2c_write(OTG1_VBUS_DISCHRG, ISP1301_I2C_OTG_CONTROL_1);
+       
+       /* Give VBUS some time (100mS) to discharge */
+       msleep(100);
+
+       /* Disable VBUS discharge resistor */
+       i2c_write(OTG1_VBUS_DISCHRG,
+                       (ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR));
+       
+       /* Clear interrupt */
+       i2c_write(~0, ISP1301_I2C_INTERRUPT_LATCH | ISP1301_I2C_REG_CLEAR_ADDR);
+       
        /* Kick off the VBUS handler thread */
        udc->thread_wakeup_needed = 1;
        wake_up_process(udc->thread_task);
@@ -3093,13 +3089,17 @@ static int __init lpc32xx_udc_probe(struct platform_device *pdev)
 
        /* The transceiver interrupt is used for VBUS detection and will
           kick off the VBUS handler thread */
-       retval = request_irq(udc->udp_irq[IRQ_USB_ATX], lpc32xx_usb_vbus_irq,
-                       IRQF_ONESHOT, "udc_otg", udc);
+       retval = request_threaded_irq(udc->udp_irq[IRQ_USB_ATX], NULL, lpc32xx_usb_vbus_irq,
+                                IRQF_ONESHOT, "udc_otg", udc);
        if (retval < 0) {
                dev_err(udc->dev, "VBUS request irq %d failed\n", udc->udp_irq[IRQ_USB_ATX]);
                goto irq_xcvr_fail;
        }
 
+        /* Initialize wait queue */
+        init_waitqueue_head(&udc->ep_disable_wait_queue);
+        atomic_set(&udc->enabled_ep_cnt,0);
+
        /* Keep VBUS IRQ disabled until GadgetFS starts up */
        disable_irq(udc->udp_irq[IRQ_USB_ATX]);
 
@@ -3131,6 +3131,8 @@ dma2_alloc_fail:
 dma_alloc_fail:
        iounmap(udc->udp_baseaddr);
 io_map_fail:
+        i2c_unregister_device(isp1301_i2c_client);
+        isp1301_i2c_client = NULL;
 i2c_probe_fail:
        i2c_del_driver(&isp1301_driver);
 i2c_add_fail:
@@ -3160,8 +3162,6 @@ static int __exit lpc32xx_udc_remove(struct platform_device *pdev)
        udc_disable(udc);
        pullup(udc, 0);
 
-       if (udc->irq_asrtd == 1)
-               disable_irq(udc->udp_irq[IRQ_USB_ATX]);
        free_irq(udc->udp_irq[IRQ_USB_ATX], udc);
 
        device_init_wakeup(&pdev->dev, 0);
@@ -3182,6 +3182,8 @@ static int __exit lpc32xx_udc_remove(struct platform_device *pdev)
        clk_disable(udc->usb_pll_clk);
        clk_put(udc->usb_pll_clk);
        iounmap(udc->udp_baseaddr);
+       i2c_unregister_device(isp1301_i2c_client);
+       isp1301_i2c_client = NULL;
        i2c_del_driver(&isp1301_driver);
        release_mem_region(udc->io_p_start, udc->io_p_size);
 
index 6b3c7df..ccc89fb 100644 (file)
@@ -28,7 +28,7 @@
  * seems to work ok for serial ACM, but eventually bonks out for MSC and
  * ether classes. Disabling this define will use FIFO mode for all EPs
  */
-//#define UDC_ENABLE_DMA
+#define UDC_ENABLE_DMA
 
 /*
  * controller driver data structures
@@ -150,6 +150,8 @@ struct lpc32xx_udc {
        u32                     suspended:1;
        u32                     selfpowered:1;
        int                     ep0state;
+        atomic_t                enabled_ep_cnt;
+        wait_queue_head_t       ep_disable_wait_queue;
 };
 
 /*