Introduce a bus specific probe, remove and shutdown function. The objective is to get rid of users of struct device_driver callbacks .probe(), .remove() and .shutdown() to eventually remove these. Signed-off-by: Uwe Kleine-König --- Hello, this is part of an effort to drop the callbacks in struct device_driver. The only relevant differences between the driver callbacks and the bus callbacks is that .remove() returns void for the latter and .shutdown() is also called for unbound devices (so mdio_bus_shutdown() has to check for drv != NULL). Best regards Uwe drivers/net/phy/mdio_bus.c | 56 +++++++++++++++++++++++++++++++++ drivers/net/phy/mdio_device.c | 58 ----------------------------------- 2 files changed, 56 insertions(+), 58 deletions(-) diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index afdf1ad6c0e6..dea67470a7bf 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -1004,11 +1004,67 @@ static const struct attribute_group *mdio_bus_dev_groups[] = { NULL, }; +/** + * mdio_bus_probe - probe an MDIO device + * @dev: device to probe + * + * Description: Take care of setting up the mdio_device structure + * and calling the driver to probe the device. + * + * Return: Zero if successful, negative error code on failure + */ +static int mdio_bus_probe(struct device *dev) +{ + struct mdio_device *mdiodev = to_mdio_device(dev); + struct device_driver *drv = dev->driver; + struct mdio_driver *mdiodrv = to_mdio_driver(drv); + int err = 0; + + /* Deassert the reset signal */ + mdio_device_reset(mdiodev, 0); + + if (mdiodrv->probe) { + err = mdiodrv->probe(mdiodev); + if (err) { + /* Assert the reset signal */ + mdio_device_reset(mdiodev, 1); + } + } + + return err; +} + +static void mdio_bus_remove(struct device *dev) +{ + struct mdio_device *mdiodev = to_mdio_device(dev); + struct device_driver *drv = dev->driver; + struct mdio_driver *mdiodrv = to_mdio_driver(drv); + + if (mdiodrv->remove) + mdiodrv->remove(mdiodev); + + /* Assert the reset signal */ + mdio_device_reset(mdiodev, 1); +} + +static void mdio_bus_shutdown(struct device *dev) +{ + struct mdio_device *mdiodev = to_mdio_device(dev); + struct device_driver *drv = dev->driver; + struct mdio_driver *mdiodrv = to_mdio_driver(drv); + + if (drv && mdiodrv->shutdown) + mdiodrv->shutdown(mdiodev); +} + const struct bus_type mdio_bus_type = { .name = "mdio_bus", .dev_groups = mdio_bus_dev_groups, .match = mdio_bus_match, .uevent = mdio_uevent, + .probe = mdio_bus_probe, + .remove = mdio_bus_remove, + .shutdown = mdio_bus_shutdown, }; EXPORT_SYMBOL(mdio_bus_type); diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c index 6e90ed42cd98..29172fa8d0df 100644 --- a/drivers/net/phy/mdio_device.c +++ b/drivers/net/phy/mdio_device.c @@ -202,61 +202,6 @@ void mdio_device_reset(struct mdio_device *mdiodev, int value) } EXPORT_SYMBOL(mdio_device_reset); -/** - * mdio_probe - probe an MDIO device - * @dev: device to probe - * - * Description: Take care of setting up the mdio_device structure - * and calling the driver to probe the device. - * - * Return: Zero if successful, negative error code on failure - */ -static int mdio_probe(struct device *dev) -{ - struct mdio_device *mdiodev = to_mdio_device(dev); - struct device_driver *drv = mdiodev->dev.driver; - struct mdio_driver *mdiodrv = to_mdio_driver(drv); - int err = 0; - - /* Deassert the reset signal */ - mdio_device_reset(mdiodev, 0); - - if (mdiodrv->probe) { - err = mdiodrv->probe(mdiodev); - if (err) { - /* Assert the reset signal */ - mdio_device_reset(mdiodev, 1); - } - } - - return err; -} - -static int mdio_remove(struct device *dev) -{ - struct mdio_device *mdiodev = to_mdio_device(dev); - struct device_driver *drv = mdiodev->dev.driver; - struct mdio_driver *mdiodrv = to_mdio_driver(drv); - - if (mdiodrv->remove) - mdiodrv->remove(mdiodev); - - /* Assert the reset signal */ - mdio_device_reset(mdiodev, 1); - - return 0; -} - -static void mdio_shutdown(struct device *dev) -{ - struct mdio_device *mdiodev = to_mdio_device(dev); - struct device_driver *drv = mdiodev->dev.driver; - struct mdio_driver *mdiodrv = to_mdio_driver(drv); - - if (mdiodrv->shutdown) - mdiodrv->shutdown(mdiodev); -} - /** * mdio_driver_register - register an mdio_driver with the MDIO layer * @drv: new mdio_driver to register @@ -271,9 +216,6 @@ int mdio_driver_register(struct mdio_driver *drv) pr_debug("%s: %s\n", __func__, mdiodrv->driver.name); mdiodrv->driver.bus = &mdio_bus_type; - mdiodrv->driver.probe = mdio_probe; - mdiodrv->driver.remove = mdio_remove; - mdiodrv->driver.shutdown = mdio_shutdown; retval = driver_register(&mdiodrv->driver); if (retval) { base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8 -- 2.47.3