Commit 3db369c2 authored by Russell King's avatar Russell King Committed by Tony Lindgren

[ARM] omap: convert OMAP drivers to use ioremap()

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 261a09c5
...@@ -118,18 +118,21 @@ static int __init omap_rng_probe(struct platform_device *pdev) ...@@ -118,18 +118,21 @@ static int __init omap_rng_probe(struct platform_device *pdev)
mem = request_mem_region(res->start, res->end - res->start + 1, mem = request_mem_region(res->start, res->end - res->start + 1,
pdev->name); pdev->name);
if (mem == NULL) if (mem == NULL) {
return -EBUSY; ret = -EBUSY;
goto err_region;
}
dev_set_drvdata(&pdev->dev, mem); dev_set_drvdata(&pdev->dev, mem);
rng_base = (u32 __force __iomem *)io_p2v(res->start); rng_base = ioremap(res->start, res->end - res->start + 1);
if (!rng_base) {
ret = -ENOMEM;
goto err_ioremap;
}
ret = hwrng_register(&omap_rng_ops); ret = hwrng_register(&omap_rng_ops);
if (ret) { if (ret)
release_resource(mem); goto err_register;
rng_base = NULL;
return ret;
}
dev_info(&pdev->dev, "OMAP Random Number Generator ver. %02x\n", dev_info(&pdev->dev, "OMAP Random Number Generator ver. %02x\n",
omap_rng_read_reg(RNG_REV_REG)); omap_rng_read_reg(RNG_REV_REG));
...@@ -138,6 +141,18 @@ static int __init omap_rng_probe(struct platform_device *pdev) ...@@ -138,6 +141,18 @@ static int __init omap_rng_probe(struct platform_device *pdev)
rng_dev = pdev; rng_dev = pdev;
return 0; return 0;
err_register:
iounmap(rng_base);
rng_base = NULL;
err_ioremap:
release_resource(mem);
err_region:
if (cpu_is_omap24xx()) {
clk_disable(rng_ick);
clk_put(rng_ick);
}
return ret;
} }
static int __exit omap_rng_remove(struct platform_device *pdev) static int __exit omap_rng_remove(struct platform_device *pdev)
...@@ -148,6 +163,8 @@ static int __exit omap_rng_remove(struct platform_device *pdev) ...@@ -148,6 +163,8 @@ static int __exit omap_rng_remove(struct platform_device *pdev)
omap_rng_write_reg(RNG_MASK_REG, 0x0); omap_rng_write_reg(RNG_MASK_REG, 0x0);
iounmap(rng_base);
if (cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
clk_disable(rng_ick); clk_disable(rng_ick);
clk_put(rng_ick); clk_put(rng_ick);
......
...@@ -757,11 +757,16 @@ omap_i2c_probe(struct platform_device *pdev) ...@@ -757,11 +757,16 @@ omap_i2c_probe(struct platform_device *pdev)
dev->speed = *speed; dev->speed = *speed;
dev->dev = &pdev->dev; dev->dev = &pdev->dev;
dev->irq = irq->start; dev->irq = irq->start;
dev->base = (void __iomem *) IO_ADDRESS(mem->start); dev->base = ioremap(mem->start, mem->end - mem->start + 1);
if (!dev->base) {
r = -ENOMEM;
goto err_free_mem;
}
platform_set_drvdata(pdev, dev); platform_set_drvdata(pdev, dev);
if ((r = omap_i2c_get_clocks(dev)) != 0) if ((r = omap_i2c_get_clocks(dev)) != 0)
goto err_free_mem; goto err_iounmap;
omap_i2c_unidle(dev); omap_i2c_unidle(dev);
...@@ -821,6 +826,8 @@ err_unuse_clocks: ...@@ -821,6 +826,8 @@ err_unuse_clocks:
omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
omap_i2c_idle(dev); omap_i2c_idle(dev);
omap_i2c_put_clocks(dev); omap_i2c_put_clocks(dev);
err_iounmap:
iounmap(dev->base);
err_free_mem: err_free_mem:
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
kfree(dev); kfree(dev);
...@@ -842,6 +849,7 @@ omap_i2c_remove(struct platform_device *pdev) ...@@ -842,6 +849,7 @@ omap_i2c_remove(struct platform_device *pdev)
i2c_del_adapter(&dev->adapter); i2c_del_adapter(&dev->adapter);
omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
omap_i2c_put_clocks(dev); omap_i2c_put_clocks(dev);
iounmap(dev->base);
kfree(dev); kfree(dev);
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(mem->start, (mem->end - mem->start) + 1); release_mem_region(mem->start, (mem->end - mem->start) + 1);
......
...@@ -1455,7 +1455,9 @@ static int __init mmc_omap_probe(struct platform_device *pdev) ...@@ -1455,7 +1455,9 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
host->irq = irq; host->irq = irq;
host->phys_base = host->mem_res->start; host->phys_base = host->mem_res->start;
host->virt_base = (void __iomem *) IO_ADDRESS(host->phys_base); host->virt_base = ioremap(res->start, res->end - res->start + 1);
if (!host->virt_base)
goto err_ioremap;
if (cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
host->iclk = clk_get(&pdev->dev, "mmc_ick"); host->iclk = clk_get(&pdev->dev, "mmc_ick");
...@@ -1510,6 +1512,8 @@ err_free_iclk: ...@@ -1510,6 +1512,8 @@ err_free_iclk:
clk_put(host->iclk); clk_put(host->iclk);
} }
err_free_mmc_host: err_free_mmc_host:
iounmap(host->virt_base);
err_ioremap:
kfree(host); kfree(host);
err_free_mem_region: err_free_mem_region:
release_mem_region(res->start, res->end - res->start + 1); release_mem_region(res->start, res->end - res->start + 1);
...@@ -1536,6 +1540,7 @@ static int mmc_omap_remove(struct platform_device *pdev) ...@@ -1536,6 +1540,7 @@ static int mmc_omap_remove(struct platform_device *pdev)
if (host->fclk && !IS_ERR(host->fclk)) if (host->fclk && !IS_ERR(host->fclk))
clk_put(host->fclk); clk_put(host->fclk);
iounmap(host->virt_base);
release_mem_region(pdev->resource[0].start, release_mem_region(pdev->resource[0].start,
pdev->resource[0].end - pdev->resource[0].start + 1); pdev->resource[0].end - pdev->resource[0].start + 1);
......
...@@ -1009,7 +1009,12 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1009,7 +1009,12 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
} }
mcspi->phys = r->start; mcspi->phys = r->start;
mcspi->base = (void __iomem *) io_p2v(r->start); mcspi->base = ioremap(r->start, r->end - r->start + 1);
if (!mcspi->base) {
dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
status = -ENOMEM;
goto err1aa;
}
INIT_WORK(&mcspi->work, omap2_mcspi_work); INIT_WORK(&mcspi->work, omap2_mcspi_work);
...@@ -1059,6 +1064,8 @@ err3: ...@@ -1059,6 +1064,8 @@ err3:
err2: err2:
clk_put(mcspi->ick); clk_put(mcspi->ick);
err1a: err1a:
iounmap(mcspi->base);
err1aa:
release_mem_region(r->start, (r->end - r->start) + 1); release_mem_region(r->start, (r->end - r->start) + 1);
err1: err1:
spi_master_put(master); spi_master_put(master);
...@@ -1071,6 +1078,7 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev) ...@@ -1071,6 +1078,7 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
struct omap2_mcspi *mcspi; struct omap2_mcspi *mcspi;
struct omap2_mcspi_dma *dma_channels; struct omap2_mcspi_dma *dma_channels;
struct resource *r; struct resource *r;
void __iomem *base;
master = dev_get_drvdata(&pdev->dev); master = dev_get_drvdata(&pdev->dev);
mcspi = spi_master_get_devdata(master); mcspi = spi_master_get_devdata(master);
...@@ -1082,7 +1090,9 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev) ...@@ -1082,7 +1090,9 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
r = platform_get_resource(pdev, IORESOURCE_MEM, 0); r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(r->start, (r->end - r->start) + 1); release_mem_region(r->start, (r->end - r->start) + 1);
base = mcspi->base;
spi_unregister_master(master); spi_unregister_master(master);
iounmap(base);
kfree(dma_channels); kfree(dma_channels);
return 0; return 0;
......
...@@ -59,7 +59,6 @@ ...@@ -59,7 +59,6 @@
* and irqs should show there too... * and irqs should show there too...
*/ */
#define UWIRE_BASE_PHYS 0xFFFB3000 #define UWIRE_BASE_PHYS 0xFFFB3000
#define UWIRE_BASE ((void *__iomem)IO_ADDRESS(UWIRE_BASE_PHYS))
/* uWire Registers: */ /* uWire Registers: */
#define UWIRE_IO_SIZE 0x20 #define UWIRE_IO_SIZE 0x20
...@@ -103,16 +102,21 @@ struct uwire_state { ...@@ -103,16 +102,21 @@ struct uwire_state {
}; };
/* REVISIT compile time constant for idx_shift? */ /* REVISIT compile time constant for idx_shift? */
/*
* Or, put it in a structure which is used throughout the driver;
* that avoids having to issue two loads for each bit of static data.
*/
static unsigned int uwire_idx_shift; static unsigned int uwire_idx_shift;
static void __iomem *uwire_base;
static inline void uwire_write_reg(int idx, u16 val) static inline void uwire_write_reg(int idx, u16 val)
{ {
__raw_writew(val, UWIRE_BASE + (idx << uwire_idx_shift)); __raw_writew(val, uwire_base + (idx << uwire_idx_shift));
} }
static inline u16 uwire_read_reg(int idx) static inline u16 uwire_read_reg(int idx)
{ {
return __raw_readw(UWIRE_BASE + (idx << uwire_idx_shift)); return __raw_readw(uwire_base + (idx << uwire_idx_shift));
} }
static inline void omap_uwire_configure_mode(u8 cs, unsigned long flags) static inline void omap_uwire_configure_mode(u8 cs, unsigned long flags)
...@@ -492,6 +496,14 @@ static int __init uwire_probe(struct platform_device *pdev) ...@@ -492,6 +496,14 @@ static int __init uwire_probe(struct platform_device *pdev)
return -ENODEV; return -ENODEV;
uwire = spi_master_get_devdata(master); uwire = spi_master_get_devdata(master);
uwire_base = ioremap(UWIRE_BASE_PHYS, UWIRE_IO_SIZE);
if (!uwire_base) {
dev_dbg(&pdev->dev, "can't ioremap UWIRE\n");
spi_master_put(master);
return -ENOMEM;
}
dev_set_drvdata(&pdev->dev, uwire); dev_set_drvdata(&pdev->dev, uwire);
uwire->ck = clk_get(&pdev->dev, "armxor_ck"); uwire->ck = clk_get(&pdev->dev, "armxor_ck");
...@@ -520,8 +532,10 @@ static int __init uwire_probe(struct platform_device *pdev) ...@@ -520,8 +532,10 @@ static int __init uwire_probe(struct platform_device *pdev)
uwire->bitbang.txrx_bufs = uwire_txrx; uwire->bitbang.txrx_bufs = uwire_txrx;
status = spi_bitbang_start(&uwire->bitbang); status = spi_bitbang_start(&uwire->bitbang);
if (status < 0) if (status < 0) {
uwire_off(uwire); uwire_off(uwire);
iounmap(uwire_base);
}
return status; return status;
} }
...@@ -534,6 +548,7 @@ static int __exit uwire_remove(struct platform_device *pdev) ...@@ -534,6 +548,7 @@ static int __exit uwire_remove(struct platform_device *pdev)
status = spi_bitbang_stop(&uwire->bitbang); status = spi_bitbang_stop(&uwire->bitbang);
uwire_off(uwire); uwire_off(uwire);
iounmap(uwire_base);
return status; return status;
} }
......
...@@ -344,7 +344,12 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver, ...@@ -344,7 +344,12 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver,
goto err1; goto err1;
} }
hcd->regs = (void __iomem *) (int) IO_ADDRESS(hcd->rsrc_start); hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
if (!hcd->regs) {
dev_err(&pdev->dev, "can't ioremap OHCI HCD\n");
retval = -ENOMEM;
goto err2;
}
ohci = hcd_to_ohci(hcd); ohci = hcd_to_ohci(hcd);
ohci_hcd_init(ohci); ohci_hcd_init(ohci);
...@@ -355,11 +360,11 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver, ...@@ -355,11 +360,11 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver,
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if (irq < 0) { if (irq < 0) {
retval = -ENXIO; retval = -ENXIO;
goto err2; goto err3;
} }
retval = usb_add_hcd(hcd, irq, IRQF_DISABLED); retval = usb_add_hcd(hcd, irq, IRQF_DISABLED);
if (retval) if (retval)
goto err2; goto err3;
host_initialized = 1; host_initialized = 1;
...@@ -367,6 +372,8 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver, ...@@ -367,6 +372,8 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver,
omap_ohci_clock_power(0); omap_ohci_clock_power(0);
return 0; return 0;
err3:
iounmap(hcd->regs);
err2: err2:
release_mem_region(hcd->rsrc_start, hcd->rsrc_len); release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
err1: err1:
...@@ -401,6 +408,7 @@ usb_hcd_omap_remove (struct usb_hcd *hcd, struct platform_device *pdev) ...@@ -401,6 +408,7 @@ usb_hcd_omap_remove (struct usb_hcd *hcd, struct platform_device *pdev)
} }
if (machine_is_omap_osk()) if (machine_is_omap_osk())
omap_free_gpio(9); omap_free_gpio(9);
iounmap(hcd->regs);
release_mem_region(hcd->rsrc_start, hcd->rsrc_len); release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
usb_put_hcd(hcd); usb_put_hcd(hcd);
clk_put(usb_dc_ck); clk_put(usb_dc_ck);
......
...@@ -156,7 +156,7 @@ struct resmap { ...@@ -156,7 +156,7 @@ struct resmap {
}; };
static struct { static struct {
u32 base; void __iomem *base;
struct omapfb_mem_desc mem_desc; struct omapfb_mem_desc mem_desc;
struct resmap *res_map[DISPC_MEMTYPE_NUM]; struct resmap *res_map[DISPC_MEMTYPE_NUM];
...@@ -1353,14 +1353,19 @@ static int omap_dispc_init(struct omapfb_device *fbdev, int ext_mode, ...@@ -1353,14 +1353,19 @@ static int omap_dispc_init(struct omapfb_device *fbdev, int ext_mode,
memset(&dispc, 0, sizeof(dispc)); memset(&dispc, 0, sizeof(dispc));
dispc.base = io_p2v(DISPC_BASE); dispc.base = ioremap(DISPC_BASE, SZ_1K);
if (!dispc.base) {
dev_err(fbdev->dev, "can't ioremap DISPC\n");
return -ENOMEM;
}
dispc.fbdev = fbdev; dispc.fbdev = fbdev;
dispc.ext_mode = ext_mode; dispc.ext_mode = ext_mode;
init_completion(&dispc.frame_done); init_completion(&dispc.frame_done);
if ((r = get_dss_clocks()) < 0) if ((r = get_dss_clocks()) < 0)
return r; goto fail0;
enable_lcd_clocks(1); enable_lcd_clocks(1);
...@@ -1466,7 +1471,8 @@ fail2: ...@@ -1466,7 +1471,8 @@ fail2:
fail1: fail1:
enable_lcd_clocks(0); enable_lcd_clocks(0);
put_dss_clocks(); put_dss_clocks();
fail0:
iounmap(dispc.base);
return r; return r;
} }
...@@ -1482,6 +1488,7 @@ static void omap_dispc_cleanup(void) ...@@ -1482,6 +1488,7 @@ static void omap_dispc_cleanup(void)
free_palette_ram(); free_palette_ram();
free_irq(INT_24XX_DSS_IRQ, dispc.fbdev); free_irq(INT_24XX_DSS_IRQ, dispc.fbdev);
put_dss_clocks(); put_dss_clocks();
iounmap(dispc.base);
} }
const struct lcd_ctrl omap2_int_ctrl = { const struct lcd_ctrl omap2_int_ctrl = {
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
#define DISPC_CONTROL 0x0040 #define DISPC_CONTROL 0x0040
static struct { static struct {
u32 base; void __iomem *base;
void (*lcdc_callback)(void *data); void (*lcdc_callback)(void *data);
void *lcdc_callback_data; void *lcdc_callback_data;
unsigned long l4_khz; unsigned long l4_khz;
...@@ -518,7 +518,11 @@ static int rfbi_init(struct omapfb_device *fbdev) ...@@ -518,7 +518,11 @@ static int rfbi_init(struct omapfb_device *fbdev)
int r; int r;
rfbi.fbdev = fbdev; rfbi.fbdev = fbdev;
rfbi.base = io_p2v(RFBI_BASE); rfbi.base = ioremap(RFBI_BASE, SZ_1K);
if (!rfbi.base) {
dev_err(fbdev->dev, "can't ioremap RFBI\n");
return -ENOMEM;
}
if ((r = rfbi_get_clocks()) < 0) if ((r = rfbi_get_clocks()) < 0)
return r; return r;
...@@ -566,6 +570,7 @@ static void rfbi_cleanup(void) ...@@ -566,6 +570,7 @@ static void rfbi_cleanup(void)
{ {
omap_dispc_free_irq(); omap_dispc_free_irq();
rfbi_put_clocks(); rfbi_put_clocks();
iounmap(rfbi.base);
} }
const struct lcd_ctrl_extif omap2_ext_if = { const struct lcd_ctrl_extif omap2_ext_if = {
......
...@@ -574,7 +574,12 @@ static int sossi_init(struct omapfb_device *fbdev) ...@@ -574,7 +574,12 @@ static int sossi_init(struct omapfb_device *fbdev)
struct clk *dpll1out_ck; struct clk *dpll1out_ck;
int r; int r;
sossi.base = (void __iomem *)IO_ADDRESS(OMAP_SOSSI_BASE); sossi.base = ioremap(OMAP_SOSSI_BASE, SZ_1K);
if (!sossi.base) {
dev_err(fbdev->dev, "can't ioremap SoSSI\n");
return -ENOMEM;
}
sossi.fbdev = fbdev; sossi.fbdev = fbdev;
spin_lock_init(&sossi.lock); spin_lock_init(&sossi.lock);
...@@ -665,6 +670,7 @@ static void sossi_cleanup(void) ...@@ -665,6 +670,7 @@ static void sossi_cleanup(void)
{ {
omap_lcdc_free_dma_callback(); omap_lcdc_free_dma_callback();
clk_put(sossi.fck); clk_put(sossi.fck);
iounmap(sossi.base);
} }
struct lcd_ctrl_extif omap1_ext_if = { struct lcd_ctrl_extif omap1_ext_if = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment