gpio: Add a function to obtain a GPIO vector value
authorSimon Glass <sjg@chromium.org>
Mon, 7 Mar 2016 02:27:50 +0000 (19:27 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 17 Mar 2016 02:27:22 +0000 (10:27 +0800)
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>
drivers/gpio/gpio-uclass.c
include/asm-generic/gpio.h

index d603b55902790abe87a6aef154bec77747de6c45..b2a2ca85cd5ef5ec1ea51014cc066b90dbf74e44 100644 (file)
@@ -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,
index 0af599f86df5bee53efa1745a833d386df6665a6..059f33906ea1ddb3a208a5425bcc9d6197793123 100644 (file)
@@ -359,6 +359,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
  *