I2C: mv64xxx: use devm_ioremap_resource()
[firefly-linux-kernel-4.4.55.git] / drivers / i2c / busses / i2c-mv64xxx.c
index 3bbd65d35a5e05365361a4d7711e41de99fa8a31..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;
@@ -252,7 +250,7 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
                writel(drv_data->cntl_bits,
                        drv_data->reg_base + MV64XXX_I2C_REG_CONTROL);
                drv_data->block = 0;
-               wake_up_interruptible(&drv_data->waitq);
+               wake_up(&drv_data->waitq);
                break;
 
        case MV64XXX_I2C_ACTION_CONTINUE:
@@ -300,7 +298,7 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
                writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
                        drv_data->reg_base + MV64XXX_I2C_REG_CONTROL);
                drv_data->block = 0;
-               wake_up_interruptible(&drv_data->waitq);
+               wake_up(&drv_data->waitq);
                break;
 
        case MV64XXX_I2C_ACTION_INVALID:
@@ -315,7 +313,7 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
                writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
                        drv_data->reg_base + MV64XXX_I2C_REG_CONTROL);
                drv_data->block = 0;
-               wake_up_interruptible(&drv_data->waitq);
+               wake_up(&drv_data->waitq);
                break;
        }
 }
@@ -381,7 +379,7 @@ mv64xxx_i2c_wait_for_completion(struct mv64xxx_i2c_data *drv_data)
        unsigned long   flags;
        char            abort = 0;
 
-       time_left = wait_event_interruptible_timeout(drv_data->waitq,
+       time_left = wait_event_timeout(drv_data->waitq,
                !drv_data->block, drv_data->adapter.timeout);
 
        spin_lock_irqsave(&drv_data->lock, flags);
@@ -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)) {