Skip to content
Snippets Groups Projects
Commit 202ff753 authored by Sean Paul's avatar Sean Paul Committed by Gerald Van Baren
Browse files

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: default avatarSean Paul <seanpaul@chromium.org>
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent aadef0a1
No related branches found
No related tags found
No related merge requests found
...@@ -89,6 +89,22 @@ struct fdt_gpio_state { ...@@ -89,6 +89,22 @@ struct fdt_gpio_state {
/* This tells us whether a fdt_gpio_state record is valid or not */ /* This tells us whether a fdt_gpio_state record is valid or not */
#define fdt_gpio_isvalid(x) ((x)->gpio != FDT_GPIO_NONE) #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 * Find the next numbered alias for a peripheral. This is used to enumerate
* all the peripherals of a certain type. * all the peripherals of a certain type.
......
...@@ -487,6 +487,26 @@ int fdtdec_decode_gpio(const void *blob, int node, const char *prop_name, ...@@ -487,6 +487,26 @@ int fdtdec_decode_gpio(const void *blob, int node, const char *prop_name,
return err == 1 ? 0 : err; 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) int fdtdec_setup_gpio(struct fdt_gpio_state *gpio)
{ {
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment