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: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
This commit is contained in:
parent
72877cf38b
commit
d3541ca81d
@ -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)
|
|||||||
}
|
}
|
||||||
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;
|
return dss->dispc_ops;
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(dispc_set_ops);
|
|
||||||
|
|
||||||
const struct dispc_ops *dispc_get_ops(void)
|
|
||||||
{
|
|
||||||
return 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)
|
|||||||
|
|
||||||
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 @@ err_runtime_get:
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user