ddcutil icon indicating copy to clipboard operation
ddcutil copied to clipboard

patch inline: watch_displays_using_udev when it finds zero connected screens crashes

Open rastermann opened this issue 5 years ago • 12 comments

Asan found this baby:

=================================================================
==62810==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000007091 at pc 0x7f167dd1795e bp 0x7f1678331cc0 sp 0x7f1678331468
READ of size 2 at 0x602000007091 thread T3 (watch_displays)
    #0 0x7f167dd1795d in __interceptor_strlen /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:370
    #1 0x7f16787a091a in join_string_g_ptr_array_t /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/glib_string_util.c:86
    #2 0x7f167876735c in watch_displays_using_udev /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/ddc/ddc_watch_displays.c:347
    #3 0x7f16784acce0  (/usr/lib/libglib-2.0.so.0+0x7fce0)
    #4 0x7f167d8363e8 in start_thread (/usr/lib/libpthread.so.0+0x93e8)
    #5 0x7f167d764292 in __GI___clone (/usr/lib/libc.so.6+0x100292)

0x602000007091 is located 0 bytes to the right of 1-byte region [0x602000007090,0x602000007091)
allocated by thread T3 (watch_displays) here:
    #0 0x7f167dd8c459 in __interceptor_malloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:145
    #1 0x7f16787a54c8 in strjoin /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/string_util.c:351
    #2 0x7f16787a08cc in join_string_g_ptr_array /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/glib_string_util.c:44
    #3 0x7f16787a090f in join_string_g_ptr_array_t /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/glib_string_util.c:85
    #4 0x7f167876735c in watch_displays_using_udev /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/ddc/ddc_watch_displays.c:347
    #5 0x7f16784acce0  (/usr/lib/libglib-2.0.so.0+0x7fce0)

This turns out to be the debug print:

   GPtrArray * prev_displays = get_sysfs_drm_displays();
   DBGTRC(debug, TRACE_GROUP,
          "Initial connected displays: %s", join_string_g_ptr_array_t(prev_displays, ", ") );

that string join tries to join and array of zero strings.. this fails in strjoin() which happens to malloc a single byte then and never init it at all (so its junk) and so any string stuff can walk off the end of this string array. simple fix - always put a nul byte in. later strcpy's that add in string items will overwrite this. the array is empty because no screens report being connected in /sys/class/drm/cardX/status ... which is itself bizarre, but it is something ddcutil shouldn't crash on.

diff --git a/src/util/string_util.c b/src/util/string_util.c
index 0e13aaa0..3f81d4db 100644
--- a/src/util/string_util.c
+++ b/src/util/string_util.c
@@ -349,6 +349,7 @@ char * strjoin( const char ** pieces, const int ct0, const char * sepstr) {

    // printf("(%s) ct=%d, total_length=%d\n", __func__, ct, total_length);
    char * result = malloc(total_length);
+   result[0] = '\0';
    char * end = result;
    for (ndx=0; ndx<ct; ndx++) {
       if (ndx > 0 && seplen > 0) {

I don't need attribution - just want to fix this for a user who is finding endless segfaults, so consider this 1 liner patch public domain.

Background - we're using libdductil in enlightenment (we dlopen libddcutil.so2 or libddcutil.so.3 and dlsym it for symbols and then use it from a setuid root slave util to control external monitor brightness just like we control internal laptop panel brightness via sysfs - so it's automagically enabled as a feature if ddcutil just gets installed at all - this slave util we launch was continually crashing and being restarted for a user when they enabled asan as it found this issue).

enjoy!

rastermann avatar Nov 20 '20 11:11 rastermann

Thanks for the precise bug report. I've pushed out a fix to the 1.0.0 branch.

I also appreciate hearing about how libddcutil is being used. Comments on its usability are welcome.

/sys is the proverbial maze of twisty passageways, all alike. I've been mucking around in it lately, trying to address the following problem:   Occasionally the same monitor will appear at 2 different /dev/i2c-N devices.  Sometimes both are writable, sometimes only one.  Sometimes it's associated with DisplayPort MST and possibly docking stations.

The  version of "ddcutil environment --v" in branch 1.0.0-dev dumps out a lot of information about relevant contents.  You may find it helpful trying to understand what is going on.  Different drivers seem to use /sys differently.

You mention you're looking at /sys/class/drm/cardX/status.  This may just be shorthand describing what you're doing.  But note that /sys/class/drm is a directory with subdirectories card0, card1, etc.  It also contains symbolic links to the members of card0, card1, etc., e.g.  card0-DP-1 -> card0/card0-DP-1. So drm/card0-DP-1/status exists, but drm/card0/status does not.

Regards, Sanford

On 11/20/20 6:17 AM, rastermann wrote:

Asan found this baby:

|================================================================= ==62810==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000007091 at pc 0x7f167dd1795e bp 0x7f1678331cc0 sp 0x7f1678331468 READ of size 2 at 0x602000007091 thread T3 (watch_displays) #0 0x7f167dd1795d in __interceptor_strlen /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:370 #1 0x7f16787a091a in join_string_g_ptr_array_t /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/glib_string_util.c:86 #2 0x7f167876735c in watch_displays_using_udev /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/ddc/ddc_watch_displays.c:347 #3 0x7f16784acce0 (/usr/lib/libglib-2.0.so.0+0x7fce0) #4 0x7f167d8363e8 in start_thread (/usr/lib/libpthread.so.0+0x93e8) #5 0x7f167d764292 in __GI___clone (/usr/lib/libc.so.6+0x100292) 0x602000007091 is located 0 bytes to the right of 1-byte region [0x602000007090,0x602000007091) allocated by thread T3 (watch_displays) here: #0 0x7f167dd8c459 in __interceptor_malloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:145 #1 0x7f16787a54c8 in strjoin /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/string_util.c:351 #2 0x7f16787a08cc in join_string_g_ptr_array /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/glib_string_util.c:44 #3 0x7f16787a090f in join_string_g_ptr_array_t /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/util/glib_string_util.c:85 #4 0x7f167876735c in watch_displays_using_udev /home/raster/C/other/AUR/ddcutil-git/src/ddcutil/src/ddc/ddc_watch_displays.c:347 #5 0x7f16784acce0 (/usr/lib/libglib-2.0.so.0+0x7fce0) |

This turns out to be the debug print:

GPtrArray * prev_displays = get_sysfs_drm_displays(); DBGTRC(debug, TRACE_GROUP, "Initial connected displays: %s", join_string_g_ptr_array_t(prev_displays, ", ") );

that string join tries to join and array of zero strings.. this fails in strjoin() which happens to malloc a single byte then and never init it at all (so its junk) and so any string stuff can walk off the end of this string array. simple fix - always put a nul byte in. later strcpy's that add in string items will overwrite this. the array is empty because no screens report being connected in /sys/class/drm/cardX/status ... which is itself bizarre, but it is something ddcutil shouldn't crash on.

|diff --git a/src/util/string_util.c b/src/util/string_util.c index 0e13aaa0..3f81d4db 100644 --- a/src/util/string_util.c +++ b/src/util/string_util.c @@ -349,6 +349,7 @@ char * strjoin( const char ** pieces, const int ct0, const char * sepstr) { // printf("(%s) ct=%d, total_length=%d\n", func, ct, total_length); char * result = malloc(total_length); + result[0] = '\0'; char * end = result; for (ndx=0; ndx<ct; ndx++) { if (ndx > 0 && seplen > 0) { |

I don't need attribution - just want to fix this for a user who is finding endless segfaults, so consider this 1 liner patch public domain.

Background - we're using libdductil in enlightenment (we dlopen libddcutil.so2 or libddcutil.so.3 and dlsym it for symbols and then use it from a setuid root slave util to control external monitor brightness just like we control internal laptop panel brightness via sysfs - so it's automagically enabled as a feature if ddcutil just gets installed at all - this slave util we launch was continually crashing and being restarted for a user when they enabled asan as it found this issue).

enjoy!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/rockowitz/ddcutil/issues/154, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADMGY3VRKUSTDHM46IU4M3DSQZF5TANCNFSM4T4UTMCA.

rockowitz avatar Nov 20 '20 18:11 rockowitz

Oh I was describing what ddcutil was doing when it as walking through /sys/class/drm/cardX devices (card0, card1, card2, etc.). It then walked through the subdirs (outputs) and checked status - it just so happens on this system (not mine - a user's system so I can't reproduce. I worked with them to identify the issue as it was having major adverse effects elsewhere for us). It just so happened this system had no connected outputs there. My machine does - this user' smachine doesn't. It seems it's probably unusual as otherwise you'd have hit this bug earlier. :)

Indeed sysfs is an adhoc maze. I've spent decades dealing with it and its changes too over time... I remember long ago when /proc/apm was simple and all you needed to report battery info... :) That has all changed dramatically over the years. I totally understand your pain. I'm happy to piggy-back off your pain to save some of my own. I actually plan in the future to make a complete monitor configuration Ui based on everything ddcutil can swizzle (basically a kbd+mouse driven OSD config menu on your monitor - not only brightness, but the rest too). I plan to also poll the rotation property and use that to auto-rotate screens (randr). I'm happy ddcutil makes this all possible, so thanks so much for the work you put in. :) I know how hard this kind of stuff is and I hope I just helped make your life a little better by fixing something for you. My way of saying thanks.

Just some comments/asides you may find of interest. It seems ddcutil has been a bit slow in doing things like changing properties. It also regularly even fails to do it - especially if you change backlight right after the monitor woke up from DPMS. I am sure this is a monitor problem, but the slowness I did notice was the usleeps in ddcutil. At the time i reduced the usleep time and found it to work, but a little less reliably. I dedicated a thread just to ddcutil to make sure it doesn't impact anything else. I actually literally fade the backlight in and out when monitors come on or are sent to sleep, or go idle or come out of idle by sending my backlight change requests over the space of a second (If possible it'd be nice it changes every 16ms as I send these request at refresh framerate). I've had to do some hackery to set backlight and then read it back to ensure it worked as it sometimes does not. It'd be nice if this were all solid and reliable, but I've done my workarounds to beat it into shape already. So just some info in how ddcutili is being abused so you can account for it in future. :)

rastermann avatar Nov 21 '20 00:11 rastermann

I've found the location of the sloppy check for status.  It's in a loop that watches for displays to be added and removed.   The code to modify internal data structures and notify the library's caller of the change is not yet written, so at this point it has no effect.  Assuming you're building from source, you can disable the loop by commenting out the call to ddc_start_watch_displays() in function _ddca_init() at approximately line 165 of file src/libmain/api_base.c.

I hadn't considered that the library might be used in a headless environment.  Is this some sort of continuous integration context?  Even so, I'm surprised that a connector "node" in sysfs (e.g. card0/card0-HDMI-A-1) exists without a status element.  Can I ask you to run "ddcutil environment --verbose" in the problematic environment (using the latest 1.0.0-dev branch) and send the output as an attachment?  Its probing of /sys should help me understand what's going on.

If you're looking to build a UI "based on everything that ddcutil can swizzle", that's an enormous number of VCP features whose existence varies by  monitor and whose interpretation varies by VCP/MCCS version.  Most features are not of interest to general users.  I suspect that what you really want to do is present a unified interface to monitors that implement DDC/CI along with those that don't (i.e. laptop displays), and include properties such as xrandr rotation that are outside of DDC/CI.   I assume you've looked at ddcui. The code is ugly (it's my first Qt project) but it does try to handle the full set of VCP features. It's designed as a "sys admin" type of tool, but it may give you some ideas.

I'm open to  extending the API if that would make your use easier.  The API design has been driven by the needs of ddcui, and that's a sample size of 1.  Can you point me at the code that's currently using ddcutil? I'd like to see how you're using the API and I may have suggestions.

If you're making brightness changes in rapid succession for fade-in/fade-out purposes, you probably want to verify the value only at the end of the changes.  Also, it probably doesn't matter if some of the changes fail so long as the final set succeeds.  It might make sense to allow for reducing the DDC/CI spec mandated delay after setting the feature value in this case.  Relatedly, though it doesn't address your use case, the way that ddcui avoids overloading the API with tiny changes to continuous values is by sending a feature change request to the API at most once a second when the slider or spin-box is being changed, and finally when the slider or spin-box is released. It's a UI cheat that seems to work.

Regards, Sanford

On 11/20/20 7:41 PM, rastermann wrote:

Oh I was describing what ddcutil was doing when it as walking through /sys/class/drm/cardX devices (card0, card1, card2, etc.). It then walked through the subdirs (outputs) and checked status - it just so happens on this system (not mine - a user's system so I can't reproduce. I worked with them to identify the issue as it was having major adverse effects elsewhere for us). It just so happened this system had no connected outputs there. My machine does - this user' smachine doesn't. It seems it's probably unusual as otherwise you'd have hit this bug earlier. :)

