]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/gpio/gpiolib.c
Merge tag 'char-misc-4.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregk...
[karo-tx-linux.git] / drivers / gpio / gpiolib.c
index 3ce2a27ee78fa6fb07a2ca084464b306c7f27a57..5db44139cef8ca93af47b18f03c50b28b8893c8c 100644 (file)
@@ -1515,7 +1515,7 @@ static bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip,
  */
 static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
                                          struct irq_chip *irqchip,
-                                         int parent_irq,
+                                         unsigned int parent_irq,
                                          irq_flow_handler_t parent_handler)
 {
        unsigned int offset;
@@ -1564,7 +1564,7 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
  */
 void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
                                  struct irq_chip *irqchip,
-                                 int parent_irq,
+                                 unsigned int parent_irq,
                                  irq_flow_handler_t parent_handler)
 {
        gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq,
@@ -1581,7 +1581,7 @@ EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
  */
 void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
                                 struct irq_chip *irqchip,
-                                int parent_irq)
+                                unsigned int parent_irq)
 {
        if (!gpiochip->irq_nested) {
                chip_err(gpiochip, "tried to nest a chained gpiochip\n");
@@ -3115,10 +3115,10 @@ static int dt_gpio_count(struct device *dev, const char *con_id)
                                 gpio_suffixes[i]);
 
                ret = of_gpio_named_count(dev->of_node, propname);
-               if (ret >= 0)
+               if (ret > 0)
                        break;
        }
-       return ret;
+       return ret ? ret : -ENOENT;
 }
 
 static int platform_gpio_count(struct device *dev, const char *con_id)
@@ -3319,7 +3319,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_index);
  * underlying firmware interface and then makes sure that the GPIO
  * descriptor is requested before it is returned to the caller.
  *
- * On successfull request the GPIO pin is configured in accordance with
+ * On successful request the GPIO pin is configured in accordance with
  * provided @dflags.
  *
  * In case of error an ERR_PTR() is returned.
@@ -3333,6 +3333,7 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
        unsigned long lflags = 0;
        bool active_low = false;
        bool single_ended = false;
+       bool open_drain = false;
        int ret;
 
        if (!fwnode)
@@ -3346,6 +3347,7 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
                if (!IS_ERR(desc)) {
                        active_low = flags & OF_GPIO_ACTIVE_LOW;
                        single_ended = flags & OF_GPIO_SINGLE_ENDED;
+                       open_drain = flags & OF_GPIO_OPEN_DRAIN;
                }
        } else if (is_acpi_node(fwnode)) {
                struct acpi_gpio_info info;
@@ -3366,7 +3368,7 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
                lflags |= GPIO_ACTIVE_LOW;
 
        if (single_ended) {
-               if (active_low)
+               if (open_drain)
                        lflags |= GPIO_OPEN_DRAIN;
                else
                        lflags |= GPIO_OPEN_SOURCE;