diff -Nurp linux-2.6.16.27/arch/arm/mach-omap1/Kconfig linux-2.6.16.27-fix/arch/arm/mach-omap1/Kconfig
--- linux-2.6.16.27/arch/arm/mach-omap1/Kconfig	2007-12-27 03:18:15.000000000 +0000
+++ linux-2.6.16.27-fix/arch/arm/mach-omap1/Kconfig	2007-12-27 02:53:01.000000000 +0000
@@ -171,3 +171,14 @@ config OMAP_ARM_30MHZ
 
 source "arch/arm/plat-omap/dsp/Kconfig"
 
+config MACH_HTCWIZARD
+	bool "HTC Wizard Support"
+	depends on ARCH_OMAP730
+	help
+	  HTC Wizard smartphone support (AKA QTEK 9100, ...)
+
+ config EFB_DEBUG
+ 	bool "Early Frame Buffer debugging routines"
+	depends MACH_HTCWIZARD
+ 	help
+ 	  Output in the framebuffer of the HTC phones as early as possible (experimental, ...).
diff -Nurp linux-2.6.16.27/arch/arm/mach-omap1/Makefile linux-2.6.16.27-fix/arch/arm/mach-omap1/Makefile
--- linux-2.6.16.27/arch/arm/mach-omap1/Makefile	2007-12-27 03:18:15.000000000 +0000
+++ linux-2.6.16.27-fix/arch/arm/mach-omap1/Makefile	2007-12-27 02:52:36.000000000 +0000
@@ -23,6 +23,7 @@ obj-$(CONFIG_MACH_VOICEBLUE)		+= board-v
 obj-$(CONFIG_MACH_OMAP_PALMTE)		+= board-palmte.o
 obj-$(CONFIG_MACH_NOKIA770)		+= board-nokia770.o
 obj-$(CONFIG_MACH_AMS_DELTA)		+= board-ams-delta.o
+obj-$(CONFIG_MACH_HTCWIZARD)		+= board-htcwizard.o
 
 ifeq ($(CONFIG_ARCH_OMAP15XX),y)
 # Innovator-1510 FPGA
@@ -37,3 +38,4 @@ led-$(CONFIG_MACH_OMAP_PERSEUS2)	+= leds
 led-$(CONFIG_MACH_OMAP_OSK)		+= leds-osk.o
 obj-$(CONFIG_LEDS)			+= $(led-y)
 
