[U-Boot] [PATCH 4/8] gpio: Provide dummy get/request & is_valid functions
Paul Burton
paul.burton at mips.com
Tue Nov 21 20:33:43 UTC 2017
Allow for drivers to make use of driver model GPIOs when they're enabled
& available without needing to #ifdef on CONFIG_DM_GPIO by providing
dummy functions covering GPIO requests. Each will simply return -ENODEV
or -EINVAL, depending upon which the real implementation returns when a
GPIO isn't found. Only the driver model versions of the GPIO request
functions are covered & dm_gpio_request is excluded since it's
documented as only being of use for debugging, so drivers shouldn't be
calling it anyway.
Also provide a dummy dm_gpio_is_valid, with the idea that all other GPIO
functions called would be within an if (dm_gpio_is_valid(...)) statement
and have been optimised out in cases where that returns a compile-time
constant false.
This parallels the clock API, keeping the #ifdefs & checks in a single
location allowing drivers or other code to use GPIOs without needing to
perform such checks themselves.
Signed-off-by: Paul Burton <paul.burton at imgtec.com>
Cc: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
Cc: Simon Glass <sjg at chromium.org>
Cc: u-boot at lists.denx.de
Signed-off-by: Paul Burton <paul.burton at mips.com>
---
include/asm-generic/gpio.h | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h
index bf230c15ba..7f1f9031ff 100644
--- a/include/asm-generic/gpio.h
+++ b/include/asm-generic/gpio.h
@@ -139,6 +139,9 @@ struct gpio_desc {
*/
static inline bool dm_gpio_is_valid(const struct gpio_desc *desc)
{
+ if (!IS_ENABLED(CONFIG_DM_GPIO))
+ return false;
+
return desc->dev != NULL;
}
@@ -346,7 +349,14 @@ const char *gpio_get_bank_info(struct udevice *dev, int *offset_count);
* @desc: Returns description, on success
* @return 0 if OK, -ve on error
*/
+#ifdef CONFIG_DM_GPIO
int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc);
+#else
+static inline int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc)
+{
+ return -EINVAL;
+}
+#endif
/**
* gpio_lookup_name - Look up a GPIO name and return its details
@@ -359,8 +369,17 @@ int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc);
* @offsetp: Returns the offset number within this device
* @gpiop: Returns the absolute GPIO number, numbered from 0
*/
+#ifdef CONFIG_DM_GPIO
int gpio_lookup_name(const char *name, struct udevice **devp,
unsigned int *offsetp, unsigned int *gpiop);
+#else
+static inline int
+gpio_lookup_name(const char *name, struct udevice **devp,
+ unsigned int *offsetp, unsigned int *gpiop)
+{
+ return -EINVAL;
+}
+#endif
/**
* gpio_get_values_as_int() - Turn the values of a list of GPIOs into an int
@@ -431,8 +450,17 @@ int gpio_claim_vector(const int *gpio_num_array, const char *fmt);
* something wrong with the list, or other -ve for another error (e.g.
* -EBUSY if a GPIO was already requested)
*/
+#ifdef CONFIG_DM_GPIO
int gpio_request_by_name(struct udevice *dev, const char *list_name,
int index, struct gpio_desc *desc, int flags);
+#else
+static inline int
+gpio_request_by_name(struct udevice *dev, const char *list_name,
+ int index, struct gpio_desc *desc, int flags)
+{
+ return -ENOENT;
+}
+#endif
/**
* gpio_request_list_by_name() - Request a list of GPIOs
@@ -455,9 +483,19 @@ int gpio_request_by_name(struct udevice *dev, const char *list_name,
* @flags: Indicates the GPIO input/output settings (GPIOD_...)
* @return number of GPIOs requested, or -ve on error
*/
+#ifdef CONFIG_DM_GPIO
int gpio_request_list_by_name(struct udevice *dev, const char *list_name,
struct gpio_desc *desc_list, int max_count,
int flags);
+#else
+static inline int
+gpio_request_list_by_name(struct udevice *dev, const char *list_name,
+ struct gpio_desc *desc_list, int max_count,
+ int flags)
+{
+ return -ENOENT;
+}
+#endif
/**
* dm_gpio_request() - manually request a GPIO
--
2.15.0
More information about the U-Boot
mailing list