Indeed sysfs is an adhoc maze. I've spent decades dealing with it and its changes too over time... I remember long ago when /proc/apm was simple and all you needed to report battery info... :) That has all changed dramatically over the years. I totally understand your pain. I'm happy to piggy-back off your pain to save some of my own. I actually plan in the future to make a complete monitor configuration Ui based on everything ddcutil can swizzle (basically a kbd+mouse driven OSD config menu on your monitor - not only brightness, but the rest too). I plan to also poll the rotation property and use that to auto-rotate screens (randr). I'm happy ddcutil makes this all possible, so thanks so much for the work you put in. :) I know how hard this kind of stuff is and I hope I just helped make your life a little better by fixing something for you. My way of saying thanks.

Just some comments/asides you may find of interest. It seems ddcutil has been a bit slow in doing things like changing properties. It also regularly even fails to do it - especially if you change backlight right after the monitor woke up from DPMS. I am sure this is a monitor problem, but the slowness I did notice was the usleeps in ddcutil. At the time i reduced the usleep time and found it to work, but a little less reliably. I dedicated a thread just to ddcutil to make sure it doesn't impact anything else. I actually literally fade the backlight in and out when monitors come on or are sent to sleep, or go idle or come out of idle by sending my backlight change requests over the space of a second (If possible it'd be nice it changes every 16ms as I send these request at refresh framerate). I've had to do some hackery to set backlight and then read it back to ensure it worked as it sometimes does not. It'd be nice if this were all solid and reliable, but I've done my workarounds to beat it into shape already. So just some info in how ddcutili is being abused so you can account for it in future. :)

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/rockowitz/ddcutil/issues/154#issuecomment-731476247, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADMGY3QAQ6VPL54BI4MV7KLSQ4EEZANCNFSM4T4UTMCA.

rockowitz avatar Nov 21 '20 13:11 rockowitz

That's the odd thing... it's not a headless system. It's got a GPU and monitor plugged in yet this is finding no connected displays in sysfs - it literally reports nothing there, but there is a screen. As it's not my system I'm limited in knowing the exact makeup of it, but I do know this. I asks the user to find any status files in that subtree for an output - there are none. the status files are missing entirely, and yet ddcutil works, so it's swizzling the monitor properties in some other way.

Well when I said "complete UI" for ddc ... I didn't mean literally probe every DDC property val and expose it - go through all the major known ones and provide a good GUI for it. Expand it over time - like modify color temperature, brightness, contrast (already do backlight), That kind of thing. a nice GUI for what you find in the monitor's own OSD controls, but you don't need to use those unusable monitor UI controls. Any UI that just dumbly lists property strings with some value field is invariably a poor UI and at that point - ddcutil on the cmdline will do and be good enough and about as friendly. We already fully cover randr in other screen setup stuff. This is about complementing that with more controls per screen, remembering them and applying them. As we already have all the resolution, layout, rotation configuring - it makes sense to listen to rotation info and apply accordingly as well as other monitor controls available as above.

Relevant libddcutil using code here:

https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system_ddc.c - it hooks into https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system_main.c with i/o to calling process stdio handled by https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system_inout.c and shared header https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system.h (there are other subsystems inside that dir that hook in to this slave setuid root util for other services too).

I'v pretty cleanly sliced it in with thread hiding the latency and what not, but you can tell I've had to do some workarounds failure like with the probing. You can see the API and code is actually generic allowing getting/setting any property async (the animation is handled outside this slave fromt he calling process so it usses lots of property sets in a row). That code is https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/e_backlight.c (which also handles swizzling backlight via sysfs and xrandr as well as ddc - ddc and sysfs talk to this setuid slave).

I know the UI cheat you do - common and I've done it many times, but the point here is to actually try smoothly fade/animate. I think I wrote this code before ddcutil had an api to change the usleep time - thus i experimented with manually modifying it. I've been using ddcutil's library api now for quite a while. :)

rastermann avatar Nov 22 '20 00:11 rastermann

On 11/21/20 7:12 PM, rastermann wrote:

That's the odd thing... it's not a headless system. It's got a GPU and monitor plugged in yet this is finding no connected displays in sysfs

  • it literally reports nothing there, but there is a screen. As it's not my system I'm limited in knowing the exact makeup of it, but I do know this. I asks the user to find any status files in that subtree for an output - there are none. the status files are missing entirely, and yet ddcutil works, so it's swizzling the monitor properties in some other way.

ddcutil finds DDC capable monitors by scanning the /dev/i2c devices.   It ignores SMBus devices  and those I2C devices whose name is not of the form /dev/i2c-N.  It first tries to read the EDID, and if one is found it attempts DDC/CI communication, which is an expensive operation because of the sleeps.

The sysfs status error occurs in the loop that watches for monitors being connected or disconnected.  If ddcutil was built with udev, the loop waits on a monitor change event.  Otherwise, it simply polls the list of monitors the monitors reported in /sys every three seconds.  If not, it polls the list of monitors every 3 seconds. These are cheap operations.  Only in the rare case of a monitor being added or removed are the expensive /dev/i2c checks required.

Again, I'd really appreciate it if "ddcutil environment --verbose" can be run on the problematic system, built from the current 1.0.0-dev branch. I recently added code that reports relevant parts of the /sys tree, and will hopefully indicate how it is that there's no status element.

Well when I said "complete UI" for ddc ... I didn't mean literally probe every DDC property val and expose it - go through all the major known ones and provide a good GUI for it. Expand it over time - like modify color temperature, brightness, contrast (already do backlight), That kind of thing. a nice GUI for what you find in the monitor's own OSD controls, but you don't need to use those unusable monitor UI controls. Any UI that just dumbly lists property strings with some value field is invariably a poor UI and at that point - ddcutil on the cmdline will do and be good enough and about as friendly. We already fully cover randr in other screen setup stuff. This is about complementing that with more controls per screen, remembering them and applying them. As we already have all the resolution, layout, rotation configuring - it makes sense to listen to rotation info and apply accordingly as well as other monitor controls available as above.

Relevant libddcutil using code here:

https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system_ddc.c

  • it hooks into https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system_main.c with i/o to calling process stdio handled by https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system_inout.c and shared header https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/system/e_system.h (there are other subsystems inside that dir that hook in to this slave setuid root util for other services too).

I'v pretty cleanly sliced it in with thread hiding the latency and what not, but you can tell I've had to do some workarounds failure like with the probing. You can see the API and code is actually generic allowing getting/setting any property async (the animation is handled outside this slave fromt he calling process so it usses lots of property sets in a row). That code is https://git.enlightenment.org/core/enlightenment.git/tree/src/bin/e_backlight.c (which also handles swizzling backlight via sysfs and xrandr as well as ddc - ddc and sysfs talk to this setuid slave).

A few comments on the code.

It looks like you're assuming that continuous features have values in the range 0..100.  This is common, but not fixed.  The maximum value has to be obtained from the mh/ml bytes of the getvcp response. 0..255 is frequently seen, and I even had a ddcui bug report from a user whose monitor actually used values greater than 255.

The code verifies that the value read for a feature value is the same as the value set, modulo  floating point conversion.  However, it's sometimes the case that the final value is off by 1, e.g. if a value of 95 is set, the subsequent read of the feature might return 94 or 96. While you may want to hack for it in the UI, there's no point in treating the off by 1 state as a DDC error. (I suspect that this is because of floating point conversions in the monitor.)

The binary EDID  is not perfectly reliable as a unique monitor identifier.  I've seen one monitor, a LG 27MU67, which has neither an ASCII nor a binary serial number.  So if 2 of these monitors were manufactured in the same week, they would have identical EDIDs. It's also possible that the user has loaded identical custom EDIDs into multiple monitors. Finally, there's the situation that led to me to write the code to examine /sys: occasionally the same monitor will appear as 2 different /dev/i2c devices.  Hopefully I will figure out what's going on sufficiently to submit a bug report, or at least to work around it, but until then 2 /dev/i2c devices with the same EDID are possible.

Try calling:

    ddca_enable_sleep_suppression(true)

This experimental option improves performance by eliminating some sleeps, and does not appear to increase  the number of retries. If that holds true, I expect it will become the default.

Regards, Sanford

I know the UI cheat you do - common and I've done it many times, but the point here is to actually try smoothly fade/animate. I think I wrote this code before ddcutil had an api to change the usleep time - thus i experimented with manually modifying it. I've been using ddcutil's library api now for quite a while. :)

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/rockowitz/ddcutil/issues/154#issuecomment-731656372, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADMGY3QHWXYQ7LPZBWMFZFLSRBJOTANCNFSM4T4UTMCA.

rockowitz avatar Nov 22 '20 12:11 rockowitz

Hey - back. I was waiting to get in touch with the user again. here is his output:

Output level:               Verbose
Reporting DDC data errors:  false
Trace groups active:        none
Traced functions:           none
Traced files:               none
Force I2C slave address:    false
User defined features:      disabled

Performance and Retry Options:
   Deferred sleep enabled:                      false
   Sleep suppression (reduced sleeps) enabled:  false
   Dynamic sleep adjustment enabled:            false

The following tests probe the runtime environment using multiple overlapping methods.
   Current time (local): 2020-11-25 12:49:03 PST
   Current time (UTC):   2020-11-25 20:49:03
   Seconds since boot:   599117

*** Basic System Information ***

ddcutil version: 0.9.9

/proc/version:
   Linux version 5.9.0-2-amd64 ([email protected]) (gcc-10 (Debian 10.2.0-16) 10.2.0, GNU ld (GNU Binutils for Debian) 2.35.1) #1 SMP Debian 5.9.6-1 (2020-11-08)

Architecture:     x86_64
Distributor id:   Devuan
Release:          testing/unstable
Found a known architecture

/proc/cmdline:
   BOOT_IMAGE=/boot/vmlinuz-5.9.0-2-amd64 root=UUID=9f612bdc-2265-4916-bc17-a96756a424ff ro libata.force=4.00:noncq

Compiler information:
   C standard: 201710
   gcc compatible compiler:
      Compiler version: 10.2.0

Processor information as reported by lscpu:
   Architecture:                    x86_64
   CPU op-mode(s):                  32-bit, 64-bit
   Byte Order:                      Little Endian
   Address sizes:                   48 bits physical, 48 bits virtual
   CPU(s):                          4
   On-line CPU(s) list:             0-3
   Thread(s) per core:              1
   Core(s) per socket:              4
   Socket(s):                       1
   NUMA node(s):                    1
   Vendor ID:                       AuthenticAMD
   CPU family:                      16
   Model:                           4
   Model name:                      AMD Phenom(tm) II X4 975 Processor
   Stepping:                        3
   CPU MHz:                         800.000
   CPU max MHz:                     3600.0000
   CPU min MHz:                     800.0000
   BogoMIPS:                        7224.21
   Virtualization:                  AMD-V
   L1d cache:                       256 KiB
   L1i cache:                       256 KiB
   L2 cache:                        2 MiB
   L3 cache:                        6 MiB
   NUMA node0 CPU(s):               0-3
   Vulnerability Itlb multihit:     Not affected
   Vulnerability L1tf:              Not affected
   Vulnerability Mds:               Not affected
   Vulnerability Meltdown:          Not affected
   Vulnerability Spec store bypass: Not affected
   Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
   Vulnerability Spectre v2:        Mitigation; Full AMD retpoline, STIBP disabled, RSB filling
   Vulnerability Srbds:             Not affected
   Vulnerability Tsx async abort:   Not affected
   Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save

