From: Laxman Dewangan <ldewangan@nvidia.com>
To: <linus.walleij@linaro.org>, <gnurou@gmail.com>,
<michael.hennerich@analog.com>, <corbet@lwn.net>, <albeu@free.fr>,
<rjui@broadcom.com>, <shc_work@mail.ru>,
<support.opensource@diasemi.com>, <swarren@wwwdotorg.org>,
<thierry.reding@gmail.com>
Cc: <ldewangan@nvidia.com>, <bjorn.andersson@sonymobile.com>,
<a.kesavan@samsung.com>, <gregkh@linuxfoundation.org>,
<catalin.marinas@arm.com>, <linux-doc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-gpio@vger.kernel.org>,
<patches@opensource.wolfsonmicro.com>,
<bcm-kernel-feedback-list@broadcom.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-tegra@vger.kernel.org>
Subject: [PATCH 01/61] gpio: Add devm_ apis for gpiochip_add_data and gpiochip_remove
Date: Mon, 22 Feb 2016 19:37:50 +0530 [thread overview]
Message-ID: <1456150130-2668-2-git-send-email-ldewangan@nvidia.com> (raw)
In-Reply-To: <1456150130-2668-1-git-send-email-ldewangan@nvidia.com>
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
next prev parent reply other threads:[~2016-02-22 14:21 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-22 14:07 [PATCH 00/61] gpio: Add and use devm_gpiochip_add_data() Laxman Dewangan
2016-02-22 14:07 ` Laxman Dewangan [this message]
2016-02-22 14:32 ` [PATCH 01/61] gpio: Add devm_ apis for gpiochip_add_data and gpiochip_remove Andrew Lunn
2016-02-22 14:07 ` [PATCH 02/61] gpio: Add resource management devm_gpio_chip_{add_data,remove} Laxman Dewangan
2016-02-22 14:07 ` [PATCH 03/61] gpio: Add missing devm_gpio_ wrapper in devres.txt Laxman Dewangan
2016-02-22 14:07 ` [PATCH 04/61] gpio: 74xx-mmio: Use devm_gpiochip_add_data() for gpio registration Laxman Dewangan
2016-02-22 14:07 ` [PATCH 05/61] gpio: adnp: " Laxman Dewangan
2016-02-22 14:07 ` [PATCH 06/61] gpio: adp5520: " Laxman Dewangan
2016-02-23 7:49 ` Michael Hennerich
2016-02-22 14:07 ` [PATCH 07/61] gpio: adp5588: " Laxman Dewangan
2016-02-23 7:49 ` Michael Hennerich
2016-02-22 14:07 ` [PATCH 08/61] gpio: amdpt: " Laxman Dewangan
2016-02-22 14:07 ` [PATCH 09/61] gpio: arizona: " Laxman Dewangan
2016-02-22 16:28 ` Charles Keepax
2016-02-22 14:07 ` [PATCH 10/61] gpio: ath79: " Laxman Dewangan
2016-02-22 20:13 ` Alban
2016-02-23 14:58 ` Laxman Dewangan
2016-02-22 14:08 ` [PATCH 11/61] gpio: bcm-kona: " Laxman Dewangan
2016-02-22 17:17 ` Ray Jui
2016-02-22 14:08 ` [PATCH 12/61] gpio: clps711x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 13/61] gpio: crystalcove: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 14/61] gpio: cs5535: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 15/61] gpio: da9052: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 16/61] gpio: da9055: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 17/61] gpio: dln2: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 18/61] gpio: ep93xx: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 19/61] gpio: f7188x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 20/61] gpio: ge: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 21/61] gpio: generic: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 22/61] gpio: iop: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 23/61] gpio: janz-ttl: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 24/61] gpio: kempld: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 25/61] gpio: lp3943: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 26/61] gpio: lpc32xx: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 27/61] gpio: lynxpoint: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 28/61] gpio: mc9s08dz60: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 29/61] gpio: moxart: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 30/61] gpio: mvebu: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 31/61] gpio: mxc: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 32/61] gpio: octeon: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 33/61] gpio: pca953x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 34/61] gpio: pcf857x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 35/61] gpio: palmas: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 36/61] gpio: rc5t583: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 37/61] gpio: rdc321x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 38/61] gpio: sch: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 39/61] gpio: spear-spics: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 40/61] gpio: sta2x11: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 41/61] gpio: stp-xway: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 42/61] gpio: sx150x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 43/61] gpio: syscon: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 44/61] gpio: tb10x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 45/61] gpio: tc3589x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 46/61] gpio: tegra: " Laxman Dewangan
2016-02-23 16:30 ` Thierry Reding
2016-02-22 14:08 ` [PATCH 47/61] gpio: timberdale " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 48/61] gpio: tps6586x: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 49/61] gpio: tps65910: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 50/61] gpio: tps65912: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 51/61] gpio: ts4800: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 52/61] gpio: ts5500: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 53/61] gpio: twl6040: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 54/61] gpio: ucb1400: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 55/61] gpio: viperboard: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 56/61] gpio: vx855: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 57/61] gpio: wm8350: " Laxman Dewangan
2016-02-22 16:29 ` Charles Keepax
2016-02-22 14:08 ` [PATCH 58/61] " Laxman Dewangan
2016-02-22 16:29 ` Charles Keepax
2016-02-22 14:08 ` [PATCH 59/61] gpio: wm8994: " Laxman Dewangan
2016-02-22 16:29 ` Charles Keepax
2016-02-22 14:08 ` [PATCH 60/61] gpio: xgene-sb: " Laxman Dewangan
2016-02-22 14:08 ` [PATCH 61/61] gpio: xgene: " Laxman Dewangan
2016-02-22 14:44 ` [PATCH 00/61] gpio: Add and use devm_gpiochip_add_data() Linus Walleij
2016-02-23 9:01 ` Laxman Dewangan
2016-02-23 15:15 ` Laxman Dewangan
2016-02-25 13:24 ` Linus Walleij
2016-02-28 14:32 ` Laxman Dewangan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1456150130-2668-2-git-send-email-ldewangan@nvidia.com \
--to=ldewangan@nvidia.com \
--cc=a.kesavan@samsung.com \
--cc=albeu@free.fr \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bjorn.andersson@sonymobile.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=gnurou@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=michael.hennerich@analog.com \
--cc=patches@opensource.wolfsonmicro.com \
--cc=rjui@broadcom.com \
--cc=shc_work@mail.ru \
--cc=support.opensource@diasemi.com \
--cc=swarren@wwwdotorg.org \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®