OMAPDSS: split overlay manager creation
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 14 May 2013 07:53:21 +0000 (10:53 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 17 Jun 2013 11:00:42 +0000 (14:00 +0300)
Split the function that creates overlay manager structs into two: one
that creates just the structs, and one that creates the sysfs files for
the manager.

This will help us use the overlay manager structs with omapdrm in the
following patches, while still leaving the sysfs files out.

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

index b84bd99ef91076a96a553ecded04e0f7f5f55c93..74d1d000e92d742adf636c7cea18f0529e35bbd9 100644 (file)
@@ -1577,7 +1577,8 @@ int omapdss_compat_init(void)
 
        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++) {
@@ -1640,7 +1641,8 @@ err_disp_sysfs:
        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--;
@@ -1668,7 +1670,8 @@ void omapdss_compat_uninit(void)
 
        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);
index 84758936429d6676ea53626aedc045e81706cf76..7964d3b9853b72e9bd0b4661fae8ecf9ebb5b7bb 100644 (file)
@@ -194,8 +194,10 @@ void display_uninit_sysfs(struct platform_device *pdev,
                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,
index 51046819f33b3ab949a197d2d027095cf43fd9e3..72784b3aad2758513a1f854c1b9e9a7e4612b35a 100644 (file)
@@ -511,4 +511,6 @@ void dss_manager_kobj_uninit(struct omap_overlay_manager *mgr)
 {
        kobject_del(&mgr->kobj);
        kobject_put(&mgr->kobj);
+
+       memset(&mgr->kobj, 0, sizeof(mgr->kobj));
 }
index 2551eaa14c42537fb8ed38464b68eb42b0259b85..1aac9b4191a9762e7556dcb2485c178fa0ff17d2 100644 (file)
@@ -36,9 +36,9 @@
 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();
 
@@ -76,6 +76,17 @@ int dss_init_overlay_managers(struct platform_device *pdev)
                        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)
@@ -85,18 +96,22 @@ int dss_init_overlay_managers(struct platform_device *pdev)
        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)