[PATCH 00/61] gpio: Add and use devm_gpiochip_add_data()
STALE3807d
78 messages,
8 authors,
2016-02-28
· open the first message on its own page
Add resource management APIs for gpiochip_add_data() and
gpiochip_remove() and use these APIs from different HW drivers.
This is based on discussion on patch to use the new APIs.
gpio: Add devm_ apis for gpio_chip_add and remove
Laxman Dewangan (61):
gpio: Add devm_ apis for gpiochip_add_data and gpiochip_remove
gpio: Add resource management devm_gpio_chip_{add_data,remove}
gpio: Add missing devm_gpio_ wrapper in devres.txt
gpio: 74xx-mmio: Use devm_gpiochip_add_data() for gpio registration
gpio: adnp: Use devm_gpiochip_add_data() for gpio registration
gpio: adp5520: Use devm_gpiochip_add_data() for gpio registration
gpio: adp5588: Use devm_gpiochip_add_data() for gpio registration
gpio: amdpt: Use devm_gpiochip_add_data() for gpio registration
gpio: arizona: Use devm_gpiochip_add_data() for gpio registration
gpio: ath79: Use devm_gpiochip_add_data() for gpio registration
gpio: bcm-kona: Use devm_gpiochip_add_data() for gpio registration
gpio: clps711x: Use devm_gpiochip_add_data() for gpio registration
gpio: crystalcove: Use devm_gpiochip_add_data() for gpio registration
gpio: cs5535: Use devm_gpiochip_add_data() for gpio registration
gpio: da9052: Use devm_gpiochip_add_data() for gpio registration
gpio: da9055: Use devm_gpiochip_add_data() for gpio registration
gpio: dln2: Use devm_gpiochip_add_data() for gpio registration
gpio: ep93xx: Use devm_gpiochip_add_data() for gpio registration
gpio: f7188x: Use devm_gpiochip_add_data() for gpio registration
gpio: ge: Use devm_gpiochip_add_data() for gpio registration
gpio: generic: Use devm_gpiochip_add_data() for gpio registration
gpio: iop: Use devm_gpiochip_add_data() for gpio registration
gpio: janz-ttl: Use devm_gpiochip_add_data() for gpio registration
gpio: kempld: Use devm_gpiochip_add_data() for gpio registration
gpio: lp3943: Use devm_gpiochip_add_data() for gpio registration
gpio: lpc32xx: Use devm_gpiochip_add_data() for gpio registration
gpio: lynxpoint: Use devm_gpiochip_add_data() for gpio registration
gpio: mc9s08dz60: Use devm_gpiochip_add_data() for gpio registration
gpio: moxart: Use devm_gpiochip_add_data() for gpio registration
gpio: mvebu: Use devm_gpiochip_add_data() for gpio registration
gpio: mxc: Use devm_gpiochip_add_data() for gpio registration
gpio: octeon: Use devm_gpiochip_add_data() for gpio registration
gpio: pca953x: Use devm_gpiochip_add_data() for gpio registration
gpio: pcf857x: Use devm_gpiochip_add_data() for gpio registration
gpio: palmas: Use devm_gpiochip_add_data() for gpio registration
gpio: rc5t583: Use devm_gpiochip_add_data() for gpio registration
gpio: rdc321x: Use devm_gpiochip_add_data() for gpio registration
gpio: sch: Use devm_gpiochip_add_data() for gpio registration
gpio: spear-spics: Use devm_gpiochip_add_data() for gpio registration
gpio: sta2x11: Use devm_gpiochip_add_data() for gpio registration
gpio: stp-xway: Use devm_gpiochip_add_data() for gpio registration
gpio: sx150x: Use devm_gpiochip_add_data() for gpio registration
gpio: syscon: Use devm_gpiochip_add_data() for gpio registration
gpio: tb10x: Use devm_gpiochip_add_data() for gpio registration
gpio: tc3589x: Use devm_gpiochip_add_data() for gpio registration
gpio: tegra: Use devm_gpiochip_add_data() for gpio registration
gpio: timberdale Use devm_gpiochip_add_data() for gpio registration
gpio: tps6586x: Use devm_gpiochip_add_data() for gpio registration
gpio: tps65910: Use devm_gpiochip_add_data() for gpio registration
gpio: tps65912: Use devm_gpiochip_add_data() for gpio registration
gpio: ts4800: Use devm_gpiochip_add_data() for gpio registration
gpio: ts5500: Use devm_gpiochip_add_data() for gpio registration
gpio: twl6040: Use devm_gpiochip_add_data() for gpio registration
gpio: ucb1400: Use devm_gpiochip_add_data() for gpio registration
gpio: viperboard: Use devm_gpiochip_add_data() for gpio registration
gpio: vx855: Use devm_gpiochip_add_data() for gpio registration
gpio: wm8350: Use devm_gpiochip_add_data() for gpio registration
gpio: wm8350: Use devm_gpiochip_add_data() for gpio registration
gpio: wm8994: Use devm_gpiochip_add_data() for gpio registration
gpio: xgene-sb: Use devm_gpiochip_add_data() for gpio registration
gpio: xgene: Use devm_gpiochip_add_data() for gpio registration
Documentation/driver-model/devres.txt | 5 +++
drivers/gpio/gpio-74xx-mmio.c | 11 +-----
drivers/gpio/gpio-adnp.c | 11 +-----
drivers/gpio/gpio-adp5520.c | 13 +-----
drivers/gpio/gpio-adp5588.c | 4 +-
drivers/gpio/gpio-amdpt.c | 12 +-----
drivers/gpio/gpio-arizona.c | 12 +-----
drivers/gpio/gpio-ath79.c | 2 +-
drivers/gpio/gpio-bcm-kona.c | 2 +-
drivers/gpio/gpio-clps711x.c | 11 +-----
drivers/gpio/gpio-crystalcove.c | 9 +----
drivers/gpio/gpio-cs5535.c | 20 +++-------
drivers/gpio/gpio-da9052.c | 11 +-----
drivers/gpio/gpio-da9055.c | 16 +-------
drivers/gpio/gpio-dln2.c | 16 ++------
drivers/gpio/gpio-ep93xx.c | 2 +-
drivers/gpio/gpio-f7188x.c | 26 +-----------
drivers/gpio/gpio-ge.c | 2 +-
drivers/gpio/gpio-generic.c | 11 +-----
drivers/gpio/gpio-iop.c | 2 +-
drivers/gpio/gpio-janz-ttl.c | 12 +-----
drivers/gpio/gpio-kempld.c | 11 +-----
drivers/gpio/gpio-lp3943.c | 12 +-----
drivers/gpio/gpio-lpc32xx.c | 2 +-
drivers/gpio/gpio-lynxpoint.c | 4 +-
drivers/gpio/gpio-mc9s08dz60.c | 13 +-----
drivers/gpio/gpio-moxart.c | 2 +-
drivers/gpio/gpio-mvebu.c | 11 ++----
drivers/gpio/gpio-mxc.c | 6 +--
drivers/gpio/gpio-octeon.c | 10 +----
drivers/gpio/gpio-palmas.c | 12 +-----
drivers/gpio/gpio-pca953x.c | 4 +-
drivers/gpio/gpio-pcf857x.c | 10 ++---
drivers/gpio/gpio-rc5t583.c | 12 +-----
drivers/gpio/gpio-rdc321x.c | 13 +-----
drivers/gpio/gpio-sch.c | 11 +-----
drivers/gpio/gpio-spear-spics.c | 2 +-
drivers/gpio/gpio-sta2x11.c | 2 +-
drivers/gpio/gpio-stp-xway.c | 2 +-
drivers/gpio/gpio-sx150x.c | 18 +--------
drivers/gpio/gpio-syscon.c | 11 +-----
drivers/gpio/gpio-tb10x.c | 22 +++--------
drivers/gpio/gpio-tc3589x.c | 13 +-----
drivers/gpio/gpio-tegra.c | 2 +-
drivers/gpio/gpio-timberdale.c | 4 +-
drivers/gpio/gpio-tps6586x.c | 12 +-----
drivers/gpio/gpio-tps65910.c | 12 +-----
drivers/gpio/gpio-tps65912.c | 12 +-----
drivers/gpio/gpio-ts4800.c | 12 +-----
drivers/gpio/gpio-ts5500.c | 9 ++---
drivers/gpio/gpio-twl6040.c | 9 +----
drivers/gpio/gpio-ucb1400.c | 3 +-
drivers/gpio/gpio-viperboard.c | 24 ++----------
drivers/gpio/gpio-vx855.c | 12 +-----
drivers/gpio/gpio-wm831x.c | 12 +-----
drivers/gpio/gpio-wm8350.c | 12 +-----
drivers/gpio/gpio-wm8994.c | 17 ++------
drivers/gpio/gpio-xgene-sb.c | 3 +-
drivers/gpio/gpio-xgene.c | 11 +-----
drivers/gpio/gpiolib.c | 74 +++++++++++++++++++++++++++++++++++
include/linux/gpio/driver.h | 4 ++
61 files changed, 180 insertions(+), 477 deletions(-)
--
2.1.4
Add device managed APIs devm_gpiochip_add_data() and
devm_gpiochip_remove() for the APIs gpiochip_add_data()
and gpiochip_remove().
This helps in reducing code in error path and sometimes
removal of .remove callback for driver unbind.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpiolib.c | 74 +++++++++++++++++++++++++++++++++++++++++++++
include/linux/gpio/driver.h | 4 +++
2 files changed, 78 insertions(+)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 5c1ba87..d9a40bc 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c @@ -462,6 +462,80 @@ void gpiochip_remove(struct gpio_chip *chip)
}
EXPORT_SYMBOL_GPL ( gpiochip_remove );
+ static void devm_gpio_chip_release ( struct device * dev , void * res )
+ {
+ struct gpio_chip * chip = * ( struct gpio_chip ** ) res ;
+
+ gpiochip_remove ( chip );
+ }
+
+ static int devm_gpio_chip_match ( struct device * dev , void * res , void * data )
+
+ {
+ struct gpio_chip ** r = res ;
+
+ if ( ! r || !* r ) {
+ WARN_ON ( ! r || !* r );
+ return 0 ;
+ }
+
+ return * r == data ;
+ }
+
+ /**
+ * devm_gpiochip_add_data () - Resource manager piochip_add_data ()
+ * @ dev : the device pointer on which irq_chip belongs to .
+ * @ chip : the chip to register , with chip -> base initialized
+ * Context : potentially before irqs will work
+ *
+ * Returns a negative errno if the chip can ' t be registered , such as
+ * because the chip -> base is invalid or already associated with a
+ * different chip . Otherwise it returns zero as a success code .
+ *
+ * The gpio chip automatically be released when the device is unbound .
+ */
+ int devm_gpiochip_add_data ( struct device * dev , struct gpio_chip * chip ,
+ void * data )
+ {
+ struct gpio_chip ** ptr ;
+ int ret ;
+
+ ptr = devres_alloc ( devm_gpio_chip_release , sizeof ( * ptr ),
+ GFP_KERNEL );
+ if ( ! ptr )
+ return - ENOMEM ;
+
+ ret = gpiochip_add_data ( chip , data );
+ if ( ret < 0 ) {
+ devres_free ( ptr );
+ return ret ;
+ }
+
+ * ptr = chip ;
+ devres_add ( dev , ptr );
+
+ return 0 ;
+ }
+ EXPORT_SYMBOL_GPL ( devm_gpiochip_add_data );
+
+ /**
+ * devm_gpiochip_remove () - Resource manager of gpiochip_remove ()
+ * @ dev : device for which which resource was allocated
+ * @ chip : the chip to remove
+ *
+ * A gpio_chip with any GPIOs still requested may not be removed .
+ */
+ void devm_gpiochip_remove ( struct device * dev , struct gpio_chip * chip )
+ {
+ int ret ;
+
+ ret = devres_release ( dev , devm_gpio_chip_release ,
+ devm_gpio_chip_match , chip );
+ if ( ! ret )
+ WARN_ON ( ret );
+ }
+ EXPORT_SYMBOL_GPL ( devm_gpiochip_remove );
+
/**
* gpiochip_find () - iterator for locating a specific gpio_chip
* @ data : data to pass to match function diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 82fda48..d5d19cc 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h @@ -205,6 +205,10 @@ static inline int gpiochip_add(struct gpio_chip *chip)
return gpiochip_add_data ( chip , NULL );
}
extern void gpiochip_remove ( struct gpio_chip * chip );
+ extern int devm_gpiochip_add_data ( struct device * dev , struct gpio_chip * chip ,
+ void * data );
+ extern void devm_gpiochip_remove ( struct device * dev , struct gpio_chip * chip );
+
extern struct gpio_chip * gpiochip_find ( void * data ,
int ( * match )( struct gpio_chip * chip , void * data ));
--
2.1.4
+/**
+ * devm_gpiochip_add_data() - Resource manager piochip_add_data()
^
missing g.
+ * @dev: the device pointer on which irq_chip belongs to.
+ * @chip: the chip to register, with chip->base initialized
+ * Context: potentially before irqs will work
+ *
+ * Returns a negative errno if the chip can't be registered, such as
+ * because the chip->base is invalid or already associated with a
+ * different chip. Otherwise it returns zero as a success code.
+ *
+ * The gpio chip automatically be released when the device is unbound. ^
will
Andrew
Add devm wrappers for the gpiochip_add_data() and gpiochip_remove().
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
Documentation/driver-model/devres.txt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt
index 831a536..8d8f944 100644
--- a/Documentation/driver-model/devres.txt
+++ b/Documentation/driver-model/devres.txt @@ -252,6 +252,8 @@ GPIO
devm_gpiod_get_index_optional()
devm_gpiod_get_optional()
devm_gpiod_put()
+ devm_gpiochip_add_data()
+ devm_gpiochip_remove()
IIO
devm_iio_device_alloc() --
2.1.4
Add following missing devm wrappers in file devrs.txt under
list of managed interfaces.
devm_gpio_request()
devm_gpio_request_one()
devm_gpio_free()
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
Documentation/driver-model/devres.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt
index 8d8f944..73b98df 100644
--- a/Documentation/driver-model/devres.txt
+++ b/Documentation/driver-model/devres.txt @@ -254,6 +254,9 @@ GPIO
devm_gpiod_put()
devm_gpiochip_add_data()
devm_gpiochip_remove()
+ devm_gpio_request()
+ devm_gpio_request_one()
+ devm_gpio_free()
IIO
devm_iio_device_alloc() --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
call for gpiochip_remove() from error path.
Also remove the need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Alexander Shiyan <redacted>
---
drivers/gpio/gpio-74xx-mmio.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-74xx-mmio.c b/drivers/gpio/gpio-74xx-mmio.c
index 372b0e0..0475e8e 100644
--- a/drivers/gpio/gpio-74xx-mmio.c
+++ b/drivers/gpio/gpio-74xx-mmio.c @@ -140,15 +140,7 @@ static int mmio_74xx_gpio_probe(struct platform_device *pdev)
platform_set_drvdata ( pdev , priv );
- return gpiochip_add_data ( & priv -> gc , priv );
- }
-
- static int mmio_74xx_gpio_remove ( struct platform_device * pdev )
- {
- struct mmio_74xx_gpio_priv * priv = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & priv -> gc );
- return 0 ;
+ return devm_gpiochip_add_data ( & pdev -> dev , & priv -> gc , priv );
}
static struct platform_driver mmio_74xx_gpio_driver = { @@ -157,7 +149,6 @@ static struct platform_driver mmio_74xx_gpio_driver = {
. of_match_table = mmio_74xx_gpio_ids ,
},
. probe = mmio_74xx_gpio_probe ,
- . remove = mmio_74xx_gpio_remove ,
};
module_platform_driver ( mmio_74xx_gpio_driver );
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
call for gpiochip_remove() from error path.
Also remove the need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Alexandre Courbot <redacted>
---
drivers/gpio/gpio-adnp.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-adnp.c b/drivers/gpio/gpio-adnp.c
index fb5b47b..8ff7b0d 100644
--- a/drivers/gpio/gpio-adnp.c
+++ b/drivers/gpio/gpio-adnp.c @@ -265,7 +265,7 @@ static int adnp_gpio_setup(struct adnp *adnp, unsigned int num_gpios)
chip -> of_node = chip -> parent -> of_node ;
chip -> owner = THIS_MODULE ;
- err = gpiochip_add_data ( chip , adnp );
+ err = devm_gpiochip_add_data ( & adnp -> client -> dev , chip , adnp );
if ( err )
return err ;
@@ -520,14 +520,6 @@ static int adnp_i2c_probe(struct i2c_client *client,
return 0 ;
}
- static int adnp_i2c_remove ( struct i2c_client * client )
- {
- struct adnp * adnp = i2c_get_clientdata ( client );
-
- gpiochip_remove ( & adnp -> gpio );
- return 0 ;
- }
-
static const struct i2c_device_id adnp_i2c_id [] = {
{ "gpio-adnp" },
{ }, @@ -546,7 +538,6 @@ static struct i2c_driver adnp_i2c_driver = {
. of_match_table = adnp_of_match ,
},
. probe = adnp_i2c_probe ,
- . remove = adnp_i2c_remove ,
. id_table = adnp_i2c_id ,
};
module_i2c_driver ( adnp_i2c_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
call for gpiochip_remove() from error path.
Also remove the need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Michael Hennerich <michael.hennerich@analog.com>
---
drivers/gpio/gpio-adp5520.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/drivers/gpio/gpio-adp5520.c b/drivers/gpio/gpio-adp5520.c
index 4fa7ff1..abf1996 100644
--- a/drivers/gpio/gpio-adp5520.c
+++ b/drivers/gpio/gpio-adp5520.c @@ -153,7 +153,7 @@ static int adp5520_gpio_probe(struct platform_device *pdev)
goto err ;
}
- ret = gpiochip_add_data ( & dev -> gpio_chip , dev );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & dev -> gpio_chip , dev );
if ( ret )
goto err ;
@@ -164,22 +164,11 @@ err:
return ret ;
}
- static int adp5520_gpio_remove ( struct platform_device * pdev )
- {
- struct adp5520_gpio * dev ;
-
- dev = platform_get_drvdata ( pdev );
- gpiochip_remove ( & dev -> gpio_chip );
-
- return 0 ;
- }
-
static struct platform_driver adp5520_gpio_driver = {
. driver = {
. name = "adp5520-gpio" ,
},
. probe = adp5520_gpio_probe ,
- . remove = adp5520_gpio_remove ,
};
module_platform_driver ( adp5520_gpio_driver ); --
2.1.4
On 02/22/2016 03:07 PM, Laxman Dewangan wrote: Use devm_gpiochip_add_data() for GPIO registration and remove the
call for gpiochip_remove() from error path.
Also remove the need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Acked-by: Michael Hennerich <michael.hennerich@analog.com>
quoted hunk Cc: Michael Hennerich <michael.hennerich@analog.com>
---
drivers/gpio/gpio-adp5520.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/drivers/gpio/gpio-adp5520.c b/drivers/gpio/gpio-adp5520.c
index 4fa7ff1..abf1996 100644
--- a/drivers/gpio/gpio-adp5520.c
+++ b/drivers/gpio/gpio-adp5520.c @@ -153,7 +153,7 @@ static int adp5520_gpio_probe(struct platform_device *pdev)
goto err ;
}
- ret = gpiochip_add_data ( & dev -> gpio_chip , dev );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & dev -> gpio_chip , dev );
if ( ret )
goto err ;
@@ -164,22 +164,11 @@ err:
return ret ;
}
- static int adp5520_gpio_remove ( struct platform_device * pdev )
- {
- struct adp5520_gpio * dev ;
-
- dev = platform_get_drvdata ( pdev );
- gpiochip_remove ( & dev -> gpio_chip );
-
- return 0 ;
- }
-
static struct platform_driver adp5520_gpio_driver = {
. driver = {
. name = "adp5520-gpio" ,
},
. probe = adp5520_gpio_probe ,
- . remove = adp5520_gpio_remove ,
};
module_platform_driver ( adp5520_gpio_driver );
--
Greetings,
Michael
--
Analog Devices GmbH Wilhelm-Wagenfeld-Str. 6 80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin,
Margaret Seif
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-amdpt.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/drivers/gpio/gpio-amdpt.c b/drivers/gpio/gpio-amdpt.c
index c248404..857eec5 100644
--- a/drivers/gpio/gpio-amdpt.c
+++ b/drivers/gpio/gpio-amdpt.c @@ -212,7 +212,7 @@ static int pt_gpio_probe(struct platform_device *pdev)
#if defined(CONFIG_OF_GPIO)
pt_gpio -> gc . of_node = pdev -> dev . of_node ;
#endif
- ret = gpiochip_add_data ( & pt_gpio -> gc , pt_gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & pt_gpio -> gc , pt_gpio );
if ( ret ) {
dev_err ( & pdev -> dev , "Failed to register GPIO lib \n " );
return ret ; @@ -228,15 +228,6 @@ static int pt_gpio_probe(struct platform_device *pdev)
return ret ;
}
- static int pt_gpio_remove ( struct platform_device * pdev )
- {
- struct pt_gpio_chip * pt_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & pt_gpio -> gc );
-
- return 0 ;
- }
-
static const struct acpi_device_id pt_gpio_acpi_match [] = {
{ "AMDF030" , 0 },
{ }, @@ -249,7 +240,6 @@ static struct platform_driver pt_gpio_driver = {
. acpi_match_table = ACPI_PTR ( pt_gpio_acpi_match ),
},
. probe = pt_gpio_probe ,
- . remove = pt_gpio_remove ,
};
module_platform_driver ( pt_gpio_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: patches at opensource.wolfsonmicro.com
---
drivers/gpio/gpio-arizona.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-arizona.c b/drivers/gpio/gpio-arizona.c
index e910c1f..9913704 100644
--- a/drivers/gpio/gpio-arizona.c
+++ b/drivers/gpio/gpio-arizona.c @@ -132,7 +132,8 @@ static int arizona_gpio_probe(struct platform_device *pdev)
else
arizona_gpio -> gpio_chip . base = -1 ;
- ret = gpiochip_add_data ( & arizona_gpio -> gpio_chip , arizona_gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & arizona_gpio -> gpio_chip ,
+ arizona_gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Could not register gpiochip, %d \n " ,
ret ); @@ -147,18 +148,9 @@ err:
return ret ;
}
- static int arizona_gpio_remove ( struct platform_device * pdev )
- {
- struct arizona_gpio * arizona_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & arizona_gpio -> gpio_chip );
- return 0 ;
- }
-
static struct platform_driver arizona_gpio_driver = {
. driver . name = "arizona-gpio" ,
. probe = arizona_gpio_probe ,
- . remove = arizona_gpio_remove ,
};
module_platform_driver ( arizona_gpio_driver ); --
2.1.4
On Mon, Feb 22, 2016 at 07:37:58PM +0530, Laxman Dewangan wrote: Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: patches at opensource.wolfsonmicro.com
---
Acked-by: Charles Keepax <redacted>
Thanks,
Charles
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Alban Bedel <albeu@free.fr>
---
drivers/gpio/gpio-ath79.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
index d13dd13..a6aad59 100644
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c @@ -182,7 +182,7 @@ static int ath79_gpio_probe(struct platform_device *pdev)
ctrl -> chip . direction_output = ar934x_gpio_direction_output ;
}
- err = gpiochip_add_data ( & ctrl -> chip , ctrl );
+ err = devm_gpiochip_add_data ( & pdev -> dev , & ctrl -> chip , ctrl );
if ( err ) {
dev_err ( & pdev -> dev ,
"cannot add AR71xx GPIO chip, error=%d" , err ); --
2.1.4
On Mon, 22 Feb 2016 19:37:59 +0530
Laxman Dewangan [off-list ref] wrote:
quoted hunk Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Alban Bedel <albeu@free.fr>
---
drivers/gpio/gpio-ath79.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
index d13dd13..a6aad59 100644
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c @@ -182,7 +182,7 @@ static int ath79_gpio_probe(struct platform_device *pdev)
ctrl -> chip . direction_output = ar934x_gpio_direction_output ;
}
- err = gpiochip_add_data ( & ctrl -> chip , ctrl );
+ err = devm_gpiochip_add_data ( & pdev -> dev , & ctrl -> chip , ctrl );
if ( err ) {
dev_err ( & pdev -> dev ,
"cannot add AR71xx GPIO chip, error=%d" , err );
With the patches already applied to the devel branch a few more changes
will be needed to remove the calls to gpiochip_remove() in the probe
error path and the remove callback.
Alban
On Tuesday 23 February 2016 01:43 AM, Alban wrote: On Mon, 22 Feb 2016 19:37:59 +0530
Laxman Dewangan [off-list ref] wrote:
quoted Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Alban Bedel <albeu@free.fr>
---
drivers/gpio/gpio-ath79.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
index d13dd13..a6aad59 100644
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c @@ -182,7 +182,7 @@ static int ath79_gpio_probe(struct platform_device *pdev)
ctrl -> chip . direction_output = ar934x_gpio_direction_output ;
}
- err = gpiochip_add_data ( & ctrl -> chip , ctrl );
+ err = devm_gpiochip_add_data ( & pdev -> dev , & ctrl -> chip , ctrl );
if ( err ) {
dev_err ( & pdev -> dev ,
"cannot add AR71xx GPIO chip, error=%d" , err ); With the patches already applied to the devel branch a few more changes
will be needed to remove the calls to gpiochip_remove() in the probe
error path and the remove callback. OK, I will drop this patch when provide the git pointer to Linus.
We can work on this later.
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Ray Jui <rjui@broadcom.com>
---
drivers/gpio/gpio-bcm-kona.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index b6c5abe..2fd38d5 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c @@ -630,7 +630,7 @@ static int bcm_kona_gpio_probe(struct platform_device *pdev)
bcm_kona_gpio_reset ( kona_gpio );
- ret = gpiochip_add_data ( chip , kona_gpio );
+ ret = devm_gpiochip_add_data ( dev , chip , kona_gpio );
if ( ret < 0 ) {
dev_err ( dev , "Couldn't add GPIO chip -- %d \n " , ret );
goto err_irq_domain ; --
2.1.4
On 2/22/2016 6:08 AM, Laxman Dewangan wrote: quoted hunk Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Ray Jui <rjui@broadcom.com>
---
drivers/gpio/gpio-bcm-kona.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index b6c5abe..2fd38d5 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c @@ -630,7 +630,7 @@ static int bcm_kona_gpio_probe(struct platform_device *pdev)
bcm_kona_gpio_reset ( kona_gpio );
- ret = gpiochip_add_data ( chip , kona_gpio );
+ ret = devm_gpiochip_add_data ( dev , chip , kona_gpio );
if ( ret < 0 ) {
dev_err ( dev , "Couldn't add GPIO chip -- %d \n " , ret );
goto err_irq_domain ;
Acked-by: Ray Jui <redacted>
Thanks!
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-clps711x.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-clps711x.c b/drivers/gpio/gpio-clps711x.c
index c84f955..5a69025 100644
--- a/drivers/gpio/gpio-clps711x.c
+++ b/drivers/gpio/gpio-clps711x.c @@ -67,15 +67,7 @@ static int clps711x_gpio_probe(struct platform_device *pdev)
gc -> owner = THIS_MODULE ;
platform_set_drvdata ( pdev , gc );
- return gpiochip_add_data ( gc , NULL );
- }
-
- static int clps711x_gpio_remove ( struct platform_device * pdev )
- {
- struct gpio_chip * gc = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( gc );
- return 0 ;
+ return devm_gpiochip_add_data ( & pdev -> dev , gc , NULL );
}
static const struct of_device_id __maybe_unused clps711x_gpio_ids [] = { @@ -90,7 +82,6 @@ static struct platform_driver clps711x_gpio_driver = {
. of_match_table = of_match_ptr ( clps711x_gpio_ids ),
},
. probe = clps711x_gpio_probe ,
- . remove = clps711x_gpio_remove ,
};
module_platform_driver ( clps711x_gpio_driver );
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
call of gpiochip_remove() from error path.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-crystalcove.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
index 7865ef0..7c446d1 100644
--- a/drivers/gpio/gpio-crystalcove.c
+++ b/drivers/gpio/gpio-crystalcove.c @@ -345,7 +345,7 @@ static int crystalcove_gpio_probe(struct platform_device *pdev)
cg -> chip . dbg_show = crystalcove_gpio_dbg_show ;
cg -> regmap = pmic -> regmap ;
- retval = gpiochip_add_data ( & cg -> chip , cg );
+ retval = devm_gpiochip_add_data ( & pdev -> dev , & cg -> chip , cg );
if ( retval ) {
dev_warn ( & pdev -> dev , "add gpio chip error: %d \n " , retval );
return retval ; @@ -359,14 +359,10 @@ static int crystalcove_gpio_probe(struct platform_device *pdev)
if ( retval ) {
dev_warn ( & pdev -> dev , "request irq failed: %d \n " , retval );
- goto out_remove_gpio ;
+ return retval ;
}
return 0 ;
-
- out_remove_gpio :
- gpiochip_remove ( & cg -> chip );
- return retval ;
}
static int crystalcove_gpio_remove ( struct platform_device * pdev ) @@ -374,7 +370,6 @@ static int crystalcove_gpio_remove(struct platform_device *pdev)
struct crystalcove_gpio * cg = platform_get_drvdata ( pdev );
int irq = platform_get_irq ( pdev , 0 );
- gpiochip_remove ( & cg -> chip );
if ( irq >= 0 )
free_irq ( irq , cg );
return 0 ; --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-cs5535.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)
diff --git a/drivers/gpio/gpio-cs5535.c b/drivers/gpio/gpio-cs5535.c
index eccb712..90278b1 100644
--- a/drivers/gpio/gpio-cs5535.c
+++ b/drivers/gpio/gpio-cs5535.c @@ -320,13 +320,13 @@ static int cs5535_gpio_probe(struct platform_device *pdev)
res = platform_get_resource ( pdev , IORESOURCE_IO , 0 );
if ( ! res ) {
dev_err ( & pdev -> dev , "can't fetch device resource info \n " );
- goto done ;
+ return err ;
}
if ( ! devm_request_region ( & pdev -> dev , res -> start , resource_size ( res ),
pdev -> name )) {
dev_err ( & pdev -> dev , "can't request region \n " );
- goto done ;
+ return err ;
}
/* set up the driver-specific struct */ @@ -348,19 +348,10 @@ static int cs5535_gpio_probe(struct platform_device *pdev)
mask_orig , mask );
/* finally, register with the generic GPIO API */
- err = gpiochip_add_data ( & cs5535_gpio_chip . chip , & cs5535_gpio_chip );
+ err = devm_gpiochip_add_data ( & pdev -> dev , & cs5535_gpio_chip . chip ,
+ & cs5535_gpio_chip );
if ( err )
- goto done ;
-
- return 0 ;
-
- done :
- return err ;
- }
-
- static int cs5535_gpio_remove ( struct platform_device * pdev )
- {
- gpiochip_remove ( & cs5535_gpio_chip . chip );
+ return err ;
return 0 ;
} @@ -370,7 +361,6 @@ static struct platform_driver cs5535_gpio_driver = {
. name = DRV_NAME ,
},
. probe = cs5535_gpio_probe ,
- . remove = cs5535_gpio_remove ,
};
module_platform_driver ( cs5535_gpio_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-da9052.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-da9052.c b/drivers/gpio/gpio-da9052.c
index f9b3247..e29553b 100644
--- a/drivers/gpio/gpio-da9052.c
+++ b/drivers/gpio/gpio-da9052.c @@ -214,7 +214,7 @@ static int da9052_gpio_probe(struct platform_device *pdev)
if ( pdata && pdata -> gpio_base )
gpio -> gp . base = pdata -> gpio_base ;
- ret = gpiochip_add_data ( & gpio -> gp , gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & gpio -> gp , gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Could not register gpiochip, %d \n " , ret );
return ret ; @@ -225,17 +225,8 @@ static int da9052_gpio_probe(struct platform_device *pdev)
return 0 ;
}
- static int da9052_gpio_remove ( struct platform_device * pdev )
- {
- struct da9052_gpio * gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & gpio -> gp );
- return 0 ;
- }
-
static struct platform_driver da9052_gpio_driver = {
. probe = da9052_gpio_probe ,
- . remove = da9052_gpio_remove ,
. driver = {
. name = "da9052-gpio" ,
}, --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Support Opensource <support.opensource@diasemi.com>
---
drivers/gpio/gpio-da9055.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/drivers/gpio/gpio-da9055.c b/drivers/gpio/gpio-da9055.c
index 18210fb..2c2c18d 100644
--- a/drivers/gpio/gpio-da9055.c
+++ b/drivers/gpio/gpio-da9055.c @@ -151,31 +151,19 @@ static int da9055_gpio_probe(struct platform_device *pdev)
if ( pdata && pdata -> gpio_base )
gpio -> gp . base = pdata -> gpio_base ;
- ret = gpiochip_add_data ( & gpio -> gp , gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & gpio -> gp , gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Could not register gpiochip, %d \n " , ret );
- goto err_mem ;
+ return ret ;
}
platform_set_drvdata ( pdev , gpio );
return 0 ;
-
- err_mem :
- return ret ;
- }
-
- static int da9055_gpio_remove ( struct platform_device * pdev )
- {
- struct da9055_gpio * gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & gpio -> gp );
- return 0 ;
}
static struct platform_driver da9055_gpio_driver = {
. probe = da9055_gpio_probe ,
- . remove = da9055_gpio_remove ,
. driver = {
. name = "da9055-gpio" ,
}, --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-dln2.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/drivers/gpio/gpio-dln2.c b/drivers/gpio/gpio-dln2.c
index e11a7d1..f7a60a4 100644
--- a/drivers/gpio/gpio-dln2.c
+++ b/drivers/gpio/gpio-dln2.c @@ -479,40 +479,32 @@ static int dln2_gpio_probe(struct platform_device *pdev)
platform_set_drvdata ( pdev , dln2 );
- ret = gpiochip_add_data ( & dln2 -> gpio , dln2 );
+ ret = devm_gpiochip_add_data ( dev , & dln2 -> gpio , dln2 );
if ( ret < 0 ) {
dev_err ( dev , "failed to add gpio chip: %d \n " , ret );
- goto out ;
+ return ret ;
}
ret = gpiochip_irqchip_add ( & dln2 -> gpio , & dln2_gpio_irqchip , 0 ,
handle_simple_irq , IRQ_TYPE_NONE );
if ( ret < 0 ) {
dev_err ( dev , "failed to add irq chip: %d \n " , ret );
- goto out_gpiochip_remove ;
+ return ret ;
}
ret = dln2_register_event_cb ( pdev , DLN2_GPIO_CONDITION_MET_EV ,
dln2_gpio_event );
if ( ret ) {
dev_err ( dev , "failed to register event cb: %d \n " , ret );
- goto out_gpiochip_remove ;
+ return ret ;
}
return 0 ;
-
- out_gpiochip_remove :
- gpiochip_remove ( & dln2 -> gpio );
- out :
- return ret ;
}
static int dln2_gpio_remove ( struct platform_device * pdev )
{
- struct dln2_gpio * dln2 = platform_get_drvdata ( pdev );
-
dln2_unregister_event_cb ( pdev , DLN2_GPIO_CONDITION_MET_EV );
- gpiochip_remove ( & dln2 -> gpio );
return 0 ;
} --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-f7188x.c | 26 ++------------------------
1 file changed, 2 insertions(+), 24 deletions(-)
diff --git a/drivers/gpio/gpio-f7188x.c b/drivers/gpio/gpio-f7188x.c
index 0417798..daac2d4 100644
--- a/drivers/gpio/gpio-f7188x.c
+++ b/drivers/gpio/gpio-f7188x.c @@ -350,37 +350,16 @@ static int f7188x_gpio_probe(struct platform_device *pdev)
bank -> chip . parent = & pdev -> dev ;
bank -> data = data ;
- err = gpiochip_add_data ( & bank -> chip , bank );
+ err = devm_gpiochip_add_data ( & pdev -> dev , & bank -> chip , bank );
if ( err ) {
dev_err ( & pdev -> dev ,
"Failed to register gpiochip %d: %d \n " ,
i , err );
- goto err_gpiochip ;
+ return err ;
}
}
return 0 ;
-
- err_gpiochip :
- for ( i = i - 1 ; i >= 0 ; i -- ) {
- struct f7188x_gpio_bank * bank = & data -> bank [ i ];
- gpiochip_remove ( & bank -> chip );
- }
-
- return err ;
- }
-
- static int f7188x_gpio_remove ( struct platform_device * pdev )
- {
- int i ;
- struct f7188x_gpio_data * data = platform_get_drvdata ( pdev );
-
- for ( i = 0 ; i < data -> nr_bank ; i ++ ) {
- struct f7188x_gpio_bank * bank = & data -> bank [ i ];
- gpiochip_remove ( & bank -> chip );
- }
-
- return 0 ;
}
static int __init f7188x_find ( int addr , struct f7188x_sio * sio ) @@ -476,7 +455,6 @@ static struct platform_driver f7188x_gpio_driver = {
. name = DRVNAME ,
},
. probe = f7188x_gpio_probe ,
- . remove = f7188x_gpio_remove ,
};
static int __init f7188x_gpio_init ( void ) --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-ep93xx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-ep93xx.c b/drivers/gpio/gpio-ep93xx.c
index ad27907..d054219 100644
--- a/drivers/gpio/gpio-ep93xx.c
+++ b/drivers/gpio/gpio-ep93xx.c @@ -339,7 +339,7 @@ static int ep93xx_gpio_add_bank(struct gpio_chip *gc, struct device *dev,
gc -> to_irq = ep93xx_gpio_to_irq ;
}
- return gpiochip_add_data ( gc , NULL );
+ return devm_gpiochip_add_data ( dev , gc , NULL );
}
static int ep93xx_gpio_probe ( struct platform_device * pdev ) --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-generic.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-generic.c b/drivers/gpio/gpio-generic.c
index 2a4f233..54cddfa 100644
--- a/drivers/gpio/gpio-generic.c
+++ b/drivers/gpio/gpio-generic.c @@ -628,15 +628,7 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
platform_set_drvdata ( pdev , gc );
- return gpiochip_add_data ( gc , NULL );
- }
-
- static int bgpio_pdev_remove ( struct platform_device * pdev )
- {
- struct gpio_chip * gc = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( gc );
- return 0 ;
+ return devm_gpiochip_add_data ( & pdev -> dev , gc , NULL );
}
static const struct platform_device_id bgpio_id_table [] = { @@ -657,7 +649,6 @@ static struct platform_driver bgpio_driver = {
},
. id_table = bgpio_id_table ,
. probe = bgpio_pdev_probe ,
- . remove = bgpio_pdev_remove ,
};
module_platform_driver ( bgpio_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-iop.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-iop.c b/drivers/gpio/gpio-iop.c
index fb65e58..860c535 100644
--- a/drivers/gpio/gpio-iop.c
+++ b/drivers/gpio/gpio-iop.c @@ -114,7 +114,7 @@ static int iop3xx_gpio_probe(struct platform_device *pdev)
if ( IS_ERR ( base ))
return PTR_ERR ( base );
- return gpiochip_add_data ( & iop3xx_chip , NULL );
+ return devm_gpiochip_add_data ( & pdev -> dev , & iop3xx_chip , NULL );
}
static struct platform_driver iop3xx_gpio_driver = { --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-kempld.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-kempld.c b/drivers/gpio/gpio-kempld.c
index 0111774..701f151 100644
--- a/drivers/gpio/gpio-kempld.c
+++ b/drivers/gpio/gpio-kempld.c @@ -178,7 +178,7 @@ static int kempld_gpio_probe(struct platform_device *pdev)
return - ENODEV ;
}
- ret = gpiochip_add_data ( chip , gpio );
+ ret = devm_gpiochip_add_data ( dev , chip , gpio );
if ( ret ) {
dev_err ( dev , "Could not register GPIO chip \n " );
return ret ; @@ -190,20 +190,11 @@ static int kempld_gpio_probe(struct platform_device *pdev)
return 0 ;
}
- static int kempld_gpio_remove ( struct platform_device * pdev )
- {
- struct kempld_gpio_data * gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & gpio -> chip );
- return 0 ;
- }
-
static struct platform_driver kempld_gpio_driver = {
. driver = {
. name = "kempld-gpio" ,
},
. probe = kempld_gpio_probe ,
- . remove = kempld_gpio_remove ,
};
module_platform_driver ( kempld_gpio_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-lp3943.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-lp3943.c b/drivers/gpio/gpio-lp3943.c
index 1c8e2ae..6dc6725 100644
--- a/drivers/gpio/gpio-lp3943.c
+++ b/drivers/gpio/gpio-lp3943.c @@ -204,15 +204,8 @@ static int lp3943_gpio_probe(struct platform_device *pdev)
platform_set_drvdata ( pdev , lp3943_gpio );
- return gpiochip_add_data ( & lp3943_gpio -> chip , lp3943_gpio );
- }
-
- static int lp3943_gpio_remove ( struct platform_device * pdev )
- {
- struct lp3943_gpio * lp3943_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & lp3943_gpio -> chip );
- return 0 ;
+ return devm_gpiochip_add_data ( & pdev -> dev , & lp3943_gpio -> chip ,
+ lp3943_gpio );
}
static const struct of_device_id lp3943_gpio_of_match [] = { @@ -223,7 +216,6 @@ MODULE_DEVICE_TABLE(of, lp3943_gpio_of_match);
static struct platform_driver lp3943_gpio_driver = {
. probe = lp3943_gpio_probe ,
- . remove = lp3943_gpio_remove ,
. driver = {
. name = "lp3943-gpio" ,
. of_match_table = lp3943_gpio_of_match , --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-lynxpoint.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-lynxpoint.c
index 1310777..9df015e 100644
--- a/drivers/gpio/gpio-lynxpoint.c
+++ b/drivers/gpio/gpio-lynxpoint.c @@ -370,7 +370,7 @@ static int lp_gpio_probe(struct platform_device *pdev)
gc -> can_sleep = false ;
gc -> parent = dev ;
- ret = gpiochip_add_data ( gc , lg );
+ ret = devm_gpiochip_add_data ( dev , gc , lg );
if ( ret ) {
dev_err ( dev , "failed adding lp-gpio chip \n " );
return ret ; @@ -439,9 +439,7 @@ MODULE_DEVICE_TABLE(acpi, lynxpoint_gpio_acpi_match);
static int lp_gpio_remove ( struct platform_device * pdev )
{
- struct lp_gpio * lg = platform_get_drvdata ( pdev );
pm_runtime_disable ( & pdev -> dev );
- gpiochip_remove ( & lg -> chip );
return 0 ;
}
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-mc9s08dz60.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/drivers/gpio/gpio-mc9s08dz60.c b/drivers/gpio/gpio-mc9s08dz60.c
index ba22fb9..14f252f 100644
--- a/drivers/gpio/gpio-mc9s08dz60.c
+++ b/drivers/gpio/gpio-mc9s08dz60.c @@ -103,17 +103,7 @@ static int mc9s08dz60_probe(struct i2c_client *client,
mc9s -> client = client ;
i2c_set_clientdata ( client , mc9s );
- return gpiochip_add_data ( & mc9s -> chip , mc9s );
- }
-
- static int mc9s08dz60_remove ( struct i2c_client * client )
- {
- struct mc9s08dz60 * mc9s ;
-
- mc9s = i2c_get_clientdata ( client );
-
- gpiochip_remove ( & mc9s -> chip );
- return 0 ;
+ return devm_gpiochip_add_data ( & client -> dev , & mc9s -> chip , mc9s );
}
static const struct i2c_device_id mc9s08dz60_id [] = { @@ -128,7 +118,6 @@ static struct i2c_driver mc9s08dz60_i2c_driver = {
. name = "mc9s08dz60" ,
},
. probe = mc9s08dz60_probe ,
- . remove = mc9s08dz60_remove ,
. id_table = mc9s08dz60_id ,
};
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-moxart.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-moxart.c b/drivers/gpio/gpio-moxart.c
index ca60453..869002b 100644
--- a/drivers/gpio/gpio-moxart.c
+++ b/drivers/gpio/gpio-moxart.c @@ -63,7 +63,7 @@ static int moxart_gpio_probe(struct platform_device *pdev)
gc -> parent = dev ;
gc -> owner = THIS_MODULE ;
- ret = gpiochip_add_data ( gc , NULL );
+ ret = devm_gpiochip_add_data ( dev , gc , NULL );
if ( ret ) {
dev_err ( dev , "%s: gpiochip_add failed \n " ,
dev -> of_node -> full_name ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and clean the
error path.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-mvebu.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index a5eacc1..11c6582 100644
--- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c @@ -756,7 +756,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
BUG ();
}
- gpiochip_add_data ( & mvchip -> chip , mvchip );
+ devm_gpiochip_add_data ( & pdev -> dev , & mvchip -> chip , mvchip );
/* Some gpio controllers do not provide irq support */
if ( ! of_irq_count ( np )) @@ -777,16 +777,14 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
mvchip -> irqbase = irq_alloc_descs ( -1 , 0 , ngpios , -1 );
if ( mvchip -> irqbase < 0 ) {
dev_err ( & pdev -> dev , "no irqs \n " );
- err = mvchip -> irqbase ;
- goto err_gpiochip_add ;
+ return mvchip -> irqbase ;
}
gc = irq_alloc_generic_chip ( "mvebu_gpio_irq" , 2 , mvchip -> irqbase ,
mvchip -> membase , handle_level_irq );
if ( ! gc ) {
dev_err ( & pdev -> dev , "Cannot allocate generic irq_chip \n " );
- err = - ENOMEM ;
- goto err_gpiochip_add ;
+ return - ENOMEM ;
}
gc -> private = mvchip ; @@ -828,9 +826,6 @@ err_generic_chip:
IRQ_LEVEL | IRQ_NOPROBE );
kfree ( gc );
- err_gpiochip_add :
- gpiochip_remove ( & mvchip -> chip );
-
return err ;
}
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and clean the
error path.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-mxc.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
index 7fd21cb..1b342a3 100644
--- a/drivers/gpio/gpio-mxc.c
+++ b/drivers/gpio/gpio-mxc.c @@ -462,14 +462,14 @@ static int mxc_gpio_probe(struct platform_device *pdev)
port -> gc . base = ( pdev -> id < 0 ) ? of_alias_get_id ( np , "gpio" ) * 32 :
pdev -> id * 32 ;
- err = gpiochip_add_data ( & port -> gc , port );
+ err = devm_gpiochip_add_data ( & pdev -> dev , & port -> gc , port );
if ( err )
goto out_bgio ;
irq_base = irq_alloc_descs ( -1 , 0 , 32 , numa_node_id ());
if ( irq_base < 0 ) {
err = irq_base ;
- goto out_gpiochip_remove ;
+ goto out_bgio ;
}
port -> domain = irq_domain_add_legacy ( np , 32 , irq_base , 0 , @@ -492,8 +492,6 @@ out_irqdomain_remove:
irq_domain_remove ( port -> domain );
out_irqdesc_free :
irq_free_descs ( irq_base , 32 );
- out_gpiochip_remove :
- gpiochip_remove ( & port -> gc );
out_bgio :
dev_info ( & pdev -> dev , "%s failed with errno %d \n " , __func__ , err );
return err ; --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-octeon.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/drivers/gpio/gpio-octeon.c b/drivers/gpio/gpio-octeon.c
index 7665ebc..47aead1 100644
--- a/drivers/gpio/gpio-octeon.c
+++ b/drivers/gpio/gpio-octeon.c @@ -117,7 +117,7 @@ static int octeon_gpio_probe(struct platform_device *pdev)
chip -> get = octeon_gpio_get ;
chip -> direction_output = octeon_gpio_dir_out ;
chip -> set = octeon_gpio_set ;
- err = gpiochip_add_data ( chip , gpio );
+ err = devm_gpiochip_add_data ( & pdev -> dev , chip , gpio );
if ( err )
goto out ;
@@ -126,13 +126,6 @@ out:
return err ;
}
- static int octeon_gpio_remove ( struct platform_device * pdev )
- {
- struct gpio_chip * chip = dev_get_platdata ( & pdev -> dev );
- gpiochip_remove ( chip );
- return 0 ;
- }
-
static struct of_device_id octeon_gpio_match [] = {
{
. compatible = "cavium,octeon-3860-gpio" , @@ -147,7 +140,6 @@ static struct platform_driver octeon_gpio_driver = {
. of_match_table = octeon_gpio_match ,
},
. probe = octeon_gpio_probe ,
- . remove = octeon_gpio_remove ,
};
module_platform_driver ( octeon_gpio_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-pca953x.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 23196c5..b7fe5d5 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c @@ -754,7 +754,7 @@ static int pca953x_probe(struct i2c_client *client,
if ( ret )
return ret ;
- ret = gpiochip_add_data ( & chip -> gpio_chip , chip );
+ ret = devm_gpiochip_add_data ( & client -> dev , & chip -> gpio_chip , chip );
if ( ret )
return ret ;
@@ -789,8 +789,6 @@ static int pca953x_remove(struct i2c_client *client)
}
}
- gpiochip_remove ( & chip -> gpio_chip );
-
return 0 ;
}
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and clean the
error path.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-pcf857x.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/gpio/gpio-pcf857x.c b/drivers/gpio/gpio-pcf857x.c
index 709cd3f..169c09a 100644
--- a/drivers/gpio/gpio-pcf857x.c
+++ b/drivers/gpio/gpio-pcf857x.c @@ -372,7 +372,7 @@ static int pcf857x_probe(struct i2c_client *client,
gpio -> out = ~ n_latch ;
gpio -> status = gpio -> out ;
- status = gpiochip_add_data ( & gpio -> chip , gpio );
+ status = devm_gpiochip_add_data ( & client -> dev , & gpio -> chip , gpio );
if ( status < 0 )
goto fail ;
@@ -383,7 +383,7 @@ static int pcf857x_probe(struct i2c_client *client,
IRQ_TYPE_NONE );
if ( status ) {
dev_err ( & client -> dev , "cannot add irqchip \n " );
- goto fail_irq ;
+ goto fail ;
}
status = devm_request_threaded_irq ( & client -> dev , client -> irq , @@ -391,7 +391,7 @@ static int pcf857x_probe(struct i2c_client *client,
IRQF_TRIGGER_FALLING | IRQF_SHARED ,
dev_name ( & client -> dev ), gpio );
if ( status )
- goto fail_irq ;
+ goto fail ;
gpiochip_set_chained_irqchip ( & gpio -> chip , & pcf857x_irq_chip ,
client -> irq , NULL ); @@ -413,9 +413,6 @@ static int pcf857x_probe(struct i2c_client *client,
return 0 ;
- fail_irq :
- gpiochip_remove ( & gpio -> chip );
-
fail :
dev_dbg ( & client -> dev , "probe error %d for '%s' \n " , status ,
client -> name ); @@ -440,7 +437,6 @@ static int pcf857x_remove(struct i2c_client *client)
}
}
- gpiochip_remove ( & gpio -> chip );
return status ;
}
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-palmas.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-palmas.c b/drivers/gpio/gpio-palmas.c
index fdfb3b1..6f27b3d 100644
--- a/drivers/gpio/gpio-palmas.c
+++ b/drivers/gpio/gpio-palmas.c @@ -195,7 +195,8 @@ static int palmas_gpio_probe(struct platform_device *pdev)
else
palmas_gpio -> gpio_chip . base = -1 ;
- ret = gpiochip_add_data ( & palmas_gpio -> gpio_chip , palmas_gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & palmas_gpio -> gpio_chip ,
+ palmas_gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Could not register gpiochip, %d \n " , ret );
return ret ; @@ -205,20 +206,11 @@ static int palmas_gpio_probe(struct platform_device *pdev)
return ret ;
}
- static int palmas_gpio_remove ( struct platform_device * pdev )
- {
- struct palmas_gpio * palmas_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & palmas_gpio -> gpio_chip );
- return 0 ;
- }
-
static struct platform_driver palmas_gpio_driver = {
. driver . name = "palmas-gpio" ,
. driver . owner = THIS_MODULE ,
. driver . of_match_table = of_palmas_gpio_match ,
. probe = palmas_gpio_probe ,
- . remove = palmas_gpio_remove ,
};
static int __init palmas_gpio_init ( void ) --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-rdc321x.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/gpio/gpio-rdc321x.c b/drivers/gpio/gpio-rdc321x.c
index 96ddee3..ec945b9 100644
--- a/drivers/gpio/gpio-rdc321x.c
+++ b/drivers/gpio/gpio-rdc321x.c @@ -194,23 +194,14 @@ static int rdc321x_gpio_probe(struct platform_device *pdev)
dev_info ( & pdev -> dev , "registering %d GPIOs \n " ,
rdc321x_gpio_dev -> chip . ngpio );
- return gpiochip_add_data ( & rdc321x_gpio_dev -> chip , rdc321x_gpio_dev );
- }
-
- static int rdc321x_gpio_remove ( struct platform_device * pdev )
- {
- struct rdc321x_gpio * rdc321x_gpio_dev = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & rdc321x_gpio_dev -> chip );
-
- return 0 ;
+ return devm_gpiochip_add_data ( & pdev -> dev , & rdc321x_gpio_dev -> chip ,
+ rdc321x_gpio_dev );
}
static struct platform_driver rdc321x_gpio_driver = {
. driver . name = "rdc321x-gpio" ,
. driver . owner = THIS_MODULE ,
. probe = rdc321x_gpio_probe ,
- . remove = rdc321x_gpio_remove ,
};
module_platform_driver ( rdc321x_gpio_driver ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-spear-spics.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-spear-spics.c b/drivers/gpio/gpio-spear-spics.c
index 50fb090..7ffd164 100644
--- a/drivers/gpio/gpio-spear-spics.c
+++ b/drivers/gpio/gpio-spear-spics.c @@ -165,7 +165,7 @@ static int spics_gpio_probe(struct platform_device *pdev)
spics -> chip . owner = THIS_MODULE ;
spics -> last_off = -1 ;
- ret = gpiochip_add_data ( & spics -> chip , spics );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & spics -> chip , spics );
if ( ret ) {
dev_err ( & pdev -> dev , "unable to add gpio chip \n " );
return ret ; --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-sta2x11.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-sta2x11.c b/drivers/gpio/gpio-sta2x11.c
index 83af1cb..0d5b8c5 100644
--- a/drivers/gpio/gpio-sta2x11.c
+++ b/drivers/gpio/gpio-sta2x11.c @@ -409,7 +409,7 @@ static int gsta_probe(struct platform_device *dev)
goto err_free_descs ;
}
- err = gpiochip_add_data ( & chip -> gpio , chip );
+ err = devm_gpiochip_add_data ( & dev -> dev , & chip -> gpio , chip );
if ( err < 0 ) {
dev_err ( & dev -> dev , "sta2x11 gpio: Can't register (%i) \n " ,
- err ); --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-sx150x.c | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/drivers/gpio/gpio-sx150x.c b/drivers/gpio/gpio-sx150x.c
index e6cff1c..d387eb5 100644
--- a/drivers/gpio/gpio-sx150x.c
+++ b/drivers/gpio/gpio-sx150x.c @@ -687,7 +687,7 @@ static int sx150x_probe(struct i2c_client *client,
if ( rc < 0 )
return rc ;
- rc = gpiochip_add_data ( & chip -> gpio_chip , chip );
+ rc = devm_gpiochip_add_data ( & client -> dev , & chip -> gpio_chip , chip );
if ( rc )
return rc ;
@@ -696,25 +696,12 @@ static int sx150x_probe(struct i2c_client *client,
pdata -> irq_summary ,
pdata -> irq_base );
if ( rc < 0 )
- goto probe_fail_post_gpiochip_add ;
+ return rc ;
}
i2c_set_clientdata ( client , chip );
return 0 ;
- probe_fail_post_gpiochip_add :
- gpiochip_remove ( & chip -> gpio_chip );
- return rc ;
- }
-
- static int sx150x_remove ( struct i2c_client * client )
- {
- struct sx150x_chip * chip ;
-
- chip = i2c_get_clientdata ( client );
- gpiochip_remove ( & chip -> gpio_chip );
-
- return 0 ;
}
static struct i2c_driver sx150x_driver = { @@ -723,7 +710,6 @@ static struct i2c_driver sx150x_driver = {
. of_match_table = of_match_ptr ( sx150x_of_match ),
},
. probe = sx150x_probe ,
- . remove = sx150x_remove ,
. id_table = sx150x_id ,
};
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-syscon.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-syscon.c b/drivers/gpio/gpio-syscon.c
index e5c5b62..24b6d64 100644
--- a/drivers/gpio/gpio-syscon.c
+++ b/drivers/gpio/gpio-syscon.c @@ -238,15 +238,7 @@ static int syscon_gpio_probe(struct platform_device *pdev)
platform_set_drvdata ( pdev , priv );
- return gpiochip_add_data ( & priv -> chip , priv );
- }
-
- static int syscon_gpio_remove ( struct platform_device * pdev )
- {
- struct syscon_gpio_priv * priv = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & priv -> chip );
- return 0 ;
+ return devm_gpiochip_add_data ( & pdev -> dev , & priv -> chip , priv );
}
static struct platform_driver syscon_gpio_driver = { @@ -255,7 +247,6 @@ static struct platform_driver syscon_gpio_driver = {
. of_match_table = syscon_gpio_ids ,
},
. probe = syscon_gpio_probe ,
- . remove = syscon_gpio_remove ,
};
module_platform_driver ( syscon_gpio_driver );
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and clean the
error path.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-tb10x.c | 22 ++++++----------------
1 file changed, 6 insertions(+), 16 deletions(-)
diff --git a/drivers/gpio/gpio-tb10x.c b/drivers/gpio/gpio-tb10x.c
index 5eaec20..80b6959a 100644
--- a/drivers/gpio/gpio-tb10x.c
+++ b/drivers/gpio/gpio-tb10x.c @@ -205,10 +205,10 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
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 ) {
dev_err ( & pdev -> dev , "Could not add gpiochip. \n " );
- goto fail_gpiochip_registration ;
+ return ret ;
}
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 );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "No interrupt specified. \n " );
- goto fail_get_irq ;
+ return ret ;
}
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 ,
dev_name ( & pdev -> dev ), tb10x_gpio );
if ( ret != 0 )
- goto fail_request_irq ;
+ return ret ;
tb10x_gpio -> domain = irq_domain_add_linear ( dn ,
tb10x_gpio -> gc . ngpio ,
& irq_generic_chip_ops , NULL );
if ( ! tb10x_gpio -> domain ) {
- ret = - ENOMEM ;
- goto fail_irq_domain ;
+ return - ENOMEM ;
}
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 ,
IRQ_GC_INIT_MASK_CACHE );
if ( ret )
- goto fail_irq_domain ;
+ return ret ;
gc = tb10x_gpio -> domain -> gc -> gc [ 0 ];
gc -> reg_base = tb10x_gpio -> base ; @@ -258,14 +257,6 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
}
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 ) @@ -278,7 +269,6 @@ static int tb10x_gpio_remove(struct platform_device *pdev)
kfree ( tb10x_gpio -> domain -> gc );
irq_domain_remove ( tb10x_gpio -> domain );
}
- gpiochip_remove ( & tb10x_gpio -> gc );
return 0 ;
} --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Stephen Warren <redacted>
Cc: Thierry Reding <redacted>
---
drivers/gpio/gpio-tegra.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
index 9a1a7e2..790bb11 100644
--- a/drivers/gpio/gpio-tegra.c
+++ b/drivers/gpio/gpio-tegra.c @@ -545,7 +545,7 @@ static int tegra_gpio_probe(struct platform_device *pdev)
tegra_gpio_chip . of_node = pdev -> dev . of_node ;
- ret = gpiochip_add_data ( & tegra_gpio_chip , NULL );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & tegra_gpio_chip , NULL );
if ( ret < 0 ) {
irq_domain_remove ( irq_domain );
return ret ; --
2.1.4
On Mon, Feb 22, 2016 at 07:38:35PM +0530, Laxman Dewangan wrote: quoted hunk Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Stephen Warren <redacted>
Cc: Thierry Reding <redacted>
---
drivers/gpio/gpio-tegra.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
index 9a1a7e2..790bb11 100644
--- a/drivers/gpio/gpio-tegra.c
+++ b/drivers/gpio/gpio-tegra.c @@ -545,7 +545,7 @@ static int tegra_gpio_probe(struct platform_device *pdev)
tegra_gpio_chip . of_node = pdev -> dev . of_node ;
- ret = gpiochip_add_data ( & tegra_gpio_chip , NULL );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & tegra_gpio_chip , NULL );
if ( ret < 0 ) {
irq_domain_remove ( irq_domain );
return ret ;
It's slightly redundant to do this because the driver probe will never
fail after this point and the driver can't be unloaded, so there's no
way that the GPIO chip would ever be removed.
But in the interest of consistency I have no objections to doing this.
It might also happen that, eventually, we might turn this into a proper
driver, at which point this would come in useful.
Acked-by: Thierry Reding <redacted>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160223/6b2ab1fd/attachment.sig >
Use devm_gpiochip_add_data() for GPIO registration.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-timberdale.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpio/gpio-timberdale.c b/drivers/gpio/gpio-timberdale.c
index a6de10c..f0164ec 100644
--- a/drivers/gpio/gpio-timberdale.c
+++ b/drivers/gpio/gpio-timberdale.c @@ -279,7 +279,7 @@ static int timbgpio_probe(struct platform_device *pdev)
gc -> ngpio = pdata -> nr_pins ;
gc -> can_sleep = false ;
- err = gpiochip_add_data ( gc , tgpio );
+ err = devm_gpiochip_add_data ( & pdev -> dev , gc , tgpio );
if ( err )
return err ;
@@ -320,8 +320,6 @@ static int timbgpio_remove(struct platform_device *pdev)
irq_set_handler_data ( irq , NULL );
}
- gpiochip_remove ( & tgpio -> gpio );
-
return 0 ;
}
--
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-tps6586x.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-tps6586x.c b/drivers/gpio/gpio-tps6586x.c
index 87de548..c88bdc8 100644
--- a/drivers/gpio/gpio-tps6586x.c
+++ b/drivers/gpio/gpio-tps6586x.c @@ -117,7 +117,8 @@ static int tps6586x_gpio_probe(struct platform_device *pdev)
else
tps6586x_gpio -> gpio_chip . base = -1 ;
- ret = gpiochip_add_data ( & tps6586x_gpio -> gpio_chip , tps6586x_gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & tps6586x_gpio -> gpio_chip ,
+ tps6586x_gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Could not register gpiochip, %d \n " , ret );
return ret ; @@ -128,19 +129,10 @@ static int tps6586x_gpio_probe(struct platform_device *pdev)
return ret ;
}
- static int tps6586x_gpio_remove ( struct platform_device * pdev )
- {
- struct tps6586x_gpio * tps6586x_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & tps6586x_gpio -> gpio_chip );
- return 0 ;
- }
-
static struct platform_driver tps6586x_gpio_driver = {
. driver . name = "tps6586x-gpio" ,
. driver . owner = THIS_MODULE ,
. probe = tps6586x_gpio_probe ,
- . remove = tps6586x_gpio_remove ,
};
static int __init tps6586x_gpio_init ( void ) --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-tps65910.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-tps65910.c b/drivers/gpio/gpio-tps65910.c
index e81eee7..cdbd7c7 100644
--- a/drivers/gpio/gpio-tps65910.c
+++ b/drivers/gpio/gpio-tps65910.c @@ -170,7 +170,8 @@ static int tps65910_gpio_probe(struct platform_device *pdev)
}
skip_init :
- ret = gpiochip_add_data ( & tps65910_gpio -> gpio_chip , tps65910_gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & tps65910_gpio -> gpio_chip ,
+ tps65910_gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Could not register gpiochip, %d \n " , ret );
return ret ; @@ -181,19 +182,10 @@ skip_init:
return ret ;
}
- static int tps65910_gpio_remove ( struct platform_device * pdev )
- {
- struct tps65910_gpio * tps65910_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & tps65910_gpio -> gpio_chip );
- return 0 ;
- }
-
static struct platform_driver tps65910_gpio_driver = {
. driver . name = "tps65910-gpio" ,
. driver . owner = THIS_MODULE ,
. probe = tps65910_gpio_probe ,
- . remove = tps65910_gpio_remove ,
};
static int __init tps65910_gpio_init ( void ) --
2.1.4
Use devm_gpiochip_add_data() for GPIO registration and remove the
need of driver callback .remove.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
drivers/gpio/gpio-tps65912.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-tps65912.c b/drivers/gpio/gpio-tps65912.c
index 4f2029c..e72302d 100644
--- a/drivers/gpio/gpio-tps65912.c
+++ b/drivers/gpio/gpio-tps65912.c @@ -106,7 +106,8 @@ static int tps65912_gpio_probe(struct platform_device *pdev)
if ( pdata && pdata -> gpio_base )
tps65912_gpio -> gpio_chip . base = pdata -> gpio_base ;
- ret = gpiochip_add_data ( & tps65912_gpio -> gpio_chip , tps65912_gpio );
+ ret = devm_gpiochip_add_data ( & pdev -> dev , & tps65912_gpio -> gpio_chip ,
+ tps65912_gpio );
if ( ret < 0 ) {
dev_err ( & pdev -> dev , "Failed to register gpiochip, %d \n " , ret );
return ret ; @@ -117,20 +118,11 @@ static int tps65912_gpio_probe(struct platform_device *pdev)
return ret ;
}
- static int tps65912_gpio_remove ( struct platform_device * pdev )
- {
- struct tps65912_gpio_data * tps65912_gpio = platform_get_drvdata ( pdev );
-
- gpiochip_remove ( & tps65912_gpio -> gpio_chip );
- return 0 ;
- }
-
static struct platform_driver tps65912_gpio_driver = {
. driver = {
. name = "tps65912-gpio" ,
},
. probe = tps65912_gpio_probe ,
- . remove = tps65912_gpio_remove ,
};
static int __init tps65912_gpio_init ( void ) --
2.1.4