From: Josua Mayer <josua@solid-run.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Wolfram Sang <wsa+renesas@sang-engineering.com>,
Marc Kleine-Budde <mkl@pengutronix.de>,
Vincent Mailhol <mailhol@kernel.org>,
Vinod Koul <vkoul@kernel.org>,
Kishon Vijay Abraham I <kishon@kernel.org>,
Peter Rosin <peda@axentia.se>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
Andreas Kemnade <andreas@kemnade.info>,
Kevin Hilman <khilman@baylibre.com>,
Roger Quadros <rogerq@kernel.org>,
Tony Lindgren <tony@atomide.com>, Vignesh R <vigneshr@ti.com>,
Janusz Krzysztofik <jmkrzyszt@gmail.com>,
Andi Shyti <andi.shyti@kernel.org>,
Mikhail Anikin <mikhail.anikin@solid-run.com>,
Yazan Shhady <yazan.shhady@solid-run.com>,
Jon Nettleton <jon@solid-run.com>,
"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-renesas-soc@vger.kernel.org"
<linux-renesas-soc@vger.kernel.org>,
"linux-can@vger.kernel.org" <linux-can@vger.kernel.org>,
"linux-phy@lists.infradead.org" <linux-phy@lists.infradead.org>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>
Subject: Re: [PATCH v3 2/6] mux: Add helper functions for getting optional and selected mux-state
Date: Mon, 29 Dec 2025 12:01:17 +0000 [thread overview]
Message-ID: <fd901bba-3203-46c2-b282-c5ad04128fd3@solid-run.com> (raw)
In-Reply-To: <CAMuHMdXjAS6HOYy5=uxcK0RZL5X6agRoHG67QUw4xh5+ovZaJQ@mail.gmail.com>
Am 22.12.25 um 11:08 schrieb Geert Uytterhoeven:
> Hi Josua,
>
> On Wed, 10 Dec 2025 at 18:39, Josua Mayer <josua@solid-run.com> wrote:
>> In-tree phy-can-transceiver driver has already implemented a local
>> version of devm_mux_state_get_optional.
>>
>> The omap-i2c driver gets and selects an optional mux in its probe
>> function without using any helper.
>>
>> Add new helper functions covering both aforementioned use-cases:
>>
>> - devm_mux_state_get_optional:
>> Get a mux-state if specified in dt, return NULL otherwise.
>> - devm_mux_state_get_optional_selected:
>> Get and select a mux-state if specified in dt, return error or NULL.
>>
>> Existing mux_get helper function is changed to return -ENOENT in case dt
>> did not specify a mux-state or -control matching given name (if valid).
>> This matches of_parse_phandle_with_args semantics which also returns
>> -ENOENT if the property does nto exists, or its value is zero.
>>
>> The new helper functions check for ENOENT to return NULL for optional
>> muxes.
>>
>> Commit e153fdea9db04 ("phy: can-transceiver: Re-instate "mux-states"
>> property presence check") noted that "mux_get() always prints an error
>> message in case of an error, including when the property is not present,
>> confusing the user."
>>
>> The first error message covers the case that a mux name is not matched
>> in dt. This is removed as the returned error code (-ENOENT) is clear.
>>
>> The second error message is based on of_parse_phandle_with_args return
>> value. In case mux description is missing from DT, it returns -ENOENT.
>> Print error message only for other error codes.
>>
>> This ensures that the new helper functions will not confuse the user
>> either.
>>
>> Signed-off-by: Josua Mayer <josua@solid-run.com>
> Thanks for your patch!
>
>> --- a/drivers/mux/core.c
>> +++ b/drivers/mux/core.c
>> @@ -542,11 +542,8 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>> else
>> index = of_property_match_string(np, "mux-control-names",
>> mux_name);
>> - if (index < 0) {
>> - dev_err(dev, "mux controller '%s' not found\n",
>> - mux_name);
>> - return ERR_PTR(index);
>> - }
>> + if (index < 0)
>> + return ERR_PTR(-ENOENT);
>> }
>>
>> if (state)
>> @@ -558,8 +555,10 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>> "mux-controls", "#mux-control-cells",
>> index, &args);
>> if (ret) {
>> - dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n",
>> - np, state ? "state" : "control", mux_name ?: "", index);
>> + if (ret != -ENOENT)
> I think the non-optional variant should still print an error message in
> case of -ENOENT, else this has to be duplicated in all drivers using it.
>
> This is typically handled by having a non-printing core helper function,
> and having printing non-optional, and non-printing/ignoring optional wrappers
> around the former.
I would prefer letting drivers use dev_err_probe.
Silent helper functions can more easily share code between them ...
If this is a strong preference I can rework the error behaviour and modify
the relevant mux_state_get and mux_control_get.
>
>> + dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n",
>> + np, state ? "state" : "control",
>> + mux_name ?: "", index);
>> return ERR_PTR(ret);
>> }
>>
> Gr{oetje,eeting}s,
>
> Geert
>
WARNING: multiple messages have this Message-ID (diff)
From: Josua Mayer <josua@solid-run.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Wolfram Sang <wsa+renesas@sang-engineering.com>,
Marc Kleine-Budde <mkl@pengutronix.de>,
Vincent Mailhol <mailhol@kernel.org>,
Vinod Koul <vkoul@kernel.org>,
Kishon Vijay Abraham I <kishon@kernel.org>,
Peter Rosin <peda@axentia.se>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
Andreas Kemnade <andreas@kemnade.info>,
Kevin Hilman <khilman@baylibre.com>,
Roger Quadros <rogerq@kernel.org>,
Tony Lindgren <tony@atomide.com>, Vignesh R <vigneshr@ti.com>,
Janusz Krzysztofik <jmkrzyszt@gmail.com>,
Andi Shyti <andi.shyti@kernel.org>,
Mikhail Anikin <mikhail.anikin@solid-run.com>,
Yazan Shhady <yazan.shhady@solid-run.com>,
Jon Nettleton <jon@solid-run.com>,
"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-renesas-soc@vger.kernel.org"
<linux-renesas-soc@vger.kernel.org>,
"linux-can@vger.kernel.org" <linux-can@vger.kernel.org>,
"linux-phy@lists.infradead.org" <linux-phy@lists.infradead.org>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>
Subject: Re: [PATCH v3 2/6] mux: Add helper functions for getting optional and selected mux-state
Date: Mon, 29 Dec 2025 12:01:17 +0000 [thread overview]
Message-ID: <fd901bba-3203-46c2-b282-c5ad04128fd3@solid-run.com> (raw)
In-Reply-To: <CAMuHMdXjAS6HOYy5=uxcK0RZL5X6agRoHG67QUw4xh5+ovZaJQ@mail.gmail.com>
Am 22.12.25 um 11:08 schrieb Geert Uytterhoeven:
> Hi Josua,
>
> On Wed, 10 Dec 2025 at 18:39, Josua Mayer <josua@solid-run.com> wrote:
>> In-tree phy-can-transceiver driver has already implemented a local
>> version of devm_mux_state_get_optional.
>>
>> The omap-i2c driver gets and selects an optional mux in its probe
>> function without using any helper.
>>
>> Add new helper functions covering both aforementioned use-cases:
>>
>> - devm_mux_state_get_optional:
>> Get a mux-state if specified in dt, return NULL otherwise.
>> - devm_mux_state_get_optional_selected:
>> Get and select a mux-state if specified in dt, return error or NULL.
>>
>> Existing mux_get helper function is changed to return -ENOENT in case dt
>> did not specify a mux-state or -control matching given name (if valid).
>> This matches of_parse_phandle_with_args semantics which also returns
>> -ENOENT if the property does nto exists, or its value is zero.
>>
>> The new helper functions check for ENOENT to return NULL for optional
>> muxes.
>>
>> Commit e153fdea9db04 ("phy: can-transceiver: Re-instate "mux-states"
>> property presence check") noted that "mux_get() always prints an error
>> message in case of an error, including when the property is not present,
>> confusing the user."
>>
>> The first error message covers the case that a mux name is not matched
>> in dt. This is removed as the returned error code (-ENOENT) is clear.
>>
>> The second error message is based on of_parse_phandle_with_args return
>> value. In case mux description is missing from DT, it returns -ENOENT.
>> Print error message only for other error codes.
>>
>> This ensures that the new helper functions will not confuse the user
>> either.
>>
>> Signed-off-by: Josua Mayer <josua@solid-run.com>
> Thanks for your patch!
>
>> --- a/drivers/mux/core.c
>> +++ b/drivers/mux/core.c
>> @@ -542,11 +542,8 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>> else
>> index = of_property_match_string(np, "mux-control-names",
>> mux_name);
>> - if (index < 0) {
>> - dev_err(dev, "mux controller '%s' not found\n",
>> - mux_name);
>> - return ERR_PTR(index);
>> - }
>> + if (index < 0)
>> + return ERR_PTR(-ENOENT);
>> }
>>
>> if (state)
>> @@ -558,8 +555,10 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name,
>> "mux-controls", "#mux-control-cells",
>> index, &args);
>> if (ret) {
>> - dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n",
>> - np, state ? "state" : "control", mux_name ?: "", index);
>> + if (ret != -ENOENT)
> I think the non-optional variant should still print an error message in
> case of -ENOENT, else this has to be duplicated in all drivers using it.
>
> This is typically handled by having a non-printing core helper function,
> and having printing non-optional, and non-printing/ignoring optional wrappers
> around the former.
I would prefer letting drivers use dev_err_probe.
Silent helper functions can more easily share code between them ...
If this is a strong preference I can rework the error behaviour and modify
the relevant mux_state_get and mux_control_get.
>
>> + dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n",
>> + np, state ? "state" : "control",
>> + mux_name ?: "", index);
>> return ERR_PTR(ret);
>> }
>>
> Gr{oetje,eeting}s,
>
> Geert
>
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
next prev parent reply other threads:[~2025-12-29 12:02 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-10 17:38 [PATCH v3 0/6] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-10 17:38 ` [PATCH v3 1/6] phy: can-transceiver: rename temporary helper function to avoid conflict Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-22 10:59 ` Geert Uytterhoeven
2025-12-22 10:59 ` Geert Uytterhoeven
2025-12-23 14:08 ` Vinod Koul
2025-12-23 14:08 ` Vinod Koul
2025-12-10 17:38 ` [PATCH v3 2/6] mux: Add helper functions for getting optional and selected mux-state Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-17 13:38 ` Ulf Hansson
2025-12-17 13:38 ` Ulf Hansson
2025-12-21 10:37 ` Josua Mayer
2025-12-21 10:37 ` Josua Mayer
2025-12-22 14:47 ` Ulf Hansson
2025-12-22 14:47 ` Ulf Hansson
2025-12-29 11:30 ` Josua Mayer
2025-12-29 11:30 ` Josua Mayer
2025-12-29 14:46 ` Ulf Hansson
2025-12-29 14:46 ` Ulf Hansson
2025-12-22 10:08 ` Geert Uytterhoeven
2025-12-22 10:08 ` Geert Uytterhoeven
2025-12-29 12:01 ` Josua Mayer [this message]
2025-12-29 12:01 ` Josua Mayer
2025-12-29 12:07 ` Josua Mayer
2025-12-29 12:07 ` Josua Mayer
2025-12-10 17:38 ` [PATCH v3 3/6] phy: can-transceiver: drop temporary helper getting optional mux-state Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-22 11:00 ` Geert Uytterhoeven
2025-12-22 11:00 ` Geert Uytterhoeven
2025-12-23 14:08 ` Vinod Koul
2025-12-23 14:08 ` Vinod Koul
2025-12-10 17:38 ` [PATCH v3 4/6] i2c: omap: switch to new generic helper for getting selected mux-state Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-23 17:11 ` Andreas Kemnade
2025-12-23 17:11 ` Andreas Kemnade
2025-12-10 17:38 ` [PATCH v3 5/6] dt-bindings: mmc: renesas,sdhi: Add mux-states property Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-10 17:38 ` [PATCH v3 6/6] mmc: host: renesas_sdhi_core: support selecting an optional mux Josua Mayer
2025-12-10 17:38 ` Josua Mayer
2025-12-17 13:42 ` [PATCH v3 0/6] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux Ulf Hansson
2025-12-17 13:42 ` Ulf Hansson
2025-12-21 10:45 ` Josua Mayer
2025-12-21 10:45 ` Josua Mayer
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=fd901bba-3203-46c2-b282-c5ad04128fd3@solid-run.com \
--to=josua@solid-run.com \
--cc=aaro.koskinen@iki.fi \
--cc=andi.shyti@kernel.org \
--cc=andreas@kemnade.info \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=geert@linux-m68k.org \
--cc=jmkrzyszt@gmail.com \
--cc=jon@solid-run.com \
--cc=khilman@baylibre.com \
--cc=kishon@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mailhol@kernel.org \
--cc=mikhail.anikin@solid-run.com \
--cc=mkl@pengutronix.de \
--cc=peda@axentia.se \
--cc=robh@kernel.org \
--cc=rogerq@kernel.org \
--cc=tony@atomide.com \
--cc=ulf.hansson@linaro.org \
--cc=vigneshr@ti.com \
--cc=vkoul@kernel.org \
--cc=wsa+renesas@sang-engineering.com \
--cc=yazan.shhady@solid-run.com \
/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.