> -----Original Message-----
> From: Intel-gfx <intel-gfx-boun...@lists.freedesktop.org> On Behalf Of Jani
> Nikula
> Sent: Friday, June 6, 2025 2:35 PM
> To: dri-de...@lists.freedesktop.org
> Cc: intel-gfx@lists.freedesktop.org; intel...@lists.freedesktop.org; Heikki
> Krogerus <heikki.kroge...@linux.intel.com>; Wysocki, Rafael J
> <rafael.j.wyso...@intel.com>; Lee, Shawn C <shawn.c....@intel.com>; Yang,
> Simon1 <simon1.y...@intel.com>; Doug Anderson <diand...@chromium.org>;
> Maxime Ripard <mrip...@kernel.org>; Nikula, Jani <jani.nik...@intel.com>;
> Neil Armstrong <neil.armstr...@linaro.org>; Jessica Zhang
> <jessica.zh...@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.kroge...@linux.intel.com>
> Cc: Neil Armstrong <neil.armstr...@linaro.org>
> Cc: Jessica Zhang <jessica.zh...@oss.qualcomm.com>
> Cc: Maxime Ripard <mrip...@kernel.org>
> Cc: Doug Anderson <diand...@chromium.org>
> Cc: Lee Shawn C <shawn.c....@intel.com>
> Signed-off-by: Jani Nikula <jani.nik...@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.mur...@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

Reply via email to