The BCM53128 seems to be very similar to the BCM53125 but has some more ports.
Signed-off-by: Helmut Schaa <helmut.sc...@googlemail.com>
---
 .../generic/files/drivers/net/phy/b53/b53_common.c | 14 +++++++++++++
 .../generic/files/drivers/net/phy/b53/b53_mdio.c   | 24 ++++++++++++++++++++++
 .../generic/files/drivers/net/phy/b53/b53_priv.h   |  4 +++-
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c 
b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
index f6a5418..72b08e1 100644
--- a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
+++ b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
@@ -1130,6 +1130,19 @@ static const struct b53_chip_data b53_switch_chips[] = {
                .sw_ops = &b53_switch_ops,
        },
        {
+               .chip_id = BCM53128_DEVICE_ID,
+               .dev_name = "BCM53128",
+               .alias = "bcm53128",
+               .vlans = 4096,
+               .enabled_ports = 0x1ff,
+               .cpu_port = B53_CPU_PORT,
+               .vta_regs = B53_VTA_REGS,
+               .duplex_reg = B53_DUPLEX_STAT_GE,
+               .jumbo_pm_reg = B53_JUMBO_PORT_MASK,
+               .jumbo_size_reg = B53_JUMBO_MAX_SIZE,
+               .sw_ops = &b53_switch_ops,
+       },
+       {
                .chip_id = BCM63XX_DEVICE_ID,
                .dev_name = "BCM63xx",
                .alias = "bcm63xx",
@@ -1363,6 +1376,7 @@ int b53_switch_detect(struct b53_device *dev)
                switch (id32) {
                case BCM53115_DEVICE_ID:
                case BCM53125_DEVICE_ID:
+               case BCM53128_DEVICE_ID:
                case BCM53010_DEVICE_ID:
                case BCM53011_DEVICE_ID:
                case BCM53012_DEVICE_ID:
diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c 
b/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c
index cacf32b..b7e6b59 100644
--- a/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c
+++ b/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c
@@ -389,6 +389,23 @@ static struct phy_driver b53_phy_driver_id3 = {
        },
 };
 
+/* BCM53128 */
+static struct phy_driver b53_phy_driver_id4 = {
+       .phy_id         = 0x03625e14,
+       .name           = "Broadcom B53 (4)",
+       .phy_id_mask    = 0x1ffffc00,
+       .features       = 0,
+       .probe          = b53_phy_probe,
+       .remove         = b53_phy_remove,
+       .config_aneg    = b53_phy_config_aneg,
+       .config_init    = b53_phy_config_init,
+       .read_status    = b53_phy_read_status,
+       .driver = {
+               .owner = THIS_MODULE,
+       },
+};
+
+
 int __init b53_phy_driver_register(void)
 {
        int ret;
@@ -402,9 +419,15 @@ int __init b53_phy_driver_register(void)
                goto err1;
 
        ret = phy_driver_register(&b53_phy_driver_id3);
+       if (ret)
+               goto err2;
+
+       ret = phy_driver_register(&b53_phy_driver_id4);
        if (!ret)
                return 0;
 
+       phy_driver_unregister(&b53_phy_driver_id3);
+err2:
        phy_driver_unregister(&b53_phy_driver_id2);
 err1:
        phy_driver_unregister(&b53_phy_driver_id1);
@@ -413,6 +436,7 @@ err1:
 
 void __exit b53_phy_driver_unregister(void)
 {
+       phy_driver_unregister(&b53_phy_driver_id4);
        phy_driver_unregister(&b53_phy_driver_id3);
        phy_driver_unregister(&b53_phy_driver_id2);
        phy_driver_unregister(&b53_phy_driver_id1);
diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h 
b/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h
index d9881a1..ce5b530 100644
--- a/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h
+++ b/target/linux/generic/files/drivers/net/phy/b53/b53_priv.h
@@ -46,6 +46,7 @@ enum {
        BCM5398_DEVICE_ID = 0x98,
        BCM53115_DEVICE_ID = 0x53115,
        BCM53125_DEVICE_ID = 0x53125,
+       BCM53128_DEVICE_ID = 0x53128,
        BCM63XX_DEVICE_ID = 0x6300,
        BCM53010_DEVICE_ID = 0x53010,
        BCM53011_DEVICE_ID = 0x53011,
@@ -137,7 +138,8 @@ static inline int is539x(struct b53_device *dev)
 static inline int is531x5(struct b53_device *dev)
 {
        return dev->chip_id == BCM53115_DEVICE_ID ||
-               dev->chip_id == BCM53125_DEVICE_ID;
+               dev->chip_id == BCM53125_DEVICE_ID ||
+               dev->chip_id == BCM53128_DEVICE_ID;
 }
 
 static inline int is63xx(struct b53_device *dev)
-- 
1.8.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to