aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/omapdrm/dss/base.c13
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dispc.c6
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dss.h2
-rw-r--r--drivers/gpu/drm/omapdrm/dss/omapdss.h3
-rw-r--r--drivers/gpu/drm/omapdrm/omap_crtc.c4
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.c5
6 files changed, 14 insertions, 19 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
index 6346bc967a77..c248c3c31904 100644
--- a/drivers/gpu/drm/omapdrm/dss/base.c
+++ b/drivers/gpu/drm/omapdrm/dss/base.c
@@ -18,10 +18,11 @@
18#include <linux/of.h> 18#include <linux/of.h>
19#include <linux/of_graph.h> 19#include <linux/of_graph.h>
20#include <linux/list.h> 20#include <linux/list.h>
21
22#include "dss.h"
21#include "omapdss.h" 23#include "omapdss.h"
22 24
23static struct dss_device *dss_device; 25static struct dss_device *dss_device;
24static const struct dispc_ops *ops;
25 26
26static struct list_head omapdss_comp_list; 27static struct list_head omapdss_comp_list;
27 28
@@ -43,15 +44,9 @@ void omapdss_set_dss(struct dss_device *dss)
43} 44}
44EXPORT_SYMBOL(omapdss_set_dss); 45EXPORT_SYMBOL(omapdss_set_dss);
45 46
46void dispc_set_ops(const struct dispc_ops *o) 47const struct dispc_ops *dispc_get_ops(struct dss_device *dss)
47{
48 ops = o;
49}
50EXPORT_SYMBOL(dispc_set_ops);
51
52const struct dispc_ops *dispc_get_ops(void)
53{ 48{
54 return ops; 49 return dss->dispc_ops;
55} 50}
56EXPORT_SYMBOL(dispc_get_ops); 51EXPORT_SYMBOL(dispc_get_ops);
57 52
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 8019cc9f4f97..aae6037f499f 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -4622,7 +4622,7 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
4622 4622
4623 dispc_runtime_put(); 4623 dispc_runtime_put();
4624 4624
4625 dispc_set_ops(&dispc_ops); 4625 dss->dispc_ops = &dispc_ops;
4626 4626
4627 dispc.debugfs = dss_debugfs_create_file(dss, "dispc", dispc_dump_regs, 4627 dispc.debugfs = dss_debugfs_create_file(dss, "dispc", dispc_dump_regs,
4628 &dispc); 4628 &dispc);
@@ -4637,9 +4637,11 @@ err_runtime_get:
4637static void dispc_unbind(struct device *dev, struct device *master, 4637static void dispc_unbind(struct device *dev, struct device *master,
4638 void *data) 4638 void *data)
4639{ 4639{
4640 struct dss_device *dss = dispc.dss;
4641
4640 dss_debugfs_remove_file(dispc.debugfs); 4642 dss_debugfs_remove_file(dispc.debugfs);
4641 4643
4642 dispc_set_ops(NULL); 4644 dss->dispc_ops = NULL;
4643 4645
4644 pm_runtime_disable(dev); 4646 pm_runtime_disable(dev);
4645 4647
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h
index 764c52025a27..348378f1b5a5 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.h
+++ b/drivers/gpu/drm/omapdrm/dss/dss.h
@@ -271,6 +271,8 @@ struct dss_device {
271 struct dss_pll *plls[4]; 271 struct dss_pll *plls[4];
272 struct dss_pll *video1_pll; 272 struct dss_pll *video1_pll;
273 struct dss_pll *video2_pll; 273 struct dss_pll *video2_pll;
274
275 const struct dispc_ops *dispc_ops;
274}; 276};
275 277
276/* core */ 278/* core */
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 312485714703..4bf7843b4aec 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -733,8 +733,7 @@ struct dispc_ops {
733 const u32 *(*ovl_get_color_modes)(enum omap_plane_id plane); 733 const u32 *(*ovl_get_color_modes)(enum omap_plane_id plane);
734}; 734};
735 735
736void dispc_set_ops(const struct dispc_ops *o); 736const struct dispc_ops *dispc_get_ops(struct dss_device *dss);
737const struct dispc_ops *dispc_get_ops(void);
738 737
739bool omapdss_component_is_display(struct device_node *node); 738bool omapdss_component_is_display(struct device_node *node);
740bool omapdss_component_is_output(struct device_node *node); 739bool omapdss_component_is_output(struct device_node *node);
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 61d8d17a4243..ffe4f698d291 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -117,12 +117,10 @@ static int omap_crtc_dss_connect(struct omap_drm_private *priv,
117 enum omap_channel channel, 117 enum omap_channel channel,
118 struct omap_dss_device *dst) 118 struct omap_dss_device *dst)
119{ 119{
120 const struct dispc_ops *dispc_ops = dispc_get_ops();
121
122 if (omap_crtc_output[channel]) 120 if (omap_crtc_output[channel])
123 return -EINVAL; 121 return -EINVAL;
124 122
125 if ((dispc_ops->mgr_get_supported_outputs(channel) & dst->id) == 0) 123 if (!(priv->dispc_ops->mgr_get_supported_outputs(channel) & dst->id))
126 return -EINVAL; 124 return -EINVAL;
127 125
128 omap_crtc_output[channel] = dst; 126 omap_crtc_output[channel] = dst;
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 003445b70ee7..a93916cd0258 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -520,6 +520,8 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
520 DBG("%s", dev_name(dev)); 520 DBG("%s", dev_name(dev));
521 521
522 priv->dev = dev; 522 priv->dev = dev;
523 priv->dss = omapdss_get_dss();
524 priv->dispc_ops = dispc_get_ops(priv->dss);
523 525
524 omap_crtc_pre_init(priv); 526 omap_crtc_pre_init(priv);
525 527
@@ -527,9 +529,6 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
527 if (ret) 529 if (ret)
528 goto err_crtc_uninit; 530 goto err_crtc_uninit;
529 531
530 priv->dss = omapdss_get_dss();
531 priv->dispc_ops = dispc_get_ops();
532
533 soc = soc_device_match(omapdrm_soc_devices); 532 soc = soc_device_match(omapdrm_soc_devices);
534 priv->omaprev = soc ? (unsigned int)soc->data : 0; 533 priv->omaprev = soc ? (unsigned int)soc->data : 0;
535 priv->wq = alloc_ordered_workqueue("omapdrm", 0); 534 priv->wq = alloc_ordered_workqueue("omapdrm", 0);