Brightness control through HDMI

I bought a TX2 developer Kit and connected it to a regular LCD Display through HDMI cable. The board was flashed with version 28.2.1 via JetPack.
I found that I cannot control the screen brightness in the Ubuntu System Settings, and I cannot change the brightness from command line either. I notice that this folder /sys/class/backlight/ is empty.

My goal is to control brightness using software. Is it possible to do that just through the HDMI cable? Or what else should I do? Any pointer would be helpful to me.

Thanks!

We didn’t use any pwm to control backlight and that is why that sysfs is empty.

Thanks for the reply.
What should I do to enable backlight control? modify the device tree or recompile the Linux kernel?
I hope someone could give me a general idea and I will try to figure out the details.
Sorry, i’m really a noob here.

To be more precisely, we don’t provide backlight control in our HDMI driver so even you add something in device tree, it would not work.

Thank so much for the explanation.
It seems to me that pwm backlight control is only available via J23 (Display Expansion Connector).

I’m not sure about this, but if VESA DDC/CI is supported, the brightness of external displays can also be changed using DDC-Control on HDMI.

Hi Wayne,

Is this also true for external monitors? I’m trying to control the brightness of an OLED display through python via HDMI on my TX2. Is the Display Data Channel (DDC) on the I2C bus a solution on ddcutil?

The only solution is the ddcutil.

And you have to run below command first before running the ddcutil so that the channel would be enabled.

echo 1 > /sys/kernel/debug/tegra_hdmi/ddc_power_toggle
1 Like

So I’ve installed ddcutil and when I run ‘ddcutil detect’, I get:
Failure getting EDID for /dev/i2c-7: status code=DDCRC_EDID(-3016): invalid EDID
No displays found

Running ‘i2cdetect -l’ gives me:
i2c-3 i2c 3190000.i2c I2C adapter
i2c-1 i2c c240000.i2c I2C adapter
i2c-8 i2c 31e0000.i2c I2C adapter
i2c-6 i2c 31c0000.i2c I2C adapter
i2c-4 i2c Tegra BPMP I2C adapter I2C adapter
i2c-2 i2c 3180000.i2c I2C adapter
i2c-0 i2c 3160000.i2c I2C adapter
i2c-7 i2c c250000.i2c I2C adapter
i2c-5 i2c 31b0000.i2c I2C adapter

‘cat /sys/kernel/debug/tegradc.0/edid’ does output 256 bytes.

and running ‘xrandr’ detects my monitor:
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 600mm x 340mm
1920x1080 60.00*+ 59.95 50.00
1680x1050 59.96
1440x900 59.89
1280x1024 75.03 70.04 60.00
1280x720 60.00 59.94 50.00
1152x864 75.00
1024x768 75.03 70.07 60.01
800x600 75.00 72.19 60.32
720x576 50.00
720x480 59.94
720x400 70.04
640x480 75.00 72.81 59.94 59.94

Sorry for the loaded information, but I wanted to give you something to work with. Any ideas on getting ddcutil working? I’ve also tried ‘xrandr --output HDMI-0 --brightness 0.3’. I can see the changes being made using ‘xrandr --verbose |egrep ‘(Bright|Gamma)’’, but no actual
physical brightness change on the monitor.

Are you sure you really connect a native HDMI and enable the ddc power toggle?

I can see a HDMI monitor if I run ddcutil detect on my side.

Display 1
   I2C bus:             /dev/i2c-3
   Supports DDC:        true
   EDID synopsis:
      Mfg id:           HWP
      Model:            HP SLT 21 PRO
      Serial number:    3CQ3521P55
      Manufacture year: 2013
      EDID version:     1.3
   VCP version:         2.2

Thanks for the quick reply.

I enabled the power toggle and it’s now detecting my monitor. However, it seems to always refer to i2c-7 when display 1 is on I2C bus: /dev/i2c-3. I tried ‘sudo ddcutil --display 1 setvcp 10 30’, but gives me:
Failure getting EDID for /dev/i2c-7: status code=DDCRC_EDID(-3016): invalid EDID

Any thoughts?

Wait for the ddcutil commands to return. I guess you just interrupted the program and didn’t wait for it …

1 Like

Yeah ok, I2C-7 was irrelevant. It works now, appreciate your help Wayne!

1 Like

Hi Wayne,

I’ve noticed the command for ‘sudo ddcutil --display 1 setvcp 10 30’ (brightness) control has a very slow response time (~20 seconds) when ran in cmd. Is there a way to expedite this process?

Also when it comes to changing brightness, does the control allow for gradual transitions rather than an instant jump from a lower brightness to higher or vice versa? I havnt found much online about this.