July 25, 2013

DVI Support on i.MX6 boards

At long last, DVI support is here for our i.MX6 boards.

When we built our very first SABRE Lite boards, one of the first things we tested was the HDMI video port, and at that time, most of the monitors we used for testing were natively DVI, not HDMI. All of the newer monitors were being used by our staff, and the ones available for testing were older monitors which only supported DVI.

Way back then, we weren’t booting Linux, and were running some bare metal code, and we found that the hot-plug detect code wasn’t working quite right. If we looked at the HDMI_PHY_STAT0 register, we could see that bits 7-4 (the RX_SENSE bits) would toggle along with connection to the monitor, but bit 1 (HPD) wouldn’t.

We updated the code to look at the others and didn’t look back until very recently. Along the way, we’ve told customers to just use HDMI instead, knowing that there was a software fix, but kicked the can down the road. Sorry about that.

We finally had a chance to investigate more fully, and to compare the operation of Freescale’s SABRE SDB board with ours. With a little nudge from RooT, we figured out that the core of the issue is a voltage dividing resistor we placed on the HPD signal to prevent 5V from hitting the CPU.

With the latest specs from Freescale, we found that this resistor could be bypassed (the pad is 5V-tolerant), but we also added some patches to allow the RX_SENSE bits to be used instead, providing a software solution.

The patches come in three parts:
  1. U-Boot patch to change the hdmidet command and internal HDMI detection to use the RX_SENSE bits, and
  2. A non-Android Linux patch to do the same, and
  3. A patch for the Android (Jellybean) kernel
Note that the U-Boot patch is only in our staging branch at the moment, and will be released to production in the next couple of weeks.