diff options
Diffstat (limited to 'drivers/mtd/devices/mtdram.c')
| -rw-r--r-- | drivers/mtd/devices/mtdram.c | 45 | 
1 files changed, 13 insertions, 32 deletions
diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c index 26a6e809013..8e285089229 100644 --- a/drivers/mtd/devices/mtdram.c +++ b/drivers/mtd/devices/mtdram.c @@ -34,34 +34,23 @@ static struct mtd_info *mtd_info;  static int ram_erase(struct mtd_info *mtd, struct erase_info *instr)  { -	if (instr->addr + instr->len > mtd->size) -		return -EINVAL; -  	memset((char *)mtd->priv + instr->addr, 0xff, instr->len); -  	instr->state = MTD_ERASE_DONE;  	mtd_erase_callback(instr); -  	return 0;  }  static int ram_point(struct mtd_info *mtd, loff_t from, size_t len,  		size_t *retlen, void **virt, resource_size_t *phys)  { -	if (from + len > mtd->size) -		return -EINVAL; - -	/* can we return a physical address with this driver? */ -	if (phys) -		return -EINVAL; -  	*virt = mtd->priv + from;  	*retlen = len;  	return 0;  } -static void ram_unpoint(struct mtd_info *mtd, loff_t from, size_t len) +static int ram_unpoint(struct mtd_info *mtd, loff_t from, size_t len)  { +	return 0;  }  /* @@ -80,11 +69,7 @@ static unsigned long ram_get_unmapped_area(struct mtd_info *mtd,  static int ram_read(struct mtd_info *mtd, loff_t from, size_t len,  		size_t *retlen, u_char *buf)  { -	if (from + len > mtd->size) -		return -EINVAL; -  	memcpy(buf, mtd->priv + from, len); -  	*retlen = len;  	return 0;  } @@ -92,11 +77,7 @@ static int ram_read(struct mtd_info *mtd, loff_t from, size_t len,  static int ram_write(struct mtd_info *mtd, loff_t to, size_t len,  		size_t *retlen, const u_char *buf)  { -	if (to + len > mtd->size) -		return -EINVAL; -  	memcpy((char *)mtd->priv + to, buf, len); -  	*retlen = len;  	return 0;  } @@ -104,14 +85,14 @@ static int ram_write(struct mtd_info *mtd, loff_t to, size_t len,  static void __exit cleanup_mtdram(void)  {  	if (mtd_info) { -		del_mtd_device(mtd_info); +		mtd_device_unregister(mtd_info);  		vfree(mtd_info->priv);  		kfree(mtd_info);  	}  }  int mtdram_init_device(struct mtd_info *mtd, void *mapped_address, -		unsigned long size, char *name) +		unsigned long size, const char *name)  {  	memset(mtd, 0, sizeof(*mtd)); @@ -121,20 +102,20 @@ int mtdram_init_device(struct mtd_info *mtd, void *mapped_address,  	mtd->flags = MTD_CAP_RAM;  	mtd->size = size;  	mtd->writesize = 1; +	mtd->writebufsize = 64; /* Mimic CFI NOR flashes */  	mtd->erasesize = MTDRAM_ERASE_SIZE;  	mtd->priv = mapped_address;  	mtd->owner = THIS_MODULE; -	mtd->erase = ram_erase; -	mtd->point = ram_point; -	mtd->unpoint = ram_unpoint; -	mtd->get_unmapped_area = ram_get_unmapped_area; -	mtd->read = ram_read; -	mtd->write = ram_write; - -	if (add_mtd_device(mtd)) { +	mtd->_erase = ram_erase; +	mtd->_point = ram_point; +	mtd->_unpoint = ram_unpoint; +	mtd->_get_unmapped_area = ram_get_unmapped_area; +	mtd->_read = ram_read; +	mtd->_write = ram_write; + +	if (mtd_device_register(mtd, NULL, 0))  		return -EIO; -	}  	return 0;  }  | 
