Bluetooth: btmtksdio: explicitly set WHISR as write-1-clear
authorSean Wang <sean.wang@mediatek.com>
Mon, 18 Oct 2021 21:30:15 +0000 (05:30 +0800)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 25 Oct 2021 13:36:23 +0000 (15:36 +0200)
That is a preliminary patch to introduce mt7921s support.

Explicitly set WHISR as write-1-clear method to all devices that is
the expected behavior the driver rely on.

Co-developed-by: Mark-yw Chen <mark-yw.chen@mediatek.com>
Signed-off-by: Mark-yw Chen <mark-yw.chen@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/btmtksdio.c

index 77d1c4ac582deedd2a68e4df3b59529fa4c18732..57126a95e2927012ad9389aae2fb0ceb8203b3d3 100644 (file)
@@ -487,8 +487,8 @@ static void btmtksdio_interrupt(struct sdio_func *func)
 static int btmtksdio_open(struct hci_dev *hdev)
 {
        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
+       u32 status, val;
        int err;
-       u32 status;
 
        sdio_claim_host(bdev->func);
 
@@ -533,8 +533,13 @@ static int btmtksdio_open(struct hci_dev *hdev)
        if (err < 0)
                goto err_release_irq;
 
-       /* Setup write-1-clear for CHISR register */
-       sdio_writel(bdev->func, C_INT_CLR_CTRL, MTK_REG_CHCR, &err);
+       /* Explitly set write-1-clear method */
+       val = sdio_readl(bdev->func, MTK_REG_CHCR, &err);
+       if (err < 0)
+               goto err_release_irq;
+
+       val |= C_INT_CLR_CTRL;
+       sdio_writel(bdev->func, val, MTK_REG_CHCR, &err);
        if (err < 0)
                goto err_release_irq;