Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm

* 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm: (49 commits)
[ARM] idle: clean up pm_idle calling, obey hlt_counter
[ARM] S3C: Fix gpio-config off-by-one bug
[ARM] S3C64XX: add to_irq() support for EINT() GPIO
[ARM] S3C64XX: clock.c: fix typo in usb-host clock ctrlbit
[ARM] S3C64XX: fix HCLK gate defines
[ARM] Update mach-types
[ARM] wire up rt_tgsigqueueinfo and perf_counter_open
OMAP2 clock/powerdomain: off by 1 error in loop timeout comparisons
OMAP3 SDRC: set FIXEDDELAY when disabling SDRC DLL
OMAP3: Add support for DPLL3 divisor values higher than 2
OMAP3 SRAM: convert SRAM code to use macros rather than magic numbers
OMAP3 SRAM: add more comments on the SRAM code
OMAP3 clock/SDRC: program SDRC_MR register during SDRC clock change
OMAP3 clock: add a short delay when lowering CORE clk rate
OMAP3 clock: initialize SDRC timings at kernel start
OMAP3 clock: remove wait for DPLL3 M2 clock to stabilize
[ARM] Add old Feroceon support to compressed/head.S
[ARM] 5559/1: Limit the stack unwinding caused by a kthread exit
[ARM] 5558/1: Add extra checks to ARM unwinder to avoid tracing corrupt stacks
[ARM] 5557/1: Discard some ARM.ex*.*exit.text sections when !HOTPLUG or !HOTPLUG_CPU
...

