diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/linux/linux-2.6.28 | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (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')
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 Binary files differdeleted file mode 100644 index 7069c54dd4..0000000000 --- a/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2 +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9417b3aab6..0000000000 --- a/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2 +++ /dev/null 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 |