Example #1
0
static void rotator_align_size(struct rot_context *rot, u32 fmt, u32 *hsize,
		u32 *vsize)
{
	struct rot_limit_table *limit_tbl = rot->limit_tbl;
	struct rot_limit *limit;
	u32 mask, val;

	/* Get size limit */
	if (fmt == ROT_CONTROL_FMT_RGB888)
		limit = &limit_tbl->rgb888;
	else
		limit = &limit_tbl->ycbcr420_2p;

	/* Get mask for rounding to nearest aligned val */
	mask = ~((1 << limit->align) - 1);

	/* Set aligned width */
	val = ROT_ALIGN(*hsize, limit->align, mask);
	if (val < limit->min_w)
		*hsize = ROT_MIN(limit->min_w, mask);
	else if (val > limit->max_w)
		*hsize = ROT_MAX(limit->max_w, mask);
	else
		*hsize = val;

	/* Set aligned height */
	val = ROT_ALIGN(*vsize, limit->align, mask);
	if (val < limit->min_h)
		*vsize = ROT_MIN(limit->min_h, mask);
	else if (val > limit->max_h)
		*vsize = ROT_MAX(limit->max_h, mask);
	else
		*vsize = val;
}
Example #2
0
static void rotator_align_size(struct rot_context *rot, u32 fmt,
						struct drm_exynos_pos *pos)
{
	struct rot_limit_table *limit_tbl = rot->limit_tbl;
	struct rot_limit *limit;
	u32 mask, value;

	/* Get size limit */
	if (fmt == DRM_FORMAT_XRGB8888)
		limit = &limit_tbl->rgb888;
	else
		limit = &limit_tbl->ycbcr420_2p;

	/* Get mask for rounding to nearest aligned value */
	mask = ~((1 << limit->align) - 1);

	/* Set aligned width */
	value = ROT_ALIGN(pos->w, limit->align, mask);
	if (value < limit->min_w)
		pos->w = ROT_MIN(limit->min_w, mask);
	else if (value > limit->max_w)
		pos->w = ROT_MAX(limit->max_w, mask);
	else
		pos->w = value;

	/* Set aligned height */
	value = ROT_ALIGN(pos->h, limit->align, mask);
	if (value < limit->min_h)
		pos->h = ROT_MIN(limit->min_h, mask);
	else if (value > limit->max_h)
		pos->h = ROT_MAX(limit->max_h, mask);
	else
		pos->h = value;
}