Add a patch to filter false positive kbd backlight change events (#1514969)
Add a patch to disable runtime-pm for QCA bluetooth devices (#1514836)
This commit is contained in:
parent
b23e66e346
commit
b5cf2a10dd
@ -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
|
||||
|
@ -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
|
||||
|
10
kernel.spec
10
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user