mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 0/2 v2] gpiolib: add request and free support
@ 2012-12-21 13:25 Jean-Christophe PLAGNIOL-VILLARD
  2012-12-21 13:26 ` [PATCH 1/2 v2] gpiolib: add gpio_request and gpio_free support Jean-Christophe PLAGNIOL-VILLARD
  2012-12-22 18:40 ` [PATCH 0/2 v2] gpiolib: add request and free support Sascha Hauer
  0 siblings, 2 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-12-21 13:25 UTC (permalink / raw)
  To: barebox

HI,

	v2:
	introduce gpio_ensure_requested

	This allow to trac which gpio is used for what
	and allow drivers to have custom request and free

	as example on at91 mux the pin as gpio on request

The following changes since commit b46b57f35a27090cfbac4900d1a3d522d7898e53:

  MFD MC34708: Add dependence on SPI (2012-12-21 12:18:08 +0100)

are available in the git repository at:

  git://git.jcrosoft.org/barebox.git delivery/gpiolib

for you to fetch changes up to 56685f7f8f617724c320013a4ca4946b92b00f67:

  gpiolib: add command to dump the current gpio status (2012-12-21 21:10:25 +0800)

----------------------------------------------------------------
Jean-Christophe PLAGNIOL-VILLARD (2):
      gpiolib: add gpio_request and gpio_free support
      gpiolib: add command to dump the current gpio status

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 1/2 v2] gpiolib: add gpio_request and gpio_free support
  2012-12-21 13:25 [PATCH 0/2 v2] gpiolib: add request and free support Jean-Christophe PLAGNIOL-VILLARD
