]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/panel: panel-simple: get rid of panel_dpi hack
authorMaxime Ripard <mripard@kernel.org>
Thu, 26 Jun 2025 10:05:03 +0000 (12:05 +0200)
committerMaxime Ripard <mripard@kernel.org>
Fri, 27 Jun 2025 09:22:48 +0000 (11:22 +0200)
The empty panel_dpi struct was only ever used as a discriminant, but
it's kind of a hack, and with the reworks done in the previous patches,
we shouldn't need it anymore.

Let's get rid of it.

Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com> # Toradex Colibri iMX6
Link: https://lore.kernel.org/r/20250626-drm-panel-simple-fixes-v2-5-5afcaa608bdc@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>
drivers/gpu/drm/panel/panel-simple.c

index 4c831af86414aba6a6b44dbc6020c0268dbd78b7..9f81fa960b460290759f5f9eba97045ab55fe5b8 100644 (file)
@@ -439,8 +439,6 @@ static const struct drm_panel_funcs panel_simple_funcs = {
        .get_timings = panel_simple_get_timings,
 };
 
-static struct panel_desc panel_dpi;
-
 static struct panel_desc *panel_dpi_probe(struct device *dev)
 {
        struct display_timing *timing;
@@ -593,11 +591,17 @@ static const struct panel_desc *panel_simple_get_desc(struct device *dev)
                const struct panel_desc *desc;
 
                desc = of_device_get_match_data(dev);
-               if (!desc)
-                       return ERR_PTR(-ENODEV);
-
-               if (desc == &panel_dpi)
-                       return panel_dpi_probe(dev);
+               if (!desc) {
+                       /*
+                        * panel-dpi probes without a descriptor and
+                        * panel_dpi_probe() will initialize one for us
+                        * based on the device tree.
+                        */
+                       if (of_device_is_compatible(dev->of_node, "panel-dpi"))
+                               return panel_dpi_probe(dev);
+                       else
+                               return ERR_PTR(-ENODEV);
+               }
 
                return desc;
        }
@@ -651,7 +655,7 @@ static struct panel_simple *panel_simple_probe(struct device *dev)
                        return ERR_PTR(-EPROBE_DEFER);
        }
 
-       if ((desc != &panel_dpi) &&
+       if (!of_device_is_compatible(dev->of_node, "panel-dpi") &&
            !of_get_display_timing(dev->of_node, "panel-timing", &dt))
                panel_simple_parse_panel_timing_node(dev, panel, &dt);
 
@@ -5400,7 +5404,12 @@ static const struct of_device_id platform_of_match[] = {
        }, {
                /* Must be the last entry */
                .compatible = "panel-dpi",
-               .data = &panel_dpi,
+
+               /*
+                * Explicitly NULL, the panel_desc structure will be
+                * allocated by panel_dpi_probe().
+                */
+               .data = NULL,
        }, {
                /* sentinel */
        }