Message ID | 20240529091739.10808-1-bastien.curutchet@bootlin.com |
---|---|
Headers | show |
Series | i2c: mux: gpio: Add 'transition-delay-us' property | expand |
Hi! 2024-05-29 at 11:17, Bastien Curutchet wrote: > Some hardware need some time to switch from a bus to another. This can > cause the first transfers following the selection of a bus to fail. > There is no way to configure this kind of waiting time in the driver. > > Add support for the 'transition-delay-us' device-tree property. When set, > the i2c_mux_gpio_select() applies a delay before returning, leaving > enough time to the hardware to switch to the new bus. > > Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com> > --- > drivers/i2c/muxes/i2c-mux-gpio.c | 6 ++++++ > include/linux/platform_data/i2c-mux-gpio.h | 2 ++ > 2 files changed, 8 insertions(+) > > diff --git a/drivers/i2c/muxes/i2c-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c > index c61e9d9ea695..b9cfc80660e2 100644 > --- a/drivers/i2c/muxes/i2c-mux-gpio.c > +++ b/drivers/i2c/muxes/i2c-mux-gpio.c > @@ -6,6 +6,7 @@ > */ > > #include <linux/bits.h> > +#include <linux/delay.h> > #include <linux/gpio/consumer.h> > #include <linux/gpio/driver.h> > #include <linux/i2c.h> > @@ -37,6 +38,9 @@ static int i2c_mux_gpio_select(struct i2c_mux_core *muxc, u32 chan) > > i2c_mux_gpio_set(mux, chan); > > + if (mux->data.transition_delay) > + udelay(mux->data.transition_delay); fsleep() is appropriate here. Cheers, Peter