linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Notorious OF GPIO API support
@ 2008-04-11 13:05 Anton Vorontsov
  2008-04-11 13:06 ` [PATCH 2/2] [POWERPC] Implement support for the GPIO LIB API Anton Vorontsov
  2008-04-11 13:06 ` [PATCH 1/2] OF helpers for the GPIO API Anton Vorontsov
  0 siblings, 2 replies; 5+ messages in thread
From: Anton Vorontsov @ 2008-04-11 13:05 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: linuxppc-dev, David Miller

Hello Paul,

Please consider applying these patches for the 2.6.26. Pretty much of
new drivers depend on this support, including some of my patches and
patches from Jochen Friedrich and Laurent Pinchart.

My plan is to submit MPC83xx/MPC85xx specific parts to Kumar after these
two applied. Then I'll submit pending USB/I2C/MTD/... drivers to the
appropriate subsystem maintainers.

For those who didn't follow these patches, here is recall of the
previous discussions:
http://ozlabs.org/pipermail/linuxppc-dev/2007-December/047948.html
http://ozlabs.org/pipermail/linuxppc-dev/2007-December/048788.html
http://ozlabs.org/pipermail/linuxppc-dev/2008-January/049414.html
http://ozlabs.org/pipermail/linuxppc-dev/2008-March/052881.html

Since January I resent these patches about two or three times just with
some cosmetic changes because of no further comments on the design, so I
believe that interested parties are more or less satisfied with it now.

Thanks,

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

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

* [PATCH 2/2] [POWERPC] Implement support for the GPIO LIB API
  2008-04-11 13:05 [PATCH 0/2] Notorious OF GPIO API support Anton Vorontsov
@ 2008-04-11 13:06 ` Anton Vorontsov
  2008-04-11 14:16   ` Grant Likely
  2008-04-11 13:06 ` [PATCH 1/2] OF helpers for the GPIO API Anton Vorontsov
  1 sibling, 1 reply; 5+ messages in thread
From: Anton Vorontsov @ 2008-04-11 13:06 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: linuxppc-dev, David Miller

This patch implements support for the GPIO LIB API. Two calls
unimplemented though: irq_to_gpio and gpio_to_irq.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 Documentation/powerpc/booting-without-of.txt |   52 ++++++++++++++++++++++++
 arch/powerpc/Kconfig                         |    5 ++
 include/asm-powerpc/gpio.h                   |   56 ++++++++++++++++++++++++++
 3 files changed, 113 insertions(+), 0 deletions(-)
 create mode 100644 include/asm-powerpc/gpio.h

diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
index b506245..e9e0c2f 100644
--- a/Documentation/powerpc/booting-without-of.txt
+++ b/Documentation/powerpc/booting-without-of.txt
@@ -66,6 +66,10 @@ Table of Contents
     3) OpenPIC Interrupt Controllers
     4) ISA Interrupt Controllers
 
+  VIII - Specifying GPIO information for devices
+    1) gpios property
+    2) gpio-controller nodes
+
   Appendix A - Sample SOC node for MPC8540
 
 
@@ -2925,6 +2929,54 @@ encodings listed below:
 	2 =  high to low edge sensitive type enabled
 	3 =  low to high edge sensitive type enabled
 
+VIII - Specifying GPIO information for devices
+==============================================
+
+1) gpios property
+-----------------
+
+Nodes that makes use of GPIOs should define them using `gpios' property,
+format of which is: <&gpio-controller1-phandle gpio1-specifier
+		     &gpio-controller2-phandle gpio2-specifier
+		     0 /* holes are permitted, means no GPIO 3 */
+		     &gpio-controller4-phandle gpio4-specifier
+		     ...>;
+
+Note that gpio-specifier length is controller dependent.
+
+gpio-specifier may encode: bank, pin position inside the bank,
+whether pin is open-drain and whether pin is logically inverted.
+
+Example of the node using GPIOs:
+
+	node {
+		gpios = <&qe_pio_e 18 0>;
+	};
+
+In this example gpio-specifier is "18 0" and encodes GPIO pin number,
+and empty GPIO flags as accepted by the "qe_pio_e" gpio-controller.
+
+2) gpio-controller nodes
+------------------------
+
+Every GPIO controller node must have #gpio-cells property defined,
+this information will be used to translate gpio-specifiers.
+
+Example of two SOC GPIO banks defined as gpio-controller nodes:
+
+	qe_pio_a: gpio-controller@1400 {
+		#gpio-cells = <2>;
+		compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank";
+		reg = <0x1400 0x18>;
+		gpio-controller;
+	};
+
+	qe_pio_e: gpio-controller@1460 {
+		#gpio-cells = <2>;
+		compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";
+		reg = <0x1460 0x18>;
+		gpio-controller;
+	};
 
 Appendix A - Sample SOC node for MPC8540
 ========================================
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 0b27cbd..f328509 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -81,6 +81,11 @@ config GENERIC_FIND_NEXT_BIT
 	bool
 	default y
 