DMI Information from /sys/class/dmi/id:
   Motherboard vendor:       ASUSTeK COMPUTER INC.
   Motherboard product name: SABERTOOTH 990FX R2.0
   System vendor:            To be filled by O.E.M.
   System product name:      To be filled by O.E.M.
   Chassis vendor:           To Be Filled By O.E.M.
   Chassis type:             3 - Desktop

Byte order checks:
   Is big endian (local test):       false
   WORDS_BIGENDIAN macro (autoconf): not defined
   __BYTE_ORDER__ macro (gcc):       __ORDER_LITTLE_ENDIAN__

*** Primary Check 1: Identify video card and driver ***

Obtaining card and driver information from /sys...
Primary video controller at PCI address 0000:03:00.0 (boot_vga flag is set)
   Device class:        x030000    VGA compatible controller
   Vendor:              x1002      Advanced Micro Devices, Inc. [AMD/ATI]
   Device:              x7340      Navi 14 [Radeon RX 5500/5500M / Pro 5500M]
   Subvendor/Subdevice: 1043/04e6  ASUSTeK Computer Inc.
   Driver name:         amdgpu
   Driver version:      Unable to determine
   I2C device:          i2c-8      name: AMDGPU DM i2c hw bus 2
   I2C device:          i2c-6      name: AMDGPU DM i2c hw bus 0
   I2C device:          i2c-9      name: AMDGPU DM i2c hw bus 3
   I2C device:          i2c-7      name: AMDGPU DM i2c hw bus 1

*** Primary Check 2: Check that /dev/i2c-* exist and writable ***

Current user: gnarface (1000)

Checking /dev/i2c-* devices...

Unless the system is using the AMD proprietary driver fglrx, devices /dev/i2c-*
must exist and the logged on user must have read/write permission for those
devices (or at least those devices associated with monitors).

Typically, this access is enabled by:
  - setting the group for /dev/i2c-* to i2c
  - setting group RW permissions for /dev/i2c-*
  - making the current user a member of group i2c

Alternatively, this can be enabled by just giving everyone RW permission
The following tests probe for these conditions.

Checking for /dev/i2c-* devices...
   ls: cannot access '/dev/i2c-*': No such file or directory

Current user (gnarface) has RW access to all /dev/i2c-* devices.

Checking for group i2c...
   Group i2c exists
   WARNING: Current user gnarface is NOT a member of group i2c

