diff options
Diffstat (limited to 'drivers/gpu/drm/drm_edid.c')
| -rw-r--r-- | drivers/gpu/drm/drm_edid.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 5c9f79877cbf..defcaf108460 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -911,23 +911,27 @@ static int drm_cvt_modes(struct drm_connector *connector, | |||
| 911 | struct drm_device *dev = connector->dev; | 911 | struct drm_device *dev = connector->dev; |
| 912 | struct cvt_timing *cvt; | 912 | struct cvt_timing *cvt; |
| 913 | const int rates[] = { 60, 85, 75, 60, 50 }; | 913 | const int rates[] = { 60, 85, 75, 60, 50 }; |
| 914 | const u8 empty[3] = { 0, 0, 0 }; | ||
| 914 | 915 | ||
| 915 | for (i = 0; i < 4; i++) { | 916 | for (i = 0; i < 4; i++) { |
| 916 | int uninitialized_var(width), height; | 917 | int uninitialized_var(width), height; |
| 917 | cvt = &(timing->data.other_data.data.cvt[i]); | 918 | cvt = &(timing->data.other_data.data.cvt[i]); |
| 918 | 919 | ||
| 919 | height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 8) + 1) * 2; | 920 | if (!memcmp(cvt->code, empty, 3)) |
| 920 | switch (cvt->code[1] & 0xc0) { | 921 | continue; |
| 922 | |||
| 923 | height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 4) + 1) * 2; | ||
| 924 | switch (cvt->code[1] & 0x0c) { | ||
| 921 | case 0x00: | 925 | case 0x00: |
| 922 | width = height * 4 / 3; | 926 | width = height * 4 / 3; |
| 923 | break; | 927 | break; |
| 924 | case 0x40: | 928 | case 0x04: |
| 925 | width = height * 16 / 9; | 929 | width = height * 16 / 9; |
| 926 | break; | 930 | break; |
| 927 | case 0x80: | 931 | case 0x08: |
| 928 | width = height * 16 / 10; | 932 | width = height * 16 / 10; |
| 929 | break; | 933 | break; |
| 930 | case 0xc0: | 934 | case 0x0c: |
| 931 | width = height * 15 / 9; | 935 | width = height * 15 / 9; |
| 932 | break; | 936 | break; |
| 933 | } | 937 | } |
