OMAPDSS: APPLY: add dss_mgr_simple_check()
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 17 Nov 2011 12:31:09 +0000 (14:31 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 2 Dec 2011 06:54:53 +0000 (08:54 +0200)
Add dss_mgr_simple_check() which is used to check the validity of
certain manager attributes. Only attributes that can be checked
independently, without knowing the display being used, is done here
(thus "simple").

We can use this function in dss_mgr_set_info().

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/apply.c

index dccddd2644364018f76b0f3123c922530446a0f9..242cb1c983c062fdd34661733f87ae02904cb5ca 100644 (file)
@@ -834,11 +834,35 @@ out:
        mutex_unlock(&apply_lock);
 }
 
+static int dss_mgr_simple_check(struct omap_overlay_manager *mgr,
+               const struct omap_overlay_manager_info *info)
+{
+       if (dss_has_feature(FEAT_ALPHA_FIXED_ZORDER)) {
+               /*
+                * OMAP3 supports only graphics source transparency color key
+                * and alpha blending simultaneously. See TRM 15.4.2.4.2.2
+                * Alpha Mode.
+                */
+               if (info->partial_alpha_enabled && info->trans_enabled
+                       && info->trans_key_type != OMAP_DSS_COLOR_KEY_GFX_DST) {
+                       DSSERR("check_manager: illegal transparency key\n");
+                       return -EINVAL;
+               }
+       }
+
+       return 0;
+}
+
 int dss_mgr_set_info(struct omap_overlay_manager *mgr,
                struct omap_overlay_manager_info *info)
 {
        struct mgr_priv_data *mp = get_mgr_priv(mgr);
        unsigned long flags;
+       int r;
+
+       r = dss_mgr_simple_check(mgr, info);
+       if (r)
+               return r;
 
        spin_lock_irqsave(&data_lock, flags);