Commit 94d73329 authored by Sebastian Reichel's avatar Sebastian Reichel Committed by Tomi Valkeinen
Browse files

drm/omap: simplify DSI manual update code



Move dsi_ops into the main structure, since all other ops
are gone. Instead of checking the device type we can simply
check if dsi_ops are set.

Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-48-tomi.valkeinen@ti.com
parent 2390fadb
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -5011,11 +5011,9 @@ static int dsi_get_clocks(struct dsi_data *dsi)
	return 0;
}

static const struct omap_dss_device_ops dsi_ops = {
	.dsi = {
static const struct omapdss_dsi_ops dsi_ops = {
	.update = dsi_update_all,
	.is_video_mode = dsi_is_video_mode,
	},
};

static irqreturn_t omap_dsi_te_irq_handler(int irq, void *dev_id)
@@ -5446,7 +5444,7 @@ static int dsi_init_output(struct dsi_data *dsi)
	out->type = OMAP_DISPLAY_TYPE_DSI;
	out->name = dsi->module_id == 0 ? "dsi.0" : "dsi.1";
	out->dispc_channel = dsi_get_channel(dsi);
	out->ops = &dsi_ops;
	out->dsi_ops = &dsi_ops;
	out->owner = THIS_MODULE;
	out->of_port = 0;
	out->bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
+1 −5
Original line number Diff line number Diff line
@@ -278,10 +278,6 @@ struct omapdss_dsi_ops {
	bool (*is_video_mode)(struct omap_dss_device *dssdev);
};

struct omap_dss_device_ops {
	const struct omapdss_dsi_ops dsi;
};

struct omap_dss_device {
	struct device *dev;

@@ -303,7 +299,7 @@ struct omap_dss_device {

	const char *name;

	const struct omap_dss_device_ops *ops;
	const struct omapdss_dsi_ops *dsi_ops;
	u32 bus_flags;

	/* OMAP DSS output specific fields */
+4 −12
Original line number Diff line number Diff line
@@ -366,17 +366,10 @@ static void omap_crtc_manual_display_update(struct work_struct *data)
	struct drm_device *dev = omap_crtc->base.dev;
	int ret;

	if (!dssdev) {
		dev_err_once(dev->dev, "missing display dssdev!");
	if (!dssdev || !dssdev->dsi_ops || !dssdev->dsi_ops->update)
		return;
	}

	if (dssdev->type != OMAP_DISPLAY_TYPE_DSI || !dssdev->ops->dsi.update) {
		dev_err_once(dev->dev, "no DSI update callback found!");
		return;
	}

	ret = dssdev->ops->dsi.update(dssdev);
	ret = dssdev->dsi_ops->update(dssdev);
	if (ret < 0) {
		spin_lock_irq(&dev->event_lock);
		omap_crtc->pending = false;
@@ -585,11 +578,10 @@ static bool omap_crtc_is_manually_updated(struct drm_crtc *crtc)
	struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
	struct omap_dss_device *dssdev = omap_crtc->pipe->output;

	if (dssdev->type != OMAP_DISPLAY_TYPE_DSI ||
	    !dssdev->ops->dsi.is_video_mode)
	if (!dssdev || !dssdev->dsi_ops || !dssdev->dsi_ops->is_video_mode)
		return false;

	if (dssdev->ops->dsi.is_video_mode(dssdev))
	if (dssdev->dsi_ops->is_video_mode(dssdev))
		return false;

	DBG("detected manually updated display!");