]> git.sur5r.net Git - u-boot/commitdiff
dm: gpio: Add gpio_requestf() helper for printf() strings
authorSimon Glass <sjg@chromium.org>
Sat, 4 Oct 2014 17:29:49 +0000 (11:29 -0600)
committerSimon Glass <sjg@chromium.org>
Fri, 24 Oct 2014 01:29:52 +0000 (19:29 -0600)
Add a helper which permits a printf()-style format string for the requester
string.

Signed-off-by: Simon Glass <sjg@chromium.org>
doc/driver-model/README.txt
drivers/gpio/gpio-uclass.c
include/asm-generic/gpio.h
test/dm/gpio.c

index 1ff454aeb4bfc9974bf9711fc32e68db762ebb0f..f4395c188afb3437cbd86f0321000b71e2c91db6 100644 (file)
@@ -95,7 +95,7 @@ are provided in test/dm. To run them, try:
 You should see something like this:
 
     <...U-Boot banner...>
-    Running 26 driver model tests
+    Running 27 driver model tests
     Test: dm_test_autobind
     Test: dm_test_autoprobe
     Test: dm_test_bus_children
@@ -117,6 +117,7 @@ You should see something like this:
     Test: dm_test_gpio
     extra-gpios: get_value: error: gpio b5 not reserved
     Test: dm_test_gpio_anon
+    Test: dm_test_gpio_requestf
     Test: dm_test_leak
     Test: dm_test_lifecycle
     Test: dm_test_operations
index 636709321091179d11ee4d865f783ae480ce5583..45e9a5ad2278378814b7351c5d70dd5c53fbf287 100644 (file)
@@ -130,6 +130,27 @@ int gpio_request(unsigned gpio, const char *label)
        return 0;
 }
 
+/**
+ * gpio_requestf() - [COMPAT] Request GPIO
+ * @gpio:      GPIO number
+ * @fmt:       Format string for the requested GPIO
+ * @...:       Arguments for the printf() format string
+ *
+ * This function implements the API that's compatible with current
+ * GPIO API used in U-Boot. The request is forwarded to particular
+ * GPIO driver. Returns 0 on success, negative value on error.
+ */
+int gpio_requestf(unsigned gpio, const char *fmt, ...)
+{
+       va_list args;
+       char buf[40];
+
+       va_start(args, fmt);
+       vscnprintf(buf, sizeof(buf), fmt, args);
+       va_end(args);
+       return gpio_request(gpio, buf);
+}
+
 /**
  * gpio_free() - [COMPAT] Relinquish GPIO
  * gpio:       GPIO number
index 693bb56f77e2d1dd559950465703dd092905ebdd..8af760e7770cb6012c31e4fb90c7e6a42e168a2e 100644 (file)
@@ -145,6 +145,16 @@ int gpio_get_function(struct udevice *dev, int offset, const char **namep);
  */
 int gpio_get_raw_function(struct udevice *dev, int offset, const char **namep);
 
+/**
+ * gpio_requestf() - request a GPIO using a format string for the owner
+ *
+ * This is a helper function for gpio_request(). It allows you to provide
+ * a printf()-format string for the GPIO owner. It calls gpio_request() with
+ * the string that is created
+ */
+int gpio_requestf(unsigned gpio, const char *fmt, ...)
+               __attribute__ ((format (__printf__, 2, 3)));
+
 /**
  * struct struct dm_gpio_ops - Driver model GPIO operations
  *
index ad56ca5fabd6304ccff1804055534b39fed003eb..5174cede2478669e8b4840ef4822a7b3d6bfd0bd 100644 (file)
@@ -120,3 +120,21 @@ static int dm_test_gpio_anon(struct dm_test_state *dms)
        return 0;
 }
 DM_TEST(dm_test_gpio_anon, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
+/* Test that gpio_requestf() works as expected */
+static int dm_test_gpio_requestf(struct dm_test_state *dms)
+{
+       unsigned int offset, gpio;
+       struct udevice *dev;
+       char buf[80];
+
+       ut_assertok(gpio_lookup_name("b5", &dev, &offset, &gpio));
+       ut_assertok(gpio_requestf(gpio, "testing %d %s", 1, "hi"));
+       sandbox_gpio_set_direction(dev, offset, 1);
+       sandbox_gpio_set_value(dev, offset, 1);
+       ut_assertok(gpio_get_status(dev, offset, buf, sizeof(buf)));
+       ut_asserteq_str("b5: output: 1 [x] testing 1 hi", buf);
+
+       return 0;
+}
+DM_TEST(dm_test_gpio_requestf, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);