Re: [PATCH 4/4] amba: Make use of bus_type functions

From: Ulf Hansson
Date: Tue Nov 24 2020 - 05:57:36 EST


On Tue, 24 Nov 2020 at 11:33, Uwe Kleine-König
<u.kleine-koenig@xxxxxxxxxxxxxx> wrote:
>
> Instead of assigning the needed functions for each driver separately do it
> only once in amba_bustype. Move the definition of the functions to their
> proper place among the other callbacks used there.
>
> This prepares getting rid of these callbacks in struct device_driver.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>

Reviewed-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>

> ---
> drivers/amba/bus.c | 154 ++++++++++++++++++++++-----------------------
> 1 file changed, 77 insertions(+), 77 deletions(-)
>
> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> index 48b5d4b4e889..2f3799ac3edb 100644
> --- a/drivers/amba/bus.c
> +++ b/drivers/amba/bus.c
> @@ -174,6 +174,80 @@ static int amba_uevent(struct device *dev, struct kobj_uevent_env *env)
> return retval;
> }
>
> +/*
> + * These are the device model conversion veneers; they convert the
> + * device model structures to our more specific structures.
> + */
> +static int amba_probe(struct device *dev)
> +{
> + struct amba_device *pcdev = to_amba_device(dev);
> + struct amba_driver *pcdrv = to_amba_driver(dev->driver);
> + const struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev);
> + int ret;
> +
> + do {
> + ret = of_clk_set_defaults(dev->of_node, false);
> + if (ret < 0)
> + break;
> +
> + ret = dev_pm_domain_attach(dev, true);
> + if (ret)
> + break;
> +
> + ret = amba_get_enable_pclk(pcdev);
> + if (ret) {
> + dev_pm_domain_detach(dev, true);
> + break;
> + }
> +
> + pm_runtime_get_noresume(dev);
> + pm_runtime_set_active(dev);
> + pm_runtime_enable(dev);
> +
> + ret = pcdrv->probe(pcdev, id);
> + if (ret == 0)
> + break;
> +
> + pm_runtime_disable(dev);
> + pm_runtime_set_suspended(dev);
> + pm_runtime_put_noidle(dev);
> +
> + amba_put_disable_pclk(pcdev);
> + dev_pm_domain_detach(dev, true);
> + } while (0);
> +
> + return ret;
> +}
> +
> +static int amba_remove(struct device *dev)
> +{
> + struct amba_device *pcdev = to_amba_device(dev);
> + struct amba_driver *drv = to_amba_driver(dev->driver);
> +
> + pm_runtime_get_sync(dev);
> + if (drv->remove)
> + drv->remove(pcdev);
> + pm_runtime_put_noidle(dev);
> +
> + /* Undo the runtime PM settings in amba_probe() */
> + pm_runtime_disable(dev);
> + pm_runtime_set_suspended(dev);
> + pm_runtime_put_noidle(dev);
> +
> + amba_put_disable_pclk(pcdev);
> + dev_pm_domain_detach(dev, true);
> +
> + return 0;
> +}
> +
> +static void amba_shutdown(struct device *dev)
> +{
> + struct amba_driver *drv = to_amba_driver(dev->driver);
> +
> + if (drv->shutdown)
> + drv->shutdown(to_amba_device(dev));
> +}
> +
> #ifdef CONFIG_PM
> /*
> * Hooks to provide runtime PM of the pclk (bus clock). It is safe to
> @@ -239,6 +313,9 @@ struct bus_type amba_bustype = {
> .dev_groups = amba_dev_groups,
> .match = amba_match,
> .uevent = amba_uevent,
> + .probe = amba_probe,
> + .remove = amba_remove,
> + .shutdown = amba_shutdown,
> .dma_configure = platform_dma_configure,
> .pm = &amba_pm,
> };
> @@ -251,80 +328,6 @@ static int __init amba_init(void)
>
> postcore_initcall(amba_init);
>
> -/*
> - * These are the device model conversion veneers; they convert the
> - * device model structures to our more specific structures.
> - */
> -static int amba_probe(struct device *dev)
> -{
> - struct amba_device *pcdev = to_amba_device(dev);
> - struct amba_driver *pcdrv = to_amba_driver(dev->driver);
> - const struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev);
> - int ret;
> -
> - do {
> - ret = of_clk_set_defaults(dev->of_node, false);
> - if (ret < 0)
> - break;
> -
> - ret = dev_pm_domain_attach(dev, true);
> - if (ret)
> - break;
> -
> - ret = amba_get_enable_pclk(pcdev);
> - if (ret) {
> - dev_pm_domain_detach(dev, true);
> - break;
> - }
> -
> - pm_runtime_get_noresume(dev);
> - pm_runtime_set_active(dev);
> - pm_runtime_enable(dev);
> -
> - ret = pcdrv->probe(pcdev, id);
> - if (ret == 0)
> - break;
> -
> - pm_runtime_disable(dev);
> - pm_runtime_set_suspended(dev);
> - pm_runtime_put_noidle(dev);
> -
> - amba_put_disable_pclk(pcdev);
> - dev_pm_domain_detach(dev, true);
> - } while (0);
> -
> - return ret;
> -}
> -
> -static int amba_remove(struct device *dev)
> -{
> - struct amba_device *pcdev = to_amba_device(dev);
> - struct amba_driver *drv = to_amba_driver(dev->driver);
> -
> - pm_runtime_get_sync(dev);
> - if (drv->remove)
> - drv->remove(pcdev);
> - pm_runtime_put_noidle(dev);
> -
> - /* Undo the runtime PM settings in amba_probe() */
> - pm_runtime_disable(dev);
> - pm_runtime_set_suspended(dev);
> - pm_runtime_put_noidle(dev);
> -
> - amba_put_disable_pclk(pcdev);
> - dev_pm_domain_detach(dev, true);
> -
> - return 0;
> -}
> -
> -static void amba_shutdown(struct device *dev)
> -{
> - struct amba_driver *drv = to_amba_driver(dev->driver);
> -
> - if (drv->shutdown)
> - drv->shutdown(to_amba_device(dev));
> -}
> -
> /**
> * amba_driver_register - register an AMBA device driver
> * @drv: amba device driver structure
> @@ -339,9 +342,6 @@ int amba_driver_register(struct amba_driver *drv)
> return -EINVAL;
>
> drv->drv.bus = &amba_bustype;
> - drv->drv.probe = amba_probe;
> - drv->drv.remove = amba_remove;
> - drv->drv.shutdown = amba_shutdown;
>
> return driver_register(&drv->drv);
> }
> --
> 2.29.2
>