[PATCH 1/4] drm/panel: use fwnode based lookups for panel followers
Murthy, Arun R
arun.r.murthy at intel.com
Tue Jun 10 08:01:34 UTC 2025
> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf Of Jani
> Nikula
> Sent: Friday, June 6, 2025 2:35 PM
> To: dri-devel at lists.freedesktop.org
> Cc: intel-gfx at lists.freedesktop.org; intel-xe at lists.freedesktop.org; Heikki
> Krogerus <heikki.krogerus at linux.intel.com>; Wysocki, Rafael J
> <rafael.j.wysocki at intel.com>; Lee, Shawn C <shawn.c.lee at intel.com>; Yang,
> Simon1 <simon1.yang at intel.com>; Doug Anderson <dianders at chromium.org>;
> Maxime Ripard <mripard at kernel.org>; Nikula, Jani <jani.nikula at intel.com>;
> Neil Armstrong <neil.armstrong at linaro.org>; Jessica Zhang
> <jessica.zhang at oss.qualcomm.com>
> Subject: [PATCH 1/4] drm/panel: use fwnode based lookups for panel followers
>
> Use firmware node based lookups for panel followers, to make the code
> independent of OF and device tree, and make it work also for ACPI with an
> appropriate _DSD.
>
> ASL example:
>
> Package (0x02)
> {
> "panel", \_SB.PCI0.GFX0.LCD0
> }
>
> Suggested-by: Heikki Krogerus <heikki.krogerus at linux.intel.com>
> Cc: Neil Armstrong <neil.armstrong at linaro.org>
> Cc: Jessica Zhang <jessica.zhang at oss.qualcomm.com>
> Cc: Maxime Ripard <mripard at kernel.org>
> Cc: Doug Anderson <dianders at chromium.org>
> Cc: Lee Shawn C <shawn.c.lee at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
> drivers/gpu/drm/drm_panel.c | 39 +++++++++++++++++++++++++++++--------
> 1 file changed, 31 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index
> fee65dc65979..3eb0a615f7a9 100644
> --- a/drivers/gpu/drm/drm_panel.c
> +++ b/drivers/gpu/drm/drm_panel.c
> @@ -473,17 +473,40 @@ int of_drm_get_panel_orientation(const struct
> device_node *np, EXPORT_SYMBOL(of_drm_get_panel_orientation);
> #endif
>
> -static struct drm_panel *of_find_panel(struct device *follower_dev)
> +/* Find panel by fwnode */
> +static struct drm_panel *find_panel_by_fwnode(const struct
> +fwnode_handle *fwnode)
> {
> - struct device_node *panel_np;
> struct drm_panel *panel;
>
> - panel_np = of_parse_phandle(follower_dev->of_node, "panel", 0);
> - if (!panel_np)
> + if (!fwnode_device_is_available(fwnode))
> return ERR_PTR(-ENODEV);
>
> - panel = of_drm_find_panel(panel_np);
> - of_node_put(panel_np);
> + mutex_lock(&panel_lock);
> +
> + list_for_each_entry(panel, &panel_list, list) {
> + if (dev_fwnode(panel->dev) == fwnode) {
> + mutex_unlock(&panel_lock);
> + return panel;
> + }
> + }
> +
> + mutex_unlock(&panel_lock);
> +
> + return ERR_PTR(-EPROBE_DEFER);
> +}
> +
> +/* Find panel by follower device */
> +static struct drm_panel *find_panel_by_dev(struct device *follower_dev)
> +{
> + struct fwnode_handle *fwnode;
> + struct drm_panel *panel;
> +
> + fwnode = fwnode_find_reference(dev_fwnode(follower_dev), "panel",
> 0);
> + if (IS_ERR_OR_NULL(fwnode))
> + return ERR_PTR(-ENODEV);
> +
> + panel = find_panel_by_fwnode(fwnode);
> + fwnode_handle_put(fwnode);
>
> return panel;
> }
> @@ -506,7 +529,7 @@ bool drm_is_panel_follower(struct device *dev)
Does the kdoc for this function need updates?
The doc says its supported on only device tree supported systems.
Apart from the above mentioned update, from ACPI perspective looks good to me.
Reviewed-by: Arun R Murthy <arun.r.murthy at intel.com>
Thanks and Regards,
Arun R Murthy
--------------------
> * don't bother trying to parse it here. We just need to know if the
> * property is there.
> */
> - return of_property_present(dev->of_node, "panel");
> + return device_property_present(dev, "panel");
> }
> EXPORT_SYMBOL(drm_is_panel_follower);
>
> @@ -536,7 +559,7 @@ int drm_panel_add_follower(struct device
> *follower_dev,
> struct drm_panel *panel;
> int ret;
>
> - panel = of_find_panel(follower_dev);
> + panel = find_panel_by_dev(follower_dev);
> if (IS_ERR(panel))
> return PTR_ERR(panel);
>
> --
> 2.39.5
More information about the Intel-gfx
mailing list