mtd: maps: gpio-addr-flash: Use devm_* functions
authorRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Thu, 4 Oct 2018 13:01:05 +0000 (15:01 +0200)
committerBoris Brezillon <boris.brezillon@bootlin.com>
Fri, 5 Oct 2018 08:20:34 +0000 (10:20 +0200)
By using devm functions we can make the code cleaner.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
drivers/mtd/maps/gpio-addr-flash.c

index 6de16e8..84404dc 100644 (file)
@@ -213,7 +213,7 @@ static int gpio_flash_probe(struct platform_device *pdev)
                return -EINVAL;
 
        arr_size = sizeof(int) * gpios->end;
-       state = kzalloc(sizeof(*state) + arr_size, GFP_KERNEL);
+       state = devm_kzalloc(&pdev->dev, sizeof(*state) + arr_size, GFP_KERNEL);
        if (!state)
                return -ENOMEM;
 
@@ -234,9 +234,9 @@ static int gpio_flash_probe(struct platform_device *pdev)
        state->map.copy_to    = gf_copy_to;
        state->map.bankwidth  = pdata->width;
        state->map.size       = state->win_size * (1 << state->gpio_count);
-       state->map.virt       = ioremap_nocache(memory->start, state->win_size);
-       if (!state->map.virt)
-               return -ENOMEM;
+       state->map.virt       = devm_ioremap_resource(&pdev->dev, memory);
+       if (IS_ERR(state->map.virt))
+               return PTR_ERR(state->map.virt);
 
        state->map.phys       = NO_XIP;
        state->map.map_priv_1 = (unsigned long)state;
@@ -245,12 +245,10 @@ static int gpio_flash_probe(struct platform_device *pdev)
 
        i = 0;
        do {
-               if (gpio_request(state->gpio_addrs[i], DRIVER_NAME)) {
+               if (devm_gpio_request(&pdev->dev, state->gpio_addrs[i],
+                                     DRIVER_NAME)) {
                        dev_err(&pdev->dev, "failed to request gpio %d\n",
                                state->gpio_addrs[i]);
-                       while (i--)
-                               gpio_free(state->gpio_addrs[i]);
-                       kfree(state);
                        return -EBUSY;
                }
                gpio_direction_output(state->gpio_addrs[i], 0);
@@ -259,12 +257,8 @@ static int gpio_flash_probe(struct platform_device *pdev)
        dev_notice(&pdev->dev, "probing %d-bit flash bus\n",
                   state->map.bankwidth * 8);
        state->mtd = do_map_probe(memory->name, &state->map);
-       if (!state->mtd) {
-               for (i = 0; i < state->gpio_count; ++i)
-                       gpio_free(state->gpio_addrs[i]);
-               kfree(state);
+       if (!state->mtd)
                return -ENXIO;
-       }
        state->mtd->dev.parent = &pdev->dev;
 
        mtd_device_parse_register(state->mtd, part_probe_types, NULL,
@@ -276,13 +270,9 @@ static int gpio_flash_probe(struct platform_device *pdev)
 static int gpio_flash_remove(struct platform_device *pdev)
 {
        struct async_state *state = platform_get_drvdata(pdev);
-       size_t i = 0;
-       do {
-               gpio_free(state->gpio_addrs[i]);
-       } while (++i < state->gpio_count);
+
        mtd_device_unregister(state->mtd);
        map_destroy(state->mtd);
-       kfree(state);
        return 0;
 }