On 23/10/2023 17:46, Parthiban Veerasooran wrote: > The LAN8650/1 is designed to conform to the OPEN Alliance 10BASE‑T1x > MAC‑PHY Serial Interface specification, Version 1.1. The IEEE Clause 4 > MAC integration provides the low pin count standard SPI interface to any > microcontroller therefore providing Ethernet functionality without > requiring MAC integration within the microcontroller. The LAN8650/1 > operates as an SPI client supporting SCLK clock rates up to a maximum of > 25 MHz. This SPI interface supports the transfer of both data (Ethernet > frames) and control (register access). > > By default, the chunk data payload is 64 bytes in size. A smaller payload > data size of 32 bytes is also supported and may be configured in the > Chunk Payload Size (CPS) field of the Configuration 0 (OA_CONFIG0) > register. Changing the chunk payload size requires the LAN8650/1 be reset > and shall not be done during normal operation. > > The Ethernet Media Access Controller (MAC) module implements a 10 Mbps > half duplex Ethernet MAC, compatible with the IEEE 802.3 standard. > 10BASE-T1S physical layer transceiver integrated into the LAN8650/1. The > PHY and MAC are connected via an internal Media Independent Interface > (MII). > > Signed-off-by: Parthiban Veerasooran <Parthiban.Veerasooran@xxxxxxxxxxxxx> > --- > MAINTAINERS | 6 + > drivers/net/ethernet/microchip/Kconfig | 11 + > drivers/net/ethernet/microchip/Makefile | 2 + > drivers/net/ethernet/microchip/lan865x.c | 415 +++++++++++++++++++++++ > 4 files changed, 434 insertions(+) > create mode 100644 drivers/net/ethernet/microchip/lan865x.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 9580be91f5e9..1b1bd3218a2d 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -14001,6 +14001,12 @@ L: netdev@xxxxxxxxxxxxxxx > S: Maintained > F: drivers/net/ethernet/microchip/lan743x_* > > +MICROCHIP LAN8650/1 10BASE-T1S MACPHY ETHERNET DRIVER > +M: Parthiban Veerasooran <parthiban.veerasooran@xxxxxxxxxxxxx> > +L: netdev@xxxxxxxxxxxxxxx > +S: Maintained > +F: drivers/net/ethernet/microchip/lan865x.c > + > MICROCHIP LAN87xx/LAN937x T1 PHY DRIVER > M: Arun Ramadoss <arun.ramadoss@xxxxxxxxxxxxx> > R: UNGLinuxDriver@xxxxxxxxxxxxx > diff --git a/drivers/net/ethernet/microchip/Kconfig b/drivers/net/ethernet/microchip/Kconfig > index 329e374b9539..596caf59dea6 100644 > --- a/drivers/net/ethernet/microchip/Kconfig > +++ b/drivers/net/ethernet/microchip/Kconfig > @@ -59,4 +59,15 @@ source "drivers/net/ethernet/microchip/lan966x/Kconfig" > source "drivers/net/ethernet/microchip/sparx5/Kconfig" > source "drivers/net/ethernet/microchip/vcap/Kconfig" > > +config LAN865X > + tristate "LAN865x support" > + depends on SPI > + depends on OA_TC6 > + help > + Support for the Microchip LAN8650/1 Rev.B0 MACPHY Ethernet chip. It > + uses OPEN Alliance 10BASE-T1x Serial Interface specification. > + > + To compile this driver as a module, choose M here. The module will be > + called lan865x. That's odd indentation. Kconfig help goes with tab and two spaces. > + > endif # NET_VENDOR_MICROCHIP > diff --git a/drivers/net/ethernet/microchip/Makefile b/drivers/net/ethernet/microchip/Makefile > index bbd349264e6f..1fa4e15a067d 100644 > --- a/drivers/net/ethernet/microchip/Makefile > +++ b/drivers/net/ethernet/microchip/Makefile > @@ -12,3 +12,5 @@ lan743x-objs := lan743x_main.o lan743x_ethtool.o lan743x_ptp.o > obj-$(CONFIG_LAN966X_SWITCH) += lan966x/ > obj-$(CONFIG_SPARX5_SWITCH) += sparx5/ > obj-$(CONFIG_VCAP) += vcap/ ... > +static void lan865x_remove(struct spi_device *spi) > +{ > + struct lan865x_priv *priv = spi_get_drvdata(spi); > + > + oa_tc6_exit(priv->tc6); > + unregister_netdev(priv->netdev); > + free_netdev(priv->netdev); > +} > + > +#ifdef CONFIG_OF Drop ifdef > +static const struct of_device_id lan865x_dt_ids[] = { > + { .compatible = "microchip,lan865x" }, > + { /* Sentinel */ } > +}; > +MODULE_DEVICE_TABLE(of, lan865x_dt_ids); > +#endif > + > +#ifdef CONFIG_ACPI > +static const struct acpi_device_id lan865x_acpi_ids[] = { > + { .id = "LAN865X", > + }, > + {}, > +}; > +MODULE_DEVICE_TABLE(acpi, lan865x_acpi_ids); > +#endif > + > +static struct spi_driver lan865x_driver = { > + .driver = { > + .name = DRV_NAME, > +#ifdef CONFIG_OF Drop ifdef > + .of_match_table = lan865x_dt_ids, > +#endif > +#ifdef CONFIG_ACPI Why do you need this ifdef? > + .acpi_match_table = ACPI_PTR(lan865x_acpi_ids), > +#endif > + }, > + .probe = lan865x_probe, > + .remove = lan865x_remove, > +}; > +module_spi_driver(lan865x_driver); > + > +MODULE_DESCRIPTION(DRV_NAME " 10Base-T1S MACPHY Ethernet Driver"); > +MODULE_AUTHOR("Parthiban Veerasooran <parthiban.veerasooran@xxxxxxxxxxxxx>"); > +MODULE_LICENSE("GPL"); > +MODULE_ALIAS("spi:" DRV_NAME); You should not need MODULE_ALIAS() in normal cases. If you need it, usually it means your device ID table is wrong. Best regards, Krzysztof