net: dsa: LAN9303: Add basic support for LAN9354
authorJerry Ray <jerry.ray@microchip.com>
Fri, 2 Sep 2022 21:30:21 +0000 (16:30 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Sep 2022 10:06:04 +0000 (11:06 +0100)
Adding support for the LAN9354 device by allowing it to use
the LAN9303 DSA driver.  These devices have the same underlying
access and control methods and from a feature set point of view
the LAN9354 is a superset of the LAN9303.

The MDIO access method has been tested on a SAMA5D3-EDS board
with a LAN9354 RMII daughter card.

While the SPI access method should also be the same, it has not
been tested and as such is not included at this time.

Signed-off-by: Jerry Ray <jerry.ray@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/Kconfig
drivers/net/dsa/lan9303-core.c
drivers/net/dsa/lan9303_mdio.c

index d8ae0e8..07507b4 100644 (file)
@@ -76,7 +76,7 @@ config NET_DSA_SMSC_LAN9303
        select NET_DSA_TAG_LAN9303
        select REGMAP
        help
-         This enables support for the SMSC/Microchip LAN9303 3 port ethernet
+         This enables support for the Microchip LAN9303/LAN9354 3 port ethernet
          switch chips.
 
 config NET_DSA_SMSC_LAN9303_I2C
@@ -90,11 +90,11 @@ config NET_DSA_SMSC_LAN9303_I2C
          for I2C managed mode.
 
 config NET_DSA_SMSC_LAN9303_MDIO
-       tristate "SMSC/Microchip LAN9303 3-ports 10/100 ethernet switch in MDIO managed mode"
+       tristate "Microchip LAN9303/LAN9354 3-ports 10/100 ethernet switch in MDIO managed mode"
        select NET_DSA_SMSC_LAN9303
        depends on VLAN_8021Q || VLAN_8021Q=n
        help
-         Enable access functions if the SMSC/Microchip LAN9303 is configured
+         Enable access functions if the Microchip LAN9303/LAN9354 is configured
          for MDIO managed mode.
 
 config NET_DSA_VITESSE_VSC73XX
index 9d53020..9e04541 100644 (file)
  */
 #define LAN9303_CHIP_REV 0x14
 # define LAN9303_CHIP_ID 0x9303
+# define LAN9352_CHIP_ID 0x9352
+# define LAN9353_CHIP_ID 0x9353
+# define LAN9354_CHIP_ID 0x9354
+# define LAN9355_CHIP_ID 0x9355
 #define LAN9303_IRQ_CFG 0x15
 # define LAN9303_IRQ_CFG_IRQ_ENABLE BIT(8)
 # define LAN9303_IRQ_CFG_IRQ_POL BIT(4)
@@ -855,8 +859,9 @@ static int lan9303_check_device(struct lan9303 *chip)
                return ret;
        }
 
-       if ((reg >> 16) != LAN9303_CHIP_ID) {
-               dev_err(chip->dev, "expecting LAN9303 chip, but found: %X\n",
+       if (((reg >> 16) != LAN9303_CHIP_ID) &&
+           ((reg >> 16) != LAN9354_CHIP_ID)) {
+               dev_err(chip->dev, "unexpected device found: LAN%4.4X\n",
                        reg >> 16);
                return -ENODEV;
        }
@@ -872,7 +877,7 @@ static int lan9303_check_device(struct lan9303 *chip)
        if (ret)
                dev_warn(chip->dev, "failed to disable switching %d\n", ret);
 
-       dev_info(chip->dev, "Found LAN9303 rev. %u\n", reg & 0xffff);
+       dev_info(chip->dev, "Found LAN%4.4X rev. %u\n", (reg >> 16), reg & 0xffff);
 
        ret = lan9303_detect_phy_setup(chip);
        if (ret) {
index bbb7032..d12c55f 100644 (file)
@@ -158,6 +158,7 @@ static void lan9303_mdio_shutdown(struct mdio_device *mdiodev)
 
 static const struct of_device_id lan9303_mdio_of_match[] = {
        { .compatible = "smsc,lan9303-mdio" },
+       { .compatible = "microchip,lan9354-mdio" },
        { /* sentinel */ },
 };
 MODULE_DEVICE_TABLE(of, lan9303_mdio_of_match);