Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1562910 > unrolled thread
| Started by | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| First post | 2017-01-19 17:50 +0100 |
| Last post | 2017-01-19 20:30 +0100 |
| Articles | 6 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v1 00/10] platform/x86: intel_mid_powerbtn: Fix, clean up, enhance Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-19 17:50 +0100
[PATCH v1 02/10] platform/x86: intel_mid_powerbtn: Convert to use devm_*() Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-19 17:50 +0100
[PATCH v1 05/10] platform/x86: intel_mid_powerbtn: Factor out mfld_ack() Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-19 18:00 +0100
[PATCH v1 01/10] platform/x86: intel_mid_powerbtn: Set IRQ_ONESHOT Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-19 18:30 +0100
[PATCH v1 08/10] platform/x86: intel_mid_powerbtn: Join string literals Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-19 20:30 +0100
[PATCH v1 06/10] platform/x86: intel_mid_powerbtn: Acknowledge interrupts Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-19 20:30 +0100
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-19 17:50 +0100 |
| Subject | [PATCH v1 00/10] platform/x86: intel_mid_powerbtn: Fix, clean up, enhance |
| Message-ID | <t1o4p-3Xc-11@gated-at.bofh.it> |
The series contains 3 groups of patches - fix of the driver regarding interrupt flags - several clean ups - enhancement to enable on Intel Merrifield (Intel Edison board) The driver has been tested on Intel Medfield tablet and Intel Edison board. Andy Shevchenko (10): platform/x86: intel_mid_powerbtn: Set IRQ_ONESHOT platform/x86: intel_mid_powerbtn: Convert to use devm_*() platform/x86: intel_mid_powerbtn: Substitute mfld by mid platform/x86: intel_mid_powerbtn: Introduce driver data platform/x86: intel_mid_powerbtn: Factor out mfld_ack() platform/x86: intel_mid_powerbtn: Acknowledge interrupts platform/x86: intel_mid_powerbtn: Enable driver for Merrifield platform/x86: intel_mid_powerbtn: Join string literals platform/x86: intel_mid_powerbtn: Sort headers alphabetically platform/x86: intel_mid_powerbtn: Remove snail address drivers/platform/x86/intel_mid_powerbtn.c | 225 ++++++++++++++++++++++-------- 1 file changed, 164 insertions(+), 61 deletions(-) -- 2.11.0
[toc] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-19 17:50 +0100 |
| Subject | [PATCH v1 02/10] platform/x86: intel_mid_powerbtn: Convert to use devm_*() |
| Message-ID | <t1o4r-3Xc-63@gated-at.bofh.it> |
| In reply to | #1562910 |
Convert driver to use managed resources.
This eliminates error path boilerplate and makes code neat.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/platform/x86/intel_mid_powerbtn.c | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/drivers/platform/x86/intel_mid_powerbtn.c b/drivers/platform/x86/intel_mid_powerbtn.c
index 361770568ad0..05c52cc87852 100644
--- a/drivers/platform/x86/intel_mid_powerbtn.c
+++ b/drivers/platform/x86/intel_mid_powerbtn.c
@@ -66,7 +66,7 @@ static int mfld_pb_probe(struct platform_device *pdev)
if (irq < 0)
return -EINVAL;
- input = input_allocate_device();
+ input = devm_input_allocate_device(&pdev->dev);
if (!input)
return -ENOMEM;
@@ -77,22 +77,19 @@ static int mfld_pb_probe(struct platform_device *pdev)
input_set_capability(input, EV_KEY, KEY_POWER);
- error = request_threaded_irq(irq, NULL, mfld_pb_isr, IRQF_ONESHOT,
- DRIVER_NAME, input);
+ error = devm_request_threaded_irq(&pdev->dev, irq, NULL, mfld_pb_isr,
+ IRQF_ONESHOT, DRIVER_NAME, input);
if (error) {
dev_err(&pdev->dev, "Unable to request irq %d for mfld power"
"button\n", irq);
- goto err_free_input;
+ return error;
}
- device_init_wakeup(&pdev->dev, true);
- dev_pm_set_wake_irq(&pdev->dev, irq);
-
error = input_register_device(input);
if (error) {
dev_err(&pdev->dev, "Unable to register input dev, error "
"%d\n", error);
- goto err_free_irq;
+ return error;
}
platform_set_drvdata(pdev, input);
@@ -111,27 +108,19 @@ static int mfld_pb_probe(struct platform_device *pdev)
if (error) {
dev_err(&pdev->dev, "Unable to clear power button interrupt, "
"error: %d\n", error);
- goto err_free_irq;
+ return error;
}
- return 0;
+ device_init_wakeup(&pdev->dev, true);
+ dev_pm_set_wake_irq(&pdev->dev, irq);
-err_free_irq:
- free_irq(irq, input);
-err_free_input:
- input_free_device(input);
- return error;
+ return 0;
}
static int mfld_pb_remove(struct platform_device *pdev)
{
- struct input_dev *input = platform_get_drvdata(pdev);
- int irq = platform_get_irq(pdev, 0);
-
dev_pm_clear_wake_irq(&pdev->dev);
device_init_wakeup(&pdev->dev, false);
- free_irq(irq, input);
- input_unregister_device(input);
return 0;
}
--
2.11.0
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-19 18:00 +0100 |
| Subject | [PATCH v1 05/10] platform/x86: intel_mid_powerbtn: Factor out mfld_ack() |
| Message-ID | <t1oe6-40V-25@gated-at.bofh.it> |
| In reply to | #1562910 |
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 | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/drivers/platform/x86/intel_mid_powerbtn.c b/drivers/platform/x86/intel_mid_powerbtn.c
index bce8653cc345..596ac9f3e89d 100644
--- a/drivers/platform/x86/intel_mid_powerbtn.c
+++ b/drivers/platform/x86/intel_mid_powerbtn.c
@@ -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);
--
2.11.0
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-19 18:30 +0100 |
| Subject | [PATCH v1 01/10] platform/x86: intel_mid_powerbtn: Set IRQ_ONESHOT |
| Message-ID | <t1oH8-4qY-33@gated-at.bofh.it> |
| In reply to | #1562910 |
The commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests")
starts refusing misconfigured interrupt handlers. This makes
intel_mid_powerbtn not working anymore.
Add a mandatory flag to a threaded IRQ request in the driver.
Fixes: 1c6c69525b40 ("genirq: Reject bogus threaded irq requests")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/platform/x86/intel_mid_powerbtn.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/platform/x86/intel_mid_powerbtn.c b/drivers/platform/x86/intel_mid_powerbtn.c
index 1fc0de870ff8..361770568ad0 100644
--- a/drivers/platform/x86/intel_mid_powerbtn.c
+++ b/drivers/platform/x86/intel_mid_powerbtn.c
@@ -77,7 +77,7 @@ static int mfld_pb_probe(struct platform_device *pdev)
input_set_capability(input, EV_KEY, KEY_POWER);
- error = request_threaded_irq(irq, NULL, mfld_pb_isr, 0,
+ error = request_threaded_irq(irq, NULL, mfld_pb_isr, IRQF_ONESHOT,
DRIVER_NAME, input);
if (error) {
dev_err(&pdev->dev, "Unable to request irq %d for mfld power"
--
2.11.0
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-19 20:30 +0100 |
| Subject | [PATCH v1 08/10] platform/x86: intel_mid_powerbtn: Join string literals |
| Message-ID | <t1qzg-5Bs-13@gated-at.bofh.it> |
| In reply to | #1562910 |
There is no need and bad practice for debugging to split string
literals. Join them back.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/platform/x86/intel_mid_powerbtn.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/platform/x86/intel_mid_powerbtn.c b/drivers/platform/x86/intel_mid_powerbtn.c
index 12fbf400f228..9b718cf237ee 100644
--- a/drivers/platform/x86/intel_mid_powerbtn.c
+++ b/drivers/platform/x86/intel_mid_powerbtn.c
@@ -130,8 +130,8 @@ static irqreturn_t mid_pb_isr(int irq, void *dev_id)
ret = ddata->pbstat(ddata, &value);
if (ret < 0) {
- dev_err(input->dev.parent, "Read error %d while reading"
- " MSIC_PB_STATUS\n", ret);
+ dev_err(input->dev.parent,
+ "Read error %d while reading MSIC_PB_STATUS\n", ret);
} else {
input_event(input, EV_KEY, KEY_POWER, value);
input_sync(input);
@@ -204,15 +204,15 @@ static int mid_pb_probe(struct platform_device *pdev)
error = devm_request_threaded_irq(&pdev->dev, irq, NULL, mid_pb_isr,
IRQF_ONESHOT, DRIVER_NAME, ddata);
if (error) {
- dev_err(&pdev->dev, "Unable to request irq %d for MID power"
- "button\n", irq);
+ dev_err(&pdev->dev,
+ "Unable to request irq %d for MID power button\n", irq);
return error;
}
error = input_register_device(input);
if (error) {
- dev_err(&pdev->dev, "Unable to register input dev, error "
- "%d\n", error);
+ dev_err(&pdev->dev,
+ "Unable to register input dev, error %d\n", error);
return error;
}
@@ -220,8 +220,9 @@ static int mid_pb_probe(struct platform_device *pdev)
error = ddata->ack(ddata);
if (error) {
- dev_err(&pdev->dev, "Unable to clear power button interrupt, "
- "error: %d\n", error);
+ dev_err(&pdev->dev,
+ "Unable to clear power button interrupt, error: %d\n",
+ error);
return error;
}
--
2.11.0
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-19 20:30 +0100 |
| Subject | [PATCH v1 06/10] platform/x86: intel_mid_powerbtn: Acknowledge interrupts |
| Message-ID | <t1qzg-5Bs-29@gated-at.bofh.it> |
| In reply to | #1562910 |
Some platforms require interrupt to be acknowledged by clearing MSIC_PWRBTNM bit in interrupt level 1 mask register. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/platform/x86/intel_mid_powerbtn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/platform/x86/intel_mid_powerbtn.c b/drivers/platform/x86/intel_mid_powerbtn.c index 596ac9f3e89d..ac02a0b8bef3 100644 --- a/drivers/platform/x86/intel_mid_powerbtn.c +++ b/drivers/platform/x86/intel_mid_powerbtn.c @@ -94,6 +94,7 @@ static irqreturn_t mid_pb_isr(int irq, void *dev_id) input_sync(input); } + ddata->ack(ddata); return IRQ_HANDLED; } -- 2.11.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web