diff options
Diffstat (limited to 'drivers/gpio/gpiolib.c')
| -rw-r--r-- | drivers/gpio/gpiolib.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 0495bf1d480a..bca3e7740ef6 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1379,7 +1379,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,  	status = gpiochip_add_irqchip(chip, lock_key, request_key);  	if (status) -		goto err_remove_chip; +		goto err_free_gpiochip_mask;  	status = of_gpiochip_add(chip);  	if (status) @@ -1387,7 +1387,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,  	status = gpiochip_init_valid_mask(chip);  	if (status) -		goto err_remove_chip; +		goto err_remove_of_chip;  	for (i = 0; i < chip->ngpio; i++) {  		struct gpio_desc *desc = &gdev->descs[i]; @@ -1415,14 +1415,18 @@ int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,  	if (gpiolib_initialized) {  		status = gpiochip_setup_dev(gdev);  		if (status) -			goto err_remove_chip; +			goto err_remove_acpi_chip;  	}  	return 0; -err_remove_chip: +err_remove_acpi_chip:  	acpi_gpiochip_remove(chip); +err_remove_of_chip:  	gpiochip_free_hogs(chip);  	of_gpiochip_remove(chip); +err_remove_chip: +	gpiochip_irqchip_remove(chip); +err_free_gpiochip_mask:  	gpiochip_free_valid_mask(chip);  err_remove_irqchip_mask:  	gpiochip_irqchip_free_valid_mask(chip);  |