mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-12 19:24:31 -05:00
sdio: Provide a bustype shutdown function
To prepare sdio drivers to migrate away from struct device_driver::shutdown (and then eventually remove that callback) create a serdev driver shutdown callback and migration code to keep the existing behaviour. Note this introduces a warning for each driver that isn't converted yet to that callback at register time. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Link: https://patch.msgid.link/397f45c2818f6632151f92b70e547262f373c3b6.1768232321.git.u.kleine-koenig@baylibre.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
853800c746
commit
c5c57e56de
@@ -232,6 +232,15 @@ static void sdio_bus_remove(struct device *dev)
|
||||
pm_runtime_put_sync(dev);
|
||||
}
|
||||
|
||||
static void sdio_bus_shutdown(struct device *dev)
|
||||
{
|
||||
struct sdio_driver *drv = to_sdio_driver(dev->driver);
|
||||
struct sdio_func *func = dev_to_sdio_func(dev);
|
||||
|
||||
if (dev->driver && drv->shutdown)
|
||||
drv->shutdown(func);
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops sdio_bus_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_generic_suspend, pm_generic_resume)
|
||||
SET_RUNTIME_PM_OPS(
|
||||
@@ -248,6 +257,7 @@ static const struct bus_type sdio_bus_type = {
|
||||
.uevent = sdio_bus_uevent,
|
||||
.probe = sdio_bus_probe,
|
||||
.remove = sdio_bus_remove,
|
||||
.shutdown = sdio_bus_shutdown,
|
||||
.pm = &sdio_bus_pm_ops,
|
||||
};
|
||||
|
||||
@@ -261,6 +271,14 @@ void sdio_unregister_bus(void)
|
||||
bus_unregister(&sdio_bus_type);
|
||||
}
|
||||
|
||||
static void sdio_legacy_shutdown(struct sdio_func *func)
|
||||
{
|
||||
struct device *dev = &func->dev;
|
||||
struct device_driver *driver = dev->driver;
|
||||
|
||||
driver->shutdown(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* __sdio_register_driver - register a function driver
|
||||
* @drv: SDIO function driver
|
||||
@@ -272,6 +290,13 @@ int __sdio_register_driver(struct sdio_driver *drv, struct module *owner)
|
||||
drv->drv.bus = &sdio_bus_type;
|
||||
drv->drv.owner = owner;
|
||||
|
||||
/*
|
||||
* This driver needs updating. Note that driver_register() warns about
|
||||
* this, so we're not adding another warning here.
|
||||
*/
|
||||
if (!drv->shutdown && drv->drv.shutdown)
|
||||
drv->shutdown = sdio_legacy_shutdown;
|
||||
|
||||
return driver_register(&drv->drv);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__sdio_register_driver);
|
||||
|
||||
@@ -78,6 +78,7 @@ struct sdio_driver {
|
||||
|
||||
int (*probe)(struct sdio_func *, const struct sdio_device_id *);
|
||||
void (*remove)(struct sdio_func *);
|
||||
void (*shutdown)(struct sdio_func *);
|
||||
|
||||
struct device_driver drv;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user