forked from rpms/kernel
		
	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