Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to control BenQ GL2250HM monitor #115

Open
arnoldas-jasonas opened this issue Mar 24, 2020 · 4 comments
Open

Unable to control BenQ GL2250HM monitor #115

arnoldas-jasonas opened this issue Mar 24, 2020 · 4 comments
Labels
benq i915 open source i915 driver monitor specific problems with particular monitors

Comments

@arnoldas-jasonas
Copy link

Hi,

I'm running into an issue, where I can't control this BenQ monitor with ddcutil.

The monitor has 2 connected inputs DVI and HDMI. DVI is connected to the motherboard's integrated graphics card and HDMI to gtx 1060, which I'm using exclusively in a window VM with PCI pass-through. The main host is running ubuntu 16.04. Hence, I'm looking for software switch that I could switch inputs on my monitor.

DDC/CI is mentioned in monitor's manual as supported and is enabled in on-screen settings.

What I've done so far to debug this - picked up 0.9.8 release and compiled it (as it wasn't available in systems packages). The basic when I run detect command:

$ ./build/bin/ddcutil detect
Invalid display
   I2C bus:             /dev/i2c-2
   EDID synopsis:
      Mfg id:           BNQ
      Model:            BenQ GL2250H
      Serial number:    ABE02389019
      Manufacture year: 2014
      EDID version:     1.3
   DDC communication failed

Here are more verbose outputs that I could think of captured:
ddcutil-interrogate.txt
ddcutil-env-verbose.txt
ddcutil-getvcp-0x60.txt
ddcutil-getvcp-scan.txt

I've seen somewhere in these issues recommended softMCCS. I've tried on windows VM and it was able to detect the monitor correctly and change most settings as well as the input. To rule out DVI, I've also booted the machine to windows natively and tried this again and it was able to detect both inputs connected the same way to the PC and control each of them. In my mind, this likely rules out any possible hardware issues.

So, I'm a little bit lost now, not sure where to look next. I couldn't find any good documentation on DDC protocol for better understanding what is happening.

I'd appreciate any help :)

Thanks in advance,
Arnoldas

@rockowitz
Copy link
Owner

rockowitz commented Mar 24, 2020 via email

@rockowitz rockowitz added i915 open source i915 driver monitor specific problems with particular monitors labels Mar 24, 2020
@arnoldas-jasonas
Copy link
Author

Thanks a lot for detailed response. (Another long wall of text/logs incoming ...)

I managed to skim through few of the documents, but I'm still struggling with few concepts. Specifically, it's not quite clear to me how I2C bus is used to create DDC messages. I'll try to do more reading to understand this better. By the way, one of your links (https://app.box.com/s/vcocw3z73ta09txiskj7cnk6289j356b/file/93517210750/) seems to have died.

I don't have another monitor at the moment to test with i915 driver. However, I did try both outputs booted with live Ubuntu 18.04. I've also tried controlling the monitor via Raspberry Pi 3.

I've tried quite a few combinations and captured logs of almost everything. So, I hope you'll excuse me for far too many log files :) I thought it might be easier to ignore what is not relevant rather then trying to capture something again ...

What happens if you use
the Benq monitor on a Linux system with a driver other than i915?

First interesting observation - It seems to work all fine when controlling the monitor via dGPU using nouveau driver.

