net: dsa: qca8k: add support for QCA8328
authorAnsuel Smith <ansuelsmth@gmail.com>
Wed, 13 Oct 2021 22:39:17 +0000 (00:39 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 15 Oct 2021 10:06:38 +0000 (11:06 +0100)
QCA8328 switch is the bigger brother of the qca8327. Same regs different
chip. Change the function to set the correct pin layout and introduce a
new match_data to differentiate the 2 switch as they have the same ID
and their internal PHY have the same ID.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/qca8k.c
drivers/net/dsa/qca8k.h

index 45a5321..36365d6 100644 (file)
@@ -935,6 +935,7 @@ static int
 qca8k_setup_of_pws_reg(struct qca8k_priv *priv)
 {
        struct device_node *node = priv->dev->of_node;
+       const struct qca8k_match_data *data;
        u32 val = 0;
        int ret;
 
@@ -943,8 +944,14 @@ qca8k_setup_of_pws_reg(struct qca8k_priv *priv)
         * Should be applied by default but we set this just to make sure.
         */
        if (priv->switch_id == QCA8K_ID_QCA8327) {
+               data = of_device_get_match_data(priv->dev);
+
+               /* Set the correct package of 148 pin for QCA8327 */
+               if (data->reduced_package)
+                       val |= QCA8327_PWS_PACKAGE148_EN;
+
                ret = qca8k_rmw(priv, QCA8K_REG_PWS, QCA8327_PWS_PACKAGE148_EN,
-                               QCA8327_PWS_PACKAGE148_EN);
+                               val);
                if (ret)
                        return ret;
        }
@@ -2105,7 +2112,12 @@ static int qca8k_resume(struct device *dev)
 static SIMPLE_DEV_PM_OPS(qca8k_pm_ops,
                         qca8k_suspend, qca8k_resume);
 
-static const struct qca8k_match_data qca832x = {
+static const struct qca8k_match_data qca8327 = {
+       .id = QCA8K_ID_QCA8327,
+       .reduced_package = true,
+};
+
+static const struct qca8k_match_data qca8328 = {
        .id = QCA8K_ID_QCA8327,
 };
 
@@ -2114,7 +2126,8 @@ static const struct qca8k_match_data qca833x = {
 };
 
 static const struct of_device_id qca8k_of_match[] = {
-       { .compatible = "qca,qca8327", .data = &qca832x },
+       { .compatible = "qca,qca8327", .data = &qca8327 },
+       { .compatible = "qca,qca8328", .data = &qca8328 },
        { .compatible = "qca,qca8334", .data = &qca833x },
        { .compatible = "qca,qca8337", .data = &qca833x },
        { /* sentinel */ },
index 35a471b..9c115cf 100644 (file)
@@ -260,6 +260,7 @@ struct ar8xxx_port_status {
 
 struct qca8k_match_data {
        u8 id;
+       bool reduced_package;
 };
 
 enum {