diff options
| author | Uwe Kleine-König <u.kleine-koenig@baylibre.com> | 2025-12-10 09:31:38 +0100 |
|---|---|---|
| committer | Thierry Reding <treding@nvidia.com> | 2026-01-13 12:26:32 +0100 |
| commit | 1f61d735b8595f80ae5cfbbe11390a49b7f45911 (patch) | |
| tree | 6f92200f7e8318eb027d15d29823bf130b8be385 /drivers/gpu | |
| parent | ba3588410cedb1696cfe56ebefcc4401c6d0bb36 (diff) | |
host1x: Convert to bus methods
The callbacks .probe(), .remove() and .shutdown() for device_drivers
should go away. So migrate to bus methods. There are two differences
that need addressing:
- The bus remove callback returns void while the driver remove callback
returns int (the actual value is ignored by the core).
- The bus shutdown callback is also called for unbound devices, so an
additional check for dev->driver != NULL is needed.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com> # tegra20 tegra-video
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/dd55d034c68953268ea416aa5c13e41b158fcbb4.1765355236.git.u.kleine-koenig@baylibre.com
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/host1x/bus.c | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c index ceb8212fa8c9..e2673bc7cb31 100644 --- a/drivers/gpu/host1x/bus.c +++ b/drivers/gpu/host1x/bus.c @@ -346,6 +346,36 @@ static int host1x_device_uevent(const struct device *dev, return 0; } +static int host1x_device_probe(struct device *dev) +{ + struct host1x_driver *driver = to_host1x_driver(dev->driver); + struct host1x_device *device = to_host1x_device(dev); + + if (driver->probe) + return driver->probe(device); + + return 0; +} + +static void host1x_device_remove(struct device *dev) +{ + struct host1x_driver *driver = to_host1x_driver(dev->driver); + struct host1x_device *device = to_host1x_device(dev); + + if (driver->remove) + driver->remove(device); +} + +static void host1x_device_shutdown(struct device *dev) +{ + struct host1x_driver *driver = to_host1x_driver(dev->driver); + struct host1x_device *device = to_host1x_device(dev); + + if (dev->driver && driver->shutdown) + driver->shutdown(device); +} + + static const struct dev_pm_ops host1x_device_pm_ops = { .suspend = pm_generic_suspend, .resume = pm_generic_resume, @@ -359,6 +389,9 @@ const struct bus_type host1x_bus_type = { .name = "host1x", .match = host1x_device_match, .uevent = host1x_device_uevent, + .probe = host1x_device_probe, + .remove = host1x_device_remove, + .shutdown = host1x_device_shutdown, .pm = &host1x_device_pm_ops, }; @@ -623,37 +656,6 @@ int host1x_unregister(struct host1x *host1x) return 0; } -static int host1x_device_probe(struct device *dev) -{ - struct host1x_driver *driver = to_host1x_driver(dev->driver); - struct host1x_device *device = to_host1x_device(dev); - - if (driver->probe) - return driver->probe(device); - - return 0; -} - -static int host1x_device_remove(struct device *dev) -{ - struct host1x_driver *driver = to_host1x_driver(dev->driver); - struct host1x_device *device = to_host1x_device(dev); - - if (driver->remove) - driver->remove(device); - - return 0; -} - -static void host1x_device_shutdown(struct device *dev) -{ - struct host1x_driver *driver = to_host1x_driver(dev->driver); - struct host1x_device *device = to_host1x_device(dev); - - if (driver->shutdown) - driver->shutdown(device); -} - /** * host1x_driver_register_full() - register a host1x driver * @driver: host1x driver @@ -684,9 +686,6 @@ int host1x_driver_register_full(struct host1x_driver *driver, driver->driver.bus = &host1x_bus_type; driver->driver.owner = owner; - driver->driver.probe = host1x_device_probe; - driver->driver.remove = host1x_device_remove; - driver->driver.shutdown = host1x_device_shutdown; return driver_register(&driver->driver); } |
