From: Sean Paul Date: Thu, 25 Oct 2012 16:31:06 +0000 (+0000) Subject: fdt: Add polarity-aware gpio functions to fdtdec X-Git-Tag: v2013.01-rc2~118^2^2~6 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=202ff7537558edfd759b400cfe9e56c56fc7868c;p=u-boot fdt: Add polarity-aware gpio functions to fdtdec 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 Signed-off-by: Simon Glass --- diff --git a/include/fdtdec.h b/include/fdtdec.h index b5d7d2f54a..5164ce24e6 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -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. diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 150512e5a8..e1b17a5fe5 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -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) { /*