Messages in this thread | | | Date | Mon, 01 Nov 2021 21:35:25 +0200 | From | Jyri Sarha <> | Subject | Re: [PATCH v3 24/34] drm/tilcdc: Migrate to aggregate driver |
| |
On 2021-10-26 3:00, Stephen Boyd wrote: > Use an aggregate driver instead of component ops so that we can get > proper driver probe ordering of the aggregate device with respect to > all > the component devices that make up the aggregate device. > > Cc: Jyri Sarha <jyri.sarha@iki.fi> > Cc: Tomi Valkeinen <tomba@kernel.org> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Cc: "Rafael J. Wysocki" <rafael@kernel.org> > Cc: Rob Clark <robdclark@gmail.com> > Cc: Russell King <rmk+kernel@arm.linux.org.uk> > Cc: Saravana Kannan <saravanak@google.com> > Signed-off-by: Stephen Boyd <swboyd@chromium.org> > ---
Tested-by: Jyri Sarha <jyri.sarha@iki.fi>
Thanks, Jyri
> drivers/gpu/drm/tilcdc/tilcdc_drv.c | 28 ++++++++++++++++------------ > 1 file changed, 16 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c > b/drivers/gpu/drm/tilcdc/tilcdc_drv.c > index 6b03f89a98d4..d5c6567eec8d 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c > +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c > @@ -531,13 +531,16 @@ static const struct dev_pm_ops tilcdc_pm_ops = { > /* > * Platform driver: > */ > -static int tilcdc_bind(struct device *dev) > +static int tilcdc_bind(struct aggregate_device *adev) > { > + struct device *dev = adev->parent; > + > return tilcdc_init(&tilcdc_driver, dev); > } > > -static void tilcdc_unbind(struct device *dev) > +static void tilcdc_unbind(struct aggregate_device *adev) > { > + struct device *dev = adev->parent; > struct drm_device *ddev = dev_get_drvdata(dev); > > /* Check if a subcomponent has already triggered the unloading. */ > @@ -547,9 +550,13 @@ static void tilcdc_unbind(struct device *dev) > tilcdc_fini(dev_get_drvdata(dev)); > } > > -static const struct component_master_ops tilcdc_comp_ops = { > - .bind = tilcdc_bind, > - .unbind = tilcdc_unbind, > +static struct aggregate_driver tilcdc_aggregate_driver = { > + .probe = tilcdc_bind, > + .remove = tilcdc_unbind, > + .driver = { > + .name = "tilcdc_drm", > + .owner = THIS_MODULE, > + }, > }; > > static int tilcdc_pdev_probe(struct platform_device *pdev) > @@ -566,12 +573,9 @@ static int tilcdc_pdev_probe(struct > platform_device *pdev) > ret = tilcdc_get_external_components(&pdev->dev, &match); > if (ret < 0) > return ret; > - else if (ret == 0) > + if (ret == 0) > return tilcdc_init(&tilcdc_driver, &pdev->dev); > - else > - return component_master_add_with_match(&pdev->dev, > - &tilcdc_comp_ops, > - match); > + return component_aggregate_register(&pdev->dev, > &tilcdc_aggregate_driver, match); > } > > static int tilcdc_pdev_remove(struct platform_device *pdev) > @@ -581,10 +585,10 @@ static int tilcdc_pdev_remove(struct > platform_device *pdev) > ret = tilcdc_get_external_components(&pdev->dev, NULL); > if (ret < 0) > return ret; > - else if (ret == 0) > + if (ret == 0) > tilcdc_fini(platform_get_drvdata(pdev)); > else > - component_master_del(&pdev->dev, &tilcdc_comp_ops); > + component_aggregate_unregister(&pdev->dev, > &tilcdc_aggregate_driver); > > return 0; > }
| |