Hi, On Tue, Oct 8, 2024 at 4:27 AM Chen-Yu Tsai <wenst@xxxxxxxxxxxx> 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@xxxxxxxxxxxx> 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@xxxxxxxxxxxx/ > > 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