lkml.org 
[lkml]   [2020]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [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@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@pengutronix.de>

    Reviewed-by: Ulf Hansson <ulf.hansson@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
    >

    \
     
     \ /
      Last update: 2020-11-24 11:59    [W:4.016 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site