Add Zorder as a overlay sysfs attribute, check for out of bound entries
and initialize Zorder values for overlay objects.

Signed-off-by: Sumit Semwal <sumit.sem...@ti.com>
Signed-off-by: Samreen <samr...@ti.com>
Signed-off-by: Archit Taneja <arc...@ti.com>
---
 drivers/video/omap2/dss/overlay.c |   51 +++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/overlay.c 
b/drivers/video/omap2/dss/overlay.c
index 2f8f89c..eef474b
--- a/drivers/video/omap2/dss/overlay.c
+++ b/drivers/video/omap2/dss/overlay.c
@@ -257,6 +257,38 @@ static ssize_t overlay_global_alpha_store(struct 
omap_overlay *ovl,
        return size;
 }
 
+static ssize_t overlay_zorder_show(struct omap_overlay *ovl, char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%d\n",
+                       ovl->info.zorder);
+}
+
+static ssize_t overlay_zorder_store(struct omap_overlay *ovl,
+               const char *buf, size_t size)
+{
+       int r;
+       struct omap_overlay_info info;
+
+       if (!cpu_is_omap44xx())
+               return size;
+
+       ovl->get_overlay_info(ovl, &info);
+
+       info.zorder = simple_strtoul(buf, NULL, 10);
+
+       r = ovl->set_overlay_info(ovl, &info);
+       if (r)
+               return r;
+
+       if (ovl->manager) {
+               r = ovl->manager->apply(ovl->manager);
+               if (r)
+                       return r;
+       }
+
+       return size;
+}
+
 struct overlay_attribute {
        struct attribute attr;
        ssize_t (*show)(struct omap_overlay *, char *);
@@ -280,6 +312,8 @@ static OVERLAY_ATTR(enabled, S_IRUGO|S_IWUSR,
                overlay_enabled_show, overlay_enabled_store);
 static OVERLAY_ATTR(global_alpha, S_IRUGO|S_IWUSR,
                overlay_global_alpha_show, overlay_global_alpha_store);
+static OVERLAY_ATTR(zorder, S_IRUGO|S_IWUSR,
+               overlay_zorder_show, overlay_zorder_store);
 
 static struct attribute *overlay_sysfs_attrs[] = {
        &overlay_attr_name.attr,
@@ -290,6 +324,7 @@ static struct attribute *overlay_sysfs_attrs[] = {
        &overlay_attr_output_size.attr,
        &overlay_attr_enabled.attr,
        &overlay_attr_global_alpha.attr,
+       &overlay_attr_zorder.attr,
        NULL
 };
 
@@ -394,6 +429,12 @@ int dss_check_overlay(struct omap_overlay *ovl, struct 
omap_dss_device *dssdev)
                return -EINVAL;
        }
 
+       if ((info->zorder < OMAP_DSS_OVL_ZORDER_0) ||
+                       (info->zorder > OMAP_DSS_OVL_ZORDER_3)) {
+               DSSERR("overlay doesn't support zorder %d\n", info->zorder);
+               return -EINVAL;
+       }
+
        return 0;
 }
 
@@ -552,6 +593,7 @@ void dss_init_overlays(struct platform_device *pdev)
                                OMAP_DSS_COLOR_GFX_OMAP2;
                        ovl->caps = OMAP_DSS_OVL_CAP_DISPC;
                        ovl->info.global_alpha = 255;
+                       ovl->info.zorder = OMAP_DSS_OVL_ZORDER_0;
                        break;
                case 1:
                        ovl->name = "vid1";
@@ -562,6 +604,9 @@ void dss_init_overlays(struct platform_device *pdev)
                        ovl->caps = OMAP_DSS_OVL_CAP_SCALE |
                                OMAP_DSS_OVL_CAP_DISPC;
                        ovl->info.global_alpha = 255;
+                       ovl->info.zorder = cpu_is_omap44xx() ?
+                               OMAP_DSS_OVL_ZORDER_3 :
+                               OMAP_DSS_OVL_ZORDER_0;
                        break;
                case 2:
                        ovl->name = "vid2";
@@ -572,6 +617,9 @@ void dss_init_overlays(struct platform_device *pdev)
                        ovl->caps = OMAP_DSS_OVL_CAP_SCALE |
                                OMAP_DSS_OVL_CAP_DISPC;
                        ovl->info.global_alpha = 255;
+                       ovl->info.zorder = cpu_is_omap44xx() ?
+                               OMAP_DSS_OVL_ZORDER_2 :
+                               OMAP_DSS_OVL_ZORDER_0;
                        break;
                case 3:
                        ovl->name = "vid3";
@@ -580,6 +628,9 @@ void dss_init_overlays(struct platform_device *pdev)
                        ovl->caps = OMAP_DSS_OVL_CAP_SCALE |
                                OMAP_DSS_OVL_CAP_DISPC;
                        ovl->info.global_alpha = 255;
+                       ovl->info.zorder = cpu_is_omap44xx() ?
+                               OMAP_DSS_OVL_ZORDER_1 :
+                               OMAP_DSS_OVL_ZORDER_0;
                        break;
                }
 
-- 
1.5.4.7

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to