+5268 -221
+21
Documentation/kernel-parameters.txt
··· 1369 1369 min_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory below this 1370 1370 physical address is ignored. 1371 1371 1372 + mini2440= [ARM,HW,KNL] 1373 + Format:[0..2][b][c][t] 1374 + Default: "0tb" 1375 + MINI2440 configuration specification: 1376 + 0 - The attached screen is the 3.5" TFT 1377 + 1 - The attached screen is the 7" TFT 1378 + 2 - The VGA Shield is attached (1024x768) 1379 + Leaving out the screen size parameter will not load 1380 + the TFT driver, and the framebuffer will be left 1381 + unconfigured. 1382 + b - Enable backlight. The TFT backlight pin will be 1383 + linked to the kernel VESA blanking code and a GPIO 1384 + LED. This parameter is not necessary when using the 1385 + VGA shield. 1386 + c - Enable the s3c camera interface. 1387 + t - Reserved for enabling touchscreen support. The 1388 + touchscreen support is not enabled in the mainstream 1389 + kernel as of 2.6.30, a preliminary port can be found 1390 + in the "bleeding edge" mini2440 support kernel at 1391 + http://repo.or.cz/w/linux-2.6/mini2440.git 1392 + 1372 1393 mminit_loglevel= 1373 1394 [KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this 1374 1395 parameter allows control of the logging verbosity for
+22
MAINTAINERS
··· 653 653 L: openezx-devel@lists.openezx.org (subscribers-only) 654 654 W: http://www.openezx.org/ 655 655 S: Maintained 656 + T: topgit git://git.openezx.org/openezx.git 657 + F: arch/arm/mach-pxa/ezx.c 656 658 657 659 ARM/FARADAY FA526 PORT 658 660 P: Paulius Zaleckas ··· 776 774 M: philipp.zabel@gmail.com 777 775 S: Maintained 778 776 777 + ARM/MIOA701 MACHINE SUPPORT 778 + P: Robert Jarzmik 779 + M: robert.jarzmik@free.fr 780 + L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) 781 + F: arch/arm/mach-pxa/mioa701.c 782 + S: Maintained 783 + 779 784 ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT 780 785 P: Michael Petchkovsky 781 786 M: mkpetch@internode.on.net 782 787 S: Maintained 788 + 789 + ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT 790 + P: Nelson Castillo 791 + M: arhuaco@freaks-unidos.net 792 + L: openmoko-kernel@lists.openmoko.org (subscribers-only) 793 + W: http://wiki.openmoko.org/wiki/Neo_FreeRunner 794 + S: Supported 783 795 784 796 ARM/TOSA MACHINE SUPPORT 785 797 P: Dmitry Eremin-Solenikov ··· 805 789 ARM/PALMTX,PALMT5,PALMLD,PALMTE2 SUPPORT 806 790 P: Marek Vasut 807 791 M: marek.vasut@gmail.com 792 + W: http://hackndev.com 793 + S: Maintained 794 + 795 + ARM/PALM TREO 680 SUPPORT 796 + P: Tomas Cech 797 + M: sleep_walker@suse.cz 808 798 W: http://hackndev.com 809 799 S: Maintained 810 800
+5 -1
arch/arm/Kconfig
··· 1241 1241 1242 1242 menu "CPU Power Management" 1243 1243 1244 - if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA) 1244 + if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA || ARCH_S3C64XX) 1245 1245 1246 1246 source "drivers/cpufreq/Kconfig" 1247 1247 ··· 1271 1271 depends on CPU_FREQ && ARCH_PXA && PXA25x 1272 1272 default y 1273 1273 select CPU_FREQ_DEFAULT_GOV_USERSPACE 1274 + 1275 + config CPU_FREQ_S3C64XX 1276 + bool "CPUfreq support for Samsung S3C64XX CPUs" 1277 + depends on CPU_FREQ && CPU_S3C6410 1274 1278 1275 1279 endif 1276 1280
+9
arch/arm/boot/compressed/head.S
··· 674 674 b __armv4_mmu_cache_off 675 675 b __armv5tej_mmu_cache_flush 676 676 677 + #ifdef CONFIG_CPU_FEROCEON_OLD_ID 678 + /* this conflicts with the standard ARMv5TE entry */ 679 + .long 0x41009260 @ Old Feroceon 680 + .long 0xff00fff0 681 + b __armv4_mmu_cache_on 682 + b __armv4_mmu_cache_off 683 + b __armv5tej_mmu_cache_flush 684 + #endif 685 + 677 686 .word 0x66015261 @ FA526 678 687 .word 0xff01fff1 679 688 b __fa526_cache_on
+1 -1
arch/arm/common/gic.c
··· 117 117 u32 val; 118 118 119 119 spin_lock(&irq_controller_lock); 120 - irq_desc[irq].cpu = cpu; 120 + irq_desc[irq].node = cpu; 121 121 val = readl(reg) & ~(0xff << shift); 122 122 val |= 1 << (cpu + shift); 123 123 writel(val, reg);
+6 -2
arch/arm/common/vic.c
··· 229 229 { 230 230 struct vic_device *v = vic_from_irq(irq); 231 231 unsigned int off = irq & 31; 232 + u32 bit = 1 << off; 232 233 233 234 if (!v) 234 235 return -EINVAL; 235 236 237 + if (!(bit & v->resume_sources)) 238 + return -EINVAL; 239 + 236 240 if (on) 237 - v->resume_irqs |= 1 << off; 241 + v->resume_irqs |= bit; 238 242 else 239 - v->resume_irqs &= ~(1 << off); 243 + v->resume_irqs &= ~bit; 240 244 241 245 return 0; 242 246 }
+2097
arch/arm/configs/mini2440_defconfig
··· 1 + # 2 + # Automatically generated make config: don't edit 3 + # Linux kernel version: 2.6.30-rc6 4 + # Wed May 20 12:29:51 2009 5 + # 6 + CONFIG_ARM=y 7 + CONFIG_HAVE_PWM=y 8 + CONFIG_SYS_SUPPORTS_APM_EMULATION=y 9 + CONFIG_GENERIC_GPIO=y 10 + # CONFIG_GENERIC_TIME is not set 11 + # CONFIG_GENERIC_CLOCKEVENTS is not set 12 + CONFIG_MMU=y 13 + CONFIG_NO_IOPORT=y 14 + CONFIG_GENERIC_HARDIRQS=y 15 + CONFIG_STACKTRACE_SUPPORT=y 16 + CONFIG_HAVE_LATENCYTOP_SUPPORT=y 17 + CONFIG_LOCKDEP_SUPPORT=y 18 + CONFIG_TRACE_IRQFLAGS_SUPPORT=y 19 + CONFIG_HARDIRQS_SW_RESEND=y 20 + CONFIG_GENERIC_IRQ_PROBE=y 21 + CONFIG_RWSEM_GENERIC_SPINLOCK=y 22 + # CONFIG_ARCH_HAS_ILOG2_U32 is not set 23 + # CONFIG_ARCH_HAS_ILOG2_U64 is not set 24 + CONFIG_GENERIC_HWEIGHT=y 25 + CONFIG_GENERIC_CALIBRATE_DELAY=y 26 + CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 27 + CONFIG_VECTORS_BASE=0xffff0000 28 + CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 29 + 30 + # 31 + # General setup 32 + # 33 + CONFIG_EXPERIMENTAL=y 34 + CONFIG_BROKEN_ON_SMP=y 35 + CONFIG_INIT_ENV_ARG_LIMIT=32 36 + CONFIG_LOCALVERSION="" 37 + # CONFIG_LOCALVERSION_AUTO is not set 38 + CONFIG_SWAP=y 39 + CONFIG_SYSVIPC=y 40 + CONFIG_SYSVIPC_SYSCTL=y 41 + CONFIG_POSIX_MQUEUE=y 42 + CONFIG_POSIX_MQUEUE_SYSCTL=y 43 + # CONFIG_BSD_PROCESS_ACCT is not set 44 + # CONFIG_TASKSTATS is not set 45 + # CONFIG_AUDIT is not set 46 + 47 + # 48 + # RCU Subsystem 49 + # 50 + CONFIG_CLASSIC_RCU=y 51 + # CONFIG_TREE_RCU is not set 52 + # CONFIG_PREEMPT_RCU is not set 53 + # CONFIG_TREE_RCU_TRACE is not set 54 + # CONFIG_PREEMPT_RCU_TRACE is not set 55 + # CONFIG_IKCONFIG is not set 56 + CONFIG_LOG_BUF_SHIFT=17 57 + # CONFIG_GROUP_SCHED is not set 58 + # CONFIG_CGROUPS is not set 59 + # CONFIG_SYSFS_DEPRECATED_V2 is not set 60 + CONFIG_RELAY=y 61 + CONFIG_NAMESPACES=y 62 + CONFIG_UTS_NS=y 63 + CONFIG_IPC_NS=y 64 + # CONFIG_USER_NS is not set 65 + # CONFIG_PID_NS is not set 66 + # CONFIG_NET_NS is not set 67 + CONFIG_BLK_DEV_INITRD=y 68 + CONFIG_INITRAMFS_SOURCE="" 69 + CONFIG_RD_GZIP=y 70 + CONFIG_RD_BZIP2=y 71 + CONFIG_RD_LZMA=y 72 + CONFIG_CC_OPTIMIZE_FOR_SIZE=y 73 + CONFIG_SYSCTL=y 74 + CONFIG_ANON_INODES=y 75 + # CONFIG_EMBEDDED is not set 76 + CONFIG_UID16=y 77 + CONFIG_SYSCTL_SYSCALL=y 78 + CONFIG_KALLSYMS=y 79 + # CONFIG_KALLSYMS_ALL is not set 80 + # CONFIG_KALLSYMS_EXTRA_PASS is not set 81 + CONFIG_STRIP_ASM_SYMS=y 82 + CONFIG_HOTPLUG=y 83 + CONFIG_PRINTK=y 84 + CONFIG_BUG=y 85 + CONFIG_ELF_CORE=y 86 + CONFIG_BASE_FULL=y 87 + CONFIG_FUTEX=y 88 + CONFIG_EPOLL=y 89 + CONFIG_SIGNALFD=y 90 + CONFIG_TIMERFD=y 91 + CONFIG_EVENTFD=y 92 + CONFIG_SHMEM=y 93 + CONFIG_AIO=y 94 + CONFIG_VM_EVENT_COUNTERS=y 95 + CONFIG_SLUB_DEBUG=y 96 + # CONFIG_COMPAT_BRK is not set 97 + # CONFIG_SLAB is not set 98 + CONFIG_SLUB=y 99 + # CONFIG_SLOB is not set 100 + # CONFIG_PROFILING is not set 101 + # CONFIG_MARKERS is not set 102 + CONFIG_HAVE_OPROFILE=y 103 + # CONFIG_KPROBES is not set 104 + CONFIG_HAVE_KPROBES=y 105 + CONFIG_HAVE_KRETPROBES=y 106 + CONFIG_HAVE_CLK=y 107 + # CONFIG_SLOW_WORK is not set 108 + CONFIG_HAVE_GENERIC_DMA_COHERENT=y 109 + CONFIG_SLABINFO=y 110 + CONFIG_RT_MUTEXES=y 111 + CONFIG_BASE_SMALL=0 112 + CONFIG_MODULES=y 113 + CONFIG_MODULE_FORCE_LOAD=y 114 + CONFIG_MODULE_UNLOAD=y 115 + CONFIG_MODULE_FORCE_UNLOAD=y 116 + # CONFIG_MODVERSIONS is not set 117 + # CONFIG_MODULE_SRCVERSION_ALL is not set 118 + CONFIG_BLOCK=y 119 + CONFIG_LBD=y 120 + # CONFIG_BLK_DEV_BSG is not set 121 + CONFIG_BLK_DEV_INTEGRITY=y 122 + 123 + # 124 + # IO Schedulers 125 + # 126 + CONFIG_IOSCHED_NOOP=y 127 + CONFIG_IOSCHED_AS=y 128 + CONFIG_IOSCHED_DEADLINE=y 129 + CONFIG_IOSCHED_CFQ=y 130 + CONFIG_DEFAULT_AS=y 131 + # CONFIG_DEFAULT_DEADLINE is not set 132 + # CONFIG_DEFAULT_CFQ is not set 133 + # CONFIG_DEFAULT_NOOP is not set 134 + CONFIG_DEFAULT_IOSCHED="anticipatory" 135 + CONFIG_FREEZER=y 136 + 137 + # 138 + # System Type 139 + # 140 + # CONFIG_ARCH_AAEC2000 is not set 141 + # CONFIG_ARCH_INTEGRATOR is not set 142 + # CONFIG_ARCH_REALVIEW is not set 143 + # CONFIG_ARCH_VERSATILE is not set 144 + # CONFIG_ARCH_AT91 is not set 145 + # CONFIG_ARCH_CLPS711X is not set 146 + # CONFIG_ARCH_EBSA110 is not set 147 + # CONFIG_ARCH_EP93XX is not set 148 + # CONFIG_ARCH_GEMINI is not set 149 + # CONFIG_ARCH_FOOTBRIDGE is not set 150 + # CONFIG_ARCH_NETX is not set 151 + # CONFIG_ARCH_H720X is not set 152 + # CONFIG_ARCH_IMX is not set 153 + # CONFIG_ARCH_IOP13XX is not set 154 + # CONFIG_ARCH_IOP32X is not set 155 + # CONFIG_ARCH_IOP33X is not set 156 + # CONFIG_ARCH_IXP23XX is not set 157 + # CONFIG_ARCH_IXP2000 is not set 158 + # CONFIG_ARCH_IXP4XX is not set 159 + # CONFIG_ARCH_L7200 is not set 160 + # CONFIG_ARCH_KIRKWOOD is not set 161 + # CONFIG_ARCH_KS8695 is not set 162 + # CONFIG_ARCH_NS9XXX is not set 163 + # CONFIG_ARCH_LOKI is not set 164 + # CONFIG_ARCH_MV78XX0 is not set 165 + # CONFIG_ARCH_MXC is not set 166 + # CONFIG_ARCH_ORION5X is not set 167 + # CONFIG_ARCH_PNX4008 is not set 168 + # CONFIG_ARCH_PXA is not set 169 + # CONFIG_ARCH_MMP is not set 170 + # CONFIG_ARCH_RPC is not set 171 + # CONFIG_ARCH_SA1100 is not set 172 + CONFIG_ARCH_S3C2410=y 173 + # CONFIG_ARCH_S3C64XX is not set 174 + # CONFIG_ARCH_SHARK is not set 175 + # CONFIG_ARCH_LH7A40X is not set 176 + # CONFIG_ARCH_DAVINCI is not set 177 + # CONFIG_ARCH_OMAP is not set 178 + # CONFIG_ARCH_MSM is not set 179 + # CONFIG_ARCH_W90X900 is not set 180 + CONFIG_PLAT_S3C24XX=y 181 + CONFIG_S3C2410_CLOCK=y 182 + CONFIG_CPU_S3C244X=y 183 + CONFIG_S3C24XX_PWM=y 184 + CONFIG_S3C24XX_GPIO_EXTRA=0 185 + CONFIG_S3C2410_DMA=y 186 + # CONFIG_S3C2410_DMA_DEBUG is not set 187 + CONFIG_S3C24XX_ADC=y 188 + CONFIG_PLAT_S3C=y 189 + CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y 190 + CONFIG_CPU_LLSERIAL_S3C2440=y 191 + 192 + # 193 + # Boot options 194 + # 195 + # CONFIG_S3C_BOOT_WATCHDOG is not set 196 + # CONFIG_S3C_BOOT_ERROR_RESET is not set 197 + CONFIG_S3C_BOOT_UART_FORCE_FIFO=y 198 + 199 + # 200 + # Power management 201 + # 202 + # CONFIG_S3C2410_PM_DEBUG is not set 203 + # CONFIG_S3C2410_PM_CHECK is not set 204 + CONFIG_S3C_LOWLEVEL_UART_PORT=0 205 + CONFIG_S3C_GPIO_SPACE=0 206 + 207 + # 208 + # S3C2400 Machines 209 + # 210 + CONFIG_S3C2410_PM=y 211 + CONFIG_S3C2410_GPIO=y 212 + 213 + # 214 + # S3C2410 Machines 215 + # 216 + # CONFIG_ARCH_SMDK2410 is not set 217 + # CONFIG_ARCH_H1940 is not set 218 + # CONFIG_MACH_N30 is not set 219 + # CONFIG_ARCH_BAST is not set 220 + # CONFIG_MACH_OTOM is not set 221 + # CONFIG_MACH_AML_M5900 is not set 222 + # CONFIG_MACH_TCT_HAMMER is not set 223 + # CONFIG_MACH_VR1000 is not set 224 + # CONFIG_MACH_QT2410 is not set 225 + 226 + # 227 + # S3C2412 Machines 228 + # 229 + # CONFIG_MACH_JIVE is not set 230 + # CONFIG_MACH_SMDK2413 is not set 231 + # CONFIG_MACH_SMDK2412 is not set 232 + # CONFIG_MACH_VSTMS is not set 233 + CONFIG_CPU_S3C2440=y 234 + CONFIG_S3C2440_DMA=y 235 + 236 + # 237 + # S3C2440 Machines 238 + # 239 + # CONFIG_MACH_ANUBIS is not set 240 + # CONFIG_MACH_OSIRIS is not set 241 + # CONFIG_MACH_RX3715 is not set 242 + # CONFIG_ARCH_S3C2440 is not set 243 + # CONFIG_MACH_NEXCODER_2440 is not set 244 + # CONFIG_MACH_AT2440EVB is not set 245 + CONFIG_MACH_MINI2440=y 246 + 247 + # 248 + # S3C2442 Machines 249 + # 250 + 251 + # 252 + # S3C2443 Machines 253 + # 254 + # CONFIG_MACH_SMDK2443 is not set 255 + 256 + # 257 + # Processor Type 258 + # 259 + CONFIG_CPU_32=y 260 + CONFIG_CPU_ARM920T=y 261 + CONFIG_CPU_32v4T=y 262 + CONFIG_CPU_ABRT_EV4T=y 263 + CONFIG_CPU_PABRT_NOIFAR=y 264 + CONFIG_CPU_CACHE_V4WT=y 265 + CONFIG_CPU_CACHE_VIVT=y 266 + CONFIG_CPU_COPY_V4WB=y 267 + CONFIG_CPU_TLB_V4WBI=y 268 + CONFIG_CPU_CP15=y 269 + CONFIG_CPU_CP15_MMU=y 270 + 271 + # 272 + # Processor Features 273 + # 274 + CONFIG_ARM_THUMB=y 275 + # CONFIG_CPU_ICACHE_DISABLE is not set 276 + # CONFIG_CPU_DCACHE_DISABLE is not set 277 + # CONFIG_CPU_DCACHE_WRITETHROUGH is not set 278 + # CONFIG_OUTER_CACHE is not set 279 + 280 + # 281 + # Bus support 282 + # 283 + # CONFIG_PCI_SYSCALL is not set 284 + # CONFIG_ARCH_SUPPORTS_MSI is not set 285 + # CONFIG_PCCARD is not set 286 + 287 + # 288 + # Kernel Features 289 + # 290 + CONFIG_VMSPLIT_3G=y 291 + # CONFIG_VMSPLIT_2G is not set 292 + # CONFIG_VMSPLIT_1G is not set 293 + CONFIG_PAGE_OFFSET=0xC0000000 294 + # CONFIG_PREEMPT is not set 295 + CONFIG_HZ=200 296 + CONFIG_AEABI=y 297 + # CONFIG_OABI_COMPAT is not set 298 + CONFIG_ARCH_FLATMEM_HAS_HOLES=y 299 + # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set 300 + # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set 301 + # CONFIG_HIGHMEM is not set 302 + CONFIG_SELECT_MEMORY_MODEL=y 303 + CONFIG_FLATMEM_MANUAL=y 304 + # CONFIG_DISCONTIGMEM_MANUAL is not set 305 + # CONFIG_SPARSEMEM_MANUAL is not set 306 + CONFIG_FLATMEM=y 307 + CONFIG_FLAT_NODE_MEM_MAP=y 308 + CONFIG_PAGEFLAGS_EXTENDED=y 309 + CONFIG_SPLIT_PTLOCK_CPUS=4096 310 + # CONFIG_PHYS_ADDR_T_64BIT is not set 311 + CONFIG_ZONE_DMA_FLAG=0 312 + CONFIG_VIRT_TO_BUS=y 313 + CONFIG_UNEVICTABLE_LRU=y 314 + CONFIG_HAVE_MLOCK=y 315 + CONFIG_HAVE_MLOCKED_PAGE_BIT=y 316 + CONFIG_ALIGNMENT_TRAP=y 317 + 318 + # 319 + # Boot options 320 + # 321 + CONFIG_ZBOOT_ROM_TEXT=0 322 + CONFIG_ZBOOT_ROM_BSS=0 323 + CONFIG_CMDLINE="" 324 + # CONFIG_XIP_KERNEL is not set 325 + CONFIG_KEXEC=y 326 + CONFIG_ATAGS_PROC=y 327 + 328 + # 329 + # CPU Power Management 330 + # 331 + CONFIG_CPU_IDLE=y 332 + CONFIG_CPU_IDLE_GOV_LADDER=y 333 + 334 + # 335 + # Floating point emulation 336 + # 337 + 338 + # 339 + # At least one emulation must be selected 340 + # 341 + 342 + # 343 + # Userspace binary formats 344 + # 345 + CONFIG_BINFMT_ELF=y 346 + # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set 347 + CONFIG_HAVE_AOUT=y 348 + CONFIG_BINFMT_AOUT=m 349 + CONFIG_BINFMT_MISC=m 350 + 351 + # 352 + # Power management options 353 + # 354 + CONFIG_PM=y 355 + # CONFIG_PM_DEBUG is not set 356 + CONFIG_PM_SLEEP=y 357 + CONFIG_SUSPEND=y 358 + CONFIG_SUSPEND_FREEZER=y 359 + CONFIG_APM_EMULATION=y 360 + CONFIG_ARCH_SUSPEND_POSSIBLE=y 361 + CONFIG_NET=y 362 + 363 + # 364 + # Networking options 365 + # 366 + CONFIG_PACKET=y 367 + CONFIG_PACKET_MMAP=y 368 + CONFIG_UNIX=y 369 + CONFIG_XFRM=y 370 + CONFIG_XFRM_USER=m 371 + # CONFIG_XFRM_SUB_POLICY is not set 372 + # CONFIG_XFRM_MIGRATE is not set 373 + # CONFIG_XFRM_STATISTICS is not set 374 + CONFIG_NET_KEY=m 375 + # CONFIG_NET_KEY_MIGRATE is not set 376 + CONFIG_INET=y 377 + CONFIG_IP_MULTICAST=y 378 + CONFIG_IP_ADVANCED_ROUTER=y 379 + CONFIG_ASK_IP_FIB_HASH=y 380 + # CONFIG_IP_FIB_TRIE is not set 381 + CONFIG_IP_FIB_HASH=y 382 + CONFIG_IP_MULTIPLE_TABLES=y 383 + CONFIG_IP_ROUTE_MULTIPATH=y 384 + CONFIG_IP_ROUTE_VERBOSE=y 385 + CONFIG_IP_PNP=y 386 + CONFIG_IP_PNP_DHCP=y 387 + CONFIG_IP_PNP_BOOTP=y 388 + CONFIG_IP_PNP_RARP=y 389 + # CONFIG_NET_IPIP is not set 390 + # CONFIG_NET_IPGRE is not set 391 + CONFIG_IP_MROUTE=y 392 + CONFIG_IP_PIMSM_V1=y 393 + CONFIG_IP_PIMSM_V2=y 394 + # CONFIG_ARPD is not set 395 + CONFIG_SYN_COOKIES=y 396 + # CONFIG_INET_AH is not set 397 + # CONFIG_INET_ESP is not set 398 + # CONFIG_INET_IPCOMP is not set 399 + # CONFIG_INET_XFRM_TUNNEL is not set 400 + # CONFIG_INET_TUNNEL is not set 401 + # CONFIG_INET_XFRM_MODE_TRANSPORT is not set 402 + # CONFIG_INET_XFRM_MODE_TUNNEL is not set 403 + # CONFIG_INET_XFRM_MODE_BEET is not set 404 + # CONFIG_INET_LRO is not set 405 + CONFIG_INET_DIAG=m 406 + CONFIG_INET_TCP_DIAG=m 407 + # CONFIG_TCP_CONG_ADVANCED is not set 408 + CONFIG_TCP_CONG_CUBIC=y 409 + CONFIG_DEFAULT_TCP_CONG="cubic" 410 + # CONFIG_TCP_MD5SIG is not set 411 + # CONFIG_IPV6 is not set 412 + # CONFIG_NETWORK_SECMARK is not set 413 + CONFIG_NETFILTER=y 414 + # CONFIG_NETFILTER_DEBUG is not set 415 + CONFIG_NETFILTER_ADVANCED=y 416 + CONFIG_BRIDGE_NETFILTER=y 417 + 418 + # 419 + # Core Netfilter Configuration 420 + # 421 + # CONFIG_NETFILTER_NETLINK_QUEUE is not set 422 + # CONFIG_NETFILTER_NETLINK_LOG is not set 423 + # CONFIG_NF_CONNTRACK is not set 424 + # CONFIG_NETFILTER_XTABLES is not set 425 + # CONFIG_IP_VS is not set 426 + 427 + # 428 + # IP: Netfilter Configuration 429 + # 430 + # CONFIG_NF_DEFRAG_IPV4 is not set 431 + # CONFIG_IP_NF_QUEUE is not set 432 + # CONFIG_IP_NF_IPTABLES is not set 433 + # CONFIG_IP_NF_ARPTABLES is not set 434 + # CONFIG_BRIDGE_NF_EBTABLES is not set 435 + # CONFIG_IP_DCCP is not set 436 + # CONFIG_IP_SCTP is not set 437 + # CONFIG_TIPC is not set 438 + # CONFIG_ATM is not set 439 + CONFIG_STP=m 440 + CONFIG_GARP=m 441 + CONFIG_BRIDGE=m 442 + # CONFIG_NET_DSA is not set 443 + CONFIG_VLAN_8021Q=m 444 + CONFIG_VLAN_8021Q_GVRP=y 445 + # CONFIG_DECNET is not set 446 + CONFIG_LLC=m 447 + # CONFIG_LLC2 is not set 448 + # CONFIG_IPX is not set 449 + # CONFIG_ATALK is not set 450 + # CONFIG_X25 is not set 451 + # CONFIG_LAPB is not set 452 + # CONFIG_ECONET is not set 453 + # CONFIG_WAN_ROUTER is not set 454 + # CONFIG_PHONET is not set 455 + # CONFIG_NET_SCHED is not set 456 + # CONFIG_DCB is not set 457 + 458 + # 459 + # Network testing 460 + # 461 + CONFIG_NET_PKTGEN=m 462 + # CONFIG_HAMRADIO is not set 463 + # CONFIG_CAN is not set 464 + # CONFIG_IRDA is not set 465 + CONFIG_BT=m 466 + CONFIG_BT_L2CAP=m 467 + CONFIG_BT_SCO=m 468 + CONFIG_BT_RFCOMM=m 469 + CONFIG_BT_RFCOMM_TTY=y 470 + CONFIG_BT_BNEP=m 471 + CONFIG_BT_BNEP_MC_FILTER=y 472 + CONFIG_BT_BNEP_PROTO_FILTER=y 473 + CONFIG_BT_HIDP=m 474 + 475 + # 476 + # Bluetooth device drivers 477 + # 478 + CONFIG_BT_HCIBTUSB=m 479 + CONFIG_BT_HCIBTSDIO=m 480 + CONFIG_BT_HCIUART=m 481 + CONFIG_BT_HCIUART_H4=y 482 + CONFIG_BT_HCIUART_BCSP=y 483 + CONFIG_BT_HCIUART_LL=y 484 + CONFIG_BT_HCIBCM203X=m 485 + CONFIG_BT_HCIBPA10X=m 486 + CONFIG_BT_HCIBFUSB=m 487 + CONFIG_BT_HCIVHCI=m 488 + # CONFIG_AF_RXRPC is not set 489 + CONFIG_FIB_RULES=y 490 + CONFIG_WIRELESS=y 491 + CONFIG_CFG80211=m 492 + CONFIG_CFG80211_REG_DEBUG=y 493 + CONFIG_WIRELESS_OLD_REGULATORY=y 494 + CONFIG_WIRELESS_EXT=y 495 + CONFIG_WIRELESS_EXT_SYSFS=y 496 + CONFIG_LIB80211=m 497 + CONFIG_LIB80211_CRYPT_WEP=m 498 + CONFIG_LIB80211_CRYPT_CCMP=m 499 + CONFIG_LIB80211_CRYPT_TKIP=m 500 + # CONFIG_LIB80211_DEBUG is not set 501 + CONFIG_MAC80211=m 502 + 503 + # 504 + # Rate control algorithm selection 505 + # 506 + CONFIG_MAC80211_RC_MINSTREL=y 507 + # CONFIG_MAC80211_RC_DEFAULT_PID is not set 508 + CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y 509 + CONFIG_MAC80211_RC_DEFAULT="minstrel" 510 + CONFIG_MAC80211_MESH=y 511 + CONFIG_MAC80211_LEDS=y 512 + # CONFIG_MAC80211_DEBUGFS is not set 513 + # CONFIG_MAC80211_DEBUG_MENU is not set 514 + # CONFIG_WIMAX is not set 515 + # CONFIG_RFKILL is not set 516 + # CONFIG_NET_9P is not set 517 + 518 + # 519 + # Device Drivers 520 + # 521 + 522 + # 523 + # Generic Driver Options 524 + # 525 + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 526 + CONFIG_STANDALONE=y 527 + CONFIG_PREVENT_FIRMWARE_BUILD=y 528 + CONFIG_FW_LOADER=y 529 + # CONFIG_FIRMWARE_IN_KERNEL is not set 530 + CONFIG_EXTRA_FIRMWARE="" 531 + # CONFIG_DEBUG_DRIVER is not set 532 + # CONFIG_DEBUG_DEVRES is not set 533 + # CONFIG_SYS_HYPERVISOR is not set 534 + CONFIG_CONNECTOR=m 535 + CONFIG_MTD=y 536 + # CONFIG_MTD_DEBUG is not set 537 + CONFIG_MTD_CONCAT=y 538 + CONFIG_MTD_PARTITIONS=y 539 + # CONFIG_MTD_TESTS is not set 540 + # CONFIG_MTD_REDBOOT_PARTS is not set 541 + CONFIG_MTD_CMDLINE_PARTS=y 542 + # CONFIG_MTD_AFS_PARTS is not set 543 + # CONFIG_MTD_AR7_PARTS is not set 544 + 545 + # 546 + # User Modules And Translation Layers 547 + # 548 + CONFIG_MTD_CHAR=y 549 + CONFIG_MTD_BLKDEVS=y 550 + CONFIG_MTD_BLOCK=y 551 + CONFIG_FTL=y 552 + CONFIG_NFTL=y 553 + CONFIG_NFTL_RW=y 554 + CONFIG_INFTL=y 555 + CONFIG_RFD_FTL=y 556 + # CONFIG_SSFDC is not set 557 + # CONFIG_MTD_OOPS is not set 558 + 559 + # 560 + # RAM/ROM/Flash chip drivers 561 + # 562 + CONFIG_MTD_CFI=y 563 + CONFIG_MTD_JEDECPROBE=y 564 + CONFIG_MTD_GEN_PROBE=y 565 + # CONFIG_MTD_CFI_ADV_OPTIONS is not set 566 + CONFIG_MTD_MAP_BANK_WIDTH_1=y 567 + CONFIG_MTD_MAP_BANK_WIDTH_2=y 568 + CONFIG_MTD_MAP_BANK_WIDTH_4=y 569 + # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set 570 + # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set 571 + # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set 572 + CONFIG_MTD_CFI_I1=y 573 + CONFIG_MTD_CFI_I2=y 574 + # CONFIG_MTD_CFI_I4 is not set 575 + # CONFIG_MTD_CFI_I8 is not set 576 + # CONFIG_MTD_CFI_INTELEXT is not set 577 + CONFIG_MTD_CFI_AMDSTD=y 578 + CONFIG_MTD_CFI_STAA=y 579 + CONFIG_MTD_CFI_UTIL=y 580 + CONFIG_MTD_RAM=y 581 + CONFIG_MTD_ROM=y 582 + # CONFIG_MTD_ABSENT is not set 583 + 584 + # 585 + # Mapping drivers for chip access 586 + # 587 + # CONFIG_MTD_COMPLEX_MAPPINGS is not set 588 + # CONFIG_MTD_PHYSMAP is not set 589 + # CONFIG_MTD_ARM_INTEGRATOR is not set 590 + # CONFIG_MTD_IMPA7 is not set 591 + # CONFIG_MTD_PLATRAM is not set 592 + 593 + # 594 + # Self-contained MTD device drivers 595 + # 596 + # CONFIG_MTD_DATAFLASH is not set 597 + # CONFIG_MTD_M25P80 is not set 598 + # CONFIG_MTD_SLRAM is not set 599 + # CONFIG_MTD_PHRAM is not set 600 + # CONFIG_MTD_MTDRAM is not set 601 + # CONFIG_MTD_BLOCK2MTD is not set 602 + 603 + # 604 + # Disk-On-Chip Device Drivers 605 + # 606 + # CONFIG_MTD_DOC2000 is not set 607 + # CONFIG_MTD_DOC2001 is not set 608 + # CONFIG_MTD_DOC2001PLUS is not set 609 + CONFIG_MTD_NAND=y 610 + CONFIG_MTD_NAND_VERIFY_WRITE=y 611 + # CONFIG_MTD_NAND_ECC_SMC is not set 612 + # CONFIG_MTD_NAND_MUSEUM_IDS is not set 613 + # CONFIG_MTD_NAND_GPIO is not set 614 + CONFIG_MTD_NAND_IDS=y 615 + CONFIG_MTD_NAND_S3C2410=y 616 + # CONFIG_MTD_NAND_S3C2410_DEBUG is not set 617 + # CONFIG_MTD_NAND_S3C2410_HWECC is not set 618 + # CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set 619 + # CONFIG_MTD_NAND_DISKONCHIP is not set 620 + # CONFIG_MTD_NAND_NANDSIM is not set 621 + CONFIG_MTD_NAND_PLATFORM=y 622 + # CONFIG_MTD_ALAUDA is not set 623 + # CONFIG_MTD_ONENAND is not set 624 + 625 + # 626 + # LPDDR flash memory drivers 627 + # 628 + CONFIG_MTD_LPDDR=y 629 + CONFIG_MTD_QINFO_PROBE=y 630 + 631 + # 632 + # UBI - Unsorted block images 633 + # 634 + # CONFIG_MTD_UBI is not set 635 + # CONFIG_PARPORT is not set 636 + CONFIG_BLK_DEV=y 637 + # CONFIG_BLK_DEV_COW_COMMON is not set 638 + CONFIG_BLK_DEV_LOOP=m 639 + # CONFIG_BLK_DEV_CRYPTOLOOP is not set 640 + CONFIG_BLK_DEV_NBD=m 641 + # CONFIG_BLK_DEV_UB is not set 642 + CONFIG_BLK_DEV_RAM=y 643 + CONFIG_BLK_DEV_RAM_COUNT=16 644 + CONFIG_BLK_DEV_RAM_SIZE=65536 645 + # CONFIG_BLK_DEV_XIP is not set 646 + CONFIG_CDROM_PKTCDVD=m 647 + CONFIG_CDROM_PKTCDVD_BUFFERS=8 648 + # CONFIG_CDROM_PKTCDVD_WCACHE is not set 649 + # CONFIG_ATA_OVER_ETH is not set 650 + CONFIG_MISC_DEVICES=y 651 + # CONFIG_ICS932S401 is not set 652 + # CONFIG_ENCLOSURE_SERVICES is not set 653 + # CONFIG_ISL29003 is not set 654 + # CONFIG_C2PORT is not set 655 + 656 + # 657 + # EEPROM support 658 + # 659 + CONFIG_EEPROM_AT24=y 660 + # CONFIG_EEPROM_AT25 is not set 661 + # CONFIG_EEPROM_LEGACY is not set 662 + # CONFIG_EEPROM_93CX6 is not set 663 + CONFIG_HAVE_IDE=y 664 + # CONFIG_IDE is not set 665 + 666 + # 667 + # SCSI device support 668 + # 669 + # CONFIG_RAID_ATTRS is not set 670 + CONFIG_SCSI=m 671 + CONFIG_SCSI_DMA=y 672 + # CONFIG_SCSI_TGT is not set 673 + # CONFIG_SCSI_NETLINK is not set 674 + # CONFIG_SCSI_PROC_FS is not set 675 + 676 + # 677 + # SCSI support type (disk, tape, CD-ROM) 678 + # 679 + CONFIG_BLK_DEV_SD=m 680 + # CONFIG_CHR_DEV_ST is not set 681 + # CONFIG_CHR_DEV_OSST is not set 682 + # CONFIG_BLK_DEV_SR is not set 683 + CONFIG_CHR_DEV_SG=m 684 + # CONFIG_CHR_DEV_SCH is not set 685 + 686 + # 687 + # Some SCSI devices (e.g. CD jukebox) support multiple LUNs 688 + # 689 + # CONFIG_SCSI_MULTI_LUN is not set 690 + # CONFIG_SCSI_CONSTANTS is not set 691 + # CONFIG_SCSI_LOGGING is not set 692 + # CONFIG_SCSI_SCAN_ASYNC is not set 693 + CONFIG_SCSI_WAIT_SCAN=m 694 + 695 + # 696 + # SCSI Transports 697 + # 698 + # CONFIG_SCSI_SPI_ATTRS is not set 699 + # CONFIG_SCSI_FC_ATTRS is not set 700 + # CONFIG_SCSI_ISCSI_ATTRS is not set 701 + # CONFIG_SCSI_SAS_LIBSAS is not set 702 + # CONFIG_SCSI_SRP_ATTRS is not set 703 + # CONFIG_SCSI_LOWLEVEL is not set 704 + # CONFIG_SCSI_DH is not set 705 + # CONFIG_SCSI_OSD_INITIATOR is not set 706 + # CONFIG_ATA is not set 707 + # CONFIG_MD is not set 708 + CONFIG_NETDEVICES=y 709 + CONFIG_COMPAT_NET_DEV_OPS=y 710 + # CONFIG_DUMMY is not set 711 + # CONFIG_BONDING is not set 712 + # CONFIG_MACVLAN is not set 713 + # CONFIG_EQUALIZER is not set 714 + CONFIG_TUN=m 715 + # CONFIG_VETH is not set 716 + # CONFIG_PHYLIB is not set 717 + CONFIG_NET_ETHERNET=y 718 + CONFIG_MII=y 719 + # CONFIG_AX88796 is not set 720 + # CONFIG_SMC91X is not set 721 + CONFIG_DM9000=y 722 + CONFIG_DM9000_DEBUGLEVEL=4 723 + # CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set 724 + # CONFIG_ENC28J60 is not set 725 + # CONFIG_ETHOC is not set 726 + # CONFIG_SMC911X is not set 727 + # CONFIG_SMSC911X is not set 728 + # CONFIG_DNET is not set 729 + # CONFIG_IBM_NEW_EMAC_ZMII is not set 730 + # CONFIG_IBM_NEW_EMAC_RGMII is not set 731 + # CONFIG_IBM_NEW_EMAC_TAH is not set 732 + # CONFIG_IBM_NEW_EMAC_EMAC4 is not set 733 + # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set 734 + # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set 735 + # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set 736 + # CONFIG_B44 is not set 737 + # CONFIG_NETDEV_1000 is not set 738 + # CONFIG_NETDEV_10000 is not set 739 + 740 + # 741 + # Wireless LAN 742 + # 743 + # CONFIG_WLAN_PRE80211 is not set 744 + CONFIG_WLAN_80211=y 745 + CONFIG_LIBERTAS=m 746 + # CONFIG_LIBERTAS_USB is not set 747 + CONFIG_LIBERTAS_SDIO=m 748 + # CONFIG_LIBERTAS_SPI is not set 749 + # CONFIG_LIBERTAS_DEBUG is not set 750 + # CONFIG_LIBERTAS_THINFIRM is not set 751 + # CONFIG_AT76C50X_USB is not set 752 + # CONFIG_USB_ZD1201 is not set 753 + # CONFIG_USB_NET_RNDIS_WLAN is not set 754 + # CONFIG_RTL8187 is not set 755 + # CONFIG_MAC80211_HWSIM is not set 756 + # CONFIG_P54_COMMON is not set 757 + # CONFIG_AR9170_USB is not set 758 + CONFIG_HOSTAP=m 759 + CONFIG_HOSTAP_FIRMWARE=y 760 + CONFIG_HOSTAP_FIRMWARE_NVRAM=y 761 + # CONFIG_B43 is not set 762 + # CONFIG_B43LEGACY is not set 763 + CONFIG_ZD1211RW=m 764 + CONFIG_ZD1211RW_DEBUG=y 765 + # CONFIG_RT2X00 is not set 766 + 767 + # 768 + # Enable WiMAX (Networking options) to see the WiMAX drivers 769 + # 770 + 771 + # 772 + # USB Network Adapters 773 + # 774 + # CONFIG_USB_CATC is not set 775 + # CONFIG_USB_KAWETH is not set 776 + # CONFIG_USB_PEGASUS is not set 777 + # CONFIG_USB_RTL8150 is not set 778 + # CONFIG_USB_USBNET is not set 779 + # CONFIG_WAN is not set 780 + CONFIG_PPP=m 781 + CONFIG_PPP_MULTILINK=y 782 + CONFIG_PPP_FILTER=y 783 + CONFIG_PPP_ASYNC=m 784 + CONFIG_PPP_SYNC_TTY=m 785 + CONFIG_PPP_DEFLATE=m 786 + CONFIG_PPP_BSDCOMP=m 787 + CONFIG_PPP_MPPE=m 788 + # CONFIG_PPPOE is not set 789 + # CONFIG_PPPOL2TP is not set 790 + # CONFIG_SLIP is not set 791 + CONFIG_SLHC=m 792 + # CONFIG_NETCONSOLE is not set 793 + # CONFIG_NETPOLL is not set 794 + # CONFIG_NET_POLL_CONTROLLER is not set 795 + # CONFIG_ISDN is not set 796 + 797 + # 798 + # Input device support 799 + # 800 + CONFIG_INPUT=y 801 + CONFIG_INPUT_FF_MEMLESS=y 802 + # CONFIG_INPUT_POLLDEV is not set 803 + 804 + # 805 + # Userland interfaces 806 + # 807 + CONFIG_INPUT_MOUSEDEV=y 808 + CONFIG_INPUT_MOUSEDEV_PSAUX=y 809 + CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 810 + CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 811 + # CONFIG_INPUT_JOYDEV is not set 812 + CONFIG_INPUT_EVDEV=y 813 + CONFIG_INPUT_EVBUG=m 814 + 815 + # 816 + # Input Device Drivers 817 + # 818 + CONFIG_INPUT_KEYBOARD=y 819 + # CONFIG_KEYBOARD_ATKBD is not set 820 + # CONFIG_KEYBOARD_SUNKBD is not set 821 + # CONFIG_KEYBOARD_LKKBD is not set 822 + # CONFIG_KEYBOARD_XTKBD is not set 823 + # CONFIG_KEYBOARD_NEWTON is not set 824 + # CONFIG_KEYBOARD_STOWAWAY is not set 825 + CONFIG_KEYBOARD_GPIO=y 826 + CONFIG_INPUT_MOUSE=y 827 + CONFIG_MOUSE_PS2=y 828 + CONFIG_MOUSE_PS2_ALPS=y 829 + CONFIG_MOUSE_PS2_LOGIPS2PP=y 830 + CONFIG_MOUSE_PS2_SYNAPTICS=y 831 + CONFIG_MOUSE_PS2_TRACKPOINT=y 832 + # CONFIG_MOUSE_PS2_ELANTECH is not set 833 + # CONFIG_MOUSE_PS2_TOUCHKIT is not set 834 + # CONFIG_MOUSE_SERIAL is not set 835 + # CONFIG_MOUSE_APPLETOUCH is not set 836 + # CONFIG_MOUSE_BCM5974 is not set 837 + # CONFIG_MOUSE_VSXXXAA is not set 838 + # CONFIG_MOUSE_GPIO is not set 839 + # CONFIG_INPUT_JOYSTICK is not set 840 + # CONFIG_INPUT_TABLET is not set 841 + CONFIG_INPUT_TOUCHSCREEN=y 842 + # CONFIG_TOUCHSCREEN_ADS7846 is not set 843 + # CONFIG_TOUCHSCREEN_AD7877 is not set 844 + # CONFIG_TOUCHSCREEN_AD7879_I2C is not set 845 + # CONFIG_TOUCHSCREEN_AD7879_SPI is not set 846 + # CONFIG_TOUCHSCREEN_AD7879 is not set 847 + # CONFIG_TOUCHSCREEN_FUJITSU is not set 848 + # CONFIG_TOUCHSCREEN_GUNZE is not set 849 + # CONFIG_TOUCHSCREEN_ELO is not set 850 + # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set 851 + # CONFIG_TOUCHSCREEN_MTOUCH is not set 852 + # CONFIG_TOUCHSCREEN_INEXIO is not set 853 + # CONFIG_TOUCHSCREEN_MK712 is not set 854 + # CONFIG_TOUCHSCREEN_PENMOUNT is not set 855 + # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set 856 + # CONFIG_TOUCHSCREEN_TOUCHWIN is not set 857 + # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set 858 + # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set 859 + # CONFIG_TOUCHSCREEN_TSC2007 is not set 860 + # CONFIG_INPUT_MISC is not set 861 + 862 + # 863 + # Hardware I/O ports 864 + # 865 + CONFIG_SERIO=y 866 + CONFIG_SERIO_SERPORT=y 867 + CONFIG_SERIO_LIBPS2=y 868 + CONFIG_SERIO_RAW=y 869 + # CONFIG_GAMEPORT is not set 870 + 871 + # 872 + # Character devices 873 + # 874 + CONFIG_VT=y 875 + CONFIG_CONSOLE_TRANSLATIONS=y 876 + CONFIG_VT_CONSOLE=y 877 + CONFIG_HW_CONSOLE=y 878 + CONFIG_VT_HW_CONSOLE_BINDING=y 879 + CONFIG_DEVKMEM=y 880 + # CONFIG_SERIAL_NONSTANDARD is not set 881 + 882 + # 883 + # Serial drivers 884 + # 885 + # CONFIG_SERIAL_8250 is not set 886 + 887 + # 888 + # Non-8250 serial port support 889 + # 890 + CONFIG_SERIAL_SAMSUNG=y 891 + CONFIG_SERIAL_SAMSUNG_UARTS=3 892 + CONFIG_SERIAL_SAMSUNG_CONSOLE=y 893 + CONFIG_SERIAL_S3C2440=y 894 + # CONFIG_SERIAL_MAX3100 is not set 895 + CONFIG_SERIAL_CORE=y 896 + CONFIG_SERIAL_CORE_CONSOLE=y 897 + CONFIG_UNIX98_PTYS=y 898 + # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set 899 + CONFIG_LEGACY_PTYS=y 900 + CONFIG_LEGACY_PTY_COUNT=128 901 + CONFIG_IPMI_HANDLER=m 902 + # CONFIG_IPMI_PANIC_EVENT is not set 903 + CONFIG_IPMI_DEVICE_INTERFACE=m 904 + CONFIG_IPMI_SI=m 905 + CONFIG_IPMI_WATCHDOG=m 906 + CONFIG_IPMI_POWEROFF=m 907 + CONFIG_HW_RANDOM=y 908 + # CONFIG_HW_RANDOM_TIMERIOMEM is not set 909 + # CONFIG_R3964 is not set 910 + # CONFIG_RAW_DRIVER is not set 911 + # CONFIG_TCG_TPM is not set 912 + CONFIG_I2C=y 913 + CONFIG_I2C_BOARDINFO=y 914 + CONFIG_I2C_CHARDEV=y 915 + CONFIG_I2C_HELPER_AUTO=y 916 + CONFIG_I2C_ALGOBIT=y 917 + 918 + # 919 + # I2C Hardware Bus support 920 + # 921 + 922 + # 923 + # I2C system bus drivers (mostly embedded / system-on-chip) 924 + # 925 + # CONFIG_I2C_GPIO is not set 926 + # CONFIG_I2C_OCORES is not set 927 + CONFIG_I2C_S3C2410=y 928 + CONFIG_I2C_SIMTEC=y 929 + 930 + # 931 + # External I2C/SMBus adapter drivers 932 + # 933 + # CONFIG_I2C_PARPORT_LIGHT is not set 934 + # CONFIG_I2C_TAOS_EVM is not set 935 + # CONFIG_I2C_TINY_USB is not set 936 + 937 + # 938 + # Other I2C/SMBus bus drivers 939 + # 940 + # CONFIG_I2C_PCA_PLATFORM is not set 941 + # CONFIG_I2C_STUB is not set 942 + 943 + # 944 + # Miscellaneous I2C Chip support 945 + # 946 + # CONFIG_DS1682 is not set 947 + # CONFIG_SENSORS_PCF8574 is not set 948 + # CONFIG_PCF8575 is not set 949 + # CONFIG_SENSORS_PCA9539 is not set 950 + # CONFIG_SENSORS_MAX6875 is not set 951 + CONFIG_SENSORS_TSL2550=m 952 + # CONFIG_I2C_DEBUG_CORE is not set 953 + # CONFIG_I2C_DEBUG_ALGO is not set 954 + # CONFIG_I2C_DEBUG_BUS is not set 955 + # CONFIG_I2C_DEBUG_CHIP is not set 956 + CONFIG_SPI=y 957 + # CONFIG_SPI_DEBUG is not set 958 + CONFIG_SPI_MASTER=y 959 + 960 + # 961 + # SPI Master Controller Drivers 962 + # 963 + CONFIG_SPI_BITBANG=y 964 + # CONFIG_SPI_GPIO is not set 965 + CONFIG_SPI_S3C24XX=y 966 + # CONFIG_SPI_S3C24XX_GPIO is not set 967 + 968 + # 969 + # SPI Protocol Masters 970 + # 971 + CONFIG_SPI_SPIDEV=y 972 + # CONFIG_SPI_TLE62X0 is not set 973 + CONFIG_ARCH_REQUIRE_GPIOLIB=y 974 + CONFIG_GPIOLIB=y 975 + # CONFIG_DEBUG_GPIO is not set 976 + CONFIG_GPIO_SYSFS=y 977 + 978 + # 979 + # Memory mapped GPIO expanders: 980 + # 981 + 982 + # 983 + # I2C GPIO expanders: 984 + # 985 + # CONFIG_GPIO_MAX732X is not set 986 + # CONFIG_GPIO_PCA953X is not set 987 + # CONFIG_GPIO_PCF857X is not set 988 + 989 + # 990 + # PCI GPIO expanders: 991 + # 992 + 993 + # 994 + # SPI GPIO expanders: 995 + # 996 + # CONFIG_GPIO_MAX7301 is not set 997 + # CONFIG_GPIO_MCP23S08 is not set 998 + # CONFIG_W1 is not set 999 + # CONFIG_POWER_SUPPLY is not set 1000 + CONFIG_HWMON=y 1001 + # CONFIG_HWMON_VID is not set 1002 + # CONFIG_SENSORS_AD7414 is not set 1003 + # CONFIG_SENSORS_AD7418 is not set 1004 + # CONFIG_SENSORS_ADCXX is not set 1005 + # CONFIG_SENSORS_ADM1021 is not set 1006 + # CONFIG_SENSORS_ADM1025 is not set 1007 + # CONFIG_SENSORS_ADM1026 is not set 1008 + # CONFIG_SENSORS_ADM1029 is not set 1009 + # CONFIG_SENSORS_ADM1031 is not set 1010 + # CONFIG_SENSORS_ADM9240 is not set 1011 + # CONFIG_SENSORS_ADT7462 is not set 1012 + # CONFIG_SENSORS_ADT7470 is not set 1013 + # CONFIG_SENSORS_ADT7473 is not set 1014 + # CONFIG_SENSORS_ADT7475 is not set 1015 + # CONFIG_SENSORS_ATXP1 is not set 1016 + # CONFIG_SENSORS_DS1621 is not set 1017 + # CONFIG_SENSORS_F71805F is not set 1018 + # CONFIG_SENSORS_F71882FG is not set 1019 + # CONFIG_SENSORS_F75375S is not set 1020 + # CONFIG_SENSORS_G760A is not set 1021 + # CONFIG_SENSORS_GL518SM is not set 1022 + # CONFIG_SENSORS_GL520SM is not set 1023 + # CONFIG_SENSORS_IBMAEM is not set 1024 + # CONFIG_SENSORS_IBMPEX is not set 1025 + # CONFIG_SENSORS_IT87 is not set 1026 + # CONFIG_SENSORS_LM63 is not set 1027 + # CONFIG_SENSORS_LM70 is not set 1028 + CONFIG_SENSORS_LM75=y 1029 + # CONFIG_SENSORS_LM77 is not set 1030 + # CONFIG_SENSORS_LM78 is not set 1031 + # CONFIG_SENSORS_LM80 is not set 1032 + # CONFIG_SENSORS_LM83 is not set 1033 + # CONFIG_SENSORS_LM85 is not set 1034 + # CONFIG_SENSORS_LM87 is not set 1035 + # CONFIG_SENSORS_LM90 is not set 1036 + # CONFIG_SENSORS_LM92 is not set 1037 + # CONFIG_SENSORS_LM93 is not set 1038 + # CONFIG_SENSORS_LTC4215 is not set 1039 + # CONFIG_SENSORS_LTC4245 is not set 1040 + # CONFIG_SENSORS_LM95241 is not set 1041 + # CONFIG_SENSORS_MAX1111 is not set 1042 + # CONFIG_SENSORS_MAX1619 is not set 1043 + # CONFIG_SENSORS_MAX6650 is not set 1044 + # CONFIG_SENSORS_PC87360 is not set 1045 + # CONFIG_SENSORS_PC87427 is not set 1046 + # CONFIG_SENSORS_PCF8591 is not set 1047 + # CONFIG_SENSORS_SHT15 is not set 1048 + # CONFIG_SENSORS_DME1737 is not set 1049 + # CONFIG_SENSORS_SMSC47M1 is not set 1050 + # CONFIG_SENSORS_SMSC47M192 is not set 1051 + # CONFIG_SENSORS_SMSC47B397 is not set 1052 + # CONFIG_SENSORS_ADS7828 is not set 1053 + # CONFIG_SENSORS_THMC50 is not set 1054 + # CONFIG_SENSORS_VT1211 is not set 1055 + # CONFIG_SENSORS_W83781D is not set 1056 + # CONFIG_SENSORS_W83791D is not set 1057 + # CONFIG_SENSORS_W83792D is not set 1058 + # CONFIG_SENSORS_W83793 is not set 1059 + # CONFIG_SENSORS_W83L785TS is not set 1060 + # CONFIG_SENSORS_W83L786NG is not set 1061 + # CONFIG_SENSORS_W83627HF is not set 1062 + # CONFIG_SENSORS_W83627EHF is not set 1063 + # CONFIG_SENSORS_LIS3_SPI is not set 1064 + # CONFIG_HWMON_DEBUG_CHIP is not set 1065 + CONFIG_THERMAL=m 1066 + # CONFIG_THERMAL_HWMON is not set 1067 + CONFIG_WATCHDOG=y 1068 + # CONFIG_WATCHDOG_NOWAYOUT is not set 1069 + 1070 + # 1071 + # Watchdog Device Drivers 1072 + # 1073 + # CONFIG_SOFT_WATCHDOG is not set 1074 + CONFIG_S3C2410_WATCHDOG=y 1075 + 1076 + # 1077 + # USB-based Watchdog Cards 1078 + # 1079 + # CONFIG_USBPCWATCHDOG is not set 1080 + CONFIG_SSB_POSSIBLE=y 1081 + 1082 + # 1083 + # Sonics Silicon Backplane 1084 + # 1085 + # CONFIG_SSB is not set 1086 + 1087 + # 1088 + # Multifunction device drivers 1089 + # 1090 + # CONFIG_MFD_CORE is not set 1091 + # CONFIG_MFD_SM501 is not set 1092 + # CONFIG_MFD_ASIC3 is not set 1093 + # CONFIG_HTC_EGPIO is not set 1094 + # CONFIG_HTC_PASIC3 is not set 1095 + # CONFIG_TPS65010 is not set 1096 + # CONFIG_TWL4030_CORE is not set 1097 + # CONFIG_MFD_TMIO is not set 1098 + # CONFIG_MFD_T7L66XB is not set 1099 + # CONFIG_MFD_TC6387XB is not set 1100 + # CONFIG_MFD_TC6393XB is not set 1101 + # CONFIG_PMIC_DA903X is not set 1102 + # CONFIG_MFD_WM8400 is not set 1103 + # CONFIG_MFD_WM8350_I2C is not set 1104 + # CONFIG_MFD_PCF50633 is not set 1105 + 1106 + # 1107 + # Multimedia devices 1108 + # 1109 + 1110 + # 1111 + # Multimedia core support 1112 + # 1113 + CONFIG_VIDEO_DEV=m 1114 + CONFIG_VIDEO_V4L2_COMMON=m 1115 + CONFIG_VIDEO_ALLOW_V4L1=y 1116 + CONFIG_VIDEO_V4L1_COMPAT=y 1117 + CONFIG_DVB_CORE=m 1118 + CONFIG_VIDEO_MEDIA=m 1119 + 1120 + # 1121 + # Multimedia drivers 1122 + # 1123 + # CONFIG_MEDIA_ATTACH is not set 1124 + CONFIG_MEDIA_TUNER=m 1125 + # CONFIG_MEDIA_TUNER_CUSTOMISE is not set 1126 + CONFIG_MEDIA_TUNER_SIMPLE=m 1127 + CONFIG_MEDIA_TUNER_TDA8290=m 1128 + CONFIG_MEDIA_TUNER_TDA9887=m 1129 + CONFIG_MEDIA_TUNER_TEA5761=m 1130 + CONFIG_MEDIA_TUNER_TEA5767=m 1131 + CONFIG_MEDIA_TUNER_MT20XX=m 1132 + CONFIG_MEDIA_TUNER_XC2028=m 1133 + CONFIG_MEDIA_TUNER_XC5000=m 1134 + CONFIG_MEDIA_TUNER_MC44S803=m 1135 + CONFIG_VIDEO_V4L2=m 1136 + CONFIG_VIDEO_V4L1=m 1137 + CONFIG_VIDEOBUF_GEN=m 1138 + CONFIG_VIDEO_CAPTURE_DRIVERS=y 1139 + # CONFIG_VIDEO_ADV_DEBUG is not set 1140 + # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set 1141 + CONFIG_VIDEO_HELPER_CHIPS_AUTO=y 1142 + # CONFIG_VIDEO_VIVI is not set 1143 + # CONFIG_VIDEO_CPIA is not set 1144 + # CONFIG_VIDEO_CPIA2 is not set 1145 + # CONFIG_VIDEO_SAA5246A is not set 1146 + # CONFIG_VIDEO_SAA5249 is not set 1147 + # CONFIG_VIDEO_AU0828 is not set 1148 + CONFIG_SOC_CAMERA=m 1149 + # CONFIG_SOC_CAMERA_MT9M001 is not set 1150 + # CONFIG_SOC_CAMERA_MT9M111 is not set 1151 + # CONFIG_SOC_CAMERA_MT9T031 is not set 1152 + # CONFIG_SOC_CAMERA_MT9V022 is not set 1153 + # CONFIG_SOC_CAMERA_TW9910 is not set 1154 + CONFIG_SOC_CAMERA_PLATFORM=m 1155 + # CONFIG_SOC_CAMERA_OV772X is not set 1156 + # CONFIG_VIDEO_SH_MOBILE_CEU is not set 1157 + CONFIG_V4L_USB_DRIVERS=y 1158 + # CONFIG_USB_VIDEO_CLASS is not set 1159 + CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y 1160 + CONFIG_USB_GSPCA=m 1161 + # CONFIG_USB_M5602 is not set 1162 + # CONFIG_USB_STV06XX is not set 1163 + # CONFIG_USB_GSPCA_CONEX is not set 1164 + # CONFIG_USB_GSPCA_ETOMS is not set 1165 + # CONFIG_USB_GSPCA_FINEPIX is not set 1166 + # CONFIG_USB_GSPCA_MARS is not set 1167 + # CONFIG_USB_GSPCA_MR97310A is not set 1168 + # CONFIG_USB_GSPCA_OV519 is not set 1169 + # CONFIG_USB_GSPCA_OV534 is not set 1170 + # CONFIG_USB_GSPCA_PAC207 is not set 1171 + # CONFIG_USB_GSPCA_PAC7311 is not set 1172 + # CONFIG_USB_GSPCA_SONIXB is not set 1173 + # CONFIG_USB_GSPCA_SONIXJ is not set 1174 + # CONFIG_USB_GSPCA_SPCA500 is not set 1175 + # CONFIG_USB_GSPCA_SPCA501 is not set 1176 + # CONFIG_USB_GSPCA_SPCA505 is not set 1177 + # CONFIG_USB_GSPCA_SPCA506 is not set 1178 + # CONFIG_USB_GSPCA_SPCA508 is not set 1179 + # CONFIG_USB_GSPCA_SPCA561 is not set 1180 + # CONFIG_USB_GSPCA_SQ905 is not set 1181 + # CONFIG_USB_GSPCA_SQ905C is not set 1182 + # CONFIG_USB_GSPCA_STK014 is not set 1183 + # CONFIG_USB_GSPCA_SUNPLUS is not set 1184 + # CONFIG_USB_GSPCA_T613 is not set 1185 + # CONFIG_USB_GSPCA_TV8532 is not set 1186 + # CONFIG_USB_GSPCA_VC032X is not set 1187 + CONFIG_USB_GSPCA_ZC3XX=m 1188 + # CONFIG_VIDEO_PVRUSB2 is not set 1189 + # CONFIG_VIDEO_HDPVR is not set 1190 + # CONFIG_VIDEO_EM28XX is not set 1191 + # CONFIG_VIDEO_CX231XX is not set 1192 + # CONFIG_VIDEO_USBVISION is not set 1193 + # CONFIG_USB_VICAM is not set 1194 + # CONFIG_USB_IBMCAM is not set 1195 + # CONFIG_USB_KONICAWC is not set 1196 + # CONFIG_USB_QUICKCAM_MESSENGER is not set 1197 + # CONFIG_USB_ET61X251 is not set 1198 + # CONFIG_VIDEO_OVCAMCHIP is not set 1199 + # CONFIG_USB_OV511 is not set 1200 + # CONFIG_USB_SE401 is not set 1201 + # CONFIG_USB_SN9C102 is not set 1202 + # CONFIG_USB_STV680 is not set 1203 + # CONFIG_USB_ZC0301 is not set 1204 + # CONFIG_USB_PWC is not set 1205 + # CONFIG_USB_PWC_INPUT_EVDEV is not set 1206 + # CONFIG_USB_ZR364XX is not set 1207 + # CONFIG_USB_STKWEBCAM is not set 1208 + # CONFIG_USB_S2255 is not set 1209 + CONFIG_RADIO_ADAPTERS=y 1210 + # CONFIG_USB_DSBR is not set 1211 + # CONFIG_USB_SI470X is not set 1212 + # CONFIG_USB_MR800 is not set 1213 + # CONFIG_RADIO_TEA5764 is not set 1214 + # CONFIG_DVB_DYNAMIC_MINORS is not set 1215 + CONFIG_DVB_CAPTURE_DRIVERS=y 1216 + # CONFIG_TTPCI_EEPROM is not set 1217 + 1218 + # 1219 + # Supported USB Adapters 1220 + # 1221 + # CONFIG_DVB_USB is not set 1222 + # CONFIG_DVB_SIANO_SMS1XXX is not set 1223 + 1224 + # 1225 + # Supported FlexCopII (B2C2) Adapters 1226 + # 1227 + # CONFIG_DVB_B2C2_FLEXCOP is not set 1228 + 1229 + # 1230 + # Supported DVB Frontends 1231 + # 1232 + # CONFIG_DVB_FE_CUSTOMISE is not set 1233 + # CONFIG_DAB is not set 1234 + 1235 + # 1236 + # Graphics support 1237 + # 1238 + # CONFIG_VGASTATE is not set 1239 + CONFIG_VIDEO_OUTPUT_CONTROL=y 1240 + CONFIG_FB=y 1241 + CONFIG_FIRMWARE_EDID=y 1242 + # CONFIG_FB_DDC is not set 1243 + # CONFIG_FB_BOOT_VESA_SUPPORT is not set 1244 + CONFIG_FB_CFB_FILLRECT=y 1245 + CONFIG_FB_CFB_COPYAREA=y 1246 + CONFIG_FB_CFB_IMAGEBLIT=y 1247 + # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set 1248 + # CONFIG_FB_SYS_FILLRECT is not set 1249 + # CONFIG_FB_SYS_COPYAREA is not set 1250 + # CONFIG_FB_SYS_IMAGEBLIT is not set 1251 + # CONFIG_FB_FOREIGN_ENDIAN is not set 1252 + # CONFIG_FB_SYS_FOPS is not set 1253 + # CONFIG_FB_SVGALIB is not set 1254 + # CONFIG_FB_MACMODES is not set 1255 + # CONFIG_FB_BACKLIGHT is not set 1256 + CONFIG_FB_MODE_HELPERS=y 1257 + CONFIG_FB_TILEBLITTING=y 1258 + 1259 + # 1260 + # Frame buffer hardware drivers 1261 + # 1262 + # CONFIG_FB_UVESA is not set 1263 + # CONFIG_FB_S1D13XXX is not set 1264 + CONFIG_FB_S3C2410=y 1265 + # CONFIG_FB_S3C2410_DEBUG is not set 1266 + # CONFIG_FB_VIRTUAL is not set 1267 + # CONFIG_FB_METRONOME is not set 1268 + # CONFIG_FB_MB862XX is not set 1269 + # CONFIG_FB_BROADSHEET is not set 1270 + CONFIG_BACKLIGHT_LCD_SUPPORT=y 1271 + CONFIG_LCD_CLASS_DEVICE=y 1272 + # CONFIG_LCD_LTV350QV is not set 1273 + # CONFIG_LCD_ILI9320 is not set 1274 + # CONFIG_LCD_TDO24M is not set 1275 + # CONFIG_LCD_VGG2432A4 is not set 1276 + CONFIG_LCD_PLATFORM=y 1277 + CONFIG_BACKLIGHT_CLASS_DEVICE=y 1278 + # CONFIG_BACKLIGHT_GENERIC is not set 1279 + CONFIG_BACKLIGHT_PWM=y 1280 + 1281 + # 1282 + # Display device support 1283 + # 1284 + CONFIG_DISPLAY_SUPPORT=y 1285 + 1286 + # 1287 + # Display hardware drivers 1288 + # 1289 + 1290 + # 1291 + # Console display driver support 1292 + # 1293 + # CONFIG_VGA_CONSOLE is not set 1294 + CONFIG_DUMMY_CONSOLE=y 1295 + CONFIG_FRAMEBUFFER_CONSOLE=y 1296 + CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y 1297 + CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y 1298 + CONFIG_FONTS=y 1299 + CONFIG_FONT_8x8=y 1300 + # CONFIG_FONT_8x16 is not set 1301 + # CONFIG_FONT_6x11 is not set 1302 + # CONFIG_FONT_7x14 is not set 1303 + # CONFIG_FONT_PEARL_8x8 is not set 1304 + # CONFIG_FONT_ACORN_8x8 is not set 1305 + CONFIG_FONT_MINI_4x6=y 1306 + # CONFIG_FONT_SUN8x16 is not set 1307 + # CONFIG_FONT_SUN12x22 is not set 1308 + # CONFIG_FONT_10x18 is not set 1309 + CONFIG_LOGO=y 1310 + # CONFIG_LOGO_LINUX_MONO is not set 1311 + # CONFIG_LOGO_LINUX_VGA16 is not set 1312 + CONFIG_LOGO_LINUX_CLUT224=y 1313 + CONFIG_SOUND=y 1314 + CONFIG_SOUND_OSS_CORE=y 1315 + CONFIG_SND=y 1316 + CONFIG_SND_TIMER=y 1317 + CONFIG_SND_PCM=y 1318 + CONFIG_SND_HWDEP=m 1319 + CONFIG_SND_RAWMIDI=m 1320 + CONFIG_SND_JACK=y 1321 + CONFIG_SND_SEQUENCER=m 1322 + CONFIG_SND_SEQ_DUMMY=m 1323 + CONFIG_SND_OSSEMUL=y 1324 + CONFIG_SND_MIXER_OSS=m 1325 + CONFIG_SND_PCM_OSS=m 1326 + CONFIG_SND_PCM_OSS_PLUGINS=y 1327 + CONFIG_SND_SEQUENCER_OSS=y 1328 + CONFIG_SND_DYNAMIC_MINORS=y 1329 + CONFIG_SND_SUPPORT_OLD_API=y 1330 + CONFIG_SND_VERBOSE_PROCFS=y 1331 + # CONFIG_SND_VERBOSE_PRINTK is not set 1332 + # CONFIG_SND_DEBUG is not set 1333 + # CONFIG_SND_DRIVERS is not set 1334 + # CONFIG_SND_ARM is not set 1335 + # CONFIG_SND_SPI is not set 1336 + CONFIG_SND_USB=y 1337 + CONFIG_SND_USB_AUDIO=m 1338 + CONFIG_SND_USB_CAIAQ=m 1339 + CONFIG_SND_USB_CAIAQ_INPUT=y 1340 + CONFIG_SND_SOC=y 1341 + CONFIG_SND_S3C24XX_SOC=y 1342 + CONFIG_SND_S3C24XX_SOC_I2S=y 1343 + # CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set 1344 + CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X=y 1345 + CONFIG_SND_SOC_I2C_AND_SPI=y 1346 + # CONFIG_SND_SOC_ALL_CODECS is not set 1347 + CONFIG_SND_SOC_L3=y 1348 + CONFIG_SND_SOC_UDA134X=y 1349 + # CONFIG_SOUND_PRIME is not set 1350 + CONFIG_HID_SUPPORT=y 1351 + CONFIG_HID=y 1352 + # CONFIG_HID_DEBUG is not set 1353 + CONFIG_HIDRAW=y 1354 + 1355 + # 1356 + # USB Input Devices 1357 + # 1358 + CONFIG_USB_HID=y 1359 + CONFIG_HID_PID=y 1360 + CONFIG_USB_HIDDEV=y 1361 + 1362 + # 1363 + # Special HID drivers 1364 + # 1365 + CONFIG_HID_A4TECH=y 1366 + CONFIG_HID_APPLE=y 1367 + CONFIG_HID_BELKIN=y 1368 + CONFIG_HID_CHERRY=y 1369 + CONFIG_HID_CHICONY=y 1370 + CONFIG_HID_CYPRESS=y 1371 + # CONFIG_DRAGONRISE_FF is not set 1372 + CONFIG_HID_EZKEY=y 1373 + CONFIG_HID_KYE=y 1374 + CONFIG_HID_GYRATION=y 1375 + CONFIG_HID_KENSINGTON=y 1376 + CONFIG_HID_LOGITECH=y 1377 + # CONFIG_LOGITECH_FF is not set 1378 + # CONFIG_LOGIRUMBLEPAD2_FF is not set 1379 + CONFIG_HID_MICROSOFT=y 1380 + CONFIG_HID_MONTEREY=y 1381 + CONFIG_HID_NTRIG=y 1382 + CONFIG_HID_PANTHERLORD=y 1383 + # CONFIG_PANTHERLORD_FF is not set 1384 + CONFIG_HID_PETALYNX=y 1385 + CONFIG_HID_SAMSUNG=y 1386 + CONFIG_HID_SONY=y 1387 + CONFIG_HID_SUNPLUS=y 1388 + # CONFIG_GREENASIA_FF is not set 1389 + CONFIG_HID_TOPSEED=y 1390 + # CONFIG_THRUSTMASTER_FF is not set 1391 + # CONFIG_ZEROPLUS_FF is not set 1392 + CONFIG_USB_SUPPORT=y 1393 + CONFIG_USB_ARCH_HAS_HCD=y 1394 + CONFIG_USB_ARCH_HAS_OHCI=y 1395 + # CONFIG_USB_ARCH_HAS_EHCI is not set 1396 + CONFIG_USB=y 1397 + # CONFIG_USB_DEBUG is not set 1398 + # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set 1399 + 1400 + # 1401 + # Miscellaneous USB options 1402 + # 1403 + CONFIG_USB_DEVICEFS=y 1404 + # CONFIG_USB_DEVICE_CLASS is not set 1405 + # CONFIG_USB_DYNAMIC_MINORS is not set 1406 + # CONFIG_USB_SUSPEND is not set 1407 + # CONFIG_USB_OTG is not set 1408 + # CONFIG_USB_MON is not set 1409 + # CONFIG_USB_WUSB is not set 1410 + # CONFIG_USB_WUSB_CBAF is not set 1411 + 1412 + # 1413 + # USB Host Controller Drivers 1414 + # 1415 + # CONFIG_USB_C67X00_HCD is not set 1416 + # CONFIG_USB_OXU210HP_HCD is not set 1417 + # CONFIG_USB_ISP116X_HCD is not set 1418 + # CONFIG_USB_ISP1760_HCD is not set 1419 + CONFIG_USB_OHCI_HCD=y 1420 + # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set 1421 + # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set 1422 + CONFIG_USB_OHCI_LITTLE_ENDIAN=y 1423 + # CONFIG_USB_SL811_HCD is not set 1424 + # CONFIG_USB_R8A66597_HCD is not set 1425 + # CONFIG_USB_HWA_HCD is not set 1426 + # CONFIG_USB_MUSB_HDRC is not set 1427 + # CONFIG_USB_GADGET_MUSB_HDRC is not set 1428 + 1429 + # 1430 + # USB Device Class drivers 1431 + # 1432 + CONFIG_USB_ACM=m 1433 + # CONFIG_USB_PRINTER is not set 1434 + CONFIG_USB_WDM=m 1435 + # CONFIG_USB_TMC is not set 1436 + 1437 + # 1438 + # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may 1439 + # 1440 + 1441 + # 1442 + # also be needed; see USB_STORAGE Help for more info 1443 + # 1444 + CONFIG_USB_STORAGE=m 1445 + # CONFIG_USB_STORAGE_DEBUG is not set 1446 + CONFIG_USB_STORAGE_DATAFAB=m 1447 + # CONFIG_USB_STORAGE_FREECOM is not set 1448 + CONFIG_USB_STORAGE_ISD200=m 1449 + CONFIG_USB_STORAGE_USBAT=m 1450 + CONFIG_USB_STORAGE_SDDR09=m 1451 + CONFIG_USB_STORAGE_SDDR55=m 1452 + CONFIG_USB_STORAGE_JUMPSHOT=m 1453 + CONFIG_USB_STORAGE_ALAUDA=m 1454 + # CONFIG_USB_STORAGE_ONETOUCH is not set 1455 + # CONFIG_USB_STORAGE_KARMA is not set 1456 + # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set 1457 + CONFIG_USB_LIBUSUAL=y 1458 + 1459 + # 1460 + # USB Imaging devices 1461 + # 1462 + # CONFIG_USB_MDC800 is not set 1463 + # CONFIG_USB_MICROTEK is not set 1464 + 1465 + # 1466 + # USB port drivers 1467 + # 1468 + CONFIG_USB_SERIAL=m 1469 + # CONFIG_USB_EZUSB is not set 1470 + # CONFIG_USB_SERIAL_GENERIC is not set 1471 + # CONFIG_USB_SERIAL_AIRCABLE is not set 1472 + # CONFIG_USB_SERIAL_ARK3116 is not set 1473 + # CONFIG_USB_SERIAL_BELKIN is not set 1474 + # CONFIG_USB_SERIAL_CH341 is not set 1475 + # CONFIG_USB_SERIAL_WHITEHEAT is not set 1476 + # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set 1477 + CONFIG_USB_SERIAL_CP210X=m 1478 + # CONFIG_USB_SERIAL_CYPRESS_M8 is not set 1479 + # CONFIG_USB_SERIAL_EMPEG is not set 1480 + CONFIG_USB_SERIAL_FTDI_SIO=m 1481 + # CONFIG_USB_SERIAL_FUNSOFT is not set 1482 + # CONFIG_USB_SERIAL_VISOR is not set 1483 + # CONFIG_USB_SERIAL_IPAQ is not set 1484 + # CONFIG_USB_SERIAL_IR is not set 1485 + # CONFIG_USB_SERIAL_EDGEPORT is not set 1486 + # CONFIG_USB_SERIAL_EDGEPORT_TI is not set 1487 + # CONFIG_USB_SERIAL_GARMIN is not set 1488 + # CONFIG_USB_SERIAL_IPW is not set 1489 + # CONFIG_USB_SERIAL_IUU is not set 1490 + # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set 1491 + # CONFIG_USB_SERIAL_KEYSPAN is not set 1492 + # CONFIG_USB_SERIAL_KLSI is not set 1493 + # CONFIG_USB_SERIAL_KOBIL_SCT is not set 1494 + # CONFIG_USB_SERIAL_MCT_U232 is not set 1495 + # CONFIG_USB_SERIAL_MOS7720 is not set 1496 + # CONFIG_USB_SERIAL_MOS7840 is not set 1497 + # CONFIG_USB_SERIAL_MOTOROLA is not set 1498 + # CONFIG_USB_SERIAL_NAVMAN is not set 1499 + # CONFIG_USB_SERIAL_PL2303 is not set 1500 + # CONFIG_USB_SERIAL_OTI6858 is not set 1501 + # CONFIG_USB_SERIAL_QUALCOMM is not set 1502 + CONFIG_USB_SERIAL_SPCP8X5=m 1503 + # CONFIG_USB_SERIAL_HP4X is not set 1504 + # CONFIG_USB_SERIAL_SAFE is not set 1505 + # CONFIG_USB_SERIAL_SIEMENS_MPI is not set 1506 + # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set 1507 + # CONFIG_USB_SERIAL_SYMBOL is not set 1508 + # CONFIG_USB_SERIAL_TI is not set 1509 + # CONFIG_USB_SERIAL_CYBERJACK is not set 1510 + # CONFIG_USB_SERIAL_XIRCOM is not set 1511 + # CONFIG_USB_SERIAL_OPTION is not set 1512 + # CONFIG_USB_SERIAL_OMNINET is not set 1513 + # CONFIG_USB_SERIAL_OPTICON is not set 1514 + # CONFIG_USB_SERIAL_DEBUG is not set 1515 + 1516 + # 1517 + # USB Miscellaneous drivers 1518 + # 1519 + # CONFIG_USB_EMI62 is not set 1520 + # CONFIG_USB_EMI26 is not set 1521 + # CONFIG_USB_ADUTUX is not set 1522 + # CONFIG_USB_SEVSEG is not set 1523 + # CONFIG_USB_RIO500 is not set 1524 + # CONFIG_USB_LEGOTOWER is not set 1525 + # CONFIG_USB_LCD is not set 1526 + # CONFIG_USB_BERRY_CHARGE is not set 1527 + # CONFIG_USB_LED is not set 1528 + # CONFIG_USB_CYPRESS_CY7C63 is not set 1529 + # CONFIG_USB_CYTHERM is not set 1530 + # CONFIG_USB_IDMOUSE is not set 1531 + # CONFIG_USB_FTDI_ELAN is not set 1532 + # CONFIG_USB_APPLEDISPLAY is not set 1533 + # CONFIG_USB_LD is not set 1534 + # CONFIG_USB_TRANCEVIBRATOR is not set 1535 + # CONFIG_USB_IOWARRIOR is not set 1536 + # CONFIG_USB_TEST is not set 1537 + # CONFIG_USB_ISIGHTFW is not set 1538 + # CONFIG_USB_VST is not set 1539 + CONFIG_USB_GADGET=y 1540 + # CONFIG_USB_GADGET_DEBUG is not set 1541 + # CONFIG_USB_GADGET_DEBUG_FILES is not set 1542 + # CONFIG_USB_GADGET_DEBUG_FS is not set 1543 + CONFIG_USB_GADGET_VBUS_DRAW=2 1544 + CONFIG_USB_GADGET_SELECTED=y 1545 + # CONFIG_USB_GADGET_AT91 is not set 1546 + # CONFIG_USB_GADGET_ATMEL_USBA is not set 1547 + # CONFIG_USB_GADGET_FSL_USB2 is not set 1548 + # CONFIG_USB_GADGET_LH7A40X is not set 1549 + # CONFIG_USB_GADGET_OMAP is not set 1550 + # CONFIG_USB_GADGET_PXA25X is not set 1551 + # CONFIG_USB_GADGET_PXA27X is not set 1552 + CONFIG_USB_GADGET_S3C2410=y 1553 + CONFIG_USB_S3C2410=y 1554 + # CONFIG_USB_S3C2410_DEBUG is not set 1555 + # CONFIG_USB_GADGET_IMX is not set 1556 + # CONFIG_USB_GADGET_M66592 is not set 1557 + # CONFIG_USB_GADGET_AMD5536UDC is not set 1558 + # CONFIG_USB_GADGET_FSL_QE is not set 1559 + # CONFIG_USB_GADGET_CI13XXX is not set 1560 + # CONFIG_USB_GADGET_NET2280 is not set 1561 + # CONFIG_USB_GADGET_GOKU is not set 1562 + # CONFIG_USB_GADGET_DUMMY_HCD is not set 1563 + # CONFIG_USB_GADGET_DUALSPEED is not set 1564 + CONFIG_USB_ZERO=m 1565 + CONFIG_USB_ETH=m 1566 + CONFIG_USB_ETH_RNDIS=y 1567 + CONFIG_USB_GADGETFS=m 1568 + CONFIG_USB_FILE_STORAGE=m 1569 + # CONFIG_USB_FILE_STORAGE_TEST is not set 1570 + CONFIG_USB_G_SERIAL=m 1571 + # CONFIG_USB_MIDI_GADGET is not set 1572 + # CONFIG_USB_G_PRINTER is not set 1573 + CONFIG_USB_CDC_COMPOSITE=m 1574 + 1575 + # 1576 + # OTG and related infrastructure 1577 + # 1578 + # CONFIG_USB_GPIO_VBUS is not set 1579 + # CONFIG_NOP_USB_XCEIV is not set 1580 + CONFIG_MMC=y 1581 + # CONFIG_MMC_DEBUG is not set 1582 + # CONFIG_MMC_UNSAFE_RESUME is not set 1583 + 1584 + # 1585 + # MMC/SD/SDIO Card Drivers 1586 + # 1587 + CONFIG_MMC_BLOCK=y 1588 + CONFIG_MMC_BLOCK_BOUNCE=y 1589 + CONFIG_SDIO_UART=y 1590 + # CONFIG_MMC_TEST is not set 1591 + 1592 + # 1593 + # MMC/SD/SDIO Host Controller Drivers 1594 + # 1595 + CONFIG_MMC_SDHCI=y 1596 + CONFIG_MMC_SPI=y 1597 + CONFIG_MMC_S3C=y 1598 + # CONFIG_MEMSTICK is not set 1599 + # CONFIG_ACCESSIBILITY is not set 1600 + CONFIG_NEW_LEDS=y 1601 + CONFIG_LEDS_CLASS=y 1602 + 1603 + # 1604 + # LED drivers 1605 + # 1606 + CONFIG_LEDS_S3C24XX=y 1607 + # CONFIG_LEDS_PCA9532 is not set 1608 + CONFIG_LEDS_GPIO=y 1609 + CONFIG_LEDS_GPIO_PLATFORM=y 1610 + # CONFIG_LEDS_LP5521 is not set 1611 + # CONFIG_LEDS_PCA955X is not set 1612 + # CONFIG_LEDS_DAC124S085 is not set 1613 + # CONFIG_LEDS_PWM is not set 1614 + # CONFIG_LEDS_BD2802 is not set 1615 + 1616 + # 1617 + # LED Triggers 1618 + # 1619 + CONFIG_LEDS_TRIGGERS=y 1620 + CONFIG_LEDS_TRIGGER_TIMER=y 1621 + CONFIG_LEDS_TRIGGER_HEARTBEAT=y 1622 + CONFIG_LEDS_TRIGGER_BACKLIGHT=y 1623 + CONFIG_LEDS_TRIGGER_GPIO=y 1624 + CONFIG_LEDS_TRIGGER_DEFAULT_ON=y 1625 + 1626 + # 1627 + # iptables trigger is under Netfilter config (LED target) 1628 + # 1629 + CONFIG_RTC_LIB=y 1630 + CONFIG_RTC_CLASS=y 1631 + CONFIG_RTC_HCTOSYS=y 1632 + CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 1633 + # CONFIG_RTC_DEBUG is not set 1634 + 1635 + # 1636 + # RTC interfaces 1637 + # 1638 + CONFIG_RTC_INTF_SYSFS=y 1639 + CONFIG_RTC_INTF_PROC=y 1640 + CONFIG_RTC_INTF_DEV=y 1641 + CONFIG_RTC_INTF_DEV_UIE_EMUL=y 1642 + # CONFIG_RTC_DRV_TEST is not set 1643 + 1644 + # 1645 + # I2C RTC drivers 1646 + # 1647 + # CONFIG_RTC_DRV_DS1307 is not set 1648 + # CONFIG_RTC_DRV_DS1374 is not set 1649 + # CONFIG_RTC_DRV_DS1672 is not set 1650 + # CONFIG_RTC_DRV_MAX6900 is not set 1651 + # CONFIG_RTC_DRV_RS5C372 is not set 1652 + # CONFIG_RTC_DRV_ISL1208 is not set 1653 + # CONFIG_RTC_DRV_X1205 is not set 1654 + # CONFIG_RTC_DRV_PCF8563 is not set 1655 + # CONFIG_RTC_DRV_PCF8583 is not set 1656 + # CONFIG_RTC_DRV_M41T80 is not set 1657 + # CONFIG_RTC_DRV_S35390A is not set 1658 + # CONFIG_RTC_DRV_FM3130 is not set 1659 + # CONFIG_RTC_DRV_RX8581 is not set 1660 + 1661 + # 1662 + # SPI RTC drivers 1663 + # 1664 + # CONFIG_RTC_DRV_M41T94 is not set 1665 + # CONFIG_RTC_DRV_DS1305 is not set 1666 + # CONFIG_RTC_DRV_DS1390 is not set 1667 + # CONFIG_RTC_DRV_MAX6902 is not set 1668 + # CONFIG_RTC_DRV_R9701 is not set 1669 + # CONFIG_RTC_DRV_RS5C348 is not set 1670 + # CONFIG_RTC_DRV_DS3234 is not set 1671 + 1672 + # 1673 + # Platform RTC drivers 1674 + # 1675 + # CONFIG_RTC_DRV_CMOS is not set 1676 + # CONFIG_RTC_DRV_DS1286 is not set 1677 + # CONFIG_RTC_DRV_DS1511 is not set 1678 + # CONFIG_RTC_DRV_DS1553 is not set 1679 + # CONFIG_RTC_DRV_DS1742 is not set 1680 + # CONFIG_RTC_DRV_STK17TA8 is not set 1681 + # CONFIG_RTC_DRV_M48T86 is not set 1682 + # CONFIG_RTC_DRV_M48T35 is not set 1683 + # CONFIG_RTC_DRV_M48T59 is not set 1684 + # CONFIG_RTC_DRV_BQ4802 is not set 1685 + # CONFIG_RTC_DRV_V3020 is not set 1686 + 1687 + # 1688 + # on-CPU RTC drivers 1689 + # 1690 + CONFIG_RTC_DRV_S3C=y 1691 + CONFIG_DMADEVICES=y 1692 + 1693 + # 1694 + # DMA Devices 1695 + # 1696 + # CONFIG_AUXDISPLAY is not set 1697 + # CONFIG_REGULATOR is not set 1698 + # CONFIG_UIO is not set 1699 + # CONFIG_STAGING is not set 1700 + 1701 + # 1702 + # File systems 1703 + # 1704 + CONFIG_EXT2_FS=m 1705 + CONFIG_EXT2_FS_XATTR=y 1706 + CONFIG_EXT2_FS_POSIX_ACL=y 1707 + CONFIG_EXT2_FS_SECURITY=y 1708 + # CONFIG_EXT2_FS_XIP is not set 1709 + CONFIG_EXT3_FS=y 1710 + # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 1711 + CONFIG_EXT3_FS_XATTR=y 1712 + CONFIG_EXT3_FS_POSIX_ACL=y 1713 + CONFIG_EXT3_FS_SECURITY=y 1714 + # CONFIG_EXT4_FS is not set 1715 + CONFIG_JBD=y 1716 + # CONFIG_JBD_DEBUG is not set 1717 + CONFIG_FS_MBCACHE=y 1718 + # CONFIG_REISERFS_FS is not set 1719 + # CONFIG_JFS_FS is not set 1720 + CONFIG_FS_POSIX_ACL=y 1721 + CONFIG_FILE_LOCKING=y 1722 + # CONFIG_XFS_FS is not set 1723 + # CONFIG_GFS2_FS is not set 1724 + # CONFIG_OCFS2_FS is not set 1725 + # CONFIG_BTRFS_FS is not set 1726 + CONFIG_DNOTIFY=y 1727 + CONFIG_INOTIFY=y 1728 + CONFIG_INOTIFY_USER=y 1729 + # CONFIG_QUOTA is not set 1730 + CONFIG_AUTOFS_FS=y 1731 + CONFIG_AUTOFS4_FS=y 1732 + # CONFIG_FUSE_FS is not set 1733 + CONFIG_GENERIC_ACL=y 1734 + 1735 + # 1736 + # Caches 1737 + # 1738 + # CONFIG_FSCACHE is not set 1739 + 1740 + # 1741 + # CD-ROM/DVD Filesystems 1742 + # 1743 + # CONFIG_ISO9660_FS is not set 1744 + # CONFIG_UDF_FS is not set 1745 + 1746 + # 1747 + # DOS/FAT/NT Filesystems 1748 + # 1749 + CONFIG_FAT_FS=y 1750 + CONFIG_MSDOS_FS=y 1751 + CONFIG_VFAT_FS=y 1752 + CONFIG_FAT_DEFAULT_CODEPAGE=437 1753 + CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 1754 + # CONFIG_NTFS_FS is not set 1755 + 1756 + # 1757 + # Pseudo filesystems 1758 + # 1759 + CONFIG_PROC_FS=y 1760 + CONFIG_PROC_SYSCTL=y 1761 + CONFIG_PROC_PAGE_MONITOR=y 1762 + CONFIG_SYSFS=y 1763 + CONFIG_TMPFS=y 1764 + CONFIG_TMPFS_POSIX_ACL=y 1765 + # CONFIG_HUGETLB_PAGE is not set 1766 + CONFIG_CONFIGFS_FS=m 1767 + CONFIG_MISC_FILESYSTEMS=y 1768 + # CONFIG_ADFS_FS is not set 1769 + # CONFIG_AFFS_FS is not set 1770 + # CONFIG_ECRYPT_FS is not set 1771 + # CONFIG_HFS_FS is not set 1772 + # CONFIG_HFSPLUS_FS is not set 1773 + # CONFIG_BEFS_FS is not set 1774 + # CONFIG_BFS_FS is not set 1775 + # CONFIG_EFS_FS is not set 1776 + CONFIG_JFFS2_FS=y 1777 + CONFIG_JFFS2_FS_DEBUG=0 1778 + CONFIG_JFFS2_FS_WRITEBUFFER=y 1779 + # CONFIG_JFFS2_FS_WBUF_VERIFY is not set 1780 + # CONFIG_JFFS2_SUMMARY is not set 1781 + # CONFIG_JFFS2_FS_XATTR is not set 1782 + # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 1783 + CONFIG_JFFS2_ZLIB=y 1784 + # CONFIG_JFFS2_LZO is not set 1785 + CONFIG_JFFS2_RTIME=y 1786 + # CONFIG_JFFS2_RUBIN is not set 1787 + CONFIG_CRAMFS=y 1788 + # CONFIG_SQUASHFS is not set 1789 + # CONFIG_VXFS_FS is not set 1790 + # CONFIG_MINIX_FS is not set 1791 + # CONFIG_OMFS_FS is not set 1792 + # CONFIG_HPFS_FS is not set 1793 + # CONFIG_QNX4FS_FS is not set 1794 + CONFIG_ROMFS_FS=y 1795 + # CONFIG_ROMFS_BACKED_BY_BLOCK is not set 1796 + # CONFIG_ROMFS_BACKED_BY_MTD is not set 1797 + CONFIG_ROMFS_BACKED_BY_BOTH=y 1798 + CONFIG_ROMFS_ON_BLOCK=y 1799 + CONFIG_ROMFS_ON_MTD=y 1800 + # CONFIG_SYSV_FS is not set 1801 + # CONFIG_UFS_FS is not set 1802 + # CONFIG_NILFS2_FS is not set 1803 + CONFIG_NETWORK_FILESYSTEMS=y 1804 + CONFIG_NFS_FS=y 1805 + CONFIG_NFS_V3=y 1806 + CONFIG_NFS_V3_ACL=y 1807 + CONFIG_NFS_V4=y 1808 + CONFIG_ROOT_NFS=y 1809 + # CONFIG_NFSD is not set 1810 + CONFIG_LOCKD=y 1811 + CONFIG_LOCKD_V4=y 1812 + CONFIG_NFS_ACL_SUPPORT=y 1813 + CONFIG_NFS_COMMON=y 1814 + CONFIG_SUNRPC=y 1815 + CONFIG_SUNRPC_GSS=y 1816 + CONFIG_RPCSEC_GSS_KRB5=y 1817 + # CONFIG_RPCSEC_GSS_SPKM3 is not set 1818 + # CONFIG_SMB_FS is not set 1819 + # CONFIG_CIFS is not set 1820 + # CONFIG_NCP_FS is not set 1821 + # CONFIG_CODA_FS is not set 1822 + # CONFIG_AFS_FS is not set 1823 + 1824 + # 1825 + # Partition Types 1826 + # 1827 + CONFIG_PARTITION_ADVANCED=y 1828 + # CONFIG_ACORN_PARTITION is not set 1829 + # CONFIG_OSF_PARTITION is not set 1830 + # CONFIG_AMIGA_PARTITION is not set 1831 + # CONFIG_ATARI_PARTITION is not set 1832 + # CONFIG_MAC_PARTITION is not set 1833 + CONFIG_MSDOS_PARTITION=y 1834 + CONFIG_BSD_DISKLABEL=y 1835 + CONFIG_MINIX_SUBPARTITION=y 1836 + CONFIG_SOLARIS_X86_PARTITION=y 1837 + CONFIG_UNIXWARE_DISKLABEL=y 1838 + CONFIG_LDM_PARTITION=y 1839 + # CONFIG_LDM_DEBUG is not set 1840 + # CONFIG_SGI_PARTITION is not set 1841 + # CONFIG_ULTRIX_PARTITION is not set 1842 + # CONFIG_SUN_PARTITION is not set 1843 + # CONFIG_KARMA_PARTITION is not set 1844 + CONFIG_EFI_PARTITION=y 1845 + # CONFIG_SYSV68_PARTITION is not set 1846 + CONFIG_NLS=y 1847 + CONFIG_NLS_DEFAULT="cp437" 1848 + CONFIG_NLS_CODEPAGE_437=m 1849 + CONFIG_NLS_CODEPAGE_737=m 1850 + CONFIG_NLS_CODEPAGE_775=m 1851 + CONFIG_NLS_CODEPAGE_850=m 1852 + CONFIG_NLS_CODEPAGE_852=m 1853 + CONFIG_NLS_CODEPAGE_855=m 1854 + CONFIG_NLS_CODEPAGE_857=m 1855 + CONFIG_NLS_CODEPAGE_860=m 1856 + CONFIG_NLS_CODEPAGE_861=m 1857 + CONFIG_NLS_CODEPAGE_862=m 1858 + CONFIG_NLS_CODEPAGE_863=m 1859 + CONFIG_NLS_CODEPAGE_864=m 1860 + CONFIG_NLS_CODEPAGE_865=m 1861 + CONFIG_NLS_CODEPAGE_866=m 1862 + CONFIG_NLS_CODEPAGE_869=m 1863 + CONFIG_NLS_CODEPAGE_936=m 1864 + CONFIG_NLS_CODEPAGE_950=m 1865 + CONFIG_NLS_CODEPAGE_932=m 1866 + CONFIG_NLS_CODEPAGE_949=m 1867 + CONFIG_NLS_CODEPAGE_874=m 1868 + CONFIG_NLS_ISO8859_8=m 1869 + CONFIG_NLS_CODEPAGE_1250=m 1870 + CONFIG_NLS_CODEPAGE_1251=m 1871 + CONFIG_NLS_ASCII=m 1872 + CONFIG_NLS_ISO8859_1=m 1873 + CONFIG_NLS_ISO8859_2=m 1874 + CONFIG_NLS_ISO8859_3=m 1875 + CONFIG_NLS_ISO8859_4=m 1876 + CONFIG_NLS_ISO8859_5=m 1877 + CONFIG_NLS_ISO8859_6=m 1878 + CONFIG_NLS_ISO8859_7=m 1879 + CONFIG_NLS_ISO8859_9=m 1880 + CONFIG_NLS_ISO8859_13=m 1881 + CONFIG_NLS_ISO8859_14=m 1882 + CONFIG_NLS_ISO8859_15=m 1883 + CONFIG_NLS_KOI8_R=m 1884 + CONFIG_NLS_KOI8_U=m 1885 + CONFIG_NLS_UTF8=m 1886 + # CONFIG_DLM is not set 1887 + 1888 + # 1889 + # Kernel hacking 1890 + # 1891 + # CONFIG_PRINTK_TIME is not set 1892 + # CONFIG_ENABLE_WARN_DEPRECATED is not set 1893 + # CONFIG_ENABLE_MUST_CHECK is not set 1894 + CONFIG_FRAME_WARN=1024 1895 + # CONFIG_MAGIC_SYSRQ is not set 1896 + # CONFIG_UNUSED_SYMBOLS is not set 1897 + CONFIG_DEBUG_FS=y 1898 + # CONFIG_HEADERS_CHECK is not set 1899 + CONFIG_DEBUG_KERNEL=y 1900 + # CONFIG_DEBUG_SHIRQ is not set 1901 + CONFIG_DETECT_SOFTLOCKUP=y 1902 + # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set 1903 + CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 1904 + CONFIG_DETECT_HUNG_TASK=y 1905 + # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set 1906 + CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 1907 + # CONFIG_SCHED_DEBUG is not set 1908 + # CONFIG_SCHEDSTATS is not set 1909 + # CONFIG_TIMER_STATS is not set 1910 + # CONFIG_DEBUG_OBJECTS is not set 1911 + # CONFIG_SLUB_DEBUG_ON is not set 1912 + # CONFIG_SLUB_STATS is not set 1913 + # CONFIG_DEBUG_RT_MUTEXES is not set 1914 + # CONFIG_RT_MUTEX_TESTER is not set 1915 + # CONFIG_DEBUG_SPINLOCK is not set 1916 + # CONFIG_DEBUG_MUTEXES is not set 1917 + # CONFIG_DEBUG_LOCK_ALLOC is not set 1918 + # CONFIG_PROVE_LOCKING is not set 1919 + # CONFIG_LOCK_STAT is not set 1920 + # CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1921 + # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 1922 + # CONFIG_DEBUG_KOBJECT is not set 1923 + CONFIG_DEBUG_BUGVERBOSE=y 1924 + CONFIG_DEBUG_INFO=y 1925 + # CONFIG_DEBUG_VM is not set 1926 + # CONFIG_DEBUG_WRITECOUNT is not set 1927 + CONFIG_DEBUG_MEMORY_INIT=y 1928 + # CONFIG_DEBUG_LIST is not set 1929 + # CONFIG_DEBUG_SG is not set 1930 + # CONFIG_DEBUG_NOTIFIERS is not set 1931 + # CONFIG_BOOT_PRINTK_DELAY is not set 1932 + # CONFIG_RCU_TORTURE_TEST is not set 1933 + # CONFIG_RCU_CPU_STALL_DETECTOR is not set 1934 + # CONFIG_BACKTRACE_SELF_TEST is not set 1935 + # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set 1936 + # CONFIG_FAULT_INJECTION is not set 1937 + # CONFIG_LATENCYTOP is not set 1938 + CONFIG_SYSCTL_SYSCALL_CHECK=y 1939 + # CONFIG_PAGE_POISONING is not set 1940 + CONFIG_HAVE_FUNCTION_TRACER=y 1941 + CONFIG_TRACING_SUPPORT=y 1942 + 1943 + # 1944 + # Tracers 1945 + # 1946 + # CONFIG_FUNCTION_TRACER is not set 1947 + # CONFIG_SCHED_TRACER is not set 1948 + # CONFIG_CONTEXT_SWITCH_TRACER is not set 1949 + # CONFIG_EVENT_TRACER is not set 1950 + # CONFIG_BOOT_TRACER is not set 1951 + # CONFIG_TRACE_BRANCH_PROFILING is not set 1952 + # CONFIG_STACK_TRACER is not set 1953 + # CONFIG_KMEMTRACE is not set 1954 + # CONFIG_WORKQUEUE_TRACER is not set 1955 + # CONFIG_BLK_DEV_IO_TRACE is not set 1956 + # CONFIG_DYNAMIC_DEBUG is not set 1957 + # CONFIG_SAMPLES is not set 1958 + CONFIG_HAVE_ARCH_KGDB=y 1959 + # CONFIG_KGDB is not set 1960 + CONFIG_ARM_UNWIND=y 1961 + CONFIG_DEBUG_USER=y 1962 + # CONFIG_DEBUG_ERRORS is not set 1963 + # CONFIG_DEBUG_STACK_USAGE is not set 1964 + # CONFIG_DEBUG_LL is not set 1965 + CONFIG_DEBUG_S3C_UART=0 1966 + 1967 + # 1968 + # Security options 1969 + # 1970 + CONFIG_KEYS=y 1971 + # CONFIG_KEYS_DEBUG_PROC_KEYS is not set 1972 + # CONFIG_SECURITY is not set 1973 + # CONFIG_SECURITYFS is not set 1974 + CONFIG_SECURITY_FILE_CAPABILITIES=y 1975 + CONFIG_CRYPTO=y 1976 + 1977 + # 1978 + # Crypto core or helper 1979 + # 1980 + CONFIG_CRYPTO_FIPS=y 1981 + CONFIG_CRYPTO_ALGAPI=y 1982 + CONFIG_CRYPTO_ALGAPI2=y 1983 + CONFIG_CRYPTO_AEAD=m 1984 + CONFIG_CRYPTO_AEAD2=y 1985 + CONFIG_CRYPTO_BLKCIPHER=y 1986 + CONFIG_CRYPTO_BLKCIPHER2=y 1987 + CONFIG_CRYPTO_HASH=y 1988 + CONFIG_CRYPTO_HASH2=y 1989 + CONFIG_CRYPTO_RNG=m 1990 + CONFIG_CRYPTO_RNG2=y 1991 + CONFIG_CRYPTO_PCOMP=y 1992 + CONFIG_CRYPTO_MANAGER=y 1993 + CONFIG_CRYPTO_MANAGER2=y 1994 + CONFIG_CRYPTO_GF128MUL=m 1995 + CONFIG_CRYPTO_NULL=m 1996 + CONFIG_CRYPTO_WORKQUEUE=y 1997 + CONFIG_CRYPTO_CRYPTD=m 1998 + CONFIG_CRYPTO_AUTHENC=m 1999 + CONFIG_CRYPTO_TEST=m 2000 + 2001 + # 2002 + # Authenticated Encryption with Associated Data 2003 + # 2004 + CONFIG_CRYPTO_CCM=m 2005 + CONFIG_CRYPTO_GCM=m 2006 + CONFIG_CRYPTO_SEQIV=m 2007 + 2008 + # 2009 + # Block modes 2010 + # 2011 + CONFIG_CRYPTO_CBC=y 2012 + CONFIG_CRYPTO_CTR=m 2013 + CONFIG_CRYPTO_CTS=m 2014 + CONFIG_CRYPTO_ECB=y 2015 + CONFIG_CRYPTO_LRW=m 2016 + CONFIG_CRYPTO_PCBC=m 2017 + CONFIG_CRYPTO_XTS=m 2018 + 2019 + # 2020 + # Hash modes 2021 + # 2022 + CONFIG_CRYPTO_HMAC=y 2023 + CONFIG_CRYPTO_XCBC=m 2024 + 2025 + # 2026 + # Digest 2027 + # 2028 + CONFIG_CRYPTO_CRC32C=m 2029 + CONFIG_CRYPTO_MD4=m 2030 + CONFIG_CRYPTO_MD5=y 2031 + CONFIG_CRYPTO_MICHAEL_MIC=y 2032 + CONFIG_CRYPTO_RMD128=m 2033 + CONFIG_CRYPTO_RMD160=m 2034 + CONFIG_CRYPTO_RMD256=m 2035 + CONFIG_CRYPTO_RMD320=m 2036 + CONFIG_CRYPTO_SHA1=m 2037 + CONFIG_CRYPTO_SHA256=m 2038 + CONFIG_CRYPTO_SHA512=m 2039 + CONFIG_CRYPTO_TGR192=m 2040 + CONFIG_CRYPTO_WP512=m 2041 + 2042 + # 2043 + # Ciphers 2044 + # 2045 + CONFIG_CRYPTO_AES=y 2046 + CONFIG_CRYPTO_ANUBIS=m 2047 + CONFIG_CRYPTO_ARC4=y 2048 + CONFIG_CRYPTO_BLOWFISH=m 2049 + CONFIG_CRYPTO_CAMELLIA=m 2050 + CONFIG_CRYPTO_CAST5=m 2051 + CONFIG_CRYPTO_CAST6=m 2052 + CONFIG_CRYPTO_DES=y 2053 + CONFIG_CRYPTO_FCRYPT=m 2054 + CONFIG_CRYPTO_KHAZAD=m 2055 + CONFIG_CRYPTO_SALSA20=m 2056 + CONFIG_CRYPTO_SEED=m 2057 + CONFIG_CRYPTO_SERPENT=m 2058 + CONFIG_CRYPTO_TEA=m 2059 + CONFIG_CRYPTO_TWOFISH=m 2060 + CONFIG_CRYPTO_TWOFISH_COMMON=m 2061 + 2062 + # 2063 + # Compression 2064 + # 2065 + CONFIG_CRYPTO_DEFLATE=m 2066 + CONFIG_CRYPTO_ZLIB=m 2067 + CONFIG_CRYPTO_LZO=m 2068 + 2069 + # 2070 + # Random Number Generation 2071 + # 2072 + CONFIG_CRYPTO_ANSI_CPRNG=m 2073 + CONFIG_CRYPTO_HW=y 2074 + # CONFIG_BINARY_PRINTF is not set 2075 + 2076 + # 2077 + # Library routines 2078 + # 2079 + CONFIG_BITREVERSE=y 2080 + CONFIG_GENERIC_FIND_LAST_BIT=y 2081 + CONFIG_CRC_CCITT=m 2082 + CONFIG_CRC16=m 2083 + CONFIG_CRC_T10DIF=y 2084 + CONFIG_CRC_ITU_T=y 2085 + CONFIG_CRC32=y 2086 + CONFIG_CRC7=y 2087 + CONFIG_LIBCRC32C=m 2088 + CONFIG_ZLIB_INFLATE=y 2089 + CONFIG_ZLIB_DEFLATE=y 2090 + CONFIG_LZO_COMPRESS=m 2091 + CONFIG_LZO_DECOMPRESS=m 2092 + CONFIG_DECOMPRESS_GZIP=y 2093 + CONFIG_DECOMPRESS_BZIP2=y 2094 + CONFIG_DECOMPRESS_LZMA=y 2095 + CONFIG_HAS_IOMEM=y 2096 + CONFIG_HAS_DMA=y 2097 + CONFIG_NLATTR=y
+2
arch/arm/include/asm/unistd.h
··· 389 389 #define __NR_inotify_init1 (__NR_SYSCALL_BASE+360) 390 390 #define __NR_preadv (__NR_SYSCALL_BASE+361) 391 391 #define __NR_pwritev (__NR_SYSCALL_BASE+362) 392 + #define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363) 393 + #define __NR_perf_counter_open (__NR_SYSCALL_BASE+364) 392 394 393 395 /* 394 396 * The following SWIs are ARM private.
+2
arch/arm/kernel/calls.S
··· 372 372 /* 360 */ CALL(sys_inotify_init1) 373 373 CALL(sys_preadv) 374 374 CALL(sys_pwritev) 375 + CALL(sys_rt_tgsigqueueinfo) 376 + CALL(sys_perf_counter_open) 375 377 #ifndef syscalls_counted 376 378 .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls 377 379 #define syscalls_counted
+3 -3
arch/arm/kernel/irq.c
··· 167 167 168 168 #ifdef CONFIG_SMP 169 169 cpumask_setall(bad_irq_desc.affinity); 170 - bad_irq_desc.cpu = smp_processor_id(); 170 + bad_irq_desc.node = smp_processor_id(); 171 171 #endif 172 172 init_arch_irq(); 173 173 } ··· 176 176 177 177 static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) 178 178 { 179 - pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->cpu, cpu); 179 + pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu); 180 180 181 181 spin_lock_irq(&desc->lock); 182 182 desc->chip->set_affinity(irq, cpumask_of(cpu)); ··· 195 195 for (i = 0; i < NR_IRQS; i++) { 196 196 struct irq_desc *desc = irq_desc + i; 197 197 198 - if (desc->cpu == cpu) { 198 + if (desc->node == cpu) { 199 199 unsigned int newcpu = cpumask_any_and(desc->affinity, 200 200 cpu_online_mask); 201 201 if (newcpu >= nr_cpu_ids) {
+50 -27
arch/arm/kernel/process.c
··· 114 114 /* 115 115 * Function pointers to optional machine specific functions 116 116 */ 117 - void (*pm_idle)(void); 118 - EXPORT_SYMBOL(pm_idle); 119 - 120 117 void (*pm_power_off)(void); 121 118 EXPORT_SYMBOL(pm_power_off); 122 119 ··· 127 130 */ 128 131 static void default_idle(void) 129 132 { 130 - if (hlt_counter) 131 - cpu_relax(); 132 - else { 133 - local_irq_disable(); 134 - if (!need_resched()) 135 - arch_idle(); 136 - local_irq_enable(); 137 - } 133 + if (!need_resched()) 134 + arch_idle(); 135 + local_irq_enable(); 138 136 } 139 137 138 + void (*pm_idle)(void) = default_idle; 139 + EXPORT_SYMBOL(pm_idle); 140 + 140 141 /* 141 - * The idle thread. We try to conserve power, while trying to keep 142 - * overall latency low. The architecture specific idle is passed 143 - * a value to indicate the level of "idleness" of the system. 142 + * The idle thread, has rather strange semantics for calling pm_idle, 143 + * but this is what x86 does and we need to do the same, so that 144 + * things like cpuidle get called in the same way. The only difference 145 + * is that we always respect 'hlt_counter' to prevent low power idle. 144 146 */ 145 147 void cpu_idle(void) 146 148 { ··· 147 151 148 152 /* endless idle loop with no priority at all */ 149 153 while (1) { 150 - void (*idle)(void) = pm_idle; 151 - 154 + tick_nohz_stop_sched_tick(1); 155 + leds_event(led_idle_start); 156 + while (!need_resched()) { 152 157 #ifdef CONFIG_HOTPLUG_CPU 153 - if (cpu_is_offline(smp_processor_id())) { 154 - leds_event(led_idle_start); 155 - cpu_die(); 156 - } 158 + if (cpu_is_offline(smp_processor_id())) 159 + cpu_die(); 157 160 #endif 158 161 159 - if (!idle) 160 - idle = default_idle; 161 - leds_event(led_idle_start); 162 - tick_nohz_stop_sched_tick(1); 163 - while (!need_resched()) 164 - idle(); 162 + local_irq_disable(); 163 + if (hlt_counter) { 164 + local_irq_enable(); 165 + cpu_relax(); 166 + } else { 167 + stop_critical_timings(); 168 + pm_idle(); 169 + start_critical_timings(); 170 + /* 171 + * This will eventually be removed - pm_idle 172 + * functions should always return with IRQs 173 + * enabled. 174 + */ 175 + WARN_ON(irqs_disabled()); 176 + local_irq_enable(); 177 + } 178 + } 165 179 leds_event(led_idle_end); 166 180 tick_nohz_restart_sched_tick(); 167 181 preempt_enable_no_resched(); ··· 358 352 " .size kernel_thread_helper, . - kernel_thread_helper\n" 359 353 " .previous"); 360 354 355 + #ifdef CONFIG_ARM_UNWIND 356 + extern void kernel_thread_exit(long code); 357 + asm( ".section .text\n" 358 + " .align\n" 359 + " .type kernel_thread_exit, #function\n" 360 + "kernel_thread_exit:\n" 361 + " .fnstart\n" 362 + " .cantunwind\n" 363 + " bl do_exit\n" 364 + " nop\n" 365 + " .fnend\n" 366 + " .size kernel_thread_exit, . - kernel_thread_exit\n" 367 + " .previous"); 368 + #else 369 + #define kernel_thread_exit do_exit 370 + #endif 371 + 361 372 /* 362 373 * Create a kernel thread. 363 374 */ ··· 386 363 387 364 regs.ARM_r1 = (unsigned long)arg; 388 365 regs.ARM_r2 = (unsigned long)fn; 389 - regs.ARM_r3 = (unsigned long)do_exit; 366 + regs.ARM_r3 = (unsigned long)kernel_thread_exit; 390 367 regs.ARM_pc = (unsigned long)kernel_thread_helper; 391 368 regs.ARM_cpsr = SVC_MODE | PSR_ENDSTATE; 392 369
+9 -10
arch/arm/kernel/unwind.c
··· 212 212 ctrl->vrs[14] = *vsp++; 213 213 ctrl->vrs[SP] = (unsigned long)vsp; 214 214 } else if (insn == 0xb0) { 215 - ctrl->vrs[PC] = ctrl->vrs[LR]; 215 + if (ctrl->vrs[PC] == 0) 216 + ctrl->vrs[PC] = ctrl->vrs[LR]; 216 217 /* no further processing */ 217 218 ctrl->entries = 0; 218 219 } else if (insn == 0xb1) { ··· 310 309 } 311 310 312 311 while (ctrl.entries > 0) { 313 - int urc; 314 - 315 - if (ctrl.vrs[SP] < low || ctrl.vrs[SP] >= high) 316 - return -URC_FAILURE; 317 - urc = unwind_exec_insn(&ctrl); 312 + int urc = unwind_exec_insn(&ctrl); 318 313 if (urc < 0) 319 314 return urc; 315 + if (ctrl.vrs[SP] < low || ctrl.vrs[SP] >= high) 316 + return -URC_FAILURE; 320 317 } 321 318 322 319 if (ctrl.vrs[PC] == 0) 323 320 ctrl.vrs[PC] = ctrl.vrs[LR]; 321 + 322 + /* check for infinite loop */ 323 + if (frame->pc == ctrl.vrs[PC]) 324 + return -URC_FAILURE; 324 325 325 326 frame->fp = ctrl.vrs[FP]; 326 327 frame->sp = ctrl.vrs[SP]; ··· 335 332 void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk) 336 333 { 337 334 struct stackframe frame; 338 - unsigned long high, low; 339 335 register unsigned long current_sp asm ("sp"); 340 336 341 337 pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); ··· 363 361 frame.lr = 0; 364 362 frame.pc = thread_saved_pc(tsk); 365 363 } 366 - 367 - low = frame.sp & ~(THREAD_SIZE - 1); 368 - high = low + THREAD_SIZE; 369 364 370 365 while (1) { 371 366 int urc;
+8
arch/arm/kernel/vmlinux.lds.S
··· 84 84 *(.exitcall.exit) 85 85 *(.ARM.exidx.exit.text) 86 86 *(.ARM.extab.exit.text) 87 + #ifndef CONFIG_HOTPLUG_CPU 88 + *(.ARM.exidx.cpuexit.text) 89 + *(.ARM.extab.cpuexit.text) 90 + #endif 91 + #ifndef CONFIG_HOTPLUG 92 + *(.ARM.exidx.devexit.text) 93 + *(.ARM.extab.devexit.text) 94 + #endif 87 95 #ifndef CONFIG_MMU 88 96 *(.fixup) 89 97 *(__ex_table)
+1 -1
arch/arm/mach-omap2/clock.c
··· 302 302 udelay(1); 303 303 } 304 304 305 - if (i < MAX_CLOCK_ENABLE_WAIT) 305 + if (i <= MAX_CLOCK_ENABLE_WAIT) 306 306 pr_debug("Clock %s stable after %d loops\n", name, i); 307 307 else 308 308 printk(KERN_ERR "Clock %s didn't enable in %d tries\n",
+31 -11
arch/arm/mach-omap2/clock34xx.c
··· 286 286 287 287 #define MIN_SDRC_DLL_LOCK_FREQ 83000000 288 288 289 + #define CYCLES_PER_MHZ 1000000 290 + 291 + /* Scale factor for fixed-point arith in omap3_core_dpll_m2_set_rate() */ 292 + #define SDRC_MPURATE_SCALE 8 293 + 294 + /* 2^SDRC_MPURATE_BASE_SHIFT: MPU MHz that SDRC_MPURATE_LOOPS is defined for */ 295 + #define SDRC_MPURATE_BASE_SHIFT 9 296 + 297 + /* 298 + * SDRC_MPURATE_LOOPS: Number of MPU loops to execute at 299 + * 2^MPURATE_BASE_SHIFT MHz for SDRC to stabilize 300 + */ 301 + #define SDRC_MPURATE_LOOPS 96 302 + 289 303 /** 290 304 * omap3_dpll_recalc - recalculate DPLL rate 291 305 * @clk: DPLL struct clk ··· 723 709 { 724 710 u32 new_div = 0; 725 711 u32 unlock_dll = 0; 726 - unsigned long validrate, sdrcrate; 712 + u32 c; 713 + unsigned long validrate, sdrcrate, mpurate; 727 714 struct omap_sdrc_params *sp; 728 715 729 716 if (!clk || !rate) ··· 733 718 if (clk != &dpll3_m2_ck) 734 719 return -EINVAL; 735 720 736 - if (rate == clk->rate) 737 - return 0; 738 - 739 721 validrate = omap2_clksel_round_rate_div(clk, rate, &new_div); 740 722 if (validrate != rate) 741 723 return -EINVAL; 742 724 743 725 sdrcrate = sdrc_ick.rate; 744 726 if (rate > clk->rate) 745 - sdrcrate <<= ((rate / clk->rate) - 1); 727 + sdrcrate <<= ((rate / clk->rate) >> 1); 746 728 else 747 - sdrcrate >>= ((clk->rate / rate) - 1); 729 + sdrcrate >>= ((clk->rate / rate) >> 1); 748 730 749 731 sp = omap2_sdrc_get_params(sdrcrate); 750 732 if (!sp) ··· 752 740 unlock_dll = 1; 753 741 } 754 742 743 + /* 744 + * XXX This only needs to be done when the CPU frequency changes 745 + */ 746 + mpurate = arm_fck.rate / CYCLES_PER_MHZ; 747 + c = (mpurate << SDRC_MPURATE_SCALE) >> SDRC_MPURATE_BASE_SHIFT; 748 + c += 1; /* for safety */ 749 + c *= SDRC_MPURATE_LOOPS; 750 + c >>= SDRC_MPURATE_SCALE; 751 + if (c == 0) 752 + c = 1; 753 + 755 754 pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", clk->rate, 756 755 validrate); 757 756 pr_debug("clock: SDRC timing params used: %08x %08x %08x\n", 758 757 sp->rfr_ctrl, sp->actim_ctrla, sp->actim_ctrlb); 759 758 760 - /* REVISIT: SRAM code doesn't support other M2 divisors yet */ 761 - WARN_ON(new_div != 1 && new_div != 2); 762 - 763 - /* REVISIT: Add SDRC_MR changing to this code also */ 764 759 omap3_configure_core_dpll(sp->rfr_ctrl, sp->actim_ctrla, 765 - sp->actim_ctrlb, new_div, unlock_dll); 760 + sp->actim_ctrlb, new_div, unlock_dll, c, 761 + sp->mr, rate > clk->rate); 766 762 767 763 return 0; 768 764 }
+36
arch/arm/mach-omap2/io.c
··· 21 21 #include <linux/kernel.h> 22 22 #include <linux/init.h> 23 23 #include <linux/io.h> 24 + #include <linux/clk.h> 24 25 25 26 #include <asm/tlb.h> 26 27 ··· 242 241 omapfb_reserve_sdram(); 243 242 } 244 243 244 + /* 245 + * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters 246 + * 247 + * Sets the CORE DPLL3 M2 divider to the same value that it's at 248 + * currently. This has the effect of setting the SDRC SDRAM AC timing 249 + * registers to the values currently defined by the kernel. Currently 250 + * only defined for OMAP3; will return 0 if called on OMAP2. Returns 251 + * -EINVAL if the dpll3_m2_ck cannot be found, 0 if called on OMAP2, 252 + * or passes along the return value of clk_set_rate(). 253 + */ 254 + static int __init _omap2_init_reprogram_sdrc(void) 255 + { 256 + struct clk *dpll3_m2_ck; 257 + int v = -EINVAL; 258 + long rate; 259 + 260 + if (!cpu_is_omap34xx()) 261 + return 0; 262 + 263 + dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck"); 264 + if (!dpll3_m2_ck) 265 + return -EINVAL; 266 + 267 + rate = clk_get_rate(dpll3_m2_ck); 268 + pr_info("Reprogramming SDRC clock to %ld Hz\n", rate); 269 + v = clk_set_rate(dpll3_m2_ck, rate); 270 + if (v) 271 + pr_err("dpll3_m2_clk rate change failed: %d\n", v); 272 + 273 + clk_put(dpll3_m2_ck); 274 + 275 + return v; 276 + } 277 + 245 278 void __init omap2_init_common_hw(struct omap_sdrc_params *sp) 246 279 { 247 280 omap2_mux_init(); ··· 284 249 clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); 285 250 omap2_clk_init(); 286 251 omap2_sdrc_init(sp); 252 + _omap2_init_reprogram_sdrc(); 287 253 #endif 288 254 gpmc_init(); 289 255 }
+1 -1
arch/arm/mach-omap2/powerdomain.c
··· 1099 1099 (c++ < PWRDM_TRANSITION_BAILOUT)) 1100 1100 udelay(1); 1101 1101 1102 - if (c >= PWRDM_TRANSITION_BAILOUT) { 1102 + if (c > PWRDM_TRANSITION_BAILOUT) { 1103 1103 printk(KERN_ERR "powerdomain: waited too long for " 1104 1104 "powerdomain %s to complete transition\n", pwrdm->name); 1105 1105 return -EAGAIN;
+85 -44
arch/arm/mach-omap2/sram34xx.S
··· 3 3 * 4 4 * Omap3 specific functions that need to be run in internal SRAM 5 5 * 6 - * (C) Copyright 2007 7 - * Texas Instruments Inc. 8 - * Rajendra Nayak <rnayak@ti.com> 6 + * Copyright (C) 2004, 2007, 2008 Texas Instruments, Inc. 7 + * Copyright (C) 2008 Nokia Corporation 9 8 * 10 - * (C) Copyright 2004 11 - * Texas Instruments, <www.ti.com> 9 + * Rajendra Nayak <rnayak@ti.com> 12 10 * Richard Woodruff <r-woodruff2@ti.com> 11 + * Paul Walmsley 13 12 * 14 13 * This program is free software; you can redistribute it and/or 15 14 * modify it under the terms of the GNU General Public License as ··· 36 37 37 38 .text 38 39 40 + /* r4 parameters */ 41 + #define SDRC_NO_UNLOCK_DLL 0x0 42 + #define SDRC_UNLOCK_DLL 0x1 43 + 44 + /* SDRC_DLLA_CTRL bit settings */ 45 + #define FIXEDDELAY_SHIFT 24 46 + #define FIXEDDELAY_MASK (0xff << FIXEDDELAY_SHIFT) 47 + #define DLLIDLE_MASK 0x4 48 + 39 49 /* 40 - * Change frequency of core dpll 41 - * r0 = sdrc_rfr_ctrl r1 = sdrc_actim_ctrla r2 = sdrc_actim_ctrlb r3 = M2 42 - * r4 = Unlock SDRC DLL? (1 = yes, 0 = no) -- only unlock DLL for 50 + * SDRC_DLLA_CTRL default values: TI hardware team indicates that 51 + * FIXEDDELAY should be initialized to 0xf. This apparently was 52 + * empirically determined during process testing, so no derivation 53 + * was provided. 54 + */ 55 + #define FIXEDDELAY_DEFAULT (0x0f << FIXEDDELAY_SHIFT) 56 + 57 + /* SDRC_DLLA_STATUS bit settings */ 58 + #define LOCKSTATUS_MASK 0x4 59 + 60 + /* SDRC_POWER bit settings */ 61 + #define SRFRONIDLEREQ_MASK 0x40 62 + #define PWDENA_MASK 0x4 63 + 64 + /* CM_IDLEST1_CORE bit settings */ 65 + #define ST_SDRC_MASK 0x2 66 + 67 + /* CM_ICLKEN1_CORE bit settings */ 68 + #define EN_SDRC_MASK 0x2 69 + 70 + /* CM_CLKSEL1_PLL bit settings */ 71 + #define CORE_DPLL_CLKOUT_DIV_SHIFT 0x1b 72 + 73 + /* 74 + * omap3_sram_configure_core_dpll - change DPLL3 M2 divider 75 + * r0 = new SDRC_RFR_CTRL register contents 76 + * r1 = new SDRC_ACTIM_CTRLA register contents 77 + * r2 = new SDRC_ACTIM_CTRLB register contents 78 + * r3 = new M2 divider setting (only 1 and 2 supported right now) 79 + * r4 = unlock SDRC DLL? (1 = yes, 0 = no). Only unlock DLL for 43 80 * SDRC rates < 83MHz 81 + * r5 = number of MPU cycles to wait for SDRC to stabilize after 82 + * reprogramming the SDRC when switching to a slower MPU speed 83 + * r6 = new SDRC_MR_0 register value 84 + * r7 = increasing SDRC rate? (1 = yes, 0 = no) 85 + * 44 86 */ 45 87 ENTRY(omap3_sram_configure_core_dpll) 46 88 stmfd sp!, {r1-r12, lr} @ store regs to stack 47 89 ldr r4, [sp, #52] @ pull extra args off the stack 90 + ldr r5, [sp, #56] @ load extra args from the stack 91 + ldr r6, [sp, #60] @ load extra args from the stack 92 + ldr r7, [sp, #64] @ load extra args from the stack 48 93 dsb @ flush buffered writes to interconnect 49 - cmp r3, #0x2 50 - blne configure_sdrc 51 - cmp r4, #0x1 94 + cmp r7, #1 @ if increasing SDRC clk rate, 95 + bleq configure_sdrc @ program the SDRC regs early (for RFR) 96 + cmp r4, #SDRC_UNLOCK_DLL @ set the intended DLL state 52 97 bleq unlock_dll 53 98 blne lock_dll 54 - bl sdram_in_selfrefresh @ put the SDRAM in self refresh 55 - bl configure_core_dpll 56 - bl enable_sdrc 57 - cmp r4, #0x1 99 + bl sdram_in_selfrefresh @ put SDRAM in self refresh, idle SDRC 100 + bl configure_core_dpll @ change the DPLL3 M2 divider 101 + bl enable_sdrc @ take SDRC out of idle 102 + cmp r4, #SDRC_UNLOCK_DLL @ wait for DLL status to change 58 103 bleq wait_dll_unlock 59 104 blne wait_dll_lock 60 - cmp r3, #0x1 61 - blne configure_sdrc 105 + cmp r7, #1 @ if increasing SDRC clk rate, 106 + beq return_to_sdram @ return to SDRAM code, otherwise, 107 + bl configure_sdrc @ reprogram SDRC regs now 108 + mov r12, r5 109 + bl wait_clk_stable @ wait for SDRC to stabilize 110 + return_to_sdram: 62 111 isb @ prevent speculative exec past here 63 112 mov r0, #0 @ return value 64 113 ldmfd sp!, {r1-r12, pc} @ restore regs and return 65 114 unlock_dll: 66 115 ldr r11, omap3_sdrc_dlla_ctrl 67 116 ldr r12, [r11] 68 - orr r12, r12, #0x4 117 + and r12, r12, #FIXEDDELAY_MASK 118 + orr r12, r12, #FIXEDDELAY_DEFAULT 119 + orr r12, r12, #DLLIDLE_MASK 69 120 str r12, [r11] @ (no OCP barrier needed) 70 121 bx lr 71 122 lock_dll: 72 123 ldr r11, omap3_sdrc_dlla_ctrl 73 124 ldr r12, [r11] 74 - bic r12, r12, #0x4 125 + bic r12, r12, #DLLIDLE_MASK 75 126 str r12, [r11] @ (no OCP barrier needed) 76 127 bx lr 77 128 sdram_in_selfrefresh: 78 129 ldr r11, omap3_sdrc_power @ read the SDRC_POWER register 79 130 ldr r12, [r11] @ read the contents of SDRC_POWER 80 131 mov r9, r12 @ keep a copy of SDRC_POWER bits 81 - orr r12, r12, #0x40 @ enable self refresh on idle req 82 - bic r12, r12, #0x4 @ clear PWDENA 132 + orr r12, r12, #SRFRONIDLEREQ_MASK @ enable self refresh on idle 133 + bic r12, r12, #PWDENA_MASK @ clear PWDENA 83 134 str r12, [r11] @ write back to SDRC_POWER register 84 135 ldr r12, [r11] @ posted-write barrier for SDRC 136 + idle_sdrc: 85 137 ldr r11, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg 86 138 ldr r12, [r11] 87 - bic r12, r12, #0x2 @ disable iclk bit for SDRC 139 + bic r12, r12, #EN_SDRC_MASK @ disable iclk bit for SDRC 88 140 str r12, [r11] 89 141 wait_sdrc_idle: 90 142 ldr r11, omap3_cm_idlest1_core 91 143 ldr r12, [r11] 92 - and r12, r12, #0x2 @ check for SDRC idle 93 - cmp r12, #2 144 + and r12, r12, #ST_SDRC_MASK @ check for SDRC idle 145 + cmp r12, #ST_SDRC_MASK 94 146 bne wait_sdrc_idle 95 147 bx lr 96 148 configure_core_dpll: ··· 149 99 ldr r12, [r11] 150 100 ldr r10, core_m2_mask_val @ modify m2 for core dpll 151 101 and r12, r12, r10 152 - orr r12, r12, r3, lsl #0x1B @ r3 contains the M2 val 102 + orr r12, r12, r3, lsl #CORE_DPLL_CLKOUT_DIV_SHIFT 153 103 str r12, [r11] 154 104 ldr r12, [r11] @ posted-write barrier for CM 155 - mov r12, #0x800 @ wait for the clock to stabilise 156 - cmp r3, #2 157 - bne wait_clk_stable 158 105 bx lr 159 106 wait_clk_stable: 160 107 subs r12, r12, #1 161 108 bne wait_clk_stable 162 - nop 163 - nop 164 - nop 165 - nop 166 - nop 167 - nop 168 - nop 169 - nop 170 - nop 171 - nop 172 109 bx lr 173 110 enable_sdrc: 174 111 ldr r11, omap3_cm_iclken1_core 175 112 ldr r12, [r11] 176 - orr r12, r12, #0x2 @ enable iclk bit for SDRC 113 + orr r12, r12, #EN_SDRC_MASK @ enable iclk bit for SDRC 177 114 str r12, [r11] 178 115 wait_sdrc_idle1: 179 116 ldr r11, omap3_cm_idlest1_core 180 117 ldr r12, [r11] 181 - and r12, r12, #0x2 118 + and r12, r12, #ST_SDRC_MASK 182 119 cmp r12, #0 183 120 bne wait_sdrc_idle1 184 121 restore_sdrc_power_val: ··· 175 138 wait_dll_lock: 176 139 ldr r11, omap3_sdrc_dlla_status 177 140 ldr r12, [r11] 178 - and r12, r12, #0x4 179 - cmp r12, #0x4 141 + and r12, r12, #LOCKSTATUS_MASK 142 + cmp r12, #LOCKSTATUS_MASK 180 143 bne wait_dll_lock 181 144 bx lr 182 145 wait_dll_unlock: 183 146 ldr r11, omap3_sdrc_dlla_status 184 147 ldr r12, [r11] 185 - and r12, r12, #0x4 148 + and r12, r12, #LOCKSTATUS_MASK 186 149 cmp r12, #0x0 187 150 bne wait_dll_unlock 188 151 bx lr ··· 193 156 str r1, [r11] 194 157 ldr r11, omap3_sdrc_actim_ctrlb 195 158 str r2, [r11] 196 - ldr r2, [r11] @ posted-write barrier for SDRC 159 + ldr r11, omap3_sdrc_mr_0 160 + str r6, [r11] 161 + ldr r6, [r11] @ posted-write barrier for SDRC 197 162 bx lr 198 163 199 164 omap3_sdrc_power: ··· 212 173 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0) 213 174 omap3_sdrc_actim_ctrlb: 214 175 .word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0) 176 + omap3_sdrc_mr_0: 177 + .word OMAP34XX_SDRC_REGADDR(SDRC_MR_0) 215 178 omap3_sdrc_dlla_status: 216 179 .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS) 217 180 omap3_sdrc_dlla_ctrl:
+1 -1
arch/arm/mach-orion5x/addr-map.c
··· 200 200 201 201 int __init orion5x_setup_sram_win(void) 202 202 { 203 - return setup_cpu_win(win_alloc_count, ORION5X_SRAM_PHYS_BASE, 203 + return setup_cpu_win(win_alloc_count++, ORION5X_SRAM_PHYS_BASE, 204 204 ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1); 205 205 }
+9 -1
arch/arm/mach-orion5x/common.c
··· 562 562 .resource = orion5x_crypto_res, 563 563 }; 564 564 565 - int __init orion5x_crypto_init(void) 565 + static int __init orion5x_crypto_init(void) 566 566 { 567 567 int ret; 568 568 ··· 695 695 printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); 696 696 disable_hlt(); 697 697 } 698 + 699 + /* 700 + * The 5082/5181l/5182/6082/6082l/6183 have crypto 701 + * while 5180n/5181/5281 don't have crypto. 702 + */ 703 + if ((dev == MV88F5181_DEV_ID && rev >= MV88F5181L_REV_A0) || 704 + dev == MV88F5182_DEV_ID || dev == MV88F6183_DEV_ID) 705 + orion5x_crypto_init(); 698 706 699 707 /* 700 708 * Register watchdog driver
-1
arch/arm/mach-orion5x/common.h
··· 38 38 void orion5x_uart0_init(void); 39 39 void orion5x_uart1_init(void); 40 40 void orion5x_xor_init(void); 41 - int orion5x_crypto_init(void); 42 41 43 42 /* 44 43 * PCIe/PCI functions.
+10
arch/arm/mach-pxa/Kconfig
··· 401 401 Say Y here if you intend to run this kernel on Palm Zire 72 402 402 handheld computer. 403 403 404 + config MACH_TREO680 405 + bool "Palm Treo 680" 406 + default y 407 + depends on ARCH_PXA_PALM 408 + select PXA27x 409 + select IWMMXT 410 + help 411 + Say Y here if you intend to run this kernel on Palm Treo 680 412 + smartphone. 413 + 404 414 config MACH_PALMLD 405 415 bool "Palm LifeDrive" 406 416 default y
+1
arch/arm/mach-pxa/Makefile
··· 62 62 obj-$(CONFIG_MACH_PALMTX) += palmtx.o 63 63 obj-$(CONFIG_MACH_PALMLD) += palmld.o 64 64 obj-$(CONFIG_MACH_PALMZ72) += palmz72.o 65 + obj-$(CONFIG_MACH_TREO680) += treo680.o 65 66 obj-$(CONFIG_ARCH_VIPER) += viper.o 66 67 67 68 ifeq ($(CONFIG_MACH_ZYLONITE),y)
+6
arch/arm/mach-pxa/corgi.c
··· 23 23 #include <linux/pm.h> 24 24 #include <linux/gpio.h> 25 25 #include <linux/backlight.h> 26 + #include <linux/i2c.h> 26 27 #include <linux/io.h> 27 28 #include <linux/spi/spi.h> 28 29 #include <linux/spi/ads7846.h> ··· 601 600 &sharpsl_rom_device, 602 601 }; 603 602 603 + static struct i2c_board_info __initdata corgi_i2c_devices[] = { 604 + { I2C_BOARD_INFO("wm8731", 0x1b) }, 605 + }; 606 + 604 607 static void corgi_poweroff(void) 605 608 { 606 609 if (!machine_is_corgi()) ··· 639 634 pxa_set_mci_info(&corgi_mci_platform_data); 640 635 pxa_set_ficp_info(&corgi_ficp_platform_data); 641 636 pxa_set_i2c_info(NULL); 637 + i2c_register_board_info(0, ARRAY_AND_SIZE(corgi_i2c_devices)); 642 638 643 639 platform_scoop_config = &corgi_pcmcia_config; 644 640
+58 -5
arch/arm/mach-pxa/em-x270.c
··· 30 30 #include <linux/apm-emulation.h> 31 31 #include <linux/i2c.h> 32 32 #include <linux/i2c/pca953x.h> 33 + #include <linux/regulator/userspace-consumer.h> 33 34 34 35 #include <media/soc_camera.h> 35 36 ··· 736 735 .rx_threshold = 1, 737 736 .tx_threshold = 1, 738 737 .timeout = 1000, 738 + .gpio_cs = 14, 739 739 }; 740 740 741 741 static unsigned long em_x270_libertas_pin_config[] = { ··· 805 803 806 804 struct libertas_spi_platform_data em_x270_libertas_pdata = { 807 805 .use_dummy_writes = 1, 808 - .gpio_cs = 14, 809 806 .setup = em_x270_libertas_setup, 810 807 .teardown = em_x270_libertas_teardown, 811 808 }; ··· 839 838 static inline void em_x270_init_spi(void) {} 840 839 #endif 841 840 842 - #if defined(CONFIG_SND_PXA2XX_AC97) || defined(CONFIG_SND_PXA2XX_AC97_MODULE) 841 + #if defined(CONFIG_SND_PXA2XX_LIB_AC97) 842 + static pxa2xx_audio_ops_t em_x270_ac97_info = { 843 + .reset_gpio = 113, 844 + }; 845 + 843 846 static void __init em_x270_init_ac97(void) 844 847 { 845 - pxa_set_ac97_info(NULL); 848 + pxa_set_ac97_info(&em_x270_ac97_info); 846 849 } 847 850 #else 848 851 static inline void em_x270_init_ac97(void) {} ··· 1043 1038 static inline void em_x270_init_camera(void) {} 1044 1039 #endif 1045 1040 1041 + static struct regulator_bulk_data em_x270_gps_consumer_supply = { 1042 + .supply = "vcc gps", 1043 + }; 1044 + 1045 + static struct regulator_userspace_consumer_data em_x270_gps_consumer_data = { 1046 + .name = "vcc gps", 1047 + .num_supplies = 1, 1048 + .supplies = &em_x270_gps_consumer_supply, 1049 + }; 1050 + 1051 + static struct platform_device em_x270_gps_userspace_consumer = { 1052 + .name = "reg-userspace-consumer", 1053 + .id = 0, 1054 + .dev = { 1055 + .platform_data = &em_x270_gps_consumer_data, 1056 + }, 1057 + }; 1058 + 1059 + static struct regulator_bulk_data em_x270_gprs_consumer_supply = { 1060 + .supply = "vcc gprs", 1061 + }; 1062 + 1063 + static struct regulator_userspace_consumer_data em_x270_gprs_consumer_data = { 1064 + .name = "vcc gprs", 1065 + .num_supplies = 1, 1066 + .supplies = &em_x270_gprs_consumer_supply 1067 + }; 1068 + 1069 + static struct platform_device em_x270_gprs_userspace_consumer = { 1070 + .name = "reg-userspace-consumer", 1071 + .id = 1, 1072 + .dev = { 1073 + .platform_data = &em_x270_gprs_consumer_data, 1074 + } 1075 + }; 1076 + 1077 + static struct platform_device *em_x270_userspace_consumers[] = { 1078 + &em_x270_gps_userspace_consumer, 1079 + &em_x270_gprs_userspace_consumer, 1080 + }; 1081 + 1082 + static void __init em_x270_userspace_consumers_init(void) 1083 + { 1084 + platform_add_devices(ARRAY_AND_SIZE(em_x270_userspace_consumers)); 1085 + } 1086 + 1046 1087 /* DA9030 related initializations */ 1047 1088 #define REGULATOR_CONSUMER(_name, _dev, _supply) \ 1048 1089 static struct regulator_consumer_supply _name##_consumers[] = { \ ··· 1098 1047 }, \ 1099 1048 } 1100 1049 1101 - REGULATOR_CONSUMER(ldo3, NULL, "vcc gps"); 1050 + REGULATOR_CONSUMER(ldo3, &em_x270_gps_userspace_consumer.dev, "vcc gps"); 1102 1051 REGULATOR_CONSUMER(ldo5, NULL, "vcc cam"); 1103 1052 REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio"); 1104 1053 REGULATOR_CONSUMER(ldo12, NULL, "vcc usb"); 1105 - REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs"); 1054 + REGULATOR_CONSUMER(ldo19, &em_x270_gprs_userspace_consumer.dev, "vcc gprs"); 1106 1055 1107 1056 #define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \ 1108 1057 static struct regulator_init_data _ldo##_data = { \ ··· 1113 1062 .enabled = 0, \ 1114 1063 }, \ 1115 1064 .valid_ops_mask = _ops_mask, \ 1065 + .apply_uV = 1, \ 1116 1066 }, \ 1117 1067 .num_consumer_supplies = ARRAY_SIZE(_ldo##_consumers), \ 1118 1068 .consumer_supplies = _ldo##_consumers, \ ··· 1292 1240 em_x270_init_spi(); 1293 1241 em_x270_init_i2c(); 1294 1242 em_x270_init_camera(); 1243 + em_x270_userspace_consumers_init(); 1295 1244 } 1296 1245 1297 1246 MACHINE_START(EM_X270, "Compulab EM-X270")
+41
arch/arm/mach-pxa/hx4700.c
··· 30 30 #include <linux/pwm_backlight.h> 31 31 #include <linux/regulator/bq24022.h> 32 32 #include <linux/regulator/machine.h> 33 + #include <linux/regulator/max1586.h> 33 34 #include <linux/spi/ads7846.h> 34 35 #include <linux/spi/spi.h> 35 36 #include <linux/usb/gpio_vbus.h> ··· 776 775 }; 777 776 778 777 /* 778 + * Maxim MAX1587A on PI2C 779 + */ 780 + 781 + static struct regulator_consumer_supply max1587a_consumer = { 782 + .supply = "vcc_core", 783 + }; 784 + 785 + static struct regulator_init_data max1587a_v3_info = { 786 + .constraints = { 787 + .name = "vcc_core range", 788 + .min_uV = 900000, 789 + .max_uV = 1705000, 790 + .always_on = 1, 791 + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, 792 + }, 793 + .num_consumer_supplies = 1, 794 + .consumer_supplies = &max1587a_consumer, 795 + }; 796 + 797 + static struct max1586_subdev_data max1587a_subdev = { 798 + .name = "vcc_core", 799 + .id = MAX1586_V3, 800 + .platform_data = &max1587a_v3_info, 801 + }; 802 + 803 + static struct max1586_platform_data max1587a_info = { 804 + .num_subdevs = 1, 805 + .subdevs = &max1587a_subdev, 806 + .v3_gain = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */ 807 + }; 808 + 809 + static struct i2c_board_info __initdata pi2c_board_info[] = { 810 + { 811 + I2C_BOARD_INFO("max1586", 0x14), 812 + .platform_data = &max1587a_info, 813 + }, 814 + }; 815 + 816 + /* 779 817 * PCMCIA 780 818 */ 781 819 ··· 868 828 pxa_set_ficp_info(&ficp_info); 869 829 pxa27x_set_i2c_power_info(NULL); 870 830 pxa_set_i2c_info(NULL); 831 + i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info)); 871 832 pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); 872 833 spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); 873 834
+2 -3
arch/arm/mach-pxa/include/mach/palmz72.h
··· 21 21 /* SD/MMC */ 22 22 #define GPIO_NR_PALMZ72_SD_DETECT_N 14 23 23 #define GPIO_NR_PALMZ72_SD_POWER_N 98 24 - #define GPIO_NR_PALMZ72_SD_RO 115 24 + #define GPIO_NR_PALMZ72_SD_RO 115 25 25 26 26 /* Touchscreen */ 27 27 #define GPIO_NR_PALMZ72_WM9712_IRQ 27 ··· 31 31 32 32 /* USB */ 33 33 #define GPIO_NR_PALMZ72_USB_DETECT_N 15 34 - #define GPIO_NR_PALMZ72_USB_POWER 95 35 - #define GPIO_NR_PALMZ72_USB_PULLUP 12 34 + #define GPIO_NR_PALMZ72_USB_PULLUP 95 36 35 37 36 /* LCD/Backlight */ 38 37 #define GPIO_NR_PALMZ72_BL_POWER 20
+49
arch/arm/mach-pxa/include/mach/treo680.h
··· 1 + /* 2 + * GPIOs and interrupts for Palm Treo 680 smartphone 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License version 2 as 6 + * published by the Free Software Foundation. 7 + * 8 + */ 9 + 10 + #ifndef _INCLUDE_TREO680_H_ 11 + #define _INCLUDE_TREO680_H_ 12 + 13 + /* GPIOs */ 14 + #define GPIO_NR_TREO680_POWER_DETECT 0 15 + #define GPIO_NR_TREO680_AMP_EN 27 16 + #define GPIO_NR_TREO680_KEYB_BL 24 17 + #define GPIO_NR_TREO680_VIBRATE_EN 44 18 + #define GPIO_NR_TREO680_GREEN_LED 20 19 + #define GPIO_NR_TREO680_RED_LED 79 20 + #define GPIO_NR_TREO680_SD_DETECT_N 113 21 + #define GPIO_NR_TREO680_SD_READONLY 33 22 + #define GPIO_NR_TREO680_EP_DETECT_N 116 23 + #define GPIO_NR_TREO680_SD_POWER 42 24 + #define GPIO_NR_TREO680_USB_DETECT 1 25 + #define GPIO_NR_TREO680_USB_PULLUP 114 26 + #define GPIO_NR_TREO680_GSM_POWER 40 27 + #define GPIO_NR_TREO680_GSM_RESET 87 28 + #define GPIO_NR_TREO680_GSM_WAKE 57 29 + #define GPIO_NR_TREO680_GSM_HOST_WAKE 14 30 + #define GPIO_NR_TREO680_GSM_TRIGGER 10 31 + #define GPIO_NR_TREO680_BT_EN 43 32 + #define GPIO_NR_TREO680_IR_EN 115 33 + #define GPIO_NR_TREO680_IR_TXD 47 34 + #define GPIO_NR_TREO680_BL_POWER 38 35 + #define GPIO_NR_TREO680_LCD_POWER 25 36 + 37 + /* Various addresses */ 38 + #define TREO680_PHYS_RAM_START 0xa0000000 39 + #define TREO680_PHYS_IO_START 0x40000000 40 + #define TREO680_STR_BASE 0xa2000000 41 + 42 + /* BACKLIGHT */ 43 + #define TREO680_MAX_INTENSITY 254 44 + #define TREO680_DEFAULT_INTENSITY 160 45 + #define TREO680_LIMIT_MASK 0x7F 46 + #define TREO680_PRESCALER 63 47 + #define TREO680_PERIOD_NS 3500 48 + 49 + #endif
+42
arch/arm/mach-pxa/mioa701.c
··· 37 37 #include <linux/wm97xx_batt.h> 38 38 #include <linux/mtd/physmap.h> 39 39 #include <linux/usb/gpio_vbus.h> 40 + #include <linux/regulator/max1586.h> 40 41 41 42 #include <asm/mach-types.h> 42 43 #include <asm/mach/arch.h> ··· 718 717 }; 719 718 720 719 /* 720 + * Voltage regulation 721 + */ 722 + static struct regulator_consumer_supply max1586_consumers[] = { 723 + { 724 + .supply = "vcc_core", 725 + } 726 + }; 727 + 728 + static struct regulator_init_data max1586_v3_info = { 729 + .constraints = { 730 + .name = "vcc_core range", 731 + .min_uV = 1000000, 732 + .max_uV = 1705000, 733 + .always_on = 1, 734 + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, 735 + }, 736 + .num_consumer_supplies = ARRAY_SIZE(max1586_consumers), 737 + .consumer_supplies = max1586_consumers, 738 + }; 739 + 740 + static struct max1586_subdev_data max1586_subdevs[] = { 741 + { .name = "vcc_core", .id = MAX1586_V3, 742 + .platform_data = &max1586_v3_info }, 743 + }; 744 + 745 + static struct max1586_platform_data max1586_info = { 746 + .subdevs = max1586_subdevs, 747 + .num_subdevs = ARRAY_SIZE(max1586_subdevs), 748 + .v3_gain = MAX1586_GAIN_NO_R24, /* 700..1475 mV */ 749 + }; 750 + 751 + /* 721 752 * Camera interface 722 753 */ 723 754 struct pxacamera_platform_data mioa701_pxacamera_platform_data = { 724 755 .flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 | 725 756 PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN, 726 757 .mclk_10khz = 5000, 758 + }; 759 + 760 + static struct i2c_board_info __initdata mioa701_pi2c_devices[] = { 761 + { 762 + I2C_BOARD_INFO("max1586", 0x14), 763 + .platform_data = &max1586_info, 764 + }, 727 765 }; 728 766 729 767 static struct soc_camera_link iclink = { ··· 865 825 platform_add_devices(devices, ARRAY_SIZE(devices)); 866 826 gsm_init(); 867 827 828 + i2c_register_board_info(1, ARRAY_AND_SIZE(mioa701_pi2c_devices)); 868 829 pxa_set_i2c_info(&i2c_pdata); 830 + pxa27x_set_i2c_power_info(NULL); 869 831 pxa_set_camera_info(&mioa701_pxacamera_platform_data); 870 832 i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices)); 871 833 }
+63 -2
arch/arm/mach-pxa/palmz72.c
··· 27 27 #include <linux/pda_power.h> 28 28 #include <linux/pwm_backlight.h> 29 29 #include <linux/gpio.h> 30 + #include <linux/wm97xx_batt.h> 30 31 #include <linux/power_supply.h> 32 + #include <linux/usb/gpio_vbus.h> 31 33 32 34 #include <asm/mach-types.h> 33 35 #include <asm/mach/arch.h> ··· 43 41 #include <mach/irda.h> 44 42 #include <mach/pxa27x_keypad.h> 45 43 #include <mach/udc.h> 44 + #include <mach/palmasoc.h> 45 + 46 46 #include <mach/pm.h> 47 47 48 48 #include "generic.h" ··· 70 66 GPIO29_AC97_SDATA_IN_0, 71 67 GPIO30_AC97_SDATA_OUT, 72 68 GPIO31_AC97_SYNC, 69 + GPIO89_AC97_SYSCLK, 70 + GPIO113_AC97_nRESET, 73 71 74 72 /* IrDA */ 75 73 GPIO49_GPIO, /* ir disable */ ··· 83 77 84 78 /* USB */ 85 79 GPIO15_GPIO, /* usb detect */ 86 - GPIO12_GPIO, /* usb pullup */ 87 - GPIO95_GPIO, /* usb power */ 80 + GPIO95_GPIO, /* usb pullup */ 88 81 89 82 /* Matrix keypad */ 90 83 GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, ··· 360 355 }; 361 356 362 357 /****************************************************************************** 358 + * UDC 359 + ******************************************************************************/ 360 + static struct gpio_vbus_mach_info palmz72_udc_info = { 361 + .gpio_vbus = GPIO_NR_PALMZ72_USB_DETECT_N, 362 + .gpio_pullup = GPIO_NR_PALMZ72_USB_PULLUP, 363 + }; 364 + 365 + static struct platform_device palmz72_gpio_vbus = { 366 + .name = "gpio-vbus", 367 + .id = -1, 368 + .dev = { 369 + .platform_data = &palmz72_udc_info, 370 + }, 371 + }; 372 + 373 + /****************************************************************************** 363 374 * Power supply 364 375 ******************************************************************************/ 365 376 static int power_supply_init(struct device *dev) ··· 440 419 .dev = { 441 420 .platform_data = &power_supply_info, 442 421 }, 422 + }; 423 + 424 + /****************************************************************************** 425 + * WM97xx battery 426 + ******************************************************************************/ 427 + static struct wm97xx_batt_info wm97xx_batt_pdata = { 428 + .batt_aux = WM97XX_AUX_ID3, 429 + .temp_aux = WM97XX_AUX_ID2, 430 + .charge_gpio = -1, 431 + .max_voltage = PALMZ72_BAT_MAX_VOLTAGE, 432 + .min_voltage = PALMZ72_BAT_MIN_VOLTAGE, 433 + .batt_mult = 1000, 434 + .batt_div = 414, 435 + .temp_mult = 1, 436 + .temp_div = 1, 437 + .batt_tech = POWER_SUPPLY_TECHNOLOGY_LIPO, 438 + .batt_name = "main-batt", 439 + }; 440 + 441 + /****************************************************************************** 442 + * aSoC audio 443 + ******************************************************************************/ 444 + static struct platform_device palmz72_asoc = { 445 + .name = "palm27x-asoc", 446 + .id = -1, 443 447 }; 444 448 445 449 /****************************************************************************** ··· 573 527 static struct platform_device *devices[] __initdata = { 574 528 &palmz72_backlight, 575 529 &palmz72_leds, 530 + &palmz72_asoc, 576 531 &power_supply, 532 + &palmz72_gpio_vbus, 577 533 }; 534 + 535 + /* setup udc GPIOs initial state */ 536 + static void __init palmz72_udc_init(void) 537 + { 538 + if (!gpio_request(GPIO_NR_PALMZ72_USB_PULLUP, "USB Pullup")) { 539 + gpio_direction_output(GPIO_NR_PALMZ72_USB_PULLUP, 0); 540 + gpio_free(GPIO_NR_PALMZ72_USB_PULLUP); 541 + } 542 + } 578 543 579 544 static void __init palmz72_init(void) 580 545 { 581 546 pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config)); 547 + 582 548 set_pxa_fb_info(&palmz72_lcd_screen); 583 549 pxa_set_mci_info(&palmz72_mci_platform_data); 550 + palmz72_udc_init(); 584 551 pxa_set_ac97_info(NULL); 585 552 pxa_set_ficp_info(&palmz72_ficp_platform_data); 586 553 pxa_set_keypad_info(&palmz72_keypad_platform_data); 554 + wm97xx_bat_set_pdata(&wm97xx_batt_pdata); 555 + 587 556 platform_add_devices(devices, ARRAY_SIZE(devices)); 588 557 } 589 558
+6
arch/arm/mach-pxa/poodle.c
··· 22 22 #include <linux/delay.h> 23 23 #include <linux/mtd/physmap.h> 24 24 #include <linux/gpio.h> 25 + #include <linux/i2c.h> 25 26 #include <linux/spi/spi.h> 26 27 #include <linux/spi/ads7846.h> 27 28 #include <linux/mtd/sharpsl.h> ··· 487 486 &sharpsl_rom_device, 488 487 }; 489 488 489 + static struct i2c_board_info __initdata poodle_i2c_devices[] = { 490 + { I2C_BOARD_INFO("wm8731", 0x1b) }, 491 + }; 492 + 490 493 static void poodle_poweroff(void) 491 494 { 492 495 arm_machine_restart('h', NULL); ··· 524 519 pxa_set_mci_info(&poodle_mci_platform_data); 525 520 pxa_set_ficp_info(&poodle_ficp_platform_data); 526 521 pxa_set_i2c_info(NULL); 522 + i2c_register_board_info(0, ARRAY_AND_SIZE(poodle_i2c_devices)); 527 523 poodle_init_spi(); 528 524 } 529 525
+612
arch/arm/mach-pxa/treo680.c
··· 1 + /* 2 + * Hardware definitions for Palm Treo 680 3 + * 4 + * Author: Tomas Cech <sleep_walker@suse.cz> 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + * 10 + * (find more info at www.hackndev.com) 11 + * 12 + */ 13 + 14 + #include <linux/platform_device.h> 15 + #include <linux/delay.h> 16 + #include <linux/irq.h> 17 + #include <linux/gpio_keys.h> 18 + #include <linux/input.h> 19 + #include <linux/pda_power.h> 20 + #include <linux/pwm_backlight.h> 21 + #include <linux/gpio.h> 22 + #include <linux/wm97xx_batt.h> 23 + #include <linux/power_supply.h> 24 + #include <linux/sysdev.h> 25 + #include <linux/w1-gpio.h> 26 + 27 + #include <asm/mach-types.h> 28 + #include <asm/mach/arch.h> 29 + #include <asm/mach/map.h> 30 + 31 + #include <mach/pxa27x.h> 32 + #include <mach/pxa27x-udc.h> 33 + #include <mach/audio.h> 34 + #include <mach/treo680.h> 35 + #include <mach/mmc.h> 36 + #include <mach/pxafb.h> 37 + #include <mach/irda.h> 38 + #include <mach/pxa27x_keypad.h> 39 + #include <mach/udc.h> 40 + #include <mach/ohci.h> 41 + #include <mach/pxa2xx-regs.h> 42 + #include <mach/palmasoc.h> 43 + #include <mach/camera.h> 44 + 45 + #include <sound/pxa2xx-lib.h> 46 + 47 + #include "generic.h" 48 + #include "devices.h" 49 + 50 + /****************************************************************************** 51 + * Pin configuration 52 + ******************************************************************************/ 53 + static unsigned long treo680_pin_config[] __initdata = { 54 + /* MMC */ 55 + GPIO32_MMC_CLK, 56 + GPIO92_MMC_DAT_0, 57 + GPIO109_MMC_DAT_1, 58 + GPIO110_MMC_DAT_2, 59 + GPIO111_MMC_DAT_3, 60 + GPIO112_MMC_CMD, 61 + GPIO33_GPIO, /* SD read only */ 62 + GPIO113_GPIO, /* SD detect */ 63 + 64 + /* AC97 */ 65 + GPIO28_AC97_BITCLK, 66 + GPIO29_AC97_SDATA_IN_0, 67 + GPIO30_AC97_SDATA_OUT, 68 + GPIO31_AC97_SYNC, 69 + GPIO89_AC97_SYSCLK, 70 + GPIO95_AC97_nRESET, 71 + 72 + /* IrDA */ 73 + GPIO46_FICP_RXD, 74 + GPIO47_FICP_TXD, 75 + 76 + /* PWM */ 77 + GPIO16_PWM0_OUT, 78 + 79 + /* USB */ 80 + GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, /* usb detect */ 81 + 82 + /* MATRIX KEYPAD */ 83 + GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, 84 + GPIO101_KP_MKIN_1, 85 + GPIO102_KP_MKIN_2, 86 + GPIO97_KP_MKIN_3, 87 + GPIO98_KP_MKIN_4, 88 + GPIO99_KP_MKIN_5, 89 + GPIO91_KP_MKIN_6, 90 + GPIO13_KP_MKIN_7, 91 + GPIO103_KP_MKOUT_0 | MFP_LPM_DRIVE_HIGH, 92 + GPIO104_KP_MKOUT_1, 93 + GPIO105_KP_MKOUT_2, 94 + GPIO106_KP_MKOUT_3, 95 + GPIO107_KP_MKOUT_4, 96 + GPIO108_KP_MKOUT_5, 97 + GPIO96_KP_MKOUT_6, 98 + GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ 99 + 100 + /* LCD */ 101 + GPIO58_LCD_LDD_0, 102 + GPIO59_LCD_LDD_1, 103 + GPIO60_LCD_LDD_2, 104 + GPIO61_LCD_LDD_3, 105 + GPIO62_LCD_LDD_4, 106 + GPIO63_LCD_LDD_5, 107 + GPIO64_LCD_LDD_6, 108 + GPIO65_LCD_LDD_7, 109 + GPIO66_LCD_LDD_8, 110 + GPIO67_LCD_LDD_9, 111 + GPIO68_LCD_LDD_10, 112 + GPIO69_LCD_LDD_11, 113 + GPIO70_LCD_LDD_12, 114 + GPIO71_LCD_LDD_13, 115 + GPIO72_LCD_LDD_14, 116 + GPIO73_LCD_LDD_15, 117 + GPIO74_LCD_FCLK, 118 + GPIO75_LCD_LCLK, 119 + GPIO76_LCD_PCLK, 120 + 121 + /* Quick Capture Interface */ 122 + GPIO84_CIF_FV, 123 + GPIO85_CIF_LV, 124 + GPIO53_CIF_MCLK, 125 + GPIO54_CIF_PCLK, 126 + GPIO81_CIF_DD_0, 127 + GPIO55_CIF_DD_1, 128 + GPIO51_CIF_DD_2, 129 + GPIO50_CIF_DD_3, 130 + GPIO52_CIF_DD_4, 131 + GPIO48_CIF_DD_5, 132 + GPIO17_CIF_DD_6, 133 + GPIO12_CIF_DD_7, 134 + 135 + /* I2C */ 136 + GPIO117_I2C_SCL, 137 + GPIO118_I2C_SDA, 138 + 139 + /* GSM */ 140 + GPIO14_GPIO | WAKEUP_ON_EDGE_BOTH, /* GSM host wake up */ 141 + GPIO34_FFUART_RXD, 142 + GPIO35_FFUART_CTS, 143 + GPIO39_FFUART_TXD, 144 + GPIO41_FFUART_RTS, 145 + 146 + /* MISC. */ 147 + GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH, /* external power detect */ 148 + GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH, /* silent switch */ 149 + GPIO116_GPIO, /* headphone detect */ 150 + GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH, /* bluetooth host wake up */ 151 + }; 152 + 153 + /****************************************************************************** 154 + * SD/MMC card controller 155 + ******************************************************************************/ 156 + static int treo680_mci_init(struct device *dev, 157 + irq_handler_t treo680_detect_int, void *data) 158 + { 159 + int err = 0; 160 + 161 + /* Setup an interrupt for detecting card insert/remove events */ 162 + err = gpio_request(GPIO_NR_TREO680_SD_DETECT_N, "SD IRQ"); 163 + 164 + if (err) 165 + goto err; 166 + 167 + err = gpio_direction_input(GPIO_NR_TREO680_SD_DETECT_N); 168 + if (err) 169 + goto err2; 170 + 171 + err = request_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), 172 + treo680_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM | 173 + IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, 174 + "SD/MMC card detect", data); 175 + 176 + if (err) { 177 + dev_err(dev, "%s: cannot request SD/MMC card detect IRQ\n", 178 + __func__); 179 + goto err2; 180 + } 181 + 182 + err = gpio_request(GPIO_NR_TREO680_SD_POWER, "SD_POWER"); 183 + if (err) 184 + goto err3; 185 + 186 + err = gpio_direction_output(GPIO_NR_TREO680_SD_POWER, 1); 187 + if (err) 188 + goto err4; 189 + 190 + err = gpio_request(GPIO_NR_TREO680_SD_READONLY, "SD_READONLY"); 191 + if (err) 192 + goto err4; 193 + 194 + err = gpio_direction_input(GPIO_NR_TREO680_SD_READONLY); 195 + if (err) 196 + goto err5; 197 + 198 + return 0; 199 + 200 + err5: 201 + gpio_free(GPIO_NR_TREO680_SD_READONLY); 202 + err4: 203 + gpio_free(GPIO_NR_TREO680_SD_POWER); 204 + err3: 205 + free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data); 206 + err2: 207 + gpio_free(GPIO_NR_TREO680_SD_DETECT_N); 208 + err: 209 + return err; 210 + } 211 + 212 + static void treo680_mci_exit(struct device *dev, void *data) 213 + { 214 + gpio_free(GPIO_NR_TREO680_SD_READONLY); 215 + gpio_free(GPIO_NR_TREO680_SD_POWER); 216 + free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data); 217 + gpio_free(GPIO_NR_TREO680_SD_DETECT_N); 218 + } 219 + 220 + static void treo680_mci_power(struct device *dev, unsigned int vdd) 221 + { 222 + struct pxamci_platform_data *p_d = dev->platform_data; 223 + gpio_set_value(GPIO_NR_TREO680_SD_POWER, p_d->ocr_mask & (1 << vdd)); 224 + } 225 + 226 + static int treo680_mci_get_ro(struct device *dev) 227 + { 228 + return gpio_get_value(GPIO_NR_TREO680_SD_READONLY); 229 + } 230 + 231 + static struct pxamci_platform_data treo680_mci_platform_data = { 232 + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 233 + .setpower = treo680_mci_power, 234 + .get_ro = treo680_mci_get_ro, 235 + .init = treo680_mci_init, 236 + .exit = treo680_mci_exit, 237 + }; 238 + 239 + /****************************************************************************** 240 + * GPIO keyboard 241 + ******************************************************************************/ 242 + static unsigned int treo680_matrix_keys[] = { 243 + KEY(0, 0, KEY_F8), /* Red/Off/Power */ 244 + KEY(0, 1, KEY_LEFT), 245 + KEY(0, 2, KEY_LEFTCTRL), /* Alternate */ 246 + KEY(0, 3, KEY_L), 247 + KEY(0, 4, KEY_A), 248 + KEY(0, 5, KEY_Q), 249 + KEY(0, 6, KEY_P), 250 + 251 + KEY(1, 0, KEY_RIGHTCTRL), /* Menu */ 252 + KEY(1, 1, KEY_RIGHT), 253 + KEY(1, 2, KEY_LEFTSHIFT), /* Left shift */ 254 + KEY(1, 3, KEY_Z), 255 + KEY(1, 4, KEY_S), 256 + KEY(1, 5, KEY_W), 257 + 258 + KEY(2, 0, KEY_F1), /* Phone */ 259 + KEY(2, 1, KEY_UP), 260 + KEY(2, 2, KEY_0), 261 + KEY(2, 3, KEY_X), 262 + KEY(2, 4, KEY_D), 263 + KEY(2, 5, KEY_E), 264 + 265 + KEY(3, 0, KEY_F10), /* Calendar */ 266 + KEY(3, 1, KEY_DOWN), 267 + KEY(3, 2, KEY_SPACE), 268 + KEY(3, 3, KEY_C), 269 + KEY(3, 4, KEY_F), 270 + KEY(3, 5, KEY_R), 271 + 272 + KEY(4, 0, KEY_F12), /* Mail */ 273 + KEY(4, 1, KEY_KPENTER), 274 + KEY(4, 2, KEY_RIGHTALT), /* Alt */ 275 + KEY(4, 3, KEY_V), 276 + KEY(4, 4, KEY_G), 277 + KEY(4, 5, KEY_T), 278 + 279 + KEY(5, 0, KEY_F9), /* Home */ 280 + KEY(5, 1, KEY_PAGEUP), /* Side up */ 281 + KEY(5, 2, KEY_DOT), 282 + KEY(5, 3, KEY_B), 283 + KEY(5, 4, KEY_H), 284 + KEY(5, 5, KEY_Y), 285 + 286 + KEY(6, 0, KEY_TAB), /* Side Activate */ 287 + KEY(6, 1, KEY_PAGEDOWN), /* Side down */ 288 + KEY(6, 2, KEY_ENTER), 289 + KEY(6, 3, KEY_N), 290 + KEY(6, 4, KEY_J), 291 + KEY(6, 5, KEY_U), 292 + 293 + KEY(7, 0, KEY_F6), /* Green/Call */ 294 + KEY(7, 1, KEY_O), 295 + KEY(7, 2, KEY_BACKSPACE), 296 + KEY(7, 3, KEY_M), 297 + KEY(7, 4, KEY_K), 298 + KEY(7, 5, KEY_I), 299 + }; 300 + 301 + static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = { 302 + .matrix_key_rows = 8, 303 + .matrix_key_cols = 7, 304 + .matrix_key_map = treo680_matrix_keys, 305 + .matrix_key_map_size = ARRAY_SIZE(treo680_matrix_keys), 306 + .direct_key_map = { KEY_CONNECT }, 307 + .direct_key_num = 1, 308 + 309 + .debounce_interval = 30, 310 + }; 311 + 312 + /****************************************************************************** 313 + * aSoC audio 314 + ******************************************************************************/ 315 + 316 + static pxa2xx_audio_ops_t treo680_ac97_pdata = { 317 + .reset_gpio = 95, 318 + }; 319 + 320 + /****************************************************************************** 321 + * Backlight 322 + ******************************************************************************/ 323 + static int treo680_backlight_init(struct device *dev) 324 + { 325 + int ret; 326 + 327 + ret = gpio_request(GPIO_NR_TREO680_BL_POWER, "BL POWER"); 328 + if (ret) 329 + goto err; 330 + ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0); 331 + if (ret) 332 + goto err2; 333 + ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER"); 334 + if (ret) 335 + goto err2; 336 + ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0); 337 + if (ret) 338 + goto err3; 339 + 340 + return 0; 341 + err3: 342 + gpio_free(GPIO_NR_TREO680_LCD_POWER); 343 + err2: 344 + gpio_free(GPIO_NR_TREO680_BL_POWER); 345 + err: 346 + return ret; 347 + } 348 + 349 + static int treo680_backlight_notify(int brightness) 350 + { 351 + gpio_set_value(GPIO_NR_TREO680_BL_POWER, brightness); 352 + return TREO680_MAX_INTENSITY - brightness; 353 + }; 354 + 355 + static void treo680_backlight_exit(struct device *dev) 356 + { 357 + gpio_free(GPIO_NR_TREO680_BL_POWER); 358 + gpio_free(GPIO_NR_TREO680_LCD_POWER); 359 + } 360 + 361 + static struct platform_pwm_backlight_data treo680_backlight_data = { 362 + .pwm_id = 0, 363 + .max_brightness = TREO680_MAX_INTENSITY, 364 + .dft_brightness = TREO680_DEFAULT_INTENSITY, 365 + .pwm_period_ns = TREO680_PERIOD_NS, 366 + .init = treo680_backlight_init, 367 + .notify = treo680_backlight_notify, 368 + .exit = treo680_backlight_exit, 369 + }; 370 + 371 + static struct platform_device treo680_backlight = { 372 + .name = "pwm-backlight", 373 + .dev = { 374 + .parent = &pxa27x_device_pwm0.dev, 375 + .platform_data = &treo680_backlight_data, 376 + }, 377 + }; 378 + 379 + /****************************************************************************** 380 + * IrDA 381 + ******************************************************************************/ 382 + static void treo680_transceiver_mode(struct device *dev, int mode) 383 + { 384 + gpio_set_value(GPIO_NR_TREO680_IR_EN, mode & IR_OFF); 385 + pxa2xx_transceiver_mode(dev, mode); 386 + } 387 + 388 + static int treo680_irda_startup(struct device *dev) 389 + { 390 + int err; 391 + 392 + err = gpio_request(GPIO_NR_TREO680_IR_EN, "Ir port disable"); 393 + if (err) 394 + goto err1; 395 + 396 + err = gpio_direction_output(GPIO_NR_TREO680_IR_EN, 1); 397 + if (err) 398 + goto err2; 399 + 400 + return 0; 401 + 402 + err2: 403 + dev_err(dev, "treo680_irda: cannot change IR gpio direction\n"); 404 + gpio_free(GPIO_NR_TREO680_IR_EN); 405 + err1: 406 + dev_err(dev, "treo680_irda: cannot allocate IR gpio\n"); 407 + return err; 408 + } 409 + 410 + static void treo680_irda_shutdown(struct device *dev) 411 + { 412 + gpio_free(GPIO_NR_TREO680_AMP_EN); 413 + } 414 + 415 + static struct pxaficp_platform_data treo680_ficp_info = { 416 + .transceiver_cap = IR_FIRMODE | IR_SIRMODE | IR_OFF, 417 + .startup = treo680_irda_startup, 418 + .shutdown = treo680_irda_shutdown, 419 + .transceiver_mode = treo680_transceiver_mode, 420 + }; 421 + 422 + /****************************************************************************** 423 + * UDC 424 + ******************************************************************************/ 425 + static struct pxa2xx_udc_mach_info treo680_udc_info __initdata = { 426 + .gpio_vbus = GPIO_NR_TREO680_USB_DETECT, 427 + .gpio_vbus_inverted = 1, 428 + .gpio_pullup = GPIO_NR_TREO680_USB_PULLUP, 429 + }; 430 + 431 + 432 + /****************************************************************************** 433 + * USB host 434 + ******************************************************************************/ 435 + static struct pxaohci_platform_data treo680_ohci_info = { 436 + .port_mode = PMM_PERPORT_MODE, 437 + .flags = ENABLE_PORT1 | ENABLE_PORT3, 438 + .power_budget = 0, 439 + }; 440 + 441 + /****************************************************************************** 442 + * Power supply 443 + ******************************************************************************/ 444 + static int power_supply_init(struct device *dev) 445 + { 446 + int ret; 447 + 448 + ret = gpio_request(GPIO_NR_TREO680_POWER_DETECT, "CABLE_STATE_AC"); 449 + if (ret) 450 + goto err1; 451 + ret = gpio_direction_input(GPIO_NR_TREO680_POWER_DETECT); 452 + if (ret) 453 + goto err2; 454 + 455 + return 0; 456 + 457 + err2: 458 + gpio_free(GPIO_NR_TREO680_POWER_DETECT); 459 + err1: 460 + return ret; 461 + } 462 + 463 + static int treo680_is_ac_online(void) 464 + { 465 + return gpio_get_value(GPIO_NR_TREO680_POWER_DETECT); 466 + } 467 + 468 + static void power_supply_exit(struct device *dev) 469 + { 470 + gpio_free(GPIO_NR_TREO680_POWER_DETECT); 471 + } 472 + 473 + static char *treo680_supplicants[] = { 474 + "main-battery", 475 + }; 476 + 477 + static struct pda_power_pdata power_supply_info = { 478 + .init = power_supply_init, 479 + .is_ac_online = treo680_is_ac_online, 480 + .exit = power_supply_exit, 481 + .supplied_to = treo680_supplicants, 482 + .num_supplicants = ARRAY_SIZE(treo680_supplicants), 483 + }; 484 + 485 + static struct platform_device power_supply = { 486 + .name = "pda-power", 487 + .id = -1, 488 + .dev = { 489 + .platform_data = &power_supply_info, 490 + }, 491 + }; 492 + 493 + /****************************************************************************** 494 + * Vibra and LEDs 495 + ******************************************************************************/ 496 + static struct gpio_led gpio_leds[] = { 497 + { 498 + .name = "treo680:vibra:vibra", 499 + .default_trigger = "none", 500 + .gpio = GPIO_NR_TREO680_VIBRATE_EN, 501 + }, 502 + { 503 + .name = "treo680:green:led", 504 + .default_trigger = "mmc0", 505 + .gpio = GPIO_NR_TREO680_GREEN_LED, 506 + }, 507 + { 508 + .name = "treo680:keybbl:keybbl", 509 + .default_trigger = "none", 510 + .gpio = GPIO_NR_TREO680_KEYB_BL, 511 + }, 512 + }; 513 + 514 + static struct gpio_led_platform_data gpio_led_info = { 515 + .leds = gpio_leds, 516 + .num_leds = ARRAY_SIZE(gpio_leds), 517 + }; 518 + 519 + static struct platform_device treo680_leds = { 520 + .name = "leds-gpio", 521 + .id = -1, 522 + .dev = { 523 + .platform_data = &gpio_led_info, 524 + } 525 + }; 526 + 527 + 528 + /****************************************************************************** 529 + * Framebuffer 530 + ******************************************************************************/ 531 + /* TODO: add support for 324x324 */ 532 + static struct pxafb_mode_info treo680_lcd_modes[] = { 533 + { 534 + .pixclock = 86538, 535 + .xres = 320, 536 + .yres = 320, 537 + .bpp = 16, 538 + 539 + .left_margin = 20, 540 + .right_margin = 8, 541 + .upper_margin = 8, 542 + .lower_margin = 5, 543 + 544 + .hsync_len = 4, 545 + .vsync_len = 1, 546 + }, 547 + }; 548 + 549 + static struct pxafb_mach_info treo680_lcd_screen = { 550 + .modes = treo680_lcd_modes, 551 + .num_modes = ARRAY_SIZE(treo680_lcd_modes), 552 + .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL, 553 + }; 554 + 555 + /****************************************************************************** 556 + * Power management - standby 557 + ******************************************************************************/ 558 + static void __init treo680_pm_init(void) 559 + { 560 + static u32 resume[] = { 561 + 0xe3a00101, /* mov r0, #0x40000000 */ 562 + 0xe380060f, /* orr r0, r0, #0x00f00000 */ 563 + 0xe590f008, /* ldr pc, [r0, #0x08] */ 564 + }; 565 + 566 + /* this is where the bootloader jumps */ 567 + memcpy(phys_to_virt(TREO680_STR_BASE), resume, sizeof(resume)); 568 + } 569 + 570 + /****************************************************************************** 571 + * Machine init 572 + ******************************************************************************/ 573 + static struct platform_device *devices[] __initdata = { 574 + &treo680_backlight, 575 + &treo680_leds, 576 + &power_supply, 577 + }; 578 + 579 + /* setup udc GPIOs initial state */ 580 + static void __init treo680_udc_init(void) 581 + { 582 + if (!gpio_request(GPIO_NR_TREO680_USB_PULLUP, "UDC Vbus")) { 583 + gpio_direction_output(GPIO_NR_TREO680_USB_PULLUP, 1); 584 + gpio_free(GPIO_NR_TREO680_USB_PULLUP); 585 + } 586 + } 587 + 588 + static void __init treo680_init(void) 589 + { 590 + treo680_pm_init(); 591 + pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); 592 + pxa_set_keypad_info(&treo680_keypad_platform_data); 593 + set_pxa_fb_info(&treo680_lcd_screen); 594 + pxa_set_mci_info(&treo680_mci_platform_data); 595 + treo680_udc_init(); 596 + pxa_set_udc_info(&treo680_udc_info); 597 + pxa_set_ac97_info(&treo680_ac97_pdata); 598 + pxa_set_ficp_info(&treo680_ficp_info); 599 + pxa_set_ohci_info(&treo680_ohci_info); 600 + 601 + platform_add_devices(devices, ARRAY_SIZE(devices)); 602 + } 603 + 604 + MACHINE_START(TREO680, "Palm Treo 680") 605 + .phys_io = TREO680_PHYS_IO_START, 606 + .io_pg_offst = io_p2v(0x40000000), 607 + .boot_params = 0xa0000100, 608 + .map_io = pxa_map_io, 609 + .init_irq = pxa27x_init_irq, 610 + .timer = &pxa_timer, 611 + .init_machine = treo680_init, 612 + MACHINE_END
+1
arch/arm/mach-realview/realview_pbx.c
··· 27 27 #include <asm/irq.h> 28 28 #include <asm/leds.h> 29 29 #include <asm/mach-types.h> 30 + #include <asm/smp_twd.h> 30 31 #include <asm/hardware/gic.h> 31 32 #include <asm/hardware/cache-l2x0.h> 32 33
-1
arch/arm/mach-s3c2410/usb-simtec.c
··· 22 22 #include <linux/timer.h> 23 23 #include <linux/init.h> 24 24 #include <linux/device.h> 25 - #include <linux/gpio.h> 26 25 #include <linux/io.h> 27 26 28 27 #include <asm/mach/arch.h>
+10
arch/arm/mach-s3c2440/Kconfig
··· 84 84 help 85 85 Say Y here if you are using the AT2440EVB development board 86 86 87 + config MACH_MINI2440 88 + bool "MINI2440 development board" 89 + select CPU_S3C2440 90 + select EEPROM_AT24 91 + select LEDS_TRIGGER_BACKLIGHT 92 + select SND_S3C24XX_SOC_S3C24XX_UDA134X 93 + help 94 + Say Y here to select support for the MINI2440. Is a 10cm x 10cm board 95 + available via various sources. It can come with a 3.5" or 7" touch LCD. 96 + 87 97 endmenu 88 98
+1
arch/arm/mach-s3c2440/Makefile
··· 22 22 obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o 23 23 obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o 24 24 obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o 25 + obj-$(CONFIG_MACH_MINI2440) += mach-mini2440.o
+703
arch/arm/mach-s3c2440/mach-mini2440.c
··· 1 + /* linux/arch/arm/mach-s3c2440/mach-mini2440.c 2 + * 3 + * Copyright (c) 2008 Ramax Lo <ramaxlo@gmail.com> 4 + * Based on mach-anubis.c by Ben Dooks <ben@simtec.co.uk> 5 + * and modifications by SBZ <sbz@spgui.org> and 6 + * Weibing <http://weibing.blogbus.com> and 7 + * Michel Pollet <buserror@gmail.com> 8 + * 9 + * For product information, visit http://code.google.com/p/mini2440/ 10 + * 11 + * This program is free software; you can redistribute it and/or modify 12 + * it under the terms of the GNU General Public License version 2 as 13 + * published by the Free Software Foundation. 14 + */ 15 + 16 + #include <linux/kernel.h> 17 + #include <linux/types.h> 18 + #include <linux/interrupt.h> 19 + #include <linux/list.h> 20 + #include <linux/timer.h> 21 + #include <linux/init.h> 22 + #include <linux/gpio.h> 23 + #include <linux/input.h> 24 + #include <linux/io.h> 25 + #include <linux/serial_core.h> 26 + #include <linux/dm9000.h> 27 + #include <linux/i2c/at24.h> 28 + #include <linux/platform_device.h> 29 + #include <linux/gpio_keys.h> 30 + #include <linux/i2c.h> 31 + #include <linux/mmc/host.h> 32 + 33 + #include <asm/mach/arch.h> 34 + #include <asm/mach/map.h> 35 + 36 + #include <mach/hardware.h> 37 + #include <mach/fb.h> 38 + #include <asm/mach-types.h> 39 + 40 + #include <plat/regs-serial.h> 41 + #include <mach/regs-gpio.h> 42 + #include <mach/leds-gpio.h> 43 + #include <mach/regs-mem.h> 44 + #include <mach/regs-lcd.h> 45 + #include <mach/irqs.h> 46 + #include <plat/nand.h> 47 + #include <plat/iic.h> 48 + #include <plat/mci.h> 49 + #include <plat/udc.h> 50 + 51 + #include <plat/regs-serial.h> 52 + 53 + #include <linux/mtd/mtd.h> 54 + #include <linux/mtd/nand.h> 55 + #include <linux/mtd/nand_ecc.h> 56 + #include <linux/mtd/partitions.h> 57 + 58 + #include <plat/clock.h> 59 + #include <plat/devs.h> 60 + #include <plat/cpu.h> 61 + 62 + #include <sound/s3c24xx_uda134x.h> 63 + 64 + #define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300) 65 + 66 + static struct map_desc mini2440_iodesc[] __initdata = { 67 + /* nothing to declare, move along */ 68 + }; 69 + 70 + #define UCON S3C2410_UCON_DEFAULT 71 + #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB 72 + #define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE 73 + 74 + 75 + static struct s3c2410_uartcfg mini2440_uartcfgs[] __initdata = { 76 + [0] = { 77 + .hwport = 0, 78 + .flags = 0, 79 + .ucon = UCON, 80 + .ulcon = ULCON, 81 + .ufcon = UFCON, 82 + }, 83 + [1] = { 84 + .hwport = 1, 85 + .flags = 0, 86 + .ucon = UCON, 87 + .ulcon = ULCON, 88 + .ufcon = UFCON, 89 + }, 90 + [2] = { 91 + .hwport = 2, 92 + .flags = 0, 93 + .ucon = UCON, 94 + .ulcon = ULCON, 95 + .ufcon = UFCON, 96 + }, 97 + }; 98 + 99 + /* USB device UDC support */ 100 + 101 + static void mini2440_udc_pullup(enum s3c2410_udc_cmd_e cmd) 102 + { 103 + pr_debug("udc: pullup(%d)\n", cmd); 104 + 105 + switch (cmd) { 106 + case S3C2410_UDC_P_ENABLE : 107 + s3c2410_gpio_setpin(S3C2410_GPC(5), 1); 108 + break; 109 + case S3C2410_UDC_P_DISABLE : 110 + s3c2410_gpio_setpin(S3C2410_GPC(5), 0); 111 + break; 112 + case S3C2410_UDC_P_RESET : 113 + break; 114 + default: 115 + break; 116 + } 117 + } 118 + 119 + static struct s3c2410_udc_mach_info mini2440_udc_cfg __initdata = { 120 + .udc_command = mini2440_udc_pullup, 121 + }; 122 + 123 + 124 + /* LCD timing and setup */ 125 + 126 + /* 127 + * This macro simplifies the table bellow 128 + */ 129 + #define _LCD_DECLARE(_clock,_xres,margin_left,margin_right,hsync, \ 130 + _yres,margin_top,margin_bottom,vsync, refresh) \ 131 + .width = _xres, \ 132 + .xres = _xres, \ 133 + .height = _yres, \ 134 + .yres = _yres, \ 135 + .left_margin = margin_left, \ 136 + .right_margin = margin_right, \ 137 + .upper_margin = margin_top, \ 138 + .lower_margin = margin_bottom, \ 139 + .hsync_len = hsync, \ 140 + .vsync_len = vsync, \ 141 + .pixclock = ((_clock*100000000000LL) / \ 142 + ((refresh) * \ 143 + (hsync + margin_left + _xres + margin_right) * \ 144 + (vsync + margin_top + _yres + margin_bottom))), \ 145 + .bpp = 16,\ 146 + .type = (S3C2410_LCDCON1_TFT16BPP |\ 147 + S3C2410_LCDCON1_TFT) 148 + 149 + struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = { 150 + [0] = { /* mini2440 + 3.5" TFT + touchscreen */ 151 + _LCD_DECLARE( 152 + 7, /* The 3.5 is quite fast */ 153 + 240, 21, 38, 6, /* x timing */ 154 + 320, 4, 4, 2, /* y timing */ 155 + 60), /* refresh rate */ 156 + .lcdcon5 = (S3C2410_LCDCON5_FRM565 | 157 + S3C2410_LCDCON5_INVVLINE | 158 + S3C2410_LCDCON5_INVVFRAME | 159 + S3C2410_LCDCON5_INVVDEN | 160 + S3C2410_LCDCON5_PWREN), 161 + }, 162 + [1] = { /* mini2440 + 7" TFT + touchscreen */ 163 + _LCD_DECLARE( 164 + 10, /* the 7" runs slower */ 165 + 800, 40, 40, 48, /* x timing */ 166 + 480, 29, 3, 3, /* y timing */ 167 + 50), /* refresh rate */ 168 + .lcdcon5 = (S3C2410_LCDCON5_FRM565 | 169 + S3C2410_LCDCON5_INVVLINE | 170 + S3C2410_LCDCON5_INVVFRAME | 171 + S3C2410_LCDCON5_PWREN), 172 + }, 173 + /* The VGA shield can outout at several resolutions. All share 174 + * the same timings, however, anything smaller than 1024x768 175 + * will only be displayed in the top left corner of a 1024x768 176 + * XGA output unless you add optional dip switches to the shield. 177 + * Therefore timings for other resolutions have been ommited here. 178 + */ 179 + [2] = { 180 + _LCD_DECLARE( 181 + 10, 182 + 1024, 1, 2, 2, /* y timing */ 183 + 768, 200, 16, 16, /* x timing */ 184 + 24), /* refresh rate, maximum stable, 185 + tested with the FPGA shield */ 186 + .lcdcon5 = (S3C2410_LCDCON5_FRM565 | 187 + S3C2410_LCDCON5_HWSWP), 188 + }, 189 + }; 190 + 191 + /* todo - put into gpio header */ 192 + 193 + #define S3C2410_GPCCON_MASK(x) (3 << ((x) * 2)) 194 + #define S3C2410_GPDCON_MASK(x) (3 << ((x) * 2)) 195 + 196 + struct s3c2410fb_mach_info mini2440_fb_info __initdata = { 197 + .displays = &mini2440_lcd_cfg[0], /* not constant! see init */ 198 + .num_displays = 1, 199 + .default_display = 0, 200 + 201 + /* Enable VD[2..7], VD[10..15], VD[18..23] and VCLK, syncs, VDEN 202 + * and disable the pull down resistors on pins we are using for LCD 203 + * data. */ 204 + 205 + .gpcup = (0xf << 1) | (0x3f << 10), 206 + 207 + .gpccon = (S3C2410_GPC1_VCLK | S3C2410_GPC2_VLINE | 208 + S3C2410_GPC3_VFRAME | S3C2410_GPC4_VM | 209 + S3C2410_GPC10_VD2 | S3C2410_GPC11_VD3 | 210 + S3C2410_GPC12_VD4 | S3C2410_GPC13_VD5 | 211 + S3C2410_GPC14_VD6 | S3C2410_GPC15_VD7), 212 + 213 + .gpccon_mask = (S3C2410_GPCCON_MASK(1) | S3C2410_GPCCON_MASK(2) | 214 + S3C2410_GPCCON_MASK(3) | S3C2410_GPCCON_MASK(4) | 215 + S3C2410_GPCCON_MASK(10) | S3C2410_GPCCON_MASK(11) | 216 + S3C2410_GPCCON_MASK(12) | S3C2410_GPCCON_MASK(13) | 217 + S3C2410_GPCCON_MASK(14) | S3C2410_GPCCON_MASK(15)), 218 + 219 + .gpdup = (0x3f << 2) | (0x3f << 10), 220 + 221 + .gpdcon = (S3C2410_GPD2_VD10 | S3C2410_GPD3_VD11 | 222 + S3C2410_GPD4_VD12 | S3C2410_GPD5_VD13 | 223 + S3C2410_GPD6_VD14 | S3C2410_GPD7_VD15 | 224 + S3C2410_GPD10_VD18 | S3C2410_GPD11_VD19 | 225 + S3C2410_GPD12_VD20 | S3C2410_GPD13_VD21 | 226 + S3C2410_GPD14_VD22 | S3C2410_GPD15_VD23), 227 + 228 + .gpdcon_mask = (S3C2410_GPDCON_MASK(2) | S3C2410_GPDCON_MASK(3) | 229 + S3C2410_GPDCON_MASK(4) | S3C2410_GPDCON_MASK(5) | 230 + S3C2410_GPDCON_MASK(6) | S3C2410_GPDCON_MASK(7) | 231 + S3C2410_GPDCON_MASK(10) | S3C2410_GPDCON_MASK(11)| 232 + S3C2410_GPDCON_MASK(12) | S3C2410_GPDCON_MASK(13)| 233 + S3C2410_GPDCON_MASK(14) | S3C2410_GPDCON_MASK(15)), 234 + }; 235 + 236 + /* MMC/SD */ 237 + 238 + static struct s3c24xx_mci_pdata mini2440_mmc_cfg __initdata = { 239 + .gpio_detect = S3C2410_GPG(8), 240 + .gpio_wprotect = S3C2410_GPH(8), 241 + .set_power = NULL, 242 + .ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34, 243 + }; 244 + 245 + /* NAND Flash on MINI2440 board */ 246 + 247 + static struct mtd_partition mini2440_default_nand_part[] __initdata = { 248 + [0] = { 249 + .name = "u-boot", 250 + .size = SZ_256K, 251 + .offset = 0, 252 + }, 253 + [1] = { 254 + .name = "u-boot-env", 255 + .size = SZ_128K, 256 + .offset = SZ_256K, 257 + }, 258 + [2] = { 259 + .name = "kernel", 260 + /* 5 megabytes, for a kernel with no modules 261 + * or a uImage with a ramdisk attached */ 262 + .size = 0x00500000, 263 + .offset = SZ_256K + SZ_128K, 264 + }, 265 + [3] = { 266 + .name = "root", 267 + .offset = SZ_256K + SZ_128K + 0x00500000, 268 + .size = MTDPART_SIZ_FULL, 269 + }, 270 + }; 271 + 272 + static struct s3c2410_nand_set mini2440_nand_sets[] __initdata = { 273 + [0] = { 274 + .name = "nand", 275 + .nr_chips = 1, 276 + .nr_partitions = ARRAY_SIZE(mini2440_default_nand_part), 277 + .partitions = mini2440_default_nand_part, 278 + }, 279 + }; 280 + 281 + static struct s3c2410_platform_nand mini2440_nand_info __initdata = { 282 + .tacls = 0, 283 + .twrph0 = 25, 284 + .twrph1 = 15, 285 + .nr_sets = ARRAY_SIZE(mini2440_nand_sets), 286 + .sets = mini2440_nand_sets, 287 + .ignore_unset_ecc = 1, 288 + }; 289 + 290 + /* DM9000AEP 10/100 ethernet controller */ 291 + 292 + static struct resource mini2440_dm9k_resource[] __initdata = { 293 + [0] = { 294 + .start = MACH_MINI2440_DM9K_BASE, 295 + .end = MACH_MINI2440_DM9K_BASE + 3, 296 + .flags = IORESOURCE_MEM 297 + }, 298 + [1] = { 299 + .start = MACH_MINI2440_DM9K_BASE + 4, 300 + .end = MACH_MINI2440_DM9K_BASE + 7, 301 + .flags = IORESOURCE_MEM 302 + }, 303 + [2] = { 304 + .start = IRQ_EINT7, 305 + .end = IRQ_EINT7, 306 + .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, 307 + } 308 + }; 309 + 310 + /* 311 + * The DM9000 has no eeprom, and it's MAC address is set by 312 + * the bootloader before starting the kernel. 313 + */ 314 + static struct dm9000_plat_data mini2440_dm9k_pdata __initdata = { 315 + .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM), 316 + }; 317 + 318 + static struct platform_device mini2440_device_eth __initdata = { 319 + .name = "dm9000", 320 + .id = -1, 321 + .num_resources = ARRAY_SIZE(mini2440_dm9k_resource), 322 + .resource = mini2440_dm9k_resource, 323 + .dev = { 324 + .platform_data = &mini2440_dm9k_pdata, 325 + }, 326 + }; 327 + 328 + /* CON5 329 + * +--+ /-----\ 330 + * | | | | 331 + * | | | BAT | 332 + * | | \_____/ 333 + * | | 334 + * | | +----+ +----+ 335 + * | | | K5 | | K1 | 336 + * | | +----+ +----+ 337 + * | | +----+ +----+ 338 + * | | | K4 | | K2 | 339 + * | | +----+ +----+ 340 + * | | +----+ +----+ 341 + * | | | K6 | | K3 | 342 + * | | +----+ +----+ 343 + * ..... 344 + */ 345 + static struct gpio_keys_button mini2440_buttons[] __initdata = { 346 + { 347 + .gpio = S3C2410_GPG(0), /* K1 */ 348 + .code = KEY_F1, 349 + .desc = "Button 1", 350 + .active_low = 1, 351 + }, 352 + { 353 + .gpio = S3C2410_GPG(3), /* K2 */ 354 + .code = KEY_F2, 355 + .desc = "Button 2", 356 + .active_low = 1, 357 + }, 358 + { 359 + .gpio = S3C2410_GPG(5), /* K3 */ 360 + .code = KEY_F3, 361 + .desc = "Button 3", 362 + .active_low = 1, 363 + }, 364 + { 365 + .gpio = S3C2410_GPG(6), /* K4 */ 366 + .code = KEY_POWER, 367 + .desc = "Power", 368 + .active_low = 1, 369 + }, 370 + { 371 + .gpio = S3C2410_GPG(7), /* K5 */ 372 + .code = KEY_F5, 373 + .desc = "Button 5", 374 + .active_low = 1, 375 + }, 376 + #if 0 377 + /* this pin is also known as TCLK1 and seems to already 378 + * marked as "in use" somehow in the kernel -- possibly wrongly */ 379 + { 380 + .gpio = S3C2410_GPG(11), /* K6 */ 381 + .code = KEY_F6, 382 + .desc = "Button 6", 383 + .active_low = 1, 384 + }, 385 + #endif 386 + }; 387 + 388 + static struct gpio_keys_platform_data mini2440_button_data __initdata = { 389 + .buttons = mini2440_buttons, 390 + .nbuttons = ARRAY_SIZE(mini2440_buttons), 391 + }; 392 + 393 + static struct platform_device mini2440_button_device __initdata = { 394 + .name = "gpio-keys", 395 + .id = -1, 396 + .dev = { 397 + .platform_data = &mini2440_button_data, 398 + } 399 + }; 400 + 401 + /* LEDS */ 402 + 403 + static struct s3c24xx_led_platdata mini2440_led1_pdata __initdata = { 404 + .name = "led1", 405 + .gpio = S3C2410_GPB(5), 406 + .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, 407 + .def_trigger = "heartbeat", 408 + }; 409 + 410 + static struct s3c24xx_led_platdata mini2440_led2_pdata __initdata = { 411 + .name = "led2", 412 + .gpio = S3C2410_GPB(6), 413 + .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, 414 + .def_trigger = "nand-disk", 415 + }; 416 + 417 + static struct s3c24xx_led_platdata mini2440_led3_pdata __initdata = { 418 + .name = "led3", 419 + .gpio = S3C2410_GPB(7), 420 + .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, 421 + .def_trigger = "mmc0", 422 + }; 423 + 424 + static struct s3c24xx_led_platdata mini2440_led4_pdata __initdata = { 425 + .name = "led4", 426 + .gpio = S3C2410_GPB(8), 427 + .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE, 428 + .def_trigger = "", 429 + }; 430 + 431 + static struct s3c24xx_led_platdata mini2440_led_backlight_pdata __initdata = { 432 + .name = "backlight", 433 + .gpio = S3C2410_GPG(4), 434 + .def_trigger = "backlight", 435 + }; 436 + 437 + static struct platform_device mini2440_led1 __initdata = { 438 + .name = "s3c24xx_led", 439 + .id = 1, 440 + .dev = { 441 + .platform_data = &mini2440_led1_pdata, 442 + }, 443 + }; 444 + 445 + static struct platform_device mini2440_led2 __initdata = { 446 + .name = "s3c24xx_led", 447 + .id = 2, 448 + .dev = { 449 + .platform_data = &mini2440_led2_pdata, 450 + }, 451 + }; 452 + 453 + static struct platform_device mini2440_led3 __initdata = { 454 + .name = "s3c24xx_led", 455 + .id = 3, 456 + .dev = { 457 + .platform_data = &mini2440_led3_pdata, 458 + }, 459 + }; 460 + 461 + static struct platform_device mini2440_led4 __initdata = { 462 + .name = "s3c24xx_led", 463 + .id = 4, 464 + .dev = { 465 + .platform_data = &mini2440_led4_pdata, 466 + }, 467 + }; 468 + 469 + static struct platform_device mini2440_led_backlight __initdata = { 470 + .name = "s3c24xx_led", 471 + .id = 5, 472 + .dev = { 473 + .platform_data = &mini2440_led_backlight_pdata, 474 + }, 475 + }; 476 + 477 + /* AUDIO */ 478 + 479 + static struct s3c24xx_uda134x_platform_data mini2440_audio_pins __initdata = { 480 + .l3_clk = S3C2410_GPB(4), 481 + .l3_mode = S3C2410_GPB(2), 482 + .l3_data = S3C2410_GPB(3), 483 + .model = UDA134X_UDA1341 484 + }; 485 + 486 + static struct platform_device mini2440_audio __initdata = { 487 + .name = "s3c24xx_uda134x", 488 + .id = 0, 489 + .dev = { 490 + .platform_data = &mini2440_audio_pins, 491 + }, 492 + }; 493 + 494 + /* 495 + * I2C devices 496 + */ 497 + static struct at24_platform_data at24c08 = { 498 + .byte_len = SZ_8K / 8, 499 + .page_size = 16, 500 + }; 501 + 502 + static struct i2c_board_info mini2440_i2c_devs[] __initdata = { 503 + { 504 + I2C_BOARD_INFO("24c08", 0x50), 505 + .platform_data = &at24c08, 506 + }, 507 + }; 508 + 509 + static struct platform_device *mini2440_devices[] __initdata = { 510 + &s3c_device_usb, 511 + &s3c_device_wdt, 512 + /* &s3c_device_adc,*/ /* ADC doesn't like living with touchscreen ! */ 513 + &s3c_device_i2c0, 514 + &s3c_device_rtc, 515 + &s3c_device_usbgadget, 516 + &mini2440_device_eth, 517 + &mini2440_led1, 518 + &mini2440_led2, 519 + &mini2440_led3, 520 + &mini2440_led4, 521 + &mini2440_button_device, 522 + &s3c_device_nand, 523 + &s3c_device_sdi, 524 + &s3c_device_iis, 525 + &mini2440_audio, 526 + /* &s3c_device_timer[0],*/ /* buzzer pwm, no API for it */ 527 + /* remaining devices are optional */ 528 + }; 529 + 530 + static void __init mini2440_map_io(void) 531 + { 532 + s3c24xx_init_io(mini2440_iodesc, ARRAY_SIZE(mini2440_iodesc)); 533 + s3c24xx_init_clocks(12000000); 534 + s3c24xx_init_uarts(mini2440_uartcfgs, ARRAY_SIZE(mini2440_uartcfgs)); 535 + 536 + s3c_device_nand.dev.platform_data = &mini2440_nand_info; 537 + s3c_device_sdi.dev.platform_data = &mini2440_mmc_cfg; 538 + } 539 + 540 + /* 541 + * mini2440_features string 542 + * 543 + * t = Touchscreen present 544 + * b = backlight control 545 + * c = camera [TODO] 546 + * 0-9 LCD configuration 547 + * 548 + */ 549 + static char mini2440_features_str[12] __initdata = "0tb"; 550 + 551 + static int __init mini2440_features_setup(char *str) 552 + { 553 + if (str) 554 + strlcpy(mini2440_features_str, str, sizeof(mini2440_features_str)); 555 + return 1; 556 + } 557 + 558 + __setup("mini2440=", mini2440_features_setup); 559 + 560 + #define FEATURE_SCREEN (1 << 0) 561 + #define FEATURE_BACKLIGHT (1 << 1) 562 + #define FEATURE_TOUCH (1 << 2) 563 + #define FEATURE_CAMERA (1 << 3) 564 + 565 + struct mini2440_features_t { 566 + int count; 567 + int done; 568 + int lcd_index; 569 + struct platform_device *optional[8]; 570 + }; 571 + 572 + static void mini2440_parse_features( 573 + struct mini2440_features_t * features, 574 + const char * features_str ) 575 + { 576 + const char * fp = features_str; 577 + 578 + features->count = 0; 579 + features->done = 0; 580 + features->lcd_index = -1; 581 + 582 + while (*fp) { 583 + char f = *fp++; 584 + 585 + switch (f) { 586 + case '0'...'9': /* tft screen */ 587 + if (features->done & FEATURE_SCREEN) { 588 + printk(KERN_INFO "MINI2440: '%c' ignored, " 589 + "screen type already set\n", f); 590 + } else { 591 + int li = f - '0'; 592 + if (li >= ARRAY_SIZE(mini2440_lcd_cfg)) 593 + printk(KERN_INFO "MINI2440: " 594 + "'%c' out of range LCD mode\n", f); 595 + else { 596 + features->optional[features->count++] = 597 + &s3c_device_lcd; 598 + features->lcd_index = li; 599 + } 600 + } 601 + features->done |= FEATURE_SCREEN; 602 + break; 603 + case 'b': 604 + if (features->done & FEATURE_BACKLIGHT) 605 + printk(KERN_INFO "MINI2440: '%c' ignored, " 606 + "backlight already set\n", f); 607 + else { 608 + features->optional[features->count++] = 609 + &mini2440_led_backlight; 610 + } 611 + features->done |= FEATURE_BACKLIGHT; 612 + break; 613 + case 't': 614 + printk(KERN_INFO "MINI2440: '%c' ignored, " 615 + "touchscreen not compiled in\n", f); 616 + break; 617 + case 'c': 618 + if (features->done & FEATURE_CAMERA) 619 + printk(KERN_INFO "MINI2440: '%c' ignored, " 620 + "camera already registered\n", f); 621 + else 622 + features->optional[features->count++] = 623 + &s3c_device_camif; 624 + features->done |= FEATURE_CAMERA; 625 + break; 626 + } 627 + } 628 + } 629 + 630 + static void __init mini2440_init(void) 631 + { 632 + struct mini2440_features_t features = { 0 }; 633 + int i; 634 + 635 + printk(KERN_INFO "MINI2440: Option string mini2440=%s\n", 636 + mini2440_features_str); 637 + 638 + /* Parse the feature string */ 639 + mini2440_parse_features(&features, mini2440_features_str); 640 + 641 + /* turn LCD on */ 642 + s3c2410_gpio_cfgpin(S3C2410_GPC(0), S3C2410_GPC0_LEND); 643 + 644 + /* Turn the backlight early on */ 645 + s3c2410_gpio_setpin(S3C2410_GPG(4), 1); 646 + s3c2410_gpio_cfgpin(S3C2410_GPG(4), S3C2410_GPIO_OUTPUT); 647 + 648 + /* remove pullup on optional PWM backlight -- unused on 3.5 and 7"s */ 649 + s3c2410_gpio_pullup(S3C2410_GPB(1), 0); 650 + s3c2410_gpio_setpin(S3C2410_GPB(1), 0); 651 + s3c2410_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_INPUT); 652 + 653 + /* Make sure the D+ pullup pin is output */ 654 + s3c2410_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT); 655 + 656 + /* mark the key as input, without pullups (there is one on the board) */ 657 + for (i = 0; i < ARRAY_SIZE(mini2440_buttons); i++) { 658 + s3c2410_gpio_pullup(mini2440_buttons[i].gpio, 0); 659 + s3c2410_gpio_cfgpin(mini2440_buttons[i].gpio, 660 + S3C2410_GPIO_INPUT); 661 + } 662 + if (features.lcd_index != -1) { 663 + int li; 664 + 665 + mini2440_fb_info.displays = 666 + &mini2440_lcd_cfg[features.lcd_index]; 667 + 668 + printk(KERN_INFO "MINI2440: LCD"); 669 + for (li = 0; li < ARRAY_SIZE(mini2440_lcd_cfg); li++) 670 + if (li == features.lcd_index) 671 + printk(" [%d:%dx%d]", li, 672 + mini2440_lcd_cfg[li].width, 673 + mini2440_lcd_cfg[li].height); 674 + else 675 + printk(" %d:%dx%d", li, 676 + mini2440_lcd_cfg[li].width, 677 + mini2440_lcd_cfg[li].height); 678 + printk("\n"); 679 + s3c24xx_fb_set_platdata(&mini2440_fb_info); 680 + } 681 + s3c24xx_udc_set_platdata(&mini2440_udc_cfg); 682 + s3c_i2c0_set_platdata(NULL); 683 + i2c_register_board_info(0, mini2440_i2c_devs, 684 + ARRAY_SIZE(mini2440_i2c_devs)); 685 + 686 + platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices)); 687 + 688 + if (features.count) /* the optional features */ 689 + platform_add_devices(features.optional, features.count); 690 + 691 + } 692 + 693 + 694 + MACHINE_START(MINI2440, "MINI2440") 695 + /* Maintainer: Michel Pollet <buserror@gmail.com> */ 696 + .phys_io = S3C2410_PA_UART, 697 + .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 698 + .boot_params = S3C2410_SDRAM_PA + 0x100, 699 + .map_io = mini2440_map_io, 700 + .init_machine = mini2440_init, 701 + .init_irq = s3c24xx_init_irq, 702 + .timer = &s3c24xx_timer, 703 + MACHINE_END
+12
arch/arm/mach-s3c2442/Kconfig
··· 24 24 depends on ARCH_S3C2440 25 25 select CPU_S3C2442 26 26 27 + config MACH_NEO1973_GTA02 28 + bool "Openmoko GTA02 / Freerunner phone" 29 + select CPU_S3C2442 30 + select MFD_PCF50633 31 + select PCF50633_GPIO 32 + select I2C 33 + select POWER_SUPPLY 34 + select MACH_NEO1973 35 + select S3C2410_PWM 36 + help 37 + Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone 38 + 27 39 28 40 endmenu 29 41
+2
arch/arm/mach-s3c2442/Makefile
··· 12 12 obj-$(CONFIG_CPU_S3C2442) += s3c2442.o 13 13 obj-$(CONFIG_CPU_S3C2442) += clock.o 14 14 15 + obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o 16 + 15 17 # Machine support 16 18
+84
arch/arm/mach-s3c2442/include/mach/gta02.h
··· 1 + #ifndef _GTA02_H 2 + #define _GTA02_H 3 + 4 + #include <mach/regs-gpio.h> 5 + 6 + /* Different hardware revisions, passed in ATAG_REVISION by u-boot */ 7 + #define GTA02v1_SYSTEM_REV 0x00000310 8 + #define GTA02v2_SYSTEM_REV 0x00000320 9 + #define GTA02v3_SYSTEM_REV 0x00000330 10 + #define GTA02v4_SYSTEM_REV 0x00000340 11 + #define GTA02v5_SYSTEM_REV 0x00000350 12 + /* since A7 is basically same as A6, we use A6 PCB ID */ 13 + #define GTA02v6_SYSTEM_REV 0x00000360 14 + 15 + #define GTA02_GPIO_n3DL_GSM S3C2410_GPA(13) /* v1 + v2 + v3 only */ 16 + 17 + #define GTA02_GPIO_PWR_LED1 S3C2410_GPB(0) 18 + #define GTA02_GPIO_PWR_LED2 S3C2410_GPB(1) 19 + #define GTA02_GPIO_AUX_LED S3C2410_GPB(2) 20 + #define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB(3) 21 + #define GTA02_GPIO_MODEM_RST S3C2410_GPB(5) 22 + #define GTA02_GPIO_BT_EN S3C2410_GPB(6) 23 + #define GTA02_GPIO_MODEM_ON S3C2410_GPB(7) 24 + #define GTA02_GPIO_EXTINT8 S3C2410_GPB(8) 25 + #define GTA02_GPIO_USB_PULLUP S3C2410_GPB(9) 26 + 27 + #define GTA02_GPIO_PIO5 S3C2410_GPC(5) /* v3 + v4 only */ 28 + 29 + #define GTA02v3_GPIO_nG1_CS S3C2410_GPD(12) /* v3 + v4 only */ 30 + #define GTA02v3_GPIO_nG2_CS S3C2410_GPD(13) /* v3 + v4 only */ 31 + #define GTA02v5_GPIO_HDQ S3C2410_GPD(14) /* v5 + */ 32 + 33 + #define GTA02_GPIO_nG1_INT S3C2410_GPF(0) 34 + #define GTA02_GPIO_IO1 S3C2410_GPF(1) 35 + #define GTA02_GPIO_PIO_2 S3C2410_GPF(2) /* v2 + v3 + v4 only */ 36 + #define GTA02_GPIO_JACK_INSERT S3C2410_GPF(4) 37 + #define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF(5) /* v2 + v3 + v4 only */ 38 + #define GTA02_GPIO_AUX_KEY S3C2410_GPF(6) 39 + #define GTA02_GPIO_HOLD_KEY S3C2410_GPF(7) 40 + 41 + #define GTA02_GPIO_3D_IRQ S3C2410_GPG(4) 42 + #define GTA02v2_GPIO_nG2_INT S3C2410_GPG(8) /* v2 + v3 + v4 only */ 43 + #define GTA02v3_GPIO_nUSB_OC S3C2410_GPG(9) /* v3 + v4 only */ 44 + #define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG(10) /* v3 + v4 only */ 45 + #define GTA02v3_GPIO_nGSM_OC S3C2410_GPG(11) /* v3 + v4 only */ 46 + 47 + #define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1 /* v2 + v3 + v4 only */ 48 + #define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2 49 + #define GTA02_GPIO_HP_IN S3C2440_GPJ2 /* v2 + v3 + v4 only */ 50 + #define GTA02_GPIO_INT0 S3C2440_GPJ3 /* v2 + v3 + v4 only */ 51 + #define GTA02_GPIO_nGSM_EN S3C2440_GPJ4 52 + #define GTA02_GPIO_3D_RESET S3C2440_GPJ5 53 + #define GTA02_GPIO_nDL_GSM S3C2440_GPJ6 /* v4 + v5 only */ 54 + #define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7 55 + #define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8 56 + #define GTA02_GPIO_KEEPACT S3C2440_GPJ8 57 + #define GTA02v1_GPIO_HP_IN S3C2440_GPJ10 58 + #define GTA02_CHIP_PWD S3C2440_GPJ11 /* v2 + v3 + v4 only */ 59 + #define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12 /* v2 + v3 + v4 only */ 60 + 61 + #define GTA02_IRQ_GSENSOR_1 IRQ_EINT0 62 + #define GTA02_IRQ_MODEM IRQ_EINT1 63 + #define GTA02_IRQ_PIO_2 IRQ_EINT2 /* v2 + v3 + v4 only */ 64 + #define GTA02_IRQ_nJACK_INSERT IRQ_EINT4 65 + #define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5 66 + #define GTA02_IRQ_AUX IRQ_EINT6 67 + #define GTA02_IRQ_nHOLD IRQ_EINT7 68 + #define GTA02_IRQ_PCF50633 IRQ_EINT9 69 + #define GTA02_IRQ_3D IRQ_EINT12 70 + #define GTA02_IRQ_GSENSOR_2 IRQ_EINT16 /* v2 + v3 + v4 only */ 71 + #define GTA02v3_IRQ_nUSB_OC IRQ_EINT17 /* v3 + v4 only */ 72 + #define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18 /* v3 + v4 only */ 73 + #define GTA02v3_IRQ_nGSM_OC IRQ_EINT19 /* v3 + v4 only */ 74 + 75 + /* returns 00 000 on GTA02 A5 and earlier, A6 returns 01 001 */ 76 + #define GTA02_PCB_ID1_0 S3C2410_GPC(13) 77 + #define GTA02_PCB_ID1_1 S3C2410_GPC(15) 78 + #define GTA02_PCB_ID1_2 S3C2410_GPD(0) 79 + #define GTA02_PCB_ID2_0 S3C2410_GPD(3) 80 + #define GTA02_PCB_ID2_1 S3C2410_GPD(4) 81 + 82 + int gta02_get_pcb_revision(void); 83 + 84 + #endif /* _GTA02_H */
+646
arch/arm/mach-s3c2442/mach-gta02.c
··· 1 + /* 2 + * linux/arch/arm/mach-s3c2442/mach-gta02.c 3 + * 4 + * S3C2442 Machine Support for Openmoko GTA02 / FreeRunner. 5 + * 6 + * Copyright (C) 2006-2009 by Openmoko, Inc. 7 + * Authors: Harald Welte <laforge@openmoko.org> 8 + * Andy Green <andy@openmoko.org> 9 + * Werner Almesberger <werner@openmoko.org> 10 + * All rights reserved. 11 + * 12 + * This program is free software; you can redistribute it and/or 13 + * modify it under the terms of the GNU General Public License as 14 + * published by the Free Software Foundation; either version 2 of 15 + * the License, or (at your option) any later version. 16 + * 17 + * This program is distributed in the hope that it will be useful, 18 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 + * GNU General Public License for more details. 21 + * 22 + * You should have received a copy of the GNU General Public License 23 + * along with this program; if not, write to the Free Software 24 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 25 + * MA 02111-1307 USA 26 + * 27 + */ 28 + 29 + #include <linux/kernel.h> 30 + #include <linux/types.h> 31 + #include <linux/interrupt.h> 32 + #include <linux/list.h> 33 + #include <linux/delay.h> 34 + #include <linux/timer.h> 35 + #include <linux/init.h> 36 + #include <linux/gpio.h> 37 + #include <linux/workqueue.h> 38 + #include <linux/platform_device.h> 39 + #include <linux/serial_core.h> 40 + #include <linux/spi/spi.h> 41 + 42 + #include <linux/mmc/host.h> 43 + 44 + #include <linux/mtd/mtd.h> 45 + #include <linux/mtd/nand.h> 46 + #include <linux/mtd/nand_ecc.h> 47 + #include <linux/mtd/partitions.h> 48 + #include <linux/mtd/physmap.h> 49 + #include <linux/io.h> 50 + 51 + #include <linux/i2c.h> 52 + #include <linux/backlight.h> 53 + #include <linux/regulator/machine.h> 54 + 55 + #include <linux/mfd/pcf50633/core.h> 56 + #include <linux/mfd/pcf50633/mbc.h> 57 + #include <linux/mfd/pcf50633/adc.h> 58 + #include <linux/mfd/pcf50633/gpio.h> 59 + #include <linux/mfd/pcf50633/pmic.h> 60 + 61 + #include <asm/mach/arch.h> 62 + #include <asm/mach/map.h> 63 + #include <asm/mach/irq.h> 64 + 65 + #include <asm/irq.h> 66 + #include <asm/mach-types.h> 67 + 68 + #include <mach/regs-irq.h> 69 + #include <mach/regs-gpio.h> 70 + #include <mach/regs-gpioj.h> 71 + #include <mach/fb.h> 72 + 73 + #include <mach/spi.h> 74 + #include <mach/spi-gpio.h> 75 + #include <plat/usb-control.h> 76 + #include <mach/regs-mem.h> 77 + #include <mach/hardware.h> 78 + 79 + #include <mach/gta02.h> 80 + 81 + #include <plat/regs-serial.h> 82 + #include <plat/nand.h> 83 + #include <plat/devs.h> 84 + #include <plat/cpu.h> 85 + #include <plat/pm.h> 86 + #include <plat/udc.h> 87 + #include <plat/gpio-cfg.h> 88 + #include <plat/iic.h> 89 + 90 + static struct pcf50633 *gta02_pcf; 91 + 92 + /* 93 + * This gets called every 1ms when we paniced. 94 + */ 95 + 96 + static long gta02_panic_blink(long count) 97 + { 98 + long delay = 0; 99 + static long last_blink; 100 + static char led; 101 + 102 + /* Fast blink: 200ms period. */ 103 + if (count - last_blink < 100) 104 + return 0; 105 + 106 + led ^= 1; 107 + gpio_direction_output(GTA02_GPIO_AUX_LED, led); 108 + 109 + last_blink = count; 110 + 111 + return delay; 112 + } 113 + 114 + 115 + static struct map_desc gta02_iodesc[] __initdata = { 116 + { 117 + .virtual = 0xe0000000, 118 + .pfn = __phys_to_pfn(S3C2410_CS3 + 0x01000000), 119 + .length = SZ_1M, 120 + .type = MT_DEVICE 121 + }, 122 + }; 123 + 124 + #define UCON (S3C2410_UCON_DEFAULT | S3C2443_UCON_RXERR_IRQEN) 125 + #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB) 126 + #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) 127 + 128 + static struct s3c2410_uartcfg gta02_uartcfgs[] = { 129 + [0] = { 130 + .hwport = 0, 131 + .flags = 0, 132 + .ucon = UCON, 133 + .ulcon = ULCON, 134 + .ufcon = UFCON, 135 + }, 136 + [1] = { 137 + .hwport = 1, 138 + .flags = 0, 139 + .ucon = UCON, 140 + .ulcon = ULCON, 141 + .ufcon = UFCON, 142 + }, 143 + [2] = { 144 + .hwport = 2, 145 + .flags = 0, 146 + .ucon = UCON, 147 + .ulcon = ULCON, 148 + .ufcon = UFCON, 149 + }, 150 + }; 151 + 152 + #ifdef CONFIG_CHARGER_PCF50633 153 + /* 154 + * On GTA02 the 1A charger features a 48K resistor to 0V on the ID pin. 155 + * We use this to recognize that we can pull 1A from the USB socket. 156 + * 157 + * These constants are the measured pcf50633 ADC levels with the 1A 158 + * charger / 48K resistor, and with no pulldown resistor. 159 + */ 160 + 161 + #define ADC_NOM_CHG_DETECT_1A 6 162 + #define ADC_NOM_CHG_DETECT_USB 43 163 + 164 + static void 165 + gta02_configure_pmu_for_charger(struct pcf50633 *pcf, void *unused, int res) 166 + { 167 + int ma; 168 + 169 + /* Interpret charger type */ 170 + if (res < ((ADC_NOM_CHG_DETECT_USB + ADC_NOM_CHG_DETECT_1A) / 2)) { 171 + 172 + /* 173 + * Sanity - stop GPO driving out now that we have a 1A charger 174 + * GPO controls USB Host power generation on GTA02 175 + */ 176 + pcf50633_gpio_set(pcf, PCF50633_GPO, 0); 177 + 178 + ma = 1000; 179 + } else 180 + ma = 100; 181 + 182 + pcf50633_mbc_usb_curlim_set(pcf, ma); 183 + } 184 + 185 + static struct delayed_work gta02_charger_work; 186 + static int gta02_usb_vbus_draw; 187 + 188 + static void gta02_charger_worker(struct work_struct *work) 189 + { 190 + if (gta02_usb_vbus_draw) { 191 + pcf50633_mbc_usb_curlim_set(gta02_pcf, gta02_usb_vbus_draw); 192 + return; 193 + } 194 + 195 + #ifdef CONFIG_PCF50633_ADC 196 + pcf50633_adc_async_read(gta02_pcf, 197 + PCF50633_ADCC1_MUX_ADCIN1, 198 + PCF50633_ADCC1_AVERAGE_16, 199 + gta02_configure_pmu_for_charger, 200 + NULL); 201 + #else 202 + /* 203 + * If the PCF50633 ADC is disabled we fallback to a 204 + * 100mA limit for safety. 205 + */ 206 + pcf50633_mbc_usb_curlim_set(pcf, 100); 207 + #endif 208 + } 209 + 210 + #define GTA02_CHARGER_CONFIGURE_TIMEOUT ((3000 * HZ) / 1000) 211 + 212 + static void gta02_pmu_event_callback(struct pcf50633 *pcf, int irq) 213 + { 214 + if (irq == PCF50633_IRQ_USBINS) { 215 + schedule_delayed_work(&gta02_charger_work, 216 + GTA02_CHARGER_CONFIGURE_TIMEOUT); 217 + 218 + return; 219 + } 220 + 221 + if (irq == PCF50633_IRQ_USBREM) { 222 + cancel_delayed_work_sync(&gta02_charger_work); 223 + gta02_usb_vbus_draw = 0; 224 + } 225 + } 226 + 227 + static void gta02_udc_vbus_draw(unsigned int ma) 228 + { 229 + if (!gta02_pcf) 230 + return; 231 + 232 + gta02_usb_vbus_draw = ma; 233 + 234 + schedule_delayed_work(&gta02_charger_work, 235 + GTA02_CHARGER_CONFIGURE_TIMEOUT); 236 + } 237 + #else /* !CONFIG_CHARGER_PCF50633 */ 238 + #define gta02_pmu_event_callback NULL 239 + #define gta02_udc_vbus_draw NULL 240 + #endif 241 + 242 + /* 243 + * This is called when pc50633 is probed, unfortunately quite late in the 244 + * day since it is an I2C bus device. Here we can belatedly define some 245 + * platform devices with the advantage that we can mark the pcf50633 as the 246 + * parent. This makes them get suspended and resumed with their parent 247 + * the pcf50633 still around. 248 + */ 249 + 250 + static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf); 251 + 252 + 253 + static char *gta02_batteries[] = { 254 + "battery", 255 + }; 256 + 257 + struct pcf50633_platform_data gta02_pcf_pdata = { 258 + .resumers = { 259 + [0] = PCF50633_INT1_USBINS | 260 + PCF50633_INT1_USBREM | 261 + PCF50633_INT1_ALARM, 262 + [1] = PCF50633_INT2_ONKEYF, 263 + [2] = PCF50633_INT3_ONKEY1S, 264 + [3] = PCF50633_INT4_LOWSYS | 265 + PCF50633_INT4_LOWBAT | 266 + PCF50633_INT4_HIGHTMP, 267 + }, 268 + 269 + .batteries = gta02_batteries, 270 + .num_batteries = ARRAY_SIZE(gta02_batteries), 271 + .reg_init_data = { 272 + [PCF50633_REGULATOR_AUTO] = { 273 + .constraints = { 274 + .min_uV = 3300000, 275 + .max_uV = 3300000, 276 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 277 + .always_on = 1, 278 + .apply_uV = 1, 279 + .state_mem = { 280 + .enabled = 1, 281 + }, 282 + }, 283 + }, 284 + [PCF50633_REGULATOR_DOWN1] = { 285 + .constraints = { 286 + .min_uV = 1300000, 287 + .max_uV = 1600000, 288 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 289 + .always_on = 1, 290 + .apply_uV = 1, 291 + }, 292 + }, 293 + [PCF50633_REGULATOR_DOWN2] = { 294 + .constraints = { 295 + .min_uV = 1800000, 296 + .max_uV = 1800000, 297 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 298 + .apply_uV = 1, 299 + .always_on = 1, 300 + .state_mem = { 301 + .enabled = 1, 302 + }, 303 + }, 304 + }, 305 + [PCF50633_REGULATOR_HCLDO] = { 306 + .constraints = { 307 + .min_uV = 2000000, 308 + .max_uV = 3300000, 309 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 310 + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, 311 + .always_on = 1, 312 + }, 313 + }, 314 + [PCF50633_REGULATOR_LDO1] = { 315 + .constraints = { 316 + .min_uV = 3300000, 317 + .max_uV = 3300000, 318 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 319 + .apply_uV = 1, 320 + .state_mem = { 321 + .enabled = 0, 322 + }, 323 + }, 324 + }, 325 + [PCF50633_REGULATOR_LDO2] = { 326 + .constraints = { 327 + .min_uV = 3300000, 328 + .max_uV = 3300000, 329 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 330 + .apply_uV = 1, 331 + }, 332 + }, 333 + [PCF50633_REGULATOR_LDO3] = { 334 + .constraints = { 335 + .min_uV = 3000000, 336 + .max_uV = 3000000, 337 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 338 + .apply_uV = 1, 339 + }, 340 + }, 341 + [PCF50633_REGULATOR_LDO4] = { 342 + .constraints = { 343 + .min_uV = 3200000, 344 + .max_uV = 3200000, 345 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 346 + .apply_uV = 1, 347 + }, 348 + }, 349 + [PCF50633_REGULATOR_LDO5] = { 350 + .constraints = { 351 + .min_uV = 3000000, 352 + .max_uV = 3000000, 353 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 354 + .apply_uV = 1, 355 + .state_mem = { 356 + .enabled = 1, 357 + }, 358 + }, 359 + }, 360 + [PCF50633_REGULATOR_LDO6] = { 361 + .constraints = { 362 + .min_uV = 3000000, 363 + .max_uV = 3000000, 364 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 365 + }, 366 + }, 367 + [PCF50633_REGULATOR_MEMLDO] = { 368 + .constraints = { 369 + .min_uV = 1800000, 370 + .max_uV = 1800000, 371 + .valid_modes_mask = REGULATOR_MODE_NORMAL, 372 + .state_mem = { 373 + .enabled = 1, 374 + }, 375 + }, 376 + }, 377 + 378 + }, 379 + .probe_done = gta02_pmu_attach_child_devices, 380 + .mbc_event_callback = gta02_pmu_event_callback, 381 + }; 382 + 383 + 384 + /* NOR Flash. */ 385 + 386 + #define GTA02_FLASH_BASE 0x18000000 /* GCS3 */ 387 + #define GTA02_FLASH_SIZE 0x200000 /* 2MBytes */ 388 + 389 + static struct physmap_flash_data gta02_nor_flash_data = { 390 + .width = 2, 391 + }; 392 + 393 + static struct resource gta02_nor_flash_resource = { 394 + .start = GTA02_FLASH_BASE, 395 + .end = GTA02_FLASH_BASE + GTA02_FLASH_SIZE - 1, 396 + .flags = IORESOURCE_MEM, 397 + }; 398 + 399 + static struct platform_device gta02_nor_flash = { 400 + .name = "physmap-flash", 401 + .id = 0, 402 + .dev = { 403 + .platform_data = &gta02_nor_flash_data, 404 + }, 405 + .resource = &gta02_nor_flash_resource, 406 + .num_resources = 1, 407 + }; 408 + 409 + 410 + struct platform_device s3c24xx_pwm_device = { 411 + .name = "s3c24xx_pwm", 412 + .num_resources = 0, 413 + }; 414 + 415 + static struct i2c_board_info gta02_i2c_devs[] __initdata = { 416 + { 417 + I2C_BOARD_INFO("pcf50633", 0x73), 418 + .irq = GTA02_IRQ_PCF50633, 419 + .platform_data = &gta02_pcf_pdata, 420 + }, 421 + { 422 + I2C_BOARD_INFO("wm8753", 0x1a), 423 + }, 424 + }; 425 + 426 + static struct s3c2410_nand_set gta02_nand_sets[] = { 427 + [0] = { 428 + /* 429 + * This name is also hard-coded in the boot loaders, so 430 + * changing it would would require all users to upgrade 431 + * their boot loaders, some of which are stored in a NOR 432 + * that is considered to be immutable. 433 + */ 434 + .name = "neo1973-nand", 435 + .nr_chips = 1, 436 + .use_bbt = 1, 437 + .force_soft_ecc = 1, 438 + }, 439 + }; 440 + 441 + /* 442 + * Choose a set of timings derived from S3C@2442B MCP54 443 + * data sheet (K5D2G13ACM-D075 MCP Memory). 444 + */ 445 + 446 + static struct s3c2410_platform_nand gta02_nand_info = { 447 + .tacls = 0, 448 + .twrph0 = 25, 449 + .twrph1 = 15, 450 + .nr_sets = ARRAY_SIZE(gta02_nand_sets), 451 + .sets = gta02_nand_sets, 452 + }; 453 + 454 + 455 + static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd) 456 + { 457 + switch (cmd) { 458 + case S3C2410_UDC_P_ENABLE: 459 + pr_debug("%s S3C2410_UDC_P_ENABLE\n", __func__); 460 + gpio_direction_output(GTA02_GPIO_USB_PULLUP, 1); 461 + break; 462 + case S3C2410_UDC_P_DISABLE: 463 + pr_debug("%s S3C2410_UDC_P_DISABLE\n", __func__); 464 + gpio_direction_output(GTA02_GPIO_USB_PULLUP, 0); 465 + break; 466 + case S3C2410_UDC_P_RESET: 467 + pr_debug("%s S3C2410_UDC_P_RESET\n", __func__); 468 + /* FIXME: Do something here. */ 469 + } 470 + } 471 + 472 + /* Get PMU to set USB current limit accordingly. */ 473 + static struct s3c2410_udc_mach_info gta02_udc_cfg = { 474 + .vbus_draw = gta02_udc_vbus_draw, 475 + .udc_command = gta02_udc_command, 476 + 477 + }; 478 + 479 + 480 + 481 + static void gta02_bl_set_intensity(int intensity) 482 + { 483 + struct pcf50633 *pcf = gta02_pcf; 484 + int old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT); 485 + 486 + /* We map 8-bit intensity to 6-bit intensity in hardware. */ 487 + intensity >>= 2; 488 + 489 + /* 490 + * This can happen during, eg, print of panic on blanked console, 491 + * but we can't service i2c without interrupts active, so abort. 492 + */ 493 + if (in_atomic()) { 494 + printk(KERN_ERR "gta02_bl_set_intensity called while atomic\n"); 495 + return; 496 + } 497 + 498 + old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT); 499 + if (intensity == old_intensity) 500 + return; 501 + 502 + /* We can't do this anywhere else. */ 503 + pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 5); 504 + 505 + if (!(pcf50633_reg_read(pcf, PCF50633_REG_LEDENA) & 3)) 506 + old_intensity = 0; 507 + 508 + /* 509 + * The PCF50633 cannot handle LEDOUT = 0 (datasheet p60) 510 + * if seen, you have to re-enable the LED unit. 511 + */ 512 + if (!intensity || !old_intensity) 513 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0); 514 + 515 + /* Illegal to set LEDOUT to 0. */ 516 + if (!intensity) 517 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 2); 518 + else 519 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 520 + intensity); 521 + 522 + if (intensity) 523 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 2); 524 + 525 + } 526 + 527 + static struct generic_bl_info gta02_bl_info = { 528 + .name = "gta02-bl", 529 + .max_intensity = 0xff, 530 + .default_intensity = 0xff, 531 + .set_bl_intensity = gta02_bl_set_intensity, 532 + }; 533 + 534 + static struct platform_device gta02_bl_dev = { 535 + .name = "generic-bl", 536 + .id = 1, 537 + .dev = { 538 + .platform_data = &gta02_bl_info, 539 + }, 540 + }; 541 + 542 + 543 + 544 + /* USB */ 545 + static struct s3c2410_hcd_info gta02_usb_info = { 546 + .port[0] = { 547 + .flags = S3C_HCDFLG_USED, 548 + }, 549 + .port[1] = { 550 + .flags = 0, 551 + }, 552 + }; 553 + 554 + 555 + static void __init gta02_map_io(void) 556 + { 557 + s3c24xx_init_io(gta02_iodesc, ARRAY_SIZE(gta02_iodesc)); 558 + s3c24xx_init_clocks(12000000); 559 + s3c24xx_init_uarts(gta02_uartcfgs, ARRAY_SIZE(gta02_uartcfgs)); 560 + } 561 + 562 + 563 + /* These are the guys that don't need to be children of PMU. */ 564 + 565 + static struct platform_device *gta02_devices[] __initdata = { 566 + &s3c_device_usb, 567 + &s3c_device_wdt, 568 + &s3c_device_sdi, 569 + &s3c_device_usbgadget, 570 + &s3c_device_nand, 571 + &gta02_nor_flash, 572 + &s3c24xx_pwm_device, 573 + &s3c_device_iis, 574 + &s3c_device_i2c0, 575 + }; 576 + 577 + /* These guys DO need to be children of PMU. */ 578 + 579 + static struct platform_device *gta02_devices_pmu_children[] = { 580 + &gta02_bl_dev, 581 + }; 582 + 583 + 584 + /* 585 + * This is called when pc50633 is probed, quite late in the day since it is an 586 + * I2C bus device. Here we can define platform devices with the advantage that 587 + * we can mark the pcf50633 as the parent. This makes them get suspended and 588 + * resumed with their parent the pcf50633 still around. All devices whose 589 + * operation depends on something from pcf50633 must have this relationship 590 + * made explicit like this, or suspend and resume will become an unreliable 591 + * hellworld. 592 + */ 593 + 594 + static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf) 595 + { 596 + int n; 597 + 598 + /* Grab a copy of the now probed PMU pointer. */ 599 + gta02_pcf = pcf; 600 + 601 + for (n = 0; n < ARRAY_SIZE(gta02_devices_pmu_children); n++) 602 + gta02_devices_pmu_children[n]->dev.parent = pcf->dev; 603 + 604 + platform_add_devices(gta02_devices_pmu_children, 605 + ARRAY_SIZE(gta02_devices_pmu_children)); 606 + } 607 + 608 + static void gta02_poweroff(void) 609 + { 610 + pcf50633_reg_set_bit_mask(gta02_pcf, PCF50633_REG_OOCSHDWN, 1, 1); 611 + } 612 + 613 + static void __init gta02_machine_init(void) 614 + { 615 + /* Set the panic callback to make AUX LED blink at ~5Hz. */ 616 + panic_blink = gta02_panic_blink; 617 + 618 + s3c_pm_init(); 619 + 620 + #ifdef CONFIG_CHARGER_PCF50633 621 + INIT_DELAYED_WORK(&gta02_charger_work, gta02_charger_worker); 622 + #endif 623 + 624 + s3c_device_usb.dev.platform_data = &gta02_usb_info; 625 + s3c_device_nand.dev.platform_data = &gta02_nand_info; 626 + 627 + s3c24xx_udc_set_platdata(&gta02_udc_cfg); 628 + s3c_i2c0_set_platdata(NULL); 629 + 630 + i2c_register_board_info(0, gta02_i2c_devs, ARRAY_SIZE(gta02_i2c_devs)); 631 + 632 + platform_add_devices(gta02_devices, ARRAY_SIZE(gta02_devices)); 633 + pm_power_off = gta02_poweroff; 634 + } 635 + 636 + 637 + MACHINE_START(NEO1973_GTA02, "GTA02") 638 + /* Maintainer: Nelson Castillo <arhuaco@freaks-unidos.net> */ 639 + .phys_io = S3C2410_PA_UART, 640 + .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 641 + .boot_params = S3C2410_SDRAM_PA + 0x100, 642 + .map_io = gta02_map_io, 643 + .init_irq = s3c24xx_init_irq, 644 + .init_machine = gta02_machine_init, 645 + .timer = &s3c24xx_timer, 646 + MACHINE_END
+118 -19
arch/arm/mm/alignment.c
··· 62 62 #define SHIFT_ASR 0x40 63 63 #define SHIFT_RORRRX 0x60 64 64 65 + #define BAD_INSTR 0xdeadc0de 66 + 67 + /* Thumb-2 32 bit format per ARMv7 DDI0406A A6.3, either f800h,e800h,f800h */ 68 + #define IS_T32(hi16) \ 69 + (((hi16) & 0xe000) == 0xe000 && ((hi16) & 0x1800)) 70 + 65 71 static unsigned long ai_user; 66 72 static unsigned long ai_sys; 67 73 static unsigned long ai_skipped; ··· 338 332 struct pt_regs *regs) 339 333 { 340 334 unsigned int rd = RD_BITS(instr); 335 + unsigned int rd2; 336 + int load; 341 337 342 - if (((rd & 1) == 1) || (rd == 14)) 338 + if ((instr & 0xfe000000) == 0xe8000000) { 339 + /* ARMv7 Thumb-2 32-bit LDRD/STRD */ 340 + rd2 = (instr >> 8) & 0xf; 341 + load = !!(LDST_L_BIT(instr)); 342 + } else if (((rd & 1) == 1) || (rd == 14)) 343 343 goto bad; 344 + else { 345 + load = ((instr & 0xf0) == 0xd0); 346 + rd2 = rd + 1; 347 + } 344 348 345 349 ai_dword += 1; 346 350 347 351 if (user_mode(regs)) 348 352 goto user; 349 353 350 - if ((instr & 0xf0) == 0xd0) { 354 + if (load) { 351 355 unsigned long val; 352 356 get32_unaligned_check(val, addr); 353 357 regs->uregs[rd] = val; 354 358 get32_unaligned_check(val, addr + 4); 355 - regs->uregs[rd + 1] = val; 359 + regs->uregs[rd2] = val; 356 360 } else { 357 361 put32_unaligned_check(regs->uregs[rd], addr); 358 - put32_unaligned_check(regs->uregs[rd + 1], addr + 4); 362 + put32_unaligned_check(regs->uregs[rd2], addr + 4); 359 363 } 360 364 361 365 return TYPE_LDST; 362 366 363 367 user: 364 - if ((instr & 0xf0) == 0xd0) { 368 + if (load) { 365 369 unsigned long val; 366 370 get32t_unaligned_check(val, addr); 367 371 regs->uregs[rd] = val; 368 372 get32t_unaligned_check(val, addr + 4); 369 - regs->uregs[rd + 1] = val; 373 + regs->uregs[rd2] = val; 370 374 } else { 371 375 put32t_unaligned_check(regs->uregs[rd], addr); 372 - put32t_unaligned_check(regs->uregs[rd + 1], addr + 4); 376 + put32t_unaligned_check(regs->uregs[rd2], addr + 4); 373 377 } 374 378 375 379 return TYPE_LDST; ··· 632 616 /* Else fall through for illegal instruction case */ 633 617 634 618 default: 635 - return 0xdeadc0de; 619 + return BAD_INSTR; 636 620 } 621 + } 622 + 623 + /* 624 + * Convert Thumb-2 32 bit LDM, STM, LDRD, STRD to equivalent instruction 625 + * handlable by ARM alignment handler, also find the corresponding handler, 626 + * so that we can reuse ARM userland alignment fault fixups for Thumb. 627 + * 628 + * @pinstr: original Thumb-2 instruction; returns new handlable instruction 629 + * @regs: register context. 630 + * @poffset: return offset from faulted addr for later writeback 631 + * 632 + * NOTES: 633 + * 1. Comments below refer to ARMv7 DDI0406A Thumb Instruction sections. 634 + * 2. Register name Rt from ARMv7 is same as Rd from ARMv6 (Rd is Rt) 635 + */ 636 + static void * 637 + do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs, 638 + union offset_union *poffset) 639 + { 640 + unsigned long instr = *pinstr; 641 + u16 tinst1 = (instr >> 16) & 0xffff; 642 + u16 tinst2 = instr & 0xffff; 643 + poffset->un = 0; 644 + 645 + switch (tinst1 & 0xffe0) { 646 + /* A6.3.5 Load/Store multiple */ 647 + case 0xe880: /* STM/STMIA/STMEA,LDM/LDMIA, PUSH/POP T2 */ 648 + case 0xe8a0: /* ...above writeback version */ 649 + case 0xe900: /* STMDB/STMFD, LDMDB/LDMEA */ 650 + case 0xe920: /* ...above writeback version */ 651 + /* no need offset decision since handler calculates it */ 652 + return do_alignment_ldmstm; 653 + 654 + case 0xf840: /* POP/PUSH T3 (single register) */ 655 + if (RN_BITS(instr) == 13 && (tinst2 & 0x09ff) == 0x0904) { 656 + u32 L = !!(LDST_L_BIT(instr)); 657 + const u32 subset[2] = { 658 + 0xe92d0000, /* STMDB sp!,{registers} */ 659 + 0xe8bd0000, /* LDMIA sp!,{registers} */ 660 + }; 661 + *pinstr = subset[L] | (1<<RD_BITS(instr)); 662 + return do_alignment_ldmstm; 663 + } 664 + /* Else fall through for illegal instruction case */ 665 + break; 666 + 667 + /* A6.3.6 Load/store double, STRD/LDRD(immed, lit, reg) */ 668 + case 0xe860: 669 + case 0xe960: 670 + case 0xe8e0: 671 + case 0xe9e0: 672 + poffset->un = (tinst2 & 0xff) << 2; 673 + case 0xe940: 674 + case 0xe9c0: 675 + return do_alignment_ldrdstrd; 676 + 677 + /* 678 + * No need to handle load/store instructions up to word size 679 + * since ARMv6 and later CPUs can perform unaligned accesses. 680 + */ 681 + default: 682 + break; 683 + } 684 + return NULL; 637 685 } 638 686 639 687 static int ··· 710 630 mm_segment_t fs; 711 631 unsigned int fault; 712 632 u16 tinstr = 0; 633 + int isize = 4; 634 + int thumb2_32b = 0; 713 635 714 636 instrptr = instruction_pointer(regs); 715 637 ··· 719 637 set_fs(KERNEL_DS); 720 638 if (thumb_mode(regs)) { 721 639 fault = __get_user(tinstr, (u16 *)(instrptr & ~1)); 722 - if (!(fault)) 723 - instr = thumb2arm(tinstr); 640 + if (!fault) { 641 + if (cpu_architecture() >= CPU_ARCH_ARMv7 && 642 + IS_T32(tinstr)) { 643 + /* Thumb-2 32-bit */ 644 + u16 tinst2 = 0; 645 + fault = __get_user(tinst2, (u16 *)(instrptr+2)); 646 + instr = (tinstr << 16) | tinst2; 647 + thumb2_32b = 1; 648 + } else { 649 + isize = 2; 650 + instr = thumb2arm(tinstr); 651 + } 652 + } 724 653 } else 725 654 fault = __get_user(instr, (u32 *)instrptr); 726 655 set_fs(fs); ··· 748 655 749 656 fixup: 750 657 751 - regs->ARM_pc += thumb_mode(regs) ? 2 : 4; 658 + regs->ARM_pc += isize; 752 659 753 660 switch (CODING_BITS(instr)) { 754 661 case 0x00000000: /* 3.13.4 load/store instruction extensions */ ··· 807 714 handler = do_alignment_ldrstr; 808 715 break; 809 716 810 - case 0x08000000: /* ldm or stm */ 811 - handler = do_alignment_ldmstm; 717 + case 0x08000000: /* ldm or stm, or thumb-2 32bit instruction */ 718 + if (thumb2_32b) 719 + handler = do_alignment_t32_to_handler(&instr, regs, &offset); 720 + else 721 + handler = do_alignment_ldmstm; 812 722 break; 813 723 814 724 default: 815 725 goto bad; 816 726 } 817 727 728 + if (!handler) 729 + goto bad; 818 730 type = handler(addr, instr, regs); 819 731 820 - if (type == TYPE_ERROR || type == TYPE_FAULT) 732 + if (type == TYPE_ERROR || type == TYPE_FAULT) { 733 + regs->ARM_pc -= isize; 821 734 goto bad_or_fault; 735 + } 822 736 823 737 if (type == TYPE_LDST) 824 738 do_alignment_finish_ldst(addr, instr, regs, offset); ··· 835 735 bad_or_fault: 836 736 if (type == TYPE_ERROR) 837 737 goto bad; 838 - regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; 839 738 /* 840 739 * We got a fault - fix it up, or die. 841 740 */ ··· 850 751 */ 851 752 printk(KERN_ERR "Alignment trap: not handling instruction " 852 753 "%0*lx at [<%08lx>]\n", 853 - thumb_mode(regs) ? 4 : 8, 854 - thumb_mode(regs) ? tinstr : instr, instrptr); 754 + isize << 1, 755 + isize == 2 ? tinstr : instr, instrptr); 855 756 ai_skipped += 1; 856 757 return 1; 857 758 ··· 862 763 printk("Alignment trap: %s (%d) PC=0x%08lx Instr=0x%0*lx " 863 764 "Address=0x%08lx FSR 0x%03x\n", current->comm, 864 765 task_pid_nr(current), instrptr, 865 - thumb_mode(regs) ? 4 : 8, 866 - thumb_mode(regs) ? tinstr : instr, 766 + isize << 1, 767 + isize == 2 ? tinstr : instr, 867 768 addr, fsr); 868 769 869 770 if (ai_usermode & UM_FIXUP)
+7
arch/arm/mm/mmu.c
··· 836 836 BOOTMEM_EXCLUSIVE); 837 837 } 838 838 839 + if (machine_is_treo680()) { 840 + reserve_bootmem_node(pgdat, 0xa0000000, 0x1000, 841 + BOOTMEM_EXCLUSIVE); 842 + reserve_bootmem_node(pgdat, 0xa2000000, 0x1000, 843 + BOOTMEM_EXCLUSIVE); 844 + } 845 + 839 846 if (machine_is_palmt5()) 840 847 reserve_bootmem_node(pgdat, 0xa0200000, 0x1000, 841 848 BOOTMEM_EXCLUSIVE);
+4 -2
arch/arm/plat-omap/include/mach/sram.h
··· 24 24 extern u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, 25 25 u32 sdrc_actim_ctrla, 26 26 u32 sdrc_actim_ctrlb, u32 m2, 27 - u32 unlock_dll); 27 + u32 unlock_dll, u32 f, u32 sdrc_mr, 28 + u32 inc); 28 29 29 30 /* Do not use these */ 30 31 extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl); ··· 63 62 extern u32 omap3_sram_configure_core_dpll(u32 sdrc_rfr_ctrl, 64 63 u32 sdrc_actim_ctrla, 65 64 u32 sdrc_actim_ctrlb, u32 m2, 66 - u32 unlock_dll); 65 + u32 unlock_dll, u32 f, u32 sdrc_mr, 66 + u32 inc); 67 67 extern unsigned long omap3_sram_configure_core_dpll_sz; 68 68 69 69 #endif
+5 -3
arch/arm/plat-omap/sram.c
··· 371 371 static u32 (*_omap3_sram_configure_core_dpll)(u32 sdrc_rfr_ctrl, 372 372 u32 sdrc_actim_ctrla, 373 373 u32 sdrc_actim_ctrlb, 374 - u32 m2, u32 unlock_dll); 374 + u32 m2, u32 unlock_dll, 375 + u32 f, u32 sdrc_mr, u32 inc); 375 376 u32 omap3_configure_core_dpll(u32 sdrc_rfr_ctrl, u32 sdrc_actim_ctrla, 376 - u32 sdrc_actim_ctrlb, u32 m2, u32 unlock_dll) 377 + u32 sdrc_actim_ctrlb, u32 m2, u32 unlock_dll, 378 + u32 f, u32 sdrc_mr, u32 inc) 377 379 { 378 380 BUG_ON(!_omap3_sram_configure_core_dpll); 379 381 return _omap3_sram_configure_core_dpll(sdrc_rfr_ctrl, 380 382 sdrc_actim_ctrla, 381 383 sdrc_actim_ctrlb, m2, 382 - unlock_dll); 384 + unlock_dll, f, sdrc_mr, inc); 383 385 } 384 386 385 387 /* REVISIT: Should this be same as omap34xx_sram_init() after off-idle? */
+1
arch/arm/plat-s3c/Makefile
··· 34 34 obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmmc1.o 35 35 obj-y += dev-i2c0.o 36 36 obj-$(CONFIG_S3C_DEV_I2C1) += dev-i2c1.o 37 + obj-$(CONFIG_SND_S3C24XX_SOC) += dev-audio.o 37 38 obj-$(CONFIG_S3C_DEV_FB) += dev-fb.o 38 39 obj-$(CONFIG_S3C_DEV_USB_HOST) += dev-usb.o 39 40 obj-$(CONFIG_S3C_DEV_USB_HSOTG) += dev-usb-hsotg.o
+68
arch/arm/plat-s3c/dev-audio.c
··· 1 + /* linux/arch/arm/plat-s3c/dev-audio.c 2 + * 3 + * Copyright 2009 Wolfson Microelectronics 4 + * Mark Brown <broonie@opensource.wolfsonmicro.com> 5 + * 6 + 7 + * This program is free software; you can redistribute it and/or modify 8 + * it under the terms of the GNU General Public License version 2 as 9 + * published by the Free Software Foundation. 10 + */ 11 + 12 + #include <linux/kernel.h> 13 + #include <linux/string.h> 14 + #include <linux/platform_device.h> 15 + 16 + #include <mach/irqs.h> 17 + #include <mach/map.h> 18 + 19 + #include <plat/devs.h> 20 + 21 + 22 + static struct resource s3c64xx_iis0_resource[] = { 23 + [0] = { 24 + .start = S3C64XX_PA_IIS0, 25 + .end = S3C64XX_PA_IIS0 + 0x100 - 1, 26 + .flags = IORESOURCE_MEM, 27 + }, 28 + }; 29 + 30 + struct platform_device s3c64xx_device_iis0 = { 31 + .name = "s3c64xx-iis", 32 + .id = 0, 33 + .num_resources = ARRAY_SIZE(s3c64xx_iis0_resource), 34 + .resource = s3c64xx_iis0_resource, 35 + }; 36 + EXPORT_SYMBOL(s3c64xx_device_iis0); 37 + 38 + static struct resource s3c64xx_iis1_resource[] = { 39 + [0] = { 40 + .start = S3C64XX_PA_IIS1, 41 + .end = S3C64XX_PA_IIS1 + 0x100 - 1, 42 + .flags = IORESOURCE_MEM, 43 + }, 44 + }; 45 + 46 + struct platform_device s3c64xx_device_iis1 = { 47 + .name = "s3c64xx-iis", 48 + .id = 1, 49 + .num_resources = ARRAY_SIZE(s3c64xx_iis1_resource), 50 + .resource = s3c64xx_iis1_resource, 51 + }; 52 + EXPORT_SYMBOL(s3c64xx_device_iis1); 53 + 54 + static struct resource s3c64xx_iisv4_resource[] = { 55 + [0] = { 56 + .start = S3C64XX_PA_IISV4, 57 + .end = S3C64XX_PA_IISV4 + 0x100 - 1, 58 + .flags = IORESOURCE_MEM, 59 + }, 60 + }; 61 + 62 + struct platform_device s3c64xx_device_iisv4 = { 63 + .name = "s3c64xx-iis-v4", 64 + .id = -1, 65 + .num_resources = ARRAY_SIZE(s3c64xx_iisv4_resource), 66 + .resource = s3c64xx_iisv4_resource, 67 + }; 68 + EXPORT_SYMBOL(s3c64xx_device_iisv4);
+1 -1
arch/arm/plat-s3c/gpio-config.c
··· 119 119 unsigned int shift = (off & 7) * 4; 120 120 u32 con; 121 121 122 - if (off < 8 && chip->chip.ngpio >= 8) 122 + if (off < 8 && chip->chip.ngpio > 8) 123 123 reg -= 4; 124 124 125 125 if (s3c_gpio_is_cfg_special(cfg)) {
+4 -1
arch/arm/plat-s3c/include/plat/devs.h
··· 24 24 25 25 extern struct platform_device s3c_device_timer[]; 26 26 27 + extern struct platform_device s3c64xx_device_iis0; 28 + extern struct platform_device s3c64xx_device_iis1; 29 + extern struct platform_device s3c64xx_device_iisv4; 30 + 27 31 extern struct platform_device s3c_device_fb; 28 32 extern struct platform_device s3c_device_usb; 29 33 extern struct platform_device s3c_device_lcd; 30 34 extern struct platform_device s3c_device_wdt; 31 35 extern struct platform_device s3c_device_i2c0; 32 36 extern struct platform_device s3c_device_i2c1; 33 - extern struct platform_device s3c_device_iis; 34 37 extern struct platform_device s3c_device_rtc; 35 38 extern struct platform_device s3c_device_adc; 36 39 extern struct platform_device s3c_device_sdi;
+1
arch/arm/plat-s3c64xx/Makefile
··· 23 23 24 24 obj-$(CONFIG_CPU_S3C6400_INIT) += s3c6400-init.o 25 25 obj-$(CONFIG_CPU_S3C6400_CLOCK) += s3c6400-clock.o 26 + obj-$(CONFIG_CPU_FREQ_S3C64XX) += cpufreq.o 26 27 27 28 # PM support 28 29
+1 -1
arch/arm/plat-s3c64xx/clock.c
··· 191 191 .id = -1, 192 192 .parent = &clk_h, 193 193 .enable = s3c64xx_hclk_ctrl, 194 - .ctrlbit = S3C_CLKCON_SCLK_UHOST, 194 + .ctrlbit = S3C_CLKCON_HCLK_UHOST, 195 195 }, { 196 196 .name = "hsmmc", 197 197 .id = 0,
+262
arch/arm/plat-s3c64xx/cpufreq.c
··· 1 + /* linux/arch/arm/plat-s3c64xx/cpufreq.c 2 + * 3 + * Copyright 2009 Wolfson Microelectronics plc 4 + * 5 + * S3C64xx CPUfreq Support 6 + * 7 + * This program is free software; you can redistribute it and/or modify 8 + * it under the terms of the GNU General Public License version 2 as 9 + * published by the Free Software Foundation. 10 + */ 11 + 12 + #include <linux/kernel.h> 13 + #include <linux/types.h> 14 + #include <linux/init.h> 15 + #include <linux/cpufreq.h> 16 + #include <linux/clk.h> 17 + #include <linux/err.h> 18 + #include <linux/regulator/consumer.h> 19 + 20 + static struct clk *armclk; 21 + static struct regulator *vddarm; 22 + 23 + #ifdef CONFIG_CPU_S3C6410 24 + struct s3c64xx_dvfs { 25 + unsigned int vddarm_min; 26 + unsigned int vddarm_max; 27 + }; 28 + 29 + static struct s3c64xx_dvfs s3c64xx_dvfs_table[] = { 30 + [0] = { 1000000, 1000000 }, 31 + [1] = { 1000000, 1050000 }, 32 + [2] = { 1050000, 1100000 }, 33 + [3] = { 1050000, 1150000 }, 34 + [4] = { 1250000, 1350000 }, 35 + }; 36 + 37 + static struct cpufreq_frequency_table s3c64xx_freq_table[] = { 38 + { 0, 66000 }, 39 + { 0, 133000 }, 40 + { 1, 222000 }, 41 + { 1, 266000 }, 42 + { 2, 333000 }, 43 + { 2, 400000 }, 44 + { 3, 532000 }, 45 + { 3, 533000 }, 46 + { 4, 667000 }, 47 + { 0, CPUFREQ_TABLE_END }, 48 + }; 49 + #endif 50 + 51 + static int s3c64xx_cpufreq_verify_speed(struct cpufreq_policy *policy) 52 + { 53 + if (policy->cpu != 0) 54 + return -EINVAL; 55 + 56 + return cpufreq_frequency_table_verify(policy, s3c64xx_freq_table); 57 + } 58 + 59 + static unsigned int s3c64xx_cpufreq_get_speed(unsigned int cpu) 60 + { 61 + if (cpu != 0) 62 + return 0; 63 + 64 + return clk_get_rate(armclk) / 1000; 65 + } 66 + 67 + static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy, 68 + unsigned int target_freq, 69 + unsigned int relation) 70 + { 71 + int ret; 72 + unsigned int i; 73 + struct cpufreq_freqs freqs; 74 + struct s3c64xx_dvfs *dvfs; 75 + 76 + ret = cpufreq_frequency_table_target(policy, s3c64xx_freq_table, 77 + target_freq, relation, &i); 78 + if (ret != 0) 79 + return ret; 80 + 81 + freqs.cpu = 0; 82 + freqs.old = clk_get_rate(armclk) / 1000; 83 + freqs.new = s3c64xx_freq_table[i].frequency; 84 + freqs.flags = 0; 85 + dvfs = &s3c64xx_dvfs_table[s3c64xx_freq_table[i].index]; 86 + 87 + if (freqs.old == freqs.new) 88 + return 0; 89 + 90 + pr_debug("cpufreq: Transition %d-%dkHz\n", freqs.old, freqs.new); 91 + 92 + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); 93 + 94 + #ifdef CONFIG_REGULATOR 95 + if (vddarm && freqs.new > freqs.old) { 96 + ret = regulator_set_voltage(vddarm, 97 + dvfs->vddarm_min, 98 + dvfs->vddarm_max); 99 + if (ret != 0) { 100 + pr_err("cpufreq: Failed to set VDDARM for %dkHz: %d\n", 101 + freqs.new, ret); 102 + goto err; 103 + } 104 + } 105 + #endif 106 + 107 + ret = clk_set_rate(armclk, freqs.new * 1000); 108 + if (ret < 0) { 109 + pr_err("cpufreq: Failed to set rate %dkHz: %d\n", 110 + freqs.new, ret); 111 + goto err; 112 + } 113 + 114 + #ifdef CONFIG_REGULATOR 115 + if (vddarm && freqs.new < freqs.old) { 116 + ret = regulator_set_voltage(vddarm, 117 + dvfs->vddarm_min, 118 + dvfs->vddarm_max); 119 + if (ret != 0) { 120 + pr_err("cpufreq: Failed to set VDDARM for %dkHz: %d\n", 121 + freqs.new, ret); 122 + goto err_clk; 123 + } 124 + } 125 + #endif 126 + 127 + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); 128 + 129 + pr_debug("cpufreq: Set actual frequency %lukHz\n", 130 + clk_get_rate(armclk) / 1000); 131 + 132 + return 0; 133 + 134 + err_clk: 135 + if (clk_set_rate(armclk, freqs.old * 1000) < 0) 136 + pr_err("Failed to restore original clock rate\n"); 137 + err: 138 + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); 139 + 140 + return ret; 141 + } 142 + 143 + #ifdef CONFIG_REGULATOR 144 + static void __init s3c64xx_cpufreq_constrain_voltages(void) 145 + { 146 + int count, v, i, found; 147 + struct cpufreq_frequency_table *freq; 148 + struct s3c64xx_dvfs *dvfs; 149 + 150 + count = regulator_count_voltages(vddarm); 151 + if (count < 0) { 152 + pr_err("cpufreq: Unable to check supported voltages\n"); 153 + return; 154 + } 155 + 156 + freq = s3c64xx_freq_table; 157 + while (freq->frequency != CPUFREQ_TABLE_END) { 158 + if (freq->frequency == CPUFREQ_ENTRY_INVALID) 159 + continue; 160 + 161 + dvfs = &s3c64xx_dvfs_table[freq->index]; 162 + found = 0; 163 + 164 + for (i = 0; i < count; i++) { 165 + v = regulator_list_voltage(vddarm, i); 166 + if (v >= dvfs->vddarm_min && v <= dvfs->vddarm_max) 167 + found = 1; 168 + } 169 + 170 + if (!found) { 171 + pr_debug("cpufreq: %dkHz unsupported by regulator\n", 172 + freq->frequency); 173 + freq->frequency = CPUFREQ_ENTRY_INVALID; 174 + } 175 + 176 + freq++; 177 + } 178 + } 179 + #endif 180 + 181 + static int __init s3c64xx_cpufreq_driver_init(struct cpufreq_policy *policy) 182 + { 183 + int ret; 184 + struct cpufreq_frequency_table *freq; 185 + 186 + if (policy->cpu != 0) 187 + return -EINVAL; 188 + 189 + if (s3c64xx_freq_table == NULL) { 190 + pr_err("cpufreq: No frequency information for this CPU\n"); 191 + return -ENODEV; 192 + } 193 + 194 + armclk = clk_get(NULL, "armclk"); 195 + if (IS_ERR(armclk)) { 196 + pr_err("cpufreq: Unable to obtain ARMCLK: %ld\n", 197 + PTR_ERR(armclk)); 198 + return PTR_ERR(armclk); 199 + } 200 + 201 + #ifdef CONFIG_REGULATOR 202 + vddarm = regulator_get(NULL, "vddarm"); 203 + if (IS_ERR(vddarm)) { 204 + ret = PTR_ERR(vddarm); 205 + pr_err("cpufreq: Failed to obtain VDDARM: %d\n", ret); 206 + pr_err("cpufreq: Only frequency scaling available\n"); 207 + vddarm = NULL; 208 + } else { 209 + s3c64xx_cpufreq_constrain_voltages(); 210 + } 211 + #endif 212 + 213 + freq = s3c64xx_freq_table; 214 + while (freq->frequency != CPUFREQ_TABLE_END) { 215 + unsigned long r; 216 + 217 + /* Check for frequencies we can generate */ 218 + r = clk_round_rate(armclk, freq->frequency * 1000); 219 + r /= 1000; 220 + if (r != freq->frequency) 221 + freq->frequency = CPUFREQ_ENTRY_INVALID; 222 + 223 + /* If we have no regulator then assume startup 224 + * frequency is the maximum we can support. */ 225 + if (!vddarm && freq->frequency > s3c64xx_cpufreq_get_speed(0)) 226 + freq->frequency = CPUFREQ_ENTRY_INVALID; 227 + 228 + freq++; 229 + } 230 + 231 + policy->cur = clk_get_rate(armclk) / 1000; 232 + 233 + /* Pick a conservative guess in ns: we'll need ~1 I2C/SPI 234 + * write plus clock reprogramming. */ 235 + policy->cpuinfo.transition_latency = 2 * 1000 * 1000; 236 + 237 + ret = cpufreq_frequency_table_cpuinfo(policy, s3c64xx_freq_table); 238 + if (ret != 0) { 239 + pr_err("cpufreq: Failed to configure frequency table: %d\n", 240 + ret); 241 + regulator_put(vddarm); 242 + clk_put(armclk); 243 + } 244 + 245 + return ret; 246 + } 247 + 248 + static struct cpufreq_driver s3c64xx_cpufreq_driver = { 249 + .owner = THIS_MODULE, 250 + .flags = 0, 251 + .verify = s3c64xx_cpufreq_verify_speed, 252 + .target = s3c64xx_cpufreq_set_target, 253 + .get = s3c64xx_cpufreq_get_speed, 254 + .init = s3c64xx_cpufreq_driver_init, 255 + .name = "s3c", 256 + }; 257 + 258 + static int __init s3c64xx_cpufreq_init(void) 259 + { 260 + return cpufreq_register_driver(&s3c64xx_cpufreq_driver); 261 + } 262 + module_init(s3c64xx_cpufreq_init);
+6
arch/arm/plat-s3c64xx/gpiolib.c
··· 321 321 .get_pull = s3c_gpio_getpull_updown, 322 322 }; 323 323 324 + int s3c64xx_gpio2int_gpn(struct gpio_chip *chip, unsigned pin) 325 + { 326 + return IRQ_EINT(0) + pin; 327 + } 328 + 324 329 static struct s3c_gpio_chip gpio_2bit[] = { 325 330 { 326 331 .base = S3C64XX_GPF_BASE, ··· 358 353 .base = S3C64XX_GPN(0), 359 354 .ngpio = S3C64XX_GPIO_N_NR, 360 355 .label = "GPN", 356 + .to_irq = s3c64xx_gpio2int_gpn, 361 357 }, 362 358 }, { 363 359 .base = S3C64XX_GPO_BASE,
+5 -5
arch/arm/plat-s3c64xx/include/plat/regs-clock.h
··· 88 88 #define S3C6400_CLKDIV2_SPI0_SHIFT (0) 89 89 90 90 /* HCLK GATE Registers */ 91 - #define S3C_CLKCON_HCLK_BUS (1<<30) 92 - #define S3C_CLKCON_HCLK_SECUR (1<<29) 93 - #define S3C_CLKCON_HCLK_SDMA1 (1<<28) 94 - #define S3C_CLKCON_HCLK_SDMA2 (1<<27) 95 - #define S3C_CLKCON_HCLK_UHOST (1<<26) 91 + #define S3C_CLKCON_HCLK_3DSE (1<<31) 92 + #define S3C_CLKCON_HCLK_UHOST (1<<29) 93 + #define S3C_CLKCON_HCLK_SECUR (1<<28) 94 + #define S3C_CLKCON_HCLK_SDMA1 (1<<27) 95 + #define S3C_CLKCON_HCLK_SDMA0 (1<<26) 96 96 #define S3C_CLKCON_HCLK_IROM (1<<25) 97 97 #define S3C_CLKCON_HCLK_DDR1 (1<<24) 98 98 #define S3C_CLKCON_HCLK_DDR0 (1<<23)
+37 -2
arch/arm/tools/mach-types
··· 12 12 # 13 13 # http://www.arm.linux.org.uk/developer/machines/?action=new 14 14 # 15 - # Last update: Fri May 29 10:14:20 2009 15 + # Last update: Sat Jun 20 22:28:39 2009 16 16 # 17 17 # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number 18 18 # ··· 1455 1455 h6044 MACH_H6044 H6044 1458 1456 1456 app MACH_APP APP 1459 1457 1457 tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460 1458 - herald MACH_HERMES HERMES 1461 1458 + herald MACH_HERALD HERALD 1461 1459 1459 artemis MACH_ARTEMIS ARTEMIS 1462 1460 1460 htctitan MACH_HTCTITAN HTCTITAN 1463 1461 1461 qranium MACH_QRANIUM QRANIUM 1464 ··· 2245 2245 omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 2246 2246 simcom MACH_SIMCOM SIMCOM 2259 2247 2247 mcwebio MACH_MCWEBIO MCWEBIO 2260 2248 + omap3_phrazer MACH_OMAP3_PHRAZER OMAP3_PHRAZER 2261 2249 + darwin MACH_DARWIN DARWIN 2262 2250 + oratiscomu MACH_ORATISCOMU ORATISCOMU 2263 2251 + rtsbc20 MACH_RTSBC20 RTSBC20 2264 2252 + i780 MACH_I780 I780 2265 2253 + gemini324 MACH_GEMINI324 GEMINI324 2266 2254 + oratislan MACH_ORATISLAN ORATISLAN 2267 2255 + oratisalog MACH_ORATISALOG ORATISALOG 2268 2256 + oratismadi MACH_ORATISMADI ORATISMADI 2269 2257 + oratisot16 MACH_ORATISOT16 ORATISOT16 2270 2258 + oratisdesk MACH_ORATISDESK ORATISDESK 2271 2259 + v2p_ca9 MACH_V2P_CA9 V2P_CA9 2272 2260 + sintexo MACH_SINTEXO SINTEXO 2273 2261 + cm3389 MACH_CM3389 CM3389 2274 2262 + omap3_cio MACH_OMAP3_CIO OMAP3_CIO 2275 2263 + sgh_i900 MACH_SGH_I900 SGH_I900 2276 2264 + bst100 MACH_BST100 BST100 2277 2265 + passion MACH_PASSION PASSION 2278 2266 + indesign_at91sam MACH_INDESIGN_AT91SAM INDESIGN_AT91SAM 2279 2267 + c4_badger MACH_C4_BADGER C4_BADGER 2280 2268 + c4_viper MACH_C4_VIPER C4_VIPER 2281 2269 + d2net MACH_D2NET D2NET 2282 2270 + bigdisk MACH_BIGDISK BIGDISK 2283 2271 + notalvision MACH_NOTALVISION NOTALVISION 2284 2272 + omap3_kboc MACH_OMAP3_KBOC OMAP3_KBOC 2285 2273 + cyclone MACH_CYCLONE CYCLONE 2286 2274 + ninja MACH_NINJA NINJA 2287 2275 + at91sam9g20ek_2mmc MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC 2288 2276 + bcmring MACH_BCMRING BCMRING 2289 2277 + resol_dl2 MACH_RESOL_DL2 RESOL_DL2 2290 2278 + ifosw MACH_IFOSW IFOSW 2291 2279 + htcrhodium MACH_HTCRHODIUM HTCRHODIUM 2292 2280 + htctopaz MACH_HTCTOPAZ HTCTOPAZ 2293 2281 + matrix504 MACH_MATRIX504 MATRIX504 2294 2282 + mrfsa MACH_MRFSA MRFSA 2295
-36
sound/soc/pxa/corgi.c
··· 320 320 .codec_dev = &soc_codec_dev_wm8731, 321 321 }; 322 322 323 - /* 324 - * FIXME: This is a temporary bodge to avoid cross-tree merge issues. 325 - * New drivers should register the wm8731 I2C device in the machine 326 - * setup code (under arch/arm for ARM systems). 327 - */ 328 - static int wm8731_i2c_register(void) 329 - { 330 - struct i2c_board_info info; 331 - struct i2c_adapter *adapter; 332 - struct i2c_client *client; 333 - 334 - memset(&info, 0, sizeof(struct i2c_board_info)); 335 - info.addr = 0x1b; 336 - strlcpy(info.type, "wm8731", I2C_NAME_SIZE); 337 - 338 - adapter = i2c_get_adapter(0); 339 - if (!adapter) { 340 - printk(KERN_ERR "can't get i2c adapter 0\n"); 341 - return -ENODEV; 342 - } 343 - 344 - client = i2c_new_device(adapter, &info); 345 - i2c_put_adapter(adapter); 346 - if (!client) { 347 - printk(KERN_ERR "can't add i2c device at 0x%x\n", 348 - (unsigned int)info.addr); 349 - return -ENODEV; 350 - } 351 - 352 - return 0; 353 - } 354 - 355 323 static struct platform_device *corgi_snd_device; 356 324 357 325 static int __init corgi_init(void) ··· 329 361 if (!(machine_is_corgi() || machine_is_shepherd() || 330 362 machine_is_husky())) 331 363 return -ENODEV; 332 - 333 - ret = wm8731_i2c_register(); 334 - if (ret != 0) 335 - return ret; 336 364 337 365 corgi_snd_device = platform_device_alloc("soc-audio", -1); 338 366 if (!corgi_snd_device)
-36
sound/soc/pxa/poodle.c
··· 280 280 .num_links = 1, 281 281 }; 282 282 283 - /* 284 - * FIXME: This is a temporary bodge to avoid cross-tree merge issues. 285 - * New drivers should register the wm8731 I2C device in the machine 286 - * setup code (under arch/arm for ARM systems). 287 - */ 288 - static int wm8731_i2c_register(void) 289 - { 290 - struct i2c_board_info info; 291 - struct i2c_adapter *adapter; 292 - struct i2c_client *client; 293 - 294 - memset(&info, 0, sizeof(struct i2c_board_info)); 295 - info.addr = 0x1b; 296 - strlcpy(info.type, "wm8731", I2C_NAME_SIZE); 297 - 298 - adapter = i2c_get_adapter(0); 299 - if (!adapter) { 300 - printk(KERN_ERR "can't get i2c adapter 0\n"); 301 - return -ENODEV; 302 - } 303 - 304 - client = i2c_new_device(adapter, &info); 305 - i2c_put_adapter(adapter); 306 - if (!client) { 307 - printk(KERN_ERR "can't add i2c device at 0x%x\n", 308 - (unsigned int)info.addr); 309 - return -ENODEV; 310 - } 311 - 312 - return 0; 313 - } 314 - 315 283 /* poodle audio subsystem */ 316 284 static struct snd_soc_device poodle_snd_devdata = { 317 285 .card = &snd_soc_poodle, ··· 294 326 295 327 if (!machine_is_poodle()) 296 328 return -ENODEV; 297 - 298 - ret = wm8731_i2c_register(); 299 - if (ret != 0) 300 - return ret; 301 329 302 330 locomo_gpio_set_dir(&poodle_locomo_device.dev, 303 331 POODLE_LOCOMO_GPIO_AMP_ON, 0);