Commit 16874b07 authored by Russell King's avatar Russell King Committed by Wolfram Sang

I2C: mv64xxx: use devm_ioremap_resource()

Eliminate reg_base_p and reg_size, mv64xxx_i2c_unmap_regs() and an
unchecked ioremap() return from this driver by using the devm_*
API for requesting and ioremapping resources.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Acked-by: default avatarMark A. Greer <mgreer@animalcreek.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent d5ac4561
...@@ -92,8 +92,6 @@ struct mv64xxx_i2c_data { ...@@ -92,8 +92,6 @@ struct mv64xxx_i2c_data {
u32 aborting; u32 aborting;
u32 cntl_bits; u32 cntl_bits;
void __iomem *reg_base; void __iomem *reg_base;
u32 reg_base_p;
u32 reg_size;
u32 addr1; u32 addr1;
u32 addr2; u32 addr2;
u32 bytes_left; u32 bytes_left;
...@@ -495,40 +493,6 @@ static const struct i2c_algorithm mv64xxx_i2c_algo = { ...@@ -495,40 +493,6 @@ static const struct i2c_algorithm mv64xxx_i2c_algo = {
* *
***************************************************************************** *****************************************************************************
*/ */
static int
mv64xxx_i2c_map_regs(struct platform_device *pd,
struct mv64xxx_i2c_data *drv_data)
{
int size;
struct resource *r = platform_get_resource(pd, IORESOURCE_MEM, 0);
if (!r)
return -ENODEV;
size = resource_size(r);
if (!request_mem_region(r->start, size, drv_data->adapter.name))
return -EBUSY;
drv_data->reg_base = ioremap(r->start, size);
drv_data->reg_base_p = r->start;
drv_data->reg_size = size;
return 0;
}
static void
mv64xxx_i2c_unmap_regs(struct mv64xxx_i2c_data *drv_data)
{
if (drv_data->reg_base) {
iounmap(drv_data->reg_base);
release_mem_region(drv_data->reg_base_p, drv_data->reg_size);
}
drv_data->reg_base = NULL;
drv_data->reg_base_p = 0;
}
#ifdef CONFIG_OF #ifdef CONFIG_OF
static int static int
mv64xxx_calc_freq(const int tclk, const int n, const int m) mv64xxx_calc_freq(const int tclk, const int n, const int m)
...@@ -610,6 +574,7 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -610,6 +574,7 @@ mv64xxx_i2c_probe(struct platform_device *pd)
{ {
struct mv64xxx_i2c_data *drv_data; struct mv64xxx_i2c_data *drv_data;
struct mv64xxx_i2c_pdata *pdata = pd->dev.platform_data; struct mv64xxx_i2c_pdata *pdata = pd->dev.platform_data;
struct resource *r;
int rc; int rc;
if ((!pdata && !pd->dev.of_node)) if ((!pdata && !pd->dev.of_node))
...@@ -619,9 +584,12 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -619,9 +584,12 @@ mv64xxx_i2c_probe(struct platform_device *pd)
if (!drv_data) if (!drv_data)
return -ENOMEM; return -ENOMEM;
rc = mv64xxx_i2c_map_regs(pd, drv_data); r = platform_get_resource(pd, IORESOURCE_MEM, 0);
if (rc) drv_data->reg_base = devm_ioremap_resource(&pd->dev, r);
if (IS_ERR(drv_data->reg_base)) {
rc = PTR_ERR(drv_data->reg_base);
goto exit_kfree; goto exit_kfree;
}
strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter", strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
sizeof(drv_data->adapter.name)); sizeof(drv_data->adapter.name));
...@@ -690,7 +658,6 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -690,7 +658,6 @@ mv64xxx_i2c_probe(struct platform_device *pd)
clk_unprepare(drv_data->clk); clk_unprepare(drv_data->clk);
} }
#endif #endif
mv64xxx_i2c_unmap_regs(drv_data);
exit_kfree: exit_kfree:
kfree(drv_data); kfree(drv_data);
return rc; return rc;
...@@ -703,7 +670,6 @@ mv64xxx_i2c_remove(struct platform_device *dev) ...@@ -703,7 +670,6 @@ mv64xxx_i2c_remove(struct platform_device *dev)
i2c_del_adapter(&drv_data->adapter); i2c_del_adapter(&drv_data->adapter);
free_irq(drv_data->irq, drv_data); free_irq(drv_data->irq, drv_data);
mv64xxx_i2c_unmap_regs(drv_data);
#if defined(CONFIG_HAVE_CLK) #if defined(CONFIG_HAVE_CLK)
/* Not all platforms have a clk */ /* Not all platforms have a clk */
if (!IS_ERR(drv_data->clk)) { if (!IS_ERR(drv_data->clk)) {
......
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