summaryrefslogtreecommitdiffstats
path: root/gralloc_drm_kms.c
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2013-05-03 10:08:54 +0300
committerTapani Pälli <tapani.palli@intel.com>2013-05-13 15:28:35 +0300
commita872ecf380bfb33a1e17878d7d7ac16d1730dc09 (patch)
tree65cfc8edea3b91fe9da22635a52dbff5b9d8345e /gralloc_drm_kms.c
parent29b01951d54470f495e1097bd779342d618daf7a (diff)
downloadexternal_drm_gralloc-a872ecf380bfb33a1e17878d7d7ac16d1730dc09.zip
external_drm_gralloc-a872ecf380bfb33a1e17878d7d7ac16d1730dc09.tar.gz
external_drm_gralloc-a872ecf380bfb33a1e17878d7d7ac16d1730dc09.tar.bz2
gralloc: provide methods for hwc to change handle of a plane
Patch changes reserve_plane to get id number as additional parameter. This can be used by hwc to make changes to a particular plane. New api hwc_set_plane_handle is introduced so that hwc can change the buffer handle of a plane, this is required because after plane has been reserved for a particular ui layer, this handle can change as the layer is typically multibuffered. Change-Id: I32d711ff3565ae9e8f5b8a6691c22b03a50cefe7 Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Diffstat (limited to 'gralloc_drm_kms.c')
-rw-r--r--gralloc_drm_kms.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/gralloc_drm_kms.c b/gralloc_drm_kms.c
index 1e64312..952998a 100644
--- a/gralloc_drm_kms.c
+++ b/gralloc_drm_kms.c
@@ -287,6 +287,7 @@ static void gralloc_drm_set_planes(struct gralloc_drm_t *drm)
*/
int gralloc_drm_reserve_plane(struct gralloc_drm_t *drm,
buffer_handle_t handle,
+ uint32_t id,
uint32_t dst_x,
uint32_t dst_y,
uint32_t dst_w,
@@ -333,6 +334,7 @@ int gralloc_drm_reserve_plane(struct gralloc_drm_t *drm,
plane->src_w = src_w;
plane->src_h = src_h;
plane->handle = handle;
+ plane->id = id;
plane->active = 1;
return 0;
@@ -344,17 +346,38 @@ int gralloc_drm_reserve_plane(struct gralloc_drm_t *drm,
}
/*
- * Interface for HWC, used to disable all the overlays.
+ * Interface for HWC, used to disable all the overlays. Plane id
+ * is also set to 0 as it should be mappable to a particular layer only
+ * if it has been reserved with 'reserve_plane'.
*/
void gralloc_drm_disable_planes(struct gralloc_drm_t *drm)
{
struct gralloc_drm_plane_t *plane = drm->planes;
unsigned int i;
- for (i = 0; i < drm->plane_resources->count_planes; i++, plane++)
+ for (i = 0; i < drm->plane_resources->count_planes; i++, plane++) {
plane->active = 0;
+ plane->id = 0;
+ }
}
+/*
+ * Interface for HWC, used to change handle of a reserved plane.
+ */
+int gralloc_drm_set_plane_handle(struct gralloc_drm_t *drm,
+ uint32_t id, buffer_handle_t handle)
+{
+ struct gralloc_drm_plane_t *plane = drm->planes;
+ unsigned i;
+
+ for (i = 0; i < drm->plane_resources->count_planes; i++, plane++)
+ if (plane->active && plane->id == id) {
+ plane->handle = handle;
+ return 0;
+ }
+
+ return -EINVAL;
+}
/*
* Schedule a page flip.