phy: phy-cadence-salvo: add phy .init API
authorPeter Chen <peter.chen@nxp.com>
Wed, 13 May 2020 12:56:05 +0000 (20:56 +0800)
committerVinod Koul <vkoul@kernel.org>
Fri, 15 May 2020 07:50:21 +0000 (13:20 +0530)
The .init is used for one-time PHY's initialization, and .power_on
is called many times during the device lifecycle.

Signed-off-by: Peter Chen <peter.chen@nxp.com>
Link: https://lore.kernel.org/r/20200513125605.5545-1-peter.chen@nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/phy/cadence/phy-cadence-salvo.c

index 292e9b4dd41ab76276a0e2021128b175b7117574..1ecbb964cd2160b12cc6d84e01ffeeafe21e2406 100644 (file)
@@ -205,7 +205,7 @@ static struct cdns_reg_pairs cdns_nxp_sequence_pair[] = {
        {0x0090, TB_ADDR_XCVR_DIAG_LANE_FCM_EN_MGN_TMR},
 };
 
-static int cdns_salvo_phy_power_on(struct phy *phy)
+static int cdns_salvo_phy_init(struct phy *phy)
 {
        struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy);
        struct cdns_salvo_data *data = salvo_phy->data;
@@ -230,9 +230,18 @@ static int cdns_salvo_phy_power_on(struct phy *phy)
 
        udelay(10);
 
+       clk_disable_unprepare(salvo_phy->clk);
+
        return ret;
 }
 
+static int cdns_salvo_phy_power_on(struct phy *phy)
+{
+       struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy);
+
+       return clk_prepare_enable(salvo_phy->clk);
+}
+
 static int cdns_salvo_phy_power_off(struct phy *phy)
 {
        struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy);
@@ -243,6 +252,7 @@ static int cdns_salvo_phy_power_off(struct phy *phy)
 }
 
 static struct phy_ops cdns_salvo_phy_ops = {
+       .init           = cdns_salvo_phy_init,
        .power_on       = cdns_salvo_phy_power_on,
        .power_off      = cdns_salvo_phy_power_off,
        .owner          = THIS_MODULE,