Lines Matching full:phydev
38 static void bcm_phy_write_misc(struct phy_device *phydev, in bcm_phy_write_misc() argument
43 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXCNTL, in bcm_phy_write_misc()
46 reg_val = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXCNTL); in bcm_phy_write_misc()
48 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXCNTL, reg_val); in bcm_phy_write_misc()
51 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_SEL, reg_val); in bcm_phy_write_misc()
53 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_DATA, value); in bcm_phy_write_misc()
57 static int bcm5461_config(struct phy_device *phydev) in bcm5461_config() argument
59 genphy_config_aneg(phydev); in bcm5461_config()
61 phy_reset(phydev); in bcm5461_config()
66 static int bcm54xx_parse_status(struct phy_device *phydev) in bcm54xx_parse_status() argument
70 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXSTATUS); in bcm54xx_parse_status()
75 phydev->duplex = DUPLEX_HALF; in bcm54xx_parse_status()
76 phydev->speed = SPEED_10; in bcm54xx_parse_status()
79 phydev->duplex = DUPLEX_FULL; in bcm54xx_parse_status()
80 phydev->speed = SPEED_10; in bcm54xx_parse_status()
83 phydev->duplex = DUPLEX_HALF; in bcm54xx_parse_status()
84 phydev->speed = SPEED_100; in bcm54xx_parse_status()
87 phydev->duplex = DUPLEX_FULL; in bcm54xx_parse_status()
88 phydev->speed = SPEED_100; in bcm54xx_parse_status()
91 phydev->duplex = DUPLEX_HALF; in bcm54xx_parse_status()
92 phydev->speed = SPEED_1000; in bcm54xx_parse_status()
95 phydev->duplex = DUPLEX_FULL; in bcm54xx_parse_status()
96 phydev->speed = SPEED_1000; in bcm54xx_parse_status()
100 phydev->duplex = DUPLEX_HALF; in bcm54xx_parse_status()
101 phydev->speed = SPEED_10; in bcm54xx_parse_status()
108 static int bcm54xx_startup(struct phy_device *phydev) in bcm54xx_startup() argument
113 ret = genphy_update_link(phydev); in bcm54xx_startup()
117 return bcm54xx_parse_status(phydev); in bcm54xx_startup()
128 static u32 bcm5482_read_wirespeed(struct phy_device *phydev, u32 reg) in bcm5482_read_wirespeed() argument
130 return (phy_read(phydev, MDIO_DEVAD_NONE, reg) & 0x8FFF) | 0x8010; in bcm5482_read_wirespeed()
133 static int bcm5482_config(struct phy_device *phydev) in bcm5482_config() argument
138 reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in bcm5482_config()
140 phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, reg); in bcm5482_config()
143 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXCNTL, in bcm5482_config()
146 reg = bcm5482_read_wirespeed(phydev, MIIM_BCM54xx_AUXCNTL); in bcm5482_config()
147 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXCNTL, reg); in bcm5482_config()
150 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_SHD, in bcm5482_config()
153 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_SEL, in bcm5482_config()
155 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_DATA, in bcm5482_config()
158 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_SHD, in bcm5482_config()
161 genphy_config_aneg(phydev); in bcm5482_config()
166 static int bcm_cygnus_startup(struct phy_device *phydev) in bcm_cygnus_startup() argument
171 ret = genphy_update_link(phydev); in bcm_cygnus_startup()
175 return genphy_parse_link(phydev); in bcm_cygnus_startup()
178 static void bcm_cygnus_afe(struct phy_device *phydev) in bcm_cygnus_afe() argument
181 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54xx_AUXCNTL, 0x0c30); in bcm_cygnus_afe()
184 bcm_phy_write_misc(phydev, 0x39, 0x01, 0xA7C8); in bcm_cygnus_afe()
187 bcm_phy_write_misc(phydev, 0x3A, 0x00, 0x0803); in bcm_cygnus_afe()
190 bcm_phy_write_misc(phydev, 0x3A, 0x01, 0xA740); in bcm_cygnus_afe()
193 bcm_phy_write_misc(phydev, 0x3A, 0x03, 0x8400); in bcm_cygnus_afe()
196 bcm_phy_write_misc(phydev, 0x3B, 0x00, 0x0004); in bcm_cygnus_afe()
199 phy_write(phydev, MDIO_DEVAD_NONE, 0x1E, 0x02); in bcm_cygnus_afe()
202 phy_write(phydev, MDIO_DEVAD_NONE, 0x17, 0x00B1); in bcm_cygnus_afe()
203 phy_write(phydev, MDIO_DEVAD_NONE, 0x15, 0x0010); in bcm_cygnus_afe()
206 phy_write(phydev, MDIO_DEVAD_NONE, 0x17, 0x00B0); in bcm_cygnus_afe()
207 phy_write(phydev, MDIO_DEVAD_NONE, 0x15, 0x0010); in bcm_cygnus_afe()
210 phy_write(phydev, MDIO_DEVAD_NONE, 0x17, 0x00B0); in bcm_cygnus_afe()
211 phy_write(phydev, MDIO_DEVAD_NONE, 0x15, 0x0000); in bcm_cygnus_afe()
214 static int bcm_cygnus_config(struct phy_device *phydev) in bcm_cygnus_config() argument
216 genphy_config_aneg(phydev); in bcm_cygnus_config()
217 phy_reset(phydev); in bcm_cygnus_config()
219 bcm_cygnus_afe(phydev); in bcm_cygnus_config()
221 genphy_restart_aneg(phydev); in bcm_cygnus_config()
230 static int bcm5482_is_serdes(struct phy_device *phydev) in bcm5482_is_serdes() argument
235 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_SEL, in bcm5482_is_serdes()
237 val = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_DATA); in bcm5482_is_serdes()
264 static u32 bcm5482_parse_serdes_sr(struct phy_device *phydev) in bcm5482_parse_serdes_sr() argument
271 phy_write(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_SEL, in bcm5482_parse_serdes_sr()
273 val = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_BCM54XX_EXP_DATA); in bcm5482_parse_serdes_sr()
279 phydev->link = 0; in bcm5482_parse_serdes_sr()
286 phydev->link = 1; in bcm5482_parse_serdes_sr()
289 phydev->speed = 10; in bcm5482_parse_serdes_sr()
292 phydev->speed = 100; in bcm5482_parse_serdes_sr()
295 phydev->speed = 1000; in bcm5482_parse_serdes_sr()
299 phydev->duplex = (val & 0x1000) == 0x1000; in bcm5482_parse_serdes_sr()
308 static int bcm5482_startup(struct phy_device *phydev) in bcm5482_startup() argument
312 if (bcm5482_is_serdes(phydev)) { in bcm5482_startup()
313 bcm5482_parse_serdes_sr(phydev); in bcm5482_startup()
314 phydev->port = PORT_FIBRE; in bcm5482_startup()
319 ret = genphy_update_link(phydev); in bcm5482_startup()
324 return bcm54xx_parse_status(phydev); in bcm5482_startup()