gen_default_modes: Consider reduced blanking with lower pixelclock
Some panels only support fixed resolutions and fixed refresh rate with reduced blanking: Established Timings I & II: none Standard Timings: none Detailed Timing Descriptors: DTD 1: 2560x1600 120.001823 Hz 8:5 203.283 kHz 552.930000 MHz (345 mm x 215 mm) Hfront 48 Hsync 32 Hback 80 Hpol P Vfront 3 Vsync 6 Vback 85 Vpol N DTD 2: 2560x1600 48.000295 Hz 8:5 81.312 kHz 221.170000 MHz (345 mm x 215 mm) Hfront 48 Hsync 32 Hback 80 Hpol P Vfront 3 Vsync 6 Vback 85 Vpol N ... Minimum Pixel Clock: 552922 kHz Maximum Pixel Clock: 552922 kHz When using mirror mode, resolutions like 2560x1440 120Hz can be too high to meet the pixelclock limitation, so 2560x1440 90Hz is selected instead. However, the panel only supports 120Hz so using 90Hz result to failed mode set. So add reduced blanking to fallback mode, so correct refresh rate can be used. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3449>
This commit is contained in:
parent
237e505cc7
commit
8e58aa46ac
1 changed files with 23 additions and 4 deletions
|
@ -17,6 +17,7 @@
|
|||
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: %s [output file]"%sys.argv[0])
|
||||
|
@ -91,7 +92,7 @@ def drm_mode_info_from_modeline(line):
|
|||
|
||||
def portrait_drm_mode_info_from_modeline(line):
|
||||
sline = line.split()
|
||||
return "{ %d, %d, %d, %d, %d, 0, %d, %d, %d, %d, 0, 0, %s, DRM_MODE_TYPE_DEFAULT, \"%dx%d_%s }," % \
|
||||
return "{ %d, %d, %d, %d, %d, 0, %d, %d, %d, %d, 0, 0, %s, DRM_MODE_TYPE_DEFAULT, \"%dx%d%s\" }," % \
|
||||
(int(float(sline[2]) * 1000),
|
||||
int(sline[7]),
|
||||
int(sline[8]),
|
||||
|
@ -102,15 +103,24 @@ def portrait_drm_mode_info_from_modeline(line):
|
|||
int(sline[5]),
|
||||
int(sline[6]),
|
||||
sync_flags(sline[12], sline[11]),
|
||||
int(sline[7]), int(sline[3]), sline[1].split("_")[1])
|
||||
int(sline[7]), int(sline[3]), re.match(r'^"[0-9]+x[0-9]+(.*)"$', sline[1]).group(1))
|
||||
|
||||
for resolution in common_resolutions:
|
||||
for refresh_rate in common_refresh_rates:
|
||||
cvt = os.popen("%s %s %s %s" % ('cvt', resolution[0], resolution[1], refresh_rate))
|
||||
cvt.readline() # discard comment line
|
||||
line = cvt.readline()
|
||||
output_lines.append(drm_mode_info_from_modeline(line))
|
||||
cvt.close()
|
||||
|
||||
if refresh_rate % 60 == 0:
|
||||
cvt_rb = os.popen("%s %s %s %s %s" % ('cvt', '-r', resolution[0], resolution[1], refresh_rate))
|
||||
cvt_rb.readline() # discard comment line
|
||||
line_rb = cvt_rb.readline()
|
||||
output_lines.append(drm_mode_info_from_modeline(line_rb))
|
||||
cvt_rb.close()
|
||||
|
||||
output_lines.append(drm_mode_info_from_modeline(line))
|
||||
|
||||
output_lines.append("};")
|
||||
|
||||
output_lines.append("")
|
||||
|
@ -120,8 +130,17 @@ for resolution in common_resolutions:
|
|||
cvt = os.popen("%s %s %s %s" % ('cvt', resolution[0], resolution[1], refresh_rate))
|
||||
cvt.readline() # discard comment line
|
||||
line = cvt.readline()
|
||||
output_lines.append(portrait_drm_mode_info_from_modeline(line))
|
||||
cvt.close()
|
||||
|
||||
if refresh_rate % 60 == 0:
|
||||
cvt_rb = os.popen("%s %s %s %s %s" % ('cvt', '-r', resolution[0], resolution[1], refresh_rate))
|
||||
cvt_rb.readline() # discard comment line
|
||||
line_rb = cvt_rb.readline()
|
||||
output_lines.append(portrait_drm_mode_info_from_modeline(line_rb))
|
||||
cvt_rb.close()
|
||||
|
||||
output_lines.append(portrait_drm_mode_info_from_modeline(line))
|
||||
|
||||
output_lines.append("};")
|
||||
|
||||
try:
|
||||
|
|
Loading…
Reference in a new issue