+config GENERIC_GPIO
+	bool
+	help
+	  Generic GPIO API support
+
 config ARCH_NO_VIRT_TO_BUS
 	def_bool PPC64
 
diff --git a/include/asm-powerpc/gpio.h b/include/asm-powerpc/gpio.h
new file mode 100644
index 0000000..77ad3a8
--- /dev/null
+++ b/include/asm-powerpc/gpio.h
@@ -0,0 +1,56 @@
+/*
+ * Generic GPIO API implementation for PowerPC.
+ *
+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
+ *
+ * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __ASM_POWERPC_GPIO_H
+#define __ASM_POWERPC_GPIO_H
+
+#include <linux/errno.h>
+#include <asm-generic/gpio.h>
+
+#ifdef CONFIG_HAVE_GPIO_LIB
+
+/*
+ * We don't (yet) implement inlined/rapid versions for on-chip gpios.
+ * Just call gpiolib.
+ */
+static inline int gpio_get_value(unsigned int gpio)
+{
+	return __gpio_get_value(gpio);
+}
+
+static inline void gpio_set_value(unsigned int gpio, int value)
+{
+	__gpio_set_value(gpio, value);
+}
+
+static inline int gpio_cansleep(unsigned int gpio)
+{
+	return __gpio_cansleep(gpio);
+}
+
+/*
+ * Not implemented, yet.
+ */
+static inline int gpio_to_irq(unsigned int gpio)
+{
+	return -ENOSYS;
+}
+
+static inline int irq_to_gpio(unsigned int irq)
+{
+	return -EINVAL;
+}
+
+#endif /* CONFIG_HAVE_GPIO_LIB */
+
+#endif /* __ASM_POWERPC_GPIO_H */
-- 
1.5.4.5

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

