mirror of https://gitee.com/openkylin/linux.git
net: phy: Add phy_standalone sysfs entry
Export a phy_standalone device attribute that is meant to give the indication that this PHY lacks an attached_dev and its corresponding sysfs link. The attribute will be created only when the phy_attach_direct() function will be called with a NULL net_device. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
82c76aca81
commit
c920f745f4
|
@ -34,3 +34,11 @@ Description:
|
||||||
xgmii, moca, qsgmii, trgmii, 1000base-x, 2500base-x, rxaui,
|
xgmii, moca, qsgmii, trgmii, 1000base-x, 2500base-x, rxaui,
|
||||||
xaui, 10gbase-kr, unknown
|
xaui, 10gbase-kr, unknown
|
||||||
|
|
||||||
|
What: /sys/class/mdio_bus/<bus>/<device>/phy_standalone
|
||||||
|
Date: May 2019
|
||||||
|
KernelVersion: 5.3
|
||||||
|
Contact: netdev@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Boolean value indicating whether the PHY device is used in
|
||||||
|
standalone mode, without a net_device associated, by PHYLINK.
|
||||||
|
Attribute created only when this is the case.
|
||||||
|
|
|
@ -1164,6 +1164,16 @@ static void phy_sysfs_create_links(struct phy_device *phydev)
|
||||||
phydev->sysfs_links = true;
|
phydev->sysfs_links = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
phy_standalone_show(struct device *dev, struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct phy_device *phydev = to_phy_device(dev);
|
||||||
|
|
||||||
|
return sprintf(buf, "%d\n", !phydev->attached_dev);
|
||||||
|
}
|
||||||
|
static DEVICE_ATTR_RO(phy_standalone);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* phy_attach_direct - attach a network device to a given PHY device pointer
|
* phy_attach_direct - attach a network device to a given PHY device pointer
|
||||||
* @dev: network device to attach
|
* @dev: network device to attach
|
||||||
|
@ -1253,6 +1263,13 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
|
||||||
|
|
||||||
phy_sysfs_create_links(phydev);
|
phy_sysfs_create_links(phydev);
|
||||||
|
|
||||||
|
if (!phydev->attached_dev) {
|
||||||
|
err = sysfs_create_file(&phydev->mdio.dev.kobj,
|
||||||
|
&dev_attr_phy_standalone.attr);
|
||||||
|
if (err)
|
||||||
|
phydev_err(phydev, "error creating 'phy_standalone' sysfs entry\n");
|
||||||
|
}
|
||||||
|
|
||||||
phydev->dev_flags = flags;
|
phydev->dev_flags = flags;
|
||||||
|
|
||||||
phydev->interface = interface;
|
phydev->interface = interface;
|
||||||
|
@ -1380,6 +1397,11 @@ void phy_detach(struct phy_device *phydev)
|
||||||
sysfs_remove_link(&dev->dev.kobj, "phydev");
|
sysfs_remove_link(&dev->dev.kobj, "phydev");
|
||||||
sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
|
sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!phydev->attached_dev)
|
||||||
|
sysfs_remove_file(&phydev->mdio.dev.kobj,
|
||||||
|
&dev_attr_phy_standalone.attr);
|
||||||
|
|
||||||
phy_suspend(phydev);
|
phy_suspend(phydev);
|
||||||
if (dev) {
|
if (dev) {
|
||||||
phydev->attached_dev->phydev = NULL;
|
phydev->attached_dev->phydev = NULL;
|
||||||
|
|
Loading…
Reference in New Issue