Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5154a4d authored by Chen-Yu Tsai's avatar Chen-Yu Tsai Committed by Maxime Ripard
Browse files

drm/sun4i: Drop hardcoded .possible_crtcs values from layers



To support multiple display pipelines, we would have multiple crtcs,
with one or more planes bound to them. Obviously having hardcoded
values for the drm_plane .possible_crtcs field is not going to work.

For primary and cursor planes, the value is set by
drm_crtc_init_with_planes. We just need to set it for overlay planes.

We also fix the value set for the RGB encoder, by referencing the
crtc set in sun4i_drv.

Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent dcd21580
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -190,5 +190,14 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
	scrtc->crtc.port = of_graph_get_port_by_id(drv->tcon->dev->of_node,
						   1);

	/* Set possible_crtcs to this crtc for overlay planes */
	for (i = 0; scrtc->layers[i]; i++) {
		uint32_t possible_crtcs = BIT(drm_crtc_index(&scrtc->crtc));
		struct sun4i_layer *layer = scrtc->layers[i];

		if (layer->plane.type == DRM_PLANE_TYPE_OVERLAY)
			layer->plane.possible_crtcs = possible_crtcs;
	}

	return scrtc;
}
+2 −1
Original line number Diff line number Diff line
@@ -114,7 +114,8 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
	if (!layer)
		return ERR_PTR(-ENOMEM);

	ret = drm_universal_plane_init(drm, &layer->plane, BIT(0),
	/* possible crtcs are set later */
	ret = drm_universal_plane_init(drm, &layer->plane, 0,
				       &sun4i_backend_layer_funcs,
				       plane->formats, plane->nformats,
				       plane->type, NULL);
+2 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <drm/drm_crtc_helper.h>
#include <drm/drm_panel.h>

#include "sun4i_crtc.h"
#include "sun4i_drv.h"
#include "sun4i_tcon.h"
#include "sun4i_rgb.h"
@@ -238,7 +239,7 @@ int sun4i_rgb_init(struct drm_device *drm)
	}

	/* The RGB encoder can only work with the TCON channel 0 */
	rgb->encoder.possible_crtcs = BIT(0);
	rgb->encoder.possible_crtcs = BIT(drm_crtc_index(&tcon->crtc->crtc));

	if (!IS_ERR(tcon->panel)) {
		drm_connector_helper_add(&rgb->connector,