diff mbox series

[v2,2/2] i2c-mux-gpmux: Support settle-time-us property

Message ID 20211028125341.2457171-3-horatiu.vultur@microchip.com
State Superseded
Headers show
Series i2c-mux-gpmux: Support settle-time-us property | expand

Commit Message

Horatiu Vultur Oct. 28, 2021, 12:53 p.m. UTC
Add support for settle-time-us property. If this is defined in device
tree then add this delay to mux APIs.

Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
 drivers/i2c/muxes/i2c-mux-gpmux.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Peter Rosin Oct. 30, 2021, 10:31 p.m. UTC | #1
On 2021-10-28 14:53, Horatiu Vultur wrote:
> Add support for settle-time-us property. If this is defined in device
> tree then add this delay to mux APIs.
> 
> Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>
> Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
> ---
>  drivers/i2c/muxes/i2c-mux-gpmux.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c
> index d3acd8d66c32..569de1d8fdc1 100644
> --- a/drivers/i2c/muxes/i2c-mux-gpmux.c
> +++ b/drivers/i2c/muxes/i2c-mux-gpmux.c
> @@ -16,6 +16,7 @@
>  
>  struct mux {
>  	struct mux_control *control;
> +	u32 delay_us;
>  
>  	bool do_not_deselect;
>  };
> @@ -25,7 +26,7 @@ static int i2c_mux_select(struct i2c_mux_core *muxc, u32 chan)
>  	struct mux *mux = i2c_mux_priv(muxc);
>  	int ret;
>  
> -	ret = mux_control_select(mux->control, chan);
> +	ret = mux_control_select_delay(mux->control, chan, mux->delay_us);
>  	mux->do_not_deselect = ret < 0;
>  
>  	return ret;
> @@ -89,6 +90,9 @@ static int i2c_mux_probe(struct platform_device *pdev)
>  		return dev_err_probe(dev, PTR_ERR(mux->control),
>  				     "failed to get control-mux\n");
>  
> +	mux->delay_us = 0;
> +	of_property_read_u32(np, "settle-time-us", &mux->delay_us);

Some nitpicks, zeroing out the variable is not needed (the memory has
been cleared already) and I would like this a bit further down next
to digging out the mux-locked property.

Cheers,
Peter

> +
>  	parent = mux_parent_adapter(dev);
>  	if (IS_ERR(parent))
>  		return dev_err_probe(dev, PTR_ERR(parent),
>
diff mbox series

Patch

diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c
index d3acd8d66c32..569de1d8fdc1 100644
--- a/drivers/i2c/muxes/i2c-mux-gpmux.c
+++ b/drivers/i2c/muxes/i2c-mux-gpmux.c
@@ -16,6 +16,7 @@ 
 
 struct mux {
 	struct mux_control *control;
+	u32 delay_us;
 
 	bool do_not_deselect;
 };
@@ -25,7 +26,7 @@  static int i2c_mux_select(struct i2c_mux_core *muxc, u32 chan)
 	struct mux *mux = i2c_mux_priv(muxc);
 	int ret;
 
-	ret = mux_control_select(mux->control, chan);
+	ret = mux_control_select_delay(mux->control, chan, mux->delay_us);
 	mux->do_not_deselect = ret < 0;
 
 	return ret;
@@ -89,6 +90,9 @@  static int i2c_mux_probe(struct platform_device *pdev)
 		return dev_err_probe(dev, PTR_ERR(mux->control),
 				     "failed to get control-mux\n");
 
+	mux->delay_us = 0;
+	of_property_read_u32(np, "settle-time-us", &mux->delay_us);
+
 	parent = mux_parent_adapter(dev);
 	if (IS_ERR(parent))
 		return dev_err_probe(dev, PTR_ERR(parent),