@ 2012-12-21 13:26 ` Jean-Christophe PLAGNIOL-VILLARD
  2012-12-21 13:26   ` [PATCH 2/2] gpiolib: add command to dump the current gpio status Jean-Christophe PLAGNIOL-VILLARD
  2012-12-22 18:40 ` [PATCH 0/2 v2] gpiolib: add request and free support Sascha Hauer
  1 sibling, 1 reply; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-12-21 13:26 UTC (permalink / raw)
  To: barebox

as today if no request or free provided do not complain

if the gpio is not request auto requested at first use

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
v2:

	introduce gpio_ensure_requested

Best Regards,
J.
 drivers/gpio/gpio.c |   89 +++++++++++++++++++++++++++++++++++++++++++++++----
 include/gpio.h      |    7 ++++
 2 files changed, 89 insertions(+), 7 deletions(-)

diff --git a/drivers/gpio/gpio.c b/drivers/gpio/gpio.c
index 042a062..ed9f923 100644
--- a/drivers/gpio/gpio.c
+++ b/drivers/gpio/gpio.c
@@ -1,19 +1,79 @@
 #include <common.h>
 #include <gpio.h>
 #include <errno.h>
+#include <malloc.h>
 
 static LIST_HEAD(chip_list);
 
-static struct gpio_chip *gpio_desc[ARCH_NR_GPIOS];
+struct gpio_info {
+	struct gpio_chip *chip;
+	bool requested;
+	char *label;
+};
+
+static struct gpio_info gpio_desc[ARCH_NR_GPIOS];
+
+static int gpio_ensure_requested(struct gpio_info *gi, int gpio)
+{
+	if (gi->requested)
+		return 0;
+
+	return gpio_request(gpio, "gpio");
+}
+
+int gpio_request(unsigned gpio, const char *label)
+{
+	struct gpio_info *gi = &gpio_desc[gpio];
+	struct gpio_chip *chip = gi->chip;
+	int ret;
+
+	if (!gpio_is_valid(gpio))
+		return -EINVAL;
+	if (!chip)
+		return -EINVAL;
+	if (gi->requested)
+		return -EBUSY;
+	if (chip->ops->request) {
+		ret = chip->ops->request(chip, gpio - chip->base);
+		if (ret)
+			return ret;
+	}
+
+	gi->requested = true;
+	gi->label = xstrdup(label);
+
+	return 0;
+}
+
+void gpio_free(unsigned gpio)
+{
+	struct gpio_info *gi = &gpio_desc[gpio];
+	struct gpio_chip *chip = gi->chip;
+
+	if (!gpio_is_valid(gpio))
+		return;
+	if (!chip)
+		return;
+	if (!gi->requested)
+		return;
+	if (chip->ops->free)
+		chip->ops->free(chip, gpio - chip->base);
+
+	gi->requested = false;
+	free(gi->label);
+}
 
 void gpio_set_value(unsigned gpio, int value)
 {
-	struct gpio_chip *chip = gpio_desc[gpio];
+	struct gpio_info *gi = &gpio_desc[gpio];
+	struct gpio_chip *chip = gi->chip;
 
 	if (!gpio_is_valid(gpio))
 		return;
 	if (!chip)
 		return;
+	if (gpio_ensure_requested(gi, gpio))
+		return;
 	if (!chip->ops->set)
 		return;
 	chip->ops->set(chip, gpio - chip->base, value);
@@ -22,12 +82,17 @@ EXPORT_SYMBOL(gpio_set_value);
 
 int gpio_get_value(unsigned gpio)
 {
-	struct gpio_chip *chip = gpio_desc[gpio];
+	struct gpio_info *gi = &gpio_desc[gpio];
+	struct gpio_chip *chip = gi->chip;
+	int ret;
 
 	if (!gpio_is_valid(gpio))
 		return -EINVAL;
 	if (!chip)
 		return -ENODEV;
+	ret = gpio_ensure_requested(gi, gpio);
+	if (ret)
+		return ret;
 	if (!chip->ops->get)
 		return -ENOSYS;
 	return chip->ops->get(chip, gpio - chip->base);
@@ -36,12 +101,17 @@ EXPORT_SYMBOL(gpio_get_value);
 
 int gpio_direction_output(unsigned gpio, int value)
 {
-	struct gpio_chip *chip = gpio_desc[gpio];
+	struct gpio_info *gi = &gpio_desc[gpio];
+	struct gpio_chip *chip = gi->chip;
+	int ret;
 
 	if (!gpio_is_valid(gpio))
 		return -EINVAL;
 	if (!chip)
 		return -ENODEV;
+	ret = gpio_ensure_requested(gi, gpio);
+	if (ret)
+		return ret;
 	if (!chip->ops->direction_output)
 		return -ENOSYS;
 	return chip->ops->direction_output(chip, gpio - chip->base, value);
@@ -50,12 +120,17 @@ EXPORT_SYMBOL(gpio_direction_output);
 
 int gpio_direction_input(unsigned gpio)
 {
-	struct gpio_chip *chip = gpio_desc[gpio];
+	struct gpio_info *gi = &gpio_desc[gpio];
+	struct gpio_chip *chip = gi->chip;
+	int ret;
 
 	if (!gpio_is_valid(gpio))
 		return -EINVAL;
 	if (!chip)
 		return -ENODEV;
+	ret = gpio_ensure_requested(gi, gpio);
+	if (ret)
+		return ret;
 	if (!chip->ops->direction_input)
 		return -ENOSYS;
 	return chip->ops->direction_input(chip, gpio - chip->base);
@@ -72,7 +147,7 @@ static int gpiochip_find_base(int start, int ngpio)
 		start = 0;
 
 	for (i = start; i < ARCH_NR_GPIOS; i++) {
-		struct gpio_chip *chip = gpio_desc[i];
+		struct gpio_chip *chip = gpio_desc[i].chip;
 
 		if (!chip) {
 			spare++;
@@ -107,7 +182,7 @@ int gpiochip_add(struct gpio_chip *chip)
 	list_add_tail(&chip->list, &chip_list);
 
 	for (i = chip->base; i < chip->base + chip->ngpio; i++)
-		gpio_desc[i] = chip;
+		gpio_desc[i].chip = chip;
 
 	return 0;
 }
diff --git a/include/gpio.h b/include/gpio.h
index 9fb11c3..eedb980 100644
--- a/include/gpio.h
+++ b/include/gpio.h
@@ -3,6 +3,7 @@
 
 #include <asm/gpio.h>
 
+#ifndef CONFIG_GPIOLIB
 static inline int gpio_request(unsigned gpio, const char *label)
 {
        return 0;
@@ -11,10 +12,16 @@ static inline int gpio_request(unsigned gpio, const char *label)
 static inline void gpio_free(unsigned gpio)
 {
 }
+#else
+int gpio_request(unsigned gpio, const char *label);
+void gpio_free(unsigned gpio);
+#endif
 
 struct gpio_chip;
 
 struct gpio_ops {
+	int (*request)(struct gpio_chip *chip, unsigned offset);
+	void (*free)(struct gpio_chip *chip, unsigned offset);
 	int (*direction_input)(struct gpio_chip *chip, unsigned offset);
 	int (*direction_output)(struct gpio_chip *chip, unsigned offset, int value);
 	int (*get)(struct gpio_chip *chip, unsigned offset);
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/2] gpiolib: add command to dump the current gpio status
  2012-12-21 13:26 ` [PATCH 1/2 v2] gpiolib: add gpio_request and gpio_free support Jean-Christophe PLAGNIOL-VILLARD
