rockowitz / ddcutil

Control monitor settings using DDC/CI and USB
http://www.ddcutil.com
GNU General Public License v2.0
948 stars 38 forks source link

Electricq 24 inch monitor - brightness works but getvcp range doesn't match OSD range #200

Open taprobane99 opened 3 years ago

taprobane99 commented 3 years ago

Hi,

I'm using ddcutil-git AUR built today, kernel 5.11.6, and my Electricq monitor connected via a usb-C to Displayport cable. Brightness control works but an OSD range of 0...100 corresponds to 0...31 via getvcp. OSD values less than around 35 are read as 0.

Other parameters look wrong too, but I would like to get brightness working first.

The monitor does have DCR and HDR but both are turned off. There is no DDC/CI entry on the OSD.

I attach a table of OSD values (left column) to getvcp values (right column). Also I attach getvcpall. Hopefully you can assist?

0 0 5 0 10 0 15 0 20 0 25 0 30 0 35 2 40 4 45 7 50 9 55 11 60 13 65 16 70 18 75 20 80 22 85 25 90 27 95 29 100 31

VCP code 0x02 (New control value             ): No new control values (0x01)
VCP code 0x0b (Color temperature increment   ): 100 degree(s) Kelvin
VCP code 0x0c (Color temperature request     ): 3000 + 10 * (feature 0B color temp increment) degree(s) Kelvin
VCP code 0x10 (Brightness                    ): current value =    31, max value =   100
VCP code 0x12 (Contrast                      ): current value =     0, max value =   100
VCP code 0x14 (Select color preset           ): sRGB (0x01), Tolerance: Unspecified (0x00)
VCP code 0x16 (Video gain: Red               ): current value =    50, max value =   100
VCP code 0x18 (Video gain: Green             ): current value =   100, max value =   100
VCP code 0x1a (Video gain: Blue              ): current value =    54, max value =   100
VCP code 0x1e (Auto setup                    ): Auto setup not active (sl=0x00)
VCP code 0x20 (Horizontal Position (Phase)   ): current value =     0, max value =   100
VCP code 0x30 (Vertical Position (Phase)     ): current value =     0, max value =   100
VCP code 0x52 (Active control                ): Value: 0x00
VCP code 0x60 (Input Source                  ): Invalid value (sl=0x00)
VCP code 0x62 (Audio speaker volume          ): Volume level: 50 (00x32)
VCP code 0x6c (Video black level: Red        ): current value =    80, max value =   100
VCP code 0x6e (Video black level: Green      ): current value =    80, max value =   100
VCP code 0x70 (Video black level: Blue       ): current value =    80, max value =   100
VCP code 0x7e (Trapezoid                     ): Maximum retries exceeded
VCP code 0x87 (Sharpness                     ): current value =     2, max value =     4
VCP code 0xac (Horizontal frequency          ): 2 hz
VCP code 0xae (Vertical frequency            ): 60.00 hz
VCP code 0xb2 (Flat panel sub-pixel layout   ): Red/Green/Blue vertical stripe (sl=0x01)
VCP code 0xb6 (Display technology type       ): LCD (active matrix) (sl=0x03)
VCP code 0xc6 (Application enable key        ): 0x005a
VCP code 0xc8 (Display controller type       ): Mfg: RealTek (sl=0x09), controller number: mh=0x00, ml=0x00, sh=0x00
VCP code 0xc9 (Display firmware level        ): 0.1
VCP code 0xca (OSD/Button Control            ): OSD disabled, button events enabled (sl=0x01), Host control of power unsupported (sh=0x00)
VCP code 0xcc (OSD Language                  ): English (sl=0x02)
VCP code 0xd6 (Power mode                    ): DPM: On,  DPMS: Off (sl=0x01)
VCP code 0xdf (VCP Version                   ): 2.2
taprobane99 commented 3 years ago

I would add that at the moment I am loading i2c-dev after I am in the desktop with modprobe i2c-dev. Hope that isn't affecting anything.

rockowitz commented 3 years ago

Strange monitor you've got there. There's not much ddcutil can do if the current and maximum values the monitor reports using DDC/CI differ from those in the OSD. It seems you've got a situation reminiscent of, though more extreme than, that discussed in #121. Is there a discernable difference in brightness if you set the value to 0 vs 30 in the OSD?

Please run "ddcutil interrogate" as root and send the output as an attachment. That makes lots of specific questions unnecessary.

Other things I notice.

The value of feature x60 is x00, which is invalid. If the input source is one of the DP devices, the value should be x0F (DisplayPort-1) or X10 (DisplayPort-2).

The value of feature xAC (Horizontal Frequency) is nonsense.

The value of feature xCA (OSD Disabled) does not make sense, since you can use the OSD. "Button events enabled" simply indicates that under certain circumstances the monitor reports that a feature has been changed using the OSD by using features X02 (New control value) and X52 (Active control). It's simply a way for the monitor to tell the host that "uh, you might want to check the value for a particular feature, it might have changed."

rockowitz commented 3 years ago

When you load i2c-dev is immaterial, so long as it is loaded before ddcutil executes.

taprobane99 commented 3 years ago

Yes it is quite a curious monitor. I believe it's made by a company called Meirun in China and then rebadged by a general appliances seller in Europe. The EDID manufacturer is WAM, whom I've never heard of, and the serial number is demoset-1!

ddcutil interrogate attached.

The OSD is fully functional, and 0...35 steps turn up the brightness as expected. It's just that all of them are read as 0 via DDC.

ddcutilinterrogate_electricq24.txt

taprobane99 commented 3 years ago

A further detail. Contrast is always read as 0 for an OSD value of 0...100. If I set contrast up a step to 1 via setvcp it goes to 224 on the OSD giving a very low contrast image that nobody would normally choose. I can then use the OSD to move it back down to the normal range.

Also, is it possible to damage a monitor by sending out of range contrast or brightness values?

rockowitz commented 3 years ago

Re damaging a monitor, all I can say is that I haven't heard of a case where that has happened by toying with monitor settings. It is possible to put the monitor into a strange state, but resetting the monitor to factory defaults (either using the OSD or ddcutil) should solve the problem.

rockowitz commented 3 years ago

I have added your monitor to the monitor information page in the ddcutil documentation.