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 +#include +#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 +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 */ + .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 +#include #include #include #include @@ -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 +** +** 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; +} 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 +** +** 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 */