| From 18c44d3c7c7540526246394f10e754e31feded65 Mon Sep 17 00:00:00 2001 |
| From: Russell King <rmk+kernel@arm.linux.org.uk> |
| Date: Thu, 16 May 2013 21:33:09 +0100 |
| Subject: 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: Russell King <rmk+kernel@arm.linux.org.uk> |
| Acked-by: Mark A. Greer <mgreer@animalcreek.com> |
| Signed-off-by: Wolfram Sang <wsa@the-dreams.de> |
| (cherry picked from commit 16874b0709c7c78489de1f502edd33acad2918e8) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/i2c/busses/i2c-mv64xxx.c | 46 ++++++---------------------------------- |
| 1 file changed, 6 insertions(+), 40 deletions(-) |
| |
| diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c |
| index 940a190b1a53..54b8cf6b6dd0 100644 |
| --- a/drivers/i2c/busses/i2c-mv64xxx.c |
| +++ b/drivers/i2c/busses/i2c-mv64xxx.c |
| @@ -92,8 +92,6 @@ struct mv64xxx_i2c_data { |
| u32 aborting; |
| u32 cntl_bits; |
| void __iomem *reg_base; |
| - u32 reg_base_p; |
| - u32 reg_size; |
| u32 addr1; |
| u32 addr2; |
| u32 bytes_left; |
| @@ -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 |
| static int |
| mv64xxx_calc_freq(const int tclk, const int n, const int m) |
| @@ -610,6 +574,7 @@ mv64xxx_i2c_probe(struct platform_device *pd) |
| { |
| struct mv64xxx_i2c_data *drv_data; |
| struct mv64xxx_i2c_pdata *pdata = pd->dev.platform_data; |
| + struct resource *r; |
| int rc; |
| |
| if ((!pdata && !pd->dev.of_node)) |
| @@ -619,9 +584,12 @@ mv64xxx_i2c_probe(struct platform_device *pd) |
| if (!drv_data) |
| return -ENOMEM; |
| |
| - rc = mv64xxx_i2c_map_regs(pd, drv_data); |
| - if (rc) |
| + r = platform_get_resource(pd, IORESOURCE_MEM, 0); |
| + 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; |
| + } |
| |
| strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter", |
| sizeof(drv_data->adapter.name)); |
| @@ -690,7 +658,6 @@ mv64xxx_i2c_probe(struct platform_device *pd) |
| clk_unprepare(drv_data->clk); |
| } |
| #endif |
| - mv64xxx_i2c_unmap_regs(drv_data); |
| exit_kfree: |
| kfree(drv_data); |
| return rc; |
| @@ -703,7 +670,6 @@ mv64xxx_i2c_remove(struct platform_device *dev) |
| |
| i2c_del_adapter(&drv_data->adapter); |
| free_irq(drv_data->irq, drv_data); |
| - mv64xxx_i2c_unmap_regs(drv_data); |
| #if defined(CONFIG_HAVE_CLK) |
| /* Not all platforms have a clk */ |
| if (!IS_ERR(drv_data->clk)) { |
| -- |
| 1.8.5.rc3 |
| |