From: Greg Kroah-Hartman Date: Mon, 16 Nov 2020 10:09:01 +0000 (+0100) Subject: 5.9-stable patches X-Git-Tag: v4.4.244~58 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fbbb89e6b6ad09bd1fcf9b20a232f065a1268e36;p=thirdparty%2Fkernel%2Fstable-queue.git 5.9-stable patches added patches: mfd-sprd-add-wakeup-capability-for-pmic-irq.patch --- diff --git a/queue-5.9/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch b/queue-5.9/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch new file mode 100644 index 00000000000..39236d97157 --- /dev/null +++ b/queue-5.9/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch @@ -0,0 +1,80 @@ +From a75bfc824a2d33f57ebdc003bfe6b7a9e11e9cb9 Mon Sep 17 00:00:00 2001 +From: Baolin Wang +Date: Tue, 18 Aug 2020 11:41:58 +0800 +Subject: mfd: sprd: Add wakeup capability for PMIC IRQ + +From: Baolin Wang + +commit a75bfc824a2d33f57ebdc003bfe6b7a9e11e9cb9 upstream. + +When changing to use suspend-to-idle to save power, the PMIC irq can not +wakeup the system due to lack of wakeup capability, which will cause +the sub-irqs (such as power key) of the PMIC can not wake up the system. +Thus we can add the wakeup capability for PMIC irq to solve this issue, +as well as removing the IRQF_NO_SUSPEND flag to allow PMIC irq to be +a wakeup source. + +Reported-by: Chunyan Zhang +Signed-off-by: Baolin Wang +Tested-by: Chunyan Zhang +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mfd/sprd-sc27xx-spi.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +--- a/drivers/mfd/sprd-sc27xx-spi.c ++++ b/drivers/mfd/sprd-sc27xx-spi.c +@@ -189,7 +189,7 @@ static int sprd_pmic_probe(struct spi_de + ddata->irqs[i].mask = BIT(i); + + ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq, +- IRQF_ONESHOT | IRQF_NO_SUSPEND, 0, ++ IRQF_ONESHOT, 0, + &ddata->irq_chip, &ddata->irq_data); + if (ret) { + dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret); +@@ -202,9 +202,34 @@ static int sprd_pmic_probe(struct spi_de + return ret; + } + ++ device_init_wakeup(&spi->dev, true); + return 0; + } + ++#ifdef CONFIG_PM_SLEEP ++static int sprd_pmic_suspend(struct device *dev) ++{ ++ struct sprd_pmic *ddata = dev_get_drvdata(dev); ++ ++ if (device_may_wakeup(dev)) ++ enable_irq_wake(ddata->irq); ++ ++ return 0; ++} ++ ++static int sprd_pmic_resume(struct device *dev) ++{ ++ struct sprd_pmic *ddata = dev_get_drvdata(dev); ++ ++ if (device_may_wakeup(dev)) ++ disable_irq_wake(ddata->irq); ++ ++ return 0; ++} ++#endif ++ ++static SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops, sprd_pmic_suspend, sprd_pmic_resume); ++ + static const struct of_device_id sprd_pmic_match[] = { + { .compatible = "sprd,sc2731", .data = &sc2731_data }, + {}, +@@ -215,6 +240,7 @@ static struct spi_driver sprd_pmic_drive + .driver = { + .name = "sc27xx-pmic", + .of_match_table = sprd_pmic_match, ++ .pm = &sprd_pmic_pm_ops, + }, + .probe = sprd_pmic_probe, + }; diff --git a/queue-5.9/series b/queue-5.9/series index c9f6825cf3e..cb7249dd0b3 100644 --- a/queue-5.9/series +++ b/queue-5.9/series @@ -124,3 +124,4 @@ i2c-designware-call-i2c_dw_read_clear_intrbits_slave.patch i2c-designware-slave-should-do-write_requested-befor.patch tpm_tis-disable-interrupts-on-thinkpad-t490s.patch spi-bcm2835-remove-use-of-uninitialized-gpio-flags-variable.patch +mfd-sprd-add-wakeup-capability-for-pmic-irq.patch