Commit 8dd2491a authored by Tomi Valkeinen's avatar Tomi Valkeinen

OMAPDSS: add omapdss_compat_init()

Add two new exported functions, omapdss_compat_init and
omapdss_compat_uninit, which are to be used by omapfb, omap_vout to
enable compatibility mode for omapdss. The functions are called by
omapdss internally for now, and moved to other drivers later.

The compatibility mode is implemented fully in the following patches.
For now, enabling compat mode only sets up the private data in apply.c.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 6b6f1edf
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define DSS_SUBSYS_NAME "APPLY" #define DSS_SUBSYS_NAME "APPLY"
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
...@@ -131,7 +132,7 @@ static struct mgr_priv_data *get_mgr_priv(struct omap_overlay_manager *mgr) ...@@ -131,7 +132,7 @@ static struct mgr_priv_data *get_mgr_priv(struct omap_overlay_manager *mgr)
return &dss_data.mgr_priv_data_array[mgr->id]; return &dss_data.mgr_priv_data_array[mgr->id];
} }
void dss_apply_init(void) static void apply_init_priv(void)
{ {
const int num_ovls = dss_feat_get_num_ovls(); const int num_ovls = dss_feat_get_num_ovls();
struct mgr_priv_data *mp; struct mgr_priv_data *mp;
...@@ -1463,3 +1464,33 @@ int dss_ovl_disable(struct omap_overlay *ovl) ...@@ -1463,3 +1464,33 @@ int dss_ovl_disable(struct omap_overlay *ovl)
return r; return r;
} }
static int compat_refcnt;
static DEFINE_MUTEX(compat_init_lock);
int omapdss_compat_init(void)
{
mutex_lock(&compat_init_lock);
if (compat_refcnt++ > 0)
goto out;
apply_init_priv();
out:
mutex_unlock(&compat_init_lock);
return 0;
}
EXPORT_SYMBOL(omapdss_compat_init);
void omapdss_compat_uninit(void)
{
mutex_lock(&compat_init_lock);
if (--compat_refcnt > 0)
goto out;
out:
mutex_unlock(&compat_init_lock);
}
EXPORT_SYMBOL(omapdss_compat_uninit);
...@@ -232,7 +232,7 @@ static int __init omap_dss_probe(struct platform_device *pdev) ...@@ -232,7 +232,7 @@ static int __init omap_dss_probe(struct platform_device *pdev)
dss_features_init(omapdss_get_version()); dss_features_init(omapdss_get_version());
dss_apply_init(); omapdss_compat_init();
dss_init_overlay_managers(pdev); dss_init_overlay_managers(pdev);
dss_init_overlays(pdev); dss_init_overlays(pdev);
...@@ -264,6 +264,8 @@ static int omap_dss_remove(struct platform_device *pdev) ...@@ -264,6 +264,8 @@ static int omap_dss_remove(struct platform_device *pdev)
dss_uninit_overlays(pdev); dss_uninit_overlays(pdev);
dss_uninit_overlay_managers(pdev); dss_uninit_overlay_managers(pdev);
omapdss_compat_uninit();
return 0; return 0;
} }
......
...@@ -178,7 +178,6 @@ void dss_copy_device_pdata(struct omap_dss_device *dst, ...@@ -178,7 +178,6 @@ void dss_copy_device_pdata(struct omap_dss_device *dst,
const struct omap_dss_device *src); const struct omap_dss_device *src);
/* apply */ /* apply */
void dss_apply_init(void);
int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr); int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr);
int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl); int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
void dss_mgr_start_update(struct omap_overlay_manager *mgr); void dss_mgr_start_update(struct omap_overlay_manager *mgr);
......
...@@ -836,4 +836,7 @@ void omapdss_rfbi_set_data_lines(struct omap_dss_device *dssdev, ...@@ -836,4 +836,7 @@ void omapdss_rfbi_set_data_lines(struct omap_dss_device *dssdev,
void omapdss_rfbi_set_interface_timings(struct omap_dss_device *dssdev, void omapdss_rfbi_set_interface_timings(struct omap_dss_device *dssdev,
struct rfbi_timings *timings); struct rfbi_timings *timings);
int omapdss_compat_init(void);
void omapdss_compat_uninit(void);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment