Commit 4edc00ad authored by Ricardo Ribalda's avatar Ricardo Ribalda Committed by Boris Brezillon
Browse files

mtd: maps: gpio-addr-flash: Use devm_* functions



By using devm functions we can make the code cleaner.

Signed-off-by: default avatarRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
parent 6c925b33
Loading
Loading
Loading
Loading
+8 −18
Original line number Diff line number Diff line
@@ -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;
}