diff options
author | Simon Glass <sjg@chromium.org> | 2016-03-06 19:27:50 -0700 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2016-03-17 10:27:22 +0800 |
commit | bbf2478026c0addfff000f31cc1b5639cbff52cb (patch) | |
tree | 58db941696e2d4153370d1b25c11579a89dc8dd3 | |
parent | 740d5d34b12f49b5e6c48e06dd8f519d9563a7e3 (diff) |
gpio: Add a function to obtain a GPIO vector value
We can use GPIOs as binary digits for reading 'strapping' values. Each GPIO
is assigned a single bit and can be set high or low on the circuit board. We
already have a legacy function for reading these values. Add one that
supports driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r-- | drivers/gpio/gpio-uclass.c | 18 | ||||
-rw-r--r-- | include/asm-generic/gpio.h | 12 |
2 files changed, 30 insertions, 0 deletions
diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index d603b55902..b2a2ca85cd 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -577,6 +577,24 @@ int gpio_get_values_as_int(const int *gpio_list) return vector; } +int dm_gpio_get_values_as_int(struct gpio_desc *desc_list, int count) +{ + unsigned bitmask = 1; + unsigned vector = 0; + int ret, i; + + for (i = 0; i < count; i++) { + ret = dm_gpio_get_value(&desc_list[i]); + if (ret < 0) + return ret; + else if (ret) + vector |= bitmask; + bitmask <<= 1; + } + + return vector; +} + static int _gpio_request_by_name_nodev(const void *blob, int node, const char *list_name, int index, struct gpio_desc *desc, int flags, diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 0af599f86d..059f33906e 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -360,6 +360,18 @@ int gpio_lookup_name(const char *name, struct udevice **devp, int gpio_get_values_as_int(const int *gpio_list); /** + * dm_gpio_get_values_as_int() - Turn the values of a list of GPIOs into an int + * + * This puts the value of the first GPIO into bit 0, the second into bit 1, + * etc. then returns the resulting integer. + * + * @desc_list: List of GPIOs to collect + * @count: Number of GPIOs + * @return resulting integer value, or -ve on error + */ +int dm_gpio_get_values_as_int(struct gpio_desc *desc_list, int count); + +/** * gpio_claim_vector() - claim a number of GPIOs for input * * @gpio_num_array: array of gpios to claim, terminated by -1 |