Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 033f2752 authored by Linus Walleij's avatar Linus Walleij
Browse files

gpio: tc3589x: use managed resources



Grab state container and irq using the devm_* functions and save
some lines of hairy clean-up code.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 1c8732bb
Loading
Loading
Loading
Loading
+10 −18
Original line number Diff line number Diff line
@@ -329,7 +329,8 @@ static int tc3589x_gpio_probe(struct platform_device *pdev)
	if (irq < 0)
		return irq;

	tc3589x_gpio = kzalloc(sizeof(struct tc3589x_gpio), GFP_KERNEL);
	tc3589x_gpio = devm_kzalloc(&pdev->dev, sizeof(struct tc3589x_gpio),
				    GFP_KERNEL);
	if (!tc3589x_gpio)
		return -ENOMEM;

@@ -354,23 +355,25 @@ static int tc3589x_gpio_probe(struct platform_device *pdev)
	ret = tc3589x_set_bits(tc3589x, TC3589x_RSTCTRL,
			       TC3589x_RSTCTRL_GPIRST, 0);
	if (ret < 0)
		goto out_free;
		return ret;

	ret = tc3589x_gpio_irq_init(tc3589x_gpio, np);
	if (ret)
		goto out_free;
		return ret;

	ret = request_threaded_irq(irq, NULL, tc3589x_gpio_irq, IRQF_ONESHOT,
				   "tc3589x-gpio", tc3589x_gpio);
	ret = devm_request_threaded_irq(&pdev->dev,
					irq, NULL, tc3589x_gpio_irq,
					IRQF_ONESHOT, "tc3589x-gpio",
					tc3589x_gpio);
	if (ret) {
		dev_err(&pdev->dev, "unable to get irq: %d\n", ret);
		goto out_free;
		return ret;
	}

	ret = gpiochip_add(&tc3589x_gpio->chip);
	if (ret) {
		dev_err(&pdev->dev, "unable to add gpiochip: %d\n", ret);
		goto out_freeirq;
		return ret;
	}

	if (pdata && pdata->setup)
@@ -379,12 +382,6 @@ static int tc3589x_gpio_probe(struct platform_device *pdev)
	platform_set_drvdata(pdev, tc3589x_gpio);

	return 0;

out_freeirq:
	free_irq(irq, tc3589x_gpio);
out_free:
	kfree(tc3589x_gpio);
	return ret;
}

static int tc3589x_gpio_remove(struct platform_device *pdev)
@@ -392,7 +389,6 @@ static int tc3589x_gpio_remove(struct platform_device *pdev)
	struct tc3589x_gpio *tc3589x_gpio = platform_get_drvdata(pdev);
	struct tc3589x *tc3589x = tc3589x_gpio->tc3589x;
	struct tc3589x_gpio_platform_data *pdata = tc3589x->pdata->gpio;
	int irq = platform_get_irq(pdev, 0);
	int ret;

	if (pdata && pdata->remove)
@@ -405,10 +401,6 @@ static int tc3589x_gpio_remove(struct platform_device *pdev)
		return ret;
	}

	free_irq(irq, tc3589x_gpio);

	kfree(tc3589x_gpio);

	return 0;
}