I2C: mv64xxx: use devm_ioremap_resource()
[firefly-linux-kernel-4.4.55.git] / drivers / i2c / busses / i2c-mv64xxx.c
index 1a3abd6a0bfcb7166bc7cfd7a9cb7be15016e48e..54b8cf6b6dd01355430f50bbaa24a2a08a7a73c6 100644 (file)
@@ -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,8 +584,10 @@ mv64xxx_i2c_probe(struct platform_device *pd)
        if (!drv_data)
                return -ENOMEM;
 
-       if (mv64xxx_i2c_map_regs(pd, drv_data)) {
-               rc = -ENODEV;
+       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;
        }
 
@@ -691,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;
@@ -704,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)) {