These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / pinctrl / pinctrl-adi2.c
index 8434439..fd342df 100644 (file)
@@ -427,10 +427,10 @@ static int adi_gpio_irq_type(struct irq_data *d, unsigned int type)
 
        if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
                writel(pintmask, &pint_regs->edge_set);
-               __irq_set_handler_locked(irq, handle_edge_irq);
+               irq_set_handler_locked(d, handle_edge_irq);
        } else {
                writel(pintmask, &pint_regs->edge_clear);
-               __irq_set_handler_locked(irq, handle_level_irq);
+               irq_set_handler_locked(d, handle_level_irq);
        }
 
 out:
@@ -530,8 +530,7 @@ static inline void preflow_handler(struct irq_desc *desc)
 static inline void preflow_handler(struct irq_desc *desc) { }
 #endif
 
-static void adi_gpio_handle_pint_irq(unsigned int inta_irq,
-                       struct irq_desc *desc)
+static void adi_gpio_handle_pint_irq(struct irq_desc *desc)
 {
        u32 request;
        u32 level_mask, hwirq;
@@ -703,6 +702,7 @@ static struct pinmux_ops adi_pinmux_ops = {
        .get_function_name = adi_pinmux_get_func_name,
        .get_function_groups = adi_pinmux_get_groups,
        .gpio_request_enable = adi_pinmux_request_gpio,
+       .strict = true,
 };
 
 
@@ -713,16 +713,6 @@ static struct pinctrl_desc adi_pinmux_desc = {
        .owner = THIS_MODULE,
 };
 
-static int adi_gpio_request(struct gpio_chip *chip, unsigned offset)
-{
-       return pinctrl_request_gpio(chip->base + offset);
-}
-
-static void adi_gpio_free(struct gpio_chip *chip, unsigned offset)
-{
-       pinctrl_free_gpio(chip->base + offset);
-}
-
 static int adi_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
 {
        struct gpio_port *port;
@@ -864,8 +854,8 @@ static int adi_gpio_pint_probe(struct platform_device *pdev)
        pint->pint_map_port = adi_pint_map_port;
        platform_set_drvdata(pdev, pint);
 
-       irq_set_chained_handler(pint->irq, adi_gpio_handle_pint_irq);
-       irq_set_handler_data(pint->irq, pint);
+       irq_set_chained_handler_and_data(pint->irq, adi_gpio_handle_pint_irq,
+                                        pint);
 
        list_add_tail(&pint->node, &adi_pint_list);
 
@@ -994,8 +984,8 @@ static int adi_gpio_probe(struct platform_device *pdev)
        port->chip.get                  = adi_gpio_get_value;
        port->chip.direction_output     = adi_gpio_direction_output;
        port->chip.set                  = adi_gpio_set_value;
-       port->chip.request              = adi_gpio_request;
-       port->chip.free                 = adi_gpio_free;
+       port->chip.request              = gpiochip_generic_request,
+       port->chip.free                 = gpiochip_generic_free,
        port->chip.to_irq               = adi_gpio_to_irq;
        if (pdata->port_gpio_base > 0)
                port->chip.base         = pdata->port_gpio_base;
@@ -1069,9 +1059,9 @@ static int adi_pinctrl_probe(struct platform_device *pdev)
 
        /* Now register the pin controller and all pins it handles */
        pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl);
-       if (!pinctrl->pctl) {
+       if (IS_ERR(pinctrl->pctl)) {
                dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n");
-               return -EINVAL;
+               return PTR_ERR(pinctrl->pctl);
        }
 
        platform_set_drvdata(pdev, pinctrl);