Looking for udev rules files that reference i2c:
   Checking rules directory /lib/udev/rules.d:
      /lib/udev/rules.d/60-i2c-tools.rules:SUBSYSTEM=="i2c-dev",KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
      /lib/udev/rules.d/60-sensor.rules:SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c", \
   Checking rules directory /run/udev/rules.d:
      grep: /run/udev/rules.d/*rules: No such file or directory
   Checking rules directory /etc/udev/rules.d:

*** Primary Check 3: Check that module i2c_dev is loaded ***

Checking for module i2c_dev...
   Module i2c-dev is NOT built into kernel
   Loadable i2c-dev module found
   Module i2c_dev is NOT loaded

No /dev/i2c-N devices found, and module i2c_dev is not loaded.


Check that kernel module i2c_dev is being loaded by examining files where this would be specified...
   grep: /run/modules-load.d/*conf: No such file or directory
   grep: /usr/lib/modules-load.d/*conf: No such file or directory

Check for any references to i2c_dev in /etc/modprobe.d ...
   /etc/modprobe.d/i2c.conf:alias char-major-89 i2c-dev
   grep: /run/modprobe.d/*conf: No such file or directory

*** Primary Check 4: Driver specific checks ***

Performing driver specific checks...
No driver specific checks apply.

*** Additional probes ***

Scanning /proc/modules for driver environment...
   Loaded video module depends on: asus_wmi,
   Found video driver module:      amdgpu
   Found other loaded module:      videodev
   Found other loaded module:      drm_kms_helper
   Loaded drm module depends on:   amdgpu,gpu_sched,ttm,drm_kms_helper,
   Found other loaded module:      i2c_algo_bit
   Found other loaded module:      i2c_piix4

Testing if modules are loaded using /sys...
   Module amdgpu           is loaded
   Module fbdev            is NOT loaded
   Module fglrx            is NOT loaded
   Module fturbo           is NOT loaded
   Module i915             is NOT loaded
   Module mgag200          is NOT loaded
   Module nvidia           is NOT loaded
   Module nouveau          is NOT loaded
   Module radeon           is NOT loaded
   Module vboxvideo        is NOT loaded
   Module vc4              is NOT loaded
   Module drm              is loaded
   Module i2c_algo_bit     is loaded
   Module i2c_dev          is NOT loaded
   Module i2c_piix4        is loaded
   Module ddcci            is NOT loaded

Examining /sys/bus/i2c/devices...
   /sys/bus/i2c/devices/i2c-3/name:   SMBus PIIX4 adapter port 4 at 0b00
   /sys/bus/i2c/devices/5-0018/name:  ir_video
(each_i2c_device               ) Unexpected /sys/bus/i2c/devices file name: 5-0018
   /sys/bus/i2c/devices/i2c-10/name:  AMDGPU DM aux hw bus 0
   /sys/bus/i2c/devices/i2c-1/name:   SMBus PIIX4 adapter port 2 at 0b00
   /sys/bus/i2c/devices/i2c-8/name:   AMDGPU DM i2c hw bus 2
   /sys/bus/i2c/devices/5-0040/name:  msp3400
(each_i2c_device               ) Unexpected /sys/bus/i2c/devices file name: 5-0040
   /sys/bus/i2c/devices/i2c-6/name:   AMDGPU DM i2c hw bus 0
   /sys/bus/i2c/devices/i2c-4/name:   SMBus PIIX4 adapter port 1 at 0b20
   /sys/bus/i2c/devices/i2c-11/name:  AMDGPU DM aux hw bus 1
   /sys/bus/i2c/devices/i2c-2/name:   SMBus PIIX4 adapter port 3 at 0b00
   /sys/bus/i2c/devices/i2c-0/name:   SMBus PIIX4 adapter port 0 at 0b00
   /sys/bus/i2c/devices/i2c-9/name:   AMDGPU DM i2c hw bus 3
   /sys/bus/i2c/devices/5-0061/name:  tuner
(each_i2c_device               ) Unexpected /sys/bus/i2c/devices file name: 5-0061
   /sys/bus/i2c/devices/i2c-7/name:   AMDGPU DM i2c hw bus 1
   /sys/bus/i2c/devices/5-0021/name:  saa7115
(each_i2c_device               ) Unexpected /sys/bus/i2c/devices file name: 5-0021
   /sys/bus/i2c/devices/i2c-5/name:   ivtv i2c driver #0
   /sys/bus/i2c/devices/i2c-12/name:  AMDGPU DM aux hw bus 2


Examining I2C buses, as detected by I2C layer...
   Current time (local): 2020-11-25 12:49:04 PST
   Current time (UTC):   2020-11-25 20:49:04
   Seconds since boot:   599119

   Detected 0 non-ignorable I2C buses:
      No buses


xrandr connection report:
   DisplayPort-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 521mm x 293mm panning 1920x1080+0+0
   DisplayPort-1 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 521mm x 293mm panning 1920x1080+1920+0
   DisplayPort-2 disconnected (normal left inverted right x axis y axis)
   HDMI-A-0 disconnected (normal left inverted right x axis y axis)

Checking for possibly conflicting programs...

Examining I2C buses using i2cdetect... 
   Current time (local): 2020-11-25 12:49:04 PST
   Current time (UTC):   2020-11-25 20:49:04
   Seconds since boot:   599119
   No I2C buses found

Performing basic scan of I2C devices using local sysenv functions...
   Current time (local): 2020-11-25 12:49:04 PST
   Current time (UTC):   2020-11-25 20:49:04
   Seconds since boot:   599119
      No /dev/i2c-* devices found


EDIDs reported by X11 for connected xrandr outputs:
   xrandr output: DisplayPort-0
      Raw EDID:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 04 69 9a 24 87 63 04 00   .........i.$.c..
      +0010   27 17 01 03 80 34 1d 78 2a 2a c5 a4 56 4f 9e 28   '....4.x**..VO.(
      +0020   0f 50 54 b7 ef 00 71 4f 81 40 81 80 95 00 b3 00   .PT...qO.@......
      +0030   d1 c0 81 c0 81 00 02 3a 80 18 71 38 2d 40 58 2c   .......:..q8-@X,
      +0040   45 00 09 25 21 00 00 1e 00 00 00 ff 00 44 39 4c   E..%!........D9L
      +0050   4d 54 46 32 38 37 36 32 33 0a 00 00 00 fd 00 32   MTF287623......2
      +0060   4b 18 53 11 00 0a 20 20 20 20 20 20 00 00 00 fc   K.S...      ....
      +0070   00 41 53 55 53 20 56 53 32 34 37 0a 20 20 00 07   .ASUS VS247.  ..
      EDID synopsis:
         Mfg id:           ACI
         Model:            ASUS VS247
         Serial number:    D9LMTF287623
         Manufacture year: 2013
         EDID version:     1.3
         Product code:     9370
         Binary sn:        287623 (0x00046387)
         Extra descriptor: 
         Video input definition: 0x80 - Digital Input
         Supported features:
            DPMS active-off
            Digital display type: RGB 4:4:4
            Standard sRGB color space: False
         White x,y:        0.313, 0.329
         Red   x,y:        0.641, 0.338
         Green x,y:        0.311, 0.619
         Blue  x,y:        0.159, 0.059
         Extension blocks: 0
      EDID source: 
(query_x11                     ) EDID not found

   xrandr output: DisplayPort-1
      Raw EDID:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 04 69 9a 24 86 63 04 00   .........i.$.c..
      +0010   27 17 01 03 80 34 1d 78 2a 2a c5 a4 56 4f 9e 28   '....4.x**..VO.(
      +0020   0f 50 54 b7 ef 00 71 4f 81 40 81 80 95 00 b3 00   .PT...qO.@......
      +0030   d1 c0 81 c0 81 00 02 3a 80 18 71 38 2d 40 58 2c   .......:..q8-@X,
      +0040   45 00 09 25 21 00 00 1e 00 00 00 ff 00 44 39 4c   E..%!........D9L
      +0050   4d 54 46 32 38 37 36 32 32 0a 00 00 00 fd 00 32   MTF287622......2
      +0060   4b 18 53 11 00 0a 20 20 20 20 20 20 00 00 00 fc   K.S...      ....
      +0070   00 41 53 55 53 20 56 53 32 34 37 0a 20 20 00 09   .ASUS VS247.  ..
      EDID synopsis:
         Mfg id:           ACI
         Model:            ASUS VS247
         Serial number:    D9LMTF287622
         Manufacture year: 2013
         EDID version:     1.3
         Product code:     9370
         Binary sn:        287622 (0x00046386)
         Extra descriptor: 
         Video input definition: 0x80 - Digital Input
         Supported features:
            DPMS active-off
            Digital display type: RGB 4:4:4
            Standard sRGB color space: False
         White x,y:        0.313, 0.329
         Red   x,y:        0.641, 0.338
         Green x,y:        0.311, 0.619
         Blue  x,y:        0.159, 0.059
         Extension blocks: 0
      EDID source: 
(query_x11                     ) EDID not found
Error executing command: EPERM(-1): Operation not permitted

Probing I2C devices using udev, susbsystem i2c-dev...
   Current time (local): 2020-11-25 12:49:04 PST
   Current time (UTC):   2020-11-25 20:49:04
   Seconds since boot:   599119
Summary of udev I2C devices
   No devices detected

Looking for udev devices with name attribute DPMST...
Summary of udev DPMST devices...
   No devices detected

amdgpu configuration parameters:
   amdgpu parameters (/sys/module/drm/holders/amdgpu/parameters)
      abmlevel:             0
      aspm:                 -1
      async_gfx_ring:       1
      audio:                -1
      bapm:                 -1
      benchmark:            0
      cg_mask:              4294967295
      cik_support:          0
      compute_multipipe:    -1
      cwsr_enable:          1
      dc:                   -1
      dcdebugmask:          0
      dcfeaturemask:        0
      debug_evictions:      N
      debug_largebar:       0
      deep_color:           0
      disable_cu:           (null)
      discovery:            -1
      disp_priority:        0
      dpm:                  -1
      emu_mode:             0
      exp_hw_support:       0
      force_asic_type:      -1
      forcelongtraining:    0
      fw_load_type:         -1
      gartsize:             (null)
      gpu_recovery:         -1
      gttsize:              (null)
      halt_if_hws_hang:     0
      hw_i2c:               0
      hws_gws_support:      N
      hws_max_conc_proc:    8
      ignore_crat:          0
      ip_block_mask:        4294967295
      job_hang_limit:       0
      lbpw:                 -1
      lockup_timeout:       
      max_num_of_queues_per_device:  4096
      mcbp:                 0
      mes:                  0
      moverate:             (null)
      msi:                  -1
      noretry:              0
      pcie_gen2:            -1
      pcie_gen_cap:         0
      pcie_lane_cap:        0
      pg_mask:              4294967295
      ppfeaturemask:        4294950911
      queue_preemption_timeout_ms:  9000
      ras_enable:           -1
      ras_mask:             4294967295
      reset_method:         -1
      runpm:                -1
      sched_hw_submission:  2
      sched_jobs:           32
      sched_policy:         0
      sdma_phase_quantum:   32
      send_sigterm:         0
      si_support:           0
      smu_memory_pool_size:  0
      test:                 0
      tmz:                  0
      virtual_display:      (null)
      vis_vramlimit:        0
      vm_block_size:        -1
      vm_debug:             0
      vm_fault_stop:        0
      vm_fragment_size:     -1
      vm_size:              -1
      vm_update_mode:       -1
      vramlimit:            (null)


Examining configuration files...

DKMS modules:

Kernel I2C configuration settings:
   CONFIG_I2C_CHARDEV=m

Kernel AMDGPU configuration settings:
   CONFIG_DRM_AMDGPU=m
   CONFIG_DRM_AMDGPU_SI=y
   CONFIG_DRM_AMDGPU_CIK=y
   CONFIG_DRM_AMDGPU_USERPTR=y
   # CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set


Examining system logs...
Current timestamps:
   Current time (local): 2020-11-25 12:49:04 PST
   Current time (UTC):   2020-11-25 20:49:04
   Seconds since boot:   599119

   Scanning dmesg output for I2C related entries...
   Executing command: dmesg
   No lines found after filtering

   Scanning journalctl output for I2C related entries...
   Executing command: journalctl --no-pager --boot


   File not found: /var/log/Xorg.0.log

   Scanning file: /var/log/messages
   Limiting output to last 40 relevant lines...
   No lines found after filtering

   Scanning file: /var/log/kern.log
   Limiting output to last 20 relevant lines...
   No lines found after filtering

   Scanning file: /var/log/daemon.log
   Limiting output to last 10 relevant lines...
   Empty file

   Scanning file: /var/log/syslog
   Limiting output to last 50 relevant lines...
   No lines found after filtering


   Log Summary
      Log                             Checked   Found 
      ===                             =======   ===== 
      dmesg                           true      true  
      journalctl                      true      false 
      /var/log/daemon.log             true      true  
      /var/log/kern.log               true      true  
      /var/log/messages               true      true  
      /var/log/syslog                 true      true  
      /var/log/Xorg.0.log             true      false 

Probing connected monitors using libdrm...

   Checking libdrm version using pkg-config...
      2.4.103

   Has a DRM kernel driver been loaded? (drmAvailable()): true

   Probing device /dev/dri/card0...
      Open succeeded for device: /dev/dri/card0

      DRM driver version information:
         Version:     3.39.0
         Driver:      amdgpu
         Date:        20150101
         Description: AMD GPU

      DRM library version: 1.3.0.

      DRM Busid:  pci:0000:03:00.0

      Device information:
         bustype:                0 - pci
         domain:bus:device.func: 0000:03:00.0
         vendor    vid:pid:      0x1002:0x7340
         subvendor vid:pid:      0x1043:0x04e6
         revision id:            0x00c5

      Is a modesetting capable driver attached to bus id: pci:0000:03:00.0?
      (calling drmCheckModesettingAvailable())
         Yes

      Retrieving DRM resources...

      Scanning defined properties...

      Scanning connectors...
      connector_id:        80
         connector name       DP-1
         connector_type:      10 - DP
         connector_type_id:   1
         connection:          1 - connected
         encoder:             79
            encoder type (signal format): 2 - TDMS
         EDID property
            Raw property blob:
            blob id: 84
                    +0          +4          +8          +c            0   4   8   c   
            +0000   00 ff ff ff ff ff ff 00 04 69 9a 24 87 63 04 00   .........i.$.c..
            +0010   27 17 01 03 80 34 1d 78 2a 2a c5 a4 56 4f 9e 28   '....4.x**..VO.(
            +0020   0f 50 54 b7 ef 00 71 4f 81 40 81 80 95 00 b3 00   .PT...qO.@......
            +0030   d1 c0 81 c0 81 00 02 3a 80 18 71 38 2d 40 58 2c   .......:..q8-@X,
            +0040   45 00 09 25 21 00 00 1e 00 00 00 ff 00 44 39 4c   E..%!........D9L
            +0050   4d 54 46 32 38 37 36 32 33 0a 00 00 00 fd 00 32   MTF287623......2
            +0060   4b 18 53 11 00 0a 20 20 20 20 20 20 00 00 00 fc   K.S...      ....
            +0070   00 41 53 55 53 20 56 53 32 34 37 0a 20 20 00 07   .ASUS VS247.  ..
            EDID synopsis:
               Mfg id:           ACI
               Model:            ASUS VS247
               Serial number:    D9LMTF287623
               Manufacture year: 2013
               EDID version:     1.3
               Product code:     9370
               Binary sn:        287623 (0x00046387)
               Extra descriptor: 
               Video input definition: 0x80 - Digital Input
               Supported features:
                  DPMS active-off
                  Digital display type: RGB 4:4:4
                  Standard sRGB color space: False
               White x,y:        0.313, 0.329
               Red   x,y:        0.641, 0.338
               Green x,y:        0.311, 0.619
               Blue  x,y:        0.159, 0.059
               Extension blocks: 0
            EDID source: 
(probe_open_device_using_libdrm) Unexpected: EDID ...20200007 not found in device cross reference table

      connector_id:        85
         connector name       DP-2
         connector_type:      10 - DP
         connector_type_id:   2
         connection:          1 - connected
         encoder:             83
            encoder type (signal format): 2 - TDMS
         EDID property
            Raw property blob:
            blob id: 89
                    +0          +4          +8          +c            0   4   8   c   
            +0000   00 ff ff ff ff ff ff 00 04 69 9a 24 86 63 04 00   .........i.$.c..
            +0010   27 17 01 03 80 34 1d 78 2a 2a c5 a4 56 4f 9e 28   '....4.x**..VO.(
            +0020   0f 50 54 b7 ef 00 71 4f 81 40 81 80 95 00 b3 00   .PT...qO.@......
            +0030   d1 c0 81 c0 81 00 02 3a 80 18 71 38 2d 40 58 2c   .......:..q8-@X,
            +0040   45 00 09 25 21 00 00 1e 00 00 00 ff 00 44 39 4c   E..%!........D9L
            +0050   4d 54 46 32 38 37 36 32 32 0a 00 00 00 fd 00 32   MTF287622......2
            +0060   4b 18 53 11 00 0a 20 20 20 20 20 20 00 00 00 fc   K.S...      ....
            +0070   00 41 53 55 53 20 56 53 32 34 37 0a 20 20 00 09   .ASUS VS247.  ..
            EDID synopsis:
               Mfg id:           ACI
               Model:            ASUS VS247
               Serial number:    D9LMTF287622
               Manufacture year: 2013
               EDID version:     1.3
               Product code:     9370
               Binary sn:        287622 (0x00046386)
               Extra descriptor: 
               Video input definition: 0x80 - Digital Input
               Supported features:
                  DPMS active-off
                  Digital display type: RGB 4:4:4
                  Standard sRGB color space: False
               White x,y:        0.313, 0.329
               Red   x,y:        0.641, 0.338
               Green x,y:        0.311, 0.619
               Blue  x,y:        0.159, 0.059
               Extension blocks: 0
            EDID source: 
(probe_open_device_using_libdrm) Unexpected: EDID ...20200009 not found in device cross reference table

      connector_id:        90
         connector name       DP-3
         connector_type:      10 - DP
         connector_type_id:   3
         connection:          2 - disconnected
         encoder:             0
         Encoder with id 0 not found
         EDID property
            Blob not found

      connector_id:        94
         connector name       HDMI-1
         connector_type:      11 - HDMI
         connector_type_id:   1
         connection:          2 - disconnected
         encoder:             0
         Encoder with id 0 not found
         EDID property
            Blob not found


Examining /sys/class/drm...
   Found connector: card0-HDMI-A-1
      /sys/class/drm/card0/card0-HDMI-A-1/status: disconnected

   Found connector: card0-DP-2
      /sys/class/drm/card0/card0-DP-2/status: connected
      I2C device: i2c-11
(query_drm_using_sysfs         ) Unexpected. Bus 11 not in xref table
(query_drm_using_sysfs         ) Unexpected. EDID ...20200009 not in xref table

   Found connector: card0-DP-3
      /sys/class/drm/card0/card0-DP-3/status: disconnected

   Found connector: card0-DP-1
      /sys/class/drm/card0/card0-DP-1/status: connected
      I2C device: i2c-10
(query_drm_using_sysfs         ) Unexpected. Bus 10 not in xref table
(query_drm_using_sysfs         ) Unexpected. EDID ...20200007 not in xref table

   Query file system for i2c nodes under /sys/class/drm/card*...
   drwxr-xr-x 3 root root 0 Nov 25 12:48 /sys/class/drm/card0/card0-DP-1/i2c-10
   drwxr-xr-x 3 root root 0 Nov 25 12:48 /sys/class/drm/card0/card0-DP-2/i2c-11
   drwxr-xr-x 3 root root 0 Nov 25 12:48 /sys/class/drm/card0/card0-DP-3/i2c-12

Device Identifier Cross Reference Report

Video related contents of /etc/modprobe.d
   /etc/modprobe.d/i2c.conf:alias char-major-89 i2c-dev
   /etc/modprobe.d/i915-kms.conf:options i915 modeset=1
   /etc/modprobe.d/options.conf:options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=44 NVreg_DeviceFileMode=0660
   /etc/modprobe.d/options.conf:# nouveau kms breaks nvidia so we are blacklisting nouveau
   /etc/modprobe.d/options.conf:blacklist nouveau
   /etc/modprobe.d/radeon-kms.conf:options radeon modeset=1

Env_Accumulator:
   architecture:                  x86_64
   distributor_id                 Devuan
   Drivers detected:              amdgpu
   /dev/i2c device numbers:       
   sysfs_i2c_devices_exist:       true
   /sys/bus/i2c device numbers:   0 1 2 3 4 5 6 7 8 9 10 11 12
   dev_i2c_devices_required:      true
   module_i2c_dev_needed:         true
   module_i2c_dev_builtin:        false
   loadable_i2c_dev_exists:       true
   i2c_dev_loaded_or_builtin:     false
   group_i2c_checked:             true
   group_i2c_exists:              true
   dev_i2c_common_group_name:     (null)
   all_dev_i2c_has_group_i2c:     true
   any_dev_i2c_has_group_i2c:     false
   all_dev_i2c_is_group_rw:       true
   any_dev_i2c_is_group_rw:       false
   cur_uname:                     gnarface
   cur_uid:                       1000
   cur_user_in_group_i2c:         false
   cur_user_any_devi2c_rw:        false
   cur_user_all_devi2c_rw:        true

Configuration suggestions:
   Issue:
      No /dev/i2c-N devices found.
      I2C devices exist in /sys/bus/i2c
      Module dev-i2c is required.
      Module dev-i2c is not loaded
   Suggestion:
      Manually load module i2c-dev using the command:
         sudo modprobe i2c-dev
      If this solves the problem, put an entry in directory /etc/modules-load.d
      that will cause i2c-dev to be loaded.  Type "man modules-load.d" for details

He's using devuan - so trying to avoid systemd... so that would make it a lot different to my machines. All systemd (for my sanity). They tell me the outputs actually are DP -> DVI cables. It still worked so I assumed it found it some other way. I noticed I had to modrpboe i2c-dev to have it work... thus why this is done from our end in the setuid root too. :) Anyway...

It looks like you're assuming that continuous features have values in the range 0..100. This is common, but not fixed. The maximum value has to be obtained from the mh/ml bytes of the getvcp response. 0..255 is frequently seen, and I even had a ddcui bug report from a user whose monitor actually used values greater than 255.

Oh... thanks for that. I was going by what my monitors were saying... I didn't have any obvious information tell me otherwise. I'll fix this. I've made a note in the code right now.

The code verifies that the value read for a feature value is the same as the value set

Ahhh yes - and this was NOT because of rounding. I actually found sometimes my monitor entirely ignores a request - not rounding. Like I request to set to 30 (current level is 0) and nothing happens. If I just send another request then it works. It's probably a monitor bug. This tends to happen much more if waking up from DPMS sleep just before... this also happens to handle rounding issues like when going to 0 or 100 brightness when I really want it to be there (so end of a fade in or out it ends at the right value). But the issue here is that sometimes it just doesn't like being sent lots of changes rapidly and decides to drop some.

The binary EDID is not perfectly reliable as a unique monitor identifier. I've seen one monitor, a LG 27MU67, which has neither an ASCII nor a binary serial number. So if 2 of these monitors were manufactured in the same week, they would have identical EDIDs.

we base all our monitor detection on EDID binary hex ... PLUS output name. so the entire screen handling is EDIDHEX/OUTPUT ... this accounts for the exact same EDID but attached to a different output... but for ddc .... we don't know the output name to match this up. I couldnt see any other way to do this. FYI both my monitors are Samsung monitors I bought at the same time... they are 2 serial numbers apart.... their EDID's have this embedded and so don't match. They ... at least, are well behaved. :) Wel the monitors at home. I haven't been to the office since February ... but they monitors are different models so also don't match. But... what other solutions do we have right now? If we could somehow know the output name too ... then we can combine this with the EDID like we do for screens. The probolem is for me the device will report like /dev/i2c-6 so it's not mappable to the output name like DP0 or HDMI-1 etc. ... I at least am just now crossing my fingers and hoping people rarely have this identical EDID issue. In this case I guess I'd just say "sorry - this feature won't work for you properly". I guess I should actually put in some identical EDID detection code and at least warn them of pending doom... :)

I'll try turn on ddca_enable_sleep_suppression() as I have the above "check if value set succeeded and retry" anyway that seems necessary that would handle error cases.

rastermann avatar Nov 25 '20 21:11 rastermann

oh ... sorry wrong dump from ddcutil. here:

Output level:               Verbose
Reporting DDC data errors:  false
Trace groups active:        none
Traced functions:           none
Traced files:               none
Open failed for /dev/i2c-3: errno=EACCES(13): Permission denied
Open failed for /dev/i2c-4: errno=EACCES(13): Permission denied
Open failed for /dev/i2c-5: errno=EACCES(13): Permission denied
Force I2C slave address:    false
User defined features:      disabled

Performance and Retry Options:
   Deferred sleep enabled:                      false
   Sleep suppression (reduced sleeps) enabled:  false
   Dynamic sleep adjustment enabled:            false

The following tests probe the runtime environment using multiple overlapping methods.
   Current time (local): 2020-11-26 12:15:07 AEST
   Current time (UTC):   2020-11-26 02:15:07
   Seconds since boot:   8748

*** Basic System Information ***

ddcutil version: 0.9.9

/proc/version:
   Linux version 5.9.9-arch1-1 (linux@archlinux) (gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35.1) #1 SMP PREEMPT Wed, 18 Nov 2020 19:52:04 +0000

Architecture:     x86_64
Distributor id:   Arch
Release:          rolling
Found a known architecture

/proc/cmdline:
   initrd=\amd-ucode.img initrd=\initramfs-linux.img root="UUID=0e426a15-59bd-431a-b3a1-ee157ac0428c" rw

Compiler information:
   C standard: 201710
   gcc compatible compiler:
      Compiler version: 10.2.0

Processor information as reported by lscpu:
   Architecture:                    x86_64
   CPU op-mode(s):                  32-bit, 64-bit
   Byte Order:                      Little Endian
   Address sizes:                   43 bits physical, 48 bits virtual
   CPU(s):                          4
   On-line CPU(s) list:             0-3
   Thread(s) per core:              1
   Core(s) per socket:              4
   Socket(s):                       1
   NUMA node(s):                    1
   Vendor ID:                       AuthenticAMD
   CPU family:                      23
   Model:                           1
   Model name:                      AMD Ryzen 3 1300X Quad-Core Processor
   Stepping:                        1
   Frequency boost:                 enabled
   CPU MHz:                         3396.633
   CPU max MHz:                     3500.0000
   CPU min MHz:                     1550.0000
   BogoMIPS:                        7002.84
   Virtualization:                  AMD-V
   L1d cache:                       128 KiB
   L1i cache:                       256 KiB
   L2 cache:                        2 MiB
   L3 cache:                        8 MiB
   NUMA node0 CPU(s):               0-3
   Vulnerability Itlb multihit:     Not affected
   Vulnerability L1tf:              Not affected
   Vulnerability Mds:               Not affected
   Vulnerability Meltdown:          Not affected
   Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
   Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
   Vulnerability Spectre v2:        Mitigation; Full AMD retpoline, IBPB conditional, STIBP disabled, RSB filling
   Vulnerability Srbds:             Not affected
   Vulnerability Tsx async abort:   Not affected
   Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif overflow_recov succor smca

DMI Information from /sys/class/dmi/id:
   Motherboard vendor:       MSI
   Motherboard product name: B350M MORTAR ARCTIC (MS-7A37)
   System vendor:            Micro-Star International Co., Ltd.
   System product name:      MS-7A37
   Chassis vendor:           Micro-Star International Co., Ltd.
   Chassis type:             4 - Low Profile Desktop

Byte order checks:
   Is big endian (local test):       false
   WORDS_BIGENDIAN macro (autoconf): not defined
   __BYTE_ORDER__ macro (gcc):       __ORDER_LITTLE_ENDIAN__

*** Primary Check 1: Identify video card and driver ***

Obtaining card and driver information from /sys...
Primary video controller at PCI address 0000:1c:00.0 (boot_vga flag is set)
   Device class:        x030000    VGA compatible controller
   Vendor:              x10de      NVIDIA Corporation
   Device:              x1c82      GP107 [GeForce GTX 1050 Ti]
   Subvendor/Subdevice: 1462/3351  Micro-Star International Co., Ltd. [MSI]
   Driver name:         nvidia
   Driver version:      455.45.01
   I2C device:          i2c-3      name: NVIDIA i2c adapter 4 at 1c:00.0
   I2C device:          i2c-4      name: NVIDIA i2c adapter 6 at 1c:00.0
   I2C device:          i2c-5      name: NVIDIA i2c adapter 7 at 1c:00.0

*** Primary Check 2: Check that /dev/i2c-* exist and writable ***

Current user: matheros (1000)

Checking /dev/i2c-* devices...

Unless the system is using the AMD proprietary driver fglrx, devices /dev/i2c-*
must exist and the logged on user must have read/write permission for those
devices (or at least those devices associated with monitors).

Typically, this access is enabled by:
  - setting the group for /dev/i2c-* to i2c
  - setting group RW permissions for /dev/i2c-*
  - making the current user a member of group i2c

Alternatively, this can be enabled by just giving everyone RW permission
The following tests probe for these conditions.

Checking for /dev/i2c-* devices...
   crw------- 1 root root 89, 0 Nov 26 09:49 /dev/i2c-0
   crw------- 1 root root 89, 1 Nov 26 09:49 /dev/i2c-1
   crw------- 1 root root 89, 2 Nov 26 09:49 /dev/i2c-2
   crw------- 1 root root 89, 3 Nov 26 09:49 /dev/i2c-3
   crw------- 1 root root 89, 4 Nov 26 09:49 /dev/i2c-4
   crw------- 1 root root 89, 5 Nov 26 09:49 /dev/i2c-5
Device /dev/i2c-0 is not readable and writable.  Error = EACCES(13): Permission denied
Device /dev/i2c-1 is not readable and writable.  Error = EACCES(13): Permission denied
Device /dev/i2c-2 is not readable and writable.  Error = EACCES(13): Permission denied
Device /dev/i2c-3 is not readable and writable.  Error = EACCES(13): Permission denied
Device /dev/i2c-4 is not readable and writable.  Error = EACCES(13): Permission denied
Device /dev/i2c-5 is not readable and writable.  Error = EACCES(13): Permission denied

WARNING: Current user (matheros) does not have RW access to all /dev/i2c-* devices.

Checking for group i2c...
   Group i2c does not exist

Looking for udev rules files that reference i2c:
   Checking rules directory /lib/udev/rules.d:
      /lib/udev/rules.d/60-autosuspend.rules:SUBSYSTEM=="i2c", ATTR{name}=="cyapa", \
      /lib/udev/rules.d/60-sensor.rules:SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", \
   Checking rules directory /run/udev/rules.d:
      grep: /run/udev/rules.d/*rules: No such file or directory
   Checking rules directory /etc/udev/rules.d:
      grep: /etc/udev/rules.d/*rules: No such file or directory

*** Primary Check 3: Check that module i2c_dev is loaded ***

Checking for module i2c_dev...
   Module i2c-dev is NOT built into kernel
   Loadable i2c-dev module found
   Module i2c_dev is loaded

Check that kernel module i2c_dev is being loaded by examining files where this would be specified...
   grep: /etc/modules: No such file or directory
   grep: /etc/modules-load.d/*conf: No such file or directory
   grep: /run/modules-load.d/*conf: No such file or directory

Check for any references to i2c_dev in /etc/modprobe.d ...
   grep: /run/modprobe.d/*conf: No such file or directory

*** Primary Check 4: Driver specific checks ***

Performing driver specific checks...

Checking for special settings for proprietary Nvidia driver 
(Needed for some newer Nvidia cards).
   grep: /etc/X11/xorg.conf: No such file or directory
   grep: /etc/X11/xorg.conf.d/*: No such file or directory

*** Additional probes ***

Scanning /proc/modules for driver environment...
   Found other loaded module:      videobuf2_vmalloc
   Found other loaded module:      videobuf2_memops
   Found other loaded module:      videobuf2_v4l2
   Found other loaded module:      videobuf2_common
   Found other loaded module:      videodev
   Found other loaded module:      i2c_dev
   Found video driver module:      nvidia
   Found other loaded module:      drm_kms_helper
   Found other loaded module:      i2c_piix4
   Loaded drm module depends on:   nvidia_drm,drm_kms_helper,

Testing if modules are loaded using /sys...
   Module amdgpu           is NOT loaded
   Module fbdev            is NOT loaded
   Module fglrx            is NOT loaded
   Module fturbo           is NOT loaded
   Module i915             is NOT loaded
   Module mgag200          is NOT loaded
   Module nvidia           is loaded
   Module nouveau          is NOT loaded
   Module radeon           is NOT loaded
   Module vboxvideo        is NOT loaded
   Module vc4              is NOT loaded
   Module drm              is loaded
   Module i2c_algo_bit     is NOT loaded
   Module i2c_dev          is loaded
   Module i2c_piix4        is loaded
   Module ddcci            is NOT loaded

Examining /sys/bus/i2c/devices...
   /sys/bus/i2c/devices/i2c-3/name:   NVIDIA i2c adapter 4 at 1c:00.0
   /sys/bus/i2c/devices/i2c-1/name:   SMBus PIIX4 adapter port 2 at 0b00
   /sys/bus/i2c/devices/i2c-4/name:   NVIDIA i2c adapter 6 at 1c:00.0
   /sys/bus/i2c/devices/i2c-2/name:   SMBus PIIX4 adapter port 1 at 0b20
   /sys/bus/i2c/devices/i2c-0/name:   SMBus PIIX4 adapter port 0 at 0b00
   /sys/bus/i2c/devices/i2c-5/name:   NVIDIA i2c adapter 7 at 1c:00.0

Examining /proc/driver/nvidia:
   /proc/driver/nvidia/version:
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  455.45.01  Thu Nov  5 23:03:56 UTC 2020
      GCC version:  gcc version 10.2.0 (GCC)
   /proc/driver/nvidia/registry:
      Binary: ""
   /proc/driver/nvidia/params:
      ResmanDebugLevel: 4294967295
      RmLogonRC: 1
      ModifyDeviceFiles: 1
      DeviceFileUID: 0
      DeviceFileGID: 0
      DeviceFileMode: 438
      InitializeSystemMemoryAllocations: 1
      UsePageAttributeTable: 4294967295
      EnableMSI: 1
      RegisterForACPIEvents: 1
      EnablePCIeGen3: 0
      MemoryPoolSize: 0
      KMallocHeapMaxSize: 0
      VMallocHeapMaxSize: 0
      IgnoreMMIOCheck: 0
      TCEBypassMode: 0
      EnableStreamMemOPs: 0
      EnableBacklightHandler: 1
      EnableUserNUMAManagement: 1
      NvLinkDisable: 0
      RmProfilingAdminOnly: 1
      PreserveVideoMemoryAllocations: 0
      DynamicPowerManagement: 0
      DynamicPowerManagementVideoMemoryThreshold: 200
      RegisterPCIDriver: 1
      EnablePCIERelaxedOrderingMode: 0
      RegistryDwords: ""
      RegistryDwordsPerDevice: ""
      RmMsg: ""
      AssignGpus: ""
      GpuBlacklist: ""
      TemporaryFilePath: ""
   PCI bus id: 0000:1c:00.0
   /proc/driver/nvidia/gpus/0000:1c:00.0/information:
      Model: 		 GeForce GTX 1050 Ti
      IRQ:   		 68
      GPU UUID: 	 GPU-f3377428-8e9d-9e1d-6efb-a9bb5253c6c5
      Video BIOS: 	 86.07.39.00.e9
      Bus Type: 	 PCIe
      DMA Size: 	 47 bits
      DMA Mask: 	 0x7fffffffffff
      Bus Location: 	 0000:1c:00.0
      Device Minor: 	 0
      Blacklisted:	 No
   /proc/driver/nvidia/gpus/0000:1c:00.0/registry:
      Binary: ""

Examining I2C buses, as detected by I2C layer...
   Current time (local): 2020-11-26 12:15:07 AEST
   Current time (UTC):   2020-11-26 02:15:07
   Seconds since boot:   8748

   Detected 3 non-ignorable I2C buses:

   Bus /dev/i2c-3 found:   true
   Bus /dev/i2c-3 probed:  true
   Bus accessible:          false
   Bus is eDP:              false
   Valid bus name checked:  true
   I2C bus has valid name:  true
   Address 0x37 present:    false
   Address 0x50 present:    false

   Bus /dev/i2c-4 found:   true
   Bus /dev/i2c-4 probed:  true
   Bus accessible:          false
   Bus is eDP:              false
   Valid bus name checked:  true
   I2C bus has valid name:  true
   Address 0x37 present:    false
   Address 0x50 present:    false

   Bus /dev/i2c-5 found:   true
   Bus /dev/i2c-5 probed:  true
   Bus accessible:          false
   Bus is eDP:              false
   Valid bus name checked:  true
   I2C bus has valid name:  true
   Address 0x37 present:    false
   Address 0x50 present:    false

xrandr connection report:
   DVI-D-0 disconnected (normal left inverted right x axis y axis)
   HDMI-0 disconnected (normal left inverted right x axis y axis)
   DP-0 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 697mm x 392mm
   DP-1 disconnected (normal left inverted right x axis y axis)

Checking for possibly conflicting programs...

Examining I2C buses using i2cdetect... 
   Current time (local): 2020-11-26 12:15:07 AEST
   Current time (UTC):   2020-11-26 02:15:07
   Seconds since boot:   8748

   Device /dev/i2c-0 is a SMBus or other ignorable device.  Skipping i2cdetect.

   Device /dev/i2c-1 is a SMBus or other ignorable device.  Skipping i2cdetect.

   Device /dev/i2c-2 is a SMBus or other ignorable device.  Skipping i2cdetect.

   Probing bus /dev/i2c-3 using command "i2cdetect -y 3"
   i2cdetect command unavailable

Performing basic scan of I2C devices using local sysenv functions...
   Current time (local): 2020-11-26 12:15:07 AEST
   Current time (UTC):   2020-11-26 02:15:07
   Seconds since boot:   8748

   Examining device /dev/i2c-0...
                           Device /dev/i2c-0 is a SMBus or other ignorable device.  Skipping.

   Examining device /dev/i2c-1...
                           Device /dev/i2c-1 is a SMBus or other ignorable device.  Skipping.

   Examining device /dev/i2c-2...
                           Device /dev/i2c-2 is a SMBus or other ignorable device.  Skipping.

   Examining device /dev/i2c-3...
Device /dev/i2c-3 is not readable and writable.  Error = EACCES(13): Permission denied

   Examining device /dev/i2c-4...
Device /dev/i2c-4 is not readable and writable.  Error = EACCES(13): Permission denied

   Examining device /dev/i2c-5...
Device /dev/i2c-5 is not readable and writable.  Error = EACCES(13): Permission denied

EDIDs reported by X11 for connected xrandr outputs:
   xrandr output: DP-0
      Raw EDID:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 1e 6d 2a 77 f1 2f 03 00   .........m*w./..
      +0010   03 1e 01 04 b5 46 27 78 9e 05 95 a7 56 51 9c 25   .....F'x....VQ.%
      +0020   15 50 54 25 6b 80 71 40 81 80 81 c0 a9 c0 b3 00   .PT%k.q@........
      +0030   d1 c0 81 00 d1 cf 56 5e 00 a0 a0 a0 29 50 30 20   ......V^....)P0 
      +0040   35 00 b9 88 21 00 00 1a d9 76 00 a0 a0 a0 34 50   5...!....v....4P
      +0050   30 20 35 00 b9 88 21 00 00 1a 00 00 00 fd 00 32   0 5...!........2
      +0060   90 1e e6 3c 00 0a 20 20 20 20 20 20 00 00 00 fc   ...<..      ....
      +0070   00 4c 47 20 51 48 44 0a 20 20 20 20 20 20 01 44   .LG QHD.      .D
      EDID synopsis:
         Mfg id:           GSM
         Model:            LG QHD
         Serial number:    
         Manufacture year: 2020
         EDID version:     1.4
         Product code:     30506
         Binary sn:        208881 (0x00032ff1)
         Extra descriptor: 
         Video input definition: 0xb5 - Digital Input (DisplayPort)
         Supported features:
            DPMS standby
            Digital display type: RGB 4:4:4 + YCrCb 4:2:2
            Standard sRGB color space: True
         White x,y:        0.313, 0.329
         Red   x,y:        0.652, 0.336
         Green x,y:        0.317, 0.610
         Blue  x,y:        0.146, 0.083
         Extension blocks: 1
      EDID source: 
(query_x11                     ) EDID not found

Probing I2C devices using udev, susbsystem i2c-dev...
   Current time (local): 2020-11-26 12:15:07 AEST
   Current time (UTC):   2020-11-26 02:15:07
   Seconds since boot:   8748
Summary of udev I2C devices
   Subsystem   Sysname    Sysattr Name                        Devpath
   i2c-dev     i2c-0      SMBus PIIX4 adapter port 0 at 0b00  /devices/pci0000:00/0000:00:14.0/i2c-0/i2c-dev/i2c-0
   i2c-dev     i2c-1      SMBus PIIX4 adapter port 2 at 0b00  /devices/pci0000:00/0000:00:14.0/i2c-1/i2c-dev/i2c-1
   i2c-dev     i2c-2      SMBus PIIX4 adapter port 1 at 0b20  /devices/pci0000:00/0000:00:14.0/i2c-2/i2c-dev/i2c-2
   i2c-dev     i2c-3      NVIDIA i2c adapter 4 at 1c:00.0     /devices/pci0000:00/0000:00:03.1/0000:1c:00.0/i2c-3/i2c-dev/i2c-3
   i2c-dev     i2c-4      NVIDIA i2c adapter 6 at 1c:00.0     /devices/pci0000:00/0000:00:03.1/0000:1c:00.0/i2c-4/i2c-dev/i2c-4
   i2c-dev     i2c-5      NVIDIA i2c adapter 7 at 1c:00.0     /devices/pci0000:00/0000:00:03.1/0000:1c:00.0/i2c-5/i2c-dev/i2c-5

Looking for udev devices with name attribute DPMST...
Summary of udev DPMST devices...
   No devices detected

amdgpu configuration parameters:


Examining configuration files...

DKMS modules:
   hid-xpadneo, 0.9.r1.g84cabe9, 5.9.9-arch1-1, x86_64: installed

Kernel I2C configuration settings:
   grep: /boot/config-5.9.9-arch1-1: Permission denied

Kernel AMDGPU configuration settings:
   grep: /boot/config-5.9.9-arch1-1: Permission denied


Examining system logs...
Current timestamps:
   Current time (local): 2020-11-26 12:15:08 AEST
   Current time (UTC):   2020-11-26 02:15:08
   Seconds since boot:   8749

   Scanning dmesg output for I2C related entries...
   Executing command: dmesg
      [    0.295145] ACPI: Added _OSI(Linux-Dell-Video)
      [    0.355290] pci 0000:1c:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
      [    2.789487] systemd[1]: Starting Load Kernel Module drm...
      [    2.818566] systemd[1]: [email protected]: Succeeded.
      [    2.818806] systemd[1]: Finished Load Kernel Module drm.
      [    4.114041] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input3
      [    4.114085] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input4
      [    4.114116] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input5
      [    4.114145] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input6
      [    4.114174] input: HDA NVidia HDMI/DP,pcm=10 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input7
      [    4.114203] input: HDA NVidia HDMI/DP,pcm=11 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input8
      [    4.479536] Modules linked in: ccm bnep algif_aead btusb btrtl cbc btbcm btintel hid_generic(+) des_generic bluetooth libdes ecb edac_mce_amd algif_skcipher kvm_amd usbhid iptable_nat cmac hid nf_nat kvm snd_hda_codec_realtek md4 nf_conntrack snd_hda_codec_hdmi snd_hda_codec_generic algif_hash ledtrig_audio nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c af_alg apple_mfi_fastcharge iptable_mangle iwlmvm snd_hda_intel ecdh_generic iptable_filter ecc irqbypass crct10dif_pclmul crc32_pclmul wmi_bmof snd_intel_dspcfg snd_hda_codec mac80211 ghash_clmulni_intel ppdev snd_hda_core libarc4 aesni_intel crypto_simd cryptd glue_helper snd_hwdep drm_kms_helper rapl iwlwifi snd_pcm cec pcspkr r8169 sp5100_tco snd_timer k10temp ccp i2c_piix4 rc_core syscopyarea cfg80211 realtek sysfillrect snd sysimgblt rng_core soundcore fb_sys_fops mdio_devres of_mdio fixed_phy libphy rfkill wmi parport_pc parport pinctrl_amd gpio_amdpt evdev mac_hid acpi_cpufreq drm pkcs8_key_parser crypto_user agpgart ip_tables x_tables
      [    4.872843] nvidia: loading out-of-tree module taints kernel.
      [    4.872852] nvidia: module license 'NVIDIA' taints kernel.
      [    4.882808] nvidia: module verification failed: signature and/or required key missing - tainting kernel
      [    4.898463] nvidia-nvlink: Nvlink Core is being initialized, major device number 237
      [    4.898973] nvidia 0000:1c:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=io+mem
      [    5.015669] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  455.45.01  Thu Nov  5 23:03:56 UTC 2020
      [    5.052184] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  455.45.01  Thu Nov  5 22:55:44 UTC 2020
      [    5.055754] [drm] [nvidia-drm] [GPU ID 0x00001c00] Loading driver
      [    5.055756] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:1c:00.0 on minor 0
      [    5.496416] caller _nv000709rm+0x1af/0x200 [nvidia] mapping multiple BARs
      [ 4038.294826] usb 3-3: Product: AN-VC400 Camera
      [ 4038.347389] videodev: Linux video capture interface: v2.00
      [ 4038.362115] uvcvideo: Found UVC 1.00 device AN-VC400 Camera (043e:3009)
      [ 4038.364957] input: AN-VC400 Camera as /devices/pci0000:00/0000:00:07.1/0000:1d:00.3/usb3/3-3/3-3:1.0/input/input23
      [ 4038.365055] usbcore: registered new interface driver uvcvideo
      [ 4038.365055] USB Video Class driver (1.1.1)

   Scanning journalctl output for I2C related entries...
   Executing command: journalctl --no-pager --boot
      Nov 26 09:49:23 Turmeric kernel: ACPI: Added _OSI(Linux-Dell-Video)
      Nov 26 09:49:23 Turmeric kernel: pci 0000:1c:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
      Nov 26 09:49:23 Turmeric systemd[1]: Starting Load Kernel Module drm...
      Nov 26 09:49:23 Turmeric systemd[1]: [email protected]: Succeeded.
      Nov 26 09:49:23 Turmeric systemd[1]: Finished Load Kernel Module drm.
      Nov 26 09:49:24 Turmeric kernel: input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input3
      Nov 26 09:49:24 Turmeric kernel: input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input4
      Nov 26 09:49:24 Turmeric kernel: input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input5
      Nov 26 09:49:24 Turmeric kernel: input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input6
      Nov 26 09:49:24 Turmeric kernel: input: HDA NVidia HDMI/DP,pcm=10 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input7
      Nov 26 09:49:24 Turmeric kernel: input: HDA NVidia HDMI/DP,pcm=11 as /devices/pci0000:00/0000:00:03.1/0000:1c:00.1/sound/card0/input8
      Nov 26 09:49:24 Turmeric kernel: Modules linked in: ccm bnep algif_aead btusb btrtl cbc btbcm btintel hid_generic(+) des_generic bluetooth libdes ecb edac_mce_amd algif_skcipher kvm_amd usbhid iptable_nat cmac hid nf_nat kvm snd_hda_codec_realtek md4 nf_conntrack snd_hda_codec_hdmi snd_hda_codec_generic algif_hash ledtrig_audio nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c af_alg apple_mfi_fastcharge iptable_mangle iwlmvm snd_hda_intel ecdh_generic iptable_filter ecc irqbypass crct10dif_pclmul crc32_pclmul wmi_bmof snd_intel_dspcfg snd_hda_codec mac80211 ghash_clmulni_intel ppdev snd_hda_core libarc4 aesni_intel crypto_simd cryptd glue_helper snd_hwdep drm_kms_helper rapl iwlwifi snd_pcm cec pcspkr r8169 sp5100_tco snd_timer k10temp ccp i2c_piix4 rc_core syscopyarea cfg80211 realtek sysfillrect snd sysimgblt rng_core soundcore fb_sys_fops mdio_devres of_mdio fixed_phy libphy rfkill wmi parport_pc parport pinctrl_amd gpio_amdpt evdev mac_hid acpi_cpufreq drm pkcs8_key_parser crypto_user agpgart ip_tables x_tables
      Nov 26 09:49:24 Turmeric systemd[1]: Condition check resulted in Load Kernel Module drm being skipped.
      Nov 26 09:49:24 Turmeric kernel: nvidia: loading out-of-tree module taints kernel.
      Nov 26 09:49:24 Turmeric kernel: nvidia: module license 'NVIDIA' taints kernel.
      Nov 26 09:49:24 Turmeric kernel: nvidia: module verification failed: signature and/or required key missing - tainting kernel
      Nov 26 09:49:24 Turmeric kernel: nvidia-nvlink: Nvlink Core is being initialized, major device number 237
      Nov 26 09:49:24 Turmeric kernel: nvidia 0000:1c:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=io+mem
      Nov 26 09:49:25 Turmeric kernel: NVRM: loading NVIDIA UNIX x86_64 Kernel Module  455.45.01  Thu Nov  5 23:03:56 UTC 2020
      Nov 26 09:49:25 Turmeric kernel: nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  455.45.01  Thu Nov  5 22:55:44 UTC 2020
      Nov 26 09:49:25 Turmeric kernel: [drm] [nvidia-drm] [GPU ID 0x00001c00] Loading driver
      Nov 26 09:49:25 Turmeric kernel: [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:1c:00.0 on minor 0
      Nov 26 09:49:25 Turmeric kernel: caller _nv000709rm+0x1af/0x200 [nvidia] mapping multiple BARs
      Nov 26 09:49:26 Turmeric root[494]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[535]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[544]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[548]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[552]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[556]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[560]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[564]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[568]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[572]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 09:49:27 Turmeric root[576]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 10:34:13 Turmeric root[2511]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 10:34:16 Turmeric root[2526]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 10:43:16 Turmeric root[2600]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 10:43:18 Turmeric root[2609]: ACPI group/action undefined: jack/videoout / VIDEOOUT
      Nov 26 10:56:38 Turmeric kernel: usb 3-3: Product: AN-VC400 Camera
      Nov 26 10:56:38 Turmeric kernel: videodev: Linux video capture interface: v2.00
      Nov 26 10:56:38 Turmeric kernel: uvcvideo: Found UVC 1.00 device AN-VC400 Camera (043e:3009)
      Nov 26 10:56:38 Turmeric kernel: input: AN-VC400 Camera as /devices/pci0000:00/0000:00:07.1/0000:1d:00.3/usb3/3-3/3-3:1.0/input/input23
      Nov 26 10:56:38 Turmeric kernel: usbcore: registered new interface driver uvcvideo
      Nov 26 10:56:38 Turmeric kernel: USB Video Class driver (1.1.1)


   Scanning file: /var/log/Xorg.0.log
   Limiting output to first 200 relevant lines...
      [     5.101] 	X.Org Video Driver: 24.1
      [     5.102] (II) xfree86: Adding drm device (/dev/dri/card0)
      [     5.103] (**) OutputClass "nvidia" ModulePath extended to "/usr/lib/nvidia/xorg,/usr/lib/xorg/modules,/usr/lib/xorg/modules"
      [     5.106] (II) Applying OutputClass "nvidia" to /dev/dri/card0
      [     5.106] 	loading driver: nvidia
      [     5.106] (==) Matched nvidia as autoconfigured driver 0
      [     5.106] (==) Matched nouveau as autoconfigured driver 1
      [     5.106] (==) Matched fbdev as autoconfigured driver 4
      [     5.106] (II) LoadModule: "nvidia"
      [     5.106] (II) Loading /usr/lib/xorg/modules/drivers/nvidia_drv.so
      [     5.108] (II) Module nvidia: vendor="NVIDIA Corporation"
      [     5.108] 	Module class: X.Org Video Driver
      [     5.109] (II) LoadModule: "nouveau"
      [     5.109] (WW) Warning, couldn't open module nouveau
      [     5.109] (EE) Failed to load module "nouveau" (module does not exist, 0)
      [     5.109] 	Module class: X.Org Video Driver
      [     5.109] 	ABI class: X.Org Video Driver, version 24.1
      [     5.109] (II) LoadModule: "fbdev"
      [     5.109] (WW) Warning, couldn't open module fbdev
      [     5.109] (EE) Failed to load module "fbdev" (module does not exist, 0)
      [     5.109] 	Module class: X.Org Video Driver
      [     5.109] 	ABI class: X.Org Video Driver, version 24.1
      [     5.110] (II) NVIDIA dlloader X Driver  455.45.01  Thu Nov  5 23:01:05 UTC 2020
      [     5.110] (II) NVIDIA Unified Driver for all Supported NVIDIA GPUs
      [     5.113] (II) NVIDIA(0): Creating default Display subsection in Screen section
      [     5.113] (==) NVIDIA(0): Depth 24, (==) framebuffer bpp 32
      [     5.113] (==) NVIDIA(0): RGB weight 888
      [     5.113] (==) NVIDIA(0): Default visual is TrueColor
      [     5.113] (==) NVIDIA(0): Using gamma correction (1.0, 1.0, 1.0)
      [     5.113] (II) Applying OutputClass "nvidia" options to /dev/dri/card0
      [     5.113] (**) NVIDIA(0): Option "AllowEmptyInitialConfiguration"
      [     5.114] (**) NVIDIA(0): Enabling 2D acceleration
      [     5.114] (II) Loading sub module "glxserver_nvidia"
      [     5.114] (II) LoadModule: "glxserver_nvidia"
      [     5.114] (II) Loading /usr/lib/nvidia/xorg/libglxserver_nvidia.so
      [     5.155] (II) Module glxserver_nvidia: vendor="NVIDIA Corporation"
      [     5.155] (II) NVIDIA GLX Module  455.45.01  Thu Nov  5 22:58:18 UTC 2020
      [     5.157] (II) NVIDIA: The X server supports PRIME Render Offload.
      [     5.930] (--) NVIDIA(0): Valid display device(s) on GPU-0 at PCI:28:0:0
      [     5.930] (--) NVIDIA(0):     DFP-0
      [     5.930] (--) NVIDIA(0):     DFP-1
      [     5.930] (--) NVIDIA(0):     DFP-2 (boot)
      [     5.930] (--) NVIDIA(0):     DFP-3
      [     5.930] (II) NVIDIA(0): NVIDIA GPU GeForce GTX 1050 Ti (GP107-A) at PCI:28:0:0
      [     5.930] (II) NVIDIA(0):     (GPU-0)
      [     5.930] (--) NVIDIA(0): Memory: 4194304 kBytes
      [     5.930] (--) NVIDIA(0): VideoBIOS: 86.07.39.00.e9
      [     5.930] (II) NVIDIA(0): Detected PCI Express Link width: 16X
      [     5.930] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     5.930] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     5.930] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     5.930] (--) NVIDIA(GPU-0):
      [     5.931] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     5.931] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     5.931] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     5.931] (--) NVIDIA(GPU-0):
      [     5.931] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     5.931] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     5.931] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     5.931] (--) NVIDIA(GPU-0):
      [     5.932] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     5.932] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     5.932] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     5.932] (--) NVIDIA(GPU-0):
      [     5.936] (==) NVIDIA(0):
      [     5.936] (==) NVIDIA(0): No modes were requested; the default mode "nvidia-auto-select"
      [     5.936] (==) NVIDIA(0):     will be used as the requested mode.
      [     5.936] (==) NVIDIA(0):
      [     5.936] (II) NVIDIA(0): Validated MetaModes:
      [     5.936] (II) NVIDIA(0):     "DFP-2:nvidia-auto-select"
      [     5.936] (II) NVIDIA(0): Virtual screen size determined to be 2560 x 1440
      [     5.942] (--) NVIDIA(0): DPI set to (92, 93); computed from "UseEdidDpi" X config
      [     5.942] (--) NVIDIA(0):     option
      [     5.943] (II) NVIDIA: Using 24576.00 MB of virtual memory for indirect memory
      [     5.943] (II) NVIDIA:     access.
      [     5.959] (II) NVIDIA(0): Setting mode "DFP-2:nvidia-auto-select"
      [     6.035] (==) NVIDIA(0): Disabling shared memory pixmaps
      [     6.035] (==) NVIDIA(0): Backing store enabled
      [     6.035] (==) NVIDIA(0): Silken mouse disabled
      [     6.035] (==) NVIDIA(0): DPMS enabled
      [     6.035] (II) NVIDIA(0): [DRI2] Setup complete
      [     6.035] (II) NVIDIA(0): [DRI2]   VDPAU driver: nvidia
      [     6.038] (II) Initializing extension XVideo
      [     6.038] (II) Initializing extension XVideo-MotionCompensation
      [     6.522] (II) config/udev: Adding input device HDA NVidia HDMI/DP,pcm=3 (/dev/input/event3)
      [     6.522] (II) config/udev: Adding input device HDA NVidia HDMI/DP,pcm=7 (/dev/input/event4)
      [     6.522] (II) config/udev: Adding input device HDA NVidia HDMI/DP,pcm=8 (/dev/input/event5)
      [     6.523] (II) config/udev: Adding input device HDA NVidia HDMI/DP,pcm=9 (/dev/input/event6)
      [     6.523] (II) config/udev: Adding input device HDA NVidia HDMI/DP,pcm=10 (/dev/input/event7)
      [     6.523] (II) config/udev: Adding input device HDA NVidia HDMI/DP,pcm=11 (/dev/input/event8)
      [     6.528] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     6.528] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     6.528] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     6.528] (--) NVIDIA(GPU-0):
      [     7.032] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     7.032] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     7.032] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     7.032] (--) NVIDIA(GPU-0):
      [     7.032] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     7.032] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     7.032] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     7.032] (--) NVIDIA(GPU-0):
      [     7.032] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     7.032] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     7.032] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     7.032] (--) NVIDIA(GPU-0):
      [     7.033] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     7.033] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     7.033] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     7.033] (--) NVIDIA(GPU-0):
      [     7.037] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     7.037] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     7.037] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     7.037] (--) NVIDIA(GPU-0):
      [     7.037] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     7.037] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     7.037] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     7.037] (--) NVIDIA(GPU-0):
      [     7.037] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     7.037] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     7.037] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     7.037] (--) NVIDIA(GPU-0):
      [     7.038] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     7.038] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     7.038] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     7.038] (--) NVIDIA(GPU-0):
      [     7.043] (II) NVIDIA(0): Setting mode "DP-0: 2560x1440_144 @2560x1440 +0+0 {ViewPortIn=2560x1440, ViewPortOut=2560x1440+0+0}"
      [     7.109] (II) NVIDIA(0): Setting mode "DP-0: 2560x1440_144 @2560x1440 +0+0 {ViewPortIn=2560x1440, ViewPortOut=2560x1440+0+0}"
      [     7.154] (II) NVIDIA(0): Setting mode "DP-0: 2560x1440_144 @2560x1440 +0+0 {ViewPortIn=2560x1440, ViewPortOut=2560x1440+0+0}"
      [     7.198] (II) NVIDIA(0): Setting mode "DP-0: 2560x1440_144 @2560x1440 +0+0 {ViewPortIn=2560x1440, ViewPortOut=2560x1440+0+0}"
      [     7.242] (II) NVIDIA(0): Setting mode "DP-0: 2560x1440_144 @2560x1440 +0+0 {ViewPortIn=2560x1440, ViewPortOut=2560x1440+0+0}"
      [     8.359] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     8.359] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     8.359] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     8.359] (--) NVIDIA(GPU-0):
      [     8.359] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     8.359] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     8.359] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     8.359] (--) NVIDIA(GPU-0):
      [     8.359] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     8.360] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     8.360] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     8.360] (--) NVIDIA(GPU-0):
      [     8.361] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     8.361] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     8.361] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     8.361] (--) NVIDIA(GPU-0):
      [     8.361] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     8.361] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     8.361] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     8.361] (--) NVIDIA(GPU-0):
      [     8.361] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     8.361] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     8.361] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     8.361] (--) NVIDIA(GPU-0):
      [     8.361] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     8.361] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     8.361] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     8.361] (--) NVIDIA(GPU-0):
      [     8.362] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     8.362] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     8.362] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     8.362] (--) NVIDIA(GPU-0):
      [     8.363] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     8.363] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     8.363] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     8.363] (--) NVIDIA(GPU-0):
      [     8.363] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     8.363] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     8.363] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     8.363] (--) NVIDIA(GPU-0):
      [     8.363] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     8.363] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     8.363] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     8.363] (--) NVIDIA(GPU-0):
      [     8.364] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     8.364] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     8.364] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     8.364] (--) NVIDIA(GPU-0):
      [     8.365] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     8.365] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     8.365] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     8.365] (--) NVIDIA(GPU-0):
      [     8.365] (--) NVIDIA(GPU-0): DFP-1: disconnected
      [     8.365] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
      [     8.365] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
      [     8.365] (--) NVIDIA(GPU-0):
      [     8.365] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): connected
      [     8.365] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): Internal DisplayPort
      [     8.365] (--) NVIDIA(GPU-0): LG Electronics LG QHD (DFP-2): 1440.0 MHz maximum pixel clock
      [     8.365] (--) NVIDIA(GPU-0):
      [     8.366] (--) NVIDIA(GPU-0): DFP-3: disconnected
      [     8.366] (--) NVIDIA(GPU-0): DFP-3: Internal TMDS
      [     8.366] (--) NVIDIA(GPU-0): DFP-3: 165.0 MHz maximum pixel clock
      [     8.366] (--) NVIDIA(GPU-0):
      [     8.366] (--) NVIDIA(GPU-0): DFP-0: disconnected
      [     8.366] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
      [     8.366] (--) NVIDIA(GPU-0): DFP-0: 330.0 MHz maximum pixel clock
      [     8.366] (--) NVIDIA(GPU-0):
      [     8.366] (--) NVIDIA(GPU-0): DFP-1: disconnected

   File not found: /var/log/messages

   File not found: /var/log/kern.log

   File not found: /var/log/daemon.log

   File not found: /var/log/syslog


   Log Summary
      Log                             Checked   Found 
      ===                             =======   ===== 
      dmesg                           true      true  
      journalctl                      true      false 
      /var/log/daemon.log             true      false 
      /var/log/kern.log               true      false 
      /var/log/messages               true      false 
      /var/log/syslog                 true      false 
      /var/log/Xorg.0.log             true      true  

Probing connected monitors using libdrm...

   Checking Nvidia options to see if experimental kernel modesetting enabled:
   Executing command: modprobe -c | grep "^options nvidia"

   Checking libdrm version using pkg-config...
      2.4.103

   Has a DRM kernel driver been loaded? (drmAvailable()): true

   Probing device /dev/dri/card0...
      Open succeeded for device: /dev/dri/card0

      DRM driver version information:
         Version:     0.0.0
         Driver:      nvidia-drm
         Date:        20160202
         Description: NVIDIA DRM driver

      DRM library version: 1.3.0.

      DRM Busid:  

      Device information:
         bustype:                0 - pci
         domain:bus:device.func: 0000:1c:00.0
         vendor    vid:pid:      0x10de:0x1c82
         subvendor vid:pid:      0x1462:0x3351
         revision id:            0x00a1

      Is a modesetting capable driver attached to bus id: pci:0000:1c:00.0?
      (calling drmCheckModesettingAvailable())
         Modesetting not supported (-ENOSYS)

      Retrieving DRM resources...
      Failure retrieving DRM resources, errno=EOPNOTSUPP(95): Operation not supported

Examining /sys/class/drm...
   Query file system for i2c nodes under /sys/class/drm/card*...
   ls: cannot access '/sys/class/drm/card*/card*/i2c*': No such file or directory