@ 2012-12-21 13:26   ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-12-21 13:26 UTC (permalink / raw)
  To: barebox

This will allow to known which gpio is requested by what

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/gpio/gpio.c |   37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/drivers/gpio/gpio.c b/drivers/gpio/gpio.c
index ed9f923..d37f5a0 100644
--- a/drivers/gpio/gpio.c
+++ b/drivers/gpio/gpio.c
@@ -1,4 +1,6 @@
 #include <common.h>
+#include <command.h>
+#include <complete.h>
 #include <gpio.h>
 #include <errno.h>
 #include <malloc.h>
@@ -198,3 +200,38 @@ int gpio_get_num(struct device_d *dev, int gpio)
 
 	return -ENODEV;
 }
+
+#ifdef CONFIG_CMD_GPIO
+static int do_gpiolib(int argc, char *argv[])
+{
+	int i;
+
+	printf("gpiolib: gpio lists\n");
+	printf("%*crequested  label\n", 11, ' ');
+
+	for (i = 0; i < ARCH_NR_GPIOS; i++) {
+		struct gpio_info *gi = &gpio_desc[i];
+
+		if (!gi->chip)
+			continue;
+
+		printf("gpio %*d: %*s  %s\n", 4,
+			i, 9, gi->requested ? "true" : "false",
+			gi->label ? gi->label : "");
+	}
+
+	return 0;
+}
+
+BAREBOX_CMD_HELP_START(gpiolib)
+BAREBOX_CMD_HELP_USAGE("gpiolib\n")
+BAREBOX_CMD_HELP_SHORT("dump current registered gpio\n");
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(gpiolib)
+	.cmd		= do_gpiolib,
+	.usage		= "dump current registered gpio",
+	BAREBOX_CMD_HELP(cmd_gpiolib_help)
+	BAREBOX_CMD_COMPLETE(empty_complete)
+BAREBOX_CMD_END
+#endif
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 0/2 v2] gpiolib: add request and free support
  2012-12-21 13:25 [PATCH 0/2 v2] gpiolib: add request and free support Jean-Christophe PLAGNIOL-VILLARD
  2012-12-21 13:26 ` [PATCH 1/2 v2] gpiolib: add gpio_request and gpio_free support Jean-Christophe PLAGNIOL-VILLARD
@ 2012-12-22 18:40 ` Sascha Hauer
  1 sibling, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2012-12-22 18:40 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Fri, Dec 21, 2012 at 02:25:30PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> HI,
> 
> 	v2:
> 	introduce gpio_ensure_requested
> 
> 	This allow to trac which gpio is used for what
> 	and allow drivers to have custom request and free
> 
> 	as example on at91 mux the pin as gpio on request
> 
> The following changes since commit b46b57f35a27090cfbac4900d1a3d522d7898e53:
> 
>   MFD MC34708: Add dependence on SPI (2012-12-21 12:18:08 +0100)
> 
> are available in the git repository at:
> 
>   git://git.jcrosoft.org/barebox.git delivery/gpiolib

