mfd: pm8921: Update for genirq changes
authorStephen Boyd <sboyd@codeaurora.org>
Wed, 26 Feb 2014 18:59:20 +0000 (10:59 -0800)
committerLee Jones <lee.jones@linaro.org>
Wed, 19 Mar 2014 08:58:29 +0000 (08:58 +0000)
Since this code has been marked broken for some time a few genirq
tree wide changes weren't made. set_irq_wake() was renamed to
irq_set_irq_wake() in commit a0cd9ca2b (genirq: Namespace
cleanup, 2011-02-10) and commit 10a8c383 (irq: introduce entry
and exit functions for chained handlers) introduced the chained
irq functions but this driver wasn't updated to use them. Fix
these problems and remove the BROKEN marking on this driver.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/Kconfig
drivers/mfd/pm8921-core.c

index 001668d8895fbacf8800a173cb0caf192e99231c..650c90f814ff20fb576f2838f9c7b7999147c291 100644 (file)
@@ -479,7 +479,6 @@ config MFD_PM8XXX
 config MFD_PM8921_CORE
        tristate "Qualcomm PM8921 PMIC chip"
        depends on (ARCH_MSM || HEXAGON)
-       depends on BROKEN
        select MFD_CORE
        select MFD_PM8XXX
        help
index 50e0a9b69b9dac2ef9d8fd1e881a4af9d13c52d6..9ddc31f7a71df0400b2a17d733f3dd2a47962d31 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
+#include <linux/irqchip/chained_irq.h>
 #include <linux/irq.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
@@ -174,6 +175,8 @@ static void pm8xxx_irq_handler(unsigned int irq, struct irq_desc *desc)
        u8      root;
        int     i, ret, masters = 0;
 
+       chained_irq_enter(irq_chip, desc);
+
        ret = pm8xxx_read_root_irq(chip, &root);
        if (ret) {
                pr_err("Can't read root status ret=%d\n", ret);
@@ -188,7 +191,7 @@ static void pm8xxx_irq_handler(unsigned int irq, struct irq_desc *desc)
                if (masters & (1 << i))
                        pm8xxx_irq_master_handler(chip, i);
 
-       irq_chip->irq_ack(&desc->irq_data);
+       chained_irq_exit(irq_chip, desc);
 }
 
 static void pm8xxx_irq_mask_ack(struct irq_data *d)
@@ -367,7 +370,7 @@ static struct pm_irq_chip *pm8xxx_irq_init(struct device *dev,
        irq_set_irq_type(devirq, pdata->irq_trigger_flag);
        irq_set_handler_data(devirq, chip);
        irq_set_chained_handler(devirq, pm8xxx_irq_handler);
-       set_irq_wake(devirq, 1);
+       irq_set_irq_wake(devirq, 1);
 
        return chip;
 }