diff options
Diffstat (limited to 'drivers/mtd/onenand/onenand_base.c')
| -rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 24 | 
1 files changed, 18 insertions, 6 deletions
| diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index a7054aebc..ded1706ab 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c @@ -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;  } |