Re: [RFC] Bluetooth: btusb: Use DMI matching for QCA reset_resume quirking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

>>> Commit 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume fix
>>> with a "rewritten" version") applied the USB_QUIRK_RESET_RESUME to all QCA
>>> btusb devices. But it turns out that the resume problems are not caused by
>>> the QCA Rome chipset, on most platforms it resumes fine. The resume
>>> problems are actually a platform problem (likely the platform cutting all
>>> power when suspended).
>>> 
>>> The USB_QUIRK_RESET_RESUME quirk also disable runtime suspend, so by
>>> matching on usb-ids, we're causing all boards with these chips to use extra
>>> power, to fix resume problems which only happen on some boards.
>>> 
>>> This commit fixes this by applying the quirk based on DMI matching instead
>>> of on usb-ids, so that we match the platform and not the chipset.
>> just for the record, can we include the /sys/kernel/debug/usb/devices for that device here.
> 
> Will do.
> 
>>> Fixes: 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume..")
>>> Cc: stable@xxxxxxxxxxxxxxx
>>> Cc: Brian Norris <briannorris@xxxxxxxxxxxx>
>>> Cc: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
>>> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
>>> ---
>>> drivers/bluetooth/btusb.c | 26 ++++++++++++++++++++------
>>> 1 file changed, 20 insertions(+), 6 deletions(-)
>>> 
>>> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
>>> index 2a55380ad730..a6023667f3b4 100644
>>> --- a/drivers/bluetooth/btusb.c
>>> +++ b/drivers/bluetooth/btusb.c
>>> @@ -21,6 +21,7 @@
>>>  *
>>>  */
>>> 
>>> +#include <linux/dmi.h>
>>> #include <linux/module.h>
>>> #include <linux/usb.h>
>>> #include <linux/usb/quirks.h>
>>> @@ -379,6 +380,22 @@ static const struct usb_device_id blacklist_table[] = {
>>> 	{ }	/* Terminating entry */
>>> };
>>> 
>>> +/*
>>> + * The btusb build into some devices needs to be reset on resume, this is a
>> Actually “btusb” is a driver name. So “Bluetooth USB modules”
>>> + * problem with the platform (likely shutting off all power) not with the
>>> + * btusb chip itself. So we use a DMI list to match known broken platforms.
>> Here s/btusb/module/
>>> + */
>>> +static const struct dmi_system_id btusb_plat_needs_reset_resume_list[] = {
>> I prefer to use _table instead of _list. Also drop the _plat_ part since that seems obvious.
>>> +	{
>>> +		/* Lenovo yoga 920 */
>> Use “Yoga" please.
> 
> I will fix all of the above.
> 
>> And I would include “(QCA Rome device VID:PID)” so that we have a record of some sorts.
>>> +		.matches = {
>>> +			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
>>> +			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 920”),
>> No DMI_EXACT_MATCH?
> 
> The DMI data actually has:
> 
> "Lenovo YOGA 920-13IKB"
> 
> I'm not using DMI_EXACT_MATCH on purpose here, I think Lenovo
> might change the "-13IKB" part and I don't expect them to fix
> this bug on newer revisions.

that is fine. What about the “LENOVO” vendor match? Should that be an exact match?

Regards

Marcel




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]