summaryrefslogtreecommitdiff
path: root/drivers/net/dsa/qca/qca8k-common.c
diff options
context:
space:
mode:
authorChristian Marangi <ansuelsmth@gmail.com>2022-07-27 14:35:23 +0300
committerJakub Kicinski <kuba@kernel.org>2022-07-29 08:24:40 +0300
commit9d1bcb1f293f1391302a109c9819c3705c804700 (patch)
tree103a0dbdc757b3fdc05b88792d90b41d640ebaf2 /drivers/net/dsa/qca/qca8k-common.c
parente9bbf019af44b204b71ef8edf224002550aab641 (diff)
downloadlinux-9d1bcb1f293f1391302a109c9819c3705c804700.tar.xz
net: dsa: qca8k: move read_switch_id function to common code
The same function to read the switch id is used by drivers based on qca8k family switch. Move them to common code to make them accessible also by other drivers. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Reviewed-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/dsa/qca/qca8k-common.c')
-rw-r--r--drivers/net/dsa/qca/qca8k-common.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/net/dsa/qca/qca8k-common.c b/drivers/net/dsa/qca/qca8k-common.c
index c881a95441dd..bba95613e218 100644
--- a/drivers/net/dsa/qca/qca8k-common.c
+++ b/drivers/net/dsa/qca/qca8k-common.c
@@ -1179,3 +1179,32 @@ int qca8k_port_lag_leave(struct dsa_switch *ds, int port,
{
return qca8k_lag_refresh_portmap(ds, port, lag, true);
}
+
+int qca8k_read_switch_id(struct qca8k_priv *priv)
+{
+ u32 val;
+ u8 id;
+ int ret;
+
+ if (!priv->info)
+ return -ENODEV;
+
+ ret = qca8k_read(priv, QCA8K_REG_MASK_CTRL, &val);
+ if (ret < 0)
+ return -ENODEV;
+
+ id = QCA8K_MASK_CTRL_DEVICE_ID(val);
+ if (id != priv->info->id) {
+ dev_err(priv->dev,
+ "Switch id detected %x but expected %x",
+ id, priv->info->id);
+ return -ENODEV;
+ }
+
+ priv->switch_id = id;
+
+ /* Save revision to communicate to the internal PHY driver */
+ priv->switch_revision = QCA8K_MASK_CTRL_REV_ID(val);
+
+ return 0;
+}