* [PATCH RESEND] mux: gpio-mux: add support for 4:1 2-channels mux
@ 2026-04-30 14:11 Andrea Tomassetti
2026-05-05 8:23 ` Linus Walleij
0 siblings, 1 reply; 9+ messages in thread
From: Andrea Tomassetti @ 2026-04-30 14:11 UTC (permalink / raw)
To: Peter Rosin
Cc: linusw, Andrea Tomassetti, Johan Hovold, Krzysztof Kozlowski,
Srinivas Kandagatla, linux-kernel
Some gpio multiplexers, like TMUX1209, offer differential 4:1
or dual 4:1 single-ended channels. Similarly to what already done by
the adg792a driver, the gpio-mux driver has to take into account
the #mux-control-cells property and allocate as many controllers
as advised by it.
So, in the DTS you can now define:
tmux1209: mux-controller {
compatible = "gpio-mux";
#mux-control-cells = <1>;
mux-gpios = <&gpio_expander 01 GPIO_ACTIVE_HIGH>,
<&gpio_expander 02 GPIO_ACTIVE_HIGH>;
};
adcmux30: adcmux30 {
compatible = "io-channel-mux";
io-channels = <&adc1 4>;
io-channel-names = "parent";
#io-channel-cells = <1>;
mux-controls = <&tmux1209 0>;
channels = "S1A", "S2A", "S3A", "S4A";
};
adcmux31: adcmux31 {
compatible = "io-channel-mux";
io-channels = <&adc1 5>;
io-channel-names = "parent";
#io-channel-cells = <1>;
mux-controls = <&tmux1209 1>;
channels = "S1B", "S2B", "S3B", "S4B";
};
Signed-off-by: Andrea Tomassetti <andrea.tomassetti@sipearl.com>
---
drivers/mux/gpio.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/mux/gpio.c b/drivers/mux/gpio.c
index 4cc3202c58f3..01ce3f878b9e 100644
--- a/drivers/mux/gpio.c
+++ b/drivers/mux/gpio.c
@@ -52,12 +52,23 @@ static int mux_gpio_probe(struct platform_device *pdev)
int pins;
s32 idle_state;
int ret;
+ u32 cells;
+ int i;
pins = gpiod_count(dev, "mux");
if (pins < 0)
return pins;
- mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*mux_gpio));
+ ret = device_property_read_u32(dev, "#mux-control-cells", &cells);
+ if (ret < 0)
+ cells = 0;
+
+ if (cells >= 2) {
+ dev_err(dev, "invalid control-cells %u\n", cells);
+ return -EINVAL;
+ }
+
+ mux_chip = devm_mux_chip_alloc(dev, cells + 1, sizeof(*mux_gpio));
if (IS_ERR(mux_chip))
return PTR_ERR(mux_chip);
@@ -69,7 +80,9 @@ static int mux_gpio_probe(struct platform_device *pdev)
return dev_err_probe(dev, PTR_ERR(mux_gpio->gpios),
"failed to get gpios\n");
WARN_ON(pins != mux_gpio->gpios->ndescs);
- mux_chip->mux->states = BIT(pins);
+
+ for (i = 0; i < mux_chip->controllers; ++i)
+ mux_chip->mux[i].states = BIT(pins);
ret = device_property_read_u32(dev, "idle-state", (u32 *)&idle_state);
if (ret >= 0 && idle_state != MUX_IDLE_AS_IS) {
base-commit: 80234b5ab240f52fa45d201e899e207b9265ef91
--
2.51.2
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH RESEND] mux: gpio-mux: add support for 4:1 2-channels mux 2026-04-30 14:11 [PATCH RESEND] mux: gpio-mux: add support for 4:1 2-channels mux Andrea Tomassetti @ 2026-05-05 8:23 ` Linus Walleij 2026-05-05 15:20 ` Andrea Tomassetti 0 siblings, 1 reply; 9+ messages in thread From: Linus Walleij @ 2026-05-05 8:23 UTC (permalink / raw) To: Andrea Tomassetti Cc: Peter Rosin, Johan Hovold, Krzysztof Kozlowski, Srinivas Kandagatla, linux-kernel Hi Andrea, thanks for your patch! On Thu, Apr 30, 2026 at 4:13 PM Andrea Tomassetti <andrea.tomassetti@sipearl.com> wrote: > Some gpio multiplexers, like TMUX1209, offer differential 4:1 > or dual 4:1 single-ended channels. Similarly to what already done by > the adg792a driver, the gpio-mux driver has to take into account > the #mux-control-cells property and allocate as many controllers > as advised by it. > > So, in the DTS you can now define: > > tmux1209: mux-controller { > compatible = "gpio-mux"; > #mux-control-cells = <1>; > > mux-gpios = <&gpio_expander 01 GPIO_ACTIVE_HIGH>, > <&gpio_expander 02 GPIO_ACTIVE_HIGH>; > }; > > adcmux30: adcmux30 { > compatible = "io-channel-mux"; > io-channels = <&adc1 4>; > io-channel-names = "parent"; > #io-channel-cells = <1>; > mux-controls = <&tmux1209 0>; > > channels = "S1A", "S2A", "S3A", "S4A"; > }; > > adcmux31: adcmux31 { > compatible = "io-channel-mux"; > io-channels = <&adc1 5>; > io-channel-names = "parent"; > #io-channel-cells = <1>; > mux-controls = <&tmux1209 1>; > > channels = "S1B", "S2B", "S3B", "S4B"; > }; > > Signed-off-by: Andrea Tomassetti <andrea.tomassetti@sipearl.com> The mux controller binding looks like this: properties: '#mux-control-cells': enum: [ 0, 1 ] So you do not patch the bindings, you actually implement this for the case when #mux-control-cells is 1. Please detail this in the commit. > - mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*mux_gpio)); > + ret = device_property_read_u32(dev, "#mux-control-cells", &cells); > + if (ret < 0) > + cells = 0; > + > + if (cells >= 2) { > + dev_err(dev, "invalid control-cells %u\n", cells); > + return -EINVAL; > + } Maybe put in a comment that the bindings only allow 0 or 1 cell. > + > + mux_chip = devm_mux_chip_alloc(dev, cells + 1, sizeof(*mux_gpio)); Otherwise looks correct to me. > - mux_chip->mux->states = BIT(pins); > + > + for (i = 0; i < mux_chip->controllers; ++i) > + mux_chip->mux[i].states = BIT(pins); Is the mux core handling any other specifics? (I guess so...) With the above added comments, details: Reviewed-by: Linus Walleij <linusw@kernel.org> Thanks! Linus Walleij ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND] mux: gpio-mux: add support for 4:1 2-channels mux 2026-05-05 8:23 ` Linus Walleij @ 2026-05-05 15:20 ` Andrea Tomassetti 2026-05-06 7:58 ` Linus Walleij 0 siblings, 1 reply; 9+ messages in thread From: Andrea Tomassetti @ 2026-05-05 15:20 UTC (permalink / raw) To: Linus Walleij Cc: Peter Rosin, Johan Hovold, Krzysztof Kozlowski, Srinivas Kandagatla, linux-kernel@vger.kernel.org Hi Linus, thank you very much for taking the time to review and reply. On 5/5/26 10:23, Linus Walleij wrote: > **Warning** This email is from an external address. Please take care to proceed. > > > Hi Andrea, > > thanks for your patch! > > On Thu, Apr 30, 2026 at 4:13 PM Andrea Tomassetti > <andrea.tomassetti@sipearl.com> wrote: > >> Some gpio multiplexers, like TMUX1209, offer differential 4:1 >> or dual 4:1 single-ended channels. Similarly to what already done by >> the adg792a driver, the gpio-mux driver has to take into account >> the #mux-control-cells property and allocate as many controllers >> as advised by it. >> >> So, in the DTS you can now define: >> >> tmux1209: mux-controller { >> compatible = "gpio-mux"; >> #mux-control-cells = <1>; >> >> mux-gpios = <&gpio_expander 01 GPIO_ACTIVE_HIGH>, >> <&gpio_expander 02 GPIO_ACTIVE_HIGH>; >> }; >> >> adcmux30: adcmux30 { >> compatible = "io-channel-mux"; >> io-channels = <&adc1 4>; >> io-channel-names = "parent"; >> #io-channel-cells = <1>; >> mux-controls = <&tmux1209 0>; >> >> channels = "S1A", "S2A", "S3A", "S4A"; >> }; >> >> adcmux31: adcmux31 { >> compatible = "io-channel-mux"; >> io-channels = <&adc1 5>; >> io-channel-names = "parent"; >> #io-channel-cells = <1>; >> mux-controls = <&tmux1209 1>; >> >> channels = "S1B", "S2B", "S3B", "S4B"; >> }; >> >> Signed-off-by: Andrea Tomassetti <andrea.tomassetti@sipearl.com> > > The mux controller binding looks like this: > > properties: > '#mux-control-cells': > enum: [ 0, 1 ] > > So you do not patch the bindings, you actually implement this > for the case when #mux-control-cells is 1. > > Please detail this in the commit. > Exactly, I'm not patching the bindings, there's no need. I tried to detail this in my commit message: [...] the gpio-mux driver has to take into account the #mux-control-cells property and allocate as many controllers as advised by it. but it looks like is not as clear as I thought. Maybe I can add the fact that "patching the binding is not needed because the binding already supports #mux-control-cells 0 and 1". What do you think? >> - mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*mux_gpio)); >> + ret = device_property_read_u32(dev, "#mux-control-cells", &cells); >> + if (ret < 0) >> + cells = 0; >> + >> + if (cells >= 2) { >> + dev_err(dev, "invalid control-cells %u\n", cells); >> + return -EINVAL; >> + } > > Maybe put in a comment that the bindings only allow 0 or 1 cell. > Noted it! >> + >> + mux_chip = devm_mux_chip_alloc(dev, cells + 1, sizeof(*mux_gpio)); > > Otherwise looks correct to me. > >> - mux_chip->mux->states = BIT(pins); >> + >> + for (i = 0; i < mux_chip->controllers; ++i) >> + mux_chip->mux[i].states = BIT(pins); > > Is the mux core handling any other specifics? (I guess so...) > I guess so too but if there's something specific I'm missing, please let me know. Moreover, I just realized that I missed two lines that should be probably adjusted as well: @@ -78,7 +91,8 @@ static int mux_gpio_probe(struct platform_device *pdev) return -EINVAL; } - mux_chip->mux->idle_state = idle_state; + for (i = 0; i < mux_chip->controllers; ++i) + mux_chip->mux[i].idle_state = idle_state; } ret = devm_regulator_get_enable_optional(dev, "mux"); @@ -89,8 +103,8 @@ static int mux_gpio_probe(struct platform_device *pdev) if (ret < 0) return ret; - dev_info(dev, "%u-way mux-controller registered\n", - mux_chip->mux->states); + dev_info(dev, "%u-way mux-controller registered, %u controllers\n", + mux_chip->mux->states, mux_chip->controllers); return 0; } Should I integrate these modifications on the next version of the patch? Thank you very much, Andrea > With the above added comments, details: > Reviewed-by: Linus Walleij <linusw@kernel.org> > > Thanks! > Linus Walleij > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH RESEND] mux: gpio-mux: add support for 4:1 2-channels mux 2026-05-05 15:20 ` Andrea Tomassetti @ 2026-05-06 7:58 ` Linus Walleij 2026-05-06 12:33 ` [PATCH v2] " Andrea Tomassetti 0 siblings, 1 reply; 9+ messages in thread From: Linus Walleij @ 2026-05-06 7:58 UTC (permalink / raw) To: Andrea Tomassetti Cc: Peter Rosin, Johan Hovold, Krzysztof Kozlowski, Srinivas Kandagatla, linux-kernel@vger.kernel.org On Tue, May 5, 2026 at 5:21 PM Andrea Tomassetti <andrea.tomassetti@sipearl.com> wrote: > Should I integrate these modifications on the next version of the patch? Yeah looks good, just respin it. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2] mux: gpio-mux: add support for 4:1 2-channels mux 2026-05-06 7:58 ` Linus Walleij @ 2026-05-06 12:33 ` Andrea Tomassetti 2026-06-03 11:43 ` Andrea Tomassetti 0 siblings, 1 reply; 9+ messages in thread From: Andrea Tomassetti @ 2026-05-06 12:33 UTC (permalink / raw) To: linusw; +Cc: andrea.tomassetti, johan+linaro, krzk, linux-kernel, peda, srini Some gpio multiplexers, like TMUX1209, offer differential 4:1 or dual 4:1 single-ended channels. No binding changes are needed because the DT binding already supports #mux-control-cells with values 0 and 1. So, similarly to what was already done by the adg792a driver, the gpio-mux driver has to take into account the #mux-control-cells property and allocate as many controllers as advised by it. As an example, in the DTS you can now define: tmux1209: mux-controller { compatible = "gpio-mux"; #mux-control-cells = <1>; mux-gpios = <&gpio_expander 01 GPIO_ACTIVE_HIGH>, <&gpio_expander 02 GPIO_ACTIVE_HIGH>; }; And use it like this: adcmux30: adcmux30 { compatible = "io-channel-mux"; io-channels = <&adc1 4>; io-channel-names = "parent"; #io-channel-cells = <1>; mux-controls = <&tmux1209 0>; channels = "S1A", "S2A", "S3A", "S4A"; }; adcmux31: adcmux31 { compatible = "io-channel-mux"; io-channels = <&adc1 5>; io-channel-names = "parent"; #io-channel-cells = <1>; mux-controls = <&tmux1209 1>; channels = "S1B", "S2B", "S3B", "S4B"; }; Signed-off-by: Andrea Tomassetti <andrea.tomassetti@sipearl.com> Reviewed-by: Linus Walleij <linusw@kernel.org> --- v2: Address feedback from Linus Walleij - reword commit message by making clear that patching the binding is not needed - make clear from error message that binding only allows 0 or 1 - fix two other locations where `mux` was accessed drivers/mux/gpio.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/mux/gpio.c b/drivers/mux/gpio.c index 4cc3202c58f3..ab3ed5247d2c 100644 --- a/drivers/mux/gpio.c +++ b/drivers/mux/gpio.c @@ -52,12 +52,23 @@ static int mux_gpio_probe(struct platform_device *pdev) int pins; s32 idle_state; int ret; + u32 cells; + int i; pins = gpiod_count(dev, "mux"); if (pins < 0) return pins; - mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*mux_gpio)); + ret = device_property_read_u32(dev, "#mux-control-cells", &cells); + if (ret < 0) + cells = 0; + + if (cells >= 2) { + dev_err(dev, "invalid control-cells %u, must be 0 or 1\n", cells); + return -EINVAL; + } + + mux_chip = devm_mux_chip_alloc(dev, cells + 1, sizeof(*mux_gpio)); if (IS_ERR(mux_chip)) return PTR_ERR(mux_chip); @@ -69,7 +80,9 @@ static int mux_gpio_probe(struct platform_device *pdev) return dev_err_probe(dev, PTR_ERR(mux_gpio->gpios), "failed to get gpios\n"); WARN_ON(pins != mux_gpio->gpios->ndescs); - mux_chip->mux->states = BIT(pins); + + for (i = 0; i < mux_chip->controllers; ++i) + mux_chip->mux[i].states = BIT(pins); ret = device_property_read_u32(dev, "idle-state", (u32 *)&idle_state); if (ret >= 0 && idle_state != MUX_IDLE_AS_IS) { @@ -78,7 +91,8 @@ static int mux_gpio_probe(struct platform_device *pdev) return -EINVAL; } - mux_chip->mux->idle_state = idle_state; + for (i = 0; i < mux_chip->controllers; ++i) + mux_chip->mux[i].idle_state = idle_state; } ret = devm_regulator_get_enable_optional(dev, "mux"); @@ -89,8 +103,8 @@ static int mux_gpio_probe(struct platform_device *pdev) if (ret < 0) return ret; - dev_info(dev, "%u-way mux-controller registered\n", - mux_chip->mux->states); + dev_info(dev, "%u-way mux-controller registered, %u controllers\n", + mux_chip->mux->states, mux_chip->controllers); return 0; } base-commit: 74fe02ce122a6103f207d29fafc8b3a53de6abaf -- 2.51.2 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2] mux: gpio-mux: add support for 4:1 2-channels mux 2026-05-06 12:33 ` [PATCH v2] " Andrea Tomassetti @ 2026-06-03 11:43 ` Andrea Tomassetti 2026-06-03 14:00 ` Krzysztof Kozlowski 2026-06-08 22:54 ` Linus Walleij 0 siblings, 2 replies; 9+ messages in thread From: Andrea Tomassetti @ 2026-06-03 11:43 UTC (permalink / raw) To: linusw@kernel.org Cc: johan+linaro@kernel.org, krzk@kernel.org, linux-kernel@vger.kernel.org, peda@axentia.se, srini@kernel.org Hi Linus, do you know if Peter Rosin is still actively maintaining this driver? I see that there are other developers that sent patches months ago and that are still waiting for a reply. Do you have any insight? How's the process now? Thank you very much, Andrea ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2] mux: gpio-mux: add support for 4:1 2-channels mux 2026-06-03 11:43 ` Andrea Tomassetti @ 2026-06-03 14:00 ` Krzysztof Kozlowski 2026-06-08 22:54 ` Linus Walleij 1 sibling, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2026-06-03 14:00 UTC (permalink / raw) To: Andrea Tomassetti, linusw@kernel.org Cc: johan+linaro@kernel.org, linux-kernel@vger.kernel.org, peda@axentia.se, srini@kernel.org On 03/06/2026 13:43, Andrea Tomassetti wrote: > Hi Linus, > do you know if Peter Rosin is still actively maintaining this driver? I see that > there are other developers that sent patches months ago and that are still > waiting for a reply. > > Do you have any insight? How's the process now? I think Peter looks at mux subsystem only occasionally so that's I marked it as Odd Fixes in commit ff91020412. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2] mux: gpio-mux: add support for 4:1 2-channels mux 2026-06-03 11:43 ` Andrea Tomassetti 2026-06-03 14:00 ` Krzysztof Kozlowski @ 2026-06-08 22:54 ` Linus Walleij 2026-06-17 13:09 ` Tommaso Merciai 1 sibling, 1 reply; 9+ messages in thread From: Linus Walleij @ 2026-06-08 22:54 UTC (permalink / raw) To: Andrea Tomassetti Cc: johan+linaro@kernel.org, krzk@kernel.org, linux-kernel@vger.kernel.org, peda@axentia.se, srini@kernel.org On Wed, Jun 3, 2026 at 1:43 PM Andrea Tomassetti <andrea.tomassetti@sipearl.com> wrote: > Hi Linus, > do you know if Peter Rosin is still actively maintaining this driver? I see that > there are other developers that sent patches months ago and that are still > waiting for a reply. > > Do you have any insight? How's the process now? If Peter is unable to attend to it send a pull request to the SoC tree (if this concerns an SoC) and explain the situation and the SoC maintainers can pull it in while we are looking for a new mux (co)maintainer. Unless you're interested in the job? Yours, Linus Walleij ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2] mux: gpio-mux: add support for 4:1 2-channels mux 2026-06-08 22:54 ` Linus Walleij @ 2026-06-17 13:09 ` Tommaso Merciai 0 siblings, 0 replies; 9+ messages in thread From: Tommaso Merciai @ 2026-06-17 13:09 UTC (permalink / raw) To: Linus Walleij Cc: Andrea Tomassetti, johan+linaro@kernel.org, krzk@kernel.org, linux-kernel@vger.kernel.org, peda@axentia.se, srini@kernel.org, Krzysztof Kozlowski Hi Linus, Andrea, Krzysztof, On Tue, Jun 09, 2026 at 12:54:10AM +0200, Linus Walleij wrote: > On Wed, Jun 3, 2026 at 1:43 PM Andrea Tomassetti > <andrea.tomassetti@sipearl.com> wrote: > > > Hi Linus, > > do you know if Peter Rosin is still actively maintaining this driver? I see that > > there are other developers that sent patches months ago and that are still > > waiting for a reply. > > > > Do you have any insight? How's the process now? > > If Peter is unable to attend to it send a pull request to the SoC > tree (if this concerns an SoC) and explain the situation and the > SoC maintainers can pull it in while we are looking for a new > mux (co)maintainer. Unless you're interested in the job? I have the same issue with [1]. Starting from [2] (Date: Wed, 5 Nov 2025) I have never received any feedback. How should I proceed? Maybe I'm missing something? [1] https://lore.kernel.org/all/cover.1777294876.git.tommaso.merciai.xr@bp.renesas.com/ [2] https://lore.kernel.org/all/b0aeaea6408319ba7ae525d19bb6ff6dd566e2bb.1762354366.git.tommaso.merciai.xr@bp.renesas.com/ Thanks to all! Kind Regards, Tommaso > > Yours, > Linus Walleij ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-06-17 13:09 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-30 14:11 [PATCH RESEND] mux: gpio-mux: add support for 4:1 2-channels mux Andrea Tomassetti 2026-05-05 8:23 ` Linus Walleij 2026-05-05 15:20 ` Andrea Tomassetti 2026-05-06 7:58 ` Linus Walleij 2026-05-06 12:33 ` [PATCH v2] " Andrea Tomassetti 2026-06-03 11:43 ` Andrea Tomassetti 2026-06-03 14:00 ` Krzysztof Kozlowski 2026-06-08 22:54 ` Linus Walleij 2026-06-17 13:09 ` Tommaso Merciai
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.