Merge branch 'next' of https://gitlab.denx.de/u-boot/custodians/u-boot-marvell into...
[platform/kernel/u-boot.git] / include / asm-generic / gpio.h
index 7d1e19a..e33cde7 100644 (file)
@@ -260,10 +260,32 @@ int gpio_xlate_offs_flags(struct udevice *dev, struct gpio_desc *desc,
 struct dm_gpio_ops {
        int (*request)(struct udevice *dev, unsigned offset, const char *label);
        int (*rfree)(struct udevice *dev, unsigned int offset);
+
+       /**
+        * direction_input() - deprecated
+        *
+        * Equivalent to set_flags(...GPIOD_IS_IN)
+        */
        int (*direction_input)(struct udevice *dev, unsigned offset);
+
+       /**
+        * direction_output() - deprecated
+        *
+        * Equivalent to set_flags(...GPIOD_IS_OUT) with GPIOD_IS_OUT_ACTIVE
+        * also set if @value
+        */
        int (*direction_output)(struct udevice *dev, unsigned offset,
                                int value);
+
        int (*get_value)(struct udevice *dev, unsigned offset);
+
+       /**
+        * set_value() - Sets the GPIO value of an output
+        *
+        * If the driver provides an @set_flags() method then that is used
+        * in preference to this, with GPIOD_IS_OUT_ACTIVE set according to
+        * @value.
+        */
        int (*set_value)(struct udevice *dev, unsigned offset, int value);
        /**
         * get_function() Get the GPIO function
@@ -320,7 +342,9 @@ struct dm_gpio_ops {
         * uclass, so the driver always sees the value that should be set at the
         * pin (1=high, 0=low).
         *
-        * This method is optional.
+        * This method is required and should be implemented by new drivers. At
+        * some point, it will supersede direction_input() and
+        * direction_output(), which wil be removed.
         *
         * @dev:        GPIO device
         * @offset:     GPIO offset within that device
@@ -474,6 +498,31 @@ int gpio_get_values_as_int(const int *gpio_list);
 int dm_gpio_get_values_as_int(const struct gpio_desc *desc_list, int count);
 
 /**
+ * dm_gpio_get_values_as_int_base3() - Create a base-3 int from a list of GPIOs
+ *
+ * This uses pull-ups/pull-downs to figure out whether a GPIO line is externally
+ * pulled down, pulled up or floating. This allows three different strap values
+ * for each pin:
+ *    0 : external pull-down
+ *    1 : external pull-up
+ *    2 : floating
+ *
+ * With this it is possible to obtain more combinations from the same number of
+ * strapping pins, when compared to dm_gpio_get_values_as_int(). The external
+ * pull resistors should be made stronger that the internal SoC pull resistors,
+ * for this to work.
+ *
+ * With 2 pins, 6 combinations are possible, compared with 4
+ * With 3 pins, 27 are possible, compared with 8
+ *
+ * @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_base3(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
@@ -658,17 +707,6 @@ int dm_gpio_get_value(const struct gpio_desc *desc);
 int dm_gpio_set_value(const struct gpio_desc *desc, int value);
 
 /**
- * dm_gpio_set_dir() - Set the direction for a GPIO
- *
- * This sets up the direction according to the GPIO flags: desc->flags.
- *
- * @desc:      GPIO description containing device, offset and flags,
- *             previously returned by gpio_request_by_name()
- * @return 0 if OK, -ve on error
- */
-int dm_gpio_set_dir(struct gpio_desc *desc);
-
-/**
  * dm_gpio_clrset_flags() - Update flags
  *
  * This updates the flags as directled. Note that desc->flags is updated by this
@@ -702,6 +740,21 @@ int dm_gpio_clrset_flags(struct gpio_desc *desc, ulong clr, ulong set);
 int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags);
 
 /**
+ * dm_gpios_clrset_flags() - Sets flags for a set of GPIOs
+ *
+ * This clears and sets flags individually for each GPIO.
+ *
+ * @desc:      List of GPIOs to update
+ * @count:     Number of GPIOs in the list
+ * @clr:       Flags to clear (GPIOD_...), e.g. GPIOD_MASK_DIR if you are
+ *             changing the direction
+ * @set:       Flags to set (GPIOD_...)
+ * @return 0 if OK, -ve on error
+ */
+int dm_gpios_clrset_flags(struct gpio_desc *desc, int count, ulong clr,
+                         ulong set);
+
+/**
  * dm_gpio_get_flags() - Get flags
  *
  * Read the current flags