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

Commit ad7b550a authored by Laxman Dewangan's avatar Laxman Dewangan
Browse files

gpio: tb10x: Use devm_gpiochip_add_data() for gpio registration



Use devm_gpiochip_add_data() for GPIO registration and clean the
error path.

Signed-off-by: default avatarLaxman Dewangan <ldewangan@nvidia.com>
parent 94c683ab
Loading
Loading
Loading
Loading
+6 −16
Original line number Original line Diff line number Diff line
@@ -205,10 +205,10 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
	tb10x_gpio->gc.can_sleep	= false;
	tb10x_gpio->gc.can_sleep	= false;




	ret = gpiochip_add_data(&tb10x_gpio->gc, tb10x_gpio);
	ret = devm_gpiochip_add_data(&pdev->dev, &tb10x_gpio->gc, tb10x_gpio);
	if (ret < 0) {
	if (ret < 0) {
		dev_err(&pdev->dev, "Could not add gpiochip.\n");
		dev_err(&pdev->dev, "Could not add gpiochip.\n");
		goto fail_gpiochip_registration;
		return ret;
	}
	}


	platform_set_drvdata(pdev, tb10x_gpio);
	platform_set_drvdata(pdev, tb10x_gpio);
@@ -219,7 +219,7 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
		ret = platform_get_irq(pdev, 0);
		ret = platform_get_irq(pdev, 0);
		if (ret < 0) {
		if (ret < 0) {
			dev_err(&pdev->dev, "No interrupt specified.\n");
			dev_err(&pdev->dev, "No interrupt specified.\n");
			goto fail_get_irq;
			return ret;
		}
		}


		tb10x_gpio->gc.to_irq	= tb10x_gpio_to_irq;
		tb10x_gpio->gc.to_irq	= tb10x_gpio_to_irq;
@@ -229,14 +229,13 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
				IRQF_TRIGGER_NONE | IRQF_SHARED,
				IRQF_TRIGGER_NONE | IRQF_SHARED,
				dev_name(&pdev->dev), tb10x_gpio);
				dev_name(&pdev->dev), tb10x_gpio);
		if (ret != 0)
		if (ret != 0)
			goto fail_request_irq;
			return ret;


		tb10x_gpio->domain = irq_domain_add_linear(dn,
		tb10x_gpio->domain = irq_domain_add_linear(dn,
						tb10x_gpio->gc.ngpio,
						tb10x_gpio->gc.ngpio,
						&irq_generic_chip_ops, NULL);
						&irq_generic_chip_ops, NULL);
		if (!tb10x_gpio->domain) {
		if (!tb10x_gpio->domain) {
			ret = -ENOMEM;
			return -ENOMEM;
			goto fail_irq_domain;
		}
		}


		ret = irq_alloc_domain_generic_chips(tb10x_gpio->domain,
		ret = irq_alloc_domain_generic_chips(tb10x_gpio->domain,
@@ -244,7 +243,7 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
				handle_edge_irq, IRQ_NOREQUEST, IRQ_NOPROBE,
				handle_edge_irq, IRQ_NOREQUEST, IRQ_NOPROBE,
				IRQ_GC_INIT_MASK_CACHE);
				IRQ_GC_INIT_MASK_CACHE);
		if (ret)
		if (ret)
			goto fail_irq_domain;
			return ret;


		gc = tb10x_gpio->domain->gc->gc[0];
		gc = tb10x_gpio->domain->gc->gc[0];
		gc->reg_base                         = tb10x_gpio->base;
		gc->reg_base                         = tb10x_gpio->base;
@@ -258,14 +257,6 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
	}
	}


	return 0;
	return 0;

fail_irq_domain:
fail_request_irq:
fail_get_irq:
	gpiochip_remove(&tb10x_gpio->gc);
fail_gpiochip_registration:
fail_ioremap:
	return ret;
}
}


static int tb10x_gpio_remove(struct platform_device *pdev)
static int tb10x_gpio_remove(struct platform_device *pdev)
@@ -278,7 +269,6 @@ static int tb10x_gpio_remove(struct platform_device *pdev)
		kfree(tb10x_gpio->domain->gc);
		kfree(tb10x_gpio->domain->gc);
		irq_domain_remove(tb10x_gpio->domain);
		irq_domain_remove(tb10x_gpio->domain);
	}
	}
	gpiochip_remove(&tb10x_gpio->gc);


	return 0;
	return 0;
}
}