mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-17 05:28:58 -05:00
net: phy: qcom: move the WoL function to shared library
Move the WoL (Wake-on-LAN) functionality to a shared library to enable its reuse by the QCA808X PHY driver, incorporating support for WoL functionality similar to the implementation in at8031_set_wol(). Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Signed-off-by: Luo Jie <quic_luoj@quicinc.com> Link: https://patch.msgid.link/20250704-qcom_phy_wol_support-v1-1-053342b1538d@quicinc.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -26,9 +26,6 @@
|
||||
|
||||
#define AT803X_LED_CONTROL 0x18
|
||||
|
||||
#define AT803X_PHY_MMD3_WOL_CTRL 0x8012
|
||||
#define AT803X_WOL_EN BIT(5)
|
||||
|
||||
#define AT803X_REG_CHIP_CONFIG 0x1f
|
||||
#define AT803X_BT_BX_REG_SEL 0x8000
|
||||
|
||||
@@ -866,30 +863,6 @@ static int at8031_config_init(struct phy_device *phydev)
|
||||
return at803x_config_init(phydev);
|
||||
}
|
||||
|
||||
static int at8031_set_wol(struct phy_device *phydev,
|
||||
struct ethtool_wolinfo *wol)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* First setup MAC address and enable WOL interrupt */
|
||||
ret = at803x_set_wol(phydev, wol);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (wol->wolopts & WAKE_MAGIC)
|
||||
/* Enable WOL function for 1588 */
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
0, AT803X_WOL_EN);
|
||||
else
|
||||
/* Disable WoL function for 1588 */
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
AT803X_WOL_EN, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int at8031_config_intr(struct phy_device *phydev)
|
||||
{
|
||||
struct at803x_priv *priv = phydev->priv;
|
||||
|
||||
@@ -115,6 +115,31 @@ int at803x_set_wol(struct phy_device *phydev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(at803x_set_wol);
|
||||
|
||||
int at8031_set_wol(struct phy_device *phydev,
|
||||
struct ethtool_wolinfo *wol)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* First setup MAC address and enable WOL interrupt */
|
||||
ret = at803x_set_wol(phydev, wol);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (wol->wolopts & WAKE_MAGIC)
|
||||
/* Enable WOL function for 1588 */
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
0, AT803X_WOL_EN);
|
||||
else
|
||||
/* Disable WoL function for 1588 */
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
AT803X_WOL_EN, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(at8031_set_wol);
|
||||
|
||||
void at803x_get_wol(struct phy_device *phydev,
|
||||
struct ethtool_wolinfo *wol)
|
||||
{
|
||||
|
||||
@@ -172,6 +172,9 @@
|
||||
#define AT803X_LOC_MAC_ADDR_16_31_OFFSET 0x804B
|
||||
#define AT803X_LOC_MAC_ADDR_32_47_OFFSET 0x804A
|
||||
|
||||
#define AT803X_PHY_MMD3_WOL_CTRL 0x8012
|
||||
#define AT803X_WOL_EN BIT(5)
|
||||
|
||||
#define AT803X_DEBUG_ADDR 0x1D
|
||||
#define AT803X_DEBUG_DATA 0x1E
|
||||
|
||||
@@ -215,6 +218,8 @@ int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
|
||||
int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data);
|
||||
int at803x_set_wol(struct phy_device *phydev,
|
||||
struct ethtool_wolinfo *wol);
|
||||
int at8031_set_wol(struct phy_device *phydev,
|
||||
struct ethtool_wolinfo *wol);
|
||||
void at803x_get_wol(struct phy_device *phydev,
|
||||
struct ethtool_wolinfo *wol);
|
||||
int at803x_ack_interrupt(struct phy_device *phydev);
|
||||
|
||||
Reference in New Issue
Block a user