[PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check

Geert Uytterhoeven posted 1 patch 9 months ago
There is a newer version of this series
drivers/phy/phy-can-transceiver.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
[PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check
Posted by Geert Uytterhoeven 9 months ago
On the Renesas Gray Hawk Single development board:

    can-transceiver-phy can-phy0: /can-phy0: failed to get mux-state (0)

"mux-states" is an optional property for CAN transceivers.  However,
mux_get() always prints an error message in case of an error, including
when the property is not present, confusing the user.

Fix this by re-instating the property presence check.

This is bascially a revert of commit d02dfd4ceb2e9f34 ("phy:
can-transceiver: Drop unnecessary "mux-states" property presence
check"), with two changes:
  1. Use the proper API for checking whether a property is present,
  2. Do not print an error message, as the mux core already takes care
     of that.

Fixes: d02dfd4ceb2e9f34 ("phy: can-transceiver: Drop unnecessary "mux-states" property presence check")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Alternatively, the multiplexer subsystem needs to gain support for
getting an optional mux...
---
 drivers/phy/phy-can-transceiver.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/phy/phy-can-transceiver.c b/drivers/phy/phy-can-transceiver.c
index 2bec70615449f94d..539b3446b9c33eed 100644
--- a/drivers/phy/phy-can-transceiver.c
+++ b/drivers/phy/phy-can-transceiver.c
@@ -103,7 +103,6 @@ static int can_transceiver_phy_probe(struct platform_device *pdev)
 	struct phy *phy;
 	struct gpio_desc *standby_gpio;
 	struct gpio_desc *enable_gpio;
-	struct mux_state *mux_state;
 	u32 max_bitrate = 0;
 	int err;
 
@@ -114,11 +113,13 @@ static int can_transceiver_phy_probe(struct platform_device *pdev)
 	match = of_match_node(can_transceiver_phy_ids, pdev->dev.of_node);
 	drvdata = match->data;
 
-	mux_state = devm_mux_state_get(dev, NULL);
-	if (IS_ERR(mux_state)) {
-		if (PTR_ERR(mux_state) == -EPROBE_DEFER)
+	if (of_property_present(dev->of_node, "mux-states")) {
+		struct mux_state *mux_state;
+
+		mux_state = devm_mux_state_get(dev, NULL);
+		if (IS_ERR(mux_state))
 			return PTR_ERR(mux_state);
-	} else {
+
 		can_transceiver_phy->mux_state = mux_state;
 	}
 
-- 
2.43.0
Re: [PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check
Posted by Sergey Shtylyov 9 months ago
On 3/19/25 4:27 PM, Geert Uytterhoeven wrote:

> On the Renesas Gray Hawk Single development board:
> 
>     can-transceiver-phy can-phy0: /can-phy0: failed to get mux-state (0)
> 
> "mux-states" is an optional property for CAN transceivers.  However,
> mux_get() always prints an error message in case of an error, including
> when the property is not present, confusing the user.
> 
> Fix this by re-instating the property presence check.
> 
> This is bascially a revert of commit d02dfd4ceb2e9f34 ("phy:

   Basically. :-)

> can-transceiver: Drop unnecessary "mux-states" property presence
> check"), with two changes:
>   1. Use the proper API for checking whether a property is present,
>   2. Do not print an error message, as the mux core already takes care
>      of that.
> 
> Fixes: d02dfd4ceb2e9f34 ("phy: can-transceiver: Drop unnecessary "mux-states" property presence check")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> Alternatively, the multiplexer subsystem needs to gain support for
> getting an optional mux...
[...]
MBR, Sergey
Re: [PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check
Posted by Vincent Mailhol 9 months ago
For some reasons, I received your message twice (with a two minutes
interval between both messages). These look identical. I am answering
the most recent. :)

On 19/03/2025 at 22:27, Geert Uytterhoeven wrote:
> On the Renesas Gray Hawk Single development board:
> 
>     can-transceiver-phy can-phy0: /can-phy0: failed to get mux-state (0)
> 
> "mux-states" is an optional property for CAN transceivers.  However,
> mux_get() always prints an error message in case of an error, including
> when the property is not present, confusing the user.

Hmmm, I understand why you are doing this patch. But on the long term,
wouldn't it make more sense to have a devm_mux_state_get_optional()? Or
maybe add a property somewhere to inform devm_mux_state_get() that this
is optional?

Regardless, just see this as an open question. I am OK with the approach
of your patch.

> Fix this by re-instating the property presence check.
> 
> This is bascially a revert of commit d02dfd4ceb2e9f34 ("phy:
> can-transceiver: Drop unnecessary "mux-states" property presence
> check"), with two changes:
>   1. Use the proper API for checking whether a property is present,
>   2. Do not print an error message, as the mux core already takes care
>      of that.
> 
> Fixes: d02dfd4ceb2e9f34 ("phy: can-transceiver: Drop unnecessary "mux-states" property presence check")> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Notwithstanding of above comment:

Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>


Yours sincerely,
Vincent Mailhol

Re: [PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check
Posted by Geert Uytterhoeven 9 months ago
Hi Vincent,

On Wed, 19 Mar 2025 at 15:07, Vincent Mailhol
<mailhol.vincent@wanadoo.fr> wrote:
> For some reasons, I received your message twice (with a two minutes
> interval between both messages). These look identical. I am answering

My scripting didn't handle the comment in Rob's address correctly,
so I resent the patch with the fixed address.

> the most recent. :)

Good ;-)

> On 19/03/2025 at 22:27, Geert Uytterhoeven wrote:
> > On the Renesas Gray Hawk Single development board:
> >
> >     can-transceiver-phy can-phy0: /can-phy0: failed to get mux-state (0)
> >
> > "mux-states" is an optional property for CAN transceivers.  However,
> > mux_get() always prints an error message in case of an error, including
> > when the property is not present, confusing the user.
>
> Hmmm, I understand why you are doing this patch. But on the long term,
> wouldn't it make more sense to have a devm_mux_state_get_optional()? Or
> maybe add a property somewhere to inform devm_mux_state_get() that this
> is optional?
>
> Regardless, just see this as an open question. I am OK with the approach
> of your patch.

Alternatively, we can be proactive and add a temporary local wrapper:

    /* Dummy wrapper until optional muxes are supported */
    static inline struct mux_state *
    devm_mux_state_get_optional(struct device *dev, const char *mux_name)
    {
            if (!of_property_present(dev->of_node, "mux-states"))
                    return NULL;

            return devm_mux_state_get(dev, mux_name);
    }

and call that instead?  Then the probe function needs no future changes
when the real devm_mux_state_get_optional() arrives.

> > Fix this by re-instating the property presence check.
> >
> > This is bascially a revert of commit d02dfd4ceb2e9f34 ("phy:
> > can-transceiver: Drop unnecessary "mux-states" property presence
> > check"), with two changes:
> >   1. Use the proper API for checking whether a property is present,
> >   2. Do not print an error message, as the mux core already takes care
> >      of that.
> >
> > Fixes: d02dfd4ceb2e9f34 ("phy: can-transceiver: Drop unnecessary "mux-states" property presence check")> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
>
> Notwithstanding of above comment:
>
> Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>

Thanks!

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Re: [PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check
Posted by Vincent Mailhol 9 months ago
On 20/03/2025 at 19:25, Geert Uytterhoeven wrote:
> Hi Vincent,

(...)

>> On 19/03/2025 at 22:27, Geert Uytterhoeven wrote:
>>> On the Renesas Gray Hawk Single development board:
>>>
>>>     can-transceiver-phy can-phy0: /can-phy0: failed to get mux-state (0)
>>>
>>> "mux-states" is an optional property for CAN transceivers.  However,
>>> mux_get() always prints an error message in case of an error, including
>>> when the property is not present, confusing the user.
>>
>> Hmmm, I understand why you are doing this patch. But on the long term,
>> wouldn't it make more sense to have a devm_mux_state_get_optional()? Or
>> maybe add a property somewhere to inform devm_mux_state_get() that this
>> is optional?
>>
>> Regardless, just see this as an open question. I am OK with the approach
>> of your patch.
> 
> Alternatively, we can be proactive and add a temporary local wrapper:
> 
>     /* Dummy wrapper until optional muxes are supported */
>     static inline struct mux_state *
>     devm_mux_state_get_optional(struct device *dev, const char *mux_name)
>     {
>             if (!of_property_present(dev->of_node, "mux-states"))
>                     return NULL;
> 
>             return devm_mux_state_get(dev, mux_name);
>     }
> 
> and call that instead?  Then the probe function needs no future changes
> when the real devm_mux_state_get_optional() arrives.

This looks like a more elegant and more long term solution!

Yours sincerely,
Vincent Mailhol
Re: [PATCH] phy: can-transceiver: Re-instate "mux-states" property presence check
Posted by Vincent Mailhol 9 months ago
On 19/03/2025 at 23:06, Vincent Mailhol wrote:
> For some reasons, I received your message twice (with a two minutes
> interval between both messages). These look identical. I am answering
> the most recent. :)
> 
> On 19/03/2025 at 22:27, Geert Uytterhoeven wrote:
>> On the Renesas Gray Hawk Single development board:
>>
>>     can-transceiver-phy can-phy0: /can-phy0: failed to get mux-state (0)
>>
>> "mux-states" is an optional property for CAN transceivers.  However,
>> mux_get() always prints an error message in case of an error, including
>> when the property is not present, confusing the user.
> 
> Hmmm, I understand why you are doing this patch. But on the long term,
> wouldn't it make more sense to have a devm_mux_state_get_optional()? Or
> maybe add a property somewhere to inform devm_mux_state_get() that this
> is optional?
> 
> Regardless, just see this as an open question. I am OK with the approach
> of your patch.

Ah, and I just realized that you mentioned the exact same thing under
the --- cutter, which for some reasons my eyes refused to see.

Sorry for the noise.

>> Fix this by re-instating the property presence check.
>>
>> This is bascially a revert of commit d02dfd4ceb2e9f34 ("phy:
>> can-transceiver: Drop unnecessary "mux-states" property presence
>> check"), with two changes:
>>   1. Use the proper API for checking whether a property is present,
>>   2. Do not print an error message, as the mux core already takes care
>>      of that.
>>
>> Fixes: d02dfd4ceb2e9f34 ("phy: can-transceiver: Drop unnecessary "mux-states" property presence check")> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> 
> Notwithstanding of above comment:
> 
> Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>

Yours sincerely,
Vincent Mailhol