Re: [PATCH 3/3] dt-bindings: pse-pd: ti,tps23881: Add TPS23881B
From: Andrew Lunn <andrew@lunn.ch>
Date: 2025-10-09 21:43:27
Also in:
linux-devicetree, lkml
When adapting the driver, I also considered an auto-detection mechanism. However, it felt safer to rely on the devicetree information than reading a silicon revision register, which has a totally different meaning on some other device. I have therefore decided to make the driver behaviour solely dependent on the devicetree information and to use the silicon revision only as a sanity check (as already implemented in the driver).
So if the silicon and the DT disagree, you get -ENODEV or similar? That is what i would recommend, so that broken DT blobs get found by the developer.
Is there any best practice when to use auto-detection with I2C devices?
Not really. There are devices/drivers where the compatible is just used to indicate where to find the ID register in the hardware, nothing else. The ID register is then used by the driver to do the right thing, we trust the silicon to describe itself. But things like PHY devices have the ID in a well known location, so we actually don't require a compatible, but if one is given, we use that instead of the ID found in the silicon. So the exact opposite.
Regardless of whether the driver queries the silicon revision, the B device declaration would look somehow strange to me with a driver having one single compatible, i.e. compatible = "ti,tps23881b", "ti,tps23881". The first one specifically names the hardware, the fallback is actually the name of its predecessor, which is strictly speaking not 100% compatible but required to have the driver loaded.
If it is not compatible, a fallback will not actually work, don't list a fallback. Andrew