platform/x86: intel_mid_powerbtn: Factor out mfld_ack()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 19 Jan 2017 16:39:44 +0000 (18:39 +0200)
committerDarren Hart <dvhart@linux.intel.com>
Sat, 4 Feb 2017 01:47:22 +0000 (02:47 +0100)
Move Intel Medfield specific code to another callback, which will be
used later.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/platform/x86/intel_mid_powerbtn.c

index bce8653..596ac9f 100644 (file)
@@ -44,6 +44,7 @@ struct mid_pb_ddata {
        int irq;
        struct input_dev *input;
        int (*pbstat)(struct mid_pb_ddata *ddata, int *value);
+       int (*ack)(struct mid_pb_ddata *ddata);
 };
 
 static int mfld_pbstat(struct mid_pb_ddata *ddata, int *value)
@@ -62,6 +63,21 @@ static int mfld_pbstat(struct mid_pb_ddata *ddata, int *value)
        return 0;
 }
 
+static int mfld_ack(struct mid_pb_ddata *ddata)
+{
+       /*
+        * SCU firmware might send power button interrupts to IA core before
+        * kernel boots and doesn't get EOI from IA core. The first bit of
+        * MSIC reg 0x21 is kept masked, and SCU firmware doesn't send new
+        * power interrupt to Android kernel. Unmask the bit when probing
+        * power button in kernel.
+        * There is a very narrow race between irq handler and power button
+        * initialization. The race happens rarely. So we needn't worry
+        * about it.
+        */
+       return intel_msic_reg_update(INTEL_MSIC_IRQLVL1MSK, 0, MSIC_PWRBTNM);
+}
+
 static irqreturn_t mid_pb_isr(int irq, void *dev_id)
 {
        struct mid_pb_ddata *ddata = dev_id;
@@ -83,6 +99,7 @@ static irqreturn_t mid_pb_isr(int irq, void *dev_id)
 
 static struct mid_pb_ddata mfld_ddata = {
        .pbstat = mfld_pbstat,
+       .ack    = mfld_ack,
 };
 
 #define ICPU(model, ddata)     \
@@ -144,17 +161,7 @@ static int mid_pb_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, ddata);
 
-       /*
-        * SCU firmware might send power button interrupts to IA core before
-        * kernel boots and doesn't get EOI from IA core. The first bit of
-        * MSIC reg 0x21 is kept masked, and SCU firmware doesn't send new
-        * power interrupt to Android kernel. Unmask the bit when probing
-        * power button in kernel.
-        * There is a very narrow race between irq handler and power button
-        * initialization. The race happens rarely. So we needn't worry
-        * about it.
-        */
-       error = intel_msic_reg_update(INTEL_MSIC_IRQLVL1MSK, 0, MSIC_PWRBTNM);
+       error = ddata->ack(ddata);
        if (error) {
                dev_err(&pdev->dev, "Unable to clear power button interrupt, "
                                "error: %d\n", error);