.. | .. |
---|
5948 | 5948 | static u8 drm_mode_cea_vic(const struct drm_connector *connector, |
---|
5949 | 5949 | const struct drm_display_mode *mode) |
---|
5950 | 5950 | { |
---|
5951 | | - u8 vic; |
---|
5952 | | - |
---|
5953 | 5951 | /* |
---|
5954 | 5952 | * HDMI spec says if a mode is found in HDMI 1.4b 4K modes |
---|
5955 | 5953 | * we should send its VIC in vendor infoframes, else send the |
---|
.. | .. |
---|
5959 | 5957 | if (drm_mode_hdmi_vic(connector, mode)) |
---|
5960 | 5958 | return 0; |
---|
5961 | 5959 | |
---|
5962 | | - vic = drm_match_cea_mode(mode); |
---|
| 5960 | + return drm_match_cea_mode(mode); |
---|
| 5961 | +} |
---|
5963 | 5962 | |
---|
5964 | | - /* |
---|
5965 | | - * HDMI 1.4 VIC range: 1 <= VIC <= 64 (CEA-861-D) but |
---|
5966 | | - * HDMI 2.0 VIC range: 1 <= VIC <= 107 (CEA-861-F). So we |
---|
5967 | | - * have to make sure we dont break HDMI 1.4 sinks. |
---|
5968 | | - */ |
---|
| 5963 | +/* |
---|
| 5964 | + * Avoid sending VICs defined in HDMI 2.0 in AVI infoframes to sinks that |
---|
| 5965 | + * conform to HDMI 1.4. |
---|
| 5966 | + * |
---|
| 5967 | + * HDMI 1.4 (CTA-861-D) VIC range: [1..64] |
---|
| 5968 | + * HDMI 2.0 (CTA-861-F) VIC range: [1..107] |
---|
| 5969 | + */ |
---|
| 5970 | +static u8 vic_for_avi_infoframe(const struct drm_connector *connector, u8 vic) |
---|
| 5971 | +{ |
---|
5969 | 5972 | if (!is_hdmi2_sink(connector) && vic > 64) |
---|
5970 | 5973 | return 0; |
---|
5971 | 5974 | |
---|
.. | .. |
---|
6041 | 6044 | picture_aspect = HDMI_PICTURE_ASPECT_NONE; |
---|
6042 | 6045 | } |
---|
6043 | 6046 | |
---|
6044 | | - frame->video_code = vic; |
---|
| 6047 | + frame->video_code = vic_for_avi_infoframe(connector, vic); |
---|
6045 | 6048 | frame->picture_aspect = picture_aspect; |
---|
6046 | 6049 | frame->active_aspect = HDMI_ACTIVE_ASPECT_PICTURE; |
---|
6047 | 6050 | frame->scan_mode = HDMI_SCAN_MODE_UNDERSCAN; |
---|