Author: hauke
Date: 2015-07-26 17:52:17 +0200 (Sun, 26 Jul 2015)
New Revision: 46502

Modified:
   trunk/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c
Log:
gpio-button-hotplug: handle EPROBE_DEFER and other errors

of_get_gpio_flags() could return an error like EPROBE_DEFER which was
not handled before. This patch takes the code from gpio_keys_polled.c
for error handling and also improves some other unrelated small parts.

Signed-off-by: Hauke Mehrtens <[email protected]>


Modified: trunk/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c
===================================================================
--- trunk/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c  
2015-07-26 15:51:59 UTC (rev 46501)
+++ trunk/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c  
2015-07-26 15:52:17 UTC (rev 46502)
@@ -101,8 +101,8 @@
 
 /* -------------------------------------------------------------------------*/
 
-static int bh_event_add_var(struct bh_event *event, int argv,
-               const char *format, ...)
+static __printf(3, 4)
+int bh_event_add_var(struct bh_event *event, int argv, const char *format, ...)
 {
        static char buf[128];
        char *s;
@@ -117,8 +117,7 @@
        va_end(args);
 
        if (len >= sizeof(buf)) {
-               BH_ERR("buffer size too small\n");
-               WARN_ON(1);
+               WARN(1, "buffer size too small");
                return -ENOMEM;
        }
 
@@ -384,7 +383,18 @@
                button = &pdata->buttons[i++];
 
                button->gpio = of_get_gpio_flags(pp, 0, &flags);
-               button->active_low = flags & OF_GPIO_ACTIVE_LOW;
+               if (button->gpio < 0) {
+                       error = button->gpio;
+                       if (error != -ENOENT) {
+                               if (error != -EPROBE_DEFER)
+                                       dev_err(dev,
+                                               "Failed to get gpio flags, 
error: %d\n",
+                                               error);
+                               return ERR_PTR(error);
+                       }
+               } else {
+                       button->active_low = flags & OF_GPIO_ACTIVE_LOW;
+               }
 
                if (of_property_read_u32(pp, "linux,code", &button->code)) {
                        dev_err(dev, "Button without keycode: 0x%x\n",
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to