[PATCH net-next v2 2/2] net: phy: Introduce is_phy_device()

Yajun Deng yajun.deng at linux.dev
Tue Jan 2 18:53:34 PST 2024


MDIO_DEVICE_FLAG_PHY is the only flag that can be set in the
struct mdio_device. This flag is used to test that if it is a phy
device.

We can test that the type of the device is equal to mdio_bus_phy_type,
so that, the flags in struct mdio_device can be removed.

Introduce is_phy_device(), use it to test that if the device is a phy
device.

Signed-off-by: Yajun Deng <yajun.deng at linux.dev>
---
 drivers/net/phy/mdio_bus.c   | 7 +++----
 drivers/net/phy/phy_device.c | 8 ++++++--
 include/linux/mdio.h         | 3 ---
 include/linux/phy.h          | 1 +
 4 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 69b8ddef9500..a80e6a7cbca5 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -75,7 +75,7 @@ int mdiobus_register_device(struct mdio_device *mdiodev)
 	if (mdiodev->bus->mdio_map[mdiodev->addr])
 		return -EBUSY;
 
-	if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY) {
+	if (is_phy_device(&mdiodev->dev)) {
 		err = mdiobus_register_gpiod(mdiodev);
 		if (err)
 			return err;
@@ -125,7 +125,7 @@ struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr)
 	if (!mdiodev)
 		return NULL;
 
-	if (!(mdiodev->flags & MDIO_DEVICE_FLAG_PHY))
+	if (!is_phy_device(&mdiodev->dev))
 		return NULL;
 
 	return container_of(mdiodev, struct phy_device, mdio);
@@ -1345,8 +1345,7 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv)
 	struct mdio_device *mdio = to_mdio_device(dev);
 
 	/* Both the driver and device must type-match */
-	if (is_phy_driver(&mdiodrv->driver) ==
-	    !(mdio->flags & MDIO_DEVICE_FLAG_PHY))
+	if (is_phy_driver(&mdiodrv->driver) != is_phy_device(&mdio->dev))
 		return 0;
 
 	if (of_driver_match_device(dev, drv))
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 732cfec293dd..1e19956e9e8d 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -640,6 +640,11 @@ static int phy_request_driver_module(struct phy_device *dev, u32 phy_id)
 	return 0;
 }
 
+bool is_phy_device(struct device *dev)
+{
+	return dev->type == &mdio_bus_phy_type;
+}
+
 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
 				     bool is_c45,
 				     struct phy_c45_device_ids *c45_ids)
@@ -660,7 +665,6 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
 	mdiodev->bus = bus;
 	mdiodev->bus_match = phy_bus_match;
 	mdiodev->addr = addr;
-	mdiodev->flags = MDIO_DEVICE_FLAG_PHY;
 	mdiodev->device_free = phy_mdio_device_free;
 	mdiodev->device_remove = phy_mdio_device_remove;
 	mdiodev->reset_state = -1;
@@ -3266,7 +3270,7 @@ struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
 	if (!mdiodev)
 		return NULL;
 
-	if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
+	if (is_phy_device(&mdiodev->dev))
 		return to_phy_device(&mdiodev->dev);
 
 	put_device(&mdiodev->dev);
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index 852f838f52f5..8364e2d0c269 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -37,7 +37,6 @@ struct mdio_device {
 
 	/* Bus address of the MDIO device (0-31) */
 	int addr;
-	int flags;
 	int reset_state;
 	struct gpio_desc *reset_gpio;
 	struct reset_control *reset_ctrl;
@@ -50,8 +49,6 @@ static inline struct mdio_device *to_mdio_device(const struct device *dev)
 	return container_of(dev, struct mdio_device, dev);
 }
 
-#define MDIO_DEVICE_FLAG_PHY		1
-
 /* struct mdio_driver: Generic MDIO driver */
 struct mdio_driver {
 	struct device_driver driver;
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 603c440f09f6..7d10b44a475b 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -2156,5 +2156,6 @@ module_exit(phy_module_exit)
 bool phy_driver_is_genphy(struct phy_device *phydev);
 bool phy_driver_is_genphy_10g(struct phy_device *phydev);
 bool is_phy_driver(struct device_driver *driver);
+bool is_phy_device(struct device *dev);
 
 #endif /* __PHY_H */
-- 
2.25.1




More information about the linux-phy mailing list