]> git.sur5r.net Git - u-boot/commitdiff
fdt: Add polarity-aware gpio functions to fdtdec
authorSean Paul <seanpaul@chromium.org>
Thu, 25 Oct 2012 16:31:06 +0000 (16:31 +0000)
committerGerald Van Baren <gvb@unssw.com>
Tue, 13 Nov 2012 04:14:57 +0000 (23:14 -0500)
Add get and set gpio functions to fdtdec that take into account the
polarity field in fdtdec_gpio_state.flags.

Signed-off-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
include/fdtdec.h
lib/fdtdec.c

index b5d7d2f54a2bbd15b559c8619b01b17125e56369..5164ce24e61e2686ae6fb664862dfc8363a4238f 100644 (file)
@@ -89,6 +89,22 @@ struct fdt_gpio_state {
 /* This tells us whether a fdt_gpio_state record is valid or not */
 #define fdt_gpio_isvalid(x) ((x)->gpio != FDT_GPIO_NONE)
 
+/**
+ * Read the GPIO taking into account the polarity of the pin.
+ *
+ * @param gpio         pointer to the decoded gpio
+ * @return value of the gpio if successful, < 0 if unsuccessful
+ */
+int fdtdec_get_gpio(struct fdt_gpio_state *gpio);
+
+/**
+ * Write the GPIO taking into account the polarity of the pin.
+ *
+ * @param gpio         pointer to the decoded gpio
+ * @return 0 if successful
+ */
+int fdtdec_set_gpio(struct fdt_gpio_state *gpio, int val);
+
 /**
  * Find the next numbered alias for a peripheral. This is used to enumerate
  * all the peripherals of a certain type.
index 150512e5a80b5fe2a4106a221be09f4443a7a0c6..e1b17a5fe58d8eabb3ad82324be24581b83ef972 100644 (file)
@@ -487,6 +487,26 @@ int fdtdec_decode_gpio(const void *blob, int node, const char *prop_name,
        return err == 1 ? 0 : err;
 }
 
+int fdtdec_get_gpio(struct fdt_gpio_state *gpio)
+{
+       int val;
+
+       if (!fdt_gpio_isvalid(gpio))
+               return -1;
+
+       val = gpio_get_value(gpio->gpio);
+       return gpio->flags & FDT_GPIO_ACTIVE_LOW ? val ^ 1 : val;
+}
+
+int fdtdec_set_gpio(struct fdt_gpio_state *gpio, int val)
+{
+       if (!fdt_gpio_isvalid(gpio))
+               return -1;
+
+       val = gpio->flags & FDT_GPIO_ACTIVE_LOW ? val ^ 1 : val;
+       return gpio_set_value(gpio->gpio, val);
+}
+
 int fdtdec_setup_gpio(struct fdt_gpio_state *gpio)
 {
        /*