Hi Luiz, If the patch looks good to you, could you help apply the patch to bluetooth.git? It can fix the issue present in the stable kernel, I would like to backport it earlier once it appears in the Linus tree. Sean On Wed, Aug 10, 2022 at 5:59 PM <sean.wang@xxxxxxxxxxxx> wrote: > > From: Sean Wang <sean.wang@xxxxxxxxxxxx> > > WMT cmd/event doesn't follow up the generic HCI cmd/event handling, it > needs constantly polling control pipe until the host received the WMT > event, thus, we should require to specifically acquire PM counter on the > USB to prevent the interface from entering auto suspended while WMT > cmd/event in progress. > > Fixes: a1c49c434e15 ("Bluetooth: btusb: Add protocol support for MediaTek > MT7668U USB devices") > Co-developed-by: Jing Cai <jing.cai@xxxxxxxxxxxx> > Signed-off-by: Jing Cai <jing.cai@xxxxxxxxxxxx> > Signed-off-by: Sean Wang <sean.wang@xxxxxxxxxxxx> > --- > v2: > 1. move usb_autopm_[get, put]_interface to btusb_mtk_hci_wmt_sync whenever > wmt cmd is invoked. > 2. add the explanation why we needed the specific > usb_autopm_[get, put]_interface there. > > v3: correct the version and there is no logic changed > v4: fix GitLint fail due to Title exceeds max length > v5: rebase to fix patches does not apply > --- > drivers/bluetooth/btusb.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > index 30dd443f395f..70d61bb4a053 100644 > --- a/drivers/bluetooth/btusb.c > +++ b/drivers/bluetooth/btusb.c > @@ -2480,15 +2480,29 @@ static int btusb_mtk_hci_wmt_sync(struct hci_dev *hdev, > > set_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags); > > + /* WMT cmd/event doesn't follow up the generic HCI cmd/event handling, > + * it needs constantly polling control pipe until the host received the > + * WMT event, thus, we should require to specifically acquire PM counter > + * on the USB to prevent the interface from entering auto suspended > + * while WMT cmd/event in progress. > + */ > + err = usb_autopm_get_interface(data->intf); > + if (err < 0) > + goto err_free_wc; > + > err = __hci_cmd_send(hdev, 0xfc6f, hlen, wc); > > if (err < 0) { > clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags); > + usb_autopm_put_interface(data->intf); > goto err_free_wc; > } > > /* Submit control IN URB on demand to process the WMT event */ > err = btusb_mtk_submit_wmt_recv_urb(hdev); > + > + usb_autopm_put_interface(data->intf); > + > if (err < 0) > goto err_free_wc; > > -- > 2.25.1 >