goto failed;
}
- /* The TDM drm backend only support a primary layer. */
- if (type != DRM_PLANE_TYPE_PRIMARY) {
- TDM_INFO("The TDM drm backend only support a primary layer. plane(%d) type(%d)",
- plane->plane_id, type);
- drmModeFreePlane(plane);
- continue;
- }
-
planes[plane_cnt] = plane;
types[plane_cnt] = type;
plane_cnt++;
opos_next = 1;
cpos_next = ovl_cnt;
- for (i = 0; i < plane_cnt; i++) {
+ if (plane_cnt < 2) {
+ TDM_ERR("plane count(%d) should be over 2", plane_cnt);
+ goto failed;
+ }
+
+ for (i = plane_cnt - 2; i >= 0; i--) {
tdm_nexell_layer_data *layer_data;
layer_data = calloc(1, sizeof(tdm_nexell_layer_data));
if (types[i] == DRM_PLANE_TYPE_CURSOR) {
layer_data->capabilities = TDM_LAYER_CAPABILITY_CURSOR |
- TDM_LAYER_CAPABILITY_GRAPHIC;
+ TDM_LAYER_CAPABILITY_GRAPHIC |
+ TDM_LAYER_CAPABILITY_SCANOUT;
layer_data->zpos = cpos_next++;
} else if (types[i] == DRM_PLANE_TYPE_OVERLAY) {
layer_data->capabilities = TDM_LAYER_CAPABILITY_OVERLAY |
- TDM_LAYER_CAPABILITY_GRAPHIC;
+ TDM_LAYER_CAPABILITY_GRAPHIC |
+ TDM_LAYER_CAPABILITY_SCANOUT;
layer_data->zpos = opos_next++;
} else if (types[i] == DRM_PLANE_TYPE_PRIMARY) {
layer_data->capabilities = TDM_LAYER_CAPABILITY_PRIMARY |
- TDM_LAYER_CAPABILITY_GRAPHIC;
+ TDM_LAYER_CAPABILITY_GRAPHIC |
+ TDM_LAYER_CAPABILITY_SCANOUT;
layer_data->zpos = 0;
output_data->primary_layer = layer_data;
} else {
}
TDM_INFO("layer_data(%p) plane_id(%d) crtc_id(%d) zpos(%d) capabilities(%x)",
- layer_data, layer_data->plane_id, layer_data->output_data->crtc_id,
- layer_data->zpos, layer_data->capabilities);
+ layer_data, layer_data->plane_id, layer_data->output_data->crtc_id,
+ layer_data->zpos, layer_data->capabilities);
LIST_ADDTAIL(&layer_data->link, &output_data->layer_list);
}