* [PATCH 1/2] OF helpers for the GPIO API
  2008-04-11 13:05 [PATCH 0/2] Notorious OF GPIO API support Anton Vorontsov
  2008-04-11 13:06 ` [PATCH 2/2] [POWERPC] Implement support for the GPIO LIB API Anton Vorontsov
@ 2008-04-11 13:06 ` Anton Vorontsov
  2008-04-11 14:28   ` Grant Likely
  1 sibling, 1 reply; 5+ messages in thread
From: Anton Vorontsov @ 2008-04-11 13:06 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: linuxppc-dev, David Miller

This patch implements various helpers to support OF bindings for
the GPIO LIB API.

Previously this was PowerPC specific, but it seems this code
isn't arch-dependent anyhow, so let's place it into of/.

SPARC will not see this addition yet, real hardware seem to not use
GPIOs at all. But this might change:

   http://www.leox.org/docs/faq_MLleon.html

"16-bit I/O port" sounds promising. :-)

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/of/Kconfig      |    6 +
 drivers/of/Makefile     |    1 +
 drivers/of/gpio.c       |  242 +++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/of_gpio.h |   69 +++++++++++++
 4 files changed, 318 insertions(+), 0 deletions(-)
 create mode 100644 drivers/of/gpio.c
 create mode 100644 include/linux/of_gpio.h

diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
index c03072b..3354ad7 100644
--- a/drivers/of/Kconfig
+++ b/drivers/of/Kconfig
@@ -1,3 +1,9 @@
 config OF_DEVICE
 	def_bool y
 	depends on OF && (SPARC || PPC_OF)
+
+config OF_GPIO
+	def_bool y
+	depends on OF && PPC_OF && HAVE_GPIO_LIB
+	help
+	  OpenFirmware GPIO accessors
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
index ab9be5d..5a61f70 100644
--- a/drivers/of/Makefile
+++ b/drivers/of/Makefile
@@ -1,2 +1,3 @@
 obj-y = base.o
 obj-$(CONFIG_OF_DEVICE) += device.o platform.o
+obj-$(CONFIG_OF_GPIO)   += gpio.o
diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c
new file mode 100644
index 0000000..000681e
--- /dev/null
+++ b/drivers/of/gpio.c
@@ -0,0 +1,242 @@
+/*
+ * OF helpers for the GPIO API
+ *
+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
+ *
+ * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
+#include <asm/prom.h>
+
+/**
+ * of_get_gpio - Get a GPIO number from the device tree to use with GPIO API
+ * @np:		device node to get GPIO from
+ * @index:	index of the GPIO
+ *
+ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
+ * value on the error condition.
+ */
+int of_get_gpio(struct device_node *np, int index)
+{
+	int ret = -EINVAL;
+	struct device_node *gc;
+	struct of_gpio_chip *of_gc = NULL;
+	int size;
+	const u32 *gpios;
+	u32 nr_cells;
+	int i;
+	const void *gpio_spec;
+	const u32 *gpio_cells;
+	int gpio_index = 0;
+
+	gpios = of_get_property(np, "gpios", &size);
+	if (!gpios) {
+		ret = -ENOENT;
+		goto err0;
+	}
+	nr_cells = size / sizeof(u32);
+
+	for (i = 0; i < nr_cells; gpio_index++) {
+		const phandle *gpio_phandle;
+
+		gpio_phandle = gpios + i;
+		gpio_spec = gpio_phandle + 1;
+
+		/* one cell hole in the gpios = <>; */
+		if (!*gpio_phandle) {
+			if (gpio_index == index)
+				return -ENOENT;
+			i++;
+			continue;
+		}
+
+		gc = of_find_node_by_phandle(*gpio_phandle);
+		if (!gc) {
+			pr_debug("%s: could not find phandle for gpios\n",
+				 np->full_name);
+			goto err0;
+		}
+
+		of_gc = gc->data;
+		if (!of_gc) {
+			pr_debug("%s: gpio controller %s isn't registered\n",
+				 np->full_name, gc->full_name);
+			goto err1;
+		}
+
+		gpio_cells = of_get_property(gc, "#gpio-cells", &size);
+		if (!gpio_cells || size != sizeof(*gpio_cells) ||
+				*gpio_cells != of_gc->gpio_cells) {
+			pr_debug("%s: wrong #gpio-cells for %s\n",
+				 np->full_name, gc->full_name);
+			goto err1;
+		}
+
+		/* Next phandle is at phandle cells + #gpio-cells */
+		i += sizeof(*gpio_phandle) / sizeof(u32) + *gpio_cells;
+		if (i >= nr_cells + 1) {
+			pr_debug("%s: insufficient gpio-spec length\n",
+				 np->full_name);
+			goto err1;
+		}
+
+		if (gpio_index == index)
+			break;
+
+		of_gc = NULL;
+		of_node_put(gc);
+	}
+
+	if (!of_gc) {
+		ret = -ENOENT;
+		goto err0;
+	}
+
+	ret = of_gc->xlate(of_gc, np, gpio_spec);
+	if (ret < 0)
+		goto err1;
+
+	ret += of_gc->gc.base;
+err1:
+	of_node_put(gc);
+err0:
+	pr_debug("%s exited with status %d\n", __func__, ret);
+	return ret;
+}
+EXPORT_SYMBOL(of_get_gpio);
+
+/**
+ * of_gpio_simple_xlate - translate gpio_spec to the GPIO number
+ * @of_gc:	pointer to the of_gpio_chip structure
+ * @np:		device node of the GPIO chip
+ * @gpio_spec:	gpio specifier as found in the device tree
+ *
+ * This is simple translation function, suitable for the most 1:1 mapped
+ * gpio chips. This function performs only one sanity check: whether gpio
+ * is less than ngpios (that is specified in the gpio_chip).
+ */
+int of_gpio_simple_xlate(struct of_gpio_chip *of_gc, struct device_node *np,
+			 const void *gpio_spec)
+{
+	const u32 *gpio = gpio_spec;
+
+	if (*gpio > of_gc->gc.ngpio)
+		return -EINVAL;
+
+	return *gpio;
+}
+EXPORT_SYMBOL(of_gpio_simple_xlate);
+
+/* Should be sufficient for now, later we'll use dynamic bases. */
+#if defined(CONFIG_PPC32) || defined(CONFIG_SPARC32)
+#define GPIOS_PER_CHIP 32
+#else
+#define GPIOS_PER_CHIP 64
+#endif
+
+static int of_get_gpiochip_base(struct device_node *np)
+{
+	struct device_node *gc = NULL;
+	int gpiochip_base = 0;
+
+	while ((gc = of_find_all_nodes(gc))) {
+		if (!of_get_property(gc, "gpio-controller", NULL))
+			continue;
+
+		if (gc != np) {
+			gpiochip_base += GPIOS_PER_CHIP;
+			continue;
+		}
+
+		of_node_put(gc);
+
+		if (gpiochip_base >= ARCH_NR_GPIOS)
+			return -ENOSPC;
+
+		return gpiochip_base;
+	}
+
+	return -ENOENT;
+}
+
+/**
+ * of_mm_gpiochip_add - Add memory mapped GPIO chip (bank)
+ * @np:		device node of the GPIO chip
+ * @mm_gc:	pointer to the of_mm_gpio_chip allocated structure
+ *
+ * To use this function you should allocate and fill mm_gc with:
+ *
+ * 1) In the gpio_chip structure:
+ *    - all the callbacks
+ *
+ * 2) In the of_gpio_chip structure:
+ *    - gpio_cells
+ *    - xlate callback (optional)
+ *
+ * 3) In the of_mm_gpio_chip structure:
+ *    - save_regs callback (optional)
+ *
+ * If succeeded, this function will map bank's memory and will
+ * do all necessary work for you. Then you'll able to use .regs
+ * to manage GPIOs from the callbacks.
+ */
+int of_mm_gpiochip_add(struct device_node *np,
+		       struct of_mm_gpio_chip *mm_gc)
+{
+	int ret = -ENOMEM;
+	struct of_gpio_chip *of_gc = &mm_gc->of_gc;
+	struct gpio_chip *gc = &of_gc->gc;
+
+	gc->label = kstrdup(np->full_name, GFP_KERNEL);
+	if (!gc->label)
+		goto err0;
+
+	mm_gc->regs = of_iomap(np, 0);
+	if (!mm_gc->regs)
+		goto err1;
+
+	gc->base = of_get_gpiochip_base(np);
+	if (gc->base < 0) {
+		ret = gc->base;
+		goto err1;
+	}
+
+	if (!of_gc->xlate)
+		of_gc->xlate = of_gpio_simple_xlate;
+
+	if (mm_gc->save_regs)
+		mm_gc->save_regs(mm_gc);
+
+	np->data = of_gc;
+
+	ret = gpiochip_add(gc);
+	if (ret)
+		goto err2;
+
+	/* We don't want to lose the node and its ->data */
+	of_node_get(np);
+
+	pr_debug("%s: registered as generic GPIO chip, base is %d\n",
+		 np->full_name, gc->base);
+	return 0;
+err2:
+	np->data = NULL;
+	iounmap(mm_gc->regs);
+err1:
+	kfree(gc->label);
+err0:
+	pr_err("%s: GPIO chip registration failed with status %d\n",
+	       np->full_name, ret);
+	return ret;
+}
+EXPORT_SYMBOL(of_mm_gpiochip_add);
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h
new file mode 100644
index 0000000..2ee97e9
--- /dev/null
+++ b/include/linux/of_gpio.h
@@ -0,0 +1,69 @@
+/*
+ * OF helpers for the GPIO API
+ *
+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
+ *
+ * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_OF_GPIO_H
+#define __LINUX_OF_GPIO_H
+
+#include <linux/errno.h>
+#include <asm/gpio.h>
+
+#ifdef CONFIG_OF_GPIO
+
+/*
+ * Generic OF GPIO chip
+ */
+struct of_gpio_chip {
+	struct gpio_chip gc;
+	int gpio_cells;
+	int (*xlate)(struct of_gpio_chip *of_gc, struct device_node *np,
+		     const void *gpio_spec);
+};
+
+static inline struct of_gpio_chip *to_of_gpio_chip(struct gpio_chip *gc)
+{
+	return container_of(gc, struct of_gpio_chip, gc);
+}
+
+/*
+ * OF GPIO chip for memory mapped banks
+ */
+struct of_mm_gpio_chip {
+	struct of_gpio_chip of_gc;
+	void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
+	void __iomem *regs;
+};
+
+static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
+{
+	struct of_gpio_chip *of_gc = to_of_gpio_chip(gc);
+
+	return container_of(of_gc, struct of_mm_gpio_chip, of_gc);
+}
+
+extern int of_get_gpio(struct device_node *np, int index);
+extern int of_mm_gpiochip_add(struct device_node *np,
+			      struct of_mm_gpio_chip *mm_gc);
+extern int of_gpio_simple_xlate(struct of_gpio_chip *of_gc,
+				struct device_node *np,
+				const void *gpio_spec);
+#else
+
+/* Drivers may not strictly depend on the GPIO support, so let them link. */
+static inline int of_get_gpio(struct device_node *np, int index)
+{
+	return -ENOSYS;
+}
+
+#endif /* CONFIG_OF_GPIO */
+
+#endif /* __LINUX_OF_GPIO_H */
-- 
1.5.4.5

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

* Re: [PATCH 2/2] [POWERPC] Implement support for the GPIO LIB API
  2008-04-11 13:06 ` [PATCH 2/2] [POWERPC] Implement support for the GPIO LIB API Anton Vorontsov
