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

Commit cf073668 authored by Tomi Valkeinen's avatar Tomi Valkeinen
Browse files

OMAPDSS: DISPC: handle 0 out_width/out_height in ovl_setup()



Overlay out_width/height are set to 0 when scaling is not used by the
users of omapdss. Currently ovl_setup() expects the caller of
ovl_setup() to convert those zero values to width or height.

This patch makes ovl_setup() accept zero values for out_width/height,
making calling ovl_setup() a bit simpler as the overlay_info can be
just passed to this function without modifications.

Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 1cb00178
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -1781,6 +1781,7 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
	s32 pix_inc;
	u16 frame_height = oi->height;
	unsigned int field_offset = 0;
	u16 outw, outh;

	DSSDBG("dispc_ovl_setup %d, pa %x, pa_uv %x, sw %d, %d,%d, %dx%d -> "
		"%dx%d, cmode %x, rot %d, mir %d, ilace %d chan %d repl %d "
@@ -1792,25 +1793,28 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
	if (oi->paddr == 0)
		return -EINVAL;

	if (ilace && oi->height == oi->out_height)
	outw = oi->out_width == 0 ? oi->width : oi->out_width;
	outh = oi->out_height == 0 ? oi->height : oi->out_height;

	if (ilace && oi->height == outh)
		fieldmode = 1;

	if (ilace) {
		if (fieldmode)
			oi->height /= 2;
		oi->pos_y /= 2;
		oi->out_height /= 2;
		outh /= 2;

		DSSDBG("adjusting for ilace: height %d, pos_y %d, "
				"out_height %d\n",
				oi->height, oi->pos_y, oi->out_height);
				oi->height, oi->pos_y, outh);
	}

	if (!dss_feat_color_mode_supported(plane, oi->color_mode))
		return -EINVAL;

	r = dispc_ovl_calc_scaling(plane, channel, oi->width, oi->height,
			oi->out_width, oi->out_height, oi->color_mode,
			outw, outh, oi->color_mode,
			&five_taps);
	if (r)
		return r;
@@ -1828,10 +1832,10 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
		 * so the integer part must be added to the base address of the
		 * bottom field.
		 */
		if (!oi->height || oi->height == oi->out_height)
		if (!oi->height || oi->height == outh)
			field_offset = 0;
		else
			field_offset = oi->height / oi->out_height / 2;
			field_offset = oi->height / outh / 2;
	}

	/* Fields are independent but interleaved in memory. */
@@ -1867,7 +1871,7 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
	dispc_ovl_set_pix_inc(plane, pix_inc);

	DSSDBG("%d,%d %dx%d -> %dx%d\n", oi->pos_x, oi->pos_y, oi->width,
			oi->height, oi->out_width, oi->out_height);
			oi->height, outw, outh);

	dispc_ovl_set_pos(plane, oi->pos_x, oi->pos_y);

@@ -1875,10 +1879,10 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,

	if (ovl->caps & OMAP_DSS_OVL_CAP_SCALE) {
		dispc_ovl_set_scaling(plane, oi->width, oi->height,
				   oi->out_width, oi->out_height,
				   outw, outh,
				   ilace, five_taps, fieldmode,
				   oi->color_mode, oi->rotation);
		dispc_ovl_set_vid_size(plane, oi->out_width, oi->out_height);
		dispc_ovl_set_vid_size(plane, outw, outh);
		dispc_ovl_set_vid_color_conv(plane, cconv);
	}