These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / pinctrl / pinctrl-single.c
index 13b45f2..ef04b96 100644 (file)
@@ -1679,12 +1679,12 @@ static irqreturn_t pcs_irq_handler(int irq, void *d)
  * Use this if you have a separate interrupt for each
  * pinctrl-single instance.
  */
-static void pcs_irq_chain_handler(unsigned int irq, struct irq_desc *desc)
+static void pcs_irq_chain_handler(struct irq_desc *desc)
 {
        struct pcs_soc_data *pcs_soc = irq_desc_get_handler_data(desc);
        struct irq_chip *chip;
 
-       chip = irq_get_chip(irq);
+       chip = irq_desc_get_chip(desc);
        chained_irq_enter(chip, desc);
        pcs_irq_handle(pcs_soc);
        /* REVISIT: export and add handle_bad_irq(irq, desc)? */
@@ -1716,17 +1716,12 @@ static int pcs_irqdomain_map(struct irq_domain *d, unsigned int irq,
        irq_set_chip_data(irq, pcs_soc);
        irq_set_chip_and_handler(irq, &pcs->chip,
                                 handle_level_irq);
-
-#ifdef CONFIG_ARM
-       set_irq_flags(irq, IRQF_VALID);
-#else
        irq_set_noprobe(irq);
-#endif
 
        return 0;
 }
 
-static struct irq_domain_ops pcs_irqdomain_ops = {
+static const struct irq_domain_ops pcs_irqdomain_ops = {
        .map = pcs_irqdomain_map,
        .xlate = irq_domain_xlate_onecell,
 };
@@ -1760,16 +1755,17 @@ static int pcs_irq_init_chained_handler(struct pcs_device *pcs,
                int res;
 
                res = request_irq(pcs_soc->irq, pcs_irq_handler,
-                                 IRQF_SHARED | IRQF_NO_SUSPEND,
+                                 IRQF_SHARED | IRQF_NO_SUSPEND |
+                                 IRQF_NO_THREAD,
                                  name, pcs_soc);
                if (res) {
                        pcs_soc->irq = -1;
                        return res;
                }
        } else {
-               irq_set_handler_data(pcs_soc->irq, pcs_soc);
-               irq_set_chained_handler(pcs_soc->irq,
-                                       pcs_irq_chain_handler);
+               irq_set_chained_handler_and_data(pcs_soc->irq,
+                                                pcs_irq_chain_handler,
+                                                pcs_soc);
        }
 
        /*
@@ -1921,9 +1917,9 @@ static int pcs_probe(struct platform_device *pdev)
                goto free;
 
        pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs);
-       if (!pcs->pctl) {
+       if (IS_ERR(pcs->pctl)) {
                dev_err(pcs->dev, "could not register single pinctrl driver\n");
-               ret = -EINVAL;
+               ret = PTR_ERR(pcs->pctl);
                goto free;
        }
 
@@ -1982,7 +1978,6 @@ static const struct pcs_soc_data pinctrl_single_omap_wkup = {
 };
 
 static const struct pcs_soc_data pinctrl_single_dra7 = {
-       .flags = PCS_QUIRK_SHARED_IRQ,
        .irq_enable_mask = (1 << 24),   /* WAKEUPENABLE */
        .irq_status_mask = (1 << 25),   /* WAKEUPEVENT */
 };