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: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
1cb0017813
commit
cf0736681e
|
@ -1781,6 +1781,7 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
|
||||||
s32 pix_inc;
|
s32 pix_inc;
|
||||||
u16 frame_height = oi->height;
|
u16 frame_height = oi->height;
|
||||||
unsigned int field_offset = 0;
|
unsigned int field_offset = 0;
|
||||||
|
u16 outw, outh;
|
||||||
|
|
||||||
DSSDBG("dispc_ovl_setup %d, pa %x, pa_uv %x, sw %d, %d,%d, %dx%d -> "
|
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 "
|
"%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)
|
if (oi->paddr == 0)
|
||||||
return -EINVAL;
|
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;
|
fieldmode = 1;
|
||||||
|
|
||||||
if (ilace) {
|
if (ilace) {
|
||||||
if (fieldmode)
|
if (fieldmode)
|
||||||
oi->height /= 2;
|
oi->height /= 2;
|
||||||
oi->pos_y /= 2;
|
oi->pos_y /= 2;
|
||||||
oi->out_height /= 2;
|
outh /= 2;
|
||||||
|
|
||||||
DSSDBG("adjusting for ilace: height %d, pos_y %d, "
|
DSSDBG("adjusting for ilace: height %d, pos_y %d, "
|
||||||
"out_height %d\n",
|
"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))
|
if (!dss_feat_color_mode_supported(plane, oi->color_mode))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
r = dispc_ovl_calc_scaling(plane, channel, oi->width, oi->height,
|
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);
|
&five_taps);
|
||||||
if (r)
|
if (r)
|
||||||
return 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
|
* so the integer part must be added to the base address of the
|
||||||
* bottom field.
|
* bottom field.
|
||||||
*/
|
*/
|
||||||
if (!oi->height || oi->height == oi->out_height)
|
if (!oi->height || oi->height == outh)
|
||||||
field_offset = 0;
|
field_offset = 0;
|
||||||
else
|
else
|
||||||
field_offset = oi->height / oi->out_height / 2;
|
field_offset = oi->height / outh / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fields are independent but interleaved in memory. */
|
/* 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);
|
dispc_ovl_set_pix_inc(plane, pix_inc);
|
||||||
|
|
||||||
DSSDBG("%d,%d %dx%d -> %dx%d\n", oi->pos_x, oi->pos_y, oi->width,
|
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);
|
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) {
|
if (ovl->caps & OMAP_DSS_OVL_CAP_SCALE) {
|
||||||
dispc_ovl_set_scaling(plane, oi->width, oi->height,
|
dispc_ovl_set_scaling(plane, oi->width, oi->height,
|
||||||
oi->out_width, oi->out_height,
|
outw, outh,
|
||||||
ilace, five_taps, fieldmode,
|
ilace, five_taps, fieldmode,
|
||||||
oi->color_mode, oi->rotation);
|
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);
|
dispc_ovl_set_vid_color_conv(plane, cconv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue