diff options
Diffstat (limited to 'drivers/mtd/onenand')
| -rw-r--r-- | drivers/mtd/onenand/generic.c | 3 | ||||
| -rw-r--r-- | drivers/mtd/onenand/omap2.c | 33 | ||||
| -rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 55 | ||||
| -rw-r--r-- | drivers/mtd/onenand/samsung.c | 12 | ||||
| -rw-r--r-- | drivers/mtd/onenand/samsung.h | 2 | 
5 files changed, 30 insertions, 75 deletions
diff --git a/drivers/mtd/onenand/generic.c b/drivers/mtd/onenand/generic.c index 63699fffc96..093c29ac1a1 100644 --- a/drivers/mtd/onenand/generic.c +++ b/drivers/mtd/onenand/generic.c @@ -13,7 +13,6 @@   */  #include <linux/module.h> -#include <linux/init.h>  #include <linux/slab.h>  #include <linux/platform_device.h>  #include <linux/mtd/mtd.h> @@ -58,7 +57,7 @@ static int generic_onenand_probe(struct platform_device *pdev)  		goto out_release_mem_region;  	} -	info->onenand.mmcontrol = pdata ? pdata->mmcontrol : 0; +	info->onenand.mmcontrol = pdata ? pdata->mmcontrol : NULL;  	info->onenand.irq = platform_get_irq(pdev, 0);  	info->mtd.name = dev_name(&pdev->dev); diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index 558071bf92d..d945473c388 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c @@ -25,7 +25,6 @@  #include <linux/device.h>  #include <linux/module.h> -#include <linux/init.h>  #include <linux/mtd/mtd.h>  #include <linux/mtd/onenand.h>  #include <linux/mtd/partitions.h> @@ -159,7 +158,7 @@ static int omap2_onenand_wait(struct mtd_info *mtd, int state)  				syscfg = read_reg(c, ONENAND_REG_SYS_CFG1);  		} -		INIT_COMPLETION(c->irq_done); +		reinit_completion(&c->irq_done);  		if (c->gpio_irq) {  			result = gpio_get_value(c->gpio_irq);  			if (result == -1) { @@ -349,7 +348,7 @@ static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area,  	omap_set_dma_dest_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC,  				 dma_dst, 0, 0); -	INIT_COMPLETION(c->dma_done); +	reinit_completion(&c->dma_done);  	omap_start_dma(c->dma_channel);  	timeout = jiffies + msecs_to_jiffies(20); @@ -420,7 +419,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,  	omap_set_dma_dest_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC,  				 dma_dst, 0, 0); -	INIT_COMPLETION(c->dma_done); +	reinit_completion(&c->dma_done);  	omap_start_dma(c->dma_channel);  	timeout = jiffies + msecs_to_jiffies(20); @@ -499,7 +498,7 @@ static int omap2_onenand_read_bufferram(struct mtd_info *mtd, int area,  	omap_set_dma_dest_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC,  				 dma_dst, 0, 0); -	INIT_COMPLETION(c->dma_done); +	reinit_completion(&c->dma_done);  	omap_start_dma(c->dma_channel);  	wait_for_completion(&c->dma_done); @@ -544,7 +543,7 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,  	omap_set_dma_dest_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC,  				 dma_dst, 0, 0); -	INIT_COMPLETION(c->dma_done); +	reinit_completion(&c->dma_done);  	omap_start_dma(c->dma_channel);  	wait_for_completion(&c->dma_done); @@ -573,28 +572,6 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,  static struct platform_driver omap2_onenand_driver; -static int __adjust_timing(struct device *dev, void *data) -{ -	int ret = 0; -	struct omap2_onenand *c; - -	c = dev_get_drvdata(dev); - -	BUG_ON(c->setup == NULL); - -	/* DMA is not in use so this is all that is needed */ -	/* Revisit for OMAP3! */ -	ret = c->setup(c->onenand.base, &c->freq); - -	return ret; -} - -int omap2_onenand_rephase(void) -{ -	return driver_for_each_device(&omap2_onenand_driver.driver, NULL, -				      NULL, __adjust_timing); -} -  static void omap2_onenand_shutdown(struct platform_device *pdev)  {  	struct omap2_onenand *c = dev_get_drvdata(&pdev->dev); diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index b3f41f20062..635ee002769 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c @@ -24,7 +24,6 @@  #include <linux/module.h>  #include <linux/moduleparam.h>  #include <linux/slab.h> -#include <linux/init.h>  #include <linux/sched.h>  #include <linux/delay.h>  #include <linux/interrupt.h> @@ -2556,10 +2555,6 @@ static int onenand_block_isbad(struct mtd_info *mtd, loff_t ofs)  {  	int ret; -	/* Check for invalid offset */ -	if (ofs > mtd->size) -		return -EINVAL; -  	onenand_get_device(mtd, FL_READING);  	ret = onenand_block_isbad_nolock(mtd, ofs, 0);  	onenand_release_device(mtd); @@ -3242,20 +3237,17 @@ static int onenand_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,  /**   * onenand_get_fact_prot_info - [MTD Interface] Read factory OTP info   * @param mtd		MTD device structure - * @param buf		the databuffer to put/get data   * @param len		number of bytes to read + * @param retlen	pointer to variable to store the number of read bytes + * @param buf		the databuffer to put/get data   *   * Read factory OTP info.   */ -static int onenand_get_fact_prot_info(struct mtd_info *mtd, -			struct otp_info *buf, size_t len) +static int onenand_get_fact_prot_info(struct mtd_info *mtd, size_t len, +				      size_t *retlen, struct otp_info *buf)  { -	size_t retlen; -	int ret; - -	ret = onenand_otp_walk(mtd, 0, len, &retlen, (u_char *) buf, NULL, MTD_OTP_FACTORY); - -	return ret ? : retlen; +	return onenand_otp_walk(mtd, 0, len, retlen, (u_char *) buf, NULL, +				MTD_OTP_FACTORY);  }  /** @@ -3277,20 +3269,17 @@ static int onenand_read_fact_prot_reg(struct mtd_info *mtd, loff_t from,  /**   * onenand_get_user_prot_info - [MTD Interface] Read user OTP info   * @param mtd		MTD device structure - * @param buf		the databuffer to put/get data + * @param retlen	pointer to variable to store the number of read bytes   * @param len		number of bytes to read + * @param buf		the databuffer to put/get data   *   * Read user OTP info.   */ -static int onenand_get_user_prot_info(struct mtd_info *mtd, -			struct otp_info *buf, size_t len) +static int onenand_get_user_prot_info(struct mtd_info *mtd, size_t len, +				      size_t *retlen, struct otp_info *buf)  { -	size_t retlen; -	int ret; - -	ret = onenand_otp_walk(mtd, 0, len, &retlen, (u_char *) buf, NULL, MTD_OTP_USER); - -	return ret ? : retlen; +	return onenand_otp_walk(mtd, 0, len, retlen, (u_char *) buf, NULL, +				MTD_OTP_USER);  }  /** @@ -3529,7 +3518,7 @@ static int flexonenand_get_boundary(struct mtd_info *mtd)  {  	struct onenand_chip *this = mtd->priv;  	unsigned die, bdry; -	int ret, syscfg, locked; +	int syscfg, locked;  	/* Disable ECC */  	syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1); @@ -3540,7 +3529,7 @@ static int flexonenand_get_boundary(struct mtd_info *mtd)  		this->wait(mtd, FL_SYNCING);  		this->command(mtd, FLEXONENAND_CMD_READ_PI, die, 0); -		ret = this->wait(mtd, FL_READING); +		this->wait(mtd, FL_READING);  		bdry = this->read_word(this->base + ONENAND_DATARAM);  		if ((bdry >> FLEXONENAND_PI_UNLOCK_SHIFT) == 3) @@ -3550,7 +3539,7 @@ static int flexonenand_get_boundary(struct mtd_info *mtd)  		this->boundary[die] = bdry & FLEXONENAND_PI_MASK;  		this->command(mtd, ONENAND_CMD_RESET, 0, 0); -		ret = this->wait(mtd, FL_RESETING); +		this->wait(mtd, FL_RESETING);  		printk(KERN_INFO "Die %d boundary: %d%s\n", die,  		       this->boundary[die], locked ? "(Locked)" : "(Unlocked)"); @@ -3734,7 +3723,7 @@ static int flexonenand_set_boundary(struct mtd_info *mtd, int die,  	/* Check is boundary is locked */  	this->command(mtd, FLEXONENAND_CMD_READ_PI, die, 0); -	ret = this->wait(mtd, FL_READING); +	this->wait(mtd, FL_READING);  	thisboundary = this->read_word(this->base + ONENAND_DATARAM);  	if ((thisboundary >> FLEXONENAND_PI_UNLOCK_SHIFT) != 3) { @@ -3835,7 +3824,7 @@ static int onenand_chip_probe(struct mtd_info *mtd)  static int onenand_probe(struct mtd_info *mtd)  {  	struct onenand_chip *this = mtd->priv; -	int maf_id, dev_id, ver_id; +	int dev_id, ver_id;  	int density;  	int ret; @@ -3843,8 +3832,7 @@ static int onenand_probe(struct mtd_info *mtd)  	if (ret)  		return ret; -	/* Read manufacturer and device IDs from Register */ -	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID); +	/* Device and version IDs from Register */  	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);  	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);  	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY); @@ -4000,11 +3988,8 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)  	/* Allocate buffers, if necessary */  	if (!this->page_buf) {  		this->page_buf = kzalloc(mtd->writesize, GFP_KERNEL); -		if (!this->page_buf) { -			printk(KERN_ERR "%s: Can't allocate page_buf\n", -				__func__); +		if (!this->page_buf)  			return -ENOMEM; -		}  #ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE  		this->verify_buf = kzalloc(mtd->writesize, GFP_KERNEL);  		if (!this->verify_buf) { @@ -4017,8 +4002,6 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)  	if (!this->oob_buf) {  		this->oob_buf = kzalloc(mtd->oobsize, GFP_KERNEL);  		if (!this->oob_buf) { -			printk(KERN_ERR "%s: Can't allocate oob_buf\n", -				__func__);  			if (this->options & ONENAND_PAGEBUF_ALLOC) {  				this->options &= ~ONENAND_PAGEBUF_ALLOC;  				kfree(this->page_buf); diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c index df7400dd4df..efb819c3df2 100644 --- a/drivers/mtd/onenand/samsung.c +++ b/drivers/mtd/onenand/samsung.c @@ -537,9 +537,9 @@ static int onenand_write_bufferram(struct mtd_info *mtd, int area,  	return 0;  } -static int (*s5pc110_dma_ops)(void *dst, void *src, size_t count, int direction); +static int (*s5pc110_dma_ops)(dma_addr_t dst, dma_addr_t src, size_t count, int direction); -static int s5pc110_dma_poll(void *dst, void *src, size_t count, int direction) +static int s5pc110_dma_poll(dma_addr_t dst, dma_addr_t src, size_t count, int direction)  {  	void __iomem *base = onenand->dma_addr;  	int status; @@ -605,7 +605,7 @@ static irqreturn_t s5pc110_onenand_irq(int irq, void *data)  	return IRQ_HANDLED;  } -static int s5pc110_dma_irq(void *dst, void *src, size_t count, int direction) +static int s5pc110_dma_irq(dma_addr_t dst, dma_addr_t src, size_t count, int direction)  {  	void __iomem *base = onenand->dma_addr;  	int status; @@ -686,7 +686,7 @@ static int s5pc110_read_bufferram(struct mtd_info *mtd, int area,  		dev_err(dev, "Couldn't map a %d byte buffer for DMA\n", count);  		goto normal;  	} -	err = s5pc110_dma_ops((void *) dma_dst, (void *) dma_src, +	err = s5pc110_dma_ops(dma_dst, dma_src,  			count, S5PC110_DMA_DIR_READ);  	if (page_dma) @@ -872,10 +872,8 @@ static int s3c_onenand_probe(struct platform_device *pdev)  	size = sizeof(struct mtd_info) + sizeof(struct onenand_chip);  	mtd = kzalloc(size, GFP_KERNEL); -	if (!mtd) { -		dev_err(&pdev->dev, "failed to allocate memory\n"); +	if (!mtd)  		return -ENOMEM; -	}  	onenand = kzalloc(sizeof(struct s3c_onenand), GFP_KERNEL);  	if (!onenand) { diff --git a/drivers/mtd/onenand/samsung.h b/drivers/mtd/onenand/samsung.h index c4a80e67e43..9016dc0136a 100644 --- a/drivers/mtd/onenand/samsung.h +++ b/drivers/mtd/onenand/samsung.h @@ -1,6 +1,4 @@  /* - * linux/arch/arm/plat-s3c/include/plat/regs-onenand.h - *   *  Copyright (C) 2008-2010 Samsung Electronics   *  Kyungmin Park <kyungmin.park@samsung.com>   *  | 
