i2c шина - ddcutil не работает, ddccontrol изменяет регистры монитора

Хотелось бы менять яркость и другие режимы монитора утилитой ddcutil, но почему работает только ddccontrol?

sudo ddcutil detect
(i2c_set_addr) Error in ioctl(I2C_SLAVE), errno=EBUSY(16): Device or resource busy
(i2c_set_addr ) addr = 0x50. Returning EBUSY(-16): Device or resource busy
No displays found

ddccontrol -p # поиск доступных мониторов
radeon_open: mmap failed: Invalid argument
- Устройство: dev:/dev/i2c-7 DDC/CI: Да VESA standard monitor
Тип входа: Цифровой

$groups
wheel i2c sys tty dbus polkitd usbmux git video storage render lp input disk adm users

монитор: ASUS VS239NV 03.2015
видео: Radeon RX 550 Series GCN 1.3 RV370 (hari) (Polaris 12, DRM 3.19.0, LLVM 6.0.0)

ddccontrol работает, но считывание/запись регисторов происходит медленно, как вместо ddccontrol использовать ddcutil?
система обновлена. установка ddcci-driver-linux-dkms не помогла, результат тот же.
https://www.ddcutil.com/adl/
Ошибки в тексте-неповторимый стиль автора©
Dobrov
Хотелось бы менять яркость и другие режимы монитора утилитой ddcutil
Интересно узнать, чем же этот способ лучше других ???
Ошибки не исчезают с опытом - они просто умнеют
Странно то, что ddcutil вообще ничего не видит - возможно проблемы связаны с видеодрайвером, возможно проблемы с протоколом I2C (как пишут это ненадежный протокол и более 75% времени тратится на тайм-ауты, то есть требуется несколько повторных попыток - это даже специфицировано).
Но ddcutil имеет много разных опций, пробуй, например
- при BUSY рекомендуют опции: --force, --force-slave-address
- увеличить количество попыток: --maxtries
- увеличение логирования: ddcutil detect --verbose
- полный просмотр всего и вся: ddcutil environment --verbose
Посмотри вывод journalctl -b | grep i2c

PS - и предоложу, что возможно используется ноутбук, к которому подключается внешний монитор - если так, то в этом случае есть свои нюансы.
Ошибки не исчезают с опытом - они просто умнеют
vasek
ничего не видит -
почему не видит? написано что устройство занято.
Ошибки в тексте-неповторимый стиль автора©
indeviral
почему не видит? написано что устройство занято.
Вот и не понятно - чем занято? - потому и выразился, что не видит (хотя, конечно, не видит тут не подходит)
Встречалось такое в одном описании - грешили на видеодрайвер или на ноутбук с подключенным к нему внешним монитором - подробности не помню.
Думаю должно немного прояснить если посмотреть выводы - ddcutil detect --verbose и ddcutil environment --verbose
Ошибки не исчезают с опытом - они просто умнеют
indeviral
https://www.ddcutil.com/adl/
Только сейчас обратил на это внимание ... и да, похоже так оно и есть ...
AMD PRORIETARY DRIVER
AMD’s proprietary video driver fglrx does not expose the I2C bus. Instead, it provides access to the bus through the AMD Display Library, aka ADL. Owing to copyright restrictions, the ADL header files are not distributed with the ddcutil source. Additional steps are required to build ddcutil with fglrx support.
To see if your copy of ddcutil was built with fglrx support, issue the command: ddcutil --version
ADL identifies monitors using an adapter-number/display-number pair. To select a monitor using these numbers, specify the --adl option with a period separating the adapter-number and display-number, e.g. --adl 0.1
Ошибки не исчезают с опытом - они просто умнеют
vasek
Dobrov
Хотелось бы менять яркость и другие режимы монитора утилитой ddcutil
Интересно узнать, чем же этот способ лучше других ???
Сделал скрипт изменения яркости по Hotkeys, пока только для ddccontrol, но хотел бы проверять, что установлено у пользователя: ddcutil или ddccontrol.

vasek
indeviral
https://www.ddcutil.com/adl/
AMD PRORIETARY DRIVER
amdgpu-pro не использую. у меня драйвер стандартный на обычной рабочей станции. Спасибо, с ключом --force-slave-address яркость меняется:
ddcutil --force-slave-address setvcp 10 75
но с ошибками:
(i2c_set_addr) Error in ioctl(I2C_SLAVE), errno=EBUSY(16): Device or resource busy
(i2c_set_addr                  ) Retrying using IOCTL op I2C_SLAVE_FORCE for address 0x50
(i2c_set_addr                  ) addr = 0x50. Returning OK(0): success
sudo ddcutil –force-slave-address detect вот выжимки из лога:
Found connector: card1-DVI-D-1
    /sys/class/drm/card1/card1-DVI-D-1/status: connected

Summary of udev I2C devices
   i2c-dev     i2c-8      AMDGPU DM i2c hw bus 2              /devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-8/i2c-dev/i2c-8

