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; }
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; }