diff options
author | Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> | 2018-10-04 09:01:05 -0400 |
---|---|---|
committer | Boris Brezillon <boris.brezillon@bootlin.com> | 2018-10-05 04:20:34 -0400 |
commit | 4edc00adfd58768b065204968948c52f5e5b07b1 (patch) | |
tree | 8cda3650279f31424b2e1dfbfd1e3d035fb77714 | |
parent | 6c925b333368cda4e1b0513b07f72316c0e7edd7 (diff) |
mtd: maps: gpio-addr-flash: Use devm_* functions
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>
-rw-r--r-- | drivers/mtd/maps/gpio-addr-flash.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/mtd/maps/gpio-addr-flash.c b/drivers/mtd/maps/gpio-addr-flash.c index 6de16e81994c..84404dcc7824 100644 --- a/drivers/mtd/maps/gpio-addr-flash.c +++ b/drivers/mtd/maps/gpio-addr-flash.c | |||
@@ -213,7 +213,7 @@ static int gpio_flash_probe(struct platform_device *pdev) | |||
213 | return -EINVAL; | 213 | return -EINVAL; |
214 | 214 | ||
215 | arr_size = sizeof(int) * gpios->end; | 215 | arr_size = sizeof(int) * gpios->end; |
216 | state = kzalloc(sizeof(*state) + arr_size, GFP_KERNEL); | 216 | state = devm_kzalloc(&pdev->dev, sizeof(*state) + arr_size, GFP_KERNEL); |
217 | if (!state) | 217 | if (!state) |
218 | return -ENOMEM; | 218 | return -ENOMEM; |
219 | 219 | ||
@@ -234,9 +234,9 @@ static int gpio_flash_probe(struct platform_device *pdev) | |||
234 | state->map.copy_to = gf_copy_to; | 234 | state->map.copy_to = gf_copy_to; |
235 | state->map.bankwidth = pdata->width; | 235 | state->map.bankwidth = pdata->width; |
236 | state->map.size = state->win_size * (1 << state->gpio_count); | 236 | state->map.size = state->win_size * (1 << state->gpio_count); |
237 | state->map.virt = ioremap_nocache(memory->start, state->win_size); | 237 | state->map.virt = devm_ioremap_resource(&pdev->dev, memory); |
238 | if (!state->map.virt) | 238 | if (IS_ERR(state->map.virt)) |
239 | return -ENOMEM; | 239 | return PTR_ERR(state->map.virt); |
240 | 240 | ||
241 | state->map.phys = NO_XIP; | 241 | state->map.phys = NO_XIP; |
242 | state->map.map_priv_1 = (unsigned long)state; | 242 | state->map.map_priv_1 = (unsigned long)state; |
@@ -245,12 +245,10 @@ static int gpio_flash_probe(struct platform_device *pdev) | |||
245 | 245 | ||
246 | i = 0; | 246 | i = 0; |
247 | do { | 247 | do { |
248 | if (gpio_request(state->gpio_addrs[i], DRIVER_NAME)) { | 248 | if (devm_gpio_request(&pdev->dev, state->gpio_addrs[i], |
249 | DRIVER_NAME)) { | ||
249 | dev_err(&pdev->dev, "failed to request gpio %d\n", | 250 | dev_err(&pdev->dev, "failed to request gpio %d\n", |
250 | state->gpio_addrs[i]); | 251 | state->gpio_addrs[i]); |
251 | while (i--) | ||
252 | gpio_free(state->gpio_addrs[i]); | ||
253 | kfree(state); | ||
254 | return -EBUSY; | 252 | return -EBUSY; |
255 | } | 253 | } |
256 | gpio_direction_output(state->gpio_addrs[i], 0); | 254 | gpio_direction_output(state->gpio_addrs[i], 0); |
@@ -259,12 +257,8 @@ static int gpio_flash_probe(struct platform_device *pdev) | |||
259 | dev_notice(&pdev->dev, "probing %d-bit flash bus\n", | 257 | dev_notice(&pdev->dev, "probing %d-bit flash bus\n", |
260 | state->map.bankwidth * 8); | 258 | state->map.bankwidth * 8); |
261 | state->mtd = do_map_probe(memory->name, &state->map); | 259 | state->mtd = do_map_probe(memory->name, &state->map); |
262 | if (!state->mtd) { | 260 | if (!state->mtd) |
263 | for (i = 0; i < state->gpio_count; ++i) | ||
264 | gpio_free(state->gpio_addrs[i]); | ||
265 | kfree(state); | ||
266 | return -ENXIO; | 261 | return -ENXIO; |
267 | } | ||
268 | state->mtd->dev.parent = &pdev->dev; | 262 | state->mtd->dev.parent = &pdev->dev; |
269 | 263 | ||
270 | mtd_device_parse_register(state->mtd, part_probe_types, NULL, | 264 | mtd_device_parse_register(state->mtd, part_probe_types, NULL, |
@@ -276,13 +270,9 @@ static int gpio_flash_probe(struct platform_device *pdev) | |||
276 | static int gpio_flash_remove(struct platform_device *pdev) | 270 | static int gpio_flash_remove(struct platform_device *pdev) |
277 | { | 271 | { |
278 | struct async_state *state = platform_get_drvdata(pdev); | 272 | struct async_state *state = platform_get_drvdata(pdev); |
279 | size_t i = 0; | 273 | |
280 | do { | ||
281 | gpio_free(state->gpio_addrs[i]); | ||
282 | } while (++i < state->gpio_count); | ||
283 | mtd_device_unregister(state->mtd); | 274 | mtd_device_unregister(state->mtd); |
284 | map_destroy(state->mtd); | 275 | map_destroy(state->mtd); |
285 | kfree(state); | ||
286 | return 0; | 276 | return 0; |
287 | } | 277 | } |
288 | 278 | ||