aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2017-07-11 23:09:09 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-07-12 07:20:17 -0400
commit662591461c4b9a1e3b9b159dbf37648a585ebaae (patch)
treee31be7974fd80790c618f173aa63efd9d6d714b8
parentef75040ab7f179c30f084653c93bc0bbdbcaf17a (diff)
ACPI / EC: Drop EC noirq hooks to fix a regression
According to bug reports, although the busy polling mode can make noirq stages execute faster, it causes abnormal fan blowing up after system resume (see the first link below for a video demonstration) on Lenovo ThinkPad X1 Carbon - the 5th Generation. The problem can be fixed by upgrading the EC firmware on that machine. However, many reporters confirm that the problem can be fixed by stopping busy polling during suspend/resume and for some of them upgrading the EC firmware is not an option. For this reason, drop the noirq stage hooks from the EC driver to fix the regression. Fixes: c3a696b6e8f8 (ACPI / EC: Use busy polling mode when GPE is not enabled) Link: https://youtu.be/9NQ9x-Jm99Q Link: https://bugzilla.kernel.org/show_bug.cgi?id=196129 Reported-by: Andreas Lindhe <andreas@lindhe.io> Tested-by: Gjorgji Jankovski <j.gjorgji@gmail.com> Tested-by: Damjan Georgievski <gdamjan@gmail.com> Tested-by: Fernando Chaves <nanochaves@gmail.com> Tested-by: Tomislav Ivek <tomislav.ivek@gmail.com> Tested-by: Denis P. <theoriginal.skullburner@gmail.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Cc: All applicable <stable@vger.kernel.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/acpi/ec.c19
1 files changed, 0 insertions, 19 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 77c18a5547ed..b65016f1f624 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1870,24 +1870,6 @@ error:
1870} 1870}
1871 1871
1872#ifdef CONFIG_PM_SLEEP 1872#ifdef CONFIG_PM_SLEEP
1873static int acpi_ec_suspend_noirq(struct device *dev)
1874{
1875 struct acpi_ec *ec =
1876 acpi_driver_data(to_acpi_device(dev));
1877
1878 acpi_ec_enter_noirq(ec);
1879 return 0;
1880}
1881
1882static int acpi_ec_resume_noirq(struct device *dev)
1883{
1884 struct acpi_ec *ec =
1885 acpi_driver_data(to_acpi_device(dev));
1886
1887 acpi_ec_leave_noirq(ec);
1888 return 0;
1889}
1890
1891static int acpi_ec_suspend(struct device *dev) 1873static int acpi_ec_suspend(struct device *dev)
1892{ 1874{
1893 struct acpi_ec *ec = 1875 struct acpi_ec *ec =
@@ -1909,7 +1891,6 @@ static int acpi_ec_resume(struct device *dev)
1909#endif 1891#endif
1910 1892
1911static const struct dev_pm_ops acpi_ec_pm = { 1893static const struct dev_pm_ops acpi_ec_pm = {
1912 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend_noirq, acpi_ec_resume_noirq)
1913 SET_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend, acpi_ec_resume) 1894 SET_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend, acpi_ec_resume)
1914}; 1895};
1915 1896