+obj-$(CONFIG_EFB_DEBUG) += efb.o efb-font5x5.o
diff -Nurp linux-2.6.16.27/arch/arm/mach-omap1/board-htcwizard.c linux-2.6.16.27-fix/arch/arm/mach-omap1/board-htcwizard.c
--- linux-2.6.16.27/arch/arm/mach-omap1/board-htcwizard.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16.27-fix/arch/arm/mach-omap1/board-htcwizard.c	2007-12-27 02:51:52.000000000 +0000
@@ -0,0 +1,314 @@
+/*
+ * Modified from board-perseus2.c and htcwizard.c
+ *
+ * HTC Wizard init stuff
+ * Copyright (C) 2006 Unai Uribarri
+ *
+ * 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 <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/input.h>
+
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/arch/omap730.h>
+#include <asm/page.h>
+#include <asm/memory.h>
+#include <asm/arch/common.h>
+#include <asm/arch/board.h>
+#include <asm/arch/efb.h>
+#include <asm/arch/io.h>
+#include <asm/arch/irqs.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/keypad.h>
+
+#include <linux/delay.h>
+
+#define TORNADO_GPIO_DM 35
+#define TORNADO_GPIO_DP 36
+
+static void __init
+htcwizard_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("htcwizard_map_io done.\n");
+}
+
+static void __init
+htcwizard_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
+htcwizard_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 htcwizard_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 htcwizard_mmc_config __initdata = 
+{
+	.mmc[0] = {
+		.enabled = 1,
+		.nomux = 1,
+		.wire4 = 1,
+		.power_pin = -1,
+		.switch_pin = -1,
+	}
+};
+
+static struct omap_board_config_kernel htcwizard_config[] = 
+{
+	{ OMAP_TAG_USB, &htcwizard_usb_config },
+	{ OMAP_TAG_MMC, &htcwizard_mmc_config }, 
+};
+
+static void __init
+htcwizard_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);
+}
+
+/* Keyboard definition */
+static int keymap[] = {
+	KEY(0,0,KEY_RECORD),
+	KEY(0,1,KEY_CAMERA),
+	KEY(0,2,KEY_PHONE),
+	KEY(0,3,KEY_VOLUMEUP),
+	KEY(0,4,KEY_F2),
+	KEY(0,5,KEY_MAIL),
+	KEY(0,6,KEY_DIRECTORY),
+	KEY(1,0,KEY_MENU),
+	KEY(1,1,KEY_COMMA),
+	KEY(1,2,KEY_M),
+	KEY(1,3,KEY_K),
+	KEY(1,4,KEY_OK),
+	KEY(1,5,KEY_I),
+	KEY(1,6,KEY_U),
+	KEY(2,0,KEY_RED), // FIX ME
+	KEY(2,1,KEY_TAB),
+	KEY(2,2,KEY_N),
+	KEY(2,3,KEY_J),
+	KEY(2,4,KEY_ENTER),
+	KEY(2,5,KEY_H),
+	KEY(2,6,KEY_Z),
+	KEY(3,0,KEY_SPACE),
+	KEY(3,1,KEY_L),
+	KEY(3,2,KEY_B),
+	KEY(3,3,KEY_V),
+	KEY(3,4,KEY_BACKSPACE),
+	KEY(3,5,KEY_G),
+	KEY(3,6,KEY_T),
+	KEY(4,0,KEY_CAPSLOCK),
+	KEY(4,1,KEY_C),
+	KEY(4,2,KEY_F),
+	KEY(4,3,KEY_R),
+	KEY(4,4,KEY_O),
+	KEY(4,5,KEY_E),
+	KEY(4,6,KEY_D),
+	KEY(5,0,KEY_X),
+	KEY(5,1,KEY_Y),
+	KEY(5,2,KEY_S),
+	KEY(5,3,KEY_W),
+	KEY(5,4,KEY_P),
+	KEY(5,5,KEY_Q),
+	KEY(5,6,KEY_A),
+	KEY(6,0,KEY_CONNECT),
+	KEY(6,2,KEY_CANCEL),
+	KEY(6,3,KEY_VOLUMEDOWN),
+	KEY(6,4,KEY_F1),
+	KEY(6,5,KEY_WWW),
+	KEY(6,6,KEY_CALENDAR),
+	0
+};
+
+static struct omap_kp_platform_data kp_data = {
+	.rows	= 8,
+	.cols	= 8,
+	.keymap = keymap,
+};
+
+static struct resource kp_resources[] = {
+	[0] = {
+		.start	= INT_730_MPUIO_KEYPAD,
+		.end	= INT_730_MPUIO_KEYPAD,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct platform_device kp_device = {
+	.name		= "omap-keypad",
+	.id		= -1,
+	.dev		= {
+		.platform_data = &kp_data,
+	},
+	.num_resources	= ARRAY_SIZE(kp_resources),
+	.resource	= kp_resources,
+};
+
+
+struct platform_device gsm_device = {
+	.name = "typhoon-gsm",
+	.id = 1
+};
+
+static struct platform_device *devices[] __initdata = {
+	&gsm_device,
+	&kp_device,
+};
+
+static void __init
+htcwizard_init(void)
+{
+	printk("Tornado init.\n");
+	omap_board_config = htcwizard_config;
+	omap_board_config_size = ARRAY_SIZE(htcwizard_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);
+	}
+
+	htcwizard_usb_otg();
+	htcwizard_usb_enable();
+	htcwizard_mmc_init();
+}
+
+static void __init
+htcwizard_init_irq(void)
+{
+	printk("htcwizard_init_irq.\n");
+	omap1_init_common_hw();
+	omap_init_irq();
+	omap_gpio_init();
+}
+
+MACHINE_START(HTCWIZARD, "HTC Wizard")
+	/* Maintainer: Unai Uribarri <unaiur@gmail.com> */
+	.phys_io	= 0xfff00000,
+	.io_pg_offst	= ((0xfef00000) >> 18) & 0xfffc,
+	.boot_params	= 0x10000100,
+	.map_io		= htcwizard_map_io,
+	.init_irq	= htcwizard_init_irq,
+	.init_machine	= htcwizard_init,
+	.timer		= &omap_timer,
+MACHINE_END
diff -Nurp linux-2.6.16.27/arch/arm/mach-omap1/clock.c linux-2.6.16.27-fix/arch/arm/mach-omap1/clock.c
--- linux-2.6.16.27/arch/arm/mach-omap1/clock.c	2007-12-27 03:18:16.000000000 +0000
+++ linux-2.6.16.27-fix/arch/arm/mach-omap1/clock.c	2007-12-27 03:00:06.000000000 +0000
@@ -20,6 +20,7 @@
 
 #include <asm/io.h>
 
+#include <asm/mach-types.h>
 #include <asm/arch/usb.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/sram.h>
@@ -271,7 +272,8 @@ static int omap1_select_table_rate(struc
 	 * 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);
+	if (!machine_is_htcwizard())
+		omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val);
 
 	ck_dpll1.rate = ptr->pll_rate;
 	propagate_rate(&ck_dpll1);
