Commit dcd21580 authored by Chen-Yu Tsai's avatar Chen-Yu Tsai Committed by Maxime Ripard

drm/sun4i: Drop primary layer pointer from sun4i_drv

The current layer init code keeps a pointer to the primary plane layer
in sun4i_drv. When we eventually support multiple display pipelines,
this would force us to keep track of primary planes for all crtcs. And
these pointers only get used at bind time.

Instead, have the crtc init code iterate through the returned layers
to find the primary and cursor layers. And drop the pointer from the
sun4i_drv structure.
Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent 46cce6da
...@@ -143,7 +143,8 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm) ...@@ -143,7 +143,8 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
{ {
struct sun4i_drv *drv = drm->dev_private; struct sun4i_drv *drv = drm->dev_private;
struct sun4i_crtc *scrtc; struct sun4i_crtc *scrtc;
int ret; struct drm_plane *primary = NULL, *cursor = NULL;
int ret, i;
scrtc = devm_kzalloc(drm->dev, sizeof(*scrtc), GFP_KERNEL); scrtc = devm_kzalloc(drm->dev, sizeof(*scrtc), GFP_KERNEL);
if (!scrtc) if (!scrtc)
...@@ -154,12 +155,28 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm) ...@@ -154,12 +155,28 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
scrtc->layers = sun4i_layers_init(drm); scrtc->layers = sun4i_layers_init(drm);
if (IS_ERR(scrtc->layers)) { if (IS_ERR(scrtc->layers)) {
dev_err(drm->dev, "Couldn't create the planes\n"); dev_err(drm->dev, "Couldn't create the planes\n");
return ERR_CAST(scrtc->layers); return NULL;
}
/* find primary and cursor planes for drm_crtc_init_with_planes */
for (i = 0; scrtc->layers[i]; i++) {
struct sun4i_layer *layer = scrtc->layers[i];
switch (layer->plane.type) {
case DRM_PLANE_TYPE_PRIMARY:
primary = &layer->plane;
break;
case DRM_PLANE_TYPE_CURSOR:
cursor = &layer->plane;
break;
default:
break;
}
} }
ret = drm_crtc_init_with_planes(drm, &scrtc->crtc, ret = drm_crtc_init_with_planes(drm, &scrtc->crtc,
drv->primary, primary,
NULL, cursor,
&sun4i_crtc_funcs, &sun4i_crtc_funcs,
NULL); NULL);
if (ret) { if (ret) {
......
...@@ -20,7 +20,6 @@ struct sun4i_drv { ...@@ -20,7 +20,6 @@ struct sun4i_drv {
struct sun4i_backend *backend; struct sun4i_backend *backend;
struct sun4i_tcon *tcon; struct sun4i_tcon *tcon;
struct drm_plane *primary;
struct drm_fbdev_cma *fbdev; struct drm_fbdev_cma *fbdev;
}; };
......
...@@ -127,9 +127,6 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm, ...@@ -127,9 +127,6 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
&sun4i_backend_layer_helper_funcs); &sun4i_backend_layer_helper_funcs);
layer->drv = drv; layer->drv = drv;
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
drv->primary = &layer->plane;
return layer; return layer;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment