greybus: gpio-gb: allow it to build properly for all current kernel versions.
authorGreg Kroah-Hartman <greg@kroah.com>
Mon, 20 Oct 2014 05:40:02 +0000 (13:40 +0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Mon, 20 Oct 2014 05:40:02 +0000 (13:40 +0800)
GPIO remove changed the api for 3.17 to try to make up for some
previously foolish design decisions.  Handle that in kernel_ver.h to
make the code simple.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/gpio-gb.c
drivers/staging/greybus/kernel_ver.h

index 7f03676..53464e3 100644 (file)
@@ -799,12 +799,11 @@ out_err:
 void gb_gpio_controller_exit(struct gb_connection *connection)
 {
        struct gb_gpio_controller *gb_gpio_controller = connection->private;
-       int ret;
 
        if (!gb_gpio_controller)
                return;
 
-       ret = gpiochip_remove(&gb_gpio_controller->chip);
+       gb_gpiochip_remove(&gb_gpio_controller->chip);
        /* kref_put(gb_gpio_controller->connection) */
        kfree(gb_gpio_controller);
 }
index c9ea7a9..e0fea18 100644 (file)
 #define U16_MAX        ((u16)(~0U))
 #endif /* !U16_MAX */
 
+/*
+ * The GPIO api sucks rocks in places, like removal, so work around their
+ * explicit requirements of catching the return value for kernels older than
+ * 3.17, which they explicitly changed in the 3.17 kernel.  Consistency is
+ * overrated.
+ */
+#include <linux/version.h>
+#include <linux/gpio.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
+static inline void gb_gpiochip_remove(struct gpio_chip *chip)
+{
+       gpiochip_remove(chip);
+}
+#else
+static inline void gb_gpiochip_remove(struct gpio_chip *chip)
+{
+       int ret;
+       ret = gpiochip_remove(chip);
+}
+#endif
+
 #endif /* __GREYBUS_KERNEL_VER_H */