Skip to content

Commit

Permalink
drm: omapdrm: dss: Store dispc ops in dss_device structure
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Laurent Pinchart authored and Tomi Valkeinen committed Mar 1, 2018
1 parent 72877cf commit d3541ca
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 19 deletions.
13 changes: 4 additions & 9 deletions drivers/gpu/drm/omapdrm/dss/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@
#include <linux/of.h>
#include <linux/of_graph.h>
#include <linux/list.h>

#include "dss.h"
#include "omapdss.h"

static struct dss_device *dss_device;
static const struct dispc_ops *ops;

static struct list_head omapdss_comp_list;

Expand All @@ -43,15 +44,9 @@ void omapdss_set_dss(struct dss_device *dss)
}
EXPORT_SYMBOL(omapdss_set_dss);

void dispc_set_ops(const struct dispc_ops *o)
{
ops = o;
}
EXPORT_SYMBOL(dispc_set_ops);

const struct dispc_ops *dispc_get_ops(void)
const struct dispc_ops *dispc_get_ops(struct dss_device *dss)
{
return ops;
return dss->dispc_ops;
}
EXPORT_SYMBOL(dispc_get_ops);

Expand Down
6 changes: 4 additions & 2 deletions drivers/gpu/drm/omapdrm/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4622,7 +4622,7 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)

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);
Expand All @@ -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,
void *data)
{
struct dss_device *dss = dispc.dss;

dss_debugfs_remove_file(dispc.debugfs);

dispc_set_ops(NULL);
dss->dispc_ops = NULL;

pm_runtime_disable(dev);

Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/omapdrm/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,8 @@ struct dss_device {
struct dss_pll *plls[4];
struct dss_pll *video1_pll;
struct dss_pll *video2_pll;

const struct dispc_ops *dispc_ops;
};

/* core */
Expand Down
3 changes: 1 addition & 2 deletions drivers/gpu/drm/omapdrm/dss/omapdss.h
Original file line number Diff line number Diff line change
Expand Up @@ -733,8 +733,7 @@ struct dispc_ops {
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(void);
const struct dispc_ops *dispc_get_ops(struct dss_device *dss);

bool omapdss_component_is_display(struct device_node *node);
bool omapdss_component_is_output(struct device_node *node);
Expand Down
4 changes: 1 addition & 3 deletions drivers/gpu/drm/omapdrm/omap_crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,10 @@ static int omap_crtc_dss_connect(struct omap_drm_private *priv,
enum omap_channel channel,
struct omap_dss_device *dst)
{
const struct dispc_ops *dispc_ops = dispc_get_ops();

if (omap_crtc_output[channel])
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;

omap_crtc_output[channel] = dst;
Expand Down
5 changes: 2 additions & 3 deletions drivers/gpu/drm/omapdrm/omap_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,16 +520,15 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
DBG("%s", dev_name(dev));

priv->dev = dev;
priv->dss = omapdss_get_dss();
priv->dispc_ops = dispc_get_ops(priv->dss);

omap_crtc_pre_init(priv);

ret = omap_connect_dssdevs();
if (ret)
goto err_crtc_uninit;

priv->dss = omapdss_get_dss();
priv->dispc_ops = dispc_get_ops();

soc = soc_device_match(omapdrm_soc_devices);
priv->omaprev = soc ? (unsigned int)soc->data : 0;
priv->wq = alloc_ordered_workqueue("omapdrm", 0);
Expand Down

0 comments on commit d3541ca

Please sign in to comment.