From 73c9713cacf49f300e034bbb6b47df17caf29d4f Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Mon, 4 Feb 2008 20:14:18 +0000 Subject: linux-davinci : Update defconfig. Add patch to support NAND flash. --- conf/machine/davinci-sffsdr.conf | 2 +- packages/linux/linux-davinci/davinci-nand.patch | 905 +++++++++++++++++++++ .../linux/linux-davinci/davinci-sffsdr/defconfig | 85 +- packages/linux/linux-davinci_2.6.x+git-davinci.bb | 1 + 4 files changed, 933 insertions(+), 60 deletions(-) create mode 100644 packages/linux/linux-davinci/davinci-nand.patch diff --git a/conf/machine/davinci-sffsdr.conf b/conf/machine/davinci-sffsdr.conf index ecff6fae13..faf86c5ed0 100644 --- a/conf/machine/davinci-sffsdr.conf +++ b/conf/machine/davinci-sffsdr.conf @@ -19,7 +19,7 @@ EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" #ROOT_FLASH_SIZE = "29" -MACHINE_FEATURES = "kernel26 pcmcia usbhost alsa" +MACHINE_FEATURES = "kernel26 serial" require conf/machine/include/tune-arm926ejs.inc diff --git a/packages/linux/linux-davinci/davinci-nand.patch b/packages/linux/linux-davinci/davinci-nand.patch new file mode 100644 index 0000000000..33e53cf095 --- /dev/null +++ b/packages/linux/linux-davinci/davinci-nand.patch @@ -0,0 +1,905 @@ +Index: linux-davinci/drivers/mtd/nand/davinci_nand.c +=================================================================== +--- /dev/null ++++ linux-davinci/drivers/mtd/nand/davinci_nand.c +@@ -0,0 +1,638 @@ ++/* ++ * linux/drivers/mtd/nand/davinci_nand.c ++ * ++ * NAND Flash Driver ++ * ++ * Copyright (C) 2006 Texas Instruments. ++ * ++ * ported to 2.6.23 (C) 2008 by ++ * Sander Huijsen ++ * Troy Kisky ++ * Dirk Behme ++ * ++ * -------------------------------------------------------------------------- ++ * ++ * 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., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * -------------------------------------------------------------------------- ++ * ++ * Overview: ++ * This is a device driver for the NAND flash device found on the ++ * DaVinci board which utilizes the Samsung k9k2g08 part. ++ * ++ * Modifications: ++ * ver. 1.0: Feb 2005, Vinod/Sudhakar ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++#define DAVINCI_NAND_ECC_MODE NAND_ECC_HW3_512 ++#else ++#define DAVINCI_NAND_ECC_MODE NAND_ECC_SOFT ++#endif ++ ++#define DRIVER_NAME "davinci_nand" ++ ++static struct clk *nand_clock; ++static void __iomem *nand_vaddr; ++ ++/* ++ * MTD structure for DaVinici board ++ */ ++static struct mtd_info *nand_davinci_mtd; ++ ++#ifdef CONFIG_MTD_PARTITIONS ++const char *part_probes[] = { "cmdlinepart", NULL }; ++#endif ++ ++static uint8_t scan_ff_pattern[] = { 0xff, 0xff }; ++ ++/* BB marker is byte 5 in OOB of page 0 */ ++static struct nand_bbt_descr davinci_memorybased_small = { ++ .options = NAND_BBT_SCAN2NDPAGE, ++ .offs = 5, ++ .len = 1, ++ .pattern = scan_ff_pattern ++}; ++ ++/* BB marker is bytes 0-1 in OOB of page 0 */ ++static struct nand_bbt_descr davinci_memorybased_large = { ++ .options = 0, ++ .offs = 0, ++ .len = 2, ++ .pattern = scan_ff_pattern ++}; ++ ++inline unsigned int davinci_nand_readl(int offset) ++{ ++ return davinci_readl(DAVINCI_ASYNC_EMIF_CNTRL_BASE + offset); ++} ++ ++inline void davinci_nand_writel(unsigned long value, int offset) ++{ ++ davinci_writel(value, DAVINCI_ASYNC_EMIF_CNTRL_BASE + offset); ++} ++ ++/* ++ * Hardware specific access to control-lines ++ */ ++static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, ++ unsigned int ctrl) ++{ ++ struct nand_chip *chip = mtd->priv; ++ u32 IO_ADDR_W = (u32)chip->IO_ADDR_W; ++ ++ /* Did the control lines change? */ ++ if (ctrl & NAND_CTRL_CHANGE) { ++ IO_ADDR_W &= ~(MASK_ALE|MASK_CLE); ++ ++ if ((ctrl & NAND_CTRL_CLE) == NAND_CTRL_CLE) ++ IO_ADDR_W |= MASK_CLE; ++ else if ((ctrl & NAND_CTRL_ALE) == NAND_CTRL_ALE) ++ IO_ADDR_W |= MASK_ALE; ++ ++ chip->IO_ADDR_W = (void __iomem *)IO_ADDR_W; ++ } ++ ++ if (cmd != NAND_CMD_NONE) ++ writeb(cmd, chip->IO_ADDR_W); ++} ++ ++static void nand_davinci_select_chip(struct mtd_info *mtd, int chip) ++{ ++ /* do nothing */ ++} ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++static void nand_davinci_enable_hwecc(struct mtd_info *mtd, int mode) ++{ ++ u32 retval; ++ ++ /* Reset ECC hardware */ ++ retval = davinci_nand_readl(NANDF1ECC_OFFSET); ++ ++ /* Restart ECC hardware */ ++ retval = davinci_nand_readl(NANDFCR_OFFSET); ++ retval |= (1 << 8); ++ davinci_nand_writel(retval, NANDFCR_OFFSET); ++} ++ ++/* ++ * Read DaVinci ECC register ++ */ ++static u32 nand_davinci_readecc(struct mtd_info *mtd) ++{ ++ /* Read register ECC and clear it */ ++ return davinci_nand_readl(NANDF1ECC_OFFSET); ++} ++ ++/* ++ * Read DaVinci ECC registers and rework into MTD format ++ */ ++static int nand_davinci_calculate_ecc(struct mtd_info *mtd, ++ const u_char *dat, u_char *ecc_code) ++{ ++ unsigned int ecc_val = nand_davinci_readecc(mtd); ++ /* squeeze 0 middle bits out so that it fits in 3 bytes */ ++ unsigned int tmp = (ecc_val&0x0fff)|((ecc_val&0x0fff0000)>>4); ++ /* invert so that erased block ecc is correct */ ++ tmp = ~tmp; ++ ecc_code[0] = (u_char)(tmp); ++ ecc_code[1] = (u_char)(tmp >> 8); ++ ecc_code[2] = (u_char)(tmp >> 16); ++ ++ return 0; ++} ++ ++static int nand_davinci_correct_data(struct mtd_info *mtd, u_char *dat, ++ u_char *read_ecc, u_char *calc_ecc) ++{ ++ struct nand_chip *chip = mtd->priv; ++ u_int32_t eccNand = read_ecc[0] | (read_ecc[1] << 8) | ++ (read_ecc[2] << 16); ++ u_int32_t eccCalc = calc_ecc[0] | (calc_ecc[1] << 8) | ++ (calc_ecc[2] << 16); ++ u_int32_t diff = eccCalc ^ eccNand; ++ ++ if (diff) { ++ if ((((diff>>12)^diff) & 0xfff) == 0xfff) { ++ /* Correctable error */ ++ if ((diff>>(12+3)) < chip->ecc.size) { ++ dat[diff>>(12+3)] ^= (1 << ((diff>>12)&7)); ++ return 1; ++ } else { ++ return -1; ++ } ++ } else if (!(diff & (diff-1))) { ++ /* Single bit ECC error in the ECC itself, ++ nothing to fix */ ++ return 1; ++ } else { ++ /* Uncorrectable error */ ++ return -1; ++ } ++ ++ } ++ return 0; ++} ++#endif ++ ++/* ++ * Read OOB data from flash. ++ */ ++static int read_oob_and_check(struct mtd_info *mtd, loff_t offs, uint8_t *buf, ++ struct nand_bbt_descr *bd) ++{ ++ int i, ret; ++ int page; ++ struct nand_chip *chip = mtd->priv; ++ ++ /* Calculate page address from offset */ ++ page = (int)(offs >> chip->page_shift); ++ page &= chip->pagemask; ++ ++ /* Read OOB data from flash */ ++ ret = chip->ecc.read_oob(mtd, chip, page, 1); ++ if (ret < 0) ++ return ret; ++ ++ /* Copy read OOB data to the buffer*/ ++ memcpy(buf, chip->oob_poi, mtd->oobsize); ++ ++ /* Check pattern against BBM in OOB area */ ++ for (i = 0; i < bd->len; i++) { ++ if (buf[bd->offs + i] != bd->pattern[i]) ++ return 1; ++ } ++ return 0; ++} ++ ++/* ++ * Fill in the memory based Bad Block Table (BBT). ++ */ ++static int nand_davinci_memory_bbt(struct mtd_info *mtd, ++ struct nand_bbt_descr *bd) ++{ ++ int i, numblocks; ++ int startblock = 0; ++ loff_t from = 0; ++ struct nand_chip *chip = mtd->priv; ++ int blocksize = 1 << chip->bbt_erase_shift; ++ uint8_t *buf = chip->buffers->databuf; ++ int len = bd->options & NAND_BBT_SCAN2NDPAGE ? 2 : 1; ++ ++ /* -numblocks- is 2 times the actual number of eraseblocks */ ++ numblocks = mtd->size >> (chip->bbt_erase_shift - 1); ++ ++ /* Now loop through all eraseblocks in the flash */ ++ for (i = startblock; i < numblocks; i += 2) { ++ int j, ret; ++ int offs = from; ++ ++ /* If NAND_BBT_SCAN2NDPAGE flag is set in bd->options, ++ * also each 2nd page of an eraseblock is checked ++ * for a Bad Block Marker. In that case, len equals 2. ++ */ ++ for (j = 0; j < len; j++) { ++ /* Read OOB data and check pattern */ ++ ret = read_oob_and_check(mtd, from, buf, bd); ++ if (ret < 0) ++ return ret; ++ ++ /* Check pattern for bad block markers */ ++ if (ret) { ++ /* Mark bad block by writing 0b11 in the ++ table */ ++ chip->bbt[i >> 3] |= 0x03 << (i & 0x6); ++ ++ printk(KERN_WARNING "Bad eraseblock %d at " \ ++ "0x%08x\n", i >> 1, ++ (unsigned int)from); ++ ++ mtd->ecc_stats.badblocks++; ++ break; ++ } ++ offs += mtd->writesize; ++ } ++ ++ /* Make -from- point to next eraseblock */ ++ from += blocksize; ++ } ++ ++ printk(KERN_NOTICE "Bad block scan: %d out of %d blocks are bad.\n", ++ mtd->ecc_stats.badblocks, numblocks>>1); ++ ++ return 0; ++} ++ ++/* ++ * This function creates a memory based bad block table (BBT). ++ * It is largely based on the standard BBT function, but all ++ * unnecessary junk is thrown out to speed up. ++ */ ++static int nand_davinci_scan_bbt(struct mtd_info *mtd) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct nand_bbt_descr *bd; ++ int len, ret = 0; ++ ++ chip->bbt_td = NULL; ++ chip->bbt_md = NULL; ++ ++ /* pagesize determines location of BBM */ ++ if (mtd->writesize > 512) ++ bd = &davinci_memorybased_large; ++ else ++ bd = &davinci_memorybased_small; ++ ++ chip->badblock_pattern = bd; ++ ++ /* Use 2 bits per page meaning 4 page markers per byte */ ++ len = mtd->size >> (chip->bbt_erase_shift + 2); ++ ++ /* Allocate memory (2bit per block) and clear the memory bad block ++ table */ ++ chip->bbt = kzalloc(len, GFP_KERNEL); ++ if (!chip->bbt) { ++ printk(KERN_ERR "nand_davinci_scan_bbt: Out of memory\n"); ++ return -ENOMEM; ++ } ++ ++ /* Now try to fill in the BBT */ ++ ret = nand_davinci_memory_bbt(mtd, bd); ++ if (ret) { ++ printk(KERN_ERR "nand_davinci_scan_bbt: " ++ "Can't scan flash and build the RAM-based BBT\n"); ++ ++ kfree(chip->bbt); ++ chip->bbt = NULL; ++ } ++ ++ return ret; ++} ++ ++/* ++ * Read from memory register: we can read 4 bytes at a time. ++ * The hardware takes care of actually reading the NAND flash. ++ */ ++static void nand_davinci_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) ++{ ++ int i; ++ int num_words = len >> 2; ++ u32 *p = (u32 *)buf; ++ struct nand_chip *chip = mtd->priv; ++ ++ for (i = 0; i < num_words; i++) ++ p[i] = readl(chip->IO_ADDR_R); ++} ++ ++/* ++ * Check hardware register for wait status. Returns 1 if device is ready, ++ * 0 if it is still busy. ++ */ ++static int nand_davinci_dev_ready(struct mtd_info *mtd) ++{ ++ return (davinci_nand_readl(NANDFSR_OFFSET) & NAND_BUSY_FLAG); ++} ++ ++static void nand_davinci_set_eccsize(struct nand_chip *chip) ++{ ++ chip->ecc.size = 256; ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ switch (chip->ecc.mode) { ++ case NAND_ECC_HW12_2048: ++ chip->ecc.size = 2048; ++ break; ++ ++ case NAND_ECC_HW3_512: ++ case NAND_ECC_HW6_512: ++ case NAND_ECC_HW8_512: ++ chip->ecc.size = 512; ++ break; ++ ++ case NAND_ECC_HW3_256: ++ default: ++ /* do nothing */ ++ break; ++ } ++#endif ++} ++ ++static void nand_davinci_set_eccbytes(struct nand_chip *chip) ++{ ++ chip->ecc.bytes = 3; ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ switch (chip->ecc.mode) { ++ case NAND_ECC_HW12_2048: ++ chip->ecc.bytes += 4; ++ case NAND_ECC_HW8_512: ++ chip->ecc.bytes += 2; ++ case NAND_ECC_HW6_512: ++ chip->ecc.bytes += 3; ++ case NAND_ECC_HW3_512: ++ case NAND_ECC_HW3_256: ++ default: ++ /* do nothing */ ++ break; ++ } ++#endif ++} ++ ++static void __devinit nand_davinci_flash_init(void) ++{ ++ u32 regval, tmp; ++ ++ /* Check for correct pin mux, reconfigure if necessary */ ++ tmp = davinci_readl(DAVINCI_SYSTEM_MODULE_BASE + PINMUX0); ++ ++ if ((tmp & 0x20020C1F) != 0x00000C1F) { ++ /* Disable HPI and ATA mux */ ++ davinci_mux_peripheral(DAVINCI_MUX_HPIEN, 0); ++ davinci_mux_peripheral(DAVINCI_MUX_ATAEN, 0); ++ ++ /* Enable VLYNQ and AEAW */ ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW0, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW1, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW2, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW3, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW4, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_VLSCREN, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_VLYNQEN, 1); ++ ++ regval = davinci_readl(DAVINCI_SYSTEM_MODULE_BASE + PINMUX0); ++ ++ printk(KERN_WARNING "Warning: MUX config for NAND: Set " \ ++ "PINMUX0 reg to 0x%08x, was 0x%08x, should be done " \ ++ "by bootloader.\n", regval, tmp); ++ } ++ ++ regval = davinci_nand_readl(AWCCR_OFFSET); ++ regval |= 0x10000000; ++ davinci_nand_writel(regval, AWCCR_OFFSET); ++ ++ /*------------------------------------------------------------------* ++ * NAND FLASH CHIP TIMEOUT @ 459 MHz * ++ * * ++ * AEMIF.CLK freq = PLL1/6 = 459/6 = 76.5 MHz * ++ * AEMIF.CLK period = 1/76.5 MHz = 13.1 ns * ++ * * ++ *------------------------------------------------------------------*/ ++ regval = 0 ++ | (0 << 31) /* selectStrobe */ ++ | (0 << 30) /* extWait */ ++ | (1 << 26) /* writeSetup 10 ns */ ++ | (3 << 20) /* writeStrobe 40 ns */ ++ | (1 << 17) /* writeHold 10 ns */ ++ | (0 << 13) /* readSetup 10 ns */ ++ | (3 << 7) /* readStrobe 60 ns */ ++ | (0 << 4) /* readHold 10 ns */ ++ | (3 << 2) /* turnAround ?? ns */ ++ | (0 << 0) /* asyncSize 8-bit bus */ ++ ; ++ tmp = davinci_nand_readl(A1CR_OFFSET); ++ if (tmp != regval) { ++ printk(KERN_WARNING "Warning: NAND config: Set A1CR " \ ++ "reg to 0x%08x, was 0x%08x, should be done by " \ ++ "bootloader.\n", regval, tmp); ++ davinci_nand_writel(regval, A1CR_OFFSET); /* 0x0434018C */ ++ } ++ ++ davinci_nand_writel(0x00000101, NANDFCR_OFFSET); ++} ++ ++/* ++ * Main initialization routine ++ */ ++int __devinit nand_davinci_probe(struct platform_device *pdev) ++{ ++ struct nand_platform_data *pdata = pdev->dev.platform_data; ++ struct resource *res = pdev->resource; ++ struct nand_chip *chip; ++ struct device *dev = NULL; ++ u32 nand_rev_code; ++#ifdef CONFIG_MTD_CMDLINE_PARTS ++ char *master_name; ++ int mtd_parts_nb = 0; ++ struct mtd_partition *mtd_parts = 0; ++#endif ++ ++ nand_clock = clk_get(dev, "AEMIFCLK"); ++ if (IS_ERR(nand_clock)) { ++ printk(KERN_ERR "Error %ld getting AEMIFCLK clock?\n", ++ PTR_ERR(nand_clock)); ++ return -1; ++ } ++ ++ clk_enable(nand_clock); ++ ++ /* Allocate memory for MTD device structure and private data */ ++ nand_davinci_mtd = kmalloc(sizeof(struct mtd_info) + ++ sizeof(struct nand_chip), GFP_KERNEL); ++ ++ if (!nand_davinci_mtd) { ++ printk(KERN_ERR "Unable to allocate davinci NAND MTD device " \ ++ "structure.\n"); ++ clk_disable(nand_clock); ++ return -ENOMEM; ++ } ++ ++ /* Get pointer to private data */ ++ chip = (struct nand_chip *) (&nand_davinci_mtd[1]); ++ ++ /* Initialize structures */ ++ memset((char *)nand_davinci_mtd, 0, sizeof(struct mtd_info)); ++ memset((char *)chip, 0, sizeof(struct nand_chip)); ++ ++ /* Link the private data with the MTD structure */ ++ nand_davinci_mtd->priv = chip; ++ ++ nand_rev_code = davinci_nand_readl(NRCSR_OFFSET); ++ ++ printk("DaVinci NAND Controller rev. %d.%d\n", ++ (nand_rev_code >> 8) & 0xff, nand_rev_code & 0xff); ++ ++ nand_vaddr = ioremap(res->start, res->end - res->start); ++ if (nand_vaddr == NULL) { ++ printk(KERN_ERR "DaVinci NAND: ioremap failed.\n"); ++ clk_disable(nand_clock); ++ kfree(nand_davinci_mtd); ++ return -ENOMEM; ++ } ++ ++ chip->IO_ADDR_R = (void __iomem *)nand_vaddr; ++ chip->IO_ADDR_W = (void __iomem *)nand_vaddr; ++ chip->chip_delay = 0; ++ chip->select_chip = nand_davinci_select_chip; ++ chip->options = 0; ++ chip->ecc.mode = DAVINCI_NAND_ECC_MODE; ++ ++ /* Set ECC size and bytes */ ++ nand_davinci_set_eccsize(chip); ++ nand_davinci_set_eccbytes(chip); ++ ++ /* Set address of hardware control function */ ++ chip->cmd_ctrl = nand_davinci_hwcontrol; ++ chip->dev_ready = nand_davinci_dev_ready; ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ chip->ecc.calculate = nand_davinci_calculate_ecc; ++ chip->ecc.correct = nand_davinci_correct_data; ++ chip->ecc.hwctl = nand_davinci_enable_hwecc; ++#endif ++ ++ /* Speed up the read buffer */ ++ chip->read_buf = nand_davinci_read_buf; ++ ++ /* Speed up the creation of the bad block table */ ++ chip->scan_bbt = nand_davinci_scan_bbt; ++ ++ nand_davinci_flash_init(); ++ ++ nand_davinci_mtd->owner = THIS_MODULE; ++ ++ /* Scan to find existence of the device */ ++ if (nand_scan(nand_davinci_mtd, 1)) { ++ printk(KERN_ERR "Chip Select is not set for NAND\n"); ++ clk_disable(nand_clock); ++ kfree(nand_davinci_mtd); ++ return -ENXIO; ++ } ++ ++ /* Register the partitions */ ++ add_mtd_partitions(nand_davinci_mtd, pdata->parts, pdata->nr_parts); ++ ++#ifdef CONFIG_MTD_CMDLINE_PARTS ++ /* Set nand_davinci_mtd->name = 0 temporarily */ ++ master_name = nand_davinci_mtd->name; ++ nand_davinci_mtd->name = (char *)0; ++ ++ /* nand_davinci_mtd->name == 0, means: don't bother checking ++ */ ++ mtd_parts_nb = parse_mtd_partitions(nand_davinci_mtd, part_probes, ++ &mtd_parts, 0); ++ ++ /* Restore nand_davinci_mtd->name */ ++ nand_davinci_mtd->name = master_name; ++ ++ add_mtd_partitions(nand_davinci_mtd, mtd_parts, mtd_parts_nb); ++#endif ++ ++ return 0; ++} ++ ++/* ++ * Clean up routine ++ */ ++static int nand_davinci_remove(struct platform_device *pdev) ++{ ++ clk_disable(nand_clock); ++ ++ if (nand_vaddr) ++ iounmap(nand_vaddr); ++ ++ /* Release resources, unregister device */ ++ nand_release(nand_davinci_mtd); ++ ++ /* Free the MTD device structure */ ++ kfree(nand_davinci_mtd); ++ ++ return 0; ++} ++ ++ ++static struct platform_driver nand_davinci_driver = { ++ .probe = nand_davinci_probe, ++ .remove = nand_davinci_remove, ++ .driver = { ++ .name = DRIVER_NAME, ++ }, ++}; ++ ++static int __init nand_davinci_init(void) ++{ ++ return platform_driver_register(&nand_davinci_driver); ++} ++module_init(nand_davinci_init); ++ ++#ifdef MODULE ++static void __exit nand_davinci_exit(void) ++{ ++ platform_driver_unregister(&nand_davinci_driver); ++} ++module_exit(nand_davinci_exit); ++#endif ++ ++MODULE_ALIAS(DRIVER_NAME); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Texas Instruments"); ++MODULE_DESCRIPTION("Board-specific glue layer for NAND flash on davinci" \ ++ "board"); +Index: linux-davinci/drivers/mtd/nand/Makefile +=================================================================== +--- linux-davinci.orig/drivers/mtd/nand/Makefile ++++ linux-davinci/drivers/mtd/nand/Makefile +@@ -29,5 +29,6 @@ obj-$(CONFIG_MTD_NAND_AT91) += at91_nan + obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270_nand.o + obj-$(CONFIG_MTD_NAND_BASLER_EXCITE) += excite_nandflash.o + obj-$(CONFIG_MTD_NAND_PLATFORM) += plat_nand.o ++obj-$(CONFIG_MTD_NAND_DAVINCI) += davinci_nand.o + + nand-objs := nand_base.o nand_bbt.o +Index: linux-davinci/drivers/mtd/nand/Kconfig +=================================================================== +--- linux-davinci.orig/drivers/mtd/nand/Kconfig ++++ linux-davinci/drivers/mtd/nand/Kconfig +@@ -293,5 +293,17 @@ config MTD_NAND_PLATFORM + devices. You will need to provide platform-specific functions + via platform_data. + ++config MTD_NAND_DAVINCI ++ tristate "NAND Flash device on DaVinci SoC" ++ depends on MTD_NAND ++ select MTD_PARTITIONS ++ help ++ Support for NAND flash on Texas Instruments DaVinci SoC. ++ ++config NAND_FLASH_HW_ECC ++ bool "Hardware ECC Support on NAND Device for DaVinci" ++ depends on MTD_NAND_DAVINCI ++ help ++ Support for Hardware ECC on NAND device for DaVinci. + + endif # MTD_NAND +Index: linux-davinci/include/asm-arm/arch-davinci/nand.h +=================================================================== +--- /dev/null ++++ linux-davinci/include/asm-arm/arch-davinci/nand.h +@@ -0,0 +1,45 @@ ++/* ++ * include/asm-arm/arch-davinci/nand.h ++ * ++ * Copyright (C) 2006 Texas Instruments. ++ * ++ * ported to 2.6.23 (C) 2008 by ++ * Sander Huijsen ++ * Troy Kisky ++ * Dirk Behme ++ * ++ * -------------------------------------------------------------------------- ++ * ++ * 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., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * -------------------------------------------------------------------------- ++ * ++ */ ++ ++#ifndef __ARCH_ARM_DAVINCI_NAND_H ++#define __ARCH_ARM_DAVINCI_NAND_H ++ ++#define NRCSR_OFFSET 0x00 ++#define AWCCR_OFFSET 0x04 ++#define A1CR_OFFSET 0x10 ++#define NANDFCR_OFFSET 0x60 ++#define NANDFSR_OFFSET 0x64 ++#define NANDF1ECC_OFFSET 0x70 ++ ++#define MASK_ALE 0x0A ++#define MASK_CLE 0x10 ++ ++#define NAND_BUSY_FLAG 0x01 ++ ++#endif /* __ARCH_ARM_DAVINCI_NAND_H */ +Index: linux-davinci/arch/arm/mach-davinci/mux.c +=================================================================== +--- linux-davinci.orig/arch/arm/mach-davinci/mux.c ++++ linux-davinci/arch/arm/mach-davinci/mux.c +@@ -15,10 +15,6 @@ + + #include + +-/* System control register offsets */ +-#define PINMUX0 0x00 +-#define PINMUX1 0x04 +- + static DEFINE_SPINLOCK(mux_lock); + + void davinci_mux_peripheral(unsigned int mux, unsigned int enable) +Index: linux-davinci/include/asm-arm/arch-davinci/mux.h +=================================================================== +--- linux-davinci.orig/include/asm-arm/arch-davinci/mux.h ++++ linux-davinci/include/asm-arm/arch-davinci/mux.h +@@ -11,6 +11,11 @@ + #ifndef __ASM_ARCH_MUX_H + #define __ASM_ARCH_MUX_H + ++/* System control register offsets */ ++#define PINMUX0 0x00 ++#define PINMUX1 0x04 ++ ++/* System control register bits */ + #define DAVINCI_MUX_AEAW0 0 + #define DAVINCI_MUX_AEAW1 1 + #define DAVINCI_MUX_AEAW2 2 +Index: linux-davinci/include/linux/mtd/nand.h +=================================================================== +--- linux-davinci.orig/include/linux/mtd/nand.h ++++ linux-davinci/include/linux/mtd/nand.h +@@ -123,6 +123,13 @@ typedef enum { + NAND_ECC_SOFT, + NAND_ECC_HW, + NAND_ECC_HW_SYNDROME, ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ NAND_ECC_HW3_256, ++ NAND_ECC_HW3_512, ++ NAND_ECC_HW6_512, ++ NAND_ECC_HW8_512, ++ NAND_ECC_HW12_2048, ++#endif + } nand_ecc_modes_t; + + /* +Index: linux-davinci/drivers/mtd/nand/nand_base.c +=================================================================== +--- linux-davinci.orig/drivers/mtd/nand/nand_base.c ++++ linux-davinci/drivers/mtd/nand/nand_base.c +@@ -2456,6 +2456,13 @@ int nand_scan_tail(struct mtd_info *mtd) + chip->ecc.write_page_raw = nand_write_page_raw; + + switch (chip->ecc.mode) { ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ case NAND_ECC_HW12_2048: ++ case NAND_ECC_HW8_512: ++ case NAND_ECC_HW6_512: ++ case NAND_ECC_HW3_512: ++ case NAND_ECC_HW3_256: ++#endif + case NAND_ECC_HW: + /* Use standard hwecc read page function ? */ + if (!chip->ecc.read_page) +Index: linux-davinci/arch/arm/mach-davinci/board-evm.c +=================================================================== +--- linux-davinci.orig/arch/arm/mach-davinci/board-evm.c ++++ linux-davinci/arch/arm/mach-davinci/board-evm.c +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -27,6 +28,7 @@ + #include + + #include ++#include + #include + + /* other misc. init functions */ +@@ -38,7 +40,7 @@ void __init davinci_init_common_hw(void) + /* NOR Flash base address set to CS0 by default */ + #define NOR_FLASH_PHYS 0x02000000 + +-static struct mtd_partition davinci_evm_partitions[] = { ++static struct mtd_partition davinci_evm_norflash_partitions[] = { + /* bootloader (U-Boot, etc) in first 4 sectors */ + { + .name = "bootloader", +@@ -69,30 +71,63 @@ static struct mtd_partition davinci_evm_ + } + }; + +-static struct physmap_flash_data davinci_evm_flash_data = { ++static struct physmap_flash_data davinci_evm_norflash_data = { + .width = 2, +- .parts = davinci_evm_partitions, +- .nr_parts = ARRAY_SIZE(davinci_evm_partitions), ++ .parts = davinci_evm_norflash_partitions, ++ .nr_parts = ARRAY_SIZE(davinci_evm_norflash_partitions), + }; + + /* NOTE: CFI probe will correctly detect flash part as 32M, but EMIF + * limits addresses to 16M, so using addresses past 16M will wrap */ +-static struct resource davinci_evm_flash_resource = { ++static struct resource davinci_evm_norflash_resource = { + .start = NOR_FLASH_PHYS, + .end = NOR_FLASH_PHYS + SZ_16M - 1, + .flags = IORESOURCE_MEM, + }; + +-static struct platform_device davinci_evm_flash_device = { ++static struct platform_device davinci_evm_norflash_device = { + .name = "physmap-flash", + .id = 0, + .dev = { +- .platform_data = &davinci_evm_flash_data, ++ .platform_data = &davinci_evm_norflash_data, + }, + .num_resources = 1, +- .resource = &davinci_evm_flash_resource, ++ .resource = &davinci_evm_norflash_resource, + }; + ++#if defined(CONFIG_MTD_NAND_DAVINCI) || defined(CONFIG_MTD_NAND_DAVINCI_MODULE) ++struct mtd_partition davinci_evm_nandflash_partition[] = { ++ /* 5 MB space at the beginning for bootloader and kernel */ ++ { ++ .name = "NAND filesystem", ++ .offset = 5 * SZ_1M, ++ .size = MTDPART_SIZ_FULL, ++ .mask_flags = 0, ++ } ++}; ++ ++static struct nand_platform_data davinci_evm_nandflash_data = { ++ .parts = davinci_evm_nandflash_partition, ++ .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), ++}; ++ ++static struct resource davinci_evm_nandflash_resource = { ++ .start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE, ++ .end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16K - 1, ++ .flags = IORESOURCE_MEM, ++}; ++ ++static struct platform_device davinci_evm_nandflash_device = { ++ .name = "davinci_nand", ++ .id = 0, ++ .dev = { ++ .platform_data = &davinci_evm_nandflash_data, ++ }, ++ .num_resources = 1, ++ .resource = &davinci_evm_nandflash_resource, ++}; ++#endif ++ + #if defined(CONFIG_FB_DAVINCI) || defined(CONFIG_FB_DAVINCI_MODULE) + + static u64 davinci_fb_dma_mask = DMA_32BIT_MASK; +@@ -168,7 +203,10 @@ static struct platform_device rtc_dev = + }; + + static struct platform_device *davinci_evm_devices[] __initdata = { +- &davinci_evm_flash_device, ++ &davinci_evm_norflash_device, ++#if defined(CONFIG_MTD_NAND_DAVINCI) || defined(CONFIG_MTD_NAND_DAVINCI_MODULE) ++ &davinci_evm_nandflash_device, ++#endif + #if defined(CONFIG_FB_DAVINCI) || defined(CONFIG_FB_DAVINCI_MODULE) + &davinci_fb_device, + #endif diff --git a/packages/linux/linux-davinci/davinci-sffsdr/defconfig b/packages/linux/linux-davinci/davinci-sffsdr/defconfig index ac53caffc9..0d5155f32a 100644 --- a/packages/linux/linux-davinci/davinci-sffsdr/defconfig +++ b/packages/linux/linux-davinci/davinci-sffsdr/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.23-davinci1 -# Sat Oct 20 12:59:22 2007 +# Sun Feb 3 08:30:51 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -241,7 +241,8 @@ CONFIG_CMDLINE="" # # At least one emulation must be selected # -# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set # CONFIG_FPE_FASTFPE is not set # CONFIG_VFP is not set @@ -442,7 +443,10 @@ CONFIG_MTD_CFI_UTIL=y # Mapping drivers for chip access # # CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 # CONFIG_MTD_ARM_INTEGRATOR is not set # CONFIG_MTD_PLATRAM is not set @@ -461,13 +465,15 @@ CONFIG_MTD_CFI_UTIL=y # CONFIG_MTD_DOC2001 is not set # CONFIG_MTD_DOC2001PLUS is not set CONFIG_MTD_NAND=y -# CONFIG_MTD_NAND_VERIFY_WRITE is not set +CONFIG_MTD_NAND_VERIFY_WRITE=y # CONFIG_MTD_NAND_ECC_SMC is not set # CONFIG_MTD_NAND_MUSEUM_IDS is not set CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_NANDSIM is not set -CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_NAND_PLATFORM is not set +CONFIG_MTD_NAND_DAVINCI=y +CONFIG_NAND_FLASH_HW_ECC=y # CONFIG_MTD_ONENAND is not set # @@ -592,10 +598,7 @@ CONFIG_INPUT=y # # Userland interfaces # -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_TSDEV is not set CONFIG_INPUT_EVDEV=m @@ -605,10 +608,10 @@ CONFIG_INPUT_EVDEV=m # Input Device Drivers # CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_XTKBD=y +# CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_GPIO is not set @@ -623,7 +626,7 @@ CONFIG_KEYBOARD_XTKBD=y # CONFIG_SERIO=y CONFIG_SERIO_SERPORT=y -CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_LIBPS2 is not set # CONFIG_SERIO_RAW is not set # CONFIG_GAMEPORT is not set @@ -820,46 +823,14 @@ CONFIG_DAB=y # # CONFIG_DISPLAY_SUPPORT is not set # CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -CONFIG_FB=y -CONFIG_FIRMWARE_EDID=y -# CONFIG_FB_DDC is not set -# CONFIG_FB_CFB_FILLRECT is not set -# CONFIG_FB_CFB_COPYAREA is not set -# CONFIG_FB_CFB_IMAGEBLIT is not set -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_DAVINCI=y -# CONFIG_FB_VIRTUAL is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set # # Console display driver support # # CONFIG_VGA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y # # Sound @@ -874,10 +845,7 @@ CONFIG_SOUND=y # # Open Sound System # -CONFIG_SOUND_PRIME=y -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_DAVINCI is not set +# CONFIG_SOUND_PRIME is not set CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set @@ -1027,20 +995,20 @@ CONFIG_USB_FILE_STORAGE=m # CONFIG_USB_FILE_STORAGE_TEST is not set CONFIG_USB_G_SERIAL=m # CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y +CONFIG_MMC=m # CONFIG_MMC_DEBUG is not set # CONFIG_MMC_UNSAFE_RESUME is not set # # MMC/SD Card Drivers # -CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_BOUNCE=y # # MMC/SD Host Controller Drivers # -# CONFIG_MMC_DAVINCI is not set +CONFIG_MMC_DAVINCI=m CONFIG_RTC_LIB=y # CONFIG_RTC_CLASS is not set @@ -1100,9 +1068,9 @@ CONFIG_AUTOFS4_FS=m # # DOS/FAT/NT Filesystems # -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_NTFS_FS is not set @@ -1138,7 +1106,7 @@ CONFIG_JFFS2_FS_WRITEBUFFER=y CONFIG_JFFS2_ZLIB=y CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y +# CONFIG_CRAMFS is not set # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set @@ -1167,8 +1135,7 @@ CONFIG_SUNRPC=y # CONFIG_SUNRPC_BIND34 is not set # CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set diff --git a/packages/linux/linux-davinci_2.6.x+git-davinci.bb b/packages/linux/linux-davinci_2.6.x+git-davinci.bb index 9228d1ffda..916b4e252c 100644 --- a/packages/linux/linux-davinci_2.6.x+git-davinci.bb +++ b/packages/linux/linux-davinci_2.6.x+git-davinci.bb @@ -7,6 +7,7 @@ COMPATIBLE_MACHINE = "(davinci-dvevm|davinci-sffsdr)" SRC_URI = "git://source.mvista.com/git/linux-davinci-2.6.git;protocol=git \ file://binutils-buildid-arm.patch;patch=1 \ + file://davinci-nand.patch;patch=1 \ file://defconfig" S = "${WORKDIR}/git" -- cgit v1.2.3 From 5e20762710bc6192195a5a771d4fae5a32339f3b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 10 Feb 2008 22:37:29 +0000 Subject: linux-handhelds-2.6: Record teh fact that flash booting should be done with root=mtdN * Per discussion on the list, reminding that root=/dev/mtdblockN form is deprecated (requires mtdblock builtin for the sole purpose of looking up mtd device thru block layer). * Add that to generated sample HaRET config - after all, that's the bootloader with most device coverage, so users of other bootloaders are expected to be familiar with it still. --- packages/linux/linux-handhelds-2.6.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc index 0db5e93974..81af72e413 100644 --- a/packages/linux/linux-handhelds-2.6.inc +++ b/packages/linux/linux-handhelds-2.6.inc @@ -98,6 +98,11 @@ set cmdline "root=/dev/mmcblk0p2 rootdelay=10 console=ttyS0,115200n8 console=tty # 192.168.y.y - Handheld's address #set cmdline "root=/dev/nfs nfsroot=192.168.x.x: ip=192.168.y.y:192.168.x.x:192.168.x.x:255.255.255.0:pda:usb0 console=ttyS0,115200n8 console=tty0" +## Choice 5 - Boot from MTD partition, for devices with lots of flash +# to have both WinCE and Linux there. Note the value of root param, +# that's how it should be, not "/dev/mtdblockN". +# set cmdline "root=mtdN console=ttyS0,115200n8 console=tty0" + bootlinux EOF } -- cgit v1.2.3 From 696e2381d893a110a8d4dd3bfd9f0311286440ac Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 11 Feb 2008 15:15:18 +0000 Subject: u-boot: Trim Neon patch a little bit, fix some issues. --- .../u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch | 49 ---------------------- packages/u-boot/u-boot_1.1.2.bb | 12 +++++- 2 files changed, 10 insertions(+), 51 deletions(-) diff --git a/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch b/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch index ed959d43d8..3809a75f51 100644 --- a/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch +++ b/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch @@ -19060,55 +19060,6 @@ diff -u -r --new-file u-boot-1.1.2/patches/arm_flags.patch u-boot-1.1.2-neon/pat ++ -msoft-float + + PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100 -diff -u -r --new-file u-boot-1.1.2/patches/series u-boot-1.1.2-neon/patches/series ---- u-boot-1.1.2/patches/series 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/patches/series 2007-08-11 21:01:36.000000000 +0200 -@@ -0,0 +1,2 @@ -+arm_flags.patch -p1 -+u-boot-2006-06-03.patch.gz -p1 -Binary files u-boot-1.1.2/patches/u-boot-2006-06-03.patch.gz and u-boot-1.1.2-neon/patches/u-boot-2006-06-03.patch.gz differ -diff -u -r --new-file u-boot-1.1.2/.pc/applied-patches u-boot-1.1.2-neon/.pc/applied-patches ---- u-boot-1.1.2/.pc/applied-patches 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/.pc/applied-patches 2007-08-11 21:01:36.000000000 +0200 -@@ -0,0 +1 @@ -+arm_flags.patch -diff -u -r --new-file u-boot-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk u-boot-1.1.2-neon/.pc/arm_flags.patch/cpu/pxa/config.mk ---- u-boot-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/.pc/arm_flags.patch/cpu/pxa/config.mk 2003-05-23 14:36:21.000000000 +0200 -@@ -0,0 +1,28 @@ -+# -+# (C) Copyright 2002 -+# Sysgo Real-Time Solutions, GmbH -+# Marius Groeger -+# -+# See file CREDITS for list of people who contributed to this -+# project. -+# -+# 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., 59 Temple Place, Suite 330, Boston, -+# MA 02111-1307 USA -+# -+ -+PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -+ -mshort-load-bytes -msoft-float -+ -+PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100 -diff -u -r --new-file u-boot-1.1.2/.pc/.version u-boot-1.1.2-neon/.pc/.version ---- u-boot-1.1.2/.pc/.version 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/.pc/.version 2007-08-11 21:01:36.000000000 +0200 -@@ -0,0 +1 @@ -+2 diff -u -r --new-file u-boot-1.1.2/README u-boot-1.1.2-neon/README --- u-boot-1.1.2/README 2004-12-16 22:44:03.000000000 +0100 +++ u-boot-1.1.2-neon/README 2007-08-11 21:07:19.000000000 +0200 diff --git a/packages/u-boot/u-boot_1.1.2.bb b/packages/u-boot/u-boot_1.1.2.bb index 82b169ccc4..8287d35a1d 100644 --- a/packages/u-boot/u-boot_1.1.2.bb +++ b/packages/u-boot/u-boot_1.1.2.bb @@ -1,8 +1,11 @@ -PR = "r2" +PR = "r3" require u-boot.inc SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \ file://arm_flags.patch;patch=1 " +# Override whole URI fr Neon since Neon patch is incompatible with arm_flags patch. +SRC_URI_bd-neon = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \ + file://u-boot-1.1.2-neon.patch;patch=1" SRC_URI_append_vibren = "ftp://bec-systems.com/pub/pxa255_idp/u-boot/uboot_pxa255-idp_2005-03-23.patch;patch=1" SRC_URI_append_mnci = "file://mnci.patch;patch=1 \ file://mnci-jffs2.patch;patch=1 \ @@ -10,7 +13,7 @@ SRC_URI_append_mnci = "file://mnci.patch;patch=1 \ file://command-names.patch;patch=1" SRC_URI_append_magicbox = "file://u-boot-emetec.patch;patch=1 " -SRC_URI_append_bd-neon = "file://u-boot-1.1.2-neon.patch;patch=1" + # TODO: SRC_URI_append_rt3000 @@ -32,6 +35,11 @@ do_compile () { RDEPENDS_append_mnci = " hwctrl" FILES_${PN}_mnci = "/tmp/${UBOOT_IMAGE}" + +do_configure_prepend_bd-neon () { + chmod +x ${S}/Configure +} + do_install_openmn() { install -d ${D}/tmp install ${S}/u-boot.bin ${D}/tmp/${UBOOT_IMAGE} -- cgit v1.2.3 From 9a5744657866150cbaf433bd3b32253fe26421ea Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Mon, 11 Feb 2008 23:14:34 +0000 Subject: logic-analyzer: Small fixes. - added java2-runtime RDEPENDS - added classpath-awt RDEPENDS - added patch to make capture dialog scrollable (for small screens) --- .../files/scrolling-capture-dialog.patch | 21 +++++++++++++++++++++ packages/logic-analyzer/logic-analyzer_0.8.bb | 5 ++++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 packages/logic-analyzer/files/scrolling-capture-dialog.patch diff --git a/packages/logic-analyzer/files/scrolling-capture-dialog.patch b/packages/logic-analyzer/files/scrolling-capture-dialog.patch new file mode 100644 index 0000000000..91e9ce0766 --- /dev/null +++ b/packages/logic-analyzer/files/scrolling-capture-dialog.patch @@ -0,0 +1,21 @@ +Index: LogicAnalyzer/client/org/sump/analyzer/DeviceController.java +=================================================================== +--- LogicAnalyzer.orig/client/org/sump/analyzer/DeviceController.java 2008-02-11 23:34:01.000000000 +0100 ++++ LogicAnalyzer/client/org/sump/analyzer/DeviceController.java 2008-02-11 23:35:17.000000000 +0100 +@@ -43,6 +43,7 @@ + import javax.swing.JProgressBar; + import javax.swing.JTabbedPane; + import javax.swing.JTextField; ++import javax.swing.JScrollPane; + import javax.swing.Timer; + + import org.sump.util.Properties; +@@ -312,7 +313,7 @@ + // if no valid dialog exists, create one + if (dialog == null) { + dialog = new JDialog(frame, "Capture", true); +- dialog.getContentPane().add(this); ++ dialog.getContentPane().add(new JScrollPane(this)); + dialog.setResizable(false); + dialog.setSize(this.getPreferredSize()); + // dialog.pack(); diff --git a/packages/logic-analyzer/logic-analyzer_0.8.bb b/packages/logic-analyzer/logic-analyzer_0.8.bb index f66752ad31..863a7a3e00 100644 --- a/packages/logic-analyzer/logic-analyzer_0.8.bb +++ b/packages/logic-analyzer/logic-analyzer_0.8.bb @@ -2,15 +2,18 @@ DESCRIPTION = "A Java-based logical analyzer for home use." LICENSE = "GPL" HOMEPAGE = "http://sump.org/projects/analyzer/" +PR = "r1" + inherit java DEPENDS = "rxtx" -RDEPENDS = "librxtx-java" +RDEPENDS = "java2-runtime classpath-awt librxtx-java" SRC_URI = "\ http://sump.org/projects/analyzer/downloads/la-src-${PV}.tar.bz2 \ file://cp-run-fix.patch;patch=1 \ file://client-makefile.patch;patch=1 \ + file://scrolling-capture-dialog.patch;patch=1 \ " S = "${WORKDIR}/LogicAnalyzer" -- cgit v1.2.3 From 4a0a8f2bbfcec5145178091c5703be7f5dfc034c Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Tue, 12 Feb 2008 00:30:46 +0000 Subject: kobodeluxe: Fixed and patches. - provide default configuration file - added patch that makes use of a default config file - wire device screen size into default config file - added a patch that allows complete game control with touchscreen - added a patch that automatically swaps display dimensions at startup --- packages/kobodeluxe/files/buildfix.patch | 21 -- packages/kobodeluxe/files/default-config | 70 ++++++ .../files/kobodeluxe-dimension-autoswap.patch | 236 ++++++++++++++++++ .../kobodeluxe/files/kobodeluxe-menu-pointer.patch | 266 +++++++++++++++++++++ packages/kobodeluxe/files/kobodeluxe-putenv.patch | 69 ++++++ .../files/kobodeluxe-sysconf-support.patch | 84 +++++++ packages/kobodeluxe/kobodeluxe_0.5.1.bb | 26 +- 7 files changed, 748 insertions(+), 24 deletions(-) delete mode 100644 packages/kobodeluxe/files/buildfix.patch create mode 100644 packages/kobodeluxe/files/default-config create mode 100644 packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch create mode 100644 packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch create mode 100644 packages/kobodeluxe/files/kobodeluxe-putenv.patch create mode 100644 packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch diff --git a/packages/kobodeluxe/files/buildfix.patch b/packages/kobodeluxe/files/buildfix.patch deleted file mode 100644 index 01a97e14f2..0000000000 --- a/packages/kobodeluxe/files/buildfix.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: kobodeluxe-0.5.1/graphics/gfxengine.cpp -=================================================================== ---- kobodeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-10 03:02:29.000000000 +0100 -+++ kobodeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-10 03:03:45.000000000 +0100 -@@ -25,6 +25,7 @@ - - #include - #include -+#include - - #include "gfxengine.h" - #include "filters.h" -@@ -765,7 +766,7 @@ - return 0; - - if(_centered && !_fullscreen) -- SDL_putenv((char *)"SDL_VIDEO_CENTERED=1"); -+ putenv((char *)"SDL_VIDEO_CENTERED=1"); - - log_printf(DLOG, "Opening screen...\n"); - if(!SDL_WasInit(SDL_INIT_VIDEO)) diff --git a/packages/kobodeluxe/files/default-config b/packages/kobodeluxe/files/default-config new file mode 100644 index 0000000000..4a8f5f7a96 --- /dev/null +++ b/packages/kobodeluxe/files/default-config @@ -0,0 +1,70 @@ +#-------------------------------------------- +# Kobo Deluxe 0.5.1 Configuration File +#-------------------------------------------- +# Switches - [no] +# Values - [|""] +#-------------------------------------------- +#--- System options -------------------------- +nologfile +logformat 0 +logverbosity 2 +#--- Input options -------------------------- +nojoystick +joystick_no 0 +mouse +mousemode 1 +nobroken_numdia +dia_emphasis 0 +noalways_fire +mousecapture +#--- Game options --------------------------- +scrollradar 2 +filter +timefilter 50 +countdown 5 +starfield 2 +stars 250 +overheatloud 100 +cannonloud 100 +#--- Sound settings ------------------------- +nosound +music +nocached_sounds +samplerate 8000 +latency 50 +mixquality 1 +vol 100 +intro_vol 100 +sfx_vol 100 +music_vol 30 +reverb 100 +vol_boost 0 +#--- Video settings ------------------------- +fullscreen +videodriver 0 +width WIDTH_HERE +height HEIGHT_HERE +autoswap +aspect 1 +depth 0 +maxfps 100 +maxfpsstrict 0 +buffer 0 +shadow +videomode -1 +vsync +videopages -1 +#--- Graphics settings ---------------------- +scalemode 0 +nodither +dither_type 2 +nobroken_rgba8 +alpha +brightness 100 +contrast 100 +#--- File paths ----------------------------- +files "" +gfx "" +sfx "" +scores "" +wait 30 diff --git a/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch b/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch new file mode 100644 index 0000000000..273e523103 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch @@ -0,0 +1,236 @@ +Index: KoboDeluxe-0.5.1/graphics/gfxengine.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-11 13:17:27.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-11 15:27:57.000000000 +0100 +@@ -135,11 +135,13 @@ + + _width = w; + _height = h; ++ + if(csengine) + cs_engine_set_size(csengine, w, h); + + if(was_showing) + show(); ++ + } + + void gfxengine_t::centered(int c) +@@ -759,33 +761,13 @@ + Display show/hide + ----------------------------------------------------------*/ + +-int gfxengine_t::show() ++/** Helper method that returns the flags value needed for ++ * SDL_SetVideoMode() and SDL_VideoModeOK(). ++ */ ++int gfxengine_t::video_flags() + { + int flags = 0; + +- if(!is_open) +- return -1; +- +- if(is_showing) +- return 0; +- +- if(_centered && !_fullscreen) +-#if HAVE_DECL_SDL_PUTENV +- SDL_putenv("SDL_VIDEO_CENTERED=1"); +-#elif defined(HAVE_PUTENV) +- putenv("SDL_VIDEO_CENTERED=1"); +-#else +- #error Neither SDL_putenv() nor putenv() are available. Fix it! +-#endif +- +- log_printf(DLOG, "Opening screen...\n"); +- if(!SDL_WasInit(SDL_INIT_VIDEO)) +- if(SDL_InitSubSystem(SDL_INIT_VIDEO) == -1) +- { +- log_printf(ELOG, "Failed to initialize SDL!\n"); +- return -2; +- } +- + switch(_driver) + { + case GFX_DRIVER_SDL2D: +@@ -830,11 +812,72 @@ + glSDL_VSync(_vsync); + flags |= xflags; + ++ return flags; ++} ++ ++bool gfxengine_t::check_mode_autoswap(int *w, int *h) ++{ ++ log_printf(VLOG, "Trying display modes %dx%d and %dx%d if the first fails.\n", *w, *h, *h, *w); ++ ++ int flags = video_flags(); ++ ++ SDL_Surface *test_surface = NULL; ++ ++ // On some platforms SDL_VideoModeOK() cannot be trusted unfortunately. ++ if(!(test_surface = SDL_SetVideoMode(*w, *h, _depth, flags))) ++ { ++ if(!(test_surface = SDL_SetVideoMode(*h, *w, _depth, flags))) ++ { ++ log_printf(ELOG, "Failed with both display mode. Giving up!\n"); ++ return false; ++ } ++ ++ int temp = *w; ++ *w = *h; ++ *h = temp; ++ ++ log_printf(VLOG, "Display dimensions swapped. Using %dx%d!\n", *w, *h); ++ } ++ else ++ log_printf(VLOG, "Stored display dimension worked. Using %dx%d!\n", *w, *h); ++ ++ SDL_FreeSurface(test_surface); ++ ++ return true; ++} ++ ++int gfxengine_t::show() ++{ ++ if(!is_open) ++ return -1; ++ ++ if(is_showing) ++ return 0; ++ ++ if(_centered && !_fullscreen) ++#if HAVE_DECL_SDL_PUTENV ++ SDL_putenv("SDL_VIDEO_CENTERED=1"); ++#elif defined(HAVE_PUTENV) ++ putenv("SDL_VIDEO_CENTERED=1"); ++#else ++ #error Neither SDL_putenv() nor putenv() are available. Fix it! ++#endif ++ ++ log_printf(DLOG, "Opening screen...\n"); ++ if(!SDL_WasInit(SDL_INIT_VIDEO)) ++ if(SDL_InitSubSystem(SDL_INIT_VIDEO) == -1) ++ { ++ log_printf(ELOG, "Failed to initialize SDL!\n"); ++ return -2; ++ } ++ ++ int flags = video_flags(); ++ + screen_surface = SDL_SetVideoMode(_width, _height, _depth, flags); + if(!screen_surface) + { +- log_printf(ELOG, "Failed to open display!\n"); +- return -3; ++ log_printf(ELOG, "Failed to open display with %dx%d! Giving up.\n", _width, _height); ++ return -3; + } + + if(_driver != GFX_DRIVER_GLSDL) +Index: KoboDeluxe-0.5.1/graphics/gfxengine.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.h 2008-02-11 13:24:51.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.h 2008-02-11 15:15:50.000000000 +0100 +@@ -54,6 +54,9 @@ + class gfxengine_t + { + friend class window_t; ++ ++ int video_flags(); ++ + public: + gfxengine_t(); + virtual ~gfxengine_t(); +@@ -135,6 +138,7 @@ + void title(const char *win, const char *icon); + + /* Display show/hide */ ++ bool check_mode_autoswap(int *, int *); + int show(); + void hide(); + +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-11 13:16:24.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-11 14:57:29.000000000 +0100 +@@ -641,8 +641,27 @@ + gengine->title("Kobo Deluxe " VERSION, "kobodl"); + gengine->driver((gfx_drivers_t)p->videodriver); + ++ // Initializes gfxengine with all kinds of display properties. ++ // We need this at this point to make the autoswap check work ++ // properly. Since these properties are independent of other ++ // values that is no problem. ++ gengine->mode(0, p->fullscreen); ++ gengine->doublebuffer(p->doublebuf); ++ gengine->pages(p->pages); ++ gengine->vsync(p->vsync); ++ gengine->shadow(p->shadow); ++ gengine->cursor(0); ++ ++ // Do the auto swap dance only if configured so. ++ if (prefs->autoswap) ++ { ++ if (!gengine->check_mode_autoswap(&p->width, &p->height)) ++ return -1; ++ } ++ + dw = p->width; + dh = p->height; ++ + if(p->fullscreen) + { + // This game assumes 1:1 pixel aspect ratio, or 4:3 +@@ -696,13 +715,6 @@ + yoffs = (int)((dh - gh) / 2 / gengine->yscale()); + gengine->size(dw, dh); + +- gengine->mode(0, p->fullscreen); +- gengine->doublebuffer(p->doublebuf); +- gengine->pages(p->pages); +- gengine->vsync(p->vsync); +- gengine->shadow(p->shadow); +- gengine->cursor(0); +- + gengine->period(game.speed); + sound.period(game.speed); + gengine->timefilter(p->timefilter * 0.01f); +Index: KoboDeluxe-0.5.1/prefs.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/prefs.cpp 2008-02-11 14:28:01.000000000 +0100 ++++ KoboDeluxe-0.5.1/prefs.cpp 2008-02-11 14:30:15.000000000 +0100 +@@ -86,6 +86,7 @@ + desc("Display Driver"); + key("width", width, 640); desc("Horizontal Resolution"); + key("height", height, 480); desc("Vertical Resolution"); ++ yesno("autoswap", autoswap, 0); desc("Automatically swap display dimension"); + key("aspect", aspect, 1000); desc("Pixel Aspect Ratio"); + key("depth", depth, 0); desc("Display Depth"); + key("maxfps", max_fps, 100); desc("Maximum fps"); +Index: KoboDeluxe-0.5.1/prefs.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/prefs.h 2008-02-11 14:28:01.000000000 +0100 ++++ KoboDeluxe-0.5.1/prefs.h 2008-02-11 14:31:24.000000000 +0100 +@@ -76,6 +76,7 @@ + int videodriver; //Internal video driver + int width; //Screen/window width + int height; //Screen/window height ++ int autoswap; // Automatically swap dimensions if initialization fails + int aspect; //Pixel aspect ratio * 1000 + int depth; //Bits per pixel + int max_fps; //Maximum fps +Index: KoboDeluxe-0.5.1/states.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/states.cpp 2008-02-11 14:32:13.000000000 +0100 ++++ KoboDeluxe-0.5.1/states.cpp 2008-02-11 15:00:13.000000000 +0100 +@@ -117,6 +117,8 @@ + switch (button) + { + case BTN_EXIT: ++ gsm.push(&st_ask_exit); ++ break; + case BTN_CLOSE: + gsm.push(&st_main_menu); + break; diff --git a/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch b/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch new file mode 100644 index 0000000000..160d3ce896 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch @@ -0,0 +1,266 @@ +Index: KoboDeluxe-0.5.1/README +=================================================================== +--- KoboDeluxe-0.5.1.orig/README 2008-02-11 01:10:23.000000000 +0100 ++++ KoboDeluxe-0.5.1/README 2008-02-11 01:17:30.000000000 +0100 +@@ -39,6 +39,12 @@ + key diagonals. Escape enters the meny system, from where it is possi- + ble to change settings, start a new game or exit the game. + ++ In case the touchscreen support has been compiled in the menu can be ++ controlled by clicking the frame borders. Touching the inner part of ++ the screen is like a button press. In the game mode a click in the ++ upper right corner activates pause mode and the lower right corner es- ++ capes to the menu. ++ + OPTIONS + Note that all relevant options can be also configured in the config + file, which can be edited directly, or using the options menus in the +Index: KoboDeluxe-0.5.1/config.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/config.h 2008-02-11 00:23:20.000000000 +0100 ++++ KoboDeluxe-0.5.1/config.h 2008-02-11 02:01:17.000000000 +0100 +@@ -95,6 +95,15 @@ + #define MARGIN 8 + + /* ++ * Fraction of the screen size in which clicks are not considered ++ * clicks but movements in that direction (as regarded from the ++ * center of the screen) or other special things (pause & exit). ++ * ++ * Used only in touchscreen mode. ++ */ ++#define POINTER_MARGIN_PERCENT 10 ++ ++/* + * (In XKobo, WSIZE was used where this is + * used now; in the game logic code.) + * +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-11 00:37:18.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-11 00:48:59.000000000 +0100 +@@ -195,6 +195,16 @@ + CXXFLAGS="$CXXFLAGS -DHAVE_OPENGL" + fi + ++AC_ARG_ENABLE( ++ touchscreen, ++ [AS_HELP_STRING( ++ [--enable-touchscreen], ++ [Compile menu control support suitable for touchscreens (default is no)])], ++ AC_DEFINE( ++ [ENABLE_TOUCHSCREEN], ++ [1], ++ [Set to 1 if the menusystem should support touchscreen input]), ++ []) + + dnl------------------------------------------------------- + dnl Checks for header files. +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-11 00:24:57.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-11 16:02:23.000000000 +0100 +@@ -28,6 +28,8 @@ + // Use this to benchmark and create a new percentage table! + #undef TIME_PROGRESS + ++#include ++ + #include + #include + #include +@@ -671,6 +673,10 @@ + gh = dh; + } + ++#if ENABLE_TOUCHSCREEN ++ gengine->setup_pointer_margin(dw, dh); ++#endif ++ + // Scaling has 16ths granularity, so tiles scale properly! + gengine->scale((int)((gw * 16 + 8) / SCREEN_WIDTH) / 16.f, + (int)((gh * 16 + 8) / SCREEN_HEIGHT) / 16.f); +@@ -1599,6 +1605,23 @@ + { + } + ++#ifdef ENABLE_TOUCHSCREEN ++void kobo_gfxengine_t::setup_pointer_margin(int dw, int dh) ++{ ++ // Precalculates the border ranges. Mouse clicks outside these are handled ++ // specially. ++ pointer_margin_width_min = dw * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_width_max = dw - dw * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_height_min = dh * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_height_max = dh - dh * POINTER_MARGIN_PERCENT / 100; ++ ++ log_printf(VLOG, "Pointer margin range [%d, %d, %d, %d]\n", ++ pointer_margin_width_min, ++ pointer_margin_width_max, ++ pointer_margin_height_min, ++ pointer_margin_height_max); ++} ++#endif + + void kobo_gfxengine_t::frame() + { +@@ -1800,11 +1823,57 @@ + mouse_y - MARGIN - WSIZE/2); + break; + case SDL_MOUSEBUTTONDOWN: +- mouse_x = (int)(ev.motion.x / gengine->xscale()) - km.xoffs; +- mouse_y = (int)(ev.motion.y / gengine->yscale()) - km.yoffs; +- gsm.press(BTN_FIRE); ++ mouse_x = (int)(ev.button.x / gengine->xscale()) - km.xoffs; ++ mouse_y = (int)(ev.button.y / gengine->yscale()) - km.yoffs; + if(prefs->use_mouse) + { ++#if ENABLE_TOUCHSCREEN ++ if (ev.motion.x <= pointer_margin_width_min) ++ { ++ gsm.press(BTN_LEFT); ++ pointer_margin_used = true; ++ } else if (ev.motion.x >= pointer_margin_width_max) ++ { ++ // Upper right corner invokes pause. ++ // Lower right corner invokes exit. ++ // Otherwise it is just 'right'. :) ++ if (ev.motion.y <= pointer_margin_height_min) ++ { ++ gsm.press(BTN_PAUSE); ++ gamecontrol.press(BTN_PAUSE); ++ } ++ else ++ gsm.press((ev.motion.y >= pointer_margin_height_max ++ ? BTN_EXIT ++ : BTN_RIGHT)); ++ ++ pointer_margin_used = true; ++ ++ } ++ ++ if (ev.motion.y <= pointer_margin_height_min) ++ { ++ // Handle as 'up' only if it was not in the 'pause' area. ++ // Still handle as clicked, so 'fire' will not kick in. ++ if (ev.motion.x < pointer_margin_width_max) ++ gsm.press(BTN_UP); ++ pointer_margin_used = true; ++ } else if (ev.motion.y >= pointer_margin_height_max) ++ { ++ // Handle as 'down' only if it was not in the 'exit' area. ++ // Still handle as clicked, so 'fire' will not kick in. ++ if (ev.motion.x < pointer_margin_width_max) ++ gsm.press(BTN_DOWN); ++ ++ pointer_margin_used = true; ++ } ++ ++ if (!pointer_margin_used) ++ gsm.press(BTN_FIRE); ++#else ++ gsm.press(BTN_FIRE); ++#endif ++ + gamecontrol.mouse_position( + mouse_x - 8 - MARGIN - WSIZE/2, + mouse_y - MARGIN - WSIZE/2); +@@ -1824,10 +1893,24 @@ + } + break; + case SDL_MOUSEBUTTONUP: +- mouse_x = (int)(ev.motion.x / gengine->xscale()) - km.xoffs; +- mouse_y = (int)(ev.motion.y / gengine->yscale()) - km.yoffs; ++ mouse_x = (int)(ev.button.x / gengine->xscale()) - km.xoffs; ++ mouse_y = (int)(ev.button.y / gengine->yscale()) - km.yoffs; + if(prefs->use_mouse) + { ++#if ENABLE_TOUCHSCREEN ++ // Resets all kinds of buttons that might have been activated by ++ // clicking in the pointer margin. ++ if (pointer_margin_used) ++ { ++ gsm.release(BTN_EXIT); ++ gsm.release(BTN_LEFT); ++ gsm.release(BTN_RIGHT); ++ gsm.release(BTN_UP); ++ gsm.release(BTN_DOWN); ++ pointer_margin_used = false; ++ } ++#endif ++ + gamecontrol.mouse_position( + mouse_x - 8 - MARGIN - WSIZE/2, + mouse_y - MARGIN - WSIZE/2); +@@ -2078,6 +2161,19 @@ + int main(int argc, char *argv[]) + { + int cmd_exit = 0; ++ ++ printf(PACKAGE " - " VERSION " (touchscreen support: %s)\n", ++ (ENABLE_TOUCHSCREEN ? "yes" : "no")); ++ puts("Copyright (c) 1995, 1996 Akira Higuchi\n" ++ "Copyright (C) 1997 Masanao Izumo\n" ++ "Copyright (C) 1999-2001 Simon Peter\n" ++ "Copyright (C) 2002 Florian Schulze\n" ++ "Copyright (C) 2002 Jeremy Sheeley\n" ++ "Copyright (C) 2005 Erik Auerswald\n" ++ "Copyright (c) 1999-2007 David Olofson\n" ++ "This is free software; see the source for copying conditions. There is NO\n" ++ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); ++ + atexit(emergency_close); + signal(SIGTERM, breakhandler); + signal(SIGINT, breakhandler); +Index: KoboDeluxe-0.5.1/kobo.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.h 2008-02-11 00:31:23.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.h 2008-02-11 02:19:29.000000000 +0100 +@@ -23,6 +23,8 @@ + #ifndef _KOBO_H_ + #define _KOBO_H_ + ++#include ++ + #include "gfxengine.h" + #include "window.h" + #include "display.h" +@@ -45,11 +47,25 @@ + + class kobo_gfxengine_t : public gfxengine_t + { ++#if ENABLE_TOUCHSCREEN ++ bool pointer_margin_used; ++ ++ int pointer_margin_width_min; ++ int pointer_margin_width_max; ++ int pointer_margin_height_min; ++ int pointer_margin_height_max; ++#endif ++ + void frame(); + void pre_render(); + void post_render(); + public: + kobo_gfxengine_t(); ++ ++#if ENABLE_TOUCHSCREEN ++ void setup_pointer_margin(int, int); ++#endif ++ + }; + + extern kobo_gfxengine_t *gengine; +Index: KoboDeluxe-0.5.1/states.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/states.cpp 2008-02-11 03:06:41.000000000 +0100 ++++ KoboDeluxe-0.5.1/states.cpp 2008-02-11 15:42:55.000000000 +0100 +@@ -963,8 +963,6 @@ + break; + + case BTN_FIRE: +- if(!prefs->use_joystick) +- break; + case BTN_START: + case BTN_SELECT: + sound.ui_ok(); diff --git a/packages/kobodeluxe/files/kobodeluxe-putenv.patch b/packages/kobodeluxe/files/kobodeluxe-putenv.patch new file mode 100644 index 0000000000..05f7c72f81 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-putenv.patch @@ -0,0 +1,69 @@ +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-10 12:27:11.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-10 15:50:11.000000000 +0100 +@@ -159,7 +159,6 @@ + ) + LIBS="$LIBS -lSDL_image" + +- + dnl------------------------------------------------------- + dnl Checks for OpenGL + dnl------------------------------------------------------- +@@ -214,13 +213,18 @@ + dnl------------------------------------------------------- + dnl Checks for library functions. + dnl------------------------------------------------------- ++dnl SDL_putenv may not be available in all SDL ports ++AC_CHECK_DECLS(SDL_putenv,,,[#include ]) ++ + AC_CHECK_FUNCS(strdup strstr strchr strrchr) + AC_CHECK_FUNCS(snprintf _snprintf vsnprintf _vsnprintf) + AC_CHECK_FUNCS(pow sqrt) + AC_CHECK_FUNCS(munmap mkdir select stat) + AC_CHECK_FUNCS(atexit floor memmove memset memcmp) +-AC_CHECK_FUNCS(gettimeofday) ++AC_CHECK_FUNCS(gettimeofday putenv) + AC_CHECK_FUNCS(getegid setgid) ++ ++ + AC_FUNC_MEMCMP + AC_FUNC_STRTOD + AC_FUNC_