Add basic framework for the openmoko platform. The kernel does build and boot, but...
authorMichael Büsch <mb@bu3sch.de>
Thu, 11 Dec 2008 22:20:51 +0000 (22:20 +0000)
committerMichael Büsch <mb@bu3sch.de>
Thu, 11 Dec 2008 22:20:51 +0000 (22:20 +0000)
SVN-Revision: 13605

target/linux/openmoko/Makefile [new file with mode: 0644]
target/linux/openmoko/base-files/etc/inittab [new file with mode: 0644]
target/linux/openmoko/base-files/etc/ipkg.conf [new file with mode: 0644]
target/linux/openmoko/config-2.6.24 [new file with mode: 0644]
target/linux/openmoko/image/Makefile [new file with mode: 0644]
target/linux/openmoko/patches-2.6.24/100-moko.patch [new file with mode: 0644]
target/linux/openmoko/profiles/100-gta02.mk [new file with mode: 0644]

diff --git a/target/linux/openmoko/Makefile b/target/linux/openmoko/Makefile
new file mode 100644 (file)
index 0000000..22bfaea
--- /dev/null
@@ -0,0 +1,24 @@
+# 
+# Copyright (C) 2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+ARCH:=arm
+BOARD:=openmoko
+BOARDNAME:=Openmoko
+FEATURES:=squashfs usb
+
+LINUX_VERSION:=2.6.24.7
+
+include $(INCLUDE_DIR)/target.mk
+
+KERNELNAME:="uImage"
+
+define Target/Description
+  Build fimware images for the Openmoko Smartphone.
+endef
+
+$(eval $(call BuildTarget))
diff --git a/target/linux/openmoko/base-files/etc/inittab b/target/linux/openmoko/base-files/etc/inittab
new file mode 100644 (file)
index 0000000..a627ce5
--- /dev/null
@@ -0,0 +1,6 @@
+::sysinit:/etc/init.d/rcS S boot
+::shutdown:/etc/init.d/rcS K stop
+tts/0::askfirst:/bin/ash --login
+ttyS0::askfirst:/bin/ash --login
+
+ttyS2::respawn:/sbin/getty -L ttyS2 115200 vt100
diff --git a/target/linux/openmoko/base-files/etc/ipkg.conf b/target/linux/openmoko/base-files/etc/ipkg.conf
new file mode 100644 (file)
index 0000000..10c4f67
--- /dev/null
@@ -0,0 +1,3 @@
+src snapshots http://vlink.guthrie.homedns.org/vlink3
+dest root /
+dest ram /tmp
diff --git a/target/linux/openmoko/config-2.6.24 b/target/linux/openmoko/config-2.6.24
new file mode 100644 (file)
index 0000000..98299ce
--- /dev/null
@@ -0,0 +1,1762 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Dec  7 22:06:07 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_FIQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=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_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=m
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_MACH_SMDK=y
+CONFIG_MACH_NEO1973=y
+CONFIG_PLAT_S3C=y
+CONFIG_CPU_LLSERIAL_S3C2410=y
+CONFIG_CPU_LLSERIAL_S3C2440=y
+
+#
+# Boot options
+#
+# CONFIG_S3C_BOOT_WATCHDOG is not set
+# CONFIG_S3C_BOOT_ERROR_RESET is not set
+
+#
+# Power management
+#
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C_LOWLEVEL_UART_PORT=2
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+CONFIG_S3C2410_PWM=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_VR1000 is not set
+CONFIG_MACH_QT2410=y
+CONFIG_MACH_NEO1973_GTA01=y
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_SMDK2412 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+CONFIG_S3C2440_C_FIQ=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+CONFIG_ARCH_S3C2440=y
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_SMDK2440_CPU2440=y
+CONFIG_MACH_HXD8=y
+CONFIG_MACH_NEO1973_GTA02=y
+# CONFIG_NEO1973_GTA02_2440 is not set
+# CONFIG_MACH_M800 is not set
+CONFIG_CPU_S3C2442=y
+
+#
+# S3C2442 Machines
+#
+CONFIG_SMDK2440_CPU2442=y
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=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_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="unused -- bootloader passes ATAG list debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+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=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE 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=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+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_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# 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_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=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_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=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 is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+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_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=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_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=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_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+# CONFIG_IP6_NF_RAW is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=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_RR 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_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO 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_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=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_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS 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 is not set
+CONFIG_MTD_ABSENT=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_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
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_PNP=y
+CONFIG_PNP_DEBUG=y
+
+#
+# Protocols
+#
+# CONFIG_PNPACPI 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_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_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST 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
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# 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_NET_SB1000 is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+# CONFIG_B44 is not set
+CONFIG_CS89x0=m
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_NEO1973=y
+CONFIG_KEYBOARD_QT2410=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+CONFIG_INPUT_LIS302DL=y
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_NR_TTY_DEVICES=4
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+CONFIG_SENSORS_PCF50606=y
+CONFIG_SENSORS_PCF50633=y
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_SENSORS_TSL256X=m
+# CONFIG_PCA9632 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_S3C24XX=y
+CONFIG_SPI_S3C24XX_GPIO=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_BATTERY_BQ27000_HDQ=y
+CONFIG_GTA02_HDQ=y
+# CONFIG_BATTERY_GTA01 is not set
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_MFD_GLAMO=y
+CONFIG_MFD_GLAMO_FB=y
+CONFIG_MFD_GLAMO_SPI_GPIO=y
+CONFIG_MFD_GLAMO_SPI_FB=y
+CONFIG_MFD_GLAMO_MCI=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_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_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# 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_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LTV350QV is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_GTA01=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+CONFIG_DISPLAY_JBT6K74=y
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION 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 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+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_NEO1973_WM8753_DEBUG is not set
+CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=m
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_WM8753=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+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
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_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
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=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_CP2101=m
+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_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+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_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+CONFIG_USB_SERIAL_SAFE_PADDED=y
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+CONFIG_USB_BERRY_CHARGE=m
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+
+#
+# SDIO support
+#
+CONFIG_SDIO=y
+CONFIG_SDIO_S3C24XX=y
+CONFIG_SDIO_S3C24XX_DMA=y
+CONFIG_SDIO_AR6000_WLAN=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+# CONFIG_MMC_SPI is not set
+CONFIG_MMC_S3C=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=m
+# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_NEO1973_VIBRATOR=y
+CONFIG_LEDS_NEO1973_GTA02=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_S3C=m
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# 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=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=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_CRAMFS=y
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+CONFIG_NLS_CODEPAGE_936=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 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_S3C_UART=2
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_DMA=y
diff --git a/target/linux/openmoko/image/Makefile b/target/linux/openmoko/image/Makefile
new file mode 100644 (file)
index 0000000..20f1759
--- /dev/null
@@ -0,0 +1,28 @@
+# 
+# Copyright (C) 2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/image.mk
+
+define Build/Clean
+endef
+
+define Build/Compile
+endef
+
+define Image/Prepare
+       cp $(LINUX_DIR)/arch/arm/boot/uImage $(KDIR)/uImage
+endef
+
+define Image/BuildKernel
+       cp $(KDIR)/uImage $(BIN_DIR)/openwrt-$(BOARD)-uImage
+endef
+
+define Image/Build
+endef
+
+$(eval $(call BuildImage))
diff --git a/target/linux/openmoko/patches-2.6.24/100-moko.patch b/target/linux/openmoko/patches-2.6.24/100-moko.patch
new file mode 100644 (file)
index 0000000..fea607a
--- /dev/null
@@ -0,0 +1,132055 @@
+Index: linux-2.6.24.7/arch/arm/configs/glofiish_defconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/configs/glofiish_defconfig 2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,1728 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.24
++# Wed Nov 12 00:27:24 2008
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_MMU=y
++CONFIG_NO_IOPORT=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_CGROUPS is not set
++# CONFIG_FAIR_GROUP_SCHED is not set
++# CONFIG_SYSFS_DEPRECATED is not set
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=m
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=m
++# CONFIG_DEFAULT_AS is not set
++CONFIG_DEFAULT_DEADLINE=y
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="deadline"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_AT91 is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++CONFIG_ARCH_S3C2410=y
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++CONFIG_PLAT_S3C24XX=y
++CONFIG_CPU_S3C244X=y
++CONFIG_S3C2410_DMA=y
++# CONFIG_S3C2410_DMA_DEBUG is not set
++CONFIG_MACH_SMDK=y
++CONFIG_PLAT_S3C=y
++CONFIG_CPU_LLSERIAL_S3C2410=y
++CONFIG_CPU_LLSERIAL_S3C2440=y
++
++#
++# Boot options
++#
++# CONFIG_S3C_BOOT_WATCHDOG is not set
++# CONFIG_S3C_BOOT_ERROR_RESET is not set
++
++#
++# Power management
++#
++# CONFIG_S3C2410_PM_CHECK is not set
++CONFIG_S3C_LOWLEVEL_UART_PORT=2
++
++#
++# S3C2400 Machines
++#
++CONFIG_CPU_S3C2410=y
++CONFIG_CPU_S3C2410_DMA=y
++CONFIG_S3C2410_PM=y
++CONFIG_S3C2410_GPIO=y
++CONFIG_S3C2410_CLOCK=y
++CONFIG_S3C2410_PWM=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_VR1000 is not set
++CONFIG_MACH_QT2410=y
++# CONFIG_MACH_NEO1973_GTA01 is not set
++
++#
++# S3C2412 Machines
++#
++# CONFIG_MACH_SMDK2413 is not set
++# CONFIG_MACH_SMDK2412 is not set
++# CONFIG_MACH_VSTMS is not set
++CONFIG_CPU_S3C2440=y
++CONFIG_S3C2440_DMA=y
++# CONFIG_S3C2440_C_FIQ is not set
++
++#
++# S3C2440 Machines
++#
++# CONFIG_MACH_ANUBIS is not set
++# CONFIG_MACH_OSIRIS is not set
++# CONFIG_MACH_RX3715 is not set
++CONFIG_ARCH_S3C2440=y
++# CONFIG_MACH_NEXCODER_2440 is not set
++CONFIG_SMDK2440_CPU2440=y
++# CONFIG_MACH_HXD8 is not set
++# CONFIG_MACH_NEO1973_GTA02 is not set
++CONFIG_MACH_M800=y
++CONFIG_CPU_S3C2442=y
++
++#
++# S3C2442 Machines
++#
++CONFIG_SMDK2440_CPU2442=y
++
++#
++# S3C2443 Machines
++#
++# CONFIG_MACH_SMDK2443 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM920T=y
++CONFIG_CPU_32v4T=y
++CONFIG_CPU_ABRT_EV4T=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_OUTER_CACHE is not set
++
++#
++# Bus support
++#
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_TICK_ONESHOT is not set
++CONFIG_PREEMPT=y
++CONFIG_NO_IDLE_HZ=y
++CONFIG_HZ=200
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE="root=/dev/mmcblk0p1 rootdelay=5"
++# CONFIG_XIP_KERNEL is not set
++CONFIG_KEXEC=y
++CONFIG_ATAGS_PROC=y
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++CONFIG_PM_LEGACY=y
++CONFIG_PM_DEBUG=y
++# CONFIG_PM_VERBOSE is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND_UP_POSSIBLE=y
++CONFIG_SUSPEND=y
++CONFIG_APM_EMULATION=y
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++CONFIG_XFRM_MIGRATE=y
++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=y
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++CONFIG_NET_IPIP=m
++CONFIG_NET_IPGRE=m
++# CONFIG_NET_IPGRE_BROADCAST is not set
++# CONFIG_IP_MROUTE 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=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++CONFIG_TCP_MD5SIG=y
++# CONFIG_IP_VS is not set
++CONFIG_IPV6=m
++# CONFIG_IPV6_PRIVACY is not set
++# CONFIG_IPV6_ROUTER_PREF is not set
++# CONFIG_IPV6_OPTIMISTIC_DAD is not set
++CONFIG_INET6_AH=m
++CONFIG_INET6_ESP=m
++CONFIG_INET6_IPCOMP=m
++# CONFIG_IPV6_MIP6 is not set
++CONFIG_INET6_XFRM_TUNNEL=m
++CONFIG_INET6_TUNNEL=m
++CONFIG_INET6_XFRM_MODE_TRANSPORT=m
++CONFIG_INET6_XFRM_MODE_TUNNEL=m
++CONFIG_INET6_XFRM_MODE_BEET=m
++# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
++CONFIG_IPV6_SIT=m
++CONFIG_IPV6_TUNNEL=m
++# CONFIG_IPV6_MULTIPLE_TABLES is not set
++# CONFIG_NETWORK_SECMARK is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++
++#
++# Core Netfilter Configuration
++#
++CONFIG_NETFILTER_NETLINK=m
++CONFIG_NETFILTER_NETLINK_QUEUE=m
++CONFIG_NETFILTER_NETLINK_LOG=m
++CONFIG_NF_CONNTRACK_ENABLED=m
++CONFIG_NF_CONNTRACK=m
++CONFIG_NF_CT_ACCT=y
++CONFIG_NF_CONNTRACK_MARK=y
++CONFIG_NF_CONNTRACK_EVENTS=y
++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_XTABLES=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
++CONFIG_NETFILTER_XT_TARGET_DSCP=m
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++CONFIG_NETFILTER_XT_TARGET_NFLOG=m
++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
++# 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_DCCP=m
++CONFIG_NETFILTER_XT_MATCH_DSCP=m
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++CONFIG_NETFILTER_XT_MATCH_HELPER=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_POLICY=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++CONFIG_NETFILTER_XT_MATCH_REALM=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 is not set
++# CONFIG_NETFILTER_XT_MATCH_U32 is not set
++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
++
++#
++# IP: Netfilter Configuration
++#
++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_IPRANGE=m
++CONFIG_IP_NF_MATCH_TOS=m
++# CONFIG_IP_NF_MATCH_RECENT is not set
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_MATCH_OWNER=m
++CONFIG_IP_NF_MATCH_ADDRTYPE=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_REDIRECT=m
++CONFIG_IP_NF_TARGET_NETMAP=m
++CONFIG_IP_NF_TARGET_SAME=m
++CONFIG_NF_NAT_SNMP_BASIC=m
++CONFIG_NF_NAT_PROTO_GRE=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_TOS=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_TARGET_CLUSTERIP=m
++# CONFIG_IP_NF_RAW is not set
++# CONFIG_IP_NF_ARPTABLES is not set
++
++#
++# IPv6: Netfilter Configuration (EXPERIMENTAL)
++#
++CONFIG_NF_CONNTRACK_IPV6=m
++# CONFIG_IP6_NF_QUEUE is not set
++CONFIG_IP6_NF_IPTABLES=m
++CONFIG_IP6_NF_MATCH_RT=m
++CONFIG_IP6_NF_MATCH_OPTS=m
++CONFIG_IP6_NF_MATCH_FRAG=m
++CONFIG_IP6_NF_MATCH_HL=m
++CONFIG_IP6_NF_MATCH_OWNER=m
++CONFIG_IP6_NF_MATCH_IPV6HEADER=m
++CONFIG_IP6_NF_MATCH_AH=m
++CONFIG_IP6_NF_MATCH_MH=m
++CONFIG_IP6_NF_MATCH_EUI64=m
++CONFIG_IP6_NF_FILTER=m
++CONFIG_IP6_NF_TARGET_LOG=m
++CONFIG_IP6_NF_TARGET_REJECT=m
++CONFIG_IP6_NF_MANGLE=m
++CONFIG_IP6_NF_TARGET_HL=m
++# CONFIG_IP6_NF_RAW is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++CONFIG_NET_SCHED=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_RR 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_INGRESS=m
++
++#
++# Classification
++#
++CONFIG_NET_CLS=y
++CONFIG_NET_CLS_BASIC=m
++CONFIG_NET_CLS_TCINDEX=m
++CONFIG_NET_CLS_ROUTE4=m
++CONFIG_NET_CLS_ROUTE=y
++CONFIG_NET_CLS_FW=m
++CONFIG_NET_CLS_U32=m
++CONFIG_CLS_U32_PERF=y
++CONFIG_CLS_U32_MARK=y
++CONFIG_NET_CLS_RSVP=m
++CONFIG_NET_CLS_RSVP6=m
++# CONFIG_NET_EMATCH is not set
++# CONFIG_NET_CLS_ACT is not set
++# CONFIG_NET_CLS_POLICE is not set
++# CONFIG_NET_CLS_IND is not set
++CONFIG_NET_SCH_FIFO=y
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO 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_HCIUSB=m
++CONFIG_BT_HCIUSB_SCO=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_AF_RXRPC is not set
++CONFIG_FIB_RULES=y
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++CONFIG_WIRELESS_EXT=y
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=m
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++CONFIG_CONNECTOR=m
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_MTD_OOPS is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_GEN_PROBE=y
++# CONFIG_MTD_CFI_ADV_OPTIONS 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 is not set
++CONFIG_MTD_ABSENT=y
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0x8000000
++CONFIG_MTD_PHYSMAP_LEN=0
++CONFIG_MTD_PHYSMAP_BANKWIDTH=2
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_DATAFLASH is not set
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++CONFIG_MTD_NAND=y
++CONFIG_MTD_NAND_VERIFY_WRITE=y
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_MUSEUM_IDS is not set
++CONFIG_MTD_NAND_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
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=m
++# CONFIG_BLK_DEV_CRYPTOLOOP 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_RAM_BLOCKSIZE=1024
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_IDE is not set
++
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=m
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=m
++# CONFIG_CHR_DEV_ST 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
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++CONFIG_SCSI_SCAN_ASYNC=y
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# 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_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++CONFIG_NET_PCI=y
++# CONFIG_B44 is not set
++CONFIG_CS89x0=m
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++
++#
++# USB Network Adapters
++#
++CONFIG_USB_CATC=m
++CONFIG_USB_KAWETH=m
++CONFIG_USB_PEGASUS=m
++CONFIG_USB_RTL8150=m
++CONFIG_USB_USBNET=y
++CONFIG_USB_NET_AX8817X=m
++CONFIG_USB_NET_CDCETHER=m
++CONFIG_USB_NET_DM9601=m
++CONFIG_USB_NET_GL620A=m
++CONFIG_USB_NET_NET1080=m
++CONFIG_USB_NET_PLUSB=m
++CONFIG_USB_NET_MCS7830=m
++CONFIG_USB_NET_RNDIS_HOST=m
++CONFIG_USB_NET_CDC_SUBSET=m
++CONFIG_USB_ALI_M5632=y
++CONFIG_USB_AN2720=y
++CONFIG_USB_BELKIN=y
++CONFIG_USB_ARMLINUX=y
++CONFIG_USB_EPSON2888=y
++CONFIG_USB_KC2190=y
++CONFIG_USB_NET_ZAURUS=m
++# CONFIG_WAN is not set
++CONFIG_PPP=m
++CONFIG_PPP_MULTILINK=y
++CONFIG_PPP_FILTER=y
++CONFIG_PPP_ASYNC=m
++CONFIG_PPP_SYNC_TTY=m
++CONFIG_PPP_DEFLATE=m
++CONFIG_PPP_BSDCOMP=m
++CONFIG_PPP_MPPE=m
++# CONFIG_PPPOE is not set
++# CONFIG_PPPOL2TP is not set
++# CONFIG_SLIP is not set
++CONFIG_SLHC=m
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++CONFIG_KEYBOARD_STOWAWAY=m
++CONFIG_KEYBOARD_GPIO=m
++CONFIG_KEYBOARD_M800=y
++CONFIG_KEYBOARD_QT2410=y
++CONFIG_INPUT_MOUSE=y
++# CONFIG_MOUSE_PS2 is not set
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_MOUSE_GPIO is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++# CONFIG_TOUCHSCREEN_ADS7846 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++CONFIG_TOUCHSCREEN_S3C2410=y
++# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_MK712 is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++# CONFIG_TOUCHSCREEN_UCB1400 is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++CONFIG_INPUT_MISC=y
++# CONFIG_INPUT_ATI_REMOTE is not set
++# CONFIG_INPUT_ATI_REMOTE2 is not set
++# CONFIG_INPUT_KEYSPAN_REMOTE is not set
++# CONFIG_INPUT_POWERMATE is not set
++# CONFIG_INPUT_YEALINK is not set
++CONFIG_INPUT_UINPUT=m
++CONFIG_INPUT_LIS302DL=y
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_NR_TTY_DEVICES=4
++CONFIG_HW_CONSOLE=y
++CONFIG_VT_HW_CONSOLE_BINDING=y
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_S3C2410=y
++CONFIG_SERIAL_S3C2410_CONSOLE=y
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++# CONFIG_I2C_GPIO is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++CONFIG_I2C_S3C2410=y
++# CONFIG_I2C_SIMTEC is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_EEPROM is not set
++CONFIG_SENSORS_PCF50606=y
++CONFIG_SENSORS_PCF50633=y
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_SENSORS_TSL2550 is not set
++CONFIG_SENSORS_TSL256X=m
++# CONFIG_PCA9632 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_BITBANG=y
++CONFIG_SPI_S3C24XX=y
++CONFIG_SPI_S3C24XX_GPIO=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_W1 is not set
++CONFIG_POWER_SUPPLY=y
++# CONFIG_POWER_SUPPLY_DEBUG is not set
++# CONFIG_PDA_POWER is not set
++CONFIG_APM_POWER=y
++# CONFIG_BATTERY_DS2760 is not set
++CONFIG_BATTERY_BQ27000_HDQ=y
++# CONFIG_HWMON is not set
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_S3C2410_WATCHDOG=m
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG is not set
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_GLAMO is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++CONFIG_FB_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_SYS_FOPS is not set
++CONFIG_FB_DEFERRED_IO=y
++# 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_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++# CONFIG_LCD_LTV350QV is not set
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++# CONFIG_BACKLIGHT_CORGI is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++CONFIG_DISPLAY_JBT6K74=y
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION 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 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=m
++CONFIG_SND_RAWMIDI=m
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=m
++CONFIG_SND_PCM_OSS=m
++CONFIG_SND_PCM_OSS_PLUGINS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++CONFIG_SND_VERBOSE_PROCFS=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# ALSA ARM devices
++#
++
++#
++# SPI devices
++#
++
++#
++# USB devices
++#
++# CONFIG_SND_USB_AUDIO is not set
++# CONFIG_SND_USB_CAIAQ is not set
++
++#
++# System on Chip audio support
++#
++CONFIG_SND_SOC=m
++CONFIG_SND_S3C24XX_SOC=m
++
++#
++# SoC Audio support for SuperH
++#
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++CONFIG_USB_HIDDEV=y
++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
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++CONFIG_USB_SUSPEND=y
++# CONFIG_USB_PERSIST is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_ISP116X_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
++
++#
++# USB Device Class drivers
++#
++CONFIG_USB_ACM=m
++CONFIG_USB_PRINTER=m
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=m
++# CONFIG_USB_STORAGE_DEBUG is not set
++CONFIG_USB_STORAGE_DATAFAB=y
++CONFIG_USB_STORAGE_FREECOM=y
++# CONFIG_USB_STORAGE_ISD200 is not set
++CONFIG_USB_STORAGE_DPCM=y
++CONFIG_USB_STORAGE_USBAT=y
++CONFIG_USB_STORAGE_SDDR09=y
++CONFIG_USB_STORAGE_SDDR55=y
++CONFIG_USB_STORAGE_JUMPSHOT=y
++CONFIG_USB_STORAGE_ALAUDA=y
++CONFIG_USB_STORAGE_KARMA=y
++CONFIG_USB_LIBUSUAL=y
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++CONFIG_USB_MON=y
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++CONFIG_USB_SERIAL=m
++CONFIG_USB_SERIAL_GENERIC=y
++CONFIG_USB_SERIAL_AIRCABLE=m
++CONFIG_USB_SERIAL_AIRPRIME=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_CP2101=m
++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_KEYSPAN_PDA=m
++CONFIG_USB_SERIAL_KEYSPAN=m
++CONFIG_USB_SERIAL_KEYSPAN_MPR=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19=y
++CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
++CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
++CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
++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_NAVMAN=m
++CONFIG_USB_SERIAL_PL2303=m
++# CONFIG_USB_SERIAL_OTI6858 is not set
++CONFIG_USB_SERIAL_HP4X=m
++CONFIG_USB_SERIAL_SAFE=m
++CONFIG_USB_SERIAL_SAFE_PADDED=y
++CONFIG_USB_SERIAL_SIERRAWIRELESS=m
++CONFIG_USB_SERIAL_TI=m
++CONFIG_USB_SERIAL_CYBERJACK=m
++CONFIG_USB_SERIAL_XIRCOM=m
++CONFIG_USB_SERIAL_OPTION=m
++CONFIG_USB_SERIAL_OMNINET=m
++# CONFIG_USB_SERIAL_DEBUG is not set
++CONFIG_USB_EZUSB=y
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++CONFIG_USB_GADGET_S3C2410=y
++CONFIG_USB_S3C2410=y
++# CONFIG_USB_S3C2410_DEBUG is not set
++# CONFIG_USB_GADGET_AT91 is not set
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++# CONFIG_USB_ZERO is not set
++CONFIG_USB_ETH=y
++CONFIG_USB_ETH_RNDIS=y
++# CONFIG_USB_GADGETFS is not set
++# CONFIG_USB_FILE_STORAGE is not set
++# CONFIG_USB_G_SERIAL is not set
++CONFIG_USB_MIDI_GADGET=m
++
++#
++# SDIO support
++#
++# CONFIG_SDIO is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_UNSAFE_RESUME=y
++
++#
++# MMC/SD Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++CONFIG_SDIO_UART=m
++
++#
++# MMC/SD Host Controller Drivers
++#
++# CONFIG_MMC_SPI is not set
++CONFIG_MMC_S3C=y
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_S3C24XX=m
++# CONFIG_LEDS_GPIO is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++CONFIG_RTC_DEBUG=y
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++# CONFIG_RTC_DRV_TEST is not set
++
++#
++# I2C RTC drivers
++#
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1374 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++# CONFIG_RTC_DRV_M41T80 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_S3C=m
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++# CONFIG_EXT3_FS_XATTR is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++CONFIG_ROMFS_FS=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++CONFIG_AUTOFS4_FS=m
++CONFIG_FUSE_FS=m
++
++#
++# 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=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_CONFIGFS_FS=m
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++CONFIG_JFFS2_SUMMARY=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_CRAMFS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++CONFIG_NFS_V4=y
++# CONFIG_NFS_DIRECTIO is not set
++CONFIG_NFSD=m
++CONFIG_NFSD_V3=y
++# CONFIG_NFSD_V3_ACL is not set
++CONFIG_NFSD_V4=y
++CONFIG_NFSD_TCP=y
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_EXPORTFS=m
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++CONFIG_SUNRPC_GSS=y
++# CONFIG_SUNRPC_BIND34 is not set
++CONFIG_RPCSEC_GSS_KRB5=y
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++CONFIG_CIFS=m
++# CONFIG_CIFS_STATS is not set
++CONFIG_CIFS_WEAK_PW_HASH=y
++# CONFIG_CIFS_XATTR is not set
++# CONFIG_CIFS_DEBUG2 is not set
++# CONFIG_CIFS_EXPERIMENTAL is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=m
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++CONFIG_NLS_CODEPAGE_936=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 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=m
++# CONFIG_DLM is not set
++CONFIG_INSTRUMENTATION=y
++CONFIG_PROFILING=y
++CONFIG_OPROFILE=m
++# CONFIG_MARKERS is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_SCHED_DEBUG is not set
++# CONFIG_SCHEDSTATS is not set
++CONFIG_TIMER_STATS=y
++# CONFIG_DEBUG_SLAB is not set
++CONFIG_DEBUG_PREEMPT=y
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_LOCK_ALLOC is not set
++# CONFIG_PROVE_LOCKING is not set
++# CONFIG_LOCK_STAT is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_SAMPLES is not set
++# CONFIG_DEBUG_USER is not set
++CONFIG_DEBUG_ERRORS=y
++# CONFIG_DEBUG_LL is not set
++CONFIG_DEBUG_S3C_UART=2
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=y
++CONFIG_CRYPTO_XCBC=m
++CONFIG_CRYPTO_NULL=m
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=m
++CONFIG_CRYPTO_SHA256=m
++CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_WP512=m
++CONFIG_CRYPTO_TGR192=m
++CONFIG_CRYPTO_GF128MUL=m
++CONFIG_CRYPTO_ECB=m
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_PCBC=m
++CONFIG_CRYPTO_LRW=m
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++CONFIG_CRYPTO_FCRYPT=m
++CONFIG_CRYPTO_BLOWFISH=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_TWOFISH_COMMON=m
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_AES=m
++CONFIG_CRYPTO_CAST5=m
++CONFIG_CRYPTO_CAST6=m
++CONFIG_CRYPTO_TEA=m
++CONFIG_CRYPTO_ARC4=m
++CONFIG_CRYPTO_KHAZAD=m
++CONFIG_CRYPTO_ANUBIS=m
++# CONFIG_CRYPTO_SEED is not set
++CONFIG_CRYPTO_DEFLATE=m
++CONFIG_CRYPTO_MICHAEL_MIC=m
++CONFIG_CRYPTO_CRC32C=m
++CONFIG_CRYPTO_CAMELLIA=m
++CONFIG_CRYPTO_TEST=m
++# CONFIG_CRYPTO_AUTHENC is not set
++CONFIG_CRYPTO_HW=y
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=m
++CONFIG_CRC16=m
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=m
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_TEXTSEARCH=y
++CONFIG_TEXTSEARCH_KMP=m
++CONFIG_TEXTSEARCH_BM=m
++CONFIG_TEXTSEARCH_FSM=m
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
+Index: linux-2.6.24.7/arch/arm/configs/gta02-moredrivers-defconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/configs/gta02-moredrivers-defconfig        2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,1833 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.24
++# Sat Mar  1 11:36:29 2008
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_MMU=y
++CONFIG_NO_IOPORT=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_FIQ=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION="-mokodev"
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=16
++# CONFIG_CGROUPS is not set
++CONFIG_FAIR_GROUP_SCHED=y
++CONFIG_FAIR_USER_SCHED=y
++# CONFIG_FAIR_CGROUP_SCHED is not set
++# CONFIG_SYSFS_DEPRECATED is not set
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++CONFIG_KALLSYMS_ALL=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_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=m
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=m
++# CONFIG_DEFAULT_AS is not set
++CONFIG_DEFAULT_DEADLINE=y
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="deadline"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_AT91 is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++CONFIG_ARCH_S3C2410=y
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++CONFIG_PLAT_S3C24XX=y
++CONFIG_CPU_S3C244X=y
++CONFIG_S3C2410_DMA=y
++# CONFIG_S3C2410_DMA_DEBUG is not set
++CONFIG_MACH_SMDK=y
++CONFIG_MACH_NEO1973=y
++CONFIG_PLAT_S3C=y
++CONFIG_CPU_LLSERIAL_S3C2410=y
++CONFIG_CPU_LLSERIAL_S3C2440=y
++
++#
++# Boot options
++#
++# CONFIG_S3C_BOOT_WATCHDOG is not set
++# CONFIG_S3C_BOOT_ERROR_RESET is not set
++
++#
++# Power management
++#
++# CONFIG_S3C2410_PM_DEBUG is not set
++# CONFIG_S3C2410_PM_CHECK is not set
++CONFIG_S3C_LOWLEVEL_UART_PORT=2
++
++#
++# S3C2400 Machines
++#
++CONFIG_CPU_S3C2410=y
++CONFIG_CPU_S3C2410_DMA=y
++CONFIG_S3C2410_PM=y
++CONFIG_S3C2410_GPIO=y
++CONFIG_S3C2410_CLOCK=y
++CONFIG_S3C2410_PWM=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_VR1000 is not set
++CONFIG_MACH_QT2410=y
++CONFIG_MACH_NEO1973_GTA01=y
++
++#
++# S3C2412 Machines
++#
++# CONFIG_MACH_SMDK2413 is not set
++# CONFIG_MACH_SMDK2412 is not set
++# CONFIG_MACH_VSTMS is not set
++CONFIG_CPU_S3C2440=y
++CONFIG_S3C2440_DMA=y
++CONFIG_S3C2440_C_FIQ=y
++
++#
++# S3C2440 Machines
++#
++# CONFIG_MACH_ANUBIS is not set
++# CONFIG_MACH_OSIRIS is not set
++# CONFIG_MACH_RX3715 is not set
++CONFIG_ARCH_S3C2440=y
++# CONFIG_MACH_NEXCODER_2440 is not set
++CONFIG_SMDK2440_CPU2440=y
++CONFIG_MACH_HXD8=y
++CONFIG_MACH_NEO1973_GTA02=y
++# CONFIG_NEO1973_GTA02_2440 is not set
++CONFIG_CPU_S3C2442=y
++
++#
++# S3C2442 Machines
++#
++CONFIG_SMDK2440_CPU2442=y
++
++#
++# S3C2443 Machines
++#
++# CONFIG_MACH_SMDK2443 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM920T=y
++CONFIG_CPU_32v4T=y
++CONFIG_CPU_ABRT_EV4T=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_OUTER_CACHE is not set
++
++#
++# Bus support
++#
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_TICK_ONESHOT is not set
++CONFIG_PREEMPT=y
++CONFIG_NO_IDLE_HZ=y
++CONFIG_HZ=200
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE="unused -- bootloader passes ATAG list"
++# CONFIG_XIP_KERNEL is not set
++CONFIG_KEXEC=y
++CONFIG_ATAGS_PROC=y
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++CONFIG_PM_LEGACY=y
++CONFIG_PM_DEBUG=y
++CONFIG_PM_VERBOSE=y
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND_UP_POSSIBLE=y
++CONFIG_SUSPEND=y
++CONFIG_APM_EMULATION=y
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++CONFIG_XFRM_MIGRATE=y
++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=m
++# CONFIG_NET_IPGRE_BROADCAST is not set
++# CONFIG_IP_MROUTE 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=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++CONFIG_TCP_MD5SIG=y
++# CONFIG_IP_VS is not set
++CONFIG_IPV6=m
++# CONFIG_IPV6_PRIVACY is not set
++# CONFIG_IPV6_ROUTER_PREF is not set
++# CONFIG_IPV6_OPTIMISTIC_DAD is not set
++CONFIG_INET6_AH=m
++CONFIG_INET6_ESP=m
++CONFIG_INET6_IPCOMP=m
++# CONFIG_IPV6_MIP6 is not set
++CONFIG_INET6_XFRM_TUNNEL=m
++CONFIG_INET6_TUNNEL=m
++CONFIG_INET6_XFRM_MODE_TRANSPORT=m
++CONFIG_INET6_XFRM_MODE_TUNNEL=m
++CONFIG_INET6_XFRM_MODE_BEET=m
++# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
++CONFIG_IPV6_SIT=m
++CONFIG_IPV6_TUNNEL=m
++# CONFIG_IPV6_MULTIPLE_TABLES is not set
++# CONFIG_NETWORK_SECMARK is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_BRIDGE_NETFILTER=y
++
++#
++# Core Netfilter Configuration
++#
++CONFIG_NETFILTER_NETLINK=m
++CONFIG_NETFILTER_NETLINK_QUEUE=m
++CONFIG_NETFILTER_NETLINK_LOG=m
++CONFIG_NF_CONNTRACK_ENABLED=m
++CONFIG_NF_CONNTRACK=m
++CONFIG_NF_CT_ACCT=y
++CONFIG_NF_CONNTRACK_MARK=y
++CONFIG_NF_CONNTRACK_EVENTS=y
++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_XTABLES=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
++CONFIG_NETFILTER_XT_TARGET_DSCP=m
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++CONFIG_NETFILTER_XT_TARGET_NFLOG=m
++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
++# 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_DCCP=m
++CONFIG_NETFILTER_XT_MATCH_DSCP=m
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++CONFIG_NETFILTER_XT_MATCH_HELPER=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_POLICY=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++CONFIG_NETFILTER_XT_MATCH_REALM=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 is not set
++# CONFIG_NETFILTER_XT_MATCH_U32 is not set
++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
++
++#
++# IP: Netfilter Configuration
++#
++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_IPRANGE=m
++CONFIG_IP_NF_MATCH_TOS=m
++# CONFIG_IP_NF_MATCH_RECENT is not set
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_MATCH_OWNER=m
++CONFIG_IP_NF_MATCH_ADDRTYPE=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_REDIRECT=m
++CONFIG_IP_NF_TARGET_NETMAP=m
++CONFIG_IP_NF_TARGET_SAME=m
++CONFIG_NF_NAT_SNMP_BASIC=m
++CONFIG_NF_NAT_PROTO_GRE=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_TOS=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_TARGET_CLUSTERIP=m
++# CONFIG_IP_NF_RAW is not set
++# CONFIG_IP_NF_ARPTABLES is not set
++
++#
++# IPv6: Netfilter Configuration (EXPERIMENTAL)
++#
++CONFIG_NF_CONNTRACK_IPV6=m
++# CONFIG_IP6_NF_QUEUE is not set
++CONFIG_IP6_NF_IPTABLES=m
++CONFIG_IP6_NF_MATCH_RT=m
++CONFIG_IP6_NF_MATCH_OPTS=m
++CONFIG_IP6_NF_MATCH_FRAG=m
++CONFIG_IP6_NF_MATCH_HL=m
++CONFIG_IP6_NF_MATCH_OWNER=m
++CONFIG_IP6_NF_MATCH_IPV6HEADER=m
++CONFIG_IP6_NF_MATCH_AH=m
++CONFIG_IP6_NF_MATCH_MH=m
++CONFIG_IP6_NF_MATCH_EUI64=m
++CONFIG_IP6_NF_FILTER=m
++CONFIG_IP6_NF_TARGET_LOG=m
++CONFIG_IP6_NF_TARGET_REJECT=m
++CONFIG_IP6_NF_MANGLE=m
++CONFIG_IP6_NF_TARGET_HL=m
++# CONFIG_IP6_NF_RAW is not set
++
++#
++# Bridge: Netfilter Configuration
++#
++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_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_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++CONFIG_BRIDGE=y
++# 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_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_RR 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_INGRESS=m
++
++#
++# Classification
++#
++CONFIG_NET_CLS=y
++CONFIG_NET_CLS_BASIC=m
++CONFIG_NET_CLS_TCINDEX=m
++CONFIG_NET_CLS_ROUTE4=m
++CONFIG_NET_CLS_ROUTE=y
++CONFIG_NET_CLS_FW=m
++CONFIG_NET_CLS_U32=m
++CONFIG_CLS_U32_PERF=y
++CONFIG_CLS_U32_MARK=y
++CONFIG_NET_CLS_RSVP=m
++CONFIG_NET_CLS_RSVP6=m
++# CONFIG_NET_EMATCH is not set
++# CONFIG_NET_CLS_ACT is not set
++# CONFIG_NET_CLS_POLICE is not set
++# CONFIG_NET_CLS_IND is not set
++CONFIG_NET_SCH_FIFO=y
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO 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_HCIUSB=y
++CONFIG_BT_HCIUSB_SCO=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_AF_RXRPC is not set
++CONFIG_FIB_RULES=y
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++CONFIG_WIRELESS_EXT=y
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=m
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++CONFIG_CONNECTOR=m
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_CONCAT=y
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# 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_START=0x0
++CONFIG_MTD_PHYSMAP_LEN=0
++CONFIG_MTD_PHYSMAP_BANKWIDTH=2
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_DATAFLASH is not set
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++CONFIG_MTD_NAND=y
++CONFIG_MTD_NAND_VERIFY_WRITE=y
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_MUSEUM_IDS is not set
++CONFIG_MTD_NAND_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
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_PNP=y
++CONFIG_PNP_DEBUG=y
++
++#
++# Protocols
++#
++# CONFIG_PNPACPI 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_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_RAM_BLOCKSIZE=1024
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=m
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=m
++# CONFIG_CHR_DEV_ST 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
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++CONFIG_SCSI_SCAN_ASYNC=y
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_ATA is not set
++CONFIG_MD=y
++# CONFIG_BLK_DEV_MD is not set
++CONFIG_BLK_DEV_DM=m
++# CONFIG_DM_DEBUG is not set
++CONFIG_DM_CRYPT=m
++CONFIG_DM_SNAPSHOT=m
++# CONFIG_DM_MIRROR is not set
++# CONFIG_DM_ZERO is not set
++# CONFIG_DM_MULTIPATH is not set
++# CONFIG_DM_DELAY is not set
++# CONFIG_DM_UEVENT is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# 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_NET_SB1000 is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++CONFIG_NET_PCI=y
++# CONFIG_B44 is not set
++CONFIG_CS89x0=m
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++
++#
++# USB Network Adapters
++#
++CONFIG_USB_CATC=m
++CONFIG_USB_KAWETH=m
++CONFIG_USB_PEGASUS=m
++CONFIG_USB_RTL8150=m
++CONFIG_USB_USBNET=y
++CONFIG_USB_NET_AX8817X=m
++CONFIG_USB_NET_CDCETHER=m
++CONFIG_USB_NET_DM9601=m
++CONFIG_USB_NET_GL620A=m
++CONFIG_USB_NET_NET1080=m
++CONFIG_USB_NET_PLUSB=m
++CONFIG_USB_NET_MCS7830=m
++CONFIG_USB_NET_RNDIS_HOST=m
++CONFIG_USB_NET_CDC_SUBSET=m
++CONFIG_USB_ALI_M5632=y
++CONFIG_USB_AN2720=y
++CONFIG_USB_BELKIN=y
++CONFIG_USB_ARMLINUX=y
++CONFIG_USB_EPSON2888=y
++CONFIG_USB_KC2190=y
++CONFIG_USB_NET_ZAURUS=m
++# CONFIG_WAN is not set
++CONFIG_PPP=m
++CONFIG_PPP_MULTILINK=y
++CONFIG_PPP_FILTER=y
++CONFIG_PPP_ASYNC=m
++CONFIG_PPP_SYNC_TTY=m
++CONFIG_PPP_DEFLATE=m
++CONFIG_PPP_BSDCOMP=m
++CONFIG_PPP_MPPE=m
++# CONFIG_PPPOE is not set
++# CONFIG_PPPOL2TP is not set
++# CONFIG_SLIP is not set
++CONFIG_SLHC=m
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++CONFIG_KEYBOARD_STOWAWAY=m
++CONFIG_KEYBOARD_GPIO=m
++CONFIG_KEYBOARD_NEO1973=y
++CONFIG_KEYBOARD_QT2410=y
++CONFIG_INPUT_MOUSE=y
++# CONFIG_MOUSE_PS2 is not set
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_MOUSE_GPIO is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++# CONFIG_TOUCHSCREEN_ADS7846 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++CONFIG_TOUCHSCREEN_S3C2410=y
++# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_MK712 is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++# CONFIG_TOUCHSCREEN_UCB1400 is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++CONFIG_INPUT_MISC=y
++# CONFIG_INPUT_ATI_REMOTE is not set
++# CONFIG_INPUT_ATI_REMOTE2 is not set
++# CONFIG_INPUT_KEYSPAN_REMOTE is not set
++# CONFIG_INPUT_POWERMATE is not set
++# CONFIG_INPUT_YEALINK is not set
++CONFIG_INPUT_UINPUT=m
++CONFIG_INPUT_LIS302DL=y
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_NR_TTY_DEVICES=4
++CONFIG_HW_CONSOLE=y
++CONFIG_VT_HW_CONSOLE_BINDING=y
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_S3C2410=y
++CONFIG_SERIAL_S3C2410_CONSOLE=y
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++# CONFIG_I2C_GPIO is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++CONFIG_I2C_S3C2410=y
++# CONFIG_I2C_SIMTEC is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_EEPROM is not set
++CONFIG_SENSORS_PCF50606=y
++CONFIG_SENSORS_PCF50633=y
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_SENSORS_TSL2550 is not set
++CONFIG_SENSORS_TSL256X=m
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_BITBANG=y
++# CONFIG_SPI_S3C24XX is not set
++CONFIG_SPI_S3C24XX_GPIO=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_W1 is not set
++CONFIG_POWER_SUPPLY=y
++CONFIG_POWER_SUPPLY_DEBUG=y
++CONFIG_PDA_POWER=y
++CONFIG_APM_POWER=y
++# CONFIG_BATTERY_DS2760 is not set
++# CONFIG_BATTERY_GTA01 is not set
++CONFIG_BATTERY_BQ27000_HDQ=y
++CONFIG_GTA02_HDQ=y
++CONFIG_HWMON=y
++# CONFIG_HWMON_VID is not set
++# CONFIG_SENSORS_AD7418 is not set
++# CONFIG_SENSORS_ADM1021 is not set
++# CONFIG_SENSORS_ADM1025 is not set
++# CONFIG_SENSORS_ADM1026 is not set
++# CONFIG_SENSORS_ADM1029 is not set
++# CONFIG_SENSORS_ADM1031 is not set
++# CONFIG_SENSORS_ADM9240 is not set
++# CONFIG_SENSORS_ADT7470 is not set
++# CONFIG_SENSORS_ATXP1 is not set
++# CONFIG_SENSORS_DS1621 is not set
++# CONFIG_SENSORS_F71805F is not set
++# CONFIG_SENSORS_F71882FG is not set
++# CONFIG_SENSORS_F75375S is not set
++# CONFIG_SENSORS_GL518SM is not set
++# CONFIG_SENSORS_GL520SM is not set
++# CONFIG_SENSORS_IT87 is not set
++# CONFIG_SENSORS_LM63 is not set
++# CONFIG_SENSORS_LM70 is not set
++# CONFIG_SENSORS_LM75 is not set
++# CONFIG_SENSORS_LM77 is not set
++# CONFIG_SENSORS_LM78 is not set
++# CONFIG_SENSORS_LM80 is not set
++# CONFIG_SENSORS_LM83 is not set
++# CONFIG_SENSORS_LM85 is not set
++# CONFIG_SENSORS_LM87 is not set
++# CONFIG_SENSORS_LM90 is not set
++# CONFIG_SENSORS_LM92 is not set
++# CONFIG_SENSORS_LM93 is not set
++# CONFIG_SENSORS_MAX1619 is not set
++# CONFIG_SENSORS_MAX6650 is not set
++# CONFIG_SENSORS_PC87360 is not set
++# CONFIG_SENSORS_PC87427 is not set
++# CONFIG_SENSORS_DME1737 is not set
++# CONFIG_SENSORS_SMSC47M1 is not set
++# CONFIG_SENSORS_SMSC47M192 is not set
++# CONFIG_SENSORS_SMSC47B397 is not set
++# CONFIG_SENSORS_THMC50 is not set
++# CONFIG_SENSORS_VT1211 is not set
++# CONFIG_SENSORS_W83781D is not set
++# CONFIG_SENSORS_W83791D is not set
++# CONFIG_SENSORS_W83792D is not set
++# CONFIG_SENSORS_W83793 is not set
++# CONFIG_SENSORS_W83L785TS is not set
++# CONFIG_SENSORS_W83627HF is not set
++# CONFIG_SENSORS_W83627EHF is not set
++# CONFIG_HWMON_DEBUG_CHIP is not set
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_S3C2410_WATCHDOG=m
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG is not set
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++CONFIG_MFD_GLAMO=y
++CONFIG_MFD_GLAMO_FB=y
++CONFIG_MFD_GLAMO_SPI_GPIO=y
++CONFIG_MFD_GLAMO_SPI_FB=y
++CONFIG_MFD_GLAMO_MCI=y
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++# 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_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_SYS_FOPS is not set
++CONFIG_FB_DEFERRED_IO=y
++# 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_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++CONFIG_LCD_LTV350QV=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++# CONFIG_BACKLIGHT_CORGI is not set
++CONFIG_BACKLIGHT_GTA01=y
++
++#
++# Display device support
++#
++CONFIG_DISPLAY_SUPPORT=y
++
++#
++# Display hardware drivers
++#
++CONFIG_DISPLAY_JBT6K74=y
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION 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 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++CONFIG_SND_HWDEP=y
++CONFIG_SND_RAWMIDI=y
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=y
++CONFIG_SND_PCM_OSS=y
++CONFIG_SND_PCM_OSS_PLUGINS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++CONFIG_SND_VERBOSE_PROCFS=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# ALSA ARM devices
++#
++
++#
++# SPI devices
++#
++
++#
++# USB devices
++#
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++
++#
++# System on Chip audio support
++#
++CONFIG_SND_SOC=y
++CONFIG_SND_S3C24XX_SOC=y
++CONFIG_SND_S3C24XX_SOC_I2S=y
++# CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753 is not set
++CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=y
++
++#
++# SoC Audio support for SuperH
++#
++CONFIG_SND_SOC_WM8753=y
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++CONFIG_USB_HIDDEV=y
++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
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++CONFIG_USB_SUSPEND=y
++CONFIG_USB_PERSIST=y
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_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
++
++#
++# USB Device Class drivers
++#
++CONFIG_USB_ACM=m
++CONFIG_USB_PRINTER=m
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=m
++# CONFIG_USB_STORAGE_DEBUG is not set
++CONFIG_USB_STORAGE_DATAFAB=y
++CONFIG_USB_STORAGE_FREECOM=y
++# CONFIG_USB_STORAGE_ISD200 is not set
++CONFIG_USB_STORAGE_DPCM=y
++CONFIG_USB_STORAGE_USBAT=y
++CONFIG_USB_STORAGE_SDDR09=y
++CONFIG_USB_STORAGE_SDDR55=y
++CONFIG_USB_STORAGE_JUMPSHOT=y
++CONFIG_USB_STORAGE_ALAUDA=y
++CONFIG_USB_STORAGE_KARMA=y
++CONFIG_USB_LIBUSUAL=y
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++CONFIG_USB_MON=y
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++CONFIG_USB_SERIAL=y
++CONFIG_USB_SERIAL_GENERIC=y
++CONFIG_USB_SERIAL_AIRCABLE=m
++CONFIG_USB_SERIAL_AIRPRIME=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_CP2101=m
++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_KEYSPAN_PDA=m
++CONFIG_USB_SERIAL_KEYSPAN=m
++CONFIG_USB_SERIAL_KEYSPAN_MPR=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
++CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19=y
++CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
++CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
++CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
++CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
++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_NAVMAN=m
++CONFIG_USB_SERIAL_PL2303=m
++# CONFIG_USB_SERIAL_OTI6858 is not set
++CONFIG_USB_SERIAL_HP4X=m
++CONFIG_USB_SERIAL_SAFE=m
++CONFIG_USB_SERIAL_SAFE_PADDED=y
++CONFIG_USB_SERIAL_SIERRAWIRELESS=m
++CONFIG_USB_SERIAL_TI=m
++CONFIG_USB_SERIAL_CYBERJACK=m
++CONFIG_USB_SERIAL_XIRCOM=m
++CONFIG_USB_SERIAL_OPTION=y
++CONFIG_USB_SERIAL_OMNINET=m
++# CONFIG_USB_SERIAL_DEBUG is not set
++CONFIG_USB_EZUSB=y
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++CONFIG_USB_BERRY_CHARGE=m
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++CONFIG_USB_TRANCEVIBRATOR=m
++CONFIG_USB_IOWARRIOR=m
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++# CONFIG_USB_GADGET_DEBUG_FS is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++CONFIG_USB_GADGET_S3C2410=y
++CONFIG_USB_S3C2410=y
++# CONFIG_USB_S3C2410_DEBUG is not set
++# CONFIG_USB_GADGET_AT91 is not set
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++# CONFIG_USB_ZERO is not set
++CONFIG_USB_ETH=y
++CONFIG_USB_ETH_RNDIS=y
++# CONFIG_USB_GADGETFS is not set
++# CONFIG_USB_FILE_STORAGE is not set
++# CONFIG_USB_G_SERIAL is not set
++# CONFIG_USB_MIDI_GADGET is not set
++
++#
++# SDIO support
++#
++CONFIG_SDIO=y
++CONFIG_SDIO_S3C24XX=y
++CONFIG_SDIO_S3C24XX_DMA=y
++CONFIG_SDIO_AR6000_WLAN=y
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_UNSAFE_RESUME=y
++
++#
++# MMC/SD Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++# CONFIG_MMC_BLOCK_BOUNCE is not set
++# CONFIG_SDIO_UART is not set
++
++#
++# MMC/SD Host Controller Drivers
++#
++# CONFIG_MMC_SPI is not set
++# CONFIG_MMC_S3C is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_S3C24XX=m
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_NEO1973_VIBRATOR=y
++CONFIG_LEDS_NEO1973_GTA02=y
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++CONFIG_RTC_DEBUG=y
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++# CONFIG_RTC_DRV_TEST is not set
++
++#
++# I2C RTC drivers
++#
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1374 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++# CONFIG_RTC_DRV_M41T80 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_S3C=m
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++# CONFIG_EXT3_FS_XATTR is not set
++# CONFIG_EXT4DEV_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_MINIX_FS is not set
++CONFIG_ROMFS_FS=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++CONFIG_AUTOFS4_FS=m
++CONFIG_FUSE_FS=m
++
++#
++# CD-ROM/DVD Filesystems
++#
++CONFIG_ISO9660_FS=y
++CONFIG_JOLIET=y
++# CONFIG_ZISOFS is not set
++CONFIG_UDF_FS=y
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_CONFIGFS_FS=m
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_YAFFS_FS=y
++CONFIG_YAFFS_YAFFS1=y
++CONFIG_YAFFS_9BYTE_TAGS=y
++CONFIG_YAFFS_YAFFS2=y
++CONFIG_YAFFS_AUTO_YAFFS2=y
++# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
++CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
++# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
++# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
++CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
++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_CRAMFS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NETWORK_FILESYSTEMS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=m
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++CONFIG_NLS_CODEPAGE_936=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 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=m
++# CONFIG_DLM is not set
++CONFIG_INSTRUMENTATION=y
++CONFIG_PROFILING=y
++CONFIG_OPROFILE=m
++CONFIG_MARKERS=y
++
++#
++# Kernel hacking
++#
++CONFIG_PRINTK_TIME=y
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++CONFIG_DEBUG_FS=y
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_DEBUG_SHIRQ=y
++CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++CONFIG_TIMER_STATS=y
++# CONFIG_DEBUG_SLAB is not set
++CONFIG_DEBUG_PREEMPT=y
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++CONFIG_DEBUG_SPINLOCK=y
++CONFIG_DEBUG_MUTEXES=y
++CONFIG_DEBUG_LOCK_ALLOC=y
++# CONFIG_PROVE_LOCKING is not set
++CONFIG_LOCKDEP=y
++CONFIG_LOCK_STAT=y
++CONFIG_DEBUG_LOCKDEP=y
++CONFIG_DEBUG_SPINLOCK_SLEEP=y
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++CONFIG_STACKTRACE=y
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++CONFIG_DEBUG_SG=y
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_SAMPLES is not set
++# CONFIG_DEBUG_USER is not set
++CONFIG_DEBUG_ERRORS=y
++# CONFIG_DEBUG_LL is not set
++# CONFIG_DEBUG_ICEDCC is not set
++# CONFIG_DEBUG_S3C_PORT is not set
++CONFIG_DEBUG_S3C_UART=2
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=y
++CONFIG_CRYPTO_XCBC=m
++CONFIG_CRYPTO_NULL=m
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=m
++CONFIG_CRYPTO_SHA256=m
++CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_WP512=m
++CONFIG_CRYPTO_TGR192=m
++CONFIG_CRYPTO_GF128MUL=m
++CONFIG_CRYPTO_ECB=m
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_PCBC=m
++CONFIG_CRYPTO_LRW=m
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++CONFIG_CRYPTO_FCRYPT=m
++CONFIG_CRYPTO_BLOWFISH=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_TWOFISH_COMMON=m
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_AES=m
++CONFIG_CRYPTO_CAST5=m
++CONFIG_CRYPTO_CAST6=m
++CONFIG_CRYPTO_TEA=m
++CONFIG_CRYPTO_ARC4=m
++CONFIG_CRYPTO_KHAZAD=m
++CONFIG_CRYPTO_ANUBIS=m
++# CONFIG_CRYPTO_SEED is not set
++CONFIG_CRYPTO_DEFLATE=m
++CONFIG_CRYPTO_MICHAEL_MIC=m
++CONFIG_CRYPTO_CRC32C=m
++CONFIG_CRYPTO_CAMELLIA=m
++CONFIG_CRYPTO_TEST=m
++# CONFIG_CRYPTO_AUTHENC is not set
++CONFIG_CRYPTO_HW=y
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=m
++CONFIG_CRC16=m
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=m
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_TEXTSEARCH=y
++CONFIG_TEXTSEARCH_KMP=m
++CONFIG_TEXTSEARCH_BM=m
++CONFIG_TEXTSEARCH_FSM=m
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_DMA=y
+Index: linux-2.6.24.7/arch/arm/Kconfig
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/Kconfig       2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/Kconfig    2008-12-11 22:46:48.000000000 +0100
+@@ -865,6 +865,13 @@ config KEXEC
+         initially work for you.  It may help to enable device hotplugging
+         support.
++config ATAGS_PROC
++      bool "Export atags in procfs"
++      default n
++      help
++        Should the atags used to boot the kernel be exported in an "atags"
++        file in procfs. Useful with kexec.
++
+ endmenu
+ if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX )
+@@ -1064,6 +1071,8 @@ source "drivers/hid/Kconfig"
+ source "drivers/usb/Kconfig"
++source "drivers/sdio/Kconfig"
++
+ source "drivers/mmc/Kconfig"
+ source "drivers/leds/Kconfig"
+Index: linux-2.6.24.7/arch/arm/kernel/atags.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/kernel/atags.c     2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,86 @@
++#include <linux/slab.h>
++#include <linux/kexec.h>
++#include <linux/proc_fs.h>
++#include <asm/setup.h>
++#include <asm/types.h>
++#include <asm/page.h>
++
++struct buffer {
++      size_t size;
++      char *data;
++};
++static struct buffer tags_buffer;
++
++static int
++read_buffer(char* page, char** start, off_t off, int count,
++      int* eof, void* data)
++{
++      struct buffer *buffer = (struct buffer *)data;
++
++      if (off >= buffer->size) {
++              *eof = 1;
++              return 0;
++      }
++
++      count = min((int) (buffer->size - off), count);
++
++      memcpy(page, &buffer->data[off], count);
++
++      return count;
++}
++
++
++static int
++create_proc_entries(void)
++{
++      struct proc_dir_entry* tags_entry;
++
++      tags_entry = create_proc_read_entry("atags", 0400, &proc_root, read_buffer, &tags_buffer);
++      if (!tags_entry)
++              return -ENOMEM;
++
++      return 0;
++}
++
++
++static char __initdata atags_copy_buf[KEXEC_BOOT_PARAMS_SIZE];
++static char __initdata *atags_copy;
++
++void __init save_atags(const struct tag *tags)
++{
++      atags_copy = atags_copy_buf;
++      memcpy(atags_copy, tags, KEXEC_BOOT_PARAMS_SIZE);
++}
++
++
++static int __init init_atags_procfs(void)
++{
++      struct tag *tag;
++      int error;
++
++      if (!atags_copy) {
++              printk(KERN_WARNING "Exporting ATAGs: No saved tags found\n");
++              return -EIO;
++      }
++
++      for (tag = (struct tag *) atags_copy; tag->hdr.size; tag = tag_next(tag))
++              ;
++
++      tags_buffer.size = ((char *) tag - atags_copy) + sizeof(tag->hdr);
++      tags_buffer.data = kmalloc(tags_buffer.size, GFP_KERNEL);
++      if (tags_buffer.data == NULL)
++              return -ENOMEM;
++      memcpy(tags_buffer.data, atags_copy, tags_buffer.size);
++
++      error = create_proc_entries();
++      if (error) {
++              printk(KERN_ERR "Exporting ATAGs: not enough memory\n");
++              kfree(tags_buffer.data);
++              tags_buffer.size = 0;
++              tags_buffer.data = NULL;
++      }
++
++      return error;
++}
++
++arch_initcall(init_atags_procfs);
+Index: linux-2.6.24.7/arch/arm/kernel/atags.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/kernel/atags.h     2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,5 @@
++#ifdef CONFIG_ATAGS_PROC
++extern void save_atags(struct tag *tags);
++#else
++static inline void save_atags(struct tag *tags) { }
++#endif
+Index: linux-2.6.24.7/arch/arm/kernel/machine_kexec.c
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/kernel/machine_kexec.c        2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/kernel/machine_kexec.c     2008-12-11 22:46:48.000000000 +0100
+@@ -21,6 +21,7 @@ extern void setup_mm_for_reboot(char mod
+ extern unsigned long kexec_start_address;
+ extern unsigned long kexec_indirection_page;
+ extern unsigned long kexec_mach_type;
++extern unsigned long kexec_boot_atags;
+ /*
+  * Provide a dummy crash_notes definition while crash dump arrives to arm.
+@@ -62,6 +63,7 @@ void machine_kexec(struct kimage *image)
+       kexec_start_address = image->start;
+       kexec_indirection_page = page_list;
+       kexec_mach_type = machine_arch_type;
++      kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+       /* copy our kernel relocation code to the control code page */
+       memcpy(reboot_code_buffer,
+Index: linux-2.6.24.7/arch/arm/kernel/Makefile
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/kernel/Makefile       2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/kernel/Makefile    2008-12-11 22:46:48.000000000 +0100
+@@ -19,6 +19,7 @@ obj-$(CONFIG_ISA_DMA)                += dma-isa.o
+ obj-$(CONFIG_PCI)             += bios32.o isa.o
+ obj-$(CONFIG_SMP)             += smp.o
+ obj-$(CONFIG_KEXEC)           += machine_kexec.o relocate_kernel.o
++obj-$(CONFIG_ATAGS_PROC)      += atags.o
+ obj-$(CONFIG_OABI_COMPAT)     += sys_oabi-compat.o
+ obj-$(CONFIG_CRUNCH)          += crunch.o crunch-bits.o
+Index: linux-2.6.24.7/arch/arm/kernel/relocate_kernel.S
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/kernel/relocate_kernel.S      2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/kernel/relocate_kernel.S   2008-12-11 22:46:48.000000000 +0100
+@@ -7,23 +7,6 @@
+       .globl relocate_new_kernel
+ relocate_new_kernel:
+-      /* Move boot params back to where the kernel expects them */
+-
+-      ldr     r0,kexec_boot_params_address
+-      teq     r0,#0
+-      beq     8f
+-
+-      ldr     r1,kexec_boot_params_copy
+-      mov     r6,#KEXEC_BOOT_PARAMS_SIZE/4
+-7:
+-      ldr     r5,[r1],#4
+-      str     r5,[r0],#4
+-      subs    r6,r6,#1
+-      bne     7b
+-
+-8:
+-      /* Boot params moved, now go on with the kernel */
+-
+       ldr     r0,kexec_indirection_page
+       ldr     r1,kexec_start_address
+@@ -67,7 +50,7 @@ relocate_new_kernel:
+       mov lr,r1
+       mov r0,#0
+       ldr r1,kexec_mach_type
+-      ldr r2,kexec_boot_params_address
++      ldr r2,kexec_boot_atags
+       mov pc,lr
+       .globl kexec_start_address
+@@ -82,14 +65,9 @@ kexec_indirection_page:
+ kexec_mach_type:
+       .long   0x0
+-      /* phy addr where new kernel will expect to find boot params */
+-      .globl kexec_boot_params_address
+-kexec_boot_params_address:
+-      .long   0x0
+-
+-      /* phy addr where old kernel put a copy of orig boot params */
+-      .globl kexec_boot_params_copy
+-kexec_boot_params_copy:
++      /* phy addr of the atags for the new kernel */
++      .globl kexec_boot_atags
++kexec_boot_atags:
+       .long   0x0
+ relocate_new_kernel_end:
+Index: linux-2.6.24.7/arch/arm/kernel/setup.c
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/kernel/setup.c        2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/kernel/setup.c     2008-12-11 22:46:48.000000000 +0100
+@@ -24,7 +24,6 @@
+ #include <linux/interrupt.h>
+ #include <linux/smp.h>
+ #include <linux/fs.h>
+-#include <linux/kexec.h>
+ #include <asm/cpu.h>
+ #include <asm/elf.h>
+@@ -39,6 +38,7 @@
+ #include <asm/mach/time.h>
+ #include "compat.h"
++#include "atags.h"
+ #ifndef MEM_SIZE
+ #define MEM_SIZE      (16*1024*1024)
+@@ -784,23 +784,6 @@ static int __init customize_machine(void
+ }
+ arch_initcall(customize_machine);
+-#ifdef CONFIG_KEXEC
+-
+-/* Physical addr of where the boot params should be for this machine */
+-extern unsigned long kexec_boot_params_address;
+-
+-/* Physical addr of the buffer into which the boot params are copied */
+-extern unsigned long kexec_boot_params_copy;
+-
+-/* Pointer to the boot params buffer, for manipulation and display */
+-unsigned long kexec_boot_params;
+-EXPORT_SYMBOL(kexec_boot_params);
+-
+-/* The buffer itself - make sure it is sized correctly */
+-static unsigned long kexec_boot_params_buf[(KEXEC_BOOT_PARAMS_SIZE + 3) / 4];
+-
+-#endif
+-
+ void __init setup_arch(char **cmdline_p)
+ {
+       struct tag *tags = (struct tag *)&init_tags;
+@@ -819,18 +802,6 @@ void __init setup_arch(char **cmdline_p)
+       else if (mdesc->boot_params)
+               tags = phys_to_virt(mdesc->boot_params);
+-#ifdef CONFIG_KEXEC
+-      kexec_boot_params_copy = virt_to_phys(kexec_boot_params_buf);
+-      kexec_boot_params = (unsigned long)kexec_boot_params_buf;
+-      if (__atags_pointer) {
+-              kexec_boot_params_address = __atags_pointer;
+-              memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE);
+-      } else if (mdesc->boot_params) {
+-              kexec_boot_params_address = mdesc->boot_params;
+-              memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE);
+-      }
+-#endif
+-
+       /*
+        * If we have the old style parameters, convert them to
+        * a tag list.
+@@ -846,6 +817,7 @@ void __init setup_arch(char **cmdline_p)
+       if (tags->hdr.tag == ATAG_CORE) {
+               if (meminfo.nr_banks != 0)
+                       squash_mem_tags(tags);
++              save_atags(tags);
+               parse_tags(tags);
+       }
+Index: linux-2.6.24.7/arch/arm/mach-s3c2410/Kconfig
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/mach-s3c2410/Kconfig  2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/mach-s3c2410/Kconfig       2008-12-11 22:46:48.000000000 +0100
+@@ -9,6 +9,7 @@ config CPU_S3C2410
+       depends on ARCH_S3C2410
+       select S3C2410_CLOCK
+       select S3C2410_GPIO
++      select S3C2410_PWM
+       select CPU_LLSERIAL_S3C2410
+       select S3C2410_PM if PM
+       help
+@@ -37,6 +38,11 @@ config S3C2410_CLOCK
+       help
+         Clock code for the S3C2410, and similar processors
++config S3C2410_PWM
++      bool
++      help
++        PWM timer code for the S3C2410, and similar processors
++
+ menu "S3C2410 Machines"
+@@ -107,8 +113,17 @@ config MACH_VR1000
+ config MACH_QT2410
+       bool "QT2410"
+       select CPU_S3C2410
++      select DISPLAY_JBT6K74
+       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 SENSORS_PCF50606
++      help
++         Say Y here if you are using the FIC Neo1973 GSM Phone
++
+ endmenu
+Index: linux-2.6.24.7/arch/arm/mach-s3c2410/mach-gta01.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2410/mach-gta01.c  2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,763 @@
++/*
++ * 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 <laforge@openmoko.org>
++ * 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 <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/interrupt.h>
++#include <linux/list.h>
++#include <linux/timer.h>
++#include <linux/init.h>
++#include <linux/workqueue.h>
++#include <linux/platform_device.h>
++#include <linux/serial_core.h>
++#include <asm/arch/ts.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/spi_bitbang.h>
++#include <linux/mmc/mmc.h>
++#include <linux/mmc/host.h>
++
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/nand_ecc.h>
++#include <linux/mtd/partitions.h>
++
++#include <linux/mmc/host.h>
++
++#include <linux/pcf50606.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/mach-types.h>
++
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/fb.h>
++#include <asm/arch/mci.h>
++#include <asm/arch/spi.h>
++#include <asm/arch/spi-gpio.h>
++#include <asm/arch/usb-control.h>
++
++#include <asm/arch/gta01.h>
++
++#include <asm/plat-s3c/regs-serial.h>
++#include <asm/plat-s3c/nand.h>
++#include <asm/plat-s3c24xx/devs.h>
++#include <asm/plat-s3c24xx/cpu.h>
++#include <asm/plat-s3c24xx/pm.h>
++#include <asm/plat-s3c24xx/udc.h>
++#include <asm/plat-s3c24xx/neo1973.h>
++#include <asm/arch-s3c2410/neo1973-pm-gsm.h>
++
++#include "../plat-s3c24xx/neo1973_pm_gps.h"
++
++#include <linux/jbt6k74.h>
++
++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,
++      },
++};
++
++/* PMU driver info */
++
++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;
++}
++
++static struct pcf50606_platform_data gta01_pcf_pdata = {
++      .used_features  = PCF50606_FEAT_EXTON |
++                        PCF50606_FEAT_MBC |
++                        PCF50606_FEAT_BBC |
++                        PCF50606_FEAT_RTC |
++                        PCF50606_FEAT_WDT |
++                        PCF50606_FEAT_CHGCUR |
++                        PCF50606_FEAT_BATVOLT |
++                        PCF50606_FEAT_BATTEMP,
++      .onkey_seconds_required = 3,
++      .cb             = &pmu_callback,
++      .r_fix_batt     = 10000,
++      .r_fix_batt_par = 10000,
++      .r_sense_milli  = 220,
++      .rails  = {
++              [PCF50606_REGULATOR_D1REG] = {
++                      .name           = "bt_3v15",
++                      .voltage        = {
++                              .init   = 3150,
++                              .max    = 3150,
++                      },
++              },
++              [PCF50606_REGULATOR_D2REG] = {
++                      .name           = "gl_2v5",
++                      .voltage        = {
++                              .init   = 2500,
++                              .max    = 2500,
++                      },
++              },
++              [PCF50606_REGULATOR_D3REG] = {
++                      .name           = "stby_1v8",
++                      .flags          = PMU_VRAIL_F_SUSPEND_ON,
++                      .voltage        = {
++                              .init   = 1800,
++                              .max    = 2100,
++                      },
++              },
++              [PCF50606_REGULATOR_DCD] = {
++                      .name           = "gl_1v5",
++                      .voltage        = {
++                              .init   = 1500,
++                              .max    = 1500,
++                      },
++              },
++              [PCF50606_REGULATOR_DCDE] = {
++                      .name           = "io_3v3",
++                      .flags          = PMU_VRAIL_F_SUSPEND_ON,
++                      .voltage        = {
++                              .init   = 3300,
++                              .max    = 3330,
++                      },
++              },
++              [PCF50606_REGULATOR_DCUD] = {
++                      .name           = "core_1v8",
++                      .flags          = PMU_VRAIL_F_SUSPEND_ON,
++                      .voltage        = {
++                              .init   = 2100,
++                              .max    = 2100,
++                      },
++              },
++              [PCF50606_REGULATOR_IOREG] = {
++                      .name           = "codec_3v3",
++                      .voltage        = {
++                              .init   = 3300,
++                              .max    = 3300,
++                      },
++              },
++              [PCF50606_REGULATOR_LPREG] = {
++                      .name           = "lcm_3v3",
++                      .voltage        = {
++                              .init   = 3300,
++                              .max    = 3300,
++                      },
++              }
++      },
++};
++
++static void cfg_pmu_vrail(struct pmu_voltage_rail *vrail, char *name,
++                        unsigned int flags, unsigned int init,
++                        unsigned int max)
++{
++      vrail->name = name;
++      vrail->flags = flags;
++      vrail->voltage.init = init;
++      vrail->voltage.max = max;
++}
++
++static void mangle_pmu_pdata_by_system_rev(void)
++{
++      switch (system_rev) {
++      case GTA01Bv4_SYSTEM_REV:
++              gta01_pcf_pdata.used_features |= PCF50606_FEAT_ACD;
++              break;
++      case GTA01Bv3_SYSTEM_REV:
++      case GTA01Bv2_SYSTEM_REV:
++              gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG]
++                                      .name = "user1";
++              gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG]
++                                      .flags &= ~PMU_VRAIL_F_SUSPEND_ON;
++              gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG]
++                                      .flags = PMU_VRAIL_F_UNUSED;
++              break;
++      case GTA01v4_SYSTEM_REV:
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCUD],
++                            "core_1v8", PMU_VRAIL_F_SUSPEND_ON, 1800, 1800);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D1REG],
++                            "vrf_3v", 0, 3000, 3000);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG],
++                            "vtcxo_2v8", 0, 2800, 2800);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCD],
++                            "gl_3v5", 0, 3500, 3500);
++              break;
++      case GTA01v3_SYSTEM_REV:
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D1REG],
++                            "vrf_3v", 0, 3000, 3000);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D2REG],
++                            "sd_3v3", 0, 3300, 3300);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG],
++                            "codec_3v3", 0, 3300, 3300);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCD],
++                            "gpsio_3v3", 0, 3300, 3300);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCUD],
++                            "core_1v8", PMU_VRAIL_F_SUSPEND_ON, 1800, 1800);
++              cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_IOREG],
++                            "vtcxo_2v8", 0, 2800, 2800);
++              break;
++      }
++}
++
++static struct resource gta01_pmu_resources[] = {
++      [0] = {
++              .flags  = IORESOURCE_IRQ,
++              .start  = GTA01_IRQ_PCF50606,
++              .end    = GTA01_IRQ_PCF50606,
++      },
++};
++
++struct platform_device gta01_pmu_dev = {
++      .name           = "pcf50606",
++      .num_resources  = ARRAY_SIZE(gta01_pmu_resources),
++      .resource       = gta01_pmu_resources,
++      .dev            = {
++              .platform_data = &gta01_pcf_pdata,
++      },
++};
++
++/* 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 platform_device *gta01_devices[] __initdata = {
++      &s3c_device_usb,
++      &s3c_device_lcd,
++      &s3c_device_wdt,
++      &s3c_device_i2c,
++      &s3c_device_iis,
++      &s3c_device_sdi,
++      &s3c_device_usbgadget,
++      &s3c_device_nand,
++      &s3c_device_ts,
++};
++
++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,
++};
++
++static void gta01_mmc_set_power(unsigned char power_mode, unsigned short vdd)
++{
++      int bit;
++      int mv = 1700; /* 1.7V for MMC_VDD_165_195 */
++
++      printk(KERN_DEBUG "mmc_set_power(power_mode=%u, vdd=%u)\n",
++             power_mode, vdd);
++
++      switch (system_rev) {
++      case GTA01v3_SYSTEM_REV:
++              switch (power_mode) {
++              case MMC_POWER_OFF:
++                      pcf50606_onoff_set(pcf50606_global,
++                                         PCF50606_REGULATOR_D2REG, 0);
++                      break;
++              case MMC_POWER_ON:
++                      /* translate MMC_VDD_* VDD bit to mv */
++                      for (bit = 8; bit != 24; bit++)
++                              if (vdd == (1 << bit))
++                                      mv += 100 * (bit - 4);
++                      pcf50606_voltage_set(pcf50606_global,
++                                           PCF50606_REGULATOR_D2REG, mv);
++                      pcf50606_onoff_set(pcf50606_global,
++                                         PCF50606_REGULATOR_D2REG, 1);
++                      break;
++              }
++              break;
++      case GTA01v4_SYSTEM_REV:
++      case GTA01Bv2_SYSTEM_REV:
++      case GTA01Bv3_SYSTEM_REV:
++      case GTA01Bv4_SYSTEM_REV:
++              switch (power_mode) {
++              case MMC_POWER_OFF:
++                      neo1973_gpb_setpin(GTA01_GPIO_SDMMC_ON, 1);
++                      break;
++              case MMC_POWER_ON:
++                      neo1973_gpb_setpin(GTA01_GPIO_SDMMC_ON, 0);
++                      break;
++              }
++              break;
++      }
++}
++
++static int gta01_mmc_use_slow(void)
++{
++      return neo1973_pm_gps_is_on();
++}
++
++static struct s3c24xx_mci_pdata gta01_mmc_cfg = {
++      .gpio_detect    = GTA01_GPIO_nSD_DETECT,
++      .set_power      = &gta01_mmc_set_power,
++      .use_slow       = &gta01_mmc_use_slow,
++      .ocr_avail      = MMC_VDD_165_195|MMC_VDD_20_21|
++                        MMC_VDD_21_22|MMC_VDD_22_23|MMC_VDD_23_24|
++                        MMC_VDD_24_25|MMC_VDD_25_26|MMC_VDD_26_27|
++                        MMC_VDD_27_28|MMC_VDD_28_29|MMC_VDD_29_30|
++                        MMC_VDD_30_31|MMC_VDD_31_32|MMC_VDD_32_33,
++};
++
++static void gta01_udc_command(enum s3c2410_udc_cmd_e cmd)
++{
++      printk(KERN_DEBUG "%s(%d)\n", __func__, cmd);
++
++      switch (cmd) {
++      case S3C2410_UDC_P_ENABLE:
++              neo1973_gpb_setpin(GTA01_GPIO_USB_PULLUP, 1);
++              break;
++      case S3C2410_UDC_P_DISABLE:
++              neo1973_gpb_setpin(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 (!pcf50606_global)
++              return;
++
++      if (gta01_udc_vbus_drawer.ma >= 500) {
++              /* enable fast charge */
++              printk(KERN_DEBUG "udc: enabling fast charge\n");
++              pcf50606_charge_fast(pcf50606_global, 1);
++      } else {
++              /* disable fast charge */
++              printk(KERN_DEBUG "udc: disabling fast charge\n");
++              pcf50606_charge_fast(pcf50606_global, 0);
++      }
++}
++
++static void gta01_udc_vbus_draw(unsigned int ma)
++{
++      gta01_udc_vbus_drawer.ma = ma;
++      schedule_work(&gta01_udc_vbus_drawer.work);
++}
++
++static struct s3c2410_udc_mach_info gta01_udc_cfg = {
++      .vbus_draw      = gta01_udc_vbus_draw,
++};
++
++static struct s3c2410_ts_mach_info gta01_ts_cfg = {
++      .delay = 10000,
++      .presc = 50000000 / 1000000, /* 50 MHz PCLK / 1MHz */
++      /* simple averaging, 2^n samples */
++      .oversampling_shift = 5,
++      /* averaging filter length, 2^n */
++      .excursion_filter_len_bits = 5,
++      /* flagged for beauty contest on next sample if differs from
++       * average more than this
++       */
++      .reject_threshold_vs_avg = 2,
++};
++
++/* SPI */
++
++static void gta01_jbt6k74_reset(int devidx, int level)
++{
++      /* empty place holder; gta01 does not yet use this */
++      printk(KERN_DEBUG "gta01_jbt6k74_reset\n");
++}
++
++static void gta01_jbt6k74_resuming(int devidx)
++{
++      gta01bl_deferred_resume();
++}
++
++const struct jbt6k74_platform_data gta01_jbt6k74_pdata = {
++      .reset          = gta01_jbt6k74_reset,
++      .resuming       = gta01_jbt6k74_resuming,
++};
++
++static struct spi_board_info gta01_spi_board_info[] = {
++      {
++              .modalias       = "jbt6k74",
++              .platform_data  = &gta01_jbt6k74_pdata,
++              /* controller_data */
++              /* irq */
++              .max_speed_hz   = 10 * 1000 * 1000,
++              .bus_num        = 1,
++              /* chip_select */
++      },
++};
++
++static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int csidx, int cs)
++{
++      switch (cs) {
++      case BITBANG_CS_ACTIVE:
++              s3c2410_gpio_setpin(S3C2410_GPG3, 0);
++              break;
++      case BITBANG_CS_INACTIVE:
++              s3c2410_gpio_setpin(S3C2410_GPG3, 1);
++              break;
++      }
++}
++
++static struct s3c2410_spigpio_info spi_gpio_cfg = {
++      .pin_clk        = S3C2410_GPG7,
++      .pin_mosi       = S3C2410_GPG6,
++      .pin_miso       = S3C2410_GPG5,
++      .board_size     = ARRAY_SIZE(gta01_spi_board_info),
++      .board_info     = gta01_spi_board_info,
++      .chip_select    = &spi_gpio_cs,
++      .num_chipselect = 2,   /*** Should be 1 or 2 for gta01? ***/
++};
++
++static struct resource s3c_spi_lcm_resource[] = {
++      [0] = {
++              .start = S3C2410_GPG3,
++              .end   = S3C2410_GPG3,
++      },
++      [1] = {
++              .start = S3C2410_GPG5,
++              .end   = S3C2410_GPG5,
++      },
++      [2] = {
++              .start = S3C2410_GPG6,
++              .end   = S3C2410_GPG6,
++      },
++      [3] = {
++              .start = S3C2410_GPG7,
++              .end   = S3C2410_GPG7,
++      },
++};
++
++struct platform_device s3c_device_spi_lcm = {
++      .name             = "spi_s3c24xx_gpio",
++      .id               = 1,
++      .num_resources    = ARRAY_SIZE(s3c_spi_lcm_resource),
++      .resource         = s3c_spi_lcm_resource,
++      .dev = {
++              .platform_data = &spi_gpio_cfg,
++      },
++};
++
++static struct gta01bl_machinfo backlight_machinfo = {
++      .default_intensity      = 1,
++      .max_intensity          = 1,
++      .limit_mask             = 1,
++      .defer_resume_backlight = 1,
++};
++
++static struct resource gta01_bl_resources[] = {
++      [0] = {
++              .start  = GTA01_GPIO_BACKLIGHT,
++              .end    = GTA01_GPIO_BACKLIGHT,
++      },
++};
++
++struct platform_device gta01_bl_dev = {
++      .name           = "gta01-bl",
++      .num_resources  = ARRAY_SIZE(gta01_bl_resources),
++      .resource       = gta01_bl_resources,
++      .dev            = {
++              .platform_data = &backlight_machinfo,
++      },
++};
++
++static struct resource gta01_led_resources[] = {
++      [0] = {
++              .start  = GTA01_GPIO_VIBRATOR_ON,
++              .end    = GTA01_GPIO_VIBRATOR_ON,
++      },
++};
++
++struct platform_device gta01_led_dev = {
++      .name           = "neo1973-vibrator",
++      .num_resources  = ARRAY_SIZE(gta01_led_resources),
++      .resource       = gta01_led_resources,
++};
++
++static struct resource gta01_button_resources[] = {
++      [0] = {
++              .start = GTA01_GPIO_AUX_KEY,
++              .end   = GTA01_GPIO_AUX_KEY,
++      },
++      [1] = {
++              .start = GTA01_GPIO_HOLD_KEY,
++              .end   = GTA01_GPIO_HOLD_KEY,
++      },
++      [2] = {
++              .start = GTA01_GPIO_JACK_INSERT,
++              .end   = GTA01_GPIO_JACK_INSERT,
++      },
++};
++
++struct platform_device gta01_button_dev = {
++      .name           = "neo1973-button",
++      .num_resources  = ARRAY_SIZE(gta01_button_resources),
++      .resource       = gta01_button_resources,
++};
++
++static struct platform_device gta01_pm_gsm_dev = {
++      .name           = "neo1973-pm-gsm",
++};
++
++/* USB */
++static struct s3c2410_hcd_info gta01_usb_info = {
++      .port[0]        = {
++              .flags  = S3C_HCDFLG_USED,
++      },
++      .port[1]        = {
++              .flags  = 0,
++      },
++};
++
++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 void __init gta01_machine_init(void)
++{
++      int rc;
++
++      if (system_rev == GTA01v4_SYSTEM_REV ||
++          system_rev == GTA01Bv2_SYSTEM_REV ||
++          system_rev == GTA01Bv3_SYSTEM_REV ||
++          system_rev == GTA01Bv4_SYSTEM_REV) {
++              gta01_udc_cfg.udc_command = gta01_udc_command;
++              gta01_mmc_cfg.ocr_avail = MMC_VDD_32_33;
++      }
++
++      s3c_device_usb.dev.platform_data = &gta01_usb_info;
++      s3c_device_nand.dev.platform_data = &gta01_nand_info;
++      s3c_device_sdi.dev.platform_data = &gta01_mmc_cfg;
++
++      s3c24xx_fb_set_platdata(&gta01_lcd_cfg);
++
++      INIT_WORK(&gta01_udc_vbus_drawer.work, __gta01_udc_vbus_draw);
++      s3c24xx_udc_set_platdata(&gta01_udc_cfg);
++      set_s3c2410ts_info(&gta01_ts_cfg);
++
++      /* Set LCD_RESET / XRES to high */
++      s3c2410_gpio_cfgpin(S3C2410_GPC6, S3C2410_GPIO_OUTPUT);
++      s3c2410_gpio_setpin(S3C2410_GPC6, 1);
++
++      /* SPI chip select is gpio output */
++      s3c2410_gpio_cfgpin(S3C2410_GPG3, S3C2410_GPIO_OUTPUT);
++      s3c2410_gpio_setpin(S3C2410_GPG3, 1);
++      platform_device_register(&s3c_device_spi_lcm);
++
++      platform_device_register(&gta01_bl_dev);
++      platform_device_register(&gta01_button_dev);
++      platform_device_register(&gta01_pm_gsm_dev);
++
++      switch (system_rev) {
++      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_pmu_resources[0].start =
++                      gta01_pmu_resources[0].end = GTA01Bv4_IRQ_PCF50606;
++              gta01_led_resources[0].start =
++                      gta01_led_resources[0].end = GTA01Bv4_GPIO_VIBRATOR_ON;
++              break;
++      }
++      mangle_pmu_pdata_by_system_rev();
++      platform_device_register(&gta01_pmu_dev);
++      platform_device_register(&gta01_led_dev);
++
++      platform_add_devices(gta01_devices, ARRAY_SIZE(gta01_devices));
++
++      s3c2410_pm_init();
++
++      set_irq_type(GTA01_IRQ_MODEM, IRQT_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);
++}
++
++MACHINE_START(NEO1973_GTA01, "GTA01")
++      .phys_io        = S3C2410_PA_UART,
++      .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
++      .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
+Index: linux-2.6.24.7/arch/arm/mach-s3c2410/mach-h1940.c
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/mach-s3c2410/mach-h1940.c     2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/mach-s3c2410/mach-h1940.c  2008-12-11 22:46:48.000000000 +0100
+@@ -38,6 +38,7 @@
+ #include <asm/arch/h1940.h>
+ #include <asm/arch/h1940-latch.h>
+ #include <asm/arch/fb.h>
++#include <asm/arch/tc.h>
+ #include <asm/plat-s3c24xx/udc.h>
+ #include <asm/plat-s3c24xx/clock.h>
+@@ -129,6 +130,11 @@ static struct s3c2410_udc_mach_info h194
+       .vbus_pin_inverted      = 1,
+ };
++static struct s3c2410_ts_mach_info h1940_ts_cfg __initdata = {
++              .delay = 10000,
++              .presc = 49,
++              .oversampling_shift = 2,
++};
+ /**
+  * Set lcd on or off
+@@ -186,6 +192,7 @@ static struct platform_device *h1940_dev
+       &s3c_device_i2c,
+       &s3c_device_iis,
+       &s3c_device_usbgadget,
++      &s3c_device_ts,
+       &s3c_device_leds,
+       &s3c_device_bluetooth,
+ };
+@@ -214,6 +221,7 @@ static void __init h1940_init(void)
+       u32 tmp;
+       s3c24xx_fb_set_platdata(&h1940_fb_info);
++      set_s3c2410ts_info(&h1940_ts_cfg);
+       s3c24xx_udc_set_platdata(&h1940_udc_cfg);
+       /* Turn off suspend on both USB ports, and switch the
+Index: linux-2.6.24.7/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/mach-s3c2410/mach-qt2410.c    2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/mach-s3c2410/mach-qt2410.c 2008-12-11 22:46:48.000000000 +0100
+@@ -1,6 +1,6 @@
+ /* linux/arch/arm/mach-s3c2410/mach-qt2410.c
+  *
+- * Copyright (C) 2006 by OpenMoko, Inc.
++ * Copyright (C) 2006 by Openmoko, Inc.
+  * Author: Harald Welte <laforge@openmoko.org>
+  * All rights reserved.
+  *
+@@ -214,7 +214,7 @@ static struct platform_device qt2410_led
+ /* SPI */
+-static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int cs)
++static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int csidx, int cs)
+ {
+       switch (cs) {
+       case BITBANG_CS_ACTIVE:
+@@ -321,6 +321,24 @@ static int __init qt2410_tft_setup(char 
+ __setup("tft=", qt2410_tft_setup);
++static struct resource qt2410_button_resources[] = {
++      [0] = {
++              .start = S3C2410_GPF0,
++              .end   = S3C2410_GPF0,
++      },
++      [1] = {
++              .start = S3C2410_GPF2,
++              .end   = S3C2410_GPF2,
++      },
++};
++
++struct platform_device qt2410_button_dev = {
++      .name           ="qt2410-button",
++      .num_resources  = ARRAY_SIZE(qt2410_button_resources),
++      .resource       = qt2410_button_resources,
++};
++
++
+ static void __init qt2410_map_io(void)
+ {
+       s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+Index: linux-2.6.24.7/arch/arm/mach-s3c2410/Makefile
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/mach-s3c2410/Makefile 2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/mach-s3c2410/Makefile      2008-12-11 22:46:48.000000000 +0100
+@@ -16,6 +16,7 @@ obj-$(CONFIG_CPU_S3C2410_DMA)        += dma.o
+ obj-$(CONFIG_S3C2410_PM)      += pm.o sleep.o
+ obj-$(CONFIG_S3C2410_GPIO)    += gpio.o
+ obj-$(CONFIG_S3C2410_CLOCK)   += clock.o
++obj-$(CONFIG_S3C2410_PWM)     += pwm.o
+ # Machine support
+@@ -29,3 +30,4 @@ obj-$(CONFIG_MACH_AML_M5900) += mach-aml
+ obj-$(CONFIG_BAST_PC104_IRQ)  += bast-irq.o
+ obj-$(CONFIG_MACH_VR1000)     += mach-vr1000.o usb-simtec.o
+ obj-$(CONFIG_MACH_QT2410)     += mach-qt2410.o
++obj-$(CONFIG_MACH_NEO1973_GTA01)+= mach-gta01.o
+Index: linux-2.6.24.7/arch/arm/mach-s3c2410/pwm.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2410/pwm.c 2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,277 @@
++/*
++ * arch/arm/mach-s3c2410/3c2410-pwm.c
++ *
++ * Copyright (c) by Javi Roman <javiroman@kernel-labs.org>
++ *             for the Openmoko Project.
++ *
++ *     S3C2410A SoC PWM support
++ *
++ * 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/clk.h>
++#include <linux/device.h>
++#include <asm/hardware.h>
++#include <asm/plat-s3c/regs-timer.h>
++#include <asm/arch/pwm.h>
++
++#ifdef CONFIG_PM
++      static unsigned long standby_reg_tcon;
++      static unsigned long standby_reg_tcfg0;
++      static unsigned long standby_reg_tcfg1;
++#endif
++
++int s3c2410_pwm_disable(struct s3c2410_pwm *pwm)
++{
++      unsigned long tcon;
++
++      /* stop timer */
++      tcon = __raw_readl(S3C2410_TCON);
++      tcon &= 0xffffff00;
++      __raw_writel(tcon, S3C2410_TCON);
++
++      clk_disable(pwm->pclk);
++      clk_put(pwm->pclk);
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_disable);
++
++int s3c2410_pwm_init(struct s3c2410_pwm *pwm)
++{
++      pwm->pclk = clk_get(NULL, "timers");
++      if (IS_ERR(pwm->pclk))
++              return PTR_ERR(pwm->pclk);
++
++      clk_enable(pwm->pclk);
++      pwm->pclk_rate = clk_get_rate(pwm->pclk);
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_init);
++
++int s3c2410_pwm_enable(struct s3c2410_pwm *pwm)
++{
++      unsigned long tcfg0, tcfg1, tcnt, tcmp;
++
++      /* control registers bits */
++      tcfg1 = __raw_readl(S3C2410_TCFG1);
++      tcfg0 = __raw_readl(S3C2410_TCFG0);
++
++      /* divider & scaler slection */
++      switch (pwm->timerid) {
++      case PWM0:
++              tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;
++              tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
++              break;
++      case PWM1:
++              tcfg1 &= ~S3C2410_TCFG1_MUX1_MASK;
++              tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
++              break;
++      case PWM2:
++              tcfg1 &= ~S3C2410_TCFG1_MUX2_MASK;
++              tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
++              break;
++      case PWM3:
++              tcfg1 &= ~S3C2410_TCFG1_MUX3_MASK;
++              tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
++              break;
++      case PWM4:
++              /* timer four is not capable of doing PWM */
++              break;
++      default:
++              clk_disable(pwm->pclk);
++              clk_put(pwm->pclk);
++              return -1;
++      }
++
++      /* divider & scaler values */
++      tcfg1 |= pwm->divider;
++      __raw_writel(tcfg1, S3C2410_TCFG1);
++
++      switch (pwm->timerid) {
++      case PWM0:
++      case PWM1:
++              tcfg0 |= pwm->prescaler;
++              __raw_writel(tcfg0, S3C2410_TCFG0);
++              break;
++      default:
++              if ((tcfg0 | pwm->prescaler) != tcfg0) {
++                      printk(KERN_WARNING "not changing prescaler of PWM %u,"
++                             " since it's shared with timer4 (clock tick)\n",
++                             pwm->timerid);
++              }
++              break;
++      }
++
++      /* timer count and compare buffer initial values */
++      tcnt = pwm->counter;
++      tcmp = pwm->comparer;
++
++      __raw_writel(tcnt, S3C2410_TCNTB(pwm->timerid));
++      __raw_writel(tcmp, S3C2410_TCMPB(pwm->timerid));
++
++      /* ensure timer is stopped */
++      s3c2410_pwm_stop(pwm);
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_enable);
++
++int s3c2410_pwm_start(struct s3c2410_pwm *pwm)
++{
++      unsigned long tcon;
++
++      tcon = __raw_readl(S3C2410_TCON);
++
++      switch (pwm->timerid) {
++      case PWM0:
++              tcon |= S3C2410_TCON_T0START;
++              tcon &= ~S3C2410_TCON_T0MANUALUPD;
++              break;
++      case PWM1:
++              tcon |= S3C2410_TCON_T1START;
++              tcon &= ~S3C2410_TCON_T1MANUALUPD;
++              break;
++      case PWM2:
++              tcon |= S3C2410_TCON_T2START;
++              tcon &= ~S3C2410_TCON_T2MANUALUPD;
++              break;
++      case PWM3:
++              tcon |= S3C2410_TCON_T3START;
++              tcon &= ~S3C2410_TCON_T3MANUALUPD;
++              break;
++      case PWM4:
++              /* timer four is not capable of doing PWM */
++      default:
++              return -ENODEV;
++      }
++
++      __raw_writel(tcon, S3C2410_TCON);
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_start);
++
++int s3c2410_pwm_stop(struct s3c2410_pwm *pwm)
++{
++      unsigned long tcon;
++
++      tcon = __raw_readl(S3C2410_TCON);
++
++      switch (pwm->timerid) {
++      case PWM0:
++              tcon &= ~0x00000000;
++              tcon |= S3C2410_TCON_T0RELOAD;
++              tcon |= S3C2410_TCON_T0MANUALUPD;
++              break;
++      case PWM1:
++              tcon &= ~0x00000080;
++              tcon |= S3C2410_TCON_T1RELOAD;
++              tcon |= S3C2410_TCON_T1MANUALUPD;
++              break;
++      case PWM2:
++              tcon &= ~0x00000800;
++              tcon |= S3C2410_TCON_T2RELOAD;
++              tcon |= S3C2410_TCON_T2MANUALUPD;
++              break;
++      case PWM3:
++              tcon &= ~0x00008000;
++              tcon |= S3C2410_TCON_T3RELOAD;
++              tcon |= S3C2410_TCON_T3MANUALUPD;
++              break;
++      case PWM4:
++              /* timer four is not capable of doing PWM */
++      default:
++              return -ENODEV;
++      }
++
++      __raw_writel(tcon, S3C2410_TCON);
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_stop);
++
++int s3c2410_pwm_duty_cycle(int reg_value, struct s3c2410_pwm *pwm)
++{
++      __raw_writel(reg_value, S3C2410_TCMPB(pwm->timerid));
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_duty_cycle);
++
++int s3c2410_pwm_dumpregs(void)
++{
++      printk(KERN_INFO "TCON: %08lx, TCFG0: %08lx, TCFG1: %08lx\n",
++                      (unsigned long) __raw_readl(S3C2410_TCON),
++                      (unsigned long) __raw_readl(S3C2410_TCFG0),
++                      (unsigned long) __raw_readl(S3C2410_TCFG1));
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(s3c2410_pwm_dumpregs);
++
++static int __init s3c24xx_pwm_probe(struct platform_device *pdev)
++{
++      dev_info(&pdev->dev, "s3c24xx_pwm is registered \n");
++
++      return 0;
++}
++
++#ifdef CONFIG_PM
++static int s3c24xx_pwm_suspend(struct platform_device *pdev, pm_message_t state)
++{
++      /* PWM config should be kept in suspending */
++      standby_reg_tcon = __raw_readl(S3C2410_TCON);
++      standby_reg_tcfg0 = __raw_readl(S3C2410_TCFG0);
++      standby_reg_tcfg1 = __raw_readl(S3C2410_TCFG1);
++
++      return 0;
++}
++
++static int s3c24xx_pwm_resume(struct platform_device *pdev)
++{
++      __raw_writel(standby_reg_tcon, S3C2410_TCON);
++      __raw_writel(standby_reg_tcfg0, S3C2410_TCFG0);
++      __raw_writel(standby_reg_tcfg1, S3C2410_TCFG1);
++
++      return 0;
++}
++#else
++#define sc32440_pwm_suspend   NULL
++#define sc32440_pwm_resume    NULL
++#endif
++
++static struct platform_driver s3c24xx_pwm_driver = {
++      .driver = {
++              .name   = "s3c24xx_pwm",
++              .owner  = THIS_MODULE,
++      },
++      .probe   = s3c24xx_pwm_probe,
++      .suspend = s3c24xx_pwm_suspend,
++      .resume  = s3c24xx_pwm_resume,
++};
++
++static int __init s3c24xx_pwm_init(void)
++{
++      return platform_driver_register(&s3c24xx_pwm_driver);
++}
++
++static void __exit s3c24xx_pwm_exit(void)
++{
++}
++
++MODULE_AUTHOR("Javi Roman <javiroman@kernel-labs.org>");
++MODULE_LICENSE("GPL");
++
++module_init(s3c24xx_pwm_init);
++module_exit(s3c24xx_pwm_exit);
+Index: linux-2.6.24.7/arch/arm/mach-s3c2412/s3c2412.c
+===================================================================
+--- linux-2.6.24.7.orig/arch/arm/mach-s3c2412/s3c2412.c        2008-12-11 22:46:07.000000000 +0100
++++ linux-2.6.24.7/arch/arm/mach-s3c2412/s3c2412.c     2008-12-11 22:46:48.000000000 +0100
+@@ -214,5 +214,8 @@ int __init s3c2412_init(void)
+ {
+       printk("S3C2412: Initialising architecture\n");
++      /* make sure SD/MMC driver can distinguish 2412 from 2410 */
++      s3c_device_sdi.name = "s3c2412-sdi";
++
+       return sysdev_register(&s3c2412_sysdev);
+ }
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/bits.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/bits.h 2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,48 @@
++/*
++ *  Copyright (C) Samsung Electroincs  2003
++ *  Author: SW.LEE <hitchcar@samsung.com>
++ *
++ * 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 __SW_BITS_H
++#define __SW_BITS_H
++
++#define BIT0                            0x00000001
++#define BIT1                            0x00000002
++#define BIT2                            0x00000004
++#define BIT3                            0x00000008
++#define BIT4                            0x00000010
++#define BIT5                            0x00000020
++#define BIT6                            0x00000040
++#define BIT7                            0x00000080
++#define BIT8                            0x00000100
++#define BIT9                            0x00000200
++#define BIT10                           0x00000400
++#define BIT11                           0x00000800
++#define BIT12                           0x00001000
++#define BIT13                           0x00002000
++#define BIT14                           0x00004000
++#define BIT15                           0x00008000
++#define BIT16                           0x00010000
++#define BIT17                           0x00020000
++#define BIT18                           0x00040000
++#define BIT19                           0x00080000
++#define BIT20                           0x00100000
++#define BIT21                           0x00200000
++#define BIT22                           0x00400000
++#define BIT23                           0x00800000
++#define BIT24                           0x01000000
++#define BIT25                           0x02000000
++#define BIT26                           0x04000000
++#define BIT27                           0x08000000
++#define BIT28                           0x10000000
++#define BIT29                           0x20000000
++#define BIT30                           0x40000000
++#define BIT31                           0x80000000
++
++#endif
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/camif.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/camif.c        2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,1047 @@
++/*
++ *   Copyright (C) 2004 Samsung Electronics 
++ *       SW.LEE <hitchcar@samsung.com>
++ *   
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/irq.h>
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++#include <linux/miscdevice.h>
++#include <linux/wait.h>
++#include <linux/miscdevice.h>
++#include <asm/io.h>
++#include <asm/semaphore.h>
++#include <asm/hardware.h>
++#include <asm/uaccess.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/clk.h>
++
++#ifdef CONFIG_ARCH_S3C24A0A
++#include <asm/arch/S3C24A0.h>
++#include <asm/arch/clocks.h>
++#else
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-gpioj.h>
++#include <asm/arch/regs-irq.h>
++#endif
++
++#include "cam_reg.h"
++//#define SW_DEBUG
++#define CONFIG_VIDEO_V4L1_COMPAT
++#include <linux/videodev.h>
++#include "camif.h"
++#include "miscdevice.h"
++
++static int camif_dma_burst(camif_cfg_t *);
++static int camif_scaler(camif_cfg_t *);
++
++/* For SXGA Image */
++#define RESERVE_MEM  15*1024*1024
++#define YUV_MEM      10*1024*1024
++#define RGB_MEM      (RESERVE_MEM - YUV_MEM)
++
++static int camif_malloc(camif_cfg_t *cfg)
++{
++      unsigned int t_size;
++      unsigned int daon = cfg->target_x *cfg->target_y;
++
++      if(cfg->dma_type & CAMIF_CODEC) {
++              if (cfg->fmt & CAMIF_OUT_YCBCR420) {
++                      t_size = daon * 3 / 2 ;
++              }
++              else  { t_size = daon * 2; /* CAMIF_OUT_YCBCR422 */ }
++              t_size = t_size *cfg->pp_num;
++
++#ifndef SAMSUNG_SXGA_CAM
++              cfg->pp_virt_buf = dma_alloc_coherent(cfg->v->dev,
++                                                    t_size, &cfg->pp_phys_buf,
++                                                    GFP_KERNEL);
++#else
++              printk(KERN_INFO "Reserving High RAM Addresses \n");
++              cfg->pp_phys_buf = PHYS_OFFSET + (MEM_SIZE - RESERVE_MEM);
++              cfg->pp_virt_buf = ioremap_nocache(cfg->pp_phys_buf, YUV_MEM);
++#endif
++
++              if ( !cfg->pp_virt_buf ) {
++                      printk(KERN_ERR"CAMERA:Failed to request YCBCR MEM\n");
++                      return -ENOMEM;
++              }
++              memset(cfg->pp_virt_buf, 0, t_size);
++              cfg->pp_totalsize = t_size;
++              return 0;
++      }
++      if ( cfg->dma_type & CAMIF_PREVIEW ) {
++              if (cfg->fmt & CAMIF_RGB16) 
++                      t_size = daon * 2; /*  4byte per two pixel*/
++              else {
++                      assert(cfg->fmt & CAMIF_RGB24);
++                      t_size = daon * 4; /* 4byte per one pixel */
++              }
++              t_size = t_size * cfg->pp_num;
++#ifndef SAMSUNG_SXGA_CAM
++              cfg->pp_virt_buf = dma_alloc_coherent(cfg->v->dev,
++                                                    t_size, &cfg->pp_phys_buf,
++                                                    GFP_KERNEL);
++#else
++              printk(KERN_INFO "Reserving High RAM Addresses \n");
++              cfg->pp_phys_buf = PHYS_OFFSET + (MEM_SIZE - RESERVE_MEM ) + YUV_MEM;
++              cfg->pp_virt_buf = ioremap_nocache(cfg->pp_phys_buf,RGB_MEM);
++#endif
++              if ( !cfg->pp_virt_buf ) { 
++                      printk(KERN_ERR"CAMERA:Failed to request RGB MEM\n");
++                      return -ENOMEM;
++              }
++              memset(cfg->pp_virt_buf, 0, t_size);
++              cfg->pp_totalsize = t_size;
++              return 0;
++      }
++
++      return 0;               /* Never come. */
++}
++
++static int camif_demalloc(camif_cfg_t *cfg)
++{
++#ifndef SAMSUNG_SXGA_CAM
++      if ( cfg->pp_virt_buf ) {
++              dma_free_coherent(cfg->v->dev, cfg->pp_totalsize,
++                                cfg->pp_virt_buf, cfg->pp_phys_buf);
++              cfg->pp_virt_buf = 0;
++      }
++#else
++      iounmap(cfg->pp_virt_buf);
++      cfg->pp_virt_buf = 0;
++#endif
++      return 0;
++}
++
++/* 
++ * advise a person to use this func in ISR 
++ * index value indicates the next frame count to be used 
++ */
++int camif_g_frame_num(camif_cfg_t *cfg)
++{
++      int index = 0;
++
++      if (cfg->dma_type & CAMIF_CODEC ) {
++              index = FRAME_CNT(readl(camregs + S3C2440_CAM_REG_CICOSTATUS));
++              DPRINTK("CAMIF_CODEC frame %d \n", index);
++      }
++      else {
++              assert(cfg->dma_type & CAMIF_PREVIEW );
++              index = FRAME_CNT(readl(camregs + S3C2440_CAM_REG_CIPRSTATUS));
++              DPRINTK("CAMIF_PREVIEW frame %d  0x%08X \n", index,
++                      readl(camregs + S3C2440_CAM_REG_CIPRSTATUS));
++      }
++      cfg->now_frame_num = (index + 2) % 4; /* When 4 PingPong */
++      return index; /* meaningless */
++}
++
++static int camif_pp_codec(camif_cfg_t *cfg)
++{
++      u32 i, c_size; /* Cb,Cr size */
++      u32 one_p_size;
++      u32 daon = cfg->target_x * cfg->target_y;
++      if (cfg->fmt & CAMIF_OUT_YCBCR420)
++              c_size = daon / 4;
++      else {
++              assert(cfg->fmt & CAMIF_OUT_YCBCR422);
++              c_size = daon / 2;
++      }
++      switch ( cfg->pp_num ) {
++      case 1 :
++              for (i =0 ; i < 4; i++) {
++                      cfg->img_buf[i].virt_y = cfg->pp_virt_buf;
++                      cfg->img_buf[i].phys_y = cfg->pp_phys_buf;
++                      cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon;
++                      cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon;
++                      cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size;
++                      cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size;
++                      writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
++                      writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
++                      writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
++              }
++              break;
++      case 2:
++#define  TRY   (( i%2 ) ? 1 :0)
++              one_p_size = daon + 2*c_size;
++              for (i = 0; i < 4  ; i++) {
++                      cfg->img_buf[i].virt_y = cfg->pp_virt_buf + TRY * one_p_size;
++                      cfg->img_buf[i].phys_y = cfg->pp_phys_buf + TRY * one_p_size;
++                      cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + TRY * one_p_size;
++                      cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + TRY * one_p_size;
++                      cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + TRY * one_p_size;
++                      cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + TRY * one_p_size;
++                      writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
++                      writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
++                      writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
++              }
++              break;
++      case 4:
++              one_p_size = daon + 2*c_size;
++              for (i = 0; i < 4 ; i++) {
++                      cfg->img_buf[i].virt_y = cfg->pp_virt_buf + i * one_p_size;
++                      cfg->img_buf[i].phys_y = cfg->pp_phys_buf + i * one_p_size;
++                      cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + i * one_p_size;
++                      cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + i * one_p_size;
++                      cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + i * one_p_size;
++                      cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + i * one_p_size;
++                      writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
++                      writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
++                      writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
++              }
++              break;
++      default:
++              printk("Invalid PingPong Number %d \n",cfg->pp_num);
++              panic("halt\n");
++}
++      return 0;
++}
++
++/* RGB Buffer Allocation */
++static int camif_pp_preview(camif_cfg_t *cfg)
++{
++      int i;
++      u32 daon = cfg->target_x * cfg->target_y;
++
++      if(cfg->fmt & CAMIF_RGB24)  
++              daon = daon * 4 ;
++      else {
++              assert (cfg->fmt & CAMIF_RGB16);
++              daon = daon *2;
++      }  
++      switch ( cfg->pp_num ) {
++              case 1:
++                      for ( i = 0; i < 4 ; i++ ) {
++                              cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf ;
++                              cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf ;
++                              writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
++                      }
++                      break;
++              case 2:
++                      for ( i = 0; i < 4 ; i++) {
++                              cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf + TRY * daon;
++                              cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf + TRY * daon;
++                              writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
++                      }
++                      break;
++              case 4:
++                      for ( i = 0; i < 4 ; i++) {
++                              cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf + i * daon;
++                              cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf + i * daon;
++                              writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
++                      }
++                      break;
++              default:
++                      printk("Invalid PingPong Number %d \n",cfg->pp_num);
++                      panic("halt\n");
++      }
++      return 0;
++}
++
++static int camif_pingpong(camif_cfg_t *cfg)
++{
++      if (cfg->dma_type & CAMIF_CODEC ) {
++              camif_pp_codec(cfg);
++      }
++
++      if ( cfg->dma_type & CAMIF_PREVIEW) {
++              camif_pp_preview(cfg);
++      }
++      return 0;
++}
++
++
++/***********       Image Convert *******************************/
++/*  Return Format 
++ *  Supported by Hardware
++ *  V4L2_PIX_FMT_YUV420,
++ *  V4L2_PIX_FMT_YUV422P,
++ *  V4L2_PIX_FMT_BGR32 (BGR4)
++ * -----------------------------------
++ *  V4L2_PIX_FMT_RGB565(X) 
++ *  Currenly 2byte --> BGR656 Format
++ *  S3C2440A,S3C24A0 supports vairants with reversed FMT_RGB565 
++    i.e  blue toward the least, red towards the most significant bit 
++    --  by SW.LEE
++ */
++
++
++/* 
++ * After calling camif_g_frame_num,
++ * this func must be called 
++ */
++u8 * camif_g_frame(camif_cfg_t *cfg)
++{
++      u8 * ret = NULL;
++      int cnt = cfg->now_frame_num;
++
++      if(cfg->dma_type & CAMIF_PREVIEW) {
++              ret = cfg->img_buf[cnt].virt_rgb;
++      }
++      if (cfg->dma_type & CAMIF_CODEC) {
++              ret = cfg->img_buf[cnt].virt_y;
++      }
++      return ret;
++}
++
++/* This function must be called in module initial time */
++static int camif_source_fmt(camif_gc_t *gc) 
++{
++      u32 cmd = 0;
++
++      /* Configure CISRCFMT --Source Format */
++      if (gc->itu_fmt & CAMIF_ITU601) {
++              cmd = CAMIF_ITU601;
++      }
++      else {
++              assert ( gc->itu_fmt & CAMIF_ITU656);
++              cmd = CAMIF_ITU656;
++      }
++      cmd  |= SOURCE_HSIZE(gc->source_x)| SOURCE_VSIZE(gc->source_y);
++      /* Order422 */
++      cmd |=  gc->order422;
++      writel(cmd, camregs + S3C2440_CAM_REG_CISRCFMT);
++
++      return 0 ;
++}
++
++
++/* 
++ * Codec Input YCBCR422 will be Fixed 
++ */
++static int camif_target_fmt(camif_cfg_t *cfg)
++{
++      u32 cmd = 0;
++
++      if (cfg->dma_type & CAMIF_CODEC) {
++              /* YCBCR setting */  
++              cmd = TARGET_HSIZE(cfg->target_x)| TARGET_VSIZE(cfg->target_y);
++              if ( cfg->fmt & CAMIF_OUT_YCBCR420 ) {
++                      cmd |= OUT_YCBCR420|IN_YCBCR422;
++              }
++              else { 
++                      assert(cfg->fmt & CAMIF_OUT_YCBCR422);
++                      cmd |= OUT_YCBCR422|IN_YCBCR422;
++              }
++              writel(cmd | cfg->flip, camregs + S3C2440_CAM_REG_CICOTRGFMT);
++
++      } else {
++              assert(cfg->dma_type & CAMIF_PREVIEW);
++              writel(TARGET_HSIZE(cfg->target_x)|TARGET_VSIZE(cfg->target_y)|cfg->flip,
++                      camregs + S3C2440_CAM_REG_CIPRTRGFMT); 
++      }
++      return 0;
++}
++
++void camif_change_flip(camif_cfg_t *cfg)
++{
++      u32 cmd = readl(camregs + S3C2440_CAM_REG_CICOTRGFMT);
++
++      cmd &= ~(BIT14|BIT15);
++      cmd |= cfg->flip;
++
++      writel(cmd, camregs + S3C2440_CAM_REG_CICOTRGFMT);
++}
++
++
++
++/* Must:
++ * Before calling this function,
++ * you must use "camif_dynamic_open"
++ * If you want to enable both CODEC and preview
++ *  you must do it at the same time.
++ */
++int camif_capture_start(camif_cfg_t *cfg)
++{
++      u32 n_cmd = 0;          /* Next Command */
++
++      switch(cfg->exec) {
++      case CAMIF_BOTH_DMA_ON:
++              camif_reset(CAMIF_RESET, 0); /* Flush Camera Core Buffer */
++              writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) |
++                           SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
++              writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) |
++                           SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
++              n_cmd = CAMIF_CAP_PREVIEW_ON | CAMIF_CAP_CODEC_ON;
++              break;
++      case CAMIF_DMA_ON:
++              camif_reset(CAMIF_RESET, 0); /* Flush Camera Core Buffer */
++              if (cfg->dma_type&CAMIF_CODEC) {
++                      writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) |
++                           SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
++                      n_cmd = CAMIF_CAP_CODEC_ON;
++              } else {
++                      writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) |
++                           SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
++                      n_cmd = CAMIF_CAP_PREVIEW_ON;
++              }
++
++              /* wait until Sync Time expires */
++              /* First settting, to wait VSYNC fall  */
++              /* By VESA spec,in 640x480 @60Hz
++                      MAX Delay Time is around 64us which "while" has.*/
++              while(VSYNC & readl(camregs + S3C2440_CAM_REG_CICOSTATUS));
++              break;
++      default:
++              break;
++}
++      writel(n_cmd | CAMIF_CAP_ON, camregs + S3C2440_CAM_REG_CIIMGCPT); 
++      return 0;
++}
++
++
++int camif_capture_stop(camif_cfg_t *cfg)
++{
++      u32 n_cmd = readl(camregs + S3C2440_CAM_REG_CIIMGCPT);  /* Next Command */
++
++      switch(cfg->exec) {
++      case CAMIF_BOTH_DMA_OFF:
++              writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) &
++                      ~SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
++              writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) &
++                      ~SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
++              n_cmd = 0;
++              break;
++      case CAMIF_DMA_OFF_L_IRQ: /* fall thru */
++      case CAMIF_DMA_OFF:
++              if (cfg->dma_type&CAMIF_CODEC) {
++                      writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) &
++                          ~SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
++                      n_cmd &= ~CAMIF_CAP_CODEC_ON;
++                      if (!(n_cmd & CAMIF_CAP_PREVIEW_ON))
++                              n_cmd = 0;
++              } else {
++                      writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) &
++                          ~SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
++                      n_cmd &= ~CAMIF_CAP_PREVIEW_ON;
++                      if (!(n_cmd & CAMIF_CAP_CODEC_ON))
++                              n_cmd = 0;
++              }
++              break;
++      default:
++              panic("Unexpected \n");
++      }
++      writel(n_cmd, camregs + S3C2440_CAM_REG_CIIMGCPT);
++
++      if (cfg->exec == CAMIF_DMA_OFF_L_IRQ) { /* Last IRQ  */
++              if (cfg->dma_type & CAMIF_CODEC)
++                      writel(readl(camregs + S3C2440_CAM_REG_CICOCTRL) |
++                           LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CICOCTRL);
++              else
++                      writel(readl(camregs + S3C2440_CAM_REG_CIPRCTRL) |
++                           LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CIPRCTRL);
++      }
++#if 0
++      else {                          /* to make internal state machine of CAMERA stop */
++              camif_reset(CAMIF_RESET, 0);
++      }
++#endif
++      return 0;
++}
++
++
++/* LastIRQEn is autoclear */
++void camif_last_irq_en(camif_cfg_t *cfg)
++{
++      if ((cfg->exec == CAMIF_BOTH_DMA_ON) || (cfg->dma_type & CAMIF_CODEC))
++              writel(readl(camregs + S3C2440_CAM_REG_CICOCTRL) |
++                      LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CICOCTRL);
++
++      if ((cfg->exec == CAMIF_BOTH_DMA_ON) || !(cfg->dma_type & CAMIF_CODEC))
++              writel(readl(camregs + S3C2440_CAM_REG_CIPRCTRL) |
++                      LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CIPRCTRL);
++}
++
++static int  
++camif_scaler_internal(u32 srcWidth, u32 dstWidth, u32 *ratio, u32 *shift)
++{
++      if(srcWidth>=64*dstWidth){
++              printk(KERN_ERR"CAMERA:out of prescaler range: srcWidth /dstWidth = %d(< 64)\n",
++                       srcWidth/dstWidth);
++              return 1;
++      }
++      else if(srcWidth>=32*dstWidth){
++              *ratio=32;
++              *shift=5;
++      }
++      else if(srcWidth>=16*dstWidth){
++              *ratio=16;
++              *shift=4;
++      }
++      else if(srcWidth>=8*dstWidth){
++              *ratio=8;
++              *shift=3;
++      }
++      else if(srcWidth>=4*dstWidth){
++              *ratio=4;
++              *shift=2;
++      }
++      else if(srcWidth>=2*dstWidth){
++              *ratio=2;
++              *shift=1;
++      }
++      else {
++              *ratio=1;
++              *shift=0;
++      }  
++      return 0;
++}
++
++
++int camif_g_fifo_status(camif_cfg_t *cfg) 
++{
++      u32 reg;
++
++      if (cfg->dma_type & CAMIF_CODEC) {
++              u32 flag = CO_OVERFLOW_Y | CO_OVERFLOW_CB | CO_OVERFLOW_CR;
++              reg = readl(camregs + S3C2440_CAM_REG_CICOSTATUS);
++              if (reg & flag) {
++                      printk("CODEC: FIFO error(0x%08x) and corrected\n",reg);
++                      /* FIFO Error Count ++  */
++                      writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) |
++                              CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR,
++                              camregs + S3C2440_CAM_REG_CIWDOFST);
++
++                      writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) &
++                              ~(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR),
++                              camregs + S3C2440_CAM_REG_CIWDOFST);
++                      return 1; /* Error */
++              }
++      }
++      if (cfg->dma_type & CAMIF_PREVIEW) {
++              u32 flag = PR_OVERFLOW_CB | PR_OVERFLOW_CR;
++              reg = readl(camregs + S3C2440_CAM_REG_CIPRSTATUS);
++              if (reg & flag) {
++                      printk("PREVIEW:FIFO error(0x%08x) and corrected\n",reg);
++                      writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) |
++                              CO_FIFO_CB | CO_FIFO_CR,
++                              camregs + S3C2440_CAM_REG_CIWDOFST);
++
++                      writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) &
++                              ~(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR),
++                              camregs + S3C2440_CAM_REG_CIWDOFST);
++                      /* FIFO Error Count ++  */
++                      return 1; /* Error */
++              }
++      }
++      return 0;               /* No Error */
++}
++
++
++/* Policy:
++ * if codec or preview define the win offset,
++ *    other must follow that value.
++ */
++int camif_win_offset(camif_gc_t *gc )
++{
++      u32 h = gc->win_hor_ofst;
++      u32 v = gc->win_ver_ofst;
++
++      /*Clear Overflow */
++      writel(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR | PR_FIFO_CB | PR_FIFO_CB,
++              camregs + S3C2440_CAM_REG_CIWDOFST);
++      writel(0, camregs + S3C2440_CAM_REG_CIWDOFST);
++
++      if (!h && !v)   {
++              writel(0, camregs + S3C2440_CAM_REG_CIWDOFST);
++              return 0;
++      }
++
++      writel(WINOFEN | WINHOROFST(h) | WINVEROFST(v), camregs + S3C2440_CAM_REG_CIWDOFST);
++      return 0;
++}
++
++/*  
++ * when you change the resolution in a specific camera,
++ * sometimes, it is necessary to change the polarity 
++ *                                       -- SW.LEE
++ */
++static void camif_polarity(camif_gc_t *gc)
++{
++      u32 cmd = readl(camregs + S3C2440_CAM_REG_CIGCTRL);;
++      
++      cmd = cmd & ~(BIT26|BIT25|BIT24); /* clear polarity */
++      if (gc->polarity_pclk)
++              cmd |= GC_INVPOLPCLK;
++      if (gc->polarity_vsync)
++              cmd |= GC_INVPOLVSYNC;
++      if (gc->polarity_href)
++              cmd |= GC_INVPOLHREF;
++      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
++             cmd, camregs + S3C2440_CAM_REG_CIGCTRL);
++}
++
++
++int camif_dynamic_open(camif_cfg_t *cfg)
++{
++      camif_win_offset(cfg->gc);
++      camif_polarity(cfg->gc);
++      
++      if(camif_scaler(cfg)) {
++              printk(KERN_ERR "CAMERA:Preview Scaler, Change WinHorOfset or Target Size\n");
++              return 1;
++      }
++      camif_target_fmt(cfg);
++      if (camif_dma_burst(cfg)) {
++              printk(KERN_ERR "CAMERA:DMA Busrt Length Error \n");
++              return 1;
++      }
++      if(camif_malloc(cfg) ) {
++              printk(KERN_ERR "    Instead of using consistent_alloc()\n"
++                              "    lease use dedicated memory allocation for DMA memory\n");
++              return -1;
++      }
++      camif_pingpong(cfg);
++      return 0;
++}
++
++int camif_dynamic_close(camif_cfg_t *cfg)
++{
++      camif_demalloc(cfg);
++      return 0;
++}
++
++static int camif_target_area(camif_cfg_t *cfg) 
++{
++      u32 rect = cfg->target_x * cfg->target_y;
++
++      if (cfg->dma_type & CAMIF_CODEC)
++              writel(rect, camregs + S3C2440_CAM_REG_CICOTAREA);
++
++      if (cfg->dma_type & CAMIF_PREVIEW)
++              writel(rect, camregs + S3C2440_CAM_REG_CIPRTAREA);
++
++      return 0;
++}
++
++static int inline camif_hw_reg(camif_cfg_t *cfg)
++{
++      u32 cmd = 0;
++
++      if (cfg->dma_type & CAMIF_CODEC) {
++              writel(PRE_SHIFT(cfg->sc.shfactor) |
++                     PRE_HRATIO(cfg->sc.prehratio) |
++                     PRE_VRATIO(cfg->sc.prevratio),
++                     camregs + S3C2440_CAM_REG_CICOSCPRERATIO);
++              writel(PRE_DST_WIDTH(cfg->sc.predst_x) |
++                     PRE_DST_HEIGHT(cfg->sc.predst_y),
++                     camregs + S3C2440_CAM_REG_CICOSCPREDST);
++
++              /* Differ from Preview */
++              if (cfg->sc.scalerbypass)
++                      cmd |= SCALERBYPASS;
++              if (cfg->sc.scaleup_h & cfg->sc.scaleup_v)
++                      cmd |= BIT30|BIT29;
++              writel(cmd | MAIN_HRATIO(cfg->sc.mainhratio) |
++                     MAIN_VRATIO(cfg->sc.mainvratio),
++                     camregs + S3C2440_CAM_REG_CICOSCCTRL);
++              return 0;
++      }
++      if (cfg->dma_type & CAMIF_PREVIEW) {
++              writel(PRE_SHIFT(cfg->sc.shfactor) |
++                     PRE_HRATIO(cfg->sc.prehratio) |
++                     PRE_VRATIO(cfg->sc.prevratio),
++                     camregs + S3C2440_CAM_REG_CIPRSCPRERATIO);
++              writel(PRE_DST_WIDTH(cfg->sc.predst_x) |
++                     PRE_DST_HEIGHT(cfg->sc.predst_y),
++                     camregs + S3C2440_CAM_REG_CIPRSCPREDST);
++              /* Differ from Codec */
++              if (cfg->fmt & CAMIF_RGB24)
++                      cmd |= RGB_FMT24;  
++              if (cfg->sc.scaleup_h & cfg->sc.scaleup_v)
++                      cmd |= BIT29 | BIT28;
++              writel(cmd | MAIN_HRATIO(cfg->sc.mainhratio) | S_METHOD |
++                     MAIN_VRATIO(cfg->sc.mainvratio),
++                     camregs + S3C2440_CAM_REG_CIPRSCCTRL);
++              return 0;
++      }
++
++      panic("CAMERA:DMA_TYPE Wrong \n");
++      return 0;
++}
++
++
++/* Configure Pre-scaler control  & main scaler control register */
++static int camif_scaler(camif_cfg_t *cfg)
++{
++      int tx = cfg->target_x, ty = cfg->target_y;
++      int sx, sy;
++
++      if (tx <= 0 || ty <= 0)
++              panic("CAMERA: Invalid target size \n");
++
++      sx = cfg->gc->source_x - 2 * cfg->gc->win_hor_ofst;
++      sy = cfg->gc->source_y - 2 * cfg->gc->win_ver_ofst;     
++      if (sx <= 0 || sy <= 0)
++              panic("CAMERA: Invalid source size \n");
++
++      cfg->sc.modified_src_x = sx;
++      cfg->sc.modified_src_y = sy;
++
++      /* Pre-scaler control register 1 */
++      camif_scaler_internal(sx, tx, &cfg->sc.prehratio, &cfg->sc.hfactor);
++      camif_scaler_internal(sy, ty, &cfg->sc.prevratio, &cfg->sc.vfactor);
++
++      if (cfg->dma_type & CAMIF_PREVIEW)
++              if ((sx / cfg->sc.prehratio) > 640) {
++                      printk(KERN_INFO "CAMERA: Internal Preview line "
++                                       "buffer is 640 pixels\n");
++                      return 1; /* Error */
++              }
++
++      cfg->sc.shfactor = 10 - (cfg->sc.hfactor + cfg->sc.vfactor);
++      /* Pre-scaler control register 2 */
++      cfg->sc.predst_x = sx / cfg->sc.prehratio;
++      cfg->sc.predst_y = sy / cfg->sc.prevratio;
++
++      /* Main-scaler control register */
++      cfg->sc.mainhratio = (sx << 8) / (tx << cfg->sc.hfactor);
++      cfg->sc.mainvratio = (sy << 8) / (ty << cfg->sc.vfactor);
++      DPRINTK(" sx %d, sy %d tx %d ty %d  \n", sx, sy, tx, ty);
++      DPRINTK(" hfactor %d  vfactor %d \n",cfg->sc.hfactor, cfg->sc.vfactor);
++
++      cfg->sc.scaleup_h  = (sx <= tx) ? 1: 0;
++      cfg->sc.scaleup_v  = (sy <= ty) ? 1: 0;
++      if (cfg->sc.scaleup_h != cfg->sc.scaleup_v)
++              printk(KERN_ERR "scaleup_h must be same to scaleup_v \n");
++
++      camif_hw_reg(cfg);
++      camif_target_area(cfg);
++
++      return 0;
++}
++
++/******************************************************
++ CalculateBurstSize - Calculate the busrt lengths
++ Description:
++ - dstHSize: the number of the byte of H Size.
++********************************************************/
++static void camif_g_bsize(u32 hsize, u32 *mburst, u32 *rburst)
++{
++      u32 tmp;
++
++      tmp = (hsize / 4) % 16;
++      switch(tmp) {
++      case 0:
++              *mburst=16;
++              *rburst=16;
++              break;
++      case 4:
++              *mburst=16;
++              *rburst=4;
++              break;
++      case 8:
++              *mburst=16;
++              *rburst=8;
++              break;
++      default:
++              tmp=(hsize / 4) % 8;
++              switch(tmp) {
++              case 0:
++                      *mburst = 8;
++                      *rburst = 8;
++                      break;
++              case 4:
++                      *mburst = 8;
++                      *rburst = 4;
++              default:
++                      *mburst = 4;
++                      tmp = (hsize / 4) % 4;
++                      *rburst= (tmp) ? tmp: 4;
++                      break;
++      }
++              break;
++      }
++}
++
++/* SXGA 1028x1024*/
++/* XGA 1024x768 */
++/* SVGA 800x600 */
++/* VGA 640x480 */
++/* CIF 352x288 */
++/* QVGA 320x240 */
++/* QCIF 176x144 */
++/* ret val 
++        1 : DMA Size Error 
++*/
++#define BURST_ERR 1 
++static int camif_dma_burst(camif_cfg_t *cfg)
++{
++      int width = cfg->target_x;
++
++      if (cfg->dma_type & CAMIF_CODEC ) {
++              u32 yburst_m, yburst_r;
++              u32 cburst_m, cburst_r;
++              /* CODEC DMA WIDHT is multiple of 16 */
++              if (width % 16)
++                      return BURST_ERR;   /* DMA Burst Length Error */
++              camif_g_bsize(width, &yburst_m, &yburst_r);
++              camif_g_bsize(width / 2, &cburst_m, &cburst_r);
++
++              writel(YBURST_M(yburst_m) | CBURST_M(cburst_m) |
++                     YBURST_R(yburst_r) | CBURST_R(cburst_r),
++                     camregs + S3C2440_CAM_REG_CICOCTRL);
++      }
++
++      if (cfg->dma_type & CAMIF_PREVIEW) {
++              u32 rgburst_m, rgburst_r;
++              if(cfg->fmt == CAMIF_RGB24) {
++                      if (width % 2)
++                              return BURST_ERR;   /* DMA Burst Length Error */
++                      camif_g_bsize(width*4,&rgburst_m,&rgburst_r);
++              } else {                /* CAMIF_RGB16 */
++                      if ((width / 2) %2)
++                              return BURST_ERR; /* DMA Burst Length Error */
++                      camif_g_bsize(width*2,&rgburst_m,&rgburst_r);  
++              }
++
++              writel(RGBURST_M(rgburst_m) | RGBURST_R(rgburst_r),
++                     camregs + S3C2440_CAM_REG_CIPRCTRL);
++      }
++      return 0;
++}
++
++static int camif_gpio_init(void)
++{
++#ifdef CONFIG_ARCH_S3C24A0A
++      /* S3C24A0A has the dedicated signal pins for Camera */
++#else
++      s3c2410_gpio_cfgpin(S3C2440_GPJ0, S3C2440_GPJ0_CAMDATA0);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ1, S3C2440_GPJ1_CAMDATA1);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ2, S3C2440_GPJ2_CAMDATA2);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ3, S3C2440_GPJ3_CAMDATA3);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ4, S3C2440_GPJ4_CAMDATA4);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ5, S3C2440_GPJ5_CAMDATA5);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ6, S3C2440_GPJ6_CAMDATA6);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ7, S3C2440_GPJ7_CAMDATA7);
++
++      s3c2410_gpio_cfgpin(S3C2440_GPJ8, S3C2440_GPJ8_CAMPCLK);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ9, S3C2440_GPJ9_CAMVSYNC);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ10, S3C2440_GPJ10_CAMHREF);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ11, S3C2440_GPJ11_CAMCLKOUT);
++      s3c2410_gpio_cfgpin(S3C2440_GPJ12, S3C2440_GPJ12_CAMRESET);
++#endif
++        return 0;
++}
++
++
++#define ROUND_ADD 0x100000
++
++#ifdef CONFIG_ARCH_S3C24A0A
++int camif_clock_init(camif_gc_t *gc)
++{
++      unsigned int upll, camclk_div, camclk;
++
++      if (!gc) camclk = 24000000;
++      else  {
++              camclk = gc->camclk;
++              if (camclk > 48000000)
++                      printk(KERN_ERR "Wrong Camera Clock\n");
++      }
++
++      CLKCON |= CLKCON_CAM_UPLL | CLKCON_CAM_HCLK;
++      upll = get_bus_clk(GET_UPLL);
++      printk(KERN_INFO "CAMERA:Default UPLL %08d and Assing 96Mhz to UPLL\n",upll);   
++      UPLLCON = FInsrt(56, fPLL_MDIV) | FInsrt(2, fPLL_PDIV)| FInsrt(1, fPLL_SDIV);
++      upll = get_bus_clk(GET_UPLL);
++
++      camclk_div = (upll+ROUND_ADD) / camclk - 1;
++      CLKDIVN = (CLKDIVN & 0xFF) | CLKDIVN_CAM(camclk_div);
++      printk(KERN_INFO"CAMERA:upll %d MACRO 0x%08X CLKDIVN 0x%08X \n",
++                              upll, CLKDIVN_CAM(camclk_div), CLKDIVN);
++      writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);  /* Dummy ? */
++
++      return 0;
++}
++#else
++int camif_clock_init(camif_gc_t *gc)
++{
++      unsigned int camclk;
++      struct clk *clk_camif = clk_get(NULL, "camif");
++      struct clk *clk_camif_upll = clk_get(NULL, "camif-upll");
++
++      if (!gc)
++              camclk = 24000000;
++      else {
++              camclk = gc->camclk;
++              if (camclk > 48000000)
++                      printk(KERN_ERR "Wrong Camera Clock\n");
++      }
++
++      clk_set_rate(clk_camif, camclk);
++
++      clk_enable(clk_camif);
++      clk_enable(clk_camif_upll);
++      
++
++#if 0
++      CLKCON |= CLKCON_CAMIF;
++      upll = elfin_get_bus_clk(GET_UPLL);
++      printk(KERN_INFO "CAMERA:Default UPLL %08d and Assing 96Mhz to UPLL\n",upll);   
++      {
++              UPLLCON = FInsrt(60, fPLL_MDIV) | FInsrt(4, fPLL_PDIV)| FInsrt(1, fPLL_SDIV);
++              CLKDIVN |= DIVN_UPLL;   /* For USB */
++              upll = elfin_get_bus_clk(GET_UPLL);
++      }
++
++      camclk_div = (upll+ROUND_ADD) /(camclk * 2) -1;
++      CAMDIVN = CAMCLK_SET_DIV|(camclk_div&0xf);
++      printk(KERN_INFO "CAMERA:upll %08d  cam_clk %08d CAMDIVN 0x%08x \n",upll,camclk, CAMDIVN);
++#endif
++      writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);  /* Dummy ? */
++
++      return 0;
++}
++#endif
++
++/* 
++   Reset Camera IP in CPU
++   Reset External Sensor 
++ */
++void camif_reset(int is, int delay)
++{
++      switch (is) {
++              case CAMIF_RESET:
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
++                             GC_SWRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      mdelay(1);
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
++                             ~GC_SWRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      break;
++              case CAMIF_EX_RESET_AH: /*Active High */
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
++                             ~GC_CAMRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      udelay(200);
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
++                             GC_CAMRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      udelay(delay);
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
++                             ~GC_CAMRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      break;
++              case CAMIF_EX_RESET_AL: /*Active Low */
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
++                             GC_CAMRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      udelay(200);
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
++                             ~GC_CAMRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      udelay(delay);
++                      writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
++                             GC_CAMRST,
++                             camregs + S3C2440_CAM_REG_CIGCTRL);
++                      break;
++              default:
++                      break;
++      }
++}
++              
++/* For Camera Operation,
++ * we can give the high priority to REQ2 of ARBITER1 
++ */
++
++/* Please move me into proper place 
++ *  camif_gc_t is not because "rmmod imgsenor" will delete the instance of camif_gc_t  
++ */
++static u32 old_priority; 
++
++static void camif_bus_priority(int flag)
++{
++      if (flag) {
++#ifdef CONFIG_ARCH_S3C24A0A
++              old_priority = PRIORITY0;
++              PRIORITY0 = PRIORITY_I_FIX;
++              PRIORITY1 = PRIORITY_I_FIX;
++
++#else
++              old_priority = readl(S3C2410_PRIORITY);
++              writel(readl(S3C2410_PRIORITY) & ~(3<<7), S3C2410_PRIORITY);
++              writel(readl(S3C2410_PRIORITY) |  (1<<7), S3C2410_PRIORITY); /* Arbiter 1, REQ2 first */
++              writel(readl(S3C2410_PRIORITY) & ~(1<<1), S3C2410_PRIORITY); /* Disable Priority Rotate */
++#endif
++      } 
++      else {
++#ifdef CONFIG_ARCH_S3C24A0A
++              PRIORITY0 = old_priority;
++              PRIORITY1 = old_priority;
++#else
++              writel(old_priority, S3C2410_PRIORITY);
++#endif
++      }
++}
++
++static void inline camif_clock_off(void)
++{
++#if defined (CONFIG_ARCH_S3C24A0A)
++      writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);
++
++      CLKCON &= ~CLKCON_CAM_UPLL;
++      CLKCON &= ~CLKCON_CAM_HCLK;
++#else
++      struct clk *clk_camif = clk_get(NULL, "camif");
++      struct clk *clk_camif_upll = clk_get(NULL, "camif-upll");
++
++      writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);
++
++      clk_disable(clk_camif);
++      clk_disable(clk_camif_upll);
++#endif
++}
++
++
++/* Init external image sensor 
++ *  Before make some value into image senor,
++ *  you must set up the pixel clock.
++ */
++void camif_setup_sensor(void)
++{
++      camif_reset(CAMIF_RESET, 0);
++      camif_gpio_init();
++      camif_clock_init(NULL);
++/* Sometimes ,Before loading I2C module, we need the reset signal */
++#ifdef CONFIG_ARCH_S3C24A0A
++      camif_reset(CAMIF_EX_RESET_AL,1000);
++#else
++      camif_reset(CAMIF_EX_RESET_AH,1000);
++#endif
++}
++
++void camif_hw_close(camif_cfg_t *cfg)
++{
++      camif_bus_priority(0);
++      camif_clock_off();
++}
++
++void camif_hw_open(camif_gc_t *gc)
++{
++      camif_source_fmt(gc);
++      camif_win_offset(gc);
++      camif_bus_priority(1);
++}
++
++
++
++/* 
++ * Local variables:
++ * tab-width: 8
++ *  c-indent-level: 8
++ *  c-basic-offset: 8
++ *  c-set-style: "K&R"
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/camif_fsm.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/camif_fsm.c    2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,432 @@
++/*  
++    Copyright (C) 2004 Samsung Electronics 
++                     SW.LEE <hitchcar@sec.samsung.com>
++
++    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 <linux/version.h>
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/signal.h>
++#include <linux/ioport.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/interrupt.h>
++#include <linux/kmod.h>
++#include <linux/vmalloc.h>
++#include <linux/init.h>
++#include <linux/pagemap.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/semaphore.h>
++#include <linux/miscdevice.h>
++
++#define CONFIG_VIDEO_V4L1_COMPAT
++#include <linux/videodev.h>
++#include "camif.h"
++
++//#define SW_DEBUG 
++static void camif_start_p_with_c(camif_cfg_t *cfg);
++
++#include "camif.h"
++const char *fsm_version =
++        "$Id: camif_fsm.c,v 1.3 2004/04/27 10:26:28 swlee Exp $";
++
++
++/* 
++ * FSM function is the place where Synchronization in not necessary
++ * because IRS calls this functions.
++ */
++
++ssize_t camif_p_1fsm_start(camif_cfg_t *cfg)
++{
++      //camif_reset(CAMIF_RESET,0);
++      cfg->exec = CAMIF_DMA_ON;
++      camif_capture_start(cfg);
++      camif_last_irq_en(cfg);
++      cfg->status = CAMIF_STARTED;
++      cfg->fsm = CAMIF_1nd_INT;
++      return 0;
++}
++
++
++ssize_t camif_p_2fsm_start(camif_cfg_t *cfg)
++{
++      camif_reset(CAMIF_RESET,0);/* FIFO Count goes to zero */
++      cfg->exec = CAMIF_DMA_ON;
++      camif_capture_start(cfg);
++      cfg->status = CAMIF_STARTED;
++      cfg->fsm = CAMIF_1nd_INT;
++      return 0;
++}
++
++
++ssize_t camif_4fsm_start(camif_cfg_t *cfg)
++{
++      camif_reset(CAMIF_RESET,0); /* FIFO Count goes to zero */
++      cfg->exec = CAMIF_DMA_ON;
++      camif_capture_start(cfg);
++      cfg->status = CAMIF_STARTED;
++      cfg->fsm = CAMIF_1nd_INT;
++      cfg->perf.frames = 0;
++      return 0;
++}
++
++
++/* Policy:  
++     cfg->perf.frames  set in camif_fsm.c
++     cfg->status set in video-driver.c
++ */
++
++/* 
++ * Don't insert camif_reset(CAM_RESET, 0 ) into this func 
++ */
++ssize_t camif_p_stop(camif_cfg_t *cfg)
++{
++      cfg->exec = CAMIF_DMA_OFF;
++//    cfg->status = CAMIF_STOPPED;
++      camif_capture_stop(cfg);
++      cfg->perf.frames = 0;   /* Dupplicated ? */
++      return 0;
++}
++
++/* When C working, P asks C to play togehter */
++/* Only P must call this function */
++void camif_start_c_with_p (camif_cfg_t *cfg, camif_cfg_t *other)
++{
++//    cfg->gc->other = get_camif(CODEC_MINOR);
++      cfg->gc->other = other;
++      camif_start_p_with_c(cfg);
++}
++
++static void camif_start_p_with_c(camif_cfg_t *cfg)
++{
++      camif_cfg_t *other = (camif_cfg_t *)cfg->gc->other;
++      /* Preview Stop */
++      cfg->exec = CAMIF_DMA_OFF;
++      camif_capture_stop(cfg);
++      /* Start P and C */
++      camif_reset(CAMIF_RESET, 0);
++      cfg->exec =CAMIF_BOTH_DMA_ON;
++      camif_capture_start(cfg);
++      cfg->fsm = CAMIF_1nd_INT; /* For Preview */
++      if(!other) panic("Unexpected Error \n");
++      other->fsm = CAMIF_1nd_INT; /* For Preview */
++}
++
++static void camif_auto_restart(camif_cfg_t *cfg)
++{     
++//    if (cfg->dma_type & CAMIF_CODEC) return;
++      if (cfg->auto_restart)
++              camif_start_p_with_c(cfg);
++}
++
++
++/* Supposed that PREVIEW already running 
++ * request PREVIEW to start with Codec 
++ */
++static int camif_check_global(camif_cfg_t *cfg)
++{
++      int ret = 0;
++       
++        if (down_interruptible(&cfg->gc->lock)) 
++                       return -ERESTARTSYS;
++        if ( cfg->gc->status & CWANT2START ) {
++              cfg->gc->status &= ~CWANT2START;
++              cfg->auto_restart = 1;
++              ret = 1;
++      }
++      else {
++              ret = 0; /* There is no codec */
++              cfg->auto_restart = 0; /* Duplicated ..Dummy */
++      }
++
++      up(&cfg->gc->lock);
++
++        return ret;
++}
++
++/*
++ *    1nd INT : Start Interrupt
++ *    Xnd INT : enable Last IRQ : pingpong get the valid data
++ *    Ynd INT : Stop Codec or Preview : pingpong get the valid data
++ *    Znd INT : Last IRQ : valid data 
++ */
++#define CHECK_FREQ 5
++int camif_enter_p_4fsm(camif_cfg_t *cfg)
++{
++      int ret = 0;
++
++      cfg->perf.frames++;
++      if (cfg->fsm == CAMIF_NORMAL_INT)
++      if (cfg->perf.frames % CHECK_FREQ == 0) 
++              ret = camif_check_global(cfg);
++      if (ret > 0) cfg->fsm = CAMIF_Xnd_INT; /* Codec wait for Preview */
++      
++      switch (cfg->fsm) {
++              case CAMIF_1nd_INT:           /* Start IRQ */
++                      cfg->fsm = CAMIF_NORMAL_INT;
++                      ret = INSTANT_SKIP;
++                      DPRINTK(KERN_INFO "1nd INT \n");        
++                      break;
++              case CAMIF_NORMAL_INT:          
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      cfg->fsm = CAMIF_NORMAL_INT;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "NORMAL INT \n");     
++                      break;
++              case CAMIF_Xnd_INT:             
++                      camif_last_irq_en(cfg);/* IRQ for Enabling LAST IRQ */
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      cfg->fsm = CAMIF_Ynd_INT;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "Xnd INT \n");        
++                      break;  
++              case CAMIF_Ynd_INT:        /* Capture Stop */
++                      cfg->exec = CAMIF_DMA_OFF;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      camif_capture_stop(cfg);
++                      cfg->fsm = CAMIF_Znd_INT;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "Ynd INT \n");        
++                      break;
++              case CAMIF_Znd_INT:             /*  LAST IRQ (Dummy IRQ */
++                      cfg->fsm = CAMIF_DUMMY_INT;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      ret = INSTANT_GO;
++                      camif_auto_restart(cfg);  /* Automatically Restart Camera */
++                      DPRINTK(KERN_INFO "Znd INT \n");
++                      break;  
++              case CAMIF_DUMMY_INT:
++                      cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
++                      ret = INSTANT_SKIP;
++//                    DPRINTK(KERN_INFO "Dummy INT \n"); 
++                      break;
++              default:
++                      printk(KERN_INFO "Unexpect INT %d \n",cfg->fsm); 
++                      ret = INSTANT_SKIP;
++                      break;
++      }
++      return ret;
++}
++
++
++/* 
++ * NO autorestart included in this function 
++ */
++int camif_enter_c_4fsm(camif_cfg_t *cfg)
++{
++      int ret;
++      
++      cfg->perf.frames++;
++#if 0
++      if (   (cfg->fsm==CAMIF_NORMAL_INT)
++          && (cfg->perf.frames>cfg->restart_limit-1)
++         ) 
++              cfg->fsm = CAMIF_Xnd_INT;
++#endif
++      switch (cfg->fsm) {
++              case CAMIF_1nd_INT:           /* Start IRQ */
++                      cfg->fsm = CAMIF_NORMAL_INT;
++//                    cfg->status = CAMIF_STARTED; /* need this to meet auto-restart */
++                      ret = INSTANT_SKIP;
++                      DPRINTK(KERN_INFO "1nd INT \n");
++                      break;
++              case CAMIF_NORMAL_INT:          
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      cfg->fsm = CAMIF_NORMAL_INT;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "NORMALd INT \n");
++                      break;
++              case CAMIF_Xnd_INT:             
++                      camif_last_irq_en(cfg);/* IRQ for Enabling LAST IRQ */
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      cfg->fsm = CAMIF_Ynd_INT;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "Xnd INT \n");
++                      break;  
++              case CAMIF_Ynd_INT:        /* Capture Stop */
++                      cfg->exec = CAMIF_DMA_OFF;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      camif_capture_stop(cfg);
++                      cfg->fsm = CAMIF_Znd_INT;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "Ynd INT \n");
++                      break;
++              case CAMIF_Znd_INT:             /*  LAST IRQ (Dummy IRQ */
++                      cfg->fsm = CAMIF_DUMMY_INT;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      ret = INSTANT_GO;
++                      DPRINTK(KERN_INFO "Znd INT \n");
++                      break;  
++              case CAMIF_DUMMY_INT:
++                      cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
++                      ret = INSTANT_SKIP;
++                      break;
++              default:
++                      printk(KERN_INFO "Unexpect INT %d \n",cfg->fsm); 
++                      ret = INSTANT_SKIP;
++                      break;
++      }
++      return ret;
++}
++
++/* 4 Interrups State Machine is for two pingpong  
++ *    1nd INT : Start Interrupt
++ *    Xnd INT : enable Last IRQ : pingpong get the valid data
++ *    Ynd INT : Stop Codec or Preview : pingpong get the valid data
++ *    Znd INT : Last IRQ : valid data 
++ *    
++ * Note:
++ *    Before calling this func, you must call camif_reset
++ */
++
++int camif_enter_2fsm(camif_cfg_t *cfg) /* Codec FSM */
++{
++      int ret;
++
++      cfg->perf.frames++;
++      switch (cfg->fsm) {
++              case CAMIF_1nd_INT:           /* Start IRQ */
++                      cfg->fsm = CAMIF_Xnd_INT;
++                      ret = INSTANT_SKIP;
++//                    printk(KERN_INFO "1nd INT \n"); 
++                      break;
++              case CAMIF_Xnd_INT:             
++                      camif_last_irq_en(cfg);/* IRQ for Enabling LAST IRQ */
++                      cfg->now_frame_num = 0;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      cfg->fsm = CAMIF_Ynd_INT;
++                      ret = INSTANT_GO;
++//                    printk(KERN_INFO "2nd INT \n"); 
++                      break;  
++              case CAMIF_Ynd_INT:        /* Capture Stop */
++                      cfg->exec = CAMIF_DMA_OFF;
++                      cfg->now_frame_num = 1;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      camif_capture_stop(cfg);
++                      cfg->fsm = CAMIF_Znd_INT;
++                      ret = INSTANT_GO;
++//                    printk(KERN_INFO "Ynd INT \n"); 
++                      break;
++              case CAMIF_Znd_INT:             /*  LAST IRQ (Dummy IRQ */
++                      cfg->now_frame_num = 0;
++//                    cfg->fsm = CAMIF_DUMMY_INT;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      ret = INSTANT_GO;
++//                    printk(KERN_INFO "Znd INT \n");
++                      break;  
++              case CAMIF_DUMMY_INT:
++                      cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
++                      ret = INSTANT_SKIP;
++                      printk(KERN_INFO "Dummy INT \n"); 
++                      break;
++              default:  /* CAMIF_PENDING_INT */
++                      printk(KERN_INFO "Unexpect INT \n"); 
++                      ret = INSTANT_SKIP;
++                      break;
++      }
++      return ret;
++}
++
++
++/* 2 Interrups State Machine is for one pingpong  
++ *    1nd INT : Stop Codec or Preview : pingpong get the valid data
++ *    2nd INT : Last IRQ : dummy data 
++ */
++int camif_enter_1fsm(camif_cfg_t *cfg) /* Codec FSM */
++{
++      int ret;
++
++      cfg->perf.frames++;
++      switch (cfg->fsm) {
++              case CAMIF_Ynd_INT:             /* IRQ for Enabling LAST IRQ */
++                      cfg->exec = CAMIF_DMA_OFF;
++                      camif_capture_stop(cfg);
++                      cfg->fsm = CAMIF_Znd_INT;
++                      ret = INSTANT_SKIP;
++      //              printk(KERN_INFO "Ynd INT \n"); 
++                      break;  
++              case CAMIF_Znd_INT:             /*  LAST IRQ (Dummy IRQ */
++                      cfg->fsm = CAMIF_DUMMY_INT;
++                      cfg->status = CAMIF_INT_HAPPEN;
++                      ret = INSTANT_GO;
++      //              printk(KERN_INFO "Znd INT \n"); 
++                      break;
++              case CAMIF_DUMMY_INT:
++                      cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
++                      ret = INSTANT_SKIP;
++                      printk(KERN_INFO "Dummy INT \n"); 
++                      break;
++              default:
++                      printk(KERN_INFO "Unexpect INT \n"); 
++                      ret = INSTANT_SKIP;
++                      break;
++      }
++      return ret;
++}
++
++
++/*
++ *  GLOBAL STATUS CONTROL FUNCTION
++ *
++ */
++
++
++/* Supposed that PREVIEW already running 
++ * request PREVIEW to start with Codec 
++ */
++int camif_callback_start(camif_cfg_t *cfg)
++{
++        int  doit = 1;
++        while (doit) {
++                if (down_interruptible(&cfg->gc->lock)) {
++                        return -ERESTARTSYS;
++                }
++                cfg->gc->status = CWANT2START;
++                cfg->gc->other = cfg;
++                up(&cfg->gc->lock);
++                doit = 0;
++        }
++        return 0;
++}
++
++/*
++ * Return status of Preview Machine
++  ret value :
++      0: Preview is not working
++      X: Codec must follow PREVIEW start
++*/
++int camif_check_preview(camif_cfg_t *cfg)
++{
++        int ret = 0;
++
++        if (down_interruptible(&cfg->gc->lock)) {
++                        ret = -ERESTARTSYS;
++                        return ret;
++        }
++        if (cfg->gc->user == 1) ret = 0;
++     //   else if (cfg->gc->status & PNOTWORKING) ret = 0;
++        else ret = 1;
++        up(&cfg->gc->lock);
++        return ret;
++}
++
++
++
++
++/*
++ * Local variables:
++ * c-basic-offset: 8
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/camif.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/camif.h        2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,304 @@
++/*
++    FIMC2.0  Camera Header File
++
++    Copyright (C) 2003 Samsung Electronics (SW.LEE: hitchcar@samsung.com)
++
++      Author : SW.LEE <hitchcar@samsung.com>
++
++    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 __FIMC20_CAMIF_H_
++#define __FIMC20_CAMIF_H_
++
++#ifdef __KERNEL__
++
++#include "bits.h"
++#include "videodev.h"
++#include <asm/types.h>
++#include <linux/i2c.h>
++
++#endif  /* __KERNEL__ */
++
++#ifndef O_NONCAP
++#define O_NONCAP O_TRUNC
++#endif
++
++/* Codec or Preview Status */
++#define CAMIF_STARTED         BIT1
++#define CAMIF_STOPPED         BIT2
++#define CAMIF_INT_HAPPEN      BIT3
++
++/* Codec or Preview  : Interrupt FSM */
++#define CAMIF_1nd_INT         BIT7
++#define CAMIF_Xnd_INT         BIT8
++#define CAMIF_Ynd_INT         BIT9 
++#define CAMIF_Znd_INT         BIT10
++#define CAMIF_NORMAL_INT      BIT11
++#define CAMIF_DUMMY_INT       BIT12
++#define CAMIF_PENDING_INT     0
++
++
++/* CAMIF RESET Definition */
++#define CAMIF_RESET           BIT0
++#define CAMIF_EX_RESET_AL     BIT1    /* Active Low */
++#define CAMIF_EX_RESET_AH     BIT2    /* Active High */
++
++
++enum camif_itu_fmt {
++      CAMIF_ITU601 = BIT31,
++      CAMIF_ITU656 = 0
++};
++
++/* It is possbie to use two device simultaneously */
++enum camif_dma_type {
++       CAMIF_PREVIEW = BIT0,
++       CAMIF_CODEC   = BIT1,
++};
++
++enum camif_order422 {
++       CAMIF_YCBYCR = 0,
++       CAMIF_YCRYCB = BIT14,
++       CAMIF_CBYCRY = BIT15,
++       CAMIF_CRYCBY = BIT14 | BIT15
++};
++
++enum flip_mode {
++        CAMIF_FLIP   = 0,
++        CAMIF_FLIP_X = BIT14,
++        CAMIF_FLIP_Y = BIT15,
++        CAMIF_FLIP_MIRROR = BIT14 |BIT15,
++};
++
++enum camif_codec_fmt {
++      /* Codec part */
++        CAMIF_IN_YCBCR420  = BIT0, /* Currently IN_YCBCR format fixed */
++        CAMIF_IN_YCBCR422  = BIT1,
++        CAMIF_OUT_YCBCR420 = BIT4,
++        CAMIF_OUT_YCBCR422 = BIT5,
++      /* Preview Part */
++      CAMIF_RGB16        = BIT2,
++      CAMIF_RGB24        = BIT3,
++};
++
++enum camif_capturing {
++        CAMIF_BOTH_DMA_ON  = BIT4,
++      CAMIF_DMA_ON       = BIT3,
++      CAMIF_BOTH_DMA_OFF = BIT1,
++      CAMIF_DMA_OFF      = BIT0,
++      /*------------------------*/
++      CAMIF_DMA_OFF_L_IRQ= BIT5,
++};
++
++typedef struct camif_performance
++{
++      int     frames;
++      int     framesdropped;
++      __u64   bytesin;
++      __u64   bytesout;
++      __u32   reserved[4];
++} camif_perf_t;
++
++
++typedef struct {
++        dma_addr_t  phys_y;
++        dma_addr_t  phys_cb;
++        dma_addr_t  phys_cr;
++        u8          *virt_y;  
++        u8          *virt_cb;
++        u8          *virt_cr;
++        dma_addr_t  phys_rgb;
++        u8          *virt_rgb;
++}img_buf_t;
++
++
++/* this structure convers the CIWDOFFST, prescaler, mainscaler */
++typedef struct {
++      u32 modified_src_x;     /* After windows applyed to source_x */
++      u32 modified_src_y;
++      u32 hfactor;
++      u32 vfactor;
++      u32 shfactor;           /* SHfactor = 10 - ( hfactor + vfactor ) */
++      u32 prehratio;
++      u32 prevratio;
++      u32 predst_x;
++      u32 predst_y;
++      u32 scaleup_h;          
++      u32 scaleup_v;
++      u32 mainhratio;
++      u32 mainvratio;
++      u32 scalerbypass;       /* only codec */
++} scaler_t;
++
++
++enum v4l2_status {
++        CAMIF_V4L2_INIT    = BIT0,
++        CAMIF_v4L2_DIRTY   = BIT1,
++};
++
++
++/* Global Status Definition */
++#define PWANT2START   BIT0
++#define CWANT2START   BIT1
++#define BOTH_STARTED  (PWANT2START|CWANT2START)
++#define PNOTWORKING   BIT4
++#define C_WORKING     BIT5
++
++typedef struct {
++      struct semaphore         lock;
++        enum camif_itu_fmt       itu_fmt;
++        enum camif_order422      order422;
++      u32                      win_hor_ofst;
++      u32                      win_ver_ofst;
++        u32                      camclk;  /* External Image Sensor Camera Clock */
++        u32                      source_x;
++        u32                      source_y;
++      u32                      polarity_pclk;
++      u32                      polarity_vsync;
++      u32                      polarity_href;
++      struct i2c_client        *sensor;
++      u32                      user; /* MAX 2 (codec, preview) */
++      u32                      old_priority; /* BUS PRIORITY register */
++      u32                      status;
++      u32                      init_sensor;/* initializing sensor */
++      void                     *other;    /* Codec camif_cfg_t */
++      u32                      reset_type;    /* External Sensor Reset  Type */
++      u32                      reset_udelay;  
++} camif_gc_t;                 /* gobal control register */
++
++
++/* when  App want to change v4l2 parameter,
++ * we instantly store it into v4l2_t v2 
++ * and then reflect it to hardware
++ */   
++typedef struct v4l2 {
++      struct v4l2_fmtdesc     *fmtdesc;
++      struct v4l2_pix_format   fmt; /* current pixel format */
++      struct v4l2_input        input;
++        struct video_picture     picture;
++      enum v4l2_status         status;
++      int     used_fmt ;      /* used format index  */
++} v4l2_t;
++
++
++typedef struct camif_c_t {
++        struct video_device      *v;
++      /* V4L2 param only for v4l2 driver */
++      v4l2_t                    v2;
++      camif_gc_t               *gc; /* Common between Codec and Preview */
++      /* logical parameter */
++      wait_queue_head_t        waitq;
++      u32                      status; /* Start/Stop */
++      u32                      fsm; /* Start/Stop */
++      u32                      open_count; /* duplicated */
++      int                      irq;
++      char                     shortname[16];
++        u32                      target_x;
++        u32                      target_y;
++      scaler_t                 sc;
++      enum flip_mode           flip;
++        enum camif_dma_type      dma_type;
++       /* 4 pingpong Frame memory */
++        u8                       *pp_virt_buf;
++        dma_addr_t               pp_phys_buf;
++        u32                      pp_totalsize;
++      u32                      pp_num; /* used pingpong memory number */
++        img_buf_t                img_buf[4];
++        enum camif_codec_fmt     fmt;
++        enum camif_capturing     exec;
++      camif_perf_t             perf;
++      u32                      now_frame_num;
++      u32                      auto_restart; /* Only For Preview */
++} camif_cfg_t;
++
++#ifdef SW_DEBUG
++#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
++#else
++#define DPRINTK(fmt, args...)
++#endif
++
++
++#ifdef SW_DEBUG
++#define assert(expr) \
++        if(!(expr)) {                                   \
++        printk( "Assertion failed! %s,%s,%s,line=%d\n", \
++        #expr,__FILE__,__FUNCTION__,__LINE__);          \
++        }
++#else
++#define assert(expr)
++#endif
++
++
++
++extern int camif_capture_start(camif_cfg_t *);
++extern int camif_capture_stop(camif_cfg_t *);
++extern int camif_g_frame_num(camif_cfg_t *);
++extern u8 * camif_g_frame(camif_cfg_t *);
++extern int  camif_win_offset(camif_gc_t *);
++extern void camif_hw_open(camif_gc_t *);
++extern void camif_hw_close(camif_cfg_t *);
++extern int camif_dynamic_open(camif_cfg_t *);
++extern int camif_dynamic_close(camif_cfg_t *);
++extern void camif_reset(int,int);
++extern void camif_setup_sensor(void);
++extern int camif_g_fifo_status(camif_cfg_t *);
++extern void camif_last_irq_en(camif_cfg_t *);
++extern void camif_change_flip(camif_cfg_t *);
++
++
++/* Todo
++ *  API Interface function to both Character and V4L2 Drivers
++ */
++extern int camif_do_write(struct file *,const char *, size_t, loff_t *);
++extern int camif_do_ioctl(struct inode *, struct file *,unsigned int, void *);
++
++
++/* 
++ * API for Decoder (S5x532, OV7620..) 
++ */
++void camif_register_decoder(struct i2c_client *);
++void camif_unregister_decoder(struct i2c_client*);
++
++
++
++/* API for FSM */
++#define INSTANT_SKIP 0 
++#define INSTANT_GO   1 
++
++extern ssize_t camif_p_1fsm_start(camif_cfg_t *);
++extern ssize_t camif_p_2fsm_start(camif_cfg_t *);
++extern ssize_t camif_4fsm_start(camif_cfg_t *);
++extern ssize_t camif_p_stop(camif_cfg_t *);
++extern int camif_enter_p_4fsm(camif_cfg_t *);
++extern int camif_enter_c_4fsm(camif_cfg_t *);
++extern int camif_enter_2fsm(camif_cfg_t *);
++extern int camif_enter_1fsm(camif_cfg_t *);
++extern int camif_check_preview(camif_cfg_t *);
++extern int camif_callback_start(camif_cfg_t *);
++extern int camif_clock_init(camif_gc_t *);
++
++/* 
++ *  V4L2 Part
++ */
++#define VID_HARDWARE_SAMSUNG_FIMC20   236
++
++
++
++
++
++#endif
++
++
++/* 
++ * Local variables:
++ * tab-width: 8
++ *  c-indent-level: 8
++ *  c-basic-offset: 8
++ *  c-set-style: "K&R"
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/cam_reg.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/cam_reg.h      2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,234 @@
++ /*----------------------------------------------------------
++  *   (C) 2004 Samsung Electronics
++  *   SW.LEE < hitchcar@samsung.com>
++  * 
++  ----------------------------------------------------------- */
++
++#ifndef __FIMC20_CAMERA_H__
++#define __FIMC20_CAMERA_H__
++
++extern u32 * camregs;
++
++#ifdef CONFIG_ARCH_S3C24A0
++#define CAM_BASE_ADD             0x48000000
++#else /* S3C2440A */
++#define CAM_BASE_ADD             0x4F000000
++#endif
++
++#if ! defined(FExtr)
++#define UData(Data)     ((unsigned long) (Data))
++#define FExtr(Data, Field) \
++                        ((UData (Data) >> FShft (Field)) & FAlnMsk (Field))
++#define FInsrt(Value, Field) \
++                        (UData (Value) << FShft (Field))
++#define FSize(Field)    ((Field) >> 16)
++#define FShft(Field)    ((Field) & 0x0000FFFF)
++#define FMsk(Field)     (((UData (1) << FSize (Field)) - 1) << FShft (Field))
++#define FAlnMsk(Field)  ((UData (1) << FSize (Field)) - 1)
++#define F1stBit(Field)  (UData (1) << FShft (Field))
++#define Fld(Size, Shft) (((Size) << 16) + (Shft))
++#endif
++
++/*
++ * CAMERA IP
++ * P-port is used as RGB Capturing device which including scale and crop
++ *  those who want to see(preview ) the image on display needs RGB image.
++ *
++ * C-port is used as YCbCr(4:2:0, 4:2:2) Capturing device which including the scale and crop
++ *   the prefix of C-port have the meaning of "Codec" ex. mpeg4, h263.. which requries the
++     YCBCB format not RGB 
++ */ 
++
++#define S3C2440_CAM_REG_CISRCFMT            (0x00) // RW Input Source Format
++#define S3C2440_CAM_REG_CIWDOFST            (0x04) // Window offset register
++#define S3C2440_CAM_REG_CIGCTRL             (0x08) // Global control register
++#define S3C2440_CAM_REG_CICOYSA0            (0x18) // Y 1 st frame start ads
++#define S3C2440_CAM_REG_CICOYSA1            (0x1C) // Y 2 nd frame start ads
++#define S3C2440_CAM_REG_CICOYSA2            (0x20) // Y 3 rd frame start ads
++#define S3C2440_CAM_REG_CICOYSA3            (0x24) // Y 4 th frame start ads
++#define S3C2440_CAM_REG_CICOCBSA0           (0x28) // Cb 1 st frame start ads
++#define S3C2440_CAM_REG_CICOCBSA1           (0x2C) // Cb 2 nd frame start ads
++#define S3C2440_CAM_REG_CICOCBSA2           (0x30) // Cb 3 rd frame start ads
++#define S3C2440_CAM_REG_CICOCBSA3           (0x34) // Cb 4 th frame start ads
++#define S3C2440_CAM_REG_CICOCRSA0           (0x38) // Cr 1 st frame start ads
++#define S3C2440_CAM_REG_CICOCRSA1           (0x3C) // Cr 2 nd frame start ads
++#define S3C2440_CAM_REG_CICOCRSA2           (0x40) // Cr 3 rd frame start ads
++#define S3C2440_CAM_REG_CICOCRSA3           (0x44) // Cr 4 th frame start ads
++#define S3C2440_CAM_REG_CICOTRGFMT          (0x48) // Target img format of codec
++#define S3C2440_CAM_REG_CICOCTRL            (0x4C) // Codec DMA control related
++#define S3C2440_CAM_REG_CICOSCPRERATIO      (0x50) // Codec pre-scaler ratio
++#define S3C2440_CAM_REG_CICOSCPREDST        (0x54) // Codec pre-scaler dest
++#define S3C2440_CAM_REG_CICOSCCTRL          (0x58) // Codec main-scaler control
++#define S3C2440_CAM_REG_CICOTAREA           (0x5C) // Codec pre-scaler dest
++#define S3C2440_CAM_REG_CICOSTATUS          (0x64) // Codec path status
++#define S3C2440_CAM_REG_CIPRCLRSA0          (0x6C) // RGB 1 st frame start ads
++#define S3C2440_CAM_REG_CIPRCLRSA1          (0x70) // RGB 2 nd frame start ads
++#define S3C2440_CAM_REG_CIPRCLRSA2          (0x74) // RGB 3 rd frame start ads
++#define S3C2440_CAM_REG_CIPRCLRSA3          (0x78) // RGB 4 th frame start ads
++#define S3C2440_CAM_REG_CIPRTRGFMT          (0x7C) // Target img fmt of preview
++#define S3C2440_CAM_REG_CIPRCTRL            (0x80) // Preview DMA ctl related
++#define S3C2440_CAM_REG_CIPRSCPRERATIO      (0x84) // Preview pre-scaler ratio
++#define S3C2440_CAM_REG_CIPRSCPREDST        (0x88) // Preview pre-scaler dest
++#define S3C2440_CAM_REG_CIPRSCCTRL          (0x8C) // Preview main-scaler ctl
++#define S3C2440_CAM_REG_CIPRTAREA           (0x90) // Preview pre-scaler dest
++#define S3C2440_CAM_REG_CIPRSTATUS          (0x98) // Preview path status
++#define S3C2440_CAM_REG_CIIMGCPT            (0xA0) // Image capture enable cmd
++
++#define S3C2440_CAM_REG_CICOYSA(__x)        (0x18 + (__x)*4 )
++#define S3C2440_CAM_REG_CICOCBSA(__x)       (0x28 + (__x)*4 )
++#define S3C2440_CAM_REG_CICOCRSA(__x)       (0x38 + (__x)*4 )
++#define S3C2440_CAM_REG_CIPRCLRSA(__x)      (0x6C + (__x)*4 )
++
++/* CISRCFMT BitField */
++#define SRCFMT_ITU601       BIT31
++#define SRCFMT_ITU656       0
++#define SRCFMT_UVOFFSET_128 BIT30
++#define fCAM_SIZE_H         Fld(13, 16)
++#define fCAM_SIZE_V         Fld(13, 0)
++#define SOURCE_HSIZE(x)     FInsrt((x), fCAM_SIZE_H)
++#define SOURCE_VSIZE(x)     FInsrt((x), fCAM_SIZE_V)
++
++
++/* Window Option Register */
++#define WINOFEN             BIT31
++#define CO_FIFO_Y           BIT30
++#define CO_FIFO_CB          BIT15
++#define CO_FIFO_CR          BIT14
++#define PR_FIFO_CB          BIT13
++#define PR_FIFO_CR          BIT12
++#define fWINHOR             Fld(11, 16)
++#define fWINVER             Fld(11, 0)
++#define WINHOROFST(x)       FInsrt((x), fWINHOR)
++#define WINVEROFST(x)       FInsrt((x), fWINVER)
++
++/* Global Control Register */
++#define GC_SWRST            BIT31
++#define GC_CAMRST           BIT30
++#define GC_INVPOLPCLK       BIT26
++#define GC_INVPOLVSYNC      BIT25
++#define GC_INVPOLHREF       BIT24
++
++/*--------------------------------------------------
++                REGISTER BIT FIELD DEFINITION TO 
++                          YCBCR and RGB 
++----------------------------------------------------*/
++/* Codec Target Format Register */
++#define IN_YCBCR420         0
++#define IN_YCBCR422         BIT31
++#define OUT_YCBCR420        0
++#define OUT_YCBCR422        BIT30
++
++#if 0
++#define FLIP_NORMAL       0
++#define FLIP_X              (BIT14)
++#define FLIP_Y              (BIT15)
++#define FLIP_MIRROR         (BIT14|BIT15)
++#endif
++
++/**  BEGIN    ************************************/
++/* Cotents: Common in both P and C port          */
++#define fTARGET_HSIZE       Fld(13,16)
++#define TARGET_HSIZE(x)     FInsrt((x), fTARGET_HSIZE)
++#define fTARGET_VSIZE       Fld(13,0)
++#define TARGET_VSIZE(x)     FInsrt((x), fTARGET_VSIZE)
++#define FLIP_X_MIRROR       BIT14           
++#define FLIP_Y_MIRROR       BIT15           
++#define FLIP_180_MIRROR     (BIT14 | BIT15) 
++/**  END     *************************************/
++
++/* Codec DMA Control Register */
++#define fYBURST_M           Fld(5,19)
++#define fYBURST_R           Fld(5,14)
++#define fCBURST_M           Fld(5,9)
++#define fCBURST_R           Fld(5,4)
++#define YBURST_M(x)         FInsrt((x), fYBURST_M)
++#define CBURST_M(x)         FInsrt((x), fCBURST_M)
++#define YBURST_R(x)         FInsrt((x), fYBURST_R)
++#define CBURST_R(x)         FInsrt((x), fCBURST_R)
++#define LAST_IRQ_EN         BIT2              /* Common in both P and C port */
++/*
++ *  Check the done signal of capturing image for JPEG 
++ *  !!! AutoClear Bit 
++ */
++
++
++/* (Codec, Preview ) Pre-Scaler Control Register 1 */
++#define fSHIFT              Fld(4,28)
++#define PRE_SHIFT(x)        FInsrt((x), fSHIFT)
++#define fRATIO_H            Fld(7,16)
++#define PRE_HRATIO(x)       FInsrt((x), fRATIO_H)
++#define fRATIO_V            Fld(7,0)
++#define PRE_VRATIO(x)       FInsrt((x), fRATIO_V)
++
++/* (Codec, Preview ) Pre-Scaler Control Register 2*/
++#define fDST_WIDTH          Fld(12,16)
++#define fDST_HEIGHT         Fld(12,0)
++#define PRE_DST_WIDTH(x)    FInsrt((x), fDST_WIDTH)
++#define PRE_DST_HEIGHT(x)   FInsrt((x), fDST_HEIGHT)
++
++
++/* (Codec, Preview) Main-scaler control Register */
++#define S_METHOD            BIT31  /* Sampling method only for P-port */
++#define SCALERSTART         BIT15 
++/* Codec scaler bypass for upper 2048x2048 
++   where ImgCptEn_CoSC and ImgCptEn_PrSC should be 0 
++*/
++
++#define SCALERBYPASS        BIT31  
++#define RGB_FMT24           BIT30
++#define RGB_FMT16           0
++
++/*
++#define SCALE_UP_H          BIT29
++#define SCALE_UP_V          BIT28
++*/
++
++#define fMAIN_HRATIO        Fld(9, 16)
++#define MAIN_HRATIO(x)      FInsrt((x), fMAIN_HRATIO)
++
++#define SCALER_START        BIT15
++
++#define fMAIN_VRATIO        Fld(9, 0)
++#define MAIN_VRATIO(x)      FInsrt((x), fMAIN_VRATIO)
++
++/* (Codec, Preview ) DMA Target AREA Register */
++#define fCICOTAREA          Fld(26,0)
++#define TARGET_DMA_AREA(x)  FInsrt((x), fCICOTAREA)
++
++/* Preview DMA Control Register */
++#define fRGBURST_M          Fld(5,19)
++#define fRGBURST_R          Fld(5,14)
++#define RGBURST_M(x)        FInsrt((x), fRGBURST_M)
++#define RGBURST_R(x)        FInsrt((x), fRGBURST_R)
++
++
++/* (Codec, Preview) Status Register */
++#define CO_OVERFLOW_Y       BIT31
++#define CO_OVERFLOW_CB      BIT30
++#define CO_OVERFLOW_CR      BIT29
++#define PR_OVERFLOW_CB      BIT31
++#define PR_OVERFLOW_CR      BIT30
++
++#define VSYNC               BIT28
++
++#define fFRAME_CNT          Fld(2,26)
++#define FRAME_CNT(x)        FExtr((x),fFRAME_CNT) 
++           
++#define WIN_OFF_EN          BIT25
++#define fFLIP_MODE          Fld(2,23)
++#define FLIP_MODE(x)        EExtr((x), fFLIP_MODE)
++#define CAP_STATUS_CAMIF    BIT22
++#define CAP_STATUS_CODEC    BIT21
++#define CAP_STATUS_PREVIEW  BIT21
++#define VSYNC_A             BIT20
++#define VSYNC_B             BIT19
++
++/* Image Capture Enable Regiser */
++#define       CAMIF_CAP_ON         BIT31
++#define CAMIF_CAP_CODEC_ON   BIT30
++#define CAMIF_CAP_PREVIEW_ON BIT29
++
++
++
++
++#endif /* S3C2440_CAMER_H */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/imgsensor.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/imgsensor.c    2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,250 @@
++/*
++ *  Copyright (C) 2004 Samsung Electronics 
++ *             SW.LEE <hitchcar@samsung.com>
++ *
++ *  Copyright (C) 2000 Russell King : pcf8583.c
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ *  Driver for FIMC20 Camera Decoder 
++ */
++
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/i2c.h>
++#include <linux/slab.h>
++#include <linux/string.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++
++
++#ifdef CONFIG_ARCH_S3C24A0A
++#else
++//#include <asm/arch/S3C2440.h>
++#endif
++
++#define SW_DEBUG
++#define CONFIG_VIDEO_V4L1_COMPAT
++#include <linux/videodev.h>
++#include "camif.h"
++#include "sensor.h"
++
++#ifndef SAMSUNG_SXGA_CAM
++#include "s5x532_rev36.h"
++#else
++#include "sxga.h"
++#endif
++
++static struct i2c_driver s5x532_driver;
++static camif_gc_t data = {
++      itu_fmt:      CAMIF_ITU601,
++      order422:     CAMIF_YCBYCR,
++      camclk:       24000000,
++#ifndef SAMSUNG_SXGA_CAM
++      source_x:     640,
++      source_y:     480,
++      win_hor_ofst: 112,
++      win_ver_ofst: 20,
++#else
++      source_x:     1280,
++      source_y:     1024,
++      win_hor_ofst: 0,
++      win_ver_ofst: 0,
++#endif
++      polarity_pclk:1,
++      polarity_href:0,
++#ifdef CONFIG_ARCH_S3C24A0A
++      reset_type:CAMIF_EX_RESET_AL, /* Active Low */
++#else
++      reset_type:CAMIF_EX_RESET_AH, /* Ref board has inverted signal */
++#endif
++      reset_udelay:2000,
++};
++
++#define CAM_ID 0x5a
++
++static unsigned short ignore = I2C_CLIENT_END;
++static unsigned short normal_addr[] = { (CAM_ID>>1), I2C_CLIENT_END };
++static struct i2c_client_address_data addr_data = {
++      normal_i2c:             normal_addr,
++      probe:                  &ignore,
++      ignore:                 &ignore,
++};
++
++s5x532_t s5x532_regs_mirror[S5X532_REGS];
++
++unsigned char 
++s5x532_read(struct i2c_client *client, unsigned char subaddr)
++{
++      int ret;
++      unsigned char buf[1];
++      struct i2c_msg msg ={ client->addr, 0, 1, buf};
++      buf[0] = subaddr;
++
++      ret = i2c_transfer(client->adapter,&msg, 1) == 1 ? 0 : -EIO;
++      if (ret == -EIO) {
++        printk(" I2C write Error \n");
++        return -EIO;
++      }
++      
++      msg.flags = I2C_M_RD;
++      ret = i2c_transfer(client->adapter, &msg, 1) == 1 ? 0 : -EIO;
++
++      return buf[0];
++}
++
++
++static int
++s5x532_write(struct i2c_client *client,
++                unsigned char subaddr, unsigned char val)
++{
++       unsigned char buf[2];
++       struct i2c_msg msg = { client->addr, 0, 2, buf};
++
++       buf[0]= subaddr;
++       buf[1]= val;
++
++       return i2c_transfer(client->adapter, &msg, 1) == 1 ? 0 : -EIO;
++}
++
++void inline s5x532_init(struct i2c_client *sam_client)
++{
++      int i;
++
++      printk(KERN_ERR "s5x532_init  \n");
++      for (i = 0; i < S5X532_INIT_REGS; i++) {
++              s5x532_write(sam_client,
++                            s5x532_reg[i].subaddr, s5x532_reg[i].value );
++      }
++
++#ifdef YOU_WANT_TO_CHECK_IMG_SENSOR 
++      for (i = 0; i < S5X532_INIT_REGS;i++) {
++              if ( s5x532_reg[i].subaddr == PAGE_ADDRESS ) { 
++                      s5x532_write(sam_client,
++                            s5x532_reg[i].subaddr, s5x532_reg[i].value);
++
++                      printk(KERN_ERR "Page: Subaddr %02x = 0x%02x\n", 
++                             s5x532_reg[i].subaddr, s5x532_regs_mirror[i].value);
++      
++
++              } else 
++              {      
++                      s5x532_regs_mirror[i].subaddr = s5x532_reg[i].subaddr; 
++                      s5x532_regs_mirror[i].value = 
++                      s5x532_read(sam_client,s5x532_reg[i].subaddr);
++                      printk(KERN_ERR "Subaddr %02x = 0x%02x\n", 
++                             s5x532_reg[i].subaddr, s5x532_regs_mirror[i].value);
++              }
++      }
++#endif
++       
++}
++
++static int
++s5x532_attach(struct i2c_adapter *adap, int addr, int kind)
++{
++      struct i2c_client *c;
++
++      c = kmalloc(sizeof(*c), GFP_KERNEL);
++      if (!c) return -ENOMEM;
++
++      strcpy(c->name, "S5X532");
++//    c->id           = s5x532_driver.id;
++      c->flags        = 0 /* I2C_CLIENT_ALLOW_USE */;
++      c->addr         = addr;
++      c->adapter      = adap;
++      c->driver       = &s5x532_driver;
++      data.sensor     = c;
++      i2c_set_clientdata(c, &data);
++
++      camif_register_decoder(c);
++      return i2c_attach_client(c);
++}
++
++static int s5x532_probe(struct i2c_adapter *adap)
++{ 
++      return i2c_probe(adap, &addr_data, s5x532_attach);
++}
++
++static int s5x532_detach(struct i2c_client *client)
++{
++      i2c_detach_client(client);
++      camif_unregister_decoder(client);
++      return 0;
++}
++
++static int
++s5x532_command(struct i2c_client *client, unsigned int cmd, void *arg)
++{
++        switch (cmd) {
++        case SENSOR_INIT:
++                 s5x532_init(client);
++               printk(KERN_INFO "CAMERA: S5X532 Sensor initialized\n");
++               break;
++      case USER_ADD:
++              /* MOD_INC_USE_COUNT; uh.. 2.6 deals with this, old-timer */
++              break;
++      case USER_EXIT:
++              /* MOD_DEC_USE_COUNT; */
++              break;
++/* Todo
++      case SENSOR_BRIGHTNESS:
++              change_sensor();
++              break;
++*/
++      default:        
++              panic("Unexpect Sensor Command \n");
++              break;
++        }
++      return 0;
++}
++
++static struct i2c_driver s5x532_driver = {
++      driver:         { name:         "S5X532" },
++      id:             0, /* optional in i2c-id.h I2C_ALGO_S3C, */
++      attach_adapter: s5x532_probe,
++      detach_client:  s5x532_detach,
++      command:        s5x532_command
++};
++
++static void iic_gpio_port(void) 
++{
++/*    FIXME: no gpio config for i2c !!!
++#ifdef CONFIG_ARCH_S3C24A0A
++#else
++      GPECON &=  ~(0xf <<28);
++      GPECON |=    0xa <<28;
++#endif
++*/
++}
++
++static __init int camif_sensor_init(void)
++{
++        iic_gpio_port();
++      return i2c_add_driver(&s5x532_driver);
++}
++
++
++static __init void camif_sensor_exit(void)
++{
++      i2c_del_driver(&s5x532_driver);
++}
++
++module_init(camif_sensor_init)
++module_exit(camif_sensor_exit)
++
++MODULE_AUTHOR("SW.LEE <hitchcar@sec.samsung.com>");
++MODULE_DESCRIPTION("I2C Client Driver For Fimc2.0 MISC Driver");
++MODULE_LICENSE("GPL");
++
++
++
++/*
++ * Local variables:
++ * c-basic-offset: 8
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/Kconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/Kconfig        2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,7 @@
++
++config S3C2440_CAMERA
++      bool "S3C24xx Camera interface"
++      depends on ARCH_S3C2410
++      help
++        Camera driver for S3C2440 camera unit
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/Makefile
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/Makefile       2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,8 @@
++obj-$(CONFIG_S3C2440_CAMERA) += \
++      videodev.o \
++      imgsensor.o \
++      video-driver.o \
++      camif.o \
++      camif_fsm.o \
++      qt-driver.o
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/miscdevice.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/miscdevice.h   2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,18 @@
++
++ /*----------------------------------------------------------
++  *   (C) 2004 Samsung Electronics
++  *   SW.LEE < hitchcar@samsung.com>
++  * 
++  ----------------------------------------------------------- */
++
++#ifndef _LINUX_S3C_MISCDEVICE_H
++#define _LINUX_S3C_MISCDEVICE_H
++
++#define CODEC_MINOR 212
++#define PREVIEW_MINOR 213
++
++
++
++
++
++#endif
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/qt-driver.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/qt-driver.c    2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,172 @@
++/*
++ * SW.LEE <hitchcar@samsung.com>
++ *   
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/version.h>
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/signal.h>
++#include <linux/ioport.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/interrupt.h>
++#include <linux/kmod.h>
++#include <linux/vmalloc.h>
++#include <linux/init.h>
++#include <asm/io.h>
++#include <asm/page.h>
++#include <asm/irq.h>
++#include <asm/semaphore.h>
++#include <linux/miscdevice.h>
++                                                                                                           
++//#define SW_DEBUG
++                                                                                                           
++#define CONFIG_VIDEO_V4L1_COMPAT
++#include <linux/videodev.h>
++#include "camif.h"
++#include "miscdevice.h"
++#include "cam_reg.h"
++#include "sensor.h"
++#include "userapp.h"
++
++extern camif_cfg_t * get_camif(int nr);
++                                                                                                           
++
++/************************* Sharp Zarus API **************************
++* refering to Camera Driver API for SL-5000D/SL-5600 revision 1.00 
++*                             April 11, 2002.
++  SW.LEE <hitchcar@sec.samsung.com>
++              I want to use Sharp Camera Application. 
++*
++*/
++
++#define READ_MODE_STATUS      0x1
++#define READ_MODE_IMAGE               0x0
++#define CAPTURE_SPEED
++#define       H_FLIP  
++#define V_FLIP
++typedef enum sharp_readmode 
++{
++        IMAGE = 0, STATUS = 1,
++        FASTER = 0, BETTER = 2,
++        XNOFLIP = 0, XFLIP = 4,
++        YNOFLIP = 0, YFLIP = 8,
++        AUTOMATICFLIP = -1
++} ReadMode_t;
++
++
++static struct sharp_param_t {
++      ReadMode_t readMode;
++      char CameraStatus[4];
++} sharp_param = { STATUS, {'s','m','c','A'}};
++
++
++camif_param_t qt_parm = { 640,480,240,320,16,0};
++      
++static void setReadMode(const char *b,size_t count)
++{
++      int i =   *(b+2) - 48 ;
++      if ( 4 == count ) {
++              i = (*(b+3) - 48)  + i * 10;
++      }
++
++      //      DPRINTK(" setReadMode %s conversion value %d \n",b , i); 
++      if ( i & STATUS ) { 
++      //      DPRINTK(" STATUS MODE \n");
++              sharp_param.readMode = i;
++      }
++      else  {
++      //      DPRINTK(" IMAGE MODE \n");
++              sharp_param.readMode = i;
++      }
++}
++
++
++
++
++extern ssize_t camif_p_read(struct file *, char *, size_t , loff_t *);
++
++ssize_t z_read(struct file *f, char *buf, size_t count, loff_t *pos)
++{
++      size_t end;
++
++      if (sharp_param.readMode & STATUS ) {
++              buf[0] = sharp_param.CameraStatus[0];
++              buf[1] = sharp_param.CameraStatus[1];
++              buf[2] = sharp_param.CameraStatus[2];
++              buf[3] = sharp_param.CameraStatus[3];
++              end = 4;
++              return end;
++      } 
++      else {  /* Image ReadMode */
++              /*
++              if (( sharp_param.readMode & (BETTER|X  FLIP|YFLIP)))
++                      DPRINTK("  Not Supporting BETTER|XFLIP|YFLIP\n");
++              */
++              return camif_p_read(f,buf,count,pos);
++      }
++}
++
++static void z_config(camif_cfg_t *cfg,int x, int y)
++{
++      cfg->target_x = x;
++      cfg->target_y = y;
++      cfg->fmt = CAMIF_RGB16;
++      if (camif_dynamic_open(cfg)) {
++              panic(" Eror Happens \n");
++      }
++}
++
++
++ssize_t z_write(struct file *f, const char *b, size_t c, loff_t *pos)
++{
++      int array[5];
++      int zoom = 1;
++      camif_cfg_t *cfg;
++
++      cfg = get_camif(MINOR(f->f_dentry->d_inode->i_rdev));
++//    DPRINTK(" param %s count %d \n",b, c );
++
++      switch(*b) {
++      case 'M':       
++              setReadMode(b, c);
++              break;
++      case 'B':       /* Clear the latch flag of shutter button */
++              DPRINTK("  clear latch flag of camera's shutter button\n");
++              sharp_param.CameraStatus[0]='s';
++              break;
++      case 'Y':       /* I don't know how to set Shutter pressed */   
++              DPRINTK("  set latch flag n");
++              sharp_param.CameraStatus[0]='S';
++              break;
++      case 'S':       /* Camera Image Resolution */
++      case 'R':       /* Donot support Rotation */
++      DPRINTK(" param %s count %d \n",b, c );
++              get_options((char *)(b+2), 5, array);
++              if ( array[3] == 512 ) zoom = 2;
++              z_config(cfg, array[1] * zoom , array[2] * zoom );
++              camif_4fsm_start(cfg);
++              break;
++      case 'C':
++      DPRINTK(" param %s count %d \n",b, c );
++              DPRINTK("  Start the camera to capture \n");
++              sharp_param.CameraStatus[2]='C';
++              camif_4fsm_start(cfg);
++              break;
++      default:
++              printk("Unexpected  param %s count %d \n",b, c );
++      }
++
++      return c;
++}
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/qt.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/qt.h   2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,18 @@
++/*
++ * SW.LEE <hitchcar@samsung.com>
++ *   
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++#ifndef __Z_API_H_
++#define __Z_API_H_
++
++extern ssize_t z_read(struct file *f, char *buf, size_t count, loff_t *pos);
++extern ssize_t z_write(struct file *f, const char *b, size_t c, loff_t *pos);
++
++
++
++#endif
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/s5x532.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/s5x532.h       2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,143 @@
++/*
++ * 2004 (C) Samsung Electronics 
++ *  SW.LEE <hitchcar@sec.samsung.com>
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++
++#ifndef _SMDK2440_S5X532_H_
++#define _SMDK2440_S5X532_H_
++
++
++#define CHIP_DELAY 0xFF
++
++typedef struct samsung_t{
++      unsigned char subaddr;
++      unsigned char value;
++      unsigned char page;     
++} s5x532_t;
++
++s5x532_t s5x532_reg[] = {
++      // page 5
++      {0xec,0x05},
++      {0x08,0x55,0x5},
++      {0x0a,0x75,0x5},
++      {0x0c,0x90,0x5},
++      {0x0e,0x18,0x5},
++      {0x12,0x09,0x5},
++      {0x14,0x9d,0x5},
++      {0x16,0x90,0x5},
++      {0x1a,0x18,0x5},
++      {0x1c,0x0c,0x5},
++      {0x1e,0x09,0x5},
++      {0x20,0x06,0x5},
++      {0x22,0x20,0x5},
++      {0x2a,0x00,0x5},
++      {0x2d,0x04,0x5},
++      {0x12,0x24,0x5},
++      // page 3
++      {0xec,0x03,0x3},
++      {0x0c,0x09,0x3},
++      {0x6c,0x09,0x3},
++      {0x2b,0x10,0x3}, // momo clock inversion
++      // page 2
++      {0xec,0x02,0x2},
++      {0x03,0x09,0x2},
++      {0x05,0x08,0x2},
++      {0x06,0x01,0x2},
++      {0x07,0xf8,0x2},
++      {0x15,0x25,0x2},
++      {0x30,0x29,0x2},
++      {0x36,0x12,0x2},
++      {0x38,0x04,0x2},
++      {0x1b,0x77,0x2}, // 24MHz : 0x77, 12MHz : 0x22
++      {0x1c,0x77,0x2}, // 24MHz : 0x77, 12MHz : 0x22
++      // page 1
++      {0xec,0x01,0x1},
++      {0x00,0x03,0x1}, // 
++      {0x0a,0x08,0x1}, // 0x0-QQVGA, 0x06-CIF, 0x02-QCIF, 0x08-VGA, 0x04-QVGA, 0x0a-SXGA
++      {0x0c,0x00,0x1}, // Pattern selectio. 0-CIS, 1-Color bar, 2-Ramp, 3-Blue screen
++      {0x10,0x27,0x1},
++      // 0x21-ITU-R656(CrYCbY), 0x25-ITU-R601(CrYCbY), 0x26-ITU-R601(YCbYCr)
++      {0x50,0x21,0x1},                // Hblank
++      {0x51,0x00,0x1},                // Hblank
++      {0x52,0xA1,0x1},                // Hblank
++      {0x53,0x02,0x1},                // Hblank
++      {0x54,0x01,0x1},                // Vblank
++      {0x55,0x00,0x1},                // Vblank
++      {0x56,0xE1,0x1},                // Vblank               
++      {0x57,0x01,0x1},                // Vblank
++      {0x58,0x21,0x1},                // Hsync
++      {0x59,0x00,0x1},                // Hsync
++      {0x5a,0xA1,0x1},                // Hsync
++      {0x5b,0x02,0x1},                // Hsync
++      {0x5c,0x03,0x1},                // Vref
++      {0x5d,0x00,0x1},                // Vref
++      {0x5e,0x05,0x1},                // Vref
++      {0x5f,0x00,0x1},                // Vref 
++      {0x70,0x0E,0x1},
++      {0x71,0xD6,0x1},
++      {0x72,0x30,0x1},
++      {0x73,0xDB,0x1},
++      {0x74,0x0E,0x1},
++      {0x75,0xD6,0x1},
++      {0x76,0x18,0x1},
++      {0x77,0xF5,0x1},
++      {0x78,0x0E,0x1},
++      {0x79,0xD6,0x1},
++      {0x7a,0x28,0x1},
++      {0x7b,0xE6,0x1},
++      {0x50,0x00,0x1},
++      {0x5c,0x00,0x1},
++
++      // page 0
++      {0xec,0x00,0x0},
++      {0x79,0x01,0x0},
++      {0x58,0x90,0x0},
++      {0x59,0xA0,0x0},
++      {0x5a,0x50,0x0},
++      {0x5b,0x70,0x0},
++      {0x5c,0xD0,0x0},
++      {0x5d,0xC0,0x0},
++      {0x5e,0x28,0x0},
++      {0x5f,0x08,0x0},
++      {0x50,0x90,0x0},
++      {0x51,0xA0,0x0},
++      {0x52,0x50,0x0},
++      {0x53,0x70,0x0},
++      {0x54,0xD0,0x0},
++      {0x55,0xC0,0x0},
++      {0x56,0x28,0x0},
++      {0x57,0x00,0x0},
++      {0x48,0x90,0x0},
++      {0x49,0xA0,0x0},
++      {0x4a,0x50,0x0},
++      {0x4b,0x70,0x0},
++      {0x4c,0xD0,0x0},
++      {0x4d,0xC0,0x0},
++      {0x4e,0x28,0x0},
++      {0x4f,0x08,0x0},
++      {0x72,0x82,0x0}, // main clock = 24MHz:0xd2, 16M:0x82, 12M:0x54
++      {0x75,0x05,0x0} // absolute vertical mirror.  junon
++
++};
++
++
++#define S5X532_INIT_REGS (sizeof(s5x532_reg)/sizeof(s5x532_reg[0]))
++#define S5X532_RISC_REGS 0xEB  
++#define S5X532_ISP_REGS 0xFB /* S5C7323X */
++#define S5X532_CIS_REGS 0x2F /* S5K437LA03 */
++
++
++#define PAGE_ADDRESS      0xEC
++
++//#define S5X532_REGS (S5X532_RISC_REGS+S5X532_ISP_REGS+S5X532_CIS_REGS)
++#define S5X532_REGS (0x1000)
++
++
++
++#endif
++
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/s5x532_rev36.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/s5x532_rev36.h 2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,208 @@
++/*
++ * 2004 (C) Samsung Electronics 
++ *  SW.LEE <hitchcar@sec.samsung.com>
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++
++#ifndef _SMDK2440_S5X532_H_
++#define _SMDK2440_S5X532_H_
++
++
++#define CHIP_DELAY 0xFF
++
++typedef struct samsung_t{
++      unsigned char subaddr;
++      unsigned char value;
++      unsigned char page;     
++} s5x532_t;
++
++s5x532_t s5x532_reg[] = {
++
++      //=============== page0 ===============//
++      {0xec,0x00,0x00},
++      {0x02,0x00,0x00},
++      {0x14,0x60,0x00},
++      {0x15,0x60,0x00},
++      {0x16,0x60,0x00},
++      {0x1b,0x20,0x00},
++      {0x1c,0x20,0x00},
++      {0x1d,0x20,0x00},
++      {0x1e,0x20,0x00},
++      {0x72,0xdc,0x00},
++      {0x73,0x11,0x00},
++      {0x76,0x82,0x00},
++      {0x77,0x90,0x00},
++      {0x78,0x6c,0x00},
++      {0x0a,0x02,0x00},
++      {0x34,0x0d,0x00},
++      {0x35,0x0a,0x00},
++      {0x36,0x05,0x00},
++      {0x37,0x05,0x00},
++      {0x38,0x06,0x00},
++      {0x39,0x08,0x00},
++      {0x3A,0x0d,0x00},
++      {0x3B,0x0d,0x00},
++      {0x3C,0x18,0x00},
++      {0x3D,0xE0,0x00},
++      {0x3E,0x20,0x00},
++      {0x66,0x02,0x00},
++      {0x6c,0x40,0x00},
++      {0x7c,0x01,0x00},
++      {0x0D,0x24,0x00},
++      {0x40,0x1B,0x00},
++      {0x41,0x4F,0x00},
++      {0x42,0x24,0x00},
++      {0x43,0x3E,0x00},
++      {0x44,0x32,0x00},
++      {0x45,0x30,0x00},
++      {0x48,0xa0,0x00},
++      {0x49,0xd0,0x00},
++      {0x4A,0x28,0x00},
++      {0x4B,0x7d,0x00},
++      {0x4C,0xd0,0x00},
++      {0x4D,0xe0,0x00},
++      {0x4E,0x1a,0x00},
++      {0x4F,0xa0,0x00},
++      {0x50,0xc0,0x00},
++      {0x51,0xc0,0x00},
++      {0x52,0x42,0x00},
++      {0x53,0x7e,0x00},
++      {0x54,0xc0,0x00},
++      {0x55,0xf0,0x00},
++      {0x56,0x1e,0x00},
++      {0x57,0xe0,0x00},
++      {0x58,0xc0,0x00},
++      {0x59,0xa0,0x00},
++      {0x5A,0x4a,0x00},
++      {0x5B,0x7e,0x00},
++      {0x5C,0xc0,0x00},
++      {0x5D,0xf0,0x00},
++      {0x5E,0x2a,0x00},
++      {0x5F,0x10,0x00},
++      {0x79,0x00,0x00},          
++      {0x7a,0x00,0x00},
++      {0xe0,0x0f,0x00},
++      {0xe3,0x14,0x00}, 
++      {0xe5,0x48,0x00},
++      {0xe7,0x58,0x00},
++
++      //=============== page1 ===============//
++      {0xec,0x01,0x01},
++      {0x10,0x05,0x01},
++      {0x20,0xde,0x01},
++      {0x0b,0x06,0x01},
++      {0x30,0x00,0x01},
++      {0x31,0x00,0x01},
++      {0x32,0x00,0x01},
++      {0x24,0x28,0x01},
++      {0x25,0x3F,0x01},
++      {0x26,0x65,0x01},
++      {0x27,0xA1,0x01},
++      {0x28,0xFF,0x01},
++      {0x29,0x96,0x01},
++      {0x2A,0x85,0x01},
++      {0x2B,0xFF,0x01},
++      {0x2C,0x00,0x01},
++      {0x2D,0x1B,0x01},
++      {0xB0,0x28,0x01},
++      {0xB1,0x3F,0x01},
++      {0xB2,0x65,0x01},
++      {0xB3,0xA1,0x01},
++      {0xB4,0xFF,0x01},
++      {0xB5,0x96,0x01},
++      {0xB6,0x85,0x01},
++      {0xB7,0xFF,0x01},
++      {0xB8,0x00,0x01},
++      {0xB9,0x1B,0x01},
++      {0x15,0x15,0x01},
++      {0x18,0x85,0x01},
++      {0x1f,0x05,0x01},
++      {0x87,0x40,0x01},
++      {0x37,0x60,0x01},
++      {0x38,0xd5,0x01},
++      {0x48,0xa0,0x01},
++      {0x61,0x54,0x01},
++      {0x62,0x54,0x01},
++      {0x63,0x14,0x01},
++      {0x64,0x14,0x01},
++      {0x6d,0x12,0x01},
++      {0x78,0x09,0x01},
++      {0x79,0xD7,0x01},
++      {0x7A,0x14,0x01},
++      {0x7B,0xEE,0x01},
++                       
++      //=============== page2 ===============//
++      {0xec,0x02,0x02},
++      {0x2c,0x76,0x02},
++      {0x25,0x25,0x02},
++      {0x27,0x27,0x02},
++      {0x30,0x29,0x02},
++      {0x36,0x08,0x02},
++      {0x38,0x04,0x02},
++
++      //=============== page3 ===============//
++      {0xec,0x03,0x03},
++      {0x08,0x00,0x03},
++      {0x09,0x33,0x03},
++
++      //=============== page4 ===============//
++      {0xec,0x04,0x04},
++      {0x00,0x21,0x04},
++      {0x01,0x00,0x04},            
++      {0x02,0x9d,0x04},            
++      {0x03,0x02,0x04},            
++      {0x04,0x04,0x04},         
++      {0x05,0x00,0x04},            
++      {0x06,0x1f,0x04},          
++      {0x07,0x02,0x04},            
++      {0x08,0x21,0x04},            
++      {0x09,0x00,0x04},            
++      {0x0a,0x9d,0x04},           
++      {0x0b,0x02,0x04},            
++      {0x0c,0x04,0x04},             
++      {0x0d,0x00,0x04},            
++      {0x0e,0x20,0x04},            
++      {0x0f,0x02,0x04},            
++      {0x1b,0x3c,0x04},            
++      {0x1c,0x3c,0x04},            
++
++      //=============== page5 ===============//
++      {0xec,0x05,0x05},                               
++      {0x1f,0x00,0x05},                               
++      {0x08,0x59,0x05},            
++      {0x0a,0x71,0x05},            
++      {0x1e,0x23,0x05},            
++      {0x0e,0x3c,0x05},            
++
++      //=============== page7 ===============//
++      {0xec,0x07,0x07},
++      {0x11,0xfe,0x07},
++
++      // added by junon
++      {0xec,0x01,0x07}, 
++      {0x10,0x26,0x07},
++      // 0x21-ITU-R656(CbYCrY), 0x25-ITU-R601(CbYCrY), 0x26-ITU-R601(YCrYCb)
++
++
++};
++
++
++#define S5X532_INIT_REGS (sizeof(s5x532_reg)/sizeof(s5x532_reg[0]))
++#define S5X532_RISC_REGS 0xEB  
++#define S5X532_ISP_REGS 0xFB /* S5C7323X */
++#define S5X532_CIS_REGS 0x2F /* S5K437LA03 */
++
++
++#define PAGE_ADDRESS      0xEC
++
++//#define S5X532_REGS (S5X532_RISC_REGS+S5X532_ISP_REGS+S5X532_CIS_REGS)
++#define S5X532_REGS (0x1000)
++
++
++
++#endif
++
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/sensor.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/sensor.h       2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,20 @@
++/*
++ *
++ *  Copyright (C) 2004 Samsung Electronics
++ *            SW.LEE <hitchcar@sec.samsung.com>
++ *
++ * 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.
++ */
++
++#ifndef __SENSOR_CMD_H_
++#define __SENSOR_CMD_H_
++
++#include "bits.h"
++
++#define SENSOR_INIT   BIT0
++#define USER_ADD        BIT1
++#define USER_EXIT       BIT2
++
++#endif
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/sxga.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/sxga.h 2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,504 @@
++/*
++ * 2004 (C) Samsung Electronics 
++ *  SW.LEE <hitchcar@sec.samsung.com>
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++
++#ifndef _SAMSUNG_SXGA_H_
++#define _SAMSUNG_SXGA_H_
++
++
++#define CHIP_DELAY 0xFF
++
++typedef struct samsung_t{
++      unsigned char subaddr;
++      unsigned char value;
++      unsigned char page;     
++} s5x532_t;
++
++s5x532_t s5x532_reg[] = {
++      // page 0
++      {0xec,0x00,0x0},
++      {0x0c,0x38,0x0},
++      {0x0d,0x24,0x0},
++      {0x13,0x10,0x0},
++      {0x14,0x10,0x0},
++      {0x15,0x10,0x0},
++      {0x16,0x10,0x0},
++      {0x17,0x20,0x0},
++      {0x18,0x30,0x0},
++      {0x19,0x30,0x0},
++      {0x1a,0x10,0x0},
++      {0x1b,0x10,0x0},
++      
++      {0x2d,0x40,0x0},
++      {0x3e,0x10,0x0},
++      {0x34,0x0a,0x0},
++      {0x39,0x04,0x0},
++      {0x3a,0x02,0x0},
++      {0x31,0x05,0x0},
++
++      {0x40,0x1d,0x0},
++      {0x41,0x50,0x0},
++      {0x42,0x24,0x0},
++      {0x43,0x3f,0x0},
++      {0x44,0x30,0x0},
++      {0x45,0x31,0x0},
++
++      {0x48,0xa0,0x0},
++      {0x49,0xc0,0x0},
++      {0x4a,0x58,0x0},
++      {0x4b,0x50,0x0},
++      {0x4c,0xb0,0x0},
++      {0x4d,0xc0,0x0},
++      {0x4e,0x30,0x0},
++      {0x4f,0x20,0x0},
++
++      {0x50,0xa0,0x0},
++      {0x51,0xc0,0x0},
++      {0x52,0x50,0x0},
++      {0x53,0x60,0x0},
++      {0x54,0xb0,0x0},
++      {0x55,0xc0,0x0},
++      {0x56,0x20,0x0},
++      {0x57,0x08,0x0},
++//    {0x72,0x50,0x0}, // Clock 16
++      {0x72,0x78,0x0}, // Clock 24Mhz
++//    {0x72,0xf0,0x0}, // Clock 48Mhz
++      // page 1
++      {0xec,0x01,0x1},
++      {0x10,0x17,0x1}, // ITU-R601
++                       /* 
++                         [3:2] : out_sel 
++                           00 : 656
++                           01 : 601
++                           10 : RGB
++                           11 : CIS
++                         [1] : YC_SEL  
++                         [0] : CBCR_SEL
++                       */
++
++      {0x0b,0x06,0x1}, // 6
++      {0x20,0xa8,0x1}, //b0); // Highlight C Supp 040215 
++      {0x22,0x26,0x1}, //2f); 040225
++  
++      {0x24,0x08,0x1}, //00); //1F); 040226
++      {0x25,0x10,0x1}, //10); //34);
++      {0x26,0x40,0x1}, //56);
++      {0x27,0x80,0x1}, //8D);
++      {0x28,0x2c,0x1}, //E7);
++      {0x29,0xd6,0x1}, //7C);
++      {0x2A,0x0c,0x1}, //70);
++      {0x2B,0xFF,0x1}, //FF);
++      {0x2C,0x00,0x1}, //00);
++      {0x2D,0x5f,0x1}, //1B);
++      //    
++      {0xB0,0x08,0x1}, //00); //1F); 040226
++      {0xB1,0x10,0x1}, //10); //34);50
++      {0xB2,0x40,0x1}, //36); 
++      {0xB3,0x80,0x1}, //6D);
++      {0xB4,0x2c,0x1}, //b7);
++      {0xB5,0xd6,0x1}, //7C);
++      {0xB6,0x0c,0x1}, //70);
++      {0xB7,0xFF,0x1}, //FF);
++      {0xB8,0x00,0x1}, //00);
++      {0xB9,0x5f,0x1}, //1B);
++
++
++      {0xc2,0x01,0x1}, // shading On
++      {0xc3,0x80,0x1},
++      {0xc4,0x02,0x1},
++      {0xc5,0x00,0x1},
++      {0xc6,0x01,0x1},
++      {0xc7,0x00,0x1},
++      {0xc8,0x05,0x1},
++      {0xc9,0x00,0x1},
++      {0xca,0x04,0x1},
++ 
++      // shading 5
++      {0xd0,0xb5,0x1},
++      {0xd1,0x9c,0x1},
++      {0xd2,0x8d,0x1},
++      {0xd3,0x84,0x1},
++      {0xd4,0x84,0x1},
++      {0xd5,0x91,0x1},
++      {0xd6,0xa0,0x1},
++      {0xd7,0xb5,0x1},
++
++      {0xd8,0xc0,0x1},
++      {0xd9,0xa6,0x1},
++      {0xda,0x93,0x1},
++      {0xdb,0x85,0x1},
++      {0xdc,0x85,0x1},
++      {0xdd,0x90,0x1},
++      {0xde,0xa0,0x1},
++      {0xdf,0xb8,0x1},
++
++      // Page 2
++      {0xec,0x02,0x02},
++
++      {0x2d,0x02,0x02},
++      {0x20,0x13,0x02},
++      {0x21,0x13,0x2},
++      {0x22,0x13,0x2},
++      {0x23,0x13,0x2},
++      {0x2e,0x85,0x2},
++      {0x2f,0x34,0x2},
++      {0x30,0x00,0x2},
++      {0x28,0x94,0x2},
++
++                                                                                
++      // page 3
++      {0xec,0x03,0x03},
++      {0x10,0x00,0x3},
++      {0x20,0x00,0x3},
++      {0x21,0x20,0x3},
++      {0x22,0x00,0x3},
++      {0x23,0x00,0x3},
++      {0x40,0x20,0x3},
++      {0x41,0x20,0x3},
++      {0x42,0x20,0x3},
++      {0x43,0x20,0x3},
++      {0x60,0x00,0x3},
++      {0x61,0x00,0x3},
++      {0x62,0x00,0x3},
++      {0x63,0x00,0x3},
++      {0x64,0x04,0x3},
++      {0x65,0x1C,0x3},
++      {0x66,0x05,0x3},
++      {0x67,0x1C,0x3},
++      {0x68,0x00,0x3},
++      {0x69,0x2D,0x3},
++      {0x6a,0x00,0x3},
++      {0x6b,0x72,0x3},
++      {0x6c,0x00,0x3},
++      {0x6d,0x00,0x3},
++      {0x6e,0x16,0x3}, // 2.38
++      {0x6f,0x16,0x3}, // 2.38
++      {0x70,0x00,0x3},
++      {0x71,0x00,0x3},
++      {0x72,0x45,0x3},
++      {0x73,0x00,0x3},
++      {0x74,0x1C,0x3},
++      {0x75,0x05,0x3},
++                                                                                
++      {0x80,0x00,0x3},  //for 0.02 _ 44
++      {0x81,0x00,0x3},
++      {0x82,0x00,0x3},
++      {0x83,0x00,0x3},
++      {0x84,0x04,0x3},
++      {0x85,0x1c,0x3},
++      {0x86,0x05,0x3},
++      {0x87,0x1c,0x3},
++      {0x88,0x00,0x3},
++      {0x89,0x2d,0x3},
++      {0x8a,0x00,0x3},
++      {0x8b,0xcc,0x3},
++      {0x8c,0x00,0x3},
++      {0x8d,0x00,0x3},
++      {0x8e,0x08,0x3},
++      {0x8f,0x08,0x3},
++      {0x90,0x01,0x3},
++      {0x91,0x00,0x3},
++      {0x92,0x91,0x3},
++      {0x93,0x00,0x3},
++      {0x94,0x88,0x3},
++      {0x95,0x02,0x3},
++
++
++      
++      // page 4
++      {0xec,0x04,0x04},
++      {0x3f,0x09,0x04}, // VGA : old board :0x08 , new board ; 0X09
++      {0x18,0x00,0x04},  // sxga
++      {0x1c,0x41,0x04},
++      {0x20,0x41,0x04}, // vga center 040215
++      {0x22,0xc1,0x04},// a1);
++      {0x23,0x02,0x04},
++      {0x28,0x41,0x04},
++      {0x2a,0xc1,0x04},// a1);
++      {0x2b,0x02,0x04},
++
++      {0x3c,0x0b,0x04}, //f);  // vga 
++      {0x58,0x11,0x04},
++      {0x5c,0x14,0x04},
++      {0x60,0x21,0x04},
++      {0x61,0x00,0x04},
++      {0x62,0xB1,0x04},
++      {0x63,0x02,0x04},
++      {0x64,0x01,0x04},
++      {0x65,0x00,0x04},
++      {0x66,0x01,0x04},
++      {0x67,0x02,0x04},
++      {0x68,0x21,0x04},
++      {0x69,0x00,0x04},
++      {0x6a,0xB1,0x04},
++      {0x6b,0x02,0x04},
++      {0x6c,0x01,0x04},
++      {0x6d,0x00,0x04},
++      {0x6e,0x01,0x04},
++      {0x6f,0x02,0x04},
++      {0x70,0x2D,0x04},
++      {0x71,0x00,0x04},
++      {0x72,0xd3,0x04}, // 14
++      {0x73,0x05,0x04}, // 15
++      {0x74,0x1C,0x04},
++      {0x75,0x05,0x04},
++      {0x76,0x1b,0x04}, // HendL
++      {0x77,0x0b,0x04}, // HendH
++      {0x78,0x01,0x04}, // 5.00
++      {0x79,0x80,0x04}, // 5.2a
++      {0x7a,0x33,0x04},
++      {0x7b,0x00,0x04},
++      {0x7c,0x38,0x04}, // 5.0e
++      {0x7d,0x03,0x04},
++      {0x7e,0x00,0x04},
++      {0x7f,0x0A,0x04},
++      
++      {0x80,0x2e,0x04},
++      {0x81,0x00,0x04},
++      {0x82,0xae,0x04},
++      {0x83,0x02,0x04},
++      {0x84,0x00,0x04},
++      {0x85,0x00,0x04},
++      {0x86,0x01,0x04},
++      {0x87,0x02,0x04},
++      {0x88,0x2e,0x04},
++      {0x89,0x00,0x04},
++      {0x8a,0xae,0x04},
++      {0x8b,0x02,0x04},
++      {0x8c,0x1c,0x04},
++      {0x8d,0x00,0x04},
++      {0x8e,0x04,0x04},
++      {0x8f,0x02,0x04},
++      {0x90,0x2d,0x04},
++      {0x91,0x00,0x04},
++      {0x92,0xa5,0x04},
++      {0x93,0x00,0x04},
++      {0x94,0x88,0x04},
++      {0x95,0x02,0x04},
++      {0x96,0xb3,0x04},
++      {0x97,0x06,0x04},
++      {0x98,0x01,0x04},
++      {0x99,0x00,0x04},
++      {0x9a,0x33,0x04},
++      {0x9b,0x30,0x04},
++      {0x9c,0x50,0x04},
++      {0x9d,0x30,0x04},
++      {0x9e,0x01,0x04},
++      {0x9f,0x08,0x04},
++
++      // page 5
++      {0xec,0x05,0x05},
++      {0x5a,0x22,0x05},
++
++      // page 6
++      {0xec,0x06,0x06},
++      {0x14,0x1e,0x06}, 
++      {0x15,0xb4,0x04},
++      {0x16,0x25,0x04},
++      {0x17,0x74,0x04}, 
++
++      {0x10,0x48,0x04},
++      {0x11,0xa0,0x04},
++      {0x12,0x40,0x04},  // 040216  AE1 window ÁÙÀÓ
++      {0x13,0x70,0x04},
++
++      {0x1a,0x29,0x04},  // 040217  AWB window ÁÙÀÓ
++      {0x30,0x40,0x04},
++      {0x31,0xa2,0x04},
++      {0x32,0x50,0x04},
++      {0x33,0xbc,0x04},
++      {0x34,0x10,0x04},
++      {0x35,0xd2,0x04},
++      {0x36,0x18,0x04},
++      {0x37,0xf5,0x04},
++      {0x38,0x10,0x04},
++      {0x39,0xd3,0x04},
++      {0x3a,0x1a,0x04},
++      {0x3b,0xf0,0x04},
++
++      // page 7
++      {0xec,0x07,0x07},
++      {0x08,0xff,0x7},
++      {0x38,0x01,0x7}, //07); 040315
++      {0x39,0x01,0x7}, //02); //4);  040223   040315
++      {0x11,0xfe,0x7},  //fe);   // green -2  040303
++      {0x2a,0x20,0x7},
++      {0x2b,0x20,0x7},
++      {0x2c,0x10,0x7},
++      {0x2d,0x00,0x7},
++      {0x2e,0xf0,0x7},
++      {0x2f,0xd0,0x7},
++      {0x3a,0xf0,0x7},
++      {0x23,0x07,0x7},  //  for ESD   
++
++      // page 0
++      {0xec,0x00,0x00},
++      {0x8a,0x04,0x00},
++
++      // page 1
++      {0xec,0x01,0x01},       
++      {0xe5,0xb0,0x01},
++      {0xe5,0xb0,0x01},
++      {0xc2,0x01,0x01},
++
++      {0x61,0x7b,0x01},
++      {0x62,0x7b,0x01},
++      {0x63,0x1b,0x01},
++      {0x64,0x1b,0x01},
++
++      // page 0
++      {0xec,0x00,0x00},
++      {0x7e,0x04,0x00},
++
++      // page 4
++      {0xec,0x04,0x04},
++      {0x04,0x02,0x04},
++      {0x06,0x02,0x04},
++
++      // page 1
++      {0xec,0x01,0x01},       
++      {0x10,0x05,0x01},
++      {0x54,0x02,0x01},
++      {0x56,0x02,0x01},
++
++      // page 3
++      {0xec,0x03,0x03},
++      {0x0e,0x08,0x03},
++      {0x0f,0x08,0x03},
++
++      // page 4
++      {0xec,0x04,0x04},
++      {0x00,0x30,0x04},
++      {0x0a,0x30,0x04},
++
++      // page 5
++      {0xec,0x05,0x05},
++      {0x08,0x33,0x05},
++
++      // page 0
++      {0xec,0x00,0x00},
++      {0x02,0x00,0x00},
++
++      // page 4
++//scale out
++      {0xec,0x04,0x04},
++      {0x02,0x20,0x04},
++      {0x1c,0x4f,0x04},
++
++      // page 1
++      {0xec,0x01,0x01},
++      {0x52,0x20,0x01},
++
++      // page 5
++      {0xec,0x05,0x05},
++      {0x0e,0x4f,0x05},
++
++//ae speed
++      // page 0
++      {0xec,0x00,0x00},
++      {0x92,0x80,0x00},
++      {0x93,0x02,0x00},
++      {0x94,0x04,0x00},
++      {0x95,0x04,0x00},
++      {0x96,0x04,0x00},
++      {0x97,0x04,0x00},
++      {0x9b,0x47,0x00},
++
++      {0xec,0x00,0x00},
++      {0x40,0x17,0x00},
++      {0x41,0x4c,0x00},
++      {0x42,0x1d,0x00},
++      {0x43,0x3e,0x00},
++      {0x44,0x2a,0x00},
++      {0x45,0x2d,0x00},
++
++      {0xec,0x01,0x01},
++      {0x20,0xd0,0x01},   //high light color reference
++
++      {0xec,0x00,0x00},
++      {0x7e,0x00,0x00},
++      {0x73,0x11,0x00}, // 41
++      {0x78,0x78,0x00},
++
++      {0xec,0x07,0x07},
++      {0x1b,0x3e,0x07},
++
++      {0xec,0x00,0x00},
++      {0x48,0xA0,0x00}, //s48C0
++      {0x49,0xB0,0x00}, //s49B0
++      {0x4a,0x30,0x00}, //s4a20
++      {0x4b,0x70,0x00}, //s4b70
++      {0x4c,0xD0,0x00}, //s4cA0
++      {0x4d,0xB0,0x00}, //s4dB0
++      {0x4e,0x30,0x00}, //s4e30
++      {0x4f,0xF0,0x00}, //s4fF0
++      {0x50,0xA0,0x00}, //s50D0
++      {0x51,0xB0,0x00}, //s51B0
++      {0x52,0x25,0x00}, //s5210
++      {0x53,0x70,0x00}, //s5370
++      {0x54,0xD0,0x00}, //s5490
++      {0x55,0xD0,0x00}, //s55B0
++      {0x56,0x3A,0x00}, //s5640
++      {0x57,0xD0,0x00}, //s57D0
++      {0x58,0xA0,0x00}, //s58D0
++      {0x59,0xA0,0x00}, //s59B0
++      {0x5a,0x32,0x00}, //s5a0A
++      {0x5b,0x7A,0x00}, //s5b7A
++      {0x5c,0xB0,0x00}, //s5c90
++      {0x5d,0xC0,0x00}, //s5dC0
++      {0x5e,0x3E,0x00}, //s5e4A
++      {0x5f,0xfa,0x00}, //s5fD0
++
++      // gamma
++      {0xec,0x01,0x01},
++      {0x24,0x31,0x01},
++      {0x25,0x4C,0x01},
++      {0x26,0x75,0x01},
++      {0x27,0xB5,0x01},
++      {0x28,0x17,0x01},
++      {0x29,0xAE,0x01},
++      {0x2A,0x97,0x01},
++      {0x2B,0xFF,0x01},
++      {0x2C,0x00,0x01},
++      {0x2D,0x5B,0x01},
++
++      {0xB0,0x31,0x01},
++      {0xB1,0x4C,0x01},
++      {0xB2,0x75,0x01},
++      {0xB3,0xB5,0x01},
++      {0xB4,0x17,0x01},
++      {0xB5,0xAE,0x01},
++      {0xB6,0x97,0x01},
++      {0xB7,0xFF,0x01},
++      {0xB8,0x00,0x01},
++      {0xB9,0x5B,0x01},
++
++      {0xec,0x00,0x00},
++      {0x77,0xb0,0x00},
++      {0x39,0x06,0x00},
++      {0x3a,0x08,0x00},
++
++};
++
++
++#define S5X532_INIT_REGS (sizeof(s5x532_reg)/sizeof(s5x532_reg[0]))
++#define S5X532_RISC_REGS 0xEB  
++#define S5X532_ISP_REGS 0xFB /* S5C7323X */
++#define S5X532_CIS_REGS 0x2F /* S5K437LA03 */
++
++
++#define PAGE_ADDRESS      0xEC
++
++//#define S5X532_REGS (S5X532_RISC_REGS+S5X532_ISP_REGS+S5X532_CIS_REGS)
++#define S5X532_REGS (0x1000)
++
++
++
++#endif
++
++
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/userapp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/userapp.h      2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,44 @@
++/*
++    Character Driver API Interface
++
++    Copyright (C) 2003 Samsung Electronics (SW.LEE: hitchcar@samsung.com)
++
++    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 __FIMC20_CAMIF_USR_APP_H_
++#define __FIMC20_CAMIF_USR_APP_H_
++
++
++/* 
++ * IOCTL Command for Character Driver
++ */ 
++
++#define CMD_CAMERA_INIT   0x23
++/*  Test Application Usage */
++typedef struct {
++        int src_x;
++        int src_y;
++        int dst_x;
++        int dst_y;
++        int bpp;
++        int flip;
++} camif_param_t;
++
++
++
++#endif
++
++
++/* 
++ * Local variables:
++ * tab-width: 8
++ *  c-indent-level: 8
++ *  c-basic-offset: 8
++ *  c-set-style: "K&R"
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/v4l2_api.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/v4l2_api.c     2008-12-11 22:46:48.000000000 +0100
+@@ -0,0 +1,311 @@
++/*
++ * . 2004-01-03: SW.LEE <hitchcar@sec.samsung.com>
++ *   
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License 2. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/irq.h>
++#include <linux/tqueue.h>
++#include <linux/locks.h>
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++#include <linux/miscdevice.h>
++#include <linux/wait.h>
++
++#include <asm/io.h>
++#include <asm/semaphore.h>
++#include <asm/hardware.h>
++#include <asm/uaccess.h>
++
++#include <asm/arch/cpu_s3c2440.h>
++#include <asm/arch/S3C2440.h>
++
++#include "camif.h"
++#include "videodev.h"
++
++/* 
++  Codec_formats/Preview_format[0] must be same to initial value of 
++  preview_init_param/codec_init_param 
++*/
++
++const struct v4l2_fmtdesc codec_formats[] = {
++      {
++              .index     = 0,
++              .type      = V4L2_BUF_TYPE_VIDEO_CAPTURE,
++//            .flags     = FORMAT_FLAGS_PLANAR,
++              .description = "4:2:2, planar, Y-Cb-Cr",
++              .pixelformat = V4L2_PIX_FMT_YUV422P,
++
++      },{
++              .index    = 1,
++              .type     = V4L2_BUF_TYPE_VIDEO_CAPTURE,
++//            .flags    = FORMAT_FLAGS_PLANAR,
++              .name     = "4:2:0, planar, Y-Cb-Cr",
++              .fourcc   = V4L2_PIX_FMT_YUV420,
++      }
++};
++
++
++/* Todo
++   FIMC V4L2_PIX_FMT_RGB565 is not same to that of V4L2spec 
++   and so we need image convert to FIMC V4l2_PIX_FMT_RGB565.
++*/
++const struct v4l2_fmtdesc preview_formats[] = {
++      {
++              .index    = 1,
++              .type     = V4L2_BUF_TYPE_VIDEO_CAPTURE,
++              .description = "16 bpp RGB, le",
++              .fourcc   = V4L2_PIX_FMT_RGB565,
++//            .flags    = FORMAT_FLAGS_PACKED,
++      },
++      {
++              .index    = 0,
++              .type     = V4L2_BUF_TYPE_VIDEO_CAPTURE,
++//            .flags    = FORMAT_FLAGS_PACKED,
++              .description = "32 bpp RGB, le",
++              .fourcc   = V4L2_PIX_FMT_BGR32,
++      }
++}
++
++#define NUM_F       ARRARY_SIZE(preview_formats)
++
++
++/* 
++ * This function and v4l2 structure made for V4L2 API functions 
++ *     App <--> v4l2 <--> logical param <--> hardware
++ */
++static int camif_get_v4l2(camif_cfg_t *cfg)
++{
++      return 0;
++}
++
++
++/*
++** Gives the depth of a video4linux2 fourcc aka pixel format in bits.
++*/
++static int pixfmt2depth(int pixfmt,int *fmtptr)
++{
++      int fmt, depth;    
++      
++      switch (pixfmt) {
++      case V4L2_PIX_FMT_RGB565:
++      case V4L2_PIX_FMT_RGB565X:
++              fmt = CAMIF_RGB_16;
++              depth = 16;
++              break;
++      case V4L2_PIX_FMT_BGR24: /* Not tested */
++      case V4L2_PIX_FMT_RGB24:
++              fmt = CAMIF_RGB_24;
++              depth = 24;
++              break;
++      case V4L2_PIX_FMT_BGR32:
++      case V4L2_PIX_FMT_RGB32:
++              fmt = CAMIF_RGB_24;
++              depth 32;
++              break;
++      case V4L2_PIX_FMT_GREY: /* Not tested  */
++              fmt = CAMIF_OUT_YCBCR420;
++              depth = 8;
++              break;
++      case V4L2_PIX_FMT_YUYV:
++      case V4L2_PIX_FMT_UYVY:
++      case V4L2_PIX_FMT_YUV422P:
++              fmt = CAMIF_OUT_YCBCR422;
++              depth = 16;
++              break;
++      case V4L2_PIX_FMT_YUV420:
++              fmt = CAMIF_OUT_YCBCR420;
++              depth = 12;
++              break;
++      }
++      if (fmtptr) *fmtptr = fmt;              
++      return depth;
++}
++
++
++
++static int camif_s_v4l2(camif_cfg_t *cfg)
++{
++      int num = cfg->v2.used_fmt;
++
++      if ( !(cfg->v2.status&CAMIF_V4L2_INIT)) {
++              int depth;
++              int fourcc = v2.fmtdesc[num].pixelformat;
++
++              /* To define v4l2_fmtsdesc */
++              if (cfg->dma_type == CAMIF_CODEC)
++                      cfg->v2->fmtdesc = codec_formats;
++              else
++                      cfg->v2->fmtdesc = preview_formats;
++
++              /* To define v4l2_format used currently */
++              cfg->v2.fmt.width    = cfg->target_x;
++              cfg->v2.fmt.height   = cfg->target_y;
++              cfg->v2.fmt.field    = V4L2_FIELD_NONE;
++              cfg->v2.fmt.pixelformat = fourcc;
++              depth       = pixfmt2depth(fourcc,NULL);
++              cfg->v2.fmt.bytesperline= cfg->v2.fmt.width*depth >> 3;
++              cfg->v2.fmt.sizeimage = 
++                       cfg->v2.fmt.height * cfg->v2.fmt.bytesperline;
++
++              /* To define v4l2_input */
++              cfg->v2.input.index  = 0;
++              if (cfg->dma_type == CAMIF_CODEC)
++                      snprintf(cfg->v2.input.name, 31, "CAMIF CODEC");
++              else
++                      snprintf(cfg->v2.input.name, 31, "CAMIF PREVIEW");
++              cfg->v2.input.type = V4L2_INPUT_TYPE_CAMERA;
++                      
++              /* Write the Status of v4l2 machine */
++              cfg->v2.status |= CAMIF_V4L2_INIT;
++       }
++      return 0;
++}
++
++
++static int camif_g_fmt(camif_cfg_t *cfg, struct v4l2_format *f)
++{
++      int size = sizeof(struct v4l2_pix_format);
++
++      switch (f->type) {
++      case V4L2_BUF_TYPE_VIDEO_CAPTURE:
++              memset(&f->fmt.pix,0,size);
++              memcpy(&f->fmt.pix,&cfg->v2.fmt,size);
++              return 0;
++      default:
++              return -EINVAL;
++      }
++}
++
++
++/* Copy v4l2 parameter into other element of camif_cfg_t */
++static int camif_s_try(camif_cfg_t *cfg, int f)
++{
++      int fmt;
++      cfg->target_x = cfg->v2.fmt.width;
++      cfg->target_y = cfg->v2.fmt.height;
++      pixfmt2depth(cfg->v2.fmt.pixelformat,&fmt);
++      cfg->fmt = fmt;
++      camif_dynamic_conf(cfg);
++}
++
++
++static int camif_s_fmt(camif_cfg_t *cfg, struct v4l2_format *f)
++{
++      int retval;
++      
++      switch (f->type) {
++      case V4L2_BUF_TYPE_VIDEO_CAPTURE:
++      {
++              /* update our state informations */
++//            down(&fh->cap.lock);
++              cfg->v2.fmt          = f->pix;
++              cfg->v2.status       |= CAMIF_v4L2_DIRTY;
++              camif_dynamic_conf(cfg);
++              cfg->v2.status      &= ~CAMIF_v4L2_DIRTY; /* dummy ? */
++//            up(&fh->cap.lock);
++              
++              return 0;
++      }
++      default:
++              return -EINVAL;
++      }
++
++}
++
++/* Refer ioctl of  videodeX.c  and bttv-driver.c */
++int camif_do_ioctl
++(struct inode *inode, struct file *file,unsigned int cmd, void * arg)
++{
++      camif_cfg_t *cfg = file->private_data;
++      int ret = 0;
++
++      switch (cmd) {
++        case VIDIOC_QUERYCAP:
++              {
++                      struct v4l2_capability *cap = arg;
++                                                                                                      
++                      strcpy(cap->driver,"Fimc Camera");
++                      strlcpy(cap->card,cfg->v->name,sizeof(cap->card));
++                      sprintf(cap->bus_info,"FIMC 2.0 AHB Bus");
++                      cap->version = 0;
++                      cap->capabilities =
++                              V4L2_CAP_VIDEO_CAPTURE |V4L2_CAP_READWRITE;
++                      return 0;
++              }
++      case VIDIOC_G_FMT:
++              {
++                      struct v4l2_format *f = arg;
++                      return camif_g_fmt(cfg,f);
++              }
++      case VIDIOC_S_FMT:
++              {
++                      struct v4l2_format *f = arg;
++                      return camif_s_fmt(cfg,f);
++              }
++
++      case VIDIOC_ENUM_FMT:
++              {
++                      struct v4l2_fmtdesc *f = arg;
++                      enum v4l2_buf_type type = f->type;
++                      int index = f->index;
++
++                      if (index >= NUM_F) 
++                              return -EINVAL;
++                      switch (f->type) {
++                      case V4L2_BUF_TYPE_VIDEO_CAPTURE:
++                              break;
++                      case V4L2_BUF_TYPE_VIDEO_OVERLAY:
++                      case V4L2_BUF_TYPE_VBI_CAPTURE:
++                                      default:
++                      return -EINVAL;
++                      }
++                      memset(f,0,sizeof(*f));
++                      memcpy(f,cfg->v2.fmtdesc+index,sizeof(*f));
++                      return 0;
++              }
++      case VIDIOC_G_INPUT:
++              {
++                      u32 *i = arg;
++                      *i = cfg->v2.input;
++                      return 0;
++              }
++      case VIDIOC_S_INPUT:
++              {
++                      int index = *((int *)arg);
++                      if (index != 0) 
++                              return -EINVAL;
++                      cfg->v2.input.index = index;
++                      return 0;
++              }
++              
++      default:
++              return -ENOIOCTLCMD; /* errno.h */
++      } /* End of Switch  */
++
++
++}
++
++
++
++
++
++
++
++/* 
++ * Local variables:
++ * tab-width: 8
++ *  c-indent-level: 8
++ *  c-basic-offset: 8
++ *  c-set-style: "K&R"
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/videodev2.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/videodev2.h    2008-12-11 22:46:49.000000000 +0100
+@@ -0,0 +1,938 @@
++#ifndef __LINUX_VIDEODEV2_H
++#define __LINUX_VIDEODEV2_H
++/*
++ *    Video for Linux Two
++ *
++ *    Header file for v4l or V4L2 drivers and applications, for
++ *    Linux kernels 2.2.x or 2.4.x.
++ *
++ *    See http://bytesex.org/v4l/ for API specs and other
++ *    v4l2 documentation.
++ *
++ *    Author: Bill Dirks <bdirks@pacbell.net>
++ *            Justin Schoeman
++ *            et al.
++ */
++#ifdef __KERNEL__
++#include <linux/time.h> /* need struct timeval */
++#endif
++
++/*
++ *    M I S C E L L A N E O U S
++ */
++
++/*  Four-character-code (FOURCC) */
++#define v4l2_fourcc(a,b,c,d)\
++        (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
++
++/*
++ *    E N U M S
++ */
++enum v4l2_field {
++      V4L2_FIELD_ANY        = 0, /* driver can choose from none,
++                                    top, bottom, interlaced
++                                    depending on whatever it thinks
++                                    is approximate ... */
++      V4L2_FIELD_NONE       = 1, /* this device has no fields ... */
++      V4L2_FIELD_TOP        = 2, /* top field only */
++      V4L2_FIELD_BOTTOM     = 3, /* bottom field only */
++      V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
++      V4L2_FIELD_SEQ_TB     = 5, /* both fields sequential into one
++                                    buffer, top-bottom order */
++      V4L2_FIELD_SEQ_BT     = 6, /* same as above + bottom-top order */
++      V4L2_FIELD_ALTERNATE  = 7, /* both fields alternating into
++                                    separate buffers */
++};
++#define V4L2_FIELD_HAS_TOP(field)     \
++      ((field) == V4L2_FIELD_TOP      ||\
++       (field) == V4L2_FIELD_INTERLACED ||\
++       (field) == V4L2_FIELD_SEQ_TB   ||\
++       (field) == V4L2_FIELD_SEQ_BT)
++#define V4L2_FIELD_HAS_BOTTOM(field)  \
++      ((field) == V4L2_FIELD_BOTTOM   ||\
++       (field) == V4L2_FIELD_INTERLACED ||\
++       (field) == V4L2_FIELD_SEQ_TB   ||\
++       (field) == V4L2_FIELD_SEQ_BT)
++#define V4L2_FIELD_HAS_BOTH(field)    \
++      ((field) == V4L2_FIELD_INTERLACED ||\
++       (field) == V4L2_FIELD_SEQ_TB   ||\
++       (field) == V4L2_FIELD_SEQ_BT)
++
++enum v4l2_buf_type {
++      V4L2_BUF_TYPE_VIDEO_CAPTURE  = 1,
++      V4L2_BUF_TYPE_VIDEO_OUTPUT   = 2,
++      V4L2_BUF_TYPE_VIDEO_OVERLAY  = 3,
++      V4L2_BUF_TYPE_VBI_CAPTURE    = 4,
++      V4L2_BUF_TYPE_VBI_OUTPUT     = 5,
++      V4L2_BUF_TYPE_PRIVATE        = 0x80,
++};
++
++enum v4l2_ctrl_type {
++      V4L2_CTRL_TYPE_INTEGER       = 1,
++      V4L2_CTRL_TYPE_BOOLEAN       = 2,
++      V4L2_CTRL_TYPE_MENU          = 3,
++      V4L2_CTRL_TYPE_BUTTON        = 4,
++};
++
++enum v4l2_tuner_type {
++      V4L2_TUNER_RADIO             = 1,
++      V4L2_TUNER_ANALOG_TV         = 2,
++};
++
++enum v4l2_memory {
++      V4L2_MEMORY_MMAP             = 1,
++      V4L2_MEMORY_USERPTR          = 2,
++      V4L2_MEMORY_OVERLAY          = 3,
++};
++
++/* see also http://vektor.theorem.ca/graphics/ycbcr/ */
++enum v4l2_colorspace {
++      /* ITU-R 601 -- broadcast NTSC/PAL */
++      V4L2_COLORSPACE_SMPTE170M     = 1,
++
++      /* 1125-Line (US) HDTV */
++      V4L2_COLORSPACE_SMPTE240M     = 2,
++
++      /* HD and modern captures. */
++      V4L2_COLORSPACE_REC709        = 3,
++      
++      /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
++      V4L2_COLORSPACE_BT878         = 4,
++      
++      /* These should be useful.  Assume 601 extents. */
++      V4L2_COLORSPACE_470_SYSTEM_M  = 5,
++      V4L2_COLORSPACE_470_SYSTEM_BG = 6,
++      
++      /* I know there will be cameras that send this.  So, this is
++       * unspecified chromaticities and full 0-255 on each of the
++       * Y'CbCr components
++       */
++      V4L2_COLORSPACE_JPEG          = 7,
++      
++      /* For RGB colourspaces, this is probably a good start. */
++      V4L2_COLORSPACE_SRGB          = 8,
++};
++
++enum v4l2_priority {
++      V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
++      V4L2_PRIORITY_BACKGROUND  = 1,
++      V4L2_PRIORITY_INTERACTIVE = 2,
++      V4L2_PRIORITY_RECORD      = 3,
++      V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
++};
++
++struct v4l2_rect {
++      __s32   left;
++      __s32   top;
++      __s32   width;
++      __s32   height;
++};
++
++struct v4l2_fract {
++      __u32   numerator;
++      __u32   denominator;
++};
++
++/*
++ *    D R I V E R   C A P A B I L I T I E S
++ */
++struct v4l2_capability
++{
++      __u8    driver[16];     /* i.e. "bttv" */
++      __u8    card[32];       /* i.e. "Hauppauge WinTV" */
++      __u8    bus_info[32];   /* "PCI:" + pci_name(pci_dev) */
++      __u32   version;        /* should use KERNEL_VERSION() */
++      __u32   capabilities;   /* Device capabilities */
++      __u32   reserved[4];
++};
++
++/* Values for 'capabilities' field */
++#define V4L2_CAP_VIDEO_CAPTURE        0x00000001  /* Is a video capture device */
++#define V4L2_CAP_VIDEO_OUTPUT 0x00000002  /* Is a video output device */
++#define V4L2_CAP_VIDEO_OVERLAY        0x00000004  /* Can do video overlay */
++#define V4L2_CAP_VBI_CAPTURE  0x00000010  /* Is a VBI capture device */
++#define V4L2_CAP_VBI_OUTPUT   0x00000020  /* Is a VBI output device */
++#define V4L2_CAP_RDS_CAPTURE  0x00000100  /* RDS data capture */
++
++#define V4L2_CAP_TUNER                0x00010000  /* has a tuner */
++#define V4L2_CAP_AUDIO                0x00020000  /* has audio support */
++#define V4L2_CAP_RADIO                0x00040000  /* is a radio device */
++
++#define V4L2_CAP_READWRITE      0x01000000  /* read/write systemcalls */
++#define V4L2_CAP_ASYNCIO        0x02000000  /* async I/O */
++#define V4L2_CAP_STREAMING      0x04000000  /* streaming I/O ioctls */
++
++/*
++ *    V I D E O   I M A G E   F O R M A T
++ */
++
++struct v4l2_pix_format
++{
++      __u32                   width;
++      __u32                   height;
++      __u32                   pixelformat;
++      enum v4l2_field         field;
++      __u32                   bytesperline;   /* for padding, zero if unused */
++      __u32                   sizeimage;
++        enum v4l2_colorspace  colorspace;
++      __u32                   priv;           /* private data, depends on pixelformat */
++};
++
++/*           Pixel format    FOURCC                  depth  Description   */
++#define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R','G','B','1') /*  8  RGB-3-3-2     */
++#define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R','G','B','O') /* 16  RGB-5-5-5     */
++#define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R','G','B','P') /* 16  RGB-5-6-5     */
++#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R','G','B','Q') /* 16  RGB-5-5-5 BE  */
++#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R','G','B','R') /* 16  RGB-5-6-5 BE  */
++#define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B','G','R','3') /* 24  BGR-8-8-8     */
++#define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R','G','B','3') /* 24  RGB-8-8-8     */
++#define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B','G','R','4') /* 32  BGR-8-8-8-8   */
++#define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R','G','B','4') /* 32  RGB-8-8-8-8   */
++#define V4L2_PIX_FMT_GREY    v4l2_fourcc('G','R','E','Y') /*  8  Greyscale     */
++#define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y','V','U','9') /*  9  YVU 4:1:0     */
++#define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y','V','1','2') /* 12  YVU 4:2:0     */
++#define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y','U','Y','V') /* 16  YUV 4:2:2     */
++#define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U','Y','V','Y') /* 16  YUV 4:2:2     */
++#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4','2','2','P') /* 16  YVU422 planar */
++#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4','1','1','P') /* 16  YVU411 planar */
++#define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y','4','1','P') /* 12  YUV 4:1:1     */
++
++/* two planes -- one Y, one Cr + Cb interleaved  */
++#define V4L2_PIX_FMT_NV12    v4l2_fourcc('N','V','1','2') /* 12  Y/CbCr 4:2:0  */
++#define V4L2_PIX_FMT_NV21    v4l2_fourcc('N','V','2','1') /* 12  Y/CrCb 4:2:0  */
++
++/*  The following formats are not defined in the V4L2 specification */
++#define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y','U','V','9') /*  9  YUV 4:1:0     */
++#define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y','U','1','2') /* 12  YUV 4:2:0     */
++#define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y','Y','U','V') /* 16  YUV 4:2:2     */
++#define V4L2_PIX_FMT_HI240   v4l2_fourcc('H','I','2','4') /*  8  8-bit color   */
++
++/* compressed formats */
++#define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M','J','P','G') /* Motion-JPEG   */
++#define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J','P','E','G') /* JFIF JPEG     */
++#define V4L2_PIX_FMT_DV       v4l2_fourcc('d','v','s','d') /* 1394          */
++#define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M','P','E','G') /* MPEG          */
++
++/*  Vendor-specific formats   */
++#define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W','N','V','A') /* Winnov hw compress */
++
++/*
++ *    F O R M A T   E N U M E R A T I O N
++ */
++struct v4l2_fmtdesc
++{
++      __u32               index;             /* Format number      */
++      enum v4l2_buf_type  type;              /* buffer type        */
++      __u32               flags;
++      __u8                description[32];   /* Description string */
++      __u32               pixelformat;       /* Format fourcc      */
++      __u32               reserved[4];
++};
++
++#define V4L2_FMT_FLAG_COMPRESSED 0x0001
++
++
++/*
++ *    T I M E C O D E
++ */
++struct v4l2_timecode
++{
++      __u32   type;
++      __u32   flags;
++      __u8    frames;
++      __u8    seconds;
++      __u8    minutes;
++      __u8    hours;
++      __u8    userbits[4];
++};
++
++/*  Type  */
++#define V4L2_TC_TYPE_24FPS            1
++#define V4L2_TC_TYPE_25FPS            2
++#define V4L2_TC_TYPE_30FPS            3
++#define V4L2_TC_TYPE_50FPS            4
++#define V4L2_TC_TYPE_60FPS            5
++
++/*  Flags  */
++#define V4L2_TC_FLAG_DROPFRAME                0x0001 /* "drop-frame" mode */
++#define V4L2_TC_FLAG_COLORFRAME               0x0002
++#define V4L2_TC_USERBITS_field                0x000C
++#define V4L2_TC_USERBITS_USERDEFINED  0x0000
++#define V4L2_TC_USERBITS_8BITCHARS    0x0008
++/* The above is based on SMPTE timecodes */
++
++
++/*
++ *    C O M P R E S S I O N   P A R A M E T E R S
++ */
++#if 0
++/* ### generic compression settings don't work, there is too much
++ * ### codec-specific stuff.  Maybe reuse that for MPEG codec settings
++ * ### later ... */
++struct v4l2_compression
++{
++      __u32   quality;
++      __u32   keyframerate;
++      __u32   pframerate;
++      __u32   reserved[5];
++
++/*  what we'll need for MPEG, extracted from some postings on
++    the v4l list (Gert Vervoort, PlasmaJohn).
++
++system stream:
++  - type: elementary stream(ES), packatised elementary stream(s) (PES)
++    program stream(PS), transport stream(TS)
++  - system bitrate
++  - PS packet size (DVD: 2048 bytes, VCD: 2324 bytes)
++  - TS video PID
++  - TS audio PID
++  - TS PCR PID
++  - TS system information tables (PAT, PMT, CAT, NIT and SIT)
++  - (MPEG-1 systems stream vs. MPEG-2 program stream (TS not supported
++    by MPEG-1 systems)
++
++audio:
++  - type: MPEG (+Layer I,II,III), AC-3, LPCM
++  - bitrate
++  - sampling frequency (DVD: 48 Khz, VCD: 44.1 KHz, 32 kHz)
++  - Trick Modes? (ff, rew)
++  - Copyright
++  - Inverse Telecine
++
++video:
++  - picturesize (SIF, 1/2 D1, 2/3 D1, D1) and PAL/NTSC norm can be set
++    through excisting V4L2 controls
++  - noise reduction, parameters encoder specific?
++  - MPEG video version: MPEG-1, MPEG-2
++  - GOP (Group Of Pictures) definition:
++    - N: number of frames per GOP
++    - M: distance between reference (I,P) frames
++    - open/closed GOP
++  - quantiser matrix: inter Q matrix (64 bytes) and intra Q matrix (64 bytes)
++  - quantiser scale: linear or logarithmic
++  - scanning: alternate or zigzag
++  - bitrate mode: CBR (constant bitrate) or VBR (variable bitrate).
++  - target video bitrate for CBR
++  - target video bitrate for VBR
++  - maximum video bitrate for VBR - min. quantiser value for VBR
++  - max. quantiser value for VBR
++  - adaptive quantisation value
++  - return the number of bytes per GOP or bitrate for bitrate monitoring
++
++*/
++};
++#endif
++
++struct v4l2_jpegcompression
++{
++      int quality;
++
++      int  APPn;              /* Number of APP segment to be written,
++                               * must be 0..15 */
++      int  APP_len;           /* Length of data in JPEG APPn segment */
++      char APP_data[60];      /* Data in the JPEG APPn segment. */
++      
++      int  COM_len;           /* Length of data in JPEG COM segment */
++      char COM_data[60];      /* Data in JPEG COM segment */
++      
++      __u32 jpeg_markers;     /* Which markers should go into the JPEG
++                               * output. Unless you exactly know what
++                               * you do, leave them untouched.
++                               * Inluding less markers will make the
++                               * resulting code smaller, but there will
++                               * be fewer aplications which can read it.
++                               * The presence of the APP and COM marker
++                               * is influenced by APP_len and COM_len
++                               * ONLY, not by this property! */
++      
++#define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
++#define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
++#define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
++#define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
++#define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
++                                        * allways use APP0 */
++};
++
++
++/*
++ *    M E M O R Y - M A P P I N G   B U F F E R S
++ */
++struct v4l2_requestbuffers
++{
++      __u32                   count;
++      enum v4l2_buf_type      type;
++      enum v4l2_memory        memory;
++      __u32                   reserved[2];
++};
++
++struct v4l2_buffer
++{
++      __u32                   index;
++      enum v4l2_buf_type      type;
++      __u32                   bytesused;
++      __u32                   flags;
++      enum v4l2_field         field;
++      struct timeval          timestamp;
++      struct v4l2_timecode    timecode;
++      __u32                   sequence;
++
++      /* memory location */
++      enum v4l2_memory        memory;
++      union {
++              __u32           offset;
++              unsigned long   userptr;
++      } m;
++      __u32                   length;
++
++      __u32                   reserved[2];
++};
++
++/*  Flags for 'flags' field */
++#define V4L2_BUF_FLAG_MAPPED  0x0001  /* Buffer is mapped (flag) */
++#define V4L2_BUF_FLAG_QUEUED  0x0002  /* Buffer is queued for processing */
++#define V4L2_BUF_FLAG_DONE    0x0004  /* Buffer is ready */
++#define V4L2_BUF_FLAG_KEYFRAME        0x0008  /* Image is a keyframe (I-frame) */
++#define V4L2_BUF_FLAG_PFRAME  0x0010  /* Image is a P-frame */
++#define V4L2_BUF_FLAG_BFRAME  0x0020  /* Image is a B-frame */
++#define V4L2_BUF_FLAG_TIMECODE        0x0100  /* timecode field is valid */
++
++/*
++ *    O V E R L A Y   P R E V I E W
++ */
++struct v4l2_framebuffer
++{
++      __u32                   capability;
++      __u32                   flags;
++/* FIXME: in theory we should pass something like PCI device + memory
++ * region + offset instead of some physical address */
++      void*                   base;
++      struct v4l2_pix_format  fmt;
++};
++/*  Flags for the 'capability' field. Read only */
++#define V4L2_FBUF_CAP_EXTERNOVERLAY   0x0001
++#define V4L2_FBUF_CAP_CHROMAKEY               0x0002
++#define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
++#define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008
++/*  Flags for the 'flags' field. */
++#define V4L2_FBUF_FLAG_PRIMARY                0x0001
++#define V4L2_FBUF_FLAG_OVERLAY                0x0002
++#define V4L2_FBUF_FLAG_CHROMAKEY      0x0004
++
++struct v4l2_clip
++{
++      struct v4l2_rect        c;
++      struct v4l2_clip        *next;
++};
++
++struct v4l2_window
++{
++      struct v4l2_rect        w;
++      enum v4l2_field         field;
++      __u32                   chromakey;
++      struct v4l2_clip        *clips;
++      __u32                   clipcount;
++      void                    *bitmap;
++};
++
++
++/*
++ *    C A P T U R E   P A R A M E T E R S
++ */
++struct v4l2_captureparm
++{
++      __u32              capability;    /*  Supported modes */
++      __u32              capturemode;   /*  Current mode */
++      struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
++      __u32              extendedmode;  /*  Driver-specific extensions */
++      __u32              readbuffers;   /*  # of buffers for read */
++      __u32              reserved[4];
++};
++/*  Flags for 'capability' and 'capturemode' fields */
++#define V4L2_MODE_HIGHQUALITY 0x0001  /*  High quality imaging mode */
++#define V4L2_CAP_TIMEPERFRAME 0x1000  /*  timeperframe field is supported */
++
++struct v4l2_outputparm
++{
++      __u32              capability;   /*  Supported modes */
++      __u32              outputmode;   /*  Current mode */
++      struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
++      __u32              extendedmode; /*  Driver-specific extensions */
++      __u32              writebuffers; /*  # of buffers for write */
++      __u32              reserved[4];
++};
++
++/*
++ *    I N P U T   I M A G E   C R O P P I N G
++ */
++
++struct v4l2_cropcap {
++      enum v4l2_buf_type      type;   
++        struct v4l2_rect        bounds;
++        struct v4l2_rect        defrect;
++        struct v4l2_fract       pixelaspect;
++};
++
++struct v4l2_crop {
++      enum v4l2_buf_type      type;
++      struct v4l2_rect        c;
++};
++
++/*
++ *      A N A L O G   V I D E O   S T A N D A R D
++ */
++
++typedef __u64 v4l2_std_id;
++
++/* one bit for each */
++#define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
++#define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
++#define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
++#define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
++#define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
++#define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
++#define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
++#define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
++
++#define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
++#define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
++#define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
++#define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
++
++#define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)
++#define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)
++
++#define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
++#define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
++#define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
++#define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
++#define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
++#define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
++#define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
++
++/* ATSC/HDTV */
++#define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
++#define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
++
++/* some common needed stuff */
++#define V4L2_STD_PAL_BG               (V4L2_STD_PAL_B         |\
++                               V4L2_STD_PAL_B1        |\
++                               V4L2_STD_PAL_G)
++#define V4L2_STD_PAL_DK               (V4L2_STD_PAL_D         |\
++                               V4L2_STD_PAL_D1        |\
++                               V4L2_STD_PAL_K)
++#define V4L2_STD_PAL          (V4L2_STD_PAL_BG        |\
++                               V4L2_STD_PAL_DK        |\
++                               V4L2_STD_PAL_H         |\
++                               V4L2_STD_PAL_I)
++#define V4L2_STD_NTSC           (V4L2_STD_NTSC_M      |\
++                               V4L2_STD_NTSC_M_JP)
++#define V4L2_STD_SECAM                (V4L2_STD_SECAM_B       |\
++                               V4L2_STD_SECAM_D       |\
++                               V4L2_STD_SECAM_G       |\
++                               V4L2_STD_SECAM_H       |\
++                               V4L2_STD_SECAM_K       |\
++                               V4L2_STD_SECAM_K1      |\
++                               V4L2_STD_SECAM_L)
++
++#define V4L2_STD_525_60               (V4L2_STD_PAL_M         |\
++                               V4L2_STD_PAL_60        |\
++                               V4L2_STD_NTSC)
++#define V4L2_STD_625_50               (V4L2_STD_PAL           |\
++                               V4L2_STD_PAL_N         |\
++                               V4L2_STD_PAL_Nc        |\
++                               V4L2_STD_SECAM)
++
++#define V4L2_STD_UNKNOWN        0
++#define V4L2_STD_ALL            (V4L2_STD_525_60      |\
++                               V4L2_STD_625_50)
++
++struct v4l2_standard
++{
++      __u32                index;
++      v4l2_std_id          id;
++      __u8                 name[24];
++      struct v4l2_fract    frameperiod; /* Frames, not fields */
++      __u32                framelines;
++      __u32                reserved[4];
++};
++
++
++/*
++ *    V I D E O   I N P U T S
++ */
++struct v4l2_input
++{
++      __u32        index;             /*  Which input */
++      __u8         name[32];          /*  Label */
++      __u32        type;              /*  Type of input */
++      __u32        audioset;          /*  Associated audios (bitfield) */
++      __u32        tuner;             /*  Associated tuner */
++      v4l2_std_id  std;
++      __u32        status;
++      __u32        reserved[4];
++};
++/*  Values for the 'type' field */
++#define V4L2_INPUT_TYPE_TUNER         1
++#define V4L2_INPUT_TYPE_CAMERA                2
++
++/* field 'status' - general */
++#define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
++#define V4L2_IN_ST_NO_SIGNAL   0x00000002
++#define V4L2_IN_ST_NO_COLOR    0x00000004
++
++/* field 'status' - analog */
++#define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
++#define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
++
++/* field 'status' - digital */
++#define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
++#define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
++#define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
++
++/* field 'status' - VCR and set-top box */
++#define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
++#define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
++#define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
++
++/*
++ *    V I D E O   O U T P U T S
++ */
++struct v4l2_output
++{
++      __u32        index;             /*  Which output */
++      __u8         name[32];          /*  Label */
++      __u32        type;              /*  Type of output */
++      __u32        audioset;          /*  Associated audios (bitfield) */
++      __u32        modulator;         /*  Associated modulator */
++      v4l2_std_id  std;
++      __u32        reserved[4];
++};
++/*  Values for the 'type' field */
++#define V4L2_OUTPUT_TYPE_MODULATOR            1
++#define V4L2_OUTPUT_TYPE_ANALOG                       2
++#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY     3
++
++/*
++ *    C O N T R O L S
++ */
++struct v4l2_control
++{
++      __u32                id;
++      __s32                value;
++};
++
++/*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
++struct v4l2_queryctrl
++{
++      __u32                id;
++      enum v4l2_ctrl_type  type;
++      __u8                 name[32];  /* Whatever */
++      __s32                minimum;   /* Note signedness */
++      __s32                maximum;
++      __s32                step;
++      __s32                default_value;
++      __u32                flags;
++      __u32                reserved[2];
++};
++
++/*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
++struct v4l2_querymenu
++{
++      __u32           id;
++      __u32           index;
++      __u8            name[32];       /* Whatever */
++      __u32           reserved;
++};
++
++/*  Control flags  */
++#define V4L2_CTRL_FLAG_DISABLED               0x0001
++#define V4L2_CTRL_FLAG_GRABBED                0x0002
++
++/*  Control IDs defined by V4L2 */
++#define V4L2_CID_BASE                 0x00980900
++/*  IDs reserved for driver specific controls */
++#define V4L2_CID_PRIVATE_BASE         0x08000000
++
++#define V4L2_CID_BRIGHTNESS           (V4L2_CID_BASE+0)
++#define V4L2_CID_CONTRAST             (V4L2_CID_BASE+1)
++#define V4L2_CID_SATURATION           (V4L2_CID_BASE+2)
++#define V4L2_CID_HUE                  (V4L2_CID_BASE+3)
++#define V4L2_CID_AUDIO_VOLUME         (V4L2_CID_BASE+5)
++#define V4L2_CID_AUDIO_BALANCE                (V4L2_CID_BASE+6)
++#define V4L2_CID_AUDIO_BASS           (V4L2_CID_BASE+7)
++#define V4L2_CID_AUDIO_TREBLE         (V4L2_CID_BASE+8)
++#define V4L2_CID_AUDIO_MUTE           (V4L2_CID_BASE+9)
++#define V4L2_CID_AUDIO_LOUDNESS               (V4L2_CID_BASE+10)
++#define V4L2_CID_BLACK_LEVEL          (V4L2_CID_BASE+11)
++#define V4L2_CID_AUTO_WHITE_BALANCE   (V4L2_CID_BASE+12)
++#define V4L2_CID_DO_WHITE_BALANCE     (V4L2_CID_BASE+13)
++#define V4L2_CID_RED_BALANCE          (V4L2_CID_BASE+14)
++#define V4L2_CID_BLUE_BALANCE         (V4L2_CID_BASE+15)
++#define V4L2_CID_GAMMA                        (V4L2_CID_BASE+16)
++#define V4L2_CID_WHITENESS            (V4L2_CID_GAMMA) /* ? Not sure */
++#define V4L2_CID_EXPOSURE             (V4L2_CID_BASE+17)
++#define V4L2_CID_AUTOGAIN             (V4L2_CID_BASE+18)
++#define V4L2_CID_GAIN                 (V4L2_CID_BASE+19)
++#define V4L2_CID_HFLIP                        (V4L2_CID_BASE+20)
++#define V4L2_CID_VFLIP                        (V4L2_CID_BASE+21)
++#define V4L2_CID_HCENTER              (V4L2_CID_BASE+22)
++#define V4L2_CID_VCENTER              (V4L2_CID_BASE+23)
++#define V4L2_CID_LASTP1                       (V4L2_CID_BASE+24) /* last CID + 1 */
++
++/*
++ *    T U N I N G
++ */
++struct v4l2_tuner
++{
++      __u32                   index;
++      __u8                    name[32];
++      enum v4l2_tuner_type    type;
++      __u32                   capability;
++      __u32                   rangelow;
++      __u32                   rangehigh;
++      __u32                   rxsubchans;
++      __u32                   audmode;
++      __s32                   signal;
++      __s32                   afc;
++      __u32                   reserved[4];
++};
++
++struct v4l2_modulator
++{
++      __u32                   index;
++      __u8                    name[32];
++      __u32                   capability;
++      __u32                   rangelow;
++      __u32                   rangehigh;
++      __u32                   txsubchans;
++      __u32                   reserved[4];
++};
++
++/*  Flags for the 'capability' field */
++#define V4L2_TUNER_CAP_LOW            0x0001
++#define V4L2_TUNER_CAP_NORM           0x0002
++#define V4L2_TUNER_CAP_STEREO         0x0010
++#define V4L2_TUNER_CAP_LANG2          0x0020
++#define V4L2_TUNER_CAP_SAP            0x0020
++#define V4L2_TUNER_CAP_LANG1          0x0040
++
++/*  Flags for the 'rxsubchans' field */
++#define V4L2_TUNER_SUB_MONO           0x0001
++#define V4L2_TUNER_SUB_STEREO         0x0002
++#define V4L2_TUNER_SUB_LANG2          0x0004
++#define V4L2_TUNER_SUB_SAP            0x0004
++#define V4L2_TUNER_SUB_LANG1          0x0008
++
++/*  Values for the 'audmode' field */
++#define V4L2_TUNER_MODE_MONO          0x0000
++#define V4L2_TUNER_MODE_STEREO                0x0001
++#define V4L2_TUNER_MODE_LANG2         0x0002
++#define V4L2_TUNER_MODE_SAP           0x0002
++#define V4L2_TUNER_MODE_LANG1         0x0003
++
++struct v4l2_frequency
++{
++      __u32                 tuner;
++      enum v4l2_tuner_type  type;
++        __u32               frequency;
++      __u32                 reserved[8];
++};
++
++/*
++ *    A U D I O
++ */
++struct v4l2_audio
++{
++      __u32   index;
++      __u8    name[32];
++      __u32   capability;
++      __u32   mode;
++      __u32   reserved[2];
++};
++/*  Flags for the 'capability' field */
++#define V4L2_AUDCAP_STEREO            0x00001
++#define V4L2_AUDCAP_AVL                       0x00002
++
++/*  Flags for the 'mode' field */
++#define V4L2_AUDMODE_AVL              0x00001
++
++struct v4l2_audioout
++{
++      __u32   index;
++      __u8    name[32];
++      __u32   capability;
++      __u32   mode;
++      __u32   reserved[2];
++};
++
++/*
++ *    D A T A   S E R V I C E S   ( V B I )
++ *
++ *    Data services API by Michael Schimek
++ */
++
++struct v4l2_vbi_format
++{
++      __u32   sampling_rate;          /* in 1 Hz */
++      __u32   offset;
++      __u32   samples_per_line;
++      __u32   sample_format;          /* V4L2_PIX_FMT_* */
++      __s32   start[2];
++      __u32   count[2];
++      __u32   flags;                  /* V4L2_VBI_* */
++      __u32   reserved[2];            /* must be zero */
++};
++
++/*  VBI flags  */
++#define V4L2_VBI_UNSYNC               (1<< 0)
++#define V4L2_VBI_INTERLACED   (1<< 1)
++
++
++/*
++ *    A G G R E G A T E   S T R U C T U R E S
++ */
++
++/*    Stream data format
++ */
++struct v4l2_format
++{
++      enum v4l2_buf_type type;
++      union
++      {
++              struct v4l2_pix_format  pix;  // V4L2_BUF_TYPE_VIDEO_CAPTURE
++              struct v4l2_window      win;  // V4L2_BUF_TYPE_VIDEO_OVERLAY
++              struct v4l2_vbi_format  vbi;  // V4L2_BUF_TYPE_VBI_CAPTURE
++              __u8    raw_data[200];        // user-defined
++      } fmt;
++};
++
++
++/*    Stream type-dependent parameters
++ */
++struct v4l2_streamparm
++{
++      enum v4l2_buf_type type;
++      union
++      {
++              struct v4l2_captureparm capture;
++              struct v4l2_outputparm  output;
++              __u8    raw_data[200];  /* user-defined */
++      } parm;
++};
++
++
++
++/*
++ *    I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
++ *
++ */
++#define VIDIOC_QUERYCAP               _IOR  ('V',  0, struct v4l2_capability)
++#define VIDIOC_RESERVED               _IO   ('V',  1)
++#define VIDIOC_ENUM_FMT         _IOWR ('V',  2, struct v4l2_fmtdesc)
++#define VIDIOC_G_FMT          _IOWR ('V',  4, struct v4l2_format)
++#define VIDIOC_S_FMT          _IOWR ('V',  5, struct v4l2_format)
++#if 0
++#define VIDIOC_G_COMP         _IOR  ('V',  6, struct v4l2_compression)
++#define VIDIOC_S_COMP         _IOW  ('V',  7, struct v4l2_compression)
++#endif
++#define VIDIOC_REQBUFS                _IOWR ('V',  8, struct v4l2_requestbuffers)
++#define VIDIOC_QUERYBUF               _IOWR ('V',  9, struct v4l2_buffer)
++#define VIDIOC_G_FBUF         _IOR  ('V', 10, struct v4l2_framebuffer)
++#define VIDIOC_S_FBUF         _IOW  ('V', 11, struct v4l2_framebuffer)
++#define VIDIOC_OVERLAY                _IOW  ('V', 14, int)
++#define VIDIOC_QBUF           _IOWR ('V', 15, struct v4l2_buffer)
++#define VIDIOC_DQBUF          _IOWR ('V', 17, struct v4l2_buffer)
++#define VIDIOC_STREAMON               _IOW  ('V', 18, int)
++#define VIDIOC_STREAMOFF      _IOW  ('V', 19, int)
++#define VIDIOC_G_PARM         _IOWR ('V', 21, struct v4l2_streamparm)
++#define VIDIOC_S_PARM         _IOWR ('V', 22, struct v4l2_streamparm)
++#define VIDIOC_G_STD          _IOR  ('V', 23, v4l2_std_id)
++#define VIDIOC_S_STD          _IOW  ('V', 24, v4l2_std_id)
++#define VIDIOC_ENUMSTD                _IOWR ('V', 25, struct v4l2_standard)
++#define VIDIOC_ENUMINPUT      _IOWR ('V', 26, struct v4l2_input)
++#define VIDIOC_G_CTRL         _IOWR ('V', 27, struct v4l2_control)
++#define VIDIOC_S_CTRL         _IOWR ('V', 28, struct v4l2_control)
++#define VIDIOC_G_TUNER                _IOWR ('V', 29, struct v4l2_tuner)
++#define VIDIOC_S_TUNER                _IOW  ('V', 30, struct v4l2_tuner)
++#define VIDIOC_G_AUDIO                _IOR  ('V', 33, struct v4l2_audio)
++#define VIDIOC_S_AUDIO                _IOW  ('V', 34, struct v4l2_audio)
++#define VIDIOC_QUERYCTRL      _IOWR ('V', 36, struct v4l2_queryctrl)
++#define VIDIOC_QUERYMENU      _IOWR ('V', 37, struct v4l2_querymenu)
++#define VIDIOC_G_INPUT                _IOR  ('V', 38, int)
++#define VIDIOC_S_INPUT                _IOWR ('V', 39, int)
++#define VIDIOC_G_OUTPUT               _IOR  ('V', 46, int)
++#define VIDIOC_S_OUTPUT               _IOWR ('V', 47, int)
++#define VIDIOC_ENUMOUTPUT     _IOWR ('V', 48, struct v4l2_output)
++#define VIDIOC_G_AUDOUT               _IOR  ('V', 49, struct v4l2_audioout)
++#define VIDIOC_S_AUDOUT               _IOW  ('V', 50, struct v4l2_audioout)
++#define VIDIOC_G_MODULATOR    _IOWR ('V', 54, struct v4l2_modulator)
++#define VIDIOC_S_MODULATOR    _IOW  ('V', 55, struct v4l2_modulator)
++#define VIDIOC_G_FREQUENCY    _IOWR ('V', 56, struct v4l2_frequency)
++#define VIDIOC_S_FREQUENCY    _IOW  ('V', 57, struct v4l2_frequency)
++#define VIDIOC_CROPCAP                _IOR  ('V', 58, struct v4l2_cropcap)
++#define VIDIOC_G_CROP         _IOWR ('V', 59, struct v4l2_crop)
++#define VIDIOC_S_CROP         _IOW  ('V', 60, struct v4l2_crop)
++#define VIDIOC_G_JPEGCOMP     _IOR  ('V', 61, struct v4l2_jpegcompression)
++#define VIDIOC_S_JPEGCOMP     _IOW  ('V', 62, struct v4l2_jpegcompression)
++#define VIDIOC_QUERYSTD       _IOR  ('V', 63, v4l2_std_id)
++#define VIDIOC_TRY_FMT        _IOWR ('V', 64, struct v4l2_format)
++#define VIDIOC_ENUMAUDIO      _IOWR ('V', 65, struct v4l2_audio)
++#define VIDIOC_ENUMAUDOUT     _IOWR ('V', 66, struct v4l2_audioout)
++#define VIDIOC_G_PRIORITY       _IOR  ('V', 67, enum v4l2_priority)
++#define VIDIOC_S_PRIORITY       _IOW  ('V', 68, enum v4l2_priority)
++
++/* for compatibility, will go away some day */
++#define VIDIOC_OVERLAY_OLD            _IOWR ('V', 14, int)
++#define VIDIOC_S_PARM_OLD             _IOW  ('V', 22, struct v4l2_streamparm)
++#define VIDIOC_S_CTRL_OLD             _IOW  ('V', 28, struct v4l2_control)
++#define VIDIOC_G_AUDIO_OLD            _IOWR ('V', 33, struct v4l2_audio)
++#define VIDIOC_G_AUDOUT_OLD           _IOWR ('V', 49, struct v4l2_audioout)
++
++#define BASE_VIDIOC_PRIVATE   192             /* 192-255 are private */
++
++
++#ifdef __KERNEL__
++/*
++ *
++ *    V 4 L 2   D R I V E R   H E L P E R   A P I
++ *
++ *    Some commonly needed functions for drivers (v4l2-common.o module)
++ */
++#include <linux/fs.h>
++
++/*  Video standard functions  */
++extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
++extern int v4l2_video_std_construct(struct v4l2_standard *vs,
++                                  int id, char *name);
++
++/* prority handling */
++struct v4l2_prio_state {
++      atomic_t prios[4];
++};
++int v4l2_prio_init(struct v4l2_prio_state *global);
++int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
++                   enum v4l2_priority new);
++int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
++int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
++enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
++int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
++
++/* names for fancy debug output */
++extern char *v4l2_field_names[];
++extern char *v4l2_type_names[];
++extern char *v4l2_ioctl_names[];
++
++/*  Compatibility layer interface  --  v4l1-compat module */
++typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
++                         unsigned int cmd, void *arg);
++int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
++                             int cmd, void *arg, v4l2_kioctl driver_ioctl);
++
++#endif /* __KERNEL__ */
++#endif /* __LINUX_VIDEODEV2_H */
++
++/*
++ * Local variables:
++ * c-basic-offset: 8
++ * End:
++ */
+Index: linux-2.6.24.7/arch/arm/mach-s3c2440/camera/videodev.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/arch/arm/mach-s3c2440/camera/videodev.c     2008-12-11 22:46:49.000000000 +0100
+@@ -0,0 +1,332 @@
++/*
++ * Video capture interface for Linux Character Device Driver.
++ *              based on  
++ *              Alan Cox, <alan@redhat.com> video4linux 
++ *
++ * Author:      SW.LEE <hitchcar@samsung.com>        
++ *              2004 (C) Samsung Electronics 
++ *              Modified for S3C2440/S3C24A0 Interface
++ *
++ * This file is released under the GPLv2
++ */
++
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/smp_lock.h>
++#include <linux/mm.h>
++#include <linux/string.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/kmod.h>
++#include <linux/slab.h>
++/* #include <linux/devfs_fs_kernel.h> */
++#include <linux/miscdevice.h>
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <asm/semaphore.h>
++
++
++
++#define CONFIG_VIDEO_V4L1_COMPAT
++#include <linux/videodev.h>
++#include "camif.h"
++#include "miscdevice.h"
++
++
++static DECLARE_MUTEX(videodev_lock);
++
++const char *fimc_version = "$Id: videodev.c,v 1.1.1.1 2004/04/27 03:52:50 swlee Exp $";
++
++#define VIDEO_NAME              "video4linux"
++
++
++#define VIDEO_NUM_DEVICES     2
++static struct video_device *video_device[VIDEO_NUM_DEVICES];
++
++static inline struct video_device * get_vd(int nr)
++{
++      if ( nr == CODEC_MINOR)
++              return video_device[0];
++      else {
++              assert ( nr & PREVIEW_MINOR);
++              return video_device[1];
++      }
++}
++
++static inline void set_vd ( struct video_device * vd, int nr)
++{
++      if ( nr == CODEC_MINOR)
++              video_device[0] = vd;
++      else {
++              assert ( nr & PREVIEW_MINOR);
++              video_device[1] = vd;
++      }
++}
++
++static inline int video_release(struct inode *inode, struct file *f)
++{
++      int minor = MINOR(inode->i_rdev);
++      struct video_device *vfd;
++
++      vfd = get_vd(minor);
++#if 1 /* needed until all drivers are fixed */
++      if (!vfd->release)
++              return 0;
++#endif
++      vfd->release(vfd);
++      return 0;
++}
++
++struct video_device* video_devdata(struct file *file)
++{
++      return video_device[iminor(file->f_dentry->d_inode)];
++}
++
++
++/*
++ *    Open a video device.
++ */
++static int video_open(struct inode *inode, struct file *file)
++{
++      int minor = MINOR(inode->i_rdev);
++      int err = 0;
++      struct video_device *vfl;
++      struct file_operations const *old_fops;
++      
++      down(&videodev_lock);
++
++      vfl = get_vd(minor);
++
++      old_fops = file->f_op;
++      file->f_op = fops_get(vfl->fops);
++      if(file->f_op->open)
++              err = file->f_op->open(inode,file);
++      if (err) {
++              fops_put(file->f_op);
++              file->f_op = fops_get(old_fops);
++      }
++      fops_put(old_fops);
++      up(&videodev_lock);
++      return err;
++}
++
++/*
++ * open/release helper functions -- handle exclusive opens
++ */
++extern int video_exclusive_open(struct inode *inode, struct file *file)
++{
++      struct  video_device *vfl = get_vd(MINOR(inode->i_rdev));
++      int retval = 0;
++
++      mutex_lock(&vfl->lock);
++      if (vfl->users) {
++              retval = -EBUSY;
++      } else {
++              vfl->users++;
++      }
++      mutex_unlock(&vfl->lock);
++      return retval;
++}
++
++extern int video_exclusive_release(struct inode *inode, struct file *file)
++{
++      struct  video_device *vfl = get_vd(MINOR(inode->i_rdev));
++      vfl->users--;
++      return 0;
++}
++
++int
++video_usercopy(struct inode *inode, struct file *file,
++             unsigned int cmd, unsigned long arg,
++             int (*func)(struct inode *inode, struct file *file,
++                         unsigned int cmd, void *arg))
++{
++      char    sbuf[128];
++      void    *mbuf = NULL;
++      void    *parg = NULL;
++      int     err  = -EINVAL;
++
++      //      cmd = video_fix_command(cmd);
++
++      /*  Copy arguments into temp kernel buffer  */
++      switch (_IOC_DIR(cmd)) {
++      case _IOC_NONE:
++              parg = (void *)arg;
++              break;
++      case _IOC_READ: