From: William J Beksi <wjbeksi@setabox.com>
To: linux-mtd@lists.infradead.org
Subject: [PATCH] nand flash through IDE interface
Date: Wed, 08 Dec 2004 13:48:16 +0800 [thread overview]
Message-ID: <41B695A0.6040608@setabox.com> (raw)
In-Reply-To: <000b01c4dc0f$69fd88e0$8500a8c0@nit37>
[-- Attachment #1: Type: text/plain, Size: 228 bytes --]
Hi,
I use the ide interface for testing nand flash. I think this driver
would be useful for anyone else that does the same. It would save people
the time of hacking another board specific driver to work with ide.
--
William
[-- Attachment #2: ide.c --]
[-- Type: text/x-c, Size: 2926 bytes --]
/*
* drivers/mtd/nand/ide.c
*
* Copyright (C) 2004 William J Beksi <wjbeksi@users.sourceforge.net>
*
* Derived from drivers/mtd/spia.c
* Copyright (C) 2000 Steven J. Hill <sjhill@realitydiluted.com>
*
* $Id: ide.c,v 1.18 2004/12/07 05:17:46 wjbeksi Exp $
*
* 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 device driver allows a NAND flash device to be accessed from
* an IDE interface.
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
#include <asm/io.h>
/*
* IDE MTD structure
*/
static struct mtd_info *ide_mtd = NULL;
/*
* Values specific to the IDE
*/
#define BASEPORT1 0x1F0 /* IDE1 NAND Flash I/O Base Address */
#define BASEPORT2 0x170 /* IDE2 NAND Flash I/O Base Address */
#define IDE_IO_BASE BASEPORT1
/*
* Define partitions for flash device
*/
const static struct mtd_partition partition_info[] = {
{
.name = "IDE flash partition 1",
.offset = 0,
.size = 3*1024*1024
},
{
.name = "IDE flash partition 2",
.offset = 3*1024*1024,
.size = 3*1024*1024
}
};
#define NUM_PARTITIONS 2
/*
* Main initialization routine
*/
int __init ide_init(void)
{
struct nand_chip *this;
/* Allocate memory for MTD device structure and private data */
ide_mtd = kmalloc(sizeof(struct mtd_info) + sizeof(struct nand_chip), GFP_KERNEL);
if (!ide_mtd) {
printk("Unable to allocate IDE NAND MTD structure.\n");
return -ENOMEM;
}
/* Get pointer to private data */
this = (struct nand_chip *) (&ide_mtd[1]);
/* Initialize structures */
memset((char *) ide_mtd, 0, sizeof(struct mtd_info));
memset((char *) this, 0, sizeof(struct nand_chip));
/* Link the private data with the MTD structure */
ide_mtd->priv = this;
/* Set address of NAND IO lines */
this->IO_ADDR_R = IDE_IO_BASE;
this->IO_ADDR_W = IDE_IO_BASE;
this->dev_ready = NULL;
/* 20 us command delay time */
this->chip_delay = 20;
/* Set the ECC generator mode */
this->eccmode = NAND_ECC_SOFT;
/* Scan to find existance of the device */
if (nand_scan(ide_mtd, 1)) {
kfree(ide_mtd);
return -ENXIO;
}
/* Register the partitions */
add_mtd_partitions(ide_mtd, partition_info, NUM_PARTITIONS);
/* Return happy */
return 0;
}
module_init(ide_init);
/*
* Clean up routine
*/
#ifdef MODULE
static void __exit ide_cleanup (void)
{
/* Release resources, unregister the device */
nand_release(ide_mtd);
/* Free the MTD device structure */
kfree(ide_mtd);
}
module_exit(ide_cleanup);
#endif
MODULE_LICENSE("GPL");
MODULE_AUTHOR("William J Beksi <wjbeksi@users.sourceforge.net>");
MODULE_DESCRIPTION("Glue layer for NAND flash through an IDE interface");
next prev parent reply other threads:[~2004-12-08 5:48 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-07 3:46 MTD driver Subrahmanyam
2004-12-08 5:48 ` William J Beksi [this message]
2004-12-09 13:20 ` [PATCH] nand flash through IDE interface Thomas Gleixner
2004-12-09 13:53 ` William J Beksi
2004-12-08 6:37 ` MTD driver Thomas Gleixner
2004-12-08 10:03 ` Stephan Linke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41B695A0.6040608@setabox.com \
--to=wjbeksi@setabox.com \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox