mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
phy: rockchip: usbdp: Use guard functions for mutex
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. Tested-by: Igor Paunovic <royalnet026@gmail.com> # Orange Pi 5 Plus Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com> Link: https://patch.msgid.link/20260915-rockchip-usbdp-cleanup-part2-v15-6-8d507cb1174f@collabora.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
b1ca8de219
commit
f8e38359fd
|
|
@ -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/consumer.h>
|
||||
|
|
@ -649,14 +650,15 @@ static int rk_udphy_orien_sw_set(struct typec_switch_dev *sw,
|
|||
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)
|
||||
|
|
@ -666,8 +668,6 @@ static int rk_udphy_orien_sw_set(struct typec_switch_dev *sw,
|
|||
rk_udphy_set_typec_default_mapping(udphy);
|
||||
rk_udphy_usb_bvalid_enable(udphy, true);
|
||||
|
||||
unlock_ret:
|
||||
mutex_unlock(&udphy->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1019,26 +1019,25 @@ static int rk_udphy_dp_phy_power_on(struct phy *phy)
|
|||
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)
|
||||
return ret;
|
||||
|
||||
ret = rk_udphy_power_on(udphy, UDPHY_MODE_DP);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1046,10 +1045,10 @@ static int rk_udphy_dp_phy_power_off(struct phy *phy)
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
|
@ -1254,35 +1253,30 @@ static const struct phy_ops rk_udphy_dp_phy_ops = {
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1314,12 +1308,10 @@ static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux,
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user