#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/phy.h>
#include <linux/netdevice.h>
#include <linux/bitfield.h>
#include <linux/smscphy.h>
#define TSTCNTL …
#define TSTCNTL_READ …
#define TSTCNTL_WRITE …
#define TSTCNTL_REG_BANK_SEL …
#define TSTCNTL_TEST_MODE …
#define TSTCNTL_READ_ADDRESS …
#define TSTCNTL_WRITE_ADDRESS …
#define TSTREAD1 …
#define TSTWRITE …
#define BANK_ANALOG_DSP …
#define BANK_WOL …
#define BANK_BIST …
#define LPI_STATUS …
#define LPI_STATUS_RSV12 …
#define FR_PLL_CONTROL …
#define FR_PLL_DIV0 …
#define FR_PLL_DIV1 …
static int meson_gxl_open_banks(struct phy_device *phydev)
{ … }
static void meson_gxl_close_banks(struct phy_device *phydev)
{ … }
static int meson_gxl_read_reg(struct phy_device *phydev,
unsigned int bank, unsigned int reg)
{ … }
static int meson_gxl_write_reg(struct phy_device *phydev,
unsigned int bank, unsigned int reg,
uint16_t value)
{ … }
static int meson_gxl_config_init(struct phy_device *phydev)
{ … }
static int meson_gxl_read_status(struct phy_device *phydev)
{ … }
static struct phy_driver meson_gxl_phy[] = …;
static struct mdio_device_id __maybe_unused meson_gxl_tbl[] = …;
module_phy_driver(meson_gxl_phy);
MODULE_DEVICE_TABLE(mdio, meson_gxl_tbl);
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;