Applied, thanks

Sascha

> 
> for you to fetch changes up to 56685f7f8f617724c320013a4ca4946b92b00f67:
> 
>   gpiolib: add command to dump the current gpio status (2012-12-21 21:10:25 +0800)
> 
> ----------------------------------------------------------------
> Jean-Christophe PLAGNIOL-VILLARD (2):
>       gpiolib: add gpio_request and gpio_free support
>       gpiolib: add command to dump the current gpio status
> 
> Best Regards,
> J.
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/2] gpiolib: add command to dump the current gpio status
  2012-12-20 14:23 ` [PATCH 1/2] gpiolib: add gpio_request and gpio_free support Jean-Christophe PLAGNIOL-VILLARD
@ 2012-12-20 14:24   ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-12-20 14:24 UTC (permalink / raw)
  To: barebox

This will allow to known which gpio is requested by what

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/gpio/gpio.c |   37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/drivers/gpio/gpio.c b/drivers/gpio/gpio.c
index e29f0ba..4c68819 100644
--- a/drivers/gpio/gpio.c
+++ b/drivers/gpio/gpio.c
@@ -1,4 +1,6 @@
 #include <common.h>
+#include <command.h>
+#include <complete.h>
 #include <gpio.h>
 #include <errno.h>
 #include <malloc.h>
@@ -196,3 +198,38 @@ int gpio_get_num(struct device_d *dev, int gpio)
 
 	return -ENODEV;
 }
+
+#ifdef CONFIG_CMD_GPIO
+static int do_gpiolib(int argc, char *argv[])
+{
+	int i;
+
+	printf("gpiolib: gpio lists\n");
+	printf("%*crequested  label\n", 11, ' ');
+
+	for (i = 0; i < ARCH_NR_GPIOS; i++) {
+		struct gpio_info *gi = &gpio_desc[i];
+
+		if (!gi->chip)
+			continue;
+
+		printf("gpio %*d: %*s  %s\n", 4,
+			i, 9, gi->requested ? "true" : "false",
+			gi->label ? gi->label : "");
+	}
+
+	return 0;
+}
+
+BAREBOX_CMD_HELP_START(gpiolib)
+BAREBOX_CMD_HELP_USAGE("gpiolib\n")
+BAREBOX_CMD_HELP_SHORT("dump current registered gpio\n");
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(gpiolib)
+	.cmd		= do_gpiolib,
+	.usage		= "dump current registered gpio",
+	BAREBOX_CMD_HELP(cmd_gpiolib_help)
+	BAREBOX_CMD_COMPLETE(empty_complete)
+BAREBOX_CMD_END
+#endif
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2012-12-22 18:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-21 13:25 [PATCH 0/2 v2] gpiolib: add request and free support Jean-Christophe PLAGNIOL-VILLARD
2012-12-21 13:26 ` [PATCH 1/2 v2] gpiolib: add gpio_request and gpio_free support Jean-Christophe PLAGNIOL-VILLARD
2012-12-21 13:26   ` [PATCH 2/2] gpiolib: add command to dump the current gpio status Jean-Christophe PLAGNIOL-VILLARD
2012-12-22 18:40 ` [PATCH 0/2 v2] gpiolib: add request and free support Sascha Hauer
  -- strict thread matches above, loose matches on Subject: below --
2012-12-20 13:12 [PATCH 0/2] " Jean-Christophe PLAGNIOL-VILLARD
2012-12-20 14:23 ` [PATCH 1/2] gpiolib: add gpio_request and gpio_free support Jean-Christophe PLAGNIOL-VILLARD
2012-12-20 14:24   ` [PATCH 2/2] gpiolib: add command to dump the current gpio status Jean-Christophe PLAGNIOL-VILLARD

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox