DDC/CI support on display expansion cards

Does HDMI module or DisplayPort module support DDC/CI ?

It would be great if we can adjust brightness for the external monitor using the supported tools (or even better, using the light sensor on the webcam module to adjust automatically).

I only have the DisplayPort module on Framework 16 using a DELL P2415Q panel and yes ddcutil works

$ sudo ddcutil detect --verbose
Invalid display
I2C bus: /dev/i2c-11
DRM connector: card1-eDP-1
/sys/class/drm/card1-eDP-1/dpms On
/sys/class/drm/card1-eDP-1/enabled enabled
/sys/class/drm/card1-eDP-1/status connected
Driver: amdgpu
I2C address 0x50 (EDID) responsive: true
I2C address 0x37 (DDC) responsive: false
Is LVDS or EDP display: true
Is laptop display by EDID: false
Is laptop display: true
/sys/bus/i2c/devices/i2c-11/name AMDGPU DM aux hw bus 0
PCI device path: /sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.0/drm/card1/card1-eDP-1/i2c-11
EDID synopsis:
Mfg id: BOE - BOE
Model:
Product code: 3017 (0x0bc9)
Serial number:
Binary serial number: 0 (0x00000000)
Manufacture year: 2022, Week: 48
EDID version: 1.4
Extra descriptor: NE160QDM-NZ6
Video input definition: 0xa5 - Digital Input (DisplayPort), Bit depth: 8
Supported features:
Digital display type: RGB 4:4:4
Standard sRGB color space: False
White x,y: 0.313, 0.329
Red x,y: 0.680, 0.315
Green x,y: 0.265, 0.692
Blue x,y: 0.145, 0.058
Extension blocks: 1
EDID source: I2C
EDID hex dump:
+0 +4 +8 +c 0 4 8 c
+0000 00 ff ff ff ff ff ff 00 09 e5 c9 0b 00 00 00 00 …
+0010 30 20 01 04 a5 22 16 78 03 3d 35 ae 50 43 b1 25 0 …".x.=5.PC.%
+0020 0e 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 .PT…
+0030 01 01 01 01 01 01 34 70 00 a0 a0 40 a0 60 30 20 …4p…@.`0
+0040 f6 0c 59 d7 10 00 00 1a 00 00 00 00 00 00 00 00 …Y…
+0050 00 00 00 00 00 00 00 00 00 00 00 00 00 fe 00 42 …B
+0060 4f 45 20 43 51 0a 20 20 20 20 20 20 00 00 00 fe OE CQ. …
+0070 00 4e 45 31 36 30 51 44 4d 2d 4e 5a 36 0a 01 0a .NE160QDM-NZ6…
This is a laptop display. Laptop displays do not support DDC/CI

Display 1
I2C bus: /dev/i2c-15
DRM connector: card1-DP-4
/sys/class/drm/card1-DP-4/dpms On
/sys/class/drm/card1-DP-4/enabled enabled
/sys/class/drm/card1-DP-4/status connected
Driver: amdgpu
I2C address 0x50 (EDID) responsive: true
I2C address 0x37 (DDC) responsive: true
Is LVDS or EDP display: false
Is laptop display by EDID: false
Is laptop display: false
/sys/bus/i2c/devices/i2c-15/name AMDGPU DM aux hw bus 4
PCI device path: /sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.0/drm/card1/card1-DP-4/i2c-15
EDID synopsis:
Mfg id: DEL - Dell Inc.
Model: DELL P2415Q
Product code: 41150 (0xa0be)
Serial number: D8VXF9A30HHB
Binary serial number: 810043458 (0x30484842)
Manufacture year: 2019, Week: 40
EDID version: 1.4
Extra descriptor:
Video input definition: 0xa5 - Digital Input (DisplayPort), Bit depth: 8
Supported features:
DPMS active-off
Digital display type: RGB 4:4:4 + YCrCb 4:4:4 + YCrCb 4:2:2
Standard sRGB color space: True
White x,y: 0.313, 0.329
Red x,y: 0.659, 0.334
Green x,y: 0.301, 0.639
Blue x,y: 0.149, 0.043
Extension blocks: 1
EDID source: I2C
EDID hex dump:
+0 +4 +8 +c 0 4 8 c
+0000 00 ff ff ff ff ff ff 00 10 ac be a0 42 48 48 30 …BHH0
+0010 28 1d 01 04 a5 35 1e 78 3a e2 45 a8 55 4d a3 26 (…5.x:.E.UM.&
+0020 0b 50 54 a5 4b 00 71 4f 81 80 a9 c0 a9 40 d1 c0 .PT.K.qO…@…
+0030 e1 00 d1 00 01 01 4d d0 00 a0 f0 70 3e 80 3e 30 …M…p>.>0
+0040 35 00 0f 28 21 00 00 1a 00 00 00 ff 00 44 38 56 5…(!..D8V
+0050 58 46 39 41 33 30 48 48 42 0a 00 00 00 fc 00 44 XF9A30HHB…D
+0060 45 4c 4c 20 50 32 34 31 35 51 0a 20 00 00 00 fd ELL P2415Q. …
+0070 00 1d 4c 1e 8c 36 00 0a 20 20 20 20 20 20 01 c8 …L…6… …
VCP version: 2.1
Controller mfg: Mstar
Firmware version: 1.4
Monitor uses invalid feature flag in DDC reply packet to indicate unsupported feature.
Current dynamic sleep adjustment multiplier: 0.00

$ sudo ddcutil getvcp known --bus 15
VCP code 0x02 (New control value ): No new control values (0x01)
VCP code 0x0b (Color temperature increment ): Invalid value: 0
VCP code 0x0c (Color temperature request ): 3000 + 2 * (feature 0B color temp increment) degree(s) Kelvin
VCP code 0x0e (Clock ): current value = 50, max value = 100
VCP code 0x10 (Brightness ): current value = 100, max value = 100
VCP code 0x12 (Contrast ): current value = 75, max value = 100
VCP code 0x14 (Select color preset ): User 1 (sl=0x0b)
VCP code 0x16 (Video gain: Red ): current value = 100, max value = 100
VCP code 0x18 (Video gain: Green ): current value = 95, max value = 100
VCP code 0x1a (Video gain: Blue ): current value = 87, max value = 100
VCP code 0x1e (Auto setup ): Auto setup not active (sl=0x00)
VCP code 0x20 (Horizontal Position (Phase) ): current value = 0, max value = 100
VCP code 0x30 (Vertical Position (Phase) ): current value = 0, max value = 100
VCP code 0x3e (Clock phase ): current value = 50, max value = 100
VCP code 0x52 (Active control ): Value: 0x00
VCP code 0x60 (Input Source ): DisplayPort-1 (sl=0x0f)
VCP code 0x6c (Video black level: Red ): current value = 50, max value = 255
VCP code 0x6e (Video black level: Green ): current value = 50, max value = 255
VCP code 0x70 (Video black level: Blue ): current value = 50, max value = 255
VCP code 0xaa (Screen Orientation ): 0 degrees (sl=0x01)
VCP code 0xac (Horizontal frequency ): 2228 hz
VCP code 0xae (Vertical frequency ): 59.99 hz
VCP code 0xb2 (Flat panel sub-pixel layout ): Red/Green/Blue vertical stripe (sl=0x01)
VCP code 0xb4 (Source Timing Mode ): mh=0x00, ml=0x02, sh=0x00, sl=0x01
VCP code 0xb6 (Display technology type ): LCD (active matrix) (sl=0x03)
VCP code 0xc0 (Display usage time ): Usage time (hours) = 12474 (0x0030ba) mh=0xff, ml=0xff, sh=0x30, sl=0xba
VCP code 0xc6 (Application enable key ): 0x45cc
VCP code 0xc8 (Display controller type ): Mfg: Mstar (sl=0x05), controller number: mh=0x00, ml=0x00, sh=0x56
VCP code 0xc9 (Display firmware level ): 1.4
VCP code 0xca (OSD ): OSD Enabled (sl=0x02)
VCP code 0xd6 (Power mode ): DPM: On, DPMS: Off (sl=0x01)
VCP code 0xdc (Display Mode ): Standard/Default mode (sl=0x00)
VCP code 0xdf (VCP Version ): 2.1

this last one changes screen brightness to 100

$ sudo ddcutil setvcp 0x10 100

That’s really good.

I checked my 3rd gen HDMI and USB-C (directly connected to the display) with ddcutil, turns out both of those support DDC/CI.

~$ sudo ddcutil detect --verbose
Invalid display
   I2C bus:  /dev/i2c-11
      DRM connector:                         card1-eDP-1
      /sys/class/drm/card1-eDP-1/dpms        On
      /sys/class/drm/card1-eDP-1/enabled     enabled
      /sys/class/drm/card1-eDP-1/status      connected
      Driver:                                amdgpu
      I2C address 0x50 (EDID) responsive:    true 
      I2C address 0x37 (DDC)  responsive:    false
      Is LVDS or EDP display:                true 
      Is laptop display by EDID:             false
      Is laptop display:                     true 
      /sys/bus/i2c/devices/i2c-11/name       AMDGPU DM aux hw bus 0
      PCI device path:                       /sys/devices/pci0000:00/0000:00:08.1/0000:c1:00.0/drm/card1/card1-eDP-1/i2c-11
   EDID synopsis:
      Mfg id:               BOE - BOE
      Model:                
      Product code:         3018  (0x0bca)
      Serial number:        
      Binary serial number: 0 (0x00000000)
      Manufacture year:     2022,  Week: 47
      EDID version:         1.4
      Extra descriptor:        NE135FBM-N41
      Video input definition:    0xa5 - Digital Input (DisplayPort), Bit depth: 8
      Supported features:
         Digital display type: RGB 4:4:4
         Standard sRGB color space: False
      White x,y:        0.312, 0.328
      Red   x,y:        0.640, 0.329
      Green x,y:        0.300, 0.600
      Blue  x,y:        0.149, 0.060
      Extension blocks: 0
   EDID source: I2C
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 09 e5 ca 0b 00 00 00 00   ................
      +0010   2f 20 01 04 a5 1c 13 78 03 de 50 a3 54 4c 99 26   / .....x..P.TL.&
      +0020   0f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01   .PT.............
      +0030   01 01 01 01 01 01 11 5c d0 18 81 e0 2d 50 30 20   .......\....-P0 
      +0040   36 00 1d be 10 00 00 1a a7 49 d0 18 81 e0 2d 50   6........I....-P
      +0050   30 20 36 00 1d be 10 00 00 1a 00 00 00 fe 00 42   0 6............B
      +0060   4f 45 20 43 51 0a 20 20 20 20 20 20 00 00 00 fe   OE CQ.      ....
      +0070   00 4e 45 31 33 35 46 42 4d 2d 4e 34 31 0a 00 73   .NE135FBM-N41..s
   This is a laptop display.  Laptop displays do not support DDC/CI

Display 1
   I2C bus:  /dev/i2c-13
      DRM connector:                         card1-DP-2
      /sys/class/drm/card1-DP-2/dpms         On
      /sys/class/drm/card1-DP-2/enabled      enabled
      /sys/class/drm/card1-DP-2/status       connected
      Driver:                                amdgpu
      I2C address 0x50 (EDID) responsive:    true 
      I2C address 0x37 (DDC)  responsive:    true 
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-13/name       AMDGPU DM aux hw bus 2
      PCI device path:                       /sys/devices/pci0000:00/0000:00:08.1/0000:c1:00.0/drm/card1/card1-DP-2/i2c-13
   EDID synopsis:
      Mfg id:               VSC - ViewSonic Corporation
      Model:                VG2755-2K
      Product code:         20023  (0x4e37)
      Serial number:        <REDACTED>
      Binary serial number: 0xffffffff
      Manufacture year:     2022,  Week: 10
      EDID version:         1.4
      Extra descriptor:        
      Video input definition:    0xa5 - Digital Input (DisplayPort), Bit depth: 8
      Supported features:
         DPMS active-off
         Digital display type: RGB 4:4:4 + YCrCb 4:4:4 + YCrCb 4:2:2
         Standard sRGB color space: True
      White x,y:        0.313, 0.329
      Red   x,y:        0.651, 0.332
      Green x,y:        0.303, 0.632
      Blue  x,y:        0.151, 0.058
      Extension blocks: 1
   EDID source: I2C
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 5a 63 37 4e ff ff ff ff   ........Zc7N....
      +0010   0a 20 01 04 a5 3c 22 78 3b cb f5 a6 55 4d a1 26   . ...<"x;...UM.&
      +0020   0e 50 54 bf ef 80 d1 40 d1 00 d1 c0 b3 00 95 00   .PT....@........
      +0030   90 40 81 80 81 c0 56 5e 00 a0 a0 a0 29 50 30 20   .@....V^....)P0 
      +0040   35 00 55 50 21 00 00 1a 00 00 00 ff 00 56 4b 4c   5.UP!........VKL
      +0050   32 32 31 30 41 30 35 34 34 0a 00 00 00 fd 00 31   2210A0544......1
      +0060   4b 0f 5a 19 00 0a 20 20 20 20 20 20 00 00 00 fc   K.Z...      ....
      +0070   00 56 47 32 37 35 35 2d 32 4b 0a 20 20 20 01 c8   .VG2755-2K.   ..
   VCP version:         2.2
   Controller mfg:      RealTek
   Firmware version:    1.1
   Monitor uses invalid feature flag in DDC reply packet to indicate unsupported feature.
   Current dynamic sleep adjustment multiplier:  0.05

Display 2
   I2C bus:  /dev/i2c-14
      DRM connector:                         card1-DP-3
      /sys/class/drm/card1-DP-3/dpms         On
      /sys/class/drm/card1-DP-3/enabled      enabled
      /sys/class/drm/card1-DP-3/status       connected
      Driver:                                amdgpu
      I2C address 0x50 (EDID) responsive:    true 
      I2C address 0x37 (DDC)  responsive:    true 
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-14/name       AMDGPU DM aux hw bus 3
      PCI device path:                       /sys/devices/pci0000:00/0000:00:08.1/0000:c1:00.0/drm/card1/card1-DP-3/i2c-14
   EDID synopsis:
      Mfg id:               GEC - UNK
      Model:                Onlap1102H
      Product code:         25  (0x0019)
      Serial number:        8888
      Binary serial number: 34952 (0x00008888)
      Manufacture year:     2017,  Week: 0
      EDID version:         1.3
      Extra descriptor:        
      Video input definition:    0x80 - Digital Input
      Supported features:
         DPMS standby
         DPMS suspend
         DPMS active-off
         Digital display type: RGB 4:4:4 + YCrCb 4:4:4
         Standard sRGB color space: False
      White x,y:        0.310, 0.330
      Red   x,y:        0.640, 0.330
      Green x,y:        0.300, 0.625
      Blue  x,y:        0.150, 0.060
      Extension blocks: 1
   EDID source: I2C
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 1c a3 19 00 88 88 00 00   ................
      +0010   00 1b 01 03 80 1a 0e 78 ee ec 96 a3 54 4c a0 26   .......x....TL.&
      +0020   0f 4f 54 21 08 00 81 00 81 80 81 c0 95 00 95 40   .OT!...........@
      +0030   b3 00 a9 c0 d1 c0 02 3a 80 18 71 38 2d 40 58 2c   .......:..q8-@X,
      +0040   45 00 00 90 10 00 00 1e 00 00 00 ff 00 38 38 38   E............888
      +0050   38 0a 20 20 20 20 20 20 20 20 00 00 00 fd 00 30   8.        .....0
      +0060   3e 1e 44 11 00 0a 20 20 20 20 20 20 00 00 00 fc   >.D...      ....
      +0070   00 4f 6e 6c 61 70 31 31 30 32 48 0a 20 20 01 62   .Onlap1102H.  .b
   VCP version:         2.1
   Controller mfg:      Novatek
   Firmware version:    1.0
   Monitor uses invalid feature flag in DDC reply packet to indicate unsupported feature.
   Current dynamic sleep adjustment multiplier:  0.00

I thought GNOME 45 has built-in brightness control with DDC/CI, until I found this GNOME extension and realize how dumb I am for asking this question without checking with ddcutil first.