On Tue, Jan 23, 2024 at 12:32:17AM +0800, Sui Jingfeng wrote: > Which is intended to be used on non-DT environment, where the simple-bridge > platform device is created by either the display controller driver side or > platform firmware subsystem. Could you give an example of a platform where you intend to use this ? > To avoid duplication and to keep consistent, > we choose to reuse the OF match tables. Because the potentional user may > not has a of_node attached, nor a ACPI match id. If this is the case, > a software node string property can be provide to fill the niche. Shouldn't non-DT, non-ACPI platforms use swnodes ? > Signed-off-by: Sui Jingfeng <sui.jingfeng@xxxxxxxxx> > --- > drivers/gpu/drm/bridge/simple-bridge.c | 24 +++++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c > index cbe8e778d7c7..595f672745b9 100644 > --- a/drivers/gpu/drm/bridge/simple-bridge.c > +++ b/drivers/gpu/drm/bridge/simple-bridge.c > @@ -166,6 +166,24 @@ static const struct drm_bridge_funcs simple_bridge_bridge_funcs = { > .disable = simple_bridge_disable, > }; > > +static const void *simple_bridge_get_match_data(const struct device *dev) > +{ > + const struct of_device_id *matches = dev->driver->of_match_table; > + > + /* Try to get the match data by software node */ > + while (matches) { > + if (!matches->compatible[0]) > + break; > + > + if (device_is_compatible(dev, matches->compatible)) > + return matches->data; > + > + matches++; > + } > + > + return NULL; > +} > + > static int simple_bridge_probe(struct platform_device *pdev) > { > struct simple_bridge *sbridge; > @@ -176,7 +194,10 @@ static int simple_bridge_probe(struct platform_device *pdev) > return -ENOMEM; > platform_set_drvdata(pdev, sbridge); > > - sbridge->info = of_device_get_match_data(&pdev->dev); > + if (pdev->dev.of_node) > + sbridge->info = of_device_get_match_data(&pdev->dev); > + else > + sbridge->info = simple_bridge_get_match_data(&pdev->dev); > > /* Get the next bridge in the pipeline. */ > remote = of_graph_get_remote_node(pdev->dev.of_node, 1, -1); > @@ -309,3 +330,4 @@ module_platform_driver(simple_bridge_driver); > MODULE_AUTHOR("Maxime Ripard <maxime.ripard@xxxxxxxxxxxxxxxxxx>"); > MODULE_DESCRIPTION("Simple DRM bridge driver"); > MODULE_LICENSE("GPL"); > +MODULE_ALIAS("platform:simple-bridge"); This is an unrelated change. -- Regards, Laurent Pinchart