Device Identifier Cross Reference Report

Video related contents of /etc/modprobe.d

Env_Accumulator:
   architecture:                  x86_64
   distributor_id                 Arch
   Drivers detected:              nvidia
   /dev/i2c device numbers:       0 1 2 3 4 5
   sysfs_i2c_devices_exist:       true
   /sys/bus/i2c device numbers:   0 1 2 3 4 5
   dev_i2c_devices_required:      true
   module_i2c_dev_needed:         true
   module_i2c_dev_builtin:        false
   loadable_i2c_dev_exists:       true
   i2c_dev_loaded_or_builtin:     true
   group_i2c_checked:             true
   group_i2c_exists:              false
   dev_i2c_common_group_name:     root
   all_dev_i2c_has_group_i2c:     false
   any_dev_i2c_has_group_i2c:     false
   all_dev_i2c_is_group_rw:       true
   any_dev_i2c_is_group_rw:       false
   cur_uname:                     matheros
   cur_uid:                       1000
   cur_user_in_group_i2c:         false
   cur_user_any_devi2c_rw:        false
   cur_user_all_devi2c_rw:        false

Configuration suggestions:
   Issue:
      Group i2c does not exist.
   Suggestion:
      Create group i2c. To create group i2c, use command:
         sudo groupadd --system i2c
      Assign /dev/i2c-N devices to group i2c by adding a rule to /etc/udev/rules.d
      Add the current user to group i2c:
         sudo usermod -G i2c -a <username>
      After this, you will have to logout and login again.
      The changes to the user's group list are not read until a new login.

