[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