diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-05-04 10:27:53 +0300 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-06-02 10:57:23 +0300 |
commit | 18c0d6217a4898b9cae1b999e0dd37f8239ba0ae (patch) | |
tree | 4570f702f9937ad113d06d3e8684e78c2e3c3018 /drivers/gpu/drm/omapdrm/dss/dss_features.c | |
parent | 22245f531a769164402f4e63f1f1e18de981aff3 (diff) |
drm/omap: change supported_modes to an array
enum omap_color_mode is a bitmask, so at the moment we present the
supported color modes as mask. To be able to move to fourccs, we need to
use an array to present the supported color modes.
As a first step towards fourccs, this patch changes the code to use an
array to store the enums.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/dss_features.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dss_features.c | 153 |
1 files changed, 88 insertions, 65 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dss_features.c b/drivers/gpu/drm/omapdrm/dss/dss_features.c index bdac1d645ef0..f9b0324cc263 100644 --- a/drivers/gpu/drm/omapdrm/dss/dss_features.c +++ b/drivers/gpu/drm/omapdrm/dss/dss_features.c @@ -47,7 +47,7 @@ struct omap_dss_features { const int num_ovls; const enum omap_display_type *supported_displays; const enum omap_dss_output_id *supported_outputs; - const enum omap_color_mode *supported_color_modes; + const enum omap_color_mode **supported_color_modes; const enum omap_overlay_caps *overlay_caps; const struct dss_param_range *dss_params; @@ -229,90 +229,104 @@ static const enum omap_dss_output_id omap5_dss_supported_outputs[] = { OMAP_DSS_OUTPUT_DSI2, }; -static const enum omap_color_mode omap2_dss_supported_color_modes[] = { +#define COLOR_ARRAY(arr...) (const enum omap_color_mode[]) { arr, 0 } + +static const enum omap_color_mode *omap2_dss_supported_color_modes[] = { + /* OMAP_DSS_GFX */ - OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_RGB16 | - OMAP_DSS_COLOR_RGB24U | OMAP_DSS_COLOR_RGB24P, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB12U, OMAP_DSS_COLOR_RGB16, + OMAP_DSS_COLOR_RGB24U, OMAP_DSS_COLOR_RGB24P), /* OMAP_DSS_VIDEO1 */ - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_YUV2 | - OMAP_DSS_COLOR_UYVY, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_YUV2, + OMAP_DSS_COLOR_UYVY), /* OMAP_DSS_VIDEO2 */ - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_YUV2 | - OMAP_DSS_COLOR_UYVY, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_YUV2, + OMAP_DSS_COLOR_UYVY), }; -static const enum omap_color_mode omap3_dss_supported_color_modes[] = { +static const enum omap_color_mode *omap3_dss_supported_color_modes[] = { /* OMAP_DSS_GFX */ - OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_ARGB16 | - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_ARGB32 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB12U, OMAP_DSS_COLOR_ARGB16, + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_ARGB32, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_RGBX32), /* OMAP_DSS_VIDEO1 */ - OMAP_DSS_COLOR_RGB24U | OMAP_DSS_COLOR_RGB24P | - OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_RGB16 | - OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_UYVY, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB24U, OMAP_DSS_COLOR_RGB24P, + OMAP_DSS_COLOR_RGB12U, OMAP_DSS_COLOR_RGB16, + OMAP_DSS_COLOR_YUV2, OMAP_DSS_COLOR_UYVY), /* OMAP_DSS_VIDEO2 */ - OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_ARGB16 | - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_YUV2 | - OMAP_DSS_COLOR_UYVY | OMAP_DSS_COLOR_ARGB32 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB12U, OMAP_DSS_COLOR_ARGB16, + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_YUV2, + OMAP_DSS_COLOR_UYVY, OMAP_DSS_COLOR_ARGB32, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_RGBX32), }; -static const enum omap_color_mode omap4_dss_supported_color_modes[] = { +static const enum omap_color_mode *omap4_dss_supported_color_modes[] = { /* OMAP_DSS_GFX */ - OMAP_DSS_COLOR_RGB12U | OMAP_DSS_COLOR_ARGB16 | - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_ARGB32 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32 | - OMAP_DSS_COLOR_ARGB16_1555 | OMAP_DSS_COLOR_RGBX16 | - OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_XRGB16_1555, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB12U, OMAP_DSS_COLOR_ARGB16, + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_ARGB32, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_RGBX32, + OMAP_DSS_COLOR_ARGB16_1555, OMAP_DSS_COLOR_RGBX16, + OMAP_DSS_COLOR_RGBA16, OMAP_DSS_COLOR_XRGB16_1555), /* OMAP_DSS_VIDEO1 */ - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | - OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | - OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | - OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | - OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | - OMAP_DSS_COLOR_RGBX32, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB12U, + OMAP_DSS_COLOR_YUV2, OMAP_DSS_COLOR_ARGB16_1555, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_NV12, + OMAP_DSS_COLOR_RGBA16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_UYVY, + OMAP_DSS_COLOR_ARGB16, OMAP_DSS_COLOR_XRGB16_1555, + OMAP_DSS_COLOR_ARGB32, OMAP_DSS_COLOR_RGBX16, + OMAP_DSS_COLOR_RGBX32), /* OMAP_DSS_VIDEO2 */ - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | - OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | - OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | - OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | - OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | - OMAP_DSS_COLOR_RGBX32, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB12U, + OMAP_DSS_COLOR_YUV2, OMAP_DSS_COLOR_ARGB16_1555, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_NV12, + OMAP_DSS_COLOR_RGBA16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_UYVY, + OMAP_DSS_COLOR_ARGB16, OMAP_DSS_COLOR_XRGB16_1555, + OMAP_DSS_COLOR_ARGB32, OMAP_DSS_COLOR_RGBX16, + OMAP_DSS_COLOR_RGBX32), /* OMAP_DSS_VIDEO3 */ - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | - OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | - OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | - OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | - OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | - OMAP_DSS_COLOR_RGBX32, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB12U, + OMAP_DSS_COLOR_YUV2, OMAP_DSS_COLOR_ARGB16_1555, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_NV12, + OMAP_DSS_COLOR_RGBA16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_UYVY, + OMAP_DSS_COLOR_ARGB16, OMAP_DSS_COLOR_XRGB16_1555, + OMAP_DSS_COLOR_ARGB32, OMAP_DSS_COLOR_RGBX16, + OMAP_DSS_COLOR_RGBX32), /* OMAP_DSS_WB */ - OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | - OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | - OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U | - OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | - OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | - OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | - OMAP_DSS_COLOR_RGBX32, + COLOR_ARRAY( + OMAP_DSS_COLOR_RGB16, OMAP_DSS_COLOR_RGB12U, + OMAP_DSS_COLOR_YUV2, OMAP_DSS_COLOR_ARGB16_1555, + OMAP_DSS_COLOR_RGBA32, OMAP_DSS_COLOR_NV12, + OMAP_DSS_COLOR_RGBA16, OMAP_DSS_COLOR_RGB24U, + OMAP_DSS_COLOR_RGB24P, OMAP_DSS_COLOR_UYVY, + OMAP_DSS_COLOR_ARGB16, OMAP_DSS_COLOR_XRGB16_1555, + OMAP_DSS_COLOR_ARGB32, OMAP_DSS_COLOR_RGBX16, + OMAP_DSS_COLOR_RGBX32), }; static const enum omap_overlay_caps omap2_dss_overlay_caps[] = { @@ -783,7 +797,7 @@ enum omap_dss_output_id dss_feat_get_supported_outputs(enum omap_channel channel return omap_current_dss_features->supported_outputs[channel]; } -enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane_id plane) +const enum omap_color_mode *dss_feat_get_supported_color_modes(enum omap_plane_id plane) { return omap_current_dss_features->supported_color_modes[plane]; } @@ -796,8 +810,17 @@ enum omap_overlay_caps dss_feat_get_overlay_caps(enum omap_plane_id plane) bool dss_feat_color_mode_supported(enum omap_plane_id plane, enum omap_color_mode color_mode) { - return omap_current_dss_features->supported_color_modes[plane] & - color_mode; + const enum omap_color_mode *modes; + unsigned int i; + + modes = omap_current_dss_features->supported_color_modes[plane]; + + for (i = 0; modes[i]; ++i) { + if (modes[i] == color_mode) + return true; + } + + return false; } u32 dss_feat_get_buffer_size_unit(void) |