[PATCH v6 5/9] phy: phy-can-transceiver: Propagate return value of gpiod_set_value_cansleep

Peng Fan posted 9 patches 3 weeks, 2 days ago
There is a newer version of this series
[PATCH v6 5/9] phy: phy-can-transceiver: Propagate return value of gpiod_set_value_cansleep
Posted by Peng Fan 3 weeks, 2 days ago
gpiod_set_value_cansleep might return failure, propagate the return value
of gpiod_set_value_cansleep to parent.

Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/phy/phy-can-transceiver.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/phy/phy-can-transceiver.c b/drivers/phy/phy-can-transceiver.c
index b7d75a78d9242e2003660a87d2d4c9f784aea523..ccb29e1dfe0d07005b4bcd8fefa2787292d921a0 100644
--- a/drivers/phy/phy-can-transceiver.c
+++ b/drivers/phy/phy-can-transceiver.c
@@ -46,23 +46,32 @@ static int can_transceiver_phy_power_on(struct phy *phy)
 			return ret;
 		}
 	}
-	gpiod_set_value_cansleep(can_transceiver_phy->standby_gpio, 0);
-	gpiod_set_value_cansleep(can_transceiver_phy->enable_gpio, 1);
 
-	return 0;
+	ret = gpiod_set_value_cansleep(can_transceiver_phy->standby_gpio, 0);
+	if (ret)
+		return ret;
+
+	return gpiod_set_value_cansleep(can_transceiver_phy->enable_gpio, 1);
 }
 
 /* Power off function */
 static int can_transceiver_phy_power_off(struct phy *phy)
 {
 	struct can_transceiver_phy *can_transceiver_phy = phy_get_drvdata(phy);
+	int ret;
+
+	ret = gpiod_set_value_cansleep(can_transceiver_phy->standby_gpio, 1);
+	if (ret)
+		return ret;
+
+	ret = gpiod_set_value_cansleep(can_transceiver_phy->enable_gpio, 0);
+	if (ret)
+		return ret;
 
-	gpiod_set_value_cansleep(can_transceiver_phy->standby_gpio, 1);
-	gpiod_set_value_cansleep(can_transceiver_phy->enable_gpio, 0);
 	if (can_transceiver_phy->priv->mux_state)
-		mux_state_deselect(can_transceiver_phy->priv->mux_state);
+		ret = mux_state_deselect(can_transceiver_phy->priv->mux_state);
 
-	return 0;
+	return ret;
 }
 
 static const struct phy_ops can_transceiver_phy_ops = {

-- 
2.37.1
Re: [PATCH v6 5/9] phy: phy-can-transceiver: Propagate return value of gpiod_set_value_cansleep
Posted by Marc Kleine-Budde 1 week, 6 days ago
On 09.09.2025 13:40:15, Peng Fan wrote:
> gpiod_set_value_cansleep might return failure, propagate the return value
> of gpiod_set_value_cansleep to parent.

Are there any expectations of the phy framework from the driver if the
switch on or off fails? Do you have to roll back any changes in case of
an error?

Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde          |
Embedded Linux                   | https://www.pengutronix.de |
Vertretung Nürnberg              | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |
Re: [PATCH v6 5/9] phy: phy-can-transceiver: Propagate return value of gpiod_set_value_cansleep
Posted by Peng Fan 1 week, 3 days ago
On Fri, Sep 19, 2025 at 09:18:21PM +0200, Marc Kleine-Budde wrote:
>On 09.09.2025 13:40:15, Peng Fan wrote:
>> gpiod_set_value_cansleep might return failure, propagate the return value
>> of gpiod_set_value_cansleep to parent.
>
>Are there any expectations of the phy framework from the driver if the
>switch on or off fails? Do you have to roll back any changes in case of
>an error?

The phy framework expects return value, so if on or off fails, the
phy framework will record and handle properly, but if one of GPIO settings
fail, the driver itself should handle it and need to roll back. I will update
in V7.

Thanks,
Peng

>
>Marc
>
>-- 
>Pengutronix e.K.                 | Marc Kleine-Budde          |
>Embedded Linux                   | https://www.pengutronix.de |
>Vertretung N??rnberg              | Phone: +49-5121-206917-129 |
>Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |