OMAP: DSS2: Clean up DISPC color mode validation checks
The supported set of color modes varies for different DISPC pipelines(plane) and omap version. This makes the checks for validation of a color mode more complicated as new omap versions are added. A dss_feature function is created which tells if a color_mode is supported for a plane on the current omap revision. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
This commit is contained in:
parent
ac1427e13b
commit
8dad2ab672
3 changed files with 14 additions and 48 deletions
|
@ -1550,29 +1550,12 @@ static int _dispc_setup_plane(enum omap_plane plane,
|
|||
height, pos_y, out_height);
|
||||
}
|
||||
|
||||
if (!dss_feat_color_mode_supported(plane, color_mode))
|
||||
return -EINVAL;
|
||||
|
||||
if (plane == OMAP_DSS_GFX) {
|
||||
if (width != out_width || height != out_height)
|
||||
return -EINVAL;
|
||||
|
||||
switch (color_mode) {
|
||||
case OMAP_DSS_COLOR_ARGB16:
|
||||
case OMAP_DSS_COLOR_ARGB32:
|
||||
case OMAP_DSS_COLOR_RGBA32:
|
||||
if (!dss_has_feature(FEAT_GLOBAL_ALPHA))
|
||||
return -EINVAL;
|
||||
case OMAP_DSS_COLOR_RGBX32:
|
||||
if (cpu_is_omap24xx())
|
||||
return -EINVAL;
|
||||
/* fall through */
|
||||
case OMAP_DSS_COLOR_RGB12U:
|
||||
case OMAP_DSS_COLOR_RGB16:
|
||||
case OMAP_DSS_COLOR_RGB24P:
|
||||
case OMAP_DSS_COLOR_RGB24U:
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
/* video plane */
|
||||
|
||||
|
@ -1586,35 +1569,9 @@ static int _dispc_setup_plane(enum omap_plane plane,
|
|||
out_height > height * 8)
|
||||
return -EINVAL;
|
||||
|
||||
switch (color_mode) {
|
||||
case OMAP_DSS_COLOR_RGBX32:
|
||||
case OMAP_DSS_COLOR_RGB12U:
|
||||
if (cpu_is_omap24xx())
|
||||
return -EINVAL;
|
||||
/* fall through */
|
||||
case OMAP_DSS_COLOR_RGB16:
|
||||
case OMAP_DSS_COLOR_RGB24P:
|
||||
case OMAP_DSS_COLOR_RGB24U:
|
||||
break;
|
||||
|
||||
case OMAP_DSS_COLOR_ARGB16:
|
||||
case OMAP_DSS_COLOR_ARGB32:
|
||||
case OMAP_DSS_COLOR_RGBA32:
|
||||
if (!dss_has_feature(FEAT_GLOBAL_ALPHA))
|
||||
return -EINVAL;
|
||||
if (!dss_has_feature(FEAT_GLOBAL_ALPHA_VID1) &&
|
||||
plane == OMAP_DSS_VIDEO1)
|
||||
return -EINVAL;
|
||||
break;
|
||||
|
||||
case OMAP_DSS_COLOR_YUV2:
|
||||
case OMAP_DSS_COLOR_UYVY:
|
||||
if (color_mode == OMAP_DSS_COLOR_YUV2 ||
|
||||
color_mode == OMAP_DSS_COLOR_UYVY)
|
||||
cconv = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Must use 5-tap filter? */
|
||||
five_taps = height > out_height * 2;
|
||||
|
|
|
@ -179,6 +179,13 @@ enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane)
|
|||
return omap_current_dss_features->supported_color_modes[plane];
|
||||
}
|
||||
|
||||
bool dss_feat_color_mode_supported(enum omap_plane plane,
|
||||
enum omap_color_mode color_mode)
|
||||
{
|
||||
return omap_current_dss_features->supported_color_modes[plane] &
|
||||
color_mode;
|
||||
}
|
||||
|
||||
/* DSS has_feature check */
|
||||
bool dss_has_feature(enum dss_feat_id id)
|
||||
{
|
||||
|
|
|
@ -44,6 +44,8 @@ int dss_feat_get_num_mgrs(void);
|
|||
int dss_feat_get_num_ovls(void);
|
||||
enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel);
|
||||
enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane);
|
||||
bool dss_feat_color_mode_supported(enum omap_plane plane,
|
||||
enum omap_color_mode color_mode);
|
||||
|
||||
bool dss_has_feature(enum dss_feat_id id);
|
||||
void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 *end);
|
||||
|
|
Loading…
Reference in a new issue