Alexandru Ardelean b422d1b6f7 net: phy: adin: add support MDI/MDIX/Auto-MDI selection
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: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-08-16 11:56:26 -07:00
..
2019-07-28 10:26:10 -07:00
2019-07-19 17:13:56 -07:00
2019-07-18 09:49:30 +02:00
2019-07-17 09:55:43 -07:00
2019-08-02 18:53:51 -07:00
2019-07-30 14:21:32 -07:00
2019-07-29 11:34:12 -07:00
2019-08-01 20:21:00 +02:00
2019-07-09 08:59:39 -07:00
2019-07-22 09:01:47 -07:00
2019-07-20 09:34:55 -07:00
2019-07-11 18:11:21 -07:00
2019-07-11 15:14:01 -07:00
2019-07-15 20:18:40 -07:00
2019-08-01 14:05:17 +02:00
2019-07-22 15:31:00 +02:00
2019-08-04 16:37:08 -07:00
2019-07-27 08:25:51 -07:00
2019-07-15 20:44:49 -07:00
2019-07-01 15:04:59 +02:00
2019-07-09 08:57:45 -07:00
2019-07-17 11:44:41 -07:00
2019-07-19 17:13:56 -07:00
2019-07-17 10:03:50 -07:00
2019-07-05 08:15:08 +02:00
2019-08-05 11:49:02 -07:00
2019-07-28 10:18:33 -07:00
2019-07-17 11:23:13 -07:00
2019-07-16 09:25:04 -07:00
2019-08-02 15:26:48 -07:00