* @desc: gpio descriptor whose state need to be set.
  * @value: Non-zero for setting it HIGH otherwise it will set to LOW.
  */
-static void gpio_set_open_drain_value_commit(struct gpio_desc *desc, bool value)
+static int gpio_set_open_drain_value_commit(struct gpio_desc *desc, bool value)
 {
        int ret = 0, offset = gpio_chip_hwgpio(desc);
 
        CLASS(gpio_chip_guard, guard)(desc);
        if (!guard.gc)
-               return;
+               return -ENODEV;
 
        if (value) {
                ret = gpiochip_direction_input(guard.gc, offset);
                gpiod_err(desc,
                          "%s: Error in set_value for open drain err %d\n",
                          __func__, ret);
+
+       return ret;
 }
 
 /*
  * @desc: gpio descriptor whose state need to be set.
  * @value: Non-zero for setting it HIGH otherwise it will set to LOW.
  */
-static void gpio_set_open_source_value_commit(struct gpio_desc *desc, bool value)
+static int gpio_set_open_source_value_commit(struct gpio_desc *desc, bool value)
 {
        int ret = 0, offset = gpio_chip_hwgpio(desc);
 
        CLASS(gpio_chip_guard, guard)(desc);
        if (!guard.gc)
-               return;
+               return -ENODEV;
 
        if (value) {
                ret = gpiochip_direction_output(guard.gc, offset, 1);
                gpiod_err(desc,
                          "%s: Error in set_value for open source err %d\n",
                          __func__, ret);
+
+       return ret;
 }
 
-static void gpiod_set_raw_value_commit(struct gpio_desc *desc, bool value)
+static int gpiod_set_raw_value_commit(struct gpio_desc *desc, bool value)
 {
        CLASS(gpio_chip_guard, guard)(desc);
        if (!guard.gc)
-               return;
+               return -ENODEV;
 
        trace_gpio_value(desc_to_gpio(desc), 0, value);
        guard.gc->set(guard.gc, gpio_chip_hwgpio(desc), value);
+
+       return 0;
 }
 
 /*
  * This function can be called from contexts where we cannot sleep, and will
  * complain if the GPIO chip functions potentially sleep.
  */
-void gpiod_set_raw_value(struct gpio_desc *desc, int value)
+int gpiod_set_raw_value(struct gpio_desc *desc, int value)
 {
-       VALIDATE_DESC_VOID(desc);
+       VALIDATE_DESC(desc);
        /* Should be using gpiod_set_raw_value_cansleep() */
        WARN_ON(desc->gdev->can_sleep);
-       gpiod_set_raw_value_commit(desc, value);
+       return gpiod_set_raw_value_commit(desc, value);
 }
 EXPORT_SYMBOL_GPL(gpiod_set_raw_value);
 
  * different semantic quirks like active low and open drain/source
  * handling.
  */
-static void gpiod_set_value_nocheck(struct gpio_desc *desc, int value)
+static int gpiod_set_value_nocheck(struct gpio_desc *desc, int value)
 {
        if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
                value = !value;
+
        if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
-               gpio_set_open_drain_value_commit(desc, value);
+               return gpio_set_open_drain_value_commit(desc, value);
        else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
-               gpio_set_open_source_value_commit(desc, value);
-       else
-               gpiod_set_raw_value_commit(desc, value);
+               return gpio_set_open_source_value_commit(desc, value);
+
+       return gpiod_set_raw_value_commit(desc, value);
 }
 
 /**
  * This function can be called from contexts where we cannot sleep, and will
  * complain if the GPIO chip functions potentially sleep.
  */
-void gpiod_set_value(struct gpio_desc *desc, int value)
+int gpiod_set_value(struct gpio_desc *desc, int value)
 {
-       VALIDATE_DESC_VOID(desc);
+       VALIDATE_DESC(desc);
        /* Should be using gpiod_set_value_cansleep() */
        WARN_ON(desc->gdev->can_sleep);
-       gpiod_set_value_nocheck(desc, value);
+       return gpiod_set_value_nocheck(desc, value);
 }
 EXPORT_SYMBOL_GPL(gpiod_set_value);
 
  *
  * This function is to be called from contexts that can sleep.
  */
-void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)
+int gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)
 {
        might_sleep();
-       VALIDATE_DESC_VOID(desc);
-       gpiod_set_raw_value_commit(desc, value);
+       VALIDATE_DESC(desc);
+       return gpiod_set_raw_value_commit(desc, value);
 }
 EXPORT_SYMBOL_GPL(gpiod_set_raw_value_cansleep);
 
  *
  * This function is to be called from contexts that can sleep.
  */
-void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
+int gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
 {
        might_sleep();
-       VALIDATE_DESC_VOID(desc);
-       gpiod_set_value_nocheck(desc, value);
+       VALIDATE_DESC(desc);
+       return gpiod_set_value_nocheck(desc, value);
 }
 EXPORT_SYMBOL_GPL(gpiod_set_value_cansleep);
 
 
                          struct gpio_desc **desc_array,
                          struct gpio_array *array_info,
                          unsigned long *value_bitmap);
-void gpiod_set_value(struct gpio_desc *desc, int value);
+int gpiod_set_value(struct gpio_desc *desc, int value);
 int gpiod_set_array_value(unsigned int array_size,
                          struct gpio_desc **desc_array,
                          struct gpio_array *array_info,
                              struct gpio_desc **desc_array,
                              struct gpio_array *array_info,
                              unsigned long *value_bitmap);
-void gpiod_set_raw_value(struct gpio_desc *desc, int value);
+int gpiod_set_raw_value(struct gpio_desc *desc, int value);
 int gpiod_set_raw_array_value(unsigned int array_size,
                              struct gpio_desc **desc_array,
                              struct gpio_array *array_info,
                                   struct gpio_desc **desc_array,
                                   struct gpio_array *array_info,
                                   unsigned long *value_bitmap);
-void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
+int gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
 int gpiod_set_array_value_cansleep(unsigned int array_size,
                                   struct gpio_desc **desc_array,
                                   struct gpio_array *array_info,
                                       struct gpio_desc **desc_array,
                                       struct gpio_array *array_info,
                                       unsigned long *value_bitmap);
-void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
+int gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
 int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
                                       struct gpio_desc **desc_array,
                                       struct gpio_array *array_info,
        WARN_ON(desc_array);
        return 0;
 }
-static inline void gpiod_set_value(struct gpio_desc *desc, int value)
+static inline int gpiod_set_value(struct gpio_desc *desc, int value)
 {
        /* GPIO can never have been requested */
        WARN_ON(desc);
+       return 0;
 }
 static inline int gpiod_set_array_value(unsigned int array_size,
                                        struct gpio_desc **desc_array,
        WARN_ON(desc_array);
        return 0;
 }
-static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
+static inline int gpiod_set_raw_value(struct gpio_desc *desc, int value)
 {
        /* GPIO can never have been requested */
        WARN_ON(desc);
+       return 0;
 }
 static inline int gpiod_set_raw_array_value(unsigned int array_size,
                                            struct gpio_desc **desc_array,
        WARN_ON(desc_array);
        return 0;
 }
-static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
+static inline int gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
 {
        /* GPIO can never have been requested */
        WARN_ON(desc);
+       return 0;
 }
 static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
                                            struct gpio_desc **desc_array,
        WARN_ON(desc_array);
        return 0;
 }
-static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
-                                               int value)
+static inline int gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
+                                              int value)
 {
        /* GPIO can never have been requested */
        WARN_ON(desc);
+       return 0;
 }
 static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
                                                struct gpio_desc **desc_array,