@@ -19,10 +19,9 @@
#include <linux/of_graph.h>
#include <linux/list.h>
-#include "dss.h"
#include "omapdss.h"
-static struct dss_device *dss_device;
+static struct dss_data *dss_device;
static struct list_head omapdss_comp_list;
@@ -32,25 +31,25 @@ struct omapdss_comp_node {
bool dss_core_component;
};
-struct dss_device *omapdss_get_dss(void)
+struct dss_data *omapdss_get_dss(void)
{
return dss_device;
}
EXPORT_SYMBOL(omapdss_get_dss);
-void omapdss_set_dss(struct dss_device *dss)
+void omapdss_set_dss(struct dss_data *dss)
{
dss_device = dss;
}
EXPORT_SYMBOL(omapdss_set_dss);
-struct dispc_device *dispc_get_dispc(struct dss_device *dss)
+struct dispc_device *dispc_get_dispc(struct dss_data *dss)
{
return dss->dispc;
}
EXPORT_SYMBOL(dispc_get_dispc);
-const struct dispc_ops *dispc_get_ops(struct dss_device *dss)
+const struct dispc_ops *dispc_get_ops(struct dss_data *dss)
{
return dss->dispc_ops;
}
@@ -4791,6 +4791,10 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
dispc->debugfs = dss_debugfs_create_file(dss, "dispc", dispc_dump_regs,
dispc);
+ // XXX get rid of the above redundant data members
+ dss->data.dispc = dss->dispc;
+ dss->data.dispc_ops = dss->dispc_ops;
+
return 0;
err_runtime_get:
@@ -1326,7 +1326,7 @@ static int dss_bind(struct device *dev)
pm_set_vt_switch(0);
omapdss_gather_components(dev);
- omapdss_set_dss(dss);
+ omapdss_set_dss(&dss->data);
return 0;
}
@@ -273,6 +273,8 @@ struct dss_device {
struct dss_pll *video1_pll;
struct dss_pll *video2_pll;
+ struct dss_data data;
+ // XXX these are redundant, use data instead
struct dispc_device *dispc;
const struct dispc_ops *dispc_ops;
};
@@ -589,8 +589,13 @@ struct omap_dss_driver {
const struct hdmi_avi_infoframe *avi);
};
-struct dss_device *omapdss_get_dss(void);
-void omapdss_set_dss(struct dss_device *dss);
+struct dss_data {
+ const struct dispc_ops *dispc_ops;
+ struct dispc_device *dispc;
+};
+
+struct dss_data *omapdss_get_dss(void);
+void omapdss_set_dss(struct dss_data *dss);
static inline bool omapdss_is_initialized(void)
{
return !!omapdss_get_dss();
@@ -749,8 +754,8 @@ struct dispc_ops {
enum omap_plane_id plane);
};
-struct dispc_device *dispc_get_dispc(struct dss_device *dss);
-const struct dispc_ops *dispc_get_ops(struct dss_device *dss);
+struct dispc_device *dispc_get_dispc(struct dss_data *dss);
+const struct dispc_ops *dispc_get_ops(struct dss_data *dss);
bool omapdss_component_is_display(struct device_node *node);
bool omapdss_component_is_output(struct device_node *node);
@@ -50,7 +50,7 @@ struct omap_drm_private {
struct device *dev;
u32 omaprev;
- struct dss_device *dss;
+ struct dss_data *dss;
struct dispc_device *dispc;
const struct dispc_ops *dispc_ops;
After this patch OMAP_DSS_BASE module is not including any OMAP2_DSS headers, only the API omapdss.h. "sturct dss_data", the piece of the data structure needed for base.c is defined in omapdss.h and added as a member to struct dss_device, and later to struct dss6_device. The patch is still a bit hackish. The struct dispc_device declaration is currently shared between alternative dss implementations, with different internal definitions. It should be relatively simple to use a similar struct dispc_data as struct dss_data is for dss_device, move some common parts - maybe the dispc_ops itself - there and find the private data with container_of macro. Also the contents of struct dss_data in side dss_device is currently redundant. These should be easy enough to fix, if we decide to take this route. Signed-off-by: Jyri Sarha <jsarha@ti.com> --- drivers/gpu/drm/omapdrm/dss/base.c | 11 +++++------ drivers/gpu/drm/omapdrm/dss/dispc.c | 4 ++++ drivers/gpu/drm/omapdrm/dss/dss.c | 2 +- drivers/gpu/drm/omapdrm/dss/dss.h | 2 ++ drivers/gpu/drm/omapdrm/dss/omapdss.h | 13 +++++++++---- drivers/gpu/drm/omapdrm/omap_drv.h | 2 +- 6 files changed, 22 insertions(+), 12 deletions(-)