Author: luka
Date: 2015-01-11 18:20:03 +0100 (Sun, 11 Jan 2015)
New Revision: 43936

Modified:
   trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.c
   trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.h
Log:
mvsw61xx: rework chip recognition

Recognizes 88E6171/6172/6176 at the moment.

Signed-off-by: Claudio Leite <[email protected]>

Modified: trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.c
===================================================================
--- trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.c 2015-01-11 
17:19:58 UTC (rev 43935)
+++ trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.c 2015-01-11 
17:20:03 UTC (rev 43936)
@@ -740,8 +740,8 @@
        struct mvsw61xx_state *state;
        struct device_node *np = pdev->dev.of_node;
        struct device_node *mdio;
+       char *model_str;
        u32 val;
-       u16 reg;
        int err;
 
        state = kzalloc(sizeof(*state), GFP_KERNEL);
@@ -776,17 +776,28 @@
                state->base_addr = MV_BASE;
        }
 
-       reg = r16(state->bus, state->is_indirect, state->base_addr,
-                       MV_PORTREG(IDENT, 0)) & MV_IDENT_MASK;
-       if (reg != MV_IDENT_VALUE) {
-               dev_err(&pdev->dev, "No switch found at 0x%02x\n",
+       state->model = r16(state->bus, state->is_indirect, state->base_addr,
+                               MV_PORTREG(IDENT, 0)) & MV_IDENT_MASK;
+
+       switch(state->model) {
+       case MV_IDENT_VALUE_6171:
+               model_str = MV_IDENT_STR_6171;
+               break;
+       case MV_IDENT_VALUE_6172:
+               model_str = MV_IDENT_STR_6172;
+               break;
+       case MV_IDENT_VALUE_6176:
+               model_str = MV_IDENT_STR_6176;
+               break;
+       default:
+               dev_err(&pdev->dev, "No compatible switch found at 0x%02x\n",
                                state->base_addr);
                err = -ENODEV;
                goto out_err;
        }
 
        platform_set_drvdata(pdev, state);
-       dev_info(&pdev->dev, "Found %s at %s:%02x\n", MV_IDENT_STR,
+       dev_info(&pdev->dev, "Found %s at %s:%02x\n", model_str,
                        state->bus->id, state->base_addr);
 
        dev_info(&pdev->dev, "Using %sdirect addressing\n",
@@ -808,7 +819,7 @@
        state->dev.vlans = MV_VLANS;
        state->dev.cpu_port = state->cpu_port0;
        state->dev.ports = MV_PORTS;
-       state->dev.name = MV_IDENT_STR;
+       state->dev.name = model_str;
        state->dev.ops = &mvsw61xx_ops;
        state->dev.alias = dev_name(&pdev->dev);
 
@@ -839,6 +850,8 @@
 
 static const struct of_device_id mvsw61xx_match[] = {
        { .compatible = "marvell,88e6171" },
+       { .compatible = "marvell,88e6172" },
+       { .compatible = "marvell,88e6176" },
        { }
 };
 MODULE_DEVICE_TABLE(of, mvsw61xx_match);

Modified: trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.h
===================================================================
--- trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.h 2015-01-11 
17:19:58 UTC (rev 43935)
+++ trunk/target/linux/generic/files/drivers/net/phy/mvsw61xx.h 2015-01-11 
17:20:03 UTC (rev 43936)
@@ -190,16 +190,24 @@
 };
 #define MV_INDIRECT_ADDR_S             5
 
-#define MV_IDENT_MASK                  0xffc0
-#define MV_IDENT_VALUE                 0x1700
-#define MV_IDENT_STR                   "MV88E617x"
+#define MV_IDENT_MASK                  0xfff0
 
+#define MV_IDENT_VALUE_6171            0x1710
+#define MV_IDENT_STR_6171              "MV88E6171"
+
+#define MV_IDENT_VALUE_6172            0x1720
+#define MV_IDENT_STR_6172              "MV88E6172"
+
+#define MV_IDENT_VALUE_6176            0x1760
+#define MV_IDENT_STR_6176              "MV88E6176"
+
 #define MV_PVID_MASK                   0x0fff
 
 struct mvsw61xx_state {
        struct switch_dev dev;
        struct mii_bus *bus;
        int base_addr;
+       u16 model;
 
        bool registered;
        bool is_indirect;
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to