Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2949390e authored by Andrzej Hajda's avatar Andrzej Hajda Committed by Inki Dae
Browse files

drm/exynos: kill pipe field from drivers contexts



Since possible_crtcs are set by Exynos core helper pipe fields have no
raison d'etre. The only place it was used, as a hack, is
fimd_clear_channels, to avoid calling drm_crtc_handle_vblank, but DRM core
has already other protection mechanism (vblank->enabled), so it could be
safely removed.

Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 2c82607b
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -64,7 +64,6 @@ struct decon_context {
	void __iomem			*addr;
	struct regmap			*sysreg;
	struct clk			*clks[ARRAY_SIZE(decon_clks_name)];
	int				pipe;
	unsigned long			flags;
	unsigned long			out_type;
	int				first_win;
@@ -592,7 +591,6 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
	int ret;

	ctx->drm_dev = drm_dev;
	ctx->pipe = drm_dev->mode_config.num_crtc;
	drm_dev->max_vblank_count = 0xffffffff;

	for (win = ctx->first_win; win < WINDOWS_NR; win++) {
+1 −3
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ struct decon_context {
	unsigned long			irq_flags;
	bool				i80_if;
	bool				suspended;
	int				pipe;
	wait_queue_head_t		wait_vsync_queue;
	atomic_t			wait_vsync_event;

@@ -131,7 +130,6 @@ static int decon_ctx_initialize(struct decon_context *ctx,
			struct drm_device *drm_dev)
{
	ctx->drm_dev = drm_dev;
	ctx->pipe = drm_dev->mode_config.num_crtc;

	decon_clear_channels(ctx->crtc);

@@ -605,7 +603,7 @@ static irqreturn_t decon_irq_handler(int irq, void *dev_id)
		writel(clear_bit, ctx->regs + VIDINTCON1);

	/* check the crtc is detached already from encoder */
	if (ctx->pipe < 0 || !ctx->drm_dev)
	if (!ctx->drm_dev)
		goto out;

	if (!ctx->i80_if) {
+2 −9
Original line number Diff line number Diff line
@@ -179,7 +179,6 @@ struct fimd_context {
	u32				i80ifcon;
	bool				i80_if;
	bool				suspended;
	int				pipe;
	wait_queue_head_t		wait_vsync_queue;
	atomic_t			wait_vsync_event;
	atomic_t			win_updated;
@@ -354,18 +353,13 @@ static void fimd_clear_channels(struct exynos_drm_crtc *crtc)

	/* Wait for vsync, as disable channel takes effect at next vsync */
	if (ch_enabled) {
		int pipe = ctx->pipe;

		/* ensure that vblank interrupt won't be reported to core */
		ctx->suspended = false;
		ctx->pipe = -1;

		fimd_enable_vblank(ctx->crtc);
		fimd_wait_for_vblank(ctx->crtc);
		fimd_disable_vblank(ctx->crtc);

		ctx->suspended = true;
		ctx->pipe = pipe;
	}

	clk_disable_unprepare(ctx->lcd_clk);
@@ -899,7 +893,7 @@ static void fimd_te_handler(struct exynos_drm_crtc *crtc)
	u32 trg_type = ctx->driver_data->trg_type;

	/* Checks the crtc is detached already from encoder */
	if (ctx->pipe < 0 || !ctx->drm_dev)
	if (!ctx->drm_dev)
		return;

	if (trg_type == I80_HW_TRG)
@@ -957,7 +951,7 @@ static irqreturn_t fimd_irq_handler(int irq, void *dev_id)
		writel(clear_bit, ctx->regs + VIDINTCON1);

	/* check the crtc is detached already from encoder */
	if (ctx->pipe < 0 || !ctx->drm_dev)
	if (!ctx->drm_dev)
		goto out;

	if (!ctx->i80_if)
@@ -987,7 +981,6 @@ static int fimd_bind(struct device *dev, struct device *master, void *data)
	int ret;

	ctx->drm_dev = drm_dev;
	ctx->pipe = drm_dev->mode_config.num_crtc;

	for (i = 0; i < WINDOWS_NR; i++) {
		ctx->configs[i].pixel_formats = fimd_formats;
+1 −14
Original line number Diff line number Diff line
@@ -51,7 +51,6 @@ struct vidi_context {
	bool				suspended;
	struct timer_list		timer;
	struct mutex			lock;
	int				pipe;
};

static inline struct vidi_context *encoder_to_vidi(struct drm_encoder *e)
@@ -153,15 +152,6 @@ static void vidi_disable(struct exynos_drm_crtc *crtc)
	mutex_unlock(&ctx->lock);
}

static int vidi_ctx_initialize(struct vidi_context *ctx,
			struct drm_device *drm_dev)
{
	ctx->drm_dev = drm_dev;
	ctx->pipe = drm_dev->mode_config.num_crtc;

	return 0;
}

static const struct exynos_drm_crtc_ops vidi_crtc_ops = {
	.enable = vidi_enable,
	.disable = vidi_disable,
@@ -175,9 +165,6 @@ static void vidi_fake_vblank_timer(unsigned long arg)
{
	struct vidi_context *ctx = (void *)arg;

	if (ctx->pipe < 0)
		return;

	if (drm_crtc_handle_vblank(&ctx->crtc->base))
		mod_timer(&ctx->timer,
			jiffies + msecs_to_jiffies(VIDI_REFRESH_TIME) - 1);
@@ -397,7 +384,7 @@ static int vidi_bind(struct device *dev, struct device *master, void *data)
	unsigned int i;
	int pipe, ret;

	vidi_ctx_initialize(ctx, drm_dev);
	ctx->drm_dev = drm_dev;

	plane_config.pixel_formats = formats;
	plane_config.num_pixel_formats = ARRAY_SIZE(formats);
+0 −2
Original line number Diff line number Diff line
@@ -99,7 +99,6 @@ struct mixer_context {
	struct drm_device	*drm_dev;
	struct exynos_drm_crtc	*crtc;
	struct exynos_drm_plane	planes[MIXER_WIN_NR];
	int			pipe;
	unsigned long		flags;

	struct mixer_resources	mixer_res;
@@ -900,7 +899,6 @@ static int mixer_initialize(struct mixer_context *mixer_ctx,
	priv = drm_dev->dev_private;

	mixer_ctx->drm_dev = drm_dev;
	mixer_ctx->pipe = drm_dev->mode_config.num_crtc;

	/* acquire resources: regs, irqs, clocks */
	ret = mixer_resources_init(mixer_ctx);