#include <linux/module.h>
#include <linux/bitfield.h>
#include <linux/hwmon.h>
#include <linux/mutex.h>
#include <linux/phy.h>
#include <linux/polynomial.h>
#include <linux/property.h>
#include <linux/netdevice.h>
#define PHY_ID_GPYx15B_MASK …
#define PHY_ID_GPY21xB_MASK …
#define PHY_ID_GPY2xx …
#define PHY_ID_GPY115B …
#define PHY_ID_GPY115C …
#define PHY_ID_GPY211B …
#define PHY_ID_GPY211C …
#define PHY_ID_GPY212B …
#define PHY_ID_GPY212C …
#define PHY_ID_GPY215B …
#define PHY_ID_GPY215C …
#define PHY_ID_GPY241B …
#define PHY_ID_GPY241BM …
#define PHY_ID_GPY245B …
#define PHY_CTL1 …
#define PHY_CTL1_MDICD …
#define PHY_CTL1_MDIAB …
#define PHY_CTL1_AMDIX …
#define PHY_MIISTAT …
#define PHY_IMASK …
#define PHY_ISTAT …
#define PHY_FWV …
#define PHY_MIISTAT_SPD_MASK …
#define PHY_MIISTAT_DPX …
#define PHY_MIISTAT_LS …
#define PHY_MIISTAT_SPD_10 …
#define PHY_MIISTAT_SPD_100 …
#define PHY_MIISTAT_SPD_1000 …
#define PHY_MIISTAT_SPD_2500 …
#define PHY_IMASK_WOL …
#define PHY_IMASK_ANC …
#define PHY_IMASK_ADSC …
#define PHY_IMASK_DXMC …
#define PHY_IMASK_LSPC …
#define PHY_IMASK_LSTC …
#define PHY_IMASK_MASK …
#define PHY_FWV_REL_MASK …
#define PHY_FWV_MAJOR_MASK …
#define PHY_FWV_MINOR_MASK …
#define PHY_PMA_MGBT_POLARITY …
#define PHY_MDI_MDI_X_MASK …
#define PHY_MDI_MDI_X_NORMAL …
#define PHY_MDI_MDI_X_AB …
#define PHY_MDI_MDI_X_CD …
#define PHY_MDI_MDI_X_CROSS …
#define VSPEC1_SGMII_CTRL …
#define VSPEC1_SGMII_CTRL_ANEN …
#define VSPEC1_SGMII_CTRL_ANRS …
#define VSPEC1_SGMII_ANEN_ANRS …
#define VSPEC1_TEMP_STA …
#define VSPEC1_TEMP_STA_DATA …
#define VSPEC1_MBOX_DATA …
#define VSPEC1_MBOX_ADDRLO …
#define VSPEC1_MBOX_CMD …
#define VSPEC1_MBOX_CMD_ADDRHI …
#define VSPEC1_MBOX_CMD_RD …
#define VSPEC1_MBOX_CMD_READY …
#define VPSPEC2_WOL_CTL …
#define VPSPEC2_WOL_AD01 …
#define VPSPEC2_WOL_AD23 …
#define VPSPEC2_WOL_AD45 …
#define WOL_EN …
#define REG_GPIO0_OUT …
struct gpy_priv { … };
static const struct { … } ver_need_sgmii_reaneg[] = …;
#if IS_ENABLED(CONFIG_HWMON)
static const struct polynomial poly_N_to_temp = …;
static int gpy_hwmon_read(struct device *dev,
enum hwmon_sensor_types type,
u32 attr, int channel, long *value)
{ … }
static umode_t gpy_hwmon_is_visible(const void *data,
enum hwmon_sensor_types type,
u32 attr, int channel)
{ … }
static const struct hwmon_channel_info * const gpy_hwmon_info[] = …;
static const struct hwmon_ops gpy_hwmon_hwmon_ops = …;
static const struct hwmon_chip_info gpy_hwmon_chip_info = …;
static int gpy_hwmon_register(struct phy_device *phydev)
{ … }
#else
static int gpy_hwmon_register(struct phy_device *phydev)
{
return 0;
}
#endif
static int gpy_ack_interrupt(struct phy_device *phydev)
{ … }
static int gpy_mbox_read(struct phy_device *phydev, u32 addr)
{ … }
static int gpy_config_init(struct phy_device *phydev)
{ … }
static int gpy21x_config_init(struct phy_device *phydev)
{ … }
static int gpy_probe(struct phy_device *phydev)
{ … }
static bool gpy_sgmii_need_reaneg(struct phy_device *phydev)
{ … }
static bool gpy_2500basex_chk(struct phy_device *phydev)
{ … }
static bool gpy_sgmii_aneg_en(struct phy_device *phydev)
{ … }
static int gpy_config_mdix(struct phy_device *phydev, u8 ctrl)
{ … }
static int gpy_config_aneg(struct phy_device *phydev)
{ … }
static int gpy_update_mdix(struct phy_device *phydev)
{ … }
static int gpy_update_interface(struct phy_device *phydev)
{ … }
static int gpy_read_status(struct phy_device *phydev)
{ … }
static int gpy_config_intr(struct phy_device *phydev)
{ … }
static irqreturn_t gpy_handle_interrupt(struct phy_device *phydev)
{ … }
static int gpy_set_wol(struct phy_device *phydev,
struct ethtool_wolinfo *wol)
{ … }
static void gpy_get_wol(struct phy_device *phydev,
struct ethtool_wolinfo *wol)
{ … }
static int gpy_loopback(struct phy_device *phydev, bool enable)
{ … }
static int gpy115_loopback(struct phy_device *phydev, bool enable)
{ … }
static struct phy_driver gpy_drivers[] = …;
module_phy_driver(gpy_drivers);
static struct mdio_device_id __maybe_unused gpy_tbl[] = …;
MODULE_DEVICE_TABLE(mdio, gpy_tbl);
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;