}
 
 
+static int dss_ovl_simple_check(struct omap_overlay *ovl,
+               const struct omap_overlay_info *info)
+{
+       if (info->paddr == 0) {
+               DSSERR("check_overlay: paddr cannot be 0\n");
+               return -EINVAL;
+       }
+
+       if ((ovl->caps & OMAP_DSS_OVL_CAP_SCALE) == 0) {
+               if (info->out_width != 0 && info->width != info->out_width) {
+                       DSSERR("check_overlay: overlay %d doesn't support "
+                                       "scaling\n", ovl->id);
+                       return -EINVAL;
+               }
+
+               if (info->out_height != 0 && info->height != info->out_height) {
+                       DSSERR("check_overlay: overlay %d doesn't support "
+                                       "scaling\n", ovl->id);
+                       return -EINVAL;
+               }
+       }
+
+       if ((ovl->supported_modes & info->color_mode) == 0) {
+               DSSERR("check_overlay: overlay %d doesn't support mode %d\n",
+                               ovl->id, info->color_mode);
+               return -EINVAL;
+       }
+
+       if (info->zorder >= omap_dss_get_num_overlays()) {
+               DSSERR("check_overlay: zorder %d too high\n", info->zorder);
+               return -EINVAL;
+       }
+
+       return 0;
+}
 
 int dss_ovl_set_info(struct omap_overlay *ovl,
                struct omap_overlay_info *info)
 {
        struct ovl_priv_data *op = get_ovl_priv(ovl);
        unsigned long flags;
+       int r;
+
+       r = dss_ovl_simple_check(ovl, info);
+       if (r)
+               return r;
 
        spin_lock_irqsave(&data_lock, flags);