From: Horatiu Vultur <horatiu.vultur@microchip.com>
To: Peter Rosin <peda@axentia.se>
Cc: <robh+dt@kernel.org>, <peter.korsgaard@barco.com>,
<lars.povlsen@microchip.com>, <linux-i2c@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] i2c: i2c-mux-gpio: Add support 'select-delay' property
Date: Thu, 28 Oct 2021 14:25:33 +0200 [thread overview]
Message-ID: <20211028122533.4o63fuguyqfua5tm@soft-dev3-1.localhost> (raw)
In-Reply-To: <9fe92c02-40af-a077-4189-6f0c0a934745@axentia.se>
The 10/27/2021 12:41, Peter Rosin wrote:
>
> Hi!
Hi Peter,
>
> I'm sorry for the slow response...
>
> On 2021-10-13 16:10, Horatiu Vultur wrote:
> > Use select-delay property to add a delay once the mux state is changed.
> > This is required on some platforms to allow the GPIO signals to get
> > stabilized.
> >
> > Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>
> > Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
> > ---
> > drivers/i2c/muxes/i2c-mux-gpio.c | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/i2c/muxes/i2c-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c
> > index bac415a52b78..1cc69eb67221 100644
> > --- a/drivers/i2c/muxes/i2c-mux-gpio.c
> > +++ b/drivers/i2c/muxes/i2c-mux-gpio.c
> > @@ -13,6 +13,8 @@
> > #include <linux/slab.h>
> > #include <linux/bits.h>
> > #include <linux/gpio/consumer.h>
> > +#include <linux/delay.h>
> > +
> > /* FIXME: stop poking around inside gpiolib */
> > #include "../../gpio/gpiolib.h"
> >
> > @@ -20,6 +22,7 @@ struct gpiomux {
> > struct i2c_mux_gpio_platform_data data;
> > int ngpios;
> > struct gpio_desc **gpios;
> > + int select_delay;
> > };
> >
> > static void i2c_mux_gpio_set(const struct gpiomux *mux, unsigned val)
> > @@ -29,6 +32,8 @@ static void i2c_mux_gpio_set(const struct gpiomux *mux, unsigned val)
> > values[0] = val;
> >
> > gpiod_set_array_value_cansleep(mux->ngpios, mux->gpios, NULL, values);
> > + if (mux->select_delay)
> > + udelay(mux->select_delay);
>
> Use fsleep(mux->select_delay) if you don't know how long the delay really
> is.
>
> However, you needlessly invoke the delay even if you do not actually change
> the state of the mux. In order to fix that, you need to keep track of the
> current state of the mux, but that's a chunk of boring code to write. If you
> instead switch to using a mux-gpio from the mux subsystem and point an
> i2c-mux-gpmux to that instance, you get that for free, and you can make simple
> changes to the i2c-mux-gpmux driver to get this sorted properly, basically
> exactly as this patch but with this
>
> - ret = mux_control_select(mux->control, chan->channel);
> + ret = mux_control_select_delay(mux->control, chan->channel,
> + mux->delay_us);
>
> instead of the udelay/fsleep in this patch. That will invoke the requested
> delay, but only if too little time has gone by since the latest state change.
Thanks for the advice! I will change to use i2c-mux-gpmux and make the
changes there.
>
> That interface (mux_control_select_delay) is brand new though, but available
> in linux-next and scheduled for the next merge window. But, since I fumbled
> this series it's a bit late for this merge window anyway (sorry again) so
> that should not be an issue.
No worries, I will try to send a new version.
>
> Cheers,
> Peter
>
> > }
> >
> > static int i2c_mux_gpio_select(struct i2c_mux_core *muxc, u32 chan)
> > @@ -153,6 +158,8 @@ static int i2c_mux_gpio_probe_fw(struct gpiomux *mux,
> > if (fwnode_property_read_u32(dev->fwnode, "idle-state", &mux->data.idle))
> > mux->data.idle = I2C_MUX_GPIO_NO_IDLE;
> >
> > + fwnode_property_read_u32(dev->fwnode, "select-delay", &mux->select_delay);
> > +
> > return 0;
> > }
> >
> >
--
/Horatiu
prev parent reply other threads:[~2021-10-28 12:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-13 14:10 [PATCH 0/2] i2c-mux-gpio: Add optional 'select-delay' DT property Horatiu Vultur
2021-10-13 14:10 ` [PATCH 1/2] dt-bindings: i2c-mux-gpio: Add optional " Horatiu Vultur
2021-10-26 20:29 ` Rob Herring
2021-10-26 21:02 ` Peter Rosin
2021-10-26 21:16 ` Peter Rosin
2021-10-27 10:43 ` Peter Rosin
2021-10-13 14:10 ` [PATCH 2/2] i2c: i2c-mux-gpio: Add support 'select-delay' property Horatiu Vultur
2021-10-27 10:41 ` Peter Rosin
2021-10-28 12:25 ` Horatiu Vultur [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211028122533.4o63fuguyqfua5tm@soft-dev3-1.localhost \
--to=horatiu.vultur@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=lars.povlsen@microchip.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peda@axentia.se \
--cc=peter.korsgaard@barco.com \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.