Lines Matching +full:force +full:- +full:internal +full:- +full:phy
2 * Broadcom BCM7xxx internal transceivers support.
4 * Copyright (C) 2014-2017 Broadcom
13 #include <linux/phy.h>
15 #include "bcm-phy-lib.h"
20 /* Broadcom BCM7xxx internal PHY registers */
89 /* Adjust bias current trim by -3 */ in bcm7xxx_28nm_b0_afe_config_init()
123 /* AFE_RXCONFIG_2, set rCal offset for HT=0 code and LT=-2 code */ in bcm7xxx_28nm_d0_afe_config_init()
138 /* AFE_HPF_TRIM_OTHERS, set 100Tx/10BT to -4.5% swing and set rCal in bcm7xxx_28nm_d0_afe_config_init()
143 /* CORE_BASE1E, force trim to overwrite and set I_ext trim to 0000 */ in bcm7xxx_28nm_d0_afe_config_init()
166 /* AFE_HPF_TRIM_OTHERS, set 100Tx/10BT to -4.5% swing and set rCal in bcm7xxx_28nm_e0_plus_afe_config_init()
171 /* CORE_BASE1E, force trim to overwrite and set I_ext trim to 0000 */ in bcm7xxx_28nm_e0_plus_afe_config_init()
210 u8 rev = PHY_BRCM_7XXX_REV(phydev->dev_flags); in bcm7xxx_28nm_config_init()
211 u8 patch = PHY_BRCM_7XXX_PATCH(phydev->dev_flags); in bcm7xxx_28nm_config_init()
219 rev = phydev->phy_id & ~phydev->drv->phy_id_mask; in bcm7xxx_28nm_config_init()
221 pr_info_once("%s: %s PHY revision: 0x%02x, patch: %d\n", in bcm7xxx_28nm_config_init()
222 phydev_name(phydev), phydev->drv->name, rev, patch); in bcm7xxx_28nm_config_init()
225 * internal inverter may not allow the first MDIO transaction to pass in bcm7xxx_28nm_config_init()
271 /* Re-apply workarounds coming out suspend/resume */ in bcm7xxx_28nm_resume()
276 /* 28nm Gigabit PHYs come out of reset without any half-duplex in bcm7xxx_28nm_resume()
278 * cause any problems with the PHY library since genphy_config_aneg() in bcm7xxx_28nm_resume()
279 * gracefully handles auto-negotiated and forced modes. in bcm7xxx_28nm_resume()
313 /* Set current trim values INT_trim = -1, Ext_trim =0 */ in bcm7xxx_28nm_ephy_01_afe_config_init()
348 /* The 28nm EPHY does not support Clause 45 (MMD) used by bcm-phy-lib */
359 /* Enable auto-power down */ in bcm7xxx_28nm_ephy_apd_enable()
439 u8 rev = phydev->phy_id & ~phydev->drv->phy_id_mask; in bcm7xxx_28nm_ephy_config_init()
442 pr_info_once("%s: %s PHY revision: 0x%02x\n", in bcm7xxx_28nm_ephy_config_init()
443 phydev_name(phydev), phydev->drv->name, rev); in bcm7xxx_28nm_ephy_config_init()
446 * where the internal inverter may not allow the first MDIO transaction in bcm7xxx_28nm_ephy_config_init()
452 /* Apply AFE software work-around if necessary */ in bcm7xxx_28nm_ephy_config_init()
470 /* Re-apply workarounds coming out suspend/resume */ in bcm7xxx_28nm_ephy_resume()
509 /* Workaround for putting the PHY in IDDQ mode, required
543 switch (tuna->id) { in bcm7xxx_28nm_get_tunable()
547 return -EOPNOTSUPP; in bcm7xxx_28nm_get_tunable()
558 switch (tuna->id) { in bcm7xxx_28nm_set_tunable()
563 return -EOPNOTSUPP; in bcm7xxx_28nm_set_tunable()
569 /* Disable EEE advertisement since this prevents the PHY in bcm7xxx_28nm_set_tunable()
570 * from successfully linking up, trigger auto-negotiation restart in bcm7xxx_28nm_set_tunable()
583 struct bcm7xxx_phy_priv *priv = phydev->priv; in bcm7xxx_28nm_get_phy_stats()
585 bcm_phy_get_stats(phydev, priv->stats, stats, data); in bcm7xxx_28nm_get_phy_stats()
592 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL); in bcm7xxx_28nm_probe()
594 return -ENOMEM; in bcm7xxx_28nm_probe()
596 phydev->priv = priv; in bcm7xxx_28nm_probe()
598 priv->stats = devm_kcalloc(&phydev->mdio.dev, in bcm7xxx_28nm_probe()
601 if (!priv->stats) in bcm7xxx_28nm_probe()
602 return -ENOMEM; in bcm7xxx_28nm_probe()
695 MODULE_DESCRIPTION("Broadcom BCM7xxx internal PHY driver");