aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChen-Yu Tsai <wens@csie.org>2017-02-23 03:05:39 -0500
committerMaxime Ripard <maxime.ripard@free-electrons.com>2017-03-07 16:18:23 -0500
commita5154a4d01d7958788366894ceeddd9e1aab5b13 (patch)
tree323ec7be8f871d7658ad91c569f2a2378b61fbaa
parentdcd215801b0279f0a021516526cf7c0b67d5302e (diff)
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: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_crtc.c9
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_layer.c3
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_rgb.c3
3 files changed, 13 insertions, 2 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
index 81dcd5eee003..9d6fd2f40cf4 100644
--- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
@@ -190,5 +190,14 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
190 scrtc->crtc.port = of_graph_get_port_by_id(drv->tcon->dev->of_node, 190 scrtc->crtc.port = of_graph_get_port_by_id(drv->tcon->dev->of_node,
191 1); 191 1);
192 192
193 /* Set possible_crtcs to this crtc for overlay planes */
194 for (i = 0; scrtc->layers[i]; i++) {
195 uint32_t possible_crtcs = BIT(drm_crtc_index(&scrtc->crtc));
196 struct sun4i_layer *layer = scrtc->layers[i];
197
198 if (layer->plane.type == DRM_PLANE_TYPE_OVERLAY)
199 layer->plane.possible_crtcs = possible_crtcs;
200 }
201
193 return scrtc; 202 return scrtc;
194} 203}
diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c
index 9c0baee25fae..431e13362b62 100644
--- a/drivers/gpu/drm/sun4i/sun4i_layer.c
+++ b/drivers/gpu/drm/sun4i/sun4i_layer.c
@@ -114,7 +114,8 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
114 if (!layer) 114 if (!layer)
115 return ERR_PTR(-ENOMEM); 115 return ERR_PTR(-ENOMEM);
116 116
117 ret = drm_universal_plane_init(drm, &layer->plane, BIT(0), 117 /* possible crtcs are set later */
118 ret = drm_universal_plane_init(drm, &layer->plane, 0,
118 &sun4i_backend_layer_funcs, 119 &sun4i_backend_layer_funcs,
119 plane->formats, plane->nformats, 120 plane->formats, plane->nformats,
120 plane->type, NULL); 121 plane->type, NULL);
diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
index 757208f51731..c4865bf1b392 100644
--- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
+++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
@@ -17,6 +17,7 @@
17#include <drm/drm_crtc_helper.h> 17#include <drm/drm_crtc_helper.h>
18#include <drm/drm_panel.h> 18#include <drm/drm_panel.h>
19 19
20#include "sun4i_crtc.h"
20#include "sun4i_drv.h" 21#include "sun4i_drv.h"
21#include "sun4i_tcon.h" 22#include "sun4i_tcon.h"
22#include "sun4i_rgb.h" 23#include "sun4i_rgb.h"
@@ -238,7 +239,7 @@ int sun4i_rgb_init(struct drm_device *drm)
238 } 239 }
239 240
240 /* The RGB encoder can only work with the TCON channel 0 */ 241 /* The RGB encoder can only work with the TCON channel 0 */
241 rgb->encoder.possible_crtcs = BIT(0); 242 rgb->encoder.possible_crtcs = BIT(drm_crtc_index(&tcon->crtc->crtc));
242 243
243 if (!IS_ERR(tcon->panel)) { 244 if (!IS_ERR(tcon->panel)) {
244 drm_connector_helper_add(&rgb->connector, 245 drm_connector_helper_add(&rgb->connector,