diff options
| -rw-r--r-- | arch/arm/mach-omap2/gpmc-onenand.c | 10 | ||||
| -rw-r--r-- | arch/arm/plat-omap/include/plat/onenand.h | 2 | ||||
| -rw-r--r-- | drivers/mtd/onenand/omap2.c | 28 | 
3 files changed, 12 insertions, 28 deletions
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c index 3a4307b8f7c..46786a606e9 100644 --- a/arch/arm/mach-omap2/gpmc-onenand.c +++ b/arch/arm/mach-omap2/gpmc-onenand.c @@ -123,7 +123,7 @@ static void set_onenand_cfg(void __iomem *onenand_base, int latency,  static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,  					void __iomem *onenand_base, -					int freq) +					int *freq_ptr)  {  	struct gpmc_timings t;  	const int t_cer  = 15; @@ -136,7 +136,7 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,  	int tick_ns, div, fclk_offset_ns, fclk_offset, gpmc_clk_ns, latency;  	int first_time = 0, hf = 0, vhf = 0, sync_read = 0, sync_write = 0;  	int err, ticks_cez; -	int cs = cfg->cs; +	int cs = cfg->cs, freq = *freq_ptr;  	u32 reg;  	if (cfg->flags & ONENAND_SYNC_READ) { @@ -330,16 +330,18 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,  	set_onenand_cfg(onenand_base, latency, sync_read, sync_write, hf, vhf); +	*freq_ptr = freq; +  	return 0;  } -static int gpmc_onenand_setup(void __iomem *onenand_base, int freq) +static int gpmc_onenand_setup(void __iomem *onenand_base, int *freq_ptr)  {  	struct device *dev = &gpmc_onenand_device.dev;  	/* Set sync timings in GPMC */  	if (omap2_onenand_set_sync_mode(gpmc_onenand_data, onenand_base, -			freq) < 0) { +			freq_ptr) < 0) {  		dev_err(dev, "Unable to set synchronous mode\n");  		return -EINVAL;  	} diff --git a/arch/arm/plat-omap/include/plat/onenand.h b/arch/arm/plat-omap/include/plat/onenand.h index affe87e9ece..86118dc3f19 100644 --- a/arch/arm/plat-omap/include/plat/onenand.h +++ b/arch/arm/plat-omap/include/plat/onenand.h @@ -20,7 +20,7 @@ struct omap_onenand_platform_data {  	int			gpio_irq;  	struct mtd_partition	*parts;  	int			nr_parts; -	int                     (*onenand_setup)(void __iomem *, int freq); +	int			(*onenand_setup)(void __iomem *, int *freq_ptr);  	int			dma_channel;  	u8			flags;  	u8			regulator_can_sleep; diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index ac31f461cc1..3e1bb956882 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c @@ -63,7 +63,7 @@ struct omap2_onenand {  	struct completion dma_done;  	int dma_channel;  	int freq; -	int (*setup)(void __iomem *base, int freq); +	int (*setup)(void __iomem *base, int *freq_ptr);  	struct regulator *regulator;  }; @@ -581,7 +581,7 @@ static int __adjust_timing(struct device *dev, void *data)  	/* DMA is not in use so this is all that is needed */  	/* Revisit for OMAP3! */ -	ret = c->setup(c->onenand.base, c->freq); +	ret = c->setup(c->onenand.base, &c->freq);  	return ret;  } @@ -673,7 +673,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)  	}  	if (pdata->onenand_setup != NULL) { -		r = pdata->onenand_setup(c->onenand.base, c->freq); +		r = pdata->onenand_setup(c->onenand.base, &c->freq);  		if (r < 0) {  			dev_err(&pdev->dev, "Onenand platform setup failed: "  				"%d\n", r); @@ -718,8 +718,8 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)  	}  	dev_info(&pdev->dev, "initializing on CS%d, phys base 0x%08lx, virtual " -		 "base %p\n", c->gpmc_cs, c->phys_base, -		 c->onenand.base); +		 "base %p, freq %d MHz\n", c->gpmc_cs, c->phys_base, +		 c->onenand.base, c->freq);  	c->pdev = pdev;  	c->mtd.name = dev_name(&pdev->dev); @@ -754,24 +754,6 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)  	if ((r = onenand_scan(&c->mtd, 1)) < 0)  		goto err_release_regulator; -	switch ((c->onenand.version_id >> 4) & 0xf) { -	case 0: -		c->freq = 40; -		break; -	case 1: -		c->freq = 54; -		break; -	case 2: -		c->freq = 66; -		break; -	case 3: -		c->freq = 83; -		break; -	case 4: -		c->freq = 104; -		break; -	} -  #ifdef CONFIG_MTD_PARTITIONS  	r = parse_mtd_partitions(&c->mtd, part_probes, &c->parts, 0);  	if (r > 0)  |