diff options
author | Hans de Goede <hdegoede@redhat.com> | 2018-01-04 09:58:12 +0100 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2018-01-04 10:03:46 +0100 |
commit | b5cf2a10ddc784456e8600fd8a5be116ff542c1d (patch) | |
tree | 1272b31c8172c311c499c2a0c16a474218ff14e9 | |
parent | b23e66e346b64c865e98a5895087ace50ccf5de9 (diff) | |
download | kernel-b5cf2a10ddc784456e8600fd8a5be116ff542c1d.tar.gz kernel-b5cf2a10ddc784456e8600fd8a5be116ff542c1d.tar.xz kernel-b5cf2a10ddc784456e8600fd8a5be116ff542c1d.zip |
Add a patch to filter false positive kbd backlight change events (#1514969)
Add a patch to disable runtime-pm for QCA bluetooth devices (#1514836)
-rw-r--r-- | 0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch | 47 | ||||
-rw-r--r-- | 0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch | 99 | ||||
-rw-r--r-- | kernel.spec | 10 |
3 files changed, 156 insertions, 0 deletions
diff --git a/0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch b/0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch new file mode 100644 index 000000000..cc1af2ceb --- /dev/null +++ b/0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch @@ -0,0 +1,47 @@ +From a5ffa27c07e06900fcfc50b08de6d11e45830168 Mon Sep 17 00:00:00 2001 +From: Hans de Goede <hdegoede@redhat.com> +Date: Wed, 3 Jan 2018 12:49:44 +0100 +Subject: [PATCH v2] Bluetooth: btusb: Disable autosuspend on QCA Rome devices + +Commit fd865802c66b ("Bluetooth: btusb: fix QCA Rome suspend/resume") fixes +a suspend/resume problem on QCA devices by doing a full reset on resume, +reloading the firmware. + +A similar problem happens when using runtime-pm / autosuspend, when this is +enabled by the user the QCA Rome device stops working. Reloading the +firmware after a runtime suspend is not really an option since the latency +caused by this is unacceptable. + +To fix the runtime-pm issues, this commit disables runtime-pm on QCA Rome +HCIs, by getting (and not releasing) an usb autopm reference on the btusb +interface. + +BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836 +Signed-off-by: Hans de Goede <hdegoede@redhat.com> +--- + drivers/bluetooth/btusb.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c +index 808c249845db..6ed3a0e5b8f6 100644 +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -3122,8 +3122,15 @@ static int btusb_probe(struct usb_interface *intf, + /* QCA Rome devices lose their updated firmware over suspend, + * but the USB hub doesn't notice any status change. + * Explicitly request a device reset on resume. ++ * And disable runtime pm by getting a pm reference, the USB ++ * core will drop our reference on disconnect. + */ + set_bit(BTUSB_RESET_RESUME, &data->flags); ++ err = usb_autopm_get_interface(data->intf); ++ if (err < 0) { ++ BT_ERR("failed to get pm reference %d", err); ++ goto out_free_dev; ++ } + } + + #ifdef CONFIG_BT_HCIBTUSB_RTL +-- +2.14.3 + diff --git a/0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch b/0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch new file mode 100644 index 000000000..926487b3d --- /dev/null +++ b/0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch @@ -0,0 +1,99 @@ +From 714fe15daa07e7691c9731c88de71aa57f84b6c2 Mon Sep 17 00:00:00 2001 +From: Hans de Goede <hdegoede@redhat.com> +Date: Wed, 3 Jan 2018 11:13:54 +0100 +Subject: [PATCH] platform/x86: dell-laptop: Filter out spurious keyboard + backlight change events + +On some Dell XPS models WMI events of type 0x0000 reporting a keycode of +0xe00c get reported when the brightness of the LCD panel changes. + +This leads to us reporting false-positive kbd_led change events to +userspace which in turn leads to the kbd backlight OSD showing when it +should not. + +We already read the current keyboard backlight brightness value when +reporting events because the led_classdev_notify_brightness_hw_changed +API requires this. Compare this value to the last known value and filter +out duplicate events, fixing this. + +Note the fixed issue is esp. a problem on XPS models with an ambient light +sensor and automatic brightness adjustments turned on, this causes the kbd +backlight OSD to show all the time there. + +BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514969 +Signed-off-by: Hans de Goede <hdegoede@redhat.com> +--- + drivers/platform/x86/dell-laptop.c | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c +index cd4725e7e0b5..2ef3297a9efc 100644 +--- a/drivers/platform/x86/dell-laptop.c ++++ b/drivers/platform/x86/dell-laptop.c +@@ -1133,6 +1133,7 @@ static u8 kbd_previous_mode_bit; + + static bool kbd_led_present; + static DEFINE_MUTEX(kbd_led_mutex); ++static enum led_brightness kbd_led_level; + + /* + * NOTE: there are three ways to set the keyboard backlight level. +@@ -1947,6 +1948,7 @@ static enum led_brightness kbd_led_level_get(struct led_classdev *led_cdev) + static int kbd_led_level_set(struct led_classdev *led_cdev, + enum led_brightness value) + { ++ enum led_brightness new_value = value; + struct kbd_state state; + struct kbd_state new_state; + u16 num; +@@ -1976,6 +1978,9 @@ static int kbd_led_level_set(struct led_classdev *led_cdev, + } + + out: ++ if (ret == 0) ++ kbd_led_level = new_value; ++ + mutex_unlock(&kbd_led_mutex); + return ret; + } +@@ -2003,6 +2008,9 @@ static int __init kbd_led_init(struct device *dev) + if (kbd_led.max_brightness) + kbd_led.max_brightness--; + } ++ ++ kbd_led_level = kbd_led_level_get(NULL); ++ + ret = led_classdev_register(dev, &kbd_led); + if (ret) + kbd_led_present = false; +@@ -2027,13 +2035,25 @@ static void kbd_led_exit(void) + static int dell_laptop_notifier_call(struct notifier_block *nb, + unsigned long action, void *data) + { ++ bool changed = false; ++ enum led_brightness new_kbd_led_level; ++ + switch (action) { + case DELL_LAPTOP_KBD_BACKLIGHT_BRIGHTNESS_CHANGED: + if (!kbd_led_present) + break; + +- led_classdev_notify_brightness_hw_changed(&kbd_led, +- kbd_led_level_get(&kbd_led)); ++ mutex_lock(&kbd_led_mutex); ++ new_kbd_led_level = kbd_led_level_get(&kbd_led); ++ if (kbd_led_level != new_kbd_led_level) { ++ kbd_led_level = new_kbd_led_level; ++ changed = true; ++ } ++ mutex_unlock(&kbd_led_mutex); ++ ++ if (changed) ++ led_classdev_notify_brightness_hw_changed(&kbd_led, ++ kbd_led_level); + break; + } + +-- +2.14.3 + diff --git a/kernel.spec b/kernel.spec index 3b59c4f5d..32c53fed7 100644 --- a/kernel.spec +++ b/kernel.spec @@ -650,6 +650,12 @@ Patch638: 0003-ahci-Allow-setting-a-default-LPM-policy-for-mobile-c.patch # KPTI Fixups Patch639: kpti-fix.patch +# rhbz1514969, submitted upstream +Patch640: 0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch + +# rhbz1514836, submitted upstream +Patch641: 0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch + # END OF PATCH DEFINITIONS %endif @@ -2201,6 +2207,10 @@ fi # # %changelog +* Thu Jan 04 2018 Hans de Goede <hdegoede@redhat.com> +- Add a patch to filter false positive kbd backlight change events (#1514969) +- Add a patch to disable runtime-pm for QCA bluetooth devices (#1514836) + * Wed Jan 03 2018 Laura Abbott <labbott@redhat.com> - 4.15.0-0.rc6.git0.3 - Yet another KPTI fix |