[PATCH 1/3] drm/panel: auo-a030jtn01: Fix compilation build

Maxime Ripard mripard at kernel.org
Tue Apr 8 14:57:44 UTC 2025


Hi Lucas,

On Tue, Apr 08, 2025 at 09:34:22AM -0500, Lucas De Marchi wrote:
> On Tue, Apr 08, 2025 at 02:20:06PM +0200, Maxime Ripard wrote:
> > Commit 9d7d7c3c9a19 ("panel/auo-a030jtn01: Use refcounted allocation in
> > place of devm_kzalloc()") switched from a kmalloc + drm_panel_init call
> > to a devm_drm_panel_alloc one.
> > 
> > However, the variable it was storing the allocated pointer in doesn't
> > exist, resulting in a compilation breakage.
> > 
> > Fixes: 9d7d7c3c9a19 ("panel/auo-a030jtn01: Use refcounted allocation in place of devm_kzalloc()")
> > Signed-off-by: Maxime Ripard <mripard at kernel.org>
> 
> I still get a failure in modpost:
> 
> 	ERROR: modpost: "__devm_drm_panel_alloc" [drivers/gpu/drm/panel/panel-auo-a030jtn01.ko] undefined!
> 
> because that entire block is:
> 
> 	#ifdef CONFIG_OF
> 
> Based on the header, I think the intention wasn't to add those functions
> there, right? Moving it outside the ifdef at least fixes the build for
> me.
> 
> Lucas De Marchi
> 
> -------8<------------
> Subject: [PATCH] drm/panel: Fix build error on !CONFIG_OF
> 
> Move helpers outside of CONFIG_OF, so basic allocation also works
> without it.
> 
> Fixes: ed9c594d495d ("drm/panel: Add new helpers for refcounted panel allocatons")
> Fixes: dcba396f6907 ("drm/panel: Add refcount support")
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
>  drivers/gpu/drm/drm_panel.c | 76 ++++++++++++++++++-------------------
>  1 file changed, 38 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
> index 870bf8d471ee9..99b348782ce31 100644
> --- a/drivers/gpu/drm/drm_panel.c
> +++ b/drivers/gpu/drm/drm_panel.c
> @@ -318,44 +318,6 @@ int drm_panel_get_modes(struct drm_panel *panel,
>  }
>  EXPORT_SYMBOL(drm_panel_get_modes);
> -#ifdef CONFIG_OF
> -/**
> - * of_drm_find_panel - look up a panel using a device tree node
> - * @np: device tree node of the panel
> - *
> - * Searches the set of registered panels for one that matches the given device
> - * tree node. If a matching panel is found, return a pointer to it.
> - *
> - * Return: A pointer to the panel registered for the specified device tree
> - * node or an ERR_PTR() if no panel matching the device tree node can be found.
> - *
> - * Possible error codes returned by this function:
> - *
> - * - EPROBE_DEFER: the panel device has not been probed yet, and the caller
> - *   should retry later
> - * - ENODEV: the device is not available (status != "okay" or "ok")
> - */
> -struct drm_panel *of_drm_find_panel(const struct device_node *np)
> -{
> -	struct drm_panel *panel;
> -
> -	if (!of_device_is_available(np))
> -		return ERR_PTR(-ENODEV);
> -
> -	mutex_lock(&panel_lock);
> -
> -	list_for_each_entry(panel, &panel_list, list) {
> -		if (panel->dev->of_node == np) {
> -			mutex_unlock(&panel_lock);
> -			return panel;
> -		}
> -	}
> -
> -	mutex_unlock(&panel_lock);
> -	return ERR_PTR(-EPROBE_DEFER);
> -}
> -EXPORT_SYMBOL(of_drm_find_panel);
> -
>  static void __drm_panel_free(struct kref *kref)
>  {
>  	struct drm_panel *panel = container_of(kref, struct drm_panel, refcount);
> @@ -443,6 +405,44 @@ void *__devm_drm_panel_alloc(struct device *dev, size_t size, size_t offset,
>  }
>  EXPORT_SYMBOL(__devm_drm_panel_alloc);
> +#ifdef CONFIG_OF
> +/**
> + * of_drm_find_panel - look up a panel using a device tree node
> + * @np: device tree node of the panel
> + *
> + * Searches the set of registered panels for one that matches the given device
> + * tree node. If a matching panel is found, return a pointer to it.
> + *
> + * Return: A pointer to the panel registered for the specified device tree
> + * node or an ERR_PTR() if no panel matching the device tree node can be found.
> + *
> + * Possible error codes returned by this function:
> + *
> + * - EPROBE_DEFER: the panel device has not been probed yet, and the caller
> + *   should retry later
> + * - ENODEV: the device is not available (status != "okay" or "ok")
> + */
> +struct drm_panel *of_drm_find_panel(const struct device_node *np)
> +{
> +	struct drm_panel *panel;
> +
> +	if (!of_device_is_available(np))
> +		return ERR_PTR(-ENODEV);
> +
> +	mutex_lock(&panel_lock);
> +
> +	list_for_each_entry(panel, &panel_list, list) {
> +		if (panel->dev->of_node == np) {
> +			mutex_unlock(&panel_lock);
> +			return panel;
> +		}
> +	}
> +
> +	mutex_unlock(&panel_lock);
> +	return ERR_PTR(-EPROBE_DEFER);
> +}
> +EXPORT_SYMBOL(of_drm_find_panel);
> +
>  /**
>   * of_drm_get_panel_orientation - look up the orientation of the panel through
>   * the "rotation" binding from a device tree node

It's a bit hard to read with that change log, but assuming this doesn't
change of_drm_find_panel,

Reviewed-by: Maxime Ripard <mripard at kernel.org>

Maxime
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20250408/f7e4b6cb/attachment-0001.sig>


More information about the dri-devel mailing list