OneNAND: Fill in MTD function pointers for OneNAND.
authorFathi BOUDRA <fabo@debian.org>
Wed, 6 Aug 2008 08:06:20 +0000 (10:06 +0200)
committerScott Wood <scottwood@freescale.com>
Tue, 12 Aug 2008 16:31:32 +0000 (11:31 -0500)
onenand_print_device_info():
 - Now returns a string to be placed in mtd->name,
   rather than calling printf.
 - Remove verbose parameter as it becomes useless.

Signed-off-by: Fathi Boudra <fabo@debian.org>
Signed-off-by: Scott Wood <scottwood@freescale.com>
common/cmd_onenand.c
drivers/mtd/onenand/onenand_base.c
include/onenand_uboot.h

index d6d3376..419bf70 100644 (file)
@@ -38,7 +38,7 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        onenand_init();
                        return 0;
                }
-               onenand_print_device_info(onenand_chip.device_id, 1);
+               printf("%s\n", onenand_mtd.name);
                return 0;
 
        default:
index a7054ae..ded1706 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <asm/io.h>
 #include <asm/errno.h>
+#include <malloc.h>
 
 /* It should access 16-bit instead of 8-bit */
 static inline void *memcpy_16(void *dst, const void *src, unsigned int len)
@@ -1110,21 +1111,21 @@ int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
  *
  * Print device ID
  */
-void onenand_print_device_info(int device, int verbose)
+char * onenand_print_device_info(int device)
 {
        int vcc, demuxed, ddp, density;
-
-       if (!verbose)
-               return;
+       char *dev_info = malloc(80);
 
        vcc = device & ONENAND_DEVICE_VCC_MASK;
        demuxed = device & ONENAND_DEVICE_IS_DEMUX;
        ddp = device & ONENAND_DEVICE_IS_DDP;
        density = device >> ONENAND_DEVICE_DENSITY_SHIFT;
-       printk(KERN_INFO "%sOneNAND%s %dMB %sV 16-bit (0x%02x)\n",
+       sprintf(dev_info, "%sOneNAND%s %dMB %sV 16-bit (0x%02x)",
               demuxed ? "" : "Muxed ",
               ddp ? "(DDP)" : "",
               (16 << density), vcc ? "2.65/3.3" : "1.8", device);
+
+       return dev_info;
 }
 
 static const struct onenand_manufacturers onenand_manuf_ids[] = {
@@ -1203,7 +1204,7 @@ static int onenand_probe(struct mtd_info *mtd)
        }
 
        /* Flash device information */
-       onenand_print_device_info(dev_id, 0);
+       mtd->name = onenand_print_device_info(dev_id);
        this->device_id = dev_id;
 
        density = dev_id >> ONENAND_DEVICE_DENSITY_SHIFT;
@@ -1239,6 +1240,17 @@ static int onenand_probe(struct mtd_info *mtd)
                this->options |= ONENAND_CONT_LOCK;
        }
 
+       mtd->erase = onenand_erase;
+       mtd->read = onenand_read;
+       mtd->write = onenand_write;
+       mtd->read_ecc = onenand_read_ecc;
+       mtd->write_ecc = onenand_write_ecc;
+       mtd->read_oob = onenand_read_oob;
+       mtd->write_oob = onenand_write_oob;
+       mtd->sync = onenand_sync;
+       mtd->block_isbad = onenand_block_isbad;
+       mtd->block_markbad = onenand_block_markbad;
+
        return 0;
 }
 
index 4449f98..4260ee7 100644 (file)
@@ -39,6 +39,6 @@ extern int onenand_erase(struct mtd_info *mtd, struct erase_info *instr);
 
 extern int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len);
 
-extern void onenand_print_device_info(int device, int verbose);
+extern char *onenand_print_device_info(int device);
 
 #endif /* __UBOOT_ONENAND_H */