@ 2008-04-11 14:16   ` Grant Likely
  0 siblings, 0 replies; 5+ messages in thread
From: Grant Likely @ 2008-04-11 14:16 UTC (permalink / raw)
  To: Anton Vorontsov; +Cc: linuxppc-dev, Paul Mackerras, David Miller

On Fri, Apr 11, 2008 at 7:06 AM, Anton Vorontsov
<avorontsov@ru.mvista.com> wrote:
> This patch implements support for the GPIO LIB API. Two calls
>  unimplemented though: irq_to_gpio and gpio_to_irq.
>
>  Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>

I like it

Acked-by: Grant Likely <grant.likely@secretlab.ca>

>  ---
>   Documentation/powerpc/booting-without-of.txt |   52 ++++++++++++++++++++++++
>   arch/powerpc/Kconfig                         |    5 ++
>   include/asm-powerpc/gpio.h                   |   56 ++++++++++++++++++++++++++
>   3 files changed, 113 insertions(+), 0 deletions(-)
>   create mode 100644 include/asm-powerpc/gpio.h
>
>  diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
>  index b506245..e9e0c2f 100644
>  --- a/Documentation/powerpc/booting-without-of.txt
>  +++ b/Documentation/powerpc/booting-without-of.txt
>  @@ -66,6 +66,10 @@ Table of Contents
>      3) OpenPIC Interrupt Controllers
>      4) ISA Interrupt Controllers
>
>  +  VIII - Specifying GPIO information for devices
>  +    1) gpios property
>  +    2) gpio-controller nodes
>  +
>    Appendix A - Sample SOC node for MPC8540
>
>
>  @@ -2925,6 +2929,54 @@ encodings listed below:
>         2 =  high to low edge sensitive type enabled
>         3 =  low to high edge sensitive type enabled
>
>  +VIII - Specifying GPIO information for devices
>  +==============================================
>  +
>  +1) gpios property
>  +-----------------
>  +
>  +Nodes that makes use of GPIOs should define them using `gpios' property,
>  +format of which is: <&gpio-controller1-phandle gpio1-specifier
>  +                    &gpio-controller2-phandle gpio2-specifier
>  +                    0 /* holes are permitted, means no GPIO 3 */
>  +                    &gpio-controller4-phandle gpio4-specifier
>  +                    ...>;
>  +
>  +Note that gpio-specifier length is controller dependent.
>  +
>  +gpio-specifier may encode: bank, pin position inside the bank,
>  +whether pin is open-drain and whether pin is logically inverted.
>  +
>  +Example of the node using GPIOs:
>  +
>  +       node {
>  +               gpios = <&qe_pio_e 18 0>;
>  +       };
>  +
>  +In this example gpio-specifier is "18 0" and encodes GPIO pin number,
>  +and empty GPIO flags as accepted by the "qe_pio_e" gpio-controller.
>  +
>  +2) gpio-controller nodes
>  +------------------------
>  +
>  +Every GPIO controller node must have #gpio-cells property defined,
>  +this information will be used to translate gpio-specifiers.
>  +
>  +Example of two SOC GPIO banks defined as gpio-controller nodes:
>  +
>  +       qe_pio_a: gpio-controller@1400 {
>  +               #gpio-cells = <2>;
>  +               compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank";
>  +               reg = <0x1400 0x18>;
>  +               gpio-controller;
>  +       };
>  +
>  +       qe_pio_e: gpio-controller@1460 {
>  +               #gpio-cells = <2>;
>  +               compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";
>  +               reg = <0x1460 0x18>;
>  +               gpio-controller;
>  +       };
>
>   Appendix A - Sample SOC node for MPC8540
>   ========================================
>  diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
>  index 0b27cbd..f328509 100644
>  --- a/arch/powerpc/Kconfig
>  +++ b/arch/powerpc/Kconfig
>  @@ -81,6 +81,11 @@ config GENERIC_FIND_NEXT_BIT
>         bool
>         default y
>
>  +config GENERIC_GPIO
>  +       bool
>  +       help
>  +         Generic GPIO API support
>  +
>   config ARCH_NO_VIRT_TO_BUS
>         def_bool PPC64
>
>  diff --git a/include/asm-powerpc/gpio.h b/include/asm-powerpc/gpio.h
>  new file mode 100644
>  index 0000000..77ad3a8
>  --- /dev/null
>  +++ b/include/asm-powerpc/gpio.h
>  @@ -0,0 +1,56 @@
>  +/*
>  + * Generic GPIO API implementation for PowerPC.
>  + *
>  + * Copyright (c) 2007-2008  MontaVista Software, Inc.
>  + *
>  + * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
>  + *
>  + * This program is free software; you can redistribute it and/or modify
>  + * it under the terms of the GNU General Public License as published by
>  + * the Free Software Foundation; either version 2 of the License, or
>  + * (at your option) any later version.
>  + */
>  +
>  +#ifndef __ASM_POWERPC_GPIO_H
>  +#define __ASM_POWERPC_GPIO_H
>  +
>  +#include <linux/errno.h>
>  +#include <asm-generic/gpio.h>
>  +
>  +#ifdef CONFIG_HAVE_GPIO_LIB
>  +
>  +/*
>  + * We don't (yet) implement inlined/rapid versions for on-chip gpios.
>  + * Just call gpiolib.
>  + */
>  +static inline int gpio_get_value(unsigned int gpio)
>  +{
>  +       return __gpio_get_value(gpio);
>  +}
>  +
>  +static inline void gpio_set_value(unsigned int gpio, int value)
>  +{
>  +       __gpio_set_value(gpio, value);
>  +}
>  +
>  +static inline int gpio_cansleep(unsigned int gpio)
>  +{
>  +       return __gpio_cansleep(gpio);
>  +}
>  +
>  +/*
>  + * Not implemented, yet.
>  + */
>  +static inline int gpio_to_irq(unsigned int gpio)
>  +{
>  +       return -ENOSYS;
>  +}
>  +
>  +static inline int irq_to_gpio(unsigned int irq)
>  +{
>  +       return -EINVAL;
>  +}
>  +
>  +#endif /* CONFIG_HAVE_GPIO_LIB */
>  +
>  +#endif /* __ASM_POWERPC_GPIO_H */
>  --
>  1.5.4.5
>  _______________________________________________
>  Linuxppc-dev mailing list
>  Linuxppc-dev@ozlabs.org
>  https://ozlabs.org/mailman/listinfo/linuxppc-dev
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

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

