@@ -392,7 +392,7 @@ static struct mdio_driver b53_mdio_driver = {
.probe = b53_mdio_probe,
.remove = b53_mdio_remove,
.shutdown = b53_mdio_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = "bcm53xx",
.of_match_table = b53_of_match,
},
@@ -375,7 +375,7 @@ static void dsa_loop_drv_shutdown(struct mdio_device *mdiodev)
}
static struct mdio_driver dsa_loop_drv = {
- .mdiodrv.driver = {
+ .driver = {
.name = "dsa-loop",
},
.probe = dsa_loop_drv_probe,
@@ -162,7 +162,7 @@ static const struct of_device_id lan9303_mdio_of_match[] = {
MODULE_DEVICE_TABLE(of, lan9303_mdio_of_match);
static struct mdio_driver lan9303_mdio_driver = {
- .mdiodrv.driver = {
+ .driver = {
.name = "LAN9303_MDIO",
.of_match_table = lan9303_mdio_of_match,
},
@@ -213,7 +213,7 @@ static struct mdio_driver ksz8863_driver = {
.probe = ksz8863_smi_probe,
.remove = ksz8863_smi_remove,
.shutdown = ksz8863_smi_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = "ksz8863-switch",
.of_match_table = ksz8863_dt_ids,
},
@@ -258,7 +258,7 @@ static struct mdio_driver mt7530_mdio_driver = {
.probe = mt7530_probe,
.remove = mt7530_remove,
.shutdown = mt7530_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = "mt7530-mdio",
.of_match_table = mt7530_of_match,
},
@@ -367,7 +367,7 @@ static struct mdio_driver mv88e6060_driver = {
.probe = mv88e6060_probe,
.remove = mv88e6060_remove,
.shutdown = mv88e6060_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = "mv88e6060",
.of_match_table = mv88e6060_of_match,
},
@@ -7258,7 +7258,7 @@ static struct mdio_driver mv88e6xxx_driver = {
.probe = mv88e6xxx_probe,
.remove = mv88e6xxx_remove,
.shutdown = mv88e6xxx_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = "mv88e6085",
.of_match_table = mv88e6xxx_of_match,
.pm = &mv88e6xxx_pm_ops,
@@ -1122,7 +1122,7 @@ static struct mdio_driver ar9331_sw_mdio_driver = {
.probe = ar9331_sw_probe,
.remove = ar9331_sw_remove,
.shutdown = ar9331_sw_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = AR9331_SW_NAME,
.of_match_table = ar9331_sw_of_match,
},
@@ -2187,7 +2187,7 @@ static struct mdio_driver qca8kmdio_driver = {
.probe = qca8k_sw_probe,
.remove = qca8k_sw_remove,
.shutdown = qca8k_sw_shutdown,
- .mdiodrv.driver = {
+ .driver = {
.name = "qca8k",
.of_match_table = qca8k_of_match,
.pm = &qca8k_pm_ops,
@@ -274,7 +274,7 @@ static const struct of_device_id realtek_mdio_of_match[] = {
MODULE_DEVICE_TABLE(of, realtek_mdio_of_match);
static struct mdio_driver realtek_mdio_driver = {
- .mdiodrv.driver = {
+ .driver = {
.name = "realtek-mdio",
.of_match_table = realtek_mdio_of_match,
},
@@ -164,7 +164,7 @@ static const struct of_device_id __maybe_unused xrs700x_mdio_dt_ids[] = {
MODULE_DEVICE_TABLE(of, xrs700x_mdio_dt_ids);
static struct mdio_driver xrs700x_mdio_driver = {
- .mdiodrv.driver = {
+ .driver = {
.name = "xrs700x-mdio",
.of_match_table = of_match_ptr(xrs700x_mdio_dt_ids),
},
@@ -1345,7 +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 (!(mdiodrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY) !=
+ if (is_phy_driver(&mdiodrv->driver) ==
!(mdio->flags & MDIO_DEVICE_FLAG_PHY))
return 0;
@@ -40,7 +40,7 @@ int mdio_device_bus_match(struct device *dev, struct device_driver *drv)
struct mdio_device *mdiodev = to_mdio_device(dev);
struct mdio_driver *mdiodrv = to_mdio_driver(drv);
- if (mdiodrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY)
+ if (is_phy_driver(&mdiodrv->driver))
return 0;
return strcmp(mdiodev->modalias, drv->name) == 0;
@@ -203,20 +203,19 @@ static void mdio_shutdown(struct device *dev)
*/
int mdio_driver_register(struct mdio_driver *drv)
{
- struct mdio_driver_common *mdiodrv = &drv->mdiodrv;
int retval;
- pr_debug("%s: %s\n", __func__, mdiodrv->driver.name);
+ pr_debug("%s: %s\n", __func__, drv->driver.name);
- mdiodrv->driver.bus = &mdio_bus_type;
- mdiodrv->driver.probe = mdio_probe;
- mdiodrv->driver.remove = mdio_remove;
- mdiodrv->driver.shutdown = mdio_shutdown;
+ drv->driver.bus = &mdio_bus_type;
+ drv->driver.probe = mdio_probe;
+ drv->driver.remove = mdio_remove;
+ drv->driver.shutdown = mdio_shutdown;
- retval = driver_register(&mdiodrv->driver);
+ retval = driver_register(&drv->driver);
if (retval) {
pr_err("%s: Error %d in registering driver\n",
- mdiodrv->driver.name, retval);
+ drv->driver.name, retval);
return retval;
}
@@ -227,8 +226,6 @@ EXPORT_SYMBOL(mdio_driver_register);
void mdio_driver_unregister(struct mdio_driver *drv)
{
- struct mdio_driver_common *mdiodrv = &drv->mdiodrv;
-
- driver_unregister(&mdiodrv->driver);
+ driver_unregister(&drv->driver);
}
EXPORT_SYMBOL(mdio_driver_unregister);
@@ -538,7 +538,7 @@ static int phy_bus_match(struct device *dev, struct device_driver *drv)
const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids);
int i;
- if (!(phydrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY))
+ if (!is_phy_driver(&phydrv->driver))
return 0;
if (phydrv->match_phy_device)
@@ -1505,9 +1505,9 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
*/
if (!d->driver) {
if (phydev->is_c45)
- d->driver = &genphy_c45_driver.mdiodrv.driver;
+ d->driver = &genphy_c45_driver.driver;
else
- d->driver = &genphy_driver.mdiodrv.driver;
+ d->driver = &genphy_driver.driver;
using_genphy = true;
}
@@ -1691,15 +1691,13 @@ static bool phy_driver_is_genphy_kind(struct phy_device *phydev,
bool phy_driver_is_genphy(struct phy_device *phydev)
{
- return phy_driver_is_genphy_kind(phydev,
- &genphy_driver.mdiodrv.driver);
+ return phy_driver_is_genphy_kind(phydev, &genphy_driver.driver);
}
EXPORT_SYMBOL_GPL(phy_driver_is_genphy);
bool phy_driver_is_genphy_10g(struct phy_device *phydev)
{
- return phy_driver_is_genphy_kind(phydev,
- &genphy_c45_driver.mdiodrv.driver);
+ return phy_driver_is_genphy_kind(phydev, &genphy_c45_driver.driver);
}
EXPORT_SYMBOL_GPL(phy_driver_is_genphy_10g);
@@ -3465,6 +3463,11 @@ static int phy_remove(struct device *dev)
return 0;
}
+bool is_phy_driver(struct device_driver *driver)
+{
+ return driver->probe == phy_probe;
+}
+
/**
* phy_driver_register - register a phy_driver with the PHY layer
* @new_driver: new phy_driver to register
@@ -3488,20 +3491,19 @@ int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
* is backed by a struct phy_device. If such a case happens, we will
* make out-of-bounds accesses and lockup in phydev->lock.
*/
- if (WARN(new_driver->mdiodrv.driver.of_match_table,
+ if (WARN(new_driver->driver.of_match_table,
"%s: driver must not provide a DT match table\n",
new_driver->name))
return -EINVAL;
- new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;
- new_driver->mdiodrv.driver.name = new_driver->name;
- new_driver->mdiodrv.driver.bus = &mdio_bus_type;
- new_driver->mdiodrv.driver.probe = phy_probe;
- new_driver->mdiodrv.driver.remove = phy_remove;
- new_driver->mdiodrv.driver.owner = owner;
- new_driver->mdiodrv.driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
+ new_driver->driver.name = new_driver->name;
+ new_driver->driver.bus = &mdio_bus_type;
+ new_driver->driver.probe = phy_probe;
+ new_driver->driver.remove = phy_remove;
+ new_driver->driver.owner = owner;
+ new_driver->driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
- retval = driver_register(&new_driver->mdiodrv.driver);
+ retval = driver_register(&new_driver->driver);
if (retval) {
pr_err("%s: Error %d in registering driver\n",
new_driver->name, retval);
@@ -3534,7 +3536,7 @@ EXPORT_SYMBOL(phy_drivers_register);
void phy_driver_unregister(struct phy_driver *drv)
{
- driver_unregister(&drv->mdiodrv.driver);
+ driver_unregister(&drv->driver);
}
EXPORT_SYMBOL(phy_driver_unregister);
@@ -129,7 +129,7 @@ MODULE_DEVICE_TABLE(of, xgmiitorgmii_of_match);
static struct mdio_driver xgmiitorgmii_driver = {
.probe = xgmiitorgmii_probe,
- .mdiodrv.driver = {
+ .driver = {
.name = "xgmiitorgmii",
.of_match_table = xgmiitorgmii_of_match,
},
@@ -229,11 +229,9 @@ static int bcm_ns_usb3_mdio_probe(struct mdio_device *mdiodev)
}
static struct mdio_driver bcm_ns_usb3_mdio_driver = {
- .mdiodrv = {
- .driver = {
- .name = "bcm_ns_mdio_usb3",
- .of_match_table = bcm_ns_usb3_id_table,
- },
+ .driver = {
+ .name = "bcm_ns_mdio_usb3",
+ .of_match_table = bcm_ns_usb3_id_table,
},
.probe = bcm_ns_usb3_mdio_probe,
};
@@ -73,11 +73,9 @@ static const struct of_device_id ns2_pci_phy_of_match[] = {
MODULE_DEVICE_TABLE(of, ns2_pci_phy_of_match);
static struct mdio_driver ns2_pci_phy_driver = {
- .mdiodrv = {
- .driver = {
- .name = "phy-bcm-ns2-pci",
- .of_match_table = ns2_pci_phy_of_match,
- },
+ .driver = {
+ .name = "phy-bcm-ns2-pci",
+ .of_match_table = ns2_pci_phy_of_match,
},
.probe = ns2_pci_phy_probe,
};
@@ -50,22 +50,11 @@ static inline struct mdio_device *to_mdio_device(const struct device *dev)
return container_of(dev, struct mdio_device, dev);
}
-/* struct mdio_driver_common: Common to all MDIO drivers */
-struct mdio_driver_common {
- struct device_driver driver;
- int flags;
-};
#define MDIO_DEVICE_FLAG_PHY 1
-static inline struct mdio_driver_common *
-to_mdio_common_driver(const struct device_driver *driver)
-{
- return container_of(driver, struct mdio_driver_common, driver);
-}
-
/* struct mdio_driver: Generic MDIO driver */
struct mdio_driver {
- struct mdio_driver_common mdiodrv;
+ struct device_driver driver;
/*
* Called during discovery. Used to set
@@ -83,8 +72,7 @@ struct mdio_driver {
static inline struct mdio_driver *
to_mdio_driver(const struct device_driver *driver)
{
- return container_of(to_mdio_common_driver(driver), struct mdio_driver,
- mdiodrv);
+ return container_of(driver, struct mdio_driver, driver);
}
/* device driver data */
@@ -87,7 +87,6 @@ extern const int phy_10gbit_features_array[1];
#define PHY_RST_AFTER_CLK_EN 0x00000002
#define PHY_POLL_CABLE_TEST 0x00000004
#define PHY_ALWAYS_CALL_SUSPEND 0x00000008
-#define MDIO_DEVICE_IS_PHY 0x80000000
/**
* enum phy_interface_t - Interface Mode definitions
@@ -880,7 +879,7 @@ struct phy_led {
/**
* struct phy_driver - Driver structure for a particular PHY type
*
- * @mdiodrv: Data common to all MDIO devices
+ * @driver: The driver-model core driver structure.
* @phy_id: The result of reading the UID registers of this PHY
* type, and ANDing them with the phy_id_mask. This driver
* only works for PHYs with IDs which match this field
@@ -901,7 +900,7 @@ struct phy_led {
* though it is not currently supported in the driver).
*/
struct phy_driver {
- struct mdio_driver_common mdiodrv;
+ struct device_driver driver;
u32 phy_id;
char *name;
u32 phy_id_mask;
@@ -1154,8 +1153,7 @@ struct phy_driver {
unsigned long *rules);
};
-#define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
- struct phy_driver, mdiodrv)
+#define to_phy_driver(d) container_of(d, struct phy_driver, driver)
#define PHY_ANY_ID "MATCH ANY PHY"
#define PHY_ANY_UID 0xffffffff
@@ -2157,5 +2155,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);
#endif /* __PHY_H */