[PATCH] Bluetooth: btmtksdio: Add in-band wakeup support

sean.wang at mediatek.com sean.wang at mediatek.com
Tue Jun 21 15:51:44 PDT 2022


From: Sean Wang <sean.wang at mediatek.com>

>Dear Sean,
>
>
>Thank you for the patch.
>
>Am 10.06.22 um 02:17 schrieb sean.wang at mediatek.com:
>> From: Sean Wang <sean.wang at mediatek.com>
>>
>> '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@mediatek.com/
that is the actual patch btmtksdio was tested against on MT8186 platfrom.

>
>> Co-developed-by: Yake Yang <yake.yang at mediatek.com>
>> Signed-off-by: Yake Yang <yake.yang at mediatek.com>
>> Signed-off-by: Sean Wang <sean.wang at mediatek.com>
>> ---
>>   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
>
>



More information about the Linux-mediatek mailing list