Start I2C bus driver using i2c-dev module to setup interface for writing the EDID binary via HDMI DDC.
The I2C driver module can be different for Host PC specification.
$ sudo modprobe i2c-dev
Then, install some utilities.
# sudo apt-get install i2c-tools # sudo apt-get install python-smbus # sudo apt-get install edid-decode
Using i2cdetect and i2c device nodes, all the i2c busses can be found.
$ ls /dev/i2c* /dev/i2c-0 /dev/i2c-10 /dev/i2c-12 /dev/i2c-14 /dev/i2c-16 /dev/i2c-18 /dev/i2c-3 /dev/i2c-5 /dev/i2c-7 /dev/i2c-9 /dev/i2c-1 /dev/i2c-11 /dev/i2c-13 /dev/i2c-15 /dev/i2c-17 /dev/i2c-2 /dev/i2c-4 /dev/i2c-6 /dev/i2c-8 $ i2cdetect -l i2c-0 unknown i915 gmbus ssc N/A i2c-1 unknown i915 gmbus vga N/A i2c-2 unknown i915 gmbus panel N/A i2c-3 unknown i915 gmbus dpc N/A i2c-4 unknown i915 gmbus dpb N/A i2c-5 unknown i915 gmbus dpd N/A i2c-6 unknown DPDDC-B N/A .... .... i2c-18 unknown nouveau-0000:01:00.0-29 N/A
In my case, bus#4 is assigned to HDMI channel that is connected to VU8C.
The command, get-edid scans potential buses that handle EDID.
The below example shows bus#2 (Main monitor) and bus#4 (Connected to VU8C).
$ sudo get-edid This is read-edid version 3.0.1. Prepare for some fun. Attempting to use i2c interface No EDID on bus 0 No EDID on bus 1 No EDID on bus 3 No EDID on bus 5 ... ... No EDID on bus 18 2 potential busses found: 2 4 Will scan through until the first EDID is found. Pass a bus number as an option to this program to go only for that one. 128-byte EDID successfully retrieved from i2c bus 2 ������0��#x ՞YP�&PT6��p8@0 5Y�6��p8@0 5Y��C088T�156WF1 Looks like i2c was successful. Have a good day.
To write EDID binary and read-back it, we use the utility edid-rw and edid-decode.
https://github.com/bulletmark/edid-rw
Please download source codes from the github and build it.
# sudo apt-get install git # git clone https://github.com/bulletmark/edid-rw # cd edid-rw # make
You can check if the EDID data works normally using edid-rw.
edid-rw loads the raw data of EDID and edid-decode parses it based on EDID specification.
$ edid-rw [bus no.] | edid-decode
Here is an example.
If it works normally, you can the information as below.
If not so, all of data patterns are shown as 0's sequence
and no timing and clock description is listed.
$ sudo ./edid-rw 4 | edid-decode Extracted contents: header: 00 ff ff ff ff ff ff 00 serial number: 21 6c 00 00 00 00 00 00 0c 1b version: 01 03 basic params: 6d 23 1a 78 ea chroma info: 5e c0 a4 59 4a 98 25 20 50 54 established: 00 08 00 standard: 61 40 01 01 01 01 01 01 01 01 01 01 01 01 01 01 descriptor 1: 64 19 00 40 41 00 26 30 08 90 36 00 63 0a 11 00 00 18 descriptor 2: 00 00 00 ff 00 4c 69 6e 75 78 20 23 30 0a 20 20 20 20 descriptor 3: 00 00 00 fd 00 3b 3d 2f 31 07 00 0a 20 20 20 20 20 20 descriptor 4: 00 00 00 fc 00 48 4b 5f 56 55 38 43 0a 20 20 20 20 20 extensions: 00 checksum: 7d Manufacturer: HKL Model 0 Serial Number 0 Made week 12 of 2017 EDID version: 1.3 Analog display, Input voltage level: 0.7/0.7 V Sync: Separate Composite Serration Maximum image size: 35 cm x 26 cm Gamma: 2.20 DPMS levels: Standby Suspend Off RGB color display First detailed timing is preferred timing Established timings supported: 1024x768@60Hz Standard timings supported: 1024x768@60Hz Detailed mode: Clock 65.000 MHz, 355 mm x 266 mm 1024 1032 1176 1344 hborder 0 768 771 777 806 vborder 0 -hsync -vsync Serial number: Linux #0 Monitor ranges: 59-61HZ vertical, 47-49kHz horizontal, max dotclock 70MHz Monitor name: HK_VU8C Checksum: 0x7d
Please refer to the following to download edid_vu8c.bin.
Download edid_vu8c.bin
or
wget http://dn.odroid.com/edid_vu8c.bin
We're preparing to release a new edid data binary by adjusting detailed timing to fix ODROID-C2 display auto detection issue.
Before writing EDID binary, please make sure the I2C device node.
This process can destroy your display or other connected hardware if run incorrectly.
The usage of edid-rw is as following.
$ edid-rw -w [bus no.] < [edid binary]
In my case, the bus node to VU8C is bus#4.
$ sudo ./edid-rw -w 4 < edid_vu8c.bin
Then, using the following commands, you can check if it's completely done.
$ sudo ./edid-rw 4 | edid-decode
Also, you can confirm it using xrandr.
$ xrandr Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767 LVDS1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 345mm x 194mm 1920x1080 59.9*+ ... ... 800x600 60.3 56.2 640x480 59.9 DP1 disconnected (normal left inverted right x axis y axis) HDMI1 connected (normal left inverted right x axis y axis) 1024x768 61.4 + 60.0 1440x900 59.9 1152x768i 111.9 800x600 60.3 640x480 60.0 VGA1 disconnected (normal left inverted right x axis y axis) VIRTUAL1 disconnected (normal left inverted right x axis y axis