]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm: rcar-du: Recognize "renesas,vsps" in addition to "vsps"
authorGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 5 Nov 2019 18:35:03 +0000 (19:35 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Feb 2020 07:38:00 +0000 (08:38 +0100)
[ Upstream commit 7b627ce80fbd05885b27f711a5f9820f2b40749a ]

The Renesas-specific "vsps" property lacks a vendor prefix.
Add a "renesas," prefix to comply with DT best practises.
Retain backward compatibility with old DTBs by falling back to "vsps"
when needed.

Fixes: 6d62ef3ac30be756 ("drm: rcar-du: Expose the VSP1 compositor through KMS planes")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/rcar-du/rcar_du_kms.c

index 0d59f390de19aa68503150d0dded03513102baf9..662d8075f4116e562040e9e682422723384e25cd 100644 (file)
@@ -542,6 +542,7 @@ static int rcar_du_properties_init(struct rcar_du_device *rcdu)
 static int rcar_du_vsps_init(struct rcar_du_device *rcdu)
 {
        const struct device_node *np = rcdu->dev->of_node;
+       const char *vsps_prop_name = "renesas,vsps";
        struct of_phandle_args args;
        struct {
                struct device_node *np;
@@ -557,15 +558,21 @@ static int rcar_du_vsps_init(struct rcar_du_device *rcdu)
         * entry contains a pointer to the VSP DT node and a bitmask of the
         * connected DU CRTCs.
         */
-       cells = of_property_count_u32_elems(np, "vsps") / rcdu->num_crtcs - 1;
+       ret = of_property_count_u32_elems(np, vsps_prop_name);
+       if (ret < 0) {
+               /* Backward compatibility with old DTBs. */
+               vsps_prop_name = "vsps";
+               ret = of_property_count_u32_elems(np, vsps_prop_name);
+       }
+       cells = ret / rcdu->num_crtcs - 1;
        if (cells > 1)
                return -EINVAL;
 
        for (i = 0; i < rcdu->num_crtcs; ++i) {
                unsigned int j;
 
-               ret = of_parse_phandle_with_fixed_args(np, "vsps", cells, i,
-                                                      &args);
+               ret = of_parse_phandle_with_fixed_args(np, vsps_prop_name,
+                                                      cells, i, &args);
                if (ret < 0)
                        goto error;
 
@@ -587,8 +594,8 @@ static int rcar_du_vsps_init(struct rcar_du_device *rcdu)
 
                /*
                 * Store the VSP pointer and pipe index in the CRTC. If the
-                * second cell of the 'vsps' specifier isn't present, default
-                * to 0 to remain compatible with older DT bindings.
+                * second cell of the 'renesas,vsps' specifier isn't present,
+                * default to 0 to remain compatible with older DT bindings.
                 */
                rcdu->crtcs[i].vsp = &rcdu->vsps[j];
                rcdu->crtcs[i].vsp_pipe = cells >= 1 ? args.args[0] : 0;