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

From: Yajun Deng
Date: Tue Jan 02 2024 - 21:55:05 EST


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@xxxxxxxxx>
---
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