mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
net: phy: add phy_config_inband()
Add a method to configure the PHY's in-band mode. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Link: https://patch.msgid.link/E1tIUru-006IUI-08@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
1c86828dff
commit
5d58a890c0
@ -1026,6 +1026,38 @@ unsigned int phy_inband_caps(struct phy_device *phydev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phy_inband_caps);
|
||||
|
||||
/**
|
||||
* phy_config_inband - configure the desired PHY in-band mode
|
||||
* @phydev: the phy_device struct
|
||||
* @modes: in-band modes to configure
|
||||
*
|
||||
* Description: disables, enables or enables-with-bypass in-band signalling
|
||||
* between the PHY and host system.
|
||||
*
|
||||
* Returns: zero on success, or negative errno value.
|
||||
*/
|
||||
int phy_config_inband(struct phy_device *phydev, unsigned int modes)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!!(modes & LINK_INBAND_DISABLE) +
|
||||
!!(modes & LINK_INBAND_ENABLE) +
|
||||
!!(modes & LINK_INBAND_BYPASS) != 1)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&phydev->lock);
|
||||
if (!phydev->drv)
|
||||
err = -EIO;
|
||||
else if (!phydev->drv->config_inband)
|
||||
err = -EOPNOTSUPP;
|
||||
else
|
||||
err = phydev->drv->config_inband(phydev, modes);
|
||||
mutex_unlock(&phydev->lock);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(phy_config_inband);
|
||||
|
||||
/**
|
||||
* _phy_start_aneg - start auto-negotiation for this PHY device
|
||||
* @phydev: the phy_device struct
|
||||
|
@ -982,6 +982,11 @@ struct phy_driver {
|
||||
unsigned int (*inband_caps)(struct phy_device *phydev,
|
||||
phy_interface_t interface);
|
||||
|
||||
/**
|
||||
* @config_inband: configure in-band mode for the PHY
|
||||
*/
|
||||
int (*config_inband)(struct phy_device *phydev, unsigned int modes);
|
||||
|
||||
/**
|
||||
* @get_rate_matching: Get the supported type of rate matching for a
|
||||
* particular phy interface. This is used by phy consumers to determine
|
||||
@ -1846,6 +1851,7 @@ int phy_start_aneg(struct phy_device *phydev);
|
||||
int phy_aneg_done(struct phy_device *phydev);
|
||||
unsigned int phy_inband_caps(struct phy_device *phydev,
|
||||
phy_interface_t interface);
|
||||
int phy_config_inband(struct phy_device *phydev, unsigned int modes);
|
||||
int phy_speed_down(struct phy_device *phydev, bool sync);
|
||||
int phy_speed_up(struct phy_device *phydev);
|
||||
bool phy_check_valid(int speed, int duplex, unsigned long *features);
|
||||
|
Loading…
Reference in New Issue
Block a user