rastermann avatar Nov 26 '20 02:11 rastermann

Is it possible for user gnarface to rerun "ddcutil environment --verbose" built from the 1.0.0-dev branch? That is the version that contains the detailed analysis of /sys. Also, the command needs to be run as root, as that is needed for the extended checks for the "--verbose" option.

It's unclear to me why you sent the second listing for user matheros. Does this system also exhibit the missing status attribute? Again, I would need the detailed analysis of /sys provided by "ddcutil environment --verbose" in branch 1.1.0-dev. And again, the command should be run as root.

Please send voluminous output as attachments rather than inline. They're hard to make sense of without copying the output to separate files, and more importantly they make it hard to follow the thread of an issue.

Re your additional comments:

For our purposes the major difference between VGA/DVI/HDMI and DisplayPort is that the former use dedicated pins for I2C communication, while the latter carries the logical I2C signal over its AUX channel. So a DP-DVI adapter will have to perform a conversion. I believe this is one of the differences between active vs passive adapters, but I have not seen this documented and have not tested to confirm.

I agree that it makes sense to punt on the very unlikely case of multiple monitors with the same EDID. However, at least for drm devices it is possible to associate a connector/edid pair with an I2C device by examining /sys/class/drm/cardN-connector. Attribute edid is, well, the EDID. For DisplayPort connectors the i2c bus is attribute i2c-N. For non-DisplayPort connectors, the i2c bus is found at ddc/i2c-dev/i2c-N.

