linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc
@ 2014-07-22 15:01 Guenter Roeck
  2014-07-23  5:41 ` Alexandre Courbot
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Guenter Roeck @ 2014-07-22 15:01 UTC (permalink / raw)
  To: linux-gpio
  Cc: linux-kernel, linux-doc, Linus Walleij, Alexandre Courbot,
	Randy Dunlap, Guenter Roeck, Mika Westerberg

Both functions were introduced to let gpio drivers request their own
gpio pins. Without exporting the functions, this can however only be
used by gpio drivers built into the kernel.

Secondary impact is that the functions can not currently be used by
platform initialization code associated with the gpio-pca953x driver.
This code permits auto-export of gpio pins through platform data, but
if this functionality is used, the module can no longer be unloaded due
to the problem solved with the introduction of gpiochip_request_own_desc
and gpiochip_free_own_desc.

Export both function so they can be used from modules and from
platform initialization code.

Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v3: Add API documentation.
    Use EXPORT_SYMBOL_GPL.
v2: Move function declarations from consumer.h to driver.h.

 Documentation/gpio/driver.txt | 21 +++++++++++++++++++++
 drivers/gpio/gpiolib.c        |  2 ++
 drivers/gpio/gpiolib.h        |  3 ---
 include/linux/gpio/driver.h   |  3 +++
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/Documentation/gpio/driver.txt b/Documentation/gpio/driver.txt
index fa9a0a8..5433bda 100644
--- a/Documentation/gpio/driver.txt
+++ b/Documentation/gpio/driver.txt
@@ -167,3 +167,24 @@ is released:
 When implementing an irqchip inside a GPIO driver, these two functions should
 typically be called in the .startup() and .shutdown() callbacks from the
 irqchip.
+
+
+Requesting self-owned GPIO pins
+-------------------------------
+
+Sometimes it is useful to allow a GPIO chip driver to request its own GPIO
+descriptors through the gpiolib API. Using gpio_request() for this purpose
+does not help since it pins the module to the kernel forever (it calls
+try_module_get()). A GPIO driver can use the following functions instead
+to request and free descriptors without being pinned to the kernel forever.
+
+	int gpiochip_request_own_desc(struct gpio_desc *desc, const char *label)
+
+	void gpiochip_free_own_desc(struct gpio_desc *desc)
+
+Descriptors requested with gpiochip_request_own_desc() must be released with
+gpiochip_free_own_desc().
+
+These functions must be used with care since they do not affect module use
+count. Do not use the functions to request gpio descriptors not owned by the
+calling driver.
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 43d9e34..580b18e 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1953,6 +1953,7 @@ int gpiochip_request_own_desc(struct gpio_desc *desc, const char *label)
 
 	return __gpiod_request(desc, label);
 }
+EXPORT_SYMBOL_GPL(gpiochip_request_own_desc);
 
 /**
  * gpiochip_free_own_desc - Free GPIO requested by the chip driver
@@ -1966,6 +1967,7 @@ void gpiochip_free_own_desc(struct gpio_desc *desc)
 	if (desc)
 		__gpiod_free(desc);
 }
+EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
 
 /* Drivers MUST set GPIO direction before making get/set calls.  In
  * some cases this is done in early boot, before IRQs are enabled.
diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
index 1a4103d..2bdb69d 100644
--- a/drivers/gpio/gpiolib.h
+++ b/drivers/gpio/gpiolib.h
@@ -45,9 +45,6 @@ acpi_get_gpiod_by_index(struct device *dev, int index,
 }
 #endif
 
-int gpiochip_request_own_desc(struct gpio_desc *desc, const char *label);
-void gpiochip_free_own_desc(struct gpio_desc *desc);
-
 struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np,
 		   const char *list_name, int index, enum of_gpio_flags *flags);
 
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 573e4f3..8e07d58 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -223,6 +223,9 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
 
 #endif /* CONFIG_GPIO_IRQCHIP */
 
+int gpiochip_request_own_desc(struct gpio_desc *desc, const char *label);
+void gpiochip_free_own_desc(struct gpio_desc *desc);
+
 #else /* CONFIG_GPIOLIB */
 
 static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc
  2014-07-22 15:01 [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc Guenter Roeck
@ 2014-07-23  5:41 ` Alexandre Courbot
  2014-07-23  6:56 ` Mika Westerberg
  2014-07-24  8:26 ` Linus Walleij
  2 siblings, 0 replies; 4+ messages in thread
