Index: arch/arm/Kconfig.debug =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/Kconfig.debug,v retrieving revision 1.1.1.1.2.1 diff -u -3 -b -r1.1.1.1.2.1 Kconfig.debug --- arch/arm/Kconfig.debug 1 Oct 2005 15:03:25 -0000 1.1.1.1.2.1 +++ arch/arm/Kconfig.debug 11 Nov 2005 15:52:28 -0000 @@ -106,12 +106,31 @@ The uncompressor code port configuration is now handled by CONFIG_S3C2410_LOWLEVEL_UART_PORT. +choice + prompt "Kernel low-level debugging via" + depends on DEBUG_LL && ARCH_PXA + default DEBUG_PXA_FFUART + +config DEBUG_PXA_FFUART + bool "Full-Featured UART" + depends on DEBUG_LL && ARCH_PXA + help + Saying Y will cause the debug messages to appear on the full featured UART. + config DEBUG_PXA_STUART - bool "Kernel low-level debugging messages via Standard UART" + bool "Standard UART" depends on DEBUG_LL && ARCH_PXA help Say Y here if you want the debug print routines to direct their - output to the standard serial UART on these devices. Saying N will - cause the debug messages to appear on the full featured UART. + output to the standard serial UART on these devices. + +config DEBUG_PXA_BTUART + bool "BT UART" + depends on DEBUG_LL && ARCH_PXA + help + Say Y here if you want the debug print routines to direct their + output to the BTUART on these devices. + +endchoice endmenu Index: arch/arm/configs/himalaya_defconfig =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/configs/Attic/himalaya_defconfig,v retrieving revision 1.1.1.1 diff -u -3 -b -r1.1.1.1 himalaya_defconfig --- arch/arm/configs/himalaya_defconfig 1 Oct 2005 13:49:15 -0000 1.1.1.1 +++ arch/arm/configs/himalaya_defconfig 11 Nov 2005 15:52:28 -0000 @@ -1,10 +1,14 @@ # # Automatically generated make config: don't edit +# Linux kernel version: 2.6.12-hh2 +# Tue Nov 1 18:44:36 2005 # CONFIG_ARM=y CONFIG_MMU=y CONFIG_UID16=y CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_IOMAP=y # # Code maturity level options @@ -12,10 +16,12 @@ CONFIG_EXPERIMENTAL=y CONFIG_CLEAN_COMPILE=y CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 # # General setup # +CONFIG_LOCALVERSION="" CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y @@ -23,21 +29,30 @@ # CONFIG_BSD_PROCESS_ACCT_V3 is not set CONFIG_SYSCTL=y # CONFIG_AUDIT is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_HOTPLUG is not set +CONFIG_HOTPLUG=y +CONFIG_KOBJECT_UEVENT=y CONFIG_IKCONFIG=y # CONFIG_MINIMAL_OOPS is not set CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_EPOLL=y -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SHMEM=y +CONFIG_USELIB=y +CONFIG_CORE_DUMP=y +CONFIG_CC_ALIGN_FUNCTIONS=0 +CONFIG_CC_ALIGN_LABELS=0 +CONFIG_CC_ALIGN_LOOPS=0 +CONFIG_CC_ALIGN_JUMPS=0 +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 # # Loadable module support @@ -47,6 +62,7 @@ CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_OBSOLETE_MODPARM=y # CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set CONFIG_KMOD=y # @@ -61,6 +77,7 @@ # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_IOP3XX is not set # CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set # CONFIG_ARCH_L7200 is not set CONFIG_ARCH_PXA=y # CONFIG_ARCH_RPC is not set @@ -69,7 +86,9 @@ # CONFIG_ARCH_SHARK is not set # CONFIG_ARCH_LH7A40X is not set # CONFIG_ARCH_OMAP is not set -# CONFIG_ARCH_VERSATILE_PB is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_H720X is not set # # Intel PXA2xx Implementations @@ -79,25 +98,29 @@ # CONFIG_ARCH_LUBBOCK is not set # CONFIG_MACH_MAINSTONE is not set # CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_KEYS is not set # CONFIG_ARCH_ESERIES is not set # CONFIG_MACH_A620 is not set -# CONFIG_ARCH_H1900 is not set # CONFIG_ARCH_H2200 is not set # CONFIG_ARCH_H3900 is not set # CONFIG_MACH_H4000 is not set +# CONFIG_MACH_H4700 is not set +# CONFIG_MACH_HX2750 is not set # CONFIG_ARCH_H5400 is not set CONFIG_MACH_HIMALAYA=y -CONFIG_HIMALAYA_USB=y -CONFIG_PXA_NSSP=m +# CONFIG_HIMALAYA_USB is not set CONFIG_HIMALAYA_INPUT=m CONFIG_HIMALAYA_TS=m -# CONFIG_HIMALAYA_TSKEY is not set +CONFIG_HIMALAYA_KP=m +CONFIG_TSC2200=m CONFIG_HIMALAYA_LEDS=m -CONFIG_TEST=m +# CONFIG_MACH_BLUEANGEL is not set # CONFIG_ARCH_AXIMX5 is not set # CONFIG_ARCH_AXIMX3 is not set +# CONFIG_MACH_X30 is not set # CONFIG_ARCH_ROVERP1 is not set # CONFIG_ARCH_ROVERP5P is not set +# CONFIG_PXA_SHARPSL is not set # # Linux As Bootloader @@ -112,8 +135,8 @@ CONFIG_CPU_XSCALE_PXA250=y CONFIG_CPU_32v5=y CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_MINICACHE=y # # Processor Features @@ -123,54 +146,85 @@ CONFIG_XSCALE_PMU=y # -# Compaq/iPAQ Options +# Compaq/iPAQ Platforms # CONFIG_PXA_IPAQ=y # # XScale-based iPAQ # -CONFIG_IPAQ_HANDHELD=y -# CONFIG_IPAQ_SLEEVE is not set -# CONFIG_IPAQ_ASIC2 is not set -CONFIG_IPAQ_ASIC3=y -# CONFIG_IPAQ_SAMCOP is not set +# CONFIG_IPAQ_HANDHELD is not set # -# General setup +# Compaq/iPAQ Drivers +# + +# +# Compaq/HP iPAQ Drivers +# + +# +# Bus support +# +CONFIG_ISA_DMA_API=y + # -# CONFIG_ZBOOT_ROM is not set -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -CONFIG_CPU_FREQ=y +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_SMP is not set +# CONFIG_PREEMPT is not set +# CONFIG_DISCONTIGMEM is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set # -# At least one math emulation must be selected +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats # -# CONFIG_FPE_NWFPE is not set -CONFIG_FPE_FASTFPE=y -# CONFIG_VFP is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_MISC=m +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set # -# Generic Driver Options +# Power management options # -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -# CONFIG_SOC_DEVICE is not set CONFIG_PM=y -CONFIG_PREEMPT=y CONFIG_APM=y -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="" -CONFIG_ALIGNMENT_TRAP=y # -# Parallel port support +# Device Drivers # -# CONFIG_PARPORT is not set + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set +CONFIG_DEBUG_DRIVER=y # # Memory Technology Devices (MTD) @@ -178,9 +232,9 @@ # CONFIG_MTD is not set # -# MMC/SD Card support +# Parallel port support # -# CONFIG_MMC is not set +# CONFIG_PARPORT is not set # # Plug and Play support @@ -189,12 +243,34 @@ # # Block devices # -# CONFIG_BLK_DEV_FD is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CDROM_PKTCDVD is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_SCSI is not set # # Multi-device support (RAID and LVM) @@ -202,6 +278,18 @@ # CONFIG_MD is not set # +# Fusion MPT device support +# + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# # Networking support # CONFIG_NET=y @@ -211,16 +299,12 @@ # CONFIG_PACKET=y CONFIG_PACKET_MMAP=y -# CONFIG_NETLINK_DEV is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set +# CONFIG_IP_PNP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_ARPD is not set @@ -228,6 +312,9 @@ # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_IP_TCPDIAG=y +# CONFIG_IP_TCPDIAG_IPV6 is not set # CONFIG_IPV6 is not set # CONFIG_NETFILTER is not set @@ -247,7 +334,6 @@ # CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set -# CONFIG_NET_HW_FLOWCONTROL is not set # # QoS and/or fair queueing @@ -305,28 +391,6 @@ # CONFIG_NETCONSOLE is not set # -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_SCSI is not set - -# -# Fusion MPT device support -# - -# -# IEEE 1394 (FireWire) support -# - -# -# I2O device support -# - -# # ISDN subsystem # # CONFIG_ISDN is not set @@ -347,34 +411,29 @@ CONFIG_INPUT_TSDEV=m CONFIG_INPUT_TSDEV_SCREEN_X=240 CONFIG_INPUT_TSDEV_SCREEN_Y=320 -# CONFIG_INPUT_TSLIBDEV is not set CONFIG_INPUT_EVDEV=m CONFIG_INPUT_EVBUG=m # -# Input I/O drivers -# -# CONFIG_GAMEPORT is not set -CONFIG_SOUND_GAMEPORT=y -# CONFIG_SERIO is not set -# CONFIG_SERIO_I8042 is not set - -# # Input Device Drivers # -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set # CONFIG_INPUT_MISC is not set # +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# # Character devices # CONFIG_VT=y @@ -391,7 +450,11 @@ # Non-8250 serial port support # # CONFIG_SERIAL_DZ is not set -# CONFIG_SERIAL_PXA is not set +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_PXA_COUNT=4 +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 @@ -410,7 +473,6 @@ # Mice # # CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set # # IPMI @@ -422,18 +484,42 @@ # # CONFIG_WATCHDOG is not set # CONFIG_NVRAM is not set -CONFIG_RTC=y +CONFIG_SA1100_RTC=y # CONFIG_DTLK is not set # CONFIG_R3964 is not set # # Ftape, the floppy tape device driver # -# CONFIG_AGP is not set # CONFIG_DRM is not set # CONFIG_RAW_DRIVER is not set # +# TPM devices +# + +# +# SoC drivers +# +# CONFIG_SOC_MQ11XX is not set +# CONFIG_SOC_T7L66XB is not set +# CONFIG_SOC_TC6387XB is not set +# CONFIG_SOC_TC6393XB is not set +# CONFIG_HTC_ASIC2 is not set +CONFIG_HTC_ASIC3=y +# CONFIG_SOC_TSC2101 is not set + +# +# Misc devices +# +# CONFIG_BATTERY_MONITOR is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -444,17 +530,89 @@ # CONFIG_DVB is not set # +# Graphics support +# +CONFIG_FB=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SOFT_CURSOR=y +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_IMAGEON is not set +# CONFIG_FB_PXA is not set +CONFIG_FB_W100=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE is not set + +# +# Logo configuration +# +# CONFIG_LOGO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DEVICE=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_DEVICE=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# LED devices +# +CONFIG_CLASS_LEDS=m + +# # File systems # -# CONFIG_EXT2_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set # CONFIG_EXT3_FS is not set # CONFIG_JBD is not set # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set + +# +# XFS support +# # CONFIG_XFS_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_ROMFS_FS is not set # CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set @@ -481,6 +639,7 @@ # CONFIG_DEVFS_DEBUG is not set # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y +# CONFIG_TMPFS_XATTR is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y @@ -495,6 +654,7 @@ # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +# CONFIG_JFFS3_COMPRESSION_OPTIONS is not set # CONFIG_CRAMFS is not set # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set @@ -505,17 +665,8 @@ # # Network File Systems # -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V4 is not set -# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFS_FS is not set # CONFIG_NFSD is not set -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_EXPORTFS is not set -CONFIG_SUNRPC=y -# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -526,6 +677,7 @@ # Partition Types # # CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y # # Native Language Support @@ -538,92 +690,30 @@ # CONFIG_PROFILING is not set # -# Graphics support -# -CONFIG_FB=y -CONFIG_FB_MODES=y -CONFIG_LCD_CLASS_DEVICE=y -CONFIG_LCD_DEVICE=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_DEVICE=y -# CONFIG_FB_HIMALAYA is not set -CONFIG_FB_VSFB=y -# CONFIG_FB_PXA is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -CONFIG_FONT_MINI_4x6=y -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set - -# -# Logo configuration -# -# CONFIG_LOGO is not set - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# Misc devices -# - -# -# SoC drivers -# -CONFIG_BATTERY_MONITOR=m - -# -# USB support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_NET2280 is not set -CONFIG_USB_GADGET_PXA2XX=y -CONFIG_USB_PXA2XX=y -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_SA1100 is not set -# CONFIG_USB_GADGET_MQ11XX is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -# CONFIG_USB_ETH_RNDIS is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_G_CHAR is not set - -# # Kernel hacking # -# CONFIG_FRAME_POINTER is not set +# CONFIG_PRINTK_TIME is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_SCHEDSTATS is not set +CONFIG_DEBUG_SLAB=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +CONFIG_DEBUG_KOBJECT=y +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_FS is not set +CONFIG_FRAME_POINTER=y # CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_LL_PXA_JTAG is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set # # Security options # +# CONFIG_KEYS is not set # CONFIG_SECURITY is not set # @@ -632,6 +722,10 @@ # CONFIG_CRYPTO is not set # +# Hardware crypto devices +# + +# # Library routines # # CONFIG_CRC_CCITT is not set Index: arch/arm/mach-pxa/Makefile =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/mach-pxa/Makefile,v retrieving revision 1.1.1.4.2.1 diff -u -3 -b -r1.1.1.4.2.1 Makefile --- arch/arm/mach-pxa/Makefile 1 Oct 2005 15:03:26 -0000 1.1.1.4.2.1 +++ arch/arm/mach-pxa/Makefile 11 Nov 2005 15:52:28 -0000 @@ -24,6 +24,7 @@ obj-$(CONFIG_MACH_HIMALAYA) += himalaya/ obj-$(CONFIG_MACH_BLUEANGEL) += himalaya/ obj-m += ssp.o +obj-$(CONFIG_HIMALAYA_INPUT) += ssp.o obj-$(CONFIG_MACH_BLUEANGEL) += blueangel/ obj-y += axim/ obj-y += aximx30/ Index: arch/arm/mach-pxa/himalaya/himalaya.c =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/mach-pxa/himalaya/himalaya.c,v retrieving revision 1.1.1.1 diff -u -3 -b -r1.1.1.1 himalaya.c --- arch/arm/mach-pxa/himalaya/himalaya.c 1 Oct 2005 13:49:23 -0000 1.1.1.1 +++ arch/arm/mach-pxa/himalaya/himalaya.c 11 Nov 2005 15:52:29 -0000 @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -52,6 +53,8 @@ #include #include "../drivers/serial/pxa-serial.h" +struct ipaq_model_ops ipaq_model_ops; +EXPORT_SYMBOL(ipaq_model_ops); extern struct platform_device h3900_asic3; struct platform_pxa_serial_funcs pxa_serial_funcs [] = { @@ -72,6 +75,7 @@ .generic_name = "himalaya", }; +#if 0 static irqreturn_t himalaya_rs232_irq(int irq, void *dev_id, struct pt_regs *regs) { int connected = 0; @@ -100,14 +104,17 @@ handler: himalaya_rs232_irq, flags: SA_INTERRUPT }; +#endif static void __init himalaya_init_irq( void ) { /* Initialize standard IRQs */ pxa_init_irq(); +#if 0 setup_irq (IRQ_NR_HIMALAYA_RS232_IN, &himalaya_rs232_irqaction); set_irq_type (IRQ_NR_HIMALAYA_RS232_IN, IRQT_BOTHEDGE); +#endif } static void ser_ffuart_gpio_config(int mode) @@ -244,8 +251,8 @@ static struct map_desc himalaya_io_desc[] __initdata = { /* virtual physical length domain */ { 0xf5000000, 0x08000000, 0x00020000, MT_DEVICE}, /* ATI chip */ - { H3900_ASIC3_VIRT, HIMALAYA_ASIC3_PHYS, 0x02000000, MT_DEVICE}, /* static memory bank 3 CS#3 */ #if 0 + { H3900_ASIC3_VIRT, HIMALAYA_ASIC3_PHYS, 0x02000000, MT_DEVICE}, /* static memory bank 3 CS#3 */ { 0xfb000000, 0x41000000, 0x01000000, MT_DEVICE}, /* SPI interface? */ #endif }; @@ -265,6 +272,7 @@ PGSR2 = GPSRz_SleepValue; #endif +#if 0 GAFR0_L = 0x98000000; GAFR0_U = 0x494A8110; GAFR1_L = 0x699A8159; @@ -297,14 +305,19 @@ GFER0 = 0x00000000; GFER1 = 0x00000000; GFER2 = 0x00000000; +#endif #if 1 +#if 0 /* power up the UARTs which likely got switched off, above */ GPDR(GPIO_NR_HIMALAYA_UART_POWER) |= GPIO_bit(GPIO_NR_HIMALAYA_UART_POWER); GPSR(GPIO_NR_HIMALAYA_UART_POWER) = GPIO_bit(GPIO_NR_HIMALAYA_UART_POWER); +#endif pxa_serial_funcs[2].configure = ser_stuart_gpio_config; pxa_serial_funcs[0].configure = ser_ffuart_gpio_config; + stuart_device.dev.platform_data = &pxa_serial_funcs[2]; + ffuart_device.dev.platform_data = &pxa_serial_funcs[0]; /* guess about the STUART and FFUART being 22 power! GPDR(22) |= GPIO_bit(22); @@ -336,16 +349,16 @@ static struct asic3_platform_data asic3_platform_data = { .gpio_a = { .dir = 0xbfff, - .init = 0x4061, + .init = 0x4063, /* ou 406B */ .sleep_out = 0x4001, .batt_fault_out = 0x4001, .sleep_conf = 0x0008, - .alt_function = 0x0000, /* Caution: need to be set to a correct value */ + .alt_function = 0x9800, /* Caution: need to be set to a correct value */ /* Old : 0000 */ }, .gpio_b = { #if 1 .dir = 0xffff, /* All outputs */ - .init = 0x0f98, + .init = 0x0fb8, .sleep_out = 0x8220, .batt_fault_out = 0x0220, .sleep_conf = 0x0008, @@ -363,13 +376,14 @@ .sleep_out = 0xfe00, .batt_fault_out = 0xfe00, .sleep_conf = 0x0008, - .alt_function = 0x0000, /* Caution: need to be set to a correct value */ + .alt_function = 0x0003, /* Caution: need to be set to a correct value */ #endif }, .gpio_d = { #if 1 .dir = 0x10e0, .init = 0x6907, + .sleep_mask = 0x0000, .sleep_out = 0x6927, .batt_fault_out = 0x6927, .sleep_conf = 0x0008, @@ -396,7 +410,7 @@ * and also a generic name for the same thing */ struct platform_device h3900_asic3 = { - .name = "ipaq asic3", + .name = "asic3", .id = 0, .num_resources = ARRAY_SIZE(asic3_resources), .resource = asic3_resources, @@ -408,6 +422,7 @@ }; EXPORT_SYMBOL(h3900_asic3); +#if 0 static struct resource himalayafb_resources[] = { [0] = { .start = 0x08100000, @@ -437,10 +452,13 @@ .num_resources = ARRAY_SIZE(himalayafb_resources), .resource = himalayafb_resources, }; +#endif static struct platform_device *devices[] __initdata = { &h3900_asic3, +#if 0 &himalayafb_device, +#endif }; void himalaya_hereiam(void) { Index: arch/arm/mach-pxa/himalaya/himalaya_kp.c =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/mach-pxa/himalaya/himalaya_kp.c,v retrieving revision 1.1.1.1 diff -u -3 -b -r1.1.1.1 himalaya_kp.c --- arch/arm/mach-pxa/himalaya/himalaya_kp.c 1 Oct 2005 13:49:23 -0000 1.1.1.1 +++ arch/arm/mach-pxa/himalaya/himalaya_kp.c 11 Nov 2005 15:52:29 -0000 @@ -1,254 +1,200 @@ /* -* Driver interface to the touchscreen on the HTC Himalaya -* -* Copyright (C) 2004 Luke Kenneth Casson Leighton -* Copyright (C) 2004 w4xy@xanadux.org -* -* Use consistent with the GNU GPL is permitted, -* provided that this copyright notice is -* preserved in its entirety in all copies and derived works. -* -* HAL code based on h5400_asic_io.c, which is -* Copyright (C) 2003 Compaq Computer Corporation. -* -* Driver based on the h1900_ts.c, which is -* Copyright (C) 2003, Joshua Wise -* -*/ + * LED interface for Himalaya, the HTC PocketPC. + * + * License: GPL + * + * Author: Luke Kenneth Casson Leighton, Copyright(C) 2004 + * + * Copyright(C) 2004, Luke Kenneth Casson Leighton. + * + * History: + * + * 2004-02-19 Luke Kenneth Casson Leighton created. + * + */ #include -#include -#include - -#include -#include -#include -#include -#include -#include -#include #include +#include #include +#include -#if 0 -#include -//#include -//#include - -#include -/*#include */ #include -#endif - -#include -#include - +#include +#include #include -#include -#include -#include -#include - +#include #include -#include -#include -#include -#include "tsc2200.h" -#include "pxa_nssp.h" -#include -#include +#include -static int gp = 74; -MODULE_PARM(gp, "i"); -MODULE_PARM_DESC(gp,"GPIO # (while testing for ASIC3 GPIO)"); - -static char kp_name[] = "tsc2200_kp"; -static char kp_phys[] = "touchscreen/tsc2200"; - -extern struct platform_device h3900_asic3; -struct input_dev kp_input_dev; -static struct work_struct kp_workqueue; -static struct work_struct kp_readworkqueue; -static int protected; - -#define SAMPLE_TIMEOUT 8 /* sample every 10ms */ -#define CONVERSION_TIMEOUT 2 /* wait 1ms for a conversion */ -#undef UBERDEBUGGY +#include "pxa_nssp.h" +#include "tsc2200.h" -#define GPIO_NR_HIMALAYA_KP_IRQ_N 8 -#define HIMALAYA_KP_IRQ IRQ_GPIO(GPIO_NR_HIMALAYA_KP_IRQ_N) +#ifdef DEBUG +#define dprintk(x...) printk(x) +#else +#define dprintk(x...) +#endif -//static struct timer_list kp_timer; -typedef enum -{ - TSC_DO_NOTHING = 0, - TSC_PEN_DOWN_EXPECT_CONVERT, - TSC_PEN_DOWN_CONVERT_DONE, - TSC_PEN_UP, +#define H3900_ASIC3_VIRT 0xf3800000 -} TSC_PEN_STATE; +enum button_irq_type { + gpio, asic3c, asic3d, tsc2200 +}; -static int tsc_state = TSC_DO_NOTHING; +static struct key { + char *name; + enum button_irq_type irq_type; + int irq; + int irq_level; + int key; + int bitmask; + int bitvalue; +} keys[] = { + {"power_button", gpio, IRQ_NR_HIMALAYA_POWER_BUTTON, IRQT_FALLING, KEY_POWER, 0, 0}, + {"record_button", asic3d, 0, IRQT_FALLING, KEY_F9 /* KEY_RECORD */, 0, 0}, + {"camera_button", asic3d, 1, IRQT_FALLING, KEY_F10 /* KEY_CAMERA */, 0, 0}, + {"volume_slider_up", asic3c, 14, IRQT_FALLING, KEY_VOLUMEUP, 0, 0}, + {"volume_slider_down", asic3c, 15, IRQT_FALLING, KEY_VOLUMEDOWN, 0, 0}, + {"select", asic3c, 9, IRQT_FALLING, KEY_KPENTER /* KEY_SELECT */, 0x3e00, 0x0200}, + {"up", asic3c, 10, IRQT_FALLING, KEY_UP, 0x3c00, 0x1400}, + {"left", asic3c, 11, IRQT_FALLING, KEY_LEFT, 0x3c00, 0x1800}, + {"down", asic3c, 12, IRQT_FALLING, KEY_DOWN, 0x3c00, 0x2800}, + {"right", asic3c, 13, IRQT_FALLING, KEY_RIGHT, 0x3c00, 0x2400}, +/* {"upleft", asic3c, -1, IRQT_FALLING, KEY_UP, 0x3c00, 0x1c00}, + {"upright", asic3c, -1, IRQT_FALLING, KEY_LEFT, 0x3c00, 0x3400}, + {"downleft", asic3c, -1, IRQT_FALLING, KEY_DOWN, 0x3c00, 0x3800}, + {"downright", asic3c, -1, IRQT_FALLING, KEY_RIGHT, 0x3c00, 0x2c00},*/ + {"contacts", tsc2200, 1, IRQT_RISING, KEY_F5 /* KEY_CONTACTS */, 0, 0}, + {"calendar", tsc2200, 7, IRQT_RISING, KEY_F6 /* KEY_CALENDAR */, 0, 0}, + {"phone_lift", tsc2200, 11, IRQT_RISING, KEY_F7 /* KEY_PHONE */, 0, 0}, + {"phone_hangup", tsc2200, 15, IRQT_RISING, KEY_F8 /* CANCEL */, 0, 0}, +}; -static void kp_tsc2200_start_conv(void) -{ - tsc2200_write(TSC2200_CTRLREG_ADC, -// TSC2200_CTRLREG_ADC_PSM_TSC2200 | - TSC2200_CTRLREG_ADC_AD0 | - TSC2200_CTRLREG_ADC_RES (TSC2200_CTRLREG_ADC_RES_12BITP) | - TSC2200_CTRLREG_ADC_AVG (TSC2200_CTRLREG_ADC_8AVG) | - TSC2200_CTRLREG_ADC_CL (TSC2200_CTRLREG_ADC_CL_2MHZ_12BIT) | - TSC2200_CTRLREG_ADC_PV (TSC2200_CTRLREG_ADC_PV_500uS) ); - printk("%s: %X.\n", __FUNCTION__, tsc2200_read(TSC2200_CTRLREG_ADC)); -} +static int num_keys=sizeof(keys)/sizeof(struct key); -static void kp_read(struct input_dev *dev) -{ - unsigned int bytes[4]; +static struct timer_list timer; - /* read positions. */ - bytes[0] = tsc2200_read(TSC2200_DATAREG_X); - bytes[1] = tsc2200_read(TSC2200_DATAREG_Y); - bytes[2] = tsc2200_read(TSC2200_DATAREG_Z1); - bytes[3] = tsc2200_read(TSC2200_DATAREG_Z2); - - input_report_abs(dev, ABS_X, bytes[0] & 0xfff); - input_report_abs(dev, ABS_Y, bytes[1] & 0xfff); - input_report_abs(dev, ABS_PRESSURE, 0xfff); -// input_report_abs(dev, ABS_PRESSURE, bytes[2] & 0xfff); - input_sync(dev); +#define KP_POLL_TIME 20 /* milliseconds */ -#if 0 - printk("%s: %03X-%03x-%03x-%03x / %i\n", __FUNCTION__, bytes[0], bytes[1], bytes[2], bytes[3], tsc2200_dav()); - printk("%s: BAT1: %03X\nBAT2: %03x\nAUX1: %03x\nAUX2: %03x\nTEMP1: %03x\nTEMP2: %03x\n", __FUNCTION__, tsc2200_read(TSC2200_DATAREG_BAT1), tsc2200_read(TSC2200_DATAREG_BAT2), tsc2200_read(TSC2200_DATAREG_AUX1), tsc2200_read(TSC2200_DATAREG_AUX2), tsc2200_read(TSC2200_DATAREG_TEMP1), tsc2200_read(TSC2200_DATAREG_TEMP2)); -#endif -} +extern struct platform_device h3900_asic3; -static void kp_up(struct input_dev *dev) -{ - input_report_abs(dev, ABS_PRESSURE, 0x0); - input_sync(dev); -} +static struct input_dev himalaya_kp_input_dev; -static int kp_pressed(void) +static void +himalaya_kp_report_key(struct key *k, int pressed) { - return ( GPLR(GPIO_NR_HIMALAYA_KP_IRQ_N) & GPIO_bit(GPIO_NR_HIMALAYA_KP_IRQ_N) ) ? 0 : 1; +//printk("LLA: %s (%d) [%s] : key = %d [%s], %s\n", __FILE__, __LINE__, __FUNCTION__, k->key, k->name, pressed ? "pressed" : "released" ); + input_report_key(&himalaya_kp_input_dev, k->key, pressed); + input_sync(&himalaya_kp_input_dev); + + if (pressed) + dprintk("%s pressed\n", k->name); + else + dprintk("%s released\n", k->name); +} + +static int asic3c_old; +static int asic3d_old; +static int tsc2200_old; +static spinlock_t keypad_lock; + +static void +himalaya_kp_check_keys(int irq_type, int *old, int new) +{ + int i; + int xor; + struct key *k; + int mask = 0; + int state = 0; + int newnew = 0; + unsigned long flags; + + /* Specific for Himalaya Keypad */ + if( irq_type == asic3c ) { + for (i = 0 ; i < num_keys ; i++) { + k=&keys[i]; + if( k->bitmask ) { + mask = mask | k->bitmask; + if (( (new & k->bitmask) == k->bitvalue ) ) { + state |= (1 << k->irq); + } + } + } + } + newnew = (new & (~mask)) | state; + spin_lock_irqsave (&keypad_lock, flags); + xor=newnew ^ *old; + *old=newnew; +//printk("LLA: oldnew=0x%08x, mask=0x%08x, state=0x%08x, newnew=0x%08x, xor=0x%08x\n", new, (~mask), state, newnew, xor ); + new = newnew; +//printk("LLA: %s (%d) [%s] : irq=%x, o=%x, n=%x, x=%x\n", __FILE__, __LINE__, __FUNCTION__, irq_type, *old, new, xor); + for (i = 0 ; i < num_keys ; i++) { + k=&keys[i]; + if (k->irq_type == irq_type && (xor & (1 << k->irq))) { + himalaya_kp_report_key(k, new & (1 << k->irq)); + } + } + spin_unlock_irqrestore (&keypad_lock, flags); } -static irqreturn_t kp_irq(int irq, void* data, struct pt_regs *regs) +static irqreturn_t himalaya_kp_irq(int irq, void *data, struct pt_regs *regs) { - printk("%s: got interrupt...\n", __FUNCTION__); - printk("ASIC3 int status:\n %X\n %X\n %X\n %X\n", - ipaq_asic3_read_gpio_intstatus_a(&h3900_asic3.dev), - ipaq_asic3_read_gpio_intstatus_b(&h3900_asic3.dev), - ipaq_asic3_read_gpio_intstatus_c(&h3900_asic3.dev), - ipaq_asic3_read_gpio_intstatus_d(&h3900_asic3.dev)); - - ipaq_asic3_set_gpio_intstatus_c(&h3900_asic3.dev, 0xfe00, 0x0); - - ipaq_asic3_set_gpio_mask_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_dir_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_trigtype_c(&h3900_asic3.dev, 0xfe00, 0xfe00); - ipaq_asic3_set_gpio_rising_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_triglevel_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_sleepmask_c(&h3900_asic3.dev, 0xfe00, 0x0); -// ipaq_asic3_set_gpio_intstatus_c(&h3900_asic3.dev, 0xfe00, 0x0800); - ipaq_asic3_set_gpio_alt_fn_c(&h3900_asic3.dev, 0xfe00, 0x0); - -// disable_irq(HIMALAYA_KP_IRQ); -// schedule_work(&kp_workqueue); - + struct key *k=data; + dprintk("%s: got interrupt for %d...\n", __FUNCTION__, irq); + input_regs(&himalaya_kp_input_dev, regs); + if (k->irq_level == IRQT_FALLING) { + k->irq_level=IRQT_RISING; + } else { + k->irq_level=IRQT_FALLING; + } + set_irq_type(irq, k->irq_level); + if (k->irq_type == asic3c) { + himalaya_kp_check_keys(asic3c, &asic3c_old, ~(ipaq_asic3_read_gpio_status_c(&h3900_asic3.dev))); + } else if (k->irq_type == asic3d) { + himalaya_kp_check_keys(asic3d, &asic3d_old, ~(ipaq_asic3_read_gpio_status_d(&h3900_asic3.dev))); + } else { + himalaya_kp_report_key(k, !(GPLR(GPIO_NR_HIMALAYA_POWER_BUTTON_N) & GPIO_bit(GPIO_NR_HIMALAYA_POWER_BUTTON_N))); + } return IRQ_HANDLED; } -static void kp_work(void* data) +static void +himalaya_kp_timer(unsigned long dummy) { - struct input_dev *dev = (struct input_dev *)data; + int status, keys; -// printk("%i: workqueue fired...\n", jiffies); - if ( !protected ) { - down_interruptible(&tsc2200_sem); - printk("protected.\n"); - protected++; -// kp_tsc2200_initialise(); -// printk("initialised.\n"); -// tsc2200_write(TSC2200_CTRLREG_ADC, 0x8506); - kp_tsc2200_start_conv(); - } -// printk("0: %X\n", tsc2200_read(TSC2200_CTRLREG_ADC)); - printk("%s: DAV=%i, pressed=%i.\n", __FUNCTION__, tsc2200_dav(), kp_pressed()); -// msleep(3); - while ( !(tsc2200_read(TSC2200_CTRLREG_ADC) & 0x4000) && !tsc2200_dav()) { -// printk("1: %X\n", tsc2200_read(TSC2200_CTRLREG_ADC)); - msleep(1); - } -#if 0 - while ( !tsc2200_dav() ) { -// printk("2: %X\n", tsc2200_read(TSC2200_CTRLREG_ADC)); - } -#endif - if ( kp_pressed() ) { -// printk("3: %X\n", tsc2200_read(TSC2200_CTRLREG_ADC)); - schedule_work(&kp_workqueue); - kp_read(dev); + status=tsc2200_read(TSC2200_CTRLREG_KEY); + if (status & 0x8000) { + keys=tsc2200_read(TSC2200_DATAREG_KPDATA); } else { -// printk("4: %X\n", tsc2200_read(TSC2200_CTRLREG_ADC)); - protected--; - kp_up(dev); - printk("unprotecting.\n"); - up(&tsc2200_sem); - enable_irq(HIMALAYA_KP_IRQ); + keys=0; } -}; - -int kp_tsc2200_open( struct input_dev *dev ) -{ - if ( !machine_is_himalaya() ) { - printk("%s: unknown iPAQ model %s\n", __FUNCTION__, h3600_generic_name() ); - return -ENODEV; - } - - printk("%s: init work queue...\n", __FUNCTION__); -// INIT_WORK(&kp_workqueue, kp_work, dev); -// INIT_WORK(&kp_readworkqueue, kp_readwork, dev); - - printk("%s: setup ASIC3...\n", __FUNCTION__); - ipaq_asic3_set_gpio_mask_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_dir_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_trigtype_c(&h3900_asic3.dev, 0xfe00, 0xfe00); - ipaq_asic3_set_gpio_rising_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_triglevel_c(&h3900_asic3.dev, 0xfe00, 0x0); - ipaq_asic3_set_gpio_sleepmask_c(&h3900_asic3.dev, 0xfe00, 0x0); -// ipaq_asic3_set_gpio_intstatus_c(&h3900_asic3.dev, 0xfe00, 0x0800); - ipaq_asic3_set_gpio_alt_fn_c(&h3900_asic3.dev, 0xfe00, 0x0); - - printk("%s: set irq...\n", __FUNCTION__); - /* now set up the pen action GPIO */ - - pxa_gpio_mode(gp | GPIO_IN); - set_irq_type(IRQ_GPIO(gp), IRQT_BOTHEDGE); - request_irq (IRQ_GPIO(gp), kp_irq, SA_SAMPLE_RANDOM, "himalaya_kp", (void*)&kp_input_dev); - - udelay(300); - printk("%s: %X\n", __FUNCTION__, tsc2200_read(TSC2200_CTRLREG_ADC) ); - udelay(300); -// enable_irq(IRQ_GPIO(gp)); - - return 0; + himalaya_kp_check_keys(tsc2200,&tsc2200_old, keys); + if (keys) + mod_timer (&timer, jiffies + (KP_POLL_TIME * HZ) / 1000); + else + enable_irq(IRQ_NR_HIMALAYA_TSC2200_KB); } -void kp_tsc2200_close( struct input_dev *dev ) -{ - printk("%s: closing tsc2200.\n", __FUNCTION__); - - disable_irq(IRQ_GPIO(gp)); - - /* make sure to free the IRQ... */ - free_irq(IRQ_GPIO(gp), dev); - - /* now free the timer... */ -// del_timer_sync (&kp_timer); +static irqreturn_t himalaya_kp_tsc2200_irq(int irq, void *data, struct pt_regs *regs) +{ + int status, keys; + input_regs(&himalaya_kp_input_dev, regs); + status=tsc2200_read(TSC2200_CTRLREG_KEY); + if (status & 0x8000) { + keys=tsc2200_read(TSC2200_DATAREG_KPDATA); + } else { + keys=0; + } + himalaya_kp_check_keys(tsc2200,&tsc2200_old, keys); + if (keys) { + dprintk("keys=0x%x\n", keys); + disable_irq(IRQ_NR_HIMALAYA_TSC2200_KB); + mod_timer (&timer, jiffies + (KP_POLL_TIME * HZ) / 1000); + } + return IRQ_HANDLED; } static void kp_release(struct device *dev) @@ -263,64 +209,112 @@ .release = kp_release, }; -static int kp_setup(struct input_dev *dev) +static int himalaya_kp_init (void) { - memset(dev, 0x0, sizeof(*dev)); + int i,irq; + struct key *k; - init_input_dev(dev); + dprintk("%s\n", __FUNCTION__); + himalaya_kp_input_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP); + init_input_dev(&himalaya_kp_input_dev); + for (i = 0 ; i < num_keys ; i++) { + k=&keys[i]; + irq=-1; + set_bit(k->key, himalaya_kp_input_dev.keybit); + switch (k->irq_type) { + case gpio: + irq=k->irq; + break; + case asic3c: + irq=asic3_irq_base(&h3900_asic3.dev) + ASIC3_GPIOC_IRQ_BASE + k->irq; + break; + case asic3d: + irq=asic3_irq_base(&h3900_asic3.dev) + ASIC3_GPIOD_IRQ_BASE + k->irq; + break; + case tsc2200: + break; + } + if (irq != -1) { + dprintk("requesting irq %d\n", irq); + request_irq(irq, himalaya_kp_irq, SA_SAMPLE_RANDOM, k->name, k); + set_irq_type(irq, k->irq_level); + } +#if 0 + himalaya_kp_input_dev.keybit[k->key] |= BIT(k->key); +#endif +} +/* + for (i = 0 ; i < num_qkeys ; i++) { + key=qkeys[i].key; + + if (key) { + dprintk("enabling key %d\n", qkeys[i].key); + set_bit(key, himalaya_kp_input_dev.keybit); + } + } +*/ + request_irq(IRQ_NR_HIMALAYA_TSC2200_KB, himalaya_kp_tsc2200_irq, SA_SAMPLE_RANDOM, "himalaya_tsc2200_kb", NULL); + set_irq_type(IRQ_NR_HIMALAYA_TSC2200_KB, IRQT_FALLING); - dev->private = dev; + init_timer(&timer); + timer.function = himalaya_kp_timer; + timer.data = 0; - dev->name = kp_name; - dev->phys = kp_phys; - dev->open = kp_tsc2200_open; - dev->close = kp_tsc2200_close; - - set_bit(EV_ABS, dev->evbit); - - set_bit(ABS_X, dev->absbit); - set_bit(ABS_Y, dev->absbit); - set_bit(ABS_PRESSURE, dev->absbit); - dev->absmin[ABS_PRESSURE] = 0; - dev->absmax[ABS_PRESSURE] = 0xfff; - dev->absmax[ABS_X] = 0xfff; - dev->absmax[ABS_Y] = 0xfff; - dev->absfuzz[ABS_X] = 2; - dev->absfuzz[ABS_Y] = 2; - dev->absflat[ABS_X] = 4; - dev->absflat[ABS_Y] = 4; - - dev->id.bustype = BUS_PXA_NSSP; - dev->id.vendor = 0xffff; - dev->id.product = 0xffff; - dev->id.version = 0xffff; - dev->dev = &kp_tsc2200_dev; + himalaya_kp_input_dev.name = "himalayakb"; + himalaya_kp_input_dev.phys = "keyboard/himalayakb"; - device_register(dev->dev); - input_register_device(dev); + himalaya_kp_input_dev.id.bustype = BUS_PXA_NSSP; + himalaya_kp_input_dev.id.vendor = 0x0001; + himalaya_kp_input_dev.id.product = 0x0001; + himalaya_kp_input_dev.id.version = 0x0100; - return 0; -} + himalaya_kp_input_dev.dev = &kp_tsc2200_dev; + + device_register(himalaya_kp_input_dev.dev); + input_register_device(&himalaya_kp_input_dev); -static int __init kp_init(void) -{ - kp_setup (&kp_input_dev); return 0; } -static void __exit kp_exit(void) +static void himalaya_kp_exit (void) { -// cancel_delayed_work(&kp_workqueue); - flush_scheduled_work(); - device_unregister(&kp_tsc2200_dev); - input_unregister_device(&kp_input_dev); + int i,irq; + struct key *k; + + dprintk("%s\n", __FUNCTION__); + device_unregister(himalaya_kp_input_dev.dev); + input_unregister_device(&himalaya_kp_input_dev); + for (i = 0 ; i < num_keys ; i++) { + k=&keys[i]; + irq=-1; + switch (k->irq_type) { + case gpio: + irq=k->irq; + break; + case asic3c: + irq=asic3_irq_base(&h3900_asic3.dev) + ASIC3_GPIOC_IRQ_BASE + k->irq; + break; + case asic3d: + irq=asic3_irq_base(&h3900_asic3.dev) + ASIC3_GPIOD_IRQ_BASE + k->irq; + break; + case tsc2200: + break; + } + if (irq != -1) { + dprintk("releasing irq %d\n", irq); + free_irq(irq, k); + } + } + free_irq(IRQ_NR_HIMALAYA_TSC2200_KB, NULL); + del_timer_sync (&timer); } -module_init(kp_init) -module_exit(kp_exit) +module_init (himalaya_kp_init); +module_exit (himalaya_kp_exit); -MODULE_AUTHOR("Matthias Burghardt"); -MODULE_DESCRIPTION("Touchscreen (TI TSC2200) support for the HTC Himalaya"); +MODULE_AUTHOR("? / Ludovic LANGE"); +MODULE_DESCRIPTION("Keyboard (TI TSC2200/ASIC3) support for the HTC Himalaya"); +MODULE_LICENSE("GPL"); /* I hope */ Index: arch/arm/mach-pxa/himalaya/himalaya_leds.c =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/mach-pxa/himalaya/himalaya_leds.c,v retrieving revision 1.1.1.1 diff -u -3 -b -r1.1.1.1 himalaya_leds.c --- arch/arm/mach-pxa/himalaya/himalaya_leds.c 1 Oct 2005 13:49:23 -0000 1.1.1.1 +++ arch/arm/mach-pxa/himalaya/himalaya_leds.c 11 Nov 2005 15:52:29 -0000 @@ -15,83 +15,316 @@ #include #include +#include +#include +#include #include +#include +#include #include -#include +//#include //#include "himalaya_leds.h" extern struct platform_device h3900_asic3; extern struct ipaq_model_ops ipaq_model_ops; -#define CLOCK_CDEX_LED0 (1 << 6) /* clock for led 0? */ -#define CLOCK_CDEX_LED1 (1 << 7) /* clock for led 1? */ +struct himalaya_led_data { + int hw_num; // 0 (amber), 1 (green), 2 (blue) + int duty_time; + int cycle_time; + int registered; + int brightness; + int color; + struct led_properties props; +}; -void himalaya_set_led (enum led_color color, int duty_time, int cycle_time) +#define to_himalaya_led_data(d) container_of(d, struct himalaya_led_data, props) + +void himalaya_set_led (int led, int duty_time, int cycle_time) +{ + printk("himalaya_set_led\n"); + switch(led) { + case 0: + ipaq_asic3_set_led(&h3900_asic3.dev, 0, duty_time, cycle_time); + break; + case 1: + ipaq_asic3_set_led(&h3900_asic3.dev, 1, duty_time, cycle_time); + break; + case 2: + ipaq_asic3_set_led(&h3900_asic3.dev, 0, duty_time, cycle_time); + ipaq_asic3_set_led(&h3900_asic3.dev, 1, duty_time, cycle_time); + break; + } +} + +EXPORT_SYMBOL(himalaya_set_led); + + +int himalaya_led_brightness_get(struct device *dev, struct led_properties *props) +{ + struct himalaya_led_data *data = to_himalaya_led_data(props); + + return data->brightness; +} + +void himalaya_led_brightness_set(struct device *dev, struct led_properties *props, int value) + +/* Brightness levels supported by the hardware: 0 (off) and 100 (on)*/ + +{ + struct himalaya_led_data *data = to_himalaya_led_data(props); + + data->brightness = value > 0 ? 100 : 0; + switch (data->hw_num) { + case 0: + case 1: + case 2: + himalaya_set_led(data->hw_num, data->duty_time, data->cycle_time); + break; + case 3: + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_PHONEL_PWR_ON, (value > 0) ? GPIOB_PHONEL_PWR_ON : 0); + break; + case 4: + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_VIBRATE_ON, (value > 0) ? GPIOB_VIBRATE_ON : 0); + break; +/* + case 4: + ipaq_asic3_set_gpio_out_c(&h3900_asic3.dev, GPIOC_KEYBL_PWR_ON, (value > 0) ? GPIOC_KEYBL_PWR_ON : 0); + break; +*/ + } +} + +int +himalaya_led_cycle_get(struct device *dev, struct led_properties *props) +{ + struct himalaya_led_data *data = to_himalaya_led_data(props); + + return data->cycle_time; +} + +void +himalaya_led_cycle_set(struct device *dev, struct led_properties *props, int value) +{ + struct himalaya_led_data *data = to_himalaya_led_data(props); + + data->cycle_time=value; + if (data->brightness) + himalaya_set_led(data->hw_num, data->duty_time, data->cycle_time); + +} + +int +himalaya_led_duty_get(struct device *dev, struct led_properties *props) +{ + struct himalaya_led_data *data = to_himalaya_led_data(props); + + return data->duty_time; +} + +void +himalaya_led_duty_set(struct device *dev, struct led_properties *props, int value) { - if (color == RED_LED) + struct himalaya_led_data *data = to_himalaya_led_data(props); + + data->duty_time=value; + if (data->brightness) + himalaya_set_led(data->hw_num, data->duty_time, data->cycle_time); +} + +static struct himalaya_led_data leds[] = { + { + .hw_num=0, + .duty_time=1, + .cycle_time=1, + .props = { + .owner = THIS_MODULE, + .name = "red", + .color = "red", + .brightness_get = himalaya_led_brightness_get, + .brightness_set = himalaya_led_brightness_set, + .hw_cycle_get = himalaya_led_cycle_get, + .hw_cycle_set = himalaya_led_cycle_set, + .hw_duty_get = himalaya_led_duty_get, + .hw_duty_set = himalaya_led_duty_set, + } + }, + { + .hw_num=1, + .duty_time=1, + .cycle_time=1, + .props = { + .owner = THIS_MODULE, + .name = "green", + .color = "green", + .brightness_get = himalaya_led_brightness_get, + .brightness_set = himalaya_led_brightness_set, + .hw_cycle_get = himalaya_led_cycle_get, + .hw_cycle_set = himalaya_led_cycle_set, + .hw_duty_get = himalaya_led_duty_get, + .hw_duty_set = himalaya_led_duty_set, + } + }, + { + .hw_num=2, + .duty_time=1, + .cycle_time=1, + .props = { + .owner = THIS_MODULE, + .name = "yellow", + .color = "yellow", + .brightness_get = himalaya_led_brightness_get, + .brightness_set = himalaya_led_brightness_set, + .hw_cycle_get = himalaya_led_cycle_get, + .hw_cycle_set = himalaya_led_cycle_set, + .hw_duty_get = himalaya_led_duty_get, + .hw_duty_set = himalaya_led_duty_set, + } + }, + { + .hw_num=3, + .brightness=100, + .props = { + .owner = THIS_MODULE, + .name = "phone", + .brightness_get = himalaya_led_brightness_get, + .brightness_set = himalaya_led_brightness_set, + } + }, +/* + { + .hw_num=4, + .props = { + .owner = THIS_MODULE, + .name = "keyboard", + .color = "blue", + .brightness_get = himalaya_led_brightness_get, + .brightness_set = himalaya_led_brightness_set, + } + }, +*/ { - IPAQ_ASIC3_LED_TimeBase(H3900_ASIC3_VIRT, 0) = 0x6 | LEDTBS_BLINK; - IPAQ_ASIC3_LED_PeriodTime(H3900_ASIC3_VIRT, 0) = cycle_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 0) = 0; - udelay(1); - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 0) = duty_time; - - IPAQ_ASIC3_LED_TimeBase(H3900_ASIC3_VIRT, 1) = 0x6 | LEDTBS_BLINK; - IPAQ_ASIC3_LED_PeriodTime(H3900_ASIC3_VIRT, 1) = cycle_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 1) = 0; - }; - - if (color == GREEN_LED) - { - IPAQ_ASIC3_LED_TimeBase(H3900_ASIC3_VIRT, 1) = 0x6 | LEDTBS_BLINK; - IPAQ_ASIC3_LED_PeriodTime(H3900_ASIC3_VIRT, 1) = cycle_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 1) = 0; - udelay(1); - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 1) = duty_time; - - IPAQ_ASIC3_LED_TimeBase(H3900_ASIC3_VIRT, 0) = 0x6 | LEDTBS_BLINK; - IPAQ_ASIC3_LED_PeriodTime(H3900_ASIC3_VIRT, 0) = cycle_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 0) = 0; - }; - - if (color == YELLOW_LED) - { - IPAQ_ASIC3_LED_TimeBase(H3900_ASIC3_VIRT, 1) = 0x6 | LEDTBS_BLINK; - IPAQ_ASIC3_LED_PeriodTime(H3900_ASIC3_VIRT, 1) = cycle_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 1) = 0; - - IPAQ_ASIC3_LED_TimeBase(H3900_ASIC3_VIRT, 0) = 0x6 | LEDTBS_BLINK; - IPAQ_ASIC3_LED_PeriodTime(H3900_ASIC3_VIRT, 0) = cycle_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 0) = 0; - - udelay(1); - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 1) = duty_time; - IPAQ_ASIC3_LED_DutyTime(H3900_ASIC3_VIRT, 0) = duty_time; - }; + .hw_num=4, + .props = { + .owner = THIS_MODULE, + .name = "vibra", + .brightness_get = himalaya_led_brightness_get, + .brightness_set = himalaya_led_brightness_set, + } + }, +}; - if (color == BLUE_LED) - printk("%s: Blue LED not yet enabled.\n", __FUNCTION__); +static int himalaya_led_probe(struct device *dev) +{ + int i,ret=0; + + /* Turn on the LED controllers in CDEX */ + asic3_set_clock_cdex(&h3900_asic3.dev, + CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, + CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2 + ); +#if 0 + ipaq_model_ops.set_led = himalaya_set_led; +#endif + himalaya_set_led(0 /*RED_LED*/, 0, 1); + himalaya_set_led(1 /*GREEN_LED*/, 0, 1); + himalaya_set_led( 2 /*YELLOW_LED*/, 0, 1); + for (i = 0; i < ARRAY_SIZE(leds); i++) { + ret = leds_device_register(dev, &leds[i].props); + leds[i].registered = 1; + if (unlikely(ret)) { + printk(KERN_WARNING "Unable to register himalaya led %s\n", leds[i].props.color); + leds[i].registered = 0; + } + } + return ret; } -EXPORT_SYMBOL(himalaya_set_led); + +static int himalaya_led_remove(struct device *dev) +{ + int i; + + printk("himalaya_led_remove\n"); + + ipaq_model_ops.set_led = NULL; + + for (i = 0; i < ARRAY_SIZE(leds); i++) { + if (leds[i].registered) { + leds_device_unregister(&leds[i].props); + } + } + return 0; +} + +static int +himalaya_led_suspend(struct device *dev, u32 state, u32 level) +{ + if (level == SUSPEND_POWER_DOWN) { + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_PHONEL_PWR_ON, 0); + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_VIBRATE_ON, 0); +/* + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_PHONEL_PWR_ON, 0); + ipaq_asic3_set_gpio_out_c(&h3900_asic3.dev, GPIOC_KEYBL_PWR_ON, 0); + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_VIBRA_PWR_ON, 0); +*/ + } + return 0; +} + +static int +himalaya_led_resume(struct device *dev, u32 level) +{ + if (level == RESUME_POWER_ON) { + printk("himalaya_led_resume brightness=%d\n", leds[3].brightness); + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_PHONEL_PWR_ON, leds[3].brightness ? GPIOB_PHONEL_PWR_ON : 0); + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_VIBRATE_ON, leds[4].brightness ? GPIOB_VIBRATE_ON : 0); +/* + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_PHONEL_PWR_ON, leds[3].brightness ? GPIOB_PHONEL_PWR_ON : 0); + ipaq_asic3_set_gpio_out_c(&h3900_asic3.dev, GPIOC_KEYBL_PWR_ON, leds[4].brightness ? GPIOC_KEYBL_PWR_ON : 0); + ipaq_asic3_set_gpio_out_b(&h3900_asic3.dev, GPIOB_VIBRA_PWR_ON, leds[5].brightness ? GPIOB_VIBRA_PWR_ON : 0); +*/ + } + + return 0; +} + + +static struct device_driver himalaya_led_driver = { + .name = "himalaya_led", + .probe = himalaya_led_probe, + .remove = himalaya_led_remove, + .suspend = himalaya_led_suspend, + .resume = himalaya_led_resume, + .bus = &platform_bus_type, + +}; + +static struct platform_device himalaya_led_dev = { + .name = "himalaya_led", +}; static int himalaya_led_init (void) { - int retval = 0; + int ret = 0; if (! machine_is_himalaya() ) return -ENODEV; - ipaq_model_ops.set_led = himalaya_set_led; - return retval; + ret=driver_register(&himalaya_led_driver); + if (! ret) + ret=platform_device_register(&himalaya_led_dev); + return ret; } static void himalaya_led_exit (void) { - ipaq_model_ops.set_led = NULL; + platform_device_unregister(&himalaya_led_dev); + driver_unregister(&himalaya_led_driver); } module_init (himalaya_led_init); module_exit (himalaya_led_exit); +MODULE_LICENSE("GPL"); Index: arch/arm/mach-pxa/himalaya/himalaya_tsc2200.c =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/arch/arm/mach-pxa/himalaya/himalaya_tsc2200.c,v retrieving revision 1.1.1.1.2.1 diff -u -3 -b -r1.1.1.1.2.1 himalaya_tsc2200.c --- arch/arm/mach-pxa/himalaya/himalaya_tsc2200.c 1 Oct 2005 15:03:26 -0000 1.1.1.1.2.1 +++ arch/arm/mach-pxa/himalaya/himalaya_tsc2200.c 11 Nov 2005 15:52:29 -0000 @@ -177,7 +183,7 @@ __ATTR_NULL, }; -static struct bus_type nssp_bus_type = { +/*static*/ struct bus_type nssp_bus_type = { .name = "nssp", .match = nssp_bus_match, #if 0 Index: include/asm-arm/arch-pxa/debug-macro.S =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/include/asm-arm/arch-pxa/debug-macro.S,v retrieving revision 1.1.1.1.2.1 diff -u -3 -b -r1.1.1.1.2.1 debug-macro.S --- include/asm-arm/arch-pxa/debug-macro.S 1 Oct 2005 15:03:27 -0000 1.1.1.1.2.1 +++ include/asm-arm/arch-pxa/debug-macro.S 11 Nov 2005 15:52:29 -0000 @@ -18,6 +18,8 @@ movne \rx, #io_p2v(0x40000000) @ virtual #if defined(CONFIG_DEBUG_PXA_STUART) orr \rx, \rx, #0x00700000 +#elif defined(CONFIG_DEBUG_PXA_BTUART) + orr \rx, \rx, #0x00200000 #else orr \rx, \rx, #0x00100000 #endif Index: include/asm-arm/arch-pxa/himalaya-gpio.h =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/include/asm-arm/arch-pxa/Attic/himalaya-gpio.h,v retrieving revision 1.1.1.1 diff -u -3 -b -r1.1.1.1 himalaya-gpio.h --- include/asm-arm/arch-pxa/himalaya-gpio.h 1 Oct 2005 13:59:01 -0000 1.1.1.1 +++ include/asm-arm/arch-pxa/himalaya-gpio.h 11 Nov 2005 15:52:29 -0000 @@ -32,6 +32,8 @@ #define GPIO_NR_HIMALAYA_USB_PULLUP_N (60) #define GPIO_NR_HIMALAYA_CHARGER_EN (63) +#define IRQ_NR_HIMALAYA_POWER_BUTTON IRQ_GPIO(GPIO_NR_HIMALAYA_POWER_BUTTON_N) +#define IRQ_NR_HIMALAYA_TSC2200_KB IRQ_GPIO(GPIO_NR_HIMALAYA_BUTTON) #define IRQ_NR_HIMALAYA_USB_DETECT_N IRQ_GPIO(GPIO_NR_HIMALAYA_USB_DETECT_N) #define IRQ_NR_HIMALAYA_RS232_IN IRQ_GPIO(GPIO_NR_HIMALAYA_RS232_IN) #define IRQ_NR_HIMALAYA_PEN IRQ_GPIO(GPIO_NR_HIMALAYA_PEN) Index: include/asm-arm/arch-pxa/himalaya_asic.h =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/include/asm-arm/arch-pxa/Attic/himalaya_asic.h,v retrieving revision 1.1.1.1 diff -u -3 -b -r1.1.1.1 himalaya_asic.h --- include/asm-arm/arch-pxa/himalaya_asic.h 1 Oct 2005 13:59:01 -0000 1.1.1.1 +++ include/asm-arm/arch-pxa/himalaya_asic.h 11 Nov 2005 15:52:29 -0000 @@ -39,6 +39,7 @@ #define GPIOB_GSM_RESET (1 << 1) /* Uncertain. Maybe bug in bootloader? */ //#define GPIOB_LCD_5V_ON (1 << 3) /* Enables LCD_5V, inferred from H3900 */ //#define GPIOB_CH_TIMER (1 << 4) /* Charger */ +#define GPIOB_PHONEL_PWR_ON (1 << 4) #define GPIOB_LCD_5V_ON (1 << 5) /* Enables LCD_5V */ #define GPIOB_LCD_ON (1 << 6) /* Enables LCD_3V */ //#define GPIOB_LCD_PCI (1 << 7) /* Connects to PDWN on LCD controller */ Index: include/asm-arm/arch-pxa/uncompress.h =================================================================== RCS file: /cvsroot/xanadux/linux-2.6-xda/include/asm-arm/arch-pxa/uncompress.h,v retrieving revision 1.1.1.2.2.1 diff -u -3 -b -r1.1.1.2.2.1 uncompress.h --- include/asm-arm/arch-pxa/uncompress.h 1 Oct 2005 15:03:27 -0000 1.1.1.2.2.1 +++ include/asm-arm/arch-pxa/uncompress.h 11 Nov 2005 15:52:29 -0000 @@ -25,8 +25,10 @@ #define STUART ((volatile unsigned long *)0x40700000) #define HWUART ((volatile unsigned long *)0x41600000) -#ifdef CONFIG_DEBUG_PXA_STUART +#if defined(CONFIG_DEBUG_PXA_STUART) #define UART STUART +#elif defined(CONFIG_DEBUG_PXA_BTUART) +#define UART BTUART #else #define UART FFUART #endif