* Re: [PATCH 1/2] OF helpers for the GPIO API
  2008-04-11 13:06 ` [PATCH 1/2] OF helpers for the GPIO API Anton Vorontsov
@ 2008-04-11 14:28   ` Grant Likely
  0 siblings, 0 replies; 5+ messages in thread
From: Grant Likely @ 2008-04-11 14:28 UTC (permalink / raw)
  To: Anton Vorontsov; +Cc: linuxppc-dev, Paul Mackerras, David Miller

On Fri, Apr 11, 2008 at 7:06 AM, Anton Vorontsov
<avorontsov@ru.mvista.com> wrote:
> This patch implements various helpers to support OF bindings for
>  the GPIO LIB API.
>
>  Previously this was PowerPC specific, but it seems this code
>  isn't arch-dependent anyhow, so let's place it into of/.
>
>  SPARC will not see this addition yet, real hardware seem to not use
>  GPIOs at all. But this might change:
>
>    http://www.leox.org/docs/faq_MLleon.html
>
>  "16-bit I/O port" sounds promising. :-)
>
>  Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>

Looks pretty sane to me.  Only nitpick; the documentation should be part of this
patch, not the next one; but I have no complaints if they both get
picked up at the same time.

Acked-by: Grant Likely <grant.likely@secretlab.ca>

Cheers,
g.


-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

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

end of thread, other threads:[~2008-04-11 14:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-11 13:05 [PATCH 0/2] Notorious OF GPIO API support Anton Vorontsov
2008-04-11 13:06 ` [PATCH 2/2] [POWERPC] Implement support for the GPIO LIB API Anton Vorontsov
2008-04-11 14:16   ` Grant Likely
2008-04-11 13:06 ` [PATCH 1/2] OF helpers for the GPIO API Anton Vorontsov
2008-04-11 14:28   ` Grant Likely

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).