Lines Matching defs:phydev

134 static int kszphy_extended_write(struct phy_device *phydev,
137 phy_write(phydev, MII_KSZPHY_EXTREG, KSZPHY_EXTREG_WRITE | regnum);
138 return phy_write(phydev, MII_KSZPHY_EXTREG_WRITE, val);
141 static int kszphy_extended_read(struct phy_device *phydev,
144 phy_write(phydev, MII_KSZPHY_EXTREG, regnum);
145 return phy_read(phydev, MII_KSZPHY_EXTREG_READ);
148 static int kszphy_ack_interrupt(struct phy_device *phydev)
153 rc = phy_read(phydev, MII_KSZPHY_INTCS);
158 static int kszphy_config_intr(struct phy_device *phydev)
160 const struct kszphy_type *type = phydev->drv->driver_data;
170 temp = phy_read(phydev, MII_KSZPHY_CTRL);
174 phy_write(phydev, MII_KSZPHY_CTRL, temp);
177 if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
182 return phy_write(phydev, MII_KSZPHY_INTCS, temp);
185 static int kszphy_rmii_clk_sel(struct phy_device *phydev, bool val)
189 ctrl = phy_read(phydev, MII_KSZPHY_CTRL);
198 return phy_write(phydev, MII_KSZPHY_CTRL, ctrl);
201 static int kszphy_setup_led(struct phy_device *phydev, u32 reg, int val)
216 temp = phy_read(phydev, reg);
224 rc = phy_write(phydev, reg, temp);
227 phydev_err(phydev, "failed to set led mode\n");
235 static int kszphy_broadcast_disable(struct phy_device *phydev)
239 ret = phy_read(phydev, MII_KSZPHY_OMSO);
243 ret = phy_write(phydev, MII_KSZPHY_OMSO, ret | KSZPHY_OMSO_B_CAST_OFF);
246 phydev_err(phydev, "failed to disable broadcast address\n");
251 static int kszphy_nand_tree_disable(struct phy_device *phydev)
255 ret = phy_read(phydev, MII_KSZPHY_OMSO);
262 ret = phy_write(phydev, MII_KSZPHY_OMSO,
266 phydev_err(phydev, "failed to disable NAND tree mode\n");
272 static int kszphy_config_reset(struct phy_device *phydev)
274 struct kszphy_priv *priv = phydev->priv;
278 ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val);
280 phydev_err(phydev,
287 kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
292 static int kszphy_config_init(struct phy_device *phydev)
294 struct kszphy_priv *priv = phydev->priv;
303 kszphy_broadcast_disable(phydev);
306 kszphy_nand_tree_disable(phydev);
308 return kszphy_config_reset(phydev);
311 static int ksz8041_fiber_mode(struct phy_device *phydev)
313 struct device_node *of_node = phydev->mdio.dev.of_node;
318 static int ksz8041_config_init(struct phy_device *phydev)
323 if (ksz8041_fiber_mode(phydev)) {
324 phydev->dev_flags |= MICREL_PHY_FXEN;
328 linkmode_and(phydev->supported, phydev->supported, mask);
330 phydev->supported);
331 linkmode_and(phydev->advertising, phydev->advertising, mask);
333 phydev->advertising);
334 phydev->autoneg = AUTONEG_DISABLE;
337 return kszphy_config_init(phydev);
340 static int ksz8041_config_aneg(struct phy_device *phydev)
343 if (phydev->dev_flags & MICREL_PHY_FXEN) {
344 phydev->speed = SPEED_100;
348 return genphy_config_aneg(phydev);
351 static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
356 if ((phydev->phy_id & MICREL_PHY_ID_MASK) != PHY_ID_KSZ8051)
359 ret = phy_read(phydev, MII_BMSR);
375 static int ksz8051_match_phy_device(struct phy_device *phydev)
377 return ksz8051_ksz8795_match_phy_device(phydev, true);
380 static int ksz8081_config_init(struct phy_device *phydev)
387 phy_clear_bits(phydev, MII_KSZPHY_OMSO, KSZPHY_OMSO_FACTORY_TEST);
389 return kszphy_config_init(phydev);
392 static int ksz8061_config_init(struct phy_device *phydev)
396 ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_DEVID1, 0xB61A);
400 return kszphy_config_init(phydev);
403 static int ksz8795_match_phy_device(struct phy_device *phydev)
405 return ksz8051_ksz8795_match_phy_device(phydev, false);
408 static int ksz9021_load_values_from_of(struct phy_device *phydev,
437 newval = kszphy_extended_read(phydev, reg);
453 return kszphy_extended_write(phydev, reg, newval);
456 static int ksz9021_config_init(struct phy_device *phydev)
458 const struct device *dev = &phydev->mdio.dev;
466 dev_walker = &phydev->mdio.dev;
474 ksz9021_load_values_from_of(phydev, of_node,
478 ksz9021_load_values_from_of(phydev, of_node,
482 ksz9021_load_values_from_of(phydev, of_node,
548 static int ksz9031_of_load_skew_values(struct phy_device *phydev,
571 newval = phy_read_mmd(phydev, 2, reg);
585 return phy_write_mmd(phydev, 2, reg, newval);
589 static int ksz9031_center_flp_timing(struct phy_device *phydev)
593 result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_HI,
598 result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_LO,
603 return genphy_restart_aneg(phydev);
607 static int ksz9031_enable_edpd(struct phy_device *phydev)
611 reg = phy_read_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD);
614 return phy_write_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD,
618 static int ksz9031_config_rgmii_delay(struct phy_device *phydev)
623 switch (phydev->interface) {
652 ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_CONTROL_PAD_SKEW,
658 ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_RX_DATA_PAD_SKEW,
666 ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_TX_DATA_PAD_SKEW,
674 return phy_write_mmd(phydev, 2, MII_KSZ9031RN_CLK_PAD_SKEW,
679 static int ksz9031_config_init(struct phy_device *phydev)
681 const struct device *dev = &phydev->mdio.dev;
696 result = ksz9031_enable_edpd(phydev);
704 dev_walker = &phydev->mdio.dev;
713 if (phy_interface_is_rgmii(phydev)) {
714 result = ksz9031_config_rgmii_delay(phydev);
719 ksz9031_of_load_skew_values(phydev, of_node,
723 ksz9031_of_load_skew_values(phydev, of_node,
727 ksz9031_of_load_skew_values(phydev, of_node,
731 ksz9031_of_load_skew_values(phydev, of_node,
735 if (update && !phy_interface_is_rgmii(phydev))
736 phydev_warn(phydev,
755 result = phy_read(phydev, MII_CTRL1000);
761 result = phy_write(phydev, MII_CTRL1000, result);
767 return ksz9031_center_flp_timing(phydev);
770 phydev_err(phydev, "failed to force the phy to master mode\n");
779 static int ksz9131_of_load_skew_values(struct phy_device *phydev,
814 newval = phy_read_mmd(phydev, 2, reg);
828 return phy_write_mmd(phydev, 2, reg, newval);
838 static int ksz9131_config_rgmii_delay(struct phy_device *phydev)
843 switch (phydev->interface) {
864 ret = phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
870 return phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
875 static int ksz9131_config_init(struct phy_device *phydev)
877 const struct device *dev = &phydev->mdio.dev;
892 dev_walker = &phydev->mdio.dev;
901 if (phy_interface_is_rgmii(phydev)) {
902 ret = ksz9131_config_rgmii_delay(phydev);
907 ret = ksz9131_of_load_skew_values(phydev, of_node,
913 ret = ksz9131_of_load_skew_values(phydev, of_node,
919 ret = ksz9131_of_load_skew_values(phydev, of_node,
925 ret = ksz9131_of_load_skew_values(phydev, of_node,
937 static int ksz8873mll_read_status(struct phy_device *phydev)
942 regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
944 regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
947 phydev->duplex = DUPLEX_HALF;
949 phydev->duplex = DUPLEX_FULL;
952 phydev->speed = SPEED_10;
954 phydev->speed = SPEED_100;
956 phydev->link = 1;
957 phydev->pause = phydev->asym_pause = 0;
962 static int ksz9031_get_features(struct phy_device *phydev)
966 ret = genphy_read_abilities(phydev);
979 linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported);
984 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported);
989 static int ksz9031_read_status(struct phy_device *phydev)
994 err = genphy_read_status(phydev);
1001 regval = phy_read(phydev, MII_STAT1000);
1003 phy_init_hw(phydev);
1004 phydev->link = 0;
1005 if (phydev->drv->config_intr && phy_interrupt_is_valid(phydev))
1006 phydev->drv->config_intr(phydev);
1007 return genphy_config_aneg(phydev);
1013 static int ksz8873mll_config_aneg(struct phy_device *phydev)
1018 static int kszphy_get_sset_count(struct phy_device *phydev)
1023 static void kszphy_get_strings(struct phy_device *phydev, u8 *data)
1033 static u64 kszphy_get_stat(struct phy_device *phydev, int i)
1036 struct kszphy_priv *priv = phydev->priv;
1040 val = phy_read(phydev, stat.reg);
1052 static void kszphy_get_stats(struct phy_device *phydev,
1058 data[i] = kszphy_get_stat(phydev, i);
1061 static int kszphy_suspend(struct phy_device *phydev)
1064 if (phy_interrupt_is_valid(phydev)) {
1065 phydev->interrupts = PHY_INTERRUPT_DISABLED;
1066 if (phydev->drv->config_intr)
1067 phydev->drv->config_intr(phydev);
1070 return genphy_suspend(phydev);
1073 static int kszphy_resume(struct phy_device *phydev)
1077 genphy_resume(phydev);
1085 ret = kszphy_config_reset(phydev);
1090 if (phy_interrupt_is_valid(phydev)) {
1091 phydev->interrupts = PHY_INTERRUPT_ENABLED;
1092 if (phydev->drv->config_intr)
1093 phydev->drv->config_intr(phydev);
1099 static int kszphy_probe(struct phy_device *phydev)
1101 const struct kszphy_type *type = phydev->drv->driver_data;
1102 const struct device_node *np = phydev->mdio.dev.of_node;
1107 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
1111 phydev->priv = priv;
1122 phydev_err(phydev, "invalid led mode: 0x%02x\n",
1130 clk = devm_clk_get(&phydev->mdio.dev, "rmii-ref");
1146 phydev_err(phydev, "Clock rate out of range: %ld\n",
1152 if (ksz8041_fiber_mode(phydev))
1153 phydev->port = PORT_FIBRE;
1156 if (phydev->dev_flags & MICREL_PHY_50MHZ_CLK) {