[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAPDyKFrBR3M2rsOzs9s7oTJ8UYY-XZ9CbMJR+sHJwFL2FvBReg@mail.gmail.com>
Date: Tue, 24 Nov 2020 11:56:57 +0100
From: Ulf Hansson <ulf.hansson@...aro.org>
To: Uwe Kleine-König
<u.kleine-koenig@...gutronix.de>
Cc: Russell King <linux@...linux.org.uk>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Arnd Bergmann <arnd@...db.de>,
Linus Walleij <linus.walleij@...aro.org>,
Rob Herring <robh@...nel.org>,
Sascha Hauer <kernel@...gutronix.de>,
Linux ARM <linux-arm-kernel@...ts.infradead.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 4/4] amba: Make use of bus_type functions
On Tue, 24 Nov 2020 at 11:33, Uwe Kleine-König
<u.kleine-koenig@...gutronix.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@...gutronix.de>
Reviewed-by: Ulf Hansson <ulf.hansson@...aro.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
>
Powered by blists - more mailing lists