[PATCH] gpio: lpc32xx: check devm_gpiochip_add_data() return value

Bartosz Golaszewski brgl at kernel.org
Thu Oct 15 03:10:20 PDT 2026


On Wed, 14 Oct 2026 22:43:31 +0200, Jayaraj Devaraj
<jayarajdmit at gmail.com> said:
> lpc32xx_gpio_probe() registers each gpio chip with
> devm_gpiochip_add_data() but ignores the return value. If registering
> a chip fails, probe still returns 0, so the driver binds with a chip
> missing and no error is reported.
>
> Check the return value, print an error naming the failing chip and
> return the error code. Chips registered earlier in the loop are devm
> managed and are removed automatically on failure.
>
> Signed-off-by: Jayaraj Devaraj <jayarajdmit at gmail.com>
> ---
>  drivers/gpio/gpio-lpc32xx.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpio/gpio-lpc32xx.c b/drivers/gpio/gpio-lpc32xx.c
> index 37fc54fc7385..014eb8bc70da 100644
> --- a/drivers/gpio/gpio-lpc32xx.c
> +++ b/drivers/gpio/gpio-lpc32xx.c
> @@ -510,7 +510,7 @@ static int lpc32xx_of_xlate(struct gpio_chip *gc,
>
>  static int lpc32xx_gpio_probe(struct platform_device *pdev)
>  {
> -	int i;
> +	int i, ret;
>  	void __iomem *reg_base;
>
>  	reg_base = devm_platform_ioremap_resource(pdev, 0);
> @@ -524,8 +524,12 @@ static int lpc32xx_gpio_probe(struct platform_device *pdev)
>  			lpc32xx_gpiochip[i].chip.of_gpio_n_cells = 3;
>  			lpc32xx_gpiochip[i].reg_base = reg_base;
>  		}
> -		devm_gpiochip_add_data(&pdev->dev, &lpc32xx_gpiochip[i].chip,
> -				  &lpc32xx_gpiochip[i]);
> +		ret = devm_gpiochip_add_data(&pdev->dev, &lpc32xx_gpiochip[i].chip,
> +					     &lpc32xx_gpiochip[i]);
> +		if (ret) {
> +			dev_err(&pdev->dev, "failed to register gpio chip %d: %d\n", i, ret);
> +			return ret;

Please use return dev_err_probe().

Bart

> +		}
>  	}
>
>  	return 0;
> --
> 2.34.1
>
>



More information about the linux-arm-kernel mailing list