Loading drivers/gpio/gpio-vx855.c +6 −38 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; Loading @@ -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 Loading
drivers/gpio/gpio-vx855.c +6 −38 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; Loading @@ -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