Examining /sys/bus/i2c/devices...
   /sys/bus/i2c/devices/i2c-3/name:   i915 gmbus dpd
   /sys/bus/i2c/devices/i2c-1/name:   i915 gmbus dpc
   /sys/bus/i2c/devices/i2c-8/name:   AMDGPU DM i2c hw bus 2
   /sys/bus/i2c/devices/i2c-6/name:   dmdc
   /sys/bus/i2c/devices/0-0053/name:  eeprom

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

   Examining device /dev/i2c-8...
      Functionality: I2C_FUNC_I2C, I2C_FUNC_SMBUS_PEC, I2C_FUNC_SMBUS_QUICK,
                     I2C_FUNC_SMBUS_READ_BYTE, I2C_FUNC_SMBUS_WRITE_BYTE,
                     I2C_FUNC_SMBUS_READ_BYTE_DATA, I2C_FUNC_SMBUS_WRITE_BYTE_DATA,
                     I2C_FUNC_SMBUS_READ_WORD_DATA, I2C_FUNC_SMBUS_WRITE_WORD_DATA,
                     I2C_FUNC_SMBUS_PROC_CALL, I2C_FUNC_SMBUS_WRITE_BLOCK_DATA,
                     I2C_FUNC_SMBUS_READ_I2C_BLOCK, I2C_FUNC_SMBUS_WRITE_I2C_BLOCK
(i2c_set_addr                  ) addr = 0x50. Returning EBUSY(-16): Device or resource busy
      Unable to read EDID, psc=EBUSY(-16): Device or resource busy

      Trying simple VCP read of feature 0x10...
      read() returned 6e 88 88 02 00 10 00 00 64 00 4b
      Attempt 1 to read feature failed. status = DDCRC_DDC_DATA(-3001): DDC data error.  Retrying...
      read() returned 6e 88 02 00 10 00 00 64 00 4b 8b
      Attempt 2 to read feature succeeded.
      DDC communication succeeded

   ***One Device ***
   path: /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-8/i2c-dev/i2c-8
   Device Node Path: /dev/i2c-8
      struct udev_device at: 0x55f05f7c9780
         devpath:   /devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-8/i2c-dev/i2c-8
         subsystem: i2c-dev
         devtype:   (null)
         syspath:   /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-8/i2c-dev/i2c-8
         sysname:   i2c-8
         sysnum:    8
         devnode:   /dev/i2c-8
         Properties:
            DEVNAME -> /dev/i2c-8
            DEVPATH -> /devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-8/i2c-dev/i2c-8
            MAJOR -> 89
            MINOR -> 8
            SUBSYSTEM -> i2c-dev
         Sysattrs:
            dev -> 89:8
            device -> (null)
            name -> AMDGPU DM i2c hw bus 2
            subsystem -> i2c-dev
            uevent -> MAJOR=89
                      MINOR=8
                      DEVNAME=i2c-8
Dobrov
яркость меняется: ….. но с ошибками
Как уже писал, ddcutil частенько не считывает с 1-го раза (основная причина - видеодрайвер).
В твоем случае не считывается с 1-го раза еще и EDID монитора - не верно считываются определенные байты и происходит не совпадение контрольной суммы (error DDCRC_EDID)
Dobrov
sudo ddcutil –force-slave-address detect вот выжимки из лога:
Unable to read EDID
Trying simple VCP read of feature 0x10…
read() returned 6e 88 88 02 00 10 00 00 64 00 4b
Attempt 1 to read feature failed. status = DDCRC_DDC_DATA(-3001): DDC data error. Retrying…
read() returned 6e 88 02 00 10 00 00 64 00 4b 8b
Attempt 2 to read feature succeeded.
Хотя довольно странно - как это байты не верно считываются? - точнее, то считываются, то не считывааются??? Обычно если уж не считываются верно, то всегда. Нужно с этим конкретно разбираться.
Но если это не влияет на изменение яркости, то можно и забить.
И все-таки, имхо, лучше не использовать эти глючные утилиты. Есть же другие способы изменения яркости без этих сложных утилит.

PS - и все-таки не понятна фраза
Dobrov
amdgpu-pro не использую. у меня драйвер стандартный на обычной рабочей станции.
так как в логах видим amdgpu - а вот как это влияет на ddcutil, ничего сказать не могу.
Dobrov
i2c-dev i2c-8 AMDGPU DM i2c hw bus 2 /devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-8/i2c-dev/i2c-8
Ошибки не исчезают с опытом - они просто умнеют
vasek
не понятна фраза
Dobrov
amdgpu-pro не использую. у меня драйвер стандартный на обычной рабочей станции.
xf86-video-amdgpu - это и есть открытый драйвер АДМ, а проприетарный это amdgpu-pro

vasek
лучше не использовать эти глючные утилиты. Есть же другие способы изменения яркости без этих сложных утилит.
Изменение регистров (яркость, пресеты, переключение входов и прочее) работает, но иногда не с первого раза…
Какие: «другие способы изменения яркости»? (исключая вариант тянуться к кнопкам монитора)
 
Зарегистрироваться или войдите чтобы оставить сообщение.