summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Moussalem <george.moussalem@outlook.com>2026-06-08 08:09:19 +0300
committerJakub Kicinski <kuba@kernel.org>2026-06-12 01:32:13 +0300
commitcf6077e4903ffed2291f5f3cb9d61b29abe456c4 (patch)
tree8d853a67a6f99d3bc42dd9fc99e08f7fe8065bae
parentfea4ae4b5b5059612d1a4f5acb88c27a5f7e60dc (diff)
downloadlinux-cf6077e4903ffed2291f5f3cb9d61b29abe456c4.tar.xz
net: phy: at803x: add RX and TX clock management for IPQ5018 PHY
Acquire and enable the RX and TX clocks for the IPQ5018 PHY. These clocks are required for the PHY's datapath to function correctly. Signed-off-by: George Moussalem <george.moussalem@outlook.com> Link: https://patch.msgid.link/20260608-ipq5018-gephy-clocks-v4-4-fb2ccd56894b@outlook.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/phy/qcom/at803x.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/phy/qcom/at803x.c b/drivers/net/phy/qcom/at803x.c
index 63726cf98cd4..ba4dc07752b6 100644
--- a/drivers/net/phy/qcom/at803x.c
+++ b/drivers/net/phy/qcom/at803x.c
@@ -19,6 +19,7 @@
#include <linux/regulator/consumer.h>
#include <linux/of.h>
#include <linux/phylink.h>
+#include <linux/clk.h>
#include <linux/reset.h>
#include <linux/phy_port.h>
#include <dt-bindings/net/qca-ar803x.h>
@@ -1074,6 +1075,7 @@ static void ipq5018_link_change_notify(struct phy_device *phydev)
static int ipq5018_probe(struct phy_device *phydev)
{
struct device *dev = &phydev->mdio.dev;
+ struct clk *rx_clk, *tx_clk;
struct ipq5018_priv *priv;
int ret;
@@ -1084,6 +1086,16 @@ static int ipq5018_probe(struct phy_device *phydev)
priv->set_short_cable_dac = of_property_read_bool(dev->of_node,
"qcom,dac-preset-short-cable");
+ rx_clk = devm_clk_get_enabled(dev, "rx");
+ if (IS_ERR(rx_clk))
+ return dev_err_probe(dev, PTR_ERR(rx_clk),
+ "failed to get and enable RX clock\n");
+
+ tx_clk = devm_clk_get_enabled(dev, "tx");
+ if (IS_ERR(tx_clk))
+ return dev_err_probe(dev, PTR_ERR(tx_clk),
+ "failed to get and enable TX clock\n");
+
priv->rst = devm_reset_control_array_get_exclusive(dev);
if (IS_ERR(priv->rst))
return dev_err_probe(dev, PTR_ERR(priv->rst),