mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 15:27:29 +00:00
drm: add helper to validate YCBCR420 modes
YCBCR420 modes are supported only on HDMI 2.0 capable sources. This patch adds: - A drm helper to validate YCBCR420-only mode on a particular connector. This function will help pruning the YCBCR420-only modes from the connector's modelist. - A bool variable (ycbcr_420_allowed) in the drm connector structure. While handling the EDID from HDMI 2.0 sinks, its important to know if the source is capable of handling YCBCR420 output, so that no YCBCR 420 modes will be listed for sources which can't handle it. A driver should set this variable if it wants to see YCBCR420 modes in the modedb. V5: Introduced the patch in series. V6: Squashed two patches (validate YCBCR420 and add YCBCR420 identifier) V7: Addressed review comments from Vile: - Move this patch before we add 420 modes from EDID. - No need for drm_valid_cea_vic() check, function back to non-static. - Update MODE_STATUS with NO_420 condition. - Introduce y420_vdb_modes variable in this patch Cc: Ville Syrjala <ville.syrjala@linux.intel.com> Signed-off-by: Shashank Sharma <shashank.sharma@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1499960000-9232-6-git-send-email-shashank.sharma@intel.com [vsyrjala: Drop the now bogus EXPORT_SYMBOL(drm_valid_cea_vic)] Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
This commit is contained in:
parent
87563fc030
commit
d85231530b
4 changed files with 55 additions and 0 deletions
|
@ -1083,6 +1083,34 @@ drm_mode_validate_size(const struct drm_display_mode *mode,
|
|||
}
|
||||
EXPORT_SYMBOL(drm_mode_validate_size);
|
||||
|
||||
/**
|
||||
* drm_mode_validate_ycbcr420 - add 'ycbcr420-only' modes only when allowed
|
||||
* @mode: mode to check
|
||||
* @connector: drm connector under action
|
||||
*
|
||||
* This function is a helper which can be used to filter out any YCBCR420
|
||||
* only mode, when the source doesn't support it.
|
||||
*
|
||||
* Returns:
|
||||
* The mode status
|
||||
*/
|
||||
enum drm_mode_status
|
||||
drm_mode_validate_ycbcr420(const struct drm_display_mode *mode,
|
||||
struct drm_connector *connector)
|
||||
{
|
||||
u8 vic = drm_match_cea_mode(mode);
|
||||
enum drm_mode_status status = MODE_OK;
|
||||
struct drm_hdmi_info *hdmi = &connector->display_info.hdmi;
|
||||
|
||||
if (test_bit(vic, hdmi->y420_vdb_modes)) {
|
||||
if (!connector->ycbcr_420_allowed)
|
||||
status = MODE_NO_420;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_mode_validate_ycbcr420);
|
||||
|
||||
#define MODE_STATUS(status) [MODE_ ## status + 3] = #status
|
||||
|
||||
static const char * const drm_mode_status_names[] = {
|
||||
|
@ -1122,6 +1150,7 @@ static const char * const drm_mode_status_names[] = {
|
|||
MODE_STATUS(ONE_SIZE),
|
||||
MODE_STATUS(NO_REDUCED),
|
||||
MODE_STATUS(NO_STEREO),
|
||||
MODE_STATUS(NO_420),
|
||||
MODE_STATUS(STALE),
|
||||
MODE_STATUS(BAD),
|
||||
MODE_STATUS(ERROR),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue