struct omap_overlay_info info;
 
-       enum omap_channel channel;
-
        u32 fifo_low;
        u32 fifo_high;
 
        bool shadow_extra_info_dirty;
 
        bool enabled;
-
+       enum omap_channel channel;
 };
 
 struct mgr_priv_data {
 
        ilace = ovl->manager->device->type == OMAP_DISPLAY_TYPE_VENC;
 
-       dispc_ovl_set_channel_out(ovl->id, op->channel);
-
        r = dispc_ovl_setup(ovl->id, oi, ilace, replication);
        if (r) {
                /*
         * disabled */
 
        dispc_ovl_enable(ovl->id, op->enabled);
+       dispc_ovl_set_channel_out(ovl->id, op->channel);
 
        mp = get_mgr_priv(ovl->manager);
 
 
        op = get_ovl_priv(ovl);
 
-       if (ovl->manager_changed) {
-               ovl->manager_changed = false;
-               op->user_info_dirty  = true;
-       }
-
        if (!op->user_info_dirty)
                return;
 
        op->user_info_dirty = false;
        op->dirty = true;
        op->info = op->user_info;
-
-       op->channel = ovl->manager->id;
 }
 
 static void omap_dss_mgr_apply_mgr(struct omap_overlay_manager *mgr)
                goto err;
        }
 
+       op->channel = mgr->id;
+       op->extra_info_dirty = true;
+
        ovl->manager = mgr;
        list_add_tail(&ovl->list, &mgr->overlays);
-       ovl->manager_changed = true;
 
        spin_unlock_irqrestore(&data_lock, flags);
 
                goto err;
        }
 
+       op->channel = -1;
+
        ovl->manager = NULL;
        list_del(&ovl->list);
-       ovl->manager_changed = true;
 
        spin_unlock_irqrestore(&data_lock, flags);