• Alexandru Ardelean's avatar
    net: phy: adin: add support MDI/MDIX/Auto-MDI selection · b422d1b6
    Alexandru Ardelean authored
    The ADIN PHYs support automatic MDI/MDIX negotiation. By default this is
    disabled, so this is enabled at `config_init`.
    
    This is controlled via the PHY Control 1 register.
    The supported modes are:
      1. Manual MDI
      2. Manual MDIX
      3. Auto MDIX - prefer MDIX
      4. Auto MDIX - prefer MDI
    
    The phydev mdix & mdix_ctrl fields include modes 3 & 4 into a single
    auto-mode. So, the default mode this driver enables is 4 when Auto-MDI mode
    is used.
    
    When detecting MDI/MDIX mode, a combination of the PHY Control 1 register
    and PHY Status 1 register is used to determine the correct MDI/MDIX mode.
    
    If Auto-MDI mode is not set, then the manual MDI/MDIX mode is returned.
    If Auto-MDI mode is set, then MDIX mode is returned differs from the
    preferred MDI/MDIX mode.
    This covers all cases where:
      1. MDI preferred  & Pair01Swapped   == MDIX
      2. MDIX preferred & Pair01Swapped   == MDI
      3. MDI preferred  & ! Pair01Swapped == MDIX
      4. MDIX preferred & ! Pair01Swapped == MDI
    
    The preferred MDI/MDIX mode is not configured via SW, but can be configured
    via HW pins. Note that the `Pair01Swapped` is the Green-Yellow physical
    pairs.
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarAlexandru Ardelean <alexandru.ardelean@analog.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b422d1b6
adin.c 10 KB