diff -Nurp linux-2.6.16.27/arch/arm/mach-omap1/efb-font5x5.c linux-2.6.16.27-fix/arch/arm/mach-omap1/efb-font5x5.c
--- linux-2.6.16.27/arch/arm/mach-omap1/efb-font5x5.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16.27-fix/arch/arm/mach-omap1/efb-font5x5.c	2007-12-27 02:38:40.000000000 +0000
@@ -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 */
diff -Nurp linux-2.6.16.27/arch/arm/mach-omap1/efb.c linux-2.6.16.27-fix/arch/arm/mach-omap1/efb.c
--- linux-2.6.16.27/arch/arm/mach-omap1/efb.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16.27-fix/arch/arm/mach-omap1/efb.c	2007-12-27 02:38:40.000000000 +0000
@@ -0,0 +1,200 @@
+/*
+** efb.c for efb in /home/nico/work/tornado/linux-tornado
+** 
+** Made by nico
+** Login   <nico@chac.le-poulpe.net>
+** 
+** 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 <asm/mach-types.h>
+#include <asm/arch/efb.h>
+
+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;
+}
diff -Nurp linux-2.6.16.27/arch/arm/tools/mach-types linux-2.6.16.27-fix/arch/arm/tools/mach-types
--- linux-2.6.16.27/arch/arm/tools/mach-types	2006-07-17 14:58:58.000000000 +0100
+++ linux-2.6.16.27-fix/arch/arm/tools/mach-types	2007-12-27 02:51:14.000000000 +0000
@@ -969,3 +969,4 @@ mxc300_30ads		MACH_MXC30030ADS	MXC30030A
 fujitsu_wimaxsoc	MACH_FUJITSU_WIMAXSOC	FUJITSU_WIMAXSOC	956
 dualpcmodem		MACH_DUALPCMODEM	DUALPCMODEM		957
 gesbc9312		MACH_GESBC9312		GESBC9312		958
+htcwizard		MACH_HTCWIZARD		HTCWIZARD		1229
diff -Nurp linux-2.6.16.27/drivers/input/keyboard/omap-keypad.c linux-2.6.16.27-fix/drivers/input/keyboard/omap-keypad.c
--- linux-2.6.16.27/drivers/input/keyboard/omap-keypad.c	2007-12-27 03:18:20.000000000 +0000
+++ linux-2.6.16.27-fix/drivers/input/keyboard/omap-keypad.c	2007-12-27 03:01:41.000000000 +0000
@@ -139,7 +139,7 @@ static void omap_kp_scan_keypad(struct o
 		for (col = 0; col < omap_kp->cols; col++) {
 			omap_writew(~(1 << col) & 0xff, OMAP_MPUIO_BASE + OMAP_MPUIO_KBC);
 
-			if (machine_is_omap_osk() || machine_is_omap_h2() || machine_is_omap_h3()) {
+			if (machine_is_omap_osk() || machine_is_omap_h2() || machine_is_omap_h3() || machine_is_htcwizard() ) {
 				udelay(9);
 			} else {
 				udelay(4);
@@ -376,7 +376,7 @@ static int __init omap_kp_probe(struct p
 	input_register_device(omap_kp->input);
 
 	if (machine_is_omap_h2() || machine_is_omap_h3() ||
-	    machine_is_omap_perseus2()) {
+	    machine_is_omap_perseus2() || machine_is_htcwizard()) {
 		omap_writew(0xff, OMAP_MPUIO_BASE + OMAP_MPUIO_GPIO_DEBOUNCING);
 	}
 	/* scan current status and enable interrupt */
