mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
gpio: htc-egpio: use managed gpiochip registration
[ Upstream commit17326db5f0] egpio_probe() registers each nested gpio_chip with gpiochip_add_data() but ignores the return value. If one registration fails, probe still returns success even though one of the chips was not published to gpiolib. Use devm_gpiochip_add_data() and fail probe if any chip registration fails. This lets devres unwind already registered chips and prevents the driver from publishing a partially initialized device. Fixes:a1635b8fe5("[ARM] 4947/1: htc-egpio, a driver for GPIO/IRQ expanders with fixed input/output pins") Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn> Link: https://patch.msgid.link/20260624131828.94139-1-pengpeng@iscas.ac.cn Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f0320c623f
commit
a05c848a94
@@ -268,6 +268,7 @@ static int __init egpio_probe(struct platform_device *pdev)
|
||||
struct gpio_chip *chip;
|
||||
unsigned int irq, irq_end;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
/* Initialize ei data structure. */
|
||||
ei = devm_kzalloc(&pdev->dev, sizeof(*ei), GFP_KERNEL);
|
||||
@@ -331,7 +332,10 @@ static int __init egpio_probe(struct platform_device *pdev)
|
||||
chip->base = pdata->chip[i].gpio_base;
|
||||
chip->ngpio = pdata->chip[i].num_gpios;
|
||||
|
||||
gpiochip_add_data(chip, &ei->chip[i]);
|
||||
ret = devm_gpiochip_add_data(&pdev->dev, chip, &ei->chip[i]);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret,
|
||||
"failed to register gpiochip %d\n", i);
|
||||
}
|
||||
|
||||
/* Set initial pin values */
|
||||
|
||||
Reference in New Issue
Block a user