apply_init_priv();
 
-       dss_init_overlay_managers(pdev);
+       dss_init_overlay_managers();
+       dss_init_overlay_managers_sysfs(pdev);
        dss_init_overlays(pdev);
 
        for (i = 0; i < omap_dss_get_num_overlay_managers(); i++) {
        dss_uninstall_mgr_ops();
 
 err_mgr_ops:
-       dss_uninit_overlay_managers(pdev);
+       dss_uninit_overlay_managers_sysfs(pdev);
+       dss_uninit_overlay_managers();
        dss_uninit_overlays(pdev);
 
        compat_refcnt--;
 
        dss_uninstall_mgr_ops();
 
-       dss_uninit_overlay_managers(pdev);
+       dss_uninit_overlay_managers_sysfs(pdev);
+       dss_uninit_overlay_managers();
        dss_uninit_overlays(pdev);
 out:
        mutex_unlock(&compat_init_lock);
 
                struct omap_dss_device *dssdev);
 
 /* manager */
-int dss_init_overlay_managers(struct platform_device *pdev);
-void dss_uninit_overlay_managers(struct platform_device *pdev);
+int dss_init_overlay_managers(void);
+void dss_uninit_overlay_managers(void);
+int dss_init_overlay_managers_sysfs(struct platform_device *pdev);
+void dss_uninit_overlay_managers_sysfs(struct platform_device *pdev);
 int dss_mgr_simple_check(struct omap_overlay_manager *mgr,
                const struct omap_overlay_manager_info *info);
 int dss_mgr_check_timings(struct omap_overlay_manager *mgr,
 
 {
        kobject_del(&mgr->kobj);
        kobject_put(&mgr->kobj);
+
+       memset(&mgr->kobj, 0, sizeof(mgr->kobj));
 }
 
 static int num_managers;
 static struct omap_overlay_manager *managers;
 
-int dss_init_overlay_managers(struct platform_device *pdev)
+int dss_init_overlay_managers(void)
 {
-       int i, r;
+       int i;
 
        num_managers = dss_feat_get_num_mgrs();
 
                        dss_feat_get_supported_outputs(mgr->id);
 
                INIT_LIST_HEAD(&mgr->overlays);
+       }
+
+       return 0;
+}
+
+int dss_init_overlay_managers_sysfs(struct platform_device *pdev)
+{
+       int i, r;
+
+       for (i = 0; i < num_managers; ++i) {
+               struct omap_overlay_manager *mgr = &managers[i];
 
                r = dss_manager_kobj_init(mgr, pdev);
                if (r)
        return 0;
 }
 
-void dss_uninit_overlay_managers(struct platform_device *pdev)
+void dss_uninit_overlay_managers(void)
+{
+       kfree(managers);
+       managers = NULL;
+       num_managers = 0;
+}
+
+void dss_uninit_overlay_managers_sysfs(struct platform_device *pdev)
 {
        int i;
 
        for (i = 0; i < num_managers; ++i) {
                struct omap_overlay_manager *mgr = &managers[i];
+
                dss_manager_kobj_uninit(mgr);
        }
-
-       kfree(managers);
-       managers = NULL;
-       num_managers = 0;
 }
 
 int omap_dss_get_num_overlay_managers(void)