mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 04:21:09 -04:00
phy: qcom-sgmii-eth: relax order of .power_on() vs .set_mode*()
Allow any order of the .power_on() and .set_mode*() methods as per the recent discussion. This means phy_power_on() with this SerDes will now restore the previous setup without requiring a subsequent phy_set_mode*() call. Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com> Acked-by: Vinod Koul <vkoul@kernel.org> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Link: https://patch.msgid.link/E1vxS4P-0000000BQXs-0vGB@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
f82210ce8c
commit
ebe8b48b88
@@ -271,8 +271,17 @@ static int qcom_dwmac_sgmii_phy_calibrate(struct phy *phy)
|
||||
static int qcom_dwmac_sgmii_phy_power_on(struct phy *phy)
|
||||
{
|
||||
struct qcom_dwmac_sgmii_phy_data *data = phy_get_drvdata(phy);
|
||||
int ret;
|
||||
|
||||
return clk_prepare_enable(data->refclk);
|
||||
ret = clk_prepare_enable(data->refclk);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = qcom_dwmac_sgmii_phy_calibrate(phy);
|
||||
if (ret < 0)
|
||||
clk_disable_unprepare(data->refclk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int qcom_dwmac_sgmii_phy_power_off(struct phy *phy)
|
||||
@@ -318,6 +327,9 @@ static int qcom_dwmac_sgmii_phy_set_mode(struct phy *phy, enum phy_mode mode,
|
||||
if (submode != data->interface)
|
||||
data->interface = submode;
|
||||
|
||||
if (phy->power_count == 0)
|
||||
return 0;
|
||||
|
||||
return qcom_dwmac_sgmii_phy_calibrate(phy);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user