Shared Library Changes for Release 2.2.6
Shared library libddcutil is backwardly compatible with the ones in ddcutil 2.2.1 and later. The SONAME is unchanged as libddcutil.so.5. The released library file is libddcutil.so.5.5.0.
Release 2.2.6 replaces release 2.2.5, which was reported to hang KDE Plasma at login.
Added
- Added API function ddca_get_non_table_vcp_value2(). Unlike ddca_get_non_table_vcp_value(), which is now deprecated, the new function never performs verification.
Changed
- Ignore laptop displays when processing display connection and disconneciton.
-
Add "AMDGPU DM i2c OEM bus" to list of names of I2C buses to be ignored. Theses buses are used to control display controller features like RGB lighting.
-
Eliminate use in libddcutil of linux api function access() to check if the user has RW access to a /dev/i2c device. Bug reports suggest this function may not always respect UDEV token UACCESS.
- More extensive syslog trace messages to aid in remote debugging, particularly for KDE PowerDevil.
- Functions in the call trees from ddca_get_...vcp_value() and ddca_set_...vcp_value() consistenty return Error_Info structs instead of status codes to improve diagnostic messages written to the system log and information returned by ddca_get_error_detail().
Fixed
- Issue #581 "ddcutil 2.2.5 causes KDE Plasma freeze due to excessive permission checks". For some undetermined reason, despite the logged on user having RW access to /dev/i2c-devices, attempting to open these devices sometimes fails with Linux error EACCES. Functions ddca_init2() and ddca_init() now fail with status code EACCESS if the logged on user does not have RW permission for all /dev/i2c devices that might possibly be used for DDC communication. As the cause of the permission loss is unclear, function ddca_start_watch_displays() similarly checks if the logged on user has RW access, and returns DDCRC_INVALID_OPERATION in case of failure. Callers should check for failure of these functions and not repeatedly call them to avoid a flood of permission failures.
- Issue #585, "Displays with I2C bus name DPMST not detected". It was possible that the video adapter for a /dev/i2c device was not located, causing MST connected displays to not be detected.(Fix based on diagnosis by Diego Nunes.)
- Issue #587, "Assert failure in ddc_packet_io.c", due to an inconsistent data structure in ddc_open_display(). The inconsistency was apparently caused by a race condition in display change detection. Added mutex. Also addresses issue #586.
- Clear the display locks table during ddca_redetect_displays(), to recover from stale entries.