165 lines
4.3 KiB
Diff
165 lines
4.3 KiB
Diff
From git@z Thu Jan 1 00:00:00 1970
|
|
Subject: [PATCH v13 22/35] phy: rockchip: usbdp: Use guard functions for
|
|
mutex
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Tue, 14 Jul 2026 21:26:23 +0200
|
|
Message-Id: <20260714-rockchip-usbdp-cleanup-v13-22-6cb3e769d4c5@collabora.com>
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 7bit
|
|
|
|
Convert the driver to use guard functions for mutex handling as
|
|
a small cleanup. There is a small functional change in the DP PHY
|
|
power up function, which no longer sleeps if the internal powerup
|
|
code returns an error. This is not a problem as the sleep is only
|
|
relevant for successful power-up.
|
|
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
---
|
|
drivers/phy/rockchip/phy-rockchip-usbdp.c | 54 +++++++++++++------------------
|
|
1 file changed, 23 insertions(+), 31 deletions(-)
|
|
|
|
--- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
|
|
+++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
|
|
@@ -10,6 +10,7 @@
|
|
#include <dt-bindings/phy/phy.h>
|
|
#include <linux/bitfield.h>
|
|
#include <linux/bits.h>
|
|
+#include <linux/cleanup.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/gpio.h>
|
|
@@ -650,14 +651,15 @@ static int rk_udphy_orien_sw_set(struct
|
|
struct rk_udphy *udphy = typec_switch_get_drvdata(sw);
|
|
bool flipped = orien == TYPEC_ORIENTATION_REVERSE;
|
|
|
|
- mutex_lock(&udphy->mutex);
|
|
+ guard(mutex)(&udphy->mutex);
|
|
|
|
if (orien == TYPEC_ORIENTATION_NONE) {
|
|
gpiod_set_value_cansleep(udphy->sbu1_dc_gpio, 0);
|
|
gpiod_set_value_cansleep(udphy->sbu2_dc_gpio, 0);
|
|
/* unattached */
|
|
rk_udphy_usb_bvalid_enable(udphy, false);
|
|
- goto unlock_ret;
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
if (udphy->flip != flipped)
|
|
@@ -667,8 +669,6 @@ static int rk_udphy_orien_sw_set(struct
|
|
rk_udphy_set_typec_default_mapping(udphy);
|
|
rk_udphy_usb_bvalid_enable(udphy, true);
|
|
|
|
-unlock_ret:
|
|
- mutex_unlock(&udphy->mutex);
|
|
return 0;
|
|
}
|
|
|
|
@@ -1020,26 +1020,25 @@ static int rk_udphy_dp_phy_power_on(stru
|
|
struct rk_udphy *udphy = phy_get_drvdata(phy);
|
|
int ret;
|
|
|
|
- mutex_lock(&udphy->mutex);
|
|
+ scoped_guard(mutex, &udphy->mutex) {
|
|
+ phy_set_bus_width(phy, udphy->dp_lanes);
|
|
|
|
- phy_set_bus_width(phy, udphy->dp_lanes);
|
|
-
|
|
- ret = rk_udphy_power_on(udphy, UDPHY_MODE_DP);
|
|
- if (ret)
|
|
- goto unlock;
|
|
+ ret = rk_udphy_power_on(udphy, UDPHY_MODE_DP);
|
|
+ if (ret)
|
|
+ return ret;
|
|
|
|
- rk_udphy_dp_lane_enable(udphy, udphy->dp_lanes);
|
|
+ rk_udphy_dp_lane_enable(udphy, udphy->dp_lanes);
|
|
|
|
- rk_udphy_dp_lane_select(udphy);
|
|
+ rk_udphy_dp_lane_select(udphy);
|
|
+ }
|
|
|
|
-unlock:
|
|
- mutex_unlock(&udphy->mutex);
|
|
/*
|
|
* If data send by aux channel too fast after phy power on,
|
|
* the aux may be not ready which will cause aux error. Adding
|
|
* delay to avoid this issue.
|
|
*/
|
|
usleep_range(10000, 11000);
|
|
+
|
|
return ret;
|
|
}
|
|
|
|
@@ -1047,10 +1046,10 @@ static int rk_udphy_dp_phy_power_off(str
|
|
{
|
|
struct rk_udphy *udphy = phy_get_drvdata(phy);
|
|
|
|
- mutex_lock(&udphy->mutex);
|
|
+ guard(mutex)(&udphy->mutex);
|
|
+
|
|
rk_udphy_dp_lane_enable(udphy, 0);
|
|
rk_udphy_power_off(udphy, UDPHY_MODE_DP);
|
|
- mutex_unlock(&udphy->mutex);
|
|
|
|
return 0;
|
|
}
|
|
@@ -1255,35 +1254,30 @@ static const struct phy_ops rk_udphy_dp_
|
|
static int rk_udphy_usb3_phy_init(struct phy *phy)
|
|
{
|
|
struct rk_udphy *udphy = phy_get_drvdata(phy);
|
|
- int ret = 0;
|
|
|
|
- mutex_lock(&udphy->mutex);
|
|
+ guard(mutex)(&udphy->mutex);
|
|
+
|
|
/* DP only or high-speed, disable U3 port */
|
|
if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) {
|
|
rk_udphy_u3_port_disable(udphy, true);
|
|
- goto unlock;
|
|
+ return 0;
|
|
}
|
|
|
|
- ret = rk_udphy_power_on(udphy, UDPHY_MODE_USB);
|
|
-
|
|
-unlock:
|
|
- mutex_unlock(&udphy->mutex);
|
|
- return ret;
|
|
+ return rk_udphy_power_on(udphy, UDPHY_MODE_USB);
|
|
}
|
|
|
|
static int rk_udphy_usb3_phy_exit(struct phy *phy)
|
|
{
|
|
struct rk_udphy *udphy = phy_get_drvdata(phy);
|
|
|
|
- mutex_lock(&udphy->mutex);
|
|
+ guard(mutex)(&udphy->mutex);
|
|
+
|
|
/* DP only or high-speed */
|
|
if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs)
|
|
- goto unlock;
|
|
+ return 0;
|
|
|
|
rk_udphy_power_off(udphy, UDPHY_MODE_USB);
|
|
|
|
-unlock:
|
|
- mutex_unlock(&udphy->mutex);
|
|
return 0;
|
|
}
|
|
|
|
@@ -1315,12 +1309,10 @@ static int rk_udphy_typec_mux_set(struct
|
|
if (!rk_udphy_is_supported_mode(state))
|
|
return 0;
|
|
|
|
- mutex_lock(&udphy->mutex);
|
|
+ guard(mutex)(&udphy->mutex);
|
|
|
|
rk_udphy_set_typec_state(udphy, state->mode);
|
|
|
|
- mutex_unlock(&udphy->mutex);
|
|
-
|
|
return 0;
|
|
}
|
|
|