Skip to content

Commit

Permalink
net: dsa: LAN9303: Add basic support for LAN9354
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jerry Ray authored and David S. Miller committed Sep 7, 2022
1 parent 732f374 commit 13248b9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
6 changes: 3 additions & 3 deletions drivers/net/dsa/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
11 changes: 8 additions & 3 deletions drivers/net/dsa/lan9303-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
*/
#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)
Expand Down Expand Up @@ -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;
}
Expand All @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions drivers/net/dsa/lan9303_mdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 13248b9

Please sign in to comment.