Second observation, it doesn't look like either DVI or HDMI inputs on the monitor are flawed in any way. I've tried swapping cables out (both are HDMI at the PC's end). Second time the HDMI input is connected to iGPU and it stops working, while DVI input connected to dGPU is functioning fine. Note, the OS was set to mirror displays and I was able to control it when either HDMI or DVI input was active.

Third, when running the same failing command multiple times, it seems to fail in different ways. Some examples with different run numbers below.

I've tried repeating the commands one after another with couple of seconds in between. In my mind, it would suggests that some kind of registers are not being reset correctly after a failure. I suppose the i915 drivers would be at fault here.

Interestingly enough, I did try the sleep multiplier at couple suggested values as well as at much larger ones, but it seems to fail similarly although obviously it takes noticeably longer.

So, it seems like both DVI and HDMI inputs on monitor side are functioning and it's likely iGPU drivers at fault. Do you have any more ideas of what I could try or look at? I was thinking whether it's possible to just do some kind of bit-banging on I2C directly without relying on the kernel side driver at all.

Here is a batch of logs:
i915 driver appears as i2c-18, and noveau dirver for nvidia card as i2c-6
Test 1, where iGPU is attached to DVI, and dGPU to HDMI
ddcutil-interrogate.txt
ddcutil-env-verbose.txt
Some working examples:
ddcutil-i2c-6-hdmi-getvcp-0x60.txt
ddcutil-i2c-6-hdmi-setvcp-0x60-0x11.txt
ddcutil-i2c-6-hdmi-setvcp-0x60-0x03.txt
And the requests going to DVI input via integrated graphics
ddcutil-i2c-18-dvi-getvcp-0x60_run1.txt
ddcutil-i2c-18-dvi-getvcp-0x60_run2.txt
Then, trying noverify flag couple times, you'll see different number of retries and failures with different error codes between runs:
ddcutil-i2c-18-dvi-setvcp-0x60-0x03_noverify_run1.txt
ddcutil-i2c-18-dvi-setvcp-0x60-0x03_noverify_run2.txt
ddcutil-i2c-18-dvi-setvcp-0x60-0x03_noverify_run3.txt
Testing out sleep multiplier, again couple times with different failures:
ddcutil-i2c-18-dvi-setvcp-0x60-0x03_sleep-8.0_run1.txt
ddcutil-i2c-18-dvi-setvcp-0x60-0x03_sleep-8.0_run2.txt
ddcutil-i2c-18-dvi-setvcp-0x60-0x03_sleep-8.0_run3.txt

Test 2, where iGPU is attached to HDMI and dGPU to DVI and then DVI input is fully functional:
ddcutil-interrogate.txt
ddcutil-env-verbose.txt
Functional DVI examples:
ddcutil-i2c-6-dvi-getvcp-0x60.txt
ddcutil-i2c-6-dvi-setvcp-0x60-0x03.txt
ddcutil-i2c-6-dvi-setvcp-0x60-0x11.txt
ddcutil-i2c-6-dvi-getvcp-0x10_run1.txt
ddcutil-i2c-6-dvi-getvcp-0x10_run2.txt
Tries for 0x10 and 0x60 registers, with sleep multiplier example and also repeated, to show different failures:
ddcutil-i2c-18-hdmi-getvcp-0x10_run1.txt
ddcutil-i2c-18-hdmi-getvcp-0x10_run2.txt
ddcutil-i2c-18-hdmi-getvcp-0x60_run1.txt
ddcutil-i2c-18-hdmi-getvcp-0x60_run2.txt
ddcutil-i2c-18-hdmi-setvcp-0x60-0x11_sleep-8.0_run1.txt
ddcutil-i2c-18-hdmi-setvcp-0x60-0x11_sleep-8.0_run2.txt

For completeness to isolate any combination of problems between PC and monitor, I've also tried on Raspberry Pi.

Funny enough, I could not get HDMI input to work, while it worked fine when connected (with the same cable) to DVI. I suspect it is a separate issue. Logs are here as well, but error codes seem different to me which probably points to a different Pi specific issue.

Connected to DVI:
ddcutil-interrogate.txt
ddcutil-env-verbose.txt
ddcutil-i2c2-dvi-getvcp-0x10_run1.txt
ddcutil-i2c2-dvi-getvcp-0x60_run1.txt
ddcutil-i2c2-dvi-setvcp-0x60_0x03_run1.txt
ddcutil-i2c2-dvi-setvcp-0x60_0x11_run1.txt
And connected to HDMI input:
ddcutil-interrogate.txt
ddcutil-i2c2-hdmi-getvcp-0x60_run2.txt
ddcutil-i2c2-hdmi-getvcp-0x60_run3.txt
ddcutil-i2c2-hdmi-setvcp-0x60_0x03_noverify_run1.txt
ddcutil-i2c2-hdmi-setvcp-0x60_0x03_noverify_run2.txt
ddcutil-i2c2-hdmi-setvcp-0x60_0x03_noverify_run3.txt
ddcutil-i2c2-hdmi-getvcp-0x10_run1.txt
ddcutil-i2c2-hdmi-getvcp-0x10_run2.txt
ddcutil-i2c2-hdmi-getvcp-0x10_run3.txt
ddcutil-i2c2-hdmi-getvcp-0x60_run1.txt
ddcutil-i2c2-hdmi-getvcp-0x10_sleep-4_run1.txt
ddcutil-i2c2-hdmi-getvcp-0x10_sleep-4_run2.txt
ddcutil-i2c2-hdmi-getvcp-0x10_sleep-4_run3.txt

And lastly,

Is there anything interesting in the softMCCS DDC/CI communication log?

Not really sure how to interpret the log. Seems like all messages are going through, but I am not sure what data is being printed in there. In this log I've tried adjusting the brightness and switched the input.
softMCCS_log.txt

I do appreciate your time and I hope it's not too much information to scan through. If I can present it somehow better, please do let me know. Likewise, if there is something specific I could dig in more better understand the problem - I'm happy to go away do my reading first.

Thanks,
Arnoldas

@rockowitz
Copy link
Owner

rockowitz commented Mar 27, 2020 via email

@rockowitz
Copy link
Owner

There have recently been 2 reports (by @slavov-viii on issue #125 and @kowalc0 on issue #67) that setting brightness (feature x10) fails on Benq and Lenovo monitors when Dynamic Contrast Range is enabled. I suggest you try disabling DCR and/or Low Blue Light and see if this affects your ability to set brightness using ddcutil.

@rockowitz rockowitz added the benq label Nov 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
benq i915 open source i915 driver monitor specific problems with particular monitors
Projects
None yet
Development

No branches or pull requests

2 participants