#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/phy.h>
#include <linux/microchipphy.h>
#include <linux/delay.h>
#include <linux/of.h>
#include <dt-bindings/net/microchip-lan78xx.h>
#define PHY_ID_LAN937X_TX …
#define LAN937X_MODE_CTRL_STATUS_REG …
#define LAN937X_AUTOMDIX_EN …
#define LAN937X_MDI_MODE …
#define DRIVER_AUTHOR …
#define DRIVER_DESC …
struct lan88xx_priv { … };
static int lan88xx_read_page(struct phy_device *phydev)
{ … }
static int lan88xx_write_page(struct phy_device *phydev, int page)
{ … }
static int lan88xx_phy_config_intr(struct phy_device *phydev)
{ … }
static irqreturn_t lan88xx_handle_interrupt(struct phy_device *phydev)
{ … }
static int lan88xx_suspend(struct phy_device *phydev)
{ … }
static int lan88xx_TR_reg_set(struct phy_device *phydev, u16 regaddr,
u32 data)
{ … }
static void lan88xx_config_TR_regs(struct phy_device *phydev)
{ … }
static int lan88xx_probe(struct phy_device *phydev)
{ … }
static void lan88xx_remove(struct phy_device *phydev)
{ … }
static int lan88xx_set_wol(struct phy_device *phydev,
struct ethtool_wolinfo *wol)
{ … }
static void lan88xx_set_mdix(struct phy_device *phydev)
{ … }
static int lan88xx_config_init(struct phy_device *phydev)
{ … }
static int lan88xx_config_aneg(struct phy_device *phydev)
{ … }
static void lan88xx_link_change_notify(struct phy_device *phydev)
{ … }
static int lan937x_tx_read_mdix_status(struct phy_device *phydev)
{ … }
static int lan937x_tx_read_status(struct phy_device *phydev)
{ … }
static int lan937x_tx_set_mdix(struct phy_device *phydev)
{ … }
static int lan937x_tx_config_aneg(struct phy_device *phydev)
{ … }
static struct phy_driver microchip_phy_driver[] = …;
module_phy_driver(microchip_phy_driver);
static struct mdio_device_id __maybe_unused microchip_tbl[] = …;
MODULE_DEVICE_TABLE(mdio, microchip_tbl);
MODULE_AUTHOR(…);
MODULE_DESCRIPTION(…);
MODULE_LICENSE(…) …;