mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
net: phy: airoha: air_en8811: use standard rx-polarity/tx-polarity properties
Replace the proprietary airoha,pnswap-rx / airoha,pnswap-tx boolean device tree properties with the standard rx-polarity and tx-polarity properties defined in phy-common-props.yaml. Backward compatibility is maintained by reading the legacy boolean properties first and passing them as the default_pol argument to phy_get_rx/tx_polarity(). If the standard properties are absent the legacy values are used transparently, so existing device trees remain functional without modification. Link: https://git.kernel.org/linus/66d8a334b57e64e43810623b3d88f0ce9745270b Signed-off-by: Lucien.Jheng <lucienzx159@gmail.com>
This commit is contained in:
committed by
Jerome Forissier
parent
9eca7fd0d3
commit
c008ffdf61
@@ -7,6 +7,7 @@ config PHY_AIROHA_EN8811
|
||||
depends on PHY_AIROHA
|
||||
depends on SUPPORTS_FW_LOADER
|
||||
select FW_LOADER
|
||||
select PHY_COMMON_PROPS
|
||||
help
|
||||
AIROHA EN8811H supported.
|
||||
AIROHA AN8811HB supported.
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/compat.h>
|
||||
#include <dm/device_compat.h>
|
||||
#include <u-boot/crc.h>
|
||||
#include <linux/phy/phy-common-props.h>
|
||||
|
||||
/* MII Registers */
|
||||
#define AIR_AUX_CTRL_STATUS 0x1d
|
||||
@@ -1046,11 +1047,50 @@ static int air_leds_init(struct phy_device *phydev, int num, u16 dur, int mode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int en8811h_config_serdes_polarity(struct phy_device *phydev)
|
||||
{
|
||||
ofnode node = phy_get_ofnode(phydev);
|
||||
unsigned int pol, default_pol;
|
||||
u32 pbus_value = 0;
|
||||
int ret;
|
||||
|
||||
if (!ofnode_valid(node))
|
||||
return 0;
|
||||
|
||||
default_pol = PHY_POL_NORMAL;
|
||||
if (ofnode_read_bool(node, "airoha,pnswap-rx"))
|
||||
default_pol = PHY_POL_INVERT;
|
||||
|
||||
ret = phy_get_rx_polarity(node,
|
||||
phy_string_for_interface(phydev->interface),
|
||||
BIT(PHY_POL_NORMAL) | BIT(PHY_POL_INVERT),
|
||||
default_pol, &pol);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (pol == PHY_POL_INVERT)
|
||||
pbus_value |= EN8811H_POLARITY_RX_REVERSE;
|
||||
|
||||
default_pol = PHY_POL_NORMAL;
|
||||
if (ofnode_read_bool(node, "airoha,pnswap-tx"))
|
||||
default_pol = PHY_POL_INVERT;
|
||||
|
||||
ret = phy_get_tx_polarity(node,
|
||||
phy_string_for_interface(phydev->interface),
|
||||
BIT(PHY_POL_NORMAL) | BIT(PHY_POL_INVERT),
|
||||
default_pol, &pol);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (pol == PHY_POL_NORMAL)
|
||||
pbus_value |= EN8811H_POLARITY_TX_NORMAL;
|
||||
|
||||
return air_buckpbus_reg_modify(phydev, EN8811H_POLARITY,
|
||||
EN8811H_POLARITY_RX_REVERSE |
|
||||
EN8811H_POLARITY_TX_NORMAL, pbus_value);
|
||||
}
|
||||
|
||||
static int en8811h_config(struct phy_device *phydev)
|
||||
{
|
||||
struct en8811h_priv *priv = phydev->priv;
|
||||
ofnode node = phy_get_ofnode(phydev);
|
||||
u32 pbus_value = 0;
|
||||
int ret = 0;
|
||||
|
||||
/* If restart happened in .probe(), no need to restart now */
|
||||
@@ -1081,20 +1121,8 @@ static int en8811h_config(struct phy_device *phydev)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Serdes polarity */
|
||||
pbus_value = 0;
|
||||
if (ofnode_read_bool(node, "airoha,pnswap-rx"))
|
||||
pbus_value |= EN8811H_POLARITY_RX_REVERSE;
|
||||
else
|
||||
pbus_value &= ~EN8811H_POLARITY_RX_REVERSE;
|
||||
if (ofnode_read_bool(node, "airoha,pnswap-tx"))
|
||||
pbus_value &= ~EN8811H_POLARITY_TX_NORMAL;
|
||||
else
|
||||
pbus_value |= EN8811H_POLARITY_TX_NORMAL;
|
||||
ret = air_buckpbus_reg_modify(phydev, EN8811H_POLARITY,
|
||||
EN8811H_POLARITY_RX_REVERSE |
|
||||
EN8811H_POLARITY_TX_NORMAL,
|
||||
pbus_value);
|
||||
/* Configure Serdes polarity from device tree */
|
||||
ret = en8811h_config_serdes_polarity(phydev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user