Linux kernel FL2000DX/IT66121FN dongle DRM driver
Clean re-implementation of FrescoLogic FL2000DX DRM driver and ITE Tech IT66121F driver, allowing to enable full display controller capabilities for USB-to-HDMI dongles based on such chips in Linux
The FL2000DX is Fresco Logic’s USB 3.0 Display device controller. It integrates Fresco Logic’s display transfer engine, USB 3.0 device controller, USB 3.0 transceiver, and a VGA (D-Sub) DAC. Fresco Logic’s display transfer engine is designed with Fresco Logic’s proprietary architecture and processes the video stream optimally for USB 3.0 bandwidth. The high performance video DAC provides clear and crisp display quality, and supports full HD (1920×1080) resolution. The integrated USB 3.0 device controller and transceiver were developed in conjunction with the de-facto standard Fresco USB 3.0 host controllers, which ensures the best performance and compatibility.
The IT66121 is a high-performance and low-power single channel HDMI transmitter, fully compliant with HDMI 1.3a, HDCP 1.2 and backward compatible to DVI 1.0 specifications. IT66121 also provide the HDMI1.4 3D feature, which enables direct 3D displays through an HDMI link. The IT66121 serves to provide the most cost-effective HDMI solution for DTV-ready consumer electronics such as set-top boxes, DVD players and A/V receivers, as well as DTV-enriched PC products such as notebooks and desktops, without compromising the performance. Its backward compatibility to DVI standard allows connectivity to myriad video displays such as LCD and CRT monitors, in addition to the ever-so-flourishing Flat Panel TVs.
All registers (both FL2000 and IT66121) access is implemented via regmaps. It is assumed that FL2000DX outputs DPI interface (kind of "crtc" output, not "encoder") that is connected to HDMI or other transciever. USB Bulk Streams are not supported by FL2000DX, so implementation will simly use Bulk endpoint.
See debug section for more details on development.
- HDMI CEC is not supported
- HDMI Audio is not supported
- HDCP is not supported
- USB2.0 is not supported
- Dongle onboard SPI EEPROM access via USB Mass Storage not implemented
- Connecting more than one dongle to the same USB bus may not work
- Non big-endian hosts (e.g. little endian) may not work
- 32-bit hosts may not work
Considering, no firm decision yet
- Original driver by FrescoLogic: https://github.com/FrescoLogic/FL2000
- Major clean-up of original FL driver by Hans Ulli Kroll: https://github.com/ulli-kroll/FL2000
- Reference IT66121FN driver ftom RK3188 Android KK kernel repositpry: https://github.com/phjanderson/Kernel-3188
- Reference USB DRM implementation of DisplayLink driver (see drivers/gpu/drm/udl in kernel sources)
- Reference simple DRM implementation of PL111 driver (see drivers/gpu/drm/pl111 in kernel sources)
- VGA (D-Sub) DAC output of FL2000DX can be implemented as a DRM bridge (dumb_vga_dac)
- For registration of sibling I2C devices of IT66121 (CEC, DDC, ...) i2c_new_dummy() function may be used
- Need to review, test and cleanup init/cleanup procedures to ensure no leaks or races or other issues
- Need to implement unit testing with latest kernel & DRM unit testing tools, target coverage shall be 100%
- Need to implement static code analysis with Coverity Scan and maybe some other tools
- How to simultaneously support HDMI bridge and D-Sub bridge? Config option?
- I2C autodetection require non-empty class. Is it safe to introduce custom one? Need to ask community