HDMI with CEC

I haven’t found any information so I assume that HDMI module does not support CEC.

I think it shouldn’t be hard to add.

I know there are adapters allowing to inject CEC data. They use USB2 for communication. So you can just connect chip of such adapter to unused usb2 lines in usbc connector (or are they used) and to CEC pin in HDMI port. I only wonder if it work with recent mod for HDMI power saving.

Alternatively I don’t know what are capabilities of HDMI controller used in this module. Maybe CEC could be implemented in firmware. I guess it will require hardware mod to.

4 Likes

… and if not: Any chance the that could be fixed in a future generation?

The CYPD3120 visible in the expansion card rework article does not show anything CEC related in its data sheet. If the schematics follow the data sheet suggestions on p20, all lanes to HDMI will go through an extra DP to HDMI converter, which to the best of my guesses mainly deals with signalling and not semantics.

The M0 core inside the dongle should be capable of managing CEC, and it has pins to spare that could probably participate in CEC (an I2C bus at pins at P3.2/4/5 is free, and it’s electrically similar), but

  • The lines are likely not wired (might be fixable similar to the rework linked above).
  • The pins might not be ESD protected, so a proper solution might require another set of protective diodes.
  • AIU the firmware running on the M0 is Infineon proprietary, so this would only fly if they catered for it (and web search is rather fruitless on the topic, indicating they don’t).

So if Infineon doesn’t play along, a version that works might be a lot more complex, as it’d need another microcontroller on the USB, and unless we play barely legal tricks with one chip tapping on each set of DP/DM USB2.0 pins, that might require a hub on top :-/

(… and I so do hope that I wrote this all in vain and the module actually already supports it!).

4 Likes

Looking at this again having learned that (unless framework did something weird) we do not have 2 USB 2 ports in, there is still a chance to get this to work reasonably:

An extra MCU (anything with 2 I2C ports; ATTiny or Cortex-M0 should do) can sit both on the I2C bus that does monitor detection, and on the CEC line. On the I2C it’d respond to a vendor specific address (distinct from the 0x50 for EDID and 0x54 for SCDC, possibly even at an address that’s configurable when unplugged as to be adjustable to other bus participants). It’d then offer a command interface to the host, which can send CEC commands through it, or configure the MCU to record seen CEC commands (I think that’ll need to be polling).

Hardware-wise, taking inspiration from the schematic at https://os.mbed.com/media/uploads/WiredHome/hdmi-cec-schematic.v.0.4.pdf, with a low-BOM MCU this should not take more than a QFN16 MCU, a DFN6 dual-BJT, 8 resistors, a diode and a small cap. With some shoving, this should fit on the existing HDMI board.

Software-wise, this will probably not work with libcec out of the box, and might need some tweaks b/c I2C is not usually user accessible, but some udev rules and/or a small dbus component can take care of that.

As for use cases, this would be great for motherboards that are used in the standalone cases used as a media PC.

3 Likes

It does support CEC - at least on Arch Linux.
I just plugged in HDMI cable and /dev/cec0 appeared on Arch Linux. It also worked with Kodi - turns TV on and off, allows being controller by TV remote.
I’m having one of the first HDMI card as I own Framework 12gen preorder.

I also tested the card itself with Steam Deck and it also worked :smiley:

EDIT: Probably due to HDMI CEC tunneling over DisplayPort: HDMI-CEC - ArchWiki

4 Likes

It’s a great news. Which version of HDMI module do you have? Is it newest 3 gen, or the older one?

Just checked which one exactly - my order states it’s HDMI (1st Gen).

1 Like