summaryrefslogtreecommitdiff
path: root/packages/linux/linux-2.6.28
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/linux/linux-2.6.28
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/linux/linux-2.6.28')
-rw-r--r--packages/linux/linux-2.6.28/at91sam9263ek/defconfig1713
-rw-r--r--packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch106
-rw-r--r--packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch1228
-rw-r--r--packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch25
-rw-r--r--packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch25
-rw-r--r--packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch24
-rw-r--r--packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch722
-rw-r--r--packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch107
-rw-r--r--packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch70
-rw-r--r--packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch2629
-rw-r--r--packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch59
-rw-r--r--packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch803
-rw-r--r--packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch981
-rw-r--r--packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch528
-rw-r--r--packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch27
-rw-r--r--packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch43
-rw-r--r--packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch242
-rw-r--r--packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch137
-rw-r--r--packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch473
-rw-r--r--packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch103
-rw-r--r--packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch323
-rw-r--r--packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch40
-rw-r--r--packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch93
-rw-r--r--packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch148
-rw-r--r--packages/linux/linux-2.6.28/collie/defconfig1677
-rw-r--r--packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2bin67725 -> 0 bytes
-rw-r--r--packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2bin56841 -> 0 bytes
-rw-r--r--packages/linux/linux-2.6.28/ronetix-pm9263/defconfig1438
-rw-r--r--packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch1751
-rw-r--r--packages/linux/linux-2.6.28/stb225/defconfig1247
-rw-r--r--packages/linux/linux-2.6.28/stb225/ebase-fix.patch37
-rw-r--r--packages/linux/linux-2.6.28/stb225/enable-uart.patch13
-rw-r--r--packages/linux/linux-2.6.28/stb225/ip3902.patch1549
-rw-r--r--packages/linux/linux-2.6.28/stb225/uImage.patch23
-rw-r--r--packages/linux/linux-2.6.28/tosa/commit-31c9b2867
-rw-r--r--packages/linux/linux-2.6.28/tosa/commit-ddfb33c39
-rw-r--r--packages/linux/linux-2.6.28/tosa/commit-f34ee7968
-rw-r--r--packages/linux/linux-2.6.28/wrap/defconfig1704
38 files changed, 0 insertions, 20262 deletions
diff --git a/packages/linux/linux-2.6.28/at91sam9263ek/defconfig b/packages/linux/linux-2.6.28/at91sam9263ek/defconfig
deleted file mode 100644
index 72a8bb8e21..0000000000
--- a/packages/linux/linux-2.6.28/at91sam9263ek/defconfig
+++ /dev/null
@@ -1,1713 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28
-# Wed Jan 28 15:11:30 2009
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-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
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-# CONFIG_RELAY is not set
-CONFIG_NAMESPACES=y
-# CONFIG_UTS_NS is not set
-# CONFIG_IPC_NS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-# CONFIG_COMPAT_BRK is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-# CONFIG_MARKERS is not set
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_CLK=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-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_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-CONFIG_CLASSIC_RCU=y
-# CONFIG_FREEZER is not set
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-CONFIG_ARCH_AT91=y
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Atmel AT91 System-on-Chip
-#
-# CONFIG_ARCH_AT91RM9200 is not set
-# CONFIG_ARCH_AT91SAM9260 is not set
-# CONFIG_ARCH_AT91SAM9261 is not set
-CONFIG_ARCH_AT91SAM9263=y
-# CONFIG_ARCH_AT91SAM9RL is not set
-# CONFIG_ARCH_AT91SAM9G20 is not set
-# CONFIG_ARCH_AT91CAP9 is not set
-# CONFIG_ARCH_AT91X40 is not set
-CONFIG_AT91_PMC_UNIT=y
-
-#
-# AT91SAM9263 Board Type
-#
-CONFIG_MACH_AT91SAM9263EK=y
-# CONFIG_MACH_USB_A9263 is not set
-# CONFIG_MACH_CSB737 is not set
-# CONFIG_MACH_TOTEMNOVA is not set
-# CONFIG_MACH_NEOCORE926 is not set
-
-#
-# AT91 Board Options
-#
-CONFIG_MTD_AT91_DATAFLASH_CARD=y
-# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
-
-#
-# AT91 Feature Selections
-#
-CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
-CONFIG_AT91_TIMER_HZ=100
-CONFIG_AT91_EARLY_DBGU=y
-# CONFIG_AT91_EARLY_USART0 is not set
-# CONFIG_AT91_EARLY_USART1 is not set
-# CONFIG_AT91_EARLY_USART2 is not set
-# CONFIG_AT91_EARLY_USART3 is not set
-# CONFIG_AT91_EARLY_USART4 is not set
-# CONFIG_AT91_EARLY_USART5 is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_PABRT_NOIFAR=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-CONFIG_ARCH_FLATMEM_HAS_HOLES=y
-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-CONFIG_UNEVICTABLE_LRU=y
-CONFIG_LEDS=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=64M console=ttyS0,115200 root=/dev/mmcblk0p1 rootfstype=ext2 rootdelay=5"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Power Management
-#
-CONFIG_CPU_IDLE=y
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_CPU_IDLE_GOV_MENU=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-# CONFIG_PM is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL 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=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETLABEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_SCHED 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=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTSDIO=m
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_AF_RXRPC is not set
-# CONFIG_PHONET is not set
-# CONFIG_WIRELESS is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_AR7_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_MTD_OOPS is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_DATAFLASH=y
-# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
-# CONFIG_MTD_DATAFLASH_OTP is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLOCK2MTD=y
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_ATMEL=y
-# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
-# CONFIG_MTD_NAND_ATMEL_ECC_HW_HSIAO is not set
-CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
-# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
-CONFIG_MTD_ONENAND=y
-# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
-CONFIG_MTD_ONENAND_GENERIC=y
-# CONFIG_MTD_ONENAND_OTP is not set
-# CONFIG_MTD_ONENAND_2X_PROGRAM is not set
-# CONFIG_MTD_ONENAND_SIM is not set
-
-#
-# UBI - Unsorted block images
-#
-CONFIG_MTD_UBI=y
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_RESERVE=1
-CONFIG_MTD_UBI_GLUEBI=y
-
-#
-# UBI debugging options
-#
-# CONFIG_MTD_UBI_DEBUG is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_ATMEL_PWM is not set
-# CONFIG_ATMEL_TCLIB is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_ATMEL_SSC is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_C2PORT is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_SCAN_ASYNC=y
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_LOWLEVEL is not set
-# CONFIG_SCSI_DH is not set
-# CONFIG_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=y
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_LXT_PHY is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_VITESSE_PHY is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-CONFIG_MACB=y
-CONFIG_MACB_TX_SRAM=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_SMC911X is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-# CONFIG_B44 is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-# CONFIG_IWLWIFI_LEDS is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_DM9601=m
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_KC2190 is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_WAN is not set
-CONFIG_PPP=y
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=y
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPP_DEFLATE is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=y
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_GPIO 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_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_WM97XX is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_ATMEL=y
-CONFIG_SERIAL_ATMEL_CONSOLE=y
-CONFIG_SERIAL_ATMEL_PDC=y
-# CONFIG_SERIAL_ATMEL_TTYAT is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# 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_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_STUB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_DS1682 is not set
-# CONFIG_AT24 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_ATMEL=y
-# CONFIG_SPI_BITBANG is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_MAX1111 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THERMAL_HWMON is not set
-CONFIG_WATCHDOG=y
-CONFIG_WATCHDOG_NOWAYOUT=y
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_AT91SAM9X_WATCHDOG=y
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM8350_I2C is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
-
-#
-# Multimedia drivers
-#
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D15605 is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_ATMEL=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_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 is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_LOGO is not set
-CONFIG_SOUND=y
-CONFIG_SOUND_OSS_CORE=y
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-CONFIG_SND_DEBUG_VERBOSE=y
-CONFIG_SND_PCM_XRUN_DEBUG=y
-CONFIG_SND_VMASTER=y
-CONFIG_SND_AC97_CODEC=y
-# CONFIG_SND_DRIVERS is not set
-CONFIG_SND_ARM=y
-CONFIG_SND_AT91_AC97=y
-# CONFIG_SND_SPI is not set
-# CONFIG_SND_USB is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_ATMEL_SOC=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-CONFIG_HIDRAW=y
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_HID_PID is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# Special HID drivers
-#
-CONFIG_HID_COMPAT=y
-CONFIG_HID_A4TECH=y
-CONFIG_HID_APPLE=y
-CONFIG_HID_BELKIN=y
-CONFIG_HID_BRIGHT=y
-CONFIG_HID_CHERRY=y
-CONFIG_HID_CHICONY=y
-CONFIG_HID_CYPRESS=y
-CONFIG_HID_DELL=y
-CONFIG_HID_EZKEY=y
-CONFIG_HID_GYRATION=y
-CONFIG_HID_LOGITECH=y
-# CONFIG_LOGITECH_FF is not set
-# CONFIG_LOGIRUMBLEPAD2_FF is not set
-CONFIG_HID_MICROSOFT=y
-CONFIG_HID_MONTEREY=y
-CONFIG_HID_PANTHERLORD=y
-# CONFIG_PANTHERLORD_FF is not set
-CONFIG_HID_PETALYNX=y
-CONFIG_HID_SAMSUNG=y
-CONFIG_HID_SONY=y
-CONFIG_HID_SUNPLUS=y
-# CONFIG_THRUSTMASTER_FF is not set
-# CONFIG_ZEROPLUS_FF is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DEVICE_CLASS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-CONFIG_USB_MON=y
-# CONFIG_USB_WUSB is not set
-# CONFIG_USB_WUSB_CBAF is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_HWA_HCD is not set
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_GADGET_MUSB_HDRC is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_WDM=m
-# CONFIG_USB_TMC is not set
-
-#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
-#
-
-#
-# see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB port drivers
-#
-CONFIG_USB_SERIAL=y
-# CONFIG_USB_SERIAL_CONSOLE is not set
-# CONFIG_USB_EZUSB is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_VST is not set
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_VBUS_DRAW=2
-CONFIG_USB_GADGET_SELECTED=y
-CONFIG_USB_GADGET_AT91=y
-CONFIG_USB_AT91=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_PXA27X 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_NET2280 is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_PRINTER is not set
-# CONFIG_USB_CDC_COMPOSITE is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_SDHCI is not set
-CONFIG_MMC_AT91=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_NEW_LEDS 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 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-
-#
-# SPI RTC drivers
-#
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_AT91SAM9=y
-CONFIG_RTC_DRV_AT91SAM9_RTT=0
-CONFIG_RTC_DRV_AT91SAM9_GPBR=0
-# CONFIG_DMADEVICES is not set
-# CONFIG_REGULATOR is not set
-CONFIG_UIO=m
-CONFIG_UIO_PDRV=m
-CONFIG_UIO_PDRV_GENIRQ=m
-# CONFIG_UIO_SMX is not set
-# CONFIG_UIO_SERCOS3 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_EXT4_FS=m
-# CONFIG_EXT4DEV_COMPAT is not set
-# CONFIG_EXT4_FS_XATTR is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_JBD2=m
-# CONFIG_JBD2_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_PROC_PAGE_MONITOR=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-# CONFIG_JFFS2_CMODE_PRIORITY is not set
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_JFFS2_CMODE_FAVOURLZO=y
-CONFIG_UBIFS_FS=y
-CONFIG_UBIFS_FS_XATTR=y
-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
-CONFIG_UBIFS_FS_LZO=y
-CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
-CONFIG_CRAMFS=y
-# CONFIG_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=y
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-CONFIG_CIFS_EXPERIMENTAL=y
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf-8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=y
-CONFIG_NLS_CODEPAGE_852=y
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-CONFIG_NLS_CODEPAGE_865=y
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=y
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=y
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_WARN_DEPRECATED=y
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_FRAME_WARN=1024
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
-CONFIG_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_FAULT_INJECTION is not set
-# CONFIG_LATENCYTOP is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-
-#
-# Tracers
-#
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_STACK_TRACER is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_KGDB is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-CONFIG_SECURITY=y
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_NETWORK is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_SECURITY_ROOTPLUG is not set
-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
-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_RNG2=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_MANAGER2=y
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_LZO=y
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC16=y
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CRC_ITU_T=m
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch b/packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch
deleted file mode 100644
index 51c161f99d..0000000000
--- a/packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 4765c85914d55590c6d17b6cf9e6f7964d1af108 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Tue, 28 Oct 2008 21:41:39 +0300
-Subject: [PATCH 01/23] collie: start scoop converton to new api
-
-Start converting scoop gpio access to new API instead of old
-deprecated one.
-
-Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
----
- arch/arm/mach-sa1100/collie.c | 28 +++++++++++++++++++++++-----
- arch/arm/mach-sa1100/include/mach/collie.h | 7 ++++---
- 2 files changed, 27 insertions(+), 8 deletions(-)
-
-diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
-index fe28999..8cf267f 100644
---- a/arch/arm/mach-sa1100/collie.c
-+++ b/arch/arm/mach-sa1100/collie.c
-@@ -25,6 +25,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/timer.h>
-+#include <linux/gpio.h>
-
- #include <mach/hardware.h>
- #include <asm/mach-types.h>
-@@ -55,6 +56,7 @@ static struct resource collie_scoop_resources[] = {
- static struct scoop_config collie_scoop_setup = {
- .io_dir = COLLIE_SCOOP_IO_DIR,
- .io_out = COLLIE_SCOOP_IO_OUT,
-+ .gpio_base = COLLIE_SCOOP_GPIO_BASE,
- };
-
- struct platform_device colliescoop_device = {
-@@ -196,18 +198,34 @@ static struct mtd_partition collie_partitions[] = {
- }
- };
-
-+static int collie_flash_init(void)
-+{
-+ int rc;
-+ rc = gpio_request(COLLIE_GPIO_VPEN, "flash Vpp enable");
-+ if (rc)
-+ return rc;
-+
-+ rc = gpio_direction_output(COLLIE_GPIO_VPEN, 1);
-+ if (rc)
-+ gpio_free(COLLIE_GPIO_VPEN);
-+
-+ return rc;
-+}
-+
- static void collie_set_vpp(int vpp)
- {
-- write_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPCR) | COLLIE_SCP_VPEN);
-- if (vpp)
-- write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR) | COLLIE_SCP_VPEN);
-- else
-- write_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR, read_scoop_reg(&colliescoop_device.dev, SCOOP_GPWR) & ~COLLIE_SCP_VPEN);
-+ gpio_set_value(COLLIE_GPIO_VPEN, vpp);
- }
-
-+static void collie_flash_exit(void)
-+{
-+ gpio_free(COLLIE_GPIO_VPEN);
-+}
- static struct flash_platform_data collie_flash_data = {
- .map_name = "cfi_probe",
-+ .init = collie_flash_init,
- .set_vpp = collie_set_vpp,
-+ .exit = collie_flash_exit,
- .parts = collie_partitions,
- .nr_parts = ARRAY_SIZE(collie_partitions),
- };
-diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h
-index 69e9624..9bc5349 100644
---- a/arch/arm/mach-sa1100/include/mach/collie.h
-+++ b/arch/arm/mach-sa1100/include/mach/collie.h
-@@ -14,6 +14,7 @@
- #define __ASM_ARCH_COLLIE_H
-
-
-+#define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1)
- #define COLLIE_SCP_CHARGE_ON SCOOP_GPCR_PA11
- #define COLLIE_SCP_DIAG_BOOT1 SCOOP_GPCR_PA12
- #define COLLIE_SCP_DIAG_BOOT2 SCOOP_GPCR_PA13
-@@ -21,13 +22,13 @@
- #define COLLIE_SCP_MUTE_R SCOOP_GPCR_PA15
- #define COLLIE_SCP_5VON SCOOP_GPCR_PA16
- #define COLLIE_SCP_AMP_ON SCOOP_GPCR_PA17
--#define COLLIE_SCP_VPEN SCOOP_GPCR_PA18
-+#define COLLIE_GPIO_VPEN (COLLIE_SCOOP_GPIO_BASE + 7)
- #define COLLIE_SCP_LB_VOL_CHG SCOOP_GPCR_PA19
-
- #define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
-- COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | COLLIE_SCP_VPEN | \
-+ COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | \
- COLLIE_SCP_LB_VOL_CHG )
--#define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | COLLIE_SCP_VPEN | \
-+#define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
- COLLIE_SCP_CHARGE_ON )
-
- /* GPIOs for which the generic definition doesn't say much */
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch b/packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch
deleted file mode 100644
index 7530beee2c..0000000000
--- a/packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch
+++ /dev/null
@@ -1,1228 +0,0 @@
-From dae5d7c71ba47bdd0603d5cc3e8a3dfe28d209a0 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:30:32 +0200
-Subject: [PATCH 02/23] add locomo_spi driver
-
----
- drivers/spi/Kconfig | 4 +
- drivers/spi/Makefile | 1 +
- drivers/spi/locomo_spi.c | 1097 ++++++++++++++++++++++++++++++++++++++++++++++
- drivers/spi/locomo_spi.h | 75 ++++
- 4 files changed, 1177 insertions(+), 0 deletions(-)
- create mode 100644 drivers/spi/locomo_spi.c
- create mode 100644 drivers/spi/locomo_spi.h
-
-diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
-index b9d0efb..aa3c60a 100644
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -123,6 +123,10 @@ config SPI_MPC52xx_PSC
- This enables using the Freescale MPC52xx Programmable Serial
- Controller in master SPI mode.
-
-+config SPI_LOCOMO
-+ tristate "Locomo SPI master"
-+ depends on SPI_MASTER && SHARP_LOCOMO && EXPERIMENTAL
-+
- config SPI_MPC83xx
- tristate "Freescale MPC83xx/QUICC Engine SPI controller"
- depends on (PPC_83xx || QUICC_ENGINE) && EXPERIMENTAL
-diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
-index ccf18de..794dd45 100644
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
- obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
- obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
- obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
-+obj-$(CONFIG_SPI_LOCOMO) += locomo_spi.o
- # ... add above this line ...
-
- # SPI protocol drivers (device/link on bus)
-diff --git a/drivers/spi/locomo_spi.c b/drivers/spi/locomo_spi.c
-new file mode 100644
-index 0000000..d3a4bd9
---- /dev/null
-+++ b/drivers/spi/locomo_spi.c
-@@ -0,0 +1,1097 @@
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/device.h>
-+#include <linux/stat.h>
-+#include <linux/delay.h>
-+#include <linux/wait.h>
-+#include <linux/interrupt.h>
-+#include <asm/hardware/locomo.h>
-+#include <asm/errno.h>
-+#include <linux/mmc/host.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/mmc_spi.h>
-+#include <linux/workqueue.h>
-+#include <linux/spinlock.h>
-+#include <linux/list.h>
-+#include "locomo_spi.h"
-+static struct locomospi_dev * spidev;
-+static struct work_struct transfer_wq;
-+int delay;
-+
-+char* transtxbuf=(char*)NULL;
-+char* transrxbuf=(char*)NULL;
-+int transfercount=0, transfersize=0;
-+static DECLARE_WAIT_QUEUE_HEAD(transferqueue);
-+/* MMC_SPI functions *********************************************************/
-+
-+static int locomommcspi_init(struct device *dev, irqreturn_t (*isr)(int, void*), void *mmc)
-+{
-+ int result;
-+ result=request_irq(IRQ_LOCOMO_CARDDETECT, isr, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "locomo-spi", mmc);
-+ return result;
-+}
-+
-+static void locomommcspi_exit(struct device *dev, void* mmc)
-+{
-+ free_irq(IRQ_LOCOMO_CARDDETECT, mmc);
-+}
-+
-+static int locomommcspi_getro(struct device *dev)
-+{
-+ return locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_WRITE_PROT) > 0 ? 1 : 0;
-+}
-+
-+static void locomommcspi_setpower(struct device *dev, unsigned int mask)
-+{
-+ if(!mask && spidev->card_power)
-+ locomospi_power(0);
-+ else if( !spidev->card_power )
-+ locomospi_power(1);
-+
-+}
-+
-+
-+static struct mmc_spi_platform_data colliemmc ={
-+ .init = locomommcspi_init,
-+ .exit = locomommcspi_exit,
-+ .detect_delay = 200,
-+ .get_ro = locomommcspi_getro,
-+ .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
-+ .setpower = locomommcspi_setpower,
-+ .powerup_msecs = 200,
-+};
-+
-+/* Utility function **********************************************************/
-+
-+static void locomospi_power(int on)
-+{
-+ locomo_gpio_write(spidev->ldev->dev.parent, LOCOMO_GPIO_CARD_POWER, on);
-+ spidev->card_power=on;
-+ printk(KERN_DEBUG "locomospi: power %d\n",on);
-+}
-+
-+static void locomospi_setclock(unsigned int div, unsigned int clock)
-+{
-+ u16 r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ div &= 0x7;
-+ clock &= 0x3;
-+ if(clock != spidev->clock_base || div != spidev->clock_div){
-+ r &= ~(LOCOMO_SPI_XSEL | LOCOMO_SPI_CLKSEL | LOCOMO_SPI_XEN);
-+ iowrite16(r,spidev->base+LOCOMO_SPIMD);
-+ r |= (div | (clock <<3) | LOCOMO_SPI_XEN);
-+ iowrite16(r,spidev->base+LOCOMO_SPIMD);
-+ spidev->clock_div = div;
-+ spidev->clock_base = clock;
-+ udelay(300);
-+ }
-+
-+}
-+// returns 1 if card ist present, 0 otherwise
-+static int locomospi_carddetect()
-+{
-+ return (locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_CARD_DETECT)>0)?0:1;
-+}
-+
-+static void locomospi_setcs(int high)
-+{
-+ u16 r;
-+ printk(KERN_DEBUG "locomospi: cs %d\n",high);
-+ r = ioread16(spidev->base + LOCOMO_SPICT);
-+ if(high)
-+ r |= LOCOMO_SPI_CS;
-+ else
-+ r &= ~LOCOMO_SPI_CS;
-+ iowrite16(r, spidev->base + LOCOMO_SPICT);
-+}
-+
-+static void locomospi_reg_open()
-+{
-+ u16 r;
-+ spidev->clock_div = DIV_64;
-+ spidev->clock_base = CLOCK_18MHZ;
-+ locomospi_power(1);
-+ msleep(100);
-+// iowrite16( 0xec00 | (CLOCK_18MHZ <<3)|DIV_64, spidev->base+LOCOMO_SPIMD);
-+ iowrite16( LOCOMO_SPI_MSB1ST | LOCOMO_SPI_DOSTAT | LOCOMO_SPI_RCPOL | LOCOMO_SPI_TCPOL
-+ |(CLOCK_18MHZ <<3) | DIV_64, spidev->base+LOCOMO_SPIMD);
-+// if(locomospi_carddetect()){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16( r, spidev->base+LOCOMO_SPIMD);
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XEN;
-+ iowrite16( r, spidev->base+LOCOMO_SPIMD);
-+// }
-+ iowrite16( LOCOMO_SPI_CS, spidev->base+LOCOMO_SPICT);
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r |= (LOCOMO_SPI_CEN | LOCOMO_SPI_RXUEN | LOCOMO_SPI_ALIGNEN);
-+ iowrite16( r, spidev->base+LOCOMO_SPICT);
-+ udelay(200);
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r &= ~LOCOMO_SPI_CS;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+}
-+
-+static void locomospi_reg_release()
-+{
-+ u16 r;
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r &= ~LOCOMO_SPI_CEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r &= ~LOCOMO_SPI_XEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r &= ~LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r |= LOCOMO_SPI_XEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+ locomospi_power(0);
-+}
-+#if 0
-+static int txrx(const char* txbuffer, char* rxbuffer, int size)
-+{
-+ u16 r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r |= LOCOMO_SPI_ALIGNEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+ printk(KERN_DEBUG "locomospi: %d bytes to prozess\n",size);
-+ /* initialize global vars for isr */
-+ transfercount=0; transfersize=size;
-+ transtxbuf=txbuffer; transrxbuf=rxbuffer;
-+
-+ /* start transmit and go sleep isr will wake us*/
-+ enable_irq(IRQ_LOCOMO_SPI_TEND);
-+ iowrite8(txbuffer[0], spidev->base+LOCOMO_SPITD);
-+ wait_event(transferqueue, transfercount >= transfersize);
-+ disable_irq(IRQ_LOCOMO_SPI_TEND);
-+ transrxbuf=NULL; transtxbuf=NULL;
-+
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r &= ~LOCOMO_SPI_ALIGNEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+ int i;
-+ for(i=0; i< size; i++)
-+ printk(KERN_DEBUG "locomospi: sent: %x received: %x \n",txbuffer[i], rxbuffer[i]);
-+
-+
-+ return size;
-+}
-+
-+
-+static int tx(const char* txbuffer, int size)
-+{
-+ printk(KERN_DEBUG "locomospi: %d bytes to send\n",size);
-+ /* initialize global vars for isr */
-+ transfercount=0; transfersize=size;
-+ transtxbuf=txbuffer;
-+
-+ /* start transmit and go sleep isr will wake us*/
-+ enable_irq(IRQ_LOCOMO_SPI_RFW);
-+ iowrite8(txbuffer[0], spidev->base+LOCOMO_SPITD);
-+ wait_event(transferqueue, transfercount >= transfersize);
-+ disable_irq(IRQ_LOCOMO_SPI_RFW);
-+ transtxbuf=NULL;
-+
-+ int i;
-+ for(i=0; i< size; i++)
-+ printk(KERN_DEBUG "locomospi: sent: %x\n",txbuffer[i]);
-+
-+
-+ return size;
-+}
-+
-+static int rx(char* rxbuffer, int size)
-+{
-+ printk(KERN_DEBUG "locomospi: %d bytes to read\n",size);
-+ /* initialize global vars for isr */
-+ transfercount=0; transfersize=size;
-+ transrxbuf=rxbuffer;
-+
-+ /* start transmit and go sleep isr will wake us*/
-+ enable_irq(IRQ_LOCOMO_SPI_RFR);
-+ rxbuffer[0]=ioread8(spidev->base+LOCOMO_SPIRD);
-+ wait_event(transferqueue, transfercount >= transfersize);
-+ disable_irq(IRQ_LOCOMO_SPI_RFR);
-+ transrxbuf=NULL;
-+
-+ int i;
-+ for(i=0; i< size; i++)
-+ printk(KERN_DEBUG "locomospi: received: %x \n", rxbuffer[i]);
-+
-+
-+ return size;
-+}
-+
-+#else
-+static int txrx(const char* txbuffer, char* rxbuffer, int size)
-+{
-+ int i=0,j=0;
-+ int wait;
-+ u16 r;
-+/* char * txback = kmalloc(size * sizeof(char), GFP_KERNEL);
-+ memcpy(txback, txbuffer, size);
-+*/
-+ if(spidev->clock_div == 4)
-+ wait = 0x10000;
-+ else
-+ wait = 8;
-+
-+// printk(KERN_DEBUG "locomospi: txrx %d bytes to prozess\n",size);
-+
-+// r = ioread16(spidev->base+LOCOMO_SPICT);
-+// r |= LOCOMO_SPI_ALIGNEN;
-+// iowrite16(r, spidev->base+LOCOMO_SPICT);
-+ //discard first bogus byte
-+
-+ ioread8(spidev->base+LOCOMO_SPIRD);
-+ for(i=0; i<size; i++){
-+ for(j=0; j <= wait; j++){
-+ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFW)
-+ break;
-+ }
-+ iowrite8(txbuffer[i], spidev->base+LOCOMO_SPITD);
-+ ndelay(delay);
-+
-+ for(j=0; j <= wait; j++){
-+ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFR)
-+ break;
-+ }
-+ rxbuffer[i] = ioread8(spidev->base+LOCOMO_SPIRD);
-+ ndelay(delay);
-+ }
-+// r = ioread16(spidev->base+LOCOMO_SPICT);
-+// r &= ~LOCOMO_SPI_ALIGNEN;
-+// iowrite16(r, spidev->base+LOCOMO_SPICT);
-+
-+/* for(j=0; j< size; j++)
-+ printk(KERN_DEBUG "locomospi: sent: %x received: %x \n",txback[j], rxbuffer[j]);
-+
-+ kfree(txback);
-+*/ return i;
-+}
-+
-+static int tx(const char* buffer, int size)
-+{
-+ int i=0,j=0;
-+ int wait;
-+ u16 r;
-+ if(spidev->clock_div == 4)
-+ wait = 0x10000;
-+ else
-+ wait = 8;
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r &= ~LOCOMO_SPI_ALIGNEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+
-+// printk(KERN_DEBUG "locomospi: tx %d bytes to transmit\n",size);
-+ for(i=0; i<size; i++){
-+ for(j=0; j <= wait; j++){
-+ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFW)
-+ break;
-+ }
-+ iowrite8(buffer[i], spidev->base+LOCOMO_SPITD);
-+ ndelay(delay);
-+ }
-+
-+ for(j=0; j <= wait; j++){
-+ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_TEND)
-+ break;
-+ }
-+
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r |= LOCOMO_SPI_ALIGNEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+
-+// for(j=0; j< size; j++)
-+// printk(KERN_DEBUG "locomospi: sent: %x \n", buffer[j]);
-+// printk(KERN_DEBUG "locomospi: tx %d bytes transmitted\n",i);
-+ return i;
-+}
-+
-+static int rx(char* buffer, int size)
-+{
-+ int i,j;
-+ int wait;
-+ u16 r;
-+ printk(KERN_DEBUG "locomospi: rx %d bytes to receive\n",size);
-+ if(spidev->clock_div == 4)
-+ wait = 0x10000;
-+ else
-+ wait = 8;
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r &= ~LOCOMO_SPI_ALIGNEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+
-+ for(i=0; i<size; i++){
-+
-+ for(j=0; j <= wait; j++){
-+ if(ioread16(spidev->base+LOCOMO_SPIST) & LOCOMO_SPI_RFR)
-+ break;
-+ }
-+ buffer[i]= ioread8(spidev->base+LOCOMO_SPIRD);
-+ ndelay(delay);
-+ }
-+
-+ r = ioread16(spidev->base+LOCOMO_SPICT);
-+ r |= LOCOMO_SPI_ALIGNEN;
-+ iowrite16(r, spidev->base+LOCOMO_SPICT);
-+
-+ for(j=0; j< size; j++)
-+ printk(KERN_DEBUG "locomospi: received: %x \n", buffer[j]);
-+ printk(KERN_DEBUG "locomospi: rx %d bytes received\n",i);
-+ return i;
-+}
-+#endif
-+/*
-+static irqreturn_t locomospi_rwready(int irq, void *dev_id)
-+{
-+ struct locomospi_dev* dev=(struct locomospi_dev*) dev_id;
-+// dev_dbg(&spidev->sdev->dev, "IRQ: %d\n", irq);
-+// printk(KERN_DEBUG "locomospi: IRQ: %d\n", irq);
-+ wake_up_interruptible(&dev->waitqueue);
-+ return IRQ_HANDLED;
-+}
-+*/
-+static irqreturn_t locomospi_testisr(int irq, void *dev_id)
-+{
-+ char *buf="";
-+ switch(irq){
-+ case IRQ_LOCOMO_SPI_RFR: buf="RFR";
-+ break;
-+ case IRQ_LOCOMO_SPI_RFW: buf="RFW";
-+ break;
-+ case IRQ_LOCOMO_SPI_REND:buf="REND";
-+ break;
-+ case IRQ_LOCOMO_SPI_TEND:buf="TEND";
-+ break;
-+ case IRQ_LOCOMO_CARDDETECT:
-+ buf="CARD_DETECT";
-+ break;
-+ default: return IRQ_NONE;
-+ }
-+ printk(KERN_DEBUG "locomospi: IRQ: %s\n",buf);
-+// dev_dbg(&spidev->sdev->dev, "IRQ: %s\n",buf);
-+ return IRQ_HANDLED;
-+}
-+static irqreturn_t locomospi_txrxisr(int irq, void *dev_id)
-+{
-+ if(transfercount < transfersize){
-+ transrxbuf[transfercount++] = ioread8(spidev->base+LOCOMO_SPIRD);
-+ iowrite8(transtxbuf[transfercount], spidev->base+LOCOMO_SPITD);
-+ }
-+ else{
-+ /* transfer complete. wake up txrx */
-+ wake_up(&transferqueue);
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t locomospi_txisr(int irq, void *dev_id)
-+{
-+ if(transfercount < transfersize){
-+ iowrite8(transtxbuf[transfercount++], spidev->base+LOCOMO_SPITD);
-+ }
-+ else{
-+ /* transfer complete. wake up txrx */
-+ wake_up(&transferqueue);
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t locomospi_rxisr(int irq, void *dev_id)
-+{
-+ if(transfercount < transfersize){
-+ transrxbuf[transfercount++] = ioread8(spidev->base+LOCOMO_SPIRD);
-+ }
-+ else{
-+ /* transfer complete. wake up txrx */
-+ wake_up(&transferqueue);
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static void locomospi_clock(unsigned int Hz)
-+{
-+ u16 r;
-+ printk(KERN_DEBUG "locomospi: changing clock to: %d\n", Hz);
-+ if(Hz == 0){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r &= ~LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ }
-+ else if(Hz >= 24576000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_1, CLOCK_25MHZ);
-+ delay=41;
-+ }
-+ else if(Hz >= 22579200){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_1, CLOCK_22MHZ);
-+ delay=45;
-+ }
-+ else if(Hz >= 18432000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_1, CLOCK_18MHZ);
-+ delay=55;
-+ }
-+ else if(Hz >= 12288000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_2, CLOCK_25MHZ);
-+ delay=82;
-+ }
-+ else if(Hz >= 11289600){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_2, CLOCK_22MHZ);
-+ delay=89;
-+ }
-+ else if(Hz >= 9216000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_2, CLOCK_18MHZ);
-+ delay=110;
-+ }
-+ else if(Hz >= 6144000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_4, CLOCK_25MHZ);
-+ delay=164;
-+ }
-+ else if(Hz >= 5644800){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_4, CLOCK_22MHZ);
-+ delay=178;
-+ }
-+ else if(Hz >= 4608000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_4, CLOCK_18MHZ);
-+ delay=218;
-+ }
-+ else if(Hz >= 3072000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_8, CLOCK_25MHZ);
-+ delay=327;
-+ }
-+ else if(Hz >= 2822400){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_8, CLOCK_22MHZ);
-+ delay=355;
-+ }
-+ else if(Hz >= 2304000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_8, CLOCK_18MHZ);
-+ delay=435;
-+ }
-+ else if(Hz >= 384000){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_64, CLOCK_25MHZ);
-+ delay=2605;
-+ }
-+ else if(Hz >= 352800){
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_64, CLOCK_22MHZ);
-+ delay=2834;
-+ }
-+ else{ /* set to 288 KHz */
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_XON;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ locomospi_setclock(DIV_64, CLOCK_18MHZ);
-+ delay=3473;
-+ }
-+ spidev->clock = Hz;
-+}
-+
-+/* sysfs attributes used for debug *******************************************/
-+
-+/* SPI registers */
-+ssize_t locomospi_showspimd(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIMD));
-+}
-+
-+ssize_t locomospi_storespimd(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIMD);
-+ return count;
-+}
-+static DRIVER_ATTR(spimd, S_IWUSR | S_IRUGO, locomospi_showspimd, locomospi_storespimd);
-+
-+ssize_t locomospi_showspict(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPICT));
-+}
-+
-+ssize_t locomospi_storespict(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPICT);
-+ return count;
-+}
-+static DRIVER_ATTR(spict, S_IWUSR | S_IRUGO, locomospi_showspict, locomospi_storespict);
-+
-+ssize_t locomospi_showspist(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIST));
-+}
-+
-+ssize_t locomospi_storespist(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIST);
-+ return count;
-+}
-+static DRIVER_ATTR(spist, S_IWUSR | S_IRUGO, locomospi_showspist, locomospi_storespist);
-+
-+ssize_t locomospi_showspitd(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPITD));
-+}
-+
-+ssize_t locomospi_storespitd(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPITD);
-+ return count;
-+}
-+static DRIVER_ATTR(spitd, S_IWUSR | S_IRUGO, locomospi_showspitd, locomospi_storespitd);
-+
-+ssize_t locomospi_showspird(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIRD));
-+}
-+
-+ssize_t locomospi_storespird(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIRD);
-+ return count;
-+}
-+static DRIVER_ATTR(spird, S_IWUSR | S_IRUGO, locomospi_showspird, locomospi_storespird);
-+
-+ssize_t locomospi_showspits(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPITS));
-+}
-+
-+ssize_t locomospi_storespits(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPITS);
-+ return count;
-+}
-+static DRIVER_ATTR(spits, S_IWUSR | S_IRUGO, locomospi_showspits, locomospi_storespits);
-+
-+ssize_t locomospi_showspirs(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "0x%x\n", ioread16(spidev->base+LOCOMO_SPIRS));
-+}
-+
-+ssize_t locomospi_storespirs(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ iowrite16(simple_strtoul(buf, NULL, 16), spidev->base+LOCOMO_SPIRS);
-+ return count;
-+}
-+static DRIVER_ATTR(spirs, S_IWUSR | S_IRUGO, locomospi_showspirs, locomospi_storespirs);
-+
-+/* MMC Card status */
-+
-+ssize_t locomospi_showpower(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "%d\n", spidev->card_power);
-+}
-+
-+ssize_t locomospi_storepower(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ locomospi_power(simple_strtoul(buf, NULL, 10));
-+ return count;
-+}
-+static DRIVER_ATTR(cardpower, S_IWUSR | S_IRUGO, locomospi_showpower, locomospi_storepower);
-+
-+ssize_t locomospi_detectcard(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "%d\n",(locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_CARD_DETECT)>0)?0:1);
-+}
-+static DRIVER_ATTR(carddetect, S_IRUGO, locomospi_detectcard, NULL);
-+
-+ssize_t locomospi_writeprotect(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "%d\n",(locomo_gpio_read_level(spidev->ldev->dev.parent,LOCOMO_GPIO_WRITE_PROT)>0)?1:0);
-+}
-+static DRIVER_ATTR(cardwriteprotect, S_IRUGO, locomospi_writeprotect, NULL);
-+
-+
-+ssize_t locomospi_showclock(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "%d\n", spidev->clock);
-+}
-+
-+ssize_t locomospi_storeclock(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ locomospi_clock(simple_strtoul(buf, NULL, 10));
-+ return count;
-+}
-+static DRIVER_ATTR(clock, S_IWUSR | S_IRUGO, locomospi_showclock, locomospi_storeclock);
-+
-+/* debug */
-+ssize_t locomospi_showdelay(struct device_driver *drv, char *buf)
-+{
-+ return sprintf(buf, "%d\n", delay);
-+}
-+
-+ssize_t locomospi_storedelay(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ delay=simple_strtoul(buf,NULL,10);
-+ return count;
-+}
-+static DRIVER_ATTR(delay, S_IWUSR | S_IRUGO, locomospi_showdelay, locomospi_storedelay);
-+
-+ssize_t locomospi_reset(struct device_driver *drv, const char *buf, size_t count)
-+{
-+ int choice = simple_strtoul(buf, NULL, 10);
-+ char buff[100];
-+ u16 r;
-+ switch(choice){
-+ case 0: locomospi_reg_release();
-+ schedule_timeout(2*HZ);
-+ locomospi_reg_open();
-+ break;
-+ case 1: {
-+ char b1[] = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
-+ char b2[] = "\xff\x40\x00\x00\x00\x00\x95\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
-+ locomospi_setcs(1);
-+ txrx(b1,b1,17);
-+ locomospi_setcs(0);
-+ txrx(b2,b2,18);
-+
-+ }
-+ break;
-+ case 2: locomospi_setcs(1);
-+ txrx("\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",buff,18);
-+ locomospi_setcs(0);
-+ txrx("\xff\x40\x00\x00\x00\x00\x95\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",buff,17);
-+ break;
-+ case 3:
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r |= LOCOMO_SPI_LOOPBACK;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ txrx("X",buff,1);
-+ txrx("abcdefghijklmnopqrstuvwxyz1234567890",buff,36);
-+ txrx("Y",buff,1);
-+ udelay(100);
-+ txrx("Z",buff,1);
-+ schedule_timeout(HZ);
-+ txrx("abcdefghijklmnopqrstuvwxyz1234567890",buff,36);
-+
-+ r = ioread16(spidev->base+LOCOMO_SPIMD);
-+ r &= ~LOCOMO_SPI_LOOPBACK;
-+ iowrite16(r, spidev->base+LOCOMO_SPIMD);
-+ break;
-+ default: /* do nothing */;
-+ }
-+ return count;
-+}
-+static DRIVER_ATTR(reset, S_IWUSR, NULL, locomospi_reset);
-+
-+typedef struct locomo_reg_entry {
-+ u32 addr;
-+ char* name;
-+} locomo_reg_entry_t;
-+#define LCM (sizeof(locomo_regs)/sizeof(locomo_reg_entry_t))
-+static locomo_reg_entry_t locomo_regs[] =
-+{
-+/* { addr, name, description } */
-+ { 0x00, "VER" },
-+ { 0x04, "ST" },
-+ { 0x08, "C32K" },
-+ { 0x0C, "ICR" },
-+ { 0x10, "MCSX0" },
-+ { 0x14, "MCSX1" },
-+ { 0x18, "MCSX2" },
-+ { 0x1C, "MCSX3" },
-+ { 0x20, "ASD" },
-+ { 0x28, "HSD" },
-+ { 0x2C, "HSC" },
-+ { 0x30, "TADC" },
-+ { 0x38, "TC" },
-+ { 0x3C, "CPSD" },
-+ { 0x40, "KIB" },
-+ { 0x44, "KSC" },
-+ { 0x48, "KCMD" },
-+ { 0x4C, "KIC" },
-+ { 0x54, "ACC" },
-+ { 0x60, "SPIMD" },
-+ { 0x64, "SPICT" },
-+ { 0x68, "SPIST" },
-+ { 0x70, "SPIIS" },
-+ { 0x74, "SPIWE" },
-+ { 0x78, "SPIIE" },
-+ { 0x7C, "SPIIR" },
-+ { 0x80, "SPITD" },
-+ { 0x84, "SPIRD" },
-+ { 0x88, "SPITS" },
-+ { 0x8C, "SPIRS" },
-+ { 0x90, "GPD" },
-+ { 0x94, "GPE" },
-+ { 0x98, "GPL" },
-+ { 0x9C, "GPO" },
-+ { 0xa0, "GRIE" },
-+ { 0xa4, "GFIE" },
-+ { 0xa8, "GIS" },
-+ { 0xac, "GWE" },
-+ { 0xb0, "GIE" },
-+ { 0xb4, "GIR" },
-+ { 0xc8, "ALC" },
-+ { 0xcc, "ALR" },
-+ { 0xd0, "PAIF" },
-+ { 0xd8, "LTC" },
-+ { 0xdc, "LTINT" },
-+ { 0xe0, "DAC" },
-+ { 0xe8, "LPT0" },
-+ { 0xec, "LPT1" },
-+ { 0xfc, "TCR" },
-+};
-+
-+static ssize_t lcm_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ int base = spidev->base - LOCOMO_SPI;
-+ char b[4000]="";
-+ char c[30];
-+ int i;
-+ for(i=0; i<LCM; i++){
-+ sprintf(c,"%s:\t\t 0x%x\n",locomo_regs[i].name, ioread16(base + locomo_regs[i].addr));
-+ strcat(b,c);
-+ }
-+ return sprintf(buf,"%s",b);
-+}
-+
-+static DRIVER_ATTR(regs, 0444, lcm_show, NULL);
-+
-+
-+/* SPI functions *************************************************************/
-+
-+static void locomospi_do_transfer(struct work_struct *wrk)
-+{
-+ struct list_head *mptr, *tptr, *mptr2;
-+ struct spi_transfer *entry;
-+ struct spi_message *msg;
-+
-+ list_for_each_safe(mptr, mptr2, &spidev->message_list){
-+ msg = list_entry(mptr, struct spi_message, queue);
-+
-+ msg->status = 0;
-+ msg->actual_length = 0;
-+ list_for_each(tptr, &msg->transfers){
-+ entry = list_entry(tptr, struct spi_transfer, transfer_list);
-+ if(entry->tx_buf && entry->rx_buf){ //duplex
-+ txrx((char*) entry->tx_buf, (char*) entry->rx_buf, entry->len);
-+ msg->actual_length += entry->len;
-+ } else if(entry->tx_buf && !entry->rx_buf){ //write
-+ tx((char*) entry->tx_buf, entry->len);
-+ msg->actual_length += entry->len;
-+ } else if(!entry->tx_buf && entry->rx_buf){ //read
-+ rx((char*) entry->rx_buf, entry->len);
-+ msg->actual_length += entry->len;
-+ } else if(!entry->tx_buf && !entry->rx_buf){ //error
-+ dev_err(&spidev->sdev->dev, "do_transfer: no buffers allocated\n");
-+ msg->status = -EFAULT;
-+ }
-+ }
-+ spin_lock(&spidev->message_lock);
-+ list_del(mptr);
-+ spin_unlock(&spidev->message_lock);
-+ msg->complete(msg->context);
-+ }
-+}
-+
-+static int locomospi_setup(struct spi_device *spi)
-+{
-+ if((spi->mode & SPI_CS_HIGH) != (spidev->spimode & SPI_CS_HIGH))
-+ locomospi_setcs(spi->mode & SPI_CS_HIGH ? 1 : 0 );
-+ if(spidev->clock != spi->max_speed_hz){
-+ locomospi_clock(spi->max_speed_hz);
-+ }
-+ spidev->spimode = spi->mode;
-+
-+ return 0;
-+}
-+
-+static int locomospi_transfer(struct spi_device *spi, struct spi_message *msg)
-+{
-+
-+ spin_lock(&spidev->message_lock);
-+ list_add_tail(&msg->queue, &spidev->message_list);
-+ spin_unlock(&spidev->message_lock);
-+ schedule_work(&transfer_wq);
-+ return 0;
-+}
-+
-+static struct locomo_driver locomo_spi_driver = {
-+ .drv = {
-+ .name = "locomo-spi",
-+ },
-+ .devid = LOCOMO_DEVID_SPI,
-+ .probe = locomospi_probe,
-+ .remove = locomospi_remove,
-+#ifdef CONFIG_PM
-+ .suspend = locomospi_suspend,
-+ .resume = locomospi_resume,
-+#endif
-+};
-+
-+static struct spi_board_info board = {
-+ .modalias = "mmc_spi",
-+ .platform_data = (void*) &colliemmc,
-+ .controller_data= NULL,
-+ .irq = 0,
-+ .max_speed_hz = 25000000,
-+ .bus_num = 0,
-+ .chip_select = 0,
-+ .mode = 0,
-+};
-+
-+#ifdef CONFIG_PM
-+static int locomospi_suspend(struct locomo_dev *dev, pm_message_t state)
-+{
-+ disable_irq(IRQ_LOCOMO_CARDDETECT);
-+ return 0;
-+}
-+
-+static int locomospi_resume(struct locomo_dev *dev)
-+{
-+ enable_irq(IRQ_LOCOMO_CARDDETECT);
-+ return 0;
-+}
-+#endif
-+
-+static int locomospi_probe(struct locomo_dev *dev)
-+{
-+ int result=0;
-+ printk(KERN_DEBUG "Collie MMC over SPI Driver\n");
-+ spidev=kmalloc(sizeof(struct locomospi_dev),GFP_KERNEL);
-+ if(!spidev){
-+ return -ENOMEM;
-+ }
-+ spidev->ldev = dev;
-+ spidev->card_power = 1;
-+ spidev->spimode = 0;
-+
-+ if(!request_mem_region((unsigned long) dev->mapbase, dev->length, LOCOMO_DRIVER_NAME(dev))) {
-+ dev_err(&dev->dev, " Can't aquire access to io memory\n");
-+ return -EBUSY;
-+ }
-+ spidev->base=(unsigned long) dev->mapbase;
-+ locomospi_reg_open();
-+
-+ locomo_gpio_set_dir(dev->dev.parent, LOCOMO_GPIO_CARD_POWER, 0);
-+ locomo_gpio_set_dir(dev->dev.parent, LOCOMO_GPIO_CARD_DETECT, 1);
-+ locomo_gpio_set_dir(dev->dev.parent, LOCOMO_GPIO_WRITE_PROT, 1);
-+
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_cardpower);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_carddetect);
-+ if(result){
-+ dev_err(&dev->dev,"error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_cardwriteprotect);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spimd);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spict);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spist);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spitd);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spird);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spits);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_spirs);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_clock);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_delay);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_reset);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ result=driver_create_file(&locomo_spi_driver.drv, &driver_attr_regs);
-+ if(result){
-+ dev_err(&dev->dev, "error creating driver attribute\n");
-+ goto region;
-+ }
-+ INIT_WORK(&transfer_wq, locomospi_do_transfer);
-+ INIT_LIST_HEAD(&spidev->message_list);
-+ spin_lock_init(&spidev->message_lock);
-+ init_waitqueue_head(&spidev->waitqueue);
-+ spidev->master=spi_alloc_master(&dev->dev,0);
-+ if(!spidev->master){
-+ result=-ENOMEM;
-+ goto region;
-+ }
-+ spidev->master->bus_num = 0;
-+ spidev->master->num_chipselect = 1;
-+ spidev->master->setup = locomospi_setup;
-+ spidev->master->transfer = locomospi_transfer;
-+ spidev->sdev = spi_new_device(spidev->master, &board);
-+ if(!spidev->sdev){
-+ dev_err(&dev->dev, "failed to register spi device\n");
-+ result = -EINVAL;
-+ goto master;
-+ }
-+/* result=request_irq(IRQ_LOCOMO_SPI_RFR, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
-+ if(result) {
-+ dev_err(&dev->dev, "Could not get IRQ: RFR\n");
-+ goto regdev;
-+ }
-+ //disable_irq(IRQ_LOCOMO_SPI_RFR);
-+*//* result=request_irq(IRQ_LOCOMO_SPI_RFW, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
-+ if(result) {
-+ dev_err(&dev->dev, "Could not get IRQ: RFW\n");
-+ goto irq1;
-+ }
-+ //disable_irq(IRQ_LOCOMO_SPI_RFW);
-+*//* result=request_irq(IRQ_LOCOMO_SPI_REND, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
-+ if(result) {
-+ dev_err(&dev->dev, "Could not get IRQ: REND\n");
-+ goto irq2;
-+ }
-+*//* result=request_irq(IRQ_LOCOMO_SPI_TEND, locomospi_testisr, IRQF_SHARED, "locomo-spi", (void*) spidev);
-+ if(result) {
-+ dev_err(&dev->dev, "Could not get IRQ: TEND\n");
-+ goto irq3;
-+ }
-+ //disable_irq(IRQ_LOCOMO_SPI_TEND);
-+*/ spidev->workqueue = create_singlethread_workqueue("locomo-spi");
-+ if(!spidev->workqueue){
-+ dev_err(&dev->dev, "failed to create workqueue\n");
-+ goto irq4;
-+ }
-+ result=spi_register_master(spidev->master);
-+ if(result){
-+ dev_err(&dev->dev, "failed to register spimaster\n");
-+ goto wq;
-+ }
-+ return 0;
-+wq:
-+ destroy_workqueue(spidev->workqueue);
-+irq4:
-+// free_irq(IRQ_LOCOMO_SPI_TEND, (void*) spidev);
-+irq3:
-+// free_irq(IRQ_LOCOMO_SPI_REND, (void*) spidev);
-+irq2:
-+// free_irq(IRQ_LOCOMO_SPI_RFW, (void*) spidev);
-+irq1:
-+// free_irq(IRQ_LOCOMO_SPI_RFR, (void*) spidev);
-+regdev:
-+ spi_unregister_device(spidev->sdev);
-+master:
-+ spi_master_put(spidev->master);
-+region:
-+ release_mem_region((unsigned long) dev->mapbase, dev->length);
-+ kfree(spidev);
-+ return result;
-+
-+}
-+
-+static int locomospi_remove(struct locomo_dev *dev)
-+{
-+ spi_unregister_device(spidev->sdev);
-+ spi_unregister_master(spidev->master);
-+ destroy_workqueue(spidev->workqueue);
-+ locomospi_reg_release();
-+// free_irq(IRQ_LOCOMO_SPI_TEND, (void*) spidev);
-+// free_irq(IRQ_LOCOMO_SPI_REND, (void*) spidev);
-+// free_irq(IRQ_LOCOMO_SPI_RFW, (void*) spidev);
-+// free_irq(IRQ_LOCOMO_SPI_RFR, (void*) spidev);
-+ spi_master_put(spidev->master);
-+ release_mem_region((unsigned long) dev->mapbase, dev->length);
-+ kfree(spidev);
-+ return 0;
-+}
-+
-+
-+
-+static int __init locomospi_init(void)
-+{
-+ int ret = locomo_driver_register(&locomo_spi_driver);
-+ if (ret)
-+ return ret;
-+
-+
-+ return 0;
-+}
-+
-+static void __exit locomospi_exit(void)
-+{
-+ locomo_driver_unregister(&locomo_spi_driver);
-+}
-+
-+module_init(locomospi_init);
-+module_exit(locomospi_exit);
-+
-+MODULE_AUTHOR("Thomas Kunze thommy@tabao.de");
-+MODULE_DESCRIPTION("Collie mmc driver");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/spi/locomo_spi.h b/drivers/spi/locomo_spi.h
-new file mode 100644
-index 0000000..7e1c0ce
---- /dev/null
-+++ b/drivers/spi/locomo_spi.h
-@@ -0,0 +1,75 @@
-+#include <asm/hardware/locomo.h>
-+#ifndef __LOCOMO_SPI_H__
-+#define __LOCOMO_SPI_H__
-+
-+/* locomo-spi status register LOCOMO_SPIST */
-+#define LOCOMO_SPI_TEND (1 << 3) /* Transfer end bit */
-+#define LOCOMO_SPI_REND (1 << 2) /* Receive end bit */
-+#define LOCOMO_SPI_RFW (1 << 1) /* write buffer bit */
-+#define LOCOMO_SPI_RFR (1) /* read buffer bit */
-+
-+/* locomo-spi mode register LOCOMO_SPIMD */
-+#define LOCOMO_SPI_LOOPBACK (1 << 15) /* loopback tx to rx */
-+#define LOCOMO_SPI_MSB1ST (1 << 14) /* send MSB first */
-+#define LOCOMO_SPI_DOSTAT (1 << 13) /* transmit line is idle high */
-+#define LOCOMO_SPI_TCPOL (1 << 11) /* transmit CPOL (maybe affects CPHA too) */
-+#define LOCOMO_SPI_RCPOL (1 << 10) /* receive CPOL (maybe affects CPHA too) */
-+#define LOCOMO_SPI_TDINV (1 << 9) /* invert transmit line */
-+#define LOCOMO_SPI_RDINV (1 << 8) /* invert receive line */
-+#define LOCOMO_SPI_XON (1 << 7) /* enable spi controller clock */
-+#define LOCOMO_SPI_XEN (1 << 6) /* clock bit write enable xon must be off, wait 300 us before xon->1 */
-+#define LOCOMO_SPI_XSEL 0x0018 /* clock select */
-+#define CLOCK_18MHZ 0 /* 18,432 MHz clock */
-+#define CLOCK_22MHZ 1 /* 22,5792 MHz clock */
-+#define CLOCK_25MHZ 2 /* 24,576 MHz clock */
-+#define LOCOMO_SPI_CLKSEL 0x7
-+#define DIV_1 0 /* don't divide clock */
-+#define DIV_2 1 /* divide clock by two */
-+#define DIV_4 2 /* divide clock by four */
-+#define DIV_8 3 /* divide clock by eight*/
-+#define DIV_64 4 /* divide clock by 64 */
-+
-+/* locomo-spi control register LOCOMO_SPICT */
-+#define LOCOMO_SPI_CRC16_7_B (1 << 15) /* 0: crc16 1: crc7 */
-+#define LOCOMO_SPI_CRCRX_TX_B (1 << 14)
-+#define LOCOMO_SPI_CRCRESET_B (1 << 13)
-+#define LOCOMO_SPI_CEN (1 << 7) /* ?? enable */
-+#define LOCOMO_SPI_CS (1 << 6) /* chip select */
-+#define LOCOMO_SPI_UNIT16 (1 << 5) /* 0: 8 bit units, 1: 16 bit unit */
-+#define LOCOMO_SPI_ALIGNEN (1 << 2) /* align transfer enable */
-+#define LOCOMO_SPI_RXWEN (1 << 1) /* continous receive */
-+#define LOCOMO_SPI_RXUEN (1 << 0) /* aligned receive */
-+
-+#define IRQ_LOCOMO_CARDDETECT IRQ_LOCOMO_GPIO13
-+
-+
-+struct locomospi_dev {
-+ struct locomo_dev *ldev;
-+ struct spi_master *master;
-+ struct spi_device *sdev;
-+ int card_power;
-+ int clock_base;
-+ int clock_div;
-+ int clock;
-+ unsigned long base;
-+ u8 spimode;
-+ wait_queue_head_t waitqueue;
-+ struct workqueue_struct *workqueue;
-+ struct list_head message_list;
-+ spinlock_t message_lock;
-+};
-+
-+
-+static irqreturn_t locomospi_cardisr(int, void*);
-+static int locomospi_probe(struct locomo_dev*);
-+static int locomospi_remove(struct locomo_dev*);
-+static int locomospi_carddetect(void);
-+static void locomospi_reg_open(void);
-+static void locomospi_reg_release(void);
-+static int tx(const char*, int);
-+static int rx(char *, int);
-+static void locomospi_power(int on);
-+static int locomospi_suspend(struct locomo_dev *dev, pm_message_t state);
-+static int locomospi_resume(struct locomo_dev *dev);
-+static void locomospi_setcs(int high);
-+#endif
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch b/packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch
deleted file mode 100644
index 4ce284d52c..0000000000
--- a/packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 41eabd493ccc241ccd52b77c576211759976972d Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:33:29 +0200
-Subject: [PATCH 03/23] enable cpufreq for collie
-
----
- arch/arm/Kconfig | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index 9722f8b..609f0fb 100644
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -1048,7 +1048,7 @@ config CPU_FREQ_SA1100
-
- config CPU_FREQ_SA1110
- bool
-- depends on CPU_FREQ && (SA1100_ASSABET || SA1100_CERF || SA1100_PT_SYSTEM3)
-+ depends on CPU_FREQ && (SA1100_ASSABET || SA1100_CERF || SA1100_PT_SYSTEM3 || SA1100_COLLIE)
- default y
-
- config CPU_FREQ_INTEGRATOR
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch b/packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch
deleted file mode 100644
index 6dbb856189..0000000000
--- a/packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 4f4df9e1c0c82cfd9133f52089025a8ff363977c Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:39:02 +0200
-Subject: [PATCH 04/23] fix dma for SA1100
-
----
- arch/arm/mach-sa1100/dma.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-sa1100/dma.c b/arch/arm/mach-sa1100/dma.c
-index f990a3e..1489d64 100644
---- a/arch/arm/mach-sa1100/dma.c
-+++ b/arch/arm/mach-sa1100/dma.c
-@@ -39,7 +39,7 @@ typedef struct {
-
- static sa1100_dma_t dma_chan[SA1100_DMA_CHANNELS];
-
--static spinlock_t dma_list_lock;
-+static DEFINE_SPINLOCK(dma_list_lock);
-
-
- static irqreturn_t dma_irq_handler(int irq, void *dev_id)
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch b/packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch
deleted file mode 100644
index 1200038de4..0000000000
--- a/packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 71f6a1b91e92c89f3fcf0330c55ad41fd3315c33 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:40:32 +0200
-Subject: [PATCH 05/23] fix collie keyboard bug
-
----
- drivers/input/keyboard/locomokbd.c | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/input/keyboard/locomokbd.c b/drivers/input/keyboard/locomokbd.c
-index 9caed30..79e19bf 100644
---- a/drivers/input/keyboard/locomokbd.c
-+++ b/drivers/input/keyboard/locomokbd.c
-@@ -265,6 +265,7 @@ static int __devinit locomokbd_probe(struct locomo_dev *dev)
- for (i = 0; i < LOCOMOKBD_NUMKEYS; i++)
- set_bit(locomokbd->keycode[i], input_dev->keybit);
- clear_bit(0, input_dev->keybit);
-+ locomo_writel(0, locomokbd->base + LOCOMO_KSC);
-
- /* attempt to get the interrupt */
- err = request_irq(dev->irq[0], locomokbd_interrupt, 0, "locomokbd", locomokbd);
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch b/packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch
deleted file mode 100644
index 0b987b6851..0000000000
--- a/packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch
+++ /dev/null
@@ -1,722 +0,0 @@
-From 6b663bce31fb1e1a78dbca22190e98251628fd4f Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:48:10 +0200
-Subject: [PATCH 06/23] add collie flash hack
-
----
- arch/arm/mach-sa1100/collie.c | 2 +-
- drivers/mtd/chips/Kconfig | 8 +
- drivers/mtd/chips/Makefile | 1 +
- drivers/mtd/chips/sharp.c | 645 +++++++++++++++++++++++++++++++++++++++++
- drivers/mtd/maps/Kconfig | 2 +-
- 5 files changed, 656 insertions(+), 2 deletions(-)
- create mode 100644 drivers/mtd/chips/sharp.c
-
-diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
-index 8cf267f..ec673b8 100644
---- a/arch/arm/mach-sa1100/collie.c
-+++ b/arch/arm/mach-sa1100/collie.c
-@@ -222,7 +222,7 @@ static void collie_flash_exit(void)
- gpio_free(COLLIE_GPIO_VPEN);
- }
- static struct flash_platform_data collie_flash_data = {
-- .map_name = "cfi_probe",
-+ .map_name = "sharp",
- .init = collie_flash_init,
- .set_vpp = collie_set_vpp,
- .exit = collie_flash_exit,
-diff --git a/drivers/mtd/chips/Kconfig b/drivers/mtd/chips/Kconfig
-index 9408099..2dcbd03 100644
---- a/drivers/mtd/chips/Kconfig
-+++ b/drivers/mtd/chips/Kconfig
-@@ -241,5 +241,13 @@ config MTD_XIP
- used for XIP purposes. If you're not sure what this is all about
- then say N.
-
-+config MTD_SHARP
-+ tristate "pre-CFI Sharp chip support"
-+ depends on MTD
-+ help
-+ This option enables support for flash chips using Sharp-compatible
-+ commands, including some which are not CFI-compatible and hence
-+ cannot be used with the CONFIG_MTD_CFI_INTELxxx options.
-+
- endmenu
-
-diff --git a/drivers/mtd/chips/Makefile b/drivers/mtd/chips/Makefile
-index 3658241..7283c57 100644
---- a/drivers/mtd/chips/Makefile
-+++ b/drivers/mtd/chips/Makefile
-@@ -12,4 +12,5 @@ obj-$(CONFIG_MTD_GEN_PROBE) += gen_probe.o
- obj-$(CONFIG_MTD_JEDECPROBE) += jedec_probe.o
- obj-$(CONFIG_MTD_RAM) += map_ram.o
- obj-$(CONFIG_MTD_ROM) += map_rom.o
-+obj-$(CONFIG_MTD_SHARP) += sharp.o
- obj-$(CONFIG_MTD_ABSENT) += map_absent.o
-diff --git a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c
-new file mode 100644
-index 0000000..046b964
---- /dev/null
-+++ b/drivers/mtd/chips/sharp.c
-@@ -0,0 +1,645 @@
-+/*
-+ * MTD chip driver for pre-CFI Sharp flash chips
-+ *
-+ * Copyright 2000,2001 David A. Schleef <ds@schleef.org>
-+ * 2000,2001 Lineo, Inc.
-+ *
-+ * $Id: sharp.c,v 1.17 2005/11/29 14:28:28 gleixner Exp $
-+ *
-+ * Devices supported:
-+ * LH28F016SCT Symmetrical block flash memory, 2Mx8
-+ * LH28F008SCT Symmetrical block flash memory, 1Mx8
-+ *
-+ * Documentation:
-+ * http://www.sharpmeg.com/datasheets/memic/flashcmp/
-+ * http://www.sharpmeg.com/datasheets/memic/flashcmp/01symf/16m/016sctl9.pdf
-+ * 016sctl9.pdf
-+ *
-+ * Limitations:
-+ * This driver only supports 4x1 arrangement of chips.
-+ * Not tested on anything but PowerPC.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/sched.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/mtd/map.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/cfi.h>
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+
-+#define CMD_RESET 0xffffffff
-+#define CMD_READ_ID 0x90909090
-+#define CMD_READ_STATUS 0x70707070
-+#define CMD_CLEAR_STATUS 0x50505050
-+#define CMD_BLOCK_ERASE_1 0x20202020
-+#define CMD_BLOCK_ERASE_2 0xd0d0d0d0
-+#define CMD_BYTE_WRITE 0x40404040
-+#define CMD_SUSPEND 0xb0b0b0b0
-+#define CMD_RESUME 0xd0d0d0d0
-+#define CMD_SET_BLOCK_LOCK_1 0x60606060
-+#define CMD_SET_BLOCK_LOCK_2 0x01010101
-+#define CMD_SET_MASTER_LOCK_1 0x60606060
-+#define CMD_SET_MASTER_LOCK_2 0xf1f1f1f1
-+#define CMD_CLEAR_BLOCK_LOCKS_1 0x60606060
-+#define CMD_CLEAR_BLOCK_LOCKS_2 0xd0d0d0d0
-+
-+#define SR_READY 0x80808080 // 1 = ready
-+#define SR_ERASE_SUSPEND 0x40404040 // 1 = block erase suspended
-+#define SR_ERROR_ERASE 0x20202020 // 1 = error in block erase or clear lock bits
-+#define SR_ERROR_WRITE 0x10101010 // 1 = error in byte write or set lock bit
-+#define SR_VPP 0x08080808 // 1 = Vpp is low
-+#define SR_WRITE_SUSPEND 0x04040404 // 1 = byte write suspended
-+#define SR_PROTECT 0x02020202 // 1 = lock bit set
-+#define SR_RESERVED 0x01010101
-+
-+#define SR_ERRORS (SR_ERROR_ERASE|SR_ERROR_WRITE|SR_VPP|SR_PROTECT)
-+
-+#define BLOCK_MASK 0xfffe0000
-+
-+/* Configuration options */
-+
-+#define AUTOUNLOCK /* automatically unlocks blocks before erasing */
-+
-+static struct mtd_info *sharp_probe(struct map_info *);
-+
-+static int sharp_probe_map(struct map_info *map, struct mtd_info *mtd);
-+
-+static int sharp_read(struct mtd_info *mtd, loff_t from, size_t len,
-+ size_t *retlen, u_char *buf);
-+static int sharp_write(struct mtd_info *mtd, loff_t from, size_t len,
-+ size_t *retlen, const u_char *buf);
-+static int sharp_erase(struct mtd_info *mtd, struct erase_info *instr);
-+static void sharp_sync(struct mtd_info *mtd);
-+static int sharp_suspend(struct mtd_info *mtd);
-+static void sharp_resume(struct mtd_info *mtd);
-+static void sharp_destroy(struct mtd_info *mtd);
-+
-+static int sharp_write_oneword(struct map_info *map, struct flchip *chip,
-+ unsigned long adr, __u32 datum);
-+static int sharp_erase_oneblock(struct map_info *map, struct flchip *chip,
-+ unsigned long adr);
-+#ifdef AUTOUNLOCK
-+static inline void sharp_unlock_oneblock(struct map_info *map, struct flchip *chip,
-+ unsigned long adr);
-+#endif
-+
-+
-+struct sharp_info{
-+ struct flchip *chip;
-+ int bogus;
-+ int chipshift;
-+ int numchips;
-+ struct flchip chips[1];
-+};
-+
-+static void sharp_destroy(struct mtd_info *mtd);
-+
-+static struct mtd_chip_driver sharp_chipdrv = {
-+ .probe = sharp_probe,
-+ .destroy = sharp_destroy,
-+ .name = "sharp",
-+ .module = THIS_MODULE
-+};
-+
-+static void sharp_udelay(unsigned long i) {
-+ if (in_interrupt()) {
-+ udelay(i);
-+ } else {
-+ schedule();
-+ }
-+}
-+
-+static struct mtd_info *sharp_probe(struct map_info *map)
-+{
-+ struct mtd_info *mtd = NULL;
-+ struct sharp_info *sharp = NULL;
-+ int width;
-+
-+ mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
-+ if(!mtd)
-+ return NULL;
-+
-+ sharp = kzalloc(sizeof(*sharp), GFP_KERNEL);
-+ if(!sharp) {
-+ kfree(mtd);
-+ return NULL;
-+ }
-+
-+ width = sharp_probe_map(map,mtd);
-+ if(!width){
-+ kfree(mtd);
-+ kfree(sharp);
-+ return NULL;
-+ }
-+
-+ mtd->priv = map;
-+ mtd->type = MTD_NORFLASH;
-+ mtd->erase = sharp_erase;
-+ mtd->read = sharp_read;
-+ mtd->write = sharp_write;
-+ mtd->sync = sharp_sync;
-+ mtd->suspend = sharp_suspend;
-+ mtd->resume = sharp_resume;
-+ mtd->flags = MTD_CAP_NORFLASH;
-+ mtd->writesize = 1;
-+ mtd->name = map->name;
-+
-+ sharp->chipshift = 24;
-+ sharp->numchips = 1;
-+ sharp->chips[0].start = 0;
-+ sharp->chips[0].state = FL_READY;
-+ sharp->chips[0].mutex = &sharp->chips[0]._spinlock;
-+ sharp->chips[0].word_write_time = 0;
-+ init_waitqueue_head(&sharp->chips[0].wq);
-+ spin_lock_init(&sharp->chips[0]._spinlock);
-+
-+ map->fldrv = &sharp_chipdrv;
-+ map->fldrv_priv = sharp;
-+
-+ __module_get(THIS_MODULE);
-+ return mtd;
-+}
-+
-+static inline void sharp_send_cmd(struct map_info *map, unsigned long cmd, unsigned long adr)
-+{
-+ map_word map_cmd;
-+ map_cmd.x[0] = cmd;
-+ map_write(map, map_cmd, adr);
-+}
-+
-+static int sharp_probe_map(struct map_info *map,struct mtd_info *mtd)
-+{
-+ map_word tmp, read0, read4;
-+ unsigned long base = 0;
-+ int width = 4;
-+
-+ tmp = map_read(map, base+0);
-+
-+ sharp_send_cmd(map, CMD_READ_ID, base+0);
-+
-+ read0 = map_read(map, base+0);
-+ read4 = map_read(map, base+4);
-+ if (read0.x[0] == 0x00b000b0) {
-+ printk("Sharp chip, %lx, %lx, width = %d\n", read0.x[0], read4.x[0], width);
-+ /* Prints b000b0, b000b0, width = 4 on collie */
-+ switch(read4.x[0]){
-+ case 0xaaaaaaaa:
-+ case 0xa0a0a0a0:
-+ /* aa - LH28F016SCT-L95 2Mx8, 32 64k blocks*/
-+ /* a0 - LH28F016SCT-Z4 2Mx8, 32 64k blocks*/
-+ mtd->erasesize = 0x10000 * width;
-+ mtd->size = 0x200000 * width;
-+ return width;
-+ case 0xa6a6a6a6:
-+ /* a6 - LH28F008SCT-L12 1Mx8, 16 64k blocks*/
-+ /* a6 - LH28F008SCR-L85 1Mx8, 16 64k blocks*/
-+ mtd->erasesize = 0x10000 * width;
-+ mtd->size = 0x100000 * width;
-+ return width;
-+ case 0x00b000b0:
-+ /* a6 - LH28F640BFHE 8 64k * 2 chip blocks*/
-+ mtd->erasesize = 0x10000 * width / 2;
-+ mtd->size = 0x800000 * width / 2;
-+ return width;
-+ default:
-+ printk("Sort-of looks like sharp flash, 0x%08lx 0x%08lx\n",
-+ read0.x[0], read4.x[0]);
-+ }
-+ } else if ((map_read(map, base+0).x[0] == CMD_READ_ID)){
-+ /* RAM, probably */
-+ printk("Looks like RAM\n");
-+ map_write(map, tmp, base+0);
-+ }else{
-+ printk("Doesn't look like sharp flash, 0x%08lx 0x%08lx\n",
-+ read0.x[0], read4.x[0]);
-+ }
-+
-+ return 0;
-+}
-+
-+/* This function returns with the chip->mutex lock held. */
-+static int sharp_wait(struct map_info *map, struct flchip *chip)
-+{
-+ map_word status;
-+ unsigned long timeo = jiffies + HZ;
-+ DECLARE_WAITQUEUE(wait, current);
-+ int adr = 0;
-+
-+retry:
-+ spin_lock_bh(chip->mutex);
-+
-+ switch (chip->state) {
-+ case FL_READY:
-+ sharp_send_cmd(map, CMD_READ_STATUS, adr);
-+ chip->state = FL_STATUS;
-+ case FL_STATUS:
-+ status = map_read(map, adr);
-+ if ((status.x[0] & SR_READY) == SR_READY)
-+ break;
-+ spin_unlock_bh(chip->mutex);
-+ if (time_after(jiffies, timeo)) {
-+ printk("Waiting for chip to be ready timed out in erase\n");
-+ return -EIO;
-+ }
-+ sharp_udelay(1);
-+ goto retry;
-+ default:
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ add_wait_queue(&chip->wq, &wait);
-+
-+ spin_unlock_bh(chip->mutex);
-+
-+ sharp_udelay(1);
-+
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&chip->wq, &wait);
-+
-+ if(signal_pending(current))
-+ return -EINTR;
-+
-+ timeo = jiffies + HZ;
-+
-+ goto retry;
-+ }
-+
-+ sharp_send_cmd(map, CMD_RESET, adr);
-+
-+ chip->state = FL_READY;
-+
-+ return 0;
-+}
-+
-+static void sharp_release(struct flchip *chip)
-+{
-+ wake_up(&chip->wq);
-+ spin_unlock_bh(chip->mutex);
-+}
-+
-+static int sharp_read(struct mtd_info *mtd, loff_t from, size_t len,
-+ size_t *retlen, u_char *buf)
-+{
-+ struct map_info *map = mtd->priv;
-+ struct sharp_info *sharp = map->fldrv_priv;
-+ int chipnum;
-+ int ret = 0;
-+ int ofs = 0;
-+
-+ chipnum = (from >> sharp->chipshift);
-+ ofs = from & ((1 << sharp->chipshift)-1);
-+
-+ *retlen = 0;
-+
-+ while(len){
-+ unsigned long thislen;
-+
-+ if(chipnum>=sharp->numchips)
-+ break;
-+
-+ thislen = len;
-+ if(ofs+thislen >= (1<<sharp->chipshift))
-+ thislen = (1<<sharp->chipshift) - ofs;
-+
-+ ret = sharp_wait(map,&sharp->chips[chipnum]);
-+ if(ret<0)
-+ break;
-+
-+ map_copy_from(map,buf,ofs,thislen);
-+
-+ sharp_release(&sharp->chips[chipnum]);
-+
-+ *retlen += thislen;
-+ len -= thislen;
-+ buf += thislen;
-+
-+ ofs = 0;
-+ chipnum++;
-+ }
-+ return ret;
-+}
-+
-+static int sharp_write(struct mtd_info *mtd, loff_t to, size_t len,
-+ size_t *retlen, const u_char *buf)
-+{
-+ struct map_info *map = mtd->priv;
-+ struct sharp_info *sharp = map->fldrv_priv;
-+ int ret = 0;
-+ int i,j;
-+ int chipnum;
-+ unsigned long ofs;
-+ union { u32 l; unsigned char uc[4]; } tbuf;
-+
-+ *retlen = 0;
-+
-+ while(len){
-+ tbuf.l = 0xffffffff;
-+ chipnum = to >> sharp->chipshift;
-+ ofs = to & ((1<<sharp->chipshift)-1);
-+
-+ j=0;
-+ for(i=ofs&3;i<4 && len;i++){
-+ tbuf.uc[i] = *buf;
-+ buf++;
-+ to++;
-+ len--;
-+ j++;
-+ }
-+ sharp_write_oneword(map, &sharp->chips[chipnum], ofs&~3, tbuf.l);
-+ if(ret<0)
-+ return ret;
-+ (*retlen)+=j;
-+ }
-+
-+ return 0;
-+}
-+
-+static int sharp_write_oneword(struct map_info *map, struct flchip *chip,
-+ unsigned long adr, __u32 datum)
-+{
-+ int ret;
-+ int try;
-+ int i;
-+ map_word data, status;
-+
-+ status.x[0] = 0;
-+ ret = sharp_wait(map,chip);
-+ if (ret < 0)
-+ return ret;
-+
-+ for (try=0; try<10; try++) {
-+ long timeo;
-+
-+ sharp_send_cmd(map, CMD_BYTE_WRITE, adr);
-+ /* cpu_to_le32 -> hack to fix the writel be->le conversion */
-+ data.x[0] = cpu_to_le32(datum);
-+ map_write(map, data, adr);
-+
-+ chip->state = FL_WRITING;
-+ timeo = jiffies + (HZ/2);
-+
-+ sharp_send_cmd(map, CMD_READ_STATUS, adr);
-+ for(i=0;i<100;i++){
-+ status = map_read(map, adr);
-+ if((status.x[0] & SR_READY) == SR_READY)
-+ break;
-+ }
-+#ifdef AUTOUNLOCK
-+ if (status.x[0] & SR_PROTECT) { /* lock block */
-+ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
-+ sharp_unlock_oneblock(map,chip,adr);
-+ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
-+ sharp_send_cmd(map, CMD_RESET, adr);
-+ continue;
-+ }
-+#endif
-+ if(i==100){
-+ printk("sharp: timed out writing\n");
-+ }
-+
-+ if (!(status.x[0] & SR_ERRORS))
-+ break;
-+
-+ printk("sharp: error writing byte at addr=%08lx status=%08lx\n", adr, status.x[0]);
-+
-+ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
-+ }
-+ sharp_send_cmd(map, CMD_RESET, adr);
-+ chip->state = FL_READY;
-+
-+ sharp_release(chip);
-+
-+ return 0;
-+}
-+
-+static int sharp_erase(struct mtd_info *mtd, struct erase_info *instr)
-+{
-+ struct map_info *map = mtd->priv;
-+ struct sharp_info *sharp = map->fldrv_priv;
-+ unsigned long adr,len;
-+ int chipnum, ret=0;
-+
-+ if(instr->addr & (mtd->erasesize - 1))
-+ return -EINVAL;
-+ if(instr->len & (mtd->erasesize - 1))
-+ return -EINVAL;
-+ if(instr->len + instr->addr > mtd->size)
-+ return -EINVAL;
-+
-+ chipnum = instr->addr >> sharp->chipshift;
-+ adr = instr->addr & ((1<<sharp->chipshift)-1);
-+ len = instr->len;
-+
-+ while(len){
-+ ret = sharp_erase_oneblock(map, &sharp->chips[chipnum], adr);
-+ if(ret)return ret;
-+
-+ if (adr >= 0xfe0000) {
-+ adr += mtd->erasesize / 8;
-+ len -= mtd->erasesize / 8;
-+ } else {
-+ adr += mtd->erasesize;
-+ len -= mtd->erasesize;
-+ }
-+ if(adr >> sharp->chipshift){
-+ adr = 0;
-+ chipnum++;
-+ if(chipnum>=sharp->numchips)
-+ break;
-+ }
-+ }
-+
-+ instr->state = MTD_ERASE_DONE;
-+ mtd_erase_callback(instr);
-+
-+ return 0;
-+}
-+
-+static inline int sharp_do_wait_for_ready(struct map_info *map, struct flchip *chip,
-+ unsigned long adr)
-+{
-+ int ret;
-+ unsigned long timeo;
-+ map_word status;
-+ DECLARE_WAITQUEUE(wait, current);
-+
-+ sharp_send_cmd(map, CMD_READ_STATUS, adr);
-+ status = map_read(map, adr);
-+
-+ timeo = jiffies + HZ * 10;
-+
-+ while (time_before(jiffies, timeo)) {
-+ sharp_send_cmd(map, CMD_READ_STATUS, adr);
-+ status = map_read(map, adr);
-+ if ((status.x[0] & SR_READY) == SR_READY) {
-+ ret = 0;
-+ goto out;
-+ }
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ add_wait_queue(&chip->wq, &wait);
-+
-+ spin_unlock_bh(chip->mutex);
-+
-+ schedule_timeout(1);
-+ schedule();
-+
-+ spin_lock_bh(chip->mutex);
-+
-+ remove_wait_queue(&chip->wq, &wait);
-+ set_current_state(TASK_RUNNING);
-+ }
-+ ret = -ETIME;
-+out:
-+ return ret;
-+}
-+
-+static int sharp_erase_oneblock(struct map_info *map, struct flchip *chip,
-+ unsigned long adr)
-+{
-+ int ret;
-+ map_word status;
-+
-+ ret = sharp_wait(map,chip);
-+ if (ret < 0)
-+ return ret;
-+
-+#ifdef AUTOUNLOCK
-+ /* This seems like a good place to do an unlock */
-+ sharp_unlock_oneblock(map,chip,adr);
-+#endif
-+
-+ sharp_send_cmd(map, CMD_BLOCK_ERASE_1, adr);
-+ sharp_send_cmd(map, CMD_BLOCK_ERASE_2, adr);
-+
-+ chip->state = FL_ERASING;
-+
-+ ret = sharp_do_wait_for_ready(map,chip,adr);
-+ if(ret<0) {
-+ spin_unlock_bh(chip->mutex);
-+ return ret;
-+ }
-+
-+ sharp_send_cmd(map, CMD_READ_STATUS, adr);
-+ status = map_read(map, adr);
-+
-+ if (!(status.x[0] & SR_ERRORS)) {
-+ sharp_send_cmd(map, CMD_RESET, adr);
-+ chip->state = FL_READY;
-+ spin_unlock_bh(chip->mutex);
-+ return 0;
-+ }
-+
-+ printk("sharp: error erasing block at addr=%08lx status=%08lx\n", adr, status.x[0]);
-+ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
-+
-+ sharp_release(chip);
-+
-+ return -EIO;
-+}
-+
-+#ifdef AUTOUNLOCK
-+static inline void sharp_unlock_oneblock(struct map_info *map, struct flchip *chip,
-+ unsigned long adr)
-+{
-+ map_word status;
-+
-+ sharp_send_cmd(map, CMD_CLEAR_BLOCK_LOCKS_1, adr & BLOCK_MASK);
-+ sharp_send_cmd(map, CMD_CLEAR_BLOCK_LOCKS_2, adr & BLOCK_MASK);
-+
-+ sharp_do_wait_for_ready(map,chip,adr);
-+
-+ status = map_read(map, adr);
-+
-+ if (!(status.x[0] & SR_ERRORS)) {
-+ sharp_send_cmd(map, CMD_RESET, adr);
-+ chip->state = FL_READY;
-+ return;
-+ }
-+
-+ printk("sharp: error unlocking block at addr=%08lx status=%08lx\n", adr, status.x[0]);
-+ sharp_send_cmd(map, CMD_CLEAR_STATUS, adr);
-+}
-+#endif
-+
-+static void sharp_sync(struct mtd_info *mtd)
-+{
-+}
-+
-+static int sharp_suspend(struct mtd_info *mtd)
-+{
-+ struct map_info *map = mtd->priv;
-+ struct sharp_info *sharp = map->fldrv_priv;
-+ int i;
-+ struct flchip *chip;
-+ int ret = 0;
-+
-+ for (i = 0; !ret && i < sharp->numchips; i++) {
-+ chip = &sharp->chips[i];
-+ ret = sharp_wait(map,chip);
-+
-+ if (ret) {
-+ ret = -EAGAIN;
-+ } else {
-+ chip->state = FL_PM_SUSPENDED;
-+ spin_unlock_bh(chip->mutex);
-+ }
-+ }
-+ return ret;
-+}
-+
-+static void sharp_resume(struct mtd_info *mtd)
-+{
-+ struct map_info *map = mtd->priv;
-+ struct sharp_info *sharp = map->fldrv_priv;
-+ int i;
-+ struct flchip *chip;
-+
-+ for (i = 0; i < sharp->numchips; i++) {
-+ chip = &sharp->chips[i];
-+
-+ spin_lock_bh(chip->mutex);
-+
-+ if (chip->state == FL_PM_SUSPENDED) {
-+ /* We need to force it back to a known state */
-+ sharp_send_cmd(map, CMD_RESET, chip->start);
-+ chip->state = FL_READY;
-+ wake_up(&chip->wq);
-+ }
-+
-+ spin_unlock_bh(chip->mutex);
-+ }
-+}
-+
-+static void sharp_destroy(struct mtd_info *mtd)
-+{
-+ struct map_info *map = mtd->priv;
-+ struct sharp_info *sharp = map->fldrv_priv;
-+
-+ kfree(sharp);
-+}
-+
-+static int __init sharp_probe_init(void)
-+{
-+ printk("MTD Sharp chip driver <ds@lineo.com>\n");
-+
-+ register_mtd_chip_driver(&sharp_chipdrv);
-+
-+ return 0;
-+}
-+
-+static void __exit sharp_probe_exit(void)
-+{
-+ unregister_mtd_chip_driver(&sharp_chipdrv);
-+}
-+
-+module_init(sharp_probe_init);
-+module_exit(sharp_probe_exit);
-+
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("David Schleef <ds@schleef.org>");
-+MODULE_DESCRIPTION("Old MTD chip driver for pre-CFI Sharp flash chips");
-diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
-index 5ea1693..d523464 100644
---- a/drivers/mtd/maps/Kconfig
-+++ b/drivers/mtd/maps/Kconfig
-@@ -360,7 +360,7 @@ config MTD_CDB89712
-
- config MTD_SA1100
- tristate "CFI Flash device mapped on StrongARM SA11x0"
-- depends on MTD_CFI && ARCH_SA1100 && MTD_PARTITIONS
-+ depends on (MTD_CFI || MTD_SHARP) && ARCH_SA1100 && MTD_PARTITIONS
- help
- This enables access to the flash chips on most platforms based on
- the SA1100 and SA1110, including the Assabet and the Compaq iPAQ.
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch b/packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch
deleted file mode 100644
index 230bd93476..0000000000
--- a/packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 8200a4430e1515bf4523e3651fa7c29fdebbb0fb Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:50:06 +0200
-Subject: [PATCH 07/23] hostap workaround for buggy sa1100 pcmcia driver
-
----
- drivers/net/wireless/hostap/hostap_cs.c | 6 ++++--
- drivers/net/wireless/hostap/hostap_hw.c | 14 ++++++++++++--
- drivers/net/wireless/hostap/hostap_pci.c | 1 +
- drivers/net/wireless/hostap/hostap_plx.c | 2 +-
- 4 files changed, 18 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
-index 6337402..928cdf0 100644
---- a/drivers/net/wireless/hostap/hostap_cs.c
-+++ b/drivers/net/wireless/hostap/hostap_cs.c
-@@ -35,7 +35,7 @@ static int ignore_cis_vcc;
- module_param(ignore_cis_vcc, int, 0444);
- MODULE_PARM_DESC(ignore_cis_vcc, "Ignore broken CIS VCC entry");
-
--
-+int activar=0;
- /* struct local_info::hw_priv */
- struct hostap_cs_priv {
- dev_node_t node;
-@@ -499,11 +499,13 @@ static int hostap_cs_probe(struct pcmcia_device *p_dev)
-
- PDEBUG(DEBUG_HW, "%s: setting Vcc=33 (constant)\n", dev_info);
- p_dev->conf.IntType = INT_MEMORY_AND_IO;
--
-+
-+ activar=0;
- ret = prism2_config(p_dev);
- if (ret) {
- PDEBUG(DEBUG_EXTRA, "prism2_config() failed\n");
- }
-+ activar=1;
-
- return ret;
- }
-diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
-index 3153fe9..188eaee 100644
---- a/drivers/net/wireless/hostap/hostap_hw.c
-+++ b/drivers/net/wireless/hostap/hostap_hw.c
-@@ -54,6 +54,7 @@
- #include "hostap.h"
- #include "hostap_ap.h"
-
-+extern int activar;
-
- /* #define final_version */
-
-@@ -1497,6 +1498,8 @@ static int prism2_hw_config(struct net_device *dev, int initial)
- if (local->hw_downloading)
- return 1;
-
-+ activar=1;
-+
- if (prism2_hw_init(dev, initial)) {
- return local->no_pri ? 0 : 1;
- }
-@@ -2628,8 +2631,15 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
- int events = 0;
- u16 ev;
-
-- iface = netdev_priv(dev);
-- local = iface->local;
-+
-+ // Todos los parametros de entrada son correctos (no son nulos). De momento esta es la unica forma que conozco de detectar el problema.
-+ if (!activar) {
-+ printk("hostap_hw.c: INTERRUPT BEFORE DEVICE INIT!\n");
-+ return IRQ_HANDLED;
-+ }
-+
-+ iface = netdev_priv(dev);
-+ local = iface->local;
-
- prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
-
-diff --git a/drivers/net/wireless/hostap/hostap_pci.c b/drivers/net/wireless/hostap/hostap_pci.c
-index 3a874fc..df58aa3 100644
---- a/drivers/net/wireless/hostap/hostap_pci.c
-+++ b/drivers/net/wireless/hostap/hostap_pci.c
-@@ -19,6 +19,7 @@
-
- #include "hostap_wlan.h"
-
-+int activar=1;
-
- static char *dev_info = "hostap_pci";
-
-diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c
-index cbf15d7..4475174 100644
---- a/drivers/net/wireless/hostap/hostap_plx.c
-+++ b/drivers/net/wireless/hostap/hostap_plx.c
-@@ -21,7 +21,7 @@
- #include <asm/io.h>
-
- #include "hostap_wlan.h"
--
-+int activar=1;
-
- static char *dev_info = "hostap_plx";
-
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch b/packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch
deleted file mode 100644
index 19557f9e18..0000000000
--- a/packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 8ebd75d9f4d7dcc74e18b46ed82070eec52deaa8 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:51:21 +0200
-Subject: [PATCH 08/23] fix collie suspend hack
-
----
- drivers/pcmcia/pxa2xx_sharpsl.c | 2 +-
- drivers/pcmcia/sa1100_generic.c | 19 ++++++++++---------
- 2 files changed, 11 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c
-index 1cd02f5..3724395 100644
---- a/drivers/pcmcia/pxa2xx_sharpsl.c
-+++ b/drivers/pcmcia/pxa2xx_sharpsl.c
-@@ -222,7 +222,7 @@ static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
- sharpsl_pcmcia_init_reset(skt);
- }
-
--static struct pcmcia_low_level sharpsl_pcmcia_ops __initdata = {
-+static struct pcmcia_low_level sharpsl_pcmcia_ops = {
- .owner = THIS_MODULE,
- .hw_init = sharpsl_pcmcia_hw_init,
- .hw_shutdown = sharpsl_pcmcia_hw_shutdown,
-diff --git a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c
-index c5b2a44..eecbe8c 100644
---- a/drivers/pcmcia/sa1100_generic.c
-+++ b/drivers/pcmcia/sa1100_generic.c
-@@ -81,13 +81,14 @@ static int sa11x0_drv_pcmcia_probe(struct device *dev)
- return ret;
- }
-
--static struct device_driver sa11x0_pcmcia_driver = {
-- .probe = sa11x0_drv_pcmcia_probe,
-- .remove = soc_common_drv_pcmcia_remove,
-- .name = "sa11x0-pcmcia",
-- .bus = &platform_bus_type,
-- .suspend = pcmcia_socket_dev_suspend,
-- .resume = pcmcia_socket_dev_resume,
-+static struct platform_driver sa11x0_pcmcia_driver = {
-+ .driver = {
-+ .name = "sa11x0-pcmcia",
-+ .probe = sa11x0_drv_pcmcia_probe,
-+ .remove = soc_common_drv_pcmcia_remove,
-+ .suspend= pcmcia_socket_dev_suspend,
-+ .resume = pcmcia_socket_dev_resume,
-+ },
- };
-
- /* sa11x0_pcmcia_init()
-@@ -100,7 +101,7 @@ static struct device_driver sa11x0_pcmcia_driver = {
- */
- static int __init sa11x0_pcmcia_init(void)
- {
-- return driver_register(&sa11x0_pcmcia_driver);
-+ return platform_driver_register(&sa11x0_pcmcia_driver);
- }
-
- /* sa11x0_pcmcia_exit()
-@@ -110,7 +111,7 @@ static int __init sa11x0_pcmcia_init(void)
- */
- static void __exit sa11x0_pcmcia_exit(void)
- {
-- driver_unregister(&sa11x0_pcmcia_driver);
-+ platform_driver_unregister(&sa11x0_pcmcia_driver);
- }
-
- MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch b/packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch
deleted file mode 100644
index bb8dd5cd63..0000000000
--- a/packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch
+++ /dev/null
@@ -1,2629 +0,0 @@
-From 923ac0a48c2a064e4639b0fa53dbd0a18d87043e Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 18:09:03 +0100
-Subject: [PATCH 09/23] add sa1100 usb gadget driver hack
-
-Conflicts:
-
- drivers/usb/gadget/Makefile
----
- arch/arm/mach-sa1100/include/mach/collie.h | 5 +-
- drivers/usb/gadget/Kconfig | 14 +
- drivers/usb/gadget/Makefile | 1 +
- drivers/usb/gadget/sa1100_udc.c | 2447 ++++++++++++++++++++++++++++
- drivers/usb/gadget/sa1100_udc.h | 94 ++
- 5 files changed, 2558 insertions(+), 3 deletions(-)
- create mode 100644 drivers/usb/gadget/sa1100_udc.c
- create mode 100644 drivers/usb/gadget/sa1100_udc.h
-
-diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h
-index 9bc5349..799c930 100644
---- a/arch/arm/mach-sa1100/include/mach/collie.h
-+++ b/arch/arm/mach-sa1100/include/mach/collie.h
-@@ -23,11 +23,10 @@
- #define COLLIE_SCP_5VON SCOOP_GPCR_PA16
- #define COLLIE_SCP_AMP_ON SCOOP_GPCR_PA17
- #define COLLIE_GPIO_VPEN (COLLIE_SCOOP_GPIO_BASE + 7)
--#define COLLIE_SCP_LB_VOL_CHG SCOOP_GPCR_PA19
-+#define COLLIE_GPIO_LB_VOL_CHG (COLLIE_SCOOP_GPIO_BASE + 8)
-
- #define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
-- COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | \
-- COLLIE_SCP_LB_VOL_CHG )
-+ COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON )
- #define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
- COLLIE_SCP_CHARGE_ON )
-
-diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
-index dd4cd5a..efb65ac 100644
---- a/drivers/usb/gadget/Kconfig
-+++ b/drivers/usb/gadget/Kconfig
-@@ -419,6 +419,20 @@ config USB_GOKU
- default USB_GADGET
- select USB_GADGET_SELECTED
-
-+config USB_GADGET_SA1100
-+ boolean "SA1100 USB Device Port"
-+ depends on ARCH_SA1100
-+ select USB_GADGET_SELECTED
-+ help
-+
-+ Say "y" to link the driver statically, or "m" to build a
-+ dynamically linked module called "sa1100_udc" and force all
-+ gadget drivers to also be dynamically linked.
-+
-+config USB_SA1100
-+ tristate
-+ depends on USB_GADGET_SA1100
-+ default USB_GADGET
-
- #
- # LAST -- dummy/emulated controller
-diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
-index bd4041b..5cdd0ce 100644
---- a/drivers/usb/gadget/Makefile
-+++ b/drivers/usb/gadget/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_USB_ATMEL_USBA) += atmel_usba_udc.o
- obj-$(CONFIG_USB_FSL_USB2) += fsl_usb2_udc.o
- obj-$(CONFIG_USB_M66592) += m66592-udc.o
- obj-$(CONFIG_USB_FSL_QE) += fsl_qe_udc.o
-+obj-$(CONFIG_USB_SA1100) += sa1100_udc.o
-
- #
- # USB gadget drivers
-diff --git a/drivers/usb/gadget/sa1100_udc.c b/drivers/usb/gadget/sa1100_udc.c
-new file mode 100644
-index 0000000..5e26a6d
---- /dev/null
-+++ b/drivers/usb/gadget/sa1100_udc.c
-@@ -0,0 +1,2447 @@
-+/*
-+ * SA1100 USB Device Controller (UDC) driver.
-+ *
-+ * Copyright (C) Compaq Computer Corporation, 1998, 1999
-+ * Copyright (C) Extenex Corporation, 2001
-+ * Copyright (C) David Brownell, 2003
-+ * Copyright (C) Nick Bane, 2005, 2006, 2007
-+ * Many fragments from pxa2xx_udc.c and mach-sa1100 driver with various
-+ * GPL Copyright authors incl Russel king and Nicolas Pitre
-+ * Working port to 2.6.32-1 by N C Bane
-+ *
-+ * This file provides interrupt routing and overall coordination for the
-+ * sa1100 USB endpoints: ep0, ep1out-bulk, ep2in-bulk, as well as device
-+ * initialization and some parts of USB "Chapter 9" device behavior.
-+ *
-+ * It implements the "USB gadget controller" API, abstracting most hardware
-+ * details so that drivers running on top of this API are mostly independent
-+ * of hardware. A key exception is that ep0 logic needs to understand which
-+ * endpoints a given controller has, and their capabilities. Also, hardware
-+ * that doesn't fully support USB (like sa1100) may need workarounds in the
-+ * protocols implemented by device functions.
-+ *
-+ * See linux/Documentation/arm/SA1100/SA1100_USB for more info, or the
-+ * kerneldoc for the API exposed to gadget drivers.
-+ *
-+ */
-+//#define DEBUG 1
-+//#define VERBOSE 1
-+
-+//#define SA1100_USB_DEBUG
-+#ifdef SA1100_USB_DEBUG
-+static int sa1100_usb_debug=0;
-+#endif
-+
-+#define NCB_DMA_FIX
-+#ifdef NCB_DMA_FIX
-+// This is a clunky fix for dma alignemnt issues
-+// It should probably be done better by someone more
-+// steeped in DMA lore
-+#include <linux/slab.h>
-+#define SEND_BUFFER_SIZE 4096 /* this is probably a bit big */
-+#define RECEIVE_BUFFER_SIZE 256 /* 64 may be all that is necessary */
-+static char *send_buffer=NULL;
-+static char *receive_buffer=NULL;
-+#endif
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/ioport.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/smp_lock.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/timer.h>
-+#include <linux/list.h>
-+#include <linux/interrupt.h>
-+#include <linux/version.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/byteorder.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <mach/dma.h>
-+#include <asm/system.h>
-+#include <asm/mach-types.h>
-+#include <asm/unaligned.h>
-+
-+#include <linux/usb.h>
-+#include <linux/usb/ch9.h>
-+#include <linux/usb/gadget.h>
-+
-+#if CONFIG_PROC_FS
-+#include <linux/proc_fs.h>
-+#endif
-+
-+#if defined(CONFIG_SA1100_BALLOON)
-+#include <asm/arch/balloon2.h>
-+#endif
-+
-+#if defined(CONFIG_SA1100_COLLIE)
-+#include <linux/gpio.h>
-+#include <mach/collie.h>
-+#endif
-+
-+#define DRIVER_VERSION __DATE__
-+
-+#define DMA_ADDR_INVALID (~(dma_addr_t)0)
-+
-+
-+static const char driver_name [] = "sa1100_udc";
-+static const char driver_desc [] = "SA-1110 USB Device Controller";
-+
-+static const char ep0name [] = "ep0";
-+
-+#ifdef DEBUG
-+static char *type_string (u8 bmAttributes)
-+{
-+ switch ( (bmAttributes) & USB_ENDPOINT_XFERTYPE_MASK) {
-+ case USB_ENDPOINT_XFER_BULK: return "bulk";
-+ //case USB_ENDPOINT_XFER_ISOC: return "iso";
-+ case USB_ENDPOINT_XFER_INT: return "intr";
-+ };
-+ return "control";
-+}
-+#endif
-+
-+#include <linux/dma-mapping.h>
-+struct usb_stats_t {
-+ unsigned long ep0_fifo_write_failures;
-+ unsigned long ep0_bytes_written;
-+ unsigned long ep0_fifo_read_failures;
-+ unsigned long ep0_bytes_read;
-+};
-+
-+struct usb_info_t {
-+ dma_regs_t *dmaregs_tx, *dmaregs_rx;
-+ int state;
-+ unsigned char address;
-+ struct usb_stats_t stats;
-+};
-+
-+enum { kError=-1, kEvSuspend=0, kEvReset=1,
-+ kEvResume=2, kEvAddress=3, kEvConfig=4, kEvDeConfig=5 };
-+int usbctl_next_state_on_event( int event ) {
-+ return 0;
-+}
-+static struct usb_info_t usbd_info;
-+
-+/* receiver */
-+void ep1_reset(void);
-+void ep1_stall(void);
-+int sa1100_usb_recv (struct usb_request *req, void (*callback) (int,int));
-+
-+/* xmitter */
-+void ep2_reset(void);
-+void ep2_stall(void);
-+int sa1100_usb_send (struct usb_request *req, void (*callback) (int,int));
-+
-+/* UDC register utility functions */
-+#define UDC_write(reg, val) { \
-+ int i = 10000; \
-+ do { \
-+ (reg) = (val); \
-+ if (i-- <= 0) { \
-+ printk( "%s [%d]: write %#x to %p (%#lx) failed\n", \
-+ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
-+ break; \
-+ } \
-+ } while((reg) != (val)); \
-+}
-+
-+#define UDC_set(reg, val) { \
-+ int i = 10000; \
-+ do { \
-+ (reg) |= (val); \
-+ if (i-- <= 0) { \
-+ printk( "%s [%d]: set %#x of %p (%#lx) failed\n", \
-+ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
-+ break; \
-+ } \
-+ } while(!((reg) & (val))); \
-+}
-+
-+#define UDC_clear(reg, val) { \
-+ int i = 10000; \
-+ do { \
-+ (reg) &= ~(val); \
-+ if (i-- <= 0) { \
-+ printk( "%s [%d]: clear %#x of %p (%#lx) failed\n", \
-+ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
-+ break; \
-+ } \
-+ } while((reg) & (val)); \
-+}
-+
-+#define UDC_flip(reg, val) { \
-+ int i = 10000; \
-+ (reg) = (val); \
-+ do { \
-+ (reg) = (val); \
-+ if (i-- <= 0) { \
-+ printk( "%s [%d]: flip %#x of %p (%#lx) failed\n", \
-+ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
-+ break; \
-+ } \
-+ } while(((reg) & (val))); \
-+}
-+
-+#include "sa1100_udc.h"
-+
-+static struct sa1100_udc *the_controller;
-+static void nuke (struct sa1100_ep *, int status);
-+static void done (struct sa1100_ep *ep, struct sa1100_request *req, int status);
-+static inline void ep0_idle (struct sa1100_udc *dev)
-+{
-+ dev->ep0state = EP0_IDLE;
-+}
-+
-+// ep0 handlers
-+
-+// 1 == lots of trace noise, 0 = only "important' stuff
-+#define VERBOSITY 0
-+
-+#if 1 && !defined( ASSERT )
-+# define ASSERT(expr) \
-+ if(!(expr)) { \
-+ printk( "Assertion failed! %s,%s,%s,line=%d\n",\
-+ #expr,__FILE__,__FUNCTION__,__LINE__); \
-+ }
-+#else
-+# define ASSERT(expr)
-+#endif
-+
-+#if VERBOSITY
-+#define PRINTKD(fmt, args...) printk( fmt , ## args)
-+#else
-+#define PRINTKD(fmt, args...)
-+#endif
-+
-+/* other subroutines */
-+unsigned int (*wrint)(void);
-+void ep0_int_hndlr( void );
-+static void ep0_queue(void *buf, unsigned int req, unsigned int act);
-+static void write_fifo( void );
-+static int read_fifo( struct usb_ctrlrequest * p );
-+
-+/* some voodo helpers 01Mar01ww */
-+static void set_cs_bits( __u32 set_bits );
-+static void set_de( void );
-+static void set_ipr( void );
-+static void set_ipr_and_de( void );
-+static bool clear_opr( void );
-+
-+/***************************************************************************
-+Inline Helpers
-+***************************************************************************/
-+
-+/* Data extraction from usb_request_t fields */
-+enum { kTargetDevice=0, kTargetInterface=1, kTargetEndpoint=2 };
-+static inline int request_target( __u8 b ) { return (int) ( b & 0x0F); }
-+
-+static inline int windex_to_ep_num( __u16 w ) { return (int) ( w & 0x000F); }
-+inline int type_code_from_request( __u8 by ) { return (( by >> 4 ) & 3); }
-+
-+/* following is hook for self-powered flag in GET_STATUS. Some devices
-+ .. might like to override and return real info */
-+static inline bool self_powered_hook( void ) { return true; }
-+
-+#if VERBOSITY
-+/* "pcs" == "print control status" */
-+static inline void pcs( void )
-+{
-+ __u32 foo = Ser0UDCCS0;
-+ printk( "%8.8X: %s %s %s %s\n",
-+ foo,
-+ foo & UDCCS0_SE ? "SE" : "",
-+ foo & UDCCS0_OPR ? "OPR" : "",
-+ foo & UDCCS0_IPR ? "IPR" : "",
-+ foo & UDCCS0_SST ? "SST" : ""
-+ );
-+}
-+static inline void preq( struct usb_ctrlrequest * pReq )
-+{
-+ static char * tnames[] = { "dev", "intf", "ep", "oth" };
-+ static char * rnames[] = { "std", "class", "vendor", "???" };
-+ char * psz;
-+ switch( pReq->bRequest ) {
-+ case USB_REQ_GET_STATUS: psz = "get stat"; break;
-+ case USB_REQ_CLEAR_FEATURE: psz = "clr feat"; break;
-+ case USB_REQ_SET_FEATURE: psz = "set feat"; break;
-+ case USB_REQ_SET_ADDRESS: psz = "set addr"; break;
-+ case USB_REQ_GET_DESCRIPTOR: psz = "get desc"; break;
-+ case USB_REQ_SET_DESCRIPTOR: psz = "set desc"; break;
-+ case USB_REQ_GET_CONFIGURATION: psz = "get cfg"; break;
-+ case USB_REQ_SET_CONFIGURATION: psz = "set cfg"; break;
-+ case USB_REQ_GET_INTERFACE: psz = "get intf"; break;
-+ case USB_REQ_SET_INTERFACE: psz = "set intf"; break;
-+ default: psz = "unknown"; break;
-+ }
-+ printk( "- [%s: %s req to %s. dir=%s]\n", psz,
-+ rnames[ (pReq->bRequestType >> 5) & 3 ],
-+ tnames[ pReq->bRequestType & 3 ],
-+ ( pReq->bRequestType & 0x80 ) ? "in" : "out" );
-+}
-+
-+static inline void usbctl_dump_request(const char *prefix, const struct usb_ctrlrequest *req)
-+{
-+ printk("%s: bRequestType=0x%02x bRequest=0x%02x "
-+ "wValue=0x%04x wIndex=0x%04x wLength=0x%04x\n",
-+ prefix, req->bRequestType, req->bRequest,
-+ le16_to_cpu(req->wValue), le16_to_cpu(req->wIndex),
-+ le16_to_cpu(req->wLength));
-+}
-+#else
-+static inline void pcs( void ){}
-+//static inline void preq( void ){}
-+static inline void preq( void *x ){}
-+static inline void usbctl_dump_request(const char *prefix, const struct usb_ctrlrequest *req) {}
-+#endif
-+
-+/***************************************************************************
-+Globals
-+***************************************************************************/
-+static const char pszMe[] = "usbep0: ";
-+
-+
-+/* global write struct to keep write
-+ ..state around across interrupts */
-+static struct {
-+ unsigned char *p;
-+ int bytes_left;
-+} wr;
-+
-+/***************************************************************************
-+Public Interface
-+***************************************************************************/
-+
-+/* reset received from HUB (or controller just went nuts and reset by itself!)
-+ so udc core has been reset, track this state here */
-+void ep0_reset(void)
-+{
-+ /* reset state machine */
-+ wr.p = NULL;
-+ wr.bytes_left = 0;
-+ usbd_info.address=0;
-+// needed?
-+ Ser0UDCAR = 0;
-+}
-+
-+
-+/* handle interrupt for endpoint zero */
-+
-+inline void ep0_clear_write(void) {
-+ wr.p = NULL;
-+ wr.bytes_left = 0;
-+}
-+
-+/* this is a config packet parser based on that from the updated HH 2.6 udc */
-+static void ep0_read_packet(void)
-+{
-+ unsigned char status_buf[2]; /* returned in GET_STATUS */
-+ struct usb_ctrlrequest req;
-+ int request_type;
-+ int n;
-+ __u32 address;
-+ __u32 in, out;
-+
-+ /* reset previous count */
-+ the_controller->ep0_req_len=-1;
-+
-+ /* read the setup request */
-+ n = read_fifo( &req );
-+ usbctl_dump_request("ep0_read_packet",&req);
-+
-+ if ( n != sizeof( req ) ) {
-+ printk( "%ssetup begin: fifo READ ERROR wanted %d bytes got %d. "
-+ " Stalling out...\n",
-+ pszMe, sizeof( req ), n );
-+ /* force stall, serviced out */
-+ set_cs_bits( UDCCS0_FST | UDCCS0_SO );
-+ goto sh_sb_end;
-+ }
-+
-+ /* Is it a standard request? (not vendor or class request) */
-+ request_type = type_code_from_request( req.bRequestType );
-+ if ( request_type != 0 ) {
-+ printk( "%ssetup begin: unsupported bRequestType: %d ignored\n",
-+ pszMe, request_type );
-+ set_cs_bits( UDCCS0_DE | UDCCS0_SO );
-+ goto sh_sb_end;
-+ }
-+
-+ /* save requested reply size */
-+ the_controller->ep0_req_len=le16_to_cpu(req.wLength);
-+ PRINTKD("%s: request length is %d\n",__FUNCTION__,the_controller->ep0_req_len);
-+
-+#if VERBOSITY
-+ {
-+ unsigned char * pdb = (unsigned char *) &req;
-+ PRINTKD( "%2.2X %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X ",
-+ pdb[0], pdb[1], pdb[2], pdb[3], pdb[4], pdb[5], pdb[6], pdb[7]
-+ );
-+ preq( &req );
-+ }
-+#endif
-+
-+ /* Handle it */
-+ switch( req.bRequest ) {
-+
-+ /* This first bunch have no data phase */
-+
-+ case USB_REQ_SET_ADDRESS:
-+ address = (__u32) (req.wValue & 0x7F);
-+ /* when SO and DE sent, UDC will enter status phase and ack,
-+ ..propagating new address to udc core. Next control transfer
-+ ..will be on the new address. You can't see the change in a
-+ ..read back of CAR until then. (about 250us later, on my box).
-+ ..The original Intel driver sets S0 and DE and code to check
-+ ..that address has propagated here. I tried this, but it
-+ ..would only work sometimes! The rest of the time it would
-+ ..never propagate and we'd spin forever. So now I just set
-+ ..it and pray...
-+ */
-+ Ser0UDCAR = address;
-+ usbd_info.address = address;
-+ usbctl_next_state_on_event( kEvAddress );
-+ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
-+ printk( "%sI have been assigned address: %d\n", pszMe, address );
-+ break;
-+
-+
-+ case USB_REQ_SET_CONFIGURATION:
-+ if ( req.wValue == 1 ) {
-+ /* configured */
-+ if (usbctl_next_state_on_event( kEvConfig ) != kError) {
-+ /* (re)set the out and in max packet sizes */
-+ PRINTKD( "%s: calling the_controller.driver->setup with SET_CONFIGURATION\n", __FUNCTION__ );
-+ the_controller->driver->setup(&the_controller->gadget, &req);
-+ in = __le16_to_cpu( the_controller->ep[1].ep.maxpacket );
-+ out = __le16_to_cpu( the_controller->ep[2].ep.maxpacket );
-+ Ser0UDCOMP = ( out - 1 );
-+ Ser0UDCIMP = ( in - 1 );
-+ // we are configured
-+ usbd_info.state = USB_STATE_CONFIGURED;
-+ // enable rx and tx interrupts
-+ Ser0UDCCR &= ~(UDCCR_RIM | UDCCR_TIM);
-+
-+ printk( "%sConfigured (OMP=%8.8X IMP=%8.8X)\n", pszMe, out, in );
-+ break;
-+ }
-+ } else if ( req.wValue == 0 ) {
-+ /* de-configured */
-+ if (usbctl_next_state_on_event( kEvDeConfig ) != kError )
-+ printk( "%sDe-Configured\n", pszMe );
-+ usbd_info.state = 0;
-+ Ser0UDCCR |= UDCCR_RIM | UDCCR_TIM;
-+ ep1_reset ();
-+ ep2_reset ();
-+ printk("%s: de-configured. Tx and Rx interrupts disabled. ep1 and ep2 reset\n",__FUNCTION__);
-+ } else {
-+ printk( "%ssetup phase: Unknown "
-+ "\"set configuration\" data %d\n",
-+ pszMe, req.wValue );
-+ }
-+ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
-+ break;
-+
-+ case USB_REQ_CLEAR_FEATURE:
-+ /* could check data length, direction...26Jan01ww */
-+ if ( req.wValue == 0 ) { /* clearing ENDPOINT_HALT/STALL */
-+ int ep = windex_to_ep_num( req.wIndex );
-+ if ( ep == 1 ) {
-+ printk( "%sclear feature \"endpoint halt\" "
-+ " on receiver\n", pszMe );
-+ ep1_reset();
-+ }
-+ else if ( ep == 2 ) {
-+ printk( "%sclear feature \"endpoint halt\" "
-+ "on xmitter\n", pszMe );
-+ ep2_reset();
-+ } else {
-+ printk( "%sclear feature \"endpoint halt\" "
-+ "on unsupported ep # %d\n",
-+ pszMe, ep );
-+ }
-+ } else {
-+ printk( "%sUnsupported feature selector (%d) "
-+ "in clear feature. Ignored.\n" ,
-+ pszMe, req.wValue );
-+ }
-+ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
-+ break;
-+
-+ case USB_REQ_SET_FEATURE:
-+ if ( req.wValue == 0 ) { /* setting ENDPOINT_HALT/STALL */
-+ int ep = windex_to_ep_num( req.wValue );
-+ if ( ep == 1 ) {
-+ printk( "%set feature \"endpoint halt\" "
-+ "on receiver\n", pszMe );
-+ ep1_stall();
-+ }
-+ else if ( ep == 2 ) {
-+ printk( "%sset feature \"endpoint halt\" "
-+ " on xmitter\n", pszMe );
-+ ep2_stall();
-+ } else {
-+ printk( "%sset feature \"endpoint halt\" "
-+ "on unsupported ep # %d\n",
-+ pszMe, ep );
-+ }
-+ }
-+ else {
-+ printk( "%sUnsupported feature selector "
-+ "(%d) in set feature\n",
-+ pszMe, req.wValue );
-+ }
-+ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
-+ break;
-+
-+ /* The rest have a data phase that writes back to the host */
-+ case USB_REQ_GET_STATUS:
-+ /* return status bit flags */
-+ status_buf[0] = status_buf[1] = 0;
-+ n = request_target(req.bRequestType);
-+ switch( n ) {
-+ case kTargetDevice:
-+ if ( self_powered_hook() )
-+ status_buf[0] |= 1;
-+ break;
-+ case kTargetInterface:
-+ break;
-+ case kTargetEndpoint:
-+ /* return stalled bit */
-+ n = windex_to_ep_num( req.wIndex );
-+ if ( n == 1 )
-+ status_buf[0] |= (Ser0UDCCS1 & UDCCS1_FST) >> 4;
-+ else if ( n == 2 )
-+ status_buf[0] |= (Ser0UDCCS2 & UDCCS2_FST) >> 5;
-+ else {
-+ printk( "%sUnknown endpoint (%d) "
-+ "in GET_STATUS\n", pszMe, n );
-+ }
-+ break;
-+ default:
-+ printk( "%sUnknown target (%d) in GET_STATUS\n",
-+ pszMe, n );
-+ /* fall thru */
-+ break;
-+ }
-+ PRINTKD("%s: GET_STATUS writing %d\n",__FUNCTION__,req.wLength);
-+ ep0_queue( status_buf, req.wLength, sizeof( status_buf ));
-+ break;
-+ case USB_REQ_GET_DESCRIPTOR:
-+ PRINTKD( "%s: calling the_controller.driver->setup with GET_DESCRIPTOR\n", __FUNCTION__ );
-+ the_controller->driver->setup(&the_controller->gadget, &req);
-+ break;
-+ case USB_REQ_GET_CONFIGURATION:
-+ PRINTKD( "%s: calling the_controller.driver->setup with GET_CONFIGURATION\n", __FUNCTION__ );
-+ the_controller->driver->setup(&the_controller->gadget, &req);
-+ break;
-+ case USB_REQ_GET_INTERFACE:
-+ PRINTKD( "%s: calling the_controller->driver->setup with GET_INTERFACE\n", __FUNCTION__ );
-+ the_controller->driver->setup(&the_controller->gadget, &req);
-+ break;
-+ case USB_REQ_SET_INTERFACE:
-+ PRINTKD( "%s: calling the_controller->driver->setup with SET_INTERFACE\n", __FUNCTION__ );
-+ the_controller->driver->setup(&the_controller->gadget, &req);
-+ break;
-+ default :
-+ printk("%sunknown request 0x%x\n", pszMe, req.bRequest);
-+ break;
-+ } /* switch( bRequest ) */
-+
-+sh_sb_end:
-+ return;
-+
-+}
-+
-+void ep0_int_hndlr(void)
-+{
-+ u32 cs_reg_in;
-+
-+ pcs();
-+
-+ cs_reg_in = Ser0UDCCS0;
-+
-+ /*
-+ * If "setup end" has been set, the usb controller has terminated
-+ * a setup transaction before we set DE. This happens during
-+ * enumeration with some hosts. For example, the host will ask for
-+ * our device descriptor and specify a return of 64 bytes. When we
-+ * hand back the first 8, the host will know our max packet size
-+ * and turn around and issue a new setup immediately. This causes
-+ * the UDC to auto-ack the new setup and set SE. We must then
-+ * "unload" (process) the new setup, which is what will happen
-+ * after this preamble is finished executing.
-+ */
-+ if (cs_reg_in & UDCCS0_SE) {
-+ PRINTKD("UDC: early termination of setup\n");
-+
-+ /*
-+ * Clear setup end
-+ */
-+ set_cs_bits(UDCCS0_SSE);
-+
-+ /*
-+ * Clear any pending write.
-+ */
-+ ep0_clear_write();
-+ }
-+
-+ /*
-+ * UDC sent a stall due to a protocol violation.
-+ */
-+ if (cs_reg_in & UDCCS0_SST) {
-+ PRINTKD("UDC: write_preamble: UDC sent stall\n");
-+
-+ /*
-+ * Clear sent stall
-+ */
-+ set_cs_bits(UDCCS0_SST);
-+
-+ /*
-+ * Clear any pending write.
-+ */
-+ ep0_clear_write();
-+ }
-+
-+ switch (cs_reg_in & (UDCCS0_OPR | UDCCS0_IPR)) {
-+ case UDCCS0_OPR | UDCCS0_IPR:
-+ PRINTKD("UDC: write_preamble: see OPR. Stopping write to "
-+ "handle new SETUP\n");
-+
-+ /*
-+ * very rarely, you can get OPR and
-+ * leftover IPR. Try to clear
-+ */
-+ UDC_clear(Ser0UDCCS0, UDCCS0_IPR);
-+
-+ /*
-+ * Clear any pending write.
-+ */
-+ ep0_clear_write();
-+
-+ /*FALLTHROUGH*/
-+ case UDCCS0_OPR:
-+ /*
-+ * A new setup request is pending. Handle
-+ * it. Note that we don't try to read a
-+ * packet if SE was set and OPR is clear.
-+ */
-+ ep0_read_packet();
-+ break;
-+
-+ case 0:
-+ // if data pending ...
-+ if (wr.p) {
-+ unsigned int cs_bits = 0;
-+ if (wr.bytes_left != 0) {
-+ /*
-+ * More data to go
-+ */
-+ write_fifo();
-+ // packet ready
-+ cs_bits |= UDCCS0_IPR;
-+ }
-+
-+ if (wr.bytes_left == 0) {
-+ /*
-+ * All data sent.
-+ */
-+ cs_bits |= wrint();
-+ // a null packet may be following
-+ if (!wrint)
-+ ep0_clear_write();
-+ }
-+ set_cs_bits(cs_bits);
-+ }
-+ else
-+ PRINTKD("%s: No data - probably an ACK\n",__FUNCTION__);
-+ break;
-+
-+ case UDCCS0_IPR:
-+ PRINTKD("UDC: IPR set, not writing\n");
-+ break;
-+ }
-+
-+ pcs();
-+ PRINTKD( "-end-\n" );
-+}
-+
-+static unsigned int ep0_sh_write_data(void)
-+{
-+ /*
-+ * If bytes left is zero, we are coming in on the
-+ * interrupt after the last packet went out. And
-+ * we know we don't have to empty packet this
-+ * transfer so just set DE and we are done
-+ */
-+ PRINTKD("UDC: normal packet ended\n");
-+ wrint=NULL;
-+ return UDCCS0_DE;
-+}
-+
-+static unsigned int ep0_sh_write_with_empty_packet(void)
-+{
-+ /*
-+ * If bytes left is zero, we are coming in on the
-+ * interrupt after the last packet went out.
-+ * We must do short packet suff, so set DE and IPR
-+ */
-+ PRINTKD("UDC: short packet sent\n");
-+ wrint=NULL;
-+ return UDCCS0_IPR | UDCCS0_DE;
-+}
-+
-+static unsigned int ep0_sh_write_data_then_empty_packet(void)
-+{
-+ PRINTKD("UDC: last packet full. Send empty packet next\n");
-+ wrint=ep0_sh_write_with_empty_packet;
-+ return 0;
-+}
-+
-+static void ep0_queue(void *buf, unsigned int len, unsigned int req_len)
-+{
-+ __u32 cs_reg_bits = UDCCS0_IPR;
-+
-+ PRINTKD("a=%d r=%d\n", len, req_len);
-+
-+ if (len == 0) {
-+ // no output packet to wait for
-+ PRINTKD("%s: zero byte packet being queued. Setting DE and OPR end exiting\n",__FUNCTION__);
-+ set_cs_bits(UDCCS0_DE | UDCCS0_SO);
-+ return;
-+ }
-+
-+ /*
-+ * thou shalt not enter data phase until
-+ * Out Packet Ready is clear
-+ */
-+ if (!clear_opr()) {
-+ printk("UDC: SO did not clear OPR\n");
-+ set_cs_bits(UDCCS0_DE | UDCCS0_SO);
-+ return;
-+ }
-+
-+ // note data to xmit stored
-+ wr.p=buf;
-+ wr.bytes_left=min(len, req_len);
-+
-+ // write the first block
-+ write_fifo();
-+
-+ // done already?
-+ if (wr.bytes_left == 0) {
-+ /*
-+ * out in one, so data end
-+ */
-+ cs_reg_bits |= UDCCS0_DE;
-+ ep0_clear_write();
-+ // rest is a shorter than expected reply?
-+ } else if (len < req_len) {
-+ /*
-+ * we are going to short-change host
-+ * so need nul to not stall
-+ */
-+ if (len % 8) {
-+ PRINTKD("%s: %d more to go ending in a short packet.\n",__FUNCTION__,wr.bytes_left);
-+ wrint=ep0_sh_write_with_empty_packet;
-+ }
-+ // unless we are on a packet boundary. Then send full packet plus null packet.
-+ else {
-+ PRINTKD("%s: %d more to go then add empty packet.\n",__FUNCTION__,wr.bytes_left);
-+ wrint=ep0_sh_write_data_then_empty_packet;
-+ }
-+ } else {
-+ /*
-+ * we have as much or more than requested
-+ */
-+ PRINTKD("%s: %d more to go.\n",__FUNCTION__,wr.bytes_left);
-+ wrint=ep0_sh_write_data;
-+ }
-+
-+ /*
-+ * note: IPR was set uncondtionally at start of routine
-+ */
-+ set_cs_bits(cs_reg_bits);
-+}
-+
-+/*
-+ * write_fifo()
-+ * Stick bytes in the 8 bytes endpoint zero FIFO.
-+ * This version uses a variety of tricks to make sure the bytes
-+ * are written correctly. 1. The count register is checked to
-+ * see if the byte went in, and the write is attempted again
-+ * if not. 2. An overall counter is used to break out so we
-+ * don't hang in those (rare) cases where the UDC reverses
-+ * direction of the FIFO underneath us without notification
-+ * (in response to host aborting a setup transaction early).
-+ *
-+ */
-+static void write_fifo( void )
-+{
-+ int bytes_this_time = min(wr.bytes_left, 8);
-+ int bytes_written = 0;
-+
-+ PRINTKD( "WF=%d: ", bytes_this_time );
-+
-+ while( bytes_this_time-- ) {
-+ unsigned int cwc;
-+ int i;
-+ PRINTKD( "%2.2X ", *wr.p );
-+ cwc = Ser0UDCWC & 15;
-+ i = 10;
-+ do {
-+ Ser0UDCD0 = *wr.p;
-+ udelay( 20 ); /* voodo 28Feb01ww */
-+ } while( (Ser0UDCWC &15) == cwc && --i );
-+
-+ if ( i == 0 ) {
-+ printk( "%swrite_fifo: write failure\n", pszMe );
-+ usbd_info.stats.ep0_fifo_write_failures++;
-+ }
-+
-+ wr.p++;
-+ bytes_written++;
-+ }
-+ wr.bytes_left -= bytes_written;
-+
-+ /* following propagation voodo so maybe caller writing IPR in
-+ ..a moment might actually get it to stick 28Feb01ww */
-+ udelay( 300 );
-+
-+ usbd_info.stats.ep0_bytes_written += bytes_written;
-+ PRINTKD( "L=%d WCR=%8.8lX\n", wr.bytes_left, Ser0UDCWC );
-+}
-+/*
-+ * read_fifo()
-+ * Read 1-8 bytes out of FIFO and put in request.
-+ * Called to do the initial read of setup requests
-+ * from the host. Return number of bytes read.
-+ *
-+ * Like write fifo above, this driver uses multiple
-+ * reads checked agains the count register with an
-+ * overall timeout.
-+ *
-+ */
-+static int
-+read_fifo( struct usb_ctrlrequest * request )
-+{
-+ int bytes_read = 0;
-+ int fifo_count;
-+
-+ unsigned char * pOut = (unsigned char*) request;
-+
-+ fifo_count = ( Ser0UDCWC & 0xFF );
-+
-+ ASSERT( fifo_count <= 8 );
-+ PRINTKD( "RF=%d ", fifo_count );
-+
-+ while( fifo_count-- ) {
-+ unsigned int cwc;
-+ int i;
-+
-+ cwc = Ser0UDCWC & 15;
-+
-+ i = 10;
-+ do {
-+ *pOut = (unsigned char) Ser0UDCD0;
-+ udelay( 20 );
-+ } while( ( Ser0UDCWC & 15 ) == cwc && --i );
-+
-+ if ( i == 0 ) {
-+ printk( "%sread_fifo(): read failure\n", pszMe );
-+ usbd_info.stats.ep0_fifo_read_failures++;
-+ }
-+ pOut++;
-+ bytes_read++;
-+ }
-+
-+ PRINTKD( "fc=%d\n", bytes_read );
-+ usbd_info.stats.ep0_bytes_read++;
-+ return bytes_read;
-+}
-+
-+/* some voodo I am adding, since the vanilla macros just aren't doing it 1Mar01ww */
-+
-+#define ABORT_BITS ( UDCCS0_SST | UDCCS0_SE )
-+#define OK_TO_WRITE (!( Ser0UDCCS0 & ABORT_BITS ))
-+#define BOTH_BITS (UDCCS0_IPR | UDCCS0_DE)
-+
-+static void set_cs_bits( __u32 bits )
-+{
-+ if ( bits & ( UDCCS0_SO | UDCCS0_SSE | UDCCS0_FST | UDCCS0_SST) )
-+ Ser0UDCCS0 = bits;
-+ else if ( (bits & BOTH_BITS) == BOTH_BITS )
-+ set_ipr_and_de();
-+ else if ( bits & UDCCS0_IPR )
-+ set_ipr();
-+ else if ( bits & UDCCS0_DE )
-+ set_de();
-+}
-+
-+static void set_de( void )
-+{
-+ int i = 1;
-+ while( 1 ) {
-+ if ( OK_TO_WRITE ) {
-+ Ser0UDCCS0 |= UDCCS0_DE;
-+ } else {
-+ PRINTKD( "%sQuitting set DE because SST or SE set\n", pszMe );
-+ break;
-+ }
-+ if ( Ser0UDCCS0 & UDCCS0_DE )
-+ break;
-+ udelay( i );
-+ if ( ++i == 50 ) {
-+ printk( "%sDangnabbbit! Cannot set DE! (DE=%8.8X CCS0=%8.8lX)\n",
-+ pszMe, UDCCS0_DE, Ser0UDCCS0 );
-+ break;
-+ }
-+ }
-+}
-+
-+static void set_ipr( void )
-+{
-+ int i = 1;
-+ while( 1 ) {
-+ if ( OK_TO_WRITE ) {
-+ Ser0UDCCS0 |= UDCCS0_IPR;
-+ } else {
-+ PRINTKD( "%sQuitting set IPR because SST or SE set\n", pszMe );
-+ break;
-+ }
-+ if ( Ser0UDCCS0 & UDCCS0_IPR )
-+ break;
-+ udelay( i );
-+ if ( ++i == 50 ) {
-+ printk( "%sDangnabbbit! Cannot set IPR! (IPR=%8.8X CCS0=%8.8lX)\n",
-+ pszMe, UDCCS0_IPR, Ser0UDCCS0 );
-+ break;
-+ }
-+ }
-+}
-+
-+static void set_ipr_and_de( void )
-+{
-+ int i = 1;
-+ while( 1 ) {
-+ if ( OK_TO_WRITE ) {
-+ Ser0UDCCS0 |= BOTH_BITS;
-+ } else {
-+ PRINTKD( "%sQuitting set IPR/DE because SST or SE set\n", pszMe );
-+ break;
-+ }
-+ if ( (Ser0UDCCS0 & BOTH_BITS) == BOTH_BITS)
-+ break;
-+ udelay( i );
-+ if ( ++i == 50 ) {
-+ printk( "%sDangnabbbit! Cannot set DE/IPR! (DE=%8.8X IPR=%8.8X CCS0=%8.8lX)\n",
-+ pszMe, UDCCS0_DE, UDCCS0_IPR, Ser0UDCCS0 );
-+ break;
-+ }
-+ }
-+}
-+
-+static bool clear_opr( void )
-+{
-+ int i = 10000;
-+ bool is_clear;
-+ do {
-+ Ser0UDCCS0 = UDCCS0_SO;
-+ is_clear = ! ( Ser0UDCCS0 & UDCCS0_OPR );
-+ if ( i-- <= 0 ) {
-+ printk( "%sclear_opr(): failed\n", pszMe );
-+ break;
-+ }
-+ } while( ! is_clear );
-+ return is_clear;
-+}
-+
-+
-+
-+// ep1 handlers
-+
-+static char *ep1_buf;
-+static int ep1_len;
-+static void (*ep1_callback)(int flag, int size);
-+static char *ep1_curdmabuf;
-+static dma_addr_t ep1_curdmapos;
-+static int ep1_curdmalen;
-+static int ep1_remain;
-+static int ep1_used;
-+
-+static dma_regs_t *dmaregs_rx = NULL;
-+static int rx_pktsize;
-+
-+static int naking;
-+
-+static void
-+ep1_start(void)
-+{
-+ sa1100_reset_dma(dmaregs_rx);
-+ if (!ep1_curdmalen) {
-+ ep1_curdmalen = rx_pktsize;
-+ if (ep1_curdmalen > ep1_remain)
-+ ep1_curdmalen = ep1_remain;
-+ ep1_curdmapos = dma_map_single(NULL, ep1_curdmabuf, ep1_curdmalen,
-+ DMA_FROM_DEVICE);
-+ }
-+
-+ UDC_write( Ser0UDCOMP, ep1_curdmalen-1 );
-+
-+ sa1100_start_dma(dmaregs_rx, ep1_curdmapos, ep1_curdmalen);
-+
-+ if ( naking ) {
-+ /* turn off NAK of OUT packets, if set */
-+ UDC_flip( Ser0UDCCS1, UDCCS1_RPC );
-+ naking = 0;
-+ }
-+}
-+
-+static void
-+ep1_done(int flag)
-+{
-+ int size = ep1_len - ep1_remain;
-+
-+ if (!ep1_len)
-+ return;
-+ if (ep1_curdmalen)
-+ dma_unmap_single(NULL, ep1_curdmapos, ep1_curdmalen,
-+ DMA_FROM_DEVICE);
-+ ep1_len = ep1_curdmalen = 0;
-+ if (ep1_callback)
-+ ep1_callback(flag, size);
-+}
-+
-+void
-+ep1_state_change_notify( int new_state )
-+{
-+
-+}
-+
-+void
-+ep1_stall( void )
-+{
-+ /* SET_FEATURE force stall at UDC */
-+ UDC_set( Ser0UDCCS1, UDCCS1_FST );
-+}
-+
-+int
-+ep1_init(dma_regs_t *dmaregs)
-+{
-+ dmaregs_rx = dmaregs;
-+ sa1100_reset_dma(dmaregs_rx);
-+ ep1_done(-EAGAIN);
-+ return 0;
-+}
-+
-+void
-+ep1_reset(void)
-+{
-+ if (dmaregs_rx)
-+ sa1100_reset_dma(dmaregs_rx);
-+ UDC_clear(Ser0UDCCS1, UDCCS1_FST);
-+ ep1_done(-EINTR);
-+}
-+
-+void ep1_int_hndlr(int udcsr)
-+{
-+ dma_addr_t dma_addr;
-+ unsigned int len;
-+ int status = Ser0UDCCS1;
-+
-+ if ( naking ) printk( "%sEh? in ISR but naking = %d\n", "usbrx: ", naking );
-+
-+ if (status & UDCCS1_RPC) {
-+
-+ if (!ep1_curdmalen) {
-+ printk("usb_recv: RPC for non-existent buffer\n");
-+ naking=1;
-+ return;
-+ }
-+
-+ sa1100_stop_dma(dmaregs_rx);
-+
-+ if (status & UDCCS1_SST) {
-+ printk("usb_recv: stall sent OMP=%ld\n", Ser0UDCOMP);
-+ UDC_flip(Ser0UDCCS1, UDCCS1_SST);
-+ ep1_done(-EIO); // UDC aborted current transfer, so we do
-+ return;
-+ }
-+
-+ if (status & UDCCS1_RPE) {
-+ printk("usb_recv: RPError %x\n", status);
-+ UDC_flip(Ser0UDCCS1, UDCCS1_RPC);
-+ ep1_done(-EIO);
-+ return;
-+ }
-+
-+ dma_addr=sa1100_get_dma_pos(dmaregs_rx);
-+ dma_unmap_single(NULL, ep1_curdmapos, ep1_curdmalen,
-+ DMA_FROM_DEVICE);
-+ len = dma_addr - ep1_curdmapos;
-+#ifdef SA1100_USB_DEBUG
-+ if (sa1100_usb_debug) {
-+ int i;
-+ printk("usb rx %d :\n ",len);
-+ if (sa1100_usb_debug>1) {
-+ for (i=0; i<len; i++) {
-+ if ((i % 32)==31)
-+ printk("\n ");
-+ printk("%2.2x ",((char *)ep1_curdmapos)[i]);
-+ }
-+ }
-+ printk("\n");
-+ }
-+#endif
-+ if (len < ep1_curdmalen) {
-+ char *buf = ep1_curdmabuf + len;
-+ while (Ser0UDCCS1 & UDCCS1_RNE) {
-+ if (len >= ep1_curdmalen) {
-+ printk("usb_recv: too much data in fifo\n");
-+ break;
-+ }
-+ *buf++ = Ser0UDCDR;
-+ len++;
-+ }
-+ } else if (Ser0UDCCS1 & UDCCS1_RNE) {
-+ printk("usb_recv: fifo screwed, shouldn't contain data\n");
-+ len = 0;
-+ }
-+
-+#if defined(NCB_DMA_FIX)
-+// if (len && (ep1_buf != ep1_curdmabuf))
-+// memcpy(ep1_buf,ep1_curdmabuf,len);
-+ if (len)
-+ memcpy(&(((unsigned char *)ep1_buf)[ep1_used]),ep1_curdmabuf,len);
-+#endif
-+
-+ ep1_curdmalen = 0; /* dma unmap already done */
-+ ep1_remain -= len;
-+ ep1_used += len;
-+// ep1_curdmabuf += len; // use same buffer again
-+ naking = 1;
-+//printk("%s: received %d, %d remaining\n",__FUNCTION__,len,ep1_remain);
-+ if (len && (len == rx_pktsize))
-+ ep1_start();
-+ else
-+ ep1_done((len) ? 0 : -EPIPE);
-+ }
-+ /* else, you can get here if we are holding NAK */
-+}
-+
-+int
-+sa1100_usb_recv(struct usb_request *req, void (*callback)(int flag, int size))
-+{
-+ unsigned long flags;
-+ char *buf=req->buf;
-+ int len=req->length;
-+
-+ if (ep1_len)
-+ return -EBUSY;
-+
-+ local_irq_save(flags);
-+ ep1_buf = buf;
-+ ep1_len = len;
-+ ep1_callback = callback;
-+ ep1_remain = len;
-+ ep1_used = 0;
-+#ifdef NCB_DMA_FIX
-+// if (((size_t)buf)&3)
-+ if (1)
-+ ep1_curdmabuf = receive_buffer;
-+ else
-+#else
-+ ep1_curdmabuf = buf;
-+#endif
-+ ep1_curdmalen = 0;
-+ ep1_start();
-+ local_irq_restore(flags);
-+
-+ return 0;
-+}
-+
-+// ep2 handlers
-+
-+static char *ep2_buf;
-+static int ep2_len;
-+static void (*ep2_callback)(int status, int size);
-+static dma_addr_t ep2_dma;
-+static dma_addr_t ep2_curdmapos;
-+static int ep2_curdmalen;
-+static int ep2_remain;
-+static dma_regs_t *dmaregs_tx = NULL;
-+static int tx_pktsize;
-+
-+/* device state is changing, async */
-+void
-+ep2_state_change_notify( int new_state )
-+{
-+}
-+
-+/* set feature stall executing, async */
-+void
-+ep2_stall( void )
-+{
-+ UDC_set( Ser0UDCCS2, UDCCS2_FST ); /* force stall at UDC */
-+}
-+
-+static void
-+ep2_start(void)
-+{
-+ if (!ep2_len)
-+ return;
-+
-+ ep2_curdmalen = tx_pktsize;
-+ if (ep2_curdmalen > ep2_remain)
-+ ep2_curdmalen = ep2_remain;
-+
-+ /* must do this _before_ queue buffer.. */
-+ UDC_flip( Ser0UDCCS2,UDCCS2_TPC ); /* stop NAKing IN tokens */
-+ UDC_write( Ser0UDCIMP, ep2_curdmalen-1 );
-+
-+ Ser0UDCAR = usbd_info.address; // fighting stupid silicon bug
-+ sa1100_start_dma(dmaregs_tx, ep2_curdmapos, ep2_curdmalen);
-+}
-+
-+static void
-+ep2_done(int flag)
-+{
-+ int size = ep2_len - ep2_remain;
-+ if (ep2_len) {
-+ dma_unmap_single(NULL, ep2_dma, ep2_len, DMA_TO_DEVICE);
-+ ep2_len = 0;
-+ if (ep2_callback)
-+ ep2_callback(flag, size);
-+ }
-+}
-+
-+int ep2_init(dma_regs_t *dmaregs)
-+{
-+ dmaregs_tx = dmaregs;
-+ sa1100_reset_dma(dmaregs_tx);
-+ ep2_done(-EAGAIN);
-+ return 0;
-+}
-+
-+void ep2_reset(void)
-+{
-+ UDC_clear(Ser0UDCCS2, UDCCS2_FST);
-+ if (dmaregs_tx)
-+ sa1100_reset_dma(dmaregs_tx);
-+ ep2_done(-EINTR);
-+}
-+
-+void ep2_int_hndlr(int udcsr)
-+{
-+ int status = Ser0UDCCS2;
-+
-+ if (Ser0UDCAR != usbd_info.address) // check for stupid silicon bug.
-+ Ser0UDCAR = usbd_info.address;
-+
-+ if (status & UDCCS2_TPC) {
-+
-+ UDC_flip(Ser0UDCCS2, UDCCS2_SST);
-+
-+ sa1100_reset_dma(dmaregs_tx);
-+
-+ if (status & (UDCCS2_TPE | UDCCS2_TUR)) {
-+ printk("usb_send: transmit error %x\n", status);
-+ ep2_done(-EIO);
-+ } else {
-+ ep2_curdmapos += ep2_curdmalen;
-+ ep2_remain -= ep2_curdmalen;
-+
-+ if (ep2_remain != 0)
-+ ep2_start();
-+ else
-+ ep2_done(0);
-+ }
-+ } else {
-+ printk("usb_send: Not TPC: UDCCS2 = %x\n", status);
-+ }
-+}
-+
-+int
-+sa1100_usb_send(struct usb_request *req, void (*callback)(int status, int size))
-+{
-+ char *buf=req->buf;
-+ int len=req->length;
-+ unsigned long flags;
-+
-+ if (usbd_info.state != USB_STATE_CONFIGURED) {
-+ PRINTKD("%s: return -ENODEV\n",__FUNCTION__);
-+ return -ENODEV;
-+ }
-+
-+ if (ep2_len) {
-+ PRINTKD("%s: return -EBUSY\n",__FUNCTION__);
-+ return -EBUSY;
-+ }
-+
-+ local_irq_save(flags);
-+#ifdef NCB_DMA_FIX
-+ // if misaligned, copy to aligned buffer
-+// if (((size_t)buf)&3) {
-+ if (1) {
-+ PRINTKD("%s: copying %d bytes to send_buffer\n",__FUNCTION__,len);
-+ memcpy(send_buffer,buf,len);
-+ ep2_buf = send_buffer;
-+ }
-+ else
-+#endif
-+ ep2_buf = buf;
-+
-+ ep2_len = len;
-+ ep2_dma = dma_map_single(NULL, ep2_buf, len,DMA_TO_DEVICE);
-+ PRINTKD("%s: mapped dma to buffer(%p0\n",__FUNCTION__,buf);
-+
-+ ep2_callback = callback;
-+ ep2_remain = len;
-+ ep2_curdmapos = ep2_dma;
-+
-+ PRINTKD("%s: calling ep2_start\n",__FUNCTION__);
-+ ep2_start();
-+ local_irq_restore(flags);
-+
-+ return 0;
-+}
-+/*-------------------------------------------------------------------------*/
-+
-+static int
-+sa1100_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
-+{
-+ struct sa1100_udc *dev;
-+ struct sa1100_ep *ep;
-+ u32 max;
-+ int type;
-+
-+ ep = container_of (_ep, struct sa1100_ep, ep);
-+ if (!_ep || !desc || ep->desc || _ep->name == ep0name
-+ || desc->bDescriptorType != USB_DT_ENDPOINT) {
-+ PRINTKD("%s: _ep = %p, desc = %p\n",__FUNCTION__,_ep,desc);
-+ if (_ep && desc)
-+ PRINTKD("%s: ep->desc = %p, _ep->name = %s desc->bDescriptorType = %s\n",__FUNCTION__,ep->desc,_ep->name,
-+ (desc->bDescriptorType == USB_DT_ENDPOINT) ? "USB_DT_ENDPOINT":"bad!!");
-+ return -EINVAL;
-+ }
-+
-+ dev = ep->dev;
-+ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
-+ return -ESHUTDOWN;
-+
-+ type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
-+ max = le16_to_cpu (desc->wMaxPacketSize);
-+ switch (max) {
-+ case 64: case 32:
-+ /* note: maxpacket > 16 means DMA might overrun/underrun */
-+ case 16: case 8:
-+ break;
-+ default:
-+ if (type == USB_ENDPOINT_XFER_INT && max < 64)
-+ break;
-+ return -EDOM;
-+ }
-+
-+ switch (type) {
-+ case USB_ENDPOINT_XFER_BULK:
-+ case USB_ENDPOINT_XFER_INT:
-+ if (ep == &dev->ep[2]) {
-+ if (desc->bEndpointAddress != (USB_DIR_IN|2)) {
-+ PRINTKD("%s: ep[2] has invalid endpoint\n",__FUNCTION__);
-+ return -EINVAL;
-+ }
-+ tx_pktsize = max;
-+ Ser0UDCOMP = max - 1;
-+ PRINTKD("%s: ep2 max packet size is %d\n",__FUNCTION__,max);
-+ break;
-+ } else if (ep == &dev->ep[1]) {
-+ if (desc->bEndpointAddress != (USB_DIR_OUT|1)) {
-+ PRINTKD("%s: ep[1] has invalid endpoint\n",__FUNCTION__);
-+ return -EINVAL;
-+ }
-+ rx_pktsize = max;
-+ Ser0UDCIMP = max - 1;
-+ PRINTKD("%s: ep1 max packet size is %d\n",__FUNCTION__,max);
-+ break;
-+ }
-+ // FALLTHROUGH
-+ default:
-+ PRINTKD("%s: Invalid endpoint\n",__FUNCTION__);
-+ return -EINVAL;
-+ }
-+
-+ _ep->maxpacket = max;
-+ ep->desc = desc;
-+ ep->stopped = 0;
-+
-+ DEBUG (dev, "enabled %s %s max %04x\n", _ep->name,
-+ type_string (desc->bmAttributes), max);
-+
-+ return 0;
-+}
-+
-+static int sa1100_disable (struct usb_ep *_ep)
-+{
-+ struct sa1100_ep *ep;
-+
-+ ep = container_of (_ep, struct sa1100_ep, ep);
-+ if (!_ep || !ep->desc || _ep->name == ep0name)
-+ return -EINVAL;
-+
-+ nuke (ep, -ESHUTDOWN);
-+
-+ DEBUG (ep->dev, "disabled %s\n", _ep->name);
-+
-+ ep->desc = NULL;
-+ ep->stopped = 1;
-+ return 0;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static struct usb_request *
-+sa1100_alloc_request (struct usb_ep *_ep, gfp_t gfp_flags)
-+{
-+ struct sa1100_request *req;
-+
-+ if (!_ep)
-+ return 0;
-+
-+ req = kzalloc(sizeof *req, gfp_flags);
-+ if (!req)
-+ return 0;
-+
-+ memset (req, 0, sizeof *req);
-+ req->req.dma = DMA_ADDR_INVALID;
-+ INIT_LIST_HEAD (&req->queue);
-+ return &req->req;
-+}
-+
-+static void sa1100_free_request(struct usb_ep *_ep, struct usb_request *_req)
-+{
-+ struct sa1100_request *req;
-+
-+ req = container_of (_req, struct sa1100_request, req);
-+ WARN_ON (!list_empty (&req->queue));
-+ kfree(req); //NCB - see pxa2xx_udc
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static void done(struct sa1100_ep *ep, struct sa1100_request *req, int status)
-+{
-+ unsigned stopped = ep->stopped;
-+
-+ list_del_init (&req->queue);
-+
-+ if (likely(req->req.status == -EINPROGRESS))
-+ req->req.status = status;
-+ else
-+ status = req->req.status;
-+
-+ if (status && status != -ESHUTDOWN)
-+ VDEBUG (ep->dev, "complete %s req %p stat %d len %u/%u\n",
-+ ep->ep.name, &req->req, status,
-+ req->req.actual, req->req.length);
-+
-+ /* don't modify queue heads during completion callback */
-+ ep->stopped = 1;
-+ req->req.complete (&ep->ep, &req->req);
-+ ep->stopped = stopped;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/* FIXME move away from the old non-queued api.
-+ * - forces extra work on us
-+ * - stores request state twice
-+ * - doesn't let gadget driver handle dma mapping
-+ * - status codes need mapping
-+ */
-+
-+static int map_status(int status)
-+{
-+ switch (status) {
-+ case 0:
-+ case -EIO: /* ep[12]_int_handler */
-+ return status;
-+ case -EPIPE: /* ep1_int_handler */
-+ return 0;
-+ // case -EAGAIN: /* ep[12]_init */
-+ // case -EINTR: /* ep[12]_reset */
-+ default:
-+ return -ESHUTDOWN;
-+ }
-+}
-+
-+static void tx_callback(int status, int size)
-+{
-+ struct sa1100_ep *ep = &the_controller->ep[2];
-+ struct sa1100_request *req;
-+
-+ if (list_empty (&ep->queue)) {
-+ if (status != -EAGAIN)
-+ DEBUG (ep->dev, "%s, bogus tx callback %d/%d\n",
-+ ep->ep.name, status, size);
-+ return;
-+ }
-+ req = list_entry (ep->queue.next, struct sa1100_request, queue);
-+ req->req.actual = size;
-+ done (ep, req, map_status (status));
-+
-+ if (ep->stopped || list_empty (&ep->queue))
-+ return;
-+ req = list_entry (ep->queue.next, struct sa1100_request, queue);
-+ sa1100_usb_send (&req->req, tx_callback);
-+}
-+
-+static void rx_callback (int status, int size)
-+{
-+ struct sa1100_ep *ep = &the_controller->ep[1];
-+ struct sa1100_request *req;
-+
-+ if (list_empty (&ep->queue)) {
-+ if (status != -EAGAIN)
-+ DEBUG (ep->dev, "%s, bogus tx callback %d/%d\n",
-+ ep->ep.name, status, size);
-+ return;
-+ }
-+ req = list_entry (ep->queue.next, struct sa1100_request, queue);
-+ req->req.actual = size;
-+ done (ep, req, map_status (status));
-+
-+ if (ep->stopped || list_empty (&ep->queue))
-+ return;
-+ req = list_entry (ep->queue.next, struct sa1100_request, queue);
-+ sa1100_usb_recv (&req->req, rx_callback);
-+}
-+
-+
-+static int
-+sa1100_queue (struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
-+{
-+ struct sa1100_request *req;
-+ struct sa1100_ep *ep;
-+ struct sa1100_udc *dev;
-+ unsigned long flags;
-+
-+ req = container_of (_req, struct sa1100_request, req);
-+ if (!_req || !_req->complete || !_req->buf
-+ || !list_empty (&req->queue))
-+ return -EINVAL;
-+
-+ ep = container_of (_ep, struct sa1100_ep, ep);
-+ if (unlikely(!_ep || (!ep->desc && _ep->name != ep0name)))
-+ return -EINVAL;
-+
-+ dev = ep->dev;
-+ if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))
-+ return -ESHUTDOWN;
-+
-+ // handle ep0
-+ if (_ep->name == ep0name) {
-+ ep0_queue( _req->buf, _req->length, dev->ep0_req_len >=0 ? dev->ep0_req_len: _req->length );
-+ return 0;
-+ }
-+
-+ /* sa1100 udc can't write zlps */
-+ if (ep == &dev->ep[2] && _req->length == 0)
-+ return -ERANGE;
-+
-+ /* the old sa1100 api doesn't use 'unsigned' for lengths */
-+ if (_req->length > INT_MAX)
-+ return -ERANGE;
-+
-+ VDEBUG (dev, "%s queue req %p, len %d buf %p\n",
-+ _ep->name, _req, _req->length, _req->buf);
-+
-+ local_irq_save (flags);
-+
-+ _req->status = -EINPROGRESS;
-+ _req->actual = 0;
-+
-+ if (list_empty (&ep->queue) && !ep->stopped) {
-+ /* FIXME this does DMA mapping wrong. caller is allowed
-+ * to provide buffers that don't need mapping, but this
-+ * doesn't use them.
-+ */
-+ if (ep == &ep->dev->ep[2]) {
-+ PRINTKD("%s: sa1100_usb_send buf %p length %d\n",__FUNCTION__,_req->buf,_req->length);
-+ sa1100_usb_send (_req, tx_callback);
-+ }
-+ else if (ep == &ep->dev->ep[1]) {
-+ PRINTKD("%s: sa1100_usb_recv buf %p length %d\n",__FUNCTION__,_req->buf,_req->length);
-+ sa1100_usb_recv (_req, rx_callback);
-+ }
-+ /* ep0 rx/tx is handled separately */
-+ }
-+ list_add_tail (&req->queue, &ep->queue);
-+
-+ local_irq_restore (flags);
-+
-+ return 0;
-+}
-+
-+/* dequeue ALL requests */
-+static void nuke (struct sa1100_ep *ep, int status)
-+{
-+ struct sa1100_request *req;
-+
-+ /* called with irqs blocked */
-+ while (!list_empty (&ep->queue)) {
-+ req = list_entry (ep->queue.next,
-+ struct sa1100_request,
-+ queue);
-+ done (ep, req, status);
-+ }
-+ if (ep == &ep->dev->ep[1])
-+ ep1_reset ();
-+ else if (ep == &ep->dev->ep[2])
-+ ep2_reset ();
-+}
-+
-+/* dequeue JUST ONE request */
-+static int sa1100_dequeue (struct usb_ep *_ep, struct usb_request *_req)
-+{
-+ struct sa1100_ep *ep;
-+ struct sa1100_request *req;
-+ unsigned long flags;
-+
-+ ep = container_of (_ep, struct sa1100_ep, ep);
-+ if (!_ep || (!ep->desc && _ep->name != ep0name) || !_req)
-+ return -EINVAL;
-+
-+ local_irq_save (flags);
-+
-+ /* make sure it's actually queued on this endpoint */
-+ list_for_each_entry (req, &ep->queue, queue) {
-+ if (&req->req == _req)
-+ break;
-+ }
-+ if (&req->req != _req) {
-+ local_irq_restore(flags);
-+ return -EINVAL;
-+ }
-+
-+ done(ep, req, -ECONNRESET);
-+
-+ local_irq_restore(flags);
-+
-+ return 0;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static int
-+sa1100_set_halt (struct usb_ep *_ep, int value)
-+{
-+ struct sa1100_ep *ep;
-+
-+ ep = container_of (_ep, struct sa1100_ep, ep);
-+ if (unlikely(!_ep
-+ || (!ep->desc && _ep->name != ep0name))
-+ || (ep->desc->bmAttributes & 0x03) == USB_ENDPOINT_XFER_ISOC)
-+ return -EINVAL;
-+ if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
-+ return -ESHUTDOWN;
-+
-+ VDEBUG (ep->dev, "%s %s halt\n", _ep->name, value ? "set" : "clear");
-+
-+ /* set/clear, then synch memory views with the device */
-+ if (value) {
-+ if (ep == &ep->dev->ep[1])
-+ ep1_stall ();
-+ else
-+ ep2_stall ();
-+ } else {
-+ if (ep == &ep->dev->ep[1])
-+ ep1_reset ();
-+ else
-+ ep2_reset ();
-+ }
-+
-+ return 0;
-+}
-+
-+static struct usb_ep_ops sa1100_ep_ops = {
-+ .enable = sa1100_enable,
-+ .disable = sa1100_disable,
-+
-+ .alloc_request = sa1100_alloc_request,
-+ .free_request = sa1100_free_request,
-+
-+ .queue = sa1100_queue,
-+ .dequeue = sa1100_dequeue,
-+
-+ .set_halt = sa1100_set_halt,
-+ // .fifo_status = sa1100_fifo_status,
-+ // .fifo_flush = sa1100_fifo_flush,
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static int sa1100_get_frame (struct usb_gadget *_gadget)
-+{
-+ return -EOPNOTSUPP;
-+}
-+
-+static int sa1100_wakeup (struct usb_gadget *_gadget)
-+{
-+ struct sa1100_udc *dev;
-+
-+ if (!_gadget)
-+ return 0;
-+ dev = container_of (_gadget, struct sa1100_udc, gadget);
-+
-+ // FIXME
-+
-+ return 0;
-+}
-+
-+static const struct usb_gadget_ops sa1100_ops = {
-+ .get_frame = sa1100_get_frame,
-+ .wakeup = sa1100_wakeup,
-+
-+ // .set_selfpowered = sa1100_set_selfpowered,
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static inline void enable_resume_mask_suspend (void)
-+{
-+ int i = 0;
-+
-+ while (1) {
-+ Ser0UDCCR |= UDCCR_SUSIM; // mask future suspend events
-+ udelay (i);
-+ if ( (Ser0UDCCR & UDCCR_SUSIM) || (Ser0UDCSR & UDCSR_RSTIR))
-+ break;
-+ if (++i == 50) {
-+ WARN_ (&the_controller, "%s Could not set SUSIM %8.8lX\n",
-+ __FUNCTION__, Ser0UDCCR);
-+ break;
-+ }
-+ }
-+
-+ i = 0;
-+ while (1) {
-+ Ser0UDCCR &= ~UDCCR_RESIM;
-+ udelay (i);
-+ if ( (Ser0UDCCR & UDCCR_RESIM) == 0
-+ || (Ser0UDCSR & UDCSR_RSTIR))
-+ break;
-+ if (++i == 50) {
-+ WARN_ (&the_controller, "%s Could not clear RESIM %8.8lX\n",
-+ __FUNCTION__, Ser0UDCCR);
-+ break;
-+ }
-+ }
-+}
-+
-+static inline void enable_suspend_mask_resume (void)
-+{
-+ int i = 0;
-+ while (1) {
-+ Ser0UDCCR |= UDCCR_RESIM; // mask future resume events
-+ udelay (i);
-+ if (Ser0UDCCR & UDCCR_RESIM || (Ser0UDCSR & UDCSR_RSTIR))
-+ break;
-+ if (++i == 50) {
-+ WARN_ (&the_controller, "%s could not set RESIM %8.8lX\n",
-+ __FUNCTION__, Ser0UDCCR);
-+ break;
-+ }
-+ }
-+ i = 0;
-+ while (1) {
-+ Ser0UDCCR &= ~UDCCR_SUSIM;
-+ udelay (i);
-+ if ( (Ser0UDCCR & UDCCR_SUSIM) == 0
-+ || (Ser0UDCSR & UDCSR_RSTIR))
-+ break;
-+ if (++i == 50) {
-+ WARN_ (&the_controller, "%s Could not clear SUSIM %8.8lX\n",
-+ __FUNCTION__, Ser0UDCCR);
-+ break;
-+ }
-+ }
-+}
-+
-+// HACK DEBUG 3Mar01ww
-+// Well, maybe not, it really seems to help! 08Mar01ww
-+static void core_kicker (void)
-+{
-+ u32 car = Ser0UDCAR;
-+ u32 imp = Ser0UDCIMP;
-+ u32 omp = Ser0UDCOMP;
-+
-+ UDC_set (Ser0UDCCR, UDCCR_UDD);
-+ udelay (300);
-+ UDC_clear (Ser0UDCCR, UDCCR_UDD);
-+
-+ Ser0UDCAR = car;
-+ Ser0UDCIMP = imp;
-+ Ser0UDCOMP = omp;
-+}
-+
-+static irqreturn_t udc_int_hndlr(int irq, void *_dev)
-+{
-+ struct sa1100_udc *dev = _dev;
-+ u32 status = Ser0UDCSR;
-+
-+ PRINTKD("%s: status = 0x%x and control = 0x%lx\n", __FUNCTION__,
-+ status, Ser0UDCCR);
-+ /* ReSeT Interrupt Request - UDC has been reset */
-+ if (status & UDCSR_RSTIR) {
-+ PRINTKD("%s: processing UDCSR_RSTIR\n", __FUNCTION__);
-+ if (usbctl_next_state_on_event(kEvReset) != kError) {
-+ /* starting 20ms or so reset sequence now... */
-+ INFO (dev, "Resetting\n");
-+ ep0_reset(); // just set state to idle
-+ ep1_reset(); // flush dma, clear false stall
-+ ep2_reset(); // flush dma, clear false stall
-+ }
-+ // mask reset ints, they flood during sequence, enable
-+ // suspend and resume
-+ UDC_set(Ser0UDCCR, UDCCR_REM); // mask reset
-+ UDC_clear(Ser0UDCCR, (UDCCR_SUSIM | UDCCR_RESIM)); // enable suspend and resume
-+ UDC_flip(Ser0UDCSR, status); // clear all pending sources
-+ PRINTKD("%s: setting USB_FULL_SPEED\n",__FUNCTION__);
-+ dev->gadget.speed = USB_SPEED_FULL;
-+ return IRQ_HANDLED; // NCB
-+ }
-+
-+ /* else we have done something other than reset,
-+ * so be sure reset enabled
-+ */
-+ UDC_clear(Ser0UDCCR, UDCCR_REM);
-+
-+ /* RESume Interrupt Request */
-+ if (status & UDCSR_RESIR) {
-+ struct usb_gadget_driver *driver = dev->driver;
-+
-+ PRINTKD("%s: processing UDCSR_RESIR\n",__FUNCTION__);
-+ if (driver->resume)
-+ driver->resume (&dev->gadget);
-+ core_kicker ();
-+ enable_suspend_mask_resume ();
-+ }
-+
-+ /* SUSpend Interrupt Request */
-+ if (status & UDCSR_SUSIR) {
-+ struct usb_gadget_driver *driver = dev->driver;
-+
-+ PRINTKD("%s: processing UDCSR_SUSIR\n",__FUNCTION__);
-+ if (driver->suspend)
-+ driver->suspend (&dev->gadget);
-+ enable_resume_mask_suspend ();
-+ }
-+
-+ UDC_flip(Ser0UDCSR, status); // clear all pending sources
-+
-+ if (status & UDCSR_EIR)
-+ PRINTKD("%s: processing ep0_int_hndlr\n",__FUNCTION__);
-+ ep0_int_hndlr();
-+
-+ if (status & UDCSR_RIR) {
-+ PRINTKD("%s: processing ep1_int_hndlr\n",__FUNCTION__);
-+ ep1_int_hndlr(status);
-+ }
-+ if (status & UDCSR_TIR) {
-+ PRINTKD("%s: processing ep2_int_hndlr\n",__FUNCTION__);
-+ ep2_int_hndlr(status);
-+ }
-+
-+ return IRQ_HANDLED; // NCB
-+}
-+
-+/* soft_connect_hook ()
-+ * Some devices have platform-specific circuitry to make USB
-+ * not seem to be plugged in, even when it is. This allows
-+ * software to control when a device 'appears' on the USB bus
-+ * (after Linux has booted and this driver has loaded, for
-+ * example). If you have such a circuit, control it here.
-+ */
-+#ifdef CONFIG_SA1100_EXTENEX1
-+static void soft_connect_hook(int enable)
-+{
-+ if (machine_is_extenex1 ()) {
-+ if (enable) {
-+ PPDR |= PPC_USB_SOFT_CON;
-+ PPSR |= PPC_USB_SOFT_CON;
-+ } else {
-+ PPSR &= ~PPC_USB_SOFT_CON;
-+ PPDR &= ~PPC_USB_SOFT_CON;
-+ }
-+ }
-+}
-+#elif defined(CONFIG_SA1100_BALLOON)
-+static void soft_connect_hook(int enable)
-+{
-+ if (machine_is_balloon()) {
-+ if (enable)
-+ balloon_cpld_control(BALLOON_UDC_DISCONNECT, 0);
-+ else
-+ balloon_cpld_control(BALLOON_UDC_DISCONNECT, 1);
-+ }
-+}
-+#elif defined(CONFIG_SA1100_COLLIE)
-+static int collie_usb_init(void)
-+{
-+ int rc;
-+ rc = gpio_request(COLLIE_GPIO_LB_VOL_CHG, "usb enable");
-+ if (rc)
-+ return rc;
-+
-+ rc = gpio_direction_output(COLLIE_GPIO_LB_VOL_CHG, 1);
-+ if (rc)
-+ gpio_free(COLLIE_GPIO_LB_VOL_CHG);
-+
-+ return rc;
-+}
-+
-+static void collie_set_usb(int enable)
-+{
-+ gpio_set_value(COLLIE_GPIO_LB_VOL_CHG, enable);
-+}
-+
-+static void collie_usb_exit(void)
-+{
-+ gpio_free(COLLIE_GPIO_LB_VOL_CHG);
-+}
-+
-+static void soft_connect_hook(int enable)
-+{
-+ collie_set_usb(enable);
-+}
-+#else
-+#define soft_connect_hook(x) do { } while (0);
-+#endif
-+
-+/* "function" sysfs attribute */
-+static ssize_t
-+show_function(struct device *_dev, struct device_attribute *attr, char *buf)
-+{
-+ struct sa1100_udc *dev = dev_get_drvdata (_dev);
-+
-+ if (!dev->driver
-+ || !dev->driver->function
-+ || strlen(dev->driver->function) > PAGE_SIZE)
-+ return 0;
-+ return scnprintf (buf, PAGE_SIZE, "%s\n", dev->driver->function);
-+}
-+static DEVICE_ATTR(function, S_IRUGO, show_function, NULL);
-+
-+/* disable the UDC at the source */
-+static void udc_disable(struct sa1100_udc *dev)
-+{
-+ soft_connect_hook(0);
-+ UDC_set(Ser0UDCCR, UDCCR_UDD);
-+ dev->gadget.speed = USB_SPEED_UNKNOWN;
-+ ep0_idle(dev);
-+}
-+
-+static void udc_reinit(struct sa1100_udc *dev)
-+{
-+ u32 i;
-+
-+ /* Initialize the gadget controller data structure */
-+ INIT_LIST_HEAD(&dev->gadget.ep_list);
-+ INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
-+ ep0_idle(dev);
-+ for ( i = 0 ; i < 3 ; i++) {
-+ struct sa1100_ep *ep = &dev->ep[i];
-+ if (i != 0)
-+ list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
-+ ep->desc = NULL;
-+ ep->stopped = 0;
-+ INIT_LIST_HEAD(&ep->queue);
-+ }
-+}
-+
-+/* enable the udc at the source */
-+static void udc_enable(struct sa1100_udc *dev)
-+{
-+ UDC_clear (Ser0UDCCR, UDCCR_UDD);
-+ ep0_idle(dev);
-+}
-+
-+static void ep0_start(struct sa1100_udc *dev)
-+{
-+ udc_enable(dev);
-+ udelay(100);
-+
-+ /* clear stall - receiver seems to start stalled? 19Jan01ww */
-+ /* also clear other stuff just to be thurough 22Feb01ww */
-+ UDC_clear(Ser0UDCCS1, UDCCS1_FST | UDCCS1_RPE | UDCCS1_RPC );
-+ UDC_clear(Ser0UDCCS2, UDCCS2_FST | UDCCS2_TPE | UDCCS2_TPC );
-+
-+ /* mask everything */
-+ Ser0UDCCR = 0xFC;
-+
-+ /* flush DMA and fire through some -EAGAINs */
-+ ep1_init(dev->ep[1].dmaregs);
-+ ep2_init(dev->ep[2].dmaregs);
-+
-+ /* enable any platform specific hardware */
-+ soft_connect_hook(1);
-+
-+ /* clear all top-level sources */
-+ Ser0UDCSR = UDCSR_RSTIR | UDCSR_RESIR | UDCSR_EIR |
-+ UDCSR_RIR | UDCSR_TIR | UDCSR_SUSIR ;
-+
-+ /* EXERIMENT - a short line in the spec says toggling this
-+ * bit diddles the internal state machine in the udc to
-+ * expect a suspend
-+ */
-+ Ser0UDCCR |= UDCCR_RESIM;
-+ /* END EXPERIMENT 10Feb01ww */
-+
-+ /* enable any platform specific hardware */
-+ soft_connect_hook(1);
-+
-+ /* Enable interrupts. If you are unplugged you will immediately
-+ * get a suspend interrupt. If you are plugged and have a soft
-+ * connect-circuit, you will get a reset. If you are plugged
-+ * without a soft-connect, I think you also get suspend. In short,
-+ * start with suspend masked and everything else enabled
-+ */
-+ UDC_write(Ser0UDCCR, UDCCR_SUSIM);
-+}
-+
-+
-+/* when a driver is successfully registered, it will receive
-+ * control requests including set_configuration(), which enables
-+ * non-control requests. then usb traffic follows until a
-+ * disconnect is reported. then a host may connect again, or
-+ * the driver might get unbound.
-+ */
-+int usb_gadget_register_driver(struct usb_gadget_driver *driver)
-+{
-+ struct sa1100_udc *dev = the_controller;
-+ int retval;
-+
-+ if (!driver || !driver->bind || !driver->setup)
-+ return -EINVAL;
-+ if (!dev)
-+ return -ENODEV;
-+ if (dev->driver)
-+ return -EBUSY;
-+
-+ /* hook up the driver ... */
-+ dev->driver = driver;
-+ dev->gadget.dev.driver = &driver->driver;
-+
-+ retval = device_add(&dev->gadget.dev);
-+ if (retval != 0) {
-+ printk(KERN_ERR "Error in device_add() : %d\n",retval);
-+ goto register_error;
-+ }
-+
-+ retval = driver->bind (&dev->gadget);
-+ if (retval != 0) {
-+ DEBUG(dev, "bind to driver %s --> %d\n",
-+ driver->driver.name, retval);
-+ device_del(&dev->gadget.dev);
-+ goto register_error;
-+ }
-+
-+ retval = device_create_file(dev->dev, &dev_attr_function);
-+
-+ /* ... then enable host detection and ep0; and we're ready
-+ * for set_configuration as well as eventual disconnect.
-+ */
-+ ep0_start(dev);
-+
-+ DEBUG(dev, "%s ready\n", driver->driver.name);
-+
-+ return 0;
-+
-+register_error:
-+ dev->driver = NULL;
-+ dev->gadget.dev.driver = NULL;
-+ return retval;
-+}
-+EXPORT_SYMBOL (usb_gadget_register_driver);
-+
-+static void
-+stop_activity(struct sa1100_udc *dev, struct usb_gadget_driver *driver)
-+{
-+ int i;
-+
-+ /* don't disconnect if it's not connected */
-+ if (dev->gadget.speed == USB_SPEED_UNKNOWN)
-+ driver = NULL;
-+ dev->gadget.speed = USB_SPEED_UNKNOWN;
-+
-+ /* mask everything */
-+ Ser0UDCCR = 0xFC;
-+
-+ /* stop hardware; prevent new request submissions;
-+ * and kill any outstanding requests.
-+ */
-+ for (i = 0; i < 3; i++) {
-+ struct sa1100_ep *ep = &dev->ep[i];
-+ ep->stopped = 1;
-+ nuke(ep, -ESHUTDOWN);
-+ }
-+ udc_disable (dev);
-+
-+ /* report disconnect; the driver is already quiesced */
-+ if (driver)
-+ driver->disconnect(&dev->gadget);
-+
-+ /* re-init driver-visible data structures */
-+ udc_reinit(dev);
-+}
-+
-+int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
-+{
-+ struct sa1100_udc *dev = the_controller;
-+
-+ if (!dev)
-+ return -ENODEV;
-+ if (!driver || driver != dev->driver)
-+ return -EINVAL;
-+
-+ local_irq_disable();
-+ stop_activity (dev, driver);
-+ local_irq_enable();
-+ if (driver->unbind)
-+ driver->unbind(&dev->gadget);
-+ dev->driver = 0;
-+
-+ device_del(&dev->gadget.dev);
-+ device_remove_file(dev->dev, &dev_attr_function);
-+
-+ DEBUG (dev, "unregistered driver '%s'\n", driver->driver.name);
-+ return 0;
-+}
-+EXPORT_SYMBOL (usb_gadget_unregister_driver);
-+
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/*-------------------------------------------------------------------------*/
-+
-+//////////////////////////////////////////////////////////////////////////////
-+// Proc Filesystem Support
-+//////////////////////////////////////////////////////////////////////////////
-+
-+#if CONFIG_PROC_FS
-+
-+#define SAY(fmt,args...) p += sprintf (p, fmt, ## args)
-+#define SAYV(num) p += sprintf (p, num_fmt, "Value", num)
-+#define SAYC(label,yn) p += sprintf (p, yn_fmt, label, yn)
-+#define SAYS(label,v) p += sprintf (p, cnt_fmt, label, v)
-+
-+static int usbctl_read_proc (char *page, char **start, off_t off,
-+ int count, int *eof, void *data)
-+{
-+ const char * num_fmt = "%25.25s: %8.8lX\n";
-+ const char * cnt_fmt = "%25.25s: %lu\n";
-+ const char * yn_fmt = "%25.25s: %s\n";
-+ const char * yes = "YES";
-+ const char * no = "NO";
-+ unsigned long v;
-+ char * p = page;
-+ int len;
-+
-+ SAY ("SA1100 USB Controller Core\n");
-+
-+ SAYS ("ep0 bytes read", usbd_info.stats.ep0_bytes_read);
-+ SAYS ("ep0 bytes written", usbd_info.stats.ep0_bytes_written);
-+ SAYS ("ep0 FIFO read failures", usbd_info.stats.ep0_fifo_read_failures);
-+ SAYS ("ep0 FIFO write failures", usbd_info.stats.ep0_fifo_write_failures);
-+
-+ SAY ("\n");
-+
-+ v = Ser0UDCAR;
-+ SAY ("%25.25s: 0x%8.8lX - %ld\n", "Address Register", v, v);
-+ v = Ser0UDCIMP;
-+ SAY ("%25.25s: %ld (%8.8lX)\n", "IN max packet size", v+1, v);
-+ v = Ser0UDCOMP;
-+ SAY ("%25.25s: %ld (%8.8lX)\n", "OUT max packet size", v+1, v);
-+
-+ v = Ser0UDCCR;
-+ SAY ("\nUDC Mask Register\n");
-+ SAYV (v);
-+ SAYC ("UDC Active", (v & UDCCR_UDA) ? yes : no);
-+ SAYC ("Suspend interrupts masked", (v & UDCCR_SUSIM) ? yes : no);
-+ SAYC ("Resume interrupts masked", (v & UDCCR_RESIM) ? yes : no);
-+ SAYC ("Reset interrupts masked", (v & UDCCR_REM) ? yes : no);
-+
-+ v = Ser0UDCSR;
-+ SAY ("\nUDC Interrupt Request Register\n");
-+ SAYV (v);
-+ SAYC ("Reset pending", (v & UDCSR_RSTIR) ? yes : no);
-+ SAYC ("Suspend pending", (v & UDCSR_SUSIR) ? yes : no);
-+ SAYC ("Resume pending", (v & UDCSR_RESIR) ? yes : no);
-+ SAYC ("ep0 pending", (v & UDCSR_EIR) ? yes : no);
-+ SAYC ("receiver pending", (v & UDCSR_RIR) ? yes : no);
-+ SAYC ("tramsitter pending", (v & UDCSR_TIR) ? yes : no);
-+
-+#ifdef CONFIG_SA1100_EXTENEX1
-+ SAYC ("\nSoft connect", (PPSR & PPC_USB_SOFT_CON) ? "Visible" : "Hidden");
-+#endif
-+
-+#if 1
-+ SAY ("\nDMA Tx registers\n");
-+ {
-+ dma_regs_t *r=the_controller->ep[2].dmaregs;
-+ SAY (" DDAR");
-+ SAYV(r->DDAR);
-+ SAY (" DCSR");
-+ SAYV(r->RdDCSR);
-+ SAY (" DBSA (address buf A) ");
-+ SAYV(r->DBSA);
-+ SAY (" DBTA (transfer count A) ");
-+ SAYV(r->DBTA);
-+ SAY (" DBSB (address buf B) ");
-+ SAYV(r->DBSB);
-+ SAY (" DBTB (transfer count B) ");
-+ SAYV(r->DBTB);
-+
-+ }
-+ SAY ("\nDMA Rx registers\n");
-+ {
-+ dma_regs_t *r=the_controller->ep[1].dmaregs;
-+ SAY (" DDAR");
-+ SAYV(r->DDAR);
-+ SAY (" DCSR");
-+ SAYV(r->RdDCSR);
-+ SAY (" DBSA (address buf A) ");
-+ SAYV(r->DBSA);
-+ SAY (" DBTA (transfer count A) ");
-+ SAYV(r->DBTA);
-+ SAY (" DBSB (address buf B) ");
-+ SAYV(r->DBSB);
-+ SAY (" DBTB (transfer count B) ");
-+ SAYV(r->DBTB);
-+
-+ }
-+#endif
-+#if 1
-+ v = Ser0UDCCS0;
-+ SAY ("\nUDC Endpoint Zero Status Register\n");
-+ SAYV (v);
-+ SAYC ("Out Packet Ready", (v & UDCCS0_OPR) ? yes : no);
-+ SAYC ("In Packet Ready", (v & UDCCS0_IPR) ? yes : no);
-+ SAYC ("Sent Stall", (v & UDCCS0_SST) ? yes : no);
-+ SAYC ("Force Stall", (v & UDCCS0_FST) ? yes : no);
-+ SAYC ("Data End", (v & UDCCS0_DE) ? yes : no);
-+ SAYC ("Data Setup End", (v & UDCCS0_SE) ? yes : no);
-+ SAYC ("Serviced (SO)", (v & UDCCS0_SO) ? yes : no);
-+
-+ v = Ser0UDCCS1;
-+ SAY ("\nUDC Receiver Status Register\n");
-+ SAYV (v);
-+ SAYC ("Receive Packet Complete", (v & UDCCS1_RPC) ? yes : no);
-+ SAYC ("Sent Stall", (v & UDCCS1_SST) ? yes : no);
-+ SAYC ("Force Stall", (v & UDCCS1_FST) ? yes : no);
-+ SAYC ("Receive Packet Error", (v & UDCCS1_RPE) ? yes : no);
-+ SAYC ("Receive FIFO not empty", (v & UDCCS1_RNE) ? yes : no);
-+
-+ v = Ser0UDCCS2;
-+ SAY ("\nUDC Transmitter Status Register\n");
-+ SAYV (v);
-+ SAYC ("FIFO has < 8 of 16 chars", (v & UDCCS2_TFS) ? yes : no);
-+ SAYC ("Transmit Packet Complete", (v & UDCCS2_TPC) ? yes : no);
-+ SAYC ("Transmit FIFO underrun", (v & UDCCS2_TUR) ? yes : no);
-+ SAYC ("Transmit Packet Error", (v & UDCCS2_TPE) ? yes : no);
-+ SAYC ("Sent Stall", (v & UDCCS2_SST) ? yes : no);
-+ SAYC ("Force Stall", (v & UDCCS2_FST) ? yes : no);
-+#endif
-+
-+ len = (p - page) - off;
-+ if (len < 0)
-+ len = 0;
-+ *eof = (len <=count) ? 1 : 0;
-+ *start = page + off;
-+ return len;
-+}
-+
-+static inline void register_proc_entry (void)
-+{
-+ create_proc_read_entry (driver_name, 0, NULL,
-+ usbctl_read_proc, NULL);
-+}
-+
-+static inline void unregister_proc_entry (void)
-+{
-+ remove_proc_entry (driver_name, NULL);
-+}
-+
-+#else
-+
-+#define register_proc_entry() do {} while (0)
-+#define unregister_proc_entry() do {} while (0)
-+
-+#endif /* CONFIG_PROC_FS */
-+
-+/*-------------------------------------------------------------------------*/
-+
-+MODULE_DESCRIPTION ("sa1100_udc");
-+MODULE_AUTHOR ("Various");
-+MODULE_LICENSE ("GPL");
-+
-+static struct sa1100_udc memory = {
-+ .gadget = {
-+ .ops = &sa1100_ops,
-+ .ep0 = &memory.ep[0].ep,
-+ .name = driver_name,
-+ .dev = {
-+ .bus_id = "gadget",
-+ },
-+ },
-+
-+ /* control endpoint */
-+ .ep[0] = {
-+ .ep = {
-+ .name = ep0name,
-+ .ops = &sa1100_ep_ops,
-+ .maxpacket = EP0_FIFO_SIZE,
-+ },
-+ .dev = &memory,
-+ },
-+
-+ /* first group of endpoints */
-+ .ep[1] = {
-+ .ep = {
-+ .name = "ep1out-bulk",
-+ .ops = &sa1100_ep_ops,
-+ .maxpacket = BULK_FIFO_SIZE,
-+ },
-+ .dev = &memory,
-+ },
-+ .ep[2] = {
-+ .ep = {
-+ .name = "ep2in-bulk",
-+ .ops = &sa1100_ep_ops,
-+ .maxpacket = BULK_FIFO_SIZE,
-+ },
-+ .dev = &memory,
-+ }
-+};
-+
-+static int __init sa1100_udc_probe(struct device *_dev)
-+{
-+ struct sa1100_udc *dev = &memory;
-+ int retval = 0;
-+
-+ /* setup dev */
-+ dev->dev = _dev;
-+// dev->mach = _dev->platform_data;
-+
-+ device_initialize(&dev->gadget.dev);
-+ dev->gadget.dev.parent = _dev;
-+ dev->gadget.dev.dma_mask = _dev->dma_mask;
-+
-+ the_controller = dev;
-+ dev_set_drvdata(_dev, dev);
-+
-+ /* controller stays disabled until gadget driver is bound */
-+ udc_disable(dev);
-+ udc_reinit(dev);
-+
-+// spin_lock_init(&the_udc.lock);
-+ register_proc_entry();
-+
-+#if defined(CONFIG_SA1100_COLLIE)
-+ collie_usb_init();
-+#endif
-+
-+ /* setup dma channels and IRQ */
-+ retval = sa1100_request_dma(DMA_Ser0UDCRd, "USB receive",
-+ NULL, NULL, &dev->ep[1].dmaregs);
-+ if (retval) {
-+ ERROR(dev, "couldn't get rx dma, err %d\n", retval);
-+ goto err_rx_dma;
-+ }
-+ retval = sa1100_request_dma(DMA_Ser0UDCWr, "USB transmit",
-+ NULL, NULL, &dev->ep[2].dmaregs);
-+ if (retval) {
-+ ERROR(dev, "couldn't get tx dma, err %d\n", retval);
-+ goto err_tx_dma;
-+ }
-+ retval = request_irq(IRQ_Ser0UDC, udc_int_hndlr, IRQF_DISABLED,
-+ driver_name, dev);
-+ if (retval) {
-+ ERROR(dev, "couldn't get irq, err %d\n", retval);
-+ goto err_irq;
-+ }
-+
-+ INFO(dev, "initialized, rx %p tx %p irq %d\n",
-+ dev->ep[1].dmaregs, dev->ep[2].dmaregs, IRQ_Ser0UDC);
-+ return 0;
-+
-+err_irq:
-+ sa1100_free_dma(dev->ep[2].dmaregs);
-+ usbd_info.dmaregs_rx = 0;
-+err_tx_dma:
-+ sa1100_free_dma(dev->ep[1].dmaregs);
-+ usbd_info.dmaregs_tx = 0;
-+err_rx_dma:
-+ return retval;
-+}
-+
-+static int __exit sa1100_udc_remove(struct device *_dev)
-+{
-+ struct sa1100_udc *dev = dev_get_drvdata(_dev);
-+
-+ udc_disable(dev);
-+ unregister_proc_entry();
-+ usb_gadget_unregister_driver(dev->driver);
-+ sa1100_free_dma(dev->ep[1].dmaregs);
-+ sa1100_free_dma(dev->ep[2].dmaregs);
-+ free_irq(IRQ_Ser0UDC, dev);
-+ dev_set_drvdata(_dev,NULL);
-+ the_controller = NULL;
-+#if defined(CONFIG_SA1100_COLLIE)
-+ collie_usb_exit();
-+#endif
-+ return 0;
-+}
-+
-+static struct device_driver udc_driver = {
-+ .name = "sa11x0-udc",
-+ .bus = &platform_bus_type,
-+ .probe = sa1100_udc_probe,
-+ .remove = __exit_p(sa1100_udc_remove),
-+// .suspend = sa1100_udc_suspend,
-+// .resume = sa1100_udc_resume,
-+ .owner = THIS_MODULE,
-+};
-+
-+static int __init udc_init(void)
-+{
-+ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
-+#ifdef NCB_DMA_FIX
-+ send_buffer = (char*) kzalloc(SEND_BUFFER_SIZE, GFP_KERNEL | GFP_DMA );
-+ receive_buffer = (char*) kzalloc(RECEIVE_BUFFER_SIZE, GFP_KERNEL | GFP_DMA );
-+#endif
-+ return driver_register(&udc_driver);
-+}
-+module_init(udc_init);
-+
-+static void __exit udc_exit(void)
-+{
-+#ifdef NCB_DMA_FIX
-+ if (send_buffer) {
-+ kfree(send_buffer);
-+ send_buffer = NULL;
-+ }
-+ if (receive_buffer) {
-+ kfree(receive_buffer);
-+ receive_buffer = NULL;
-+ }
-+#endif
-+ driver_unregister(&udc_driver);
-+}
-+module_exit(udc_exit);
-diff --git a/drivers/usb/gadget/sa1100_udc.h b/drivers/usb/gadget/sa1100_udc.h
-new file mode 100644
-index 0000000..86fa28d
---- /dev/null
-+++ b/drivers/usb/gadget/sa1100_udc.h
-@@ -0,0 +1,94 @@
-+/*
-+ * internals of "new style" UDC controller
-+ * <linux/usb_gadget.h> replaces ARM-specific "sa1100_usb.h".
-+ */
-+
-+struct sa1100_ep {
-+ struct usb_ep ep;
-+ struct sa1100_udc *dev;
-+ //unsigned long irqs;
-+
-+ const struct usb_endpoint_descriptor *desc;
-+ struct list_head queue;
-+ dma_regs_t *dmaregs;
-+ unsigned stopped : 1;
-+};
-+
-+struct sa1100_request {
-+ struct usb_request req;
-+ struct list_head queue;
-+// NCB unsigned mapped : 1;
-+};
-+
-+enum ep0_state {
-+ EP0_IDLE,
-+ EP0_IN_DATA_PHASE,
-+ EP0_OUT_DATA_PHASE,
-+ EP0_END_XFER,
-+ EP0_STALL,
-+};
-+
-+#define EP0_FIFO_SIZE ((unsigned)8)
-+#define BULK_FIFO_SIZE ((unsigned)64)
-+//#define ISO_FIFO_SIZE ((unsigned)256)
-+//#define INT_FIFO_SIZE ((unsigned)8)
-+
-+struct udc_stats {
-+ struct ep0stats {
-+ unsigned long ops;
-+ unsigned long bytes;
-+ } read, write;
-+ unsigned long irqs;
-+};
-+
-+struct sa1100_udc {
-+ struct usb_gadget gadget;
-+ struct usb_gadget_driver *driver;
-+ struct device *dev;
-+ enum ep0_state ep0state;
-+ struct udc_stats stats;
-+// NCB spinlock_t lock;
-+// NCB dma_regs_t *dmaregs_tx, *dmaregs_rx;
-+ unsigned got_irq : 1,
-+ vbus : 1,
-+ pullup : 1,
-+ has_cfr : 1,
-+ req_pending : 1,
-+ req_std : 1,
-+ req_config : 1;
-+ struct timer_list timer;
-+ u64 dma_mask;
-+ unsigned char address;
-+ struct sa1100_ep ep[3];
-+ int ep0_req_len;
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+#define xprintk(dev,level,fmt,args...) \
-+ printk(level "%s: " fmt , driver_name , ## args)
-+
-+#ifdef DEBUG
-+#undef DEBUG
-+#define DEBUG(dev,fmt,args...) \
-+ xprintk(dev , KERN_DEBUG , fmt , ## args)
-+#else
-+#define DEBUG(dev,fmt,args...) \
-+ do { } while (0)
-+#endif /* DEBUG */
-+
-+#ifdef VERBOSE
-+#define VDEBUG DEBUG
-+#else
-+#define VDEBUG(dev,fmt,args...) \
-+ do { } while (0)
-+#endif /* VERBOSE */
-+
-+#define ERROR(dev,fmt,args...) \
-+ xprintk(dev , KERN_ERR , fmt , ## args)
-+#define WARN_(dev,fmt,args...) \
-+ xprintk(dev , KERN_WARNING , fmt , ## args)
-+#define INFO(dev,fmt,args...) \
-+ xprintk(dev , KERN_INFO , fmt , ## args)
-+
-+/*-------------------------------------------------------------------------*/
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch b/packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch
deleted file mode 100644
index fbf1b4573b..0000000000
--- a/packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 53fc40876ed9b753f935361fb1027718a184c41e Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Thu, 5 Feb 2009 00:49:03 +0100
-Subject: [PATCH 10/23] mmc_spi: add suspend and resume callbacks
-
----
- drivers/mmc/host/mmc_spi.c | 29 +++++++++++++++++++++++++++++
- 1 files changed, 29 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
-index ad00e16..ac6719b 100644
---- a/drivers/mmc/host/mmc_spi.c
-+++ b/drivers/mmc/host/mmc_spi.c
-@@ -1407,6 +1407,33 @@ static int __devexit mmc_spi_remove(struct spi_device *spi)
- return 0;
- }
-
-+#ifdef CONFIG_PM
-+static int mmc_spi_suspend(struct spi_device *spi, pm_message_t state)
-+{
-+ struct mmc_host *mmc = dev_get_drvdata(&spi->dev);
-+ struct mmc_spi_host *host = mmc_priv(mmc);
-+ int ret = 0;
-+
-+ if (mmc)
-+ ret = mmc_suspend_host(mmc, state);
-+ return ret;
-+}
-+
-+static int mmc_spi_resume(struct spi_device *spi)
-+{
-+ struct mmc_host *mmc = dev_get_drvdata(&spi->dev);
-+ int ret = 0;
-+
-+ if (mmc)
-+ ret = mmc_resume_host(mmc);
-+
-+ return ret;
-+}
-+#else
-+#define mmc_spi_suspend NULL
-+#define mmc_spi_resume NULL
-+#endif
-+
-
- static struct spi_driver mmc_spi_driver = {
- .driver = {
-@@ -1416,6 +1443,8 @@ static struct spi_driver mmc_spi_driver = {
- },
- .probe = mmc_spi_probe,
- .remove = __devexit_p(mmc_spi_remove),
-+ .suspend = mmc_spi_suspend,
-+ .resume = mmc_spi_resume,
- };
-
-
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch b/packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch
deleted file mode 100644
index 0bc3dbb713..0000000000
--- a/packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch
+++ /dev/null
@@ -1,803 +0,0 @@
-From c69779dac8693a3b057b3708d19f7013c6973bf2 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 14:54:57 +0100
-Subject: [PATCH 11/23] move drivers/mfd/*.h to include/linux/mfd
-
-So drivers like collie_battery driver can use
-those files easier.
----
- arch/arm/mach-sa1100/collie_pm.c | 2 +-
- drivers/mfd/mcp-core.c | 2 +-
- drivers/mfd/mcp-sa11x0.c | 2 +-
- drivers/mfd/mcp.h | 66 ----------
- drivers/mfd/ucb1x00-assabet.c | 2 +-
- drivers/mfd/ucb1x00-core.c | 2 +-
- drivers/mfd/ucb1x00-ts.c | 2 +-
- drivers/mfd/ucb1x00.h | 255 --------------------------------------
- include/linux/mfd/mcp.h | 68 ++++++++++
- include/linux/mfd/ucb1x00.h | 255 ++++++++++++++++++++++++++++++++++++++
- 10 files changed, 329 insertions(+), 327 deletions(-)
- delete mode 100644 drivers/mfd/mcp.h
- delete mode 100644 drivers/mfd/ucb1x00.h
- create mode 100644 include/linux/mfd/mcp.h
- create mode 100644 include/linux/mfd/ucb1x00.h
-
-diff --git a/arch/arm/mach-sa1100/collie_pm.c b/arch/arm/mach-sa1100/collie_pm.c
-index b1161fc..65b8b31 100644
---- a/arch/arm/mach-sa1100/collie_pm.c
-+++ b/arch/arm/mach-sa1100/collie_pm.c
-@@ -22,6 +22,7 @@
- #include <linux/interrupt.h>
- #include <linux/device.h>
- #include <linux/platform_device.h>
-+#include <linux/mfd/ucb1x00.h>
-
- #include <asm/irq.h>
- #include <mach/hardware.h>
-@@ -31,7 +32,6 @@
- #include <asm/mach/sharpsl_param.h>
- #include <asm/hardware/sharpsl_pm.h>
-
--#include "../drivers/mfd/ucb1x00.h"
-
- static struct ucb1x00 *ucb;
- static int ad_revise;
-diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
-index b4ed57e..64c806a 100644
---- a/drivers/mfd/mcp-core.c
-+++ b/drivers/mfd/mcp-core.c
-@@ -17,11 +17,11 @@
- #include <linux/device.h>
- #include <linux/slab.h>
- #include <linux/string.h>
-+#include <linux/mfd/mcp.h>
-
- #include <asm/dma.h>
- #include <asm/system.h>
-
--#include "mcp.h"
-
- #define to_mcp(d) container_of(d, struct mcp, attached_device)
- #define to_mcp_driver(d) container_of(d, struct mcp_driver, drv)
-diff --git a/drivers/mfd/mcp-sa11x0.c b/drivers/mfd/mcp-sa11x0.c
-index 28380b2..88c81cf 100644
---- a/drivers/mfd/mcp-sa11x0.c
-+++ b/drivers/mfd/mcp-sa11x0.c
-@@ -19,6 +19,7 @@
- #include <linux/spinlock.h>
- #include <linux/slab.h>
- #include <linux/platform_device.h>
-+#include <linux/mfd/mcp.h>
-
- #include <asm/dma.h>
- #include <mach/hardware.h>
-@@ -28,7 +29,6 @@
-
- #include <mach/assabet.h>
-
--#include "mcp.h"
-
- struct mcp_sa11x0 {
- u32 mccr0;
-diff --git a/drivers/mfd/mcp.h b/drivers/mfd/mcp.h
-deleted file mode 100644
-index c093a93..0000000
---- a/drivers/mfd/mcp.h
-+++ /dev/null
-@@ -1,66 +0,0 @@
--/*
-- * linux/drivers/mfd/mcp.h
-- *
-- * Copyright (C) 2001 Russell King, All Rights Reserved.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License.
-- */
--#ifndef MCP_H
--#define MCP_H
--
--struct mcp_ops;
--
--struct mcp {
-- struct module *owner;
-- struct mcp_ops *ops;
-- spinlock_t lock;
-- int use_count;
-- unsigned int sclk_rate;
-- unsigned int rw_timeout;
-- dma_device_t dma_audio_rd;
-- dma_device_t dma_audio_wr;
-- dma_device_t dma_telco_rd;
-- dma_device_t dma_telco_wr;
-- struct device attached_device;
--};
--
--struct mcp_ops {
-- void (*set_telecom_divisor)(struct mcp *, unsigned int);
-- void (*set_audio_divisor)(struct mcp *, unsigned int);
-- void (*reg_write)(struct mcp *, unsigned int, unsigned int);
-- unsigned int (*reg_read)(struct mcp *, unsigned int);
-- void (*enable)(struct mcp *);
-- void (*disable)(struct mcp *);
--};
--
--void mcp_set_telecom_divisor(struct mcp *, unsigned int);
--void mcp_set_audio_divisor(struct mcp *, unsigned int);
--void mcp_reg_write(struct mcp *, unsigned int, unsigned int);
--unsigned int mcp_reg_read(struct mcp *, unsigned int);
--void mcp_enable(struct mcp *);
--void mcp_disable(struct mcp *);
--#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
--
--struct mcp *mcp_host_alloc(struct device *, size_t);
--int mcp_host_register(struct mcp *);
--void mcp_host_unregister(struct mcp *);
--
--struct mcp_driver {
-- struct device_driver drv;
-- int (*probe)(struct mcp *);
-- void (*remove)(struct mcp *);
-- int (*suspend)(struct mcp *, pm_message_t);
-- int (*resume)(struct mcp *);
--};
--
--int mcp_driver_register(struct mcp_driver *);
--void mcp_driver_unregister(struct mcp_driver *);
--
--#define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device)
--#define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d)
--
--#define mcp_priv(mcp) ((void *)((mcp)+1))
--
--#endif
-diff --git a/drivers/mfd/ucb1x00-assabet.c b/drivers/mfd/ucb1x00-assabet.c
-index 61aeaf7..0f6f46d 100644
---- a/drivers/mfd/ucb1x00-assabet.c
-+++ b/drivers/mfd/ucb1x00-assabet.c
-@@ -14,10 +14,10 @@
- #include <linux/fs.h>
- #include <linux/proc_fs.h>
- #include <linux/device.h>
-+#include <linux/mfd/ucb1x00.h>
-
- #include <asm/dma.h>
-
--#include "ucb1x00.h"
-
- #define UCB1X00_ATTR(name,input)\
- static ssize_t name##_show(struct device *dev, struct device_attribute *attr, \
-diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
-index a316f1b..bc2c1ba 100644
---- a/drivers/mfd/ucb1x00-core.c
-+++ b/drivers/mfd/ucb1x00-core.c
-@@ -24,11 +24,11 @@
- #include <linux/interrupt.h>
- #include <linux/device.h>
- #include <linux/mutex.h>
-+#include <linux/mfd/ucb1x00.h>
-
- #include <asm/dma.h>
- #include <mach/hardware.h>
-
--#include "ucb1x00.h"
-
- static DEFINE_MUTEX(ucb1x00_mutex);
- static LIST_HEAD(ucb1x00_drivers);
-diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c
-index 44762ca..b5feae9 100644
---- a/drivers/mfd/ucb1x00-ts.c
-+++ b/drivers/mfd/ucb1x00-ts.c
-@@ -30,12 +30,12 @@
- #include <linux/freezer.h>
- #include <linux/slab.h>
- #include <linux/kthread.h>
-+#include <linux/mfd/ucb1x00.h>
-
- #include <asm/dma.h>
- #include <mach/collie.h>
- #include <asm/mach-types.h>
-
--#include "ucb1x00.h"
-
-
- struct ucb1x00_ts {
-diff --git a/drivers/mfd/ucb1x00.h b/drivers/mfd/ucb1x00.h
-deleted file mode 100644
-index a8ad8a0..0000000
---- a/drivers/mfd/ucb1x00.h
-+++ /dev/null
-@@ -1,255 +0,0 @@
--/*
-- * linux/drivers/mfd/ucb1x00.h
-- *
-- * Copyright (C) 2001 Russell King, All Rights Reserved.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License.
-- */
--#ifndef UCB1200_H
--#define UCB1200_H
--
--#define UCB_IO_DATA 0x00
--#define UCB_IO_DIR 0x01
--
--#define UCB_IO_0 (1 << 0)
--#define UCB_IO_1 (1 << 1)
--#define UCB_IO_2 (1 << 2)
--#define UCB_IO_3 (1 << 3)
--#define UCB_IO_4 (1 << 4)
--#define UCB_IO_5 (1 << 5)
--#define UCB_IO_6 (1 << 6)
--#define UCB_IO_7 (1 << 7)
--#define UCB_IO_8 (1 << 8)
--#define UCB_IO_9 (1 << 9)
--
--#define UCB_IE_RIS 0x02
--#define UCB_IE_FAL 0x03
--#define UCB_IE_STATUS 0x04
--#define UCB_IE_CLEAR 0x04
--#define UCB_IE_ADC (1 << 11)
--#define UCB_IE_TSPX (1 << 12)
--#define UCB_IE_TSMX (1 << 13)
--#define UCB_IE_TCLIP (1 << 14)
--#define UCB_IE_ACLIP (1 << 15)
--
--#define UCB_IRQ_TSPX 12
--
--#define UCB_TC_A 0x05
--#define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
--#define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */
--
--#define UCB_TC_B 0x06
--#define UCB_TC_B_VOICE_ENA (1 << 3)
--#define UCB_TC_B_CLIP (1 << 4)
--#define UCB_TC_B_ATT (1 << 6)
--#define UCB_TC_B_SIDE_ENA (1 << 11)
--#define UCB_TC_B_MUTE (1 << 13)
--#define UCB_TC_B_IN_ENA (1 << 14)
--#define UCB_TC_B_OUT_ENA (1 << 15)
--
--#define UCB_AC_A 0x07
--#define UCB_AC_B 0x08
--#define UCB_AC_B_LOOP (1 << 8)
--#define UCB_AC_B_MUTE (1 << 13)
--#define UCB_AC_B_IN_ENA (1 << 14)
--#define UCB_AC_B_OUT_ENA (1 << 15)
--
--#define UCB_TS_CR 0x09
--#define UCB_TS_CR_TSMX_POW (1 << 0)
--#define UCB_TS_CR_TSPX_POW (1 << 1)
--#define UCB_TS_CR_TSMY_POW (1 << 2)
--#define UCB_TS_CR_TSPY_POW (1 << 3)
--#define UCB_TS_CR_TSMX_GND (1 << 4)
--#define UCB_TS_CR_TSPX_GND (1 << 5)
--#define UCB_TS_CR_TSMY_GND (1 << 6)
--#define UCB_TS_CR_TSPY_GND (1 << 7)
--#define UCB_TS_CR_MODE_INT (0 << 8)
--#define UCB_TS_CR_MODE_PRES (1 << 8)
--#define UCB_TS_CR_MODE_POS (2 << 8)
--#define UCB_TS_CR_BIAS_ENA (1 << 11)
--#define UCB_TS_CR_TSPX_LOW (1 << 12)
--#define UCB_TS_CR_TSMX_LOW (1 << 13)
--
--#define UCB_ADC_CR 0x0a
--#define UCB_ADC_SYNC_ENA (1 << 0)
--#define UCB_ADC_VREFBYP_CON (1 << 1)
--#define UCB_ADC_INP_TSPX (0 << 2)
--#define UCB_ADC_INP_TSMX (1 << 2)
--#define UCB_ADC_INP_TSPY (2 << 2)
--#define UCB_ADC_INP_TSMY (3 << 2)
--#define UCB_ADC_INP_AD0 (4 << 2)
--#define UCB_ADC_INP_AD1 (5 << 2)
--#define UCB_ADC_INP_AD2 (6 << 2)
--#define UCB_ADC_INP_AD3 (7 << 2)
--#define UCB_ADC_EXT_REF (1 << 5)
--#define UCB_ADC_START (1 << 7)
--#define UCB_ADC_ENA (1 << 15)
--
--#define UCB_ADC_DATA 0x0b
--#define UCB_ADC_DAT_VAL (1 << 15)
--#define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5)
--
--#define UCB_ID 0x0c
--#define UCB_ID_1200 0x1004
--#define UCB_ID_1300 0x1005
--#define UCB_ID_TC35143 0x9712
--
--#define UCB_MODE 0x0d
--#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
--#define UCB_MODE_AUD_OFF_CAN (1 << 13)
--
--#include "mcp.h"
--
--struct ucb1x00_irq {
-- void *devid;
-- void (*fn)(int, void *);
--};
--
--struct ucb1x00 {
-- spinlock_t lock;
-- struct mcp *mcp;
-- unsigned int irq;
-- struct semaphore adc_sem;
-- spinlock_t io_lock;
-- u16 id;
-- u16 io_dir;
-- u16 io_out;
-- u16 adc_cr;
-- u16 irq_fal_enbl;
-- u16 irq_ris_enbl;
-- struct ucb1x00_irq irq_handler[16];
-- struct device dev;
-- struct list_head node;
-- struct list_head devs;
--};
--
--struct ucb1x00_driver;
--
--struct ucb1x00_dev {
-- struct list_head dev_node;
-- struct list_head drv_node;
-- struct ucb1x00 *ucb;
-- struct ucb1x00_driver *drv;
-- void *priv;
--};
--
--struct ucb1x00_driver {
-- struct list_head node;
-- struct list_head devs;
-- int (*add)(struct ucb1x00_dev *dev);
-- void (*remove)(struct ucb1x00_dev *dev);
-- int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state);
-- int (*resume)(struct ucb1x00_dev *dev);
--};
--
--#define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev)
--
--int ucb1x00_register_driver(struct ucb1x00_driver *);
--void ucb1x00_unregister_driver(struct ucb1x00_driver *);
--
--/**
-- * ucb1x00_clkrate - return the UCB1x00 SIB clock rate
-- * @ucb: UCB1x00 structure describing chip
-- *
-- * Return the SIB clock rate in Hz.
-- */
--static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb)
--{
-- return mcp_get_sclk_rate(ucb->mcp);
--}
--
--/**
-- * ucb1x00_enable - enable the UCB1x00 SIB clock
-- * @ucb: UCB1x00 structure describing chip
-- *
-- * Enable the SIB clock. This can be called multiple times.
-- */
--static inline void ucb1x00_enable(struct ucb1x00 *ucb)
--{
-- mcp_enable(ucb->mcp);
--}
--
--/**
-- * ucb1x00_disable - disable the UCB1x00 SIB clock
-- * @ucb: UCB1x00 structure describing chip
-- *
-- * Disable the SIB clock. The SIB clock will only be disabled
-- * when the number of ucb1x00_enable calls match the number of
-- * ucb1x00_disable calls.
-- */
--static inline void ucb1x00_disable(struct ucb1x00 *ucb)
--{
-- mcp_disable(ucb->mcp);
--}
--
--/**
-- * ucb1x00_reg_write - write a UCB1x00 register
-- * @ucb: UCB1x00 structure describing chip
-- * @reg: UCB1x00 4-bit register index to write
-- * @val: UCB1x00 16-bit value to write
-- *
-- * Write the UCB1x00 register @reg with value @val. The SIB
-- * clock must be running for this function to return.
-- */
--static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val)
--{
-- mcp_reg_write(ucb->mcp, reg, val);
--}
--
--/**
-- * ucb1x00_reg_read - read a UCB1x00 register
-- * @ucb: UCB1x00 structure describing chip
-- * @reg: UCB1x00 4-bit register index to write
-- *
-- * Read the UCB1x00 register @reg and return its value. The SIB
-- * clock must be running for this function to return.
-- */
--static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg)
--{
-- return mcp_reg_read(ucb->mcp, reg);
--}
--/**
-- * ucb1x00_set_audio_divisor -
-- * @ucb: UCB1x00 structure describing chip
-- * @div: SIB clock divisor
-- */
--static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div)
--{
-- mcp_set_audio_divisor(ucb->mcp, div);
--}
--
--/**
-- * ucb1x00_set_telecom_divisor -
-- * @ucb: UCB1x00 structure describing chip
-- * @div: SIB clock divisor
-- */
--static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div)
--{
-- mcp_set_telecom_divisor(ucb->mcp, div);
--}
--
--void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int);
--void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int);
--unsigned int ucb1x00_io_read(struct ucb1x00 *ucb);
--
--#define UCB_NOSYNC (0)
--#define UCB_SYNC (1)
--
--unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync);
--void ucb1x00_adc_enable(struct ucb1x00 *ucb);
--void ucb1x00_adc_disable(struct ucb1x00 *ucb);
--
--/*
-- * Which edges of the IRQ do you want to control today?
-- */
--#define UCB_RISING (1 << 0)
--#define UCB_FALLING (1 << 1)
--
--int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid);
--void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
--void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
--int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid);
--
--#endif
-diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h
-new file mode 100644
-index 0000000..be95e09
---- /dev/null
-+++ b/include/linux/mfd/mcp.h
-@@ -0,0 +1,68 @@
-+/*
-+ * linux/drivers/mfd/mcp.h
-+ *
-+ * Copyright (C) 2001 Russell King, All Rights Reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License.
-+ */
-+#ifndef MCP_H
-+#define MCP_H
-+
-+#include <mach/dma.h>
-+
-+struct mcp_ops;
-+
-+struct mcp {
-+ struct module *owner;
-+ struct mcp_ops *ops;
-+ spinlock_t lock;
-+ int use_count;
-+ unsigned int sclk_rate;
-+ unsigned int rw_timeout;
-+ dma_device_t dma_audio_rd;
-+ dma_device_t dma_audio_wr;
-+ dma_device_t dma_telco_rd;
-+ dma_device_t dma_telco_wr;
-+ struct device attached_device;
-+};
-+
-+struct mcp_ops {
-+ void (*set_telecom_divisor)(struct mcp *, unsigned int);
-+ void (*set_audio_divisor)(struct mcp *, unsigned int);
-+ void (*reg_write)(struct mcp *, unsigned int, unsigned int);
-+ unsigned int (*reg_read)(struct mcp *, unsigned int);
-+ void (*enable)(struct mcp *);
-+ void (*disable)(struct mcp *);
-+};
-+
-+void mcp_set_telecom_divisor(struct mcp *, unsigned int);
-+void mcp_set_audio_divisor(struct mcp *, unsigned int);
-+void mcp_reg_write(struct mcp *, unsigned int, unsigned int);
-+unsigned int mcp_reg_read(struct mcp *, unsigned int);
-+void mcp_enable(struct mcp *);
-+void mcp_disable(struct mcp *);
-+#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
-+
-+struct mcp *mcp_host_alloc(struct device *, size_t);
-+int mcp_host_register(struct mcp *);
-+void mcp_host_unregister(struct mcp *);
-+
-+struct mcp_driver {
-+ struct device_driver drv;
-+ int (*probe)(struct mcp *);
-+ void (*remove)(struct mcp *);
-+ int (*suspend)(struct mcp *, pm_message_t);
-+ int (*resume)(struct mcp *);
-+};
-+
-+int mcp_driver_register(struct mcp_driver *);
-+void mcp_driver_unregister(struct mcp_driver *);
-+
-+#define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device)
-+#define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d)
-+
-+#define mcp_priv(mcp) ((void *)((mcp)+1))
-+
-+#endif
-diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
-new file mode 100644
-index 0000000..eac3463
---- /dev/null
-+++ b/include/linux/mfd/ucb1x00.h
-@@ -0,0 +1,255 @@
-+/*
-+ * linux/include/mfd/ucb1x00.h
-+ *
-+ * Copyright (C) 2001 Russell King, All Rights Reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License.
-+ */
-+#ifndef UCB1200_H
-+#define UCB1200_H
-+
-+#include <linux/mfd/mcp.h>
-+#define UCB_IO_DATA 0x00
-+#define UCB_IO_DIR 0x01
-+
-+#define UCB_IO_0 (1 << 0)
-+#define UCB_IO_1 (1 << 1)
-+#define UCB_IO_2 (1 << 2)
-+#define UCB_IO_3 (1 << 3)
-+#define UCB_IO_4 (1 << 4)
-+#define UCB_IO_5 (1 << 5)
-+#define UCB_IO_6 (1 << 6)
-+#define UCB_IO_7 (1 << 7)
-+#define UCB_IO_8 (1 << 8)
-+#define UCB_IO_9 (1 << 9)
-+
-+#define UCB_IE_RIS 0x02
-+#define UCB_IE_FAL 0x03
-+#define UCB_IE_STATUS 0x04
-+#define UCB_IE_CLEAR 0x04
-+#define UCB_IE_ADC (1 << 11)
-+#define UCB_IE_TSPX (1 << 12)
-+#define UCB_IE_TSMX (1 << 13)
-+#define UCB_IE_TCLIP (1 << 14)
-+#define UCB_IE_ACLIP (1 << 15)
-+
-+#define UCB_IRQ_TSPX 12
-+
-+#define UCB_TC_A 0x05
-+#define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
-+#define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */
-+
-+#define UCB_TC_B 0x06
-+#define UCB_TC_B_VOICE_ENA (1 << 3)
-+#define UCB_TC_B_CLIP (1 << 4)
-+#define UCB_TC_B_ATT (1 << 6)
-+#define UCB_TC_B_SIDE_ENA (1 << 11)
-+#define UCB_TC_B_MUTE (1 << 13)
-+#define UCB_TC_B_IN_ENA (1 << 14)
-+#define UCB_TC_B_OUT_ENA (1 << 15)
-+
-+#define UCB_AC_A 0x07
-+#define UCB_AC_B 0x08
-+#define UCB_AC_B_LOOP (1 << 8)
-+#define UCB_AC_B_MUTE (1 << 13)
-+#define UCB_AC_B_IN_ENA (1 << 14)
-+#define UCB_AC_B_OUT_ENA (1 << 15)
-+
-+#define UCB_TS_CR 0x09
-+#define UCB_TS_CR_TSMX_POW (1 << 0)
-+#define UCB_TS_CR_TSPX_POW (1 << 1)
-+#define UCB_TS_CR_TSMY_POW (1 << 2)
-+#define UCB_TS_CR_TSPY_POW (1 << 3)
-+#define UCB_TS_CR_TSMX_GND (1 << 4)
-+#define UCB_TS_CR_TSPX_GND (1 << 5)
-+#define UCB_TS_CR_TSMY_GND (1 << 6)
-+#define UCB_TS_CR_TSPY_GND (1 << 7)
-+#define UCB_TS_CR_MODE_INT (0 << 8)
-+#define UCB_TS_CR_MODE_PRES (1 << 8)
-+#define UCB_TS_CR_MODE_POS (2 << 8)
-+#define UCB_TS_CR_BIAS_ENA (1 << 11)
-+#define UCB_TS_CR_TSPX_LOW (1 << 12)
-+#define UCB_TS_CR_TSMX_LOW (1 << 13)
-+
-+#define UCB_ADC_CR 0x0a
-+#define UCB_ADC_SYNC_ENA (1 << 0)
-+#define UCB_ADC_VREFBYP_CON (1 << 1)
-+#define UCB_ADC_INP_TSPX (0 << 2)
-+#define UCB_ADC_INP_TSMX (1 << 2)
-+#define UCB_ADC_INP_TSPY (2 << 2)
-+#define UCB_ADC_INP_TSMY (3 << 2)
-+#define UCB_ADC_INP_AD0 (4 << 2)
-+#define UCB_ADC_INP_AD1 (5 << 2)
-+#define UCB_ADC_INP_AD2 (6 << 2)
-+#define UCB_ADC_INP_AD3 (7 << 2)
-+#define UCB_ADC_EXT_REF (1 << 5)
-+#define UCB_ADC_START (1 << 7)
-+#define UCB_ADC_ENA (1 << 15)
-+
-+#define UCB_ADC_DATA 0x0b
-+#define UCB_ADC_DAT_VAL (1 << 15)
-+#define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5)
-+
-+#define UCB_ID 0x0c
-+#define UCB_ID_1200 0x1004
-+#define UCB_ID_1300 0x1005
-+#define UCB_ID_TC35143 0x9712
-+
-+#define UCB_MODE 0x0d
-+#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
-+#define UCB_MODE_AUD_OFF_CAN (1 << 13)
-+
-+
-+struct ucb1x00_irq {
-+ void *devid;
-+ void (*fn)(int, void *);
-+};
-+
-+struct ucb1x00 {
-+ spinlock_t lock;
-+ struct mcp *mcp;
-+ unsigned int irq;
-+ struct semaphore adc_sem;
-+ spinlock_t io_lock;
-+ u16 id;
-+ u16 io_dir;
-+ u16 io_out;
-+ u16 adc_cr;
-+ u16 irq_fal_enbl;
-+ u16 irq_ris_enbl;
-+ struct ucb1x00_irq irq_handler[16];
-+ struct device dev;
-+ struct list_head node;
-+ struct list_head devs;
-+};
-+
-+struct ucb1x00_driver;
-+
-+struct ucb1x00_dev {
-+ struct list_head dev_node;
-+ struct list_head drv_node;
-+ struct ucb1x00 *ucb;
-+ struct ucb1x00_driver *drv;
-+ void *priv;
-+};
-+
-+struct ucb1x00_driver {
-+ struct list_head node;
-+ struct list_head devs;
-+ int (*add)(struct ucb1x00_dev *dev);
-+ void (*remove)(struct ucb1x00_dev *dev);
-+ int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state);
-+ int (*resume)(struct ucb1x00_dev *dev);
-+};
-+
-+#define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev)
-+
-+int ucb1x00_register_driver(struct ucb1x00_driver *);
-+void ucb1x00_unregister_driver(struct ucb1x00_driver *);
-+
-+/**
-+ * ucb1x00_clkrate - return the UCB1x00 SIB clock rate
-+ * @ucb: UCB1x00 structure describing chip
-+ *
-+ * Return the SIB clock rate in Hz.
-+ */
-+static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb)
-+{
-+ return mcp_get_sclk_rate(ucb->mcp);
-+}
-+
-+/**
-+ * ucb1x00_enable - enable the UCB1x00 SIB clock
-+ * @ucb: UCB1x00 structure describing chip
-+ *
-+ * Enable the SIB clock. This can be called multiple times.
-+ */
-+static inline void ucb1x00_enable(struct ucb1x00 *ucb)
-+{
-+ mcp_enable(ucb->mcp);
-+}
-+
-+/**
-+ * ucb1x00_disable - disable the UCB1x00 SIB clock
-+ * @ucb: UCB1x00 structure describing chip
-+ *
-+ * Disable the SIB clock. The SIB clock will only be disabled
-+ * when the number of ucb1x00_enable calls match the number of
-+ * ucb1x00_disable calls.
-+ */
-+static inline void ucb1x00_disable(struct ucb1x00 *ucb)
-+{
-+ mcp_disable(ucb->mcp);
-+}
-+
-+/**
-+ * ucb1x00_reg_write - write a UCB1x00 register
-+ * @ucb: UCB1x00 structure describing chip
-+ * @reg: UCB1x00 4-bit register index to write
-+ * @val: UCB1x00 16-bit value to write
-+ *
-+ * Write the UCB1x00 register @reg with value @val. The SIB
-+ * clock must be running for this function to return.
-+ */
-+static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val)
-+{
-+ mcp_reg_write(ucb->mcp, reg, val);
-+}
-+
-+/**
-+ * ucb1x00_reg_read - read a UCB1x00 register
-+ * @ucb: UCB1x00 structure describing chip
-+ * @reg: UCB1x00 4-bit register index to write
-+ *
-+ * Read the UCB1x00 register @reg and return its value. The SIB
-+ * clock must be running for this function to return.
-+ */
-+static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg)
-+{
-+ return mcp_reg_read(ucb->mcp, reg);
-+}
-+/**
-+ * ucb1x00_set_audio_divisor -
-+ * @ucb: UCB1x00 structure describing chip
-+ * @div: SIB clock divisor
-+ */
-+static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div)
-+{
-+ mcp_set_audio_divisor(ucb->mcp, div);
-+}
-+
-+/**
-+ * ucb1x00_set_telecom_divisor -
-+ * @ucb: UCB1x00 structure describing chip
-+ * @div: SIB clock divisor
-+ */
-+static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div)
-+{
-+ mcp_set_telecom_divisor(ucb->mcp, div);
-+}
-+
-+void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int);
-+void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int);
-+unsigned int ucb1x00_io_read(struct ucb1x00 *ucb);
-+
-+#define UCB_NOSYNC (0)
-+#define UCB_SYNC (1)
-+
-+unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync);
-+void ucb1x00_adc_enable(struct ucb1x00 *ucb);
-+void ucb1x00_adc_disable(struct ucb1x00 *ucb);
-+
-+/*
-+ * Which edges of the IRQ do you want to control today?
-+ */
-+#define UCB_RISING (1 << 0)
-+#define UCB_FALLING (1 << 1)
-+
-+int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid);
-+void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
-+void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
-+int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid);
-+
-+#endif
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch b/packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch
deleted file mode 100644
index c1aafef5e2..0000000000
--- a/packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch
+++ /dev/null
@@ -1,981 +0,0 @@
-From 9e0d71c4a6247d88d3b772f6b05bcaa39711a937 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 19:31:25 +0100
-Subject: [PATCH 12/23] move ucb1200-ts driver
-
-Move the touchscreen driver to drivers/input/touchscreen
-where touchscreen drivers belong.
-
-Conflicts:
-
- drivers/input/touchscreen/Makefile
- drivers/mfd/Kconfig
- drivers/mfd/Makefile
-
-Conflicts:
-
- drivers/mfd/Kconfig
- drivers/mfd/Makefile
----
- drivers/input/touchscreen/Kconfig | 7 +
- drivers/input/touchscreen/Makefile | 1 +
- drivers/input/touchscreen/ucb1x00-ts.c | 438 ++++++++++++++++++++++++++++++++
- drivers/mfd/Kconfig | 3 -
- drivers/mfd/Makefile | 3 +-
- drivers/mfd/ucb1x00-ts.c | 438 --------------------------------
- 6 files changed, 447 insertions(+), 443 deletions(-)
- create mode 100644 drivers/input/touchscreen/ucb1x00-ts.c
- delete mode 100644 drivers/mfd/ucb1x00-ts.c
-
-diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
-index 3d1ab8f..3ac8cd6 100644
---- a/drivers/input/touchscreen/Kconfig
-+++ b/drivers/input/touchscreen/Kconfig
-@@ -221,6 +221,13 @@ config TOUCHSCREEN_ATMEL_TSADCC
- To compile this driver as a module, choose M here: the
- module will be called atmel_tsadcc.
-
-+config TOUCHSCREEN_UCB1200_TS
-+ tristate "Philips UCB1200 touchscreen"
-+ depends on MCP_UCB1200
-+ help
-+ This enabled support for the Pilips UCB1200 touchscreen interface
-+ and compatible.
-+
- config TOUCHSCREEN_UCB1400
- tristate "Philips UCB1400 touchscreen"
- depends on AC97_BUS
-diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
-index 15cf290..77ba930 100644
---- a/drivers/input/touchscreen/Makefile
-+++ b/drivers/input/touchscreen/Makefile
-@@ -25,6 +25,7 @@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
-+obj-$(CONFIG_TOUCHSCREEN_UCB1200_TS) += ucb1x00-ts.o
- obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
- obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o
- wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o
-diff --git a/drivers/input/touchscreen/ucb1x00-ts.c b/drivers/input/touchscreen/ucb1x00-ts.c
-new file mode 100644
-index 0000000..b5feae9
---- /dev/null
-+++ b/drivers/input/touchscreen/ucb1x00-ts.c
-@@ -0,0 +1,438 @@
-+/*
-+ * Touchscreen driver for UCB1x00-based touchscreens
-+ *
-+ * Copyright (C) 2001 Russell King, All Rights Reserved.
-+ * Copyright (C) 2005 Pavel Machek
-+ *
-+ * 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
-+ * published by the Free Software Foundation.
-+ *
-+ * 21-Jan-2002 <jco@ict.es> :
-+ *
-+ * Added support for synchronous A/D mode. This mode is useful to
-+ * avoid noise induced in the touchpanel by the LCD, provided that
-+ * the UCB1x00 has a valid LCD sync signal routed to its ADCSYNC pin.
-+ * It is important to note that the signal connected to the ADCSYNC
-+ * pin should provide pulses even when the LCD is blanked, otherwise
-+ * a pen touch needed to unblank the LCD will never be read.
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/smp.h>
-+#include <linux/sched.h>
-+#include <linux/completion.h>
-+#include <linux/delay.h>
-+#include <linux/string.h>
-+#include <linux/input.h>
-+#include <linux/device.h>
-+#include <linux/freezer.h>
-+#include <linux/slab.h>
-+#include <linux/kthread.h>
-+#include <linux/mfd/ucb1x00.h>
-+
-+#include <asm/dma.h>
-+#include <mach/collie.h>
-+#include <asm/mach-types.h>
-+
-+
-+
-+struct ucb1x00_ts {
-+ struct input_dev *idev;
-+ struct ucb1x00 *ucb;
-+
-+ wait_queue_head_t irq_wait;
-+ struct task_struct *rtask;
-+ u16 x_res;
-+ u16 y_res;
-+
-+ unsigned int restart:1;
-+ unsigned int adcsync:1;
-+};
-+
-+static int adcsync;
-+
-+static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
-+{
-+ struct input_dev *idev = ts->idev;
-+
-+ input_report_abs(idev, ABS_X, x);
-+ input_report_abs(idev, ABS_Y, y);
-+ input_report_abs(idev, ABS_PRESSURE, pressure);
-+ input_sync(idev);
-+}
-+
-+static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
-+{
-+ struct input_dev *idev = ts->idev;
-+
-+ input_report_abs(idev, ABS_PRESSURE, 0);
-+ input_sync(idev);
-+}
-+
-+/*
-+ * Switch to interrupt mode.
-+ */
-+static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
-+ UCB_TS_CR_MODE_INT);
-+}
-+
-+/*
-+ * Switch to pressure mode, and read pressure. We don't need to wait
-+ * here, since both plates are being driven.
-+ */
-+static inline unsigned int ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
-+{
-+ if (machine_is_collie()) {
-+ ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSPX_POW | UCB_TS_CR_TSMX_POW |
-+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
-+
-+ udelay(55);
-+
-+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync);
-+ } else {
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+
-+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
-+ }
-+}
-+
-+/*
-+ * Switch to X position mode and measure Y plate. We switch the plate
-+ * configuration in pressure mode, then switch to position mode. This
-+ * gives a faster response time. Even so, we need to wait about 55us
-+ * for things to stabilise.
-+ */
-+static inline unsigned int ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
-+{
-+ if (machine_is_collie())
-+ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-+ else {
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ }
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
-+
-+ udelay(55);
-+
-+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
-+}
-+
-+/*
-+ * Switch to Y position mode and measure X plate. We switch the plate
-+ * configuration in pressure mode, then switch to position mode. This
-+ * gives a faster response time. Even so, we need to wait about 55us
-+ * for things to stabilise.
-+ */
-+static inline unsigned int ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
-+{
-+ if (machine_is_collie())
-+ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-+ else {
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ }
-+
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
-+
-+ udelay(55);
-+
-+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync);
-+}
-+
-+/*
-+ * Switch to X plate resistance mode. Set MX to ground, PX to
-+ * supply. Measure current.
-+ */
-+static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
-+}
-+
-+/*
-+ * Switch to Y plate resistance mode. Set MY to ground, PY to
-+ * supply. Measure current.
-+ */
-+static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
-+}
-+
-+static inline int ucb1x00_ts_pen_down(struct ucb1x00_ts *ts)
-+{
-+ unsigned int val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR);
-+
-+ if (machine_is_collie())
-+ return (!(val & (UCB_TS_CR_TSPX_LOW)));
-+ else
-+ return (val & (UCB_TS_CR_TSPX_LOW | UCB_TS_CR_TSMX_LOW));
-+}
-+
-+/*
-+ * This is a RT kernel thread that handles the ADC accesses
-+ * (mainly so we can use semaphores in the UCB1200 core code
-+ * to serialise accesses to the ADC).
-+ */
-+static int ucb1x00_thread(void *_ts)
-+{
-+ struct ucb1x00_ts *ts = _ts;
-+ DECLARE_WAITQUEUE(wait, current);
-+ int valid = 0;
-+
-+ set_freezable();
-+ add_wait_queue(&ts->irq_wait, &wait);
-+ while (!kthread_should_stop()) {
-+ unsigned int x, y, p;
-+ signed long timeout;
-+
-+ ts->restart = 0;
-+
-+ ucb1x00_adc_enable(ts->ucb);
-+
-+ x = ucb1x00_ts_read_xpos(ts);
-+ y = ucb1x00_ts_read_ypos(ts);
-+ p = ucb1x00_ts_read_pressure(ts);
-+
-+ /*
-+ * Switch back to interrupt mode.
-+ */
-+ ucb1x00_ts_mode_int(ts);
-+ ucb1x00_adc_disable(ts->ucb);
-+
-+ msleep(10);
-+
-+ ucb1x00_enable(ts->ucb);
-+
-+
-+ if (ucb1x00_ts_pen_down(ts)) {
-+ set_current_state(TASK_INTERRUPTIBLE);
-+
-+ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, machine_is_collie() ? UCB_RISING : UCB_FALLING);
-+ ucb1x00_disable(ts->ucb);
-+
-+ /*
-+ * If we spat out a valid sample set last time,
-+ * spit out a "pen off" sample here.
-+ */
-+ if (valid) {
-+ ucb1x00_ts_event_release(ts);
-+ valid = 0;
-+ }
-+
-+ timeout = MAX_SCHEDULE_TIMEOUT;
-+ } else {
-+ ucb1x00_disable(ts->ucb);
-+
-+ /*
-+ * Filtering is policy. Policy belongs in user
-+ * space. We therefore leave it to user space
-+ * to do any filtering they please.
-+ */
-+ if (!ts->restart) {
-+ ucb1x00_ts_evt_add(ts, p, x, y);
-+ valid = 1;
-+ }
-+
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ timeout = HZ / 100;
-+ }
-+
-+ try_to_freeze();
-+
-+ schedule_timeout(timeout);
-+ }
-+
-+ remove_wait_queue(&ts->irq_wait, &wait);
-+
-+ ts->rtask = NULL;
-+ return 0;
-+}
-+
-+/*
-+ * We only detect touch screen _touches_ with this interrupt
-+ * handler, and even then we just schedule our task.
-+ */
-+static void ucb1x00_ts_irq(int idx, void *id)
-+{
-+ struct ucb1x00_ts *ts = id;
-+
-+ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_FALLING);
-+ wake_up(&ts->irq_wait);
-+}
-+
-+static int ucb1x00_ts_open(struct input_dev *idev)
-+{
-+ struct ucb1x00_ts *ts = input_get_drvdata(idev);
-+ int ret = 0;
-+
-+ BUG_ON(ts->rtask);
-+
-+ init_waitqueue_head(&ts->irq_wait);
-+ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
-+ if (ret < 0)
-+ goto out;
-+
-+ /*
-+ * If we do this at all, we should allow the user to
-+ * measure and read the X and Y resistance at any time.
-+ */
-+ ucb1x00_adc_enable(ts->ucb);
-+ ts->x_res = ucb1x00_ts_read_xres(ts);
-+ ts->y_res = ucb1x00_ts_read_yres(ts);
-+ ucb1x00_adc_disable(ts->ucb);
-+
-+ ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
-+ if (!IS_ERR(ts->rtask)) {
-+ ret = 0;
-+ } else {
-+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-+ ts->rtask = NULL;
-+ ret = -EFAULT;
-+ }
-+
-+ out:
-+ return ret;
-+}
-+
-+/*
-+ * Release touchscreen resources. Disable IRQs.
-+ */
-+static void ucb1x00_ts_close(struct input_dev *idev)
-+{
-+ struct ucb1x00_ts *ts = input_get_drvdata(idev);
-+
-+ if (ts->rtask)
-+ kthread_stop(ts->rtask);
-+
-+ ucb1x00_enable(ts->ucb);
-+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
-+ ucb1x00_disable(ts->ucb);
-+}
-+
-+#ifdef CONFIG_PM
-+static int ucb1x00_ts_resume(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_ts *ts = dev->priv;
-+
-+ if (ts->rtask != NULL) {
-+ /*
-+ * Restart the TS thread to ensure the
-+ * TS interrupt mode is set up again
-+ * after sleep.
-+ */
-+ ts->restart = 1;
-+ wake_up(&ts->irq_wait);
-+ }
-+ return 0;
-+}
-+#else
-+#define ucb1x00_ts_resume NULL
-+#endif
-+
-+
-+/*
-+ * Initialisation.
-+ */
-+static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_ts *ts;
-+ struct input_dev *idev;
-+ int err;
-+
-+ ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
-+ idev = input_allocate_device();
-+ if (!ts || !idev) {
-+ err = -ENOMEM;
-+ goto fail;
-+ }
-+
-+ ts->ucb = dev->ucb;
-+ ts->idev = idev;
-+ ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
-+
-+ idev->name = "Touchscreen panel";
-+ idev->id.product = ts->ucb->id;
-+ idev->open = ucb1x00_ts_open;
-+ idev->close = ucb1x00_ts_close;
-+
-+ __set_bit(EV_ABS, idev->evbit);
-+ __set_bit(ABS_X, idev->absbit);
-+ __set_bit(ABS_Y, idev->absbit);
-+ __set_bit(ABS_PRESSURE, idev->absbit);
-+
-+ input_set_drvdata(idev, ts);
-+
-+ err = input_register_device(idev);
-+ if (err)
-+ goto fail;
-+
-+ dev->priv = ts;
-+
-+ return 0;
-+
-+ fail:
-+ input_free_device(idev);
-+ kfree(ts);
-+ return err;
-+}
-+
-+static void ucb1x00_ts_remove(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_ts *ts = dev->priv;
-+
-+ input_unregister_device(ts->idev);
-+ kfree(ts);
-+}
-+
-+static struct ucb1x00_driver ucb1x00_ts_driver = {
-+ .add = ucb1x00_ts_add,
-+ .remove = ucb1x00_ts_remove,
-+ .resume = ucb1x00_ts_resume,
-+};
-+
-+static int __init ucb1x00_ts_init(void)
-+{
-+ return ucb1x00_register_driver(&ucb1x00_ts_driver);
-+}
-+
-+static void __exit ucb1x00_ts_exit(void)
-+{
-+ ucb1x00_unregister_driver(&ucb1x00_ts_driver);
-+}
-+
-+module_param(adcsync, int, 0444);
-+module_init(ucb1x00_ts_init);
-+module_exit(ucb1x00_ts_exit);
-+
-+MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
-+MODULE_DESCRIPTION("UCB1x00 touchscreen driver");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
-index 2572773..bbc137d 100644
---- a/drivers/mfd/Kconfig
-+++ b/drivers/mfd/Kconfig
-@@ -172,8 +172,5 @@ config MCP_UCB1200
- tristate "Support for UCB1200 / UCB1300"
- depends on MCP
-
--config MCP_UCB1200_TS
-- tristate "Touchscreen interface support"
-- depends on MCP_UCB1200 && INPUT
-
- endmenu
-diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
-index 9a5ad8a..4981aff 100644
---- a/drivers/mfd/Makefile
-+++ b/drivers/mfd/Makefile
-@@ -24,11 +24,10 @@ obj-$(CONFIG_MFD_CORE) += mfd-core.o
- obj-$(CONFIG_MCP) += mcp-core.o
- obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
- obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
--obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00-ts.o
-
- ifeq ($(CONFIG_SA1100_ASSABET),y)
- obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
- endif
- obj-$(CONFIG_UCB1400_CORE) += ucb1400_core.o
-
--obj-$(CONFIG_PMIC_DA903X) += da903x.o
-\ No newline at end of file
-+obj-$(CONFIG_PMIC_DA903X) += da903x.o
-diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c
-deleted file mode 100644
-index b5feae9..0000000
---- a/drivers/mfd/ucb1x00-ts.c
-+++ /dev/null
-@@ -1,438 +0,0 @@
--/*
-- * Touchscreen driver for UCB1x00-based touchscreens
-- *
-- * Copyright (C) 2001 Russell King, All Rights Reserved.
-- * Copyright (C) 2005 Pavel Machek
-- *
-- * 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
-- * published by the Free Software Foundation.
-- *
-- * 21-Jan-2002 <jco@ict.es> :
-- *
-- * Added support for synchronous A/D mode. This mode is useful to
-- * avoid noise induced in the touchpanel by the LCD, provided that
-- * the UCB1x00 has a valid LCD sync signal routed to its ADCSYNC pin.
-- * It is important to note that the signal connected to the ADCSYNC
-- * pin should provide pulses even when the LCD is blanked, otherwise
-- * a pen touch needed to unblank the LCD will never be read.
-- */
--#include <linux/module.h>
--#include <linux/moduleparam.h>
--#include <linux/init.h>
--#include <linux/smp.h>
--#include <linux/sched.h>
--#include <linux/completion.h>
--#include <linux/delay.h>
--#include <linux/string.h>
--#include <linux/input.h>
--#include <linux/device.h>
--#include <linux/freezer.h>
--#include <linux/slab.h>
--#include <linux/kthread.h>
--#include <linux/mfd/ucb1x00.h>
--
--#include <asm/dma.h>
--#include <mach/collie.h>
--#include <asm/mach-types.h>
--
--
--
--struct ucb1x00_ts {
-- struct input_dev *idev;
-- struct ucb1x00 *ucb;
--
-- wait_queue_head_t irq_wait;
-- struct task_struct *rtask;
-- u16 x_res;
-- u16 y_res;
--
-- unsigned int restart:1;
-- unsigned int adcsync:1;
--};
--
--static int adcsync;
--
--static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
--{
-- struct input_dev *idev = ts->idev;
--
-- input_report_abs(idev, ABS_X, x);
-- input_report_abs(idev, ABS_Y, y);
-- input_report_abs(idev, ABS_PRESSURE, pressure);
-- input_sync(idev);
--}
--
--static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
--{
-- struct input_dev *idev = ts->idev;
--
-- input_report_abs(idev, ABS_PRESSURE, 0);
-- input_sync(idev);
--}
--
--/*
-- * Switch to interrupt mode.
-- */
--static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
--{
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
-- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
-- UCB_TS_CR_MODE_INT);
--}
--
--/*
-- * Switch to pressure mode, and read pressure. We don't need to wait
-- * here, since both plates are being driven.
-- */
--static inline unsigned int ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
--{
-- if (machine_is_collie()) {
-- ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSPX_POW | UCB_TS_CR_TSMX_POW |
-- UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
--
-- udelay(55);
--
-- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync);
-- } else {
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
-- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
--
-- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
-- }
--}
--
--/*
-- * Switch to X position mode and measure Y plate. We switch the plate
-- * configuration in pressure mode, then switch to position mode. This
-- * gives a faster response time. Even so, we need to wait about 55us
-- * for things to stabilise.
-- */
--static inline unsigned int ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
--{
-- if (machine_is_collie())
-- ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-- else {
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-- }
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-- UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
--
-- udelay(55);
--
-- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
--}
--
--/*
-- * Switch to Y position mode and measure X plate. We switch the plate
-- * configuration in pressure mode, then switch to position mode. This
-- * gives a faster response time. Even so, we need to wait about 55us
-- * for things to stabilise.
-- */
--static inline unsigned int ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
--{
-- if (machine_is_collie())
-- ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-- else {
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-- }
--
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-- UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
--
-- udelay(55);
--
-- return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync);
--}
--
--/*
-- * Switch to X plate resistance mode. Set MX to ground, PX to
-- * supply. Measure current.
-- */
--static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
--{
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-- return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
--}
--
--/*
-- * Switch to Y plate resistance mode. Set MY to ground, PY to
-- * supply. Measure current.
-- */
--static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
--{
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-- UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-- UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-- return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
--}
--
--static inline int ucb1x00_ts_pen_down(struct ucb1x00_ts *ts)
--{
-- unsigned int val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR);
--
-- if (machine_is_collie())
-- return (!(val & (UCB_TS_CR_TSPX_LOW)));
-- else
-- return (val & (UCB_TS_CR_TSPX_LOW | UCB_TS_CR_TSMX_LOW));
--}
--
--/*
-- * This is a RT kernel thread that handles the ADC accesses
-- * (mainly so we can use semaphores in the UCB1200 core code
-- * to serialise accesses to the ADC).
-- */
--static int ucb1x00_thread(void *_ts)
--{
-- struct ucb1x00_ts *ts = _ts;
-- DECLARE_WAITQUEUE(wait, current);
-- int valid = 0;
--
-- set_freezable();
-- add_wait_queue(&ts->irq_wait, &wait);
-- while (!kthread_should_stop()) {
-- unsigned int x, y, p;
-- signed long timeout;
--
-- ts->restart = 0;
--
-- ucb1x00_adc_enable(ts->ucb);
--
-- x = ucb1x00_ts_read_xpos(ts);
-- y = ucb1x00_ts_read_ypos(ts);
-- p = ucb1x00_ts_read_pressure(ts);
--
-- /*
-- * Switch back to interrupt mode.
-- */
-- ucb1x00_ts_mode_int(ts);
-- ucb1x00_adc_disable(ts->ucb);
--
-- msleep(10);
--
-- ucb1x00_enable(ts->ucb);
--
--
-- if (ucb1x00_ts_pen_down(ts)) {
-- set_current_state(TASK_INTERRUPTIBLE);
--
-- ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, machine_is_collie() ? UCB_RISING : UCB_FALLING);
-- ucb1x00_disable(ts->ucb);
--
-- /*
-- * If we spat out a valid sample set last time,
-- * spit out a "pen off" sample here.
-- */
-- if (valid) {
-- ucb1x00_ts_event_release(ts);
-- valid = 0;
-- }
--
-- timeout = MAX_SCHEDULE_TIMEOUT;
-- } else {
-- ucb1x00_disable(ts->ucb);
--
-- /*
-- * Filtering is policy. Policy belongs in user
-- * space. We therefore leave it to user space
-- * to do any filtering they please.
-- */
-- if (!ts->restart) {
-- ucb1x00_ts_evt_add(ts, p, x, y);
-- valid = 1;
-- }
--
-- set_current_state(TASK_INTERRUPTIBLE);
-- timeout = HZ / 100;
-- }
--
-- try_to_freeze();
--
-- schedule_timeout(timeout);
-- }
--
-- remove_wait_queue(&ts->irq_wait, &wait);
--
-- ts->rtask = NULL;
-- return 0;
--}
--
--/*
-- * We only detect touch screen _touches_ with this interrupt
-- * handler, and even then we just schedule our task.
-- */
--static void ucb1x00_ts_irq(int idx, void *id)
--{
-- struct ucb1x00_ts *ts = id;
--
-- ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_FALLING);
-- wake_up(&ts->irq_wait);
--}
--
--static int ucb1x00_ts_open(struct input_dev *idev)
--{
-- struct ucb1x00_ts *ts = input_get_drvdata(idev);
-- int ret = 0;
--
-- BUG_ON(ts->rtask);
--
-- init_waitqueue_head(&ts->irq_wait);
-- ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
-- if (ret < 0)
-- goto out;
--
-- /*
-- * If we do this at all, we should allow the user to
-- * measure and read the X and Y resistance at any time.
-- */
-- ucb1x00_adc_enable(ts->ucb);
-- ts->x_res = ucb1x00_ts_read_xres(ts);
-- ts->y_res = ucb1x00_ts_read_yres(ts);
-- ucb1x00_adc_disable(ts->ucb);
--
-- ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
-- if (!IS_ERR(ts->rtask)) {
-- ret = 0;
-- } else {
-- ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-- ts->rtask = NULL;
-- ret = -EFAULT;
-- }
--
-- out:
-- return ret;
--}
--
--/*
-- * Release touchscreen resources. Disable IRQs.
-- */
--static void ucb1x00_ts_close(struct input_dev *idev)
--{
-- struct ucb1x00_ts *ts = input_get_drvdata(idev);
--
-- if (ts->rtask)
-- kthread_stop(ts->rtask);
--
-- ucb1x00_enable(ts->ucb);
-- ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-- ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
-- ucb1x00_disable(ts->ucb);
--}
--
--#ifdef CONFIG_PM
--static int ucb1x00_ts_resume(struct ucb1x00_dev *dev)
--{
-- struct ucb1x00_ts *ts = dev->priv;
--
-- if (ts->rtask != NULL) {
-- /*
-- * Restart the TS thread to ensure the
-- * TS interrupt mode is set up again
-- * after sleep.
-- */
-- ts->restart = 1;
-- wake_up(&ts->irq_wait);
-- }
-- return 0;
--}
--#else
--#define ucb1x00_ts_resume NULL
--#endif
--
--
--/*
-- * Initialisation.
-- */
--static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
--{
-- struct ucb1x00_ts *ts;
-- struct input_dev *idev;
-- int err;
--
-- ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
-- idev = input_allocate_device();
-- if (!ts || !idev) {
-- err = -ENOMEM;
-- goto fail;
-- }
--
-- ts->ucb = dev->ucb;
-- ts->idev = idev;
-- ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
--
-- idev->name = "Touchscreen panel";
-- idev->id.product = ts->ucb->id;
-- idev->open = ucb1x00_ts_open;
-- idev->close = ucb1x00_ts_close;
--
-- __set_bit(EV_ABS, idev->evbit);
-- __set_bit(ABS_X, idev->absbit);
-- __set_bit(ABS_Y, idev->absbit);
-- __set_bit(ABS_PRESSURE, idev->absbit);
--
-- input_set_drvdata(idev, ts);
--
-- err = input_register_device(idev);
-- if (err)
-- goto fail;
--
-- dev->priv = ts;
--
-- return 0;
--
-- fail:
-- input_free_device(idev);
-- kfree(ts);
-- return err;
--}
--
--static void ucb1x00_ts_remove(struct ucb1x00_dev *dev)
--{
-- struct ucb1x00_ts *ts = dev->priv;
--
-- input_unregister_device(ts->idev);
-- kfree(ts);
--}
--
--static struct ucb1x00_driver ucb1x00_ts_driver = {
-- .add = ucb1x00_ts_add,
-- .remove = ucb1x00_ts_remove,
-- .resume = ucb1x00_ts_resume,
--};
--
--static int __init ucb1x00_ts_init(void)
--{
-- return ucb1x00_register_driver(&ucb1x00_ts_driver);
--}
--
--static void __exit ucb1x00_ts_exit(void)
--{
-- ucb1x00_unregister_driver(&ucb1x00_ts_driver);
--}
--
--module_param(adcsync, int, 0444);
--module_init(ucb1x00_ts_init);
--module_exit(ucb1x00_ts_exit);
--
--MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
--MODULE_DESCRIPTION("UCB1x00 touchscreen driver");
--MODULE_LICENSE("GPL");
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch b/packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch
deleted file mode 100644
index 92159d5649..0000000000
--- a/packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch
+++ /dev/null
@@ -1,528 +0,0 @@
-From 40787f3e48d1cc1e63dc5dd6aeda720f688fc05e Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 20 Oct 2008 17:44:23 +0200
-Subject: [PATCH 13/23] add collie touchscreen driver
-
----
- drivers/input/touchscreen/Kconfig | 6 +
- drivers/input/touchscreen/Makefile | 1 +
- drivers/input/touchscreen/collie-ts.c | 449 +++++++++++++++++++++++++++++++++
- drivers/mfd/Makefile | 1 -
- include/linux/mfd/ucb1x00.h | 3 +
- 5 files changed, 459 insertions(+), 1 deletions(-)
- create mode 100644 drivers/input/touchscreen/collie-ts.c
-
-diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
-index 3ac8cd6..a9f89ed 100644
---- a/drivers/input/touchscreen/Kconfig
-+++ b/drivers/input/touchscreen/Kconfig
-@@ -228,6 +228,12 @@ config TOUCHSCREEN_UCB1200_TS
- This enabled support for the Pilips UCB1200 touchscreen interface
- and compatible.
-
-+config TOUCHSCREEN_COLLIE_TS
-+ tristate "Touchscreen collie support"
-+ depends on MCP_UCB1200 && INPUT && !MCP_UCB1200_TS
-+ help
-+ Driver for touchscreen on collie - sharp sl-5500.
-+
- config TOUCHSCREEN_UCB1400
- tristate "Philips UCB1400 touchscreen"
- depends on AC97_BUS
-diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
-index 77ba930..77715cd 100644
---- a/drivers/input/touchscreen/Makefile
-+++ b/drivers/input/touchscreen/Makefile
-@@ -26,6 +26,7 @@ obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
- obj-$(CONFIG_TOUCHSCREEN_UCB1200_TS) += ucb1x00-ts.o
-+obj-$(CONFIG_TOUCHSCREEN_COLLIE_TS) += collie-ts.o
- obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
- obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o
- wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o
-diff --git a/drivers/input/touchscreen/collie-ts.c b/drivers/input/touchscreen/collie-ts.c
-new file mode 100644
-index 0000000..c7c0272
---- /dev/null
-+++ b/drivers/input/touchscreen/collie-ts.c
-@@ -0,0 +1,449 @@
-+/*
-+ * Touchscreen driver for UCB1x00-based touchscreens
-+ *
-+ * Copyright (C) 2001 Russell King, All Rights Reserved.
-+ * Copyright (C) 2005 Pavel Machek
-+ *
-+ * 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
-+ * published by the Free Software Foundation.
-+ *
-+ * 21-Jan-2002 <jco@ict.es> :
-+ *
-+ * Added support for synchronous A/D mode. This mode is useful to
-+ * avoid noise induced in the touchpanel by the LCD, provided that
-+ * the UCB1x00 has a valid LCD sync signal routed to its ADCSYNC pin.
-+ * It is important to note that the signal connected to the ADCSYNC
-+ * pin should provide pulses even when the LCD is blanked, otherwise
-+ * a pen touch needed to unblank the LCD will never be read.
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/smp.h>
-+#include <linux/smp_lock.h>
-+#include <linux/sched.h>
-+#include <linux/completion.h>
-+#include <linux/delay.h>
-+#include <linux/string.h>
-+#include <linux/input.h>
-+#include <linux/device.h>
-+#include <linux/freezer.h>
-+#include <linux/slab.h>
-+#include <linux/kthread.h>
-+#include <linux/semaphore.h>
-+
-+#include <mach/dma.h>
-+#include <mach/collie.h>
-+#include <asm/mach-types.h>
-+
-+#include <linux/mfd/ucb1x00.h>
-+
-+struct ucb1x00_ts {
-+ struct input_dev *idev;
-+ struct ucb1x00 *ucb;
-+
-+ wait_queue_head_t irq_wait;
-+ struct task_struct *rtask;
-+ u16 x_res;
-+ u16 y_res;
-+
-+ unsigned int adcsync:1;
-+};
-+
-+static int adcsync;
-+
-+/**********************************
-+
-+ ................
-+ . . = 340
-+ . .
-+ . ^.
-+ . ^.
-+ . ^.
-+ . ^.
-+ . .
-+ . X. = 10
-+ . <<<<<<<< Y .
-+ ................
-+ . Sharp =200
-+ . .
-+ . - O - .
-+ . .
-+ ................
-+
-+**********************************/
-+
-+
-+static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
-+{
-+ struct input_dev *idev = ts->idev;
-+
-+ input_report_abs(idev, ABS_X, x);
-+ input_report_abs(idev, ABS_Y, y);
-+ input_report_abs(idev, ABS_PRESSURE, pressure);
-+ input_report_key(idev, BTN_TOUCH, 1);
-+ input_sync(idev);
-+}
-+
-+static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
-+{
-+ struct input_dev *idev = ts->idev;
-+
-+ input_report_abs(idev, ABS_PRESSURE, 0);
-+ input_report_key(idev, BTN_TOUCH, 0);
-+ input_sync(idev);
-+}
-+
-+/*
-+ * Switch to interrupt mode. This set touchscreen to interrupt
-+ * mode, so that chip is able to send interrupt.
-+ */
-+static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
-+ UCB_TS_CR_MODE_INT);
-+}
-+
-+/*
-+ * Switch to pressure mode, and read pressure. We don't need to wait
-+ * here, since both plates are being driven.
-+ *
-+ * set_read_pressure() in sharp code
-+ */
-+static inline void ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSPX_POW | UCB_TS_CR_TSMX_POW |
-+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
-+
-+ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
-+ UCB_ADC_INP_AD2 |
-+ UCB_ADC_SYNC_ENA);
-+ udelay(100);
-+ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
-+ UCB_ADC_INP_AD2 |
-+ UCB_ADC_SYNC_ENA | UCB_ADC_START);
-+}
-+
-+/*
-+ * Switch to X position mode and measure Y plate. We switch the plate
-+ * configuration in pressure mode, then switch to position mode. This
-+ * gives a faster response time. Even so, we need to wait about 55us
-+ * for things to stabilise.
-+ */
-+static inline void ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
-+
-+
-+ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
-+ UCB_ADC_INP_TSPY | UCB_ADC_SYNC_ENA);
-+ udelay(100);
-+ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
-+ UCB_ADC_INP_TSPY | UCB_ADC_SYNC_ENA |
-+ UCB_ADC_START);
-+}
-+
-+/*
-+ * Switch to Y position mode and measure X plate. We switch the plate
-+ * configuration in pressure mode, then switch to position mode. This
-+ * gives a faster response time. Even so, we need to wait about 55us
-+ * for things to stabilise.
-+ */
-+static inline void ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-+
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
-+
-+
-+ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
-+ UCB_ADC_INP_TSPX | UCB_ADC_SYNC_ENA);
-+ udelay(100);
-+ ucb1x00_reg_write(ts->ucb, UCB_ADC_CR, ts->ucb->adc_cr |
-+ UCB_ADC_INP_TSPX | UCB_ADC_SYNC_ENA |
-+ UCB_ADC_START);
-+}
-+
-+/*
-+ * Switch to X plate resistance mode. Set MX to ground, PX to
-+ * supply. Measure current.
-+ */
-+static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
-+}
-+
-+/*
-+ * Switch to Y plate resistance mode. Set MY to ground, PY to
-+ * supply. Measure current.
-+ */
-+static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
-+{
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
-+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
-+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
-+ return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
-+}
-+
-+/*
-+ * This is a RT kernel thread that handles the ADC accesses
-+ * (mainly so we can use semaphores in the UCB1200 core code
-+ * to serialise accesses to the ADC).
-+ */
-+static int ucb1x00_thread(void *_ts)
-+{
-+ struct ucb1x00_ts *ts = _ts;
-+ struct task_struct *tsk = current;
-+ DECLARE_WAITQUEUE(wait, tsk);
-+ int state;
-+
-+ /*
-+ * We could run as a real-time thread. However, thus far
-+ * this doesn't seem to be necessary.
-+ */
-+
-+ add_wait_queue(&ts->irq_wait, &wait);
-+
-+ while (!kthread_should_stop()) {
-+ unsigned int data[3];
-+
-+ for (state=0; state<3; state++) {
-+
-+ ucb1x00_adc_enable(ts->ucb);
-+ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_ADC, UCB_FALLING);
-+ switch (state) {
-+ /* Order matters here; last measurement seems to be more noisy then the
-+ rest, and we care about pressure least */
-+ case 2: ucb1x00_ts_read_pressure(ts);
-+ break;
-+ case 0: ucb1x00_ts_read_ypos(ts);
-+ break;
-+ case 1: ucb1x00_ts_read_xpos(ts);
-+ break;
-+ }
-+ /* wait for adc */
-+ try_to_freeze();
-+ schedule_timeout(1000 * HZ);
-+ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_ADC, UCB_FALLING);
-+ data[state] = UCB_ADC_DAT(ucb1x00_reg_read(ts->ucb, UCB_ADC_DATA));
-+ ucb1x00_adc_disable(ts->ucb);
-+ }
-+
-+ /* If not pressed any more, try to sleep! */
-+ if (data[2] < 300) {
-+ set_task_state(tsk, TASK_INTERRUPTIBLE);
-+ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_RISING);
-+ ucb1x00_ts_mode_int(ts);
-+ ucb1x00_disable(ts->ucb);
-+ ucb1x00_ts_event_release(ts);
-+ try_to_freeze();
-+ schedule_timeout(1000 * HZ);
-+ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_RISING);
-+ ucb1x00_enable(ts->ucb);
-+ } else {
-+ ucb1x00_ts_evt_add(ts, data[2], data[1], data[0]);
-+ }
-+ ucb1x00_disable(ts->ucb);
-+ msleep(20);
-+ ucb1x00_enable(ts->ucb);
-+ }
-+
-+ remove_wait_queue(&ts->irq_wait, &wait);
-+
-+ ts->rtask = NULL;
-+ return 0;
-+}
-+
-+/*
-+ * We only detect touch screen _touches_ with this interrupt
-+ * handler, and even then we just schedule our task.
-+ */
-+static void ucb1x00_ts_irq(int idx, void *id)
-+{
-+ struct ucb1x00_ts *ts = id;
-+ wake_up(&ts->irq_wait);
-+}
-+
-+static void ucb1x00_adc_irq(int idx, void *id)
-+{
-+ struct ucb1x00_ts *ts = id;
-+ wake_up(&ts->irq_wait);
-+}
-+
-+static int ucb1x00_ts_open(struct input_dev *idev)
-+{
-+ struct ucb1x00_ts *ts = input_get_drvdata(idev);
-+ int ret = 0;
-+
-+ BUG_ON(ts->rtask);
-+
-+ init_waitqueue_head(&ts->irq_wait);
-+
-+ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_ADC, ucb1x00_adc_irq, ts);
-+ if (ret < 0) {
-+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-+ return ret;
-+ }
-+
-+ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_RISING);
-+
-+ /*
-+ * If we do this at all, we should allow the user to
-+ * measure and read the X and Y resistance at any time.
-+ */
-+ ucb1x00_adc_enable(ts->ucb);
-+ ts->x_res = ucb1x00_ts_read_xres(ts);
-+ ts->y_res = ucb1x00_ts_read_yres(ts);
-+ ucb1x00_adc_disable(ts->ucb);
-+
-+ if (machine_is_collie()) {
-+ ucb1x00_io_set_dir(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
-+ }
-+
-+ ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
-+ if (!IS_ERR(ts->rtask)) {
-+ ret = 0;
-+ } else {
-+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-+ ts->rtask = NULL;
-+ ret = -EFAULT;
-+ }
-+
-+ return ret;
-+}
-+
-+/*
-+ * Release touchscreen resources. Disable IRQs.
-+ */
-+static void ucb1x00_ts_close(struct input_dev *idev)
-+{
-+ struct ucb1x00_ts *ts = input_get_drvdata(idev);
-+
-+ if (ts->rtask)
-+ kthread_stop(ts->rtask);
-+
-+ ucb1x00_enable(ts->ucb);
-+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
-+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_ADC, ts);
-+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
-+ ucb1x00_disable(ts->ucb);
-+}
-+
-+#ifdef CONFIG_PM
-+static int ucb1x00_ts_resume(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_ts *ts = dev->priv;
-+
-+ if (ts->rtask != NULL) {
-+ /*
-+ * Restart the TS thread to ensure the
-+ * TS interrupt mode is set up again
-+ * after sleep.
-+ */
-+ wake_up(&ts->irq_wait);
-+ }
-+ return 0;
-+}
-+#else
-+#define ucb1x00_ts_resume NULL
-+#endif
-+
-+
-+/*
-+ * Initialisation.
-+ */
-+static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_ts *ts;
-+ struct input_dev *idev;
-+ int err;
-+
-+ ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
-+ idev = input_allocate_device();
-+ if (!ts || !idev) {
-+ err = -ENOMEM;
-+ goto fail;
-+ }
-+
-+ ts->ucb = dev->ucb;
-+ ts->idev = idev;
-+ ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
-+
-+ input_set_drvdata(idev, ts);
-+ idev->name = "Touchscreen panel";
-+ idev->id.product = ts->ucb->id;
-+ idev->open = ucb1x00_ts_open;
-+ idev->close = ucb1x00_ts_close;
-+
-+ __set_bit(EV_ABS, idev->evbit);
-+ __set_bit(ABS_X, idev->absbit);
-+ __set_bit(ABS_Y, idev->absbit);
-+ __set_bit(ABS_PRESSURE, idev->absbit);
-+
-+ input_set_abs_params(ts->idev, ABS_X, 0, 450, 0, 0);
-+ input_set_abs_params(ts->idev, ABS_Y, 200, 800, 0, 0);
-+ input_set_abs_params(ts->idev, ABS_PRESSURE, 400, 800, 0, 0);
-+
-+
-+ err = input_register_device(idev);
-+ if (err)
-+ goto fail;
-+
-+ dev->priv = ts;
-+
-+ return 0;
-+
-+ fail:
-+ input_free_device(idev);
-+ kfree(ts);
-+ return err;
-+}
-+
-+static void ucb1x00_ts_remove(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_ts *ts = dev->priv;
-+
-+ input_unregister_device(ts->idev);
-+ kfree(ts);
-+}
-+
-+static struct ucb1x00_driver ucb1x00_ts_driver = {
-+ .add = ucb1x00_ts_add,
-+ .remove = ucb1x00_ts_remove,
-+ .resume = ucb1x00_ts_resume,
-+};
-+
-+static int __init ucb1x00_ts_init(void)
-+{
-+ return ucb1x00_register_driver(&ucb1x00_ts_driver);
-+}
-+
-+static void __exit ucb1x00_ts_exit(void)
-+{
-+ ucb1x00_unregister_driver(&ucb1x00_ts_driver);
-+}
-+
-+module_param(adcsync, int, 0444);
-+module_init(ucb1x00_ts_init);
-+module_exit(ucb1x00_ts_exit);
-+
-+MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
-+MODULE_DESCRIPTION("UCB1x00 touchscreen driver");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
-index 4981aff..7bbba6e 100644
---- a/drivers/mfd/Makefile
-+++ b/drivers/mfd/Makefile
-@@ -24,7 +24,6 @@ obj-$(CONFIG_MFD_CORE) += mfd-core.o
- obj-$(CONFIG_MCP) += mcp-core.o
- obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
- obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
--
- ifeq ($(CONFIG_SA1100_ASSABET),y)
- obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
- endif
-diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
-index eac3463..70eb763 100644
---- a/include/linux/mfd/ucb1x00.h
-+++ b/include/linux/mfd/ucb1x00.h
-@@ -35,7 +35,10 @@
- #define UCB_IE_TCLIP (1 << 14)
- #define UCB_IE_ACLIP (1 << 15)
-
-+/* UCB1200 irqs */
-+#define UCB_IRQ_ADC 11
- #define UCB_IRQ_TSPX 12
-+#define UCB_IRQ_TSMX 13
-
- #define UCB_TC_A 0x05
- #define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch b/packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch
deleted file mode 100644
index 4d2828e53a..0000000000
--- a/packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 047e4432e024fbec1e308e3c496822f52ce63ecb Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 13:21:42 +0100
-Subject: [PATCH 14/23] collie: locomo-led change default trigger
-
-Collie uses now the powersupply framework. Change the
-default led-trigger of locomo-led to reflect that.
----
- drivers/leds/leds-locomo.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c
-index 5d91362..1f7c10f 100644
---- a/drivers/leds/leds-locomo.c
-+++ b/drivers/leds/leds-locomo.c
-@@ -44,7 +44,7 @@ static void locomoled_brightness_set1(struct led_classdev *led_cdev,
-
- static struct led_classdev locomo_led0 = {
- .name = "locomo:amber:charge",
-- .default_trigger = "sharpsl-charge",
-+ .default_trigger = "main-battery-charging",
- .brightness_set = locomoled_brightness_set0,
- };
-
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch b/packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch
deleted file mode 100644
index 99d0314a46..0000000000
--- a/packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 87e4ecb2702d0d1a800da0ba81cd867b0f150410 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Mon, 9 Feb 2009 23:14:44 +0100
-Subject: [PATCH 15/23] SA1100: make gpio_to_irq and reverse a macro
-
-The function can't be used for static initialisations so
-convert them to macros.
----
- arch/arm/mach-sa1100/include/mach/gpio.h | 19 ++++---------------
- 1 files changed, 4 insertions(+), 15 deletions(-)
-
-diff --git a/arch/arm/mach-sa1100/include/mach/gpio.h b/arch/arm/mach-sa1100/include/mach/gpio.h
-index 582a0c9..7befc10 100644
---- a/arch/arm/mach-sa1100/include/mach/gpio.h
-+++ b/arch/arm/mach-sa1100/include/mach/gpio.h
-@@ -49,20 +49,9 @@ static inline void gpio_set_value(unsigned gpio, int value)
-
- #define gpio_cansleep __gpio_cansleep
-
--static inline unsigned gpio_to_irq(unsigned gpio)
--{
-- if (gpio < 11)
-- return IRQ_GPIO0 + gpio;
-- else
-- return IRQ_GPIO11 - 11 + gpio;
--}
--
--static inline unsigned irq_to_gpio(unsigned irq)
--{
-- if (irq < IRQ_GPIO11_27)
-- return irq - IRQ_GPIO0;
-- else
-- return irq - IRQ_GPIO11 + 11;
--}
-+#define gpio_to_irq(gpio) ((gpio < 11) ? (IRQ_GPIO0 + gpio) : \
-+ (IRQ_GPIO11 - 11 + gpio))
-+#define irq_to_gpio(irq) ((irq < IRQ_GPIO11_27) ? (irq - IRQ_GPIO0) : \
-+ (irq - IRQ_GPIO11 + 11))
-
- #endif
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch b/packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch
deleted file mode 100644
index aab08a66c9..0000000000
--- a/packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-From 1de1b5c2860d889a9422f187ad90d8e38b2431fd Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 14:50:56 +0100
-Subject: [PATCH 16/23] add gpiolib support to ucb1x00
-
-The old access methods to the gpios will be removed when
-all users has been converted. (mainly ucb1x00-ts)
----
- arch/arm/mach-sa1100/include/mach/mcp.h | 1 +
- drivers/mfd/mcp-sa11x0.c | 1 +
- drivers/mfd/ucb1x00-core.c | 87 ++++++++++++++++++++++++++++++-
- include/linux/mfd/mcp.h | 1 +
- include/linux/mfd/ucb1x00.h | 3 +
- 5 files changed, 91 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-sa1100/include/mach/mcp.h b/arch/arm/mach-sa1100/include/mach/mcp.h
-index fb8b09a..ed1a331 100644
---- a/arch/arm/mach-sa1100/include/mach/mcp.h
-+++ b/arch/arm/mach-sa1100/include/mach/mcp.h
-@@ -16,6 +16,7 @@ struct mcp_plat_data {
- u32 mccr0;
- u32 mccr1;
- unsigned int sclk_rate;
-+ int gpio_base;
- };
-
- #endif
-diff --git a/drivers/mfd/mcp-sa11x0.c b/drivers/mfd/mcp-sa11x0.c
-index 88c81cf..dfa59eb 100644
---- a/drivers/mfd/mcp-sa11x0.c
-+++ b/drivers/mfd/mcp-sa11x0.c
-@@ -163,6 +163,7 @@ static int mcp_sa11x0_probe(struct platform_device *pdev)
- mcp->dma_audio_wr = DMA_Ser4MCP0Wr;
- mcp->dma_telco_rd = DMA_Ser4MCP1Rd;
- mcp->dma_telco_wr = DMA_Ser4MCP1Wr;
-+ mcp->gpio_base = data->gpio_base;
-
- platform_set_drvdata(pdev, mcp);
-
-diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
-index bc2c1ba..b9c3f3d 100644
---- a/drivers/mfd/ucb1x00-core.c
-+++ b/drivers/mfd/ucb1x00-core.c
-@@ -25,11 +25,11 @@
- #include <linux/device.h>
- #include <linux/mutex.h>
- #include <linux/mfd/ucb1x00.h>
-+#include <linux/gpio.h>
-
- #include <asm/dma.h>
- #include <mach/hardware.h>
-
--
- static DEFINE_MUTEX(ucb1x00_mutex);
- static LIST_HEAD(ucb1x00_drivers);
- static LIST_HEAD(ucb1x00_devices);
-@@ -107,6 +107,60 @@ unsigned int ucb1x00_io_read(struct ucb1x00 *ucb)
- return ucb1x00_reg_read(ucb, UCB_IO_DATA);
- }
-
-+static void ucb1x00_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
-+{
-+ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&ucb->io_lock, flags);
-+ if (value)
-+ ucb->io_out |= 1 << offset;
-+ else
-+ ucb->io_out &= ~(1 << offset);
-+
-+ ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
-+ spin_unlock_irqrestore(&ucb->io_lock, flags);
-+}
-+
-+static int ucb1x00_gpio_get(struct gpio_chip *chip, unsigned offset)
-+{
-+ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
-+ return ucb1x00_reg_read(ucb, UCB_IO_DATA) & (1 << offset);
-+}
-+
-+static int ucb1x00_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
-+{
-+ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&ucb->io_lock, flags);
-+ ucb->io_dir &= ~(1 << offset);
-+ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
-+ spin_unlock_irqrestore(&ucb->io_lock, flags);
-+
-+ return 0;
-+}
-+
-+static int ucb1x00_gpio_direction_output(struct gpio_chip *chip, unsigned offset
-+ , int value)
-+{
-+ struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&ucb->io_lock, flags);
-+ ucb->io_dir |= (1 << offset);
-+ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
-+
-+ if (value)
-+ ucb->io_out |= 1 << offset;
-+ else
-+ ucb->io_out &= ~(1 << offset);
-+ ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
-+ spin_unlock_irqrestore(&ucb->io_lock, flags);
-+
-+ return 0;
-+}
-+
- /*
- * UCB1300 data sheet says we must:
- * 1. enable ADC => 5us (including reference startup time)
-@@ -475,6 +529,7 @@ static int ucb1x00_probe(struct mcp *mcp)
- struct ucb1x00_driver *drv;
- unsigned int id;
- int ret = -ENODEV;
-+ int temp;
-
- mcp_enable(mcp);
- id = mcp_reg_read(mcp, UCB_ID);
-@@ -507,12 +562,27 @@ static int ucb1x00_probe(struct mcp *mcp)
- goto err_free;
- }
-
-+ ucb->gpio.base = -1;
-+ if (mcp->gpio_base != 0) {
-+ ucb->gpio.label = dev_name(&ucb->dev);
-+ ucb->gpio.base = mcp->gpio_base;
-+ ucb->gpio.ngpio = 10;
-+ ucb->gpio.set = ucb1x00_gpio_set;
-+ ucb->gpio.get = ucb1x00_gpio_get;
-+ ucb->gpio.direction_input = ucb1x00_gpio_direction_input;
-+ ucb->gpio.direction_output = ucb1x00_gpio_direction_output;
-+ ret = gpiochip_add(&ucb->gpio);
-+ if (ret)
-+ goto err_free;
-+ } else
-+ dev_info(&ucb->dev, "gpio_base not set so no gpiolib support");
-+
- ret = request_irq(ucb->irq, ucb1x00_irq, IRQF_TRIGGER_RISING,
- "UCB1x00", ucb);
- if (ret) {
- printk(KERN_ERR "ucb1x00: unable to grab irq%d: %d\n",
- ucb->irq, ret);
-- goto err_free;
-+ goto err_gpio;
- }
-
- mcp_set_drvdata(mcp, ucb);
-@@ -521,6 +591,7 @@ static int ucb1x00_probe(struct mcp *mcp)
- if (ret)
- goto err_irq;
-
-+
- INIT_LIST_HEAD(&ucb->devs);
- mutex_lock(&ucb1x00_mutex);
- list_add(&ucb->node, &ucb1x00_devices);
-@@ -528,10 +599,14 @@ static int ucb1x00_probe(struct mcp *mcp)
- ucb1x00_add_dev(ucb, drv);
- }
- mutex_unlock(&ucb1x00_mutex);
-+
- goto out;
-
- err_irq:
- free_irq(ucb->irq, ucb);
-+ err_gpio:
-+ if (ucb->gpio.base != -1)
-+ temp = gpiochip_remove(&ucb->gpio);
- err_free:
- kfree(ucb);
- err_disable:
-@@ -544,6 +619,7 @@ static void ucb1x00_remove(struct mcp *mcp)
- {
- struct ucb1x00 *ucb = mcp_get_drvdata(mcp);
- struct list_head *l, *n;
-+ int ret;
-
- mutex_lock(&ucb1x00_mutex);
- list_del(&ucb->node);
-@@ -553,6 +629,12 @@ static void ucb1x00_remove(struct mcp *mcp)
- }
- mutex_unlock(&ucb1x00_mutex);
-
-+ if (ucb->gpio.base != -1) {
-+ ret = gpiochip_remove(&ucb->gpio);
-+ if (ret)
-+ dev_err(&ucb->dev, "Can't remove gpio chip: %d\n", ret);
-+ }
-+
- free_irq(ucb->irq, ucb);
- device_unregister(&ucb->dev);
- }
-@@ -603,6 +685,7 @@ static int ucb1x00_resume(struct mcp *mcp)
- struct ucb1x00 *ucb = mcp_get_drvdata(mcp);
- struct ucb1x00_dev *dev;
-
-+ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
- mutex_lock(&ucb1x00_mutex);
- list_for_each_entry(dev, &ucb->devs, dev_node) {
- if (dev->drv->resume)
-diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h
-index be95e09..ee49670 100644
---- a/include/linux/mfd/mcp.h
-+++ b/include/linux/mfd/mcp.h
-@@ -26,6 +26,7 @@ struct mcp {
- dma_device_t dma_telco_rd;
- dma_device_t dma_telco_wr;
- struct device attached_device;
-+ int gpio_base;
- };
-
- struct mcp_ops {
-diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
-index 70eb763..b13171e 100644
---- a/include/linux/mfd/ucb1x00.h
-+++ b/include/linux/mfd/ucb1x00.h
-@@ -11,6 +11,8 @@
- #define UCB1200_H
-
- #include <linux/mfd/mcp.h>
-+#include <linux/gpio.h>
-+
- #define UCB_IO_DATA 0x00
- #define UCB_IO_DIR 0x01
-
-@@ -126,6 +128,7 @@ struct ucb1x00 {
- struct device dev;
- struct list_head node;
- struct list_head devs;
-+ struct gpio_chip gpio;
- };
-
- struct ucb1x00_driver;
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch b/packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch
deleted file mode 100644
index c08c21a977..0000000000
--- a/packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From c1bf0dcce68a5e01213e18c9ca1fd49efad4ddff Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 18:15:34 +0100
-Subject: [PATCH 17/23] collie: convert to gpiolib for ucb1x00
-
-Only the parts used for collie_battery are converted.
-The rest will be cleaned up later.
-
-Conflicts:
-
- arch/arm/mach-sa1100/collie.c
- arch/arm/mach-sa1100/include/mach/collie.h
----
- arch/arm/mach-sa1100/collie.c | 3 +-
- arch/arm/mach-sa1100/include/mach/collie.h | 68 ++++++++++++++-------------
- 2 files changed, 37 insertions(+), 34 deletions(-)
-
-diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
-index ec673b8..4b52f30 100644
---- a/arch/arm/mach-sa1100/collie.c
-+++ b/arch/arm/mach-sa1100/collie.c
-@@ -87,6 +87,7 @@ static struct scoop_pcmcia_config collie_pcmcia_config = {
- static struct mcp_plat_data collie_mcp_data = {
- .mccr0 = MCCR0_ADM | MCCR0_ExtClk,
- .sclk_rate = 9216000,
-+ .gpio_base = COLLIE_TC35143_GPIO_BASE,
- };
-
- #ifdef CONFIG_SHARP_LOCOMO
-@@ -256,7 +257,7 @@ static void __init collie_init(void)
- PPC_LDD6 | PPC_LDD7 | PPC_L_PCLK | PPC_L_LCLK | PPC_L_FCLK | PPC_L_BIAS |
- PPC_TXD1 | PPC_TXD2 | PPC_TXD3 | PPC_TXD4 | PPC_SCLK | PPC_SFRM;
-
-- PWER = COLLIE_GPIO_AC_IN | COLLIE_GPIO_CO | COLLIE_GPIO_ON_KEY |
-+ PWER = COLLIE_GPIO_AC_IN_ | COLLIE_GPIO_CO_ | COLLIE_GPIO_ON_KEY |
- COLLIE_GPIO_WAKEUP | COLLIE_GPIO_nREMOCON_INT | PWER_RTC;
-
- PGSR = COLLIE_GPIO_nREMOCON_ON;
-diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h
-index 799c930..bba8978 100644
---- a/arch/arm/mach-sa1100/include/mach/collie.h
-+++ b/arch/arm/mach-sa1100/include/mach/collie.h
-@@ -15,7 +15,7 @@
-
-
- #define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1)
--#define COLLIE_SCP_CHARGE_ON SCOOP_GPCR_PA11
-+#define COLLIE_GPIO_CHARGE_ON (COLLIE_SCOOP_GPIO_BASE)
- #define COLLIE_SCP_DIAG_BOOT1 SCOOP_GPCR_PA12
- #define COLLIE_SCP_DIAG_BOOT2 SCOOP_GPCR_PA13
- #define COLLIE_SCP_MUTE_L SCOOP_GPCR_PA14
-@@ -25,28 +25,29 @@
- #define COLLIE_GPIO_VPEN (COLLIE_SCOOP_GPIO_BASE + 7)
- #define COLLIE_GPIO_LB_VOL_CHG (COLLIE_SCOOP_GPIO_BASE + 8)
-
--#define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
-+#define COLLIE_SCOOP_IO_DIR (COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
- COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON )
--#define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
-- COLLIE_SCP_CHARGE_ON )
-+#define COLLIE_SCOOP_IO_OUT (COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R)
-
- /* GPIOs for which the generic definition doesn't say much */
-
--#define COLLIE_GPIO_ON_KEY GPIO_GPIO (0)
--#define COLLIE_GPIO_AC_IN GPIO_GPIO (1)
--#define COLLIE_GPIO_SDIO_INT GPIO_GPIO (11)
--#define COLLIE_GPIO_CF_IRQ GPIO_GPIO (14)
--#define COLLIE_GPIO_nREMOCON_INT GPIO_GPIO (15)
--#define COLLIE_GPIO_UCB1x00_RESET GPIO_GPIO (16)
--#define COLLIE_GPIO_nMIC_ON GPIO_GPIO (17)
--#define COLLIE_GPIO_nREMOCON_ON GPIO_GPIO (18)
--#define COLLIE_GPIO_CO GPIO_GPIO (20)
--#define COLLIE_GPIO_MCP_CLK GPIO_GPIO (21)
--#define COLLIE_GPIO_CF_CD GPIO_GPIO (22)
--#define COLLIE_GPIO_UCB1x00_IRQ GPIO_GPIO (23)
--#define COLLIE_GPIO_WAKEUP GPIO_GPIO (24)
--#define COLLIE_GPIO_GA_INT GPIO_GPIO (25)
--#define COLLIE_GPIO_MAIN_BAT_LOW GPIO_GPIO (26)
-+#define COLLIE_GPIO_ON_KEY GPIO_GPIO(0)
-+#define COLLIE_GPIO_AC_IN (1)
-+#define COLLIE_GPIO_AC_IN_ GPIO_GPIO(1)
-+#define COLLIE_GPIO_SDIO_INT GPIO_GPIO(11)
-+#define COLLIE_GPIO_CF_IRQ GPIO_GPIO(14)
-+#define COLLIE_GPIO_nREMOCON_INT GPIO_GPIO(15)
-+#define COLLIE_GPIO_UCB1x00_RESET GPIO_GPIO(16)
-+#define COLLIE_GPIO_nMIC_ON GPIO_GPIO(17)
-+#define COLLIE_GPIO_nREMOCON_ON GPIO_GPIO(18)
-+#define COLLIE_GPIO_CO (20)
-+#define COLLIE_GPIO_CO_ GPIO_GPIO(20)
-+#define COLLIE_GPIO_MCP_CLK GPIO_GPIO(21)
-+#define COLLIE_GPIO_CF_CD GPIO_GPIO(22)
-+#define COLLIE_GPIO_UCB1x00_IRQ GPIO_GPIO(23)
-+#define COLLIE_GPIO_WAKEUP GPIO_GPIO(24)
-+#define COLLIE_GPIO_GA_INT GPIO_GPIO(25)
-+#define COLLIE_GPIO_MAIN_BAT_LOW (26)
-
- /* Interrupts */
-
-@@ -70,19 +71,20 @@
- #define COLLIE_LCM_IRQ_GPIO_nSD_WP IRQ_LOCOMO_GPIO14
-
- /* GPIO's on the TC35143AF (Toshiba Analog Frontend) */
--#define COLLIE_TC35143_GPIO_VERSION0 UCB_IO_0 /* GPIO0=Version */
--#define COLLIE_TC35143_GPIO_TBL_CHK UCB_IO_1 /* GPIO1=TBL_CHK */
--#define COLLIE_TC35143_GPIO_VPEN_ON UCB_IO_2 /* GPIO2=VPNE_ON */
--#define COLLIE_TC35143_GPIO_IR_ON UCB_IO_3 /* GPIO3=IR_ON */
--#define COLLIE_TC35143_GPIO_AMP_ON UCB_IO_4 /* GPIO4=AMP_ON */
--#define COLLIE_TC35143_GPIO_VERSION1 UCB_IO_5 /* GPIO5=Version */
--#define COLLIE_TC35143_GPIO_FS8KLPF UCB_IO_5 /* GPIO5=fs 8k LPF */
--#define COLLIE_TC35143_GPIO_BUZZER_BIAS UCB_IO_6 /* GPIO6=BUZZER BIAS */
--#define COLLIE_TC35143_GPIO_MBAT_ON UCB_IO_7 /* GPIO7=MBAT_ON */
--#define COLLIE_TC35143_GPIO_BBAT_ON UCB_IO_8 /* GPIO8=BBAT_ON */
--#define COLLIE_TC35143_GPIO_TMP_ON UCB_IO_9 /* GPIO9=TMP_ON */
--#define COLLIE_TC35143_GPIO_IN ( UCB_IO_0 | UCB_IO_2 | UCB_IO_5 )
--#define COLLIE_TC35143_GPIO_OUT ( UCB_IO_1 | UCB_IO_3 | UCB_IO_4 | UCB_IO_6 | \
-- UCB_IO_7 | UCB_IO_8 | UCB_IO_9 )
-+#define COLLIE_TC35143_GPIO_BASE (GPIO_MAX + 13)
-+#define COLLIE_TC35143_GPIO_VERSION0 UCB_IO_0
-+#define COLLIE_TC35143_GPIO_TBL_CHK UCB_IO_1
-+#define COLLIE_TC35143_GPIO_VPEN_ON UCB_IO_2
-+#define COLLIE_TC35143_GPIO_IR_ON UCB_IO_3
-+#define COLLIE_TC35143_GPIO_AMP_ON UCB_IO_4
-+#define COLLIE_TC35143_GPIO_VERSION1 UCB_IO_5
-+#define COLLIE_TC35143_GPIO_FS8KLPF UCB_IO_5
-+#define COLLIE_TC35143_GPIO_BUZZER_BIAS UCB_IO_6
-+#define COLLIE_GPIO_MBAT_ON (COLLIE_TC35143_GPIO_BASE + 7)
-+#define COLLIE_GPIO_BBAT_ON (COLLIE_TC35143_GPIO_BASE + 8)
-+#define COLLIE_GPIO_TMP_ON (COLLIE_TC35143_GPIO_BASE + 9)
-+#define COLLIE_TC35143_GPIO_IN (UCB_IO_0 | UCB_IO_2 | UCB_IO_5)
-+#define COLLIE_TC35143_GPIO_OUT (UCB_IO_1 | UCB_IO_3 | UCB_IO_4 \
-+ | UCB_IO_6)
-
- #endif
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch b/packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch
deleted file mode 100644
index b28db63d87..0000000000
--- a/packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch
+++ /dev/null
@@ -1,473 +0,0 @@
-From a2cf77eaf64b201a00b9682c25596ef0bcda8dc4 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 18:16:03 +0100
-Subject: [PATCH 18/23] collie: add battery driver
-
-This driver is based on tosa_battery.c.
-
-Conflicts:
-
- drivers/power/Makefile
----
- drivers/power/Kconfig | 7 +
- drivers/power/Makefile | 1 +
- drivers/power/collie_battery.c | 418 ++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 426 insertions(+), 0 deletions(-)
- create mode 100644 drivers/power/collie_battery.c
-
-diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
-index 8e0c2b4..a945046 100644
---- a/drivers/power/Kconfig
-+++ b/drivers/power/Kconfig
-@@ -56,6 +56,13 @@ config BATTERY_TOSA
- Say Y to enable support for the battery on the Sharp Zaurus
- SL-6000 (tosa) models.
-
-+config BATTERY_COLLIE
-+ tristate "Sharp SL-5500 (collie) battery"
-+ depends on SA1100_COLLIE && MCP_UCB1200
-+ help
-+ Say Y to enable support for the battery on the Sharp Zaurus
-+ SL-5500 (collie) models.
-+
- config BATTERY_WM97XX
- bool "WM97xx generic battery driver"
- depends on TOUCHSCREEN_WM97XX=y
-diff --git a/drivers/power/Makefile b/drivers/power/Makefile
-index e8f1ece..51a7263 100644
---- a/drivers/power/Makefile
-+++ b/drivers/power/Makefile
-@@ -21,5 +21,6 @@ obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
- obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
- obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
- obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o
-+obj-$(CONFIG_BATTERY_COLLIE) += collie_battery.o
- obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o
- obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o
-diff --git a/drivers/power/collie_battery.c b/drivers/power/collie_battery.c
-new file mode 100644
-index 0000000..039f41a
---- /dev/null
-+++ b/drivers/power/collie_battery.c
-@@ -0,0 +1,418 @@
-+/*
-+ * Battery and Power Management code for the Sharp SL-5x00
-+ *
-+ * Copyright (C) 2009 Thomas Kunze
-+ *
-+ * based on tosa_battery.c
-+ *
-+ * 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
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/power_supply.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+#include <linux/interrupt.h>
-+#include <linux/gpio.h>
-+#include <linux/mfd/ucb1x00.h>
-+
-+#include <asm/mach/sharpsl_param.h>
-+#include <asm/mach-types.h>
-+#include <mach/collie.h>
-+
-+static DEFINE_MUTEX(bat_lock); /* protects gpio pins */
-+static struct work_struct bat_work;
-+static struct ucb1x00 *ucb;
-+
-+struct collie_bat {
-+ int status;
-+ struct power_supply psy;
-+ int full_chrg;
-+
-+ struct mutex work_lock; /* protects data */
-+
-+ bool (*is_present)(struct collie_bat *bat);
-+ int gpio_full;
-+ int gpio_charge_on;
-+
-+ int technology;
-+
-+ int gpio_bat;
-+ int adc_bat;
-+ int adc_bat_divider;
-+ int bat_max;
-+ int bat_min;
-+
-+ int gpio_temp;
-+ int adc_temp;
-+ int adc_temp_divider;
-+};
-+
-+static struct collie_bat collie_bat_main;
-+
-+static unsigned long collie_read_bat(struct collie_bat *bat)
-+{
-+ unsigned long value = 0;
-+
-+ if (bat->gpio_bat < 0 || bat->adc_bat < 0)
-+ return 0;
-+ mutex_lock(&bat_lock);
-+ gpio_set_value(bat->gpio_bat, 1);
-+ msleep(5);
-+ ucb1x00_adc_enable(ucb);
-+ value = ucb1x00_adc_read(ucb, bat->adc_bat, UCB_SYNC);
-+ ucb1x00_adc_disable(ucb);
-+ gpio_set_value(bat->gpio_bat, 0);
-+ mutex_unlock(&bat_lock);
-+ value = value * 1000000 / bat->adc_bat_divider;
-+
-+ return value;
-+}
-+
-+static unsigned long collie_read_temp(struct collie_bat *bat)
-+{
-+ unsigned long value = 0;
-+ if (bat->gpio_temp < 0 || bat->adc_temp < 0)
-+ return 0;
-+
-+ mutex_lock(&bat_lock);
-+ gpio_set_value(bat->gpio_temp, 1);
-+ msleep(5);
-+ ucb1x00_adc_enable(ucb);
-+ value = ucb1x00_adc_read(ucb, bat->adc_temp, UCB_SYNC);
-+ ucb1x00_adc_disable(ucb);
-+ gpio_set_value(bat->gpio_temp, 0);
-+ mutex_unlock(&bat_lock);
-+
-+ value = value * 10000 / bat->adc_temp_divider;
-+
-+ return value;
-+}
-+
-+static int collie_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+ struct collie_bat *bat = container_of(psy, struct collie_bat, psy);
-+
-+ if (bat->is_present && !bat->is_present(bat)
-+ && psp != POWER_SUPPLY_PROP_PRESENT) {
-+ return -ENODEV;
-+ }
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = bat->status;
-+ break;
-+ case POWER_SUPPLY_PROP_TECHNOLOGY:
-+ val->intval = bat->technology;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = collie_read_bat(bat);
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX:
-+ if (bat->full_chrg == -1)
-+ val->intval = bat->bat_max;
-+ else
-+ val->intval = bat->full_chrg;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = bat->bat_max;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
-+ val->intval = bat->bat_min;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = collie_read_temp(bat);
-+ break;
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = bat->is_present ? bat->is_present(bat) : 1;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+static void collie_bat_external_power_changed(struct power_supply *psy)
-+{
-+ schedule_work(&bat_work);
-+}
-+
-+static irqreturn_t collie_bat_gpio_isr(int irq, void *data)
-+{
-+ pr_info("collie_bat_gpio irq: %d\n", gpio_get_value(irq_to_gpio(irq)));
-+ schedule_work(&bat_work);
-+ return IRQ_HANDLED;
-+}
-+
-+static void collie_bat_update(struct collie_bat *bat)
-+{
-+ int old;
-+ struct power_supply *psy = &bat->psy;
-+
-+ mutex_lock(&bat->work_lock);
-+
-+ old = bat->status;
-+
-+ if (bat->is_present && !bat->is_present(bat)) {
-+ printk(KERN_NOTICE "%s not present\n", psy->name);
-+ bat->status = POWER_SUPPLY_STATUS_UNKNOWN;
-+ bat->full_chrg = -1;
-+ } else if (power_supply_am_i_supplied(psy)) {
-+ if (bat->status == POWER_SUPPLY_STATUS_DISCHARGING) {
-+ gpio_set_value(bat->gpio_charge_on, 1);
-+ mdelay(15);
-+ }
-+
-+ if (gpio_get_value(bat->gpio_full)) {
-+ if (old == POWER_SUPPLY_STATUS_CHARGING ||
-+ bat->full_chrg == -1)
-+ bat->full_chrg = collie_read_bat(bat);
-+
-+ gpio_set_value(bat->gpio_charge_on, 0);
-+ bat->status = POWER_SUPPLY_STATUS_FULL;
-+ } else {
-+ gpio_set_value(bat->gpio_charge_on, 1);
-+ bat->status = POWER_SUPPLY_STATUS_CHARGING;
-+ }
-+ } else {
-+ gpio_set_value(bat->gpio_charge_on, 0);
-+ bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ }
-+
-+ if (old != bat->status)
-+ power_supply_changed(psy);
-+
-+ mutex_unlock(&bat->work_lock);
-+}
-+
-+static void collie_bat_work(struct work_struct *work)
-+{
-+ collie_bat_update(&collie_bat_main);
-+}
-+
-+
-+static enum power_supply_property collie_bat_main_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_TEMP,
-+};
-+
-+static enum power_supply_property collie_bat_bu_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX,
-+ POWER_SUPPLY_PROP_PRESENT,
-+};
-+
-+static struct collie_bat collie_bat_main = {
-+ .status = POWER_SUPPLY_STATUS_DISCHARGING,
-+ .full_chrg = -1,
-+ .psy = {
-+ .name = "main-battery",
-+ .type = POWER_SUPPLY_TYPE_BATTERY,
-+ .properties = collie_bat_main_props,
-+ .num_properties = ARRAY_SIZE(collie_bat_main_props),
-+ .get_property = collie_bat_get_property,
-+ .external_power_changed = collie_bat_external_power_changed,
-+ .use_for_apm = 1,
-+ },
-+
-+ .gpio_full = COLLIE_GPIO_CO,
-+ .gpio_charge_on = COLLIE_GPIO_CHARGE_ON,
-+
-+ .technology = POWER_SUPPLY_TECHNOLOGY_LIPO,
-+
-+ .gpio_bat = COLLIE_GPIO_MBAT_ON,
-+ .adc_bat = UCB_ADC_INP_AD1,
-+ .adc_bat_divider = 155,
-+ .bat_max = 4310000,
-+ .bat_min = 1551 * 1000000 / 414,
-+
-+ .gpio_temp = COLLIE_GPIO_TMP_ON,
-+ .adc_temp = UCB_ADC_INP_AD0,
-+ .adc_temp_divider = 10000,
-+};
-+
-+static struct collie_bat collie_bat_bu = {
-+ .status = POWER_SUPPLY_STATUS_UNKNOWN,
-+ .full_chrg = -1,
-+
-+ .psy = {
-+ .name = "backup-battery",
-+ .type = POWER_SUPPLY_TYPE_BATTERY,
-+ .properties = collie_bat_bu_props,
-+ .num_properties = ARRAY_SIZE(collie_bat_bu_props),
-+ .get_property = collie_bat_get_property,
-+ .external_power_changed = collie_bat_external_power_changed,
-+ },
-+
-+ .gpio_full = -1,
-+ .gpio_charge_on = -1,
-+
-+ .technology = POWER_SUPPLY_TECHNOLOGY_LiMn,
-+
-+ .gpio_bat = COLLIE_GPIO_BBAT_ON,
-+ .adc_bat = UCB_ADC_INP_AD1,
-+ .adc_bat_divider = 155,
-+ .bat_max = 3000000,
-+ .bat_min = 1900000,
-+
-+ .gpio_temp = -1,
-+ .adc_temp = -1,
-+ .adc_temp_divider = -1,
-+};
-+
-+static struct {
-+ int gpio;
-+ char *name;
-+ bool output;
-+ int value;
-+} gpios[] = {
-+ { COLLIE_GPIO_CO, "main battery full", 0, 0 },
-+ { COLLIE_GPIO_MAIN_BAT_LOW, "main battery low", 0, 0 },
-+ { COLLIE_GPIO_CHARGE_ON, "main charge on", 1, 0 },
-+ { COLLIE_GPIO_MBAT_ON, "main battery", 1, 0 },
-+ { COLLIE_GPIO_TMP_ON, "main battery temp", 1, 0 },
-+ { COLLIE_GPIO_BBAT_ON, "backup battery", 1, 0 },
-+};
-+
-+#ifdef CONFIG_PM
-+static int collie_bat_suspend(struct ucb1x00_dev *dev, pm_message_t state)
-+{
-+ /* flush all pending status updates */
-+ flush_scheduled_work();
-+ return 0;
-+}
-+
-+static int collie_bat_resume(struct ucb1x00_dev *dev)
-+{
-+ /* things may have changed while we were away */
-+ schedule_work(&bat_work);
-+ return 0;
-+}
-+#else
-+#define collie_bat_suspend NULL
-+#define collie_bat_resume NULL
-+#endif
-+
-+static int __devinit collie_bat_probe(struct ucb1x00_dev *dev)
-+{
-+ int ret;
-+ int i;
-+
-+ if (!machine_is_collie())
-+ return -ENODEV;
-+
-+ ucb = dev->ucb;
-+
-+ for (i = 0; i < ARRAY_SIZE(gpios); i++) {
-+ ret = gpio_request(gpios[i].gpio, gpios[i].name);
-+ if (ret) {
-+ i--;
-+ goto err_gpio;
-+ }
-+
-+ if (gpios[i].output)
-+ ret = gpio_direction_output(gpios[i].gpio,
-+ gpios[i].value);
-+ else
-+ ret = gpio_direction_input(gpios[i].gpio);
-+
-+ if (ret)
-+ goto err_gpio;
-+ }
-+
-+ mutex_init(&collie_bat_main.work_lock);
-+
-+ INIT_WORK(&bat_work, collie_bat_work);
-+
-+ ret = power_supply_register(&dev->ucb->dev, &collie_bat_main.psy);
-+ if (ret)
-+ goto err_psy_reg_main;
-+ ret = power_supply_register(&dev->ucb->dev, &collie_bat_bu.psy);
-+ if (ret)
-+ goto err_psy_reg_bu;
-+
-+ ret = request_irq(gpio_to_irq(COLLIE_GPIO_CO),
-+ collie_bat_gpio_isr,
-+ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
-+ "main full", &collie_bat_main);
-+ if (!ret) {
-+ schedule_work(&bat_work);
-+ return 0;
-+ }
-+ power_supply_unregister(&collie_bat_bu.psy);
-+err_psy_reg_bu:
-+ power_supply_unregister(&collie_bat_main.psy);
-+err_psy_reg_main:
-+
-+ /* see comment in collie_bat_remove */
-+ flush_scheduled_work();
-+
-+ i--;
-+err_gpio:
-+ for (; i >= 0; i--)
-+ gpio_free(gpios[i].gpio);
-+
-+ return ret;
-+}
-+
-+static void __devexit collie_bat_remove(struct ucb1x00_dev *dev)
-+{
-+ int i;
-+
-+ free_irq(gpio_to_irq(COLLIE_GPIO_CO), &collie_bat_main);
-+
-+ power_supply_unregister(&collie_bat_bu.psy);
-+ power_supply_unregister(&collie_bat_main.psy);
-+
-+ /*
-+ * now flush all pending work.
-+ * we won't get any more schedules, since all
-+ * sources (isr and external_power_changed)
-+ * are unregistered now.
-+ */
-+ flush_scheduled_work();
-+
-+ for (i = ARRAY_SIZE(gpios) - 1; i >= 0; i--)
-+ gpio_free(gpios[i].gpio);
-+}
-+
-+static struct ucb1x00_driver collie_bat_driver = {
-+ .add = collie_bat_probe,
-+ .remove = __devexit_p(collie_bat_remove),
-+ .suspend = collie_bat_suspend,
-+ .resume = collie_bat_resume,
-+};
-+
-+static int __init collie_bat_init(void)
-+{
-+ return ucb1x00_register_driver(&collie_bat_driver);
-+}
-+
-+static void __exit collie_bat_exit(void)
-+{
-+ ucb1x00_unregister_driver(&collie_bat_driver);
-+}
-+
-+module_init(collie_bat_init);
-+module_exit(collie_bat_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Thomas Kunze");
-+MODULE_DESCRIPTION("Collie battery driver");
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch b/packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch
deleted file mode 100644
index 7d74cb72af..0000000000
--- a/packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From c1a769bcd789ef7284ee4ece4324274278ee6401 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 13:48:32 +0100
-Subject: [PATCH 19/23] collie: support pda_power driver
-
-This add the pda-power platform device to collie.
----
- arch/arm/mach-sa1100/collie.c | 65 +++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 65 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
-index 4b52f30..7da2f28 100644
---- a/arch/arm/mach-sa1100/collie.c
-+++ b/arch/arm/mach-sa1100/collie.c
-@@ -26,6 +26,7 @@
- #include <linux/mtd/partitions.h>
- #include <linux/timer.h>
- #include <linux/gpio.h>
-+#include <linux/pda_power.h>
-
- #include <mach/hardware.h>
- #include <asm/mach-types.h>
-@@ -90,6 +91,69 @@ static struct mcp_plat_data collie_mcp_data = {
- .gpio_base = COLLIE_TC35143_GPIO_BASE,
- };
-
-+/*
-+ * Collie AC IN
-+ */
-+static int collie_power_init(struct device *dev)
-+{
-+ int ret = gpio_request(COLLIE_GPIO_AC_IN, "ac in");
-+ if (ret)
-+ goto err_gpio_req;
-+
-+ ret = gpio_direction_input(COLLIE_GPIO_AC_IN);
-+ if (ret)
-+ goto err_gpio_in;
-+
-+ return 0;
-+
-+err_gpio_in:
-+ gpio_free(COLLIE_GPIO_AC_IN);
-+err_gpio_req:
-+ return ret;
-+}
-+
-+static void collie_power_exit(struct device *dev)
-+{
-+ gpio_free(COLLIE_GPIO_AC_IN);
-+}
-+
-+static int collie_power_ac_online(void)
-+{
-+ return gpio_get_value(COLLIE_GPIO_AC_IN) == 2;
-+}
-+
-+static char *collie_ac_supplied_to[] = {
-+ "main-battery",
-+ "backup-battery",
-+};
-+
-+static struct pda_power_pdata collie_power_data = {
-+ .init = collie_power_init,
-+ .is_ac_online = collie_power_ac_online,
-+ .exit = collie_power_exit,
-+ .supplied_to = collie_ac_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(collie_ac_supplied_to),
-+};
-+
-+static struct resource collie_power_resource[] = {
-+ {
-+ .name = "ac",
-+ .start = gpio_to_irq(COLLIE_GPIO_AC_IN),
-+ .end = gpio_to_irq(COLLIE_GPIO_AC_IN),
-+ .flags = IORESOURCE_IRQ |
-+ IORESOURCE_IRQ_HIGHEDGE |
-+ IORESOURCE_IRQ_LOWEDGE,
-+ },
-+};
-+
-+static struct platform_device collie_power_device = {
-+ .name = "pda-power",
-+ .id = -1,
-+ .dev.platform_data = &collie_power_data,
-+ .resource = collie_power_resource,
-+ .num_resources = ARRAY_SIZE(collie_power_resource),
-+};
-+
- #ifdef CONFIG_SHARP_LOCOMO
- /*
- * low-level UART features.
-@@ -180,6 +244,7 @@ struct platform_device collie_locomo_device = {
- static struct platform_device *devices[] __initdata = {
- &collie_locomo_device,
- &colliescoop_device,
-+ &collie_power_device,
- };
-
- static struct mtd_partition collie_partitions[] = {
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch b/packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch
deleted file mode 100644
index 490e333976..0000000000
--- a/packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch
+++ /dev/null
@@ -1,323 +0,0 @@
-From 702663223fdc1e3f73e9adbcb1415713b2c92652 Mon Sep 17 00:00:00 2001
-From: Thomas Kunze <thommycheck@gmx.de>
-Date: Tue, 10 Feb 2009 18:16:57 +0100
-Subject: [PATCH 20/23] remove collie_pm.c
-
-This file was unused. The new battery driver makes it
-obsolete. So remove it
-
-Conflicts:
-
- arch/arm/mach-sa1100/collie_pm.c
----
- arch/arm/mach-sa1100/collie_pm.c | 298 --------------------------------------
- 1 files changed, 0 insertions(+), 298 deletions(-)
- delete mode 100644 arch/arm/mach-sa1100/collie_pm.c
-
-diff --git a/arch/arm/mach-sa1100/collie_pm.c b/arch/arm/mach-sa1100/collie_pm.c
-deleted file mode 100644
-index 65b8b31..0000000
---- a/arch/arm/mach-sa1100/collie_pm.c
-+++ /dev/null
-@@ -1,298 +0,0 @@
--/*
-- * Based on spitz_pm.c and sharp code.
-- *
-- * Copyright (C) 2001 SHARP
-- * Copyright 2005 Pavel Machek <pavel@suse.cz>
-- *
-- * Distribute under GPLv2.
-- *
-- * Li-ion batteries are angry beasts, and they like to explode. This driver is not finished,
-- * and sometimes charges them when it should not. If it makes angry lithium to come your way...
-- * ...well, you have been warned.
-- *
-- * Actually, this should be quite safe, it seems sharp leaves charger enabled by default,
-- * and my collie did not explode (yet).
-- */
--
--#include <linux/module.h>
--#include <linux/stat.h>
--#include <linux/init.h>
--#include <linux/kernel.h>
--#include <linux/delay.h>
--#include <linux/interrupt.h>
--#include <linux/device.h>
--#include <linux/platform_device.h>
--#include <linux/mfd/ucb1x00.h>
--
--#include <asm/irq.h>
--#include <mach/hardware.h>
--#include <asm/hardware/scoop.h>
--#include <asm/dma.h>
--#include <mach/collie.h>
--#include <asm/mach/sharpsl_param.h>
--#include <asm/hardware/sharpsl_pm.h>
--
--
--static struct ucb1x00 *ucb;
--static int ad_revise;
--
--#define ADCtoPower(x) ((330 * x * 2) / 1024)
--
--static void collie_charger_init(void)
--{
-- int err;
--
-- if (sharpsl_param.adadj != -1)
-- ad_revise = sharpsl_param.adadj;
--
-- /* Register interrupt handler. */
-- if ((err = request_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr, IRQF_DISABLED,
-- "ACIN", sharpsl_ac_isr))) {
-- printk("Could not get irq %d.\n", COLLIE_IRQ_GPIO_AC_IN);
-- return;
-- }
-- if ((err = request_irq(COLLIE_IRQ_GPIO_CO, sharpsl_chrg_full_isr, IRQF_DISABLED,
-- "CO", sharpsl_chrg_full_isr))) {
-- free_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr);
-- printk("Could not get irq %d.\n", COLLIE_IRQ_GPIO_CO);
-- return;
-- }
--
-- ucb1x00_io_set_dir(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON | COLLIE_TC35143_GPIO_TMP_ON |
-- COLLIE_TC35143_GPIO_BBAT_ON);
-- return;
--}
--
--static void collie_measure_temp(int on)
--{
-- if (on)
-- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_TMP_ON, 0);
-- else
-- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_TMP_ON);
--}
--
--static void collie_charge(int on)
--{
-- extern struct platform_device colliescoop_device;
--
-- /* Zaurus seems to contain LTC1731; it should know when to
-- * stop charging itself, so setting charge on should be
-- * relatively harmless (as long as it is not done too often).
-- */
-- if (on) {
-- set_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
-- } else {
-- reset_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
-- }
--}
--
--static void collie_discharge(int on)
--{
--}
--
--static void collie_discharge1(int on)
--{
--}
--
--static void collie_presuspend(void)
--{
--}
--
--static void collie_postsuspend(void)
--{
--}
--
--static int collie_should_wakeup(unsigned int resume_on_alarm)
--{
-- return 0;
--}
--
--static unsigned long collie_charger_wakeup(void)
--{
-- return 0;
--}
--
--int collie_read_backup_battery(void)
--{
-- int voltage;
--
-- ucb1x00_adc_enable(ucb);
--
-- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_BBAT_ON, 0);
-- voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
--
-- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON);
-- ucb1x00_adc_disable(ucb);
--
-- printk("Backup battery = %d(%d)\n", ADCtoPower(voltage), voltage);
--
-- return ADCtoPower(voltage);
--}
--
--int collie_read_main_battery(void)
--{
-- int voltage, voltage_rev, voltage_volts;
--
-- ucb1x00_adc_enable(ucb);
-- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON);
-- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_MBAT_ON, 0);
--
-- mdelay(1);
-- voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
--
-- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON);
-- ucb1x00_adc_disable(ucb);
--
-- voltage_rev = voltage + ((ad_revise * voltage) / 652);
-- voltage_volts = ADCtoPower(voltage_rev);
--
-- printk("Main battery = %d(%d)\n", voltage_volts, voltage);
--
-- if (voltage != -1)
-- return voltage_volts;
-- else
-- return voltage;
--}
--
--int collie_read_temp(void)
--{
-- int voltage;
--
-- /* According to Sharp, temp must be > 973, main battery must be < 465,
-- FIXME: sharpsl_pm.c has both conditions negated? FIXME: values
-- are way out of range? */
--
-- ucb1x00_adc_enable(ucb);
-- ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_TMP_ON, 0);
-- /* >1010 = battery removed, 460 = 22C ?, higher = lower temp ? */
-- voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD0, UCB_SYNC);
-- ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_TMP_ON);
-- ucb1x00_adc_disable(ucb);
--
-- printk("Battery temp = %d\n", voltage);
-- return voltage;
--}
--
--static unsigned long read_devdata(int which)
--{
-- switch (which) {
-- case SHARPSL_BATT_VOLT:
-- return collie_read_main_battery();
-- case SHARPSL_BATT_TEMP:
-- return collie_read_temp();
-- case SHARPSL_ACIN_VOLT:
-- return 500;
-- case SHARPSL_STATUS_ACIN: {
-- int ret = GPLR & COLLIE_GPIO_AC_IN;
-- printk("AC status = %d\n", ret);
-- return ret;
-- }
-- case SHARPSL_STATUS_FATAL: {
-- int ret = GPLR & COLLIE_GPIO_MAIN_BAT_LOW;
-- printk("Fatal bat = %d\n", ret);
-- return ret;
-- }
-- default:
-- return ~0;
-- }
--}
--
--struct battery_thresh collie_battery_levels_acin[] = {
-- { 420, 100},
-- { 417, 95},
-- { 415, 90},
-- { 413, 80},
-- { 411, 75},
-- { 408, 70},
-- { 406, 60},
-- { 403, 50},
-- { 398, 40},
-- { 391, 25},
-- { 10, 5},
-- { 0, 0},
--};
--
--struct battery_thresh collie_battery_levels[] = {
-- { 394, 100},
-- { 390, 95},
-- { 380, 90},
-- { 370, 80},
-- { 368, 75}, /* From sharp code: battery high with frontlight */
-- { 366, 70}, /* 60..90 -- fake values invented by me for testing */
-- { 364, 60},
-- { 362, 50},
-- { 360, 40},
-- { 358, 25}, /* From sharp code: battery low with frontlight */
-- { 356, 5}, /* From sharp code: battery verylow with frontlight */
-- { 0, 0},
--};
--
--struct sharpsl_charger_machinfo collie_pm_machinfo = {
-- .init = collie_charger_init,
-- .read_devdata = read_devdata,
-- .discharge = collie_discharge,
-- .discharge1 = collie_discharge1,
-- .charge = collie_charge,
-- .measure_temp = collie_measure_temp,
-- .presuspend = collie_presuspend,
-- .postsuspend = collie_postsuspend,
-- .charger_wakeup = collie_charger_wakeup,
-- .should_wakeup = collie_should_wakeup,
-- .bat_levels = 12,
-- .bat_levels_noac = collie_battery_levels,
-- .bat_levels_acin = collie_battery_levels_acin,
-- .status_high_acin = 368,
-- .status_low_acin = 358,
-- .status_high_noac = 368,
-- .status_low_noac = 358,
-- .charge_on_volt = 350, /* spitz uses 2.90V, but lets play it safe. */
-- .charge_on_temp = 550,
-- .charge_acin_high = 550, /* collie does not seem to have sensor for this, anyway */
-- .charge_acin_low = 450, /* ignored, too */
-- .fatal_acin_volt = 356,
-- .fatal_noacin_volt = 356,
--
-- .batfull_irq = 1, /* We do not want periodical charge restarts */
--};
--
--static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
--{
-- sharpsl_pm.machinfo = &collie_pm_machinfo;
-- ucb = pdev->ucb;
-- return 0;
--}
--
--static struct ucb1x00_driver collie_pm_ucb_driver = {
-- .add = collie_pm_ucb_add,
--};
--
--static struct platform_device *collie_pm_device;
--
--static int __init collie_pm_init(void)
--{
-- int ret;
--
-- collie_pm_device = platform_device_alloc("sharpsl-pm", -1);
-- if (!collie_pm_device)
-- return -ENOMEM;
--
-- collie_pm_device->dev.platform_data = &collie_pm_machinfo;
-- ret = platform_device_add(collie_pm_device);
--
-- if (ret)
-- platform_device_put(collie_pm_device);
--
-- if (!ret)
-- ret = ucb1x00_register_driver(&collie_pm_ucb_driver);
--
-- return ret;
--}
--
--static void __exit collie_pm_exit(void)
--{
-- ucb1x00_unregister_driver(&collie_pm_ucb_driver);
-- platform_device_unregister(collie_pm_device);
--}
--
--module_init(collie_pm_init);
--module_exit(collie_pm_exit);
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch b/packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch
deleted file mode 100644
index c40be53d9b..0000000000
--- a/packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 0057c3469772d6cddcaa486abe46a2957bc62a2c Mon Sep 17 00:00:00 2001
-From: Harvey Harrison <harvey.harrison@gmail.com>
-Date: Wed, 22 Oct 2008 17:09:00 -0700
-Subject: [PATCH 21/23] mmc: trivial annotation of 'blocks'
-
-sg_init_one is reading a be32, annotate as such.
-
-Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
-Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
----
- drivers/mmc/card/block.c | 6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
-index 3d067c3..903c8aa 100644
---- a/drivers/mmc/card/block.c
-+++ b/drivers/mmc/card/block.c
-@@ -145,7 +145,7 @@ struct mmc_blk_request {
- static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
- {
- int err;
-- u32 blocks;
-+ __be32 blocks;
-
- struct mmc_request mrq;
- struct mmc_command cmd;
-@@ -204,9 +204,7 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
- if (cmd.error || data.error)
- return (u32)-1;
-
-- blocks = ntohl(blocks);
--
-- return blocks;
-+ return ntohl(blocks);
- }
-
- static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch b/packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch
deleted file mode 100644
index b6cef07c19..0000000000
--- a/packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From d71af40a7a15a2ee7040fa0d5c8ac1bc19873c7d Mon Sep 17 00:00:00 2001
-From: Adrian Hunter <ext-adrian.hunter@nokia.com>
-Date: Thu, 16 Oct 2008 12:55:25 +0300
-Subject: [PATCH 22/23] mmc_block: print better error messages
-
-Add command response and card status to error
-messages.
-
-Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
-Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
----
- drivers/mmc/card/block.c | 44 +++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 37 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
-index 903c8aa..cc9b3ab 100644
---- a/drivers/mmc/card/block.c
-+++ b/drivers/mmc/card/block.c
-@@ -207,6 +207,23 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
- return ntohl(blocks);
- }
-
-+static u32 get_card_status(struct mmc_card *card, struct request *req)
-+{
-+ struct mmc_command cmd;
-+ int err;
-+
-+ memset(&cmd, 0, sizeof(struct mmc_command));
-+ cmd.opcode = MMC_SEND_STATUS;
-+ if (!mmc_host_is_spi(card->host))
-+ cmd.arg = card->rca << 16;
-+ cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_AC;
-+ err = mmc_wait_for_cmd(card->host, &cmd, 0);
-+ if (err)
-+ printk(KERN_ERR "%s: error %d sending status comand",
-+ req->rq_disk->disk_name, err);
-+ return cmd.resp[0];
-+}
-+
- static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- {
- struct mmc_blk_data *md = mq->data;
-@@ -218,7 +235,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
-
- do {
- struct mmc_command cmd;
-- u32 readcmd, writecmd;
-+ u32 readcmd, writecmd, status = 0;
-
- memset(&brq, 0, sizeof(struct mmc_blk_request));
- brq.mrq.cmd = &brq.cmd;
-@@ -273,19 +290,32 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- * until later as we need to wait for the card to leave
- * programming mode even when things go wrong.
- */
-+ if (brq.cmd.error || brq.data.error || brq.stop.error)
-+ status = get_card_status(card, req);
-+
- if (brq.cmd.error) {
-- printk(KERN_ERR "%s: error %d sending read/write command\n",
-- req->rq_disk->disk_name, brq.cmd.error);
-+ printk(KERN_ERR "%s: error %d sending read/write "
-+ "command, response %#x, card status %#x\n",
-+ req->rq_disk->disk_name, brq.cmd.error,
-+ brq.cmd.resp[0], status);
- }
-
- if (brq.data.error) {
-- printk(KERN_ERR "%s: error %d transferring data\n",
-- req->rq_disk->disk_name, brq.data.error);
-+ if (brq.data.error == -ETIMEDOUT && brq.mrq.stop)
-+ /* 'Stop' response contains card status */
-+ status = brq.mrq.stop->resp[0];
-+ printk(KERN_ERR "%s: error %d transferring data,"
-+ " sector %u, nr %u, card status %#x\n",
-+ req->rq_disk->disk_name, brq.data.error,
-+ (unsigned)req->sector,
-+ (unsigned)req->nr_sectors, status);
- }
-
- if (brq.stop.error) {
-- printk(KERN_ERR "%s: error %d sending stop command\n",
-- req->rq_disk->disk_name, brq.stop.error);
-+ printk(KERN_ERR "%s: error %d sending stop command, "
-+ "response %#x, card status %#x\n",
-+ req->rq_disk->disk_name, brq.stop.error,
-+ brq.stop.resp[0], status);
- }
-
- if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) {
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch b/packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch
deleted file mode 100644
index 3ff32b0a94..0000000000
--- a/packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-From fba35a4bb8f9cabcd374e19a2a34ee5496d971d2 Mon Sep 17 00:00:00 2001
-From: Adrian Hunter <ext-adrian.hunter@nokia.com>
-Date: Wed, 31 Dec 2008 18:21:17 +0100
-Subject: [PATCH 23/23] mmc_block: ensure all sectors that do not have errors are read
-
-If a card encounters an ECC error while reading a sector it will
-timeout. Instead of reporting the entire I/O request as having
-an error, redo the I/O one sector at a time so that all readable
-sectors are provided to the upper layers.
-
-Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
-Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
----
- drivers/mmc/card/block.c | 76 +++++++++++++++++++++++++++++++++++----------
- 1 files changed, 59 insertions(+), 17 deletions(-)
-
-diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
-index cc9b3ab..45b1f43 100644
---- a/drivers/mmc/card/block.c
-+++ b/drivers/mmc/card/block.c
-@@ -229,7 +229,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- struct mmc_blk_data *md = mq->data;
- struct mmc_card *card = md->queue.card;
- struct mmc_blk_request brq;
-- int ret = 1;
-+ int ret = 1, disable_multi = 0;
-
- mmc_claim_host(card->host);
-
-@@ -251,6 +251,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
- brq.data.blocks = req->nr_sectors;
-
-+ /*
-+ * After a read error, we redo the request one sector at a time
-+ * in order to accurately determine which sectors can be read
-+ * successfully.
-+ */
-+ if (disable_multi && brq.data.blocks > 1)
-+ brq.data.blocks = 1;
-+
- if (brq.data.blocks > 1) {
- /* SPI multiblock writes terminate using a special
- * token, not a STOP_TRANSMISSION request.
-@@ -279,6 +287,25 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- brq.data.sg = mq->sg;
- brq.data.sg_len = mmc_queue_map_sg(mq);
-
-+ /*
-+ * Adjust the sg list so it is the same size as the
-+ * request.
-+ */
-+ if (brq.data.blocks != req->nr_sectors) {
-+ int i, data_size = brq.data.blocks << 9;
-+ struct scatterlist *sg;
-+
-+ for_each_sg(brq.data.sg, sg, brq.data.sg_len, i) {
-+ data_size -= sg->length;
-+ if (data_size <= 0) {
-+ sg->length += data_size;
-+ i++;
-+ break;
-+ }
-+ }
-+ brq.data.sg_len = i;
-+ }
-+
- mmc_queue_bounce_pre(mq);
-
- mmc_wait_for_req(card->host, &brq.mrq);
-@@ -290,8 +317,16 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- * until later as we need to wait for the card to leave
- * programming mode even when things go wrong.
- */
-- if (brq.cmd.error || brq.data.error || brq.stop.error)
-+ if (brq.cmd.error || brq.data.error || brq.stop.error) {
-+ if (brq.data.blocks > 1 && rq_data_dir(req) == READ) {
-+ /* Redo read one sector at a time */
-+ printk(KERN_WARNING "%s: retrying using single "
-+ "block read\n", req->rq_disk->disk_name);
-+ disable_multi = 1;
-+ continue;
-+ }
- status = get_card_status(card, req);
-+ }
-
- if (brq.cmd.error) {
- printk(KERN_ERR "%s: error %d sending read/write "
-@@ -348,8 +383,20 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- #endif
- }
-
-- if (brq.cmd.error || brq.data.error || brq.stop.error)
-+ if (brq.cmd.error || brq.stop.error || brq.data.error) {
-+ if (rq_data_dir(req) == READ) {
-+ /*
-+ * After an error, we redo I/O one sector at a
-+ * time, so we only reach here after trying to
-+ * read a single sector.
-+ */
-+ spin_lock_irq(&md->lock);
-+ ret = __blk_end_request(req, -EIO, brq.data.blksz);
-+ spin_unlock_irq(&md->lock);
-+ continue;
-+ }
- goto cmd_err;
-+ }
-
- /*
- * A block was successfully transferred.
-@@ -371,25 +418,20 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
- * If the card is not SD, we can still ok written sectors
- * as reported by the controller (which might be less than
- * the real number of written sectors, but never more).
-- *
-- * For reads we just fail the entire chunk as that should
-- * be safe in all cases.
- */
-- if (rq_data_dir(req) != READ) {
-- if (mmc_card_sd(card)) {
-- u32 blocks;
-+ if (mmc_card_sd(card)) {
-+ u32 blocks;
-
-- blocks = mmc_sd_num_wr_blocks(card);
-- if (blocks != (u32)-1) {
-- spin_lock_irq(&md->lock);
-- ret = __blk_end_request(req, 0, blocks << 9);
-- spin_unlock_irq(&md->lock);
-- }
-- } else {
-+ blocks = mmc_sd_num_wr_blocks(card);
-+ if (blocks != (u32)-1) {
- spin_lock_irq(&md->lock);
-- ret = __blk_end_request(req, 0, brq.data.bytes_xfered);
-+ ret = __blk_end_request(req, 0, blocks << 9);
- spin_unlock_irq(&md->lock);
- }
-+ } else {
-+ spin_lock_irq(&md->lock);
-+ ret = __blk_end_request(req, 0, brq.data.bytes_xfered);
-+ spin_unlock_irq(&md->lock);
- }
-
- mmc_release_host(card->host);
---
-1.5.6.5
-
diff --git a/packages/linux/linux-2.6.28/collie/defconfig b/packages/linux/linux-2.6.28/collie/defconfig
deleted file mode 100644
index e815c97e42..0000000000
--- a/packages/linux/linux-2.6.28/collie/defconfig
+++ /dev/null
@@ -1,1677 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28
-# Fri Feb 13 10:42:04 2009
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_USER_SCHED is not set
-# CONFIG_CGROUP_SCHED 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 is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_COMPAT_BRK=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_PROFILING=y
-# CONFIG_MARKERS is not set
-CONFIG_OPROFILE=m
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_CLK=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-CONFIG_CLASSIC_RCU=y
-CONFIG_FREEZER=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_PABRT_NOIFAR=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_DEFAULT=y
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-CONFIG_SPARSEMEM_MANUAL=y
-CONFIG_SPARSEMEM=y
-CONFIG_HAVE_MEMORY_PRESENT=y
-CONFIG_SPARSEMEM_EXTREME=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-CONFIG_UNEVICTABLE_LRU=y
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 root=/dev/mmcblk0p1 rootfstype=ext2 rootdelay=3 mem=64M fbcon=rotate:1 debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-
-#
-# CPU Power Management
-#
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR 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=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-CONFIG_XFRM_IPCOMP=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_ASK_IP_FIB_HASH is not set
-# CONFIG_IP_FIB_TRIE is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-# CONFIG_DEFAULT_BIC is not set
-# CONFIG_DEFAULT_CUBIC is not set
-# CONFIG_DEFAULT_HTCP is not set
-# CONFIG_DEFAULT_VEGAS is not set
-# CONFIG_DEFAULT_WESTWOOD is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_NDISC_NODETYPE=y
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NETFILTER_XTABLES=m
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV4 is not set
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-# CONFIG_SCTP_HMAC_MD5 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_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_SA1100_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIBTSDIO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
-CONFIG_BT_HCIVHCI=m
-# CONFIG_AF_RXRPC is not set
-# CONFIG_PHONET is not set
-CONFIG_WIRELESS=y
-CONFIG_CFG80211=y
-CONFIG_NL80211=y
-CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_MAC80211=y
-
-#
-# Rate control algorithm selection
-#
-# CONFIG_MAC80211_RC_PID is not set
-CONFIG_MAC80211_RC_MINSTREL=y
-# CONFIG_MAC80211_RC_DEFAULT_PID is not set
-CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT="minstrel"
-# CONFIG_MAC80211_MESH is not set
-# CONFIG_MAC80211_LEDS is not set
-# CONFIG_MAC80211_DEBUGFS is not set
-# CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_IEEE80211=y
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=y
-CONFIG_IEEE80211_CRYPT_CCMP=y
-CONFIG_IEEE80211_CRYPT_TKIP=y
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# 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
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_RESERVE=1
-# CONFIG_MTD_UBI_GLUEBI is not set
-
-#
-# UBI debugging options
-#
-# CONFIG_MTD_UBI_DEBUG is not set
-# CONFIG_PARPORT is not set
-# CONFIG_PNP is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=m
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-# CONFIG_BLK_DEV_XIP is not set
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-CONFIG_ATA_OVER_ETH=m
-# CONFIG_MISC_DEVICES is not set
-CONFIG_HAVE_IDE=y
-CONFIG_IDE=y
-
-#
-# Please see Documentation/ide/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-# CONFIG_IDE_GD_ATAPI is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-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=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-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_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_SCSI_DH is not set
-# CONFIG_ATA is not set
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-# CONFIG_DM_DELAY is not set
-# CONFIG_DM_UEVENT 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=m
-# CONFIG_VETH is not set
-# CONFIG_ARCNET is not set
-# CONFIG_NET_ETHERNET is not set
-CONFIG_MII=m
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_TR is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-CONFIG_WLAN_80211=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_LIBERTAS=m
-CONFIG_LIBERTAS_CS=m
-CONFIG_LIBERTAS_SDIO=m
-# CONFIG_LIBERTAS_DEBUG is not set
-CONFIG_LIBERTAS_THINFIRM=m
-CONFIG_HERMES=m
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_ATMEL=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_MAC80211_HWSIM=m
-CONFIG_P54_COMMON=m
-# CONFIG_IWLWIFI_LEDS is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_B43=m
-# CONFIG_B43_PCMCIA is not set
-# CONFIG_B43_DEBUG is not set
-CONFIG_B43LEGACY=m
-# CONFIG_B43LEGACY_DEBUG is not set
-CONFIG_B43LEGACY_DMA=y
-CONFIG_B43LEGACY_PIO=y
-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
-# CONFIG_B43LEGACY_DMA_MODE is not set
-# CONFIG_B43LEGACY_PIO_MODE is not set
-CONFIG_RT2X00=m
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PCMCIA_AXNET=m
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_APMPOWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_GPIO 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_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_HTCPEN is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1200_TS is not set
-CONFIG_TOUCHSCREEN_COLLIE_TS=y
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_INPUT_CM109 is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO 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=m
-# CONFIG_SERIAL_8250_CS is not set
-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_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_DEVPORT=y
-# CONFIG_I2C 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_LOCOMO=y
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_DEBUG_GPIO is not set
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# Memory mapped GPIO expanders:
-#
-
-#
-# I2C GPIO expanders:
-#
-
-#
-# PCI GPIO expanders:
-#
-
-#
-# SPI GPIO expanders:
-#
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_W1 is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-CONFIG_BATTERY_COLLIE=y
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THERMAL_HWMON is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-
-#
-# ISA-based Watchdog Cards
-#
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_WDT is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB=m
-CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
-# CONFIG_SSB_PCMCIAHOST is not set
-# CONFIG_SSB_SILENT is not set
-# CONFIG_SSB_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
-
-#
-# Multimedia drivers
-#
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-CONFIG_FB_SA1100=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_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-CONFIG_HID=m
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_GADGET_MUSB_HDRC is not set
-
-#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_VBUS_DRAW=500
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_ATMEL_USBA is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_PXA25X is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_M66592 is not set
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_QE is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_GOKU is not set
-CONFIG_USB_GADGET_SA1100=y
-CONFIG_USB_SA1100=y
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-# CONFIG_USB_ETH_RNDIS is not set
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_USB_G_PRINTER=m
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_BLOCK_BOUNCE is not set
-CONFIG_SDIO_UART=m
-CONFIG_MMC_TEST=m
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-CONFIG_MMC_SDHCI=y
-CONFIG_MMC_SPI=y
-# CONFIG_MEMSTICK is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# SPI RTC drivers
-#
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-# CONFIG_RTC_DRV_SA1100 is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_REGULATOR is not set
-CONFIG_UIO=m
-CONFIG_UIO_PDRV=m
-CONFIG_UIO_PDRV_GENIRQ=m
-CONFIG_UIO_SMX=m
-CONFIG_UIO_SERCOS3=m
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_EXT4_FS=m
-# CONFIG_EXT4DEV_COMPAT is not set
-CONFIG_EXT4_FS_XATTR=y
-# CONFIG_EXT4_FS_POSIX_ACL is not set
-# CONFIG_EXT4_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_JBD2=m
-# CONFIG_JBD2_DEBUG is not set
-CONFIG_FS_MBCACHE=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-CONFIG_JFS_FS=m
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_FILE_LOCKING=y
-CONFIG_XFS_FS=m
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_DEBUG is not set
-CONFIG_OCFS2_FS=m
-CONFIG_OCFS2_FS_O2CB=m
-CONFIG_OCFS2_FS_STATS=y
-CONFIG_OCFS2_DEBUG_MASKLOG=y
-# CONFIG_OCFS2_DEBUG_FS is not set
-# CONFIG_OCFS2_COMPAT_JBD is not set
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_RW 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=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_UBIFS_FS is not set
-CONFIG_CRAMFS=m
-# 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=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL 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="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-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=y
-# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_SLAB 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 is not set
-# 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_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_FAULT_INJECTION is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-
-#
-# Tracers
-#
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_STACK_TRACER is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_KGDB is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-# CONFIG_CRYPTO_FIPS is not set
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD=m
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_HASH2=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_MANAGER2=y
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_NULL=m
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# 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=y
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-# 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=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_WP512=m
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_KHAZAD=m
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=m
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC16=m
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CRC_ITU_T=y
-CONFIG_CRC32=y
-CONFIG_CRC7=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2 b/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2
deleted file mode 100644
index 7069c54dd4..0000000000
--- a/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2
+++ /dev/null
Binary files differ
diff --git a/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2 b/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2
deleted file mode 100644
index 9417b3aab6..0000000000
--- a/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2
+++ /dev/null
Binary files differ
diff --git a/packages/linux/linux-2.6.28/ronetix-pm9263/defconfig b/packages/linux/linux-2.6.28/ronetix-pm9263/defconfig
deleted file mode 100644
index ec5bf7a39a..0000000000
--- a/packages/linux/linux-2.6.28/ronetix-pm9263/defconfig
+++ /dev/null
@@ -1,1438 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28
-# Tue Dec 30 15:28:55 2008
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-pm9263"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-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
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-# CONFIG_GROUP_SCHED is not set
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_SYSFS_DEPRECATED_V2=y
-# CONFIG_RELAY is not set
-CONFIG_NAMESPACES=y
-# CONFIG_UTS_NS is not set
-# CONFIG_IPC_NS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_COMPAT_BRK=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-# CONFIG_MARKERS is not set
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_CLK=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-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_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-CONFIG_CLASSIC_RCU=y
-# CONFIG_FREEZER is not set
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-CONFIG_ARCH_AT91=y
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Atmel AT91 System-on-Chip
-#
-# CONFIG_ARCH_AT91RM9200 is not set
-# CONFIG_ARCH_AT91SAM9260 is not set
-# CONFIG_ARCH_AT91SAM9261 is not set
-CONFIG_ARCH_AT91SAM9263=y
-# CONFIG_ARCH_AT91SAM9RL is not set
-# CONFIG_ARCH_AT91SAM9G20 is not set
-# CONFIG_ARCH_AT91CAP9 is not set
-# CONFIG_ARCH_AT91X40 is not set
-CONFIG_AT91_PMC_UNIT=y
-
-#
-# AT91SAM9263 Board Type
-#
-# CONFIG_MACH_AT91SAM9263EK is not set
-# CONFIG_MACH_USB_A9263 is not set
-# CONFIG_MACH_CSB737 is not set
-# CONFIG_MACH_TOTEMNOVA is not set
-# CONFIG_MACH_NEOCORE926 is not set
-CONFIG_MACH_PM9263=y
-
-#
-# AT91 Board Options
-#
-CONFIG_MTD_AT91_DATAFLASH_CARD=y
-# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
-
-#
-# AT91 Feature Selections
-#
-# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
-CONFIG_AT91_TIMER_HZ=100
-CONFIG_AT91_EARLY_DBGU=y
-# CONFIG_AT91_EARLY_USART0 is not set
-# CONFIG_AT91_EARLY_USART1 is not set
-# CONFIG_AT91_EARLY_USART2 is not set
-# CONFIG_AT91_EARLY_USART3 is not set
-# CONFIG_AT91_EARLY_USART4 is not set
-# CONFIG_AT91_EARLY_USART5 is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_PABRT_NOIFAR=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_ARM_THUMB is not set
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_AT91_CF=y
-
-#
-# Kernel Features
-#
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-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 is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_FLATMEM_HAS_HOLES=y
-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-CONFIG_UNEVICTABLE_LRU=y
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Power Management
-#
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-# CONFIG_VFP is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-# CONFIG_PM is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_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_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_NET_SCHED 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_PHONET is not set
-CONFIG_WIRELESS=y
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_OLD_REGULATORY=y
-# CONFIG_WIRELESS_EXT is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_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=y
-CONFIG_MTD_JEDECPROBE=y
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
-CONFIG_MTD_CFI_AMDSTD=y
-CONFIG_MTD_CFI_STAA=y
-CONFIG_MTD_CFI_UTIL=y
-CONFIG_MTD_RAM=y
-CONFIG_MTD_ROM=y
-CONFIG_MTD_ABSENT=y
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_PHYSMAP_START=0x10000000
-CONFIG_MTD_PHYSMAP_LEN=0x400000
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_DATAFLASH=y
-# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
-# CONFIG_MTD_DATAFLASH_OTP is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD 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=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_ATMEL=y
-# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
-CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
-# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# 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 is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_MISC_DEVICES=y
-CONFIG_ATMEL_PWM=y
-# CONFIG_ATMEL_TCLIB is not set
-# CONFIG_EEPROM_93CX6 is not set
-CONFIG_ATMEL_SSC=y
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_C2PORT is not set
-CONFIG_HAVE_IDE=y
-CONFIG_IDE=y
-
-#
-# Please see Documentation/ide/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-# CONFIG_IDE_GD_ATAPI is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=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=y
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-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_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_SCSI_DH 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_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-CONFIG_MACB=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_SMC911X is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-# CONFIG_B44 is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-# CONFIG_IWLWIFI_LEDS is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_NET_PCMCIA 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
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_GPIO=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_WM97XX is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_ATMEL=y
-CONFIG_SERIAL_ATMEL_CONSOLE=y
-CONFIG_SERIAL_ATMEL_PDC=y
-# CONFIG_SERIAL_ATMEL_TTYAT is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_I2C is not set
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_ATMEL=y
-# CONFIG_SPI_BITBANG is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-CONFIG_W1_MASTER_GPIO=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-CONFIG_W1_SLAVE_SMEM=y
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_BQ27000 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THERMAL_HWMON is not set
-CONFIG_WATCHDOG=y
-CONFIG_WATCHDOG_NOWAYOUT=y
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_AT91SAM9X_WATCHDOG=y
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
-
-#
-# Multimedia drivers
-#
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D15605 is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_ATMEL=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_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 is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-CONFIG_SOUND_OSS_CORE=y
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_VMASTER=y
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-CONFIG_SND_ARM=y
-CONFIG_SND_AT91_AC97=y
-CONFIG_SND_SPI=y
-# CONFIG_SND_AT73C213 is not set
-CONFIG_SND_USB=y
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_PCMCIA=y
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_HID_PID is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# Special HID drivers
-#
-CONFIG_HID_COMPAT=y
-CONFIG_HID_A4TECH=y
-CONFIG_HID_APPLE=y
-CONFIG_HID_BELKIN=y
-CONFIG_HID_BRIGHT=y
-CONFIG_HID_CHERRY=y
-CONFIG_HID_CHICONY=y
-CONFIG_HID_CYPRESS=y
-CONFIG_HID_DELL=y
-CONFIG_HID_EZKEY=y
-CONFIG_HID_GYRATION=y
-CONFIG_HID_LOGITECH=y
-# CONFIG_LOGITECH_FF is not set
-# CONFIG_LOGIRUMBLEPAD2_FF is not set
-CONFIG_HID_MICROSOFT=y
-CONFIG_HID_MONTEREY=y
-CONFIG_HID_PANTHERLORD=y
-# CONFIG_PANTHERLORD_FF is not set
-CONFIG_HID_PETALYNX=y
-CONFIG_HID_SAMSUNG=y
-CONFIG_HID_SONY=y
-CONFIG_HID_SUNPLUS=y
-# CONFIG_THRUSTMASTER_FF is not set
-# CONFIG_ZEROPLUS_FF is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-CONFIG_USB_MON=y
-# CONFIG_USB_WUSB is not set
-# CONFIG_USB_WUSB_CBAF is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_ISP116X_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 information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_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_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_VST is not set
-CONFIG_USB_GADGET=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=y
-CONFIG_USB_AT91=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_PXA27X 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_NET2280 is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_PRINTER is not set
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_SDHCI is not set
-CONFIG_MMC_AT91=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_ATMEL_PWM=y
-CONFIG_LEDS_GPIO=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_LEDS_TRIGGER_BACKLIGHT=y
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# SPI RTC drivers
-#
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_AT91SAM9=y
-CONFIG_RTC_DRV_AT91SAM9_RTT=0
-CONFIG_RTC_DRV_AT91SAM9_GPBR=0
-# CONFIG_DMADEVICES is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_UIO is not set
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS 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_FILE_LOCKING=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_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
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_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_CRAMFS=y
-# 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 is not set
-# CONFIG_NFS_V4 is not set
-CONFIG_ROOT_NFS=y
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=y
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# 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_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=y
-# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
-CONFIG_SCHED_DEBUG=y
-# 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_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 is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
-CONFIG_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_FAULT_INJECTION is not set
-# CONFIG_LATENCYTOP is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-
-#
-# Tracers
-#
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_STACK_TRACER is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_KGDB is not set
-CONFIG_DEBUG_USER=y
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-# CONFIG_CRC_CCITT is not set
-# 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_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch b/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
deleted file mode 100644
index fbd0c90a23..0000000000
--- a/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
+++ /dev/null
@@ -1,1751 +0,0 @@
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/at91sam9263_devices.c.rej linux-2.6.28-at91-ronetix/arch/arm/mach-at91/at91sam9263_devices.c.rej
---- linux-2.6.28-at91/arch/arm/mach-at91/at91sam9263_devices.c.rej 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/at91sam9263_devices.c.rej 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,17 @@
-+***************
-+*** 645,651 ****
-+ if (data->reset_pin)
-+ at91_set_gpio_output(data->reset_pin, 0);
-+
-+- ac97_data = *ek_data;
-+ platform_device_register(&at91sam9263_ac97_device);
-+ }
-+ #else
-+--- 645,651 ----
-+ if (data->reset_pin)
-+ at91_set_gpio_output(data->reset_pin, 0);
-+
-++ ac97_data = *data;
-+ platform_device_register(&at91sam9263_ac97_device);
-+ }
-+ #else
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/board-pm9263.c linux-2.6.28-at91-ronetix/arch/arm/mach-at91/board-pm9263.c
---- linux-2.6.28-at91/arch/arm/mach-at91/board-pm9263.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/board-pm9263.c 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,528 @@
-+/*
-+ * linux/arch/arm/mach-at91/board-pm9263.c
-+ *
-+ * Copyright (C) 2008 Ronetix
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/ads7846.h>
-+#include <linux/i2c/at24.h>
-+#include <linux/fb.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/input.h>
-+#include <linux/leds.h>
-+#include <linux/w1-gpio.h>
-+
-+#include <video/atmel_lcdc.h>
-+
-+#include <asm/setup.h>
-+#include <asm/mach-types.h>
-+#include <asm/irq.h>
-+
-+#include <asm/mach/arch.h>
-+#include <asm/mach/map.h>
-+#include <asm/mach/irq.h>
-+
-+#include <mach/hardware.h>
-+#include <mach/board.h>
-+#include <mach/gpio.h>
-+#include <mach/at91sam9_smc.h>
-+#include <mach/at91_shdwc.h>
-+#include <mach/at91sam9263_matrix.h>
-+
-+#include "sam9_smc.h"
-+#include "generic.h"
-+
-+
-+static void __init pm9263_map_io(void)
-+{
-+ /* Initialize processor: 18.432 MHz crystal */
-+ at91sam9263_initialize(18432000);
-+
-+ /* DGBU on ttyS0. (Rx & Tx only) */
-+ at91_register_uart(0, 0, 0);
-+
-+ /* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */
-+ at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
-+
-+ /* set serial console to ttyS0 (ie, DBGU) */
-+ at91_set_serial_console(0);
-+}
-+
-+static void __init pm9263_init_irq(void)
-+{
-+ at91sam9263_init_interrupts(NULL);
-+}
-+
-+
-+/*
-+ * USB Host port
-+ */
-+static struct at91_usbh_data __initdata pm9263_usbh_data = {
-+ .ports = 2,
-+ .vbus_pin = { 0, 0 },
-+};
-+
-+/*
-+ * USB Device port
-+ */
-+static struct at91_udc_data __initdata pm9263_udc_data = {
-+ .vbus_pin = AT91_PIN_PA25,
-+ .pullup_pin = 0, /* pull-up driven by UDC */
-+};
-+
-+
-+/*
-+ * ADS7846 Touchscreen
-+ */
-+#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
-+static int ads7843_pendown_state(void)
-+{
-+ return !at91_get_gpio_value(AT91_PIN_PA15); /* Touchscreen PENIRQ */
-+}
-+
-+static struct ads7846_platform_data ads_info = {
-+ .model = 7843,
-+ .x_min = 150,
-+ .x_max = 3830,
-+ .y_min = 190,
-+ .y_max = 3830,
-+ .vref_delay_usecs = 100,
-+ .x_plate_ohms = 450,
-+ .y_plate_ohms = 250,
-+ .pressure_max = 15000,
-+ .debounce_max = 1,
-+ .debounce_rep = 0,
-+ .debounce_tol = (~0),
-+ .get_pendown_state = ads7843_pendown_state,
-+};
-+
-+static void __init pm9263_add_device_ts(void)
-+{
-+ at91_set_B_periph(AT91_PIN_PA15, 1); /* External IRQ1, with pullup */
-+ at91_set_gpio_input(AT91_PIN_PA31, 1); /* Touchscreen BUSY signal */
-+}
-+#else
-+static void __init pm9263_add_device_ts(void) {}
-+#endif
-+
-+/*
-+ * SPI devices.
-+ */
-+static struct spi_board_info pm9263_spi_devices[] = {
-+#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
-+ { /* DataFlash card */
-+ .modalias = "mtd_dataflash",
-+ .chip_select = 0,
-+ .max_speed_hz = 15 * 1000 * 1000,
-+ .bus_num = 0,
-+ },
-+#endif
-+#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
-+ {
-+ .modalias = "ads7846",
-+ .chip_select = 0,
-+ .max_speed_hz = 125000 * 16, /* max sample rate * clocks per sample */
-+ .bus_num = 1,
-+ .platform_data = &ads_info,
-+ .irq = AT91SAM9263_ID_IRQ1,
-+ },
-+#endif
-+};
-+
-+
-+/*
-+ * MCI (SD/MMC)
-+ */
-+static struct at91_mmc_data __initdata pm9263_mmc_data = {
-+ .wire4 = 1,
-+ .det_pin = AT91_PIN_PA21,
-+ .wp_pin = AT91_PIN_PA16,
-+// .vcc_pin = ... not connected
-+};
-+
-+
-+/*
-+ * MACB Ethernet device
-+ */
-+static struct at91_eth_data __initdata pm9263_macb_data = {
-+ .phy_irq_pin = AT91_PIN_PE31,
-+ .is_rmii = 1,
-+};
-+
-+
-+/*
-+ * NAND flash
-+ */
-+static struct mtd_partition __initdata pm9263_nand_partition[] = {
-+ {
-+ .name = "Partition 1",
-+ .offset = 0,
-+ .size = MTDPART_SIZ_FULL,
-+ },
-+};
-+
-+static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
-+{
-+ *num_partitions = ARRAY_SIZE(pm9263_nand_partition);
-+ return pm9263_nand_partition;
-+}
-+
-+static struct atmel_nand_data __initdata pm9263_nand_data = {
-+ .ale = 21,
-+ .cle = 22,
-+// .det_pin = ... not connected
-+ .rdy_pin = AT91_PIN_PB30,
-+ .enable_pin = AT91_PIN_PD15,
-+ .partition_info = nand_partitions,
-+#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
-+ .bus_width_16 = 1,
-+#else
-+ .bus_width_16 = 0,
-+#endif
-+};
-+
-+static struct sam9_smc_config __initdata pm9263_nand_smc_config = {
-+ .ncs_read_setup = 0,
-+ .nrd_setup = 1,
-+ .ncs_write_setup = 0,
-+ .nwe_setup = 1,
-+
-+ .ncs_read_pulse = 3,
-+ .nrd_pulse = 3,
-+ .ncs_write_pulse = 3,
-+ .nwe_pulse = 3,
-+
-+ .read_cycle = 5,
-+ .write_cycle = 5,
-+
-+ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
-+ .tdf_cycles = 2,
-+};
-+
-+static void __init pm9263_add_device_nand(void)
-+{
-+ /* setup bus-width (8 or 16) */
-+ if (pm9263_nand_data.bus_width_16)
-+ pm9263_nand_smc_config.mode |= AT91_SMC_DBW_16;
-+ else
-+ pm9263_nand_smc_config.mode |= AT91_SMC_DBW_8;
-+
-+ /* configure chip-select 3 (NAND) */
-+ sam9_smc_configure(3, &pm9263_nand_smc_config);
-+
-+ at91_add_device_nand(&pm9263_nand_data);
-+}
-+
-+
-+/*
-+ * LCD Controller
-+ */
-+#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
-+static struct fb_videomode at91_tft_vga_modes[] = {
-+ {
-+ .name = "TX09D50VM1CCA @ 60",
-+ .refresh = 60,
-+ .xres = 240, .yres = 320,
-+ .pixclock = KHZ2PICOS(4965),
-+
-+ .left_margin = 1, .right_margin = 33,
-+ .upper_margin = 1, .lower_margin = 0,
-+ .hsync_len = 5, .vsync_len = 1,
-+
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ },
-+};
-+
-+static struct fb_monspecs at91fb_default_monspecs = {
-+ .manufacturer = "HIT",
-+ .monitor = "TX09D70VM1CCA",
-+
-+ .modedb = at91_tft_vga_modes,
-+ .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
-+ .hfmin = 15000,
-+ .hfmax = 64000,
-+ .vfmin = 50,
-+ .vfmax = 150,
-+};
-+
-+#define AT91SAM9263_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
-+ | ATMEL_LCDC_DISTYPE_TFT \
-+ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
-+
-+static void at91_lcdc_power_control(int on)
-+{
-+ at91_set_gpio_value(AT91_PIN_PA22, on);
-+}
-+
-+/* Driver datas */
-+static struct atmel_lcdfb_info __initdata pm9263_lcdc_data = {
-+ .lcdcon_is_backlight = true,
-+ .default_bpp = 16,
-+ .default_dmacon = ATMEL_LCDC_DMAEN,
-+ .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2,
-+ .default_monspecs = &at91fb_default_monspecs,
-+ .atmel_lcdfb_power_control = at91_lcdc_power_control,
-+ .guard_time = 1,
-+};
-+
-+#else
-+static struct atmel_lcdfb_info __initdata pm9263_lcdc_data;
-+#endif
-+
-+
-+/*
-+ * GPIO Buttons
-+ */
-+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-+static struct gpio_keys_button pm9263_buttons[] = {
-+ { /* SW3 */
-+ .code = BTN_LEFT,
-+ .gpio = AT91_PIN_PC5,
-+ .active_low = 1,
-+ .desc = "SW3",
-+ .wakeup = 1,
-+ },
-+ { /* SW4 */
-+ .code = BTN_RIGHT,
-+ .gpio = AT91_PIN_PC4,
-+ .active_low = 1,
-+ .desc = "SW4",
-+ .wakeup = 1,
-+ }
-+};
-+
-+static struct gpio_keys_platform_data pm9263_button_data = {
-+ .buttons = pm9263_buttons,
-+ .nbuttons = ARRAY_SIZE(pm9263_buttons),
-+};
-+
-+static struct platform_device pm9263_button_device = {
-+ .name = "gpio-keys",
-+ .id = -1,
-+ .num_resources = 0,
-+ .dev = {
-+ .platform_data = &pm9263_button_data,
-+ }
-+};
-+
-+static void __init pm9263_add_device_buttons(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < pm9263_button_data.nbuttons; i ++) {
-+ at91_set_gpio_input(pm9263_buttons[i].gpio, 1);
-+ at91_set_deglitch(pm9263_buttons[i].gpio, 1);
-+ }
-+
-+// platform_device_register(&pm9263_button_device);
-+}
-+#else
-+static void __init pm9263_add_device_buttons(void) {}
-+#endif
-+
-+
-+/*
-+ * AC97
-+ */
-+static struct atmel_ac97_data pm9263_ac97_data = {
-+ .reset_pin = 0,
-+};
-+
-+
-+/*
-+ * LEDs ... these could all be PWM-driven, for variable brightness
-+ */
-+static struct gpio_led pm9263_leds[] = {
-+ { /* "right" led, green, userled2 (could be driven by pwm2) */
-+ .name = "led0",
-+ .gpio = AT91_PIN_PB7,
-+ .active_low = 1,
-+ .default_trigger = "nand-disk",
-+ },
-+ { /* "power" led, yellow (could be driven by pwm0) */
-+ .name = "led1",
-+ .gpio = AT91_PIN_PB8,
-+ .active_low = 1,
-+ .default_trigger = "heartbeat",
-+ }
-+};
-+
-+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
-+struct w1_gpio_platform_data pm926x_w1_platdata = {
-+ .pin = AT91_PIN_PB31,
-+ .is_open_drain = 0,
-+};
-+
-+static struct platform_device pm926x_w1_device = {
-+ .name = "w1-gpio",
-+ .id = 0,
-+ .dev = {
-+ .platform_data = &pm926x_w1_platdata,
-+ },
-+};
-+#endif
-+
-+#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)
-+static struct at91_cf_data pm9263_cf_data = {
-+ .det_pin = AT91_PIN_PA30,
-+ .rst_pin = AT91_PIN_PA23,
-+ .irq_pin = AT91_PIN_PA24,
-+ // .vcc_pin = ... always powered
-+ .chipselect = 4,
-+};
-+
-+static struct resource pm9263_cf_resources[] = {
-+ [0] = {
-+ .start = AT91_CHIPSELECT_4,
-+ .end = AT91_CHIPSELECT_4 + (0x10000000 - 1),
-+ .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
-+ },
-+};
-+
-+static struct platform_device pm9263_cf_device = {
-+ .name = "at91_cf",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &pm9263_cf_data,
-+ },
-+ .resource = pm9263_cf_resources,
-+ .num_resources = ARRAY_SIZE(pm9263_cf_resources),
-+};
-+
-+#define CF_NWE_SETUP (9 << 0)
-+#define CF_NCS_WR_SETUP (2 << 8)
-+#define CF_NRD_SETUP (9 << 16)
-+#define CF_NCS_RD_SETUP (2 << 24)
-+
-+#define CF_NWE_PULSE (17 << 0)
-+#define CF_NCS_WR_PULSE (27 << 8)
-+#define CF_NRD_PULSE (17 << 16)
-+#define CF_NCS_RD_PULSE (27 << 24)
-+
-+#define CF_NWE_CYCLE (40 << 0)
-+#define CF_NRD_CYCLE (40 << 16)
-+
-+#define CF_TDF (1 << 16)
-+
-+static void __init pm9263_add_device_cf(void) {
-+struct at91_cf_data *data = & pm9263_cf_data;
-+unsigned int csa;
-+
-+ // Setup Compact flash, first enable the address range of
-+ // CS4 in HMATRIX user interface
-+ csa = at91_sys_read(AT91_MATRIX_EBI0CSA);
-+ at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS4A_SMC_CF1);
-+
-+ /* Configure SMC CS4 */
-+ at91_sys_write(AT91_SMC_SETUP(4),
-+ (CF_NWE_SETUP |
-+ CF_NCS_WR_SETUP |
-+ CF_NRD_SETUP |
-+ CF_NCS_RD_SETUP));
-+
-+ at91_sys_write(AT91_SMC_PULSE(4), (CF_NWE_PULSE |
-+ CF_NCS_WR_PULSE |
-+ CF_NRD_PULSE |
-+ CF_NCS_RD_PULSE));
-+ at91_sys_write(AT91_SMC_CYCLE(4), (CF_NWE_CYCLE | CF_NRD_CYCLE));
-+ // 16 bit
-+ at91_sys_write (AT91_SMC_MODE(4), (AT91_SMC_READMODE |
-+ AT91_SMC_WRITEMODE |
-+ AT91_SMC_EXNWMODE_DISABLE |
-+ AT91_SMC_DBW_16 |
-+ CF_TDF));
-+
-+ /* input/irq */
-+ if (data->irq_pin) {
-+ at91_set_gpio_input(data->irq_pin, 0);
-+ at91_set_deglitch(data->irq_pin, 1);
-+ }
-+ at91_set_gpio_input(data->det_pin, 0);
-+ at91_set_deglitch(data->det_pin, 1);
-+
-+ /* outputs, initially off */
-+ if (data->vcc_pin)
-+ at91_set_gpio_output(data->vcc_pin, 0);
-+ if (data->rst_pin)
-+ at91_set_gpio_output(data->rst_pin, 0);
-+
-+ /* force poweron defaults for these pins ... */
-+ at91_set_A_periph(AT91_PIN_PD5, 0); /* PD5/CF_NWAIT */
-+ at91_set_A_periph(AT91_PIN_PD14, 0); /* A25/CFRNW */
-+ at91_set_A_periph(AT91_PIN_PD6, 0); /* NCS4/CFCS0 */
-+ at91_set_A_periph(AT91_PIN_PD8, 0); /* PD8/CFCE1 */
-+ at91_set_A_periph(AT91_PIN_PD9, 0); /* PD9/CFCE2 */
-+
-+ platform_device_register(&pm9263_cf_device);
-+}
-+#else
-+void __init pm9263_add_device_cf(void) {}
-+#endif
-+
-+static void __init pm9263_board_init(void)
-+{
-+ /* Serial */
-+ at91_add_device_serial();
-+ /* USB Host */
-+ at91_add_device_usbh(&pm9263_usbh_data);
-+ /* USB Device */
-+ at91_add_device_udc(&pm9263_udc_data);
-+ /* SPI */
-+ at91_add_device_spi(pm9263_spi_devices, ARRAY_SIZE(pm9263_spi_devices));
-+ /* Touchscreen */
-+ pm9263_add_device_ts();
-+ /* MMC */
-+ at91_add_device_mmc(1, &pm9263_mmc_data);
-+ /* Ethernet */
-+ at91_add_device_eth(&pm9263_macb_data);
-+ /* NAND */
-+ pm9263_add_device_nand();
-+ /* LCD Controller */
-+ at91_add_device_lcdc(&pm9263_lcdc_data);
-+ /* Push Buttons */
-+ pm9263_add_device_buttons();
-+ /* AC97 */
-+ at91_add_device_ac97(&pm9263_ac97_data);
-+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
-+ platform_device_register(&pm926x_w1_device);
-+#endif
-+ /* Compact flash */
-+ pm9263_add_device_cf();
-+ /* LEDs */
-+ at91_gpio_leds(pm9263_leds, ARRAY_SIZE(pm9263_leds));
-+ /* shutdown controller, wakeup button (5 msec low) */
-+ at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
-+ | AT91_SHDW_RTTWKEN);
-+}
-+
-+MACHINE_START(PM9263, "Ronetix PM9263/BB9263")
-+ /* Maintainer: Atmel */
-+ .phys_io = AT91_BASE_SYS,
-+ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
-+ .boot_params = AT91_SDRAM_BASE + 0x100,
-+ .timer = &at91sam926x_timer,
-+ .map_io = pm9263_map_io,
-+ .init_irq = pm9263_init_irq,
-+ .init_machine = pm9263_board_init,
-+MACHINE_END
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/include/mach/at91_ac97c.h linux-2.6.28-at91-ronetix/arch/arm/mach-at91/include/mach/at91_ac97c.h
---- linux-2.6.28-at91/arch/arm/mach-at91/include/mach/at91_ac97c.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/include/mach/at91_ac97c.h 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,282 @@
-+/* linux/include/asm-arm/arch-at91rm9200/ac97c.h
-+ *
-+ * Hardware definition for the ac97c peripheral in the ATMEL at91sam926x processor
-+ *
-+ * Generated 12/09/2005 (11:54:20) AT91 SW Application Group from AC97C_XXXX V1.3
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
-+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * 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.,
-+ * 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+
-+#ifndef __AC97C_H
-+#define __AC97C_H
-+
-+/* -------------------------------------------------------- */
-+/* AC97C ID definitions for AT91SAM926x */
-+/* -------------------------------------------------------- */
-+#ifndef AT91C_ID_AC97C
-+#define AT91C_ID_AC97C 18 /**< AC97 Controller id */
-+#endif /* AT91C_ID_AC97C */
-+
-+/* -------------------------------------------------------- */
-+/* AC97C Base Address definitions for AT91SAM926x */
-+/* -------------------------------------------------------- */
-+#define AT91C_BASE_AC97C 0xFFFA0000 /**< AC97C base address */
-+
-+/* -------------------------------------------------------- */
-+/* PIO definition for AC97C hardware peripheral */
-+/* -------------------------------------------------------- */
-+#define AT91C_PB1_AC97CK (1 << 1) /**< */
-+#define AT91C_PB0_AC97FS (1 << 0) /**< */
-+#define AT91C_PB3_AC97RX (1 << 3) /**< */
-+#define AT91C_PB2_AC97TX (1 << 2) /**< */
-+
-+
-+/* -------------------------------------------------------- */
-+/* Register offset definition for AC97C hardware peripheral */
-+/* -------------------------------------------------------- */
-+#define AC97C_MR (0x0008) /**< Mode Register */
-+#define AC97C_ICA (0x0010) /**< Input Channel AssignementRegister */
-+#define AC97C_OCA (0x0014) /**< Output Channel Assignement Register */
-+#define AC97C_CARHR (0x0020) /**< Channel A Receive Holding Register */
-+#define AC97C_CATHR (0x0024) /**< Channel A Transmit Holding Register */
-+#define AC97C_CASR (0x0028) /**< Channel A Status Register */
-+#define AC97C_CAMR (0x002C) /**< Channel A Mode Register */
-+#define AC97C_CBRHR (0x0030) /**< Channel B Receive Holding Register (optional) */
-+#define AC97C_CBTHR (0x0034) /**< Channel B Transmit Holding Register (optional) */
-+#define AC97C_CBSR (0x0038) /**< Channel B Status Register */
-+#define AC97C_CBMR (0x003C) /**< Channel B Mode Register */
-+#define AC97C_CORHR (0x0040) /**< COdec Transmit Holding Register */
-+#define AC97C_COTHR (0x0044) /**< COdec Transmit Holding Register */
-+#define AC97C_COSR (0x0048) /**< CODEC Status Register */
-+#define AC97C_COMR (0x004C) /**< CODEC Mask Status Register */
-+#define AC97C_SR (0x0050) /**< Status Register */
-+#define AC97C_IER (0x0054) /**< Interrupt Enable Register */
-+#define AC97C_IDR (0x0058) /**< Interrupt Disable Register */
-+#define AC97C_IMR (0x005C) /**< Interrupt Mask Register */
-+#define AC97C_VERSION (0x00FC) /**< Version Register */
-+
-+/* -------------------------------------------------------- */
-+/* Bitfields definition for AC97C hardware peripheral */
-+/* -------------------------------------------------------- */
-+/* --- Register AC97C_MR */
-+#define AT91C_AC97C_ENA (0x1 << 0 ) /**< (AC97C) AC97 Controller Global Enable */
-+#define AT91C_AC97C_WRST (0x1 << 1 ) /**< (AC97C) Warm Reset */
-+#define AT91C_AC97C_VRA (0x1 << 2 ) /**< (AC97C) Variable RAte (for Data Slots) */
-+/* --- Register AC97C_ICA */
-+#define AT91C_AC97C_CHID3 (0x7 << 0 ) /**< (AC97C) Channel Id for the input slot 3 */
-+#define AT91C_AC97C_CHID3_NONE 0x0 /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CA 0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CB 0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CC 0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4 (0x7 << 3 ) /**< (AC97C) Channel Id for the input slot 4 */
-+#define AT91C_AC97C_CHID4_NONE (0x0 << 3) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CA (0x1 << 3) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CB (0x2 << 3) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CC (0x3 << 3) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5 (0x7 << 6 ) /**< (AC97C) Channel Id for the input slot 5 */
-+#define AT91C_AC97C_CHID5_NONE (0x0 << 6) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CA (0x1 << 6) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CB (0x2 << 6) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CC (0x3 << 6) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6 (0x7 << 9 ) /**< (AC97C) Channel Id for the input slot 6 */
-+#define AT91C_AC97C_CHID6_NONE (0x0 << 9) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CA (0x1 << 9) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CB (0x2 << 9) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CC (0x3 << 9) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7 (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
-+#define AT91C_AC97C_CHID7_NONE (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CA (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CB (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CC (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8 (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
-+#define AT91C_AC97C_CHID8_NONE (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CA (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CB (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CC (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9 (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
-+#define AT91C_AC97C_CHID9_NONE (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CA (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CB (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CC (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10 (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
-+#define AT91C_AC97C_CHID10_NONE (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CA (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CB (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CC (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11 (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
-+#define AT91C_AC97C_CHID11_NONE (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CA (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CB (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CC (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12 (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
-+#define AT91C_AC97C_CHID12_NONE (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CA (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CB (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CC (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
-+/* --- Register AC97C_OCA */
-+#define AT91C_AC97C_CHID3 (0x7 << 0 ) /**< (AC97C) Channel Id for the input slot 3 */
-+#define AT91C_AC97C_CHID3_NONE 0x0 /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CA 0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CB 0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CC 0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4 (0x7 << 3 ) /**< (AC97C) Channel Id for the input slot 4 */
-+#define AT91C_AC97C_CHID4_NONE (0x0 << 3) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CA (0x1 << 3) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CB (0x2 << 3) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CC (0x3 << 3) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5 (0x7 << 6 ) /**< (AC97C) Channel Id for the input slot 5 */
-+#define AT91C_AC97C_CHID5_NONE (0x0 << 6) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CA (0x1 << 6) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CB (0x2 << 6) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CC (0x3 << 6) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6 (0x7 << 9 ) /**< (AC97C) Channel Id for the input slot 6 */
-+#define AT91C_AC97C_CHID6_NONE (0x0 << 9) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CA (0x1 << 9) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CB (0x2 << 9) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CC (0x3 << 9) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7 (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
-+#define AT91C_AC97C_CHID7_NONE (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CA (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CB (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CC (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8 (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
-+#define AT91C_AC97C_CHID8_NONE (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CA (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CB (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CC (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9 (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
-+#define AT91C_AC97C_CHID9_NONE (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CA (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CB (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CC (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10 (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
-+#define AT91C_AC97C_CHID10_NONE (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CA (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CB (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CC (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11 (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
-+#define AT91C_AC97C_CHID11_NONE (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CA (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CB (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CC (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12 (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
-+#define AT91C_AC97C_CHID12_NONE (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CA (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CB (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CC (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
-+/* --- Register AC97C_CARHR */
-+#define AT91C_AC97C_RDATA (0xFFFFF << 0 ) /**< (AC97C) Receive data */
-+/* --- Register AC97C_CATHR */
-+#define AT91C_AC97C_TDATA (0xFFFFF << 0 ) /**< (AC97C) Transmit data */
-+/* --- Register AC97C_CASR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+#define AT91C_AC97C_ENDTX (0x1 << 10) /**< (AC97C) */
-+#define AT91C_AC97C_TXBUFE (0x1 << 11) /**< (AC97C) */
-+#define AT91C_AC97C_ENDRX (0x1 << 14) /**< (AC97C) */
-+#define AT91C_AC97C_RXBUFF (0x1 << 15) /**< (AC97C) */
-+/* --- Register AC97C_CAMR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+#define AT91C_AC97C_ENDTX (0x1 << 10) /**< (AC97C) */
-+#define AT91C_AC97C_TXBUFE (0x1 << 11) /**< (AC97C) */
-+#define AT91C_AC97C_ENDRX (0x1 << 14) /**< (AC97C) */
-+#define AT91C_AC97C_RXBUFF (0x1 << 15) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE (0x3 << 16) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE_20_BITS (0x0 << 16) /**< (AC97C) Data size is 20 bits */
-+#define AT91C_AC97C_SIZE_18_BITS (0x1 << 16) /**< (AC97C) Data size is 18 bits */
-+#define AT91C_AC97C_SIZE_16_BITS (0x2 << 16) /**< (AC97C) Data size is 16 bits */
-+#define AT91C_AC97C_SIZE_10_BITS (0x3 << 16) /**< (AC97C) Data size is 10 bits */
-+#define AT91C_AC97C_CEM (0x1 << 18) /**< (AC97C) */
-+#define AT91C_AC97C_CEN (0x1 << 21) /**< (AC97C) */
-+#define AT91C_AC97C_PDCEN (0x1 << 22) /**< (AC97C) */
-+/* --- Register AC97C_CBRHR */
-+#define AT91C_AC97C_RDATA (0xFFFFF << 0 ) /**< (AC97C) Receive data */
-+/* --- Register AC97C_CBTHR */
-+#define AT91C_AC97C_TDATA (0xFFFFF << 0 ) /**< (AC97C) Transmit data */
-+/* --- Register AC97C_CBSR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+/* --- Register AC97C_CBMR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE (0x3 << 16) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE_20_BITS (0x0 << 16) /**< (AC97C) Data size is 20 bits */
-+#define AT91C_AC97C_SIZE_18_BITS (0x1 << 16) /**< (AC97C) Data size is 18 bits */
-+#define AT91C_AC97C_SIZE_16_BITS (0x2 << 16) /**< (AC97C) Data size is 16 bits */
-+#define AT91C_AC97C_SIZE_10_BITS (0x3 << 16) /**< (AC97C) Data size is 10 bits */
-+#define AT91C_AC97C_CEM (0x1 << 18) /**< (AC97C) */
-+#define AT91C_AC97C_CEN (0x1 << 21) /**< (AC97C) */
-+/* --- Register AC97C_CORHR */
-+#define AT91C_AC97C_SDATA (0xFFFF << 0 ) /**< (AC97C) Status Data */
-+/* --- Register AC97C_COTHR */
-+#define AT91C_AC97C_CDATA (0xFFFF << 0 ) /**< (AC97C) Command Data */
-+#define AT91C_AC97C_CADDR (0x7F << 16) /**< (AC97C) COdec control register index */
-+#define AT91C_AC97C_READ (0x1 << 23) /**< (AC97C) Read/Write command */
-+/* --- Register AC97C_COSR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_COMR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_SR */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_IER */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_IDR */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_IMR */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+
-+#endif /* __AC97C_H */
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/Kconfig linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Kconfig
---- linux-2.6.28-at91/arch/arm/mach-at91/Kconfig 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Kconfig 2009-01-12 16:00:41.000000000 +0100
-@@ -280,6 +280,13 @@ config MACH_NEOCORE926
- help
- Select this if you are using the Adeneo Neocore 926 board.
-
-+config MACH_PM9263
-+ bool "Ronetix PM9263 Evaluation Kit"
-+ depends on ARCH_AT91SAM9263
-+ help
-+ Select this if you are using Ronetix's PM9263 board.
-+ <http://ronetix.at/starter_kit_9263.html>
-+
- endif
-
- # ----------------------------------------------------------
-@@ -347,13 +354,13 @@ comment "AT91 Board Options"
-
- config MTD_AT91_DATAFLASH_CARD
- bool "Enable DataFlash Card support"
-- depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926)
-+ depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926 || MACH_PM9263)
- help
- Enable support for the DataFlash card.
-
- config MTD_NAND_ATMEL_BUSWIDTH_16
- bool "Enable 16-bit data bus interface to NAND flash"
-- depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK)
-+ depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK || MACH_PM9263)
- help
- On AT91SAM926x boards both types of NAND flash can be present
- (8 and 16 bit data bus width).
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/Makefile linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Makefile
---- linux-2.6.28-at91/arch/arm/mach-at91/Makefile 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Makefile 2009-01-12 16:00:41.000000000 +0100
-@@ -54,6 +54,7 @@ obj-$(CONFIG_MACH_USB_A9263) += board-us
- obj-$(CONFIG_MACH_CSB737) += board-csb737.o
- obj-$(CONFIG_MACH_TOTEMNOVA) += board-totemnova.o
- obj-$(CONFIG_MACH_NEOCORE926) += board-neocore926.o
-+obj-$(CONFIG_MACH_PM9263) += board-pm9263.o
-
- # AT91SAM9RL board-specific support
- obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
-diff -urNp linux-2.6.28-at91/drivers/pcmcia/at91_cf.c linux-2.6.28-at91-ronetix/drivers/pcmcia/at91_cf.c
---- linux-2.6.28-at91/drivers/pcmcia/at91_cf.c 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/drivers/pcmcia/at91_cf.c 2009-01-12 16:00:42.000000000 +0100
-@@ -27,7 +27,7 @@
-
- #if defined(CONFIG_ARCH_AT91RM9200)
- #include <mach/at91rm9200_mc.h>
--#elif defined(CONFIG_ARCH_AT91SAM9260)
-+#elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263)
- #include <mach/at91sam9_smc.h>
- #else
- #error "Unsupported AT91 processor"
-@@ -138,7 +138,8 @@ at91_cf_set_socket(struct pcmcia_socket
- }
-
- /* toggle reset if needed */
-- gpio_set_value(cf->board->rst_pin, s->flags & SS_RESET);
-+ if (cf->board->rst_pin)
-+ gpio_set_value(cf->board->rst_pin, s->flags & SS_RESET);
-
- pr_debug("%s: Vcc %d, io_irq %d, flags %04x csc %04x\n",
- driver_name, s->Vcc, s->io_irq, s->flags, s->csc_mask);
-diff -urNp linux-2.6.28-at91/drivers/pcmcia/Kconfig linux-2.6.28-at91-ronetix/drivers/pcmcia/Kconfig
---- linux-2.6.28-at91/drivers/pcmcia/Kconfig 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/drivers/pcmcia/Kconfig 2009-01-12 16:00:42.000000000 +0100
-@@ -270,7 +270,7 @@ config BFIN_CFPCMCIA
-
- config AT91_CF
- tristate "AT91 CompactFlash Controller"
-- depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260)
-+ depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263)
- help
- Say Y here to support the CompactFlash controller on AT91 chips.
- Or choose M to compile the driver as a module named "at91_cf".
-diff -urNp linux-2.6.28-at91/sound/arm/at91-ac97.c.rej linux-2.6.28-at91-ronetix/sound/arm/at91-ac97.c.rej
---- linux-2.6.28-at91/sound/arm/at91-ac97.c.rej 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/at91-ac97.c.rej 2009-01-12 16:00:43.000000000 +0100
-@@ -0,0 +1,702 @@
-+***************
-+*** 0 ****
-+--- 1,699 ----
-++ /* drivers/sound/arm/at91-ac97c.c
-++ *
-++ * Driver for the Atmel AC97 Controller
-++ *
-++ * Copyright (C) 2005 Atmel Norway
-++ */
-++
-++ #define CAPTURE 0
-++
-++ #define EXTRA_DEBUG 0
-++
-++ #undef DEBUG
-++ #include <linux/platform_device.h>
-++ #include <linux/module.h>
-++ #include <linux/init.h>
-++ #include <linux/interrupt.h>
-++ #include <linux/delay.h>
-++ #include <linux/clk.h>
-++ #include <linux/atmel_pdc.h>
-++
-++ //#include <sound/driver.h>
-++ #include <sound/core.h>
-++ #include <sound/initval.h>
-++ #include <sound/pcm.h>
-++ #include <sound/ac97_codec.h>
-++
-++ #include <asm/io.h>
-++ #include <mach/hardware.h>
-++ #include <asm/cacheflush.h>
-++
-++ #include <mach/gpio.h>
-++ #include <mach/at91_ac97c.h>
-++ #include <mach/board.h>
-++
-++ #define platform_num_resources(dev) ((dev)->num_resources)
-++ #define platform_resource_start(dev, i) ((dev)->resource[(i)].start)
-++ #define platform_resource_end(dev, i) ((dev)->resource[(i)].end)
-++ #define platform_resource_flags(dev, i) ((dev)->resource[(i)].flags)
-++ #define platform_resource_len(dev, i) \
-++ (platform_resource_end((dev), (i)) - \
-++ platform_resource_start((dev), (i)) + 1)
-++
-++
-++ /* module parameters */
-++ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
-++ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
-++ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
-++
-++ module_param_array(index, int, NULL, 0444);
-++ MODULE_PARM_DESC(index, "Index value for AC97 controller");
-++ module_param_array(id, charp, NULL, 0444);
-++ MODULE_PARM_DESC(id, "ID string for AC97 controller");
-++ module_param_array(enable, bool, NULL, 0444);
-++ MODULE_PARM_DESC(enable, "Enable AC97 controller");
-++
-++ typedef struct at91_ac97 {
-++ spinlock_t lock;
-++ void *regs;
-++ int period;
-++ struct clk *ac97_clk;
-++ struct snd_pcm_substream *playback_substream;
-++ struct snd_card *card;
-++ struct snd_pcm *pcm;
-++ struct snd_ac97 *ac97;
-++ struct snd_ac97_bus *ac97_bus;
-++ int irq;
-++ struct platform_device *pdev;
-++ u8 reset_pin;
-++ } at91_ac97_t;
-++
-++ #define get_chip(card) ((at91_ac97_t *)(card)->private_data)
-++
-++ #define ac97c_writel(chip, reg, val) \
-++ writel((val), (chip)->regs + AC97C_##reg)
-++
-++ #define ac97c_readl(chip, reg) \
-++ readl((chip)->regs + AC97C_##reg)
-++
-++ // PIO management functions
-++ void at91_ac97c_drive_reset(at91_ac97_t *chip, unsigned int value)
-++ {
-++ if (chip->reset_pin)
-++ at91_set_gpio_value(chip->reset_pin, value);
-++ }
-++
-++
-++ static const char driver_name[] = "at91-ac97";
-++
-++ /* PCM part */
-++
-++ static struct snd_pcm_hardware snd_at91_ac97_hw = {
-++ .info = (SNDRV_PCM_INFO_INTERLEAVED
-++ | SNDRV_PCM_INFO_MMAP
-++ | SNDRV_PCM_INFO_MMAP_VALID
-++ | SNDRV_PCM_INFO_BLOCK_TRANSFER),
-++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-++ .rates = SNDRV_PCM_RATE_CONTINUOUS,
-++ .rate_min = 8000,
-++ .rate_max = 48000,
-++ .channels_min = 2,
-++ .channels_max = 2,
-++ .buffer_bytes_max = 256*1024,
-++ .period_bytes_min = 1024,
-++ .period_bytes_max = 4*1024,
-++ .periods_min = 1,
-++ .periods_max = 64,
-++ };
-++
-++ static int snd_at91_ac97_playback_open(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ struct snd_pcm_runtime *runtime = substream->runtime;
-++
-++ runtime->hw = snd_at91_ac97_hw;
-++ chip->playback_substream = substream;
-++ chip->period = 0;
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_playback_open\n\r", driver_name);
-++
-++ return 0;
-++ }
-++
-++ static int snd_at91_ac97_playback_close(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++
-++ chip->playback_substream = NULL;
-++ return 0;
-++ }
-++
-++ static int snd_at91_ac97_hw_params(struct snd_pcm_substream *substream,
-++ struct snd_pcm_hw_params *hw_params)
-++ {
-++ int err;
-++
-++ err = snd_pcm_lib_malloc_pages(substream,
-++ params_buffer_bytes(hw_params));
-++ return err;
-++ }
-++
-++ static int snd_at91_ac97_hw_free(struct snd_pcm_substream *substream)
-++ {
-++
-++ snd_pcm_lib_free_pages(substream);
-++
-++ return 0;
-++ }
-++
-++ static int snd_at91_ac97_playback_prepare(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ struct snd_pcm_runtime *runtime = substream->runtime;
-++ int block_size = frames_to_bytes(runtime, runtime->period_size);
-++ unsigned long word = 0;
-++
-++ //clean_dcache_region(runtime->dma_area, block_size * 2);
-++ snd_printd(KERN_DEBUG "%s : block_size = %d\n\r", driver_name, block_size);
-++
-++ /* Assign slots to channels */
-++ switch (substream->runtime->channels) {
-++ /* TODO: Support more than two channels */
-++ case 1:
-++ word |= AT91C_AC97C_CHID3_CA;
-++ break;
-++ case 2:
-++ default:
-++ /* Assign Left and Right slots (3,4) to Channel A */
-++ word |= AT91C_AC97C_CHID3_CA | AT91C_AC97C_CHID4_CA;
-++ break;
-++ }
-++
-++ ac97c_writel(chip, OCA, word);
-++
-++ /*
-++ * Configure sample format and size.
-++ * FIXME: Avoid conflicts with capture channel.
-++ */
-++ word = AT91C_AC97C_PDCEN | AT91C_AC97C_SIZE_16_BITS;
-++
-++ switch (runtime->format){
-++ case SNDRV_PCM_FORMAT_S16_BE:
-++ word |= AT91C_AC97C_CEM;
-++ break;
-++ case SNDRV_PCM_FORMAT_S16_LE:
-++ default:
-++ break;
-++ }
-++
-++ ac97c_writel(chip, CAMR, word);
-++
-++ /* Set variable rate if needed */
-++ if ( runtime->rate != 48000 ){
-++ word = ac97c_readl(chip, MR);
-++ word |= AT91C_AC97C_VRA;
-++ ac97c_writel(chip, MR, word);
-++ } else {
-++ /* Clear Variable Rate Bit */
-++ word = ac97c_readl(chip, MR);
-++ word &= ~AT91C_AC97C_VRA;
-++ ac97c_writel(chip, MR, word);
-++ }
-++
-++ /* Set rate */
-++ snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate);
-++
-++ snd_printd(KERN_DEBUG
-++ "%s : dma_addr = %x\n\r"
-++ " : dma_area = %p\n\r"
-++ " : dma_bytes = %d\n\r",
-++ driver_name, runtime->dma_addr,
-++ runtime->dma_area, runtime->dma_bytes);
-++
-++ /* Initialize and start the PDC */
-++ writel(runtime->dma_addr, chip->regs + ATMEL_PDC_TPR);
-++ writel(block_size / 2, chip->regs + ATMEL_PDC_TCR);
-++ writel(runtime->dma_addr + block_size, chip->regs + ATMEL_PDC_TNPR);
-++ writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
-++
-++ /* Enable Channel A interrupts */
-++ ac97c_writel(chip, IER, AT91C_AC97C_CAEVT);
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_playback_prepare\n\r", driver_name);
-++
-++ return 0;
-++ }
-++
-++ static int at91_ac97_trigger(struct snd_pcm_substream *substream, int cmd)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ unsigned long camr, ptcr = 0, flags;
-++ int err = 0;
-++
-++ spin_lock_irqsave(&chip->lock, flags);
-++ camr = ac97c_readl(chip, CAMR);
-++
-++ switch (cmd) {
-++ case SNDRV_PCM_TRIGGER_START:
-++ camr |= (AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
-++ ptcr = ATMEL_PDC_TXTEN;
-++ break;
-++ case SNDRV_PCM_TRIGGER_STOP:
-++ camr &= ~(AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
-++ ptcr = ATMEL_PDC_TXTDIS;
-++ break;
-++ default:
-++ err = -EINVAL;
-++ break;
-++ }
-++
-++ ac97c_writel(chip, CAMR, camr);
-++ writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
-++
-++ spin_unlock_irqrestore(&chip->lock, flags);
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_trigger\n\r", driver_name);
-++
-++ return err;
-++ }
-++
-++ static snd_pcm_uframes_t snd_at91_ac97_pointer(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ struct snd_pcm_runtime *runtime = substream->runtime;
-++ snd_pcm_uframes_t pos;
-++ unsigned long bytes;
-++
-++ bytes = readl(chip->regs + ATMEL_PDC_TPR) - runtime->dma_addr;
-++
-++ pos = bytes_to_frames(runtime, bytes);
-++ if (pos >= runtime->buffer_size)
-++ pos -= runtime->buffer_size;
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_pointer\n\r", driver_name);
-++
-++ return pos;
-++ }
-++
-++ static struct snd_pcm_ops at91_ac97_playback_ops = {
-++ .open = snd_at91_ac97_playback_open,
-++ .close = snd_at91_ac97_playback_close,
-++ .ioctl = snd_pcm_lib_ioctl,
-++ .hw_params = snd_at91_ac97_hw_params,
-++ .hw_free = snd_at91_ac97_hw_free,
-++ .prepare = snd_at91_ac97_playback_prepare,
-++ .trigger = at91_ac97_trigger,
-++ .pointer = snd_at91_ac97_pointer,
-++ };
-++
-++ #if CAPTURE
-++ static struct snd_pcm_ops at91_ac97_capture_ops = {
-++ .open = snd_at91_ac97_playback_open,
-++ .close = snd_at91_ac97_playback_close,
-++ .ioctl = snd_pcm_lib_ioctl,
-++ .hw_params = snd_at91_ac97_hw_params,
-++ .hw_free = snd_at91_ac97_hw_free,
-++ .prepare = snd_at91_ac97_playback_prepare,
-++ .trigger = at91_ac97_trigger,
-++ .pointer = snd_at91_ac97_pointer,
-++ };
-++ #endif
-++
-++ static struct ac97_pcm at91_ac97_pcm_defs[] __devinitdata = {
-++ /* Playback */
-++ {
-++ .exclusive = 1,
-++ .r = { {
-++ .slots = ((1 << AC97_SLOT_PCM_LEFT)
-++ | (1 << AC97_SLOT_PCM_RIGHT)),
-++ } },
-++ },
-++ #if CAPTURE
-++ { /* Mic in */
-++ .stream = 1,
-++ .exclusive = 1,
-++ .r = {
-++ [0] = {
-++ .slots = (1 << AC97_SLOT_MIC),
-++ },
-++ },
-++ }
-++ #endif
-++ };
-++
-++ static int __devinit snd_at91_ac97_pcm_new(at91_ac97_t *chip)
-++ {
-++ struct snd_pcm *pcm;
-++ int err;
-++
-++ err = snd_ac97_pcm_assign(chip->ac97_bus, 1, at91_ac97_pcm_defs);
-++ if (err)
-++ return err;
-++
-++ err = snd_pcm_new(chip->card, "Atmel AC97", 0, 1, 0, &pcm);
-++ if (err)
-++ return err;
-++
-++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
-++ &chip->pdev->dev,
-++ 128 * 1024, 256 * 1024);
-++
-++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &at91_ac97_playback_ops);
-++ #if CAPTURE
-++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &at91_ac97_capture_ops);
-++ #endif
-++ pcm->private_data = chip;
-++ pcm->info_flags = 0;
-++ strcpy(pcm->name, "Atmel AC97");
-++ chip->pcm = pcm;
-++
-++ return 0;
-++ }
-++
-++ /* Mixer part */
-++ static int snd_at91_ac97_mixer_new(at91_ac97_t *chip)
-++ {
-++ int err;
-++ struct snd_ac97_template template;
-++
-++ memset(&template, 0, sizeof(template));
-++ template.private_data = chip;
-++ template.num = 0;
-++ template.addr = 0;
-++ err = snd_ac97_mixer(chip->ac97_bus, &template, &chip->ac97);
-++
-++ return err;
-++ }
-++
-++
-++ static irqreturn_t snd_at91_ac97_interrupt(int irq, void *dev_id)
-++ {
-++ at91_ac97_t *chip = dev_id;
-++ unsigned long status;
-++ unsigned long dummy;
-++
-++ status = ac97c_readl(chip, SR);
-++
-++ if (status & AT91C_AC97C_CAEVT) {
-++ struct snd_pcm_runtime *runtime;
-++ int offset, next_period, block_size;
-++ unsigned long casr;
-++
-++ runtime = chip->playback_substream->runtime;
-++ block_size = frames_to_bytes(runtime, runtime->period_size);
-++
-++ casr = ac97c_readl(chip, CASR);
-++
-++ if (casr & AT91C_AC97C_ENDTX) {
-++ chip->period++;
-++ if (chip->period == runtime->periods)
-++ chip->period = 0;
-++ next_period = chip->period + 1;
-++ if (next_period == runtime->periods)
-++ next_period = 0;
-++
-++ offset = block_size * next_period;
-++
-++ writel(runtime->dma_addr + offset, chip->regs + ATMEL_PDC_TNPR);
-++ writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
-++
-++ snd_pcm_period_elapsed(chip->playback_substream);
-++ } else {
-++ printk(KERN_WARNING
-++ "Spurious AC97A interrupt, status = 0x%08lx\n",
-++ (unsigned long)casr);
-++ }
-++ } else {
-++ printk(KERN_WARNING
-++ "Spurious AC97 interrupt, status = 0x%08lx\n",
-++ status);
-++ }
-++
-++ dummy = ac97c_readl(chip, SR);
-++
-++ return IRQ_HANDLED;
-++ }
-++
-++
-++ /* CODEC part */
-++
-++ static void snd_at91_ac97_hard_reset(at91_ac97_t *chip)
-++ {
-++ // Enable AC97 Controller.
-++ // Perform a cold (hard) reset of the AC97 codec.
-++ ac97c_writel(chip, MR, 0);
-++ ac97c_writel(chip, MR, AT91C_AC97C_ENA);
-++
-++ at91_ac97c_drive_reset(chip, 0);
-++ udelay(1);
-++ at91_ac97c_drive_reset(chip, 1);
-++ udelay(1);
-++ }
-++
-++
-++ static void snd_at91_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
-++ unsigned short val)
-++ {
-++ at91_ac97_t *chip = ac97->private_data;
-++ unsigned long word;
-++ int timeout = 0x100;
-++
-++ snd_printd(KERN_DEBUG "%s : Writing codec register 0x%x = 0x%x\n\r", driver_name, reg, val);
-++
-++ word = (reg & 0x7f) << 16 | val;
-++
-++ do {
-++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY) {
-++ ac97c_writel(chip, COTHR, word);
-++ return;
-++ }
-++ udelay(1);
-++ } while (--timeout);
-++
-++ snd_printk(KERN_WARNING "at91-ac97: codec write timeout\n\r");
-++ }
-++
-++ static unsigned short snd_at91_ac97_read(struct snd_ac97 *ac97,
-++ unsigned short reg)
-++ {
-++ at91_ac97_t *chip = ac97->private_data;
-++ unsigned long word;
-++ int timeout = 0x100;
-++
-++
-++ word = (0x80 | (reg & 0x7f)) << 16;
-++
-++ do {
-++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY){
-++ ac97c_writel(chip, COTHR, word);
-++ break;
-++ }
-++ udelay(1);
-++ } while (--timeout);
-++
-++ if (!timeout)
-++ goto timed_out;
-++
-++ timeout = 0x100;
-++
-++ do {
-++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_RXRDY){
-++ unsigned short val = (unsigned short) ac97c_readl(chip, CORHR);
-++ return val;
-++ }
-++ udelay(1);
-++ } while (--timeout);
-++
-++ if (!timeout)
-++ goto timed_out1;
-++
-++ timed_out:
-++ snd_printk(KERN_WARNING "at91-ac97: codec read timeout\n\r");
-++ return 0xffff;
-++
-++ timed_out1:
-++ #if EXTRA_DEBUG
-++ snd_printk(KERN_WARNING "at91-ac97: codec read timeout 1\n\r");
-++ #endif
-++ return 0xffff;
-++ }
-++
-++ static void snd_at91_ac97_warm_reset(struct snd_ac97 *ac97)
-++ {
-++ at91_ac97_t *chip = ac97->private_data;
-++ volatile unsigned int mr = ac97c_readl(chip, MR);
-++
-++ mr |= AT91C_AC97C_WRST;
-++
-++ ac97c_writel(chip, MR, mr);
-++ udelay(1);
-++
-++ mr &= ~AT91C_AC97C_WRST;
-++ ac97c_writel(chip, MR, mr);
-++ }
-++
-++ static void snd_at91_ac97_destroy(struct snd_card *card)
-++ {
-++ at91_ac97_t *chip = get_chip(card);
-++
-++ #if 0
-++ // Disable AC97 Controller
-++ ac97c_writel(chip, MR, 0);
-++
-++ // Disable AC97 Controller clock
-++ if (chip->ac97_clk) clk_disable(chip->ac97_clk);
-++ #endif
-++ if (chip->irq != -1) {
-++ free_irq(chip->irq, chip);
-++ chip->irq = -1;
-++ }
-++ if (chip->regs) {
-++ iounmap(chip->regs);
-++ chip->regs = NULL;
-++ }
-++ }
-++
-++ static int __devinit snd_at91_ac97_create(struct snd_card *card,
-++ struct platform_device *pdev)
-++ {
-++ static struct snd_ac97_bus_ops ops = {
-++ .write = snd_at91_ac97_write,
-++ .read = snd_at91_ac97_read,
-++ .reset = snd_at91_ac97_warm_reset,
-++ };
-++
-++ at91_ac97_t *chip = get_chip(card);
-++ int irq, err = 0;
-++
-++ card->private_free = snd_at91_ac97_destroy;
-++
-++ spin_lock_init(&chip->lock);
-++ chip->card = card;
-++ chip->pdev = pdev;
-++ chip->irq = -1;
-++
-++ if (!(platform_resource_flags(pdev, 0) & IORESOURCE_MEM)
-++ || !(platform_resource_flags(pdev, 1) & IORESOURCE_IRQ))
-++ return -ENODEV;
-++
-++ irq = platform_resource_start(pdev, 1);
-++
-++ err = request_irq(irq, snd_at91_ac97_interrupt, 0, "ac97", chip);
-++ if (err) {
-++ snd_printk(KERN_WARNING "unable to request IRQ%d\n", irq);
-++ return err;
-++ }
-++
-++ chip->irq = irq;
-++ #if EXTRA_DEBUG
-++ snd_printk(KERN_INFO "AC97C regs = %08X \n", platform_resource_start(pdev, 0));
-++ snd_printk(KERN_INFO "AC97C irq = %d \n",irq);
-++ #endif
-++
-++ chip->regs = ioremap(platform_resource_start(pdev, 0),
-++ platform_resource_len(pdev, 0));
-++ if (!chip->regs) {
-++ snd_printk(KERN_WARNING "unable to remap AC97C io memory\n");
-++ return -ENOMEM;
-++ }
-++
-++ snd_card_set_dev(card, &pdev->dev);
-++
-++ err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus);
-++
-++ return err;
-++ }
-++
-++ static int __devinit snd_at91_ac97_probe(struct platform_device *pdev)
-++ {
-++ static int dev;
-++ struct atmel_ac97_data *pdata = pdev->dev.platform_data;
-++ struct snd_card *card;
-++ at91_ac97_t *chip;
-++ int err;
-++
-++ if (dev >= SNDRV_CARDS)
-++ return -ENODEV;
-++ if (!enable[dev]) {
-++ dev++;
-++ return -ENOENT;
-++ }
-++ card = snd_card_new(index[dev], id[dev], THIS_MODULE,
-++ sizeof(at91_ac97_t));
-++ if (!card)
-++ return -ENOMEM;
-++ chip = get_chip(card);
-++
-++ err = snd_at91_ac97_create(card, pdev);
-++ if (err)
-++ goto out_free_card;
-++
-++ // Enable AC97 Controller clock
-++ chip->reset_pin = pdata->reset_pin;
-++ chip->ac97_clk = clk_get(NULL, "ac97_clk");
-++ if(!chip->ac97_clk)
-++ goto out_free_card;
-++
-++ clk_enable(chip->ac97_clk);
-++
-++ // Perform a codec hard reset.
-++ // This also enables the AC97 Controller.
-++ snd_at91_ac97_hard_reset(chip);
-++
-++ err = snd_at91_ac97_mixer_new(chip);
-++ if (err)
-++ goto out_free_card;
-++
-++ err = snd_at91_ac97_pcm_new(chip);
-++ if (err)
-++ goto out_free_card;
-++
-++
-++ strcpy(card->driver, "ac97c");
-++ strcpy(card->shortname, "Atmel AC97");
-++ sprintf(card->longname, "Atmel AC97 Controller at %#lx, irq %i",
-++ (unsigned long) platform_resource_start(pdev, 0), (int) chip->irq);
-++
-++ err = snd_card_register(card);
-++ if (err)
-++ goto out_free_card;
-++
-++ dev_set_drvdata(&pdev->dev, card);
-++ dev++;
-++ return 0;
-++
-++ out_free_card:
-++ snd_card_free(card);
-++ return err;
-++ }
-++
-++ static int __devexit snd_at91_ac97_remove(struct platform_device *pdev)
-++ {
-++ struct snd_card *card = dev_get_drvdata(&pdev->dev);
-++ at91_ac97_t *chip;
-++
-++
-++ if (! card) return 0;
-++
-++ chip = get_chip(card);
-++
-++ snd_card_free(card);
-++
-++ // Disable AC97 Controller
-++ ac97c_writel(chip, MR, 0);
-++
-++ // Disable AC97 Controller clock
-++ clk_disable(chip->ac97_clk);
-++
-++ dev_set_drvdata(&pdev->dev, NULL);
-++
-++ return 0;
-++ }
-++
-++ static struct platform_driver at91_ac97_driver =
-++ {
-++ .probe = snd_at91_ac97_probe,
-++ .remove = __devexit_p(snd_at91_ac97_remove),
-++ .driver =
-++ {
-++ .name = "ac97c",
-++ }
-++ ,
-++ };
-++
-++ static int __init at91_ac97_init(void)
-++ {
-++ return platform_driver_register(&at91_ac97_driver);
-++ }
-++
-++ static void __exit at91_ac97_exit(void)
-++ {
-++ platform_driver_unregister(&at91_ac97_driver);
-++ }
-++
-++ module_init(at91_ac97_init);
-++ module_exit(at91_ac97_exit);
-++
-++ MODULE_LICENSE("GPL");
-++ MODULE_DESCRIPTION("Driver for Atmel AC97 Controller");
-++ MODULE_AUTHOR("Atmel");
-diff -urNp linux-2.6.28-at91/sound/arm/Kconfig linux-2.6.28-at91-ronetix/sound/arm/Kconfig
---- linux-2.6.28-at91/sound/arm/Kconfig 2009-01-12 15:59:32.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Kconfig 2009-01-12 16:00:42.000000000 +0100
-@@ -59,5 +59,14 @@ config SND_AT91_AC97
- Say Y or M if you want to support any AC97 codec attached to
- the SAM926X AC97 Controller.
-
-+config SND_AT91_AC97
-+ tristate "AC97 Controller driver for SAM926X familly from ATMEL"
-+ depends on SND && ARCH_AT91SAM9263
-+ select SND_PCM
-+ select SND_AC97_CODEC
-+ help
-+ Say Y or M if you want to support any AC97 codec attached to
-+ the SAM926X AC97 Controller.
-+
- endif # SND_ARM
-
-diff -urNp linux-2.6.28-at91/sound/arm/Kconfig.orig linux-2.6.28-at91-ronetix/sound/arm/Kconfig.orig
---- linux-2.6.28-at91/sound/arm/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Kconfig.orig 2009-01-12 16:00:31.000000000 +0100
-@@ -0,0 +1,63 @@
-+# ALSA ARM drivers
-+
-+menuconfig SND_ARM
-+ bool "ARM sound devices"
-+ depends on ARM
-+ default y
-+ help
-+ Support for sound devices specific to ARM architectures.
-+ Drivers that are implemented on ASoC can be found in
-+ "ALSA for SoC audio support" section.
-+
-+if SND_ARM
-+
-+config SND_SA11XX_UDA1341
-+ tristate "SA11xx UDA1341TS driver (iPaq H3600)"
-+ depends on ARCH_SA1100 && L3
-+ select SND_PCM
-+ help
-+ Say Y here if you have a Compaq iPaq H3x00 handheld computer
-+ and want to use its Philips UDA 1341 audio chip.
-+
-+ To compile this driver as a module, choose M here: the module
-+ will be called snd-sa11xx-uda1341.
-+
-+config SND_ARMAACI
-+ tristate "ARM PrimeCell PL041 AC Link support"
-+ depends on ARM_AMBA
-+ select SND_PCM
-+ select SND_AC97_CODEC
-+
-+config SND_PXA2XX_PCM
-+ tristate
-+ select SND_PCM
-+
-+config SND_PXA2XX_LIB
-+ tristate
-+ select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97
-+
-+config SND_PXA2XX_LIB_AC97
-+ bool
-+
-+config SND_PXA2XX_AC97
-+ tristate "AC97 driver for the Intel PXA2xx chip"
-+ depends on ARCH_PXA
-+ select SND_PXA2XX_PCM
-+ select SND_AC97_CODEC
-+ select SND_PXA2XX_LIB
-+ select SND_PXA2XX_LIB_AC97
-+ help
-+ Say Y or M if you want to support any AC97 codec attached to
-+ the PXA2xx AC97 interface.
-+
-+config SND_AT91_AC97
-+ tristate "AC97 Controller driver for SAM926X familly from ATMEL"
-+ depends on SND && ARCH_AT91
-+ select SND_PCM
-+ select SND_AC97_CODEC
-+ help
-+ Say Y or M if you want to support any AC97 codec attached to
-+ the SAM926X AC97 Controller.
-+
-+endif # SND_ARM
-+
-diff -urNp linux-2.6.28-at91/sound/arm/Makefile.orig linux-2.6.28-at91-ronetix/sound/arm/Makefile.orig
---- linux-2.6.28-at91/sound/arm/Makefile.orig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Makefile.orig 2009-01-12 16:00:31.000000000 +0100
-@@ -0,0 +1,23 @@
-+#
-+# Makefile for ALSA
-+#
-+
-+obj-$(CONFIG_SND_SA11XX_UDA1341) += snd-sa11xx-uda1341.o
-+snd-sa11xx-uda1341-objs := sa11xx-uda1341.o
-+
-+obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o
-+snd-aaci-objs := aaci.o devdma.o
-+
-+obj-$(CONFIG_SND_PXA2XX_PCM) += snd-pxa2xx-pcm.o
-+snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
-+
-+obj-$(CONFIG_SND_PXA2XX_LIB) += snd-pxa2xx-lib.o
-+snd-pxa2xx-lib-y := pxa2xx-pcm-lib.o
-+snd-pxa2xx-lib-$(CONFIG_SND_PXA2XX_LIB_AC97) += pxa2xx-ac97-lib.o
-+
-+obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
-+snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-+
-+obj-$(CONFIG_SND_AT91_AC97) += snd-at91-ac97.o
-+snd-at91-ac97-objs := at91-ac97.o
-+
-diff -urNp linux-2.6.28-at91/sound/arm/Makefile.rej linux-2.6.28-at91-ronetix/sound/arm/Makefile.rej
---- linux-2.6.28-at91/sound/arm/Makefile.rej 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Makefile.rej 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,12 @@
-+***************
-+*** 17,19 ****
-+
-+ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
-+ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-+--- 17,22 ----
-+
-+ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
-+ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-++
-++ obj-$(CONFIG_SND_AT91_AC97) += snd-at91-ac97.o
-++ snd-at91-ac97-objs := at91-ac97.o
diff --git a/packages/linux/linux-2.6.28/stb225/defconfig b/packages/linux/linux-2.6.28/stb225/defconfig
deleted file mode 100644
index fe27cef677..0000000000
--- a/packages/linux/linux-2.6.28/stb225/defconfig
+++ /dev/null
@@ -1,1247 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.29-rc1
-# Fri Jan 16 20:04:29 2009
-#
-CONFIG_MIPS=y
-
-#
-# Machine selection
-#
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_BCM47XX is not set
-# CONFIG_MIPS_COBALT is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_LASAT is not set
-# CONFIG_LEMOTE_FULONG is not set
-# CONFIG_MIPS_MALTA is not set
-# CONFIG_MIPS_SIM is not set
-# CONFIG_MACH_EMMA is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_NXP_STB220 is not set
-CONFIG_NXP_STB225=y
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MIKROTIK_RB532 is not set
-# CONFIG_WR_PPMC is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CEVT_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-CONFIG_CSRC_R4K=y
-CONFIG_DMA_NONCOHERENT=y
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_GPIO=y
-# CONFIG_CPU_BIG_ENDIAN is not set
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
-CONFIG_IRQ_CPU=y
-CONFIG_SOC_PNX833X=y
-CONFIG_SOC_PNX8335=y
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-
-#
-# CPU selection
-#
-# CONFIG_CPU_LOONGSON2 is not set
-# CONFIG_CPU_MIPS32_R1 is not set
-CONFIG_CPU_MIPS32_R2=y
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_VR41XX is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_SYS_HAS_CPU_MIPS32_R2=y
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPSR2=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_HARDWARE_WATCHPOINTS=y
-
-#
-# Kernel type
-#
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PAGE_SIZE_16KB is not set
-# CONFIG_PAGE_SIZE_64KB is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-CONFIG_CPU_HAS_LLSC=y
-CONFIG_CPU_MIPSR2_IRQ_VI=y
-CONFIG_CPU_HAS_SYNC=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-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=4
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
-CONFIG_VIRT_TO_BUS=y
-CONFIG_UNEVICTABLE_LRU=y
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-# CONFIG_HZ_48 is not set
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_128=y
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_1000 is not set
-# CONFIG_HZ_1024 is not set
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_HZ=128
-# CONFIG_PREEMPT_NONE is not set
-CONFIG_PREEMPT_VOLUNTARY=y
-# CONFIG_PREEMPT is not set
-# CONFIG_KEXEC is not set
-# CONFIG_SECCOMP is not set
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-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
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_GROUP_SCHED is not set
-
-#
-# Control Group support
-#
-# 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 is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_PCSPKR_PLATFORM=y
-CONFIG_COMPAT_BRK=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-CONFIG_CLASSIC_RCU=y
-# CONFIG_TREE_RCU is not set
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_PREEMPT_RCU_TRACE is not set
-CONFIG_FREEZER=y
-
-#
-# Bus options (PCI, PCMCIA, EISA, ISA, TC)
-#
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_MMU=y
-# CONFIG_PCCARD is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_HAVE_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-CONFIG_TRAD_SIGNALS=y
-
-#
-# Power management options
-#
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_COMPAT_NET_DEV_OPS=y
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=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 is not set
-# 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=y
-# 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=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_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_PHONET is not set
-CONFIG_WIRELESS=y
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_OLD_REGULATORY=y
-# CONFIG_WIRELESS_EXT is not set
-# CONFIG_LIB80211 is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_WIMAX is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_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=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_NOSWAP is not set
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_LE_BYTE_SWAP=y
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# 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 is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_QINFO_PROBE 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 is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_MISC_DEVICES is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN 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 is not set
-# CONFIG_SCSI_DH is not set
-CONFIG_ATA=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_SATA_PMP=y
-CONFIG_ATA_SFF=y
-# CONFIG_SATA_MV is not set
-# CONFIG_PATA_PLATFORM 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 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_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_IP3902=y
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-# CONFIG_IWLWIFI_LEDS is not set
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-# 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
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_EVBUG=m
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-# CONFIG_VT_CONSOLE is not set
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PNX8XXX=y
-CONFIG_SERIAL_PNX8XXX_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# 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_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_STUB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_DS1682 is not set
-# CONFIG_AT24 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_SPI is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THERMAL_HWMON is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_REGULATOR is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_DVB_CORE=y
-CONFIG_VIDEO_MEDIA=y
-
-#
-# Multimedia drivers
-#
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=y
-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=y
-CONFIG_MEDIA_TUNER_TDA8290=y
-CONFIG_MEDIA_TUNER_TDA9887=y
-CONFIG_MEDIA_TUNER_TEA5761=y
-CONFIG_MEDIA_TUNER_TEA5767=y
-CONFIG_MEDIA_TUNER_MT20XX=y
-CONFIG_MEDIA_TUNER_XC2028=y
-CONFIG_MEDIA_TUNER_XC5000=y
-# CONFIG_DVB_DYNAMIC_MINORS is not set
-CONFIG_DVB_CAPTURE_DRIVERS=y
-# CONFIG_TTPCI_EEPROM is not set
-# CONFIG_DVB_B2C2_FLEXCOP is not set
-
-#
-# Supported DVB Frontends
-#
-
-#
-# Customise DVB Frontends
-#
-# CONFIG_DVB_FE_CUSTOMISE is not set
-
-#
-# Multistandard (satellite) frontends
-#
-# CONFIG_DVB_STB0899 is not set
-# CONFIG_DVB_STB6100 is not set
-
-#
-# DVB-S (satellite) frontends
-#
-# CONFIG_DVB_CX24110 is not set
-# CONFIG_DVB_CX24123 is not set
-# CONFIG_DVB_MT312 is not set
-# CONFIG_DVB_S5H1420 is not set
-# CONFIG_DVB_STV0288 is not set
-# CONFIG_DVB_STB6000 is not set
-# CONFIG_DVB_STV0299 is not set
-# CONFIG_DVB_TDA8083 is not set
-# CONFIG_DVB_TDA10086 is not set
-# CONFIG_DVB_TDA8261 is not set
-# CONFIG_DVB_VES1X93 is not set
-# CONFIG_DVB_TUNER_ITD1000 is not set
-# CONFIG_DVB_TUNER_CX24113 is not set
-# CONFIG_DVB_TDA826X is not set
-# CONFIG_DVB_TUA6100 is not set
-# CONFIG_DVB_CX24116 is not set
-# CONFIG_DVB_SI21XX is not set
-
-#
-# DVB-T (terrestrial) frontends
-#
-# CONFIG_DVB_SP8870 is not set
-# CONFIG_DVB_SP887X is not set
-# CONFIG_DVB_CX22700 is not set
-# CONFIG_DVB_CX22702 is not set
-# CONFIG_DVB_DRX397XD is not set
-# CONFIG_DVB_L64781 is not set
-CONFIG_DVB_TDA1004X=y
-# CONFIG_DVB_NXT6000 is not set
-# CONFIG_DVB_MT352 is not set
-# CONFIG_DVB_ZL10353 is not set
-# CONFIG_DVB_DIB3000MB is not set
-# CONFIG_DVB_DIB3000MC is not set
-# CONFIG_DVB_DIB7000M is not set
-# CONFIG_DVB_DIB7000P is not set
-# CONFIG_DVB_TDA10048 is not set
-
-#
-# DVB-C (cable) frontends
-#
-# CONFIG_DVB_VES1820 is not set
-# CONFIG_DVB_TDA10021 is not set
-# CONFIG_DVB_TDA10023 is not set
-# CONFIG_DVB_STV0297 is not set
-
-#
-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-#
-# CONFIG_DVB_NXT200X is not set
-# CONFIG_DVB_OR51211 is not set
-# CONFIG_DVB_OR51132 is not set
-# CONFIG_DVB_BCM3510 is not set
-# CONFIG_DVB_LGDT330X is not set
-# CONFIG_DVB_LGDT3304 is not set
-# CONFIG_DVB_S5H1409 is not set
-# CONFIG_DVB_AU8522 is not set
-# CONFIG_DVB_S5H1411 is not set
-
-#
-# ISDB-T (terrestrial) frontends
-#
-# CONFIG_DVB_S921 is not set
-
-#
-# Digital terrestrial only tuners/PLL
-#
-# CONFIG_DVB_PLL is not set
-# CONFIG_DVB_TUNER_DIB0070 is not set
-
-#
-# SEC control devices for DVB-S
-#
-# CONFIG_DVB_LNBP21 is not set
-# CONFIG_DVB_ISL6405 is not set
-# CONFIG_DVB_ISL6421 is not set
-# CONFIG_DVB_LGS8GL5 is not set
-
-#
-# Tools to develop new frontends
-#
-# CONFIG_DVB_DUMMY_FE is not set
-# CONFIG_DVB_AF9013 is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-CONFIG_FB_STB225_FB=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_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 is not set
-# CONFIG_LOGO is not set
-CONFIG_SOUND=m
-CONFIG_SOUND_OSS_CORE=y
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_VERBOSE is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-CONFIG_SND_MIPS=y
-# CONFIG_SND_SOC is not set
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW is not set
-# CONFIG_HID_PID is not set
-
-#
-# Special HID drivers
-#
-CONFIG_HID_COMPAT=y
-CONFIG_USB_SUPPORT=y
-# CONFIG_USB_ARCH_HAS_HCD is not set
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-
-#
-# Enable Host or Gadget support to see Inventra options
-#
-
-#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# OTG and related infrastructure
-#
-# CONFIG_MMC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_UIO is not set
-# CONFIG_STAGING is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# 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_FILE_LOCKING=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_DNOTIFY is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS 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=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-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_KCORE is not set
-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_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=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
-# 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=m
-# 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=m
-CONFIG_NLS_ISO8859_1=m
-# 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=m
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# 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_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-CONFIG_SYSCTL_SYSCALL_CHECK=y
-
-#
-# Tracers
-#
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_CMDLINE=""
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-# CONFIG_CRYPTO_FIPS is not set
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_MANAGER2=y
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# 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 is not set
-# 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=y
-# CONFIG_CRYPTO_XCBC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-CONFIG_CRYPTO_SHA1=y
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES 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_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-# CONFIG_CRC_CCITT is not set
-# 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_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.28/stb225/ebase-fix.patch b/packages/linux/linux-2.6.28/stb225/ebase-fix.patch
deleted file mode 100644
index bdd82ac1d5..0000000000
--- a/packages/linux/linux-2.6.28/stb225/ebase-fix.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
-index f6083c6..b3bcd3a 100644
---- a/arch/mips/kernel/traps.c
-+++ b/arch/mips/kernel/traps.c
-@@ -1592,8 +1592,6 @@ void __cpuinit set_uncached_handler(unsigned long offset, void *addr,
- #ifdef CONFIG_64BIT
- unsigned long uncached_ebase = TO_UNCAC(ebase);
- #endif
-- if (cpu_has_mips_r2)
-- ebase += (read_c0_ebase() & 0x3ffff000);
-
- if (!addr)
- panic(panic_null_cerr);
-@@ -1629,8 +1627,6 @@ void __init trap_init(void)
- ebase = (unsigned long) alloc_bootmem_low_pages(0x200 + VECTORSPACING*64);
- else {
- ebase = CAC_BASE;
-- if (cpu_has_mips_r2)
-- ebase += (read_c0_ebase() & 0x3ffff000);
- }
-
- per_cpu_trap_init();
-@@ -1739,11 +1735,11 @@ void __init trap_init(void)
-
- if (cpu_has_vce)
- /* Special exception: R4[04]00 uses also the divec space. */
-- memcpy((void *)(ebase + 0x180), &except_vec3_r4000, 0x100);
-+ memcpy((void *)(CAC_BASE + 0x180), &except_vec3_r4000, 0x100);
- else if (cpu_has_4kex)
-- memcpy((void *)(ebase + 0x180), &except_vec3_generic, 0x80);
-+ memcpy((void *)(CAC_BASE + 0x180), &except_vec3_generic, 0x80);
- else
-- memcpy((void *)(ebase + 0x080), &except_vec3_generic, 0x80);
-+ memcpy((void *)(CAC_BASE + 0x080), &except_vec3_generic, 0x80);
-
- signal_init();
- #ifdef CONFIG_MIPS32_COMPAT
diff --git a/packages/linux/linux-2.6.28/stb225/enable-uart.patch b/packages/linux/linux-2.6.28/stb225/enable-uart.patch
deleted file mode 100644
index e7bb03441c..0000000000
--- a/packages/linux/linux-2.6.28/stb225/enable-uart.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
-index 3e525e3..91d4470 100644
---- a/drivers/serial/Kconfig
-+++ b/drivers/serial/Kconfig
-@@ -982,7 +982,7 @@ config SERIAL_SH_SCI_CONSOLE
-
- config SERIAL_PNX8XXX
- bool "Enable PNX8XXX SoCs' UART Support"
-- depends on MIPS && SOC_PNX8550
-+ depends on MIPS && (SOC_PNX8550 || SOC_PNX833X)
- select SERIAL_CORE
- help
- If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
diff --git a/packages/linux/linux-2.6.28/stb225/ip3902.patch b/packages/linux/linux-2.6.28/stb225/ip3902.patch
deleted file mode 100644
index 3f911b661d..0000000000
--- a/packages/linux/linux-2.6.28/stb225/ip3902.patch
+++ /dev/null
@@ -1,1549 +0,0 @@
-diff -urN --exclude=.svn linux-2.6.26-rc4.orig/drivers/net/ip3902.c linux-2.6.26-rc4/drivers/net/ip3902.c
---- linux-2.6.26-rc4.orig/drivers/net/ip3902.c 1970-01-01
-01:00:00.000000000 +0100
-+++ linux-2.6.26-rc4/drivers/net/ip3902.c 2008-06-06 11:29:24.000000000 +0100
-@@ -0,0 +1,1510 @@
-+/*
-+ * ip3902.c: NXP ip3902 embedded 10/100 Ethernet controller support
-+ * Copyright 2008 NXP Semiconductors
-+ * Chris Steel <chris.steel@nxp.com>
-+ * Daniel Laird <daniel.j.laird@nxp.com>
-+ *
-+ * Based on ax88796.c, by Ben Dooks.
-+ * Based on previous ip3902.c by Nikita V. Youshchenko
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/isapnp.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/timer.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/ethtool.h>
-+#include <linux/mii.h>
-+#include <linux/crc32.h>
-+#include <linux/inet_lro.h>
-+#include <asm/system.h>
-+#include <linux/io.h>
-+
-+#define DRVNAME "ip3902-eth"
-+#define DRVVERSION "1.00"
-+
-+/* "Strange hardware" support macros */
-+
-+/* These control endianness of descriptors and statuses.
-+ * If none if LITTLE_ENDIAN_xxx and BIG_ENDIAN_xxx is defined, system endian
-+ * is used for xxx */
-+#define LITTLE_ENDIAN_DESCRIPTORS
-+#undef BIG_ENDIAN_DESCRIPTORS
-+#undef LITTLE_ENDIAN_STATUSES
-+#define BIG_ENDIAN_STATUSES
-+
-+#define ETH_RX_SKB_SIZE 0x600 /* 1536 bytes, just over max mtu */
-+#define TX_RING_SIZE 64
-+#define RX_RING_SIZE 64
-+#define IP3902_NAPI_WEIGHT 48
-+#define MAX_LRO_DESCRIPTORS 6
-+#define LRO_THRESHOLD 3
-+
-+#define BYTES_IN_ETHERNET_CRC 4
-+#define MAX_DESCS_PER_SKB (MAX_SKB_FRAGS + 1)
-+
-+#define NEXT_TX(i) (((i) == TX_RING_SIZE-1) ? 0 : (i)+1)
-+#define NEXT_RX(i) (((i) == RX_RING_SIZE-1) ? 0 : (i)+1)
-+
-+/* Access to IP3902 registers */
-+
-+/* Alcatel (Packet Engines) core registers */
-+#define MAC1_REG 0x000 /* R/W: MAC configuration register 1 */
-+#define MAC2_REG 0x004 /* R/W: MAC configuration register 2 */
-+#define IPGT_REG 0x008 /* R/W: Back-to-Back Inter-Packet-Gap register */
-+#define IPGR_REG 0x00c /* R/W: Non Back-to-Back Inter-Packet-Gap register */
-+#define CLRT_REG 0x010 /* R/W: Collision window / Retry register */
-+#define MAXF_REG 0x014 /* R/W: Maximum Frame register */
-+#define SUPP_REG 0x018 /* R/W: PHY Support register */
-+#define TEST_REG 0x01C /* R/W: Test register */
-+#define MCFG_REG 0x020 /* R/W: MII Mgmt Con???guration register */
-+#define MCMD_REG 0x024 /* R/W: MII Mgmt Command register */
-+#define MADR_REG 0x028 /* R/W: MII Mgmt Address register */
-+#define MWTD_REG 0x02C /* WO: MII Mgmt Write Data register */
-+#define MRDD_REG 0x030 /* RO: MII Mgmt Read Data register */
-+#define MIND_REG 0x034 /* RO: MII Mgmt Indicators register */
-+#define SA0_REG 0x040 /* R/W: Station Address 0 register */
-+#define SA1_REG 0x044 /* R/W: Station Address 1 register */
-+#define SA2_REG 0x048 /* R/W: Station Address 2 register */
-+
-+/* Control registers */
-+#define COMMAND_REG 0x100 /* R/W: Command register */
-+#define STATUS_REG 0x104 /* RO: Status register */
-+#define RX_DESC_REG 0x108 /* R/W: Receive descriptor base address register */
-+#define RX_STATUS_REG 0x10C /* R/W: Receive status base address register */
-+#define RX_DESC_NUMBER_REG 0x110 /* R/W: Receive number of descriptors register */
-+#define RX_PRODUCE_INDEX_REG 0x114 /* RO: Receive produce index register */
-+#define RX_CONSUME_INDEX_REG 0x118 /* R/W: Receive consume index register */
-+#define TX_DESC_REG 0x11C /* R/W: Non real-time transmit descriptor base address register */
-+#define TX_STATUS_REG 0x120 /* R/W: Non real-time transmit status base address register */
-+#define TX_DESC_NUMBER_REG 0x124 /* R/W: Non real-time transmit number of descriptors register */
-+#define TX_PRODUCE_INDEX_REG 0x128 /* R/W: Non real-time transmit produce index register */
-+#define TX_CONSUME_INDEX_REG 0x12C /* RO: Non real-time transmit consume index register */
-+#define TX_RT_DESC_REG 0x130 /* R/W: Real-time transmit descriptor base address register */
-+#define TX_RT_STATUS_REG 0x134 /* R/W: Real-time transmit status base address register */
-+#define TX_RT_DESC_NUMBER_REG 0x138 /* R/W: Real-time transmit number of descriptors register */
-+#define TX_RT_PRODUCE_INDEX_REG 0x13C /* R/W: Real-time transmit produce index register */
-+#define TX_RT_CONSUME_INDEX_REG 0x140 /* RO: Real-time transmit consume index register */
-+#define QOS_TIMEOUT_REG 0x148 /* R/W: Transmit quality of service time-out register */
-+#define TSV0_REG 0x158 /* RO: Transmit status vector 0 register */
-+#define TSV1_REG 0x15C /* RO: Transmit status vector 1 register */
-+#define RSV_REG 0x160 /* RO: Receive status vector register */
-+#define FC_COUNTER_REG 0x170 /* R/W: Flow control counter register */
-+#define FC_STATUS_REG 0x174 /* RO: Flow control status register */
-+
-+/* Rx filter registers */
-+#define FILTER_CTRL_REG 0x200 /* R/W: Receive filter control register */
-+#define FILTER_WOL_STATUS_REG 0x204 /* RO: Receive filter WoL status register */
-+#define FILTER_WOL_CLEAR_REG 0x208 /* WO: Receive filter WoL clear register */
-+#define HASH_FILTER_L_REG 0x210 /* R/W: Hash filter table LSBs register */
-+#define HASH_FILTER_H_REG 0x214 /* R/W: Hash filter table MSBs register */
-+
-+/* DVP Standard registers */
-+#define INT_STATUS_REG 0xFE0 /* RO: Interrupt status register */
-+#define INT_ENABLE_REG 0xFE4 /* R/W: Interrupt enable register */
-+#define INT_CLEAR_REG 0xFE8 /* WO: Interrupt clear register */
-+#define INT_SET_REG 0xFEC /* WO: Interrupt set register */
-+#define POWERDOWN_REG 0xFF4 /* R/W: Power-down register */
-+#define MODULE_ID_REG 0xFFC /* RO: Module ID register */
-+
-+/* Bits for MAC1 register */
-+#define MAC1_SOFT_RESET (1 << 15)
-+#define MAC1_TX_FLOW_CONTROL (1 << 3)
-+#define MAC1_RX_FLOW_CONTROL (1 << 2)
-+#define MAC1_RECEIVE_PASS_ALL (1 << 1)
-+#define MAC1_RECEIVE_ENABLE (1 << 0)
-+
-+/* Bits for MAC2 register */
-+#define MAC2_AUTO_DETECT_PAD_ENABLE (1 << 7)
-+#define MAC2_VLAN_PAD_ENABLE (1 << 6)
-+#define MAC2_PAD_CRC_ENABLE (1 << 5)
-+#define MAC2_CRC_ENABLE (1 << 4)
-+#define MAC2_FULL_DUPLEX (1 << 0)
-+
-+#define INITIAL_MAC2 (MAC2_AUTO_DETECT_PAD_ENABLE | MAC2_VLAN_PAD_ENABLE | MAC2_PAD_CRC_ENABLE | MAC2_CRC_ENABLE)
-+
-+/* Recommended values for IPGT register (see sec. 3.3.2.3 0f datasheet */
-+#define IPGT_FD_VALUE 0x15
-+#define IPGT_HD_VALUE 0x12
-+
-+/* Bits for MCMD register */
-+#define MCMD_READ (1 << 0)
-+
-+/* Bits for MIND register */
-+#define MIND_NOT_VALID (1 << 2)
-+#define MIND_BUSY (1 << 0)
-+
-+/* Bits for command register */
-+#define COMMAND_ENABLE_QOS (1 << 11)
-+#define COMMAND_FULL_DUPLEX (1 << 10)
-+#define COMMAND_RMII_MODE (1 << 9)
-+#define COMMAND_TX_FLOW_CONTROL (1 << 8)
-+#define COMMAND_PROMISC (1 << 7)
-+#define COMMAND_ALLOW_SHORT (1 << 6)
-+#define COMMAND_RX_RESET (1 << 5)
-+#define COMMAND_TX_RESET (1 << 4)
-+#define COMMAND_RESET (1 << 3)
-+#define COMMAND_TX_RT_ENABLE (1 << 2)
-+#define COMMAND_TX_ENABLE (1 << 1)
-+#define COMMAND_RX_ENABLE (1 << 0)
-+
-+/* Bits for receive filter control register */
-+#define FILTER_ACCEPT_SELF (1 << 5)
-+#define FILTER_ACCEPT_MCAST_HASH (1 << 4)
-+#define FILTER_ACCEPT_UCAST_HASH (1 << 3)
-+#define FILTER_ACCEPT_MCAST_ANY (1 << 2)
-+#define FILTER_ACCEPT_BCAST_ANY (1 << 1)
-+#define FILTER_ACCEPT_UCAST_ANY (1 << 0)
-+
-+/* Bits for interrupt registers */
-+#define WAKEUP_INT (1 << 13)
-+#define SOFT_INT (1 << 12)
-+#define TX_RT_DONE_INT (1 << 11)
-+#define TX_RT_FINISHED_INT (1 << 10)
-+#define TX_RT_ERROR_INT (1 << 9)
-+#define TX_RT_UNDERRUN_INT (1 << 8)
-+#define TX_DONE_INT (1 << 7)
-+#define TX_FINISHED_INT (1 << 6)
-+#define TX_ERROR_INT (1 << 5)
-+#define TX_UNDERRUN_INT (1 << 4)
-+#define RX_DONE_INT (1 << 3)
-+#define RX_FINISHED_INT (1 << 2)
-+#define RX_ERROR_INT (1 << 1)
-+#define RX_OVERRUN_INT (1 << 0)
-+
-+/* Bit for POWERDOWN register */
-+#define POWERDOWN_VALUE (1 << 31)
-+
-+/* Bits for TX control */
-+#define TX_CONTROL_INT (1 << 31)
-+#define TX_CONTROL_LAST (1 << 30)
-+#define TX_CONTROL_CRC (1 << 29)
-+#define TX_CONTROL_PAD (1 << 28)
-+#define TX_CONTROL_HUGE (1 << 27)
-+#define TX_CONTROL_OVERRIDE (1 << 26)
-+
-+/* these flags used for non-last fragment of a frame */
-+#define TX_CONTROL_ALL_NOTLAST (TX_CONTROL_CRC | TX_CONTROL_PAD | TX_CONTROL_OVERRIDE)
-+/* these flags used for last fragment of a frame, and for single-fragment
-+ * frames */
-+#define TX_CONTROL_ALL_LAST (TX_CONTROL_ALL_NOTLAST | TX_CONTROL_LAST | TX_CONTROL_INT)
-+
-+/* Bits for TX status */
-+#define TX_STATUS_ERROR (1 << 31)
-+#define TX_STATUS_UNDERRUN (1 << 29)
-+#define TX_STATUS_LATE_COLLISION (1 << 28)
-+#define TX_STATUS_MANY_COLLISIONS (1 << 27)
-+#define TX_STATUS_MANY_DEFER (1 << 26)
-+#define TX_STATUS_COLLISIONS(s) ((s >> 21) & 15)
-+
-+/* Bits for RX control */
-+#define RX_CONTROL_INT (1 << 31)
-+
-+/* Bits for RX status */
-+#define RX_STATUS_ERROR (1 << 31)
-+#define RX_STATUS_LAST_FRAG (1 << 30)
-+#define RX_STATUS_OVERRUN (1 << 28)
-+#define RX_STATUS_ALIGNMENT_ERROR (1 << 27)
-+#define RX_STATUS_RANGE_ERROR (1 << 26)
-+#define RX_STATUS_LENGTH_ERROR (1 << 25)
-+#define RX_STATUS_SYMBOL_ERROR (1 << 24)
-+#define RX_STATUS_CRC_ERROR (1 << 23)
-+#define RX_STATUS_BROADCAST (1 << 22)
-+#define RX_STATUS_MULTICAST (1 << 21)
-+#define RX_STATUS_FAIL_FILTER (1 << 20)
-+#define RX_STATUS_VLAN (1 << 19)
-+#define RX_STATUS_CONTROL_FRAME (1 << 18)
-+#define RX_STATUS_LENGTH(s) ((s & 0x7ff) + 1)
-+
-+/* Bits for RSV register */
-+#define RSV_VLAN (1 << 30)
-+#define RSV_CONTROL_FRAME (1 << 27)
-+#define RSV_DRIBBLE_NIBBLE (1 << 26)
-+#define RSV_BROADCAST (1 << 25)
-+#define RSV_MULTICAST (1 << 24)
-+#define RSV_LENGTH_OUT_OF_RANGE (1 << 22)
-+#define RSV_LENGTH_CHECK_ERROR (1 << 21)
-+#define RSV_CRC_ERROR (1 << 20)
-+#define RSV_RECEIVE_CODE_VIOLATION (1 << 19)
-+#define RSV_MASK 0xFFFF
-+
-+static char *mac_address;
-+module_param(mac_address, charp, S_IRUGO);
-+MODULE_PARM_DESC(mac_address, "MAC address of the device");
-+
-+
-+/* device private data */
-+struct ip3902_descriptor {
-+ unsigned long address;
-+ unsigned long control;
-+};
-+
-+struct ip3902_rx_status {
-+ unsigned long status;
-+ unsigned long hash_crc;
-+};
-+
-+struct ip3902_dma_struct {
-+ struct ip3902_descriptor rx_desc[RX_RING_SIZE];
-+ struct ip3902_rx_status rx_status[RX_RING_SIZE];
-+ struct ip3902_descriptor tx_desc[TX_RING_SIZE];
-+ unsigned long tx_status[TX_RING_SIZE];
-+};
-+
-+struct ip3902_private {
-+ spinlock_t mii_lock;
-+ struct mii_if_info mii;
-+ u32 msg_enable;
-+
-+ spinlock_t lock;
-+ struct net_device *ndev;
-+ struct platform_device *pdev;
-+ struct resource *bus;
-+ void __iomem *mem;
-+ struct napi_struct napi;
-+
-+ struct ip3902_dma_struct *ds; /* descriptors and statuses */
-+ dma_addr_t ds_dma;
-+
-+ struct sk_buff *rx_skb[RX_RING_SIZE]; /* where to recieve to */
-+ struct sk_buff *tx_skb[TX_RING_SIZE]; /* where to send from */
-+ bool tx_first_desc[TX_RING_SIZE]; /* true if this is the first desc of an skb */
-+
-+ int rx_next_allocate; /* index in rx ring where skb should be allocated */
-+ int rx_next_consume; /* index in rx ring where data should be read when available */
-+ int tx_next_produce; /* index in tx ring where new data should be put */
-+ int tx_next_deallocate; /* index in tx ring of first not freed skb */
-+
-+#ifdef CONFIG_INET_LRO
-+ bool use_lro;
-+ int lro_count;
-+ struct net_lro_mgr lro_mgr;
-+ struct net_lro_desc lro_desc[MAX_LRO_DESCRIPTORS];
-+ struct timer_list lro_timer;
-+#endif
-+
-+ unsigned char running;
-+ unsigned char resume_open;
-+
-+};
-+
-+static inline unsigned long ip3902_read_reg(struct net_device *ndev, int reg)
-+{
-+ unsigned long value = readl((void * __iomem)(ndev->base_addr + reg));
-+ return value;
-+}
-+
-+static inline void ip3902_write_reg(struct net_device *ndev, int reg,
-+ unsigned long val)
-+{
-+ writel(val, (void * __iomem)(ndev->base_addr + reg));
-+}
-+
-+static inline void ip3902_write_tx_desc(struct ip3902_private *ip3902_priv, int pos, unsigned long address, unsigned long control)
-+{
-+#if defined(BIG_ENDIAN_DESCRIPTORS)
-+ ip3902_priv->ds->tx_desc[pos].address = cpu_to_be32(address);
-+ ip3902_priv->ds->tx_desc[pos].control = cpu_to_be32(control);
-+#elif defined(LITTLE_ENDIAN_DESCRIPTORS)
-+ ip3902_priv->ds->tx_desc[pos].address = cpu_to_le32(address);
-+ ip3902_priv->ds->tx_desc[pos].control = cpu_to_le32(control);
-+#else
-+ ip3902_priv->ds->tx_desc[pos].address = address;
-+ ip3902_priv->ds->tx_desc[pos].control = control;
-+#endif
-+ wmb();
-+}
-+
-+static inline void ip3902_read_tx_desc(struct ip3902_private *ip3902_priv, int pos, dma_addr_t *address, int *length)
-+{
-+#if defined(BIG_ENDIAN_DESCRIPTORS)
-+ *address = (dma_addr_t)be32_to_cpu(ip3902_priv->ds->tx_desc[pos].address);
-+ *length = (int)be32_to_cpu(ip3902_priv->ds->tx_desc[pos].control) & 0xffff;
-+#elif defined(LITTLE_ENDIAN_DESCRIPTORS)
-+ *address = (dma_addr_t)le32_to_cpu(ip3902_priv->ds->tx_desc[pos].address);
-+ *length = (int)le32_to_cpu(ip3902_priv->ds->tx_desc[pos].control) & 0xffff;
-+#else
-+ *address = (dma_addr_t)ip3902_priv->ds->tx_desc[pos].address;
-+ *length = (int)ip3902_priv->ds->tx_desc[pos].control & 0xffff;
-+#endif
-+}
-+
-+static inline unsigned long ip3902_read_tx_status(struct ip3902_private *ip3902_priv, int pos)
-+{
-+#if defined(BIG_ENDIAN_STATUSES)
-+ return be32_to_cpu(ip3902_priv->ds->tx_status[pos]);
-+#elif defined(LITTLE_ENDIAN_STATUSES)
-+ return le32_to_cpu(ip3902_priv->ds->tx_status[pos]);
-+#else
-+ return ip3902_priv->ds->tx_status[pos];
-+#endif
-+}
-+
-+static inline void ip3902_write_rx_desc(struct ip3902_private *ip3902_priv, int pos, unsigned long address, unsigned long control)
-+{
-+#if defined(BIG_ENDIAN_DESCRIPTORS)
-+ ip3902_priv->ds->rx_desc[pos].address = cpu_to_be32(address);
-+ ip3902_priv->ds->rx_desc[pos].control = cpu_to_be32(control);
-+#elif defined(LITTLE_ENDIAN_DESCRIPTORS)
-+ ip3902_priv->ds->rx_desc[pos].address = cpu_to_le32(address);
-+ ip3902_priv->ds->rx_desc[pos].control = cpu_to_le32(control);
-+#else
-+ ip3902_priv->ds->rx_desc[pos].address = address;
-+ ip3902_priv->ds->rx_desc[pos].control = control;
-+#endif
-+ wmb();
-+}
-+
-+static inline void ip3902_read_rx_desc(struct ip3902_private *ip3902_priv, int pos, dma_addr_t *address, int *length)
-+{
-+#if defined(BIG_ENDIAN_DESCRIPTORS)
-+ *address = (dma_addr_t)be32_to_cpu(ip3902_priv->ds->rx_desc[pos].address);
-+ *length = (int)be32_to_cpu(ip3902_priv->ds->rx_desc[pos].control) & 0xffff;
-+#elif defined(LITTLE_ENDIAN_DESCRIPTORS)
-+ *address = (dma_addr_t)le32_to_cpu(ip3902_priv->ds->rx_desc[pos].address);
-+ *length = (int)le32_to_cpu(ip3902_priv->ds->rx_desc[pos].control) & 0xffff;
-+#else
-+ *address = (dma_addr_t)ip3902_priv->ds->rx_desc[pos].address;
-+ *length = (int)ip3902_priv->ds->rx_desc[pos].control & 0xffff;
-+#endif
-+}
-+
-+static inline unsigned long ip3902_read_rx_status(struct net_device *ndev, struct ip3902_private *ip3902_priv, int pos)
-+{
-+#if defined(BIG_ENDIAN_STATUSES)
-+ return be32_to_cpu(ip3902_priv->ds->rx_status[pos].status);
-+#elif defined(LITTLE_ENDIAN_STATUSES)
-+ return le32_to_cpu(ip3902_priv->ds->rx_status[pos].status);
-+#else
-+ return ip3902_priv->ds->rx_status[pos].status;
-+#endif
-+}
-+
-+static inline void ip3902_write_madr_reg(struct net_device *ndev, int phy_id, int location)
-+{
-+ /* assume ranges of phy_id and location are correct - we set masks in
-+ * struct mii_if_info for that */
-+
-+ unsigned long val = (phy_id << 8) | location;
-+ ip3902_write_reg(ndev, MADR_REG, val);
-+}
-+
-+static inline int ip3902_wait_mdio_op_complete(struct net_device *ndev, unsigned long mask)
-+{
-+ int timeout = 10000; /* to avoid hangup in case of unexpected badness ... */
-+
-+ while (--timeout > 0) {
-+ if ((ip3902_read_reg(ndev, MIND_REG) & mask) == 0)
-+ return 0;
-+ udelay(1);
-+ }
-+
-+ return -EIO;
-+}
-+
-+static int ip3902_mdio_read(struct net_device *ndev, int phy_id, int location)
-+{
-+ ip3902_write_madr_reg(ndev, phy_id, location);
-+ ip3902_write_reg(ndev, MCMD_REG, 0);
-+ ip3902_write_reg(ndev, MCMD_REG, MCMD_READ);
-+ if (ip3902_wait_mdio_op_complete(ndev, MIND_NOT_VALID | MIND_BUSY) < 0)
-+ return 0;
-+ else
-+ return ip3902_read_reg(ndev, MRDD_REG) & 0xffff;
-+}
-+
-+static void ip3902_mdio_write(struct net_device *ndev, int phy_id, int location, int val)
-+{
-+ ip3902_write_madr_reg(ndev, phy_id, location);
-+ ip3902_write_reg(ndev, MWTD_REG, val & 0xffff);
-+ ip3902_wait_mdio_op_complete(ndev, MIND_BUSY);
-+}
-+
-+static inline int ip3902_nr_free_descs(int head, int tail, int size)
-+{
-+ int free;
-+
-+ if (head >= tail)
-+ free = (tail + size) - head;
-+ else
-+ free = tail - head;
-+
-+ return free;
-+}
-+
-+static void ip3902_eth_rx_refill_descs(struct net_device *ndev, struct ip3902_private *ip3902_priv)
-+{
-+ do {
-+ int rx_index = ip3902_priv->rx_next_allocate;
-+ struct sk_buff *skb = netdev_alloc_skb(ndev, ETH_RX_SKB_SIZE + dma_get_cache_alignment());
-+
-+ if (skb) {
-+ int unaligned = (((u32)skb->data) + ETH_HLEN) & (dma_get_cache_alignment() - 1);
-+ unsigned long desc_address;
-+
-+ if (unaligned)
-+ skb_reserve(skb, (dma_get_cache_alignment() - unaligned));
-+
-+ desc_address = dma_map_single(NULL, skb->data, ETH_RX_SKB_SIZE, DMA_FROM_DEVICE);
-+ ip3902_write_rx_desc(ip3902_priv, rx_index, desc_address, (ETH_RX_SKB_SIZE - 1) | RX_CONTROL_INT);
-+
-+ ip3902_priv->rx_skb[rx_index] = skb;
-+ ip3902_priv->rx_next_allocate = NEXT_RX(rx_index);
-+ } else {
-+ ip3902_write_reg(ndev, RX_CONSUME_INDEX_REG, ip3902_priv->rx_next_allocate);
-+ return;
-+ }
-+ } while (ip3902_priv->rx_next_allocate != ip3902_priv->rx_next_consume);
-+
-+ ip3902_write_reg(ndev, RX_CONSUME_INDEX_REG, ip3902_priv->rx_next_allocate);
-+}
-+
-+static int ip3902_eth_receive_queue(struct net_device *ndev, struct ip3902_private *ip3902_priv, int budget)
-+{
-+ int rx_index = ip3902_priv->rx_next_consume;
-+ int write_index = ip3902_read_reg(ndev, RX_PRODUCE_INDEX_REG);
-+ int received = 0;
-+ int limit;
-+
-+ do {
-+ limit = write_index;
-+ spin_lock(&ip3902_priv->lock);
-+ while (rx_index != limit) {
-+ unsigned long status = ip3902_read_rx_status(ndev, ip3902_priv, rx_index);
-+
-+ if (!(status & RX_STATUS_LAST_FRAG)) {
-+ printk(DRVNAME ": broken RX status: %08lx\n", status);
-+ continue;
-+ }
-+
-+ if (status & RX_STATUS_FAIL_FILTER)
-+ continue;
-+
-+ /* Looks like hardware returns RANGE_ERROR for each frame */
-+ if (status & (RX_STATUS_OVERRUN | RX_STATUS_ALIGNMENT_ERROR | RX_STATUS_LENGTH_ERROR | RX_STATUS_CRC_ERROR)) {
-+ ndev->stats.rx_errors++;
-+
-+ if (status & RX_STATUS_OVERRUN)
-+ ndev->stats.rx_fifo_errors++;
-+
-+ if (status & RX_STATUS_ALIGNMENT_ERROR)
-+ ndev->stats.rx_frame_errors++;
-+
-+ if (status & (RX_STATUS_RANGE_ERROR | RX_STATUS_LENGTH_ERROR))
-+ ndev->stats.rx_length_errors++;
-+
-+ if (status & RX_STATUS_CRC_ERROR)
-+ ndev->stats.rx_crc_errors++;
-+
-+ } else {
-+ if (--budget < 0) {
-+ /* we got packets, but no quota */
-+ /* store current ring pointer state */
-+ ip3902_priv->rx_next_consume = rx_index;
-+ return received;
-+ } else {
-+ struct sk_buff *skb = ip3902_priv->rx_skb[rx_index];
-+ int length = RX_STATUS_LENGTH(status);
-+ dma_addr_t data_addr;
-+ int data_length;
-+
-+ ndev->stats.rx_packets++;
-+ ndev->stats.rx_bytes += length;
-+ if (status & RX_STATUS_MULTICAST)
-+ ndev->stats.multicast++;
-+
-+ skb_put(skb, length - BYTES_IN_ETHERNET_CRC);
-+ skb->protocol = eth_type_trans(skb, ndev);
-+
-+#ifdef CONFIG_INET_LRO
-+ if (ip3902_priv->use_lro)
-+ lro_receive_skb(&ip3902_priv->lro_mgr, skb, ip3902_priv);
-+ else
-+ netif_receive_skb(skb);
-+
-+ ip3902_priv->lro_count++;
-+#else
-+ netif_receive_skb(skb);
-+#endif
-+
-+ ip3902_read_rx_desc(ip3902_priv, rx_index, &data_addr, &data_length);
-+ dma_unmap_single(NULL, data_addr, ETH_RX_SKB_SIZE, DMA_FROM_DEVICE);
-+
-+ ip3902_priv->rx_skb[rx_index] = NULL;
-+ ndev->last_rx = jiffies;
-+ received++;
-+ }
-+ }
-+ rx_index = NEXT_RX(rx_index);
-+ }
-+
-+ spin_unlock(&ip3902_priv->lock);
-+ ip3902_priv->rx_next_consume = rx_index;
-+ ip3902_eth_rx_refill_descs(ndev, ip3902_priv);
-+ write_index = ip3902_read_reg(ndev, RX_PRODUCE_INDEX_REG);
-+ } while (limit != write_index);
-+
-+#ifdef CONFIG_INET_LRO
-+ if (ip3902_priv->use_lro) {
-+ if (timer_pending(&ip3902_priv->lro_timer)) {
-+ mod_timer(&ip3902_priv->lro_timer, jiffies + 2);
-+ } else {
-+ ip3902_priv->lro_timer.expires = jiffies + 2;
-+ add_timer(&ip3902_priv->lro_timer);
-+ }
-+ }
-+#endif
-+
-+ return received;
-+}
-+
-+static int ip3902_poll(struct napi_struct *napi, int budget)
-+{
-+ struct ip3902_private *ip3902_priv = container_of(napi, struct ip3902_private, napi);
-+ struct net_device *ndev = ip3902_priv->ndev;
-+ int work_done;
-+
-+ work_done = ip3902_eth_receive_queue(ndev, ip3902_priv, budget);
-+
-+ if (work_done < budget) {
-+ ip3902_write_reg(ndev, INT_CLEAR_REG, RX_DONE_INT);
-+ ip3902_write_reg(ndev, INT_CLEAR_REG, 0);
-+ netif_rx_complete(ndev, napi);
-+ ip3902_write_reg(ndev, INT_ENABLE_REG, (TX_UNDERRUN_INT | RX_DONE_INT | RX_OVERRUN_INT));
-+ }
-+
-+ return work_done;
-+}
-+
-+#ifdef CONFIG_INET_LRO
-+static void ip3902_lro_timeout(unsigned long data)
-+{
-+ struct ip3902_private *ip3902_priv = (struct ip3902_private *)data;
-+
-+ spin_lock(&ip3902_priv->lock);
-+ if (ip3902_priv->lro_count <= LRO_THRESHOLD) {
-+ ip3902_priv->use_lro = false;
-+ ip3902_priv->lro_count = 0;
-+ }
-+ lro_flush_all(&ip3902_priv->lro_mgr);
-+ spin_unlock(&ip3902_priv->lock);
-+}
-+#endif
-+
-+#define ip3902_eth_free_completed_tx_descs(ndev, priv) ip3902_eth_free_tx_descs(ndev, priv, 0)
-+#define ip3902_eth_free_all_tx_descs(ndev, priv) ip3902_eth_free_tx_descs(ndev, priv, 1)
-+
-+static void ip3902_eth_free_tx_descs(struct net_device *ndev, struct ip3902_private *ip3902_priv, int force)
-+{
-+ int limit;
-+
-+ if (force)
-+ limit = ip3902_priv->tx_next_produce;
-+ else
-+ limit = ip3902_read_reg(ndev, TX_CONSUME_INDEX_REG);
-+
-+ while (ip3902_priv->tx_next_deallocate != limit) {
-+ int length;
-+ int tx_index;
-+ unsigned long status;
-+ dma_addr_t addr;
-+ struct sk_buff *skb;
-+
-+ tx_index = ip3902_priv->tx_next_deallocate;
-+
-+ ip3902_priv->tx_next_deallocate = NEXT_TX(tx_index);
-+ ip3902_read_tx_desc(ip3902_priv, tx_index, &addr, &length);
-+ skb = ip3902_priv->tx_skb[tx_index];
-+
-+ status = ip3902_read_tx_status(ip3902_priv, tx_index);
-+ if (status & TX_STATUS_ERROR) {
-+ ndev->stats.tx_errors++;
-+ if (status & TX_STATUS_LATE_COLLISION)
-+ ndev->stats.tx_aborted_errors++;
-+
-+ if (status & (TX_STATUS_MANY_COLLISIONS | TX_STATUS_MANY_DEFER))
-+ ndev->stats.tx_window_errors++;
-+
-+ } else {
-+ ndev->stats.tx_packets++;
-+ ndev->stats.tx_bytes += skb->len;
-+ ndev->stats.collisions += TX_STATUS_COLLISIONS(status);
-+ }
-+
-+ if (skb)
-+ ip3902_priv->tx_skb[tx_index] = NULL;
-+
-+ if (ip3902_priv->tx_first_desc[tx_index] == true)
-+ dma_unmap_single(NULL, addr, length, DMA_TO_DEVICE);
-+ else
-+ dma_unmap_page(NULL, addr, length, DMA_TO_DEVICE);
-+
-+ if (skb)
-+ dev_kfree_skb_irq(skb);
-+ }
-+}
-+
-+static void ip3902_reset_tx(struct net_device *ndev, struct ip3902_private *ip3902_priv, int initial)
-+{
-+ unsigned long val;
-+
-+ /* Reset Tx hardware */
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val &= ~(COMMAND_TX_RT_ENABLE | COMMAND_TX_ENABLE);
-+ val |= COMMAND_TX_RESET;
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+
-+ if (!initial)
-+ ip3902_eth_free_all_tx_descs(ndev, ip3902_priv);
-+
-+ ip3902_priv->tx_next_produce = 0;
-+ ip3902_priv->tx_next_deallocate = 0;
-+
-+ /* Configure Tx registers */
-+ ip3902_write_reg(ndev, TX_DESC_REG, ip3902_priv->ds_dma + offsetof(struct ip3902_dma_struct, tx_desc));
-+ ip3902_write_reg(ndev, TX_STATUS_REG, ip3902_priv->ds_dma + offsetof(struct ip3902_dma_struct, tx_status));
-+ ip3902_write_reg(ndev, TX_DESC_NUMBER_REG, TX_RING_SIZE - 1);
-+ ip3902_write_reg(ndev, TX_PRODUCE_INDEX_REG, ip3902_priv->tx_next_produce);
-+ ip3902_write_reg(ndev, TX_CONSUME_INDEX_REG, ip3902_priv->tx_next_deallocate);
-+}
-+
-+static void ip3902_reset_rx(struct net_device *ndev, struct ip3902_private *ip3902_priv, int init)
-+{
-+ unsigned long val;
-+
-+ /* Reset Rx hardware */
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val &= ~COMMAND_RX_ENABLE;
-+ val |= COMMAND_RX_RESET;
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+
-+ /* Set maximum frame size register */
-+ ip3902_write_reg(ndev, MAXF_REG, ETH_RX_SKB_SIZE);
-+
-+ if (init) {
-+ ip3902_priv->rx_next_allocate = 0;
-+ ip3902_priv->rx_next_consume = 0;
-+ ip3902_eth_rx_refill_descs(ndev, ip3902_priv);
-+ }
-+
-+ /* Prepare skb's for Rx (any skb's already prepared will be reused)
-+ * and configure Rx registers */
-+ ip3902_write_reg(ndev, RX_DESC_REG, ip3902_priv->ds_dma + offsetof(struct ip3902_dma_struct, rx_desc));
-+ ip3902_write_reg(ndev, RX_STATUS_REG, ip3902_priv->ds_dma + offsetof(struct ip3902_dma_struct, rx_status));
-+ ip3902_write_reg(ndev, RX_DESC_NUMBER_REG, RX_RING_SIZE - 1);
-+ ip3902_write_reg(ndev, RX_PRODUCE_INDEX_REG, ip3902_priv->rx_next_consume);
-+}
-+
-+static inline void ip3902_start_tx(struct net_device *ndev)
-+{
-+ unsigned long val;
-+
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val |= COMMAND_TX_ENABLE;
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+}
-+
-+static inline void ip3902_start_rx(struct net_device *ndev)
-+{
-+ unsigned long val;
-+
-+ /* First on high-level ... */
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val |= (COMMAND_RX_ENABLE | COMMAND_ALLOW_SHORT);
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+
-+ /* ... and then on low-level (after high level is ready to receive) */
-+ val = ip3902_read_reg(ndev, MAC1_REG);
-+ val |= MAC1_RECEIVE_ENABLE; /* flow control frames won't be passed to driver */
-+ ip3902_write_reg(ndev, MAC1_REG, val);
-+}
-+
-+/* Interrupt handler body - split out to use both in interrupt handler
-+ * and in net poll controller.
-+ *
-+ * Internal routine, called with lock held. */
-+static void ip3902_do_handle_interrupt(struct net_device *ndev, struct ip3902_private *ip3902_priv, unsigned long status)
-+{
-+ ip3902_write_reg(ndev, INT_CLEAR_REG, status);
-+ ip3902_write_reg(ndev, INT_CLEAR_REG, 0);
-+
-+ if (status & TX_UNDERRUN_INT) {
-+ printk(KERN_ERR DRVNAME ": %s: fatal Tx underrun, resetting Tx\n", ndev->name);
-+ ip3902_reset_tx(ndev, ip3902_priv, 0);
-+ ip3902_start_tx(ndev);
-+ }
-+
-+ if (status & RX_OVERRUN_INT) {
-+ printk(KERN_ERR DRVNAME ": %s: fatal Rx overrun, resetting Rx\n", ndev->name);
-+ ip3902_reset_rx(ndev, ip3902_priv, 0);
-+ ip3902_start_rx(ndev);
-+ } else if (status & RX_DONE_INT) {
-+ /* Disable the Rx interrupt */
-+ ip3902_write_reg(ndev, INT_ENABLE_REG, (RX_OVERRUN_INT | TX_UNDERRUN_INT));
-+ netif_rx_schedule(ndev, &ip3902_priv->napi);
-+ }
-+}
-+
-+static irqreturn_t ip3902_interrupt(int irq, void *dev_instance)
-+{
-+ struct net_device *ndev = (struct net_device *) dev_instance;
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ unsigned long status;
-+
-+ status = ip3902_read_reg(ndev, INT_STATUS_REG) & (TX_DONE_INT | TX_UNDERRUN_INT | RX_DONE_INT | RX_OVERRUN_INT);
-+ do {
-+ if (!status) {
-+ return IRQ_NONE;
-+ } else {
-+ ip3902_do_handle_interrupt(ndev, ip3902_priv, status);
-+ status = ip3902_read_reg(ndev, INT_STATUS_REG) & (TX_DONE_INT | TX_UNDERRUN_INT | RX_DONE_INT | RX_OVERRUN_INT);
-+ }
-+ } while (status);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+static void ip3902_net_poll(struct net_device *ndev)
-+{
-+ disable_irq_lockdep(ndev->irq);
-+ ip3902_interrupt(ndev->irq, ndev);
-+ enable_irq_lockdep(ndev->irq);
-+}
-+#endif
-+
-+static int eth_alloc_tx_desc_index(struct ip3902_private *ip3902_priv)
-+{
-+ int tx_desc_curr;
-+
-+ tx_desc_curr = ip3902_priv->tx_next_produce;
-+ ip3902_priv->tx_next_produce = NEXT_TX(tx_desc_curr);
-+
-+ return tx_desc_curr;
-+}
-+
-+static void eth_tx_fill_frag_descs(struct ip3902_private *ip3902_priv, struct sk_buff *skb)
-+{
-+ int frag = 0;
-+ int tx_index;
-+
-+ do {
-+ skb_frag_t *this_frag = &skb_shinfo(skb)->frags[frag];
-+ unsigned long desc_address;
-+ unsigned long desc_control;
-+
-+ tx_index = eth_alloc_tx_desc_index(ip3902_priv);
-+
-+ if (frag == (skb_shinfo(skb)->nr_frags - 1)) {
-+ desc_control = (this_frag->size - 1) | TX_CONTROL_ALL_NOTLAST;
-+ ip3902_priv->tx_skb[tx_index] = skb;
-+ } else {
-+ desc_control = (this_frag->size - 1) | TX_CONTROL_ALL_LAST;
-+ ip3902_priv->tx_skb[tx_index] = NULL;
-+ }
-+
-+ ip3902_priv->tx_first_desc[tx_index] = false;
-+ desc_address = dma_map_page(NULL, this_frag->page,
-+ this_frag->page_offset,
-+ this_frag->size,
-+ DMA_TO_DEVICE);
-+ ip3902_write_tx_desc(ip3902_priv, tx_index, desc_address, desc_control);
-+ } while (++frag < skb_shinfo(skb)->nr_frags);
-+}
-+
-+static int ip3902_submit_skb_for_tx(struct net_device *ndev, struct sk_buff *skb)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ int nr_frags;
-+ int free_desc;
-+ int ret = 0;
-+
-+#ifdef CONFIG_INET_LRO
-+ if (ip3902_priv->lro_count > LRO_THRESHOLD)
-+ ip3902_priv->use_lro = true;
-+
-+ ip3902_priv->lro_count = 0;
-+#endif
-+
-+ free_desc = ip3902_nr_free_descs(ip3902_priv->tx_next_produce, ip3902_priv->tx_next_deallocate, TX_RING_SIZE);
-+ nr_frags = skb_shinfo(skb)->nr_frags;
-+
-+ if (free_desc <= nr_frags) {
-+ ip3902_eth_free_completed_tx_descs(ndev, ip3902_priv);
-+ free_desc = ip3902_nr_free_descs(ip3902_priv->tx_next_produce, ip3902_priv->tx_next_deallocate, TX_RING_SIZE);
-+ }
-+
-+ if (free_desc > nr_frags) {
-+ unsigned long desc_address;
-+ unsigned long desc_control;
-+ int tx_index;
-+ int length;
-+
-+ tx_index = eth_alloc_tx_desc_index(ip3902_priv);
-+
-+ if (nr_frags) {
-+ eth_tx_fill_frag_descs(ip3902_priv, skb);
-+ length = skb_headlen(skb);
-+ desc_control = (length - 1) | TX_CONTROL_ALL_NOTLAST;
-+ ip3902_priv->tx_skb[tx_index] = NULL;
-+ } else {
-+ length = skb->len;
-+ desc_control = (length - 1) | TX_CONTROL_ALL_LAST;
-+ ip3902_priv->tx_skb[tx_index] = skb;
-+ }
-+
-+ ip3902_priv->tx_first_desc[tx_index] = true;
-+ desc_address = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE);
-+
-+ ip3902_write_tx_desc(ip3902_priv, tx_index, desc_address, desc_control);
-+ ip3902_write_reg(ndev, TX_PRODUCE_INDEX_REG, ip3902_priv->tx_next_produce);
-+ ip3902_eth_free_completed_tx_descs(ndev, ip3902_priv);
-+ } else {
-+ ret = -ENOMEM;
-+ }
-+
-+ return ret;
-+}
-+
-+static int ip3902_start_xmit(struct sk_buff *skb, struct net_device *ndev)
-+{
-+ int ret;
-+
-+ BUG_ON(netif_queue_stopped(ndev));
-+ BUG_ON(skb == NULL);
-+ ret = ip3902_submit_skb_for_tx(ndev, skb);
-+
-+ if (ret) {
-+ printk(KERN_ERR "%s: transmit with queue full\n", ndev->name);
-+ netif_stop_queue(ndev);
-+ } else {
-+ ndev->stats.tx_bytes += skb->len;
-+ ndev->stats.tx_packets++;
-+ ndev->trans_start = jiffies;
-+ }
-+
-+ return ret; /* success */
-+}
-+
-+static void ip3902_do_set_rx_filter(struct net_device *ndev, struct ip3902_private *ip3902_priv)
-+{
-+ unsigned long creg, freg;
-+
-+ creg = ip3902_read_reg(ndev, COMMAND_REG);
-+ if (ndev->flags & IFF_PROMISC) {
-+ /* If interface is in promiscuous mode, just disable filter */
-+ ip3902_write_reg(ndev, COMMAND_REG, creg | COMMAND_PROMISC);
-+ return;
-+ }
-+ /* Enable filter */
-+ ip3902_write_reg(ndev, COMMAND_REG, creg & ~COMMAND_PROMISC);
-+
-+ /* Frames for self address and broadcast frames are always accepted */
-+ freg = FILTER_ACCEPT_SELF | FILTER_ACCEPT_BCAST_ANY;
-+
-+ if (ndev->flags & IFF_ALLMULTI) {
-+ /* Accept all multicast frames */
-+ freg |= FILTER_ACCEPT_MCAST_ANY;
-+ } else if (ndev->mc_count > 0) {
-+ /* Accept some multicast frames */
-+ u64 hash_mask = 0;
-+ struct dev_mc_list *mc;
-+
-+ freg |= FILTER_ACCEPT_MCAST_HASH;
-+ for (mc = ndev->mc_list; mc; mc = mc->next) {
-+ int b = (ether_crc(ETH_ALEN, mc->dmi_addr) >> 23) & 0x3f;
-+ hash_mask |= (1 << b);
-+ }
-+ ip3902_write_reg(ndev, HASH_FILTER_L_REG, hash_mask & 0xffffffff);
-+ ip3902_write_reg(ndev, HASH_FILTER_H_REG, hash_mask >> 32);
-+ }
-+
-+ ip3902_write_reg(ndev, FILTER_CTRL_REG, freg);
-+}
-+
-+static void ip3902_set_rx_filter(struct net_device *ndev)
-+{
-+ struct ip3902_private *ip3902_priv = (struct ip3902_private *)netdev_priv(ndev);
-+
-+ ip3902_do_set_rx_filter(ndev, ip3902_priv);
-+}
-+
-+static void set_duplex_mode(struct net_device *ndev, int duplex)
-+{
-+ unsigned long val;
-+
-+ if (duplex) {
-+ /* Full Duplex mode */
-+
-+ val = ip3902_read_reg(ndev, MAC2_REG);
-+ val |= MAC2_FULL_DUPLEX;
-+ ip3902_write_reg(ndev, MAC2_REG, val);
-+
-+ ip3902_write_reg(ndev, IPGT_REG, IPGT_FD_VALUE);
-+
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val |= COMMAND_FULL_DUPLEX;
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+ } else {
-+ /* Half Duplex mode */
-+
-+ val = ip3902_read_reg(ndev, MAC2_REG);
-+ val &= ~MAC2_FULL_DUPLEX;
-+ ip3902_write_reg(ndev, MAC2_REG, val);
-+
-+ ip3902_write_reg(ndev, IPGT_REG, IPGT_HD_VALUE);
-+
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val &= ~COMMAND_FULL_DUPLEX;
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+ }
-+}
-+
-+static int ip3902_ioctl(struct net_device *ndev, struct ifreq *req, int cmd)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ unsigned int duplex_changed;
-+ unsigned long flags;
-+ int rc;
-+
-+ if (!netif_running(ndev))
-+ return -EINVAL;
-+
-+ spin_lock_irqsave(&ip3902_priv->mii_lock, flags);
-+ rc = generic_mii_ioctl(&ip3902_priv->mii, if_mii(req), cmd, &duplex_changed);
-+ spin_unlock_irqrestore(&ip3902_priv->mii_lock, flags);
-+ if (duplex_changed)
-+ set_duplex_mode(ndev, ip3902_priv->mii.full_duplex);
-+
-+ return rc;
-+}
-+
-+/* ethtool ops */
-+
-+static void ip3902_get_drvinfo(struct net_device *ndev,
-+ struct ethtool_drvinfo *info)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+
-+ strcpy(info->driver, DRVNAME);
-+ strcpy(info->version, DRVVERSION);
-+ strcpy(info->bus_info, ip3902_priv->ndev->name);
-+}
-+
-+static int ip3902_get_settings(struct net_device *ndev, struct ethtool_cmd *cmd)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&ip3902_priv->mii_lock, flags);
-+ mii_ethtool_gset(&ip3902_priv->mii, cmd);
-+ spin_lock_irqsave(&ip3902_priv->mii_lock, flags);
-+
-+ return 0;
-+}
-+
-+static int ip3902_set_settings(struct net_device *ndev, struct ethtool_cmd *cmd)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ unsigned long flags;
-+ int rc;
-+
-+ spin_lock_irqsave(&ip3902_priv->mii_lock, flags);
-+ rc = mii_ethtool_sset(&ip3902_priv->mii, cmd);
-+ spin_lock_irqsave(&ip3902_priv->mii_lock, flags);
-+
-+ return rc;
-+}
-+
-+static int ip3902_nway_reset(struct net_device *ndev)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ return mii_nway_restart(&ip3902_priv->mii);
-+}
-+
-+static u32 ip3902_get_link(struct net_device *ndev)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ return mii_link_ok(&ip3902_priv->mii);
-+}
-+
-+static const struct ethtool_ops ip3902_ethtool_ops = {
-+ .get_drvinfo = ip3902_get_drvinfo,
-+ .get_settings = ip3902_get_settings,
-+ .set_settings = ip3902_set_settings,
-+ .nway_reset = ip3902_nway_reset,
-+ .get_link = ip3902_get_link,
-+ .get_sg = ethtool_op_get_sg,
-+ .set_sg = ethtool_op_set_sg,
-+};
-+
-+/* setup code */
-+
-+static void ip3902_eth_update_mac_address(struct net_device *ndev)
-+{
-+ ip3902_write_reg(ndev, SA0_REG, (ndev->dev_addr[5] << 8) | ndev->dev_addr[4]);
-+ ip3902_write_reg(ndev, SA1_REG, (ndev->dev_addr[3] << 8) | ndev->dev_addr[2]);
-+ ip3902_write_reg(ndev, SA2_REG, (ndev->dev_addr[1] << 8) | ndev->dev_addr[0]);
-+}
-+
-+static int ip3902_eth_set_mac_address(struct net_device *ndev, void *addr)
-+{
-+ int i;
-+
-+ for (i = 0; i < 6; i++)
-+ /* +2 is for the offset of the HW addr type */
-+ ndev->dev_addr[i] = ((unsigned char *)addr)[i + 2];
-+
-+ ip3902_eth_update_mac_address(ndev);
-+ return 0;
-+}
-+
-+static void ip3902_hw_deinit(struct net_device *ndev)
-+{
-+ unsigned long val;
-+
-+ /* Stop Rx and Tx hardware and disable interrupts */
-+ val = ip3902_read_reg(ndev, COMMAND_REG);
-+ val &= ~(COMMAND_TX_ENABLE | COMMAND_RX_ENABLE);
-+ ip3902_write_reg(ndev, COMMAND_REG, val);
-+ ip3902_write_reg(ndev, INT_ENABLE_REG, 0);
-+
-+ /* Put low-level hardware into reset, and high-level into poweroff */
-+ ip3902_write_reg(ndev, MAC1_REG, MAC1_SOFT_RESET);
-+ ip3902_write_reg(ndev, POWERDOWN_REG, POWERDOWN_VALUE);
-+}
-+
-+static int ethernet_phy_get(struct net_device *ndev)
-+{
-+ int addr;
-+
-+ for (addr = 1; addr < 32; addr++) {
-+ int stat;
-+ stat = ip3902_mdio_read(ndev, addr, MII_BMSR);
-+ if ((stat != 0) && (stat != 0xffff))
-+ return addr;
-+ }
-+ printk(KERN_ERR DRVNAME ": could not locate PHY\n");
-+ return -EIO;
-+}
-+
-+static int ip3902_hw_init(struct net_device *ndev, struct ip3902_private *ip3902_priv)
-+{
-+ int ret = 0;
-+
-+ /* Poweron hardware */
-+ ip3902_write_reg(ndev, POWERDOWN_REG, 0);
-+
-+ /* Move low level out of reset (also initialize the registers)*/
-+ ip3902_write_reg(ndev, MAC1_REG, 0);
-+ ip3902_write_reg(ndev, MAC2_REG, INITIAL_MAC2);
-+
-+ ip3902_priv->mii.phy_id = ethernet_phy_get(ndev);
-+
-+ if (ip3902_priv->mii.phy_id < 0) {
-+ ret = ip3902_priv->mii.phy_id;
-+ } else {
-+ ip3902_eth_update_mac_address(ndev);
-+
-+ /* "Initialize" command register (before resets - those routines
-+ * use read-modify-write operations on that register */
-+ ip3902_write_reg(ndev, COMMAND_REG, COMMAND_ALLOW_SHORT);
-+
-+ /* Reset and configure Rx and Tx */
-+ ip3902_reset_tx(ndev, ip3902_priv, 1);
-+ ip3902_reset_rx(ndev, ip3902_priv, 1);
-+
-+ /* Initialize Rx filtering */
-+ ip3902_do_set_rx_filter(ndev, ip3902_priv);
-+
-+ /* Clear all interrupts, and enable interesting interrupts */
-+ ip3902_write_reg(ndev, INT_CLEAR_REG, 0xffffffff);
-+ ip3902_write_reg(ndev, INT_CLEAR_REG, 0);
-+ ip3902_write_reg(ndev, INT_ENABLE_REG, (TX_UNDERRUN_INT | RX_DONE_INT | RX_OVERRUN_INT));
-+
-+ /* Start Tx and Rx hardware */
-+ ip3902_start_tx(ndev);
-+ ip3902_start_rx(ndev);
-+ }
-+ return 0;
-+}
-+
-+static int ip3902_open(struct net_device *ndev)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+ int ret;
-+
-+ dev_dbg(&ip3902_priv->ndev->dev, "%s: open\n", ndev->name);
-+
-+ ret = request_irq(ndev->irq, ip3902_interrupt, 0, ndev->name, ndev);
-+ if (ret)
-+ return ret;
-+
-+ ret = ip3902_hw_init(ndev, ip3902_priv);
-+
-+ if (ret)
-+ return ret;
-+
-+ mii_check_media(&ip3902_priv->mii, netif_msg_link(ip3902_priv), 1);
-+ set_duplex_mode(ndev, ip3902_priv->mii.full_duplex);
-+
-+#ifdef CONFIG_INET_LRO
-+ init_timer(&ip3902_priv->lro_timer);
-+ ip3902_priv->lro_timer.data = (unsigned long) ip3902_priv;
-+ ip3902_priv->lro_timer.function = ip3902_lro_timeout;
-+#endif
-+
-+ netif_start_queue(ndev);
-+ napi_enable(&ip3902_priv->napi);
-+
-+ ip3902_priv->running = 1;
-+
-+ return 0;
-+}
-+
-+static int ip3902_close(struct net_device *ndev)
-+{
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+
-+ dev_dbg(&ip3902_priv->ndev->dev, "%s: close\n", ndev->name);
-+
-+ ip3902_priv->running = 0;
-+ wmb();
-+
-+#ifdef CONFIG_INET_LRO
-+ del_timer(&ip3902_priv->lro_timer);
-+#endif
-+
-+ napi_disable(&ip3902_priv->napi);
-+
-+ ip3902_hw_deinit(ndev);
-+
-+ netif_stop_queue(ndev);
-+
-+ ip3902_eth_free_all_tx_descs(ndev, ip3902_priv);
-+
-+ free_irq(ndev->irq, ndev);
-+ return 0;
-+}
-+
-+static int parse_mac_address(struct net_device *ndev)
-+{
-+ int n = sscanf(mac_address, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
-+ &ndev->dev_addr[0], &ndev->dev_addr[1],
-+ &ndev->dev_addr[2], &ndev->dev_addr[3],
-+ &ndev->dev_addr[4], &ndev->dev_addr[5]);
-+
-+ if (n == 6)
-+ return 0;
-+
-+ printk(KERN_WARNING DRVNAME": failed to parse mac address string \"%s\"\n", mac_address);
-+ return -EINVAL;
-+}
-+
-+static void ip3902_hw_shutdown(struct net_device *ndev, struct ip3902_private *ip3902_priv)
-+{
-+ dma_free_coherent(NULL, sizeof(*(ip3902_priv->ds)), ip3902_priv->ds, ip3902_priv->ds_dma);
-+}
-+
-+static int ip3902_hw_startup(struct net_device *ndev, struct ip3902_private *ip3902_priv)
-+{
-+ ip3902_priv->ds = dma_alloc_coherent(NULL, sizeof(*(ip3902_priv->ds)), &ip3902_priv->ds_dma, GFP_KERNEL);
-+ if (!ip3902_priv->ds) {
-+ printk(KERN_ERR DRVNAME ": can't allocate DMA structure\n");
-+ ip3902_hw_shutdown(ndev, ip3902_priv);
-+ return -ENOMEM;
-+ }
-+
-+ /* Poweron hardware */
-+ ip3902_write_reg(ndev, POWERDOWN_REG, 0);
-+
-+ /* set mii clock */
-+ ip3902_write_reg(ndev, MCFG_REG, 0x1c);
-+
-+ /* Move low level out of reset (also initialize the registers)*/
-+ ip3902_write_reg(ndev, MAC1_REG, 0);
-+ ip3902_write_reg(ndev, MAC2_REG, INITIAL_MAC2);
-+
-+ if (!mac_address || parse_mac_address(ndev) < 0) {
-+ unsigned long val;
-+
-+ val = ip3902_read_reg(ndev, SA0_REG);
-+ ndev->dev_addr[5] = (val >> 8) & 255;
-+ ndev->dev_addr[4] = val & 255;
-+ val = ip3902_read_reg(ndev, SA1_REG);
-+ ndev->dev_addr[3] = (val >> 8) & 255;
-+ ndev->dev_addr[2] = val & 255;
-+ val = ip3902_read_reg(ndev, SA2_REG);
-+ ndev->dev_addr[1] = (val >> 8) & 255;
-+ ndev->dev_addr[0] = val & 255;
-+ }
-+
-+ /* Put low-level hardware into reset, and high-level into poweroff */
-+ ip3902_write_reg(ndev, MAC1_REG, MAC1_SOFT_RESET);
-+ ip3902_write_reg(ndev, POWERDOWN_REG, POWERDOWN_VALUE);
-+
-+ return 0;
-+}
-+
-+static int ip3902_init_dev(struct net_device *ndev, struct ip3902_private *ip3902_priv)
-+{
-+ int ret;
-+
-+ ret = ip3902_hw_startup(ndev, ip3902_priv);
-+
-+ if (!ret) {
-+ ndev->hard_start_xmit = ip3902_start_xmit;
-+ ndev->set_mac_address = ip3902_eth_set_mac_address;
-+ ndev->set_multicast_list = ip3902_set_rx_filter;
-+ ndev->open = ip3902_open;
-+ ndev->stop = ip3902_close;
-+ ndev->do_ioctl = ip3902_ioctl;
-+ ndev->features = 0;
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+ ndev->poll_controller = ip3902_net_poll;
-+#endif
-+ SET_ETHTOOL_OPS(ndev, &ip3902_ethtool_ops);
-+
-+ ip3902_priv->msg_enable = NETIF_MSG_LINK;
-+ ip3902_priv->mii.phy_id_mask = 0x1f;
-+ ip3902_priv->mii.reg_num_mask = 0x1f;
-+ ip3902_priv->mii.mdio_read = ip3902_mdio_read;
-+ ip3902_priv->mii.mdio_write = ip3902_mdio_write;
-+ ip3902_priv->mii.dev = ndev;
-+
-+ spin_lock_init(&ip3902_priv->lock);
-+
-+ ret = register_netdev(ndev);
-+
-+ if (ret)
-+ ip3902_hw_shutdown(ndev, ip3902_priv);
-+ }
-+
-+ return ret;
-+}
-+
-+#ifdef CONFIG_INET_LRO
-+static int ip3902_get_skb_hdr(struct sk_buff *skb, void **iphdr, void **tcph, u64 *hdr_flags, void *priv)
-+{
-+ unsigned int ip_len;
-+ struct iphdr *iph;
-+
-+ /* non tcp packet */
-+ skb_reset_network_header(skb);
-+ iph = ip_hdr(skb);
-+ if (iph->protocol != IPPROTO_TCP)
-+ return -1;
-+
-+ ip_len = ip_hdrlen(skb);
-+ skb_set_transport_header(skb, ip_len);
-+ *tcph = tcp_hdr(skb);
-+
-+ /* check if ip header and tcp header are complete */
-+ if (iph->tot_len < ip_len + tcp_hdrlen(skb))
-+ return -1;
-+
-+ *hdr_flags = LRO_IPV4 | LRO_TCP;
-+ *iphdr = iph;
-+
-+ return 0;
-+}
-+#endif
-+
-+static int ip3902_remove(struct platform_device *pdev)
-+{
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+
-+ platform_set_drvdata(pdev, NULL);
-+
-+ unregister_netdev(ndev);
-+
-+ iounmap(ip3902_priv->mem);
-+ release_resource(ip3902_priv->bus);
-+ kfree(ip3902_priv->bus);
-+
-+ free_netdev(ndev);
-+
-+ return 0;
-+}
-+
-+/* ip3902_probe
-+ *
-+ * This is the entry point when the platform device system uses to
-+ * notify us of a new device to attach to. Allocate memory, find
-+ * the resources and information passed, and map the necessary registers.
-+*/
-+
-+static int ip3902_probe(struct platform_device *pdev)
-+{
-+ struct net_device *ndev;
-+ struct ip3902_private *ip3902_priv;
-+ struct resource *res;
-+ size_t size;
-+ int ret;
-+
-+ ndev = alloc_etherdev(sizeof(struct ip3902_private));
-+
-+ if (ndev == NULL)
-+ return -ENOMEM;
-+
-+ ip3902_priv = netdev_priv(ndev);
-+
-+ memset(ip3902_priv, 0, sizeof(struct ip3902_private));
-+
-+ spin_lock_init(&ip3902_priv->mii_lock);
-+
-+ ip3902_priv->ndev = ndev;
-+ ip3902_priv->pdev = pdev;
-+
-+ netif_napi_add(ndev, &ip3902_priv->napi, ip3902_poll, IP3902_NAPI_WEIGHT);
-+
-+#ifdef CONFIG_INET_LRO
-+ ip3902_priv->use_lro = false;
-+ ip3902_priv->lro_count = 0;
-+ ip3902_priv->lro_mgr.max_aggr = IP3902_NAPI_WEIGHT;
-+ ip3902_priv->lro_mgr.max_desc = MAX_LRO_DESCRIPTORS;
-+ ip3902_priv->lro_mgr.lro_arr = ip3902_priv->lro_desc;
-+ ip3902_priv->lro_mgr.get_skb_header = ip3902_get_skb_hdr;
-+ ip3902_priv->lro_mgr.features = LRO_F_NAPI;
-+ ip3902_priv->lro_mgr.dev = ndev;
-+ ip3902_priv->lro_mgr.ip_summed = 0;
-+ ip3902_priv->lro_mgr.ip_summed_aggr = 0;
-+#endif
-+
-+ platform_set_drvdata(pdev, ndev);
-+
-+ /* find the platform resources */
-+ ndev->irq = platform_get_irq(pdev, 0);
-+ if (ndev->irq < 0) {
-+ dev_err(&pdev->dev, "no IRQ specified\n");
-+ ret = -ENXIO;
-+ goto exit_mem;
-+ }
-+
-+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+ if (res == NULL) {
-+ dev_err(&pdev->dev, "no MEM specified\n");
-+ ret = -ENXIO;
-+ goto exit_mem;
-+ }
-+ size = (res->end - res->start) + 1;
-+
-+ ip3902_priv->bus = request_mem_region(res->start & 0x1fffffff, size, pdev->name);
-+ if (ip3902_priv->bus == NULL) {
-+ dev_err(&pdev->dev, "cannot reserve registers\n");
-+ ret = -ENXIO;
-+ goto exit_mem;
-+ }
-+
-+ ip3902_priv->mem = ioremap(res->start & 0x1fffffff, size);
-+ ndev->base_addr = (unsigned long)ip3902_priv->mem;
-+
-+ if (ip3902_priv->mem == NULL) {
-+ dev_err(&pdev->dev, "Cannot ioremap area (%08llx,%08llx)\n",
-+ (unsigned long long)res->start,
-+ (unsigned long long)res->end);
-+
-+ ret = -ENXIO;
-+ goto exit_req;
-+ }
-+
-+ SET_NETDEV_DEV(ndev, &pdev->dev);
-+
-+ /* got resources, now initialise and register device */
-+ ret = ip3902_init_dev(ndev, ip3902_priv);
-+ if (!ret) {
-+ printk(KERN_INFO "NXP ip3902 10/100 Ethernet platform driver irq %d base %08lx\n", ndev->irq, ndev->base_addr);
-+ return 0;
-+ }
-+
-+exit_req:
-+ release_resource(ip3902_priv->bus);
-+ kfree(ip3902_priv->bus);
-+
-+exit_mem:
-+ free_netdev(ndev);
-+
-+ return ret;
-+}
-+
-+/* suspend and resume */
-+
-+#ifdef CONFIG_PM
-+static int ip3902_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+
-+ ip3902_priv->resume_open = ip3902_priv->running;
-+
-+ netif_device_detach(ndev);
-+ ip3902_close(ndev);
-+
-+ return 0;
-+}
-+
-+static int ip3902_resume(struct platform_device *pdev)
-+{
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ struct ip3902_private *ip3902_priv = netdev_priv(ndev);
-+
-+ netif_device_attach(ndev);
-+
-+ if (ip3902_priv->resume_open)
-+ ip3902_open(ndev);
-+
-+ return 0;
-+}
-+
-+#else
-+ #define ip3902_suspend NULL
-+ #define ip3902_resume NULL
-+#endif
-+
-+static struct platform_driver ip3902drv = {
-+ .driver = {
-+ .name = "ip3902-eth",
-+ .owner = THIS_MODULE,
-+ },
-+ .probe = ip3902_probe,
-+ .remove = ip3902_remove,
-+ .suspend = ip3902_suspend,
-+ .resume = ip3902_resume,
-+};
-+
-+static int __init ip3902drv_init(void)
-+{
-+ return platform_driver_register(&ip3902drv);
-+}
-+
-+static void __exit ip3902drv_exit(void)
-+{
-+ platform_driver_unregister(&ip3902drv);
-+}
-+
-+module_init(ip3902drv_init);
-+module_exit(ip3902drv_exit);
-+
-+MODULE_DESCRIPTION("NXP IP3902 10/100 Ethernet platform driver");
-+MODULE_AUTHOR("Chris Steel, <chris.steel@nxp.com>");
-+MODULE_LICENSE("GPL v2");
-diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
-index 9fe8cb7..d140375 100644
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -1882,6 +1882,16 @@ config ATL2
- To compile this driver as a module, choose M here. The module
- will be called atl2.
-
-+config IP3902
-+ tristate "NXP IP3902 ethernet hardware support"
-+ depends on SOC_PNX8335 && NET_ETHERNET
-+ select MII
-+ select CRC32
-+ help
-+ This is a driver for NXP IP3902 ethernet hardware found
-+ in PNX8335 and probably other SOCs.
-+
-+
- source "drivers/net/fs_enet/Kconfig"
-
- endif # NET_ETHERNET
-diff -urN --exclude=.svn linux-2.6.26-rc4.orig/drivers/net/Makefile linux-2.6.26-rc4/drivers/net/Makefile
---- linux-2.6.26-rc4.orig/drivers/net/Makefile 2008-06-03
-10:56:55.000000000 +0100
-+++ linux-2.6.26-rc4/drivers/net/Makefile 2008-06-03 17:17:11.000000000 +0100
-@@ -122,6 +122,7 @@
- obj-$(CONFIG_FORCEDETH) += forcedeth.o
- obj-$(CONFIG_NE_H8300) += ne-h8300.o
- obj-$(CONFIG_AX88796) += ax88796.o
-+obj-$(CONFIG_IP3902) += ip3902.o
-
- obj-$(CONFIG_TSI108_ETH) += tsi108_eth.o
- obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o
-
diff --git a/packages/linux/linux-2.6.28/stb225/uImage.patch b/packages/linux/linux-2.6.28/stb225/uImage.patch
deleted file mode 100644
index f43a221e62..0000000000
--- a/packages/linux/linux-2.6.28/stb225/uImage.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff -urN linux-2.6.28.orig/arch/mips/Makefile linux-2.6.28/arch/mips/Makefile
---- linux-2.6.28.orig/arch/mips/Makefile 2009-01-28 16:12:23.000000000 +0200
-+++ linux-2.6.28/arch/mips/Makefile 2009-01-28 16:13:54.000000000 +0200
-@@ -682,6 +682,19 @@
-
- all: $(all-y)
-
-+# Support for U-Boot image creation (from U-Boot README)
-+uImage: vmlinux
-+ $(OBJCOPY) -O binary -R .note -R .comment -S vmlinux vmlinux.bin
-+ rm -f vmlinux.bin.gz
-+ gzip -9 vmlinux.bin
-+ LA=`$(OBJDUMP) -p vmlinux | sed -n 's/LOAD.*vaddr \([^ ]*\).*/\1/p'`; \
-+ EN=`$(OBJDUMP) -f vmlinux | sed -n 's/.*start address \([^ ]*\).*/\1/p'`; \
-+ echo $$LA; \
-+ echo $$EN; \
-+ mkimage -A mips -O linux -T kernel -C gzip \
-+ -a $$LA -e $$EN -n "Linux Kernel Image" \
-+ -d vmlinux.bin.gz uImage
-+
- vmlinux.bin: $(vmlinux-32)
- +@$(call makeboot,$@)
-
diff --git a/packages/linux/linux-2.6.28/tosa/commit-31c9b28 b/packages/linux/linux-2.6.28/tosa/commit-31c9b28
deleted file mode 100644
index 0ae09c91ce..0000000000
--- a/packages/linux/linux-2.6.28/tosa/commit-31c9b28
+++ /dev/null
@@ -1,67 +0,0 @@
-commit 31c9b284ae49093fdd9d1e9a347e458c7ebc37a9
-Author: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Tue Oct 28 18:40:37 2008 +0300
-
- [ARM] pxa/tosa: support tc6393xb/tmiofb.
-
- Add platform data necessary to support tmiofb on tosa.
-
- Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
- Signed-off-by: Eric Miao <eric.miao@marvell.com>
-
-diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
-index 224897a..366a533 100644
---- a/arch/arm/mach-pxa/tosa.c
-+++ b/arch/arm/mach-pxa/tosa.c
-@@ -733,6 +733,43 @@ static void tosa_tc6393xb_teardown(struct platform_device *dev)
- gpio_free(TOSA_GPIO_CARD_VCC_ON);
- }
-
-+static struct fb_videomode tosa_tc6393xb_lcd_mode[] = {
-+ {
-+ .xres = 480,
-+ .yres = 640,
-+ .pixclock = 0x002cdf00,/* PLL divisor */
-+ .left_margin = 0x004c,
-+ .right_margin = 0x005b,
-+ .upper_margin = 0x0001,
-+ .lower_margin = 0x000d,
-+ .hsync_len = 0x0002,
-+ .vsync_len = 0x0001,
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ },{
-+ .xres = 240,
-+ .yres = 320,
-+ .pixclock = 0x00e7f203,/* PLL divisor */
-+ .left_margin = 0x0024,
-+ .right_margin = 0x002f,
-+ .upper_margin = 0x0001,
-+ .lower_margin = 0x000d,
-+ .hsync_len = 0x0002,
-+ .vsync_len = 0x0001,
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ }
-+};
-+
-+static struct tmio_fb_data tosa_tc6393xb_fb_config = {
-+ .lcd_set_power = tc6393xb_lcd_set_power,
-+ .lcd_mode = tc6393xb_lcd_mode,
-+ .num_modes = ARRAY_SIZE(tosa_tc6393xb_lcd_mode),
-+ .modes = &tosa_tc6393xb_lcd_mode[0],
-+ .height = 82,
-+ .width = 60,
-+};
-+
- static struct tc6393xb_platform_data tosa_tc6393xb_data = {
- .scr_pll2cr = 0x0cc1,
- .scr_gper = 0x3300,
-@@ -748,6 +785,7 @@ static struct tc6393xb_platform_data tosa_tc6393xb_data = {
- .resume = tosa_tc6393xb_resume,
-
- .nand_data = &tosa_tc6393xb_nand_config,
-+ .fb_data = &tosa_tc6393xb_fb_config,
-
- .resume_restore = 1,
- };
diff --git a/packages/linux/linux-2.6.28/tosa/commit-ddfb33c b/packages/linux/linux-2.6.28/tosa/commit-ddfb33c
deleted file mode 100644
index 4f3278afe3..0000000000
--- a/packages/linux/linux-2.6.28/tosa/commit-ddfb33c
+++ /dev/null
@@ -1,39 +0,0 @@
-commit ddfb33c0ffbd8b8f5984de5a8f9513b88cd28b67
-Author: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Thu Nov 27 01:25:09 2008 +0300
-
- [ARM] pxa/tosa: fix building w/o TC6393XB driver
-
- Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
- Signed-off-by: Eric Miao <eric.miao@marvell.com>
-
-diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
-index 366a533..c46b640 100644
---- a/arch/arm/mach-pxa/tosa.c
-+++ b/arch/arm/mach-pxa/tosa.c
-@@ -733,6 +733,7 @@ static void tosa_tc6393xb_teardown(struct platform_device *dev)
- gpio_free(TOSA_GPIO_CARD_VCC_ON);
- }
-
-+#ifdef CONFIG_MFD_TC6393XB
- static struct fb_videomode tosa_tc6393xb_lcd_mode[] = {
- {
- .xres = 480,
-@@ -769,6 +770,7 @@ static struct tmio_fb_data tosa_tc6393xb_fb_config = {
- .height = 82,
- .width = 60,
- };
-+#endif
-
- static struct tc6393xb_platform_data tosa_tc6393xb_data = {
- .scr_pll2cr = 0x0cc1,
-@@ -785,7 +787,9 @@ static struct tc6393xb_platform_data tosa_tc6393xb_data = {
- .resume = tosa_tc6393xb_resume,
-
- .nand_data = &tosa_tc6393xb_nand_config,
-+#ifdef CONFIG_MFD_TC6393XB
- .fb_data = &tosa_tc6393xb_fb_config,
-+#endif
-
- .resume_restore = 1,
- };
diff --git a/packages/linux/linux-2.6.28/tosa/commit-f34ee79 b/packages/linux/linux-2.6.28/tosa/commit-f34ee79
deleted file mode 100644
index 37522d8aa2..0000000000
--- a/packages/linux/linux-2.6.28/tosa/commit-f34ee79
+++ /dev/null
@@ -1,68 +0,0 @@
-commit f34ee79a5307e9a4c68c978840cf7e7e10236362
-Author: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Tue Nov 25 00:57:27 2008 +0300
-
- [ARM] pxa/tosa: add physmap mapping for ROM
-
- Add mapping for system ROM using physmap-flash mapping.
-
- Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
- Signed-off-by: Eric Miao <eric.miao@marvell.com>
-
-diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
-index c46b640..3332e5d 100644
---- a/arch/arm/mach-pxa/tosa.c
-+++ b/arch/arm/mach-pxa/tosa.c
-@@ -25,6 +25,7 @@
- #include <linux/mfd/tmio.h>
- #include <linux/mtd/nand.h>
- #include <linux/mtd/partitions.h>
-+#include <linux/mtd/physmap.h>
- #include <linux/pm.h>
- #include <linux/gpio_keys.h>
- #include <linux/input.h>
-@@ -831,6 +832,36 @@ static struct spi_board_info spi_board_info[] __initdata = {
- },
- };
-
-+static struct mtd_partition sharpsl_rom_parts[] = {
-+ {
-+ .name ="Boot PROM Filesystem",
-+ .offset = 0x00160000,
-+ .size = MTDPART_SIZ_FULL,
-+ },
-+};
-+
-+static struct physmap_flash_data sharpsl_rom_data = {
-+ .width = 2,
-+ .nr_parts = ARRAY_SIZE(sharpsl_rom_parts),
-+ .parts = sharpsl_rom_parts,
-+};
-+
-+static struct resource sharpsl_rom_resources[] = {
-+ {
-+ .start = 0x00000000,
-+ .end = 0x007fffff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+};
-+
-+static struct platform_device sharpsl_rom_device = {
-+ .name = "physmap-flash",
-+ .id = -1,
-+ .resource = sharpsl_rom_resources,
-+ .num_resources = ARRAY_SIZE(sharpsl_rom_resources),
-+ .dev.platform_data = &sharpsl_rom_data,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &tosascoop_device,
- &tosascoop_jc_device,
-@@ -840,6 +871,7 @@ static struct platform_device *devices[] __initdata = {
- &tosa_gpio_keys_device,
- &tosaled_device,
- &tosa_bt_device,
-+ &sharpsl_rom_device,
- };
-
- static void tosa_poweroff(void)
diff --git a/packages/linux/linux-2.6.28/wrap/defconfig b/packages/linux/linux-2.6.28/wrap/defconfig
deleted file mode 100644
index da72892436..0000000000
--- a/packages/linux/linux-2.6.28/wrap/defconfig
+++ /dev/null
@@ -1,1704 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28
-# Tue Mar 17 15:09:12 2009
-#
-# CONFIG_64BIT is not set
-CONFIG_X86_32=y
-# CONFIG_X86_64 is not set
-CONFIG_X86=y
-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_FAST_CMPXCHG_LOCAL=y
-CONFIG_MMU=y
-CONFIG_ZONE_DMA=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-# CONFIG_GENERIC_TIME_VSYSCALL is not set
-CONFIG_ARCH_HAS_CPU_RELAX=y
-CONFIG_ARCH_HAS_DEFAULT_IDLE=y
-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
-# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_ZONE_DMA32 is not set
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-# CONFIG_AUDIT_ARCH is not set
-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_KTIME_SCALAR=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=17
-# CONFIG_CGROUPS is not set
-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
-CONFIG_GROUP_SCHED=y
-CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_RT_GROUP_SCHED is not set
-CONFIG_USER_SCHED=y
-# CONFIG_CGROUP_SCHED 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_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_PCSPKR_PLATFORM=y
-CONFIG_COMPAT_BRK=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-# CONFIG_VM_EVENT_COUNTERS is not set
-CONFIG_PCI_QUIRKS=y
-CONFIG_SLUB_DEBUG=y
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-# CONFIG_MARKERS is not set
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
-CONFIG_HAVE_IOREMAP_PROT=y
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_ARCH_TRACEHOOK=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-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_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-CONFIG_CLASSIC_RCU=y
-CONFIG_FREEZER=y
-
-#
-# Processor type and features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-# CONFIG_SMP is not set
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_VSMP is not set
-# CONFIG_X86_RDC321X is not set
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-# CONFIG_PARAVIRT_GUEST is not set
-# CONFIG_MEMTEST is not set
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP3D is not set
-CONFIG_MGEODEGX1=y
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-# CONFIG_MVIAC7 is not set
-# CONFIG_MPSC is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_GENERIC_CPU is not set
-# CONFIG_X86_GENERIC is not set
-CONFIG_X86_CPU=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=4
-CONFIG_X86_XADD=y
-# CONFIG_X86_PPRO_FENCE is not set
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_ALIGNMENT_16=y
-CONFIG_X86_TSC=y
-CONFIG_X86_MINIMUM_CPU_FAMILY=4
-CONFIG_X86_DEBUGCTLMSR=y
-# CONFIG_PROCESSOR_SELECT is not set
-CONFIG_CPU_SUP_INTEL=y
-CONFIG_CPU_SUP_CYRIX_32=y
-CONFIG_CPU_SUP_AMD=y
-CONFIG_CPU_SUP_CENTAUR_32=y
-CONFIG_CPU_SUP_TRANSMETA_32=y
-CONFIG_CPU_SUP_UMC_32=y
-# CONFIG_X86_DS is not set
-# CONFIG_HPET_TIMER is not set
-CONFIG_DMI=y
-# CONFIG_IOMMU_HELPER is not set
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_X86_UP_APIC is not set
-# CONFIG_X86_MCE is not set
-# CONFIG_VM86 is not set
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_2G_OPT is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-# CONFIG_X86_PAE is not set
-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_UNEVICTABLE_LRU is not set
-# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
-CONFIG_X86_RESERVE_LOW_64K=y
-# CONFIG_MATH_EMULATION is not set
-# CONFIG_MTRR is not set
-# CONFIG_EFI is not set
-# CONFIG_SECCOMP is not set
-CONFIG_HZ_100=y
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=100
-CONFIG_SCHED_HRTICK=y
-CONFIG_KEXEC=y
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
-# CONFIG_COMPAT_VDSO is not set
-# CONFIG_CMDLINE_BOOL is not set
-
-#
-# Power management and ACPI options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-# CONFIG_HIBERNATION is not set
-CONFIG_ACPI=y
-CONFIG_ACPI_SLEEP=y
-# CONFIG_ACPI_PROCFS is not set
-# CONFIG_ACPI_PROCFS_POWER is not set
-CONFIG_ACPI_SYSFS_POWER=y
-# CONFIG_ACPI_PROC_EVENT is not set
-# CONFIG_ACPI_AC is not set
-# CONFIG_ACPI_BATTERY is not set
-# CONFIG_ACPI_BUTTON is not set
-# CONFIG_ACPI_FAN is not set
-# CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_WMI is not set
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_TOSHIBA is not set
-# CONFIG_ACPI_CUSTOM_DSDT is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_PCI_SLOT=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-# CONFIG_ACPI_SBS is not set
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=m
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=m
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=m
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-
-#
-# CPUFreq processor drivers
-#
-CONFIG_X86_ACPI_CPUFREQ=m
-# CONFIG_X86_POWERNOW_K6 is not set
-# CONFIG_X86_POWERNOW_K7 is not set
-# CONFIG_X86_POWERNOW_K8 is not set
-CONFIG_X86_GX_SUSPMOD=m
-# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
-# CONFIG_X86_SPEEDSTEP_ICH is not set
-# CONFIG_X86_SPEEDSTEP_SMI is not set
-# CONFIG_X86_P4_CLOCKMOD is not set
-# CONFIG_X86_CPUFREQ_NFORCE2 is not set
-# CONFIG_X86_LONGRUN is not set
-# CONFIG_X86_LONGHAUL is not set
-# CONFIG_X86_E_POWERSAVER is not set
-
-#
-# shared options
-#
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
-# CONFIG_X86_SPEEDSTEP_LIB is not set
-CONFIG_CPU_IDLE=y
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_CPU_IDLE_GOV_MENU=y
-
-#
-# Bus options (PCI etc.)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-# CONFIG_PCI_GOOLPC is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCI_DOMAINS=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCI_LEGACY=y
-CONFIG_ISA_DMA_API=y
-# CONFIG_ISA is not set
-# CONFIG_MCA is not set
-CONFIG_SCx200=m
-CONFIG_SCx200HR_TIMER=m
-# CONFIG_OLPC is not set
-# CONFIG_PCCARD is not set
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats / Emulations
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-CONFIG_HAVE_ATOMIC_IOMAP=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=y
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-CONFIG_XFRM_IPCOMP=m
-CONFIG_NET_KEY=m
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_LRO=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-CONFIG_TCP_CONG_ADVANCED=y
-CONFIG_TCP_CONG_BIC=m
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_TCP_CONG_WESTWOOD=m
-CONFIG_TCP_CONG_HTCP=m
-# CONFIG_TCP_CONG_HSTCP is not set
-# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_VEGAS is not set
-# CONFIG_TCP_CONG_SCALABLE is not set
-# CONFIG_TCP_CONG_LP is not set
-# CONFIG_TCP_CONG_VENO is not set
-# CONFIG_TCP_CONG_YEAH is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
-# CONFIG_DEFAULT_BIC is not set
-CONFIG_DEFAULT_CUBIC=y
-# CONFIG_DEFAULT_HTCP is not set
-# CONFIG_DEFAULT_VEGAS is not set
-# CONFIG_DEFAULT_WESTWOOD is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_PRIVACY=y
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_NDISC_NODETYPE=y
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_PIMSM_V2=y
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NF_CONNTRACK=m
-CONFIG_NF_CT_ACCT=y
-CONFIG_NF_CONNTRACK_MARK=y
-CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CT_PROTO_DCCP=m
-CONFIG_NF_CT_PROTO_GRE=m
-CONFIG_NF_CT_PROTO_SCTP=m
-CONFIG_NF_CT_PROTO_UDPLITE=m
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NETFILTER_TPROXY=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_DSCP=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
-CONFIG_NETFILTER_XT_TARGET_TPROXY=m
-CONFIG_NETFILTER_XT_TARGET_TRACE=m
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_DSCP=m
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_OWNER=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_RECENT=m
-# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_SOCKET=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_TIME=m
-CONFIG_NETFILTER_XT_MATCH_U32=m
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV4=m
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT=m
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_NF_NAT_SNMP_BASIC=m
-CONFIG_NF_NAT_PROTO_DCCP=m
-CONFIG_NF_NAT_PROTO_GRE=m
-CONFIG_NF_NAT_PROTO_UDPLITE=m
-CONFIG_NF_NAT_PROTO_SCTP=m
-CONFIG_NF_NAT_FTP=m
-CONFIG_NF_NAT_IRC=m
-CONFIG_NF_NAT_TFTP=m
-CONFIG_NF_NAT_AMANDA=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
-CONFIG_NF_NAT_SIP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration
-#
-CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_IP6_NF_QUEUE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_MH=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_RAW=m
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_IP6=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_ULOG=m
-CONFIG_BRIDGE_EBT_NFLOG=m
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-CONFIG_STP=m
-CONFIG_GARP=m
-CONFIG_BRIDGE=m
-# CONFIG_NET_DSA is not set
-CONFIG_VLAN_8021Q=m
-CONFIG_VLAN_8021Q_GVRP=y
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-# 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_NET_SCHED=y
-
-#
-# Queueing/Scheduling
-#
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_MULTIQ=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_INGRESS=m
-
-#
-# Classification
-#
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_PERF=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_FLOW=m
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_STACK=32
-CONFIG_NET_EMATCH_CMP=m
-CONFIG_NET_EMATCH_NBYTE=m
-CONFIG_NET_EMATCH_U32=m
-CONFIG_NET_EMATCH_META=m
-CONFIG_NET_EMATCH_TEXT=m
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_ACT_POLICE=m
-CONFIG_NET_ACT_GACT=m
-CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
-CONFIG_NET_ACT_IPT=m
-CONFIG_NET_ACT_NAT=m
-CONFIG_NET_ACT_PEDIT=m
-CONFIG_NET_ACT_SIMP=m
-CONFIG_NET_ACT_SKBEDIT=m
-CONFIG_NET_CLS_IND=y
-CONFIG_NET_SCH_FIFO=y
-
-#
-# 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_PHONET is not set
-CONFIG_FIB_RULES=y
-CONFIG_WIRELESS=y
-CONFIG_CFG80211=m
-CONFIG_NL80211=y
-CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_MAC80211=m
-
-#
-# Rate control algorithm selection
-#
-CONFIG_MAC80211_RC_PID=y
-CONFIG_MAC80211_RC_MINSTREL=y
-# CONFIG_MAC80211_RC_DEFAULT_PID is not set
-CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT="minstrel"
-# CONFIG_MAC80211_MESH is not set
-CONFIG_MAC80211_LEDS=y
-# CONFIG_MAC80211_DEBUG_MENU is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-# CONFIG_MTD is not set
-# CONFIG_PARPORT is not set
-CONFIG_PNP=y
-CONFIG_PNP_DEBUG_MESSAGES=y
-
-#
-# Protocols
-#
-CONFIG_PNPACPI=y
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-# CONFIG_BLK_DEV_SX8 is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=16384
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD is not set
-CONFIG_ATA_OVER_ETH=m
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_MISC_DEVICES is not set
-CONFIG_HAVE_IDE=y
-CONFIG_IDE=y
-
-#
-# Please see Documentation/ide/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-# CONFIG_IDE_GD_ATAPI is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEACPI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDE_PROC_FS is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEDMA_SFF=y
-
-#
-# PCI IDE chipsets support
-#
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_PCIBUS_ORDER=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-CONFIG_BLK_DEV_SC1200=y
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-CONFIG_BLK_DEV_IDEDMA=y
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# Enable only one of the two stacks, unless you know what you are doing
-#
-# CONFIG_FIREWIRE is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_I2O is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-CONFIG_NETDEVICES=y
-# CONFIG_IFB is not set
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-CONFIG_MACVLAN=m
-CONFIG_EQUALIZER=m
-CONFIG_TUN=m
-CONFIG_VETH=m
-# CONFIG_NET_SB1000 is not set
-# CONFIG_ARCNET is not set
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 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_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-CONFIG_NATSEMI=y
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_R6040 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_SC92031 is not set
-# CONFIG_ATL2 is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_TR is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-# CONFIG_IWLWIFI_LEDS is not set
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-CONFIG_PPPOE=m
-CONFIG_PPPOL2TP=m
-CONFIG_SLIP=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLHC=m
-CONFIG_SLIP_SMART=y
-# CONFIG_SLIP_MODE_SLIP6 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
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-# CONFIG_VT is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_NOZOMI is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_DETECT_IRQ=y
-CONFIG_SERIAL_8250_RSA=y
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-# CONFIG_MWAVE is not set
-CONFIG_SCx200_GPIO=m
-CONFIG_PC8736x_GPIO=m
-CONFIG_NSC_GPIO=m
-CONFIG_CS5535_GPIO=m
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-CONFIG_DEVPORT=y
-CONFIG_I2C=m
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# PC SMBus host controller drivers
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_ISCH is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-
-#
-# Graphics adapter I2C/DDC channel drivers
-#
-# CONFIG_I2C_VOODOO3 is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_SCx200_I2C is not set
-CONFIG_SCx200_ACB=m
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_DS1682 is not set
-# CONFIG_AT24 is not set
-CONFIG_SENSORS_EEPROM=m
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_SPI is not set
-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-# CONFIG_GPIOLIB is not set
-# CONFIG_W1 is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_PDA_POWER is not set
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-CONFIG_HWMON=m
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_CORETEMP is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-CONFIG_SENSORS_LM77=m
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_LIS3LV02D is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-CONFIG_THERMAL=y
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-CONFIG_SOFT_WATCHDOG=m
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM1535_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_IBMASR is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I6300ESB_WDT is not set
-# CONFIG_ITCO_WDT is not set
-# CONFIG_IT8712F_WDT is not set
-# CONFIG_IT87_WDT is not set
-# CONFIG_HP_WATCHDOG is not set
-CONFIG_SC1200_WDT=m
-CONFIG_SCx200_WDT=m
-# CONFIG_PC87413_WDT is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SBC8360_WDT is not set
-# CONFIG_SBC7240_WDT is not set
-# CONFIG_CPU5_WDT is not set
-# CONFIG_SMSC37B787_WDT is not set
-# CONFIG_W83627HF_WDT is not set
-# CONFIG_W83697HF_WDT is not set
-# CONFIG_W83697UG_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_W83977F_WDT is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_SBC_EPX_C3_WATCHDOG is not set
-
-#
-# PCI-based Watchdog Cards
-#
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_WDTPCI is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_REGULATOR is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
-
-#
-# Multimedia drivers
-#
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_SOUND is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_UWB is not set
-# CONFIG_MMC is not set
-# CONFIG_MEMSTICK is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_NET48XX is not set
-CONFIG_LEDS_WRAP=m
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_HP_DISK is not set
-# CONFIG_LEDS_PCA955X is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_INFINIBAND is not set
-# CONFIG_EDAC is not set
-CONFIG_RTC_LIB=m
-CONFIG_RTC_CLASS=m
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-CONFIG_RTC_DRV_CMOS=m
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-# CONFIG_DMADEVICES is not set
-# CONFIG_UIO is not set
-# CONFIG_STAGING is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-CONFIG_FIRMWARE_MEMMAP=y
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_DMIID=y
-# CONFIG_ISCSI_IBFT_FIND is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-CONFIG_QUOTA=y
-# CONFIG_QUOTA_NETLINK_INTERFACE is not set
-# CONFIG_PRINT_QUOTA_WARNING is not set
-# CONFIG_QFMT_V1 is not set
-# CONFIG_QFMT_V2 is not set
-CONFIG_QUOTACTL=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_PROC_PAGE_MONITOR=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_CRAMFS=m
-# 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=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL 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 is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=m
-# 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 is not set
-CONFIG_NLS_ISO8859_1=m
-# 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=m
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_FRAME_WARN=1024
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_UNUSED_SYMBOLS=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LATENCYTOP is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-
-#
-# Tracers
-#
-# CONFIG_SYSPROF_TRACER is not set
-# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-# CONFIG_EARLY_PRINTK is not set
-CONFIG_4KSTACKS=y
-CONFIG_DOUBLEFAULT=y
-CONFIG_IO_DELAY_TYPE_0X80=0
-CONFIG_IO_DELAY_TYPE_0XED=1
-CONFIG_IO_DELAY_TYPE_UDELAY=2
-CONFIG_IO_DELAY_TYPE_NONE=3
-CONFIG_IO_DELAY_0X80=y
-# CONFIG_IO_DELAY_0XED is not set
-# CONFIG_IO_DELAY_UDELAY is not set
-# CONFIG_IO_DELAY_NONE is not set
-CONFIG_DEFAULT_IO_DELAY_TYPE=0
-# CONFIG_OPTIMIZE_INLINING is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_FIPS=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD=m
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-CONFIG_CRYPTO_RNG=m
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_MANAGER2=y
-CONFIG_CRYPTO_GF128MUL=m
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_CRYPTD=m
-CONFIG_CRYPTO_AUTHENC=m
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-CONFIG_CRYPTO_CCM=m
-CONFIG_CRYPTO_GCM=m
-CONFIG_CRYPTO_SEQIV=m
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=y
-CONFIG_CRYPTO_CTR=m
-CONFIG_CRYPTO_CTS=m
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_PCBC=m
-CONFIG_CRYPTO_XTS=m
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_XCBC=m
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CRC32C_INTEL is not set
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_RMD128=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_RMD256=m
-CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_WP512=m
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_AES_586=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_FCRYPT=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_SALSA20=m
-CONFIG_CRYPTO_SALSA20_586=m
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=m
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-CONFIG_HAVE_KVM=y
-# CONFIG_VIRTUALIZATION is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_FIRST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CRC_ITU_T=m
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_LZO_COMPRESS=m
-CONFIG_LZO_DECOMPRESS=m
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y