On 5/12/22 11:48, Jonathan Cameron wrote:
On Thu, 12 May 2022 11:20:18 -0500
Eddie James <eajames@xxxxxxxxxxxxx> wrote:
I2C commands issued after the SI7020 is starting up or after reset
can potentially upset the startup sequence. Therefore, the host
needs to wait for the startup sequence to finish before issuing
further i2c commands. This is impractical in cases where the SI7020
is on a shared bus or behind a mux, which may switch channels at
any time (generating I2C traffic). Therefore, check for a device
property that indicates that the driver should skip resetting the
device when probing.
Why not lock the bus? It's not ideal, but then not resetting and hence
potentially ending up in an unknown state isn't great either.
Agreed, but locking the bus doesn't work in the case where the chip is
behind a mux. The mux core driver deselects the mux immediately after
the transfer to reset the si7020, causing some i2c traffic, breaking the
si7020. So it would also be a requirement to configure the mux to idle
as-is... That's why I went with the optional skipping of the reset.
Maybe I should add the bus lock too?
Thanks,
Eddie
Jonathan
Changes since v1:
- Fix dt binding document
Eddie James (2):
dt-bindings: iio: humidity: Add si7020 bindings
iio: humidity: si7020: Check device property for skipping reset in probe
.../bindings/iio/humidity/silabs,si7020.yaml | 47 +++++++++++++++++++
.../devicetree/bindings/trivial-devices.yaml | 2 -
drivers/iio/humidity/si7020.c | 14 +++---
3 files changed, 55 insertions(+), 8 deletions(-)
create mode 100644 Documentation/devicetree/bindings/iio/humidity/silabs,si7020.yaml