Skip to content

Commit

Permalink
OMAP: DSS2: Clean up DISPC color mode validation checks
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Archit Taneja authored and Tomi Valkeinen committed Jan 10, 2011
1 parent ac1427e commit 8dad2ab
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 48 deletions.
53 changes: 5 additions & 48 deletions drivers/video/omap2/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand All @@ -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;
Expand Down
7 changes: 7 additions & 0 deletions drivers/video/omap2/dss/dss_features.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
2 changes: 2 additions & 0 deletions drivers/video/omap2/dss/dss_features.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 8dad2ab

Please sign in to comment.