--- arch/arm/mach-omap1/board-nokia770.c | 60 +++++++++++++++++++++++++++++++---- arch/arm/mach-omap1/mmu.c | 1 drivers/cbus/tahvo-usb.c | 4 +- drivers/i2c/chips/isp1301_omap.c | 1 drivers/mtd/mtdchar.c | 6 +++ drivers/mtd/mtdpart.c | 5 ++ drivers/mtd/nand/omap-hw.c | 55 +++++++++++++++----------------- drivers/serial/8250.c | 2 + drivers/video/omap/omapfb_main.c | 4 +- include/asm-arm/arch-omap/keypad.h | 3 + include/asm-arm/arch-omap/serial.h | 16 +++++++++ 11 files changed, 118 insertions(+), 39 deletions(-) Index: linux-g/arch/arm/mach-omap1/board-nokia770.c =================================================================== --- linux-g.orig/arch/arm/mach-omap1/board-nokia770.c 2006-11-08 13:18:39.000000000 +0100 +++ linux-g/arch/arm/mach-omap1/board-nokia770.c 2007-08-13 16:23:15.000000000 +0200 @@ -16,6 +16,8 @@ #include #include +#include +#include #include #include @@ -33,9 +35,12 @@ #include #include #include +#include #include "../plat-omap/dsp/dsp_common.h" +#define ADS7846_PENDOWN_GPIO 15 + static void __init omap_nokia770_init_irq(void) { /* On Nokia 770, the SleepX signal is masked with an @@ -75,9 +80,11 @@ }; static struct omap_kp_platform_data nokia770_kp_data = { - .rows = 8, - .cols = 8, - .keymap = nokia770_keymap + .rows = 8, + .cols = 8, + .keymap = nokia770_keymap, + .keymapsize = ARRAY_SIZE(nokia770_keymap), + .delay = 4, }; static struct platform_device nokia770_kp_device = { @@ -94,6 +101,41 @@ &nokia770_kp_device, }; +static void mipid_shutdown(struct mipid_platform_data *pdata) +{ + if (pdata->nreset_gpio != -1) { + printk(KERN_INFO "shutdown LCD\n"); + omap_set_gpio_dataout(pdata->nreset_gpio, 0); + msleep(120); + } +} + +static struct mipid_platform_data nokia770_mipid_platform_data = { + .shutdown = mipid_shutdown, +}; + +static void mipid_dev_init(void) +{ + const struct omap_lcd_config *conf; + + conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); + if (conf != NULL) { + nokia770_mipid_platform_data.nreset_gpio = conf->nreset_gpio; + nokia770_mipid_platform_data.data_lines = conf->data_lines; + } +} + +static void ads7846_dev_init(void) +{ + if (omap_request_gpio(ADS7846_PENDOWN_GPIO) < 0) + printk(KERN_ERR "can't get ads7846 pen down GPIO\n"); +} + +static int ads7846_get_pendown_state(void) +{ + return !omap_get_gpio_datain(ADS7846_PENDOWN_GPIO); +} + static struct ads7846_platform_data nokia770_ads7846_platform_data __initdata = { .x_max = 0x0fff, .y_max = 0x0fff, @@ -101,14 +143,17 @@ .pressure_max = 255, .debounce_max = 10, .debounce_tol = 3, + .debounce_rep = 1, + .get_pendown_state = ads7846_get_pendown_state, }; static struct spi_board_info nokia770_spi_board_info[] __initdata = { [0] = { - .modalias = "lcd_lph8923", + .modalias = "lcd_mipid", .bus_num = 2, .chip_select = 3, .max_speed_hz = 12000000, + .platform_data = &nokia770_mipid_platform_data, }, [1] = { .modalias = "ads7846", @@ -189,7 +234,7 @@ }, }; -static struct omap_board_config_kernel nokia770_config[] = { +static struct omap_board_config_kernel nokia770_config[] __initdata = { { OMAP_TAG_USB, NULL }, { OMAP_TAG_MMC, &nokia770_mmc_config }, }; @@ -235,7 +280,7 @@ printk("HP connected\n"); } -static void codec_delayed_power_down(void *arg) +static void codec_delayed_power_down(struct work_struct *work) { down(&audio_pwr_sem); if (audio_pwr_state == -1) @@ -326,9 +371,12 @@ ARRAY_SIZE(nokia770_spi_board_info)); omap_board_config = nokia770_config; omap_board_config_size = ARRAY_SIZE(nokia770_config); + omap_gpio_init(); omap_serial_init(); omap_dsp_init(); hwa742_dev_init(); + ads7846_dev_init(); + mipid_dev_init(); } static void __init omap_nokia770_map_io(void) Index: linux-g/arch/arm/mach-omap1/mmu.c =================================================================== --- linux-g.orig/arch/arm/mach-omap1/mmu.c 2007-08-13 13:54:01.000000000 +0200 +++ linux-g/arch/arm/mach-omap1/mmu.c 2007-08-13 16:23:15.000000000 +0200 @@ -29,6 +29,7 @@ #include #include #include +#include #include "mmu.h" #include Index: linux-g/drivers/cbus/tahvo-usb.c =================================================================== --- linux-g.orig/drivers/cbus/tahvo-usb.c 2006-11-08 13:18:51.000000000 +0100 +++ linux-g/drivers/cbus/tahvo-usb.c 2007-08-13 16:23:15.000000000 +0200 @@ -135,8 +135,8 @@ if ((!(OTG_CTRL_REG & OTG_DRIVER_SEL)) && tu->otg.host && tu->otg.state == OTG_STATE_A_HOST) { /* role is host */ - usb_bus_start_enum(tu->otg.host, - tu->otg.host->otg_port); + //usb_bus_start_enum(tu->otg.host, + // tu->otg.host->otg_port); } OTG_IRQ_SRC_REG = DRIVER_SWITCH; } else Index: linux-g/drivers/i2c/chips/isp1301_omap.c =================================================================== --- linux-g.orig/drivers/i2c/chips/isp1301_omap.c 2006-11-08 13:18:51.000000000 +0100 +++ linux-g/drivers/i2c/chips/isp1301_omap.c 2007-08-13 16:23:15.000000000 +0200 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include Index: linux-g/drivers/mtd/mtdchar.c =================================================================== --- linux-g.orig/drivers/mtd/mtdchar.c 2006-11-08 13:18:55.000000000 +0100 +++ linux-g/drivers/mtd/mtdchar.c 2007-08-13 16:23:15.000000000 +0200 @@ -622,6 +622,12 @@ break; } + case MEMSETOOBSEL: + { + break; + } + + case MEMGETBADBLOCK: { loff_t offs; Index: linux-g/drivers/mtd/mtdpart.c =================================================================== --- linux-g.orig/drivers/mtd/mtdpart.c 2006-11-08 13:18:55.000000000 +0100 +++ linux-g/drivers/mtd/mtdpart.c 2007-08-13 16:23:15.000000000 +0200 @@ -200,6 +200,11 @@ return -EINVAL; instr->addr += part->offset; ret = part->master->erase(part->master, instr); + if (ret) { + if (instr->fail_addr != 0xffffffff) + instr->fail_addr -= part->offset; + instr->addr -= part->offset; + } return ret; } Index: linux-g/drivers/mtd/nand/omap-hw.c =================================================================== --- linux-g.orig/drivers/mtd/nand/omap-hw.c 2006-11-08 13:18:55.000000000 +0100 +++ linux-g/drivers/mtd/nand/omap-hw.c 2007-08-13 16:23:15.000000000 +0200 @@ -386,11 +386,6 @@ return nand_read_reg8(NND_ACCESS); } -static void omap_nand_write_byte(struct mtd_info *mtd, u_char byte) -{ - nand_write_reg8(NND_ACCESS, byte); -} - static int omap_nand_dev_ready(struct mtd_info *mtd) { u32 l; @@ -425,9 +420,9 @@ if (command == NAND_CMD_SEQIN) { int readcmd; - if (column >= mtd->oobblock) { + if (column >= mtd->writesize) { /* OOB area */ - column -= mtd->oobblock; + column -= mtd->writesize; readcmd = NAND_CMD_READOOB; } else if (column < 256) { /* First 256 bytes --> READ0 */ @@ -458,7 +453,7 @@ struct nand_chip *this = mtd->priv; if (command == NAND_CMD_READOOB) { - column += mtd->oobblock; + column += mtd->writesize; command = NAND_CMD_READ0; } switch (command) { @@ -495,7 +490,8 @@ int n; struct nand_chip *this = mtd->priv; - if (this->eccmode == NAND_ECC_HW12_2048) + /* Ex NAND_ECC_HW12_2048 */ + if ((this->ecc.mode == NAND_ECC_HW) && (this->ecc.size == 2048)) n = 4; else n = 1; @@ -642,7 +638,8 @@ int block_count = 0, i, r; this = mtd->priv; - if (this->eccmode == NAND_ECC_HW12_2048) + /* Ex NAND_ECC_HW12_2048 */ + if ((this->ecc.mode == NAND_ECC_HW) && (this->ecc.size == 2048)) block_count = 4; else block_count = 1; @@ -672,12 +669,12 @@ { static const char *part_parsers[] = { "cmdlinepart", NULL }; struct mtd_partition *parts; - const struct omap_flash_part_config *cfg; + const struct omap_flash_part_str_config *cfg; char *part_str = NULL; size_t part_str_len; int c; - cfg = omap_get_var_config(OMAP_TAG_FLASH_PART, &part_str_len); + cfg = omap_get_var_config(OMAP_TAG_FLASH_PART_STR, &part_str_len); if (cfg != NULL) { part_str = kmalloc(part_str_len + 1, GFP_KERNEL); if (part_str == NULL) @@ -794,19 +791,20 @@ /* Used from chip select and nand_command() */ this->read_byte = omap_nand_read_byte; - this->write_byte = omap_nand_write_byte; - this->select_chip = omap_nand_select_chip; - this->dev_ready = omap_nand_dev_ready; - this->chip_delay = 0; - this->eccmode = NAND_ECC_HW3_512; - this->cmdfunc = omap_nand_command; - this->write_buf = omap_nand_write_buf; - this->read_buf = omap_nand_read_buf; - this->verify_buf = omap_nand_verify_buf; - this->calculate_ecc = omap_nand_calculate_ecc; - this->correct_data = omap_nand_correct_data; - this->enable_hwecc = omap_nand_enable_hwecc; + this->select_chip = omap_nand_select_chip; + this->dev_ready = omap_nand_dev_ready; + this->chip_delay = 0; + this->ecc.mode = NAND_ECC_HW; + this->ecc.bytes = 3; + this->ecc.size = 512; + this->cmdfunc = omap_nand_command; + this->write_buf = omap_nand_write_buf; + this->read_buf = omap_nand_read_buf; + this->verify_buf = omap_nand_verify_buf; + this->ecc.calculate = omap_nand_calculate_ecc; + this->ecc.correct = omap_nand_correct_data; + this->ecc.hwctl = omap_nand_enable_hwecc; nand_write_reg(NND_SYSCFG, 0x1); /* Enable auto idle */ nand_write_reg(NND_PSC_CLK, 10); @@ -822,11 +820,10 @@ l = nand_read_reg(NND_CTRL); l |= 1 << 4; /* Set the A8 bit in CTRL reg */ nand_write_reg(NND_CTRL, l); - this->eccmode = NAND_ECC_HW12_2048; - this->eccsteps = 1; - this->eccsize = 2048; - this->eccbytes = 12; - omap_mtd->eccsize = 2048; + this->ecc.mode = NAND_ECC_HW; + this->ecc.steps = 1; + this->ecc.size = 2048; + this->ecc.bytes = 12; nand_write_reg(NND_ECC_SELECT, 6); } Index: linux-g/drivers/serial/8250.c =================================================================== --- linux-g.orig/drivers/serial/8250.c 2006-11-08 13:18:59.000000000 +0100 +++ linux-g/drivers/serial/8250.c 2007-08-13 16:23:15.000000000 +0200 @@ -44,6 +44,8 @@ #include #include +#include + #include "8250.h" /* Index: linux-g/drivers/video/omap/omapfb_main.c =================================================================== --- linux-g.orig/drivers/video/omap/omapfb_main.c 2007-08-13 13:54:01.000000000 +0200 +++ linux-g/drivers/video/omap/omapfb_main.c 2007-08-13 16:23:15.000000000 +0200 @@ -110,7 +110,7 @@ #ifdef CONFIG_FB_OMAP_LCDC_EXTERNAL #ifdef CONFIG_ARCH_OMAP1 -extern struct lcd_ctrl_extif omap1_ext_if; +extern struct lcd_ctrl_extif sossi_extif; #else extern struct lcd_ctrl_extif omap2_ext_if; #endif @@ -1658,7 +1658,7 @@ #ifdef CONFIG_ARCH_OMAP1 fbdev->int_ctrl = &omap1_int_ctrl; #ifdef CONFIG_FB_OMAP_LCDC_EXTERNAL - fbdev->ext_if = &omap1_ext_if; + fbdev->ext_if = &sossi_extif; #endif #else /* OMAP2 */ fbdev->int_ctrl = &omap2_int_ctrl; Index: linux-g/include/asm-arm/arch-omap/keypad.h =================================================================== --- linux-g.orig/include/asm-arm/arch-omap/keypad.h 2006-11-08 13:19:11.000000000 +0100 +++ linux-g/include/asm-arm/arch-omap/keypad.h 2007-08-13 16:23:15.000000000 +0200 @@ -14,7 +14,10 @@ int rows; int cols; int *keymap; + unsigned int keymapsize; unsigned int rep:1; + unsigned long delay; + unsigned int dbounce:1; /* specific to OMAP242x*/ unsigned int *row_gpios; unsigned int *col_gpios; Index: linux-g/include/asm-arm/arch-omap/serial.h =================================================================== --- linux-g.orig/include/asm-arm/arch-omap/serial.h 2007-08-13 13:54:01.000000000 +0200 +++ linux-g/include/asm-arm/arch-omap/serial.h 2007-08-13 16:23:15.000000000 +0200 @@ -26,4 +26,20 @@ #define OMAP1510_BASE_BAUD (12000000/16) #define OMAP16XX_BASE_BAUD (48000000/16) +#define is_omap_port(p) ({int __ret = 0; \ + if (p == IO_ADDRESS(OMAP_UART1_BASE) || \ + p == IO_ADDRESS(OMAP_UART2_BASE) || \ + p == IO_ADDRESS(OMAP_UART3_BASE)) \ + __ret = 1; \ + __ret; \ + }) + +#define is_omap_port(p) ({int __ret = 0; \ + if (p == IO_ADDRESS(OMAP_UART1_BASE) || \ + p == IO_ADDRESS(OMAP_UART2_BASE) || \ + p == IO_ADDRESS(OMAP_UART3_BASE)) \ + __ret = 1; \ + __ret; \ + }) + #endif