Lines Matching full:phydev

23 static int bcm84881_wait_init(struct phy_device *phydev)  in bcm84881_wait_init()  argument
27 return phy_read_mmd_poll_timeout(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, in bcm84881_wait_init()
32 static void bcm84881_fill_possible_interfaces(struct phy_device *phydev) in bcm84881_fill_possible_interfaces() argument
34 unsigned long *possible = phydev->possible_interfaces; in bcm84881_fill_possible_interfaces()
41 static int bcm84881_config_init(struct phy_device *phydev) in bcm84881_config_init() argument
43 bcm84881_fill_possible_interfaces(phydev); in bcm84881_config_init()
45 switch (phydev->interface) { in bcm84881_config_init()
57 static int bcm84881_probe(struct phy_device *phydev) in bcm84881_probe() argument
62 if (!phydev->is_c45 || in bcm84881_probe()
63 (phydev->c45_ids.devices_in_package & mmd_mask) != mmd_mask) in bcm84881_probe()
69 static int bcm84881_get_features(struct phy_device *phydev) in bcm84881_get_features() argument
73 ret = genphy_c45_pma_read_abilities(phydev); in bcm84881_get_features()
79 phydev->supported); in bcm84881_get_features()
81 phydev->supported); in bcm84881_get_features()
86 static int bcm84881_config_aneg(struct phy_device *phydev) in bcm84881_config_aneg() argument
95 ret = bcm84881_wait_init(phydev); in bcm84881_config_aneg()
100 phydev->mdix_ctrl = ETH_TP_MDI_AUTO; in bcm84881_config_aneg()
103 if (phydev->autoneg == AUTONEG_DISABLE) in bcm84881_config_aneg()
106 ret = genphy_c45_an_config_aneg(phydev); in bcm84881_config_aneg()
112 adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising); in bcm84881_config_aneg()
113 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, in bcm84881_config_aneg()
122 return genphy_c45_check_and_restart_aneg(phydev, changed); in bcm84881_config_aneg()
125 static int bcm84881_aneg_done(struct phy_device *phydev) in bcm84881_aneg_done() argument
129 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1); in bcm84881_aneg_done()
133 bmsr = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_C22 + MII_BMSR); in bcm84881_aneg_done()
141 static int bcm84881_read_status(struct phy_device *phydev) in bcm84881_read_status() argument
146 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); in bcm84881_read_status()
151 phydev->link = 0; in bcm84881_read_status()
155 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1); in bcm84881_read_status()
159 bmsr = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_C22 + MII_BMSR); in bcm84881_read_status()
163 phydev->autoneg_complete = !!(val & MDIO_AN_STAT1_COMPLETE) && in bcm84881_read_status()
165 phydev->link = !!(val & MDIO_STAT1_LSTATUS) && in bcm84881_read_status()
167 if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete) in bcm84881_read_status()
168 phydev->link = false; in bcm84881_read_status()
170 linkmode_zero(phydev->lp_advertising); in bcm84881_read_status()
171 phydev->speed = SPEED_UNKNOWN; in bcm84881_read_status()
172 phydev->duplex = DUPLEX_UNKNOWN; in bcm84881_read_status()
173 phydev->pause = 0; in bcm84881_read_status()
174 phydev->asym_pause = 0; in bcm84881_read_status()
175 phydev->mdix = 0; in bcm84881_read_status()
177 if (!phydev->link) in bcm84881_read_status()
180 if (phydev->autoneg_complete) { in bcm84881_read_status()
181 val = genphy_c45_read_lpa(phydev); in bcm84881_read_status()
185 val = phy_read_mmd(phydev, MDIO_MMD_AN, in bcm84881_read_status()
190 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, val); in bcm84881_read_status()
192 if (phydev->autoneg == AUTONEG_ENABLE) in bcm84881_read_status()
193 phy_resolve_aneg_linkmode(phydev); in bcm84881_read_status()
196 if (phydev->autoneg == AUTONEG_DISABLE) { in bcm84881_read_status()
200 phydev->link = 0; in bcm84881_read_status()
209 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, 0x4011); in bcm84881_read_status()
212 phydev->interface = PHY_INTERFACE_MODE_SGMII; in bcm84881_read_status()
214 phydev->interface = PHY_INTERFACE_MODE_10GBASER; in bcm84881_read_status()
216 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in bcm84881_read_status()
219 phydev->speed = SPEED_100; in bcm84881_read_status()
222 phydev->speed = SPEED_1000; in bcm84881_read_status()
225 phydev->speed = SPEED_10000; in bcm84881_read_status()
228 phydev->speed = SPEED_2500; in bcm84881_read_status()
231 phydev->speed = SPEED_5000; in bcm84881_read_status()
235 return genphy_c45_read_mdix(phydev); in bcm84881_read_status()