Make monitor firmware advertise recommended resolution lower than max

258 views Asked by At

PC Monitors advertise a list of supported resolutions to the PC. Usually, the PC picks the highest resolution as default or recommended, at least on Windows.

I have one type of Monitor that advertises resolutions up to 1920x1200, but has a lower physical resolution. If you attempt to use a resolution higher than physical, it just downscales the image.

I wonder if there is a way to make the firmware advertise the correct reccommended (physical) resolution, while retaining the possible higher resolutions. Can you do this in EDID/DDC (or whatever the protocol for this is), or do you have to write a monitor driver? I just need to know if it is possible.

(For context, my company is the monitor manufacturer, I'm not just a user, and we have access to the firmware source.)

1

There are 1 answers

0
Florian Castellane On

from an EDID standard document:

"The first descriptor block shall be used to indicate the display's preferred timing mode."

It looks like in EDID the monitor is giving a hint so as to what mode should be preferred. So yes it is possible in EDID if you override the one the monitor is sending.

For example on this monitor (which, funnily, does not advertise its native resolution):

cat /sys/class/drm/card0-DP-2/edid | parse-edid 
Checksum Correct

Section "Monitor"
    Identifier "EX-LDQ241D"
    ModelName "EX-LDQ241D"
    VendorName "IOD"
    # Monitor Manufactured week 14 of 2018
    # EDID version 1.3
    # Digital Display
    DisplaySize 530 300
    Gamma 2.20
    Option "DPMS" "true"
    Horizsync 15-96
    VertRefresh 24-90
    # Maximum pixel clock is 300MHz
    #Not giving standard mode: 1280x1024, 60Hz
    #Not giving standard mode: 2048x1152, 60Hz
    #Not giving standard mode: 1280x720, 60Hz
    #Not giving standard mode: 1600x900, 60Hz

    #Extension block found. Parsing...
#WARNING: I may have missed a mode (CEA mode 86)
#WARNING: I may have missed a mode (CEA mode 87)
#WARNING: I may have missed a mode (CEA mode 88)
#WARNING: I may have missed a mode (CEA mode 90)
    Modeline    "Mode 1" 25.200 640 656 752 800 480 490 492 525 -hsync -vsync
    Modeline    "Mode 0" +hsync -vsync 
    Modeline    "Mode 2" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
    Modeline    "Mode 3" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
    Modeline    "Mode 4" 74.250 1280 1390 1420 1650 720 725 730 750 +hsync +vsync
    Modeline    "Mode 5" 74.250 1920 2008 2052 2200 1080 1082 1087 1125 +hsync +vsync interlace
    Modeline    "Mode 6" 27.027 1440 1478 1602 1716 480 484 487 525 -hsync -vsync interlace
    Modeline    "Mode 7" 27.027 1440 1478 1602 1716 480 484 487 525 -hsync -vsync interlace
    Modeline    "Mode 8" 148.500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
    Modeline    "Mode 9" 74.250 1920 2558 2602 2750 1080 1084 1089 1125 +hsync +vsync
    Modeline    "Mode 10" 74.250 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
    Modeline    "Mode 11" +hsync -vsync 
    Modeline    "Mode 12" +hsync +vsync 
    Modeline    "Mode 13" +hsync +vsync interlace
    Option "PreferredMode" "Mode 1"
EndSection

You can see a "PreferredMode" entry to Mode 1 at the end.