From 6a8e0ff1792d66d9c17b566af3644620a138467a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 6 Jan 2011 09:49:04 +0100 Subject: linux-2.6.37: update openmoko and shr patch, add support for om-gta01 Signed-off-by: Martin Jansa --- recipes/linux/linux-2.6.37/om-gta01/defconfig | 2348 +++++++ recipes/linux/linux-2.6.37/om-gta02/defconfig | 29 +- recipes/linux/linux-2.6.37/openmoko.patch | 8097 +++++++++++++------------ recipes/linux/linux-2.6.37/shr.patch | 1200 +++- recipes/linux/linux-openmoko_2.6.37.bb | 1 + recipes/linux/linux_2.6.37.bb | 5 + 6 files changed, 7625 insertions(+), 4055 deletions(-) create mode 100644 recipes/linux/linux-2.6.37/om-gta01/defconfig diff --git a/recipes/linux/linux-2.6.37/om-gta01/defconfig b/recipes/linux/linux-2.6.37/om-gta01/defconfig new file mode 100644 index 0000000000..22427bb945 --- /dev/null +++ b/recipes/linux/linux-2.6.37/om-gta01/defconfig @@ -0,0 +1,2348 @@ +# +# Automatically generated make config: don't edit +# Linux/arm 2.6.37 Kernel Configuration +# Mon Jan 10 16:05:41 2011 +# +CONFIG_ARM=y +CONFIG_HAVE_PWM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_ARCH_USES_GETTIMEOFFSET=y +CONFIG_HAVE_PROC_CPU=y +CONFIG_NO_IOPORT=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ARCH_HAS_CPUFREQ=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +# CONFIG_HAVE_GENERIC_HARDIRQS is not set +# CONFIG_SPARSE_IRQ is not set + +# +# RCU Subsystem +# +CONFIG_TINY_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +# CONFIG_CGROUPS is not set +CONFIG_NAMESPACES=y +# CONFIG_UTS_NS is not set +# CONFIG_IPC_NS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_NET_NS is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_LZO=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=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_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_COMPAT_BRK=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_CLK=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +# CONFIG_LBDAF is not set +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +CONFIG_FREEZER=y + +# +# System Type +# +CONFIG_MMU=y +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_BCMRING is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CNS3XXX is not set +# CONFIG_ARCH_GEMINI is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_STMP3XXX is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_DOVE is not set +# CONFIG_ARCH_KIRKWOOD is not set +# CONFIG_ARCH_LOKI is not set +# CONFIG_ARCH_LPC32XX is not set +# CONFIG_ARCH_MV78XX0 is not set +# CONFIG_ARCH_ORION5X is not set +# CONFIG_ARCH_MMP is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_W90X900 is not set +# CONFIG_ARCH_NUC93X is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_MSM is not set +# CONFIG_ARCH_SHMOBILE is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_S3C2410=y +# CONFIG_ARCH_S3C64XX is not set +# CONFIG_ARCH_S5P64X0 is not set +# CONFIG_ARCH_S5P6442 is not set +# CONFIG_ARCH_S5PC100 is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_S5PV310 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_TCC_926 is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_U300 is not set +# CONFIG_ARCH_U8500 is not set +# CONFIG_ARCH_NOMADIK is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +# CONFIG_PLAT_SPEAR is not set +CONFIG_PLAT_SAMSUNG=y + +# +# Boot options +# +CONFIG_S3C_BOOT_WATCHDOG=y +CONFIG_S3C_BOOT_ERROR_RESET=y +CONFIG_S3C_BOOT_UART_FORCE_FIFO=y +CONFIG_S3C_LOWLEVEL_UART_PORT=2 +CONFIG_S3C_GPIO_CFG_S3C24XX=y +CONFIG_S3C_GPIO_PULL_UP=y +CONFIG_SAMSUNG_GPIO_EXTRA=64 +CONFIG_S3C_GPIO_SPACE=0 +CONFIG_S3C_ADC=y +CONFIG_S3C_DEV_USB_HOST=y +CONFIG_S3C_DEV_WDT=y +CONFIG_S3C_DEV_NAND=y +CONFIG_S3C_DMA=y + +# +# Power management +# +# CONFIG_SAMSUNG_PM_DEBUG is not set +# CONFIG_SAMSUNG_PM_CHECK is not set +CONFIG_PLAT_S3C24XX=y +CONFIG_CPU_LLSERIAL_S3C2410_ONLY=y +CONFIG_CPU_LLSERIAL_S3C2410=y +CONFIG_S3C2410_CLOCK=y +CONFIG_S3C24XX_PWM=y +CONFIG_S3C24XX_GPIO_EXTRA=0 +CONFIG_S3C2410_DMA=y +# CONFIG_S3C2410_DMA_DEBUG is not set + +# +# S3C2400 Machines +# +CONFIG_CPU_S3C2410=y +CONFIG_CPU_S3C2410_DMA=y +CONFIG_S3C2410_PM=y +CONFIG_S3C2410_GPIO=y + +# +# S3C2410 Machines +# +# CONFIG_ARCH_SMDK2410 is not set +# CONFIG_ARCH_H1940 is not set +# CONFIG_MACH_N30 is not set +# CONFIG_ARCH_BAST is not set +# CONFIG_MACH_OTOM is not set +# CONFIG_MACH_AML_M5900 is not set +# CONFIG_MACH_TCT_HAMMER is not set +# CONFIG_MACH_VR1000 is not set +# CONFIG_MACH_QT2410 is not set +CONFIG_MACH_NEO1973_GTA01=y + +# +# S3C2412 Machines +# +# CONFIG_MACH_JIVE is not set +# CONFIG_MACH_SMDK2413 is not set +# CONFIG_MACH_SMDK2412 is not set +# CONFIG_MACH_VSTMS is not set + +# +# S3C2416 Machines +# +# CONFIG_MACH_SMDK2416 is not set + +# +# S3C2440 and S3C2442 Machines +# +# CONFIG_MACH_ANUBIS is not set +# CONFIG_MACH_NEO1973_GTA02 is not set +# CONFIG_MACH_OSIRIS is not set +# CONFIG_MACH_RX3715 is not set +# CONFIG_ARCH_S3C2440 is not set +# CONFIG_MACH_NEXCODER_2440 is not set +# CONFIG_SMDK2440_CPU2440 is not set +# CONFIG_SMDK2440_CPU2442 is not set +# CONFIG_MACH_AT2440EVB is not set +# CONFIG_MACH_MINI2440 is not set +# CONFIG_MACH_RX1950 is not set + +# +# S3C2443 Machines +# +# CONFIG_MACH_SMDK2443 is not set + +# +# Processor Type +# +CONFIG_CPU_ARM920T=y +CONFIG_CPU_32v4T=y +CONFIG_CPU_ABRT_EV4T=y +CONFIG_CPU_PABRT_LEGACY=y +CONFIG_CPU_CACHE_V4WT=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_ARM_L1_CACHE_SHIFT=5 + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +# CONFIG_HIGHMEM is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=999999 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UACCESS_WITH_MEMCPY is not set +# CONFIG_SECCOMP is not set +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_DEPRECATED_PARAM_STRUCT is not set + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="unused -- bootloader passes ATAG list debug " +# CONFIG_CMDLINE_FORCE is not set +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set +# CONFIG_AUTO_ZRELADDR is not set + +# +# CPU Power Management +# +# CONFIG_CPU_FREQ is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_NVS=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_APM_EMULATION is not set +# CONFIG_PM_RUNTIME is not set +CONFIG_PM_OPS=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=m +CONFIG_NET_KEY=m +CONFIG_NET_KEY_MIGRATE=y +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 is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_IP_MROUTE=y +# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set +# CONFIG_IP_PIMSM_V1 is not set +# CONFIG_IP_PIMSM_V2 is not set +# 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 is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_TCP_CONG_ADVANCED=y +# CONFIG_TCP_CONG_BIC is not set +# CONFIG_TCP_CONG_CUBIC is not set +CONFIG_TCP_CONG_WESTWOOD=y +# CONFIG_TCP_CONG_HTCP is not set +# 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_WESTWOOD=y +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="westwood" +CONFIG_TCP_MD5SIG=y +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_SIT_6RD is not set +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_NETWORK_PHY_TIMESTAMPING 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_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_EVENTS is not set +# CONFIG_NF_CT_PROTO_DCCP is not set +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +# CONFIG_NF_CT_PROTO_UDPLITE is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +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 is not set +CONFIG_NETFILTER_XTABLES=m + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_CONNMARK=m + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +# CONFIG_NETFILTER_XT_TARGET_CT is not set +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set +# CONFIG_NETFILTER_XT_TARGET_LED is not set +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 is not set +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +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_HL=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_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +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 is not set +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=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 is not set +# 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 is not set +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_GRE=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 is not set +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 is not set + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=m +CONFIG_NF_CONNTRACK_IPV6=m +# CONFIG_IP6_NF_QUEUE is not set +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_HL=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_RAW is not set +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 is not set +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 is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +CONFIG_STP=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# 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_PHONET is not set +# CONFIG_IEEE802154 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 is not set +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_DRR is not set + +# +# 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 is not set +# CONFIG_NET_EMATCH is not set +# CONFIG_NET_CLS_ACT is not set +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=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=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 is not set +# 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_BT_MRVL is not set +# CONFIG_BT_ATH3K is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +# + +# +# Some wireless drivers require a rate control algorithm +# +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_FIRMWARE_IN_KERNEL is not set +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set +CONFIG_MTD_CONCAT=y +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_SM_FTL 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 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 is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=y +CONFIG_MTD_ABSENT=y + +# +# 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_ARM_INTEGRATOR is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND_ECC=y +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_SM_COMMON 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_S3C2410=y +# CONFIG_MTD_NAND_S3C2410_DEBUG is not set +CONFIG_MTD_NAND_S3C2410_HWECC=y +# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set +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=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_UB=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MG_DISK is not set +# CONFIG_BLK_DEV_RBD is not set +CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1780 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_TI_DAC7512 is not set +# CONFIG_BMP085 is not set +CONFIG_OPENMOKO_RESUME_REASON=y +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IWMC3200TOP is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=m +# 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 is not set +# CONFIG_CHR_DEV_OSST is not set +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 +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_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_ISCSI_BOOT_SYSFS is not set +# CONFIG_LIBFC is not set +# CONFIG_LIBFCOE is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +CONFIG_MII=m +# CONFIG_PHYLIB is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +CONFIG_WLAN=y +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +# CONFIG_USB_NET_AX8817X is not set +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_CDC_EEM is not set +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SMSC75XX is not set +# 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_USB_NET_CX82310_ETH is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_USB_SIERRA_NET is not set +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +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 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 +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_GPIO=y +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +CONFIG_KEYBOARD_STOWAWAY=m +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +CONFIG_TOUCHSCREEN_S3C2410=y +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_QT602240 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +CONFIG_INPUT_UINPUT=m +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_PWM_BEEPER is not set +CONFIG_INPUT_PCF50606_PMU=y +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_ADXL34X is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_LIBPS2 is not set +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT 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=y +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SAMSUNG=y +CONFIG_SERIAL_SAMSUNG_UARTS=3 +CONFIG_SERIAL_SAMSUNG_CONSOLE=y +CONFIG_SERIAL_S3C2410=y +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX3107 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_RAMOOPS is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_MUX is not set +# CONFIG_I2C_HELPER_AUTO is not set +# CONFIG_I2C_SMBUS is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_DESIGNWARE is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +CONFIG_HAVE_S3C2410_I2C=y +CONFIG_I2C_S3C2410=y +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=y +CONFIG_SPI_GPIO=y +CONFIG_SPI_S3C24XX=y +# CONFIG_SPI_S3C24XX_FIQ is not set +CONFIG_SPI_S3C24XX_GPIO=y +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set + +# +# PPS support +# +# CONFIG_PPS is not set +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y + +# +# Memory mapped GPIO expanders: +# +# CONFIG_GPIO_BASIC_MMIO is not set +# CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_VX855 is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_SX150X is not set +# CONFIG_GPIO_ADP5588 is not set + +# +# PCI GPIO expanders: +# + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ20Z75 is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_S3C_ADC is not set +CONFIG_CHARGER_PCF50606=y +CONFIG_BATTERY_PLATFORM=y +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=y +CONFIG_S3C2410_WATCHDOG=y +CONFIG_PCF50606_WATCHDOG=y +# CONFIG_MAX63XX_WATCHDOG is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +CONFIG_MFD_SUPPORT=y +# CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_HTC_EGPIO is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_TC35892 is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_MFD_T7L66XB is not set +# CONFIG_MFD_TC6387XB is not set +# CONFIG_MFD_TC6393XB is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_MC13XXX is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_MFD_GLAMO is not set +# CONFIG_MFD_TPS6586X is not set +CONFIG_MFD_PCF50606=y +CONFIG_PCF50606_ADC=y +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_DUMMY is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_BQ24022 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_AD5398 is not set +CONFIG_REGULATOR_PCF50606=y +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +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_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_S3C2410=y +# CONFIG_FB_S3C2410_DEBUG is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +# CONFIG_LCD_L4F00242T03 is not set +# CONFIG_LCD_LMS283GF05 is not set +# CONFIG_LCD_LTV350QV is not set +# CONFIG_LCD_TDO24M is not set +# CONFIG_LCD_VGG2432A4 is not set +# CONFIG_LCD_PLATFORM is not set +# CONFIG_LCD_S6E63M0 is not set +CONFIG_LCD_JBT6K74=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_BACKLIGHT_PWM=y +# CONFIG_BACKLIGHT_ADP8860 is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_LOGO is not set +CONFIG_SOUND=m +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_JACK=y +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +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_DYNAMIC_MINORS is not set +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_DRIVERS is not set +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +# CONFIG_SND_USB is not set +CONFIG_SND_SOC=m +CONFIG_SND_S3C24XX_SOC=m +CONFIG_SND_S3C24XX_SOC_I2S=m +CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m +# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set +# CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X is not set +# CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23 is not set +# CONFIG_SND_S3C24XX_SOC_SIMTEC_HERMES is not set +CONFIG_SND_SOC_I2C_AND_SPI=m +# CONFIG_SND_SOC_ALL_CODECS is not set +CONFIG_SND_SOC_WM8753=m +CONFIG_SND_SOC_LM4857=m +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_HID_PID is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set + +# +# Special HID drivers +# +# CONFIG_HID_3M_PCT is not set +CONFIG_HID_A4TECH=m +# CONFIG_HID_ACRUX_FF is not set +CONFIG_HID_APPLE=m +CONFIG_HID_BELKIN=m +# CONFIG_HID_CANDO is not set +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +# CONFIG_HID_PRODIKEYS is not set +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +# CONFIG_DRAGONRISE_FF is not set +# CONFIG_HID_EGALAX is not set +# CONFIG_HID_ELECOM is not set +CONFIG_HID_EZKEY=m +CONFIG_HID_KYE=m +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +CONFIG_HID_GYRATION=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_LOGITECH=m +# CONFIG_LOGITECH_FF is not set +# CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set +# CONFIG_LOGIWII_FF is not set +# CONFIG_HID_MAGICMOUSE is not set +CONFIG_HID_MICROSOFT=m +# CONFIG_HID_MOSART is not set +CONFIG_HID_MONTEREY=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +# CONFIG_PANTHERLORD_FF is not set +CONFIG_HID_PETALYNX=m +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_ROCCAT_PYRA is not set +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m +# CONFIG_HID_STANTUM is not set +CONFIG_HID_SUNPLUS=m +CONFIG_HID_GREENASIA=m +# CONFIG_GREENASIA_FF is not set +CONFIG_HID_SMARTJOYPLUS=m +# CONFIG_SMARTJOYPLUS_FF is not set +CONFIG_HID_TOPSEED=m +CONFIG_HID_THRUSTMASTER=m +# CONFIG_THRUSTMASTER_FF is not set +CONFIG_HID_WACOM=m +# CONFIG_HID_WACOM_POWER_SUPPLY is not set +CONFIG_HID_ZEROPLUS=m +# CONFIG_ZEROPLUS_FF is not set +# CONFIG_HID_ZYDACRON 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=m +# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_MON is not set +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HWA_HCD is not set +# CONFIG_USB_MUSB_HDRC is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +# CONFIG_USB_WDM is not set +CONFIG_USB_TMC=m + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +# CONFIG_USB_STORAGE_ISD200 is not set +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_ALAUDA=m +# CONFIG_USB_STORAGE_ONETOUCH is not set +CONFIG_USB_STORAGE_KARMA=m +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_UAS is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +CONFIG_USB_EZUSB=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP210X is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +# CONFIG_USB_SERIAL_IUU is not set +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +# CONFIG_USB_SERIAL_MOTOROLA is not set +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +CONFIG_USB_SERIAL_SAFE_PADDED=y +# CONFIG_USB_SERIAL_SAMBA is not set +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +# CONFIG_USB_SERIAL_SYMBOL is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_ZIO is not set +# CONFIG_USB_SERIAL_SSU100 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_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_VBUS_DRAW=500 +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_R8A66597 is not set +CONFIG_USB_GADGET_S3C2410=y +CONFIG_USB_S3C2410=m +# CONFIG_USB_S3C2410_DEBUG is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_ETH_EEM is not set +CONFIG_USB_GADGETFS=m +# CONFIG_USB_FUNCTIONFS is not set +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +CONFIG_USB_CDC_COMPOSITE=m +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set + +# +# OTG and related infrastructure +# +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ULPI is not set +# CONFIG_NOP_USB_XCEIV is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=8 +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_SPI is not set +CONFIG_MMC_S3C=y +# CONFIG_MMC_S3C_HW_SDIO_IRQ is not set +CONFIG_MMC_S3C_PIO=y +# CONFIG_MMC_S3C_DMA is not set +# CONFIG_MMC_S3C_PIODMA is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_S3C24XX=y +# CONFIG_LEDS_PCA9532 is not set +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_GPIO_PLATFORM=y +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_DAC124S085 is not set +CONFIG_LEDS_PWM=y +CONFIG_LEDS_REGULATOR=y +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +CONFIG_LEDS_TRIGGERS=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_GPIO=y +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set + +# +# iptables trigger is under Netfilter config (LED target) +# +# CONFIG_ACCESSIBILITY is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL 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_DS3232 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_ISL12022 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_DS3234 is not set +# CONFIG_RTC_DRV_PCF2123 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set +CONFIG_RTC_DRV_PCF50606=y + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_S3C=y +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +# CONFIG_STAGING is not set +# CONFIG_AR6000_WLAN is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4_FS is not set +CONFIG_JBD=y +CONFIG_REISERFS_FS=y +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_REISERFS_FS_XATTR is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=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 is not set +CONFIG_BTRFS_FS=m +# CONFIG_BTRFS_FS_POSIX_ACL is not set +# CONFIG_NILFS2_FS is not set +CONFIG_EXPORTFS=m +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +# CONFIG_DNOTIFY is not set +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m +CONFIG_CUSE=m +CONFIG_GENERIC_ACL=y + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +# CONFIG_MSDOS_FS is not set +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_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_CONFIGFS_FS=m +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_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 is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# 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=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_LOGFS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_XATTR is not set +# CONFIG_SQUASHFS_LZO is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# 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=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_NEW_IDMAPPER is not set +CONFIG_NFSD=m +CONFIG_NFSD_DEPRECATED=y +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_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_CEPH_FS is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_UPCALL is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DFS_UPCALL 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=y +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=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=m +# CONFIG_NLS_CODEPAGE_869 is not set +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +# 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=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +# 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=m +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_STRIP_ASM_SYMS=y +# 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_HARDLOCKUP_DETECTOR is not set +CONFIG_BKL=y +# CONFIG_SPARSE_RCU_POINTER is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_ARM_UNWIND is not set +# CONFIG_DEBUG_USER is not set +# CONFIG_OC_ETM is not set +CONFIG_DEBUG_S3C_UART=2 + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_WORKQUEUE=y +# 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=m +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_GHASH is not set +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +# 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=m +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +# +# CONFIG_CRYPTO_AES is not set +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=m +CONFIG_CRYPTO_FCRYPT=m +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=y +CONFIG_CRYPTO_ZLIB=y +CONFIG_CRYPTO_LZO=y + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_HW is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_HAS_IOMEM=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y diff --git a/recipes/linux/linux-2.6.37/om-gta02/defconfig b/recipes/linux/linux-2.6.37/om-gta02/defconfig index 45756640df..89f7081e40 100644 --- a/recipes/linux/linux-2.6.37/om-gta02/defconfig +++ b/recipes/linux/linux-2.6.37/om-gta02/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux/arm 2.6.37 Kernel Configuration -# Thu Jan 6 10:03:07 2011 +# Mon Jan 10 16:08:20 2011 # CONFIG_ARM=y CONFIG_HAVE_PWM=y @@ -292,6 +292,7 @@ CONFIG_S3C2410_GPIO=y # CONFIG_MACH_TCT_HAMMER is not set # CONFIG_MACH_VR1000 is not set # CONFIG_MACH_QT2410 is not set +# CONFIG_MACH_NEO1973_GTA01 is not set # # S3C2412 Machines @@ -368,7 +369,7 @@ CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set -CONFIG_HZ=200 +CONFIG_HZ=100 CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set @@ -979,6 +980,7 @@ CONFIG_MISC_DEVICES=y # CONFIG_DS1682 is not set # CONFIG_TI_DAC7512 is not set # CONFIG_BMP085 is not set +CONFIG_OPENMOKO_RESUME_REASON=y # CONFIG_C2PORT is not set # @@ -1434,6 +1436,7 @@ CONFIG_PCF50633_ADC=y # CONFIG_EZX_PCAP is not set CONFIG_MFD_GLAMO=y # CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_PCF50606 is not set CONFIG_REGULATOR=y # CONFIG_REGULATOR_DEBUG is not set # CONFIG_REGULATOR_DUMMY is not set @@ -1457,7 +1460,7 @@ CONFIG_REGULATOR_PCF50633=y # # Graphics support # -CONFIG_DRM=y +# CONFIG_DRM is not set # CONFIG_VGASTATE is not set CONFIG_VIDEO_OUTPUT_CONTROL=y CONFIG_FB=y @@ -1856,22 +1859,22 @@ CONFIG_MMC_GLAMO=y # CONFIG_MMC_USHC is not set # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y -# CONFIG_LEDS_CLASS is not set +CONFIG_LEDS_CLASS=y # # LED drivers # -CONFIG_LEDS_S3C24XX=m +CONFIG_LEDS_S3C24XX=y # CONFIG_LEDS_PCA9532 is not set -CONFIG_LEDS_GPIO=m +CONFIG_LEDS_GPIO=y CONFIG_LEDS_GPIO_PLATFORM=y # CONFIG_LEDS_LP3944 is not set # CONFIG_LEDS_LP5521 is not set # CONFIG_LEDS_LP5523 is not set # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_DAC124S085 is not set -CONFIG_LEDS_PWM=m -CONFIG_LEDS_REGULATOR=m +CONFIG_LEDS_PWM=y +CONFIG_LEDS_REGULATOR=y # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set CONFIG_LEDS_TRIGGERS=y @@ -1879,11 +1882,11 @@ CONFIG_LEDS_TRIGGERS=y # # LED Triggers # -CONFIG_LEDS_TRIGGER_TIMER=m -CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_LEDS_TRIGGER_BACKLIGHT=m -CONFIG_LEDS_TRIGGER_GPIO=m -CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_GPIO=y +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set # # iptables trigger is under Netfilter config (LED target) diff --git a/recipes/linux/linux-2.6.37/openmoko.patch b/recipes/linux/linux-2.6.37/openmoko.patch index 7635f688de..c0d0ecbbea 100644 --- a/recipes/linux/linux-2.6.37/openmoko.patch +++ b/recipes/linux/linux-2.6.37/openmoko.patch @@ -1,3 +1,7 @@ +All patches from openmoko repository + +http://git.openmoko.org/?p=kernel.git;a=commit;h=c07bd69719b805852e24783aec08db4edcdb767d + diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 7193884..6534c00 100644 --- a/arch/arm/boot/compressed/head.S @@ -11,3899 +15,6 @@ index 7193884..6534c00 100644 .macro loadsp, rb, tmp mov \rb, #0x50000000 add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT -diff --git a/arch/arm/configs/gta02_defconfig b/arch/arm/configs/gta02_defconfig -new file mode 100644 -index 0000000..0e4864d ---- /dev/null -+++ b/arch/arm/configs/gta02_defconfig -@@ -0,0 +1,1938 @@ -+# -+# Automatically generated make config: don't edit -+# Linux/arm 2.6.37 Kernel Configuration -+# Wed Jan 5 19:56:16 2011 -+# -+CONFIG_ARM=y -+CONFIG_HAVE_PWM=y -+CONFIG_SYS_SUPPORTS_APM_EMULATION=y -+CONFIG_GENERIC_GPIO=y -+CONFIG_ARCH_USES_GETTIMEOFFSET=y -+CONFIG_HAVE_PROC_CPU=y -+CONFIG_NO_IOPORT=y -+CONFIG_GENERIC_HARDIRQS=y -+CONFIG_STACKTRACE_SUPPORT=y -+CONFIG_HAVE_LATENCYTOP_SUPPORT=y -+CONFIG_LOCKDEP_SUPPORT=y -+CONFIG_TRACE_IRQFLAGS_SUPPORT=y -+CONFIG_HARDIRQS_SW_RESEND=y -+CONFIG_GENERIC_IRQ_PROBE=y -+CONFIG_RWSEM_GENERIC_SPINLOCK=y -+CONFIG_ARCH_HAS_CPUFREQ=y -+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y -+CONFIG_GENERIC_HWEIGHT=y -+CONFIG_GENERIC_CALIBRATE_DELAY=y -+CONFIG_NEED_DMA_MAP_STATE=y -+CONFIG_FIQ=y -+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -+CONFIG_VECTORS_BASE=0xffff0000 -+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -+CONFIG_CONSTRUCTORS=y -+CONFIG_HAVE_IRQ_WORK=y -+ -+# -+# General setup -+# -+CONFIG_EXPERIMENTAL=y -+CONFIG_BROKEN_ON_SMP=y -+CONFIG_INIT_ENV_ARG_LIMIT=32 -+CONFIG_CROSS_COMPILE="" -+CONFIG_LOCALVERSION="" -+# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_HAVE_KERNEL_GZIP=y -+CONFIG_HAVE_KERNEL_LZMA=y -+CONFIG_HAVE_KERNEL_LZO=y -+CONFIG_KERNEL_GZIP=y -+# CONFIG_KERNEL_LZMA is not set -+# CONFIG_KERNEL_LZO is not set -+CONFIG_SWAP=y -+CONFIG_SYSVIPC=y -+CONFIG_SYSVIPC_SYSCTL=y -+# CONFIG_POSIX_MQUEUE is not set -+# CONFIG_BSD_PROCESS_ACCT is not set -+# CONFIG_TASKSTATS is not set -+# CONFIG_AUDIT is not set -+# CONFIG_HAVE_GENERIC_HARDIRQS is not set -+# CONFIG_SPARSE_IRQ is not set -+ -+# -+# RCU Subsystem -+# -+CONFIG_TINY_RCU=y -+# CONFIG_PREEMPT_RCU is not set -+# CONFIG_TREE_RCU_TRACE is not set -+# CONFIG_IKCONFIG is not set -+CONFIG_LOG_BUF_SHIFT=18 -+# CONFIG_CGROUPS is not set -+CONFIG_NAMESPACES=y -+# CONFIG_UTS_NS is not set -+# CONFIG_IPC_NS is not set -+# CONFIG_USER_NS is not set -+# CONFIG_PID_NS is not set -+# CONFIG_NET_NS is not set -+CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y -+# CONFIG_RELAY is not set -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="" -+CONFIG_RD_GZIP=y -+CONFIG_RD_BZIP2=y -+CONFIG_RD_LZMA=y -+CONFIG_RD_LZO=y -+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -+CONFIG_SYSCTL=y -+CONFIG_ANON_INODES=y -+# CONFIG_EMBEDDED is not set -+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_BASE_FULL=y -+CONFIG_FUTEX=y -+CONFIG_EPOLL=y -+CONFIG_SIGNALFD=y -+CONFIG_TIMERFD=y -+CONFIG_EVENTFD=y -+CONFIG_SHMEM=y -+CONFIG_AIO=y -+CONFIG_HAVE_PERF_EVENTS=y -+CONFIG_PERF_USE_VMALLOC=y -+ -+# -+# Kernel Performance Events And Counters -+# -+# CONFIG_PERF_EVENTS is not set -+# CONFIG_PERF_COUNTERS is not set -+CONFIG_VM_EVENT_COUNTERS=y -+CONFIG_COMPAT_BRK=y -+CONFIG_SLAB=y -+# CONFIG_SLUB is not set -+# CONFIG_PROFILING is not set -+CONFIG_HAVE_OPROFILE=y -+# CONFIG_KPROBES is not set -+CONFIG_HAVE_KPROBES=y -+CONFIG_HAVE_KRETPROBES=y -+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -+CONFIG_HAVE_CLK=y -+ -+# -+# GCOV-based kernel profiling -+# -+# CONFIG_GCOV_KERNEL is not set -+CONFIG_HAVE_GENERIC_DMA_COHERENT=y -+CONFIG_SLABINFO=y -+CONFIG_RT_MUTEXES=y -+CONFIG_BASE_SMALL=0 -+CONFIG_MODULES=y -+# CONFIG_MODULE_FORCE_LOAD is not set -+CONFIG_MODULE_UNLOAD=y -+CONFIG_MODULE_FORCE_UNLOAD=y -+# CONFIG_MODVERSIONS is not set -+# CONFIG_MODULE_SRCVERSION_ALL is not set -+CONFIG_BLOCK=y -+CONFIG_LBDAF=y -+# CONFIG_BLK_DEV_BSG is not set -+# CONFIG_BLK_DEV_INTEGRITY is not set -+ -+# -+# IO Schedulers -+# -+CONFIG_IOSCHED_NOOP=y -+CONFIG_IOSCHED_DEADLINE=y -+# CONFIG_IOSCHED_CFQ is not set -+CONFIG_DEFAULT_DEADLINE=y -+# CONFIG_DEFAULT_NOOP is not set -+CONFIG_DEFAULT_IOSCHED="deadline" -+# CONFIG_INLINE_SPIN_TRYLOCK is not set -+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK is not set -+# CONFIG_INLINE_SPIN_LOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -+CONFIG_INLINE_SPIN_UNLOCK=y -+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set -+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y -+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_READ_TRYLOCK is not set -+# CONFIG_INLINE_READ_LOCK is not set -+# CONFIG_INLINE_READ_LOCK_BH is not set -+# CONFIG_INLINE_READ_LOCK_IRQ is not set -+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -+CONFIG_INLINE_READ_UNLOCK=y -+# CONFIG_INLINE_READ_UNLOCK_BH is not set -+CONFIG_INLINE_READ_UNLOCK_IRQ=y -+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_WRITE_TRYLOCK is not set -+# CONFIG_INLINE_WRITE_LOCK is not set -+# CONFIG_INLINE_WRITE_LOCK_BH is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -+CONFIG_INLINE_WRITE_UNLOCK=y -+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set -+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set -+# CONFIG_MUTEX_SPIN_ON_OWNER is not set -+CONFIG_FREEZER=y -+ -+# -+# System Type -+# -+CONFIG_MMU=y -+# CONFIG_ARCH_AAEC2000 is not set -+# CONFIG_ARCH_INTEGRATOR is not set -+# CONFIG_ARCH_REALVIEW is not set -+# CONFIG_ARCH_VERSATILE is not set -+# CONFIG_ARCH_VEXPRESS is not set -+# CONFIG_ARCH_AT91 is not set -+# CONFIG_ARCH_BCMRING is not set -+# CONFIG_ARCH_CLPS711X is not set -+# CONFIG_ARCH_CNS3XXX is not set -+# CONFIG_ARCH_GEMINI is not set -+# CONFIG_ARCH_EBSA110 is not set -+# CONFIG_ARCH_EP93XX is not set -+# CONFIG_ARCH_FOOTBRIDGE is not set -+# CONFIG_ARCH_MXC is not set -+# CONFIG_ARCH_STMP3XXX is not set -+# CONFIG_ARCH_NETX is not set -+# CONFIG_ARCH_H720X is not set -+# CONFIG_ARCH_IOP13XX is not set -+# CONFIG_ARCH_IOP32X is not set -+# CONFIG_ARCH_IOP33X is not set -+# CONFIG_ARCH_IXP23XX is not set -+# CONFIG_ARCH_IXP2000 is not set -+# CONFIG_ARCH_IXP4XX is not set -+# CONFIG_ARCH_DOVE is not set -+# CONFIG_ARCH_KIRKWOOD is not set -+# CONFIG_ARCH_LOKI is not set -+# CONFIG_ARCH_LPC32XX is not set -+# CONFIG_ARCH_MV78XX0 is not set -+# CONFIG_ARCH_ORION5X is not set -+# CONFIG_ARCH_MMP is not set -+# CONFIG_ARCH_KS8695 is not set -+# CONFIG_ARCH_NS9XXX is not set -+# CONFIG_ARCH_W90X900 is not set -+# CONFIG_ARCH_NUC93X is not set -+# CONFIG_ARCH_TEGRA is not set -+# CONFIG_ARCH_PNX4008 is not set -+# CONFIG_ARCH_PXA is not set -+# CONFIG_ARCH_MSM is not set -+# CONFIG_ARCH_SHMOBILE is not set -+# CONFIG_ARCH_RPC is not set -+# CONFIG_ARCH_SA1100 is not set -+CONFIG_ARCH_S3C2410=y -+# CONFIG_ARCH_S3C64XX is not set -+# CONFIG_ARCH_S5P64X0 is not set -+# CONFIG_ARCH_S5P6442 is not set -+# CONFIG_ARCH_S5PC100 is not set -+# CONFIG_ARCH_S5PV210 is not set -+# CONFIG_ARCH_S5PV310 is not set -+# CONFIG_ARCH_SHARK is not set -+# CONFIG_ARCH_TCC_926 is not set -+# CONFIG_ARCH_LH7A40X is not set -+# CONFIG_ARCH_U300 is not set -+# CONFIG_ARCH_U8500 is not set -+# CONFIG_ARCH_NOMADIK is not set -+# CONFIG_ARCH_DAVINCI is not set -+# CONFIG_ARCH_OMAP is not set -+# CONFIG_PLAT_SPEAR is not set -+CONFIG_PLAT_SAMSUNG=y -+ -+# -+# Boot options -+# -+# CONFIG_S3C_BOOT_WATCHDOG is not set -+# CONFIG_S3C_BOOT_ERROR_RESET is not set -+CONFIG_S3C_BOOT_UART_FORCE_FIFO=y -+CONFIG_S3C_LOWLEVEL_UART_PORT=-1 -+CONFIG_S3C_GPIO_CFG_S3C24XX=y -+CONFIG_S3C_GPIO_PULL_DOWN=y -+CONFIG_SAMSUNG_GPIO_EXTRA=64 -+CONFIG_S3C_GPIO_SPACE=0 -+CONFIG_S3C_ADC=y -+CONFIG_S3C_DEV_USB_HOST=y -+CONFIG_S3C_DEV_WDT=y -+CONFIG_S3C_DEV_NAND=y -+CONFIG_S3C_DMA=y -+ -+# -+# Power management -+# -+# CONFIG_SAMSUNG_PM_DEBUG is not set -+# CONFIG_SAMSUNG_PM_CHECK is not set -+CONFIG_PLAT_S3C24XX=y -+CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y -+CONFIG_CPU_LLSERIAL_S3C2440=y -+CONFIG_S3C2410_CLOCK=y -+CONFIG_S3C24XX_PWM=y -+CONFIG_S3C24XX_GPIO_EXTRA=64 -+CONFIG_S3C24XX_GPIO_EXTRA64=y -+CONFIG_S3C2410_DMA=y -+# CONFIG_S3C2410_DMA_DEBUG is not set -+ -+# -+# S3C2400 Machines -+# -+CONFIG_CPU_S3C2410_DMA=y -+CONFIG_S3C2410_PM=y -+CONFIG_S3C2410_GPIO=y -+ -+# -+# S3C2410 Machines -+# -+# CONFIG_ARCH_SMDK2410 is not set -+# CONFIG_ARCH_H1940 is not set -+# CONFIG_MACH_N30 is not set -+# CONFIG_ARCH_BAST is not set -+# CONFIG_MACH_OTOM is not set -+# CONFIG_MACH_AML_M5900 is not set -+# CONFIG_MACH_TCT_HAMMER is not set -+# CONFIG_MACH_VR1000 is not set -+# CONFIG_MACH_QT2410 is not set -+ -+# -+# S3C2412 Machines -+# -+# CONFIG_MACH_JIVE is not set -+# CONFIG_MACH_SMDK2413 is not set -+# CONFIG_MACH_SMDK2412 is not set -+# CONFIG_MACH_VSTMS is not set -+ -+# -+# S3C2416 Machines -+# -+# CONFIG_MACH_SMDK2416 is not set -+CONFIG_CPU_S3C2442=y -+CONFIG_CPU_S3C244X=y -+ -+# -+# S3C2440 and S3C2442 Machines -+# -+# CONFIG_MACH_ANUBIS is not set -+CONFIG_MACH_NEO1973_GTA02=y -+# CONFIG_MACH_OSIRIS is not set -+# CONFIG_MACH_RX3715 is not set -+# CONFIG_ARCH_S3C2440 is not set -+# CONFIG_MACH_NEXCODER_2440 is not set -+# CONFIG_SMDK2440_CPU2440 is not set -+# CONFIG_SMDK2440_CPU2442 is not set -+# CONFIG_MACH_AT2440EVB is not set -+# CONFIG_MACH_MINI2440 is not set -+# CONFIG_MACH_RX1950 is not set -+ -+# -+# S3C2443 Machines -+# -+# CONFIG_MACH_SMDK2443 is not set -+ -+# -+# Processor Type -+# -+CONFIG_CPU_ARM920T=y -+CONFIG_CPU_32v4T=y -+CONFIG_CPU_ABRT_EV4T=y -+CONFIG_CPU_PABRT_LEGACY=y -+CONFIG_CPU_CACHE_V4WT=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_ARM_L1_CACHE_SHIFT=5 -+ -+# -+# Bus support -+# -+# CONFIG_PCI_SYSCALL is not set -+# CONFIG_ARCH_SUPPORTS_MSI is not set -+# CONFIG_PCCARD is not set -+ -+# -+# Kernel Features -+# -+CONFIG_VMSPLIT_3G=y -+# CONFIG_VMSPLIT_2G is not set -+# CONFIG_VMSPLIT_1G is not set -+CONFIG_PAGE_OFFSET=0xC0000000 -+CONFIG_PREEMPT_NONE=y -+# CONFIG_PREEMPT_VOLUNTARY is not set -+# CONFIG_PREEMPT is not set -+CONFIG_HZ=200 -+CONFIG_AEABI=y -+# CONFIG_OABI_COMPAT is not set -+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set -+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set -+# CONFIG_HIGHMEM is not set -+CONFIG_SELECT_MEMORY_MODEL=y -+CONFIG_FLATMEM_MANUAL=y -+CONFIG_FLATMEM=y -+CONFIG_FLAT_NODE_MEM_MAP=y -+CONFIG_HAVE_MEMBLOCK=y -+CONFIG_PAGEFLAGS_EXTENDED=y -+CONFIG_SPLIT_PTLOCK_CPUS=999999 -+# CONFIG_PHYS_ADDR_T_64BIT is not set -+CONFIG_ZONE_DMA_FLAG=0 -+CONFIG_VIRT_TO_BUS=y -+# CONFIG_KSM is not set -+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -+CONFIG_NEED_PER_CPU_KM=y -+CONFIG_FORCE_MAX_ZONEORDER=11 -+CONFIG_ALIGNMENT_TRAP=y -+# CONFIG_UACCESS_WITH_MEMCPY is not set -+# CONFIG_SECCOMP is not set -+# CONFIG_CC_STACKPROTECTOR is not set -+# CONFIG_DEPRECATED_PARAM_STRUCT is not set -+ -+# -+# Boot options -+# -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CMDLINE="unused -- bootloader passes ATAG list" -+# CONFIG_CMDLINE_FORCE is not set -+# CONFIG_XIP_KERNEL is not set -+# CONFIG_KEXEC is not set -+# CONFIG_AUTO_ZRELADDR is not set -+ -+# -+# CPU Power Management -+# -+# CONFIG_CPU_FREQ is not set -+CONFIG_CPU_IDLE=y -+CONFIG_CPU_IDLE_GOV_LADDER=y -+ -+# -+# Floating point emulation -+# -+ -+# -+# At least one emulation must be selected -+# -+ -+# -+# Userspace binary formats -+# -+CONFIG_BINFMT_ELF=y -+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set -+CONFIG_HAVE_AOUT=y -+# CONFIG_BINFMT_AOUT is not set -+# CONFIG_BINFMT_MISC is not set -+ -+# -+# Power management options -+# -+CONFIG_PM=y -+# CONFIG_PM_DEBUG is not set -+CONFIG_PM_SLEEP=y -+CONFIG_SUSPEND_NVS=y -+CONFIG_SUSPEND=y -+CONFIG_SUSPEND_FREEZER=y -+# CONFIG_APM_EMULATION is not set -+# CONFIG_PM_RUNTIME is not set -+CONFIG_PM_OPS=y -+CONFIG_ARCH_SUSPEND_POSSIBLE=y -+CONFIG_NET=y -+ -+# -+# Networking options -+# -+CONFIG_PACKET=y -+CONFIG_UNIX=y -+# CONFIG_NET_KEY is not set -+CONFIG_INET=y -+CONFIG_IP_MULTICAST=y -+CONFIG_IP_ADVANCED_ROUTER=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 is not set -+# CONFIG_IP_ROUTE_VERBOSE is not set -+CONFIG_IP_PNP=y -+# CONFIG_IP_PNP_DHCP is not set -+# CONFIG_IP_PNP_BOOTP is not set -+# CONFIG_IP_PNP_RARP is not set -+# CONFIG_NET_IPIP is not set -+# CONFIG_NET_IPGRE_DEMUX is not set -+CONFIG_IP_MROUTE=y -+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y -+# CONFIG_IP_PIMSM_V1 is not set -+# CONFIG_IP_PIMSM_V2 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 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=y -+# CONFIG_TCP_CONG_BIC is not set -+# CONFIG_TCP_CONG_CUBIC is not set -+CONFIG_TCP_CONG_WESTWOOD=y -+# CONFIG_TCP_CONG_HTCP is not set -+# 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_WESTWOOD=y -+# CONFIG_DEFAULT_RENO is not set -+CONFIG_DEFAULT_TCP_CONG="westwood" -+CONFIG_TCP_MD5SIG=y -+# CONFIG_IPV6 is not set -+# CONFIG_NETWORK_SECMARK is not set -+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -+# CONFIG_NETFILTER is not set -+# CONFIG_IP_DCCP is not set -+# CONFIG_IP_SCTP is not set -+# CONFIG_RDS is not set -+# CONFIG_TIPC is not set -+# CONFIG_ATM is not set -+# CONFIG_L2TP is not set -+CONFIG_STP=y -+CONFIG_BRIDGE=y -+# CONFIG_BRIDGE_IGMP_SNOOPING is not set -+# CONFIG_NET_DSA is not set -+# CONFIG_VLAN_8021Q is not set -+# CONFIG_DECNET is not set -+CONFIG_LLC=y -+# CONFIG_LLC2 is not set -+# CONFIG_IPX is not set -+# CONFIG_ATALK is not set -+# CONFIG_X25 is not set -+# CONFIG_LAPB is not set -+# CONFIG_ECONET is not set -+# CONFIG_WAN_ROUTER is not set -+# CONFIG_PHONET is not set -+# CONFIG_IEEE802154 is not set -+CONFIG_NET_SCHED=y -+ -+# -+# Queueing/Scheduling -+# -+# CONFIG_NET_SCH_CBQ is not set -+# CONFIG_NET_SCH_HTB is not set -+# CONFIG_NET_SCH_HFSC is not set -+# CONFIG_NET_SCH_PRIO is not set -+# CONFIG_NET_SCH_MULTIQ is not set -+# CONFIG_NET_SCH_RED is not set -+# CONFIG_NET_SCH_SFQ is not set -+# CONFIG_NET_SCH_TEQL is not set -+# CONFIG_NET_SCH_TBF is not set -+# CONFIG_NET_SCH_GRED is not set -+# CONFIG_NET_SCH_DSMARK is not set -+# CONFIG_NET_SCH_NETEM is not set -+# CONFIG_NET_SCH_DRR is not set -+ -+# -+# Classification -+# -+CONFIG_NET_CLS=y -+CONFIG_NET_CLS_BASIC=y -+# CONFIG_NET_CLS_TCINDEX is not set -+# CONFIG_NET_CLS_ROUTE4 is not set -+# CONFIG_NET_CLS_FW is not set -+# CONFIG_NET_CLS_U32 is not set -+# CONFIG_NET_CLS_RSVP is not set -+# CONFIG_NET_CLS_RSVP6 is not set -+# CONFIG_NET_CLS_FLOW is not set -+# CONFIG_NET_EMATCH is not set -+# CONFIG_NET_CLS_ACT is not set -+CONFIG_NET_SCH_FIFO=y -+# 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=y -+CONFIG_BT_L2CAP=y -+CONFIG_BT_SCO=y -+CONFIG_BT_RFCOMM=y -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=y -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=y -+ -+# -+# Bluetooth device drivers -+# -+CONFIG_BT_HCIBTUSB=y -+# CONFIG_BT_HCIBTSDIO is not set -+# 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_BT_MRVL is not set -+# CONFIG_BT_ATH3K is not set -+# CONFIG_AF_RXRPC is not set -+CONFIG_FIB_RULES=y -+CONFIG_WIRELESS=y -+CONFIG_WIRELESS_EXT=y -+CONFIG_WEXT_CORE=y -+CONFIG_WEXT_PROC=y -+CONFIG_WEXT_PRIV=y -+# CONFIG_CFG80211 is not set -+CONFIG_WIRELESS_EXT_SYSFS=y -+# CONFIG_LIB80211 is not set -+ -+# -+# CFG80211 needs to be enabled for MAC80211 -+# -+ -+# -+# Some wireless drivers require a rate control algorithm -+# -+# CONFIG_WIMAX is not set -+# CONFIG_RFKILL is not set -+# CONFIG_NET_9P is not set -+# CONFIG_CAIF is not set -+# CONFIG_CEPH_LIB is not set -+ -+# -+# Device Drivers -+# -+ -+# -+# Generic Driver Options -+# -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+# CONFIG_DEVTMPFS is not set -+CONFIG_STANDALONE=y -+CONFIG_PREVENT_FIRMWARE_BUILD=y -+CONFIG_FW_LOADER=y -+# CONFIG_FIRMWARE_IN_KERNEL is not set -+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_TESTS is not set -+CONFIG_MTD_CONCAT=y -+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_SM_FTL 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 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 is not set -+# CONFIG_MTD_CFI_STAA is not set -+CONFIG_MTD_CFI_UTIL=y -+# CONFIG_MTD_RAM is not set -+CONFIG_MTD_ROM=y -+CONFIG_MTD_ABSENT=y -+ -+# -+# 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_ARM_INTEGRATOR is not set -+# CONFIG_MTD_PLATRAM is not set -+ -+# -+# Self-contained MTD device drivers -+# -+# CONFIG_MTD_DATAFLASH is not set -+# CONFIG_MTD_M25P80 is not set -+# CONFIG_MTD_SST25L is not set -+# CONFIG_MTD_SLRAM is not set -+# CONFIG_MTD_PHRAM is not set -+# CONFIG_MTD_MTDRAM is not set -+# CONFIG_MTD_BLOCK2MTD is not set -+ -+# -+# Disk-On-Chip Device Drivers -+# -+# CONFIG_MTD_DOC2000 is not set -+# CONFIG_MTD_DOC2001 is not set -+# CONFIG_MTD_DOC2001PLUS is not set -+CONFIG_MTD_NAND_ECC=y -+# CONFIG_MTD_NAND_ECC_SMC is not set -+CONFIG_MTD_NAND=y -+CONFIG_MTD_NAND_VERIFY_WRITE=y -+# CONFIG_MTD_SM_COMMON 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_S3C2410=y -+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set -+CONFIG_MTD_NAND_S3C2410_HWECC=y -+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set -+# CONFIG_MTD_NAND_DISKONCHIP is not set -+# CONFIG_MTD_NAND_NANDSIM is not set -+# CONFIG_MTD_NAND_PLATFORM is not set -+# CONFIG_MTD_ALAUDA is not set -+# CONFIG_MTD_ONENAND is not set -+ -+# -+# LPDDR flash memory drivers -+# -+# CONFIG_MTD_LPDDR is not set -+# 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 is not set -+ -+# -+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected -+# -+# CONFIG_BLK_DEV_NBD is not set -+# CONFIG_BLK_DEV_UB is not set -+CONFIG_BLK_DEV_RAM=y -+CONFIG_BLK_DEV_RAM_COUNT=16 -+CONFIG_BLK_DEV_RAM_SIZE=4096 -+# CONFIG_BLK_DEV_XIP is not set -+# CONFIG_CDROM_PKTCDVD is not set -+# CONFIG_ATA_OVER_ETH is not set -+# CONFIG_MG_DISK is not set -+# CONFIG_BLK_DEV_RBD is not set -+# CONFIG_MISC_DEVICES is not set -+CONFIG_HAVE_IDE=y -+# CONFIG_IDE is not set -+ -+# -+# SCSI device support -+# -+CONFIG_SCSI_MOD=y -+# CONFIG_RAID_ATTRS is not set -+# CONFIG_SCSI 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_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_MII=y -+# CONFIG_PHYLIB is not set -+# CONFIG_NET_ETHERNET is not set -+# CONFIG_NETDEV_1000 is not set -+# CONFIG_NETDEV_10000 is not set -+CONFIG_WLAN=y -+# CONFIG_USB_ZD1201 is not set -+# CONFIG_HOSTAP is not set -+ -+# -+# Enable WiMAX (Networking options) to see the WiMAX drivers -+# -+ -+# -+# USB Network Adapters -+# -+# CONFIG_USB_CATC is not set -+# CONFIG_USB_KAWETH is not set -+# CONFIG_USB_PEGASUS is not set -+# CONFIG_USB_RTL8150 is not set -+# CONFIG_USB_USBNET is not set -+# CONFIG_USB_IPHETH is not set -+# CONFIG_WAN is not set -+ -+# -+# CAIF transport drivers -+# -+# CONFIG_PPP is not set -+# CONFIG_SLIP is not set -+# CONFIG_NETCONSOLE is not set -+# CONFIG_NETPOLL is not set -+# CONFIG_NET_POLL_CONTROLLER is not set -+# CONFIG_ISDN is not set -+# CONFIG_PHONE is not set -+ -+# -+# Input device support -+# -+CONFIG_INPUT=y -+# CONFIG_INPUT_FF_MEMLESS is not set -+# CONFIG_INPUT_POLLDEV is not set -+# CONFIG_INPUT_SPARSEKMAP is not set -+ -+# -+# Userland interfaces -+# -+CONFIG_INPUT_MOUSEDEV=y -+CONFIG_INPUT_MOUSEDEV_PSAUX=y -+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_ADP5588 is not set -+# CONFIG_KEYBOARD_ATKBD is not set -+# CONFIG_KEYBOARD_QT2160 is not set -+# CONFIG_KEYBOARD_LKKBD is not set -+CONFIG_KEYBOARD_GPIO=y -+# CONFIG_KEYBOARD_GPIO_POLLED is not set -+# CONFIG_KEYBOARD_TCA6416 is not set -+# CONFIG_KEYBOARD_MATRIX is not set -+# CONFIG_KEYBOARD_LM8323 is not set -+# CONFIG_KEYBOARD_MAX7359 is not set -+# CONFIG_KEYBOARD_MCS is not set -+# CONFIG_KEYBOARD_NEWTON is not set -+# CONFIG_KEYBOARD_OPENCORES is not set -+# CONFIG_KEYBOARD_STOWAWAY is not set -+# CONFIG_KEYBOARD_SUNKBD is not set -+# CONFIG_KEYBOARD_XTKBD is not set -+# CONFIG_INPUT_MOUSE is not set -+# CONFIG_INPUT_JOYSTICK is not set -+# CONFIG_INPUT_TABLET is not set -+CONFIG_INPUT_TOUCHSCREEN=y -+# CONFIG_TOUCHSCREEN_ADS7846 is not set -+# CONFIG_TOUCHSCREEN_AD7877 is not set -+# CONFIG_TOUCHSCREEN_AD7879 is not set -+# CONFIG_TOUCHSCREEN_BU21013 is not set -+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set -+# CONFIG_TOUCHSCREEN_DYNAPRO is not set -+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set -+# CONFIG_TOUCHSCREEN_EETI is not set -+# CONFIG_TOUCHSCREEN_FUJITSU is not set -+CONFIG_TOUCHSCREEN_S3C2410=y -+# CONFIG_TOUCHSCREEN_GUNZE is not set -+# CONFIG_TOUCHSCREEN_ELO is not set -+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -+# CONFIG_TOUCHSCREEN_MCS5000 is not set -+# CONFIG_TOUCHSCREEN_MTOUCH is not set -+# CONFIG_TOUCHSCREEN_INEXIO is not set -+# CONFIG_TOUCHSCREEN_MK712 is not set -+# CONFIG_TOUCHSCREEN_PENMOUNT is not set -+# CONFIG_TOUCHSCREEN_QT602240 is not set -+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set -+# CONFIG_TOUCHSCREEN_TSC2007 is not set -+# CONFIG_TOUCHSCREEN_W90X900 is not set -+# CONFIG_TOUCHSCREEN_TPS6507X is not set -+CONFIG_INPUT_MISC=y -+# CONFIG_INPUT_AD714X is not set -+# 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 is not set -+CONFIG_INPUT_PCF50633_PMU=y -+# CONFIG_INPUT_PCF8574 is not set -+# CONFIG_INPUT_PWM_BEEPER is not set -+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -+# CONFIG_INPUT_ADXL34X is not set -+ -+# -+# Hardware I/O ports -+# -+CONFIG_SERIO=y -+# CONFIG_SERIO_SERPORT is not set -+# CONFIG_SERIO_RAW is not set -+# CONFIG_SERIO_ALTERA_PS2 is not set -+# CONFIG_SERIO_PS2MULT 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=y -+# CONFIG_DEVKMEM is not set -+# CONFIG_SERIAL_NONSTANDARD is not set -+# CONFIG_N_GSM is not set -+ -+# -+# Serial drivers -+# -+# CONFIG_SERIAL_8250 is not set -+ -+# -+# Non-8250 serial port support -+# -+CONFIG_SERIAL_SAMSUNG=y -+CONFIG_SERIAL_SAMSUNG_UARTS=3 -+CONFIG_SERIAL_SAMSUNG_CONSOLE=y -+CONFIG_SERIAL_S3C2440=y -+# CONFIG_SERIAL_MAX3100 is not set -+# CONFIG_SERIAL_MAX3107 is not set -+CONFIG_SERIAL_CORE=y -+CONFIG_SERIAL_CORE_CONSOLE=y -+# CONFIG_SERIAL_TIMBERDALE is not set -+# CONFIG_SERIAL_ALTERA_JTAGUART is not set -+# CONFIG_SERIAL_ALTERA_UART is not set -+CONFIG_UNIX98_PTYS=y -+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set -+# CONFIG_LEGACY_PTYS is not set -+# CONFIG_IPMI_HANDLER is not set -+# CONFIG_HW_RANDOM is not set -+# CONFIG_R3964 is not set -+# CONFIG_RAW_DRIVER is not set -+# CONFIG_TCG_TPM is not set -+# CONFIG_RAMOOPS is not set -+CONFIG_I2C=y -+CONFIG_I2C_BOARDINFO=y -+# CONFIG_I2C_COMPAT is not set -+CONFIG_I2C_CHARDEV=y -+# CONFIG_I2C_MUX is not set -+# CONFIG_I2C_HELPER_AUTO is not set -+# CONFIG_I2C_SMBUS is not set -+ -+# -+# I2C Algorithms -+# -+# CONFIG_I2C_ALGOBIT is not set -+# CONFIG_I2C_ALGOPCF is not set -+# CONFIG_I2C_ALGOPCA is not set -+ -+# -+# I2C Hardware Bus support -+# -+ -+# -+# I2C system bus drivers (mostly embedded / system-on-chip) -+# -+# CONFIG_I2C_DESIGNWARE is not set -+# CONFIG_I2C_GPIO is not set -+# CONFIG_I2C_OCORES is not set -+# CONFIG_I2C_PCA_PLATFORM is not set -+CONFIG_HAVE_S3C2410_I2C=y -+CONFIG_I2C_S3C2410=y -+# CONFIG_I2C_SIMTEC is not set -+# CONFIG_I2C_XILINX is not set -+ -+# -+# External I2C/SMBus adapter drivers -+# -+# CONFIG_I2C_PARPORT_LIGHT is not set -+# CONFIG_I2C_TAOS_EVM is not set -+# CONFIG_I2C_TINY_USB is not set -+ -+# -+# Other I2C/SMBus bus drivers -+# -+# CONFIG_I2C_STUB is not set -+# CONFIG_I2C_DEBUG_CORE is not set -+# CONFIG_I2C_DEBUG_ALGO is not set -+# CONFIG_I2C_DEBUG_BUS is not set -+CONFIG_SPI=y -+CONFIG_SPI_MASTER=y -+ -+# -+# SPI Master Controller Drivers -+# -+CONFIG_SPI_BITBANG=y -+CONFIG_SPI_GPIO=y -+CONFIG_SPI_S3C24XX=y -+# CONFIG_SPI_S3C24XX_FIQ is not set -+CONFIG_SPI_S3C24XX_GPIO=y -+# CONFIG_SPI_XILINX is not set -+# CONFIG_SPI_DESIGNWARE is not set -+ -+# -+# SPI Protocol Masters -+# -+# CONFIG_SPI_SPIDEV is not set -+# CONFIG_SPI_TLE62X0 is not set -+ -+# -+# PPS support -+# -+# CONFIG_PPS is not set -+CONFIG_ARCH_REQUIRE_GPIOLIB=y -+CONFIG_GPIOLIB=y -+CONFIG_GPIO_SYSFS=y -+ -+# -+# Memory mapped GPIO expanders: -+# -+# CONFIG_GPIO_BASIC_MMIO is not set -+CONFIG_GPIO_GLAMO=y -+# CONFIG_GPIO_IT8761E is not set -+# CONFIG_GPIO_VX855 is not set -+ -+# -+# I2C GPIO expanders: -+# -+# CONFIG_GPIO_MAX7300 is not set -+# CONFIG_GPIO_MAX732X is not set -+# CONFIG_GPIO_PCA953X is not set -+# CONFIG_GPIO_PCF857X is not set -+# CONFIG_GPIO_SX150X is not set -+# CONFIG_GPIO_ADP5588 is not set -+CONFIG_GPIO_PCF50633=y -+ -+# -+# PCI GPIO expanders: -+# -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MAX7301 is not set -+# CONFIG_GPIO_MCP23S08 is not set -+# CONFIG_GPIO_MC33880 is not set -+# CONFIG_GPIO_74X164 is not set -+ -+# -+# AC97 GPIO expanders: -+# -+ -+# -+# MODULbus GPIO expanders: -+# -+# CONFIG_W1 is not set -+CONFIG_POWER_SUPPLY=y -+# CONFIG_POWER_SUPPLY_DEBUG is not set -+# CONFIG_PDA_POWER is not set -+# CONFIG_TEST_POWER is not set -+# CONFIG_BATTERY_DS2782 is not set -+# CONFIG_BATTERY_BQ20Z75 is not set -+CONFIG_BATTERY_BQ27x00=y -+CONFIG_BATTERY_BQ27X00_I2C=y -+CONFIG_BATTERY_BQ27X00_PLATFORM=y -+# CONFIG_BATTERY_MAX17040 is not set -+# CONFIG_BATTERY_S3C_ADC is not set -+CONFIG_CHARGER_PCF50633=y -+# CONFIG_BATTERY_PLATFORM is not set -+# CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set -+CONFIG_WATCHDOG=y -+# CONFIG_WATCHDOG_NOWAYOUT is not set -+ -+# -+# Watchdog Device Drivers -+# -+# CONFIG_SOFT_WATCHDOG is not set -+CONFIG_S3C2410_WATCHDOG=y -+# CONFIG_MAX63XX_WATCHDOG is not set -+ -+# -+# USB-based Watchdog Cards -+# -+# CONFIG_USBPCWATCHDOG is not set -+CONFIG_SSB_POSSIBLE=y -+ -+# -+# Sonics Silicon Backplane -+# -+# CONFIG_SSB is not set -+CONFIG_MFD_SUPPORT=y -+CONFIG_MFD_CORE=y -+# CONFIG_MFD_88PM860X is not set -+# CONFIG_MFD_SM501 is not set -+# CONFIG_MFD_ASIC3 is not set -+# CONFIG_HTC_EGPIO is not set -+# CONFIG_HTC_PASIC3 is not set -+# CONFIG_HTC_I2CPLD is not set -+# CONFIG_TPS65010 is not set -+# CONFIG_TPS6507X is not set -+# CONFIG_TWL4030_CORE is not set -+# CONFIG_MFD_STMPE is not set -+# CONFIG_MFD_TC35892 is not set -+# CONFIG_MFD_TMIO is not set -+# CONFIG_MFD_T7L66XB is not set -+# CONFIG_MFD_TC6387XB is not set -+# CONFIG_MFD_TC6393XB is not set -+# CONFIG_PMIC_DA903X is not set -+# CONFIG_PMIC_ADP5520 is not set -+# CONFIG_MFD_MAX8925 is not set -+# CONFIG_MFD_MAX8998 is not set -+# CONFIG_MFD_WM8400 is not set -+# CONFIG_MFD_WM831X_I2C is not set -+# CONFIG_MFD_WM831X_SPI is not set -+# CONFIG_MFD_WM8350_I2C is not set -+# CONFIG_MFD_WM8994 is not set -+CONFIG_MFD_PCF50633=y -+# CONFIG_MFD_MC13XXX is not set -+CONFIG_PCF50633_ADC=y -+# CONFIG_ABX500_CORE is not set -+# CONFIG_EZX_PCAP is not set -+CONFIG_MFD_GLAMO=y -+# CONFIG_MFD_TPS6586X is not set -+CONFIG_REGULATOR=y -+# CONFIG_REGULATOR_DEBUG is not set -+# CONFIG_REGULATOR_DUMMY is not set -+CONFIG_REGULATOR_FIXED_VOLTAGE=y -+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set -+CONFIG_REGULATOR_USERSPACE_CONSUMER=y -+# CONFIG_REGULATOR_BQ24022 is not set -+# CONFIG_REGULATOR_MAX1586 is not set -+# CONFIG_REGULATOR_MAX8649 is not set -+# CONFIG_REGULATOR_MAX8660 is not set -+# CONFIG_REGULATOR_MAX8952 is not set -+CONFIG_REGULATOR_PCF50633=y -+# CONFIG_REGULATOR_LP3971 is not set -+# CONFIG_REGULATOR_LP3972 is not set -+# CONFIG_REGULATOR_TPS65023 is not set -+# CONFIG_REGULATOR_TPS6507X is not set -+# CONFIG_REGULATOR_ISL6271A is not set -+# CONFIG_REGULATOR_AD5398 is not set -+# CONFIG_MEDIA_SUPPORT is not set -+ -+# -+# Graphics support -+# -+# CONFIG_DRM is not set -+# 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_S1D13XXX is not set -+# CONFIG_FB_TMIO is not set -+# CONFIG_FB_S3C2410 is not set -+# CONFIG_FB_VIRTUAL is not set -+# CONFIG_FB_METRONOME is not set -+# CONFIG_FB_MB862XX is not set -+# CONFIG_FB_BROADSHEET is not set -+CONFIG_FB_GLAMO=y -+CONFIG_BACKLIGHT_LCD_SUPPORT=y -+CONFIG_LCD_CLASS_DEVICE=y -+# CONFIG_LCD_L4F00242T03 is not set -+# CONFIG_LCD_LMS283GF05 is not set -+# CONFIG_LCD_LTV350QV is not set -+# CONFIG_LCD_TDO24M is not set -+# CONFIG_LCD_VGG2432A4 is not set -+# CONFIG_LCD_PLATFORM is not set -+# CONFIG_LCD_S6E63M0 is not set -+CONFIG_LCD_JBT6K74=y -+CONFIG_BACKLIGHT_CLASS_DEVICE=y -+# CONFIG_BACKLIGHT_GENERIC is not set -+# CONFIG_BACKLIGHT_PWM is not set -+# CONFIG_BACKLIGHT_ADP8860 is not set -+CONFIG_BACKLIGHT_PCF50633=y -+ -+# -+# Display device support -+# -+# CONFIG_DISPLAY_SUPPORT is not set -+ -+# -+# Console display driver support -+# -+CONFIG_DUMMY_CONSOLE=y -+CONFIG_FRAMEBUFFER_CONSOLE=y -+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -+CONFIG_FONTS=y -+# CONFIG_FONT_8x8 is not set -+# CONFIG_FONT_8x16 is not set -+CONFIG_FONT_6x11=y -+# 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 is not set -+CONFIG_SOUND=y -+CONFIG_SOUND_OSS_CORE=y -+CONFIG_SOUND_OSS_CORE_PRECLAIM=y -+CONFIG_SND=y -+CONFIG_SND_TIMER=y -+CONFIG_SND_PCM=y -+CONFIG_SND_JACK=y -+CONFIG_SND_SEQUENCER=m -+CONFIG_SND_SEQ_DUMMY=m -+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_DYNAMIC_MINORS is not set -+# CONFIG_SND_SUPPORT_OLD_API is not set -+# CONFIG_SND_VERBOSE_PROCFS is not set -+# CONFIG_SND_VERBOSE_PRINTK is not set -+# CONFIG_SND_DEBUG is not set -+# CONFIG_SND_RAWMIDI_SEQ is not set -+# CONFIG_SND_OPL3_LIB_SEQ is not set -+# CONFIG_SND_OPL4_LIB_SEQ is not set -+# CONFIG_SND_SBAWE_SEQ is not set -+# CONFIG_SND_EMU10K1_SEQ is not set -+# CONFIG_SND_DRIVERS is not set -+# CONFIG_SND_ARM is not set -+# CONFIG_SND_SPI is not set -+# CONFIG_SND_USB is not set -+CONFIG_SND_SOC=y -+CONFIG_SND_S3C24XX_SOC=y -+CONFIG_SND_S3C24XX_SOC_I2S=y -+CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y -+# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set -+# CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X is not set -+# CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23 is not set -+# CONFIG_SND_S3C24XX_SOC_SIMTEC_HERMES is not set -+CONFIG_SND_SOC_I2C_AND_SPI=y -+# CONFIG_SND_SOC_ALL_CODECS is not set -+CONFIG_SND_SOC_WM8753=y -+CONFIG_SND_SOC_LM4857=y -+# CONFIG_SOUND_PRIME is not set -+CONFIG_HID_SUPPORT=y -+CONFIG_HID=y -+# 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_3M_PCT is not set -+CONFIG_HID_A4TECH=y -+# CONFIG_HID_ACRUX_FF is not set -+CONFIG_HID_APPLE=y -+CONFIG_HID_BELKIN=y -+# CONFIG_HID_CANDO is not set -+CONFIG_HID_CHERRY=y -+CONFIG_HID_CHICONY=y -+# CONFIG_HID_PRODIKEYS is not set -+CONFIG_HID_CYPRESS=y -+CONFIG_HID_DRAGONRISE=y -+# CONFIG_DRAGONRISE_FF is not set -+# CONFIG_HID_EGALAX is not set -+# CONFIG_HID_ELECOM is not set -+CONFIG_HID_EZKEY=y -+CONFIG_HID_KYE=y -+# CONFIG_HID_UCLOGIC is not set -+# CONFIG_HID_WALTOP is not set -+CONFIG_HID_GYRATION=y -+CONFIG_HID_TWINHAN=y -+CONFIG_HID_KENSINGTON=y -+CONFIG_HID_LOGITECH=y -+# CONFIG_LOGITECH_FF is not set -+# CONFIG_LOGIRUMBLEPAD2_FF is not set -+# CONFIG_LOGIG940_FF is not set -+# CONFIG_LOGIWII_FF is not set -+# CONFIG_HID_MAGICMOUSE is not set -+CONFIG_HID_MICROSOFT=y -+# CONFIG_HID_MOSART is not set -+CONFIG_HID_MONTEREY=y -+CONFIG_HID_NTRIG=y -+CONFIG_HID_ORTEK=y -+CONFIG_HID_PANTHERLORD=y -+# CONFIG_PANTHERLORD_FF is not set -+CONFIG_HID_PETALYNX=y -+# CONFIG_HID_PICOLCD is not set -+# CONFIG_HID_QUANTA is not set -+# CONFIG_HID_ROCCAT is not set -+# CONFIG_HID_ROCCAT_KONE is not set -+# CONFIG_HID_ROCCAT_PYRA is not set -+CONFIG_HID_SAMSUNG=y -+CONFIG_HID_SONY=y -+# CONFIG_HID_STANTUM is not set -+CONFIG_HID_SUNPLUS=y -+CONFIG_HID_GREENASIA=y -+# CONFIG_GREENASIA_FF is not set -+CONFIG_HID_SMARTJOYPLUS=y -+# CONFIG_SMARTJOYPLUS_FF is not set -+CONFIG_HID_TOPSEED=y -+CONFIG_HID_THRUSTMASTER=y -+# CONFIG_THRUSTMASTER_FF is not set -+# CONFIG_HID_WACOM is not set -+CONFIG_HID_ZEROPLUS=y -+# CONFIG_ZEROPLUS_FF is not set -+# CONFIG_HID_ZYDACRON is not set -+CONFIG_USB_SUPPORT=y -+CONFIG_USB_ARCH_HAS_HCD=y -+CONFIG_USB_ARCH_HAS_OHCI=y -+# CONFIG_USB_ARCH_HAS_EHCI is not set -+CONFIG_USB=y -+# CONFIG_USB_DEBUG is not set -+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -+ -+# -+# Miscellaneous USB options -+# -+# CONFIG_USB_DEVICEFS is not set -+# CONFIG_USB_DEVICE_CLASS is not set -+# CONFIG_USB_DYNAMIC_MINORS is not set -+# CONFIG_USB_MON is not set -+# CONFIG_USB_WUSB is not set -+# CONFIG_USB_WUSB_CBAF is not set -+ -+# -+# USB Host Controller Drivers -+# -+# CONFIG_USB_C67X00_HCD is not set -+# CONFIG_USB_OXU210HP_HCD is not set -+# CONFIG_USB_ISP116X_HCD is not set -+# CONFIG_USB_ISP1760_HCD is not set -+# CONFIG_USB_ISP1362_HCD is not set -+CONFIG_USB_OHCI_HCD=y -+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -+CONFIG_USB_OHCI_LITTLE_ENDIAN=y -+# CONFIG_USB_SL811_HCD is not set -+# CONFIG_USB_R8A66597_HCD is not set -+# CONFIG_USB_HWA_HCD is not set -+# CONFIG_USB_MUSB_HDRC is not set -+ -+# -+# USB Device Class drivers -+# -+# CONFIG_USB_ACM is not set -+# CONFIG_USB_PRINTER is not set -+# CONFIG_USB_WDM is not set -+# CONFIG_USB_TMC is not set -+ -+# -+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may -+# -+ -+# -+# also be needed; see USB_STORAGE Help for more info -+# -+# CONFIG_USB_LIBUSUAL is not set -+ -+# -+# USB Imaging devices -+# -+# CONFIG_USB_MDC800 is not set -+ -+# -+# USB port drivers -+# -+# CONFIG_USB_SERIAL is not set -+ -+# -+# USB Miscellaneous drivers -+# -+# CONFIG_USB_EMI62 is not set -+# CONFIG_USB_EMI26 is not set -+# CONFIG_USB_ADUTUX is not set -+# CONFIG_USB_SEVSEG is not set -+# CONFIG_USB_RIO500 is not set -+# CONFIG_USB_LEGOTOWER is not set -+# CONFIG_USB_LCD is not set -+# CONFIG_USB_LED is not set -+# CONFIG_USB_CYPRESS_CY7C63 is not set -+# CONFIG_USB_CYTHERM is not set -+# CONFIG_USB_IDMOUSE is not set -+# CONFIG_USB_FTDI_ELAN is not set -+# CONFIG_USB_APPLEDISPLAY is not set -+# CONFIG_USB_LD is not set -+# CONFIG_USB_TRANCEVIBRATOR is not set -+# CONFIG_USB_IOWARRIOR is not set -+# CONFIG_USB_TEST is not set -+# CONFIG_USB_ISIGHTFW is not set -+# CONFIG_USB_YUREX is not set -+CONFIG_USB_GADGET=y -+# 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_R8A66597 is not set -+CONFIG_USB_GADGET_S3C2410=y -+CONFIG_USB_S3C2410=y -+# CONFIG_USB_S3C2410_DEBUG is not set -+# CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_DUMMY_HCD is not set -+# CONFIG_USB_GADGET_DUALSPEED is not set -+# CONFIG_USB_ZERO is not set -+# CONFIG_USB_AUDIO is not set -+CONFIG_USB_ETH=y -+CONFIG_USB_ETH_RNDIS=y -+# CONFIG_USB_ETH_EEM is not set -+# CONFIG_USB_GADGETFS is not set -+# CONFIG_USB_FUNCTIONFS is not set -+# CONFIG_USB_FILE_STORAGE is not set -+# CONFIG_USB_MASS_STORAGE is not set -+# CONFIG_USB_G_SERIAL is not set -+# CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set -+# CONFIG_USB_CDC_COMPOSITE is not set -+# CONFIG_USB_G_MULTI is not set -+# CONFIG_USB_G_HID is not set -+# CONFIG_USB_G_DBGP is not set -+ -+# -+# OTG and related infrastructure -+# -+# CONFIG_USB_GPIO_VBUS is not set -+# CONFIG_USB_ULPI is not set -+# CONFIG_NOP_USB_XCEIV is not set -+CONFIG_MMC=y -+# CONFIG_MMC_DEBUG is not set -+CONFIG_MMC_UNSAFE_RESUME=y -+ -+# -+# MMC/SD/SDIO Card Drivers -+# -+CONFIG_MMC_BLOCK=y -+CONFIG_MMC_BLOCK_MINORS=8 -+# CONFIG_MMC_BLOCK_BOUNCE is not set -+# CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set -+ -+# -+# MMC/SD/SDIO Host Controller Drivers -+# -+# CONFIG_MMC_SDHCI is not set -+# CONFIG_MMC_SPI is not set -+CONFIG_MMC_S3C=y -+# CONFIG_MMC_S3C_HW_SDIO_IRQ is not set -+CONFIG_MMC_S3C_PIO=y -+# CONFIG_MMC_S3C_DMA is not set -+# CONFIG_MMC_S3C_PIODMA is not set -+CONFIG_MMC_GLAMO=y -+# CONFIG_MMC_USHC is not set -+# CONFIG_MEMSTICK is not set -+CONFIG_NEW_LEDS=y -+CONFIG_LEDS_CLASS=y -+ -+# -+# LED drivers -+# -+# CONFIG_LEDS_S3C24XX is not set -+# CONFIG_LEDS_PCA9532 is not set -+CONFIG_LEDS_GPIO=y -+CONFIG_LEDS_GPIO_PLATFORM=y -+# CONFIG_LEDS_LP3944 is not set -+# CONFIG_LEDS_LP5521 is not set -+# CONFIG_LEDS_LP5523 is not set -+# CONFIG_LEDS_PCA955X is not set -+# CONFIG_LEDS_DAC124S085 is not set -+CONFIG_LEDS_PWM=y -+# CONFIG_LEDS_REGULATOR is not set -+# CONFIG_LEDS_BD2802 is not set -+# CONFIG_LEDS_LT3593 is not set -+CONFIG_LEDS_TRIGGERS=y -+ -+# -+# LED Triggers -+# -+CONFIG_LEDS_TRIGGER_TIMER=y -+CONFIG_LEDS_TRIGGER_HEARTBEAT=y -+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -+# CONFIG_LEDS_TRIGGER_GPIO is not set -+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set -+ -+# -+# iptables trigger is under Netfilter config (LED target) -+# -+# CONFIG_ACCESSIBILITY is not set -+CONFIG_RTC_LIB=y -+CONFIG_RTC_CLASS=y -+CONFIG_RTC_HCTOSYS=y -+CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -+# CONFIG_RTC_DEBUG is not set -+ -+# -+# RTC interfaces -+# -+CONFIG_RTC_INTF_SYSFS=y -+CONFIG_RTC_INTF_PROC=y -+CONFIG_RTC_INTF_DEV=y -+# CONFIG_RTC_INTF_DEV_UIE_EMUL 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_DS3232 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_ISL12022 is not set -+# CONFIG_RTC_DRV_X1205 is not set -+# CONFIG_RTC_DRV_PCF8563 is not set -+# CONFIG_RTC_DRV_PCF8583 is not set -+# CONFIG_RTC_DRV_M41T80 is not set -+# CONFIG_RTC_DRV_BQ32K is not set -+# CONFIG_RTC_DRV_S35390A is not set -+# CONFIG_RTC_DRV_FM3130 is not set -+# CONFIG_RTC_DRV_RX8581 is not set -+# CONFIG_RTC_DRV_RX8025 is not set -+ -+# -+# SPI RTC drivers -+# -+# CONFIG_RTC_DRV_M41T94 is not set -+# CONFIG_RTC_DRV_DS1305 is not set -+# CONFIG_RTC_DRV_DS1390 is not set -+# CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set -+# CONFIG_RTC_DRV_DS3234 is not set -+# CONFIG_RTC_DRV_PCF2123 is not set -+ -+# -+# Platform RTC drivers -+# -+# CONFIG_RTC_DRV_CMOS is not set -+# CONFIG_RTC_DRV_DS1286 is not set -+# CONFIG_RTC_DRV_DS1511 is not set -+# CONFIG_RTC_DRV_DS1553 is not set -+# CONFIG_RTC_DRV_DS1742 is not set -+# CONFIG_RTC_DRV_STK17TA8 is not set -+# CONFIG_RTC_DRV_M48T86 is not set -+# CONFIG_RTC_DRV_M48T35 is not set -+# CONFIG_RTC_DRV_M48T59 is not set -+# CONFIG_RTC_DRV_MSM6242 is not set -+# CONFIG_RTC_DRV_BQ4802 is not set -+# CONFIG_RTC_DRV_RP5C01 is not set -+# CONFIG_RTC_DRV_V3020 is not set -+CONFIG_RTC_DRV_PCF50633=y -+ -+# -+# on-CPU RTC drivers -+# -+# CONFIG_RTC_DRV_S3C is not set -+# CONFIG_DMADEVICES is not set -+# CONFIG_AUXDISPLAY is not set -+# CONFIG_UIO is not set -+CONFIG_STAGING=y -+# CONFIG_STAGING_EXCLUDE_BUILD is not set -+# CONFIG_USB_IP_COMMON is not set -+# CONFIG_ECHO is not set -+# CONFIG_BRCM80211 is not set -+# CONFIG_RT2870 is not set -+# CONFIG_COMEDI is not set -+# CONFIG_ASUS_OLED is not set -+# CONFIG_R8712U is not set -+# CONFIG_TRANZPORT is not set -+# CONFIG_POHMELFS is not set -+# CONFIG_AUTOFS_FS is not set -+# CONFIG_LINE6_USB is not set -+# CONFIG_VT6656 is not set -+# CONFIG_FB_UDL is not set -+# CONFIG_IIO is not set -+# CONFIG_ZRAM is not set -+# CONFIG_BATMAN_ADV is not set -+# CONFIG_FB_SM7XX is not set -+ -+# -+# Texas Instruments shared transport line discipline -+# -+# CONFIG_ADIS16255 is not set -+# CONFIG_SMB_FS is not set -+CONFIG_MACH_NO_WESTBRIDGE=y -+# CONFIG_ATH6K_LEGACY is not set -+# CONFIG_BCM_WIMAX is not set -+# CONFIG_FT1000 is not set -+ -+# -+# Speakup console speech -+# -+# CONFIG_SPEAKUP is not set -+CONFIG_AR6000_WLAN=y -+# CONFIG_AR6000_WLAN_DEBUG is not set -+# CONFIG_AR6000_WLAN_RESET is not set -+ -+# -+# File systems -+# -+CONFIG_EXT2_FS=y -+# CONFIG_EXT2_FS_XATTR is not set -+# CONFIG_EXT2_FS_XIP is not set -+CONFIG_EXT3_FS=y -+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set -+# CONFIG_EXT3_FS_XATTR is not set -+# CONFIG_EXT4_FS is not set -+CONFIG_JBD=y -+# CONFIG_JBD_DEBUG is not set -+# CONFIG_REISERFS_FS is not set -+# CONFIG_JFS_FS is not set -+# CONFIG_FS_POSIX_ACL is not set -+# CONFIG_XFS_FS is not set -+# CONFIG_GFS2_FS is not set -+# CONFIG_OCFS2_FS is not set -+# CONFIG_BTRFS_FS is not set -+# CONFIG_NILFS2_FS is not set -+CONFIG_FILE_LOCKING=y -+CONFIG_FSNOTIFY=y -+# CONFIG_DNOTIFY is not set -+CONFIG_INOTIFY_USER=y -+# CONFIG_FANOTIFY is not set -+# CONFIG_QUOTA is not set -+# CONFIG_QUOTACTL is not set -+# CONFIG_AUTOFS4_FS is not set -+# CONFIG_FUSE_FS is not set -+ -+# -+# Caches -+# -+# CONFIG_FSCACHE is not set -+ -+# -+# CD-ROM/DVD Filesystems -+# -+# CONFIG_ISO9660_FS is not set -+# CONFIG_UDF_FS is not set -+ -+# -+# DOS/FAT/NT Filesystems -+# -+CONFIG_FAT_FS=y -+# CONFIG_MSDOS_FS is not set -+CONFIG_VFAT_FS=y -+CONFIG_FAT_DEFAULT_CODEPAGE=437 -+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -+# CONFIG_NTFS_FS is not set -+ -+# -+# Pseudo filesystems -+# -+CONFIG_PROC_FS=y -+CONFIG_PROC_SYSCTL=y -+CONFIG_PROC_PAGE_MONITOR=y -+CONFIG_SYSFS=y -+CONFIG_TMPFS=y -+# CONFIG_TMPFS_POSIX_ACL is not set -+# CONFIG_HUGETLB_PAGE is not set -+# CONFIG_CONFIGFS_FS is not set -+CONFIG_MISC_FILESYSTEMS=y -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_HFS_FS is not set -+# CONFIG_HFSPLUS_FS is not set -+# CONFIG_BEFS_FS is not set -+# CONFIG_BFS_FS is not set -+# CONFIG_EFS_FS is not set -+CONFIG_JFFS2_FS=y -+CONFIG_JFFS2_FS_DEBUG=0 -+CONFIG_JFFS2_FS_WRITEBUFFER=y -+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -+CONFIG_JFFS2_SUMMARY=y -+# CONFIG_JFFS2_FS_XATTR is not set -+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -+CONFIG_JFFS2_ZLIB=y -+# CONFIG_JFFS2_LZO is not set -+CONFIG_JFFS2_RTIME=y -+# CONFIG_JFFS2_RUBIN is not set -+# CONFIG_LOGFS is not set -+# CONFIG_CRAMFS is not set -+# 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 is not set -+ -+# -+# Partition Types -+# -+CONFIG_PARTITION_ADVANCED=y -+# CONFIG_ACORN_PARTITION is not set -+CONFIG_OSF_PARTITION=y -+CONFIG_AMIGA_PARTITION=y -+CONFIG_ATARI_PARTITION=y -+CONFIG_MAC_PARTITION=y -+CONFIG_MSDOS_PARTITION=y -+CONFIG_BSD_DISKLABEL=y -+CONFIG_MINIX_SUBPARTITION=y -+CONFIG_SOLARIS_X86_PARTITION=y -+CONFIG_UNIXWARE_DISKLABEL=y -+CONFIG_LDM_PARTITION=y -+CONFIG_LDM_DEBUG=y -+CONFIG_SGI_PARTITION=y -+CONFIG_ULTRIX_PARTITION=y -+CONFIG_SUN_PARTITION=y -+CONFIG_KARMA_PARTITION=y -+CONFIG_EFI_PARTITION=y -+CONFIG_SYSV68_PARTITION=y -+CONFIG_NLS=y -+CONFIG_NLS_DEFAULT="iso8859-1" -+# CONFIG_NLS_CODEPAGE_437 is not set -+# 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 is not set -+# 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=y -+# CONFIG_ENABLE_WARN_DEPRECATED is not set -+# CONFIG_ENABLE_MUST_CHECK is not set -+CONFIG_FRAME_WARN=1024 -+# CONFIG_MAGIC_SYSRQ is not set -+CONFIG_STRIP_ASM_SYMS=y -+# CONFIG_UNUSED_SYMBOLS is not set -+CONFIG_DEBUG_FS=y -+# CONFIG_HEADERS_CHECK is not set -+# CONFIG_DEBUG_KERNEL is not set -+# CONFIG_HARDLOCKUP_DETECTOR is not set -+CONFIG_BKL=y -+# CONFIG_SPARSE_RCU_POINTER is not set -+CONFIG_DEBUG_BUGVERBOSE=y -+CONFIG_DEBUG_MEMORY_INIT=y -+CONFIG_FRAME_POINTER=y -+# CONFIG_LKDTM 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 -+CONFIG_TRACING_SUPPORT=y -+# CONFIG_FTRACE is not set -+# CONFIG_DYNAMIC_DEBUG is not set -+# CONFIG_ATOMIC64_SELFTEST is not set -+# CONFIG_SAMPLES is not set -+CONFIG_HAVE_ARCH_KGDB=y -+# CONFIG_STRICT_DEVMEM is not set -+# CONFIG_ARM_UNWIND is not set -+# CONFIG_DEBUG_USER is not set -+# CONFIG_OC_ETM is not set -+CONFIG_DEBUG_S3C_UART=2 -+ -+# -+# Security options -+# -+# CONFIG_KEYS is not set -+# CONFIG_SECURITY_DMESG_RESTRICT is not set -+# CONFIG_SECURITY is not set -+# CONFIG_SECURITYFS is not set -+CONFIG_DEFAULT_SECURITY_DAC=y -+CONFIG_DEFAULT_SECURITY="" -+CONFIG_CRYPTO=y -+ -+# -+# Crypto core or helper -+# -+CONFIG_CRYPTO_ALGAPI=y -+CONFIG_CRYPTO_ALGAPI2=y -+CONFIG_CRYPTO_HASH=y -+CONFIG_CRYPTO_HASH2=y -+CONFIG_CRYPTO_PCOMP=y -+CONFIG_CRYPTO_PCOMP2=y -+# CONFIG_CRYPTO_MANAGER is not set -+# CONFIG_CRYPTO_MANAGER2 is not set -+# 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 is not set -+# CONFIG_CRYPTO_XCBC is not set -+# CONFIG_CRYPTO_VMAC is not set -+ -+# -+# Digest -+# -+# CONFIG_CRYPTO_CRC32C is not set -+# CONFIG_CRYPTO_GHASH is not set -+# CONFIG_CRYPTO_MD4 is not set -+CONFIG_CRYPTO_MD5=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 is not set -+# CONFIG_CRYPTO_FCRYPT is not set -+# CONFIG_CRYPTO_KHAZAD is not set -+# CONFIG_CRYPTO_SALSA20 is not set -+# CONFIG_CRYPTO_SEED is not set -+# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_TEA is not set -+# CONFIG_CRYPTO_TWOFISH is not set -+ -+# -+# Compression -+# -+# CONFIG_CRYPTO_DEFLATE is not set -+CONFIG_CRYPTO_ZLIB=y -+# CONFIG_CRYPTO_LZO is not set -+ -+# -+# Random Number Generation -+# -+# CONFIG_CRYPTO_ANSI_CPRNG is not set -+# CONFIG_CRYPTO_HW is not set -+# CONFIG_BINARY_PRINTF is not set -+ -+# -+# Library routines -+# -+CONFIG_BITREVERSE=y -+CONFIG_GENERIC_FIND_LAST_BIT=y -+CONFIG_CRC_CCITT=y -+CONFIG_CRC16=y -+CONFIG_CRC_T10DIF=y -+CONFIG_CRC_ITU_T=y -+CONFIG_CRC32=y -+CONFIG_CRC7=y -+# CONFIG_LIBCRC32C is not set -+CONFIG_ZLIB_INFLATE=y -+CONFIG_ZLIB_DEFLATE=y -+CONFIG_LZO_DECOMPRESS=y -+CONFIG_DECOMPRESS_GZIP=y -+CONFIG_DECOMPRESS_BZIP2=y -+CONFIG_DECOMPRESS_LZMA=y -+CONFIG_DECOMPRESS_LZO=y -+CONFIG_HAS_IOMEM=y -+CONFIG_HAS_DMA=y -+CONFIG_NLATTR=y -+CONFIG_GENERIC_ATOMIC64=y -diff --git a/arch/arm/configs/gta02_drm_defconfig b/arch/arm/configs/gta02_drm_defconfig -new file mode 100644 -index 0000000..d771962 ---- /dev/null -+++ b/arch/arm/configs/gta02_drm_defconfig -@@ -0,0 +1,1943 @@ -+# -+# Automatically generated make config: don't edit -+# Linux/arm 2.6.37 Kernel Configuration -+# Wed Jan 5 19:56:16 2011 -+# -+CONFIG_ARM=y -+CONFIG_HAVE_PWM=y -+CONFIG_SYS_SUPPORTS_APM_EMULATION=y -+CONFIG_GENERIC_GPIO=y -+CONFIG_ARCH_USES_GETTIMEOFFSET=y -+CONFIG_HAVE_PROC_CPU=y -+CONFIG_NO_IOPORT=y -+CONFIG_GENERIC_HARDIRQS=y -+CONFIG_STACKTRACE_SUPPORT=y -+CONFIG_HAVE_LATENCYTOP_SUPPORT=y -+CONFIG_LOCKDEP_SUPPORT=y -+CONFIG_TRACE_IRQFLAGS_SUPPORT=y -+CONFIG_HARDIRQS_SW_RESEND=y -+CONFIG_GENERIC_IRQ_PROBE=y -+CONFIG_RWSEM_GENERIC_SPINLOCK=y -+CONFIG_ARCH_HAS_CPUFREQ=y -+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y -+CONFIG_GENERIC_HWEIGHT=y -+CONFIG_GENERIC_CALIBRATE_DELAY=y -+CONFIG_NEED_DMA_MAP_STATE=y -+CONFIG_FIQ=y -+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -+CONFIG_VECTORS_BASE=0xffff0000 -+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -+CONFIG_CONSTRUCTORS=y -+CONFIG_HAVE_IRQ_WORK=y -+ -+# -+# General setup -+# -+CONFIG_EXPERIMENTAL=y -+CONFIG_BROKEN_ON_SMP=y -+CONFIG_INIT_ENV_ARG_LIMIT=32 -+CONFIG_CROSS_COMPILE="" -+CONFIG_LOCALVERSION="" -+# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_HAVE_KERNEL_GZIP=y -+CONFIG_HAVE_KERNEL_LZMA=y -+CONFIG_HAVE_KERNEL_LZO=y -+CONFIG_KERNEL_GZIP=y -+# CONFIG_KERNEL_LZMA is not set -+# CONFIG_KERNEL_LZO is not set -+CONFIG_SWAP=y -+CONFIG_SYSVIPC=y -+CONFIG_SYSVIPC_SYSCTL=y -+# CONFIG_POSIX_MQUEUE is not set -+# CONFIG_BSD_PROCESS_ACCT is not set -+# CONFIG_TASKSTATS is not set -+# CONFIG_AUDIT is not set -+# CONFIG_HAVE_GENERIC_HARDIRQS is not set -+# CONFIG_SPARSE_IRQ is not set -+ -+# -+# RCU Subsystem -+# -+CONFIG_TINY_RCU=y -+# CONFIG_PREEMPT_RCU is not set -+# CONFIG_TREE_RCU_TRACE is not set -+# CONFIG_IKCONFIG is not set -+CONFIG_LOG_BUF_SHIFT=18 -+# CONFIG_CGROUPS is not set -+CONFIG_NAMESPACES=y -+# CONFIG_UTS_NS is not set -+# CONFIG_IPC_NS is not set -+# CONFIG_USER_NS is not set -+# CONFIG_PID_NS is not set -+# CONFIG_NET_NS is not set -+CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y -+# CONFIG_RELAY is not set -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="" -+CONFIG_RD_GZIP=y -+CONFIG_RD_BZIP2=y -+CONFIG_RD_LZMA=y -+CONFIG_RD_LZO=y -+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -+CONFIG_SYSCTL=y -+CONFIG_ANON_INODES=y -+# CONFIG_EMBEDDED is not set -+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_BASE_FULL=y -+CONFIG_FUTEX=y -+CONFIG_EPOLL=y -+CONFIG_SIGNALFD=y -+CONFIG_TIMERFD=y -+CONFIG_EVENTFD=y -+CONFIG_SHMEM=y -+CONFIG_AIO=y -+CONFIG_HAVE_PERF_EVENTS=y -+CONFIG_PERF_USE_VMALLOC=y -+ -+# -+# Kernel Performance Events And Counters -+# -+# CONFIG_PERF_EVENTS is not set -+# CONFIG_PERF_COUNTERS is not set -+CONFIG_VM_EVENT_COUNTERS=y -+CONFIG_COMPAT_BRK=y -+CONFIG_SLAB=y -+# CONFIG_SLUB is not set -+# CONFIG_PROFILING is not set -+CONFIG_HAVE_OPROFILE=y -+# CONFIG_KPROBES is not set -+CONFIG_HAVE_KPROBES=y -+CONFIG_HAVE_KRETPROBES=y -+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -+CONFIG_HAVE_CLK=y -+ -+# -+# GCOV-based kernel profiling -+# -+# CONFIG_GCOV_KERNEL is not set -+CONFIG_HAVE_GENERIC_DMA_COHERENT=y -+CONFIG_SLABINFO=y -+CONFIG_RT_MUTEXES=y -+CONFIG_BASE_SMALL=0 -+CONFIG_MODULES=y -+# CONFIG_MODULE_FORCE_LOAD is not set -+CONFIG_MODULE_UNLOAD=y -+CONFIG_MODULE_FORCE_UNLOAD=y -+# CONFIG_MODVERSIONS is not set -+# CONFIG_MODULE_SRCVERSION_ALL is not set -+CONFIG_BLOCK=y -+CONFIG_LBDAF=y -+# CONFIG_BLK_DEV_BSG is not set -+# CONFIG_BLK_DEV_INTEGRITY is not set -+ -+# -+# IO Schedulers -+# -+CONFIG_IOSCHED_NOOP=y -+CONFIG_IOSCHED_DEADLINE=y -+# CONFIG_IOSCHED_CFQ is not set -+CONFIG_DEFAULT_DEADLINE=y -+# CONFIG_DEFAULT_NOOP is not set -+CONFIG_DEFAULT_IOSCHED="deadline" -+# CONFIG_INLINE_SPIN_TRYLOCK is not set -+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK is not set -+# CONFIG_INLINE_SPIN_LOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -+CONFIG_INLINE_SPIN_UNLOCK=y -+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set -+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y -+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_READ_TRYLOCK is not set -+# CONFIG_INLINE_READ_LOCK is not set -+# CONFIG_INLINE_READ_LOCK_BH is not set -+# CONFIG_INLINE_READ_LOCK_IRQ is not set -+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -+CONFIG_INLINE_READ_UNLOCK=y -+# CONFIG_INLINE_READ_UNLOCK_BH is not set -+CONFIG_INLINE_READ_UNLOCK_IRQ=y -+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_WRITE_TRYLOCK is not set -+# CONFIG_INLINE_WRITE_LOCK is not set -+# CONFIG_INLINE_WRITE_LOCK_BH is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -+CONFIG_INLINE_WRITE_UNLOCK=y -+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set -+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set -+# CONFIG_MUTEX_SPIN_ON_OWNER is not set -+CONFIG_FREEZER=y -+ -+# -+# System Type -+# -+CONFIG_MMU=y -+# CONFIG_ARCH_AAEC2000 is not set -+# CONFIG_ARCH_INTEGRATOR is not set -+# CONFIG_ARCH_REALVIEW is not set -+# CONFIG_ARCH_VERSATILE is not set -+# CONFIG_ARCH_VEXPRESS is not set -+# CONFIG_ARCH_AT91 is not set -+# CONFIG_ARCH_BCMRING is not set -+# CONFIG_ARCH_CLPS711X is not set -+# CONFIG_ARCH_CNS3XXX is not set -+# CONFIG_ARCH_GEMINI is not set -+# CONFIG_ARCH_EBSA110 is not set -+# CONFIG_ARCH_EP93XX is not set -+# CONFIG_ARCH_FOOTBRIDGE is not set -+# CONFIG_ARCH_MXC is not set -+# CONFIG_ARCH_STMP3XXX is not set -+# CONFIG_ARCH_NETX is not set -+# CONFIG_ARCH_H720X is not set -+# CONFIG_ARCH_IOP13XX is not set -+# CONFIG_ARCH_IOP32X is not set -+# CONFIG_ARCH_IOP33X is not set -+# CONFIG_ARCH_IXP23XX is not set -+# CONFIG_ARCH_IXP2000 is not set -+# CONFIG_ARCH_IXP4XX is not set -+# CONFIG_ARCH_DOVE is not set -+# CONFIG_ARCH_KIRKWOOD is not set -+# CONFIG_ARCH_LOKI is not set -+# CONFIG_ARCH_LPC32XX is not set -+# CONFIG_ARCH_MV78XX0 is not set -+# CONFIG_ARCH_ORION5X is not set -+# CONFIG_ARCH_MMP is not set -+# CONFIG_ARCH_KS8695 is not set -+# CONFIG_ARCH_NS9XXX is not set -+# CONFIG_ARCH_W90X900 is not set -+# CONFIG_ARCH_NUC93X is not set -+# CONFIG_ARCH_TEGRA is not set -+# CONFIG_ARCH_PNX4008 is not set -+# CONFIG_ARCH_PXA is not set -+# CONFIG_ARCH_MSM is not set -+# CONFIG_ARCH_SHMOBILE is not set -+# CONFIG_ARCH_RPC is not set -+# CONFIG_ARCH_SA1100 is not set -+CONFIG_ARCH_S3C2410=y -+# CONFIG_ARCH_S3C64XX is not set -+# CONFIG_ARCH_S5P64X0 is not set -+# CONFIG_ARCH_S5P6442 is not set -+# CONFIG_ARCH_S5PC100 is not set -+# CONFIG_ARCH_S5PV210 is not set -+# CONFIG_ARCH_S5PV310 is not set -+# CONFIG_ARCH_SHARK is not set -+# CONFIG_ARCH_TCC_926 is not set -+# CONFIG_ARCH_LH7A40X is not set -+# CONFIG_ARCH_U300 is not set -+# CONFIG_ARCH_U8500 is not set -+# CONFIG_ARCH_NOMADIK is not set -+# CONFIG_ARCH_DAVINCI is not set -+# CONFIG_ARCH_OMAP is not set -+# CONFIG_PLAT_SPEAR is not set -+CONFIG_PLAT_SAMSUNG=y -+ -+# -+# Boot options -+# -+# CONFIG_S3C_BOOT_WATCHDOG is not set -+# CONFIG_S3C_BOOT_ERROR_RESET is not set -+CONFIG_S3C_BOOT_UART_FORCE_FIFO=y -+CONFIG_S3C_LOWLEVEL_UART_PORT=-1 -+CONFIG_S3C_GPIO_CFG_S3C24XX=y -+CONFIG_S3C_GPIO_PULL_DOWN=y -+CONFIG_SAMSUNG_GPIO_EXTRA=64 -+CONFIG_S3C_GPIO_SPACE=0 -+CONFIG_S3C_ADC=y -+CONFIG_S3C_DEV_USB_HOST=y -+CONFIG_S3C_DEV_WDT=y -+CONFIG_S3C_DEV_NAND=y -+CONFIG_S3C_DMA=y -+ -+# -+# Power management -+# -+# CONFIG_SAMSUNG_PM_DEBUG is not set -+# CONFIG_SAMSUNG_PM_CHECK is not set -+CONFIG_PLAT_S3C24XX=y -+CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y -+CONFIG_CPU_LLSERIAL_S3C2440=y -+CONFIG_S3C2410_CLOCK=y -+CONFIG_S3C24XX_PWM=y -+CONFIG_S3C24XX_GPIO_EXTRA=64 -+CONFIG_S3C24XX_GPIO_EXTRA64=y -+CONFIG_S3C2410_DMA=y -+# CONFIG_S3C2410_DMA_DEBUG is not set -+ -+# -+# S3C2400 Machines -+# -+CONFIG_CPU_S3C2410_DMA=y -+CONFIG_S3C2410_PM=y -+CONFIG_S3C2410_GPIO=y -+ -+# -+# S3C2410 Machines -+# -+# CONFIG_ARCH_SMDK2410 is not set -+# CONFIG_ARCH_H1940 is not set -+# CONFIG_MACH_N30 is not set -+# CONFIG_ARCH_BAST is not set -+# CONFIG_MACH_OTOM is not set -+# CONFIG_MACH_AML_M5900 is not set -+# CONFIG_MACH_TCT_HAMMER is not set -+# CONFIG_MACH_VR1000 is not set -+# CONFIG_MACH_QT2410 is not set -+ -+# -+# S3C2412 Machines -+# -+# CONFIG_MACH_JIVE is not set -+# CONFIG_MACH_SMDK2413 is not set -+# CONFIG_MACH_SMDK2412 is not set -+# CONFIG_MACH_VSTMS is not set -+ -+# -+# S3C2416 Machines -+# -+# CONFIG_MACH_SMDK2416 is not set -+CONFIG_CPU_S3C2442=y -+CONFIG_CPU_S3C244X=y -+ -+# -+# S3C2440 and S3C2442 Machines -+# -+# CONFIG_MACH_ANUBIS is not set -+CONFIG_MACH_NEO1973_GTA02=y -+# CONFIG_MACH_OSIRIS is not set -+# CONFIG_MACH_RX3715 is not set -+# CONFIG_ARCH_S3C2440 is not set -+# CONFIG_MACH_NEXCODER_2440 is not set -+# CONFIG_SMDK2440_CPU2440 is not set -+# CONFIG_SMDK2440_CPU2442 is not set -+# CONFIG_MACH_AT2440EVB is not set -+# CONFIG_MACH_MINI2440 is not set -+# CONFIG_MACH_RX1950 is not set -+ -+# -+# S3C2443 Machines -+# -+# CONFIG_MACH_SMDK2443 is not set -+ -+# -+# Processor Type -+# -+CONFIG_CPU_ARM920T=y -+CONFIG_CPU_32v4T=y -+CONFIG_CPU_ABRT_EV4T=y -+CONFIG_CPU_PABRT_LEGACY=y -+CONFIG_CPU_CACHE_V4WT=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_ARM_L1_CACHE_SHIFT=5 -+ -+# -+# Bus support -+# -+# CONFIG_PCI_SYSCALL is not set -+# CONFIG_ARCH_SUPPORTS_MSI is not set -+# CONFIG_PCCARD is not set -+ -+# -+# Kernel Features -+# -+CONFIG_VMSPLIT_3G=y -+# CONFIG_VMSPLIT_2G is not set -+# CONFIG_VMSPLIT_1G is not set -+CONFIG_PAGE_OFFSET=0xC0000000 -+CONFIG_PREEMPT_NONE=y -+# CONFIG_PREEMPT_VOLUNTARY is not set -+# CONFIG_PREEMPT is not set -+CONFIG_HZ=200 -+CONFIG_AEABI=y -+# CONFIG_OABI_COMPAT is not set -+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set -+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set -+# CONFIG_HIGHMEM is not set -+CONFIG_SELECT_MEMORY_MODEL=y -+CONFIG_FLATMEM_MANUAL=y -+CONFIG_FLATMEM=y -+CONFIG_FLAT_NODE_MEM_MAP=y -+CONFIG_HAVE_MEMBLOCK=y -+CONFIG_PAGEFLAGS_EXTENDED=y -+CONFIG_SPLIT_PTLOCK_CPUS=999999 -+# CONFIG_PHYS_ADDR_T_64BIT is not set -+CONFIG_ZONE_DMA_FLAG=0 -+CONFIG_VIRT_TO_BUS=y -+# CONFIG_KSM is not set -+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -+CONFIG_NEED_PER_CPU_KM=y -+CONFIG_FORCE_MAX_ZONEORDER=11 -+CONFIG_ALIGNMENT_TRAP=y -+# CONFIG_UACCESS_WITH_MEMCPY is not set -+# CONFIG_SECCOMP is not set -+# CONFIG_CC_STACKPROTECTOR is not set -+# CONFIG_DEPRECATED_PARAM_STRUCT is not set -+ -+# -+# Boot options -+# -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CMDLINE="unused -- bootloader passes ATAG list" -+# CONFIG_CMDLINE_FORCE is not set -+# CONFIG_XIP_KERNEL is not set -+# CONFIG_KEXEC is not set -+# CONFIG_AUTO_ZRELADDR is not set -+ -+# -+# CPU Power Management -+# -+# CONFIG_CPU_FREQ is not set -+CONFIG_CPU_IDLE=y -+CONFIG_CPU_IDLE_GOV_LADDER=y -+ -+# -+# Floating point emulation -+# -+ -+# -+# At least one emulation must be selected -+# -+ -+# -+# Userspace binary formats -+# -+CONFIG_BINFMT_ELF=y -+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set -+CONFIG_HAVE_AOUT=y -+# CONFIG_BINFMT_AOUT is not set -+# CONFIG_BINFMT_MISC is not set -+ -+# -+# Power management options -+# -+CONFIG_PM=y -+# CONFIG_PM_DEBUG is not set -+CONFIG_PM_SLEEP=y -+CONFIG_SUSPEND_NVS=y -+CONFIG_SUSPEND=y -+CONFIG_SUSPEND_FREEZER=y -+# CONFIG_APM_EMULATION is not set -+# CONFIG_PM_RUNTIME is not set -+CONFIG_PM_OPS=y -+CONFIG_ARCH_SUSPEND_POSSIBLE=y -+CONFIG_NET=y -+ -+# -+# Networking options -+# -+CONFIG_PACKET=y -+CONFIG_UNIX=y -+# CONFIG_NET_KEY is not set -+CONFIG_INET=y -+CONFIG_IP_MULTICAST=y -+CONFIG_IP_ADVANCED_ROUTER=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 is not set -+# CONFIG_IP_ROUTE_VERBOSE is not set -+CONFIG_IP_PNP=y -+# CONFIG_IP_PNP_DHCP is not set -+# CONFIG_IP_PNP_BOOTP is not set -+# CONFIG_IP_PNP_RARP is not set -+# CONFIG_NET_IPIP is not set -+# CONFIG_NET_IPGRE_DEMUX is not set -+CONFIG_IP_MROUTE=y -+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y -+# CONFIG_IP_PIMSM_V1 is not set -+# CONFIG_IP_PIMSM_V2 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 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=y -+# CONFIG_TCP_CONG_BIC is not set -+# CONFIG_TCP_CONG_CUBIC is not set -+CONFIG_TCP_CONG_WESTWOOD=y -+# CONFIG_TCP_CONG_HTCP is not set -+# 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_WESTWOOD=y -+# CONFIG_DEFAULT_RENO is not set -+CONFIG_DEFAULT_TCP_CONG="westwood" -+CONFIG_TCP_MD5SIG=y -+# CONFIG_IPV6 is not set -+# CONFIG_NETWORK_SECMARK is not set -+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -+# CONFIG_NETFILTER is not set -+# CONFIG_IP_DCCP is not set -+# CONFIG_IP_SCTP is not set -+# CONFIG_RDS is not set -+# CONFIG_TIPC is not set -+# CONFIG_ATM is not set -+# CONFIG_L2TP is not set -+CONFIG_STP=y -+CONFIG_BRIDGE=y -+# CONFIG_BRIDGE_IGMP_SNOOPING is not set -+# CONFIG_NET_DSA is not set -+# CONFIG_VLAN_8021Q is not set -+# CONFIG_DECNET is not set -+CONFIG_LLC=y -+# CONFIG_LLC2 is not set -+# CONFIG_IPX is not set -+# CONFIG_ATALK is not set -+# CONFIG_X25 is not set -+# CONFIG_LAPB is not set -+# CONFIG_ECONET is not set -+# CONFIG_WAN_ROUTER is not set -+# CONFIG_PHONET is not set -+# CONFIG_IEEE802154 is not set -+CONFIG_NET_SCHED=y -+ -+# -+# Queueing/Scheduling -+# -+# CONFIG_NET_SCH_CBQ is not set -+# CONFIG_NET_SCH_HTB is not set -+# CONFIG_NET_SCH_HFSC is not set -+# CONFIG_NET_SCH_PRIO is not set -+# CONFIG_NET_SCH_MULTIQ is not set -+# CONFIG_NET_SCH_RED is not set -+# CONFIG_NET_SCH_SFQ is not set -+# CONFIG_NET_SCH_TEQL is not set -+# CONFIG_NET_SCH_TBF is not set -+# CONFIG_NET_SCH_GRED is not set -+# CONFIG_NET_SCH_DSMARK is not set -+# CONFIG_NET_SCH_NETEM is not set -+# CONFIG_NET_SCH_DRR is not set -+ -+# -+# Classification -+# -+CONFIG_NET_CLS=y -+CONFIG_NET_CLS_BASIC=y -+# CONFIG_NET_CLS_TCINDEX is not set -+# CONFIG_NET_CLS_ROUTE4 is not set -+# CONFIG_NET_CLS_FW is not set -+# CONFIG_NET_CLS_U32 is not set -+# CONFIG_NET_CLS_RSVP is not set -+# CONFIG_NET_CLS_RSVP6 is not set -+# CONFIG_NET_CLS_FLOW is not set -+# CONFIG_NET_EMATCH is not set -+# CONFIG_NET_CLS_ACT is not set -+CONFIG_NET_SCH_FIFO=y -+# 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=y -+CONFIG_BT_L2CAP=y -+CONFIG_BT_SCO=y -+CONFIG_BT_RFCOMM=y -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=y -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=y -+ -+# -+# Bluetooth device drivers -+# -+CONFIG_BT_HCIBTUSB=y -+# CONFIG_BT_HCIBTSDIO is not set -+# 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_BT_MRVL is not set -+# CONFIG_BT_ATH3K is not set -+# CONFIG_AF_RXRPC is not set -+CONFIG_FIB_RULES=y -+CONFIG_WIRELESS=y -+CONFIG_WIRELESS_EXT=y -+CONFIG_WEXT_CORE=y -+CONFIG_WEXT_PROC=y -+CONFIG_WEXT_PRIV=y -+# CONFIG_CFG80211 is not set -+CONFIG_WIRELESS_EXT_SYSFS=y -+# CONFIG_LIB80211 is not set -+ -+# -+# CFG80211 needs to be enabled for MAC80211 -+# -+ -+# -+# Some wireless drivers require a rate control algorithm -+# -+# CONFIG_WIMAX is not set -+# CONFIG_RFKILL is not set -+# CONFIG_NET_9P is not set -+# CONFIG_CAIF is not set -+# CONFIG_CEPH_LIB is not set -+ -+# -+# Device Drivers -+# -+ -+# -+# Generic Driver Options -+# -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+# CONFIG_DEVTMPFS is not set -+CONFIG_STANDALONE=y -+CONFIG_PREVENT_FIRMWARE_BUILD=y -+CONFIG_FW_LOADER=y -+# CONFIG_FIRMWARE_IN_KERNEL is not set -+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_TESTS is not set -+CONFIG_MTD_CONCAT=y -+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_SM_FTL 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 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 is not set -+# CONFIG_MTD_CFI_STAA is not set -+CONFIG_MTD_CFI_UTIL=y -+# CONFIG_MTD_RAM is not set -+CONFIG_MTD_ROM=y -+CONFIG_MTD_ABSENT=y -+ -+# -+# 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_ARM_INTEGRATOR is not set -+# CONFIG_MTD_PLATRAM is not set -+ -+# -+# Self-contained MTD device drivers -+# -+# CONFIG_MTD_DATAFLASH is not set -+# CONFIG_MTD_M25P80 is not set -+# CONFIG_MTD_SST25L is not set -+# CONFIG_MTD_SLRAM is not set -+# CONFIG_MTD_PHRAM is not set -+# CONFIG_MTD_MTDRAM is not set -+# CONFIG_MTD_BLOCK2MTD is not set -+ -+# -+# Disk-On-Chip Device Drivers -+# -+# CONFIG_MTD_DOC2000 is not set -+# CONFIG_MTD_DOC2001 is not set -+# CONFIG_MTD_DOC2001PLUS is not set -+CONFIG_MTD_NAND_ECC=y -+# CONFIG_MTD_NAND_ECC_SMC is not set -+CONFIG_MTD_NAND=y -+CONFIG_MTD_NAND_VERIFY_WRITE=y -+# CONFIG_MTD_SM_COMMON 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_S3C2410=y -+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set -+CONFIG_MTD_NAND_S3C2410_HWECC=y -+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set -+# CONFIG_MTD_NAND_DISKONCHIP is not set -+# CONFIG_MTD_NAND_NANDSIM is not set -+# CONFIG_MTD_NAND_PLATFORM is not set -+# CONFIG_MTD_ALAUDA is not set -+# CONFIG_MTD_ONENAND is not set -+ -+# -+# LPDDR flash memory drivers -+# -+# CONFIG_MTD_LPDDR is not set -+# 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 is not set -+ -+# -+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected -+# -+# CONFIG_BLK_DEV_NBD is not set -+# CONFIG_BLK_DEV_UB is not set -+CONFIG_BLK_DEV_RAM=y -+CONFIG_BLK_DEV_RAM_COUNT=16 -+CONFIG_BLK_DEV_RAM_SIZE=4096 -+# CONFIG_BLK_DEV_XIP is not set -+# CONFIG_CDROM_PKTCDVD is not set -+# CONFIG_ATA_OVER_ETH is not set -+# CONFIG_MG_DISK is not set -+# CONFIG_BLK_DEV_RBD is not set -+# CONFIG_MISC_DEVICES is not set -+CONFIG_HAVE_IDE=y -+# CONFIG_IDE is not set -+ -+# -+# SCSI device support -+# -+CONFIG_SCSI_MOD=y -+# CONFIG_RAID_ATTRS is not set -+# CONFIG_SCSI 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_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_MII=y -+# CONFIG_PHYLIB is not set -+# CONFIG_NET_ETHERNET is not set -+# CONFIG_NETDEV_1000 is not set -+# CONFIG_NETDEV_10000 is not set -+CONFIG_WLAN=y -+# CONFIG_USB_ZD1201 is not set -+# CONFIG_HOSTAP is not set -+ -+# -+# Enable WiMAX (Networking options) to see the WiMAX drivers -+# -+ -+# -+# USB Network Adapters -+# -+# CONFIG_USB_CATC is not set -+# CONFIG_USB_KAWETH is not set -+# CONFIG_USB_PEGASUS is not set -+# CONFIG_USB_RTL8150 is not set -+# CONFIG_USB_USBNET is not set -+# CONFIG_USB_IPHETH is not set -+# CONFIG_WAN is not set -+ -+# -+# CAIF transport drivers -+# -+# CONFIG_PPP is not set -+# CONFIG_SLIP is not set -+# CONFIG_NETCONSOLE is not set -+# CONFIG_NETPOLL is not set -+# CONFIG_NET_POLL_CONTROLLER is not set -+# CONFIG_ISDN is not set -+# CONFIG_PHONE is not set -+ -+# -+# Input device support -+# -+CONFIG_INPUT=y -+# CONFIG_INPUT_FF_MEMLESS is not set -+# CONFIG_INPUT_POLLDEV is not set -+# CONFIG_INPUT_SPARSEKMAP is not set -+ -+# -+# Userland interfaces -+# -+CONFIG_INPUT_MOUSEDEV=y -+CONFIG_INPUT_MOUSEDEV_PSAUX=y -+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_ADP5588 is not set -+# CONFIG_KEYBOARD_ATKBD is not set -+# CONFIG_KEYBOARD_QT2160 is not set -+# CONFIG_KEYBOARD_LKKBD is not set -+CONFIG_KEYBOARD_GPIO=y -+# CONFIG_KEYBOARD_GPIO_POLLED is not set -+# CONFIG_KEYBOARD_TCA6416 is not set -+# CONFIG_KEYBOARD_MATRIX is not set -+# CONFIG_KEYBOARD_LM8323 is not set -+# CONFIG_KEYBOARD_MAX7359 is not set -+# CONFIG_KEYBOARD_MCS is not set -+# CONFIG_KEYBOARD_NEWTON is not set -+# CONFIG_KEYBOARD_OPENCORES is not set -+# CONFIG_KEYBOARD_STOWAWAY is not set -+# CONFIG_KEYBOARD_SUNKBD is not set -+# CONFIG_KEYBOARD_XTKBD is not set -+# CONFIG_INPUT_MOUSE is not set -+# CONFIG_INPUT_JOYSTICK is not set -+# CONFIG_INPUT_TABLET is not set -+CONFIG_INPUT_TOUCHSCREEN=y -+# CONFIG_TOUCHSCREEN_ADS7846 is not set -+# CONFIG_TOUCHSCREEN_AD7877 is not set -+# CONFIG_TOUCHSCREEN_AD7879 is not set -+# CONFIG_TOUCHSCREEN_BU21013 is not set -+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set -+# CONFIG_TOUCHSCREEN_DYNAPRO is not set -+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set -+# CONFIG_TOUCHSCREEN_EETI is not set -+# CONFIG_TOUCHSCREEN_FUJITSU is not set -+CONFIG_TOUCHSCREEN_S3C2410=y -+# CONFIG_TOUCHSCREEN_GUNZE is not set -+# CONFIG_TOUCHSCREEN_ELO is not set -+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -+# CONFIG_TOUCHSCREEN_MCS5000 is not set -+# CONFIG_TOUCHSCREEN_MTOUCH is not set -+# CONFIG_TOUCHSCREEN_INEXIO is not set -+# CONFIG_TOUCHSCREEN_MK712 is not set -+# CONFIG_TOUCHSCREEN_PENMOUNT is not set -+# CONFIG_TOUCHSCREEN_QT602240 is not set -+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set -+# CONFIG_TOUCHSCREEN_TSC2007 is not set -+# CONFIG_TOUCHSCREEN_W90X900 is not set -+# CONFIG_TOUCHSCREEN_TPS6507X is not set -+CONFIG_INPUT_MISC=y -+# CONFIG_INPUT_AD714X is not set -+# 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 is not set -+CONFIG_INPUT_PCF50633_PMU=y -+# CONFIG_INPUT_PCF8574 is not set -+# CONFIG_INPUT_PWM_BEEPER is not set -+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -+# CONFIG_INPUT_ADXL34X is not set -+ -+# -+# Hardware I/O ports -+# -+CONFIG_SERIO=y -+# CONFIG_SERIO_SERPORT is not set -+# CONFIG_SERIO_RAW is not set -+# CONFIG_SERIO_ALTERA_PS2 is not set -+# CONFIG_SERIO_PS2MULT 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=y -+# CONFIG_DEVKMEM is not set -+# CONFIG_SERIAL_NONSTANDARD is not set -+# CONFIG_N_GSM is not set -+ -+# -+# Serial drivers -+# -+# CONFIG_SERIAL_8250 is not set -+ -+# -+# Non-8250 serial port support -+# -+CONFIG_SERIAL_SAMSUNG=y -+CONFIG_SERIAL_SAMSUNG_UARTS=3 -+CONFIG_SERIAL_SAMSUNG_CONSOLE=y -+CONFIG_SERIAL_S3C2440=y -+# CONFIG_SERIAL_MAX3100 is not set -+# CONFIG_SERIAL_MAX3107 is not set -+CONFIG_SERIAL_CORE=y -+CONFIG_SERIAL_CORE_CONSOLE=y -+# CONFIG_SERIAL_TIMBERDALE is not set -+# CONFIG_SERIAL_ALTERA_JTAGUART is not set -+# CONFIG_SERIAL_ALTERA_UART is not set -+CONFIG_UNIX98_PTYS=y -+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set -+# CONFIG_LEGACY_PTYS is not set -+# CONFIG_IPMI_HANDLER is not set -+# CONFIG_HW_RANDOM is not set -+# CONFIG_R3964 is not set -+# CONFIG_RAW_DRIVER is not set -+# CONFIG_TCG_TPM is not set -+# CONFIG_RAMOOPS is not set -+CONFIG_I2C=y -+CONFIG_I2C_BOARDINFO=y -+# CONFIG_I2C_COMPAT is not set -+CONFIG_I2C_CHARDEV=y -+# CONFIG_I2C_MUX is not set -+# CONFIG_I2C_HELPER_AUTO is not set -+# CONFIG_I2C_SMBUS is not set -+ -+# -+# I2C Algorithms -+# -+# CONFIG_I2C_ALGOBIT is not set -+# CONFIG_I2C_ALGOPCF is not set -+# CONFIG_I2C_ALGOPCA is not set -+ -+# -+# I2C Hardware Bus support -+# -+ -+# -+# I2C system bus drivers (mostly embedded / system-on-chip) -+# -+# CONFIG_I2C_DESIGNWARE is not set -+# CONFIG_I2C_GPIO is not set -+# CONFIG_I2C_OCORES is not set -+# CONFIG_I2C_PCA_PLATFORM is not set -+CONFIG_HAVE_S3C2410_I2C=y -+CONFIG_I2C_S3C2410=y -+# CONFIG_I2C_SIMTEC is not set -+# CONFIG_I2C_XILINX is not set -+ -+# -+# External I2C/SMBus adapter drivers -+# -+# CONFIG_I2C_PARPORT_LIGHT is not set -+# CONFIG_I2C_TAOS_EVM is not set -+# CONFIG_I2C_TINY_USB is not set -+ -+# -+# Other I2C/SMBus bus drivers -+# -+# CONFIG_I2C_STUB is not set -+# CONFIG_I2C_DEBUG_CORE is not set -+# CONFIG_I2C_DEBUG_ALGO is not set -+# CONFIG_I2C_DEBUG_BUS is not set -+CONFIG_SPI=y -+CONFIG_SPI_MASTER=y -+ -+# -+# SPI Master Controller Drivers -+# -+CONFIG_SPI_BITBANG=y -+CONFIG_SPI_GPIO=y -+CONFIG_SPI_S3C24XX=y -+# CONFIG_SPI_S3C24XX_FIQ is not set -+CONFIG_SPI_S3C24XX_GPIO=y -+# CONFIG_SPI_XILINX is not set -+# CONFIG_SPI_DESIGNWARE is not set -+ -+# -+# SPI Protocol Masters -+# -+# CONFIG_SPI_SPIDEV is not set -+# CONFIG_SPI_TLE62X0 is not set -+ -+# -+# PPS support -+# -+# CONFIG_PPS is not set -+CONFIG_ARCH_REQUIRE_GPIOLIB=y -+CONFIG_GPIOLIB=y -+CONFIG_GPIO_SYSFS=y -+ -+# -+# Memory mapped GPIO expanders: -+# -+# CONFIG_GPIO_BASIC_MMIO is not set -+CONFIG_GPIO_GLAMO=y -+# CONFIG_GPIO_IT8761E is not set -+# CONFIG_GPIO_VX855 is not set -+ -+# -+# I2C GPIO expanders: -+# -+# CONFIG_GPIO_MAX7300 is not set -+# CONFIG_GPIO_MAX732X is not set -+# CONFIG_GPIO_PCA953X is not set -+# CONFIG_GPIO_PCF857X is not set -+# CONFIG_GPIO_SX150X is not set -+# CONFIG_GPIO_ADP5588 is not set -+CONFIG_GPIO_PCF50633=y -+ -+# -+# PCI GPIO expanders: -+# -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MAX7301 is not set -+# CONFIG_GPIO_MCP23S08 is not set -+# CONFIG_GPIO_MC33880 is not set -+# CONFIG_GPIO_74X164 is not set -+ -+# -+# AC97 GPIO expanders: -+# -+ -+# -+# MODULbus GPIO expanders: -+# -+# CONFIG_W1 is not set -+CONFIG_POWER_SUPPLY=y -+# CONFIG_POWER_SUPPLY_DEBUG is not set -+# CONFIG_PDA_POWER is not set -+# CONFIG_TEST_POWER is not set -+# CONFIG_BATTERY_DS2782 is not set -+# CONFIG_BATTERY_BQ20Z75 is not set -+CONFIG_BATTERY_BQ27x00=y -+CONFIG_BATTERY_BQ27X00_I2C=y -+CONFIG_BATTERY_BQ27X00_PLATFORM=y -+# CONFIG_BATTERY_MAX17040 is not set -+# CONFIG_BATTERY_S3C_ADC is not set -+CONFIG_CHARGER_PCF50633=y -+# CONFIG_BATTERY_PLATFORM is not set -+# CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set -+CONFIG_WATCHDOG=y -+# CONFIG_WATCHDOG_NOWAYOUT is not set -+ -+# -+# Watchdog Device Drivers -+# -+# CONFIG_SOFT_WATCHDOG is not set -+CONFIG_S3C2410_WATCHDOG=y -+# CONFIG_MAX63XX_WATCHDOG is not set -+ -+# -+# USB-based Watchdog Cards -+# -+# CONFIG_USBPCWATCHDOG is not set -+CONFIG_SSB_POSSIBLE=y -+ -+# -+# Sonics Silicon Backplane -+# -+# CONFIG_SSB is not set -+CONFIG_MFD_SUPPORT=y -+CONFIG_MFD_CORE=y -+# CONFIG_MFD_88PM860X is not set -+# CONFIG_MFD_SM501 is not set -+# CONFIG_MFD_ASIC3 is not set -+# CONFIG_HTC_EGPIO is not set -+# CONFIG_HTC_PASIC3 is not set -+# CONFIG_HTC_I2CPLD is not set -+# CONFIG_TPS65010 is not set -+# CONFIG_TPS6507X is not set -+# CONFIG_TWL4030_CORE is not set -+# CONFIG_MFD_STMPE is not set -+# CONFIG_MFD_TC35892 is not set -+# CONFIG_MFD_TMIO is not set -+# CONFIG_MFD_T7L66XB is not set -+# CONFIG_MFD_TC6387XB is not set -+# CONFIG_MFD_TC6393XB is not set -+# CONFIG_PMIC_DA903X is not set -+# CONFIG_PMIC_ADP5520 is not set -+# CONFIG_MFD_MAX8925 is not set -+# CONFIG_MFD_MAX8998 is not set -+# CONFIG_MFD_WM8400 is not set -+# CONFIG_MFD_WM831X_I2C is not set -+# CONFIG_MFD_WM831X_SPI is not set -+# CONFIG_MFD_WM8350_I2C is not set -+# CONFIG_MFD_WM8994 is not set -+CONFIG_MFD_PCF50633=y -+# CONFIG_MFD_MC13XXX is not set -+CONFIG_PCF50633_ADC=y -+# CONFIG_ABX500_CORE is not set -+# CONFIG_EZX_PCAP is not set -+CONFIG_MFD_GLAMO=y -+CONFIG_MFD_GLAMO_DRM=y -+# CONFIG_MFD_TPS6586X is not set -+CONFIG_REGULATOR=y -+# CONFIG_REGULATOR_DEBUG is not set -+# CONFIG_REGULATOR_DUMMY is not set -+CONFIG_REGULATOR_FIXED_VOLTAGE=y -+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set -+CONFIG_REGULATOR_USERSPACE_CONSUMER=y -+# CONFIG_REGULATOR_BQ24022 is not set -+# CONFIG_REGULATOR_MAX1586 is not set -+# CONFIG_REGULATOR_MAX8649 is not set -+# CONFIG_REGULATOR_MAX8660 is not set -+# CONFIG_REGULATOR_MAX8952 is not set -+CONFIG_REGULATOR_PCF50633=y -+# CONFIG_REGULATOR_LP3971 is not set -+# CONFIG_REGULATOR_LP3972 is not set -+# CONFIG_REGULATOR_TPS65023 is not set -+# CONFIG_REGULATOR_TPS6507X is not set -+# CONFIG_REGULATOR_ISL6271A is not set -+# CONFIG_REGULATOR_AD5398 is not set -+# CONFIG_MEDIA_SUPPORT is not set -+ -+# -+# Graphics support -+# -+CONFIG_DRM=y -+CONFIG_DRM_KMS_HELPER=y -++# CONFIG_DRM_MGA is not set -++# CONFIG_DRM_VIA is not set -++# CONFIG_DRM_SAVAGE is not set -+# 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_S1D13XXX is not set -+# CONFIG_FB_TMIO is not set -+# CONFIG_FB_S3C2410 is not set -+# CONFIG_FB_VIRTUAL is not set -+# CONFIG_FB_METRONOME is not set -+# CONFIG_FB_MB862XX is not set -+# CONFIG_FB_BROADSHEET is not set -+# CONFIG_FB_GLAMO is not set -+CONFIG_BACKLIGHT_LCD_SUPPORT=y -+CONFIG_LCD_CLASS_DEVICE=y -+# CONFIG_LCD_L4F00242T03 is not set -+# CONFIG_LCD_LMS283GF05 is not set -+# CONFIG_LCD_LTV350QV is not set -+# CONFIG_LCD_TDO24M is not set -+# CONFIG_LCD_VGG2432A4 is not set -+# CONFIG_LCD_PLATFORM is not set -+# CONFIG_LCD_S6E63M0 is not set -+CONFIG_LCD_JBT6K74=y -+CONFIG_BACKLIGHT_CLASS_DEVICE=y -+# CONFIG_BACKLIGHT_GENERIC is not set -+# CONFIG_BACKLIGHT_PWM is not set -+# CONFIG_BACKLIGHT_ADP8860 is not set -+CONFIG_BACKLIGHT_PCF50633=y -+ -+# -+# Display device support -+# -+# CONFIG_DISPLAY_SUPPORT is not set -+ -+# -+# Console display driver support -+# -+CONFIG_DUMMY_CONSOLE=y -+CONFIG_FRAMEBUFFER_CONSOLE=y -+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -+CONFIG_FONTS=y -+# CONFIG_FONT_8x8 is not set -+# CONFIG_FONT_8x16 is not set -+CONFIG_FONT_6x11=y -+# 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 is not set -+CONFIG_SOUND=y -+CONFIG_SOUND_OSS_CORE=y -+CONFIG_SOUND_OSS_CORE_PRECLAIM=y -+CONFIG_SND=y -+CONFIG_SND_TIMER=y -+CONFIG_SND_PCM=y -+CONFIG_SND_JACK=y -+CONFIG_SND_SEQUENCER=m -+CONFIG_SND_SEQ_DUMMY=m -+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_DYNAMIC_MINORS is not set -+# CONFIG_SND_SUPPORT_OLD_API is not set -+# CONFIG_SND_VERBOSE_PROCFS is not set -+# CONFIG_SND_VERBOSE_PRINTK is not set -+# CONFIG_SND_DEBUG is not set -+# CONFIG_SND_RAWMIDI_SEQ is not set -+# CONFIG_SND_OPL3_LIB_SEQ is not set -+# CONFIG_SND_OPL4_LIB_SEQ is not set -+# CONFIG_SND_SBAWE_SEQ is not set -+# CONFIG_SND_EMU10K1_SEQ is not set -+# CONFIG_SND_DRIVERS is not set -+# CONFIG_SND_ARM is not set -+# CONFIG_SND_SPI is not set -+# CONFIG_SND_USB is not set -+CONFIG_SND_SOC=y -+CONFIG_SND_S3C24XX_SOC=y -+CONFIG_SND_S3C24XX_SOC_I2S=y -+CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y -+# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set -+# CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X is not set -+# CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23 is not set -+# CONFIG_SND_S3C24XX_SOC_SIMTEC_HERMES is not set -+CONFIG_SND_SOC_I2C_AND_SPI=y -+# CONFIG_SND_SOC_ALL_CODECS is not set -+CONFIG_SND_SOC_WM8753=y -+CONFIG_SND_SOC_LM4857=y -+# CONFIG_SOUND_PRIME is not set -+CONFIG_HID_SUPPORT=y -+CONFIG_HID=y -+# 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_3M_PCT is not set -+CONFIG_HID_A4TECH=y -+# CONFIG_HID_ACRUX_FF is not set -+CONFIG_HID_APPLE=y -+CONFIG_HID_BELKIN=y -+# CONFIG_HID_CANDO is not set -+CONFIG_HID_CHERRY=y -+CONFIG_HID_CHICONY=y -+# CONFIG_HID_PRODIKEYS is not set -+CONFIG_HID_CYPRESS=y -+CONFIG_HID_DRAGONRISE=y -+# CONFIG_DRAGONRISE_FF is not set -+# CONFIG_HID_EGALAX is not set -+# CONFIG_HID_ELECOM is not set -+CONFIG_HID_EZKEY=y -+CONFIG_HID_KYE=y -+# CONFIG_HID_UCLOGIC is not set -+# CONFIG_HID_WALTOP is not set -+CONFIG_HID_GYRATION=y -+CONFIG_HID_TWINHAN=y -+CONFIG_HID_KENSINGTON=y -+CONFIG_HID_LOGITECH=y -+# CONFIG_LOGITECH_FF is not set -+# CONFIG_LOGIRUMBLEPAD2_FF is not set -+# CONFIG_LOGIG940_FF is not set -+# CONFIG_LOGIWII_FF is not set -+# CONFIG_HID_MAGICMOUSE is not set -+CONFIG_HID_MICROSOFT=y -+# CONFIG_HID_MOSART is not set -+CONFIG_HID_MONTEREY=y -+CONFIG_HID_NTRIG=y -+CONFIG_HID_ORTEK=y -+CONFIG_HID_PANTHERLORD=y -+# CONFIG_PANTHERLORD_FF is not set -+CONFIG_HID_PETALYNX=y -+# CONFIG_HID_PICOLCD is not set -+# CONFIG_HID_QUANTA is not set -+# CONFIG_HID_ROCCAT is not set -+# CONFIG_HID_ROCCAT_KONE is not set -+# CONFIG_HID_ROCCAT_PYRA is not set -+CONFIG_HID_SAMSUNG=y -+CONFIG_HID_SONY=y -+# CONFIG_HID_STANTUM is not set -+CONFIG_HID_SUNPLUS=y -+CONFIG_HID_GREENASIA=y -+# CONFIG_GREENASIA_FF is not set -+CONFIG_HID_SMARTJOYPLUS=y -+# CONFIG_SMARTJOYPLUS_FF is not set -+CONFIG_HID_TOPSEED=y -+CONFIG_HID_THRUSTMASTER=y -+# CONFIG_THRUSTMASTER_FF is not set -+# CONFIG_HID_WACOM is not set -+CONFIG_HID_ZEROPLUS=y -+# CONFIG_ZEROPLUS_FF is not set -+# CONFIG_HID_ZYDACRON is not set -+CONFIG_USB_SUPPORT=y -+CONFIG_USB_ARCH_HAS_HCD=y -+CONFIG_USB_ARCH_HAS_OHCI=y -+# CONFIG_USB_ARCH_HAS_EHCI is not set -+CONFIG_USB=y -+# CONFIG_USB_DEBUG is not set -+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -+ -+# -+# Miscellaneous USB options -+# -+# CONFIG_USB_DEVICEFS is not set -+# CONFIG_USB_DEVICE_CLASS is not set -+# CONFIG_USB_DYNAMIC_MINORS is not set -+# CONFIG_USB_MON is not set -+# CONFIG_USB_WUSB is not set -+# CONFIG_USB_WUSB_CBAF is not set -+ -+# -+# USB Host Controller Drivers -+# -+# CONFIG_USB_C67X00_HCD is not set -+# CONFIG_USB_OXU210HP_HCD is not set -+# CONFIG_USB_ISP116X_HCD is not set -+# CONFIG_USB_ISP1760_HCD is not set -+# CONFIG_USB_ISP1362_HCD is not set -+CONFIG_USB_OHCI_HCD=y -+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -+CONFIG_USB_OHCI_LITTLE_ENDIAN=y -+# CONFIG_USB_SL811_HCD is not set -+# CONFIG_USB_R8A66597_HCD is not set -+# CONFIG_USB_HWA_HCD is not set -+# CONFIG_USB_MUSB_HDRC is not set -+ -+# -+# USB Device Class drivers -+# -+# CONFIG_USB_ACM is not set -+# CONFIG_USB_PRINTER is not set -+# CONFIG_USB_WDM is not set -+# CONFIG_USB_TMC is not set -+ -+# -+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may -+# -+ -+# -+# also be needed; see USB_STORAGE Help for more info -+# -+# CONFIG_USB_LIBUSUAL is not set -+ -+# -+# USB Imaging devices -+# -+# CONFIG_USB_MDC800 is not set -+ -+# -+# USB port drivers -+# -+# CONFIG_USB_SERIAL is not set -+ -+# -+# USB Miscellaneous drivers -+# -+# CONFIG_USB_EMI62 is not set -+# CONFIG_USB_EMI26 is not set -+# CONFIG_USB_ADUTUX is not set -+# CONFIG_USB_SEVSEG is not set -+# CONFIG_USB_RIO500 is not set -+# CONFIG_USB_LEGOTOWER is not set -+# CONFIG_USB_LCD is not set -+# CONFIG_USB_LED is not set -+# CONFIG_USB_CYPRESS_CY7C63 is not set -+# CONFIG_USB_CYTHERM is not set -+# CONFIG_USB_IDMOUSE is not set -+# CONFIG_USB_FTDI_ELAN is not set -+# CONFIG_USB_APPLEDISPLAY is not set -+# CONFIG_USB_LD is not set -+# CONFIG_USB_TRANCEVIBRATOR is not set -+# CONFIG_USB_IOWARRIOR is not set -+# CONFIG_USB_TEST is not set -+# CONFIG_USB_ISIGHTFW is not set -+# CONFIG_USB_YUREX is not set -+CONFIG_USB_GADGET=y -+# 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_R8A66597 is not set -+CONFIG_USB_GADGET_S3C2410=y -+CONFIG_USB_S3C2410=y -+# CONFIG_USB_S3C2410_DEBUG is not set -+# CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_DUMMY_HCD is not set -+# CONFIG_USB_GADGET_DUALSPEED is not set -+# CONFIG_USB_ZERO is not set -+# CONFIG_USB_AUDIO is not set -+CONFIG_USB_ETH=y -+CONFIG_USB_ETH_RNDIS=y -+# CONFIG_USB_ETH_EEM is not set -+# CONFIG_USB_GADGETFS is not set -+# CONFIG_USB_FUNCTIONFS is not set -+# CONFIG_USB_FILE_STORAGE is not set -+# CONFIG_USB_MASS_STORAGE is not set -+# CONFIG_USB_G_SERIAL is not set -+# CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set -+# CONFIG_USB_CDC_COMPOSITE is not set -+# CONFIG_USB_G_MULTI is not set -+# CONFIG_USB_G_HID is not set -+# CONFIG_USB_G_DBGP is not set -+ -+# -+# OTG and related infrastructure -+# -+# CONFIG_USB_GPIO_VBUS is not set -+# CONFIG_USB_ULPI is not set -+# CONFIG_NOP_USB_XCEIV is not set -+CONFIG_MMC=y -+# CONFIG_MMC_DEBUG is not set -+CONFIG_MMC_UNSAFE_RESUME=y -+ -+# -+# MMC/SD/SDIO Card Drivers -+# -+CONFIG_MMC_BLOCK=y -+CONFIG_MMC_BLOCK_MINORS=8 -+# CONFIG_MMC_BLOCK_BOUNCE is not set -+# CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set -+ -+# -+# MMC/SD/SDIO Host Controller Drivers -+# -+# CONFIG_MMC_SDHCI is not set -+# CONFIG_MMC_SPI is not set -+CONFIG_MMC_S3C=y -+# CONFIG_MMC_S3C_HW_SDIO_IRQ is not set -+CONFIG_MMC_S3C_PIO=y -+# CONFIG_MMC_S3C_DMA is not set -+# CONFIG_MMC_S3C_PIODMA is not set -+CONFIG_MMC_GLAMO=y -+# CONFIG_MMC_USHC is not set -+# CONFIG_MEMSTICK is not set -+CONFIG_NEW_LEDS=y -+CONFIG_LEDS_CLASS=y -+ -+# -+# LED drivers -+# -+# CONFIG_LEDS_S3C24XX is not set -+# CONFIG_LEDS_PCA9532 is not set -+CONFIG_LEDS_GPIO=y -+CONFIG_LEDS_GPIO_PLATFORM=y -+# CONFIG_LEDS_LP3944 is not set -+# CONFIG_LEDS_LP5521 is not set -+# CONFIG_LEDS_LP5523 is not set -+# CONFIG_LEDS_PCA955X is not set -+# CONFIG_LEDS_DAC124S085 is not set -+CONFIG_LEDS_PWM=y -+# CONFIG_LEDS_REGULATOR is not set -+# CONFIG_LEDS_BD2802 is not set -+# CONFIG_LEDS_LT3593 is not set -+CONFIG_LEDS_TRIGGERS=y -+ -+# -+# LED Triggers -+# -+CONFIG_LEDS_TRIGGER_TIMER=y -+CONFIG_LEDS_TRIGGER_HEARTBEAT=y -+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -+# CONFIG_LEDS_TRIGGER_GPIO is not set -+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set -+ -+# -+# iptables trigger is under Netfilter config (LED target) -+# -+# CONFIG_ACCESSIBILITY is not set -+CONFIG_RTC_LIB=y -+CONFIG_RTC_CLASS=y -+CONFIG_RTC_HCTOSYS=y -+CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -+# CONFIG_RTC_DEBUG is not set -+ -+# -+# RTC interfaces -+# -+CONFIG_RTC_INTF_SYSFS=y -+CONFIG_RTC_INTF_PROC=y -+CONFIG_RTC_INTF_DEV=y -+# CONFIG_RTC_INTF_DEV_UIE_EMUL 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_DS3232 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_ISL12022 is not set -+# CONFIG_RTC_DRV_X1205 is not set -+# CONFIG_RTC_DRV_PCF8563 is not set -+# CONFIG_RTC_DRV_PCF8583 is not set -+# CONFIG_RTC_DRV_M41T80 is not set -+# CONFIG_RTC_DRV_BQ32K is not set -+# CONFIG_RTC_DRV_S35390A is not set -+# CONFIG_RTC_DRV_FM3130 is not set -+# CONFIG_RTC_DRV_RX8581 is not set -+# CONFIG_RTC_DRV_RX8025 is not set -+ -+# -+# SPI RTC drivers -+# -+# CONFIG_RTC_DRV_M41T94 is not set -+# CONFIG_RTC_DRV_DS1305 is not set -+# CONFIG_RTC_DRV_DS1390 is not set -+# CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set -+# CONFIG_RTC_DRV_DS3234 is not set -+# CONFIG_RTC_DRV_PCF2123 is not set -+ -+# -+# Platform RTC drivers -+# -+# CONFIG_RTC_DRV_CMOS is not set -+# CONFIG_RTC_DRV_DS1286 is not set -+# CONFIG_RTC_DRV_DS1511 is not set -+# CONFIG_RTC_DRV_DS1553 is not set -+# CONFIG_RTC_DRV_DS1742 is not set -+# CONFIG_RTC_DRV_STK17TA8 is not set -+# CONFIG_RTC_DRV_M48T86 is not set -+# CONFIG_RTC_DRV_M48T35 is not set -+# CONFIG_RTC_DRV_M48T59 is not set -+# CONFIG_RTC_DRV_MSM6242 is not set -+# CONFIG_RTC_DRV_BQ4802 is not set -+# CONFIG_RTC_DRV_RP5C01 is not set -+# CONFIG_RTC_DRV_V3020 is not set -+CONFIG_RTC_DRV_PCF50633=y -+ -+# -+# on-CPU RTC drivers -+# -+# CONFIG_RTC_DRV_S3C is not set -+# CONFIG_DMADEVICES is not set -+# CONFIG_AUXDISPLAY is not set -+# CONFIG_UIO is not set -+CONFIG_STAGING=y -+# CONFIG_STAGING_EXCLUDE_BUILD is not set -+# CONFIG_USB_IP_COMMON is not set -+# CONFIG_ECHO is not set -+# CONFIG_BRCM80211 is not set -+# CONFIG_RT2870 is not set -+# CONFIG_COMEDI is not set -+# CONFIG_ASUS_OLED is not set -+# CONFIG_R8712U is not set -+# CONFIG_TRANZPORT is not set -+# CONFIG_POHMELFS is not set -+# CONFIG_AUTOFS_FS is not set -+# CONFIG_LINE6_USB is not set -+# CONFIG_VT6656 is not set -+# CONFIG_FB_UDL is not set -+# CONFIG_IIO is not set -+# CONFIG_ZRAM is not set -+# CONFIG_BATMAN_ADV is not set -+# CONFIG_FB_SM7XX is not set -+ -+# -+# Texas Instruments shared transport line discipline -+# -+# CONFIG_ADIS16255 is not set -+# CONFIG_SMB_FS is not set -+CONFIG_MACH_NO_WESTBRIDGE=y -+# CONFIG_ATH6K_LEGACY is not set -+# CONFIG_BCM_WIMAX is not set -+# CONFIG_FT1000 is not set -+ -+# -+# Speakup console speech -+# -+# CONFIG_SPEAKUP is not set -+CONFIG_AR6000_WLAN=y -+# CONFIG_AR6000_WLAN_DEBUG is not set -+# CONFIG_AR6000_WLAN_RESET is not set -+ -+# -+# File systems -+# -+CONFIG_EXT2_FS=y -+# CONFIG_EXT2_FS_XATTR is not set -+# CONFIG_EXT2_FS_XIP is not set -+CONFIG_EXT3_FS=y -+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set -+# CONFIG_EXT3_FS_XATTR is not set -+# CONFIG_EXT4_FS is not set -+CONFIG_JBD=y -+# CONFIG_JBD_DEBUG is not set -+# CONFIG_REISERFS_FS is not set -+# CONFIG_JFS_FS is not set -+# CONFIG_FS_POSIX_ACL is not set -+# CONFIG_XFS_FS is not set -+# CONFIG_GFS2_FS is not set -+# CONFIG_OCFS2_FS is not set -+# CONFIG_BTRFS_FS is not set -+# CONFIG_NILFS2_FS is not set -+CONFIG_FILE_LOCKING=y -+CONFIG_FSNOTIFY=y -+# CONFIG_DNOTIFY is not set -+CONFIG_INOTIFY_USER=y -+# CONFIG_FANOTIFY is not set -+# CONFIG_QUOTA is not set -+# CONFIG_QUOTACTL is not set -+# CONFIG_AUTOFS4_FS is not set -+# CONFIG_FUSE_FS is not set -+ -+# -+# Caches -+# -+# CONFIG_FSCACHE is not set -+ -+# -+# CD-ROM/DVD Filesystems -+# -+# CONFIG_ISO9660_FS is not set -+# CONFIG_UDF_FS is not set -+ -+# -+# DOS/FAT/NT Filesystems -+# -+CONFIG_FAT_FS=y -+# CONFIG_MSDOS_FS is not set -+CONFIG_VFAT_FS=y -+CONFIG_FAT_DEFAULT_CODEPAGE=437 -+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -+# CONFIG_NTFS_FS is not set -+ -+# -+# Pseudo filesystems -+# -+CONFIG_PROC_FS=y -+CONFIG_PROC_SYSCTL=y -+CONFIG_PROC_PAGE_MONITOR=y -+CONFIG_SYSFS=y -+CONFIG_TMPFS=y -+# CONFIG_TMPFS_POSIX_ACL is not set -+# CONFIG_HUGETLB_PAGE is not set -+# CONFIG_CONFIGFS_FS is not set -+CONFIG_MISC_FILESYSTEMS=y -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_HFS_FS is not set -+# CONFIG_HFSPLUS_FS is not set -+# CONFIG_BEFS_FS is not set -+# CONFIG_BFS_FS is not set -+# CONFIG_EFS_FS is not set -+CONFIG_JFFS2_FS=y -+CONFIG_JFFS2_FS_DEBUG=0 -+CONFIG_JFFS2_FS_WRITEBUFFER=y -+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -+CONFIG_JFFS2_SUMMARY=y -+# CONFIG_JFFS2_FS_XATTR is not set -+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -+CONFIG_JFFS2_ZLIB=y -+# CONFIG_JFFS2_LZO is not set -+CONFIG_JFFS2_RTIME=y -+# CONFIG_JFFS2_RUBIN is not set -+# CONFIG_LOGFS is not set -+# CONFIG_CRAMFS is not set -+# 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 is not set -+ -+# -+# Partition Types -+# -+CONFIG_PARTITION_ADVANCED=y -+# CONFIG_ACORN_PARTITION is not set -+CONFIG_OSF_PARTITION=y -+CONFIG_AMIGA_PARTITION=y -+CONFIG_ATARI_PARTITION=y -+CONFIG_MAC_PARTITION=y -+CONFIG_MSDOS_PARTITION=y -+CONFIG_BSD_DISKLABEL=y -+CONFIG_MINIX_SUBPARTITION=y -+CONFIG_SOLARIS_X86_PARTITION=y -+CONFIG_UNIXWARE_DISKLABEL=y -+CONFIG_LDM_PARTITION=y -+CONFIG_LDM_DEBUG=y -+CONFIG_SGI_PARTITION=y -+CONFIG_ULTRIX_PARTITION=y -+CONFIG_SUN_PARTITION=y -+CONFIG_KARMA_PARTITION=y -+CONFIG_EFI_PARTITION=y -+CONFIG_SYSV68_PARTITION=y -+CONFIG_NLS=y -+CONFIG_NLS_DEFAULT="iso8859-1" -+# CONFIG_NLS_CODEPAGE_437 is not set -+# 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 is not set -+# 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=y -+# CONFIG_ENABLE_WARN_DEPRECATED is not set -+# CONFIG_ENABLE_MUST_CHECK is not set -+CONFIG_FRAME_WARN=1024 -+# CONFIG_MAGIC_SYSRQ is not set -+CONFIG_STRIP_ASM_SYMS=y -+# CONFIG_UNUSED_SYMBOLS is not set -+CONFIG_DEBUG_FS=y -+# CONFIG_HEADERS_CHECK is not set -+# CONFIG_DEBUG_KERNEL is not set -+# CONFIG_HARDLOCKUP_DETECTOR is not set -+CONFIG_BKL=y -+# CONFIG_SPARSE_RCU_POINTER is not set -+CONFIG_DEBUG_BUGVERBOSE=y -+CONFIG_DEBUG_MEMORY_INIT=y -+CONFIG_FRAME_POINTER=y -+# CONFIG_LKDTM 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 -+CONFIG_TRACING_SUPPORT=y -+# CONFIG_FTRACE is not set -+# CONFIG_DYNAMIC_DEBUG is not set -+# CONFIG_ATOMIC64_SELFTEST is not set -+# CONFIG_SAMPLES is not set -+CONFIG_HAVE_ARCH_KGDB=y -+# CONFIG_STRICT_DEVMEM is not set -+# CONFIG_ARM_UNWIND is not set -+# CONFIG_DEBUG_USER is not set -+# CONFIG_OC_ETM is not set -+CONFIG_DEBUG_S3C_UART=2 -+ -+# -+# Security options -+# -+# CONFIG_KEYS is not set -+# CONFIG_SECURITY_DMESG_RESTRICT is not set -+# CONFIG_SECURITY is not set -+# CONFIG_SECURITYFS is not set -+CONFIG_DEFAULT_SECURITY_DAC=y -+CONFIG_DEFAULT_SECURITY="" -+CONFIG_CRYPTO=y -+ -+# -+# Crypto core or helper -+# -+CONFIG_CRYPTO_ALGAPI=y -+CONFIG_CRYPTO_ALGAPI2=y -+CONFIG_CRYPTO_HASH=y -+CONFIG_CRYPTO_HASH2=y -+CONFIG_CRYPTO_PCOMP=y -+CONFIG_CRYPTO_PCOMP2=y -+# CONFIG_CRYPTO_MANAGER is not set -+# CONFIG_CRYPTO_MANAGER2 is not set -+# 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 is not set -+# CONFIG_CRYPTO_XCBC is not set -+# CONFIG_CRYPTO_VMAC is not set -+ -+# -+# Digest -+# -+# CONFIG_CRYPTO_CRC32C is not set -+# CONFIG_CRYPTO_GHASH is not set -+# CONFIG_CRYPTO_MD4 is not set -+CONFIG_CRYPTO_MD5=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 is not set -+# CONFIG_CRYPTO_FCRYPT is not set -+# CONFIG_CRYPTO_KHAZAD is not set -+# CONFIG_CRYPTO_SALSA20 is not set -+# CONFIG_CRYPTO_SEED is not set -+# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_TEA is not set -+# CONFIG_CRYPTO_TWOFISH is not set -+ -+# -+# Compression -+# -+# CONFIG_CRYPTO_DEFLATE is not set -+CONFIG_CRYPTO_ZLIB=y -+# CONFIG_CRYPTO_LZO is not set -+ -+# -+# Random Number Generation -+# -+# CONFIG_CRYPTO_ANSI_CPRNG is not set -+# CONFIG_CRYPTO_HW is not set -+# CONFIG_BINARY_PRINTF is not set -+ -+# -+# Library routines -+# -+CONFIG_BITREVERSE=y -+CONFIG_GENERIC_FIND_LAST_BIT=y -+CONFIG_CRC_CCITT=y -+CONFIG_CRC16=y -+CONFIG_CRC_T10DIF=y -+CONFIG_CRC_ITU_T=y -+CONFIG_CRC32=y -+CONFIG_CRC7=y -+# CONFIG_LIBCRC32C is not set -+CONFIG_ZLIB_INFLATE=y -+CONFIG_ZLIB_DEFLATE=y -+CONFIG_LZO_DECOMPRESS=y -+CONFIG_DECOMPRESS_GZIP=y -+CONFIG_DECOMPRESS_BZIP2=y -+CONFIG_DECOMPRESS_LZMA=y -+CONFIG_DECOMPRESS_LZO=y -+CONFIG_HAS_IOMEM=y -+CONFIG_HAS_DMA=y -+CONFIG_NLATTR=y -+CONFIG_GENERIC_ATOMIC64=y diff --git a/arch/arm/include/asm/fiq.h b/arch/arm/include/asm/fiq.h index 2242ce2..7ade2b8 100644 --- a/arch/arm/include/asm/fiq.h @@ -4017,6 +128,44 @@ index 6ff7919..c07691e 100644 int claim_fiq(struct fiq_handler *f) { int ret = 0; +diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig +index 7245a55..2b9d891 100644 +--- a/arch/arm/mach-s3c2410/Kconfig ++++ b/arch/arm/mach-s3c2410/Kconfig +@@ -178,4 +178,24 @@ config MACH_QT2410 + help + Say Y here if you are using the Armzone QT2410 + ++config MACH_NEO1973_GTA01 ++ bool "FIC Neo1973 GSM Phone (GTA01 Hardware)" ++ select CPU_S3C2410 ++ select MACH_NEO1973 ++ select S3C_DEV_USB_HOST ++ select MFD_PCF50606 ++ select INPUT_PCF50606_PMU ++ select PCF50606_ADC ++ select PCF50606_GPIO ++ select RTC_DRV_PCF50606 ++ select REGULATOR_PCF50606 ++ select CHARGER_PCF50606 ++ select PCF50606_WATCHDOG ++ select POWER_SUPPLY ++ select BATTERY_GTA01 ++ select S3C24XX_ADC ++ select S3C_DEV_NAND ++ help ++ Say Y here if you are using the FIC Neo1973 GSM Phone ++ + endmenu +diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile +index 0d468e9..aecf5e5 100644 +--- a/arch/arm/mach-s3c2410/Makefile ++++ b/arch/arm/mach-s3c2410/Makefile +@@ -40,3 +40,4 @@ obj-$(CONFIG_SIMTEC_NOR) += nor-simtec.o + # machine additions + + obj-$(CONFIG_MACH_BAST_IDE) += bast-ide.o ++obj-$(CONFIG_MACH_NEO1973_GTA01) += mach-gta01.o diff --git a/arch/arm/mach-s3c2410/include/mach/gpio.h b/arch/arm/mach-s3c2410/include/mach/gpio.h index f7f6b07..f9ddfa9 100644 --- a/arch/arm/mach-s3c2410/include/mach/gpio.h @@ -4060,6 +209,79 @@ index f7f6b07..f9ddfa9 100644 -#define S3C_GPIO_END (S3C2410_GPH(0) + 32) -#endif +#include +diff --git a/arch/arm/mach-s3c2410/include/mach/gta01.h b/arch/arm/mach-s3c2410/include/mach/gta01.h +new file mode 100644 +index 0000000..673a116 +--- /dev/null ++++ b/arch/arm/mach-s3c2410/include/mach/gta01.h +@@ -0,0 +1,67 @@ ++#ifndef _GTA01_H ++#define _GTA01_H ++ ++#include ++#include ++ ++/* Different hardware revisions, passed in ATAG_REVISION by u-boot */ ++#define GTA01v3_SYSTEM_REV 0x00000130 ++#define GTA01v4_SYSTEM_REV 0x00000140 ++#define GTA01Bv2_SYSTEM_REV 0x00000220 ++#define GTA01Bv3_SYSTEM_REV 0x00000230 ++#define GTA01Bv4_SYSTEM_REV 0x00000240 ++ ++/* !!!!!!!!!!! */ ++#define S3C_SYSTEM_REV_ATAG GTA01Bv2_SYSTEM_REV ++ ++/* Backlight */ ++ ++/* Definitions common to all revisions */ ++#define GTA01_GPIO_BACKLIGHT S3C2410_GPB(0) ++#define GTA01_GPIO_GPS_PWRON S3C2410_GPB(1) ++#define GTA01_GPIO_MODEM_RST S3C2410_GPB(6) ++#define GTA01_GPIO_MODEM_ON S3C2410_GPB(7) ++#define GTA01_GPIO_LCD_RESET S3C2410_GPC(6) ++#define GTA01_GPIO_PMU_IRQ S3C2410_GPG(8) ++#define GTA01_GPIO_JACK_INSERT S3C2410_GPF(4) ++#define GTA01_GPIO_nSD_DETECT S3C2410_GPF(5) ++#define GTA01_GPIO_AUX_KEY S3C2410_GPF(6) ++#define GTA01_GPIO_HOLD_KEY S3C2410_GPF(7) ++ ++#define GTA01_IRQ_MODEM IRQ_EINT1 ++#define GTA01_IRQ_JACK_INSERT IRQ_EINT4 ++#define GTA01_IRQ_nSD_DETECT IRQ_EINT5 ++#define GTA01_IRQ_AUX_KEY IRQ_EINT6 ++ ++/* GTA01v3 */ ++#define GTA01v3_GPIO_nGSM_EN S3C2410_GPG(9) ++ ++/* GTA01v4 */ ++#define GTA01_GPIO_MODEM_DNLOAD S3C2410_GPG(0) ++ ++/* GTA01Bv2 */ ++#define GTA01Bv2_GPIO_nGSM_EN S3C2410_GPF(2) ++#define GTA01Bv2_GPIO_VIBRATOR_ON S3C2410_GPB(10) ++#define GTA01Bv2_IRQ_PCF50606 IRQ_EINT16 ++ ++/* GTA01Bv3 */ ++#define GTA01_GPIO_GPS_EN_3V3 S3C2410_GPG(9) ++ ++#define GTA01_GPIO_SDMMC_ON S3C2410_GPB(2) ++#define GTA01_GPIO_BT_EN S3C2410_GPB(5) ++#define GTA01_GPIO_USB_PULLUP S3C2410_GPB(9) ++ ++#define GTA01_GPIO_GPS_EN_2V8 S3C2410_GPG(9) ++#define GTA01_GPIO_GPS_EN_3V S3C2410_GPG(10) ++#define GTA01_GPIO_GPS_RESET S3C2410_GPC(0) ++ ++/* GTA01Bv4 */ ++#define GTA01Bv4_GPIO_nNAND_WP S3C2410_GPA(16) ++#define GTA01Bv4_GPIO_VIBRATOR_ON S3C2410_GPB(3) ++#define GTA01Bv4_GPIO_PMU_IRQ S3C2410_GPG(1) ++ ++#define GTA01Bv4_IRQ_PCF50606 IRQ_EINT9 ++ ++extern struct pcf50606 *gta01_pcf; ++ ++#endif /* _GTA01_H */ diff --git a/arch/arm/mach-s3c2410/include/mach/irqs.h b/arch/arm/mach-s3c2410/include/mach/irqs.h index 11bb0f0..d22ffca 100644 --- a/arch/arm/mach-s3c2410/include/mach/irqs.h @@ -4099,6 +321,937 @@ index 11bb0f0..d22ffca 100644 +#define NR_IRQS IRQ_BOARD_END + #endif /* __ASM_ARCH_IRQ_H */ +diff --git a/arch/arm/mach-s3c2410/mach-gta01.c b/arch/arm/mach-s3c2410/mach-gta01.c +new file mode 100644 +index 0000000..337f7aa +--- /dev/null ++++ b/arch/arm/mach-s3c2410/mach-gta01.c +@@ -0,0 +1,925 @@ ++/* ++ * linux/arch/arm/mach-s3c2410/mach-gta01.c ++ * ++ * S3C2410 Machine Support for the FIC Neo1973 GTA01 ++ * ++ * Copyright (C) 2006-2007 by Openmoko, Inc. ++ * Author: Harald Welte ++ * Copyright (C) 2009, Lars-Peter Clausen ++ * 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, 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++/*#include */ ++ ++#include ++ ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++static void gta01_pmu_attach_child_devices(struct pcf50606 *pcf); ++ ++static struct map_desc gta01_iodesc[] __initdata = { ++ { ++ .virtual = 0xe0000000, ++ .pfn = __phys_to_pfn(S3C2410_CS3+0x01000000), ++ .length = SZ_1M, ++ .type = MT_DEVICE ++ }, ++}; ++ ++#define UCON S3C2410_UCON_DEFAULT ++#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB ++#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE ++/* UFCON for the gta01 sets the FIFO trigger level at 4, not 8 */ ++#define UFCON_GTA01_PORT0 S3C2410_UFCON_FIFOMODE ++ ++static struct s3c2410_uartcfg gta01_uartcfgs[] = { ++ [0] = { ++ .hwport = 0, ++ .flags = 0, ++ .ucon = UCON, ++ .ulcon = ULCON, ++ .ufcon = UFCON_GTA01_PORT0, ++ }, ++ [1] = { ++ .hwport = 1, ++ .flags = 0, ++ .ucon = UCON, ++ .ulcon = ULCON, ++ .ufcon = UFCON, ++ }, ++}; ++ ++/* TODO */ ++static void gta01_pmu_event_callback(struct pcf50606 *pcf, int irq) ++{ ++ /*TODO : Handle ACD here */ ++} ++#if 0 ++/* FIXME : Goes away when ACD is handled above */ ++static int pmu_callback(struct device *dev, unsigned int feature, ++ enum pmu_event event) ++{ ++ switch (feature) { ++ case PCF50606_FEAT_ACD: ++ switch (event) { ++ case PMU_EVT_INSERT: ++ pcf50606_charge_fast(pcf50606_global, 1); ++ break; ++ case PMU_EVT_REMOVE: ++ pcf50606_charge_fast(pcf50606_global, 0); ++ break; ++ default: ++ break; ++ } ++ break; ++ default: ++ break; ++ } ++ ++ return 0; ++} ++#endif ++struct pcf50606 *gta01_pcf; ++ ++static struct platform_device gta01_pm_gsm_dev = { ++ .name = "neo1973-pm-gsm", ++}; ++ ++static struct platform_device gta01_pm_bt_dev = { ++ .name = "neo1973-pm-bt", ++}; ++static struct platform_device gta01_pm_gps_dev = { ++ .name = "neo1973-pm-gps", ++}; ++ ++static struct regulator_consumer_supply ioreg_consumers[] = { ++ { ++ .dev = >a01_pm_gps_dev.dev, ++ .supply = "GPS_2V8", ++ }, ++}; ++ ++static struct regulator_consumer_supply d1reg_consumers[] = { ++ { ++ .dev = >a01_pm_gps_dev.dev, ++ .supply = "GPS_3V", ++ }, ++ { ++ .dev = >a01_pm_bt_dev.dev, ++ .supply = "BT_3V1", ++ }, ++}; ++ ++static struct regulator_consumer_supply dcd_consumers[] = { ++ { ++ .dev = >a01_pm_gps_dev.dev, ++ .supply = "GPS_3V3", ++ }, ++ { ++ .dev = >a01_pm_gps_dev.dev, ++ .supply = "GPS_1V5", ++ }, ++}; ++ ++static struct regulator_consumer_supply d2reg_consumers[] = { ++ { ++ .dev = >a01_pm_gps_dev.dev, ++ .supply = "GPS_2V5", ++ }, ++ { ++ .dev = &s3c_device_sdi.dev, ++ .supply = "SD_3V3", ++ }, ++}; ++ ++#if 0 ++/* This will come with 2.6.32. Don't forget to uncomment it then. */ ++static struct regulator_consumer_supply lpreg_consumers[] = { ++ REGULATOR_SUPPLY("VDC", "jbt6k74"), ++ REGULATOR_SUPPLY("VDDIO", "jbt6k74"), ++}; ++#else ++static struct regulator_consumer_supply lpreg_consumers[] = { ++ { .supply = "VDC", }, ++ { .supply = "VDDIO", }, ++}; ++#endif ++ ++#if 0 ++ ++static int gta01_bat_get_charging_status(void) ++{ ++ struct pcf50606 *pcf = gta01_pcf; ++ u8 mbcc1, chgmod; ++ ++ mbcc1 = pcf50606_reg_read(pcf, PCF50606_REG_MBCC1); ++ chgmod = mbcc1 & PCF50606_MBCC1_CHGMOD_MASK; ++ ++ if (chgmod == PCF50606_MBCC1_CHGMOD_IDLE) ++ return 0; ++ else ++ return 1; ++} ++ ++static int gta01_bat_get_voltage(void) ++{ ++ struct pcf50606 *pcf = gta01_pcf; ++ u16 adc, mv = 0; ++ ++ adc = pcf50606_adc_sync_read(pcf, PCF50606_ADCMUX_BATVOLT_RES); ++ mv = (adc * 6000) / 1024; ++ ++ return mv * 1000; ++} ++ ++static int gta01_bat_get_current(void) ++{ ++ struct pcf50606 *pcf = gta01_pcf; ++ u16 adc_battvolt, adc_adcin1; ++ s32 res; ++ ++ adc_battvolt = pcf50606_adc_sync_read(pcf, PCF50606_ADCMUX_BATVOLT_SUBTR); ++ adc_adcin1 = pcf50606_adc_sync_read(pcf, PCF50606_ADCMUX_ADCIN1_SUBTR); ++ res = (adc_battvolt - adc_adcin1) * 2400; ++ ++ /*rsense is 220 milli */ ++ return (res * 1000) / (220 * 1024) * 1000; ++} ++ ++static struct gta01_bat_platform_data gta01_bat_pdata = { ++ .get_charging_status = gta01_bat_get_charging_status, ++ .get_voltage = gta01_bat_get_voltage, ++ .get_current = gta01_bat_get_current, ++}; ++ ++static struct platform_device gta01_bat = { ++ .name = "gta01_battery", ++ .id = -1, ++ .dev = { ++ .platform_data = >a01_bat_pdata, ++ } ++}; ++#endif ++ ++static void __devinit gta01_pcf_probe_done(struct pcf50606 *pcf) ++{ ++ gta01_pcf = pcf; ++ ++ gta01_pmu_attach_child_devices(pcf); ++} ++ ++static int gps_registered_regulators = 0; ++ ++static void gta01_pmu_regulator_registered(struct pcf50606 *pcf, int id) ++{ ++ switch(id) { ++ case PCF50606_REGULATOR_D1REG: ++ platform_device_register(>a01_pm_bt_dev); ++ gps_registered_regulators++; ++ break; ++ case PCF50606_REGULATOR_D2REG: ++ gps_registered_regulators++; ++ break; ++ case PCF50606_REGULATOR_IOREG: ++ case PCF50606_REGULATOR_DCD: ++ gps_registered_regulators++; ++ break; ++ } ++ ++ /* All GPS related regulators registered ? */ ++ if (gps_registered_regulators == 4) ++ platform_device_register(>a01_pm_gps_dev); ++} ++ ++static struct pcf50606_platform_data gta01_pcf_pdata __devinitdata = { ++ .resumers = { ++ [0] = PCF50606_INT1_ALARM | ++ PCF50606_INT1_ONKEYF | ++ PCF50606_INT1_EXTONR, ++ [1] = PCF50606_INT2_CHGWD10S | ++ PCF50606_INT2_CHGPROT | ++ PCF50606_INT2_CHGERR, ++ [2] = PCF50606_INT3_LOWBAT | ++ PCF50606_INT3_HIGHTMP | ++ PCF50606_INT3_ACDINS, ++ }, ++ .mbc_event_callback = gta01_pmu_event_callback, ++ .reg_init_data = { ++ /* BT, GPS */ ++ [PCF50606_REGULATOR_D1REG] = { ++ .constraints = { ++ .min_uV = 3000000, ++ .max_uV = 3150000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .apply_uV = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(d1reg_consumers), ++ .consumer_supplies = d1reg_consumers, ++ }, ++ /* GPS */ ++ [PCF50606_REGULATOR_D2REG] = { ++ .constraints = { ++ .min_uV = 1650000, ++ .max_uV = 3300000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, ++ .apply_uV = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(d2reg_consumers), ++ .consumer_supplies = d2reg_consumers, ++ ++ }, ++ /* RTC/Standby */ ++ [PCF50606_REGULATOR_D3REG] = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 2100000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .always_on = 1, ++ .state_mem = { ++ .enabled = 1, ++ }, ++ }, ++ .num_consumer_supplies = 0, ++ }, ++ /* GPS */ ++ [PCF50606_REGULATOR_DCD] = { ++ .constraints = { ++ .min_uV = 1500000, ++ .max_uV = 1500000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .apply_uV = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(dcd_consumers), ++ .consumer_supplies = dcd_consumers, ++ }, ++ ++ /* S3C2410 Memory and IO, Vibrator, RAM, NAND, AMP, SD Card */ ++ [PCF50606_REGULATOR_DCDE] = { ++ .constraints = { ++ .min_uV = 3300000, ++ .max_uV = 3300000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .apply_uV = 1, ++ .always_on = 1, ++ .state_mem = { ++ .enabled = 1, ++ }, ++ }, ++ .num_consumer_supplies = 0, ++ }, ++ /* SoC */ ++ [PCF50606_REGULATOR_DCUD] = { ++ .constraints = { ++ .min_uV = 2100000, ++ .max_uV = 2100000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .apply_uV = 1, ++ .always_on = 1, ++ .state_mem = { ++ .enabled = 1, ++ }, ++ }, ++ .num_consumer_supplies = 0, ++ }, ++ /* Codec, GPS */ ++ [PCF50606_REGULATOR_IOREG] = { ++ .constraints = { ++ .min_uV = 3300000, ++ .max_uV = 3300000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .apply_uV = 1, ++ .always_on = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(ioreg_consumers), ++ .consumer_supplies = ioreg_consumers, ++ ++ }, ++ /* LCM */ ++ [PCF50606_REGULATOR_LPREG] = { ++ .constraints = { ++ .min_uV = 3300000, ++ .max_uV = 3300000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .apply_uV = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(lpreg_consumers), ++ .consumer_supplies = lpreg_consumers, ++ }, ++ }, ++ .probe_done = gta01_pcf_probe_done, ++ .regulator_registered = gta01_pmu_regulator_registered, ++}; ++ ++static void mangle_pmu_pdata_by_system_rev(void) ++{ ++ struct regulator_init_data *reg_init_data; ++ ++ reg_init_data = gta01_pcf_pdata.reg_init_data; ++ ++ switch (S3C_SYSTEM_REV_ATAG) { ++ case GTA01Bv4_SYSTEM_REV: ++ /* FIXME : gta01_pcf_pdata.used_features |= PCF50606_FEAT_ACD; */ ++ break; ++ case GTA01Bv3_SYSTEM_REV: ++ case GTA01Bv2_SYSTEM_REV: ++ reg_init_data[PCF50606_REGULATOR_D3REG].constraints.state_mem.enabled = 1; ++ break; ++ default: ++ break; ++ } ++} ++ ++static void gta01_power_off(void) ++{ ++ pcf50606_reg_write(gta01_pcf, PCF50606_REG_OOCC1, ++ PCF50606_OOCC1_GOSTDBY); ++} ++ ++/* LCD driver info */ ++ ++/* Configuration for 480x640 toppoly TD028TTEC1. ++ * Do not mark this as __initdata or it will break! */ ++static struct s3c2410fb_display gta01_displays[] = { ++ { ++ .type = S3C2410_LCDCON1_TFT, ++ .width = 43, ++ .height = 58, ++ .xres = 480, ++ .yres = 640, ++ .bpp = 16, ++ ++ .pixclock = 40000, /* HCLK/4 */ ++ .left_margin = 104, ++ .right_margin = 8, ++ .hsync_len = 8, ++ .upper_margin = 2, ++ .lower_margin = 16, ++ .vsync_len = 2, ++ .lcdcon5 = S3C2410_LCDCON5_FRM565 | ++ S3C2410_LCDCON5_INVVCLK | ++ S3C2410_LCDCON5_INVVLINE | ++ S3C2410_LCDCON5_INVVFRAME | ++ S3C2410_LCDCON5_PWREN | ++ S3C2410_LCDCON5_HWSWP, ++ }, ++ { ++ .type = S3C2410_LCDCON1_TFT, ++ .width = 43, ++ .height = 58, ++ .xres = 480, ++ .yres = 640, ++ .bpp = 32, ++ ++ .pixclock = 40000, /* HCLK/4 */ ++ .left_margin = 104, ++ .right_margin = 8, ++ .hsync_len = 8, ++ .upper_margin = 2, ++ .lower_margin = 16, ++ .vsync_len = 2, ++ .lcdcon5 = S3C2410_LCDCON5_FRM565 | ++ S3C2410_LCDCON5_INVVCLK | ++ S3C2410_LCDCON5_INVVLINE | ++ S3C2410_LCDCON5_INVVFRAME | ++ S3C2410_LCDCON5_PWREN | ++ S3C2410_LCDCON5_HWSWP, ++ }, ++ { ++ .type = S3C2410_LCDCON1_TFT, ++ .width = 43, ++ .height = 58, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 16, ++ ++ .pixclock = 40000, /* HCLK/4 */ ++ .left_margin = 104, ++ .right_margin = 8, ++ .hsync_len = 8, ++ .upper_margin = 2, ++ .lower_margin = 16, ++ .vsync_len = 2, ++ .lcdcon5 = S3C2410_LCDCON5_FRM565 | ++ S3C2410_LCDCON5_INVVCLK | ++ S3C2410_LCDCON5_INVVLINE | ++ S3C2410_LCDCON5_INVVFRAME | ++ S3C2410_LCDCON5_PWREN | ++ S3C2410_LCDCON5_HWSWP, ++ }, ++}; ++ ++static struct s3c2410fb_mach_info gta01_lcd_cfg __initdata = { ++ .displays = gta01_displays, ++ .num_displays = ARRAY_SIZE(gta01_displays), ++ .default_display = 0, ++ ++ .lpcsel = ((0xCE6) & ~7) | 1<<4, ++}; ++ ++static struct s3c2410_nand_set gta01_nand_sets[] = { ++ [0] = { ++ .name = "neo1973-nand", ++ .nr_chips = 1, ++/* .flags = S3C2410_NAND_BBT,*/ ++ }, ++}; ++ ++static struct s3c2410_platform_nand gta01_nand_info = { ++ .tacls = 20, ++ .twrph0 = 60, ++ .twrph1 = 20, ++ .nr_sets = ARRAY_SIZE(gta01_nand_sets), ++ .sets = gta01_nand_sets, ++}; ++ ++/* MMC */ ++ ++static void gta01_mmc_set_power(unsigned char power_mode, unsigned short vdd) ++{ ++ printk(KERN_DEBUG "mmc_set_power(power_mode=%u, vdd=%u)\n", ++ power_mode, vdd); ++ ++ switch (power_mode) { ++ case MMC_POWER_OFF: ++ gpio_set_value(GTA01_GPIO_SDMMC_ON, 1); ++ break; ++ case MMC_POWER_UP: ++ gpio_set_value(GTA01_GPIO_SDMMC_ON, 0); ++ break; ++ } ++} ++ ++static struct s3c24xx_mci_pdata gta01_mmc_cfg = { ++ .gpio_detect = GTA01_GPIO_nSD_DETECT, ++ .set_power = >a01_mmc_set_power, ++ .ocr_avail = MMC_VDD_32_33, ++}; ++ ++/* UDC */ ++ ++static void gta01_udc_command(enum s3c2410_udc_cmd_e cmd) ++{ ++ printk("udc command: %d\n", cmd); ++ switch (cmd) { ++ case S3C2410_UDC_P_ENABLE: ++ gpio_set_value(GTA01_GPIO_USB_PULLUP, 1); ++ break; ++ case S3C2410_UDC_P_DISABLE: ++ gpio_set_value(GTA01_GPIO_USB_PULLUP, 0); ++ break; ++ default: ++ break; ++ } ++} ++ ++/* use a work queue, since I2C API inherently schedules ++ * and we get called in hardirq context from UDC driver */ ++ ++struct vbus_draw { ++ struct work_struct work; ++ int ma; ++}; ++static struct vbus_draw gta01_udc_vbus_drawer; ++ ++static void __gta01_udc_vbus_draw(struct work_struct *work) ++{ ++ /* ++ * This is a fix to work around boot-time ordering problems if the ++ * s3c2410_udc is initialized before the pcf50606 driver has defined ++ * pcf50606_global ++ */ ++ if (!gta01_pcf) ++ return; ++#if 0 ++ if (gta01_udc_vbus_drawer.ma >= 500) { ++ /* enable fast charge */ ++ printk(KERN_DEBUG "udc: enabling fast charge\n"); ++ pcf50606_charge_fast(gta01_pcf, 1); ++ } else { ++ /* disable fast charge */ ++ printk(KERN_DEBUG "udc: disabling fast charge\n"); ++ pcf50606_charge_fast(gta01_pcf, 0); ++ } ++#endif ++} ++ ++static void gta01_udc_vbus_draw(unsigned int ma) ++{ ++ gta01_udc_vbus_drawer.ma = ma; ++ schedule_work(>a01_udc_vbus_drawer.work); ++} ++ ++static struct s3c2410_udc_mach_info gta01_udc_cfg = { ++ .vbus_draw = gta01_udc_vbus_draw, ++ .udc_command = gta01_udc_command, ++}; ++ ++/* Touchscreen */ ++ ++static struct s3c2410_ts_mach_info gta01_ts_cfg = { ++ .delay = 10000, ++ .presc = 0xff, /* slow as we can go */ ++ .oversampling_shift = 2, ++}; ++ ++/* SPI / Display */ ++ ++const struct jbt6k74_platform_data gta01_jbt6k74_pdata = { ++ .gpio_reset = GTA01_GPIO_LCD_RESET, ++}; ++ ++static struct spi_board_info gta01_spi_board_info[] = { ++ { ++ .modalias = "jbt6k74", ++ .platform_data = >a01_jbt6k74_pdata, ++ .controller_data = (void*)S3C2410_GPG(3), ++ .max_speed_hz = 10 * 1000 * 1000, ++ .bus_num = 1, ++ }, ++}; ++ ++static struct spi_gpio_platform_data spigpio_platform_data = { ++ .sck = S3C2410_GPG(7), ++ .mosi = S3C2410_GPG(6), ++ .miso = S3C2410_GPG(5), ++ .num_chipselect = 1, ++}; ++ ++static struct platform_device gta01_lcm_spigpio_device = { ++ .name = "spi_gpio", ++ .id = 1, ++ .dev = { ++ .platform_data = &spigpio_platform_data, ++ }, ++}; ++ ++/* Backlight */ ++ ++static struct platform_pwm_backlight_data gta01_bl_pdata = { ++ .max_brightness = 0xff, ++ .dft_brightness = 0xff, ++ .pwm_period_ns = 5000000, /* TODO: Tweak this */ ++ .pwm_id = 0, ++}; ++ ++static struct platform_device gta01_bl_device = { ++ .name = "pwm-backlight", ++ .id = -1, ++ .dev = { ++ .platform_data = >a01_bl_pdata, ++ .parent = &s3c_device_timer[0].dev, ++ }, ++}; ++ ++/* Vibrator */ ++static struct led_pwm gta01_vibrator = { ++ .name = "gta01::vibrator", ++ .max_brightness = 0xff, ++ .pwm_period_ns = 500000, /* TODO: Tweak this */ ++ .pwm_id = 3, ++}; ++ ++static struct led_pwm_platform_data gta01_vibrator_pdata = { ++ .num_leds = 1, ++ .leds = >a01_vibrator, ++}; ++ ++static struct platform_device gta01_vibrator_device_bv4 = { ++ .name = "leds_pwm", ++ .id = -1, ++ .dev = { ++ .platform_data = >a01_vibrator_pdata, ++ .parent = &s3c_device_timer[3].dev, ++ } ++}; ++ ++static struct gpio_led gta01_vibrator_bv2 = { ++ .name = "gta01::vibrator", ++ .gpio = GTA01Bv2_GPIO_VIBRATOR_ON, ++ .default_state = LEDS_GPIO_DEFSTATE_OFF, ++}; ++ ++static struct gpio_led_platform_data gta01_vibrator_pdata_bv2 = { ++ .num_leds = 1, ++ .leds = >a01_vibrator_bv2, ++}; ++ ++static struct platform_device gta01_vibrator_device_bv2 = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = >a01_vibrator_pdata_bv2, ++ } ++}; ++ ++static struct platform_device *gta01_vibrator_device = >a01_vibrator_device_bv4; ++/* Buttons */ ++ ++static struct gpio_keys_button gta01_buttons[] = { ++ { ++ .gpio = GTA01_GPIO_AUX_KEY, ++ .code = KEY_PHONE, ++ .desc = "Aux", ++ .type = EV_KEY, ++ .debounce_interval = 100, ++ }, ++ { ++ .gpio = GTA01_GPIO_HOLD_KEY, ++ .code = KEY_PAUSE, ++ .desc = "Hold", ++ .type = EV_KEY, ++ .debounce_interval = 100, ++ }, ++}; ++ ++static struct gpio_keys_platform_data gta01_buttons_pdata = { ++ .buttons = gta01_buttons, ++ .nbuttons = ARRAY_SIZE(gta01_buttons), ++}; ++ ++static struct platform_device gta01_buttons_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = >a01_buttons_pdata, ++ }, ++}; ++ ++/* USB */ ++ ++static struct s3c2410_hcd_info gta01_usb_info = { ++ .port[0] = { ++ .flags = S3C_HCDFLG_USED, ++ }, ++ .port[1] = { ++ .flags = 0, ++ }, ++}; ++ ++static struct platform_device *gta01_devices[] __initdata = { ++ &s3c_device_ohci, ++ &s3c_device_lcd, ++ &s3c_device_wdt, ++ &s3c_device_i2c0, ++ &s3c_device_iis, ++ &s3c_device_sdi, ++ &s3c_device_usbgadget, ++ &s3c_device_nand, ++ &s3c_device_adc, ++ &s3c_device_ts, ++ &s3c_device_timer[0], ++ &s3c_device_timer[3], ++ >a01_bl_device, ++ >a01_buttons_device, ++ >a01_pm_gsm_dev, ++}; ++ ++static struct platform_device *gta01_pmu_child_devices[] __devinitdata = { ++ >a01_lcm_spigpio_device, ++}; ++ ++static void __devinit gta01_pmu_attach_child_devices(struct pcf50606 *pcf) ++{ ++ size_t i; ++ ++ for (i = 0; i < ARRAY_SIZE(gta01_pmu_child_devices); ++i) ++ gta01_pmu_child_devices[i]->dev.parent = pcf->dev; ++ ++ platform_add_devices(gta01_pmu_child_devices, ++ ARRAY_SIZE(gta01_pmu_child_devices)); ++} ++static void __init gta01_map_io(void) ++{ ++ s3c24xx_init_io(gta01_iodesc, ARRAY_SIZE(gta01_iodesc)); ++ s3c24xx_init_clocks(12*1000*1000); ++ s3c24xx_init_uarts(gta01_uartcfgs, ARRAY_SIZE(gta01_uartcfgs)); ++} ++ ++static irqreturn_t gta01_modem_irq(int irq, void *param) ++{ ++ printk(KERN_DEBUG "GSM wakeup interrupt (IRQ %d)\n", irq); ++/* gta_gsm_interrupts++;*/ ++ return IRQ_HANDLED; ++} ++ ++static struct i2c_board_info gta01_i2c_devs[] __initdata = { ++ { ++ I2C_BOARD_INFO("pcf50606", 0x08), ++ .irq = GTA01Bv4_IRQ_PCF50606, ++ .platform_data = >a01_pcf_pdata, ++ }, ++ { ++ I2C_BOARD_INFO("lm4857", 0x7c), ++ }, ++ { ++ I2C_BOARD_INFO("wm8753", 0x1a), ++ }, ++}; ++ ++static int __init gta01_init_gpio(void) ++{ ++ int ret; ++ ++ ret = gpio_request(GTA01_GPIO_USB_PULLUP, "udc pullup"); ++ ++ ret = gpio_direction_output(GTA01_GPIO_USB_PULLUP, 0); ++ ++ ret = gpio_request(GTA01_GPIO_SDMMC_ON, "SD/MMC power"); ++ ++ ret = gpio_direction_output(GTA01_GPIO_SDMMC_ON, 1); ++ ++ s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPB0_TOUT0); ++ if (S3C_SYSTEM_REV_ATAG == GTA01Bv4_SYSTEM_REV) ++ s3c2410_gpio_cfgpin(GTA01Bv4_GPIO_VIBRATOR_ON, S3C2410_GPB3_TOUT3); ++ ++ return ret; ++} ++ ++static void __init gta01_machine_init(void) ++{ ++ int rc; ++ ++ gta01_init_gpio(); ++ ++ if (S3C_SYSTEM_REV_ATAG != GTA01Bv4_SYSTEM_REV) { ++ gta01_vibrator_device = >a01_vibrator_device_bv2; ++ gta01_i2c_devs[0].irq = GTA01Bv2_IRQ_PCF50606; ++ } ++ ++ s3c_ohci_set_platdata(>a01_usb_info); ++ s3c_device_nand.dev.platform_data = >a01_nand_info; ++ s3c_device_sdi.dev.platform_data = >a01_mmc_cfg; ++ ++ s3c24xx_fb_set_platdata(>a01_lcd_cfg); ++ ++ INIT_WORK(>a01_udc_vbus_drawer.work, __gta01_udc_vbus_draw); ++ s3c24xx_udc_set_platdata(>a01_udc_cfg); ++ s3c_i2c0_set_platdata(NULL); ++ ++ s3c24xx_ts_set_platdata(>a01_ts_cfg); ++ ++#if 0 ++ switch (S3C_SYSTEM_REV_ATAG) { ++ case GTA01v3_SYSTEM_REV: ++ case GTA01v4_SYSTEM_REV: ++ /* just use the default (GTA01_IRQ_PCF50606) */ ++ break; ++ case GTA01Bv2_SYSTEM_REV: ++ case GTA01Bv3_SYSTEM_REV: ++ /* just use the default (GTA01_IRQ_PCF50606) */ ++ gta01_led_resources[0].start = ++ gta01_led_resources[0].end = GTA01Bv2_GPIO_VIBRATOR_ON; ++ break; ++ case GTA01Bv4_SYSTEM_REV: ++ gta01_i2c_devs[0].irq = GTA01Bv4_IRQ_PCF50606; ++ gta01_led_resources[0].start = ++ gta01_led_resources[0].end = GTA01Bv4_GPIO_VIBRATOR_ON; ++ break; ++ } ++#endif ++ mangle_pmu_pdata_by_system_rev(); ++ ++ i2c_register_board_info(0, gta01_i2c_devs, ARRAY_SIZE(gta01_i2c_devs)); ++ spi_register_board_info(gta01_spi_board_info, ++ ARRAY_SIZE(gta01_spi_board_info)); ++ ++ platform_add_devices(gta01_devices, ARRAY_SIZE(gta01_devices)); ++/* platform_add_devices(gta01_vibrator_device, 1);*/ ++ ++ s3c_pm_init(); ++ ++ set_irq_type(GTA01_IRQ_MODEM, IRQ_TYPE_EDGE_RISING); ++ rc = request_irq(GTA01_IRQ_MODEM, gta01_modem_irq, IRQF_DISABLED, ++ "modem", NULL); ++ enable_irq_wake(GTA01_IRQ_MODEM); ++ ++ printk(KERN_DEBUG "Enabled GSM wakeup IRQ %d (rc=%d)\n", ++ GTA01_IRQ_MODEM, rc); ++ ++ pm_power_off = >a01_power_off; ++} ++ ++MACHINE_START(NEO1973_GTA01, "GTA01") ++ .boot_params = S3C2410_SDRAM_PA + 0x100, ++ .map_io = gta01_map_io, ++ .init_irq = s3c24xx_init_irq, ++ .init_machine = gta01_machine_init, ++ .timer = &s3c24xx_timer, ++MACHINE_END diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig index a0cb258..17459cb 100644 --- a/arch/arm/mach-s3c2440/Kconfig @@ -41688,6 +38841,180 @@ index 0000000..eb044e8 +MODULE_AUTHOR("Lars-Peter Clausen "); +MODULE_DESCRIPTION("GPIO driver for the PCF50633"); +MODULE_LICENSE("GPL"); +diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig +index b99b8cb..e8c0b55 100644 +--- a/drivers/input/misc/Kconfig ++++ b/drivers/input/misc/Kconfig +@@ -348,6 +348,13 @@ config INPUT_PWM_BEEPER + To compile this driver as a module, choose M here: the module will be + called pwm-beeper. + ++config INPUT_PCF50606_PMU ++ tristate "PCF50606 PMU events" ++ depends on MFD_PCF50606 ++ help ++ Say Y to include support for delivering PMU events via input ++ layer on NXP PCF50606. ++ + config INPUT_GPIO_ROTARY_ENCODER + tristate "Rotary encoders connected to GPIO pins" + depends on GPIOLIB && GENERIC_GPIO +diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile +index 1fe1f6c..4d5cea7 100644 +--- a/drivers/input/misc/Makefile ++++ b/drivers/input/misc/Makefile +@@ -26,6 +26,7 @@ obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o + obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o + obj-$(CONFIG_INPUT_MAX8925_ONKEY) += max8925_onkey.o + obj-$(CONFIG_INPUT_PCAP) += pcap_keys.o ++obj-$(CONFIG_INPUT_PCF50606_PMU) += pcf50606-input.o + obj-$(CONFIG_INPUT_PCF50633_PMU) += pcf50633-input.o + obj-$(CONFIG_INPUT_PCF8574) += pcf8574_keypad.o + obj-$(CONFIG_INPUT_PCSPKR) += pcspkr.o +diff --git a/drivers/input/misc/pcf50606-input.c b/drivers/input/misc/pcf50606-input.c +new file mode 100644 +index 0000000..5078351 +--- /dev/null ++++ b/drivers/input/misc/pcf50606-input.c +@@ -0,0 +1,138 @@ ++/* Philips PCF50606 Input Driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Balaji Rao ++ * All rights reserved. ++ * ++ * Broken down from monstrous PCF50606 driver mainly by ++ * Harald Welte, Matt Hsu, Andy Green and Werner Almesberger ++ * ++ * 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. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define PCF50606_OOCS_ONKEY 0x01 ++#define PCF50606_OOCS_EXTON 0x02 ++ ++#define PCF50606_OOCC2_ONKEYDB_NONE 0x00 ++#define PCF50606_OOCC2_ONKEYDB_14ms 0x01 ++#define PCF50606_OOCC2_ONKEYDB_62ms 0x02 ++#define PCF50606_OOCC2_ONKEYDB_500ms 0x03 ++#define PCF50606_OOCC2_EXTONDB_NONE 0x00 ++#define PCF50606_OOCC2_EXTONDB_14ms 0x04 ++#define PCF50606_OOCC2_EXTONDB_62ms 0x08 ++#define PCF50606_OOCC2_EXTONDB_500ms 0x0c ++ ++#define PCF50606_REG_OOCS 0x01 ++ ++struct pcf50606_input { ++ struct pcf50606 *pcf; ++ struct input_dev *input_dev; ++}; ++ ++static void pcf50606_input_irq(int irq, void *data) ++{ ++ struct pcf50606_input *input; ++ int onkey_released; ++ ++ input = data; ++ onkey_released = pcf50606_reg_read(input->pcf, PCF50606_REG_OOCS) & ++ PCF50606_OOCS_ONKEY; ++ ++ if (irq == PCF50606_IRQ_ONKEYF && !onkey_released) ++ input_report_key(input->input_dev, KEY_POWER, 1); ++ else if (irq == PCF50606_IRQ_ONKEYR && onkey_released) ++ input_report_key(input->input_dev, KEY_POWER, 0); ++ ++ input_sync(input->input_dev); ++} ++ ++static int __devinit pcf50606_input_probe(struct platform_device *pdev) ++{ ++ struct pcf50606_input *input; ++ struct input_dev *input_dev; ++ int ret; ++ ++ input = kzalloc(sizeof(*input), GFP_KERNEL); ++ if (!input) ++ return -ENOMEM; ++ ++ input_dev = input_allocate_device(); ++ if (!input_dev) { ++ kfree(input); ++ return -ENOMEM; ++ } ++ ++ platform_set_drvdata(pdev, input); ++ input->pcf = dev_to_pcf50606(pdev->dev.parent); ++ input->input_dev = input_dev; ++ ++ input_dev->name = "PCF50606 PMU events"; ++ input_dev->id.bustype = BUS_I2C; ++ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR); ++ set_bit(KEY_POWER, input_dev->keybit); ++ ++ ret = input_register_device(input_dev); ++ if (ret) { ++ input_free_device(input_dev); ++ kfree(input); ++ return ret; ++ } ++ pcf50606_register_irq(input->pcf, PCF50606_IRQ_ONKEYR, ++ pcf50606_input_irq, input); ++ pcf50606_register_irq(input->pcf, PCF50606_IRQ_ONKEYF, ++ pcf50606_input_irq, input); ++ ++ return 0; ++} ++ ++static int __devexit pcf50606_input_remove(struct platform_device *pdev) ++{ ++ struct pcf50606_input *input = platform_get_drvdata(pdev); ++ ++ input_unregister_device(input->input_dev); ++ pcf50606_free_irq(input->pcf, PCF50606_IRQ_ONKEYR); ++ pcf50606_free_irq(input->pcf, PCF50606_IRQ_ONKEYF); ++ ++ kfree(input); ++ ++ return 0; ++} ++ ++static struct platform_driver pcf50606_input_driver = { ++ .driver = { ++ .name = "pcf50606-input", ++ }, ++ .probe = pcf50606_input_probe, ++ .remove = __devexit_p(pcf50606_input_remove), ++}; ++ ++static int __init pcf50606_input_init(void) ++{ ++ return platform_driver_register(&pcf50606_input_driver); ++} ++module_init(pcf50606_input_init); ++ ++static void __exit pcf50606_input_exit(void) ++{ ++ platform_driver_unregister(&pcf50606_input_driver); ++} ++module_exit(pcf50606_input_exit); ++ ++MODULE_AUTHOR("Balaji Rao "); ++MODULE_DESCRIPTION("PCF50606 input driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:pcf50606-input"); diff --git a/drivers/input/misc/pcf50633-input.c b/drivers/input/misc/pcf50633-input.c index 9556273..c5d9d40 100644 --- a/drivers/input/misc/pcf50633-input.c @@ -41884,7 +39211,7 @@ index da3fa8d..ee9c708 100644 pwm_free(leds_data[i].pwm); } diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig -index 3a1493b..fbe4ad9 100644 +index 3a1493b..c9f03ea 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -417,6 +417,7 @@ config MFD_WM8994 @@ -41924,8 +39251,31 @@ index 3a1493b..fbe4ad9 100644 config MFD_RDC321X tristate "Support for RDC-R321x southbridge" select MFD_CORE +@@ -606,6 +608,22 @@ config MFD_VX855 + VIA VX855/VX875 south bridge. You will need to enable the vx855_spi + and/or vx855_gpio drivers for this to do anything useful. + ++config MFD_PCF50606 ++ tristate "Support for NXP PCF50606" ++ depends on I2C ++ help ++ Say yes here if you have NXP PCF50606 chip on your board. ++ This core driver provides register access and IRQ handling ++ facilities, and registers devices for the various functions ++ so that function-specific drivers can bind to them. ++ ++config PCF50606_ADC ++ tristate "Support for NXP PCF50606 ADC" ++ depends on MFD_PCF50606 ++ help ++ Say yes here if you want to include support for ADC in the ++ NXP PCF50606 chip. ++ + endif # MFD_SUPPORT + + menu "Multimedia Capabilities Port drivers" diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile -index f54b365..86f5f85 100644 +index f54b365..33f7064 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_MFD_88PM860X) += 88pm860x.o @@ -41936,8 +39286,12 @@ index f54b365..86f5f85 100644 obj-$(CONFIG_HTC_EGPIO) += htc-egpio.o obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o -@@ -65,7 +66,6 @@ obj-$(CONFIG_MFD_MAX8998) += max8998.o max8998-irq.o +@@ -63,9 +64,10 @@ obj-$(CONFIG_MFD_MAX8925) += max8925.o + obj-$(CONFIG_MFD_MAX8998) += max8998.o max8998-irq.o + pcf50633-objs := pcf50633-core.o pcf50633-irq.o ++obj-$(CONFIG_MFD_PCF50606) += pcf50606-core.o ++obj-$(CONFIG_PCF50606_ADC) += pcf50606-adc.o obj-$(CONFIG_MFD_PCF50633) += pcf50633.o obj-$(CONFIG_PCF50633_ADC) += pcf50633-adc.o -obj-$(CONFIG_PCF50633_GPIO) += pcf50633-gpio.o @@ -43249,6 +40603,978 @@ index 0000000..8880263 +MODULE_DESCRIPTION("Smedia Glamo 3362 core/resource driver"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:glamo3362"); +diff --git a/drivers/mfd/pcf50606-adc.c b/drivers/mfd/pcf50606-adc.c +new file mode 100644 +index 0000000..168d3b2 +--- /dev/null ++++ b/drivers/mfd/pcf50606-adc.c +@@ -0,0 +1,278 @@ ++/* Philips PCF50606 ADC Driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Balaji Rao ++ * All rights reserved. ++ * ++ * Broken down from monstrous PCF50606 driver mainly by ++ * Harald Welte, Andy Green, Werner Almesberger and Matt Hsu ++ * ++ * 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. ++ * ++ * NOTE: This driver does not yet support subtractive ADC mode, which means ++ * you can do only one measurement per read request. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++struct pcf50606_adc_request { ++ int mux; ++ int result; ++ void (*callback)(struct pcf50606 *, void *, int); ++ void *callback_param; ++ ++ /* Used in case of sync requests */ ++ struct completion completion; ++ ++}; ++ ++#define PCF50606_MAX_ADC_FIFO_DEPTH 8 ++ ++struct pcf50606_adc { ++ struct pcf50606 *pcf; ++ ++ /* Private stuff */ ++ struct pcf50606_adc_request *queue[PCF50606_MAX_ADC_FIFO_DEPTH]; ++ int queue_head; ++ int queue_tail; ++ struct mutex queue_mutex; ++}; ++ ++static inline struct pcf50606_adc *__to_adc(struct pcf50606 *pcf) ++{ ++ return platform_get_drvdata(pcf->adc_pdev); ++} ++ ++static void adc_setup(struct pcf50606 *pcf, int channel) ++{ ++ channel &= PCF50606_ADCC2_ADCMUX_MASK; ++ ++ /* start ADC conversion of selected channel */ ++ pcf50606_reg_write(pcf, PCF50606_REG_ADCC2, channel | ++ PCF50606_ADCC2_ADCSTART | PCF50606_ADCC2_RES_10BIT); ++ ++} ++ ++static void trigger_next_adc_job_if_any(struct pcf50606 *pcf) ++{ ++ struct pcf50606_adc *adc = __to_adc(pcf); ++ int head; ++ ++ mutex_lock(&adc->queue_mutex); ++ ++ head = adc->queue_head; ++ ++ if (!adc->queue[head]) ++ goto out; ++ ++ adc_setup(pcf, adc->queue[head]->mux); ++out: ++ mutex_unlock(&adc->queue_mutex); ++} ++ ++static int ++adc_enqueue_request(struct pcf50606 *pcf, struct pcf50606_adc_request *req) ++{ ++ struct pcf50606_adc *adc = __to_adc(pcf); ++ int head, tail; ++ ++ mutex_lock(&adc->queue_mutex); ++ head = adc->queue_head; ++ tail = adc->queue_tail; ++ ++ if (adc->queue[tail]) { ++ mutex_unlock(&adc->queue_mutex); ++ return -EBUSY; ++ } ++ ++ adc->queue[tail] = req; ++ ++ adc->queue_tail = ++ (tail + 1) & (PCF50606_MAX_ADC_FIFO_DEPTH - 1); ++ ++ mutex_unlock(&adc->queue_mutex); ++ ++ trigger_next_adc_job_if_any(pcf); ++ ++ return 0; ++} ++ ++static void ++pcf50606_adc_sync_read_callback(struct pcf50606 *pcf, void *param, int result) ++{ ++ struct pcf50606_adc_request *req; ++ ++ /*We know here that the passed param is an adc_request object */ ++ req = (struct pcf50606_adc_request *)param; ++ ++ req->result = result; ++ complete(&req->completion); ++} ++ ++int pcf50606_adc_sync_read(struct pcf50606 *pcf, int mux) ++{ ++ ++ struct pcf50606_adc_request *req; ++ int result; ++ ++ /* req is freed when the result is ready, in irq handler*/ ++ req = kzalloc(sizeof(*req), GFP_KERNEL); ++ if (!req) ++ return -ENOMEM; ++ ++ req->mux = mux; ++ req->callback = pcf50606_adc_sync_read_callback; ++ req->callback_param = req; ++ init_completion(&req->completion); ++ ++ adc_enqueue_request(pcf, req); ++ ++ if (wait_for_completion_timeout(&req->completion, 5 * HZ) == 5 * HZ) { ++ dev_err(pcf->dev, "ADC read timed out \n"); ++ } ++ ++ result = req->result; ++ ++ return result; ++} ++EXPORT_SYMBOL_GPL(pcf50606_adc_sync_read); ++ ++int pcf50606_adc_async_read(struct pcf50606 *pcf, int mux, ++ void (*callback)(struct pcf50606 *, void *, int), ++ void *callback_param) ++{ ++ struct pcf50606_adc_request *req; ++ ++ /* req is freed when the result is ready, in pcf50606_work*/ ++ req = kmalloc(sizeof(*req), GFP_KERNEL); ++ if (!req) ++ return -ENOMEM; ++ ++ req->mux = mux; ++ req->callback = callback; ++ req->callback_param = callback_param; ++ ++ adc_enqueue_request(pcf, req); ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(pcf50606_adc_async_read); ++ ++static int adc_result(struct pcf50606 *pcf) ++{ ++ u16 ret = (pcf50606_reg_read(pcf, PCF50606_REG_ADCS1) << 2) | ++ (pcf50606_reg_read(pcf, PCF50606_REG_ADCS2) & 0x03); ++ ++ dev_dbg(pcf->dev, "adc result = %d\n", ret); ++ ++ return ret; ++} ++ ++static void pcf50606_adc_irq(int irq, void *data) ++{ ++ struct pcf50606_adc *adc = data; ++ struct pcf50606 *pcf = adc->pcf; ++ struct pcf50606_adc_request *req; ++ int head; ++ ++ mutex_lock(&adc->queue_mutex); ++ head = adc->queue_head; ++ ++ req = adc->queue[head]; ++ if (WARN_ON(!req)) { ++ dev_err(pcf->dev, "pcf50606-adc irq: ADC queue empty!\n"); ++ mutex_unlock(&adc->queue_mutex); ++ return; ++ } ++ ++ adc->queue[head] = NULL; ++ adc->queue_head = (head + 1) & ++ (PCF50606_MAX_ADC_FIFO_DEPTH - 1); ++ ++ mutex_unlock(&adc->queue_mutex); ++ ++ req->callback(pcf, req->callback_param, adc_result(pcf)); ++ kfree(req); ++ ++ trigger_next_adc_job_if_any(pcf); ++} ++ ++static int __devinit pcf50606_adc_probe(struct platform_device *pdev) ++{ ++ struct pcf50606_adc *adc; ++ ++ adc = kzalloc(sizeof(*adc), GFP_KERNEL); ++ if (!adc) ++ return -ENOMEM; ++ ++ adc->pcf = dev_to_pcf50606(pdev->dev.parent); ++ platform_set_drvdata(pdev, adc); ++ ++ pcf50606_register_irq(adc->pcf, PCF50606_IRQ_ADCRDY, ++ pcf50606_adc_irq, adc); ++ ++ mutex_init(&adc->queue_mutex); ++ ++ return 0; ++} ++ ++static int __devexit pcf50606_adc_remove(struct platform_device *pdev) ++{ ++ struct pcf50606_adc *adc = platform_get_drvdata(pdev); ++ int i, head; ++ ++ pcf50606_free_irq(adc->pcf, PCF50606_IRQ_ADCRDY); ++ ++ mutex_lock(&adc->queue_mutex); ++ head = adc->queue_head; ++ ++ if (WARN_ON(adc->queue[head])) ++ dev_err(adc->pcf->dev, ++ "adc driver removed with request pending\n"); ++ ++ for (i = 0; i < PCF50606_MAX_ADC_FIFO_DEPTH; i++) ++ kfree(adc->queue[i]); ++ ++ mutex_unlock(&adc->queue_mutex); ++ kfree(adc); ++ ++ return 0; ++} ++ ++struct platform_driver pcf50606_adc_driver = { ++ .driver = { ++ .name = "pcf50606-adc", ++ }, ++ .probe = pcf50606_adc_probe, ++ .remove = __devexit_p(pcf50606_adc_remove), ++}; ++ ++static int __init pcf50606_adc_init(void) ++{ ++ return platform_driver_register(&pcf50606_adc_driver); ++} ++module_init(pcf50606_adc_init); ++ ++static void __exit pcf50606_adc_exit(void) ++{ ++ platform_driver_unregister(&pcf50606_adc_driver); ++} ++module_exit(pcf50606_adc_exit); ++ ++MODULE_AUTHOR("Balaji Rao "); ++MODULE_DESCRIPTION("PCF50606 adc driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:pcf50606-adc"); ++ +diff --git a/drivers/mfd/pcf50606-core.c b/drivers/mfd/pcf50606-core.c +new file mode 100644 +index 0000000..4f35acb +--- /dev/null ++++ b/drivers/mfd/pcf50606-core.c +@@ -0,0 +1,682 @@ ++/* Philips PCF50606 Power Management Unit (PMU) driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Harald Welte ++ * Matt Hsu ++ * 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, or (at your option) any later version. ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++static int __pcf50606_read(struct pcf50606 *pcf, uint8_t reg, int num, uint8_t *data) ++{ ++ int ret; ++ ++ ret = i2c_smbus_read_i2c_block_data(pcf->i2c_client, reg, ++ num, data); ++ if (ret < 0) ++ dev_err(pcf->dev, "Error reading %d regs at %d\n", num, reg); ++ ++ return ret; ++} ++ ++static int __pcf50606_write(struct pcf50606 *pcf, uint8_t reg, int num, uint8_t *data) ++{ ++ int ret; ++ ++ ret = i2c_smbus_write_i2c_block_data(pcf->i2c_client, reg, ++ num, data); ++ if (ret < 0) ++ dev_err(pcf->dev, "Error writing %d regs at %d\n", num, reg); ++ ++ return ret; ++ ++} ++ ++/* Read a block of upto 32 regs */ ++int pcf50606_read_block(struct pcf50606 *pcf, uint8_t reg, ++ int nr_regs, uint8_t *data) ++{ ++ int ret; ++ ++ mutex_lock(&pcf->lock); ++ ret = __pcf50606_read(pcf, reg, nr_regs, data); ++ mutex_unlock(&pcf->lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(pcf50606_read_block); ++ ++/* Write a block of upto 32 regs */ ++int pcf50606_write_block(struct pcf50606 *pcf , uint8_t reg, ++ int nr_regs, uint8_t *data) ++{ ++ int ret; ++ ++ mutex_lock(&pcf->lock); ++ ret = __pcf50606_write(pcf, reg, nr_regs, data); ++ mutex_unlock(&pcf->lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(pcf50606_write_block); ++ ++uint8_t pcf50606_reg_read(struct pcf50606 *pcf, uint8_t reg) ++{ ++ uint8_t val; ++ ++ mutex_lock(&pcf->lock); ++ __pcf50606_read(pcf, reg, 1, &val); ++ mutex_unlock(&pcf->lock); ++ ++ return val; ++} ++EXPORT_SYMBOL_GPL(pcf50606_reg_read); ++ ++int pcf50606_reg_write(struct pcf50606 *pcf, uint8_t reg, uint8_t val) ++{ ++ int ret; ++ ++ mutex_lock(&pcf->lock); ++ ret = __pcf50606_write(pcf, reg, 1, &val); ++ mutex_unlock(&pcf->lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(pcf50606_reg_write); ++ ++int pcf50606_reg_set_bit_mask(struct pcf50606 *pcf, uint8_t reg, uint8_t mask, uint8_t val) ++{ ++ int ret; ++ uint8_t tmp; ++ ++ val &= mask; ++ ++ mutex_lock(&pcf->lock); ++ ret = __pcf50606_read(pcf, reg, 1, &tmp); ++ if (ret < 0) ++ goto out; ++ ++ tmp &= ~mask; ++ tmp |= val; ++ ret = __pcf50606_write(pcf, reg, 1, &tmp); ++ ++out: ++ mutex_unlock(&pcf->lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(pcf50606_reg_set_bit_mask); ++ ++int pcf50606_reg_clear_bits(struct pcf50606 *pcf, uint8_t reg, uint8_t val) ++{ ++ int ret; ++ uint8_t tmp; ++ ++ mutex_lock(&pcf->lock); ++ ret = __pcf50606_read(pcf, reg, 1, &tmp); ++ if (ret < 0) ++ goto out; ++ ++ tmp &= ~val; ++ ret = __pcf50606_write(pcf, reg, 1, &tmp); ++ ++out: ++ mutex_unlock(&pcf->lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(pcf50606_reg_clear_bits); ++ ++/* sysfs attributes */ ++static ssize_t show_dump_regs(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ struct pcf50606 *pcf = dev_get_drvdata(dev); ++ uint8_t dump[16]; ++ int n, n1, idx = 0; ++ char *buf1 = buf; ++ static uint8_t address_no_read[] = { /* must be ascending */ ++ PCF50606_REG_INT1, ++ PCF50606_REG_INT2, ++ PCF50606_REG_INT3, ++ 0 /* terminator */ ++ }; ++ ++ for (n = 0; n < 256; n += sizeof(dump)) { ++ for (n1 = 0; n1 < sizeof(dump); n1++) ++ if (n == address_no_read[idx]) { ++ idx++; ++ dump[n1] = 0x00; ++ } else ++ dump[n1] = pcf50606_reg_read(pcf, n + n1); ++ ++ hex_dump_to_buffer(dump, sizeof(dump), 16, 1, buf1, 128, 0); ++ buf1 += strlen(buf1); ++ *buf1++ = '\n'; ++ *buf1 = '\0'; ++ } ++ ++ return buf1 - buf; ++} ++static DEVICE_ATTR(dump_regs, 0400, show_dump_regs, NULL); ++ ++static ssize_t show_resume_reason(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct pcf50606 *pcf = dev_get_drvdata(dev); ++ int n; ++ ++ n = sprintf(buf, "%02x%02x%02x\n", ++ pcf->resume_reason[0], ++ pcf->resume_reason[1], ++ pcf->resume_reason[2]); ++ ++ return n; ++} ++static DEVICE_ATTR(resume_reason, 0400, show_resume_reason, NULL); ++ ++static struct attribute *pcf_sysfs_entries[] = { ++ &dev_attr_dump_regs.attr, ++ &dev_attr_resume_reason.attr, ++ NULL, ++}; ++ ++static struct attribute_group pcf_attr_group = { ++ .name = NULL, /* put in device directory */ ++ .attrs = pcf_sysfs_entries, ++}; ++ ++int pcf50606_register_irq(struct pcf50606 *pcf, int irq, ++ void (*handler) (int, void *), void *data) ++{ ++ if (irq < 0 || irq > PCF50606_NUM_IRQ || !handler) ++ return -EINVAL; ++ ++ if (WARN_ON(pcf->irq_handler[irq].handler)) ++ return -EBUSY; ++ ++ mutex_lock(&pcf->lock); ++ pcf->irq_handler[irq].handler = handler; ++ pcf->irq_handler[irq].data = data; ++ mutex_unlock(&pcf->lock); ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(pcf50606_register_irq); ++ ++int pcf50606_free_irq(struct pcf50606 *pcf, int irq) ++{ ++ if (irq < 0 || irq > PCF50606_NUM_IRQ) ++ return -EINVAL; ++ ++ mutex_lock(&pcf->lock); ++ pcf->irq_handler[irq].handler = NULL; ++ mutex_unlock(&pcf->lock); ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(pcf50606_free_irq); ++ ++static int __pcf50606_irq_mask_set(struct pcf50606 *pcf, int irq, uint8_t mask) ++{ ++ uint8_t reg, bits, tmp; ++ int ret = 0, idx; ++ ++ idx = irq >> 3; ++ reg = PCF50606_REG_INT1M + idx; ++ bits = 1 << (irq & 0x07); ++ ++ mutex_lock(&pcf->lock); ++ ++ if (mask) { ++ ret = __pcf50606_read(pcf, reg, 1, &tmp); ++ if (ret < 0) ++ goto out; ++ ++ tmp |= bits; ++ ++ ret = __pcf50606_write(pcf, reg, 1, &tmp); ++ if (ret < 0) ++ goto out; ++ ++ pcf->mask_regs[idx] &= ~bits; ++ pcf->mask_regs[idx] |= bits; ++ } else { ++ ret = __pcf50606_read(pcf, reg, 1, &tmp); ++ if (ret < 0) ++ goto out; ++ ++ tmp &= ~bits; ++ ++ ret = __pcf50606_write(pcf, reg, 1, &tmp); ++ if (ret < 0) ++ goto out; ++ ++ pcf->mask_regs[idx] &= ~bits; ++ } ++out: ++ mutex_unlock(&pcf->lock); ++ ++ return ret; ++} ++ ++int pcf50606_irq_mask(struct pcf50606 *pcf, int irq) ++{ ++ dev_dbg(pcf->dev, "Masking IRQ %d\n", irq); ++ ++ return __pcf50606_irq_mask_set(pcf, irq, 1); ++} ++EXPORT_SYMBOL_GPL(pcf50606_irq_mask); ++ ++int pcf50606_irq_unmask(struct pcf50606 *pcf, int irq) ++{ ++ dev_dbg(pcf->dev, "Unmasking IRQ %d\n", irq); ++ ++ return __pcf50606_irq_mask_set(pcf, irq, 0); ++} ++EXPORT_SYMBOL_GPL(pcf50606_irq_unmask); ++ ++int pcf50606_irq_mask_get(struct pcf50606 *pcf, int irq) ++{ ++ uint8_t reg, bits; ++ ++ reg = (irq / 8); ++ bits = (1 << (irq % 8)); ++ ++ return pcf->mask_regs[reg] & bits; ++} ++EXPORT_SYMBOL_GPL(pcf50606_irq_mask_get); ++ ++static void pcf50606_irq_call_handler(struct pcf50606 *pcf, ++ int irq) ++{ ++ if (pcf->irq_handler[irq].handler) ++ pcf->irq_handler[irq].handler(irq, pcf->irq_handler[irq].data); ++} ++ ++#define PCF50606_ONKEY1S_TIMEOUT 8 ++ ++#define PCF50606_REG_MBCS1 0x2c ++ ++static void pcf50606_irq_worker(struct work_struct *work) ++{ ++ int ret; ++ struct pcf50606 *pcf; ++ uint8_t pcf_int[3], charger_status; ++ size_t i, j; ++ ++ pcf = container_of(work, struct pcf50606, irq_work); ++ ++ /* Read the 3 INT regs in one transaction */ ++ ret = pcf50606_read_block(pcf, PCF50606_REG_INT1, ++ ARRAY_SIZE(pcf_int), pcf_int); ++ if (ret != ARRAY_SIZE(pcf_int)) { ++ dev_err(pcf->dev, "Error reading INT registers\n"); ++ ++ /* ++ * If this doesn't ACK the interrupt to the chip, we'll be ++ * called once again as we're level triggered. ++ */ ++ goto out; ++ } ++ ++ /* We immediately read the charger status. We thus make sure ++ * only one of CHGINS/CHGRM interrupt handlers are called */ ++ if (pcf_int[1] & (PCF50606_INT2_CHGINS | PCF50606_INT2_CHGRM)) { ++ charger_status = pcf50606_reg_read(pcf, PCF50606_REG_MBCS1); ++ if (charger_status & (0x1 << 4)) ++ pcf_int[1] &= ~PCF50606_INT2_CHGRM; ++ else ++ pcf_int[1] &= ~PCF50606_INT2_CHGINS; ++ } ++ ++ dev_dbg(pcf->dev, "INT1=0x%02x INT2=0x%02x INT3=0x%02x\n", ++ pcf_int[0], pcf_int[1], pcf_int[2]); ++ ++ /* Some revisions of the chip don't have a 8s standby mode on ++ * ONKEY1S press. We try to manually do it in such cases. */ ++ if (pcf_int[0] & PCF50606_INT1_SECOND && pcf->onkey1s_held) { ++ dev_info(pcf->dev, "ONKEY1S held for %d secs\n", ++ pcf->onkey1s_held); ++ if (pcf->onkey1s_held++ == PCF50606_ONKEY1S_TIMEOUT) ++ if (pcf->pdata->force_shutdown) ++ pcf->pdata->force_shutdown(pcf); ++ } ++ ++ if (pcf_int[0] & PCF50606_INT1_ONKEY1S) { ++ dev_info(pcf->dev, "ONKEY1S held\n"); ++ pcf->onkey1s_held = 1 ; ++ ++ /* Unmask IRQ_SECOND */ ++ pcf50606_reg_clear_bits(pcf, PCF50606_REG_INT1M, ++ PCF50606_INT1_SECOND); ++ ++ /* Unmask IRQ_ONKEYF */ ++ pcf50606_reg_clear_bits(pcf, PCF50606_REG_INT1M, ++ PCF50606_INT1_ONKEYF); ++ } ++ ++ if ((pcf_int[0] & PCF50606_INT1_ONKEYR) && pcf->onkey1s_held) { ++ pcf->onkey1s_held = 0; ++ ++ /* Mask SECOND and ONKEYF interrupts */ ++ if (pcf->mask_regs[0] & PCF50606_INT1_SECOND) ++ pcf50606_reg_set_bit_mask(pcf, ++ PCF50606_REG_INT1M, ++ PCF50606_INT1_SECOND, ++ PCF50606_INT1_SECOND); ++ ++ if (pcf->mask_regs[0] & PCF50606_INT1_ONKEYF) ++ pcf50606_reg_set_bit_mask(pcf, ++ PCF50606_REG_INT1M, ++ PCF50606_INT1_ONKEYF, ++ PCF50606_INT1_ONKEYF); ++ } ++ ++ /* Have we just resumed ? */ ++ if (pcf->is_suspended) { ++ ++ pcf->is_suspended = 0; ++ ++ /* Set the resume reason filtering out non resumers */ ++ for (i = 0; i < ARRAY_SIZE(pcf_int); i++) ++ pcf->resume_reason[i] = pcf_int[i] & ++ pcf->pdata->resumers[i]; ++ ++ /* Make sure we don't pass on ONKEY events to ++ * userspace now */ ++ pcf_int[1] &= ~(PCF50606_INT1_ONKEYR | PCF50606_INT1_ONKEYF); ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(pcf_int); i++) { ++ /* Unset masked interrupts */ ++ pcf_int[i] &= ~pcf->mask_regs[i]; ++ ++ for (j = 0; j < 8 ; j++) ++ if (pcf_int[i] & (1 << j)) ++ pcf50606_irq_call_handler(pcf, (i * 8) + j); ++ } ++ ++out: ++ put_device(pcf->dev); ++ enable_irq(pcf->irq); ++} ++ ++static irqreturn_t pcf50606_irq(int irq, void *data) ++{ ++ struct pcf50606 *pcf = data; ++ ++ get_device(pcf->dev); ++ disable_irq_nosync(pcf->irq); ++ schedule_work(&pcf->irq_work); ++ ++ return IRQ_HANDLED; ++} ++ ++static void ++pcf50606_client_dev_register(struct pcf50606 *pcf, const char *name, ++ struct platform_device **pdev) ++{ ++ int ret; ++ ++ *pdev = platform_device_alloc(name, -1); ++ if (!*pdev) { ++ dev_err(pcf->dev, "Falied to allocate %s\n", name); ++ return; ++ } ++ ++ (*pdev)->dev.parent = pcf->dev; ++ ++ ret = platform_device_add(*pdev); ++ if (ret) { ++ dev_err(pcf->dev, "Failed to register %s: %d\n", name, ret); ++ platform_device_put(*pdev); ++ *pdev = NULL; ++ } ++} ++ ++#ifdef CONFIG_PM ++static int pcf50606_suspend(struct i2c_client *client, pm_message_t state) ++{ ++ int ret; ++ struct pcf50606 *pcf; ++ size_t i; ++ uint8_t res[3]; ++ ++ pcf = i2c_get_clientdata(client); ++ ++ /* Make sure our interrupt handlers are not called ++ * henceforth */ ++ disable_irq(pcf->irq); ++ ++ /* Make sure that any running IRQ worker has quit */ ++ cancel_work_sync(&pcf->irq_work); ++ ++ /* Save the masks */ ++ ret = pcf50606_read_block(pcf, PCF50606_REG_INT1M, ++ ARRAY_SIZE(pcf->suspend_irq_masks), ++ pcf->suspend_irq_masks); ++ if (ret < 0) { ++ dev_err(pcf->dev, "error saving irq masks\n"); ++ goto out; ++ } ++ ++ /* Write wakeup irq masks */ ++ for (i = 0; i < ARRAY_SIZE(res); i++) ++ res[i] = ~pcf->pdata->resumers[i]; ++ ++ ret = pcf50606_write_block(pcf, PCF50606_REG_INT1M, ++ ARRAY_SIZE(res), &res[0]); ++ if (ret < 0) { ++ dev_err(pcf->dev, "error writing wakeup irq masks\n"); ++ goto out; ++ } ++ ++ pcf->is_suspended = 1; ++ ++out: ++ return ret; ++} ++ ++static int pcf50606_resume(struct i2c_client *client) ++{ ++ struct pcf50606 *pcf; ++ int ret; ++ ++ pcf = i2c_get_clientdata(client); ++ ++ /* Write the saved mask registers */ ++ ret = pcf50606_write_block(pcf, PCF50606_REG_INT1M, ++ ARRAY_SIZE(pcf->suspend_irq_masks), ++ pcf->suspend_irq_masks); ++ if (ret < 0) ++ dev_err(pcf->dev, "Error restoring saved suspend masks\n"); ++ ++ get_device(pcf->dev); ++ ++ /* ++ * Clear any pending interrupts and set resume reason if any. ++ * This will leave with enable_irq() ++ */ ++ pcf50606_irq_worker(&pcf->irq_work); ++ ++ return 0; ++} ++#else ++#define pcf50606_suspend NULL ++#define pcf50606_resume NULL ++#endif ++ ++static int pcf50606_probe(struct i2c_client *client, ++ const struct i2c_device_id *ids) ++{ ++ int ret; ++ struct pcf50606 *pcf; ++ struct pcf50606_platform_data *pdata = client->dev.platform_data; ++ int i; ++ uint8_t version, variant; ++ ++ if (!client->irq) { ++ dev_err(&client->dev, "Missing IRQ\n"); ++ return -ENOENT; ++ } ++ ++ pcf = kzalloc(sizeof(*pcf), GFP_KERNEL); ++ if (!pcf) ++ return -ENOMEM; ++ ++ pcf->pdata = pdata; ++ ++ mutex_init(&pcf->lock); ++ ++ i2c_set_clientdata(client, pcf); ++ pcf->dev = &client->dev; ++ pcf->i2c_client = client; ++ pcf->irq = client->irq; ++ ++ INIT_WORK(&pcf->irq_work, pcf50606_irq_worker); ++ ++ version = pcf50606_reg_read(pcf, 0); ++ variant = pcf50606_reg_read(pcf, 1); ++ ++ /* This test is always false, FIX it */ ++ if (version < 0 || variant < 0) { ++ dev_err(pcf->dev, "Unable to probe pcf50606\n"); ++ ret = -ENODEV; ++ goto err; ++ } ++ ++ dev_info(pcf->dev, "Probed device version %d variant %d\n", ++ version, variant); ++ /* Enable all inteerupts except RTC SECOND */ ++ pcf->mask_regs[0] = 0x40; ++ pcf50606_reg_write(pcf, PCF50606_REG_INT1M, pcf->mask_regs[0]); ++ pcf50606_reg_write(pcf, PCF50606_REG_INT2M, 0x00); ++ pcf50606_reg_write(pcf, PCF50606_REG_INT3M, 0x00); ++ ++ ret = request_irq(client->irq, pcf50606_irq, ++ IRQF_TRIGGER_LOW, "pcf50606", pcf); ++ ++ if (ret) { ++ dev_err(pcf->dev, "Failed to request IRQ %d\n", ret); ++ goto err; ++ } ++ ++ pcf50606_client_dev_register(pcf, "pcf50606-input", ++ &pcf->input_pdev); ++ pcf50606_client_dev_register(pcf, "pcf50606-rtc", ++ &pcf->rtc_pdev); ++ pcf50606_client_dev_register(pcf, "pcf50606-mbc", ++ &pcf->mbc_pdev); ++ pcf50606_client_dev_register(pcf, "pcf50606-adc", ++ &pcf->adc_pdev); ++ pcf50606_client_dev_register(pcf, "pcf50606-wdt", ++ &pcf->wdt_pdev); ++ for (i = 0; i < PCF50606_NUM_REGULATORS; i++) { ++ struct platform_device *pdev; ++ ++ pdev = platform_device_alloc("pcf50606-regltr", i); ++ if (!pdev) { ++ dev_err(pcf->dev, "Cannot create regulator %d\n", i); ++ continue; ++ } ++ ++ pdev->dev.parent = pcf->dev; ++ platform_device_add_data(pdev, &pdata->reg_init_data[i], ++ sizeof(pdata->reg_init_data[i])); ++ pcf->regulator_pdev[i] = pdev; ++ ++ platform_device_add(pdev); ++ } ++ ++ if (enable_irq_wake(client->irq) < 0) ++ dev_info(pcf->dev, "IRQ %u cannot be enabled as wake-up source" ++ "in this hardware revision\n", client->irq); ++ ++ ret = sysfs_create_group(&client->dev.kobj, &pcf_attr_group); ++ if (ret) ++ dev_info(pcf->dev, "error creating sysfs entries\n"); ++ ++ if (pdata->probe_done) ++ pdata->probe_done(pcf); ++ ++ return 0; ++ ++err: ++ i2c_set_clientdata(client, NULL); ++ kfree(pcf); ++ return ret; ++} ++ ++static int pcf50606_remove(struct i2c_client *client) ++{ ++ struct pcf50606 *pcf = i2c_get_clientdata(client); ++ unsigned int i; ++ ++ free_irq(pcf->irq, pcf); ++ ++ platform_device_unregister(pcf->input_pdev); ++ platform_device_unregister(pcf->rtc_pdev); ++ platform_device_unregister(pcf->mbc_pdev); ++ platform_device_unregister(pcf->adc_pdev); ++ ++ for (i = 0; i < PCF50606_NUM_REGULATORS; i++) ++ platform_device_unregister(pcf->regulator_pdev[i]); ++ ++ i2c_set_clientdata(client, NULL); ++ kfree(pcf); ++ ++ return 0; ++} ++ ++static struct i2c_device_id pcf50606_id_table[] = { ++ {"pcf50606", 0x08}, ++}; ++ ++static struct i2c_driver pcf50606_driver = { ++ .driver = { ++ .name = "pcf50606", ++ }, ++ .id_table = pcf50606_id_table, ++ .probe = pcf50606_probe, ++ .remove = pcf50606_remove, ++ .suspend = pcf50606_suspend, ++ .resume = pcf50606_resume, ++}; ++ ++static int __init pcf50606_init(void) ++{ ++ return i2c_add_driver(&pcf50606_driver); ++} ++module_init(pcf50606_init); ++ ++static void pcf50606_exit(void) ++{ ++ i2c_del_driver(&pcf50606_driver); ++} ++module_exit(pcf50606_exit); ++ ++MODULE_DESCRIPTION("I2C chip driver for NXP PCF50606 PMU"); ++MODULE_AUTHOR("Harald Welte "); ++MODULE_LICENSE("GPL"); diff --git a/drivers/mfd/pcf50633-adc.c b/drivers/mfd/pcf50633-adc.c index aed0d2a..54a78c1 100644 --- a/drivers/mfd/pcf50633-adc.c @@ -43378,7 +41704,7 @@ index aed0d2a..54a78c1 100644 mutex_lock(&adc->queue_mutex); head = adc->queue_head; diff --git a/drivers/mfd/pcf50633-core.c b/drivers/mfd/pcf50633-core.c -index 501ce13..0fe84c9 100644 +index 501ce13..f9ad427 100644 --- a/drivers/mfd/pcf50633-core.c +++ b/drivers/mfd/pcf50633-core.c @@ -23,6 +23,8 @@ @@ -43390,7 +41716,7 @@ index 501ce13..0fe84c9 100644 #include static int __pcf50633_read(struct pcf50633 *pcf, u8 reg, int num, u8 *data) -@@ -208,55 +210,190 @@ static struct attribute_group pcf_attr_group = { +@@ -208,55 +210,192 @@ static struct attribute_group pcf_attr_group = { .attrs = pcf_sysfs_entries, }; @@ -43454,11 +41780,13 @@ index 501ce13..0fe84c9 100644 +#define PCF50633_CELL(_name) \ + { \ + .name = _name, \ ++ .id = -1, \ + } \ + +#define PCF50633_CELL_RESOURCES(_name, _resources) \ + { \ + .name = _name, \ ++ .id = -1, \ + .num_resources = ARRAY_SIZE(_resources), \ + .resources = _resources, \ + } \ @@ -43612,7 +41940,7 @@ index 501ce13..0fe84c9 100644 int version, variant; if (!client->irq) { -@@ -289,34 +426,11 @@ static int __devinit pcf50633_probe(struct i2c_client *client, +@@ -289,34 +428,11 @@ static int __devinit pcf50633_probe(struct i2c_client *client, pcf50633_irq_init(pcf, client->irq); @@ -43652,7 +41980,7 @@ index 501ce13..0fe84c9 100644 } ret = sysfs_create_group(&client->dev.kobj, &pcf_attr_group); -@@ -337,19 +451,11 @@ err_free: +@@ -337,19 +453,11 @@ err_free: static int __devexit pcf50633_remove(struct i2c_client *client) { struct pcf50633 *pcf = i2c_get_clientdata(client); @@ -43673,7 +42001,7 @@ index 501ce13..0fe84c9 100644 kfree(pcf); -@@ -364,12 +470,11 @@ static struct i2c_device_id pcf50633_id_table[] = { +@@ -364,12 +472,11 @@ static struct i2c_device_id pcf50633_id_table[] = { static struct i2c_driver pcf50633_driver = { .driver = { .name = "pcf50633", @@ -45038,7 +43366,7 @@ index 33d832d..cb5d2c0 100644 chip->ecc.correct = s3c2410_nand_correct_data; chip->ecc.mode = NAND_ECC_HW; diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig -index 60d83d9..dc1792e 100644 +index 60d83d9..f95b1c3 100644 --- a/drivers/power/Kconfig +++ b/drivers/power/Kconfig @@ -117,10 +117,25 @@ config BATTERY_BQ20Z75 @@ -45067,7 +43395,20 @@ index 60d83d9..dc1792e 100644 config BATTERY_DA9030 tristate "DA9030 battery driver" depends on PMIC_DA903X -@@ -185,4 +200,10 @@ config CHARGER_TWL4030 +@@ -148,6 +163,12 @@ config BATTERY_S3C_ADC + help + Say Y here to enable support for iPAQ h1930/h1940/rx1950 battery + ++config CHARGER_PCF50606 ++ tristate "Support for NXP PCF50606 MBC" ++ depends on MFD_PCF50606 ++ help ++ Say Y to include support for NXP PCF50606 Battery Charger. ++ + config CHARGER_PCF50633 + tristate "NXP PCF50633 MBC" + depends on MFD_PCF50633 +@@ -185,4 +206,10 @@ config CHARGER_TWL4030 help Say Y here to enable support for TWL4030 Battery Charge Interface. @@ -45079,10 +43420,16 @@ index 60d83d9..dc1792e 100644 + endif # POWER_SUPPLY diff --git a/drivers/power/Makefile b/drivers/power/Makefile -index c75772e..021eab9 100644 +index c75772e..9c49477 100644 --- a/drivers/power/Makefile +++ b/drivers/power/Makefile -@@ -32,3 +32,4 @@ obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o +@@ -27,8 +27,10 @@ obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o + obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o + obj-$(CONFIG_BATTERY_Z2) += z2_battery.o + obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o ++obj-$(CONFIG_CHARGER_PCF50606) += pcf50606-charger.o + obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o + obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o obj-$(CONFIG_BATTERY_INTEL_MID) += intel_mid_battery.o obj-$(CONFIG_CHARGER_ISP1704) += isp1704_charger.o obj-$(CONFIG_CHARGER_TWL4030) += twl4030_charger.o @@ -45891,6 +44238,273 @@ index eff0273..99841f5 100644 } module_exit(bq27x00_battery_exit); +diff --git a/drivers/power/pcf50606-charger.c b/drivers/power/pcf50606-charger.c +new file mode 100644 +index 0000000..f67e8b5 +--- /dev/null ++++ b/drivers/power/pcf50606-charger.c +@@ -0,0 +1,261 @@ ++/* NXP PCF50606 Main Battery Charger Driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Balaji Rao ++ * All rights reserved. ++ * ++ * Broken down from monstrous PCF50606 driver mainly by ++ * Harald Welte, Andy Green and Werner Almesberger ++ * ++ * 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. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++struct pcf50606_mbc { ++ struct pcf50606 *pcf; ++ ++ int charger_online; ++ struct power_supply charger; ++}; ++ ++int pcf50606_charge_fast(struct pcf50606 *pcf, int on) ++{ ++ struct pcf50606_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev); ++ ++ /* ++ * This is a fix to work around boot-time ordering problems if ++ * the s3c2410_udc is initialized before the pcf50606 mbc is ++ * ready. ++ */ ++ if (!mbc) ++ return -ENODEV; ++ ++ if (on) { ++ pcf50606_reg_set_bit_mask(pcf, PCF50606_REG_MBCC1, ++ PCF50606_MBCC1_AUTOFST, ++ PCF50606_MBCC1_AUTOFST);\ ++ mbc->charger_online = 1; ++ } else { ++ /* disable automatic fast-charge */ ++ pcf50606_reg_clear_bits(pcf, PCF50606_REG_MBCC1, ++ PCF50606_MBCC1_AUTOFST); ++ /* switch to idle mode to abort existing charge process */ ++ pcf50606_reg_set_bit_mask(pcf, PCF50606_REG_MBCC1, ++ PCF50606_MBCC1_CHGMOD_MASK, ++ PCF50606_MBCC1_CHGMOD_IDLE); ++ mbc->charger_online = 0; ++ } ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(pcf50606_charge_fast); ++ ++static const char *charge_mode_descs[] = { ++ "qualification", ++ "pre", ++ "trickle", ++ "fast_cccv", ++ "idle", ++}; ++ ++static ssize_t ++show_charge_mode(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ struct pcf50606_mbc *mbc = dev_get_drvdata(dev); ++ const char **desc = charge_mode_descs; ++ ++ uint8_t charge_mode = pcf50606_reg_read(mbc->pcf, PCF50606_REG_MBCC1); ++ charge_mode &= PCF50606_MBCC1_CHGMOD_MASK; ++ switch (charge_mode) { ++ case PCF50606_MBCC1_CHGMOD_IDLE: ++ ++desc; ++ case PCF50606_MBCC1_CHGMOD_FAST_CCCV: ++ ++desc; ++ case PCF50606_MBCC1_CHGMOD_TRICKLE: ++ ++desc; ++ case PCF50606_MBCC1_CHGMOD_PRE: ++ ++desc; ++ case PCF50606_MBCC1_CHGMOD_QUAL: ++ return sprintf(buf, "%s\n", *desc); ++ break; ++ default: ++ return sprintf(buf, "unkown: %d\n", charge_mode); ++ break; ++ } ++} ++ ++static ssize_t set_charge_mode(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ struct pcf50606_mbc *mbc = dev_get_drvdata(dev); ++ uint8_t mbcc1 = pcf50606_reg_read(mbc->pcf, PCF50606_REG_MBCC1); ++ ++ mbcc1 &= ~PCF50606_MBCC1_CHGMOD_MASK; ++ ++ if (!strcmp(buf, "qualification")) ++ mbcc1 |= PCF50606_MBCC1_CHGMOD_QUAL; ++ else if (!strcmp(buf, "pre")) ++ mbcc1 |= PCF50606_MBCC1_CHGMOD_PRE; ++ else if (!strcmp(buf, "trickle")) ++ mbcc1 |= PCF50606_MBCC1_CHGMOD_TRICKLE; ++ else if (!strcmp(buf, "fast_cccv")) ++ mbcc1 |= PCF50606_MBCC1_CHGMOD_FAST_CCCV; ++ /* We don't allow the other fast modes for security reasons */ ++ else if (!strcmp(buf, "idle")) ++ mbcc1 |= PCF50606_MBCC1_CHGMOD_IDLE; ++ else ++ return -EINVAL; ++ ++ pcf50606_reg_write(mbc->pcf, PCF50606_REG_MBCC1, mbcc1); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(charge_mode, S_IRUGO | S_IWUSR, show_charge_mode, set_charge_mode); ++ ++static void ++pcf50606_mbc_irq_handler(int irq, void *data) ++{ ++ struct pcf50606_mbc *mbc = data; ++ ++ power_supply_changed(&mbc->charger); ++ ++ if (mbc->pcf->pdata->mbc_event_callback) ++ mbc->pcf->pdata->mbc_event_callback(mbc->pcf, irq); ++} ++ ++static int charger_get_property(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ struct pcf50606_mbc *mbc = container_of(psy, struct pcf50606_mbc, charger); ++ int ret = 0; ++ ++ switch (psp) { ++ case POWER_SUPPLY_PROP_ONLINE: ++ val->intval = mbc->charger_online; ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ return ret; ++} ++ ++static enum power_supply_property power_props[] = { ++ POWER_SUPPLY_PROP_ONLINE, ++}; ++ ++static const uint8_t mbc_irq_handlers[] = { ++ PCF50606_IRQ_CHGINS, ++ PCF50606_IRQ_CHGRM, ++ PCF50606_IRQ_CHGFOK, ++ PCF50606_IRQ_CHGERR, ++ PCF50606_IRQ_CHGFRDY, ++ PCF50606_IRQ_CHGPROT, ++}; ++ ++static int __devinit pcf50606_mbc_probe(struct platform_device *pdev) ++{ ++ struct pcf50606_mbc *mbc; ++ int ret; ++ size_t i; ++ uint8_t oocs; ++ ++ mbc = kzalloc(sizeof(*mbc), GFP_KERNEL); ++ if (!mbc) ++ return -ENOMEM; ++ ++ mbc->pcf = dev_to_pcf50606(pdev->dev.parent); ++ ++ mbc->charger.name = "charger"; ++ mbc->charger.type = POWER_SUPPLY_TYPE_MAINS; ++ mbc->charger.properties = power_props; ++ mbc->charger.num_properties = ARRAY_SIZE(power_props); ++ mbc->charger.get_property = &charger_get_property; ++ mbc->charger.supplied_to = mbc->pcf->pdata->batteries; ++ mbc->charger.num_supplicants = mbc->pcf->pdata->num_batteries; ++ ++ ret = power_supply_register(&pdev->dev, &mbc->charger); ++ if (ret) { ++ dev_err(mbc->pcf->dev, "failed to register charger\n"); ++ kfree(mbc); ++ return ret; ++ } ++ ++ /* Set up IRQ handlers */ ++ for (i = 0; i < ARRAY_SIZE(mbc_irq_handlers); i++) ++ pcf50606_register_irq(mbc->pcf, mbc_irq_handlers[i], ++ pcf50606_mbc_irq_handler, mbc); ++ ++ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_charge_mode.attr); ++ if (ret) ++ dev_err(mbc->pcf->dev, "failed to create sysfs entries\n"); ++ ++ oocs = pcf50606_reg_read(mbc->pcf, PCF50606_REG_OOCS); ++ if (oocs & PCF50606_OOCS_CHGOK) ++ pcf50606_mbc_irq_handler(PCF50606_IRQ_CHGINS, mbc); ++ ++ platform_set_drvdata(pdev, mbc); ++ ++ return 0; ++} ++ ++static int __devexit pcf50606_mbc_remove(struct platform_device *pdev) ++{ ++ struct pcf50606_mbc *mbc = platform_get_drvdata(pdev); ++ size_t i; ++ ++ /* Remove IRQ handlers */ ++ for (i = 0; i < ARRAY_SIZE(mbc_irq_handlers); i++) ++ pcf50606_free_irq(mbc->pcf, mbc_irq_handlers[i]); ++ ++ power_supply_unregister(&mbc->charger); ++ ++ platform_set_drvdata(pdev, NULL); ++ kfree(mbc); ++ ++ return 0; ++} ++ ++static struct platform_driver pcf50606_mbc_driver = { ++ .driver = { ++ .name = "pcf50606-mbc", ++ .owner = THIS_MODULE, ++ }, ++ .probe = pcf50606_mbc_probe, ++ .remove = __devexit_p(pcf50606_mbc_remove), ++}; ++ ++static int __init pcf50606_mbc_init(void) ++{ ++ return platform_driver_register(&pcf50606_mbc_driver); ++} ++module_init(pcf50606_mbc_init); ++ ++static void __exit pcf50606_mbc_exit(void) ++{ ++ platform_driver_unregister(&pcf50606_mbc_driver); ++} ++module_exit(pcf50606_mbc_exit); ++ ++MODULE_AUTHOR("Balaji Rao "); ++MODULE_DESCRIPTION("PCF50606 mbc driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:pcf50606-mbc"); diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/pcf50633-charger.c index 4fa52e1..4d16869 100644 --- a/drivers/power/pcf50633-charger.c @@ -46170,167 +44784,560 @@ index 4fa52e1..4d16869 100644 - pcf50633_mbc_irq_handler(PCF50633_IRQ_ADPINS, mbc); + pcf50633_mbc_irq_handler(mbc->irqs[PCF50633_MBC_IRQ_ADPINS], mbc); + -+ pcf->mbc = mbc; - - return 0; ++ pcf->mbc = mbc; + + return 0; ++ ++err_free_irq: ++ for (--i; i >= 0; --i) ++ free_irq(mbc->irqs[i], mbc); ++ sysfs_remove_group(&pdev->dev.kobj, &mbc_attr_group); ++err_unregister_ac: ++ power_supply_unregister(&mbc->ac); ++err_unregister_usb: ++ power_supply_unregister(&mbc->usb); ++err_unregister_adapter: ++ power_supply_unregister(&mbc->adapter); ++err_free: ++ kfree(mbc); ++ ++ return ret; + } + + static int __devexit pcf50633_mbc_remove(struct platform_device *pdev) +@@ -452,9 +516,11 @@ static int __devexit pcf50633_mbc_remove(struct platform_device *pdev) + struct pcf50633_mbc *mbc = platform_get_drvdata(pdev); + int i; + ++ mbc->pcf->mbc = NULL; ++ + /* Remove IRQ handlers */ +- for (i = 0; i < ARRAY_SIZE(mbc_irq_handlers); i++) +- pcf50633_free_irq(mbc->pcf, mbc_irq_handlers[i]); ++ for (i = PCF50633_MBC_NUM_IRQS - 1; i >= 0; --i) ++ free_irq(mbc->irqs[i], mbc); + + sysfs_remove_group(&pdev->dev.kobj, &mbc_attr_group); + power_supply_unregister(&mbc->usb); +diff --git a/drivers/power/platform_battery.c b/drivers/power/platform_battery.c +new file mode 100644 +index 0000000..a5c9f35 +--- /dev/null ++++ b/drivers/power/platform_battery.c +@@ -0,0 +1,120 @@ ++/* ++ * Driver for platform battery ++ * ++ * Copyright (c) Paul Fertser ++ * Inspired by Balaji Rao ++ * ++ * This driver can be used for dumb batteries when all knowledge about ++ * their state belongs to the platform that does necessary ADC readings, ++ * conversions, guessimations etc. ++ * ++ * Use consistent with the GNU GPL is permitted, provided that this ++ * copyright notice is preserved in its entirety in all copies and derived ++ * works. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++struct platform_battery { ++ struct power_supply psy; ++ struct platform_bat_platform_data *pdata; ++}; ++ ++static int platform_bat_get_property(struct power_supply *psy, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ struct platform_battery *bat = ++ container_of(psy, struct platform_battery, psy); ++ size_t i; ++ int present=1; ++ ++ if (bat->pdata->is_present) ++ present = bat->pdata->is_present(); ++ ++ if (psp != POWER_SUPPLY_PROP_PRESENT && !present) ++ return -ENODEV; ++ ++ for (i = 0; i < psy->num_properties; i++) ++ if (psy->properties[i] == psp) { ++ val->intval = bat->pdata->get_property[i](); ++ return 0; ++ } ++ ++ return -EINVAL; ++} ++ ++static void platform_bat_ext_changed(struct power_supply *psy) ++{ ++ struct platform_battery *bat = ++ container_of(psy, struct platform_battery, psy); ++ power_supply_changed(&bat->psy); ++} ++ ++static int platform_battery_probe(struct platform_device *pdev) ++{ ++ struct platform_battery *platform_bat; ++ struct platform_bat_platform_data *pdata = ++ (struct platform_bat_platform_data *)pdev->dev.platform_data; ++ ++ platform_bat = kzalloc(sizeof(*platform_bat), GFP_KERNEL); ++ if (!platform_bat) ++ return -ENOMEM; ++ ++ if (pdata->name) ++ platform_bat->psy.name = pdata->name; ++ else ++ platform_bat->psy.name = dev_name(&pdev->dev); ++ platform_bat->psy.type = POWER_SUPPLY_TYPE_BATTERY; ++ platform_bat->psy.properties = pdata->properties; ++ platform_bat->psy.num_properties = pdata->num_properties; ++ platform_bat->psy.get_property = platform_bat_get_property; ++ platform_bat->psy.external_power_changed = platform_bat_ext_changed; ++ ++ platform_bat->pdata = pdata; ++ platform_set_drvdata(pdev, platform_bat); ++ power_supply_register(&pdev->dev, &platform_bat->psy); ++ ++ return 0; ++} ++ ++static int platform_battery_remove(struct platform_device *pdev) ++{ ++ struct platform_battery *bat = platform_get_drvdata(pdev); ++ ++ power_supply_unregister(&bat->psy); ++ kfree(bat); ++ ++ return 0; ++} ++ ++static struct platform_driver platform_battery_driver = { ++ .driver = { ++ .name = "platform_battery", ++ }, ++ .probe = platform_battery_probe, ++ .remove = platform_battery_remove, ++}; ++ ++static int __init platform_battery_init(void) ++{ ++ return platform_driver_register(&platform_battery_driver); ++} ++module_init(platform_battery_init); ++ ++static void __exit platform_battery_exit(void) ++{ ++ platform_driver_unregister(&platform_battery_driver); ++} ++module_exit(platform_battery_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Paul Fertser "); ++MODULE_DESCRIPTION("platform battery driver"); +diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig +index dd30e88..a618a0a 100644 +--- a/drivers/regulator/Kconfig ++++ b/drivers/regulator/Kconfig +@@ -250,5 +250,12 @@ config REGULATOR_TPS6586X + help + This driver supports TPS6586X voltage regulator chips. + ++config REGULATOR_PCF50606 ++ bool "PCF50606 regulator driver" ++ depends on MFD_PCF50606 ++ help ++ Say Y here to support the voltage regulators and convertors ++ on PCF50606 ++ + endif + +diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile +index bff8157..111c09c 100644 +--- a/drivers/regulator/Makefile ++++ b/drivers/regulator/Makefile +@@ -27,6 +27,7 @@ obj-$(CONFIG_REGULATOR_WM8400) += wm8400-regulator.o + obj-$(CONFIG_REGULATOR_WM8994) += wm8994-regulator.o + obj-$(CONFIG_REGULATOR_TPS6586X) += tps6586x-regulator.o + obj-$(CONFIG_REGULATOR_DA903X) += da903x.o ++obj-$(CONFIG_REGULATOR_PCF50606) += pcf50606-regulator.o + obj-$(CONFIG_REGULATOR_PCF50633) += pcf50633-regulator.o + obj-$(CONFIG_REGULATOR_PCAP) += pcap-regulator.o + obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o +diff --git a/drivers/regulator/pcf50606-regulator.c b/drivers/regulator/pcf50606-regulator.c +new file mode 100644 +index 0000000..ae3193f +--- /dev/null ++++ b/drivers/regulator/pcf50606-regulator.c +@@ -0,0 +1,358 @@ ++/* NXP PCF50606 PMIC Driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Balaji Rao ++ * All rights reserved. ++ * ++ * Broken down from monstrous PCF50606 driver mainly by ++ * Harald Welte and Andy Green and Werner Almesberger ++ * ++ * 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. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#define PCF50606_REGULATOR(_name, _id) \ ++ { \ ++ .name = _name, \ ++ .id = _id, \ ++ .ops = &pcf50606_regulator_ops, \ ++ .type = REGULATOR_VOLTAGE, \ ++ .owner = THIS_MODULE, \ ++ } ++ ++static const uint8_t pcf50606_regulator_registers[PCF50606_NUM_REGULATORS] = { ++ [PCF50606_REGULATOR_DCD] = PCF50606_REG_DCDC1, ++ [PCF50606_REGULATOR_DCDE] = PCF50606_REG_DCDEC1, ++ [PCF50606_REGULATOR_DCUD] = PCF50606_REG_DCUDC1, ++ [PCF50606_REGULATOR_D1REG] = PCF50606_REG_D1REGC1, ++ [PCF50606_REGULATOR_D2REG] = PCF50606_REG_D2REGC1, ++ [PCF50606_REGULATOR_D3REG] = PCF50606_REG_D3REGC1, ++ [PCF50606_REGULATOR_LPREG] = PCF50606_REG_LPREGC1, ++ [PCF50606_REGULATOR_IOREG] = PCF50606_REG_IOREGC, ++}; ++ ++static uint8_t dcudc_voltage(unsigned int millivolts) ++{ ++ if (millivolts <= 900) ++ return 0; ++ else if (millivolts <= 3300) ++ return (millivolts - 900) / 300; ++ else if (millivolts < 4000) ++ return 0x0f; ++ else if (millivolts <= 5500) ++ return (millivolts - 4000) / 100; ++ ++ return 0x1f; ++} ++ ++static unsigned int dcudc_2voltage(uint8_t bits) ++{ ++ bits &= 0x1f; ++ if (bits < 0x08) ++ return 900 + bits * 300; ++ else if (bits < 0x10) ++ return 3300; ++ else ++ return 4000 + (bits & 0xf) * 100; ++} ++ ++static uint8_t dcdec_voltage(unsigned int millivolts) ++{ ++ if (millivolts < 900) ++ return 0; ++ else if (millivolts > 3300) ++ return 0x0f; ++ ++ return (millivolts - 900) / 300; ++} ++ ++static unsigned int dcdec_2voltage(uint8_t bits) ++{ ++ bits &= 0x0f; ++ return 900 + bits * 300; ++} ++ ++static uint8_t dcdc_voltage(unsigned int millivolts) ++{ ++ if (millivolts < 900) ++ return 0; ++ else if (millivolts > 3600) ++ return 0x1f; ++ ++ if (millivolts < 1500) ++ return (millivolts - 900) / 25; ++ else ++ return 0x18 + (millivolts - 1500) / 300; ++} ++ ++static unsigned int dcdc_2voltage(uint8_t bits) ++{ ++ bits &= 0x1f; ++ if ((bits & 0x18) == 0x18) ++ return 1500 + ((bits & 0x7) * 300); ++ else ++ return 900 + (bits * 25); ++} ++ ++static uint8_t dx_voltage(unsigned int millivolts) ++{ ++ if (millivolts < 900) ++ return 0; ++ else if (millivolts > 3300) ++ return 0x18; ++ ++ return (millivolts - 900) / 100; ++} ++ ++static unsigned int dx_2voltage(uint8_t bits) ++{ ++ bits &= 0x1f; ++ return 900 + (bits * 100); ++} ++ ++static int pcf50606_regulator_set_voltage(struct regulator_dev *rdev, ++ int min_uV, int max_uV) ++{ ++ struct pcf50606 *pcf; ++ int regulator_id, millivolts; ++ uint8_t volt_bits, regnr; ++ ++ pcf = rdev_get_drvdata(rdev); ++ ++ regulator_id = rdev_get_id(rdev); ++ ++ millivolts = min_uV / 1000; ++ ++ switch (regulator_id) { ++ case PCF50606_REGULATOR_DCD: ++ volt_bits = dcdc_voltage(millivolts); ++ regnr = PCF50606_REG_DCDC1; ++ break; ++ case PCF50606_REGULATOR_DCDE: ++ volt_bits = dcdec_voltage(millivolts); ++ regnr = PCF50606_REG_DCDEC1; ++ break; ++ case PCF50606_REGULATOR_DCUD: ++ volt_bits = dcudc_voltage(millivolts); ++ regnr = PCF50606_REG_DCUDC1; ++ break; ++ case PCF50606_REGULATOR_D1REG: ++ case PCF50606_REGULATOR_D2REG: ++ case PCF50606_REGULATOR_D3REG: ++ regnr = PCF50606_REG_D1REGC1 + ++ (regulator_id - PCF50606_REGULATOR_D1REG); ++ volt_bits = dx_voltage(millivolts); ++ break; ++ case PCF50606_REGULATOR_LPREG: ++ volt_bits = dx_voltage(millivolts); ++ regnr = PCF50606_REG_LPREGC1; ++ break; ++ case PCF50606_REGULATOR_IOREG: ++ if (millivolts < 1800) ++ return -EINVAL; ++ volt_bits = dx_voltage(millivolts); ++ regnr = PCF50606_REG_IOREGC; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ return pcf50606_reg_set_bit_mask(pcf, regnr, 0x1f, volt_bits); ++} + -+err_free_irq: -+ for (--i; i >= 0; --i) -+ free_irq(mbc->irqs[i], mbc); -+ sysfs_remove_group(&pdev->dev.kobj, &mbc_attr_group); -+err_unregister_ac: -+ power_supply_unregister(&mbc->ac); -+err_unregister_usb: -+ power_supply_unregister(&mbc->usb); -+err_unregister_adapter: -+ power_supply_unregister(&mbc->adapter); -+err_free: -+ kfree(mbc); ++static int pcf50606_regulator_get_voltage(struct regulator_dev *rdev) ++{ ++ struct pcf50606 *pcf; ++ uint8_t volt_bits, regnr; ++ int regulator_id; ++ int voltage; + -+ return ret; - } - - static int __devexit pcf50633_mbc_remove(struct platform_device *pdev) -@@ -452,9 +516,11 @@ static int __devexit pcf50633_mbc_remove(struct platform_device *pdev) - struct pcf50633_mbc *mbc = platform_get_drvdata(pdev); - int i; - -+ mbc->pcf->mbc = NULL; ++ pcf = rdev_get_drvdata(rdev); + - /* Remove IRQ handlers */ -- for (i = 0; i < ARRAY_SIZE(mbc_irq_handlers); i++) -- pcf50633_free_irq(mbc->pcf, mbc_irq_handlers[i]); -+ for (i = PCF50633_MBC_NUM_IRQS - 1; i >= 0; --i) -+ free_irq(mbc->irqs[i], mbc); - - sysfs_remove_group(&pdev->dev.kobj, &mbc_attr_group); - power_supply_unregister(&mbc->usb); -diff --git a/drivers/power/platform_battery.c b/drivers/power/platform_battery.c -new file mode 100644 -index 0000000..a5c9f35 ---- /dev/null -+++ b/drivers/power/platform_battery.c -@@ -0,0 +1,120 @@ -+/* -+ * Driver for platform battery -+ * -+ * Copyright (c) Paul Fertser -+ * Inspired by Balaji Rao -+ * -+ * This driver can be used for dumb batteries when all knowledge about -+ * their state belongs to the platform that does necessary ADC readings, -+ * conversions, guessimations etc. -+ * -+ * Use consistent with the GNU GPL is permitted, provided that this -+ * copyright notice is preserved in its entirety in all copies and derived -+ * works. -+ */ ++ regulator_id = rdev_get_id(rdev); + -+#include -+#include -+#include -+#include -+#include ++ switch (regulator_id) { ++ case PCF50606_REGULATOR_DCD: ++ volt_bits = pcf50606_reg_read(pcf, PCF50606_REG_DCDC1) & 0x1f; ++ voltage = dcdc_2voltage(volt_bits); ++ break; ++ case PCF50606_REGULATOR_DCDE: ++ volt_bits = pcf50606_reg_read(pcf, PCF50606_REG_DCDEC1) & 0x0f; ++ voltage = dcdec_2voltage(volt_bits); ++ break; ++ case PCF50606_REGULATOR_DCUD: ++ volt_bits = pcf50606_reg_read(pcf, PCF50606_REG_DCUDC1) & 0x1f; ++ voltage = dcudc_2voltage(volt_bits); ++ break; ++ case PCF50606_REGULATOR_D1REG: ++ case PCF50606_REGULATOR_D2REG: ++ case PCF50606_REGULATOR_D3REG: ++ regnr = PCF50606_REG_D1REGC1 + (regulator_id - PCF50606_REGULATOR_D1REG); ++ volt_bits = pcf50606_reg_read(pcf, regnr) & 0x1f; ++ if (volt_bits > 0x18) ++ volt_bits = 0x18; ++ voltage = dx_2voltage(volt_bits); ++ break; ++ case PCF50606_REGULATOR_LPREG: ++ volt_bits = pcf50606_reg_read(pcf, PCF50606_REG_LPREGC1) & 0x1f; ++ if (volt_bits > 0x18) ++ volt_bits = 0x18; ++ voltage = dx_2voltage(volt_bits); ++ break; ++ case PCF50606_REGULATOR_IOREG: ++ volt_bits = pcf50606_reg_read(pcf, PCF50606_REG_IOREGC) & 0x1f; ++ if (volt_bits > 0x18) ++ volt_bits = 0x18; ++ voltage = dx_2voltage(volt_bits); ++ break; ++ default: ++ return -EINVAL; ++ } + -+#include -+#include ++ return voltage * 1000; ++} + -+struct platform_battery { -+ struct power_supply psy; -+ struct platform_bat_platform_data *pdata; -+}; ++static int pcf50606_regulator_enable(struct regulator_dev *rdev) ++{ ++ struct pcf50606 *pcf = rdev_get_drvdata(rdev); ++ int regulator_id; ++ uint8_t regnr; + -+static int platform_bat_get_property(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) ++ regulator_id = rdev_get_id(rdev); ++ ++ regnr = pcf50606_regulator_registers[regulator_id]; ++ ++ return pcf50606_reg_set_bit_mask(pcf, regnr, 0xe0, 0xe0); ++} ++ ++static int pcf50606_regulator_disable(struct regulator_dev *rdev) +{ -+ struct platform_battery *bat = -+ container_of(psy, struct platform_battery, psy); -+ size_t i; -+ int present=1; ++ struct pcf50606 *pcf = rdev_get_drvdata(rdev); ++ int regulator_id; ++ uint8_t regnr; + -+ if (bat->pdata->is_present) -+ present = bat->pdata->is_present(); ++ regulator_id = rdev_get_id(rdev); + -+ if (psp != POWER_SUPPLY_PROP_PRESENT && !present) -+ return -ENODEV; ++ /* IOREG cannot be powered off since it powers the PMU I2C */ ++ if (regulator_id == PCF50606_REGULATOR_IOREG) ++ return -EINVAL; + -+ for (i = 0; i < psy->num_properties; i++) -+ if (psy->properties[i] == psp) { -+ val->intval = bat->pdata->get_property[i](); -+ return 0; -+ } ++ regnr = pcf50606_regulator_registers[regulator_id]; + -+ return -EINVAL; ++ return pcf50606_reg_set_bit_mask(pcf, regnr, 0xe0, 0); +} + -+static void platform_bat_ext_changed(struct power_supply *psy) ++static int pcf50606_regulator_is_enabled(struct regulator_dev *rdev) +{ -+ struct platform_battery *bat = -+ container_of(psy, struct platform_battery, psy); -+ power_supply_changed(&bat->psy); ++ struct pcf50606 *pcf = rdev_get_drvdata(rdev); ++ int regulator_id = rdev_get_id(rdev); ++ uint8_t regnr, val; ++ ++ regulator_id = rdev_get_id(rdev); ++ ++ /* the *ENA register is always one after the *OUT register */ ++ regnr = pcf50606_regulator_registers[regulator_id]; ++ val = (pcf50606_reg_read(pcf, regnr) & 0xe0) >> 5; ++ ++ /* PWREN1 = 1, PWREN2 = 1, see table 16 of datasheet */ ++ if (val == 0 || val == 5) ++ return 0; ++ ++ return 1; +} + -+static int platform_battery_probe(struct platform_device *pdev) ++static struct regulator_ops pcf50606_regulator_ops = { ++ .set_voltage = pcf50606_regulator_set_voltage, ++ .get_voltage = pcf50606_regulator_get_voltage, ++ .enable = pcf50606_regulator_enable, ++ .disable = pcf50606_regulator_disable, ++ .is_enabled = pcf50606_regulator_is_enabled, ++}; ++ ++static struct regulator_desc regulators[] = { ++ [PCF50606_REGULATOR_DCD] = ++ PCF50606_REGULATOR("dcd", PCF50606_REGULATOR_DCD), ++ [PCF50606_REGULATOR_DCDE] = ++ PCF50606_REGULATOR("dcde", PCF50606_REGULATOR_DCDE), ++ [PCF50606_REGULATOR_DCUD] = ++ PCF50606_REGULATOR("dcud", PCF50606_REGULATOR_DCUD), ++ [PCF50606_REGULATOR_D1REG] = ++ PCF50606_REGULATOR("d1reg", PCF50606_REGULATOR_D1REG), ++ [PCF50606_REGULATOR_D2REG] = ++ PCF50606_REGULATOR("d2reg", PCF50606_REGULATOR_D2REG), ++ [PCF50606_REGULATOR_D3REG] = ++ PCF50606_REGULATOR("d3reg", PCF50606_REGULATOR_D3REG), ++ [PCF50606_REGULATOR_LPREG] = ++ PCF50606_REGULATOR("lpreg", PCF50606_REGULATOR_LPREG), ++ [PCF50606_REGULATOR_IOREG] = ++ PCF50606_REGULATOR("ioreg", PCF50606_REGULATOR_IOREG), ++}; ++ ++static int __devinit pcf50606_regulator_probe(struct platform_device *pdev) +{ -+ struct platform_battery *platform_bat; -+ struct platform_bat_platform_data *pdata = -+ (struct platform_bat_platform_data *)pdev->dev.platform_data; ++ struct regulator_dev *rdev; ++ struct pcf50606 *pcf; + -+ platform_bat = kzalloc(sizeof(*platform_bat), GFP_KERNEL); -+ if (!platform_bat) -+ return -ENOMEM; ++ pcf = dev_to_pcf50606(pdev->dev.parent); + -+ if (pdata->name) -+ platform_bat->psy.name = pdata->name; -+ else -+ platform_bat->psy.name = dev_name(&pdev->dev); -+ platform_bat->psy.type = POWER_SUPPLY_TYPE_BATTERY; -+ platform_bat->psy.properties = pdata->properties; -+ platform_bat->psy.num_properties = pdata->num_properties; -+ platform_bat->psy.get_property = platform_bat_get_property; -+ platform_bat->psy.external_power_changed = platform_bat_ext_changed; ++ rdev = regulator_register(®ulators[pdev->id], &pdev->dev, ++ pdev->dev.platform_data, pcf); ++ if (IS_ERR(rdev)) ++ return PTR_ERR(rdev); + -+ platform_bat->pdata = pdata; -+ platform_set_drvdata(pdev, platform_bat); -+ power_supply_register(&pdev->dev, &platform_bat->psy); ++ platform_set_drvdata(pdev, rdev); ++ ++ if (pcf->pdata->regulator_registered) ++ pcf->pdata->regulator_registered(pcf, pdev->id); + + return 0; +} + -+static int platform_battery_remove(struct platform_device *pdev) ++static int __devexit pcf50606_regulator_remove(struct platform_device *pdev) +{ -+ struct platform_battery *bat = platform_get_drvdata(pdev); ++ struct regulator_dev *rdev = platform_get_drvdata(pdev); + -+ power_supply_unregister(&bat->psy); -+ kfree(bat); ++ platform_set_drvdata(pdev, NULL); ++ regulator_unregister(rdev); + + return 0; +} + -+static struct platform_driver platform_battery_driver = { ++static struct platform_driver pcf50606_regulator_driver = { + .driver = { -+ .name = "platform_battery", ++ .name = "pcf50606-regltr", ++ .owner = THIS_MODULE, + }, -+ .probe = platform_battery_probe, -+ .remove = platform_battery_remove, ++ .probe = pcf50606_regulator_probe, ++ .remove = __devexit_p(pcf50606_regulator_remove), +}; + -+static int __init platform_battery_init(void) ++static int __init pcf50606_regulator_init(void) +{ -+ return platform_driver_register(&platform_battery_driver); ++ return platform_driver_register(&pcf50606_regulator_driver); +} -+module_init(platform_battery_init); ++module_init(pcf50606_regulator_init); + -+static void __exit platform_battery_exit(void) ++static void __exit pcf50606_regulator_exit(void) +{ -+ platform_driver_unregister(&platform_battery_driver); ++ platform_driver_unregister(&pcf50606_regulator_driver); +} -+module_exit(platform_battery_exit); ++module_exit(pcf50606_regulator_exit); + ++MODULE_AUTHOR("Balaji Rao "); ++MODULE_DESCRIPTION("PCF50606 regulator driver"); +MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Paul Fertser "); -+MODULE_DESCRIPTION("platform battery driver"); ++MODULE_ALIAS("platform:pcf50606-regulator"); diff --git a/drivers/regulator/pcf50633-regulator.c b/drivers/regulator/pcf50633-regulator.c index c8f41dc..6ef66d9 100644 --- a/drivers/regulator/pcf50633-regulator.c @@ -46348,6 +45355,384 @@ index c8f41dc..6ef66d9 100644 if (IS_ERR(rdev)) return PTR_ERR(rdev); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index 2883428..0a395a4 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -665,6 +665,13 @@ config RTC_DRV_NUC900 + If you say yes here you get support for the RTC subsystem of the + NUC910/NUC920 used in embedded systems. + ++config RTC_DRV_PCF50606 ++ depends on MFD_PCF50606 ++ tristate "NXP PCF50606 RTC" ++ help ++ If you say yes here you get support for the RTC subsystem of the ++ NXP PCF50606 used in embedded systems. ++ + comment "on-CPU RTC drivers" + + config RTC_DRV_DAVINCI +diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile +index 4c2832d..2d980e3 100644 +--- a/drivers/rtc/Makefile ++++ b/drivers/rtc/Makefile +@@ -72,6 +72,7 @@ obj-$(CONFIG_RTC_DRV_PCAP) += rtc-pcap.o + obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o + obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o + obj-$(CONFIG_RTC_DRV_PCF2123) += rtc-pcf2123.o ++obj-$(CONFIG_RTC_DRV_PCF50606) += rtc-pcf50606.o + obj-$(CONFIG_RTC_DRV_PCF50633) += rtc-pcf50633.o + obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o + obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o +diff --git a/drivers/rtc/rtc-pcf50606.c b/drivers/rtc/rtc-pcf50606.c +new file mode 100644 +index 0000000..5501615 +--- /dev/null ++++ b/drivers/rtc/rtc-pcf50606.c +@@ -0,0 +1,342 @@ ++/* NXP PCF50606 RTC Driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Balaji Rao ++ * All rights reserved. ++ * ++ * Broken down from monstrous PCF50606 driver mainly by ++ * Harald Welte, Andy Green and Werner Almesberger ++ * ++ * 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. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define PCF50606_REG_RTCSC 0x0a /* Second */ ++#define PCF50606_REG_RTCMN 0x0b /* Minute */ ++#define PCF50606_REG_RTCHR 0x0c /* Hour */ ++#define PCF50606_REG_RTCWD 0x0d /* Weekday */ ++#define PCF50606_REG_RTCDT 0x0e /* Day */ ++#define PCF50606_REG_RTCMT 0x0f /* Month */ ++#define PCF50606_REG_RTCYR 0x10 /* Year */ ++#define PCF50606_REG_RTCSCA 0x11 /* Alarm Second */ ++#define PCF50606_REG_RTCMNA 0x12 /* Alarm Minute */ ++#define PCF50606_REG_RTCHRA 0x13 /* Alarm Hour */ ++#define PCF50606_REG_RTCWDA 0x14 /* Alarm Weekday */ ++#define PCF50606_REG_RTCDTA 0x15 /* Alarm Day */ ++#define PCF50606_REG_RTCMTA 0x16 /* Alarm Month */ ++#define PCF50606_REG_RTCYRA 0x17 /* Alarm Year */ ++ ++enum pcf50606_time_indexes { ++ PCF50606_TI_SEC, ++ PCF50606_TI_MIN, ++ PCF50606_TI_HOUR, ++ PCF50606_TI_WKDAY, ++ PCF50606_TI_DAY, ++ PCF50606_TI_MONTH, ++ PCF50606_TI_YEAR, ++ PCF50606_TI_EXTENT /* always last */ ++}; ++ ++struct pcf50606_time { ++ uint8_t time[PCF50606_TI_EXTENT]; ++}; ++ ++struct pcf50606_rtc { ++ int alarm_enabled; ++ int second_enabled; ++ int alarm_pending; ++ ++ struct pcf50606 *pcf; ++ struct rtc_device *rtc_dev; ++}; ++ ++static void pcf2rtc_time(struct rtc_time *rtc, struct pcf50606_time *pcf) ++{ ++ rtc->tm_sec = bcd2bin(pcf->time[PCF50606_TI_SEC]); ++ rtc->tm_min = bcd2bin(pcf->time[PCF50606_TI_MIN]); ++ rtc->tm_hour = bcd2bin(pcf->time[PCF50606_TI_HOUR]); ++ rtc->tm_wday = bcd2bin(pcf->time[PCF50606_TI_WKDAY]); ++ rtc->tm_mday = bcd2bin(pcf->time[PCF50606_TI_DAY]); ++ rtc->tm_mon = bcd2bin(pcf->time[PCF50606_TI_MONTH]) - 1; ++ rtc->tm_year = bcd2bin(pcf->time[PCF50606_TI_YEAR]) + 100; ++} ++ ++static void rtc2pcf_time(struct pcf50606_time *pcf, struct rtc_time *rtc) ++{ ++ pcf->time[PCF50606_TI_SEC] = bin2bcd(rtc->tm_sec); ++ pcf->time[PCF50606_TI_MIN] = bin2bcd(rtc->tm_min); ++ pcf->time[PCF50606_TI_HOUR] = bin2bcd(rtc->tm_hour); ++ pcf->time[PCF50606_TI_WKDAY] = bin2bcd(rtc->tm_wday); ++ pcf->time[PCF50606_TI_DAY] = bin2bcd(rtc->tm_mday); ++ pcf->time[PCF50606_TI_MONTH] = bin2bcd(rtc->tm_mon + 1); ++ pcf->time[PCF50606_TI_YEAR] = bin2bcd(rtc->tm_year % 100); ++} ++ ++static int ++pcf50606_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) ++{ ++ struct pcf50606_rtc *rtc = dev_get_drvdata(dev); ++ ++ switch (cmd) { ++ case RTC_AIE_OFF: ++ rtc->alarm_enabled = 0; ++ pcf50606_irq_mask(rtc->pcf, PCF50606_IRQ_ALARM); ++ return 0; ++ case RTC_AIE_ON: ++ rtc->alarm_enabled = 1; ++ pcf50606_irq_unmask(rtc->pcf, PCF50606_IRQ_ALARM); ++ return 0; ++ case RTC_UIE_OFF: ++ rtc->second_enabled = 0; ++ pcf50606_irq_mask(rtc->pcf, PCF50606_IRQ_SECOND); ++ return 0; ++ case RTC_UIE_ON: ++ rtc->second_enabled = 1; ++ pcf50606_irq_unmask(rtc->pcf, PCF50606_IRQ_SECOND); ++ return 0; ++ } ++ ++ return -ENOIOCTLCMD; ++} ++ ++static int pcf50606_rtc_read_time(struct device *dev, struct rtc_time *tm) ++{ ++ struct pcf50606_rtc *rtc; ++ struct pcf50606_time pcf_tm; ++ int ret; ++ ++ rtc = dev_get_drvdata(dev); ++ ++ ret = pcf50606_read_block(rtc->pcf, PCF50606_REG_RTCSC, ++ PCF50606_TI_EXTENT, ++ &pcf_tm.time[0]); ++ if (ret != PCF50606_TI_EXTENT) { ++ dev_err(dev, "Failed to read time\n"); ++ return -EIO; ++ } ++ ++ dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n", ++ pcf_tm.time[PCF50606_TI_DAY], ++ pcf_tm.time[PCF50606_TI_MONTH], ++ pcf_tm.time[PCF50606_TI_YEAR], ++ pcf_tm.time[PCF50606_TI_HOUR], ++ pcf_tm.time[PCF50606_TI_MIN], ++ pcf_tm.time[PCF50606_TI_SEC]); ++ ++ pcf2rtc_time(tm, &pcf_tm); ++ ++ dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n", ++ tm->tm_mday, tm->tm_mon, tm->tm_year, ++ tm->tm_hour, tm->tm_min, tm->tm_sec); ++ ++ return rtc_valid_tm(tm); ++} ++ ++static int pcf50606_rtc_set_time(struct device *dev, struct rtc_time *tm) ++{ ++ struct pcf50606_rtc *rtc; ++ struct pcf50606_time pcf_tm; ++ int second_masked, alarm_masked, ret = 0; ++ ++ rtc = dev_get_drvdata(dev); ++ ++ dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n", ++ tm->tm_mday, tm->tm_mon, tm->tm_year, ++ tm->tm_hour, tm->tm_min, tm->tm_sec); ++ ++ rtc2pcf_time(&pcf_tm, tm); ++ ++ dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n", ++ pcf_tm.time[PCF50606_TI_DAY], ++ pcf_tm.time[PCF50606_TI_MONTH], ++ pcf_tm.time[PCF50606_TI_YEAR], ++ pcf_tm.time[PCF50606_TI_HOUR], ++ pcf_tm.time[PCF50606_TI_MIN], ++ pcf_tm.time[PCF50606_TI_SEC]); ++ ++ ++ second_masked = pcf50606_irq_mask_get(rtc->pcf, PCF50606_IRQ_SECOND); ++ alarm_masked = pcf50606_irq_mask_get(rtc->pcf, PCF50606_IRQ_ALARM); ++ ++ if (!second_masked) ++ pcf50606_irq_mask(rtc->pcf, PCF50606_IRQ_SECOND); ++ if (!alarm_masked) ++ pcf50606_irq_mask(rtc->pcf, PCF50606_IRQ_ALARM); ++ ++ /* Returns 0 on success */ ++ ret = pcf50606_write_block(rtc->pcf, PCF50606_REG_RTCSC, ++ PCF50606_TI_EXTENT, ++ &pcf_tm.time[0]); ++ ++ if (!second_masked) ++ pcf50606_irq_unmask(rtc->pcf, PCF50606_IRQ_SECOND); ++ if (!alarm_masked) ++ pcf50606_irq_unmask(rtc->pcf, PCF50606_IRQ_ALARM); ++ ++ return ret; ++} ++ ++static int pcf50606_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) ++{ ++ struct pcf50606_rtc *rtc; ++ struct pcf50606_time pcf_tm; ++ int ret = 0; ++ ++ rtc = dev_get_drvdata(dev); ++ ++ alrm->enabled = rtc->alarm_enabled; ++ alrm->pending = rtc->alarm_pending; ++ ++ ret = pcf50606_read_block(rtc->pcf, PCF50606_REG_RTCSCA, ++ PCF50606_TI_EXTENT, &pcf_tm.time[0]); ++ if (ret != PCF50606_TI_EXTENT) { ++ dev_err(dev, "Failed to read time\n"); ++ return -EIO; ++ } ++ ++ pcf2rtc_time(&alrm->time, &pcf_tm); ++ ++ return rtc_valid_tm(&alrm->time); ++} ++ ++static int pcf50606_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) ++{ ++ struct pcf50606_rtc *rtc; ++ struct pcf50606_time pcf_tm; ++ int alarm_masked, ret = 0; ++ ++ rtc = dev_get_drvdata(dev); ++ ++ rtc2pcf_time(&pcf_tm, &alrm->time); ++ ++ /* do like mktime does and ignore tm_wday */ ++ pcf_tm.time[PCF50606_TI_WKDAY] = 7; ++ ++ alarm_masked = pcf50606_irq_mask_get(rtc->pcf, PCF50606_IRQ_ALARM); ++ ++ /* disable alarm interrupt */ ++ if (!alarm_masked) ++ pcf50606_irq_mask(rtc->pcf, PCF50606_IRQ_ALARM); ++ ++ /* Returns 0 on success */ ++ ret = pcf50606_write_block(rtc->pcf, PCF50606_REG_RTCSCA, ++ PCF50606_TI_EXTENT, &pcf_tm.time[0]); ++ ++ if (!alrm->enabled) ++ rtc->alarm_pending = 0; ++ ++ if (!alarm_masked || alrm->enabled) ++ pcf50606_irq_unmask(rtc->pcf, PCF50606_IRQ_ALARM); ++ rtc->alarm_enabled = alrm->enabled; ++ ++ return ret; ++} ++ ++static struct rtc_class_ops pcf50606_rtc_ops = { ++ .ioctl = pcf50606_rtc_ioctl, ++ .read_time = pcf50606_rtc_read_time, ++ .set_time = pcf50606_rtc_set_time, ++ .read_alarm = pcf50606_rtc_read_alarm, ++ .set_alarm = pcf50606_rtc_set_alarm, ++}; ++ ++static void pcf50606_rtc_irq(int irq, void *data) ++{ ++ struct pcf50606_rtc *rtc = data; ++ ++ switch (irq) { ++ case PCF50606_IRQ_ALARM: ++ rtc_update_irq(rtc->rtc_dev, 1, RTC_AF | RTC_IRQF); ++ rtc->alarm_pending = 1; ++ break; ++ case PCF50606_IRQ_SECOND: ++ rtc_update_irq(rtc->rtc_dev, 1, RTC_UF | RTC_IRQF); ++ break; ++ } ++} ++ ++static int __devinit pcf50606_rtc_probe(struct platform_device *pdev) ++{ ++ struct pcf50606_rtc *rtc; ++ ++ rtc = kzalloc(sizeof(*rtc), GFP_KERNEL); ++ if (!rtc) ++ return -ENOMEM; ++ ++ rtc->pcf = dev_to_pcf50606(pdev->dev.parent); ++ platform_set_drvdata(pdev, rtc); ++ rtc->rtc_dev = rtc_device_register("pcf50606-rtc", &pdev->dev, ++ &pcf50606_rtc_ops, THIS_MODULE); ++ ++ if (IS_ERR(rtc->rtc_dev)) { ++ kfree(rtc); ++ return PTR_ERR(rtc->rtc_dev); ++ } ++ ++ pcf50606_register_irq(rtc->pcf, PCF50606_IRQ_ALARM, ++ pcf50606_rtc_irq, rtc); ++ pcf50606_register_irq(rtc->pcf, PCF50606_IRQ_SECOND, ++ pcf50606_rtc_irq, rtc); ++ ++ return 0; ++} ++ ++ ++static int __devexit pcf50606_rtc_remove(struct platform_device *pdev) ++{ ++ struct pcf50606_rtc *rtc; ++ ++ rtc = platform_get_drvdata(pdev); ++ ++ rtc_device_unregister(rtc->rtc_dev); ++ ++ pcf50606_free_irq(rtc->pcf, PCF50606_IRQ_ALARM); ++ pcf50606_free_irq(rtc->pcf, PCF50606_IRQ_SECOND); ++ ++ platform_set_drvdata(pdev, NULL); ++ kfree(rtc); ++ ++ return 0; ++} ++ ++ ++static struct platform_driver pcf50606_rtc_driver = { ++ .driver = { ++ .name = "pcf50606-rtc", ++ .owner = THIS_MODULE, ++ }, ++ .probe = pcf50606_rtc_probe, ++ .remove = __devexit_p(pcf50606_rtc_remove), ++}; ++ ++static int __init pcf50606_rtc_init(void) ++{ ++ return platform_driver_register(&pcf50606_rtc_driver); ++} ++module_init(pcf50606_rtc_init); ++ ++static void __exit pcf50606_rtc_exit(void) ++{ ++ platform_driver_unregister(&pcf50606_rtc_driver); ++} ++module_exit(pcf50606_rtc_exit); ++ ++MODULE_DESCRIPTION("PCF50606 RTC driver"); ++MODULE_AUTHOR("Balaji Rao "); ++MODULE_LICENSE("GPL"); ++ diff --git a/drivers/rtc/rtc-pcf50633.c b/drivers/rtc/rtc-pcf50633.c index 16edf94..c517ec0 100644 --- a/drivers/rtc/rtc-pcf50633.c @@ -48615,6 +48000,258 @@ index 0000000..3f8ec8d +MODULE_DESCRIPTION("Smedia Glamo 336x/337x framebuffer driver"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:glamo-fb"); +diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig +index a5ad77e..b766ba6 100644 +--- a/drivers/watchdog/Kconfig ++++ b/drivers/watchdog/Kconfig +@@ -174,6 +174,13 @@ config S3C2410_WATCHDOG + The driver can be built as a module by choosing M, and will + be called s3c2410_wdt + ++config PCF50606_WATCHDOG ++ depends on MFD_PCF50606 ++ tristate "Philips PCF50606 watchdog" ++ help ++ If you say yes here you get support for the Philips PCF50606 ++ PMU's watchdog. ++ + config SA1100_WATCHDOG + tristate "SA1100/PXA2xx watchdog" + depends on ARCH_SA1100 || ARCH_PXA +diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile +index 4b0ef38..ee4c2af 100644 +--- a/drivers/watchdog/Makefile ++++ b/drivers/watchdog/Makefile +@@ -36,6 +36,7 @@ obj-$(CONFIG_IXP2000_WATCHDOG) += ixp2000_wdt.o + obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o + obj-$(CONFIG_KS8695_WATCHDOG) += ks8695_wdt.o + obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o ++obj-$(CONFIG_PCF50606_WATCHDOG) += pcf50606_wdt.o + obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o + obj-$(CONFIG_MPCORE_WATCHDOG) += mpcore_wdt.o + obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt.o +diff --git a/drivers/watchdog/pcf50606_wdt.c b/drivers/watchdog/pcf50606_wdt.c +new file mode 100644 +index 0000000..623cba0 +--- /dev/null ++++ b/drivers/watchdog/pcf50606_wdt.c +@@ -0,0 +1,216 @@ ++/* Philips PCF50606 Watchdog Timer Driver ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * Author: Balaji Rao ++ * All rights reserved. ++ * ++ * Broken down from monstrous PCF50606 driver mainly by ++ * Harald Welte, Matt Hsu, Andy Green and Werner Almesberger ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++static struct pcf50606 *pcf = NULL; ++static unsigned long wdt_status; ++ ++#define WDT_IN_USE 0 ++#define WDT_OK_TO_CLOSE 1 ++#define WDT_REGION_INITED 2 ++#define WDT_DEVICE_INITED 3 ++ ++static int allow_close; ++#define CLOSE_STATE_NOT 0x0000 ++#define CLOSE_STATE_ALLOW 0x2342 ++ ++#define PCF50606_REG_OOCC1 0x08 ++#define PCF50606_REG_OOCS 0x01 ++ ++#define PCF50606_OOCS_WDTEXP 0x80 ++#define PCF50606_OOCC1_WDTRST 0x08 ++ ++static void pcf50606_wdt_start(void) ++{ ++ pcf50606_reg_set_bit_mask(pcf, PCF50606_REG_OOCC1, PCF50606_OOCC1_WDTRST, ++ PCF50606_OOCC1_WDTRST); ++} ++ ++static void pcf50606_wdt_stop(void) ++{ ++ pcf50606_reg_clear_bits(pcf, PCF50606_REG_OOCS, PCF50606_OOCS_WDTEXP); ++} ++ ++static void pcf50606_wdt_keepalive(void) ++{ ++ pcf50606_wdt_start(); ++} ++ ++static int pcf50606_wdt_open(struct inode *inode, struct file *file) ++{ ++ if (test_and_set_bit(WDT_IN_USE, &wdt_status)) ++ return -EBUSY; ++ ++ pcf50606_wdt_start(); ++ ++ return nonseekable_open(inode, file); ++} ++ ++static int pcf50606_wdt_release(struct inode *inode, struct file *file) ++{ ++ if (allow_close == CLOSE_STATE_ALLOW) ++ pcf50606_wdt_stop(); ++ else { ++ printk(KERN_CRIT "Unexpected close, not stopping watchdog!\n"); ++ pcf50606_wdt_keepalive(); ++ } ++ ++ allow_close = CLOSE_STATE_NOT; ++ clear_bit(WDT_IN_USE, &wdt_status); ++ ++ return 0; ++} ++ ++static ssize_t pcf50606_wdt_write(struct file *file, const char __user *data, ++ size_t len, loff_t *ppos) ++{ ++ if (len) { ++ size_t i; ++ ++ for (i = 0; i != len; i++) { ++ char c; ++ if (get_user(c, data + i)) ++ return -EFAULT; ++ if (c == 'V') ++ allow_close = CLOSE_STATE_ALLOW; ++ } ++ pcf50606_wdt_keepalive(); ++ } ++ ++ return len; ++} ++ ++static struct watchdog_info pcf50606_wdt_ident = { ++ .options = WDIOF_MAGICCLOSE, ++ .firmware_version = 0, ++ .identity = "PCF50606 Watchdog", ++}; ++ ++static long pcf50606_wdt_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ void __user *argp = (void __user *)arg; ++ int __user *p = argp; ++ ++ switch (cmd) { ++ case WDIOC_GETSUPPORT: ++ return copy_to_user(argp, &pcf50606_wdt_ident, ++ sizeof(pcf50606_wdt_ident)) ? -EFAULT : 0; ++ break; ++ case WDIOC_GETSTATUS: ++ case WDIOC_GETBOOTSTATUS: ++ return put_user(0, p); ++ case WDIOC_KEEPALIVE: ++ pcf50606_wdt_keepalive(); ++ return 0; ++ case WDIOC_GETTIMEOUT: ++ return put_user(8, p); ++ default: ++ return -ENOIOCTLCMD; ++ } ++} ++ ++static struct file_operations pcf50606_wdt_fops = { ++ .owner = THIS_MODULE, ++ .llseek = no_llseek, ++ .write = pcf50606_wdt_write, ++ .unlocked_ioctl = pcf50606_wdt_ioctl, ++ .open = pcf50606_wdt_open, ++ .release = pcf50606_wdt_release, ++}; ++ ++static struct miscdevice pcf50606_wdt_miscdev = { ++ .minor = WATCHDOG_MINOR, ++ .name = "watchdog", ++ .fops = &pcf50606_wdt_fops, ++}; ++ ++static void pcf50606_wdt_irq(int irq, void *unused) ++{ ++ pcf50606_reg_set_bit_mask(pcf, PCF50606_REG_OOCC1, ++ PCF50606_OOCC1_WDTRST, ++ PCF50606_OOCC1_WDTRST); ++} ++ ++int __init pcf50606_wdt_probe(struct platform_device *pdev) ++{ ++ int err; ++ ++ if (pcf) { ++ dev_err(pcf->dev, "Only one instance of WDT supported\n"); ++ return -ENODEV; ++ } ++ ++ pcf = dev_to_pcf50606(pdev->dev.parent); ++ ++ err = misc_register(&pcf50606_wdt_miscdev); ++ if (err) { ++ dev_err(&pdev->dev, "cannot register miscdev on " ++ "minor=%d (%d)\n", WATCHDOG_MINOR, err); ++ return err; ++ } ++ set_bit(WDT_DEVICE_INITED, &wdt_status); ++ ++ pcf50606_register_irq(pcf, PCF50606_IRQ_CHGWD10S, pcf50606_wdt_irq, NULL); ++ ++ return 0; ++} ++ ++static int __devexit pcf50606_wdt_remove(struct platform_device *pdev) ++{ ++ pcf50606_free_irq(pcf, PCF50606_IRQ_CHGWD10S); ++ misc_deregister(&pcf50606_wdt_miscdev); ++ pcf = NULL; ++ ++ return 0; ++} ++ ++struct platform_driver pcf50606_wdt_driver = { ++ .driver = { ++ .name = "pcf50606-wdt", ++ }, ++ .probe = pcf50606_wdt_probe, ++ .remove = __devexit_p(pcf50606_wdt_remove), ++}; ++ ++static int __init pcf50606_wdt_init(void) ++{ ++ return platform_driver_register(&pcf50606_wdt_driver); ++} ++module_init(pcf50606_wdt_init); ++ ++static void __exit pcf50606_wdt_exit(void) ++{ ++ platform_driver_unregister(&pcf50606_wdt_driver); ++} ++module_exit(pcf50606_wdt_exit); ++ ++MODULE_AUTHOR("Balaji Rao "); ++MODULE_DESCRIPTION("PCF50606 wdt driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("platform:pcf50606-wdt"); ++ diff --git a/include/linux/fb.h b/include/linux/fb.h index d1631d3..3a45dc9 100644 --- a/include/linux/fb.h @@ -49472,8 +49109,401 @@ index 0000000..ae52f3d +}; + +#endif +diff --git a/include/linux/mfd/pcf50606/adc.h b/include/linux/mfd/pcf50606/adc.h +new file mode 100644 +index 0000000..fd48403 +--- /dev/null ++++ b/include/linux/mfd/pcf50606/adc.h +@@ -0,0 +1,72 @@ ++/* ++ * adc.h -- Driver for NXP PCF50606 ADC ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * 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, or (at your ++ * option) any later version. ++ */ ++ ++#ifndef __LINUX_MFD_PCF50606_ADC_H ++#define __LINUX_MFD_PCF50606_ADC_H ++ ++#include ++#include ++ ++/* ADC Registers */ ++#define PCF50606_REG_ADCC1 0x2e ++#define PCF50606_REG_ADCC2 0x2f ++#define PCF50606_REG_ADCS1 0x30 ++#define PCF50606_REG_ADCS2 0x31 ++#define PCF50606_REG_ADCS3 0x32 ++ ++#define PCF50606_ADCC1_TSCMODACT 0x01 ++#define PCF50606_ADCC1_TSCMODSTB 0x02 ++#define PCF50606_ADCC1_TRATSET 0x04 ++#define PCF50606_ADCC1_NTCSWAPE 0x08 ++#define PCF50606_ADCC1_NTCSWAOFF 0x10 ++#define PCF50606_ADCC1_EXTSYNCBREAK 0x20 ++ /* reserved */ ++#define PCF50606_ADCC1_TSCINT 0x80 ++ ++#define PCF50606_ADCC2_ADCSTART 0x01 ++ /* see enum pcf50606_adcc2_adcmux */ ++#define PCF50606_ADCC2_SYNC_NONE 0x00 ++#define PCF50606_ADCC2_SYNC_TXON 0x20 ++#define PCF50606_ADCC2_SYNC_PWREN1 0x40 ++#define PCF50606_ADCC2_SYNC_PWREN2 0x60 ++#define PCF50606_ADCC2_RES_10BIT 0x00 ++#define PCF50606_ADCC2_RES_8BIT 0x80 ++ ++#define PCF50606_ADCC2_ADCMUX_MASK (0xf << 1) ++ ++#define ADCMUX_SHIFT 1 ++#define PCF50606_ADCMUX_BATVOLT_RES (0x0 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_BATVOLT_SUBTR (0x1 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_ADCIN1_RES (0x2 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_ADCIN1_SUBTR (0x3 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_BATTEMP (0x4 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_ADCIN2 (0x5 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_ADCIN3 (0x6 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_ADCIN3_RATIO (0x7 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_XPOS (0x8 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_YPOS (0x9 << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_P1 (0xa << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_P2 (0xb << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_BATVOLT_ADCIN1 (0xc << ADCMUX_SHIFT) ++#define PCF50606_ADCMUX_XY_SEQUENCE (0xe << ADCMUX_SHIFT) ++#define PCF50606_P1_P2_RESISTANCE (0xf << ADCMUX_SHIFT) ++ ++#define PCF50606_ADCS2_ADCRDY 0x80 ++ ++extern int ++pcf50606_adc_async_read(struct pcf50606 *pcf, int mux, ++ void (*callback)(struct pcf50606 *, void *, int), ++ void *callback_param); ++extern int ++pcf50606_adc_sync_read(struct pcf50606 *pcf, int mux); ++ ++#endif /* __LINUX_PCF50606_ADC_H */ +diff --git a/include/linux/mfd/pcf50606/core.h b/include/linux/mfd/pcf50606/core.h +new file mode 100644 +index 0000000..e036e07 +--- /dev/null ++++ b/include/linux/mfd/pcf50606/core.h +@@ -0,0 +1,172 @@ ++/* ++ * core.h -- Core driver for NXP PCF50606 ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * 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, or (at your ++ * option) any later version. ++ */ ++ ++#ifndef __LINUX_MFD_PCF50606_CORE_H ++#define __LINUX_MFD_PCF50606_CORE_H ++ ++#include ++#include ++#include ++#include ++#include ++ ++struct pcf50606; ++ ++#define PCF50606_NUM_REGULATORS 8 ++ ++struct pcf50606_platform_data { ++ struct regulator_init_data reg_init_data[PCF50606_NUM_REGULATORS]; ++ ++ char **batteries; ++ int num_batteries; ++ ++ /* Callbacks */ ++ void (*probe_done)(struct pcf50606 *); ++ void (*mbc_event_callback)(struct pcf50606 *, int); ++ void (*regulator_registered)(struct pcf50606 *, int); ++ void (*force_shutdown)(struct pcf50606 *); ++ ++ u8 resumers[3]; ++}; ++ ++struct pcf50606_irq { ++ void (*handler)(int, void *); ++ void *data; ++}; ++ ++int pcf50606_register_irq(struct pcf50606 *pcf, int irq, ++ void (*handler) (int, void *), void *data); ++int pcf50606_free_irq(struct pcf50606 *pcf, int irq); ++ ++int pcf50606_irq_mask(struct pcf50606 *pcf, int irq); ++int pcf50606_irq_unmask(struct pcf50606 *pcf, int irq); ++int pcf50606_irq_mask_get(struct pcf50606 *pcf, int irq); ++ ++int pcf50606_read_block(struct pcf50606 *, u8 reg, ++ int nr_regs, u8 *data); ++int pcf50606_write_block(struct pcf50606 *pcf, u8 reg, ++ int nr_regs, u8 *data); ++u8 pcf50606_reg_read(struct pcf50606 *, u8 reg); ++int pcf50606_reg_write(struct pcf50606 *pcf, u8 reg, u8 val); ++ ++int pcf50606_reg_set_bit_mask(struct pcf50606 *pcf, u8 reg, u8 mask, u8 val); ++int pcf50606_reg_clear_bits(struct pcf50606 *pcf, u8 reg, u8 bits); ++ ++/* Interrupt registers */ ++ ++#define PCF50606_REG_INT1 0x02 ++#define PCF50606_REG_INT2 0x03 ++#define PCF50606_REG_INT3 0x04 ++ ++#define PCF50606_REG_INT1M 0x05 ++#define PCF50606_REG_INT2M 0x06 ++#define PCF50606_REG_INT3M 0x07 ++ ++enum { ++ /* Chip IRQs */ ++ PCF50606_IRQ_ONKEYR, ++ PCF50606_IRQ_ONKEYF, ++ PCF50606_IRQ_ONKEY1S, ++ PCF50606_IRQ_EXTONR, ++ PCF50606_IRQ_EXTONF, ++ PCF50606_IRQ_RESERVED_1, ++ PCF50606_IRQ_SECOND, ++ PCF50606_IRQ_ALARM, ++ PCF50606_IRQ_CHGINS, ++ PCF50606_IRQ_CHGRM, ++ PCF50606_IRQ_CHGFOK, ++ PCF50606_IRQ_CHGERR, ++ PCF50606_IRQ_CHGFRDY, ++ PCF50606_IRQ_CHGPROT, ++ PCF50606_IRQ_CHGWD10S, ++ PCF50606_IRQ_CHGWDEXP, ++ PCF50606_IRQ_ADCRDY, ++ PCF50606_IRQ_ACDINS, ++ PCF50606_IRQ_ACDREM, ++ PCF50606_IRQ_TSCPRES, ++ PCF50606_IRQ_RESERVED_2, ++ PCF50606_IRQ_RESERVED_3, ++ PCF50606_IRQ_LOWBAT, ++ PCF50606_IRQ_HIGHTMP, ++ ++ /* Always last */ ++ PCF50606_NUM_IRQ, ++}; ++ ++struct pcf50606 { ++ struct device *dev; ++ struct i2c_client *i2c_client; ++ ++ struct pcf50606_platform_data *pdata; ++ int irq; ++ struct pcf50606_irq irq_handler[PCF50606_NUM_IRQ]; ++ struct work_struct irq_work; ++ struct mutex lock; ++ ++ u8 mask_regs[3]; ++ ++ u8 suspend_irq_masks[3]; ++ u8 resume_reason[3]; ++ int is_suspended; ++ ++ int onkey1s_held; ++ ++ struct platform_device *rtc_pdev; ++ struct platform_device *mbc_pdev; ++ struct platform_device *adc_pdev; ++ struct platform_device *input_pdev; ++ struct platform_device *wdt_pdev; ++ struct platform_device *regulator_pdev[PCF50606_NUM_REGULATORS]; ++}; ++ ++enum pcf50606_reg_int1 { ++ PCF50606_INT1_ONKEYR = 0x01, /* ONKEY rising edge */ ++ PCF50606_INT1_ONKEYF = 0x02, /* ONKEY falling edge */ ++ PCF50606_INT1_ONKEY1S = 0x04, /* OMKEY at least 1sec low */ ++ PCF50606_INT1_EXTONR = 0x08, /* EXTON rising edge */ ++ PCF50606_INT1_EXTONF = 0x10, /* EXTON falling edge */ ++ PCF50606_INT1_SECOND = 0x40, /* RTC periodic second interrupt */ ++ PCF50606_INT1_ALARM = 0x80, /* RTC alarm time is reached */ ++}; ++ ++enum pcf50606_reg_int2 { ++ PCF50606_INT2_CHGINS = 0x01, /* Charger inserted */ ++ PCF50606_INT2_CHGRM = 0x02, /* Charger removed */ ++ PCF50606_INT2_CHGFOK = 0x04, /* Fast charging OK */ ++ PCF50606_INT2_CHGERR = 0x08, /* Error in charging mode */ ++ PCF50606_INT2_CHGFRDY = 0x10, /* Fast charge completed */ ++ PCF50606_INT2_CHGPROT = 0x20, /* Charging protection interrupt */ ++ PCF50606_INT2_CHGWD10S = 0x40, /* Charger watchdig expires in 10s */ ++ PCF50606_INT2_CHGWDEXP = 0x80, /* Charger watchdog expires */ ++}; ++ ++enum pcf50606_reg_int3 { ++ PCF50606_INT3_ADCRDY = 0x01, /* ADC conversion finished */ ++ PCF50606_INT3_ACDINS = 0x02, /* Accessory inserted */ ++ PCF50606_INT3_ACDREM = 0x04, /* Accessory removed */ ++ PCF50606_INT3_TSCPRES = 0x08, /* Touch screen pressed */ ++ PCF50606_INT3_LOWBAT = 0x40, /* Low battery voltage */ ++ PCF50606_INT3_HIGHTMP = 0x80, /* High temperature */ ++}; ++ ++/* Misc regs */ ++ ++#define PCF50606_REG_OOCC1 0x08 ++#define PCF50606_OOCC1_GOSTDBY 0x01 ++ ++static inline struct pcf50606 *dev_to_pcf50606(struct device *dev) ++{ ++ return dev_get_drvdata(dev); ++} ++ ++#endif ++ +diff --git a/include/linux/mfd/pcf50606/mbc.h b/include/linux/mfd/pcf50606/mbc.h +new file mode 100644 +index 0000000..23aeb9e +--- /dev/null ++++ b/include/linux/mfd/pcf50606/mbc.h +@@ -0,0 +1,52 @@ ++/* ++ * mbc.h -- Driver for NXP PCF50606 Main Battery Charger ++ * ++ * (C) 2006-2008 by Openmoko, Inc. ++ * 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, or (at your ++ * option) any later version. ++ */ ++ ++#ifndef __LINUX_MFD_PCF50606_MBC_H ++#define __LINUX_MFD_PCF50606_MBC_H ++ ++#include ++#include ++ ++#define PCF50606_REG_OOCS 0x01 ++ ++/* Charger OK */ ++#define PCF50606_OOCS_CHGOK 0x20 ++ ++#define PCF50606_REG_MBCC1 0x29 ++#define PCF50606_REG_MBCC2 0x2a ++#define PCF50606_REG_MBCC3 0x2b ++#define PCF50606_REG_MBCS1 0x2c ++ ++#define PCF50606_MBCC1_CHGAPE 0x01 ++#define PCF50606_MBCC1_AUTOFST 0x02 ++#define PCF50606_MBCC1_CHGMOD_MASK 0x1c ++#define PCF50606_MBCC1_CHGMOD_QUAL 0x00 ++#define PCF50606_MBCC1_CHGMOD_PRE 0x04 ++#define PCF50606_MBCC1_CHGMOD_TRICKLE 0x08 ++#define PCF50606_MBCC1_CHGMOD_FAST_CCCV 0x0c ++#define PCF50606_MBCC1_CHGMOD_FAST_NOCC 0x10 ++#define PCF50606_MBCC1_CHGMOD_FAST_NOCV 0x14 ++#define PCF50606_MBCC1_CHGMOD_FAST_SW 0x18 ++#define PCF50606_MBCC1_CHGMOD_IDLE 0x1c ++#define PCF50606_MBCC1_DETMOD_LOWCHG 0x20 ++#define PCF50606_MBCC1_DETMOD_WDRST 0x40 ++ ++#define PCF50606_MBCC1_CHGMOD_SHIFT 2 ++ ++/* Charger status */ ++#define PCF50606_MBC_CHARGER_ONLINE 0x01 ++#define PCF50606_MBC_CHARGER_ACTIVE 0x02 ++ ++int pcf50606_charge_fast(struct pcf50606 *pcf, int on); ++ ++#endif ++ +diff --git a/include/linux/mfd/pcf50606/pmic.h b/include/linux/mfd/pcf50606/pmic.h +new file mode 100644 +index 0000000..1bcfe39 +--- /dev/null ++++ b/include/linux/mfd/pcf50606/pmic.h +@@ -0,0 +1,73 @@ ++#ifndef __LINUX_MFD_PCF50606_PMIC_H ++#define __LINUX_MFD_PCF50606_PMIC_H ++ ++#define PCF50606_REG_DCDC1 0x1b ++#define PCF50606_REG_DCDC2 0x1c ++#define PCF50606_REG_DCDC3 0x1d ++#define PCF50606_REG_DCDC4 0x1e ++#define PCF50606_REG_DCDEC1 0x1f ++#define PCF50606_REG_DCDEC2 0x20 ++#define PCF50606_REG_DCUDC1 0x21 ++#define PCF50606_REG_DCUDC2 0x22 ++#define PCF50606_REG_IOREGC 0x23 ++#define PCF50606_REG_D1REGC1 0x24 ++#define PCF50606_REG_D2REGC1 0x25 ++#define PCF50606_REG_D3REGC1 0x26 ++#define PCF50606_REG_LPREGC1 0x27 ++#define PCF50606_REG_LPREGC2 0x28 ++ ++/* used by PSSC, PWROKM, PWROKS, */ ++enum pcf50606_regu { ++ PCF50606_REGU_DCD = 0x01, /* DCD in phase 2 */ ++ PCF50606_REGU_DCDE = 0x02, /* DCDE in phase 2 */ ++ PCF50606_REGU_DCUD = 0x04, /* DCDU in phase 2 */ ++ PCF50606_REGU_IO = 0x08, /* IO in phase 2 */ ++ PCF50606_REGU_D1 = 0x10, /* D1 in phase 2 */ ++ PCF50606_REGU_D2 = 0x20, /* D2 in phase 2 */ ++ PCF50606_REGU_D3 = 0x40, /* D3 in phase 2 */ ++ PCF50606_REGU_LP = 0x80, /* LP in phase 2 */ ++}; ++ ++enum pcf50606_reg_dcdc4 { ++ PCF50606_DCDC4_MODE_AUTO = 0x00, ++ PCF50606_DCDC4_MODE_PWM = 0x01, ++ PCF50606_DCDC4_MODE_PCF = 0x02, ++ PCF50606_DCDC4_OFF_FLOAT = 0x00, ++ PCF50606_DCDC4_OFF_BYPASS = 0x04, ++ PCF50606_DCDC4_OFF_PULLDOWN = 0x08, ++ PCF50606_DCDC4_CURLIM_500mA = 0x00, ++ PCF50606_DCDC4_CURLIM_750mA = 0x10, ++ PCF50606_DCDC4_CURLIM_1000mA = 0x20, ++ PCF50606_DCDC4_CURLIM_1250mA = 0x30, ++ PCF50606_DCDC4_TOGGLE = 0x40, ++ PCF50606_DCDC4_REGSEL_DCDC2 = 0x80, ++}; ++ ++enum pcf50606_reg_dcdec2 { ++ PCF50606_DCDEC2_MODE_AUTO = 0x00, ++ PCF50606_DCDEC2_MODE_PWM = 0x01, ++ PCF50606_DCDEC2_MODE_PCF = 0x02, ++ PCF50606_DCDEC2_OFF_FLOAT = 0x00, ++ PCF50606_DCDEC2_OFF_BYPASS = 0x04, ++}; ++ ++enum pcf50606_reg_dcudc2 { ++ PCF50606_DCUDC2_MODE_AUTO = 0x00, ++ PCF50606_DCUDC2_MODE_PWM = 0x01, ++ PCF50606_DCUDC2_MODE_PCF = 0x02, ++ PCF50606_DCUDC2_OFF_FLOAT = 0x00, ++ PCF50606_DCUDC2_OFF_BYPASS = 0x04, ++}; ++ ++enum pcf50606_regulator_id { ++ PCF50606_REGULATOR_DCD, ++ PCF50606_REGULATOR_DCDE, ++ PCF50606_REGULATOR_DCUD, ++ PCF50606_REGULATOR_D1REG, ++ PCF50606_REGULATOR_D2REG, ++ PCF50606_REGULATOR_D3REG, ++ PCF50606_REGULATOR_LPREG, ++ PCF50606_REGULATOR_IOREG, ++}; ++ ++#endif diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h -index 50d4a04..fbdea09 100644 +index 50d4a04..0048cf6 100644 --- a/include/linux/mfd/pcf50633/core.h +++ b/include/linux/mfd/pcf50633/core.h @@ -1,4 +1,5 @@ @@ -49482,7 +49512,12 @@ index 50d4a04..fbdea09 100644 * core.h -- Core driver for NXP PCF50633 * * (C) 2006-2008 by Openmoko, Inc. -@@ -19,6 +20,7 @@ +@@ -14,11 +15,11 @@ + #define __LINUX_MFD_PCF50633_CORE_H + + #include +-#include + #include #include #include #include @@ -49490,7 +49525,7 @@ index 50d4a04..fbdea09 100644 struct pcf50633; -@@ -46,21 +48,11 @@ struct pcf50633_platform_data { +@@ -46,21 +47,11 @@ struct pcf50633_platform_data { u8 resumers[5]; struct pcf50633_bl_platform_data *backlight_data; @@ -49514,13 +49549,13 @@ index 50d4a04..fbdea09 100644 int pcf50633_read_block(struct pcf50633 *, u8 reg, int nr_regs, u8 *data); int pcf50633_write_block(struct pcf50633 *pcf, u8 reg, -@@ -138,12 +130,13 @@ struct pcf50633 { +@@ -138,12 +129,11 @@ struct pcf50633 { struct pcf50633_platform_data *pdata; int irq; - struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ]; - struct work_struct irq_work; - struct workqueue_struct *work_queue; +- struct work_struct irq_work; +- struct workqueue_struct *work_queue; struct mutex lock; + struct mutex irq_lock; @@ -49529,7 +49564,7 @@ index 50d4a04..fbdea09 100644 u8 suspend_irq_masks[5]; u8 resume_reason[5]; -@@ -151,12 +144,9 @@ struct pcf50633 { +@@ -151,12 +141,9 @@ struct pcf50633 { int onkey1s_held; diff --git a/recipes/linux/linux-2.6.37/shr.patch b/recipes/linux/linux-2.6.37/shr.patch index 7400d31d2e..bcca6efc49 100644 --- a/recipes/linux/linux-2.6.37/shr.patch +++ b/recipes/linux/linux-2.6.37/shr.patch @@ -1,13 +1,1110 @@ -From ba03d027f8a6ae3eb6d6805a2d27fce422e7adad Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Sat, 7 Nov 2009 20:33:06 +0100 -Subject: [PATCH] wm8753: fix build with gcc-4.4.2, which works ok with 4.1.2 +All patches from shr kernel repository +rebased on top of openmoko kernel repository -Signed-off-by: Martin Jansa ---- - sound/soc/codecs/wm8753.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) +http://gitorious.org/~jama/htc-msm-2-6-32/openmoko-kernel/commits/shr-2.6.37 +ccd549e Use 100 as HZ value on S3C24XX +7afc3f0 wm8753: use snd_soc_jack on neo1973 +4941630 Force GPS power up on resume if it were powered up on suspend +ef4b55b s3c2410_ts: jitter less touchscreen for glamo, version 4 +dc7bd23 Openmoko resume reason sysfs node ported from 2.6.29 +40e1523 Rename /dev/s3c2410_serialXXX to /dev/ttySACXXX +41fb019 glamo-display: fix WSOD for 242 timming +2d81aa9 Enable powering off after 8s POWER press +743f76b Fix high power consumption in suspend +3adb6be tslib relies on ts pressures events so this hack is needed to get tslib stuff working +dcd1e55 ar6000_delay.patch +f00d735 usbhost.patch +4633ec7 touchscreen: ignore unexpected interrupts +1b95598 wm8753: fix build with gcc-4.4.2, which works ok with 4.1.2 + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index d56d21c..fea7f49 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1302,7 +1302,7 @@ source kernel/Kconfig.preempt + + config HZ + int +- default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P64X0 || \ ++ default 200 if ARCH_EBSA110 || ARCH_S5P64X0 || \ + ARCH_S5P6442 || ARCH_S5PV210 || ARCH_S5PV310 + default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER + default AT91_TIMER_HZ if ARCH_AT91 +diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile +index 035d116..16d9855 100644 +--- a/arch/arm/mach-s3c2440/Makefile ++++ b/arch/arm/mach-s3c2440/Makefile +@@ -38,6 +38,7 @@ obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o \ + gta02-pm-bt.o \ + gta02-pm-gps.o \ + gta02-pm-gsm.o \ ++ gta02-pm-usbhost.o \ + gta02-pm-wlan.o \ + gta02-fiq.o \ + gta02-hdq.o \ +diff --git a/arch/arm/mach-s3c2440/gta02-pm-gps.c b/arch/arm/mach-s3c2440/gta02-pm-gps.c +index 5f57eb4..092f5a0 100644 +--- a/arch/arm/mach-s3c2440/gta02-pm-gps.c ++++ b/arch/arm/mach-s3c2440/gta02-pm-gps.c +@@ -42,7 +42,7 @@ int gta02_pm_gps_is_on(void) + EXPORT_SYMBOL_GPL(gta02_pm_gps_is_on); + + /* This is the POWERON pin */ +-static void gps_pwron_set(int on) ++static void gps_pwron_set(int on, int ignore_state) + { + if (on) { + /* return UART pins to being UART pins */ +@@ -50,7 +50,7 @@ static void gps_pwron_set(int on) + /* remove pulldown now it won't be floating any more */ + s3c_gpio_setpull(S3C2410_GPH(5), S3C_GPIO_PULL_NONE); + +- if (!gta02_gps.power_was_on) ++ if (!gta02_gps.power_was_on || ignore_state) + regulator_enable(gta02_gps.regulator); + } else { + /* +@@ -61,7 +61,7 @@ static void gps_pwron_set(int on) + gpio_set_value(S3C2410_GPH(4), 0); + /* don't let RX from unpowered GPS float */ + s3c_gpio_setpull(S3C2410_GPH(5), S3C_GPIO_PULL_DOWN); +- if (gta02_gps.power_was_on) ++ if (gta02_gps.power_was_on || ignore_state) + regulator_disable(gta02_gps.regulator); + } + } +@@ -108,7 +108,7 @@ static ssize_t power_gps_write(struct device *dev, + unsigned long on = simple_strtoul(buf, NULL, 10); + + if (!strcmp(attr->attr.name, "power_on")) { +- gps_pwron_set(on); ++ gps_pwron_set(on, 0); + gta02_gps.power_was_on = !!on; + #ifdef CONFIG_PM + } else if (!strcmp(attr->attr.name, "keep_on_in_suspend")) { +@@ -123,7 +123,7 @@ static int gta02_pm_gps_suspend(struct device *dev) + { + if (!gta02_gps.keep_on_in_suspend || + !gta02_gps.power_was_on) +- gps_pwron_set(0); ++ gps_pwron_set(0, 0); + else + dev_warn(dev, "GTA02: keeping gps ON " + "during suspend\n"); +@@ -133,7 +133,7 @@ static int gta02_pm_gps_suspend(struct device *dev) + static int gta02_pm_gps_resume(struct device *dev) + { + if (!gta02_gps.keep_on_in_suspend && gta02_gps.power_was_on) +- gps_pwron_set(1); ++ gps_pwron_set(1, 1); + + return 0; + } +diff --git a/arch/arm/mach-s3c2440/gta02-pm-usbhost.c b/arch/arm/mach-s3c2440/gta02-pm-usbhost.c +new file mode 100644 +index 0000000..233340a +--- /dev/null ++++ b/arch/arm/mach-s3c2440/gta02-pm-usbhost.c +@@ -0,0 +1,174 @@ ++/* ++ * USBHOST Management code for the Openmoko Freerunner GSM Phone ++ * ++ * (C) 2007 by Openmoko Inc. ++ * Author: Harald Welte ++ * 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 version 2 as ++ * published by the Free Software Foundation ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++ ++static struct regulator *gta02_usbhost_regulator; ++ ++static ssize_t usbhost_read(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ if (!strcmp(attr->attr.name, "power_on")) { ++ if (regulator_is_enabled(gta02_usbhost_regulator)) ++ goto out_1; ++ } ++ ++ return strlcpy(buf, "0\n", 3); ++out_1: ++ return strlcpy(buf, "1\n", 3); ++} ++ ++static void usbhost_on_off(struct device *dev, int on) ++{ ++ ++ on = !!on; ++ ++ if (on == regulator_is_enabled(gta02_usbhost_regulator)) ++ return; ++ ++ if (!on) { ++ regulator_disable(gta02_usbhost_regulator); ++ return; ++ } ++ ++ regulator_enable(gta02_usbhost_regulator); ++} ++ ++static ssize_t usbhost_write(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ unsigned long on = simple_strtoul(buf, NULL, 10); ++ ++ if (!strcmp(attr->attr.name, "power_on")) { ++ usbhost_on_off(dev, on); ++ ++ return count; ++ } ++ ++ return count; ++} ++ ++static DEVICE_ATTR(power_on, 0644, usbhost_read, usbhost_write); ++ ++#ifdef CONFIG_PM ++ ++static int gta02_usbhost_suspend(struct device *dev) ++{ ++ return 0; ++} ++ ++static int gta02_usbhost_suspend_late(struct device *dev) ++{ ++ return 0; ++} ++ ++static int gta02_usbhost_resume(struct device *dev) ++{ ++ return 0; ++} ++ ++static struct dev_pm_ops gta02_usbhost_pm_ops = { ++ .suspend = gta02_usbhost_suspend, ++ .suspend_noirq = gta02_usbhost_suspend_late, ++ .resume = gta02_usbhost_resume, ++}; ++ ++#define GTA02_USBHOST_PM_OPS (>a02_usbhost_pm_ops) ++ ++#else ++#define GTA02_USBHOST_PM_OPS NULL ++#endif /* CONFIG_PM */ ++ ++static struct attribute *gta02_usbhost_sysfs_entries[] = { ++ &dev_attr_power_on.attr, ++ NULL ++}; ++ ++static struct attribute_group gta02_usbhost_attr_group = { ++ .name = NULL, ++ .attrs = gta02_usbhost_sysfs_entries, ++}; ++ ++static int __init gta02_usbhost_probe(struct platform_device *pdev) ++{ ++ int ret; ++ ++ gta02_usbhost_regulator = regulator_get_exclusive(&pdev->dev, "USBHOST"); ++ ++ if (IS_ERR(gta02_usbhost_regulator)) { ++ ret = PTR_ERR(gta02_usbhost_regulator); ++ dev_err(&pdev->dev, "Failed to get regulator: %d\n", ret); ++ return ret; ++ } ++ ++ ret = sysfs_create_group(&pdev->dev.kobj, >a02_usbhost_attr_group); ++ if (ret) { ++ dev_err(&pdev->dev, "Failed to create sysfs entries: %d\n", ret); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int gta02_usbhost_remove(struct platform_device *pdev) ++{ ++ usbhost_on_off(&pdev->dev, 0); ++ ++ sysfs_remove_group(&pdev->dev.kobj, >a02_usbhost_attr_group); ++ regulator_put(gta02_usbhost_regulator); ++ ++ return 0; ++} ++ ++static struct platform_driver gta02_usbhost_driver = { ++ .probe = gta02_usbhost_probe, ++ .remove = gta02_usbhost_remove, ++ .driver = { ++ .name = "gta02-pm-usbhost", ++ .pm = GTA02_USBHOST_PM_OPS, ++ }, ++}; ++ ++static int __devinit gta02_usbhost_init(void) ++{ ++ return platform_driver_register(>a02_usbhost_driver); ++} ++module_init(gta02_usbhost_init); ++ ++static void gta02_usbhost_exit(void) ++{ ++ platform_driver_unregister(>a02_usbhost_driver); ++} ++module_exit(gta02_usbhost_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Harald Welte "); ++MODULE_DESCRIPTION("Openmoko Freerunner USBHOST Power Management"); +diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c +index 450f1f2..b4b60aa 100644 +--- a/arch/arm/mach-s3c2440/mach-gta02.c ++++ b/arch/arm/mach-s3c2440/mach-gta02.c +@@ -109,6 +109,7 @@ + #include + #include + #include ++#include + + static struct pcf50633 *gta02_pcf; + +@@ -127,6 +128,10 @@ static long gta02_panic_blink(int state) + return delay; + } + ++struct platform_device gta02_resume_reason_device = { ++ .name = "neo1973-resume", ++ .num_resources = 0, ++}; + + static struct map_desc gta02_iodesc[] __initdata = { + { +@@ -177,6 +182,10 @@ static struct platform_device gta02_pm_gsm_dev = { + .name = "gta02-pm-gsm", + }; + ++static struct platform_device gta02_pm_usbhost_dev = { ++ .name = "gta02-pm-usbhost", ++}; ++ + static struct platform_device gta02_pm_wlan_dev = { + .name = "gta02-pm-wlan", + }; +@@ -186,6 +195,11 @@ static struct regulator_consumer_supply gsm_supply_consumer = { + .supply = "GSM", + }; + ++static struct regulator_consumer_supply usbhost_supply_consumer = { ++ .dev = >a02_pm_usbhost_dev.dev, ++ .supply = "USBHOST", ++}; ++ + static struct regulator_init_data gsm_supply_init_data = { + .constraints = { + .min_uV = 3700000, +@@ -197,6 +211,17 @@ static struct regulator_init_data gsm_supply_init_data = { + .consumer_supplies = &gsm_supply_consumer, + }; + ++static struct regulator_init_data usbhost_supply_init_data = { ++ .constraints = { ++ .min_uV = 3700000, ++ .max_uV = 3700000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL, ++ .valid_ops_mask = REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &usbhost_supply_consumer, ++}; ++ + static struct fixed_voltage_config gsm_supply_config = { + .supply_name = "GSM", + .microvolts = 3700000, +@@ -205,6 +230,14 @@ static struct fixed_voltage_config gsm_supply_config = { + .init_data = &gsm_supply_init_data, + }; + ++static struct fixed_voltage_config usbhost_supply_config = { ++ .supply_name = "USBHOST", ++ .microvolts = 3700000, ++ .gpio = GTA02_GPIO_PCF(PCF50633_GPO), ++ .enable_high = 1, ++ .init_data = &usbhost_supply_init_data, ++}; ++ + static struct platform_device gta02_gsm_supply_device = { + .name = "reg-fixed-voltage", + .id = 1, +@@ -213,6 +246,14 @@ static struct platform_device gta02_gsm_supply_device = { + }, + }; + ++static struct platform_device gta02_usbhost_supply_device = { ++ .name = "reg-fixed-voltage", ++ .id = 2, ++ .dev = { ++ .platform_data = &usbhost_supply_config, ++ }, ++}; ++ + /* + * we crank down SD Card clock dynamically when GPS is powered + */ +@@ -498,6 +539,11 @@ static struct regulator_consumer_supply hcldo_consumers[] = { + }, + }; + ++static void gta02_poweroff(void) ++{ ++ pcf50633_reg_set_bit_mask(gta02_pcf, PCF50633_REG_OOCSHDWN, 1, 1); ++} ++ + struct pcf50633_platform_data gta02_pcf_pdata = { + .resumers = { + [0] = PCF50633_INT1_USBINS | +@@ -534,7 +580,7 @@ struct pcf50633_platform_data gta02_pcf_pdata = { + .min_uV = 1300000, + .max_uV = 1600000, + .valid_modes_mask = REGULATOR_MODE_NORMAL, +- .always_on = 1, ++ .always_on = 0, + .apply_uV = 1, + }, + }, +@@ -626,6 +672,7 @@ struct pcf50633_platform_data gta02_pcf_pdata = { + }, + .probe_done = gta02_pmu_attach_child_devices, + .mbc_event_callback = gta02_pmu_event_callback, ++ .force_shutdown = gta02_poweroff, + }; + + +@@ -728,11 +775,31 @@ static struct s3c2410_hcd_info gta02_usb_info __initdata = { + }, + }; + ++static int glamo_slowed = 0; ++ ++static void gta02_ts_hook_before_adc () ++{ ++ if (!glamo_slowed) { ++ glamo_slowed = 1; ++ glamo_pixclock_slow(dev_get_drvdata (>a02_glamo_dev.dev)); ++ } ++}; ++ ++static void gta02_ts_hook_after_adc () ++{ ++ if (glamo_slowed) { ++ glamo_slowed = 0; ++ glamo_pixclock_fast(dev_get_drvdata (>a02_glamo_dev.dev)); ++ } ++}; ++ + /* Touchscreen */ + static struct s3c2410_ts_mach_info gta02_ts_info = { +- .delay = 10000, ++ .delay = 1000, + .presc = 0xff, /* slow as we can go */ +- .oversampling_shift = 2, ++ .oversampling_shift = 0, ++ .before_adc_hook = gta02_ts_hook_before_adc, ++ .after_adc_hook = gta02_ts_hook_after_adc, + }; + + /* Buttons */ +@@ -1073,6 +1140,7 @@ static struct platform_device *gta02_devices[] __initdata = { + static struct platform_device *gta02_devices_pmu_children[] = { + >a02_hdq_device, + >a02_platform_bat, ++ >a02_resume_reason_device, + }; + + +@@ -1102,11 +1170,6 @@ static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf) + regulator_has_full_constraints(); + } + +-static void gta02_poweroff(void) +-{ +- pcf50633_reg_set_bit_mask(gta02_pcf, PCF50633_REG_OOCSHDWN, 1, 1); +-} +- + struct gta02_device_children { + const char *dev_name; + size_t num_children; +@@ -1116,12 +1179,17 @@ struct gta02_device_children { + + static struct platform_device* gta02_pcf50633_gpio_children[] = { + >a02_gsm_supply_device, ++ >a02_usbhost_supply_device, + }; + + static struct platform_device* gta02_gsm_supply_children[] = { + >a02_pm_gsm_dev, + }; + ++static struct platform_device* gta02_usbhost_supply_children[] = { ++ >a02_pm_usbhost_dev, ++}; ++ + static struct platform_device* gta02_hdq_children[] = { + &bq27000_battery_device, + }; +@@ -1130,7 +1198,7 @@ static struct platform_device* gta02_hdq_children[] = { + static struct gta02_device_children gta02_device_children[] = { + { + .dev_name = "pcf50633-gpio.0", +- .num_children = 1, ++ .num_children = 2, + .children = gta02_pcf50633_gpio_children, + }, + { +@@ -1139,6 +1207,11 @@ static struct gta02_device_children gta02_device_children[] = { + .children = gta02_gsm_supply_children, + }, + { ++ .dev_name = "reg-fixed-voltage.2", ++ .num_children = 1, ++ .children = gta02_usbhost_supply_children, ++ }, ++ { + .dev_name = "spi2.0", + .probed_callback = gta02_jbt6k74_probe_completed, + }, +diff --git a/arch/arm/plat-samsung/include/plat/ts.h b/arch/arm/plat-samsung/include/plat/ts.h +index 26fdb22..f475349 100644 +--- a/arch/arm/plat-samsung/include/plat/ts.h ++++ b/arch/arm/plat-samsung/include/plat/ts.h +@@ -15,6 +15,8 @@ struct s3c2410_ts_mach_info { + int presc; + int oversampling_shift; + void (*cfg_gpio)(struct platform_device *dev); ++ void (*before_adc_hook)(void); ++ void (*after_adc_hook)(void); + }; + + extern void s3c24xx_ts_set_platdata(struct s3c2410_ts_mach_info *); +diff --git a/arch/arm/plat-samsung/time.c b/arch/arm/plat-samsung/time.c +index 2231d80..d342876 100644 +--- a/arch/arm/plat-samsung/time.c ++++ b/arch/arm/plat-samsung/time.c +@@ -195,12 +195,12 @@ static void s3c2410_timer_setup (void) + + /* configure clock tick */ + +- timer_usec_ticks = timer_mask_usec_ticks(6, pclk); ++ timer_usec_ticks = timer_mask_usec_ticks(12, pclk); + + tscaler = clk_get_parent(tdiv); + +- clk_set_rate(tscaler, pclk / 3); +- clk_set_rate(tdiv, pclk / 6); ++ clk_set_rate(tscaler, pclk / 6); ++ clk_set_rate(tdiv, pclk / 12); + clk_set_parent(tin, tdiv); + + tcnt = clk_get_rate(tin) / HZ; +diff --git a/drivers/ar6000/hif/hif2.c b/drivers/ar6000/hif/hif2.c +index 386d96e..90178d0 100644 +--- a/drivers/ar6000/hif/hif2.c ++++ b/drivers/ar6000/hif/hif2.c +@@ -517,6 +517,8 @@ static int ar6000_do_activate(struct hif_device *hif) + goto out_func_ready; + } + ++ mdelay (10); ++ + ret = htcCallbacks.deviceInsertedHandler(hif); + if (ret == A_OK) + return 0; +diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c +index 8feb7f3..21c113b 100644 +--- a/drivers/input/touchscreen/s3c2410_ts.c ++++ b/drivers/input/touchscreen/s3c2410_ts.c +@@ -20,7 +20,7 @@ + * Copyright 2009 Simtec Electronics + * + * Additional work by Herbert Pƶtzl and +- * Harald Welte ++ * Harald Welte and Gennady Kupava + */ + + #include +@@ -85,10 +85,19 @@ struct s3c2410ts { + int count; + int shift; + int features; ++ int expectedintr; /* kind of interrupt we are waiting for */ ++#ifdef CONFIG_MACH_NEO1973_GTA02 ++ void (*before_adc_hook)(void); ++ void (*after_adc_hook)(void); ++#endif + }; + + static struct s3c2410ts ts; + ++#define WAITFORINT_UP (0) ++#define WAITFORINT_DOWN (1) ++#define WAITFORINT_NOTHING (2) ++ + /** + * get_down - return the down state of the pen + * @data0: The data read from ADCDAT0 register. +@@ -126,6 +135,7 @@ static void touch_timer_fire(unsigned long data) + input_report_abs(ts.input, ABS_Y, ts.yp); + + input_report_key(ts.input, BTN_TOUCH, 1); ++ input_report_abs(ts.input, ABS_PRESSURE, 1); + input_sync(ts.input); + + ts.xp = 0; +@@ -133,6 +143,9 @@ static void touch_timer_fire(unsigned long data) + ts.count = 0; + } + ++#ifdef CONFIG_MACH_NEO1973_GTA02 ++ ts.before_adc_hook(); ++#endif + s3c_adc_start(ts.client, 0, 1 << ts.shift); + } else { + ts.xp = 0; +@@ -140,8 +153,10 @@ static void touch_timer_fire(unsigned long data) + ts.count = 0; + + input_report_key(ts.input, BTN_TOUCH, 0); ++ input_report_abs(ts.input, ABS_PRESSURE, 0); + input_sync(ts.input); +- ++ ++ ts.expectedintr = WAITFORINT_DOWN; + writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC); + } + } +@@ -166,13 +181,22 @@ static irqreturn_t stylus_irq(int irq, void *dev_id) + + down = get_down(data0, data1); + +- /* TODO we should never get an interrupt with down set while +- * the timer is running, but maybe we ought to verify that the +- * timer isn't running anyways. */ ++ /* sitautions below can actually happen on openmoko hardware while ++ various debugging facilities are turned off */ ++ if (ts.expectedintr == WAITFORINT_NOTHING) ++ return IRQ_HANDLED; ++ if (!down && ts.expectedintr == WAITFORINT_DOWN) { ++ writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC); ++ return IRQ_HANDLED; ++ } else if (down && ts.expectedintr == WAITFORINT_UP) { ++ writel(WAIT4INT | INT_UP, ts.io + S3C2410_ADCTSC); ++ return IRQ_HANDLED; ++ } ++ ts.expectedintr = WAITFORINT_NOTHING; + +- if (down) +- s3c_adc_start(ts.client, 0, 1 << ts.shift); +- else ++ if (down) { ++ mod_timer(&touch_timer, jiffies + 2); ++ } else + dev_dbg(ts.dev, "%s: count=%d\n", __func__, ts.count); + + if (ts.features & FEAT_PEN_IRQ) { +@@ -203,6 +227,11 @@ static void s3c24xx_ts_conversion(struct s3c_adc_client *client, + + ts.count++; + ++#ifdef CONFIG_MACH_NEO1973_GTA02 ++ if (!*left) ++ ts.after_adc_hook(); ++#endif ++ + /* From tests, it seems that it is unlikely to get a pen-up + * event during the conversion process which means we can + * ignore any pen-up events with less than the requisite +@@ -226,7 +255,8 @@ static void s3c24xx_ts_select(struct s3c_adc_client *client, unsigned select) + writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, + ts.io + S3C2410_ADCTSC); + } else { +- mod_timer(&touch_timer, jiffies+1); ++ mod_timer(&touch_timer, jiffies + 3); ++ ts.expectedintr = WAITFORINT_UP; + writel(WAIT4INT | INT_UP, ts.io + S3C2410_ADCTSC); + } + } +@@ -304,6 +334,7 @@ static int __devinit s3c2410ts_probe(struct platform_device *pdev) + if ((info->delay & 0xffff) > 0) + writel(info->delay & 0xffff, ts.io + S3C2410_ADCDLY); + ++ ts.expectedintr = WAITFORINT_DOWN; + writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC); + + input_dev = input_allocate_device(); +@@ -318,6 +349,7 @@ static int __devinit s3c2410ts_probe(struct platform_device *pdev) + ts.input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + input_set_abs_params(ts.input, ABS_X, 0, 0x3FF, 0, 0); + input_set_abs_params(ts.input, ABS_Y, 0, 0x3FF, 0, 0); ++ input_set_abs_params(ts.input, ABS_PRESSURE, 0, 1, 0, 0); + + ts.input->name = "S3C24XX TouchScreen"; + ts.input->id.bustype = BUS_HOST; +@@ -328,6 +360,11 @@ static int __devinit s3c2410ts_probe(struct platform_device *pdev) + ts.shift = info->oversampling_shift; + ts.features = platform_get_device_id(pdev)->driver_data; + ++#ifdef CONFIG_MACH_NEO1973_GTA02 ++ ts.before_adc_hook = info->before_adc_hook; ++ ts.after_adc_hook = info->after_adc_hook; ++#endif ++ + ret = request_irq(ts.irq_tc, stylus_irq, IRQF_DISABLED, + "s3c2410_ts_pen", ts.input); + if (ret) { +@@ -382,8 +419,18 @@ static int __devexit s3c2410ts_remove(struct platform_device *pdev) + #ifdef CONFIG_PM + static int s3c2410ts_suspend(struct device *dev) + { ++ ts.expectedintr = WAITFORINT_NOTHING; + writel(TSC_SLEEP, ts.io + S3C2410_ADCTSC); + disable_irq(ts.irq_tc); ++ ++ del_timer_sync(&touch_timer); ++ /* TODO - need to fix races better, as timer can fire ++ between TSC_SLEEP and del_timer_sync() and shedule next adc */ ++ ++#ifdef CONFIG_MACH_NEO1973_GTA02 ++ ts.after_adc_hook(); ++#endif ++ + clk_disable(ts.clock); + + return 0; +@@ -401,6 +448,7 @@ static int s3c2410ts_resume(struct device *dev) + if ((info->delay & 0xffff) > 0) + writel(info->delay & 0xffff, ts.io + S3C2410_ADCDLY); + ++ ts.expectedintr = WAITFORINT_DOWN; + writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC); + + return 0; +diff --git a/drivers/mfd/glamo-core.c b/drivers/mfd/glamo-core.c +index 8880263..a0556b8 100644 +--- a/drivers/mfd/glamo-core.c ++++ b/drivers/mfd/glamo-core.c +@@ -160,6 +160,19 @@ static void reg_set_bit_mask(struct glamo_core *glamo, + spin_unlock(&glamo->lock); + } + ++ ++ ++static void reg_checkandset_bit_mask(struct glamo_core *glamo, ++ uint16_t reg, uint16_t mask, ++ uint16_t val, uint16_t check) ++{ ++ spin_lock(&glamo->lock); ++ if (__reg_read(glamo, reg) & mask == check) ++ __reg_set_bit_mask(glamo, reg, mask, val); ++ spin_unlock(&glamo->lock); ++} ++ ++ + static inline void __reg_set_bit(struct glamo_core *glamo, + uint16_t reg, uint16_t bit) + { +@@ -169,6 +182,49 @@ static inline void __reg_set_bit(struct glamo_core *glamo, + __reg_write(glamo, reg, tmp); + } + ++void glamo_pixclock_slow (struct glamo_core *glamo) ++{ ++ ++ int x, lastx = 0; ++ int timeout = 1000000; ++ int threshold = 5; ++ int fa; ++ ++ int evcnt = 0; ++ ++ for (fa = 0; fa < timeout; fa++) { ++ x = glamo_reg_read(glamo, 0x1100 + GLAMO_REG_LCD_STATUS1) & 0x3ff; ++ ++ ++ if (x == lastx) { ++ evcnt++; ++ if (evcnt == threshold) ++ break; ++ } else { ++ evcnt = 0; ++ lastx = x; ++ } ++ } ++ if (fa == timeout) { ++ printk (KERN_WARNING "Glamo: Error waiting for stable x position.\n"); ++ } ++ ++ /* then, make glamo slower */ ++ /* it's not a problems if in rare case we do not slow down glamo properly ++ as all we'll get in that case is singe jittered value */ ++ ++ glamo->slowed_divider = glamo_reg_read (glamo, 0x36) & 0xFF; ++ reg_set_bit_mask (glamo, 0x36, 0xFF, 0xFF); ++ ++} ++ ++void glamo_pixclock_fast (struct glamo_core *glamo) ++{ ++ reg_checkandset_bit_mask (glamo, 0x36, 0xFF, glamo->slowed_divider, 0xFF); ++} ++EXPORT_SYMBOL_GPL(glamo_pixclock_fast); ++EXPORT_SYMBOL_GPL(glamo_pixclock_slow); ++ + static inline void __reg_clear_bit(struct glamo_core *glamo, + uint16_t reg, uint16_t bit) + { +@@ -930,6 +986,7 @@ static int __devinit glamo_probe(struct platform_device *pdev) + glamo->irq = platform_get_irq(pdev, 0); + glamo->irq_base = irq_base = platform_get_irq(pdev, 1); + glamo->pdata = pdev->dev.platform_data; ++ glamo->slowed_divider = 0xFF; + + if (glamo->irq < 0) { + ret = glamo->irq; +@@ -965,7 +1022,7 @@ static int __devinit glamo_probe(struct platform_device *pdev) + goto err_free; + } + +- glamo->base = ioremap(glamo->mem->start, resource_size(glamo->mem)); ++ glamo->base = ioremap(glamo->mem->start, resource_size(glamo->mem)+0x1100); + if (!glamo->base) { + dev_err(&pdev->dev, "Failed to ioremap() memory region\n"); + goto err_release_mem_region; +diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig +index 4d073f1..35c3563 100644 +--- a/drivers/misc/Kconfig ++++ b/drivers/misc/Kconfig +@@ -452,6 +452,13 @@ config PCH_PHUB + To compile this driver as a module, choose M here: the module will + be called pch_phub. + ++config OPENMOKO_RESUME_REASON ++ tristate "Openmoko resume reason driver" ++ depends on SYSFS ++ help ++ This driver adds a sysfs entry for accessing the resume reason ++ of the openmoko board. ++ + source "drivers/misc/c2port/Kconfig" + source "drivers/misc/eeprom/Kconfig" + source "drivers/misc/cb710/Kconfig" +diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile +index 98009cc..1f0e902 100644 +--- a/drivers/misc/Makefile ++++ b/drivers/misc/Makefile +@@ -42,3 +42,4 @@ obj-$(CONFIG_ARM_CHARLCD) += arm-charlcd.o + obj-$(CONFIG_PCH_PHUB) += pch_phub.o + obj-y += ti-st/ + obj-$(CONFIG_AB8500_PWM) += ab8500-pwm.o ++obj-$(CONFIG_OPENMOKO_RESUME_REASON) += neo1973_pm_resume_reason.o +diff --git a/drivers/misc/neo1973_pm_resume_reason.c b/drivers/misc/neo1973_pm_resume_reason.c +new file mode 100644 +index 0000000..5bcc818 +--- /dev/null ++++ b/drivers/misc/neo1973_pm_resume_reason.c +@@ -0,0 +1,142 @@ ++/* ++ * Resume reason sysfs for the FIC Neo1973 GSM Phone ++ * ++ * (C) 2008 by Openmoko Inc. ++ * Author: Andy Green ++ * 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 resume_reason 2 as ++ * published by the Free Software Foundation ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#ifdef CONFIG_MACH_NEO1973_GTA02 ++#include ++#include ++#endif ++ ++static unsigned int *gstatus4_mapped; ++static char *resume_reasons[][17] = { { /* GTA01 */ ++ "EINT00_NULL", ++ "EINT01_GSM", ++ "EINT02_NULL", ++ "EINT03_NULL", ++ "EINT04_JACK", ++ "EINT05_SDCARD", ++ "EINT06_AUXKEY", ++ "EINT07_HOLDKEY", ++ "EINT08_NULL", ++ "EINT09_NULL", ++ "EINT10_NULL", ++ "EINT11_NULL", ++ "EINT12_NULL", ++ "EINT13_NULL", ++ "EINT14_NULL", ++ "EINT15_NULL", ++ NULL ++}, { /* GTA02 */ ++ "EINT00_ACCEL1", ++ "EINT01_GSM", ++ "EINT02_BLUETOOTH", ++ "EINT03_DEBUGBRD", ++ "EINT04_JACK", ++ "EINT05_WLAN", ++ "EINT06_AUXKEY", ++ "EINT07_HOLDKEY", ++ "EINT08_ACCEL2", ++ "EINT09_PMU", ++ "EINT10_NULL", ++ "EINT11_NULL", ++ "EINT12_GLAMO", ++ "EINT13_NULL", ++ "EINT14_NULL", ++ "EINT15_NULL", ++ NULL ++} }; ++ ++static ssize_t resume_reason_read(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ int bit = 0; ++ char *end = buf; ++ int gta = !!machine_is_neo1973_gta02(); ++ ++ for (bit = 0; resume_reasons[gta][bit]; bit++) { ++ if ((*gstatus4_mapped) & (1 << bit)) ++ end += sprintf(end, "* %s\n", resume_reasons[gta][bit]); ++ else ++ end += sprintf(end, " %s\n", resume_reasons[gta][bit]); ++ } ++ ++ return end - buf; ++} ++ ++ ++static DEVICE_ATTR(resume_reason, 0644, resume_reason_read, NULL); ++ ++static struct attribute *neo1973_resume_reason_sysfs_entries[] = { ++ &dev_attr_resume_reason.attr, ++ NULL ++}; ++ ++static struct attribute_group neo1973_resume_reason_attr_group = { ++ .name = NULL, ++ .attrs = neo1973_resume_reason_sysfs_entries, ++}; ++ ++static int __init neo1973_resume_reason_probe(struct platform_device *pdev) ++{ ++ dev_info(&pdev->dev, "starting\n"); ++ ++ gstatus4_mapped = ioremap(0x560000BC /* GSTATUS4 */, 0x4); ++ if (!gstatus4_mapped) { ++ dev_err(&pdev->dev, "failed to ioremap() memory region\n"); ++ return -EINVAL; ++ } ++ ++ return sysfs_create_group(&pdev->dev.kobj, ++ &neo1973_resume_reason_attr_group); ++} ++ ++static int neo1973_resume_reason_remove(struct platform_device *pdev) ++{ ++ sysfs_remove_group(&pdev->dev.kobj, &neo1973_resume_reason_attr_group); ++ iounmap(gstatus4_mapped); ++ return 0; ++} ++ ++static struct platform_driver neo1973_resume_reason_driver = { ++ .probe = neo1973_resume_reason_probe, ++ .remove = neo1973_resume_reason_remove, ++ .driver = { ++ .name = "neo1973-resume", ++ }, ++}; ++ ++static int __devinit neo1973_resume_reason_init(void) ++{ ++ return platform_driver_register(&neo1973_resume_reason_driver); ++} ++ ++static void neo1973_resume_reason_exit(void) ++{ ++ platform_driver_unregister(&neo1973_resume_reason_driver); ++} ++ ++module_init(neo1973_resume_reason_init); ++module_exit(neo1973_resume_reason_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Andy Green "); ++MODULE_DESCRIPTION("Neo1973 resume_reason"); +diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c +index ac1f0b0..3a1fdb7 100644 +--- a/drivers/serial/samsung.c ++++ b/drivers/serial/samsung.c +@@ -883,7 +883,7 @@ static struct uart_ops s3c24xx_serial_ops = { + + static struct uart_driver s3c24xx_uart_drv = { + .owner = THIS_MODULE, +- .dev_name = "s3c2410_serial", ++ .dev_name = S3C24XX_SERIAL_NAME, + .nr = CONFIG_SERIAL_SAMSUNG_UARTS, + .cons = S3C24XX_SERIAL_CONSOLE, + .driver_name = S3C24XX_SERIAL_NAME, +diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c +index a68af2d..02bd7b0 100644 +--- a/drivers/usb/host/ohci-s3c2410.c ++++ b/drivers/usb/host/ohci-s3c2410.c +@@ -22,6 +22,10 @@ + #include + #include + #include ++#include ++#include ++#include ++#include + + #define valid_port(idx) ((idx) == 1 || (idx) == 2) + +@@ -306,6 +310,42 @@ static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc) + local_irq_restore(flags); + } + ++/* switching of USB pads */ ++static ssize_t show_usb_mode(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ if (__raw_readl(S3C24XX_MISCCR) & S3C2410_MISCCR_USBHOST) ++ return sprintf(buf, "host\n"); ++ ++ return sprintf(buf, "device\n"); ++} ++ ++static ssize_t set_usb_mode(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ if (!strncmp(buf, "host", 4)) { ++ printk("s3c2410: changing usb to host\n"); ++ s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST, ++ S3C2410_MISCCR_USBHOST); ++ /* FIXME: ++ * - call machine-specific disable-pullup function i ++ * - enable +Vbus (if hardware supports it) ++ */ ++ s3c2410_gpio_setpin(GTA02_GPIO_USB_PULLUP, 0); ++ } else if (!strncmp(buf, "device", 6)) { ++ printk("s3c2410: changing usb to device\n"); ++ s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST, 0); ++ s3c2410_gpio_setpin(GTA02_GPIO_USB_PULLUP, 1); ++ } else { ++ printk("s3c2410: unknown mode\n"); ++ return -EINVAL; ++ } ++ ++ return count; ++} ++ ++static DEVICE_ATTR(usb_mode, S_IRUGO | S_IWUSR, show_usb_mode, set_usb_mode); ++ + /* may be called without controller electrically present */ + /* may be called with controller, bus, and devices active */ + +@@ -323,6 +363,7 @@ static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc) + static void + usb_hcd_s3c2410_remove (struct usb_hcd *hcd, struct platform_device *dev) + { ++ device_remove_file(&dev->dev, &dev_attr_usb_mode); + usb_remove_hcd(hcd); + s3c2410_stop_hc(dev); + iounmap(hcd->regs); +@@ -390,8 +431,15 @@ static int usb_hcd_s3c2410_probe (const struct hc_driver *driver, + if (retval != 0) + goto err_ioremap; + ++ retval = device_create_file(&dev->dev, &dev_attr_usb_mode); ++ if (retval != 0) ++ goto err_hcd; ++ + return 0; + ++ err_hcd: ++ usb_remove_hcd(hcd); ++ + err_ioremap: + s3c2410_stop_hc(dev); + iounmap(hcd->regs); +diff --git a/drivers/video/glamo-fb.c b/drivers/video/glamo-fb.c +index 3f8ec8d..a428047 100644 +--- a/drivers/video/glamo-fb.c ++++ b/drivers/video/glamo-fb.c +@@ -312,7 +312,7 @@ static int glamofb_cmd_mode(struct glamofb_handle *gfb, int on) + glamofb_reg_write(gfb, GLAMO_REG_LCD_COMMAND1, + GLAMO_LCD_CMD_TYPE_DISP | + GLAMO_LCD_CMD_DATA_DISP_SYNC); +- ++ mdelay(1); + glamofb_reg_write(gfb, GLAMO_REG_LCD_COMMAND1, + GLAMO_LCD_CMD_TYPE_DISP | + GLAMO_LCD_CMD_DATA_DISP_FIRE); +diff --git a/include/linux/mfd/glamo-core.h b/include/linux/mfd/glamo-core.h +index 8275a2f..8e3e56e 100644 +--- a/include/linux/mfd/glamo-core.h ++++ b/include/linux/mfd/glamo-core.h +@@ -37,6 +37,7 @@ struct glamo_core { + enum glamo_engine_state engine_state[__NUM_GLAMO_ENGINES]; + spinlock_t lock; + uint16_t saved_irq_mask; ++ int slowed_divider; + #ifdef CONFIG_DEBUG_FS + struct dentry *debugfs_dir; + #endif +@@ -55,4 +56,6 @@ int glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine); + void glamo_engine_reset(struct glamo_core *glamo, enum glamo_engine engine); + int glamo_engine_reclock(struct glamo_core *glamo, + enum glamo_engine engine, int ps); ++void glamo_pixclock_slow (struct glamo_core *glamo); ++void glamo_pixclock_fast (struct glamo_core *glamo); + #endif /* __GLAMO_CORE_H */ diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c index 28ee2e6..d5b4a40 100644 --- a/sound/soc/codecs/wm8753.c @@ -23,6 +1120,87 @@ index 28ee2e6..d5b4a40 100644 K = Kpart & 0xFFFFFFFF; --- -1.7.4.rc1 - +diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c +index dc5893d..37835ca 100644 +--- a/sound/soc/s3c24xx/neo1973_wm8753.c ++++ b/sound/soc/s3c24xx/neo1973_wm8753.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -252,6 +253,8 @@ static const struct snd_kcontrol_new wm8753_neo1973_controls[] = { + + /* GTA01 specific controlls */ + ++static struct snd_soc_jack hs_jack; ++ + #ifdef CONFIG_MACH_NEO1973_GTA01 + + static const struct snd_soc_dapm_widget wm8753_dapm_widgets_gta01[] = { +@@ -318,6 +321,29 @@ static const struct snd_kcontrol_new wm8753_neo1973_gta02_controls[] = {}; + static const struct snd_soc_dapm_widget wm8753_dapm_widgets_gta02[] = {}; + #endif + ++static struct snd_soc_jack_pin hs_jack_pins[] = { ++ { ++ .pin = "Headset Mic", ++ .mask = SND_JACK_MICROPHONE, ++ }, ++ { ++ .pin = "Stereo Out", ++ .mask = SND_JACK_HEADPHONE, ++ .invert = 1, ++ }, ++}; ++ ++static struct snd_soc_jack_gpio hs_jack_gpios[] = { ++ { ++ .gpio = GTA02_GPIO_JACK_INSERT, ++ .name = "headset-gpio", ++ .report = SND_JACK_HEADSET, ++ .debounce_time = 100, ++ }, ++}; ++ ++ ++ + static int neo1973_wm8753_init(struct snd_soc_pcm_runtime *rtd) + { + struct snd_soc_codec *codec = rtd->codec; +@@ -397,6 +423,24 @@ static int neo1973_wm8753_init(struct snd_soc_pcm_runtime *rtd) + + snd_soc_dapm_sync(codec); + ++ err = snd_soc_jack_new(codec, "Headset Jack", SND_JACK_HEADSET, &hs_jack); ++ if (err) { ++ dev_err(codec->card->dev, "failed to alloc headset jack\n"); ++ return err; ++ } ++ ++ err = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins), hs_jack_pins); ++ if (err) { ++ dev_err(codec->card->dev, "failed to add headset jack pins\n"); ++ return err; ++ } ++ ++ err = snd_soc_jack_add_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios), hs_jack_gpios); ++ if (err) { ++ dev_err(codec->card->dev, "failed to add headset jack gpios\n"); ++ return err; ++ } ++ + return 0; + } + +@@ -551,6 +595,7 @@ static inline void neo1973_gta02_exit(void) {} + static void __exit neo1973_exit(void) + { + snd_soc_unregister_dais(&neo1973_snd_device->dev, 1); ++ snd_soc_jack_free_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios), hs_jack_gpios); + platform_device_unregister(neo1973_snd_device); + + if (machine_is_neo1973_gta02()) diff --git a/recipes/linux/linux-openmoko_2.6.37.bb b/recipes/linux/linux-openmoko_2.6.37.bb index 3e4d09ed58..633349ecc1 100644 --- a/recipes/linux/linux-openmoko_2.6.37.bb +++ b/recipes/linux/linux-openmoko_2.6.37.bb @@ -1,2 +1,3 @@ require linux_${PV}.bb require linux-openmoko.inc +OM-PR = "1" diff --git a/recipes/linux/linux_2.6.37.bb b/recipes/linux/linux_2.6.37.bb index 5e92e63bb9..005996931d 100644 --- a/recipes/linux/linux_2.6.37.bb +++ b/recipes/linux/linux_2.6.37.bb @@ -7,6 +7,7 @@ DEFAULT_PREFERENCE_openrd-base = "1" DEFAULT_PREFERENCE_openrd-client = "1" # needs more testing before making it new default # DEFAULT_PREFERENCE_om-gta02 = "1" +# DEFAULT_PREFERENCE_om-gta01 = "1" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \ file://defconfig " @@ -15,6 +16,10 @@ SRC_URI_append_om-gta02 = " \ file://openmoko.patch \ file://shr.patch \ " +SRC_URI_append_om-gta01 = " \ + file://openmoko.patch \ + file://shr.patch \ + " SRC_URI[kernel.md5sum] = "c8ee37b4fdccdb651e0603d35350b434" SRC_URI[kernel.sha256sum] = "edbf091805414739cf57a3bbfeba9e87f5e74f97e38f04d12060e9e0c71e383a" -- cgit 1.2.3-korg