From: Alexandre Courbot @ 2014-07-23  5:41 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-gpio@vger.kernel.org, Linux Kernel Mailing List,
	linux-doc@vger.kernel.org, Linus Walleij, Randy Dunlap,
	Mika Westerberg

On Wed, Jul 23, 2014 at 12:01 AM, Guenter Roeck <linux@roeck-us.net> wrote:
> Both functions were introduced to let gpio drivers request their own
> gpio pins. Without exporting the functions, this can however only be
> used by gpio drivers built into the kernel.
>
> Secondary impact is that the functions can not currently be used by
> platform initialization code associated with the gpio-pca953x driver.
> This code permits auto-export of gpio pins through platform data, but
> if this functionality is used, the module can no longer be unloaded due
> to the problem solved with the introduction of gpiochip_request_own_desc
> and gpiochip_free_own_desc.
>
> Export both function so they can be used from modules and from
> platform initialization code.
>
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>

Makes sense to have them there.

Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc
  2014-07-22 15:01 [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc Guenter Roeck
  2014-07-23  5:41 ` Alexandre Courbot
@ 2014-07-23  6:56 ` Mika Westerberg
  2014-07-24  8:26 ` Linus Walleij
  2 siblings, 0 replies; 4+ messages in thread
From: Mika Westerberg @ 2014-07-23  6:56 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-gpio, linux-kernel, linux-doc, Linus Walleij,
	Alexandre Courbot, Randy Dunlap

On Tue, Jul 22, 2014 at 08:01:01AM -0700, Guenter Roeck wrote:
> Both functions were introduced to let gpio drivers request their own
> gpio pins. Without exporting the functions, this can however only be
> used by gpio drivers built into the kernel.
> 
> Secondary impact is that the functions can not currently be used by
> platform initialization code associated with the gpio-pca953x driver.
> This code permits auto-export of gpio pins through platform data, but
> if this functionality is used, the module can no longer be unloaded due
> to the problem solved with the introduction of gpiochip_request_own_desc
> and gpiochip_free_own_desc.
> 
> Export both function so they can be used from modules and from
> platform initialization code.
> 
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>

Looks good to me, thanks.

Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc
  2014-07-22 15:01 [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc Guenter Roeck
  2014-07-23  5:41 ` Alexandre Courbot
  2014-07-23  6:56 ` Mika Westerberg
@ 2014-07-24  8:26 ` Linus Walleij
  2 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2014-07-24  8:26 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org, Alexandre Courbot, Randy Dunlap,
	Mika Westerberg

On Tue, Jul 22, 2014 at 5:01 PM, Guenter Roeck <linux@roeck-us.net> wrote:

> Both functions were introduced to let gpio drivers request their own
> gpio pins. Without exporting the functions, this can however only be
> used by gpio drivers built into the kernel.
>
> Secondary impact is that the functions can not currently be used by
> platform initialization code associated with the gpio-pca953x driver.
> This code permits auto-export of gpio pins through platform data, but
> if this functionality is used, the module can no longer be unloaded due
> to the problem solved with the introduction of gpiochip_request_own_desc
> and gpiochip_free_own_desc.
>
> Export both function so they can be used from modules and from
> platform initialization code.
>
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v3: Add API documentation.
>     Use EXPORT_SYMBOL_GPL.

Patch applied with the nice review tags.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-07-24  8:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-22 15:01 [PATCH v3] gpiolib: Export gpiochip_request_own_desc and gpiochip_free_own_desc Guenter Roeck
2014-07-23  5:41 ` Alexandre Courbot
2014-07-23  6:56 ` Mika Westerberg
2014-07-24  8:26 ` Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).