lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 258/862] Bluetooth: btusb: mediatek: fix WMT failure during runtime suspend
    Date
    From: Sean Wang <sean.wang@mediatek.com>

    [ Upstream commit fd3f106677bac70437dc12e76c827294ed495a44 ]

    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@mediatek.com>
    Signed-off-by: Jing Cai <jing.cai@mediatek.com>
    Signed-off-by: Sean Wang <sean.wang@mediatek.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/bluetooth/btusb.c | 14 ++++++++++++++
    1 file changed, 14 insertions(+)

    diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
    index 15caa6469538..1bb46cbff0fa 100644
    --- a/drivers/bluetooth/btusb.c
    +++ b/drivers/bluetooth/btusb.c
    @@ -2477,15 +2477,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.35.1


    \
     
     \ /
      Last update: 2022-10-19 11:12    [W:2.418 / U:0.700 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site