mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
phy: can-transceiver: Re-instate "mux-states" property presence check
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 time using
the proper API) in a wrapper around devm_mux_state_get(). When the
multiplexer subsystem gains support for optional muxes, the wrapper can
just be removed.
In addition, propagate all real errors upstream, instead of ignoring
them.
Fixes: d02dfd4ceb ("phy: can-transceiver: Drop unnecessary "mux-states" property presence check")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Link: https://lore.kernel.org/r/3d7e0d723908284e8cf06ad1f7950c03173178f3.1742483710.git.geert+renesas@glider.be
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
d784552e76
commit
e153fdea9d
|
|
@ -93,6 +93,16 @@ static const struct of_device_id can_transceiver_phy_ids[] = {
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, can_transceiver_phy_ids);
|
MODULE_DEVICE_TABLE(of, can_transceiver_phy_ids);
|
||||||
|
|
||||||
|
/* Temporary wrapper until the multiplexer subsystem supports optional muxes */
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
static int can_transceiver_phy_probe(struct platform_device *pdev)
|
static int can_transceiver_phy_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct phy_provider *phy_provider;
|
struct phy_provider *phy_provider;
|
||||||
|
|
@ -114,13 +124,11 @@ static int can_transceiver_phy_probe(struct platform_device *pdev)
|
||||||
match = of_match_node(can_transceiver_phy_ids, pdev->dev.of_node);
|
match = of_match_node(can_transceiver_phy_ids, pdev->dev.of_node);
|
||||||
drvdata = match->data;
|
drvdata = match->data;
|
||||||
|
|
||||||
mux_state = devm_mux_state_get(dev, NULL);
|
mux_state = devm_mux_state_get_optional(dev, NULL);
|
||||||
if (IS_ERR(mux_state)) {
|
if (IS_ERR(mux_state))
|
||||||
if (PTR_ERR(mux_state) == -EPROBE_DEFER)
|
return PTR_ERR(mux_state);
|
||||||
return PTR_ERR(mux_state);
|
|
||||||
} else {
|
can_transceiver_phy->mux_state = mux_state;
|
||||||
can_transceiver_phy->mux_state = mux_state;
|
|
||||||
}
|
|
||||||
|
|
||||||
phy = devm_phy_create(dev, dev->of_node,
|
phy = devm_phy_create(dev, dev->of_node,
|
||||||
&can_transceiver_phy_ops);
|
&can_transceiver_phy_ops);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user