diff -Nurp linux-2.6.16.27/drivers/usb/gadget/omap_udc.c linux-2.6.16.27-fix/drivers/usb/gadget/omap_udc.c
--- linux-2.6.16.27/drivers/usb/gadget/omap_udc.c	2007-12-27 03:18:22.000000000 +0000
+++ linux-2.6.16.27-fix/drivers/usb/gadget/omap_udc.c	2007-12-27 03:01:13.000000000 +0000
@@ -2147,7 +2147,7 @@ int usb_gadget_register_driver (struct u
 	/* 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_htcwizard())
 		omap_vbus_session(&udc->gadget, 1);
 
 done:
@@ -2170,7 +2170,7 @@ int usb_gadget_unregister_driver (struct
 	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_htcwizard())
 		omap_vbus_session(&udc->gadget, 0);
 
 	if (udc->transceiver)
diff -Nurp linux-2.6.16.27/drivers/video/backlight/Kconfig linux-2.6.16.27-fix/drivers/video/backlight/Kconfig
--- linux-2.6.16.27/drivers/video/backlight/Kconfig	2006-07-17 14:58:58.000000000 +0100
+++ linux-2.6.16.27-fix/drivers/video/backlight/Kconfig	2007-12-27 02:56:52.000000000 +0000
@@ -57,4 +57,3 @@ config BACKLIGHT_HP680
 	help
 	  If you have a HP Jornada 680, say y to enable the
 	  backlight driver.
-
diff -Nurp linux-2.6.16.27/drivers/video/omap/Kconfig linux-2.6.16.27-fix/drivers/video/omap/Kconfig
--- linux-2.6.16.27/drivers/video/omap/Kconfig	2007-12-27 03:18:22.000000000 +0000
+++ linux-2.6.16.27-fix/drivers/video/omap/Kconfig	2007-12-27 02:57:49.000000000 +0000
@@ -52,4 +52,10 @@ config FB_OMAP_DMA_TUNE
           answer yes. Answer no if you have a dedicated video
           memory, or don't use any of the accelerated features.
 
+config FB_VSFB
+ 	bool "VSFB for HTC OMAP based phones"
+ 	depends on FB && MACH_HTCWIZARD
+ 	select FB_CFB_FILLRECT
+ 	select FB_CFB_COPYAREA
+ 	select FB_CFB_IMAGEBLIT
 
diff -Nurp linux-2.6.16.27/include/asm-arm/arch-omap/efb.h linux-2.6.16.27-fix/include/asm-arm/arch-omap/efb.h
--- linux-2.6.16.27/include/asm-arm/arch-omap/efb.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16.27-fix/include/asm-arm/arch-omap/efb.h	2007-12-27 02:42:03.000000000 +0000
@@ -0,0 +1,56 @@
+/*
+** efb.h for efb in /home/nico/work/tornado/linux-tornado
+** 
+** Made by nico
+** Login   <nico@chac.le-poulpe.net>
+** 
+** 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 <linux/init.h>
+
+/*
+ * 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 */
