Commit d3541ca8 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen

drm: omapdrm: dss: Store dispc ops in dss_device structure

Remove the global dispc ops variable by storing it in the dss_device
structure.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
parent 72877cf3
...@@ -18,10 +18,11 @@ ...@@ -18,10 +18,11 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_graph.h> #include <linux/of_graph.h>
#include <linux/list.h> #include <linux/list.h>
#include "dss.h"
#include "omapdss.h" #include "omapdss.h"
static struct dss_device *dss_device; static struct dss_device *dss_device;
static const struct dispc_ops *ops;
static struct list_head omapdss_comp_list; static struct list_head omapdss_comp_list;
...@@ -43,15 +44,9 @@ void omapdss_set_dss(struct dss_device *dss) ...@@ -43,15 +44,9 @@ void omapdss_set_dss(struct dss_device *dss)
} }
EXPORT_SYMBOL(omapdss_set_dss); EXPORT_SYMBOL(omapdss_set_dss);
void dispc_set_ops(const struct dispc_ops *o) const struct dispc_ops *dispc_get_ops(struct dss_device *dss)
{
ops = o;
}
EXPORT_SYMBOL(dispc_set_ops);
const struct dispc_ops *dispc_get_ops(void)
{ {
return ops; return dss->dispc_ops;
} }
EXPORT_SYMBOL(dispc_get_ops); EXPORT_SYMBOL(dispc_get_ops);
......
...@@ -4622,7 +4622,7 @@ static int dispc_bind(struct device *dev, struct device *master, void *data) ...@@ -4622,7 +4622,7 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
dispc_runtime_put(); dispc_runtime_put();
dispc_set_ops(&dispc_ops); dss->dispc_ops = &dispc_ops;
dispc.debugfs = dss_debugfs_create_file(dss, "dispc", dispc_dump_regs, dispc.debugfs = dss_debugfs_create_file(dss, "dispc", dispc_dump_regs,
&dispc); &dispc);
...@@ -4637,9 +4637,11 @@ static int dispc_bind(struct device *dev, struct device *master, void *data) ...@@ -4637,9 +4637,11 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
static void dispc_unbind(struct device *dev, struct device *master, static void dispc_unbind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct dss_device *dss = dispc.dss;
dss_debugfs_remove_file(dispc.debugfs); dss_debugfs_remove_file(dispc.debugfs);
dispc_set_ops(NULL); dss->dispc_ops = NULL;
pm_runtime_disable(dev); pm_runtime_disable(dev);
......
...@@ -271,6 +271,8 @@ struct dss_device { ...@@ -271,6 +271,8 @@ struct dss_device {
struct dss_pll *plls[4]; struct dss_pll *plls[4];
struct dss_pll *video1_pll; struct dss_pll *video1_pll;
struct dss_pll *video2_pll; struct dss_pll *video2_pll;
const struct dispc_ops *dispc_ops;
}; };
/* core */ /* core */
......
...@@ -733,8 +733,7 @@ struct dispc_ops { ...@@ -733,8 +733,7 @@ struct dispc_ops {
const u32 *(*ovl_get_color_modes)(enum omap_plane_id plane); const u32 *(*ovl_get_color_modes)(enum omap_plane_id plane);
}; };
void dispc_set_ops(const struct dispc_ops *o); const struct dispc_ops *dispc_get_ops(struct dss_device *dss);
const struct dispc_ops *dispc_get_ops(void);
bool omapdss_component_is_display(struct device_node *node); bool omapdss_component_is_display(struct device_node *node);
bool omapdss_component_is_output(struct device_node *node); bool omapdss_component_is_output(struct device_node *node);
......
...@@ -117,12 +117,10 @@ static int omap_crtc_dss_connect(struct omap_drm_private *priv, ...@@ -117,12 +117,10 @@ static int omap_crtc_dss_connect(struct omap_drm_private *priv,
enum omap_channel channel, enum omap_channel channel,
struct omap_dss_device *dst) struct omap_dss_device *dst)
{ {
const struct dispc_ops *dispc_ops = dispc_get_ops();
if (omap_crtc_output[channel]) if (omap_crtc_output[channel])
return -EINVAL; return -EINVAL;
if ((dispc_ops->mgr_get_supported_outputs(channel) & dst->id) == 0) if (!(priv->dispc_ops->mgr_get_supported_outputs(channel) & dst->id))
return -EINVAL; return -EINVAL;
omap_crtc_output[channel] = dst; omap_crtc_output[channel] = dst;
......
...@@ -520,6 +520,8 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev) ...@@ -520,6 +520,8 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
DBG("%s", dev_name(dev)); DBG("%s", dev_name(dev));
priv->dev = dev; priv->dev = dev;
priv->dss = omapdss_get_dss();
priv->dispc_ops = dispc_get_ops(priv->dss);
omap_crtc_pre_init(priv); omap_crtc_pre_init(priv);
...@@ -527,9 +529,6 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev) ...@@ -527,9 +529,6 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
if (ret) if (ret)
goto err_crtc_uninit; goto err_crtc_uninit;
priv->dss = omapdss_get_dss();
priv->dispc_ops = dispc_get_ops();
soc = soc_device_match(omapdrm_soc_devices); soc = soc_device_match(omapdrm_soc_devices);
priv->omaprev = soc ? (unsigned int)soc->data : 0; priv->omaprev = soc ? (unsigned int)soc->data : 0;
priv->wq = alloc_ordered_workqueue("omapdrm", 0); priv->wq = alloc_ordered_workqueue("omapdrm", 0);
......
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