* [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.