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

Ulf Hansson ulf.hansson at linaro.org
Tue Nov 24 05:56:57 EST 2020


On Tue, 24 Nov 2020 at 11:33, Uwe Kleine-König
<u.kleine-koenig at pengutronix.de> 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 at pengutronix.de>

Reviewed-by: Ulf Hansson <ulf.hansson at linaro.org>

> ---
>  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
>



More information about the linux-arm-kernel mailing list