diff options
author | Cliff Brake <cbrake@bec-systems.com> | 2007-08-13 19:34:20 +0000 |
---|---|---|
committer | Cliff Brake <cbrake@bec-systems.com> | 2007-08-13 19:34:20 +0000 |
commit | ce8d2dd8c0b7aefbf0cbec2fd8fb56dcfa140a21 (patch) | |
tree | 52824aeff93f2810d9d1ab871db2362eb74fbad3 /packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch | |
parent | f1fa081ac75d80d75100baef63aa357c5a83d9b3 (diff) |
compulab-pxa270: drop 2.6.20 kernel now that we have 2.6.22
Diffstat (limited to 'packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch')
-rw-r--r-- | packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch | 324 |
1 files changed, 0 insertions, 324 deletions
diff --git a/packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch b/packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch deleted file mode 100644 index f8e05c3c22..0000000000 --- a/packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch +++ /dev/null @@ -1,324 +0,0 @@ -From nobody Mon Sep 17 00:00:00 2001 -From: Cliff Brake <cbrake@happy.dev.bec-systems.com> -Date: Tue Apr 3 11:38:59 2007 -0400 -Subject: [PATCH] nand driver - -2.6.20 NAND flash driver for cm-x270 - ---- - - drivers/mtd/nand/Kconfig | 4 + - drivers/mtd/nand/Makefile | 1 - drivers/mtd/nand/cmx270-nand.c | 271 ++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 276 insertions(+), 0 deletions(-) - create mode 100644 drivers/mtd/nand/cmx270-nand.c - -base a34beb5936e5819d8b2d51b153434825700463ef -last deaa2960bd8fb1f706a935cd7a87321977e6f568 -diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig -index 358f55a82dbe4ebb73b1b0ee460063a6145e3f0e..c80272bcc69b6e13ab0c4403e4635a8a4076dc6c 100644 ---- a/drivers/mtd/nand/Kconfig -+++ b/drivers/mtd/nand/Kconfig -@@ -247,6 +247,10 @@ config MTD_NAND_AT91 - help - Enables support for NAND Flash / Smart Media Card interface - on Atmel AT91 processors. -+ -+config MTD_NAND_CM_X270 -+ tristate "Support for NAND Flash on CompuLab CM-X270" -+ depends on MTD_NAND && ARCH_PXA - - config MTD_NAND_NANDSIM - tristate "Support for NAND Flash Simulator" -diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile -index f7a53f0b70177451680402a2c2cce4c98991cd6e..d5abbca6d5ae18e287af0b02075f99838d35dc85 100644 ---- a/drivers/mtd/nand/Makefile -+++ b/drivers/mtd/nand/Makefile -@@ -24,6 +24,7 @@ obj-$(CONFIG_MTD_NAND_NANDSIM) += nandsim.o - obj-$(CONFIG_MTD_NAND_CS553X) += cs553x_nand.o - obj-$(CONFIG_MTD_NAND_NDFC) += ndfc.o - obj-$(CONFIG_MTD_NAND_AT91) += at91_nand.o -+obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270-nand.o - - nand-objs := nand_base.o nand_bbt.o - cafe_nand-objs := cafe.o cafe_ecc.o -diff --git a/drivers/mtd/nand/cmx270-nand.c b/drivers/mtd/nand/cmx270-nand.c -new file mode 100644 -index 0000000000000000000000000000000000000000..1cd531e610dee846e246b4b1d56bb4119939682b ---- /dev/null -+++ b/drivers/mtd/nand/cmx270-nand.c -@@ -0,0 +1,271 @@ -+/* -+ * drivers/mtd/nand/cmx270-nand.c -+ * -+ * Copyright (C) 2005 Compulab, Ltd. (mike@compulab.co.il) -+ * 2007 BEC Systems, LLC (cbrake@bec-systems.com) -+ * - updated to 2.6.20 NAND API -+ * -+ * Derived from drivers/mtd/nand/h1910.c -+ * Copyright (C) 2002 Marius Gröger (mag@sysgo.de) -+ * Copyright (c) 2001 Thomas Gleixner (gleixner@autronix.de) -+ * -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ * Overview: -+ * This is a device driver for the NAND flash device found on the -+ * CM-X270 board. -+ */ -+ -+#include <linux/slab.h> -+#include <linux/init.h> -+#include <linux/module.h> -+#include <linux/mtd/mtd.h> -+#include <linux/mtd/nand.h> -+#include <linux/mtd/partitions.h> -+ -+#include <asm/io.h> -+#include <asm/irq.h> -+#include <asm/arch/hardware.h> -+#include <asm/arch/pxa-regs.h> -+ -+#define GPIO_NAND_CS (11) -+#define GPIO_NAND_RB (89) -+ -+#define DRAIN_WB() \ -+ do { \ -+ unsigned char dummy; \ -+ asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0"); \ -+ dummy=*((volatile unsigned char*)UNCACHED_ADDR); \ -+ } while(0); -+ -+/* -+ * MTD structure for CM-X270 board -+ */ -+static struct mtd_info *cmx270_nand_mtd = NULL; -+ -+/* -+ * Module stuff -+ */ -+ -+#ifdef CONFIG_MTD_PARTITIONS -+/* -+ * Define static partitions for flash device -+ */ -+static struct mtd_partition partition_info[] = { -+ { -+ .name = "app", -+ .offset = 0, -+ .size = 64*1024*1024 -+ }, -+ { -+ .name = "data", -+ .offset = MTDPART_OFS_APPEND, -+ .size = MTDPART_SIZ_FULL -+ } -+}; -+ -+#define NUM_PARTITIONS ARRAY_SIZE(partition_info) -+ -+#endif -+ -+ -+static u_char cmx270_read_byte(struct mtd_info *mtd) -+{ -+ struct nand_chip *this = mtd->priv; -+ return (readl(this->IO_ADDR_R) >> 16); -+} -+ -+static void cmx270_write_byte(struct mtd_info *mtd, u_char byte) -+{ -+ struct nand_chip *this = mtd->priv; -+ writel((byte << 16), this->IO_ADDR_W); -+} -+ -+static void cmx270_write_buf(struct mtd_info *mtd, const u_char *buf, int len) -+{ -+ int i; -+ struct nand_chip *this = mtd->priv; -+ -+ for (i=0; i<len; i++) { -+ writel((*buf++ << 16), this->IO_ADDR_W); -+ } -+} -+ -+static void cmx270_read_buf(struct mtd_info *mtd, u_char *buf, int len) -+{ -+ int i; -+ struct nand_chip *this = mtd->priv; -+ -+ for (i=0; i<len; i++) { -+ *buf++ = readl(this->IO_ADDR_R) >> 16; -+ } -+} -+ -+static int cmx270_verify_buf(struct mtd_info *mtd, const u_char *buf, int len) -+{ -+ int i; -+ struct nand_chip *this = mtd->priv; -+ -+ for (i=0; i<len; i++) { -+ if ( buf[i] != (u_char)(readl(this->IO_ADDR_R) >> 16) ) -+ return -EFAULT; -+ } -+ -+ return 0; -+} -+ -+static inline void nand_cs_on(void) -+{ -+ GPCR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS); -+} -+ -+static void nand_cs_off(void) -+{ -+ DRAIN_WB(); -+ -+ GPSR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS); -+} -+ -+/* -+ * hardware specific access to control-lines -+ * -+ * NAND_NCE: bit 0 - GPIO_NAND_CS -+ * NAND_CLE: bit 1 - address bit 2 -+ * NAND_ALE: bit 2 - address bit 3 -+ */ -+static void cmx270_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) -+{ -+ struct nand_chip* chip = mtd->priv; -+ -+ DRAIN_WB(); -+ -+ if (ctrl & NAND_CTRL_CHANGE) { -+ if (ctrl & NAND_NCE) nand_cs_on(); -+ else nand_cs_off(); -+ } -+ -+ -+ if (cmd != NAND_CMD_NONE) { -+ writel(cmd << 16, (unsigned int)(chip->IO_ADDR_W) | ((ctrl & 0x6) << 1 )); -+ } -+ -+ DRAIN_WB(); -+} -+ -+/* -+ * read device ready pin -+ */ -+static int cmx270_device_ready(struct mtd_info *mtd) -+{ -+ DRAIN_WB(); -+ return ( GPLR(GPIO_NAND_RB) & GPIO_bit(GPIO_NAND_RB) ); -+} -+ -+/* -+ * Main initialization routine -+ */ -+static int __init cmx270_init (void) -+{ -+ struct nand_chip *this; -+ const char *part_type = 0; -+ int mtd_parts_nb = 0; -+ struct mtd_partition *mtd_parts = 0; -+ static unsigned int nandaddr = 0; -+ -+ -+ /* Allocate memory for MTD device structure and private data */ -+ cmx270_nand_mtd = kmalloc(sizeof(struct mtd_info) + -+ sizeof(struct nand_chip), -+ GFP_KERNEL); -+ if (!cmx270_nand_mtd) { -+ printk("Unable to allocate CM-X270 NAND MTD device structure.\n"); -+ return -ENOMEM; -+ } -+ -+ nandaddr = (volatile unsigned int)ioremap(PXA_CS1_PHYS, 100); -+ -+ /* Get pointer to private data */ -+ this = (struct nand_chip *) (&cmx270_nand_mtd[1]); -+ -+ /* Initialize structures */ -+ memset((char *) cmx270_nand_mtd, 0, sizeof(struct mtd_info)); -+ memset((char *) this, 0, sizeof(struct nand_chip)); -+ -+ /* Link the private data with the MTD structure */ -+ cmx270_nand_mtd->priv = this; -+ cmx270_nand_mtd->owner = THIS_MODULE; -+ -+ /* insert callbacks */ -+ this->IO_ADDR_R = (void __iomem *)nandaddr; -+ this->IO_ADDR_W = (void __iomem *)nandaddr; -+ this->cmd_ctrl = cmx270_hwcontrol; -+/* this->dev_ready = cmx270_device_ready; /\* unknown whether that was correct or not so we will just do it like this *\/ */ -+ -+ /* 15 us command delay time */ -+ this->chip_delay = 50; -+ this->ecc.mode = NAND_ECC_SOFT; -+ -+ /* read/write functions */ -+ this->read_byte = cmx270_read_byte; -+ //this->write_byte = cmx270_write_byte; -+ this->read_buf = cmx270_read_buf; -+ this->write_buf = cmx270_write_buf; -+ this->verify_buf = cmx270_verify_buf; -+ -+ /* Scan to find existence of the device */ -+ if (nand_scan (cmx270_nand_mtd, 1)) { -+ printk(KERN_NOTICE "No NAND device - returning -ENXIO\n"); -+ iounmap((void*)nandaddr); -+ kfree (cmx270_nand_mtd); -+ return -ENXIO; -+ } -+ -+//#ifdef CONFIG_MTD_CMDLINE_PARTS -+#if 0 -+ mtd_parts_nb = parse_cmdline_partitions(cmx270_nand_mtd, &mtd_parts, -+ "cmx270"); -+ if (mtd_parts_nb > 0) -+ part_type = "command line"; -+ else -+ mtd_parts_nb = 0; -+#endif -+ if (mtd_parts_nb == 0) -+ { -+ mtd_parts = partition_info; -+ mtd_parts_nb = NUM_PARTITIONS; -+ part_type = "static"; -+ } -+ -+ /* Register the partitions */ -+ printk(KERN_NOTICE "Using %s partition definition\n", part_type); -+ add_mtd_partitions(cmx270_nand_mtd, mtd_parts, mtd_parts_nb); -+ -+ /* Return happy */ -+ return 0; -+} -+module_init(cmx270_init); -+ -+/* -+ * Clean up routine -+ */ -+static void __exit cmx270_cleanup (void) -+{ -+ struct nand_chip *this; -+ -+ this = (struct nand_chip *) (&cmx270_nand_mtd[1]); -+ iounmap(this->IO_ADDR_R); -+ -+ /* Release resources, unregister device */ -+ nand_release (cmx270_nand_mtd); -+ -+ /* Free the MTD device structure */ -+ kfree (cmx270_nand_mtd); -+} -+module_exit(cmx270_cleanup); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Mike Rapoport <mike at compulab dot co dot il>"); -+MODULE_DESCRIPTION("NAND flash driver for Compulab CM-X270 Core"); --- -1.4.4.4 - |