rockowitz avatar Nov 30 '20 15:11 rockowitz

A further follow up re lost setvcp requests. For getvcp, the host sends a getvcp request packet to the display. As part of the protocol for sending an I2C packet, a sequence of ACKs and NACKs ensure that the packet was delivered. The display subsequently sends a response packet to the host, which includes a flag indicating whether the feature is supported, along with its value. Or it may return a DDC Null Message, indicating that it can't respond, e.g. if it doesn't know what to do with the request.

For setvcp, there is only the request packet sent from the host to the display. There is no response packet. So all the host knows is that the request was delivered, not that it was processed. If the requests arrive too quickly, unless the display has an internal request queue of sufficient size, some requests will not be processed properly, i.e. some setvcp requests will fail.

rockowitz avatar Nov 30 '20 15:11 rockowitz

matheros was the right user - I mixed up 2 users who are using ddcutil. gnarface didn't have the issues - matheros did. I asked them today (they've been away for a bit) - they are using the ddcutil-git AUR pkg - so this should be latest and greatest for you, right?

out.txt

As for DDC signals over DP - for me at least its not DVI -> DP. It's direct DP to DP - no DVI conversion cable involved. Well it was until yesterday. One of my screens flat-out died and doesn't power on - the other is on the blink (can't use DPMS...). I've now had to buy 2 replacements and they are now HDMI only (well in theory I could use USB-C alt-mode with DP ... if my GPU had that output... it doesn't)

I found that in some cases like when the monitor just powers up (eg. from dpms sleep) it may drop setvcp's and ignore them for some period of time. Thus why I started doing gt's and re-tries to see if it worked. :)

rastermann avatar Dec 17 '20 12:12 rastermann

@rastermann File out.txt contains output for the 0.9.9 production release, This is the master branch in this git repository. The additional code exploring /sys is only in the 1.0.0-dev development branch. Also, for some reason the out.txt file ends in what should be the middle of the output.

rockowitz avatar Dec 17 '20 15:12 rockowitz

you you do your git upside down to us - master for us is dev, and stable releases in branches... hmm i have to convince them to swtich branches in their aur build..

rastermann avatar Dec 17 '20 18:12 rastermann