Re: [PATCH] Bluetooth: btmtksdio: Add in-band wakeup support
From: sean.wang
Date: Tue Jun 21 2022 - 18:52:06 EST
From: Sean Wang <sean.wang@xxxxxxxxxxxx>
>Dear Sean,
>
>
>Thank you for the patch.
>
>Am 10.06.22 um 02:17 schrieb sean.wang@xxxxxxxxxxxx:
>> From: Sean Wang <sean.wang@xxxxxxxxxxxx>
>>
>> 'ce64b3e94919 ("Bluetooth: mt7921s: Support wake on bluetooth")'
>> have added the waken-on-bluetooth via dedicated GPIO.
>
>Maybe:
>
>Commit ce64b3e94919 ("Bluetooth: mt7921s: Support wake on bluetooth") adds the wake on bluethooth via a dedicated GPIO.
Thanks! Look good to me. I will add it in the next version.
>
>> The patch extends the function to the waken-on-bluetooth via SDIO DAT1
>> pin (inband wakeup) when the SDIO host driver is able to support.
>
>Maybe:
>
>Extend the wake-on-bluetooth to use the SDIO DAT1 pin (in-band wakeup), when supported by the SDIO host driver.
>
Thanks! Look good to me. I will add it in the next version.
>How did you test this? In what datasheet is it documented?
We tested it on the MT8186 platform with wakening up by the keyboard or mouse when the platform is in the suspend state.
We can see the details on SDIO DAT1 pin in SDIO specification ver 3.00 section 8.2 Asynchronous Interrupt:
During the asynchronous interrupt period, the host can stop providing an SD clock to the card and the card
can generate an interrupt via SDIO DATA1 without SD clock.
or you can check the patch ("mmc: mediatek: add support for SDIO eint wakup IRQ")
in https://patchwork.kernel.org/project/linux-arm-kernel/patch/20220523074017.12649-4-axe.yang@xxxxxxxxxxxx/
that is the actual patch btmtksdio was tested against on MT8186 platfrom.
>
>> Co-developed-by: Yake Yang <yake.yang@xxxxxxxxxxxx>
>> Signed-off-by: Yake Yang <yake.yang@xxxxxxxxxxxx>
>> Signed-off-by: Sean Wang <sean.wang@xxxxxxxxxxxx>
>> ---
>> drivers/bluetooth/btmtksdio.c | 8 ++++++++
>> 1 file changed, 8 insertions(+)
>>
>> diff --git a/drivers/bluetooth/btmtksdio.c
>> b/drivers/bluetooth/btmtksdio.c index d6700efcfe8c..9ed3af4ba51a
>> 100644
>> --- a/drivers/bluetooth/btmtksdio.c
>> +++ b/drivers/bluetooth/btmtksdio.c
>> @@ -118,6 +118,7 @@ MODULE_DEVICE_TABLE(sdio, btmtksdio_table);
>> #define BTMTKSDIO_FUNC_ENABLED 3
>> #define BTMTKSDIO_PATCH_ENABLED 4
>> #define BTMTKSDIO_HW_RESET_ACTIVE 5
>> +#define BTMTKSDIO_INBAND_WAKEUP 6
>>
>> struct mtkbtsdio_hdr {
>> __le16 len;
>> @@ -1294,6 +1295,9 @@ static bool btmtksdio_sdio_wakeup(struct hci_dev *hdev)
>> .wakeup_delay = cpu_to_le16(0x20),
>> };
>>
>> + if (test_bit(BTMTKSDIO_INBAND_WAKEUP, &bdev->tx_state))
>> + return may_wakeup;
>> +
>> if (may_wakeup && bdev->data->chipid == 0x7921) {
>> struct sk_buff *skb;
>>
>> @@ -1384,6 +1388,10 @@ static int btmtksdio_probe(struct sdio_func *func,
>> */
>> pm_runtime_put_noidle(bdev->dev);
>>
>> + /* Mark if the mmc host can support waken by SDIO */
>
>Maybe:
>
>Mark if MMC host supports wake on bluetooth by SDIO
Thanks! Look good to me. I will add it in the next version.
>
>> + if (device_can_wakeup(func->card->host->parent))
>> + set_bit(BTMTKSDIO_INBAND_WAKEUP, &bdev->tx_state);
>> +
>> err = device_init_wakeup(bdev->dev, true);
>> if (err)
>> bt_dev_err(hdev, "failed to initialize device wakeup");
>
>
>Kind regards,
>
>Paul
>
>