[PATCH RESEND] Bluetooth: btmtksdio: Lookup device node only as fallback

Luiz Augusto von Dentz luiz.dentz at gmail.com
Tue Oct 8 06:39:05 PDT 2024


Hi,

On Tue, Oct 8, 2024 at 4:27 AM Chen-Yu Tsai <wenst at chromium.org> wrote:
>
> If the device tree is properly written, the SDIO function device node
> should be correctly defined, and the mmc core in Linux should correctly
> tie it to the device being probed.
>
> Only fall back to searching for the device node by compatible if the
> original device node tied to the device is incorrect, as seen in older
> device trees.
>
> Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>

I was hoping to see some Reviewed-by/Tested-by here, were the mediatek
made aware of these changes?

> ---
> Resending after three and a half months.
>
> This follows up on the MT7921S bluetooth binding and DT fixup patches [1].
> This should not be backported.
>
> [1] https://lore.kernel.org/linux-bluetooth/20240412073046.1192744-1-wenst@chromium.org/
>
>  drivers/bluetooth/btmtksdio.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c
> index cc097aedc1e1..a1dfcfe43d3a 100644
> --- a/drivers/bluetooth/btmtksdio.c
> +++ b/drivers/bluetooth/btmtksdio.c
> @@ -1328,6 +1328,8 @@ static int btmtksdio_probe(struct sdio_func *func,
>  {
>         struct btmtksdio_dev *bdev;
>         struct hci_dev *hdev;
> +       struct device_node *old_node;
> +       bool restore_node;
>         int err;
>
>         bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
> @@ -1411,13 +1413,24 @@ static int btmtksdio_probe(struct sdio_func *func,
>         if (err)
>                 bt_dev_err(hdev, "failed to initialize device wakeup");
>
> -       bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
> -                                                    "mediatek,mt7921s-bluetooth");
> +       restore_node = false;
> +       if (!of_device_is_compatible(bdev->dev->of_node, "mediatek,mt7921s-bluetooth")) {
> +               restore_node = true;
> +               old_node = bdev->dev->of_node;
> +               bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
> +                                                            "mediatek,mt7921s-bluetooth");
> +       }
> +
>         bdev->reset = devm_gpiod_get_optional(bdev->dev, "reset",
>                                               GPIOD_OUT_LOW);
>         if (IS_ERR(bdev->reset))
>                 err = PTR_ERR(bdev->reset);
>
> +       if (restore_node) {
> +               of_node_put(bdev->dev->of_node);
> +               bdev->dev->of_node = old_node;
> +       }
> +
>         return err;
>  }
>
> --
> 2.47.0.rc0.187.ge670bccf7e-goog
>


-- 
Luiz Augusto von Dentz



More information about the Linux-mediatek mailing list