Index: linux-2.6.16/arch/arm/boot/compressed/misc.c =================================================================== --- linux-2.6.16.orig/arch/arm/boot/compressed/misc.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/boot/compressed/misc.c 2007-04-12 10:36:19.000000000 +0200 @@ -22,6 +22,19 @@ #include +#include + +#ifdef CONFIG_EFB_DEBUG +# define SCREEN_W 240 +# define SCREEN_H 320 +#endif + + +static unsigned short *vram = 0; +static unsigned int current_pix = 0; +static unsigned int y = 0; + + #ifdef STANDALONE_DEBUG #define putstr printf #endif @@ -260,6 +273,38 @@ return inbuf[0]; } +#ifdef CONFIG_EFB_DEBUG +/* + * put a new pixel. on the frame buffer + */ +static void putpix(void) +{ + if (current_pix == SCREEN_W) { + current_pix = 0; + } + vram[current_pix] = 0xFFFF; + ++current_pix; + vram[current_pix] = 0x0; + ++current_pix; +} + +/* + * clear the whole screen + */ +static void clear_screen(void) +{ + unsigned int i; + + vram = (unsigned short *)0x20001020; + current_pix = 0; + + for (i = 0; i < SCREEN_W * SCREEN_H; ++i) { + vram[i] = 0; + } +} +#endif + + /* =========================================================================== * Write the output window window[0..outcnt-1] and update crc and bytes_out. * (Used for the decompressed data only.) @@ -280,7 +325,8 @@ bytes_out += (ulg)outcnt; output_ptr += (ulg)outcnt; outcnt = 0; - putstr("."); +/* putstr("."); */ + putpix(); } #ifndef arch_error @@ -291,7 +337,7 @@ { arch_error(x); - putstr("\n\n"); +/* putstr("\n\n"); */ putstr(x); putstr("\n\n -- System halted"); @@ -309,12 +355,16 @@ free_mem_ptr_end = free_mem_ptr_end_p; __machine_arch_type = arch_id; +#ifdef CONFIG_EFB_DEBUG + clear_screen(); +#endif + arch_decomp_setup(); makecrc(); - putstr("Uncompressing Linux..."); +/* putstr("Uncompressing Linux..."); */ gunzip(); - putstr(" done, booting the kernel.\n"); +/* putstr(" done, booting the kernel.\n"); */ return output_ptr; } #else Index: linux-2.6.16/arch/arm/configs/tornado_ccboot_defconfig =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/configs/tornado_ccboot_defconfig 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,797 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.16.2-omap1 +# Tue Aug 1 01:17:51 2006 +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_CALIBRATE_DELAY=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +# CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_UID16=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +# CONFIG_PRINTK is not set +# CONFIG_BUG is not set +# CONFIG_ELF_CORE is not set +# CONFIG_BASE_FULL is not set +# CONFIG_FUTEX is not set +# CONFIG_EPOLL is not set +# CONFIG_SHMEM is not set +CONFIG_CC_ALIGN_FUNCTIONS=0 +CONFIG_CC_ALIGN_LABELS=0 +CONFIG_CC_ALIGN_LOOPS=0 +CONFIG_CC_ALIGN_JUMPS=0 +CONFIG_SLAB=y +CONFIG_TINY_SHMEM=y +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# Block layer +# + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# 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 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +CONFIG_ARCH_OMAP=y +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_AT91RM9200 is not set + +# +# TI OMAP Implementations +# +CONFIG_ARCH_OMAP_OTG=y +CONFIG_ARCH_OMAP1=y +# CONFIG_ARCH_OMAP2 is not set + +# +# OMAP Feature Selections +# +# CONFIG_OMAP_RESET_CLOCKS is not set +# CONFIG_OMAP_BOOT_TAG is not set +# CONFIG_OMAP_MUX is not set +CONFIG_OMAP_MPU_TIMER=y +# CONFIG_OMAP_32K_TIMER is not set +CONFIG_OMAP_LL_DEBUG_UART1=y +# CONFIG_OMAP_LL_DEBUG_UART2 is not set +# CONFIG_OMAP_LL_DEBUG_UART3 is not set + +# +# OMAP Core Type +# +CONFIG_ARCH_OMAP730=y +# CONFIG_ARCH_OMAP15XX is not set +# CONFIG_ARCH_OMAP16XX is not set + +# +# OMAP Board Type +# +# CONFIG_MACH_OMAP_PERSEUS2 is not set + +# +# OMAP CPU Speed +# +# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set +CONFIG_OMAP_ARM_195MHZ=y +# CONFIG_OMAP_ARM_182MHZ is not set +# CONFIG_OMAP_ARM_168MHZ is not set +# CONFIG_OMAP_ARM_120MHZ is not set +# CONFIG_OMAP_ARM_60MHZ is not set +# CONFIG_OMAP_ARM_30MHZ is not set +CONFIG_MACH_TORNADO=y +CONFIG_EFB_DEBUG=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM926T=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5TJ=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set +CONFIG_KEXEC=y + +# +# Bus support +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_PREEMPT=y +# CONFIG_NO_IDLE_HZ is not set +# CONFIG_AEABI is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_LEDS 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 + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_VFP is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set + +# +# Power management options +# +# CONFIG_PM is not set +# CONFIG_APM is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +CONFIG_NET_KEY=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# 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_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_BIC=y +# CONFIG_IPV6 is not set +# CONFIG_NETFILTER is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# 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=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +# CONFIG_NETDEVICES is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# PHY device support +# + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OMAP is not set +CONFIG_TORNADO_KEYPAD=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_OMAP730_WATCHDOG=y +CONFIG_TORNADO_VIBRATOR=y +CONFIG_TORNADO_LEDS=y +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_OMAP_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# 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_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_OMAP is not set +CONFIG_FB_VSFB=y +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +CONFIG_FONT_6x11=y +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set + +# +# 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 is not set +CONFIG_BACKLIGHT_TORNADO=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +CONFIG_USB_GADGET_OMAP=y +CONFIG_USB_OMAP=y +# 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 + +# +# MMC/SD Card support +# +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=y +# CONFIG_MMC_BLOCK_BROKEN_RFD is not set +# CONFIG_MMC_BULKTRANSFER is not set +CONFIG_MMC_OMAP=y + +# +# Synchronous Serial Interfaces (SSI) +# +# CONFIG_OMAP_UWIRE is not set +# CONFIG_OMAP_TSC2101 is not set + +# +# CBUS support +# +# CONFIG_CBUS is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT3_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +# CONFIG_INOTIFY is not set +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +# CONFIG_TMPFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_RELAYFS_FS is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +# CONFIG_NLS is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_DEBUG_VM is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_DEBUG_USER 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 + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set Index: linux-2.6.16/arch/arm/configs/tornado_defconfig =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/configs/tornado_defconfig 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,849 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.16.9-omap1 +# Tue Mar 20 11:07:50 2007 +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_CALIBRATE_DELAY=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +# CONFIG_SYSVIPC is not set +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_UID16=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_CC_ALIGN_FUNCTIONS=0 +CONFIG_CC_ALIGN_LABELS=0 +CONFIG_CC_ALIGN_LOOPS=0 +CONFIG_CC_ALIGN_JUMPS=0 +CONFIG_SLAB=y +CONFIG_TINY_SHMEM=y +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_KMOD is not set + +# +# Block layer +# + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# 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 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +CONFIG_ARCH_OMAP=y +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_AT91RM9200 is not set + +# +# TI OMAP Implementations +# +CONFIG_ARCH_OMAP_OTG=y +CONFIG_ARCH_OMAP1=y +# CONFIG_ARCH_OMAP2 is not set + +# +# OMAP Feature Selections +# +# CONFIG_OMAP_RESET_CLOCKS is not set +# CONFIG_OMAP_BOOT_TAG is not set +# CONFIG_OMAP_MUX is not set +CONFIG_OMAP_MPU_TIMER=y +# CONFIG_OMAP_32K_TIMER is not set +CONFIG_OMAP_LL_DEBUG_UART1=y +# CONFIG_OMAP_LL_DEBUG_UART2 is not set +# CONFIG_OMAP_LL_DEBUG_UART3 is not set + +# +# OMAP Core Type +# +CONFIG_ARCH_OMAP730=y +# CONFIG_ARCH_OMAP15XX is not set +# CONFIG_ARCH_OMAP16XX is not set + +# +# OMAP Board Type +# +# CONFIG_MACH_OMAP_PERSEUS2 is not set + +# +# OMAP CPU Speed +# +# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set +CONFIG_OMAP_ARM_195MHZ=y +# CONFIG_OMAP_ARM_182MHZ is not set +# CONFIG_OMAP_ARM_168MHZ is not set +# CONFIG_OMAP_ARM_120MHZ is not set +# CONFIG_OMAP_ARM_60MHZ is not set +# CONFIG_OMAP_ARM_30MHZ is not set +CONFIG_MACH_TORNADO=y +CONFIG_EFB_DEBUG=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM926T=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5TJ=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set +CONFIG_KEXEC=y + +# +# Bus support +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_PREEMPT=y +# CONFIG_NO_IDLE_HZ is not set +# CONFIG_AEABI is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_LEDS 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 + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_VFP is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_APM=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +CONFIG_NET_KEY=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# 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_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_BIC=y +# CONFIG_IPV6 is not set +# CONFIG_NETFILTER is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# 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=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +# CONFIG_NETDEVICES is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# PHY device support +# + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OMAP is not set +CONFIG_TORNADO_KEYPAD=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_OMAP730_WATCHDOG=y +CONFIG_TORNADO_VIBRATOR=y +CONFIG_TORNADO_LEDS=y +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_OMAP_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# 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_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_OMAP is not set +CONFIG_FB_VSFB=y +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +CONFIG_FONT_6x11=y +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set + +# +# 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 is not set +CONFIG_BACKLIGHT_TORNADO=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_SEQUENCER=y +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_SEQUENCER_OSS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_OMAP_AIC23 is not set +# CONFIG_SND_OMAP_TSC2101 is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +CONFIG_USB_GADGET_OMAP=y +CONFIG_USB_OMAP=y +# 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 + +# +# MMC/SD Card support +# +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=y +# CONFIG_MMC_BLOCK_BROKEN_RFD is not set +# CONFIG_MMC_BULKTRANSFER is not set +CONFIG_MMC_OMAP=y + +# +# Synchronous Serial Interfaces (SSI) +# +# CONFIG_OMAP_UWIRE is not set +# CONFIG_OMAP_TSC2101 is not set + +# +# CBUS support +# +# CONFIG_CBUS is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT3_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +# CONFIG_INOTIFY is not set +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +# CONFIG_TMPFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_RELAYFS_FS is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +# CONFIG_NLS is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_DEBUG_VM is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_DEBUG_USER 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=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +# CONFIG_SECURITY_CAPABILITIES is not set +# CONFIG_SECURITY_SECLVL is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set Index: linux-2.6.16/arch/arm/Kconfig =================================================================== --- linux-2.6.16.orig/arch/arm/Kconfig 2007-04-12 10:36:06.000000000 +0200 +++ linux-2.6.16/arch/arm/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -298,6 +298,23 @@ depends on CPU_XSCALE && !XSCALE_PMU_TIMER default y +config KEXEC + bool "Kexec system call (EXPERIMENTAL)" + depends on EXPERIMENTAL + help + kexec is a system call that implements the ability to shutdown your + current kernel, and to start another kernel. It is like a reboot + but it is indepedent of the system firmware. And like a reboot + you can start any kernel with it, not just Linux. + + The name comes from the similiarity to the exec system call. + + It is an ongoing process to be certain the hardware in a machine + is properly shutdown, so do not be surprised if this code does not + initially work for you. It may help to enable device hotplugging + support. As of this writing the exact hardware interface is + strongly in flux, so no good recommendation can be made. + endmenu source "arch/arm/common/Kconfig" Index: linux-2.6.16/arch/arm/kernel/calls.S =================================================================== --- linux-2.6.16.orig/arch/arm/kernel/calls.S 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/kernel/calls.S 2007-04-12 10:36:19.000000000 +0200 @@ -198,7 +198,7 @@ CALL(sys_sigaltstack_wrapper) CALL(sys_sendfile) CALL(sys_ni_syscall) - CALL(sys_ni_syscall) + CALL(sys_kexec_load) /* 190 */ CALL(sys_vfork_wrapper) CALL(sys_getrlimit) CALL(sys_mmap2) Index: linux-2.6.16/arch/arm/kernel/head.S =================================================================== --- linux-2.6.16.orig/arch/arm/kernel/head.S 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/kernel/head.S 2007-04-12 10:36:19.000000000 +0200 @@ -36,6 +36,79 @@ #define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET) /* + * debug macros, while the MMU is of + */ +.macro pix_ok /* blue */ +#ifdef CONFIG_EFB_DEBUG + mov r12, #0x0014 + add r12, r12, #0x00140000 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + add r11, r11, #4 +#endif +.endm + +.macro pix_ko /* red */ +#ifdef CONFIG_EFB_DEBUG + mov r12, #0xF800 + add r12, r12, #0xF8000000 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + add r11, r11, #4 +#endif +.endm + +.macro pix_ctr /* white */ +#ifdef CONFIG_EFB_DEBUG + mov r12, #-1 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + add r11, r11, #4 +#endif +.endm + +/* + * a more mmu aware code: the frame buffer is mapped at 0xD0001020, + * see arch/arm/mach-omap/debug.c + */ +.macro pix_mmu /* black pixel */ +#ifdef CONFIG_EFB_DEBUG + mov r11, #0xD0000000 + add r11, r11, #0x1000 + add r11, r11, #0x20 +/* mov r12, #0x00FF */ +/* add r12, r12, #0x00FF0000 */ + mov r12, #0 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 + str r12, [r11] + add r11, r11, #4 +#endif +.endm + +/* * swapper_pg_dir is the virtual address of the initial page table. * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must * make sure that KERNEL_RAM_ADDR is correctly set. Currently, we expect @@ -80,14 +153,31 @@ __INIT .type stext, %function ENTRY(stext) + + /* + * r11 stores the beginning of the VRAM (0x20001020) + */ + mov r11, #0x20000000 + add r11, r11, #0x1000 + add r11, r11, #0x20 + + pix_ok + msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode @ and irqs disabled bl __lookup_processor_type @ r5=procinfo r9=cpuid movs r10, r5 @ invalid processor (r5=0)? beq __error_p @ yes, error 'p' + + pix_ok + bl __lookup_machine_type @ r5=machinfo movs r8, r5 @ invalid machine (r5=0)? beq __error_a @ yes, error 'a' + + pix_ok + + bl __create_page_tables /* @@ -232,14 +322,22 @@ .align 5 .type __turn_mmu_on, %function __turn_mmu_on: + + pix_ok + mov r0, r0 mcr p15, 0, r0, c1, c0, 0 @ write control reg mrc p15, 0, r3, c0, c0, 0 @ read id reg mov r3, r3 mov r3, r3 + + pix_mmu + mov pc, r13 +1: + b 1b /* * Setup the initial page tables. We only setup the barest @@ -363,6 +461,18 @@ str r3, [r0] #endif #endif + +#ifdef CONFIG_EFB_DEBUG + /* + * map frame buffer from 0x20000000 to 0xD0000000 + * in order to help debugging + */ + add r0, r4, #0xD0000000 >> 18 + mov r3, #0x20000000 + add r3, r3, r7 + str r3, [r0] +#endif + mov pc, lr .ltorg @@ -380,6 +490,7 @@ .type __error_p, %function __error_p: + pix_ko #ifdef CONFIG_DEBUG_LL adr r0, str_p1 bl printascii @@ -390,6 +501,7 @@ .type __error_a, %function __error_a: + pix_ko #ifdef CONFIG_DEBUG_LL mov r4, r1 @ preserve machine ID adr r0, str_a1 Index: linux-2.6.16/arch/arm/kernel/machine_kexec.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/kernel/machine_kexec.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,77 @@ +/* + * machine_kexec.c - handle transition of Linux booting another kernel + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const extern unsigned char relocate_new_kernel[]; +const extern unsigned int relocate_new_kernel_size; + +extern unsigned long kexec_start_address; +extern unsigned long kexec_indirection_page; +extern unsigned long kexec_mach_type; + +/* + * Provide a dummy crash_notes definition while crash dump arrives to arm. + * This prevents breakage of crash_notes attribute in kernel/ksysfs.c. + */ +/* note_buf_t *crash_notes; */ + +int machine_kexec_prepare(struct kimage *image) +{ + return 0; +} + +void machine_kexec_cleanup(struct kimage *image) +{ +} + +void machine_shutdown(void) +{ +} + +void machine_crash_shutdown(struct pt_regs *regs) +{ +} + +void machine_kexec(struct kimage *image) +{ + unsigned long page_list; + unsigned long reboot_code_buffer_phys; + void *reboot_code_buffer; + + + page_list = image->head & PAGE_MASK; + + /* we need both effective and real address here */ + reboot_code_buffer_phys = + page_to_pfn(image->control_code_page) << PAGE_SHIFT; + reboot_code_buffer = page_address(image->control_code_page); + + /* Prepare parameters for reboot_code_buffer*/ + kexec_start_address = image->start; + kexec_indirection_page = page_list; + kexec_mach_type = machine_arch_type; + + /* copy our kernel relocation code to the control code page */ + memcpy(reboot_code_buffer, + relocate_new_kernel, relocate_new_kernel_size); + + + flush_icache_range(reboot_code_buffer, + reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE); + printk(KERN_INFO "Bye!\n"); + + cpu_proc_fin(); + setup_mm_for_reboot(0); /* mode is not used, so just pass 0*/ + cpu_reset(reboot_code_buffer_phys); +} Index: linux-2.6.16/arch/arm/kernel/Makefile =================================================================== --- linux-2.6.16.orig/arch/arm/kernel/Makefile 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/kernel/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -21,6 +21,7 @@ obj-$(CONFIG_PCI) += bios32.o obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o +obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o obj-$(CONFIG_IWMMXT) += iwmmxt.o AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt Index: linux-2.6.16/arch/arm/kernel/relocate_kernel.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/kernel/relocate_kernel.S 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,74 @@ +/* + * relocate_kernel.S - put the kernel image in place to boot + */ + +#include + + .globl relocate_new_kernel +relocate_new_kernel: + + ldr r0,kexec_indirection_page + ldr r1,kexec_start_address + + +0: /* top, read another word for the indirection page */ + ldr r3, [r0],#4 + + /* Is it a destination page. Put destination address to r4 */ + tst r3,#1,0 + beq 1f + bic r4,r3,#1 + b 0b +1: + /* Is it an indirection page */ + tst r3,#2,0 + beq 1f + bic r0,r3,#2 + b 0b +1: + + /* are we done ? */ + tst r3,#4,0 + beq 1f + b 2f + +1: + /* is it source ? */ + tst r3,#8,0 + beq 0b + bic r3,r3,#8 + mov r6,#1024 +9: + ldr r5,[r3],#4 + str r5,[r4],#4 + subs r6,r6,#1 + bne 9b + b 0b + +2: + /* Jump to relocated kernel */ + mov lr,r1 + mov r0,#0 + ldr r1,kexec_mach_type + mov r2,#0 + mov pc,lr + + .globl kexec_start_address +kexec_start_address: + .long 0x0 + + .globl kexec_indirection_page +kexec_indirection_page: + .long 0x0 + + .globl kexec_mach_type +kexec_mach_type: + .long 0x0 + +relocate_new_kernel_end: + + .globl relocate_new_kernel_size +relocate_new_kernel_size: + .long relocate_new_kernel_end - relocate_new_kernel + + Index: linux-2.6.16/arch/arm/kernel/setup.c =================================================================== --- linux-2.6.16.orig/arch/arm/kernel/setup.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/kernel/setup.c 2007-04-12 10:36:19.000000000 +0200 @@ -768,6 +768,16 @@ memcpy(saved_command_line, from, COMMAND_LINE_SIZE); saved_command_line[COMMAND_LINE_SIZE-1] = '\0'; parse_cmdline(cmdline_p, from); + +#ifdef CONFIG_EFB_DEBUG + /* + * paging_init is going to wipe out any section other than the + * kernel code and data allocated in head.S so the framebuffer + * is going not to be available during paging_init. + */ + efb_disable(); +#endif + paging_init(&meminfo, mdesc); request_standard_resources(&meminfo, mdesc); Index: linux-2.6.16/arch/arm/kernel/traps.c =================================================================== --- linux-2.6.16.orig/arch/arm/kernel/traps.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/kernel/traps.c 2007-04-12 10:36:19.000000000 +0200 @@ -55,10 +55,10 @@ void dump_backtrace_entry(unsigned long where, unsigned long from) { #ifdef CONFIG_KALLSYMS - printk("[<%08lx>] ", where); +/* printk("[<%08lx>] ", where); */ print_symbol("(%s) ", where); - printk("from [<%08lx>] ", from); - print_symbol("(%s)\n", from); +/* printk("from [<%08lx>] ", from); */ +/* print_symbol("(%s)\n", from); */ #else printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); #endif @@ -205,7 +205,7 @@ printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter); print_modules(); - __show_regs(regs); +/* __show_regs(regs); */ printk("Process %s (pid: %d, stack limit = 0x%p)\n", tsk->comm, tsk->pid, thread + 1); @@ -547,7 +547,7 @@ current->pid, current->comm, no); dump_instr(regs); if (user_mode(regs)) { - __show_regs(regs); +/* __show_regs(regs); */ c_backtrace(regs->ARM_fp, processor_mode(regs)); } } Index: linux-2.6.16/arch/arm/lib/backtrace.S =================================================================== --- linux-2.6.16.orig/arch/arm/lib/backtrace.S 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/lib/backtrace.S 2007-04-12 10:36:19.000000000 +0200 @@ -103,7 +103,9 @@ .align 0 1007: ldr r0, =.Lbad mov r1, frame +#ifdef CONFIG_PRINTK bl printk +#endif LOADREGS(fd, sp!, {r4 - r8, pc}) .ltorg .previous @@ -138,12 +140,16 @@ ldr r2, [stack], #-4 mov r1, reg adr r0, .Lfp +#ifdef CONFIG_PRINTK bl printk +#endif 2: subs reg, reg, #1 bpl 1b teq r7, #0 adrne r0, .Lcr +#ifdef CONFIG_PRINTK blne printk +#endif mov r0, stack LOADREGS(fd, sp!, {instr, reg, stack, r7, pc}) Index: linux-2.6.16/arch/arm/mach-omap1/clock.c =================================================================== --- linux-2.6.16.orig/arch/arm/mach-omap1/clock.c 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/arch/arm/mach-omap1/clock.c 2007-04-12 10:36:19.000000000 +0200 @@ -267,11 +267,13 @@ if (!ptr->rate) return -EINVAL; +#if 0 /* * In most cases we should not need to reprogram DPLL. * Reprogramming the DPLL is tricky, it must be done from SRAM. */ omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val); +#endif ck_dpll1.rate = ptr->pll_rate; propagate_rate(&ck_dpll1); @@ -774,12 +776,13 @@ omap_writew(1, ARM_RSTCT2); omap_writew(0x400, ARM_IDLECT1); + /* * According to OMAP5910 Erratum SYS_DMA_1, bit DMACK_REQ (bit 8) * of the ARM_IDLECT2 register must be set to zero. The power-on * default value of this bit is one. */ - omap_writew(0x0000, ARM_IDLECT2); /* Turn LCD clock off also */ + omap_writew(0x0008, ARM_IDLECT2); /* But keep LCD clock active ... */ /* * Only enable those clocks we will need, let the drivers Index: linux-2.6.16/arch/arm/mach-omap1/clock.h =================================================================== --- linux-2.6.16.orig/arch/arm/mach-omap1/clock.h 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/arch/arm/mach-omap1/clock.h 2007-04-12 10:36:19.000000000 +0200 @@ -182,7 +182,7 @@ static struct clk arm_ck = { .name = "arm_ck", .parent = &ck_dpll1, - .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | CLOCK_IN_OMAP730 | CLOCK_IN_OMAP310 | RATE_CKCTL | RATE_PROPAGATES | ALWAYS_ENABLED, .rate_offset = CKCTL_ARMDIV_OFFSET, @@ -196,7 +196,7 @@ .name = "armper_ck", .parent = &ck_dpll1, .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | - CLOCK_IN_OMAP310 | RATE_CKCTL | + CLOCK_IN_OMAP310 | CLOCK_IN_OMAP730 | RATE_CKCTL | CLOCK_IDLE_CONTROL, .enable_reg = (void __iomem *)ARM_IDLECT2, .enable_bit = EN_PERCK, @@ -715,6 +715,20 @@ .disable = &omap1_clk_disable_generic, }; +static struct clk mmc_ck_730 = { + .name = "mmc_ck", + .id = 3, + /* Functional clock is direct from ULPD, interface clock is ARMPER */ + .parent = &armper_ck.clk, + .rate = 48000000, + .flags = CLOCK_IN_OMAP730 | + RATE_FIXED | ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT, + .enable_reg = (void __iomem *)SOFT_REQ_REG, + .enable_bit = 12, + .enable = &omap1_clk_enable_generic, + .disable = &omap1_clk_disable_generic, +}; + static struct clk virtual_ck_mpu = { .name = "mpu", .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | @@ -799,6 +813,7 @@ &bclk_1510, &bclk_16xx, &mmc1_ck, &mmc2_ck, + &mmc_ck_730, /* Virtual clocks */ &virtual_ck_mpu, &i2c_fck, Index: linux-2.6.16/arch/arm/mach-omap1/efb.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/mach-omap1/efb.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,200 @@ +/* +** efb.c for efb in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Wed Apr 5 18:55:08 2006 nico +** Last update Thu May 11 13:50:52 2006 nico +*/ + +/* + * + * early frame buffer debug routines. + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +#include +#include + +static void efb_move_screen_up(void); +static void blit_char(unsigned int x, unsigned int y, char c); + +#define PIX16(R, G, B) (((R >> 3) << 11) | ((G >> 2) << 5) | ((B >> 3))) + + +/* 0xD0000000 is where OMAP730_SRAM is mapped by head.S */ +/* + * Windows CE seems to have physical frame buffer mapped to + * 0x20001020. we try to keep this space available at virtual address + * 0xD0001020 during kernel boot. This is strange as this is not page + * aligned. However even if I don't know how to do it, there must be a + * way to configure the framebuffer location inside the sram. + * + * TODO: see omap730 TRM. + */ +static unsigned short __initdata *vram = (unsigned short *)0xD0001020; + +/* + * no attribute since it is used by efb_putstr which has no + * attribute ... + */ +static int enabled = 0; + +unsigned int efb_width; +unsigned int efb_height; + +void __init efb_init(void) +{ + unsigned int i; + + /* + * only htc typhoon is known to have 176x220 screen. all other + * machines have 320x240 screens. + */ + if (machine_is_typhoon()) { + efb_width = 176; + efb_height = 220; + } else { + efb_width = 240; + efb_height = 320; + } + + for (i = 0; i < efb_width * efb_height; ++i) { + vram[i] = 0; + } + + efb_enable(); +} + + +/* + * Write a pixel with color (r,g,b) at screen coordinate (x,y) + */ +static void __init dbg_pix(int x, int y, int r, int g, int b) +{ + unsigned short pix = PIX16(r, g, b); + + vram[y * efb_width + x] = pix; +} + + +static __initdata int x = 1; +static __initdata int y = 0; + + +/* + * put string s to the frame buffer using the 5x5 font. + * + * this functions has no __init attribute since it is can be called in printk. + */ +void efb_putstr(const char *s) +{ + if (enabled == 0) + return ; + + while (*s) { + if (*s == '\n') + goto newline; + blit_char(x, y, *s); + x += 6; + + if (x + 6 > efb_width) { + newline: + if (y + 6 > efb_height - 6) + efb_move_screen_up(); + else + y += 6; + x = 1; + } + ++s; + } +} + +#define NR_LINE (efb_height / 6) + +#define FONT_WIDTH 5 +#define FONT_HEIGHT 5 + +/* + * blit a char on the screen at position (x,y) + */ +static __init void blit_char(unsigned int x, unsigned int y, char c) +{ + const char *cur_font; + int i, j; + + /* + * do not blit glyph if some part of it are ofscreen. + */ + if (x + FONT_WIDTH > efb_width) + return; + if (y + FONT_HEIGHT > efb_height) + return; + + cur_font = efb_font[(unsigned int)c]; + for (j= 0; j < FONT_HEIGHT; ++j) { + for (i = 0; i < FONT_WIDTH; ++i) { + if (cur_font[j * FONT_WIDTH + i]) + dbg_pix(x + i, y + j, 255, 255, 255); + else + dbg_pix(x + i, y + j, 0, 0, 0); + } + } +} + +/* + * perform some basic one way scrolling. + * + * for each line l do + * clear line l + * break if l is the last line + * copy next line over l + * done + * + * It is not possible to scroll back. + */ +static void __init efb_move_screen_up(void) +{ + int i, k; + int start1, start2; + + for (k = 0; 1; ++k) { + start1 = efb_width * 6 * k; + start2 = efb_width * 6 * (k + 1); + /* clear the n current line */ + for (i = 0; i < 6 * efb_width; ++i) + vram[start1 + i] = 0; + if (k == NR_LINE - 1) + break; + /* copy the next line to the current line */ + for (i = 0; i < 6 * efb_width; ++i) + vram[start1 + i] = vram[start2 +i]; + } +} + +void __init efb_disable(void) +{ + enabled = 0; +} + +void __init efb_enable(void) +{ + enabled = 1; +} Index: linux-2.6.16/arch/arm/mach-omap1/efb-font5x5.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/mach-omap1/efb-font5x5.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,982 @@ + +/* + * file generated by makecfont.pl and bmp2c + * resources for a simple 5x5 font + */ + +const char efb_font[255][25] = { + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* lpar.bmp */ + { + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* rpar.bmp */ + { + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* star.bmp */ + { + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* dash.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + }, + /* dot.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* slash.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* 0.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* 1.bmp */ + { + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* 2.bmp */ + { + 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* 3.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* 4.bmp */ + { + 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* 5.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, + }, + /* 6.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* 7.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* 8.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* 9.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* ddot.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* not available */ + { 0x00 }, + /* lchev.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, + }, + /* eq.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + }, + /* rchev.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* A.bmp */ + { + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* B.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* C.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* D.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* E.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* F.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* G.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* H.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* I.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* J.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* K.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* L.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* M.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* N.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* O.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* P.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* Q.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, + }, + /* R.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* S.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* T.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* U.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* V.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* W.bmp */ + { + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + }, + /* X.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* Y.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* Z.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* ldash.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* aslash.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, + }, + /* rdash.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* not available */ + { 0x00 }, + /* _.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* not available */ + { 0x00 }, + /* a.bmp */ + { + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* b.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* c.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* d.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* e.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* f.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* g.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* h.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* i.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* j.bmp */ + { + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* k.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* l.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* m.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* n.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* o.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* p.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* q.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, + }, + /* r.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* s.bmp */ + { + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* t.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* u.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, + }, + /* v.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* w.bmp */ + { + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + }, + /* x.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xFF, + }, + /* y.bmp */ + { + 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00, + }, + /* z.bmp */ + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }, + /* not available */ + { 0x00 }, + /* pipe.bmp */ + { + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, + }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, + /* not available */ + { 0x00 }, +}; + +/* c'étais vraiment tres intéressant */ Index: linux-2.6.16/arch/arm/mach-omap1/io.c =================================================================== --- linux-2.6.16.orig/arch/arm/mach-omap1/io.c 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/arch/arm/mach-omap1/io.c 2007-04-12 10:36:19.000000000 +0200 @@ -20,6 +20,8 @@ #include #include +#include + extern int omap1_clk_init(void); extern void omap_check_revision(void); extern void omap_sram_init(void); @@ -49,7 +51,7 @@ .pfn = __phys_to_pfn(OMAP730_DSPREG_START), .length = OMAP730_DSPREG_SIZE, .type = MT_DEVICE - } + }, }; #endif @@ -143,4 +145,3 @@ omap1_mux_init(); } - Index: linux-2.6.16/arch/arm/mach-omap1/Kconfig =================================================================== --- linux-2.6.16.orig/arch/arm/mach-omap1/Kconfig 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/arch/arm/mach-omap1/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -171,3 +171,10 @@ source "arch/arm/plat-omap/dsp/Kconfig" +source "arch/arm/mach-omap1/tornado/Kconfig" + +config EFB_DEBUG + bool "Early Frame Buffer debugging routines" + depends on MACH_TORNADO + help + Output in the framebuffer of the HTC phones as early as possible (experimental, ...). Index: linux-2.6.16/arch/arm/mach-omap1/Makefile =================================================================== --- linux-2.6.16.orig/arch/arm/mach-omap1/Makefile 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/arch/arm/mach-omap1/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -37,3 +37,5 @@ led-$(CONFIG_MACH_OMAP_OSK) += leds-osk.o obj-$(CONFIG_LEDS) += $(led-y) +obj-y += tornado/ +obj-$(CONFIG_EFB_DEBUG) += efb.o efb-font5x5.o Index: linux-2.6.16/arch/arm/mach-omap1/tornado/Kconfig =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/mach-omap1/tornado/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,5 @@ +config MACH_TORNADO + bool "HTC Tornado Support" + depends on ARCH_OMAP730 + help + HTC Tornado smartphone support (AKA SPV C600, QTEK 8310, ...) Index: linux-2.6.16/arch/arm/mach-omap1/tornado/Makefile =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/mach-omap1/tornado/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,11 @@ +## +## Makefile for linux-on-tornado in /home/nico/work/tornado/linux-tornado +## +## Made by nico +## Login +## +## Started on Wed Apr 5 17:20:58 2006 nico +## Last update Thu May 11 12:34:33 2006 nico +## + +obj-$(CONFIG_MACH_TORNADO) += tornado.o Index: linux-2.6.16/arch/arm/mach-omap1/tornado/tornado.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/arch/arm/mach-omap1/tornado/tornado.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,242 @@ +/* +** tornado.c for linux-on-tornado in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Wed Apr 5 17:20:24 2006 nico +** Last update Fri Jul 7 01:31:54 2006 nico +*/ + +/* + * + * HTC Tornado init stuff + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define TORNADO_GPIO_DM 35 +#define TORNADO_GPIO_DP 36 + +static void __init +tornado_map_io(void) +{ + + omap1_map_common_io(); + +#ifdef CONFIG_EFB_DEBUG + /* + * reenable simple framebuffer output on HTC typhoon: + * now safe to do it: sram has been remapped. + */ + efb_enable(); +#endif + printk("tornado_map_io done.\n"); +} + +static void __init +tornado_usb_enable(void) +{ + unsigned int tries = 20; + printk("trying to enable USB.\n"); + + /* force USB_EN GPIO to 0 */ + do { + omap_set_gpio_direction(33, 0); /* output */ + omap_set_gpio_dataout(33, 0); /* low */ + --tries; + } while(omap_get_gpio_datain(33) && tries); + if (tries) { + printk("unable to reset USB_EN GPIO after 20 tries.\n"); + printk("I will try to continue anyway: USB may not be available.\n"); + } + printk("USB_EN to 0 after %i tries.\n", tries); + + omap_set_gpio_dataout(73, 0); + + omap_set_gpio_direction(TORNADO_GPIO_DM, 1); /* input */ + + /* get uart control from GSM */ + + /* select GPIO35 for D_MCLK_OUT */ + /* select GPIO36 for D_CRESET */ + omap_writel(omap_readl(OMAP730_IO_CONF_3) & 0xffffffcc, OMAP730_IO_CONF_3); + omap_writel(omap_readl(OMAP730_IO_CONF_3) | 0x000000cc, OMAP730_IO_CONF_3); + + + omap_set_gpio_direction(TORNADO_GPIO_DP, 1); /* input */ + + /* select D_DM, D_DP for D_DM and disable PE_DM control */ + omap_writel(omap_readl(OMAP730_IO_CONF_2) & 0xff1fffff, OMAP730_IO_CONF_2); + omap_writel(omap_readl(OMAP730_IO_CONF_2) | 0x00100000, OMAP730_IO_CONF_2); + mdelay(100); + + /* select USB_VBUSI for D_VBUSI, enable PE_VIBUSI pull enable control */ + omap_writel(omap_readl(OMAP730_IO_CONF_2) & 0xf1ffffff, OMAP730_IO_CONF_2); + omap_writel(omap_readl(OMAP730_IO_CONF_2) | 0x01000000, OMAP730_IO_CONF_2); + + /* set USB_VBUS_CTRL */ + omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 25), OMAP730_MODE_1); +} + +static void __init +tornado_usb_otg(void) +{ + /* clock configuration */ + omap_writew(omap_readw(ULPD_SOFT_REQ) | (1 << 8) | SOFT_USB_CLK_REQ, ULPD_SOFT_REQ); + + // clk_enable(&l3_ocpi_ck); + omap_writew(omap_readw(ARM_IDLECT3) | (1 << 0), ARM_IDLECT3); + + /* pin muxing */ + omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 2), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 3), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 15), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 23), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 26), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 25), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 24), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 10), OMAP730_MODE_1); + omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 11), OMAP730_MODE_1); +} + +static struct omap_usb_config tornado_usb_config __initdata = +{ + .register_dev = 1, + .register_host = 0, + .otg = 0, + .hmc_mode = 4, + .pins[0] = 2, + .pins[1] = 0, + .pins[2] = 0, +}; + +static struct omap_mmc_config tornado_mmc_config __initdata = +{ + .mmc[0] = { + .enabled = 1, + .nomux = 1, + .wire4 = 1, + .power_pin = -1, + .switch_pin = -1, + } +}; + +static struct omap_board_config_kernel tornado_config[] = +{ + { OMAP_TAG_USB, &tornado_usb_config }, + { OMAP_TAG_MMC, &tornado_mmc_config }, +}; + +static void __init +tornado_mmc_init(void) +{ + unsigned int tries; + +# define OMAP_MMC_REG_SYSC (0xfffb7800 + 0x32) +# define OMAP_MMC_REG_SYSS (0xfffb7800 + 0x34) +# define OMAP_MMC_REG_CTO (0xfffb7800 + 0x0e) +# define OMAP_MMC_REG_DTO (0xfffb7800 + 0x1c) + + /* put mmc host into reset ... */ + omap_writew(1, OMAP_MMC_REG_SYSC); + + tries = 100; + while (omap_readw(OMAP_MMC_REG_SYSS) == 0 && tries) { + mdelay(50); + --tries; + } + printk("MMC host reset done: remaining tries: %i\n", tries); + + /* force mode 0 for D_SMC_DAT3, D_SMC_DAT2, D_SMC, no pull up enable */ + omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 8), OMAP730_IO_CONF_2); + omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 12), OMAP730_IO_CONF_2); + omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 16), OMAP730_IO_CONF_2); +} + +struct platform_device gsm_device = { + .name = "typhoon-gsm", + .id = 1 +}; + +static struct platform_device *devices[] __initdata = { + &gsm_device, +}; + +static void __init +tornado_init(void) +{ + printk("Tornado init.\n"); + omap_board_config = tornado_config; + omap_board_config_size = ARRAY_SIZE(tornado_config); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + + if (omap_readl(OMAP_WDT_TIMER_MODE) & 0x8000) { + /* + * disable a potentially running watchdog timer before + * it kills us. + */ + printk("OMAP730 Watchdog seems to be activated, disabling it for now.\n"); + omap_writel(0xF5, OMAP_WDT_TIMER_MODE); + omap_writel(0xA0, OMAP_WDT_TIMER_MODE); + } + + tornado_usb_otg(); + tornado_usb_enable(); + tornado_mmc_init(); +} + +static void __init +tornado_init_irq(void) +{ + printk("tornado_init_irq.\n"); + omap1_init_common_hw(); + omap_init_irq(); + omap_gpio_init(); +} + +MACHINE_START(TORNADO, "HTC Tornado") + /* Maintainer: Nicolas Schichan */ + .phys_io = 0xfff00000, + .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, + .boot_params = 0x10000100, + .map_io = tornado_map_io, + .init_irq = tornado_init_irq, + .init_machine = tornado_init, + .timer = &omap_timer, +MACHINE_END Index: linux-2.6.16/arch/arm/plat-omap/sram.c =================================================================== --- linux-2.6.16.orig/arch/arm/plat-omap/sram.c 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/arch/arm/plat-omap/sram.c 2007-04-12 10:36:19.000000000 +0200 @@ -33,9 +33,12 @@ #define OMAP2_SRAM_PUB_VA 0xd0000800 #if defined(CONFIG_ARCH_OMAP24XX) -#define SRAM_BOOTLOADER_SZ 0x00 +# define SRAM_BOOTLOADER_SZ 0x00 +#elif defined(CONFIG_EFB_DEBUG) +/* reserve memory for frame buffer too ... */ +# define SRAM_BOOTLOADER_SZ (0x1020 + 320 * 240 * 2) #else -#define SRAM_BOOTLOADER_SZ 0x80 +# define SRAM_BOOTLOADER_SZ 0x80 #endif #define VA_REQINFOPERM0 IO_ADDRESS(0x68005048) Index: linux-2.6.16/arch/arm/plat-omap/usb.c =================================================================== --- linux-2.6.16.orig/arch/arm/plat-omap/usb.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/plat-omap/usb.c 2007-04-12 10:36:19.000000000 +0200 @@ -123,11 +123,11 @@ * - only peripherals may use the internal D+/D- pulldowns * - OTG support on this port not yet written */ - - USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4); - if (!is_device) - USB_TRANSCEIVER_CTRL_REG |= (3 << 1); - + if (!cpu_is_omap730()) { + USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4); + if (!is_device) + USB_TRANSCEIVER_CTRL_REG |= (3 << 1); + } return 3 << 16; } @@ -457,6 +457,11 @@ syscon &= ~DEV_IDLE_EN; udc_device.dev.platform_data = config; /* FIXME patch IRQ numbers for omap730 */ + if (cpu_is_omap730()) { + udc_resources[1].start = INT_730_USB_GENI; + udc_resources[2].start = INT_730_USB_NON_ISO; + udc_resources[3].start = INT_730_USB_ISO; + } status = platform_device_register(&udc_device); if (status) pr_debug("can't register UDC device, %d\n", status); Index: linux-2.6.16/arch/arm/tools/mach-types =================================================================== --- linux-2.6.16.orig/arch/arm/tools/mach-types 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/arch/arm/tools/mach-types 2007-04-12 10:36:19.000000000 +0200 @@ -969,3 +969,4 @@ fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956 dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957 gesbc9312 MACH_GESBC9312 GESBC9312 958 +htc_tornado MACH_TORNADO TORNADO 6665 Index: linux-2.6.16/ChangeLog =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/ChangeLog 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,3 @@ +2006-04-10 nico + + * wizard-keypad.c: support for arrow keys (GPIO based). Index: linux-2.6.16/drivers/char/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/char/Kconfig 2007-04-12 10:36:08.000000000 +0200 +++ linux-2.6.16/drivers/char/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -678,6 +678,21 @@ If unsure, say N. +config TORNADO_VIBRATOR + tristate "HTC Tornado vibrator" + depends on MACH_TORNADO + help + HTC Tornado vibrator support. supports for misc + device with minor number 240. implements two IOCTLs: + VIBRATOR_ENABLE and VIBRATOR_DISABLE. + +config TORNADO_LEDS + tristate "HTC Tornado led driver" + depends on MACH_TORNADO + help + HTC Tornado led driver. misc device with minor + number 241. + config NVRAM tristate "/dev/nvram support" depends on ATARI || X86 || ARM || GENERIC_NVRAM Index: linux-2.6.16/drivers/char/Makefile =================================================================== --- linux-2.6.16.orig/drivers/char/Makefile 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/char/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -97,6 +97,10 @@ obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o obj-$(CONFIG_TCG_TPM) += tpm/ + +obj-$(CONFIG_TORNADO_VIBRATOR) += tornado-vibrator.o +obj-$(CONFIG_TORNADO_LEDS) += tornado-leds.o + # Files generated that shall be removed upon make clean clean-files := consolemap_deftbl.c defkeymap.c qtronixmap.c Index: linux-2.6.16/drivers/char/tornado-leds.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/char/tornado-leds.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,253 @@ +/* +** tornado-leds.c for leds in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Mon Apr 17 11:19:59 2006 nico +** Last update Thu May 25 15:32:23 2006 nico +*/ + +/* + * + * HTC Tornado LED driver. + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +#include +#include +#include +#include +#include + +#include + +#define LEDS_MINOR 241 + +/* + * ioctl definitions. + */ +#define IOCTL_LED_ENABLE 0x4242 /* param: color */ +#define IOCTL_LED_BLINK 0x4243 /* param: color */ +#define IOCTL_LED_DISABLE 0x4244 /* no param */ +#define IOCTL_KPLED_ENABLE 0x4245 /* no param */ +#define IOCTL_KPLED_DISABLE 0x4246 /* no param */ + +#define PARAM_LED_RED 0x666 +#define PARAM_LED_GREEN 0x667 +#define PARAM_LED_BLUE 0x668 + +/* + * hw def + */ +#define TORNADO_LED_BASE 0xFFFBA800 +/* PM Reg: enable led clock when set to 1 */ +#define TORNADO_LED_PMR 0xFFFBA801 + +/* TORNADO_LED_ENABLE register layout */ +/* + bit 7: ON + bit 6: BLINK + bit 5-3: off time. + bit 0-2: on time. + +*/ + +#define TORNADO_GPIO_LED_GREEN 79 +#define TORNADO_GPIO_LED_RED 128 +#define TORNADO_GPIO_LED_BLUE 140 +#define TORNADO_GPIO_KPLED 16 + + +/* in TORNADO_LED_ENABLE */ +#define LED_ON (1 << 7) +#define LED_BLINK (1 << 6) +#define LED_ONTIME(x) ((x) & 0x7) +#define LED_OFFTIME(x) (((x) & 0x7) << 3) + +#define LED_BASE_REG __REG8(TORNADO_LED_BASE) +#define LED_PM_REG __REG8(TORNADO_LED_PMR) + +static unsigned long use; + +static int +tornado_leds_open(struct inode *inode, struct file *file) +{ + /* ensure exclusive access */ + if (test_and_set_bit(0, &use)) + return -EBUSY; + + return 0; +} + +static int led_set_color(unsigned long color) +{ + switch (color) { + case PARAM_LED_RED: + omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 1); + omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0); + break; + case PARAM_LED_GREEN: + omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 1); + omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0); + break; + case PARAM_LED_BLUE: + omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 1); + break; + default: + return -EINVAL; + } + return 0; +} + +/* + * FIXME: on the HTC Tornado, the blue led is not the same as the + * red/green led, there may be some gpio changes / special register + * settings for this. + */ +static int +tornado_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case IOCTL_LED_ENABLE: + LED_PM_REG = 0; /* disable blink clock */ + LED_BASE_REG = LED_ON; + return led_set_color(arg); + + case IOCTL_LED_BLINK: + LED_PM_REG = 1; + LED_BASE_REG = 0x7F; /* LED_BLINK | LED_ONTIME(1) | LED_OFFTIME(3); */ + printk("IOCTL_LED_BLINK (reg = %02x).\n", LED_BASE_REG); + return led_set_color(arg); + + case IOCTL_LED_DISABLE: + LED_PM_REG = 0; + LED_BASE_REG = 0; + omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0); + break; + + case IOCTL_KPLED_ENABLE: + omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 1); + break; + + case IOCTL_KPLED_DISABLE: + omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 0); + break; + default: + return -EINVAL; + } + return 0; +} + +static int +tornado_leds_release(struct inode *inode, struct file *file) +{ + use = 0; + return 0; +} + +struct file_operations tornado_leds_fops = +{ + .owner = THIS_MODULE, + .ioctl = tornado_leds_ioctl, + .open = tornado_leds_open, + .release = tornado_leds_release, +}; + +struct miscdevice tornado_leds_device = +{ + .minor = LEDS_MINOR, + .name = "tornado-leds", + .fops = &tornado_leds_fops, +}; + +static int __init +tornado_leds_init(void) +{ + int ret; + + omap_request_gpio(TORNADO_GPIO_LED_RED); + omap_request_gpio(TORNADO_GPIO_LED_GREEN); + omap_request_gpio(TORNADO_GPIO_LED_BLUE); + omap_request_gpio(TORNADO_GPIO_KPLED); + + ret = misc_register(&tornado_leds_device); + if (ret) + return ret; + + /* + * init hw + */ + /* clear GSM_LPG1 and select GPIO_140 & LPG1 pullup enable control */ + omap_writel(omap_readl(OMAP730_IO_CONF_10) & ~0x20, OMAP730_IO_CONF_10); + omap_writel(omap_readl(OMAP730_IO_CONF_10) | 0xd0, OMAP730_IO_CONF_10); + +/* omap_set_gpio_dataout(140, 1); */ + + /* clear GSM_LPG2 and select GPIO_141 & LPG2 pullup enable control */ + omap_writel(omap_readl(OMAP730_IO_CONF_10) & ~0x200, OMAP730_IO_CONF_10); + omap_writel(omap_readl(OMAP730_IO_CONF_10) | 0xd00, OMAP730_IO_CONF_10); + +/* omap_set_gpio_dataout(141, 1); */ + + omap_set_gpio_direction(TORNADO_GPIO_LED_RED, 0); /* out */ + omap_set_gpio_direction(TORNADO_GPIO_LED_GREEN, 0); /* out */ + omap_set_gpio_direction(TORNADO_GPIO_LED_BLUE, 0); /* out */ + omap_set_gpio_direction(TORNADO_GPIO_KPLED, 0); /* out */ + + /* enable lpg1 and lpg2 */ + omap_writel(omap_readl(OMAP730_MODE_1) | (3 << 28), OMAP730_MODE_1); + + /* disable led activation */ + LED_PM_REG = 0; + LED_BASE_REG = 0; + omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0); + omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0); + omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 0); + + printk("HTC Tornado led driver.\n"); + return 0; +} + +static void __exit +tornado_leds_exit(void) +{ + misc_deregister(&tornado_leds_device); + + /* disable lpg 1 and lpg2 */ + omap_writel(omap_readl(OMAP730_MODE_1) & ~(3 << 28), OMAP730_MODE_1); + LED_BASE_REG = 0; + LED_PM_REG = 0; + omap_free_gpio(TORNADO_GPIO_LED_RED); + omap_free_gpio(TORNADO_GPIO_LED_GREEN); + omap_free_gpio(TORNADO_GPIO_LED_BLUE); + omap_free_gpio(TORNADO_GPIO_KPLED); +} + +module_init(tornado_leds_init); +module_exit(tornado_leds_exit); + +MODULE_AUTHOR("Nicolas Schichan"); +MODULE_LICENSE("GPL"); Index: linux-2.6.16/drivers/char/tornado-vibrator.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/char/tornado-vibrator.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,144 @@ +/* +** tornado-vibrator.c for vibrator in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Mon Apr 10 15:21:27 2006 nico +** Last update Thu May 25 13:44:23 2006 nico +*/ + +#include +#include +#include +#include +#include + +#include +#include "tornado-vibrator.h" + +/* + * + * HTC Tornado vibrator driver. + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +/* + * quite a simple driver: only put GPIO 34 in OUT mode and set it to 1 + * to enable the vibrator or 0 to disable it. + */ + +static long use; + +/* + * ensure only process opens the file, ad set GPIO direction to 0 (OUT) + */ +static int +tornado_vibrator_open(struct inode *inode, struct file *file) +{ + if (test_and_set_bit(0, &use)) + return -EBUSY; + + + /* out GPIO */ + omap_set_gpio_direction(TORNADO_VIBRATOR_GPIO, 0); + return 0; +} + +/* + * device ioctl handler. only VIBRATOR_ENABLE or VIBRATOR_DISABLE are + * recognized. + */ +static int +tornado_vibrator_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case VIBRATOR_ENABLE: + omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 1); + return 0; + case VIBRATOR_DISABLE: + omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 0); + return 0; + default: + return -EOPNOTSUPP; + } +} + +/* + * set use variable to zero so that the next open on the file + * successes. + */ +static int +tornado_vibrator_release(struct inode *inode, struct file *file) +{ + use = 0; + return 0; +} + +struct file_operations tornado_vibrator_fops = +{ + .owner = THIS_MODULE, + .ioctl = tornado_vibrator_ioctl, + .open = tornado_vibrator_open, + .release = tornado_vibrator_release, +}; + +struct miscdevice tornado_vibrator_dev = +{ + .minor = VIBRATOR_MINOR, + .name = "tornado-vibrator", + .fops = &tornado_vibrator_fops, +}; + +/* + * make sure we can use the GPIO and register the device. + */ +static int __init +tornado_vibrator_init(void) +{ + int ret; + + if (omap_request_gpio(TORNADO_VIBRATOR_GPIO)) + return -EBUSY; + + ret = misc_register(&tornado_vibrator_dev); + if (ret) + return ret; + + printk("HTC Tornado Vibrator driver.\n"); + return 0; +} + +/* + * deregister device and free the GPIO. + */ +static void __init +tornado_vibrator_exit(void) +{ + misc_deregister(&tornado_vibrator_dev); + omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 0); + omap_free_gpio(TORNADO_VIBRATOR_GPIO); +} + +module_init(tornado_vibrator_init); +module_exit(tornado_vibrator_exit); + +MODULE_AUTHOR("Nicolas Schichan"); +MODULE_LICENSE("GPL"); Index: linux-2.6.16/drivers/char/tornado-vibrator.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/char/tornado-vibrator.h 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,44 @@ +/* +** tornado-vibrator.h for vibrator in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Mon Apr 10 15:54:33 2006 nico +** Last update Thu May 25 13:44:38 2006 nico +*/ + +/* + * + * HTC Tornado vibrator driver + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + + +#ifndef __TORNADO_VIBRATOR +# define __TORNADO_VIBRATOR + +# define VIBRATOR_ENABLE 0x42 +# define VIBRATOR_DISABLE 0x43 + +# define VIBRATOR_MINOR 240 + +# define TORNADO_VIBRATOR_GPIO 34 + +#endif /* !__TORNADO_VIBRATOR */ Index: linux-2.6.16/drivers/char/vt.c =================================================================== --- linux-2.6.16.orig/drivers/char/vt.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/drivers/char/vt.c 2007-04-12 10:36:19.000000000 +0200 @@ -2155,6 +2155,8 @@ #ifdef CONFIG_VT_CONSOLE +extern int in_printk; + /* * Console on virtual terminal * @@ -2169,6 +2171,7 @@ const ushort *start; ushort cnt = 0; ushort myx; + unsigned char old_color = 0; /* console busy or not yet initialized */ if (!printable || test_and_set_bit(0, &printing)) @@ -2196,6 +2199,11 @@ start = (ushort *)vc->vc_pos; + if (in_printk) { + old_color = vc->vc_color; + vc->vc_color = 0x2; + update_attr(vc); + } /* Contrived structure to try to emulate original need_wrap behaviour * Problems caused when we have need_wrap set on '\n' character */ while (count--) { @@ -2242,6 +2250,10 @@ } } set_cursor(vc); + if (in_printk) { + vc->vc_color = old_color; + update_attr(vc); + } quit: clear_bit(0, &printing); Index: linux-2.6.16/drivers/char/watchdog/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/char/watchdog/Kconfig 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/char/watchdog/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -656,4 +656,10 @@ Support for TI OMAP1610/OMAP1710/OMAP2420 watchdog. Say 'Y' here to enable the OMAP1610/OMAP1710 watchdog timer. +config OMAP730_WATCHDOG + tristate "OMAP730/OMAP850 Watchdog" + depends on WATCHDOG && ARCH_OMAP730 + help + Support for TI OMAP730/OMAP850 Watchdog. + endmenu Index: linux-2.6.16/drivers/char/watchdog/Makefile =================================================================== --- linux-2.6.16.orig/drivers/char/watchdog/Makefile 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/char/watchdog/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -28,6 +28,7 @@ obj-$(CONFIG_IXP2000_WATCHDOG) += ixp2000_wdt.o obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o +obj-$(CONFIG_OMAP730_WATCHDOG) += omap730_wdt.o obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o obj-$(CONFIG_MPCORE_WATCHDOG) += mpcore_wdt.o Index: linux-2.6.16/drivers/char/watchdog/omap730_wdt.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/char/watchdog/omap730_wdt.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,225 @@ +/* +** omap730_wdt.c for linux-typhoon/tornado in /home/nico/work/spvc500/linux-omap-typhoon +** +** Made by nico +** Login +** +** Started on Thu Mar 16 14:42:35 2006 nico +** Last update Thu May 11 13:56:24 2006 nico +*/ + +/* + * + * OMAP730 watchdog driver. + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +/* + * based on omap_wdt.c. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +/* #include */ + +#include + +#include +#include + +#define WDT_EN 0 +#define WDT_DISABLE_ON_CLOSE 1 + +static unsigned long omap_wdt_users; +static struct miscdevice omap_wdt_miscdev; /* Forward declaration */ + +/* + * TRM says that the same value cannot be used to reinitialize the + * watchdog timer, so alternate 0xFFFF 0xFFFE. + */ +static void +omap730_wdt_ping(void) +{ + static int mod = 0; + + if (mod) + omap_writel(0xFFFF, OMAP_WDT_LOAD_TIM); + else + omap_writel(0xFFFE, OMAP_WDT_LOAD_TIM); + + mod = (mod + 1) & 0x1; +} + +static void +omap730_wdt_enable(void) +{ + unsigned long wdt_ctl; + unsigned long arm_idlect2; + + omap_writel(0x8000, OMAP_WDT_TIMER_MODE); + wdt_ctl = omap_readl(OMAP_WDT_TIMER); + + arm_idlect2 = omap_readl(ARM_IDLECT2); + arm_idlect2 |= 0x1; /* enable watchdog clock */ + omap_writel(arm_idlect2, ARM_IDLECT2); + +} + +static void +omap730_wdt_disable(void) +{ + unsigned long arm_idlect2; + + if ((omap_readl(OMAP_WDT_TIMER_MODE) & 0x8000) == 0x8000) { + + arm_idlect2 = omap_readl(ARM_IDLECT2); + arm_idlect2 &= ~0x1; /* disable watchdog clock */ + omap_writel(arm_idlect2, ARM_IDLECT2); + + /* + * sequence required to disable watchdog. do not try + * to disable watchdog if timer is not active (see + * TRM). + */ + omap_writel(0xF5, OMAP_WDT_TIMER_MODE); + omap_writel(0xA0, OMAP_WDT_TIMER_MODE); + } +} + +/* + * Allow only one person to hold it open + */ +static int +omap730_wdt_open(struct inode *inode, struct file *file) +{ + if (test_and_set_bit(WDT_EN, &omap_wdt_users)) + return -EBUSY; + + omap730_wdt_enable(); + return 0; +} + +static int +omap730_wdt_release(struct inode *inode, struct file *file) +{ + if (omap_wdt_users && test_bit(WDT_DISABLE_ON_CLOSE, &omap_wdt_users)) { + printk("omap730_wdt: disabling watchdog.\n"); + omap730_wdt_disable(); + } else { + printk(KERN_CRIT "omap730_wdt: Unexpected close: watchdog still active !\n"); + } + omap_wdt_users = 0; + return 0; +} + +static ssize_t +omap730_wdt_write(struct file *file, const char *data, size_t len, loff_t * ppos) +{ + if (len) { +#ifndef CONFIG_WATCHDOG_NOWAYOUT + size_t i; + + for (i = 0; i < len; ++i) { + char c; + if (get_user(c, data + i)) + return -EFAULT; + if (c == 'V') { + printk("watchdog will be disabled on close.\n"); + set_bit(WDT_DISABLE_ON_CLOSE, (unsigned long*)&omap_wdt_users); + } + } +#endif + omap730_wdt_ping(); + return 1; + } + return 0; +} + +/* + * KISS: only support KEEPALIVE for now. + */ +static int +omap730_wdt_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case WDIOC_KEEPALIVE: + omap730_wdt_ping(); + return 0; + default: + return -ENOIOCTLCMD; + } +} + +static struct file_operations omap_wdt_fops = { + .owner = THIS_MODULE, + .write = omap730_wdt_write, + .ioctl = omap730_wdt_ioctl, + .open = omap730_wdt_open, + .release = omap730_wdt_release, +}; + +static struct miscdevice omap_wdt_miscdev = { + .minor = WATCHDOG_MINOR, + .name = "omap730_wdt", + .fops = &omap_wdt_fops +}; + +static int __init +omap730_wdt_init(void) +{ + int ret; + + ret = misc_register(&omap_wdt_miscdev); + + if (ret) + return ret; + + omap730_wdt_disable(); + printk(KERN_INFO "TI OMAP Watchdog Timer for OMAP730\n"); + + return 0; +} + +static void __exit +omap730_wdt_exit(void) +{ + misc_deregister(&omap_wdt_miscdev); +} + +module_init(omap730_wdt_init); +module_exit(omap730_wdt_exit); + +MODULE_AUTHOR("Nicolas Schichan"); +MODULE_LICENSE("GPL"); Index: linux-2.6.16/drivers/input/keyboard/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/input/keyboard/Kconfig 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/input/keyboard/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -193,6 +193,13 @@ To compile this driver as a module, choose M here: the module will be called omap-keypad. +config TORNADO_KEYPAD + bool "HTC Tornado keypad support" + depends on MACH_TORNADO + help + Say y here if you want to use the keypad of your HTC Tornado + Phone. + config OMAP_PS2 tristate "TI OMAP Innovator 1510 PS/2 keyboard & mouse support" depends on ARCH_OMAP15XX && MACH_OMAP_INNOVATOR Index: linux-2.6.16/drivers/input/keyboard/Makefile =================================================================== --- linux-2.6.16.orig/drivers/input/keyboard/Makefile 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/input/keyboard/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -16,4 +16,5 @@ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o +obj-$(CONFIG_TORNADO_KEYPAD) += tornado-keypad.o obj-$(CONFIG_OMAP_PS2) += innovator_ps2.o Index: linux-2.6.16/drivers/input/keyboard/omap-keypad.c =================================================================== --- linux-2.6.16.orig/drivers/input/keyboard/omap-keypad.c 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/input/keyboard/omap-keypad.c 2007-04-12 10:36:19.000000000 +0200 @@ -43,7 +43,7 @@ #include #include -#undef NEW_BOARD_LEARNING_MODE +#define NEW_BOARD_LEARNING_MODE static void omap_kp_tasklet(unsigned long); static void omap_kp_timer(unsigned long); @@ -292,6 +292,7 @@ struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i; + printk("omap_kp_probe.\n"); if (!pdata->rows || !pdata->cols || !pdata->keymap) { printk(KERN_ERR "No rows, cols or keymap from pdata\n"); return -EINVAL; Index: linux-2.6.16/drivers/input/keyboard/tornado-keypad.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/input/keyboard/tornado-keypad.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,463 @@ +/* +** wizard-keypad.c for wizard-keypad in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Thu Apr 6 17:27:18 2006 nico +** Last update Thu May 25 14:12:34 2006 nico +*/ + +/* + * HTC Tornado keypad driver. + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +/* + * based on omap-keypad.c + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#undef DEBUG +// #define DEBUG + +struct input_dev *tornado_kp_dev = NULL; + +static unsigned char kp_state[8]; +static void tornado_kp_tasklet(unsigned long); +static void tornado_kp_gpio_tasklet(unsigned long); +static DECLARE_TASKLET_DISABLED(kp_tasklet, tornado_kp_tasklet, 0); +static DECLARE_TASKLET_DISABLED(kp_gpio_tasklet, tornado_kp_gpio_tasklet, 0); +static struct timer_list kp_timer; +static struct timer_list kp_gpio_timer; + +unsigned int gpio_mask = 0; +unsigned int kp_gpio = 0; + +#define TORNADO_KP_GPIO 76 + +/* + * key tables. a bit more complex than those in the omap-keypad + * driver: HTC devices keys events tends to trigger two or more + * row/col. + */ +struct htc_key +{ + /* + * input key constant as defined in input.h + */ + int key; + /* rc stands for row/col + * 2 * k -> col; + * 2 * k + 1-> row + */ + char rc[6]; +}; + +struct gpio_key +{ + int key; + unsigned int mask; +}; + +static struct htc_key *htc_keys = NULL; +static unsigned int htc_keys_size = 0; +static struct gpio_key *gpio_keys = 0; +static unsigned int gpio_keys_size= 0; + + +/* + * Tornado stuff ... + */ +static struct htc_key tornado_keys[] = +{ + /* misc keys below the screen */ + { KEY_F3, { 1,3 } }, /* SK1 */ + { KEY_BACKSPACE, { 4,3 } }, + { KEY_HOME, { 3,3 } }, + { KEY_F4, { 2,3 } }, /* SK2 */ + { KEY_F5, { 3,5 } }, /* compose */ + { KEY_ESC, { 4,5 } }, /* hangup */ + + /* digit keys */ + { KEY_1, { 1,0 } }, + { KEY_2, { 2,0 } }, + { KEY_3, { 3,0 } }, + { KEY_4, { 4,0 } }, + { KEY_5, { 1,1 } }, + { KEY_6, { 2,1 } }, + { KEY_7, { 3,1 } }, + { KEY_8, { 4,1 } }, + { KEY_9, { 1,2 } }, + { KEY_0, { 2,2 } }, + { KEY_KPASTERISK, { 3,2 } }, + { KEY_SPACE, { 4,2 } }, + + /* side buttons: currently bogus */ +/* { KEY_CAMERA, { 5,6, 6,6 } }, */ +/* { KEY_VOLUMEUP, { 4,6, 5,6 } }, */ +/* { KEY_VOLUMEDOWN, { 7,6, 6,6 } }, */ +/* { KEY_FAVORITES, { 2,6, 3,6 } } */ + + /* add side keys: photo, volume, ...*/ + +}; + +static struct gpio_key tornado_gpio_keys[] = +{ + { KEY_ENTER, 0x1 }, + { KEY_LEFT, 0x19 }, + { KEY_RIGHT, 0x7 }, + { KEY_UP, 0x15 }, + { KEY_DOWN, 0xB }, +}; + +/* + * handy macros for kp register manipulation + */ +# define KBD_MASKIT __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT) +# define KBC __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBC) +# define KBR_LATCH __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBR_LATCH) + +/* + * return the key code understood by input_report_key + */ +static int +tornado_find_key(unsigned char *new_state, unsigned int *key_state) +{ + int i; + unsigned char changed; + + /* scan normal keypad keys*/ + for (i = 0; i < htc_keys_size; ++i) { + struct htc_key *wk = &htc_keys[i]; + int j; + int pressed = 0; + + for (j = 0; j < 3; ++j) { + int col; + int row; + + col = wk->rc[2 * j]; + row = wk->rc[2 * j + 1]; + + + /* end of key list reached: OK */ + if (row == 0 && col == 0) { + goto ok; + } + + changed = new_state[col] ^ kp_state[col]; + pressed |= new_state[col] & (1 << row); + + + /* if state of the row/col has not changed, try another key */ + if ( (changed & (1 << row)) == 0) { + break ; + } + + if (j == 2) { + ok: + /* + * all events have been scanned for + * this key: we found it ! + */ + *key_state = pressed; + return wk->key; + } + } + } + return -1; +} + +/* + * read row and col register and update the state array. + */ +static void +tornado_scan_keypad(unsigned char *state) +{ + unsigned int col; + + /* scan MPUIO keypad keys */ + KBC = 0xFF; + for (col = 0; col < 8; ++col) { + KBC = ~(1 << col) & 0xFF; + udelay(4); + state[col] = ~(KBR_LATCH) & 0xFF; + } + KBC = 0x00; + + udelay(2); +} + +/* + * returns 1 if a key was pressed or 0 if a key was released. + */ +static int +tornado_key_pressed(unsigned char *state) +{ + unsigned int col; + int key_down = 0; + + for (col = 0; col < 8; ++col) { +#ifdef DEBUG + unsigned char changed; + unsigned int row; + + changed = kp_state[col] ^ state[col]; + + for (row = 0; row < 8; ++row) { + unsigned int pressed; + + pressed = state[col] & (1 << row); + if (changed & (1 << row)) { + printk("key down: %i-%i: %s\n", col, row, pressed ? "pressed" : "released"); + } + + } +#endif + key_down |= state[col]; + } + + return key_down; +} + +/* + * the real work is done here: at the end, if a key is pressed, keep + * kp interrupt masked and schedule a call to the tasklet after a bit + * (mod_timer ...). this is done to avoid the trigger of too much kp + * interrupts . + */ +static void +tornado_kp_tasklet(unsigned long param) +{ + unsigned char state[8]; + int key_down; + int pressed = 0; + int key; + + tornado_scan_keypad(state); + key_down = tornado_key_pressed(state); + + key = tornado_find_key(state, &pressed); + if (key != -1) { + + input_report_key(tornado_kp_dev, key, pressed); + } + + memcpy(kp_state, state, sizeof (kp_state)); + + if (key_down) { + /* + * if a key is down, poll the keypad and keep irq + * disabled + */ + int delay = HZ / 20; + + mod_timer(&kp_timer, jiffies + delay); + } else + KBD_MASKIT = 0; +} + +static void +tornado_kp_timer(unsigned long data) +{ + tasklet_schedule(&kp_tasklet); +} + +/* + * nothing is done here: disable KP interrupts and schedule a call to + * tornado_kp_tasklet. + */ +static irqreturn_t +tornado_kp_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + /* disable keypad interrupts and schedule the tasklet */ + KBD_MASKIT = 1; + tasklet_schedule(&kp_tasklet); + + return IRQ_HANDLED; +} + +static void +tornado_kp_gpio_tasklet(unsigned long param) +{ + unsigned int mask; + unsigned int changed; + unsigned int pressed; + static int old_key = 0; + int key; + int i; + + + /* GPIO are active low ! */ + mask = !omap_get_gpio_datain(76); + mask |= !omap_get_gpio_datain(80) << 1; + mask |= !omap_get_gpio_datain(81) << 2; + mask |= !omap_get_gpio_datain(82) << 3; + mask |= !omap_get_gpio_datain(83) << 4; + + pressed = mask & 0x1; + + + changed = mask ^ gpio_mask; + if (changed == 0) + goto end; + + if (pressed == 0) + key = 0; + else { + key = 0; + for (i = 0; i < 5; ++i) { + if (gpio_keys[i].mask == mask) { + key = gpio_keys[i].key; + break; + } + } + } + + if (key != old_key) { + if (old_key) + input_report_key(tornado_kp_dev, old_key, 0); + if (key) + input_report_key(tornado_kp_dev, key, 1); + old_key = key; + } + + gpio_mask = mask; + + end: + if (pressed) { + int delay = HZ / 20; + mod_timer(&kp_gpio_timer, jiffies + delay); + } else { + enable_irq(OMAP_GPIO_IRQ(kp_gpio)); + } +} + +static irqreturn_t +tornado_kp_gpio_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + disable_irq(OMAP_GPIO_IRQ(kp_gpio)); + tasklet_schedule(&kp_gpio_tasklet); + return IRQ_HANDLED; +} + +static void +tornado_kp_gpio_timer(unsigned long data) +{ + tasklet_schedule(&kp_gpio_tasklet); +} + +static int __init +tornado_kp_init(void) +{ + unsigned int i; + + printk("HTC Tornado Keypad Driver.\n"); + + KBD_MASKIT = 1; + + /* select key tables */ + if (machine_is_htc_tornado()) { + htc_keys = tornado_keys; + htc_keys_size = ARRAY_SIZE(tornado_keys); + gpio_keys = tornado_gpio_keys; + gpio_keys_size = ARRAY_SIZE(tornado_gpio_keys); + kp_gpio = TORNADO_KP_GPIO; + + printk("Using HTC Tornado keymap.\n"); + } else { + printk("machine is unknown: not loading driver.\n"); + return -EINVAL; + } + + tornado_kp_dev = input_allocate_device(); + if (tornado_kp_dev == NULL) { + printk("unable to allocate tornado_kp_dev.\n"); + return -ENOMEM; + } + tornado_kp_dev->name = "tornado-keypad"; + + + init_timer(&kp_timer); + kp_timer.function = tornado_kp_timer; + tasklet_enable(&kp_tasklet); + if (request_irq(INT_730_MPUIO_KEYPAD, tornado_kp_interrupt, 0, "tornado-keypad", 0)) { + printk("unable to get IRQ for tornado-keypad.\n"); + return -EBUSY; + } + + set_bit(EV_KEY, tornado_kp_dev->evbit); + for (i = 0; i < KEY_MAX; ++i) { + set_bit(i, tornado_kp_dev->keybit); + } + input_register_device(tornado_kp_dev); + + if (kp_gpio) { + /* request arrow keys GPIOS */ + if (omap_request_gpio(kp_gpio) < 0) { + printk("unable to request GPIO %i\n", 76); + return -EBUSY; + } + /* set gpio mode to IN for all kp gpios */ + omap_set_gpio_direction(kp_gpio, 1); + omap_set_gpio_direction(80, 1); + omap_set_gpio_direction(81, 1); + omap_set_gpio_direction(82, 1); + omap_set_gpio_direction(83, 1); + + init_timer(&kp_gpio_timer); + kp_gpio_timer.function = tornado_kp_gpio_timer; + tasklet_enable(&kp_gpio_tasklet); + + /* be notified when keys are pressed */ + if (request_irq(OMAP_GPIO_IRQ(kp_gpio), tornado_kp_gpio_interrupt, SA_TRIGGER_FALLING, "tornado-kp-gpio", 0)) { + printk("unable to request GPIO IRQ %i\n", 76); + return -EBUSY; + } + } + + tornado_scan_keypad(kp_state); + KBD_MASKIT = 0; + return 0; +} + +void __exit +tornado_kp_exit(void) +{ + KBD_MASKIT = 1; +} + +module_init(tornado_kp_init); +module_exit(tornado_kp_exit); + +MODULE_AUTHOR("Nicolas Schichan "); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("HTC Tornado Keypad Driver"); Index: linux-2.6.16/drivers/mmc/omap.c =================================================================== --- linux-2.6.16.orig/drivers/mmc/omap.c 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/mmc/omap.c 2007-04-12 10:36:19.000000000 +0200 @@ -160,10 +160,10 @@ u32 resptype; u32 cmdtype; - pr_debug("MMC%d: CMD%d, argument 0x%08x%s%s%s%s\n", + pr_debug("MMC%d: CMD%d, argument 0x%08x%s%s\n", host->id, cmd->opcode, cmd->arg, - (cmd->flags & MMC_RSP_SHORT) ? ", 32-bit response" : "", - (cmd->flags & MMC_RSP_LONG) ? ", 128-bit response" : "", +/* (cmd->flags & MMC_RSP_SHORT) ? ", 32-bit response" : "", */ +/* (cmd->flags & MMC_RSP_LONG) ? ", 128-bit response" : "", */ (cmd->flags & MMC_RSP_CRC) ? ", CRC" : "", (cmd->flags & MMC_RSP_BUSY) ? ", busy notification" : ""); Index: linux-2.6.16/drivers/mmc/omap.h =================================================================== --- linux-2.6.16.orig/drivers/mmc/omap.h 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/mmc/omap.h 2007-04-12 10:36:19.000000000 +0200 @@ -1,31 +1,66 @@ #ifndef DRIVERS_MEDIA_MMC_OMAP_H #define DRIVERS_MEDIA_MMC_OMAP_H -#define OMAP_MMC_REG_CMD 0x00 -#define OMAP_MMC_REG_ARGL 0x04 -#define OMAP_MMC_REG_ARGH 0x08 -#define OMAP_MMC_REG_CON 0x0c -#define OMAP_MMC_REG_STAT 0x10 -#define OMAP_MMC_REG_IE 0x14 -#define OMAP_MMC_REG_CTO 0x18 -#define OMAP_MMC_REG_DTO 0x1c -#define OMAP_MMC_REG_DATA 0x20 -#define OMAP_MMC_REG_BLEN 0x24 -#define OMAP_MMC_REG_NBLK 0x28 -#define OMAP_MMC_REG_BUF 0x2c -#define OMAP_MMC_REG_SDIO 0x34 -#define OMAP_MMC_REG_REV 0x3c -#define OMAP_MMC_REG_RSP0 0x40 -#define OMAP_MMC_REG_RSP1 0x44 -#define OMAP_MMC_REG_RSP2 0x48 -#define OMAP_MMC_REG_RSP3 0x4c -#define OMAP_MMC_REG_RSP4 0x50 -#define OMAP_MMC_REG_RSP5 0x54 -#define OMAP_MMC_REG_RSP6 0x58 -#define OMAP_MMC_REG_RSP7 0x5c -#define OMAP_MMC_REG_IOSR 0x60 -#define OMAP_MMC_REG_SYSC 0x64 -#define OMAP_MMC_REG_SYSS 0x68 +#ifdef CONFIG_ARCH_OMAP730 +/* + * unlike other omap architectures, omap730 has 16bits MMC register + * offsets ... + */ +# define OMAP_MMC_REG_CMD 0x00 +# define OMAP_MMC_REG_ARGL 0x02 +# define OMAP_MMC_REG_ARGH 0x04 +# define OMAP_MMC_REG_CON 0x06 +# define OMAP_MMC_REG_STAT 0x08 +# define OMAP_MMC_REG_IE 0x0a +# define OMAP_MMC_REG_CTO 0x0c +# define OMAP_MMC_REG_DTO 0x0e +# define OMAP_MMC_REG_DATA 0x10 +# define OMAP_MMC_REG_BLEN 0x12 +# define OMAP_MMC_REG_NBLK 0x14 +# define OMAP_MMC_REG_BUF 0x16 +# define OMAP_MMC_REG_SDIO 0x1a +# define OMAP_MMC_REG_REV 0x1e +# define OMAP_MMC_REG_RSP0 0x20 +# define OMAP_MMC_REG_RSP1 0x22 +# define OMAP_MMC_REG_RSP2 0x24 +# define OMAP_MMC_REG_RSP3 0x26 +# define OMAP_MMC_REG_RSP4 0x28 +# define OMAP_MMC_REG_RSP5 0x2a +# define OMAP_MMC_REG_RSP6 0x2c +# define OMAP_MMC_REG_RSP7 0x2e +# define OMAP_MMC_REG_IOSR 0x30 +# define OMAP_MMC_REG_SYSC 0x32 +# define OMAP_MMC_REG_SYSS 0x34 + +#else + +# define OMAP_MMC_REG_CMD 0x00 +# define OMAP_MMC_REG_ARGL 0x04 +# define OMAP_MMC_REG_ARGH 0x08 +# define OMAP_MMC_REG_CON 0x0c +# define OMAP_MMC_REG_STAT 0x10 +# define OMAP_MMC_REG_IE 0x14 +# define OMAP_MMC_REG_CTO 0x18 +# define OMAP_MMC_REG_DTO 0x1c +# define OMAP_MMC_REG_DATA 0x20 +# define OMAP_MMC_REG_BLEN 0x24 +# define OMAP_MMC_REG_NBLK 0x28 +# define OMAP_MMC_REG_BUF 0x2c +# define OMAP_MMC_REG_SDIO 0x34 +# define OMAP_MMC_REG_REV 0x3c +# define OMAP_MMC_REG_RSP0 0x40 +# define OMAP_MMC_REG_RSP1 0x44 +# define OMAP_MMC_REG_RSP2 0x48 +# define OMAP_MMC_REG_RSP3 0x4c +# define OMAP_MMC_REG_RSP4 0x50 +# define OMAP_MMC_REG_RSP5 0x54 +# define OMAP_MMC_REG_RSP6 0x58 +# define OMAP_MMC_REG_RSP7 0x5c +# define OMAP_MMC_REG_IOSR 0x60 +# define OMAP_MMC_REG_SYSC 0x64 +# define OMAP_MMC_REG_SYSS 0x68 + +#endif #define OMAP_MMC_STAT_CARD_ERR (1 << 14) #define OMAP_MMC_STAT_CARD_IRQ (1 << 13) Index: linux-2.6.16/drivers/usb/gadget/omap_udc.c =================================================================== --- linux-2.6.16.orig/drivers/usb/gadget/omap_udc.c 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/usb/gadget/omap_udc.c 2007-04-12 10:36:19.000000000 +0200 @@ -60,7 +60,7 @@ #undef USB_TRACE /* bulk DMA seems to be behaving for both IN and OUT */ -#define USE_DMA +/* #define USE_DMA */ /* ISO too */ #define USE_ISO @@ -2147,7 +2147,8 @@ /* boards that don't have VBUS sensing can't autogate 48MHz; * can't enter deep sleep while a gadget driver is active. */ - if (machine_is_omap_innovator() || machine_is_omap_osk()) + if (machine_is_omap_innovator() || machine_is_omap_osk() || + machine_is_htc_tornado()) omap_vbus_session(&udc->gadget, 1); done: @@ -2170,7 +2171,8 @@ if (udc->dc_clk != NULL) omap_udc_enable_clock(1); - if (machine_is_omap_innovator() || machine_is_omap_osk()) + if (machine_is_omap_innovator() || machine_is_omap_osk() || + machine_is_htc_tornado()) omap_vbus_session(&udc->gadget, 0); if (udc->transceiver) Index: linux-2.6.16/drivers/video/backlight/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/video/backlight/Kconfig 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/drivers/video/backlight/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -58,3 +58,10 @@ If you have a HP Jornada 680, say y to enable the backlight driver. + +config BACKLIGHT_TORNADO + tristate "HTC Tornado Backlight Driver." + depends on BACKLIGHT_DEVICE && MACH_TORNADO + default y + help + Backlight driver for the HTC Tornado smartphones. Index: linux-2.6.16/drivers/video/backlight/Makefile =================================================================== --- linux-2.6.16.orig/drivers/video/backlight/Makefile 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/drivers/video/backlight/Makefile 2007-04-12 10:36:19.000000000 +0200 @@ -5,3 +5,4 @@ obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o obj-$(CONFIG_SHARP_LOCOMO) += locomolcd.o +obj-$(CONFIG_BACKLIGHT_TORNADO) += tornado-bl.o \ No newline at end of file Index: linux-2.6.16/drivers/video/backlight/tornado-bl.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/video/backlight/tornado-bl.c 2007-04-12 10:36:19.000000000 +0200 @@ -0,0 +1,224 @@ +/* +** tornado-bl.c for bl in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Wed Apr 12 16:53:40 2006 nico +** Last update Thu May 25 13:53:14 2006 nico +*/ + +/* + * + * HTC Tornado & Typhoon backlight driver. + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define TORNADO_LCD_RESET_GPIO 15 +#define TORNADO_LCD_OUT_EN_GPIO 77 +#define TORNADO_LCD_POWER_GPIO 121 +#define TORNADO_BL_GPIO 126 +#define TORNADO_LCD_INTENSITY_GPIO 124 +#define TORNADO_LCD_CLOCK_GPIO 127 + +static int tornado_bl_powermode = FB_BLANK_UNBLANK; +static int current_intensity = 1; + + +/* + * TODO: see TRM to disable also the internal lcd clock and reenable + * it when needed. + */ +static int +tornado_bl_set_power(struct backlight_device *bd, int state) +{ + if (state == tornado_bl_powermode) + return 0; + switch (state) { + case FB_BLANK_NORMAL: + case FB_BLANK_VSYNC_SUSPEND: + case FB_BLANK_HSYNC_SUSPEND: + case FB_BLANK_POWERDOWN: + omap_set_gpio_dataout(TORNADO_BL_GPIO, 0); + omap_set_gpio_dataout(TORNADO_LCD_CLOCK_GPIO, 0); + omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, 0); + + omap_set_gpio_dataout(TORNADO_LCD_OUT_EN_GPIO, 0); + omap_set_gpio_dataout(TORNADO_LCD_RESET_GPIO, 0); + omap_set_gpio_dataout(TORNADO_LCD_POWER_GPIO, 0); + break; + + case FB_BLANK_UNBLANK: + omap_set_gpio_dataout(TORNADO_LCD_POWER_GPIO, 1); + omap_set_gpio_dataout(TORNADO_LCD_RESET_GPIO, 1); + omap_set_gpio_dataout(TORNADO_LCD_OUT_EN_GPIO, 1); + + omap_set_gpio_dataout(TORNADO_LCD_CLOCK_GPIO, 1); + /* restore previous lcd intensity */ + omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, current_intensity); + /* + * need to sleep a little bit to allow lcd clock to + * resume completly. avoids a white flickering screen + * that would otherwise be visible for a few + * milliseconds. + * + * we use schedule timoueout here to allow any process + * that might want to use the CPU to run. this should + * not be a problem here. + */ + schedule_timeout_interruptible(10); + omap_set_gpio_dataout(TORNADO_BL_GPIO, 1); + break; + } + tornado_bl_powermode = state; + return 0; +} + +static int +tornado_bl_get_power(struct backlight_device *bd) +{ + return tornado_bl_powermode; +} + +static int +tornado_bl_get_intensity(struct backlight_device *bd) +{ + return current_intensity; +} + +static int +tornado_bl_set_intensity(struct backlight_device *bd, int intensity) +{ + if (intensity < 0) + intensity = 0; + if (intensity > 1) + intensity = 1; + omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, intensity); + current_intensity = intensity; + + return 0; +} + +static struct backlight_properties tornado_bl = { + .owner = THIS_MODULE, + .get_power = tornado_bl_get_power, + .max_brightness = 1, + .set_power = tornado_bl_set_power, + .set_brightness = tornado_bl_set_intensity, + .get_brightness = tornado_bl_get_intensity, +}; + +static struct backlight_device *tornado_backlight_device; + +static int __init +tornado_bl_probe(struct device *dev) +{ + tornado_backlight_device = backlight_device_register("tornado-bl", NULL, &tornado_bl); + if (IS_ERR(tornado_backlight_device)) + return PTR_ERR(tornado_backlight_device); + return 0; +} + +static int __init +tornado_bl_remove(struct device *dev) +{ + printk("deregistering tornado-bl device.\n"); + backlight_device_unregister(tornado_backlight_device); + return 0; +} + +static struct device_driver tornado_bl_driver = { + .name = "tornado-bl", + .bus = &platform_bus_type, + .probe = tornado_bl_probe, + .remove = tornado_bl_remove, + .suspend = NULL, + .resume = NULL, +}; + +static struct platform_device tornado_bl_device = { + .name = "tornado-bl", + .id = -1, +}; + + +static int __init +tornado_bl_init(void) +{ + int ret; + + omap_request_gpio(TORNADO_LCD_RESET_GPIO); + omap_request_gpio(TORNADO_LCD_OUT_EN_GPIO); + omap_request_gpio(TORNADO_LCD_POWER_GPIO); + omap_request_gpio(TORNADO_BL_GPIO); + omap_request_gpio(TORNADO_LCD_INTENSITY_GPIO); + omap_request_gpio(TORNADO_LCD_CLOCK_GPIO); + + ret = driver_register(&tornado_bl_driver); + if (ret) + goto error; + + ret = platform_device_register(&tornado_bl_device); + if (ret) + goto error; + + omap_set_gpio_direction(TORNADO_BL_GPIO, 0); /* out */ + printk("HTC Tornado Backlight driver.\n"); + return 0; + + error: + platform_device_unregister(&tornado_bl_device); + driver_unregister(&tornado_bl_driver); + omap_free_gpio(TORNADO_BL_GPIO); + return ret; +} + +static void __exit +tornado_bl_exit(void) +{ + /* FIXME: this freezes the system when unloading ... */ + platform_device_unregister(&tornado_bl_device); + driver_unregister(&tornado_bl_driver); + omap_request_gpio(TORNADO_LCD_RESET_GPIO); + omap_request_gpio(TORNADO_LCD_OUT_EN_GPIO); + omap_request_gpio(TORNADO_LCD_POWER_GPIO); + omap_request_gpio(TORNADO_BL_GPIO); + omap_request_gpio(TORNADO_LCD_INTENSITY_GPIO); + omap_request_gpio(TORNADO_LCD_CLOCK_GPIO); +} + +module_init(tornado_bl_init); +module_exit(tornado_bl_exit); + +MODULE_AUTHOR("Nicolas Schichan"); +MODULE_DESCRIPTION("HTC Tornado LCD Backlight driver."); +MODULE_LICENSE("GPL"); Index: linux-2.6.16/drivers/video/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/video/Kconfig 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/video/Kconfig 2007-04-12 10:36:19.000000000 +0200 @@ -1428,6 +1428,16 @@ source "drivers/video/omap/Kconfig" +config FB_VSFB + bool "VSFB for HTC OMAP based phones" + depends on FB && MACH_TORNADO + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Hacked version of the original VSFB for HTC based OMAP + smartphones (320x240 screen and vram at 0x20001020). + config FB_VIRTUAL tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)" depends on FB Index: linux-2.6.16/drivers/video/logo/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/video/logo/Kconfig 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/drivers/video/logo/Kconfig 2007-04-12 10:36:20.000000000 +0200 @@ -71,4 +71,3 @@ default y endmenu - Index: linux-2.6.16/drivers/video/logo/logo.c =================================================================== --- linux-2.6.16.orig/drivers/video/logo/logo.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/drivers/video/logo/logo.c 2007-04-12 10:36:20.000000000 +0200 @@ -35,7 +35,6 @@ extern const struct linux_logo logo_superh_clut224; extern const struct linux_logo logo_m32r_clut224; - const struct linux_logo *fb_find_logo(int depth) { const struct linux_logo *logo = NULL; @@ -102,6 +101,7 @@ /* M32R Linux logo */ logo = &logo_m32r_clut224; #endif + } return logo; } Index: linux-2.6.16/drivers/video/Makefile =================================================================== --- linux-2.6.16.orig/drivers/video/Makefile 2007-04-12 10:36:07.000000000 +0200 +++ linux-2.6.16/drivers/video/Makefile 2007-04-12 10:36:20.000000000 +0200 @@ -100,6 +100,7 @@ obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o obj-$(CONFIG_FB_OF) += offb.o obj-$(CONFIG_FB_OMAP) += omap/ cfbcopyarea.o cfbfillrect.o cfbimgblt.o +obj-$(CONFIG_FB_VSFB) += vsfb.o # the test framebuffer is last obj-$(CONFIG_FB_VIRTUAL) += vfb.o Index: linux-2.6.16/drivers/video/vsfb.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/drivers/video/vsfb.c 2007-04-12 10:36:20.000000000 +0200 @@ -0,0 +1,187 @@ +/* + * linux/drivers/video/vsfb.c + * + * Copyright (C) 2003 Ian Molton + * + * Based on acornfb by Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Frame buffer code for Simple platforms + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#undef FBCON_HAS_CFB8 +#undef FBCON_HAS_CFB2 +#undef FBCON_HAS_CFB4 +#undef FBCON_HAS_CFB32 + +/* for screen geometry information */ +#include + +#define DEFAULT_BPP 16 +#define SCREEN_BASE (0x20001020) + +static struct fb_info fb_info; +static u32 colreg[17]; // Copied from other driver - but is 17 correct? + + +static int +vsfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int trans, struct fb_info *info) +{ + if (regno > 16) + return 1; + + ((u32 *)(info->pseudo_palette))[regno] = (red & 0xf800) | ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11); + + return 0; +} + +/* extern int soft_cursor(struct fb_info *info, struct fb_cursor *cursor); */ + +static struct fb_ops vsfb_ops = { + .owner = THIS_MODULE, + .fb_setcolreg = vsfb_setcolreg, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, + .fb_cursor = NULL, +}; + +/* + * some members are initialized with 0: they will be properly + * initialized at run time, depending on the machine we are running + * on. + */ +static struct fb_var_screeninfo vsfb_var = { + .xres = 0, + .yres = 0, + .xres_virtual = 0, + .yres_virtual = 0, + .bits_per_pixel = 16, + .red = { 11, 5, 0 }, + .green = { 5, 6, 0 }, + .blue = { 0, 5, 0 }, + .activate = FB_ACTIVATE_NOW, + .height = -1, + .width = -1, + .vmode = FB_VMODE_NONINTERLACED, + .pixclock = 12500, /* same as pixclock as P2 frame buffer driver. */ +}; + +static struct fb_fix_screeninfo vsfb_fix = { + .id = "HTC VSFB", + .smem_start = SCREEN_BASE, + .smem_len = 0, + .type = FB_TYPE_PACKED_PIXELS, + .visual = FB_VISUAL_TRUECOLOR, + .line_length = 0, + .accel = FB_ACCEL_NONE, +}; + +#define OMAP_LCDC_BASE 0xfffec000 +#define OMAP_LCDC_CONTROL (OMAP_LCDC_BASE + 0x00) +#define OMAP_LCDC_STATUS (OMAP_LCDC_BASE + 0x10) +#define OMAP_DMA_LCD_BASE 0xfffee300 +#define OMAP_DMA_LCD_CCR (OMAP_DMA_LCD_BASE + 0xc2) +#define OMAP_DMA_LCD_CTRL (OMAP_DMA_LCD_BASE + 0xc4) + +int __init +vsfb_init(void) +{ + + printk("VSFB Frame buffer driver for HTC OMAP Based Phones.\n"); + + fb_info.fix = vsfb_fix; + fb_info.var = vsfb_var; + + fb_info.fbops = &vsfb_ops; + fb_info.flags = FBINFO_FLAG_DEFAULT; + fb_info.pseudo_palette = colreg; + fb_alloc_cmap(&fb_info.cmap, 16, 0); + + if (machine_is_typhoon()) { + fb_info.var.xres = 176; + fb_info.var.yres = 220; + } else { + fb_info.var.xres = 240; + fb_info.var.yres = 320; + } + + fb_info.var.xres_virtual = fb_info.var.xres; + fb_info.var.yres_virtual = fb_info.var.yres; + fb_info.fix.line_length = fb_info.var.xres * 2; + fb_info.fix.smem_len = fb_info.var.xres * fb_info.var.yres * 2; + +#ifdef CONFIG_EFB_DEBUG + /* + * disable efb so that only one acces the frame buffer + */ + efb_disable(); +#endif + + + /* Try to grab our phys memory space... */ + if (!(request_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len, "HTC vsfb"))){ +#ifdef CONFIG_EFB_DEBUG + efb_enable(); +#endif + printk("unable to request addr %p (len %i) for HTC VSFB.\n", fb_info.fix.smem_start, fb_info.fix.smem_len); + return -ENOMEM; + } + + /* Try to map this so we can access it */ + fb_info.screen_base = ioremap(fb_info.fix.smem_start, fb_info.fix.smem_len); + if (!fb_info.screen_base) { +#ifdef CONFIG_EFB_DEBUG + efb_enable(); +#endif + printk("unable to ioremap %p for HTC vsfb.\n", fb_info.fix.smem_start); + release_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len); + return -EIO; + } + + printk(KERN_INFO "vsfb: framebuffer at 0x%lx, mapped to 0x%p, size %dk\n", + fb_info.fix.smem_start, fb_info.screen_base, fb_info.fix.smem_len/1024); + + if (register_framebuffer(&fb_info) < 0){ +#ifdef CONFIG_EFB_DEBUG + efb_enable(); +#endif + iounmap(fb_info.screen_base); + release_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len); + return -EINVAL; + } + + return 0; +} + +module_init(vsfb_init); +MODULE_AUTHOR("Nicolas Schichan (based on VSFB by Ian Molton (based on acornfb by RMK and parts of anakinfb))"); +MODULE_DESCRIPTION("HTC Very Simple framebuffer driver"); +MODULE_LICENSE("GPL"); Index: linux-2.6.16/include/asm-arm/arch-omap/efb.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/include/asm-arm/arch-omap/efb.h 2007-04-12 10:36:20.000000000 +0200 @@ -0,0 +1,56 @@ +/* +** efb.h for efb in /home/nico/work/tornado/linux-tornado +** +** Made by nico +** Login +** +** Started on Wed Apr 5 18:58:04 2006 nico +** Last update Thu May 11 13:58:28 2006 nico +*/ + +/* + * + * + * Copyright (C) 2006 Nicolas Schichan + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + */ + +#ifndef _EFB_H +# define _EFB_H + +# include + +/* + * TODO: add __init and __initdata where applicable. + */ + +void efb_init(void); +void efb_putstr(const char *str); + +void efb_disable(void); +void efb_enable(void); + +/* #define EFB_WIDTH 240 */ +/* #define EFB_HEIGHT 320 */ + +extern const char efb_font[255][25]; + +extern unsigned int efb_width; +extern unsigned int efb_height; + +#endif /* !_EFB_H */ Index: linux-2.6.16/include/asm-arm/arch-omap/omap730.h =================================================================== --- linux-2.6.16.orig/include/asm-arm/arch-omap/omap730.h 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/include/asm-arm/arch-omap/omap730.h 2007-04-12 10:36:20.000000000 +0200 @@ -99,4 +99,3 @@ #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00) #endif /* __ASM_ARCH_OMAP730_H */ - Index: linux-2.6.16/include/asm-arm/kexec.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.16/include/asm-arm/kexec.h 2007-04-12 10:36:20.000000000 +0200 @@ -0,0 +1,33 @@ +#ifndef _ARM_KEXEC_H +#define _ARM_KEXEC_H + +#ifdef CONFIG_KEXEC + +/* Maximum physical address we can use pages from */ +#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL) +/* Maximum address we can reach in physical address mode */ +#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL) +/* Maximum address we can use for the control code buffer */ +#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE + +#define KEXEC_CONTROL_CODE_SIZE 4096 + +#define KEXEC_ARCH KEXEC_ARCH_ARM + +#ifndef __ASSEMBLY__ + +#define MAX_NOTE_BYTES 1024 + +struct kimage; + +static inline void crash_setup_regs(struct pt_regs *newregs, + struct pt_regs *oldregs) +{ + /* Dummy implementation for now */ +} + +#endif /* __ASSEMBLY__ */ + +#endif /* CONFIG_KEXEC */ + +#endif /* _ARM_KEXEC_H */ Index: linux-2.6.16/include/asm-arm/unistd.h =================================================================== --- linux-2.6.16.orig/include/asm-arm/unistd.h 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/include/asm-arm/unistd.h 2007-04-12 10:36:20.000000000 +0200 @@ -216,7 +216,7 @@ #define __NR_sigaltstack (__NR_SYSCALL_BASE+186) #define __NR_sendfile (__NR_SYSCALL_BASE+187) /* 188 reserved */ - /* 189 reserved */ +#define __NR_sys_kexec_load (__NR_SYSCALL_BASE+189) /* 189 was reserved, temporarily use it for sys_kexec_load */ #define __NR_vfork (__NR_SYSCALL_BASE+190) #define __NR_ugetrlimit (__NR_SYSCALL_BASE+191) /* SuS compliant getrlimit */ #define __NR_mmap2 (__NR_SYSCALL_BASE+192) Index: linux-2.6.16/include/linux/kexec.h =================================================================== --- linux-2.6.16.orig/include/linux/kexec.h 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/include/linux/kexec.h 2007-04-12 10:36:20.000000000 +0200 @@ -119,6 +119,7 @@ #define KEXEC_ARCH_PPC (20 << 16) #define KEXEC_ARCH_PPC64 (21 << 16) #define KEXEC_ARCH_IA_64 (50 << 16) +#define KEXEC_ARCH_ARM (40 << 16) #define KEXEC_ARCH_S390 (22 << 16) #define KEXEC_ARCH_SH (42 << 16) Index: linux-2.6.16/init/main.c =================================================================== --- linux-2.6.16.orig/init/main.c 2006-03-20 06:53:29.000000000 +0100 +++ linux-2.6.16/init/main.c 2007-04-12 10:36:20.000000000 +0200 @@ -58,6 +58,10 @@ #include #endif +#ifdef CONFIG_EFB_DEBUG +#include +#endif + /* * This is one of the first .c files built. Error out early if we have compiler * trouble. @@ -442,6 +446,12 @@ { char * command_line; extern struct kernel_param __start___param[], __stop___param[]; + +#ifdef CONFIG_EFB_DEBUG + efb_init(); + efb_putstr("Rock'n Roll !\n"); +#endif + /* * Interrupts are still disabled. Do necessary setups, then * enable them Index: linux-2.6.16/kernel/printk.c =================================================================== --- linux-2.6.16.orig/kernel/printk.c 2007-04-12 10:36:08.000000000 +0200 +++ linux-2.6.16/kernel/printk.c 2007-04-12 10:36:20.000000000 +0200 @@ -34,12 +34,16 @@ #include +#include + #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) -#ifdef CONFIG_DEBUG_LL -extern void printascii(char *); +#ifdef CONFIG_EFB_DEBUG +#include #endif +int in_printk; + /* printk's without a loglevel use this.. */ #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */ @@ -367,10 +371,12 @@ { struct console *con; + in_printk = 1; for (con = console_drivers; con; con = con->next) { if ((con->flags & CON_ENABLED) && con->write) con->write(con, &LOG_BUF(start), end - start); } + in_printk = 0; } /* @@ -551,8 +557,8 @@ /* Emit the output into the temporary buffer */ printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); -#ifdef CONFIG_DEBUG_LL - printascii(printk_buf); +#ifdef CONFIG_EFB_DEBUG + efb_putstr(printk_buf); #endif /*