It seems it is little known feature that DDC/CI data channel can not be only used for reading E-EDID information (name, model, supported resolutions, etc.) but also for controlling monitor via MCCS.
Most interesting feature of MCCS is controlling screen brightness, but surprisingly no system uses it out-of-the-box to provide brightness widget, like in laptops. There is command line ddccontrol utility and probably a bunch of buggy widgets, but no native integration.
In Linux, standard API for backlight is provided by kernel modules, exposed
by sysfs in /sys/class/backlight/
. I wrote simple backlight driver for
DDC/CI: ddcci_bl.c. To use it you need to manually bind it to
0x37 device address on graphics card I²C bus. If your monitor is stupid like
mine and it reports invalid maximum value you need to override it in
ddcci_maxbr module parameter.
Example:
insmod ddcci_bl.ko ddcci_maxbr=255
modprobe i2c-dev
echo ddcci_bl 0x37 > /sys/bus/i2c/devices/i2c-2/new_device
Backlight device should be then automatically recognized by graphical enviroments.