]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
mtd: onenand: add new callback for bufferram read
authorKyungmin Park <kyungmin.park@samsung.com>
Wed, 28 Apr 2010 15:46:47 +0000 (17:46 +0200)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Fri, 14 May 2010 00:50:04 +0000 (01:50 +0100)
This patch adds a new callback for the underlying drivers, which is
called instead of accessing the buffer ram directly. This callback will
be used by Samsung OneNAND driver to implement DMA transfers on S5PC110
SoC.

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/onenand/onenand_base.c
include/linux/mtd/onenand.h

index 045811f2149789e4653c68ea9888c9466f228220..9827ab779c08660c3867bc4c2f6b39f25388f440 100644 (file)
@@ -1635,7 +1635,6 @@ static int onenand_verify_oob(struct mtd_info *mtd, const u_char *buf, loff_t to
 static int onenand_verify(struct mtd_info *mtd, const u_char *buf, loff_t addr, size_t len)
 {
        struct onenand_chip *this = mtd->priv;
-       void __iomem *dataram;
        int ret = 0;
        int thislen, column;
 
@@ -1655,10 +1654,9 @@ static int onenand_verify(struct mtd_info *mtd, const u_char *buf, loff_t addr,
 
                onenand_update_bufferram(mtd, addr, 1);
 
-               dataram = this->base + ONENAND_DATARAM;
-               dataram += onenand_bufferram_offset(mtd, ONENAND_DATARAM);
+               this->read_bufferram(mtd, ONENAND_DATARAM, this->verify_buf, 0, mtd->writesize);
 
-               if (memcmp(buf, dataram + column, thislen))
+               if (memcmp(buf, this->verify_buf, thislen))
                        return -EBADMSG;
 
                len -= thislen;
index 9b43268224a78ad1349ac36eadcae20589d9d174..c26ff86ad08aa51ec57a9479d6a77b5e2560455d 100644 (file)
@@ -212,6 +212,8 @@ struct mtd_partition;
 
 struct onenand_platform_data {
        void            (*mmcontrol)(struct mtd_info *mtd, int sync_read);
+       int             (*read_bufferram)(struct mtd_info *mtd, int area,
+                       unsigned char *buffer, int offset, size_t count);
        struct mtd_partition *parts;
        unsigned int    nr_parts;
 };