summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>2018-10-04 09:01:05 -0400
committerBoris Brezillon <boris.brezillon@bootlin.com>2018-10-05 04:20:34 -0400
commit4edc00adfd58768b065204968948c52f5e5b07b1 (patch)
tree8cda3650279f31424b2e1dfbfd1e3d035fb77714
parent6c925b333368cda4e1b0513b07f72316c0e7edd7 (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.c26
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)
276static int gpio_flash_remove(struct platform_device *pdev) 270static 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