From 1e02c6bb341c122205456e7814c0536d6af9f8ad Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Nov 16 2017 12:10:41 +0000 Subject: Enable USB autosuspend for USB bluetooth receivers by default, use btusb.enable_autosuspend=n on the kernel cmdline to disable --- diff --git a/0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch b/0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch new file mode 100644 index 0000000..1f94c3d --- /dev/null +++ b/0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch @@ -0,0 +1,90 @@ +From 20eeb02a0a489e35de0830b2d61f09d43763c982 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 13 Nov 2017 09:23:19 +0100 +Subject: [PATCH] Bluetooth: btusb: Add a Kconfig option to enable USB + autosuspend by default + +On many laptops the btusb device is the only USB device not having USB +autosuspend enabled, this causes not only the HCI but also the USB +controller to stay awake, together using aprox. 0.4W of power. + +Modern ultrabooks idle around 6W (at 50% screen brightness), 3.5W for +Apollo Lake devices. 0.4W is a significant chunk of this (7 / 11%). + +The btusb driver already contains code to allow enabling USB autosuspend, +but currently leaves it up to the user / userspace to enable it. This +means that for most people it will not be enabled, leading to an +unnecessarily high power consumption. + +Since enabling it is not entirely without risk of regressions, this +commit adds a Kconfig option so that Linux distributions can choose to +enable it by default. This commit also adds a module option so that when +distros receive bugs they can easily ask the user to disable it again +for easy debugging. + +Signed-off-by: Hans de Goede +--- +Changes in v2: +-s/BT_USB_AUTOSUSPEND/BT_HCIBTUSB_AUTOSUSPEND/ +-s/enable_usb_autosuspend/enable_autosuspend/ +--- + drivers/bluetooth/Kconfig | 10 ++++++++++ + drivers/bluetooth/btusb.c | 7 +++++++ + 2 files changed, 17 insertions(+) + +diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig +index 6475f8c0d3b2..20940417d937 100644 +--- a/drivers/bluetooth/Kconfig ++++ b/drivers/bluetooth/Kconfig +@@ -30,6 +30,16 @@ config BT_HCIBTUSB + Say Y here to compile support for Bluetooth USB devices into the + kernel or say M to compile it as module (btusb). + ++config BT_HCIBTUSB_AUTOSUSPEND ++ bool "Enable USB autosuspend for Bluetooth USB devices by default" ++ depends on BT_HCIBTUSB ++ help ++ Say Y here to enable USB autosuspend for Bluetooth USB devices by ++ default. ++ ++ This can be overridden by passing btusb.enable_autosuspend=[y|n] ++ on the kernel commandline. ++ + config BT_HCIBTUSB_BCM + bool "Broadcom protocol support" + depends on BT_HCIBTUSB +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c +index c054d7bce490..3386034a44aa 100644 +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -40,6 +40,7 @@ + + static bool disable_scofix; + static bool force_scofix; ++static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND); + + static bool reset = true; + +@@ -3175,6 +3176,9 @@ static int btusb_probe(struct usb_interface *intf, + } + #endif + ++ if (enable_autosuspend) ++ usb_enable_autosuspend(data->udev); ++ + err = hci_register_dev(hdev); + if (err < 0) + goto out_free_dev; +@@ -3387,6 +3391,9 @@ MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size"); + module_param(force_scofix, bool, 0644); + MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size"); + ++module_param(enable_autosuspend, bool, 0644); ++MODULE_PARM_DESC(enable_autosuspend, "Enable USB autosuspend by default"); ++ + module_param(reset, bool, 0644); + MODULE_PARM_DESC(reset, "Send HCI reset command on initialization"); + +-- +2.14.3 + diff --git a/configs/base-generic/CONFIG_BT_HCIBTUSB_AUTOSUSPEND b/configs/base-generic/CONFIG_BT_HCIBTUSB_AUTOSUSPEND new file mode 100644 index 0000000..76c0b54 --- /dev/null +++ b/configs/base-generic/CONFIG_BT_HCIBTUSB_AUTOSUSPEND @@ -0,0 +1 @@ +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config index a2dd5e8..060527f 100644 --- a/kernel-aarch64-debug.config +++ b/kernel-aarch64-debug.config @@ -651,6 +651,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-aarch64.config b/kernel-aarch64.config index 8eb659e..b7987f8 100644 --- a/kernel-aarch64.config +++ b/kernel-aarch64.config @@ -651,6 +651,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config index 196f5da..01fdcdc 100644 --- a/kernel-armv7hl-debug.config +++ b/kernel-armv7hl-debug.config @@ -691,6 +691,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config index 052e95f..4ad110b 100644 --- a/kernel-armv7hl-lpae-debug.config +++ b/kernel-armv7hl-lpae-debug.config @@ -667,6 +667,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config index 0ecf558..aa82de9 100644 --- a/kernel-armv7hl-lpae.config +++ b/kernel-armv7hl-lpae.config @@ -666,6 +666,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config index d49810d..bc7930e 100644 --- a/kernel-armv7hl.config +++ b/kernel-armv7hl.config @@ -690,6 +690,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config index 09ef3d8..a0dee5e 100644 --- a/kernel-i686-PAE.config +++ b/kernel-i686-PAE.config @@ -559,6 +559,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config index 9344bae..5fa1f01 100644 --- a/kernel-i686-PAEdebug.config +++ b/kernel-i686-PAEdebug.config @@ -560,6 +560,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config index a3220bf..184707d 100644 --- a/kernel-i686-debug.config +++ b/kernel-i686-debug.config @@ -560,6 +560,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-i686.config b/kernel-i686.config index 78ab7ec..824a097 100644 --- a/kernel-i686.config +++ b/kernel-i686.config @@ -559,6 +559,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-ppc64-debug.config b/kernel-ppc64-debug.config index c4c55c4..69c09ae 100644 --- a/kernel-ppc64-debug.config +++ b/kernel-ppc64-debug.config @@ -545,6 +545,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-ppc64.config b/kernel-ppc64.config index b7b40c8..485581b 100644 --- a/kernel-ppc64.config +++ b/kernel-ppc64.config @@ -544,6 +544,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config index f30de42..f411abd 100644 --- a/kernel-ppc64le-debug.config +++ b/kernel-ppc64le-debug.config @@ -501,6 +501,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config index 59a0a42..05e7376 100644 --- a/kernel-ppc64le.config +++ b/kernel-ppc64le.config @@ -500,6 +500,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config index 82b082d..8449817 100644 --- a/kernel-s390x-debug.config +++ b/kernel-s390x-debug.config @@ -502,6 +502,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-s390x.config b/kernel-s390x.config index ed31f65..7375c2b 100644 --- a/kernel-s390x.config +++ b/kernel-s390x.config @@ -501,6 +501,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config index be68b2e..d6e5a63 100644 --- a/kernel-x86_64-debug.config +++ b/kernel-x86_64-debug.config @@ -572,6 +572,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel-x86_64.config b/kernel-x86_64.config index 171c43c..5656ab7 100644 --- a/kernel-x86_64.config +++ b/kernel-x86_64.config @@ -571,6 +571,7 @@ CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBTSDIO=m CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_RTL=y diff --git a/kernel.spec b/kernel.spec index bdf1af2..65b32e6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -654,6 +654,10 @@ Patch626: 1-2-kvm-vmx-Reinstate-support-for-CPUs-without-virtual-NMI.patch # Pointed to by Eric Anholt Patch627: rpi-graphics-fix.patch +# For https://fedoraproject.org/wiki/Changes/ImprovedLaptopBatteryLife +# Queued in bluetooth-next for merging into 4.16 +Patch628: 0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch + # END OF PATCH DEFINITIONS %endif @@ -2203,6 +2207,10 @@ fi # # %changelog +* Thu Nov 16 2017 Hans de Goede +- Enable USB autosuspend for USB bluetooth receivers by default, use + btusb.enable_autosuspend=n on the kernel cmdline to disable + * Wed Nov 15 2017 Laura Abbott - Disable IPX and NCPFS