diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
| -rw-r--r-- | drivers/net/phy/phy_device.c | 103 | 
1 files changed, 52 insertions, 51 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 9e4ba8e80a18..b9f5f40a7ac1 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -346,6 +346,55 @@ static int phy_bus_match(struct device *dev, struct device_driver *drv)  	}  } +static ssize_t +phy_id_show(struct device *dev, struct device_attribute *attr, char *buf) +{ +	struct phy_device *phydev = to_phy_device(dev); + +	return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id); +} +static DEVICE_ATTR_RO(phy_id); + +static ssize_t +phy_interface_show(struct device *dev, struct device_attribute *attr, char *buf) +{ +	struct phy_device *phydev = to_phy_device(dev); +	const char *mode = NULL; + +	if (phy_is_internal(phydev)) +		mode = "internal"; +	else +		mode = phy_modes(phydev->interface); + +	return sprintf(buf, "%s\n", mode); +} +static DEVICE_ATTR_RO(phy_interface); + +static ssize_t +phy_has_fixups_show(struct device *dev, struct device_attribute *attr, +		    char *buf) +{ +	struct phy_device *phydev = to_phy_device(dev); + +	return sprintf(buf, "%d\n", phydev->has_fixups); +} +static DEVICE_ATTR_RO(phy_has_fixups); + +static struct attribute *phy_dev_attrs[] = { +	&dev_attr_phy_id.attr, +	&dev_attr_phy_interface.attr, +	&dev_attr_phy_has_fixups.attr, +	NULL, +}; +ATTRIBUTE_GROUPS(phy_dev); + +static const struct device_type mdio_bus_phy_type = { +	.name = "PHY", +	.groups = phy_dev_groups, +	.release = phy_device_release, +	.pm = MDIO_BUS_PHY_PM_OPS, +}; +  struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,  				     bool is_c45,  				     struct phy_c45_device_ids *c45_ids) @@ -359,11 +408,10 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,  		return ERR_PTR(-ENOMEM);  	mdiodev = &dev->mdio; -	mdiodev->dev.release = phy_device_release;  	mdiodev->dev.parent = &bus->dev;  	mdiodev->dev.bus = &mdio_bus_type; +	mdiodev->dev.type = &mdio_bus_phy_type;  	mdiodev->bus = bus; -	mdiodev->pm_ops = MDIO_BUS_PHY_PM_OPS;  	mdiodev->bus_match = phy_bus_match;  	mdiodev->addr = addr;  	mdiodev->flags = MDIO_DEVICE_FLAG_PHY; @@ -587,48 +635,6 @@ struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)  }  EXPORT_SYMBOL(get_phy_device); -static ssize_t -phy_id_show(struct device *dev, struct device_attribute *attr, char *buf) -{ -	struct phy_device *phydev = to_phy_device(dev); - -	return sprintf(buf, "0x%.8lx\n", (unsigned long)phydev->phy_id); -} -static DEVICE_ATTR_RO(phy_id); - -static ssize_t -phy_interface_show(struct device *dev, struct device_attribute *attr, char *buf) -{ -	struct phy_device *phydev = to_phy_device(dev); -	const char *mode = NULL; - -	if (phy_is_internal(phydev)) -		mode = "internal"; -	else -		mode = phy_modes(phydev->interface); - -	return sprintf(buf, "%s\n", mode); -} -static DEVICE_ATTR_RO(phy_interface); - -static ssize_t -phy_has_fixups_show(struct device *dev, struct device_attribute *attr, -		    char *buf) -{ -	struct phy_device *phydev = to_phy_device(dev); - -	return sprintf(buf, "%d\n", phydev->has_fixups); -} -static DEVICE_ATTR_RO(phy_has_fixups); - -static struct attribute *phy_dev_attrs[] = { -	&dev_attr_phy_id.attr, -	&dev_attr_phy_interface.attr, -	&dev_attr_phy_has_fixups.attr, -	NULL, -}; -ATTRIBUTE_GROUPS(phy_dev); -  /**   * phy_device_register - Register the phy device on the MDIO bus   * @phydev: phy_device structure to be added to the MDIO bus @@ -651,8 +657,6 @@ int phy_device_register(struct phy_device *phydev)  		goto out;  	} -	phydev->mdio.dev.groups = phy_dev_groups; -  	err = device_add(&phydev->mdio.dev);  	if (err) {  		pr_err("PHY %d failed to add\n", phydev->mdio.addr); @@ -1720,11 +1724,8 @@ EXPORT_SYMBOL(genphy_loopback);  static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)  { -	/* The default values for phydev->supported are provided by the PHY -	 * driver "features" member, we want to reset to sane defaults first -	 * before supporting higher speeds. -	 */ -	phydev->supported &= PHY_DEFAULT_FEATURES; +	phydev->supported &= ~(PHY_1000BT_FEATURES | PHY_100BT_FEATURES | +			       PHY_10BT_FEATURES);  	switch (max_speed) {  	default:  |