gpio: vx855: Switch to use managed resources APIs
Use devm_* APIs to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
c458e45045
commit
5b6a342ba9
1 changed files with 6 additions and 38 deletions
|
@ -52,8 +52,6 @@ struct vx855_gpio {
|
|||
spinlock_t lock;
|
||||
u32 io_gpi;
|
||||
u32 io_gpo;
|
||||
bool gpi_reserved;
|
||||
bool gpo_reserved;
|
||||
};
|
||||
|
||||
/* resolve a GPIx into the corresponding bit position */
|
||||
|
@ -224,14 +222,13 @@ static int vx855gpio_probe(struct platform_device *pdev)
|
|||
struct resource *res_gpi;
|
||||
struct resource *res_gpo;
|
||||
struct vx855_gpio *vg;
|
||||
int ret;
|
||||
|
||||
res_gpi = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
res_gpo = platform_get_resource(pdev, IORESOURCE_IO, 1);
|
||||
if (!res_gpi || !res_gpo)
|
||||
return -EBUSY;
|
||||
|
||||
vg = kzalloc(sizeof(*vg), GFP_KERNEL);
|
||||
vg = devm_kzalloc(&pdev->dev, sizeof(*vg), GFP_KERNEL);
|
||||
if (!vg)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -250,56 +247,27 @@ static int vx855gpio_probe(struct platform_device *pdev)
|
|||
* succeed. Ignore and continue.
|
||||
*/
|
||||
|
||||
if (!request_region(res_gpi->start, resource_size(res_gpi),
|
||||
MODULE_NAME "_gpi"))
|
||||
if (!devm_request_region(&pdev->dev, res_gpi->start,
|
||||
resource_size(res_gpi), MODULE_NAME "_gpi"))
|
||||
dev_warn(&pdev->dev,
|
||||
"GPI I/O resource busy, probably claimed by ACPI\n");
|
||||
else
|
||||
vg->gpi_reserved = true;
|
||||
|
||||
if (!request_region(res_gpo->start, resource_size(res_gpo),
|
||||
MODULE_NAME "_gpo"))
|
||||
if (!devm_request_region(&pdev->dev, res_gpo->start,
|
||||
resource_size(res_gpo), MODULE_NAME "_gpo"))
|
||||
dev_warn(&pdev->dev,
|
||||
"GPO I/O resource busy, probably claimed by ACPI\n");
|
||||
else
|
||||
vg->gpo_reserved = true;
|
||||
|
||||
vx855gpio_gpio_setup(vg);
|
||||
|
||||
ret = gpiochip_add(&vg->gpio);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to register GPIOs\n");
|
||||
goto out_release;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_release:
|
||||
if (vg->gpi_reserved)
|
||||
release_region(res_gpi->start, resource_size(res_gpi));
|
||||
if (vg->gpo_reserved)
|
||||
release_region(res_gpi->start, resource_size(res_gpo));
|
||||
kfree(vg);
|
||||
return ret;
|
||||
return gpiochip_add(&vg->gpio);
|
||||
}
|
||||
|
||||
static int vx855gpio_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct vx855_gpio *vg = platform_get_drvdata(pdev);
|
||||
struct resource *res;
|
||||
|
||||
gpiochip_remove(&vg->gpio);
|
||||
|
||||
if (vg->gpi_reserved) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
release_region(res->start, resource_size(res));
|
||||
}
|
||||
if (vg->gpo_reserved) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_IO, 1);
|
||||
release_region(res->start, resource_size(res));
|
||||
}
|
||||
|
||||
kfree(vg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue