gpio: pisosr: Use devm_gpiochip_add_data() to simplify remove path
PATCH v4 1/1 gpio: pisosr: Use devm_gpiochip_add_data() to simplify remove path
Use devm version of gpiochip add function to handle removal for us.
While here update copyright and module author.
---
Changes from v3:
- Do not cast void * lock explicitly
- Rebase on v6.5-rc1
Changes from v2:
- Rebase on v6.4-rc2
Changes from v1:
- Use devm to cleanup mutex
drivers/gpio/gpio-pisosr.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-)
drivers/gpio/gpio-pisosr.c +12 -16
@@ -1,7 +1,7 @@// SPDX-License-Identifier: GPL-2.0-only /* -* Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ -* Andrew F. Davis <[email protected]> +* Copyright (C) 2015-2023 Texas Instruments Incorporated - https://www.ti.com/ +* Andrew Davis <[email protected]> */ #include <linux/bitmap.h>
@@ -116,6 +116,11 @@ static const struct gpio_chip template_chip = { .can_sleep = true, }; +static void pisosr_mutex_destroy (void *lock) +{ +mutex_destroy (lock); +} +static int pisosr_gpio_probe (struct spi_device *spi) {struct device *dev = &spi->dev;
@@ -126,8 +131,6 @@ static int pisosr_gpio_probe(struct spi_device *spi)if (!gpio)return -ENOMEM ; -spi_set_drvdata (spi, gpio); - gpio->chip = template_chip; gpio->chip.parent = dev;of_property_read_u16 (dev->of_node,"ngpios" , &gpio->chip.ngpio);
@@ -145,8 +148,11 @@ static int pisosr_gpio_probe(struct spi_device *spi) "Unable to allocate load GPIO\n");mutex_init (&gpio->lock); + ret =devm_add_action_or_reset (dev, pisosr_mutex_destroy, &gpio->lock); +if (ret) +return ret; - ret =gpiochip_add_data (&gpio->chip, gpio); + ret =devm_gpiochip_add_data (dev, &gpio->chip, gpio);if (ret <0 ) {dev_err (dev,"Unable to register gpiochip\n" );return ret;
@@ -155,15 +161,6 @@ static int pisosr_gpio_probe(struct spi_device *spi)return 0 ; } -static void pisosr_gpio_remove (struct spi_device *spi) -{ -struct pisosr_gpio *gpio =spi_get_drvdata (spi); - -gpiochip_remove (&gpio->chip); - -mutex_destroy (&gpio->lock); -} -static const struct spi_device_id pisosr_gpio_id_table[] = { {"pisosr-gpio" , }, {/* sentinel */ }
@@ -182,11 +179,10 @@ static struct spi_driver pisosr_gpio_driver = { .of_match_table = pisosr_gpio_of_match_table, }, .probe = pisosr_gpio_probe, - .remove = pisosr_gpio_remove, .id_table = pisosr_gpio_id_table, };module_spi_driver (pisosr_gpio_driver); -MODULE_AUTHOR ("Andrew F. Davis <[email protected]>" ); +MODULE_AUTHOR ("Andrew Davis <[email protected]>" );MODULE_DESCRIPTION ("SPI Compatible PISO Shift Register GPIO Driver" );MODULE_LICENSE ("GPL v2" );
Signature · 1 line
2.39.2
Quoted 4 lines · Andrew Davis
Use devm version of gpiochip add function to handle removal for us.
While here update copyright and module author.
Quoted 96 lines
Signed-off-by Andrew Davis <[email protected]>---
Changes from v3:
- Do not cast void * lock explicitly
- Rebase on v6.5-rc1Changes from v2:
- Rebase on v6.4-rc2Changes from v1:
- Use devm to cleanup mutexdrivers/gpio/gpio-pisosr.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-)drivers/gpio/gpio-pisosr.c +12
-17@@ -1,7 +1,7 @@// SPDX-License-Identifier: GPL-2.0-only /* -* Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ -* Andrew F. Davis <[email protected]> +* Copyright (C) 2015-2023 Texas Instruments Incorporated - https://www.ti.com/ +* Andrew Davis <[email protected]> */ #include <linux/bitmap.h> @@ -116,6 +116,11 @@ static const struct gpio_chip template_chip = { .can_sleep = true, }; +static void pisosr_mutex_destroy (void *lock) +{ +mutex_destroy (lock); +} +static int pisosr_gpio_probe (struct spi_device *spi) {struct device *dev = &spi->dev;@@ -126,8 +131,6 @@ static int pisosr_gpio_probe(struct spi_device *spi)if (!gpio)return -ENOMEM ; -spi_set_drvdata (spi, gpio); - gpio->chip = template_chip; gpio->chip.parent = dev;of_property_read_u16 (dev->of_node,"ngpios" , &gpio->chip.ngpio);@@ -145,8 +148,11 @@ static int pisosr_gpio_probe(struct spi_device *spi) "Unable to allocate load GPIO\n");mutex_init (&gpio->lock); + ret =devm_add_action_or_reset (dev, pisosr_mutex_destroy, &gpio->lock); +if (ret) +return ret; - ret =gpiochip_add_data (&gpio->chip, gpio); + ret =devm_gpiochip_add_data (dev, &gpio->chip, gpio);if (ret <0 ) {dev_err (dev,"Unable to register gpiochip\n" );return ret;@@ -155,15 +161,6 @@ static int pisosr_gpio_probe(struct spi_device *spi)return 0 ; } -static void pisosr_gpio_remove (struct spi_device *spi) -{ -struct pisosr_gpio *gpio =spi_get_drvdata (spi); - -gpiochip_remove (&gpio->chip); - -mutex_destroy (&gpio->lock); -} -static const struct spi_device_id pisosr_gpio_id_table[] = { {"pisosr-gpio" , }, {/* sentinel */ }@@ -182,11 +179,10 @@ static struct spi_driver pisosr_gpio_driver = { .of_match_table = pisosr_gpio_of_match_table, }, .probe = pisosr_gpio_probe, - .remove = pisosr_gpio_remove, .id_table = pisosr_gpio_id_table, };module_spi_driver (pisosr_gpio_driver); -MODULE_AUTHOR ("Andrew F. Davis <[email protected]>" ); +MODULE_AUTHOR ("Andrew Davis <[email protected]>" );MODULE_DESCRIPTION ("SPI Compatible PISO Shift Register GPIO Driver" );MODULE_LICENSE ("GPL v2" ); --2.39.2
Signature · 2 lines
With Best Regards, Andy Shevchenko
Bartosz Golaszewski
AppliedQuoted 8 lines · Andrew Davis
Use devm version of gpiochip add function to handle removal for us.
While here update copyright and module author.
Signed-off-by Andrew Davis <[email protected]>---
Applied, thanks!
Bart