Display Auto Detection using EDID

There are a variety of issues related to setting display mode with various monitors
and the available display modes that are provided on ODROID-C2 are limited to support all of them.
This wiki page introduces 'Display auto detection functionality using EDID of monitors'.

  • Ubuntu : Version 3.14.79-108 (Feb 27, 2017) or higher version is available.
  • Android : Android 5.1.1 (v3.3) / 6.0.1 (v2.2) or higher version is available.

If you want to configure the resolution manually,
Change the display_autodetect option to “false” in boot.ini file.

For 8-inch touch display VU8C users,
if there is an issue of clipped-image on the right side with the VU8C, please refer to the following link:
vu8c_edid_issue

In the following boot.ini, the variable “display_autodetect” is added.
When you want to use display auto detection logic, change the value to “true”.

With the official version including display auto detection, default mode is set as “display_autodetect is true”.
If you want to use the existing manual setting mode, modify display_autodetect to false
and uncomment the mode to be set.

# 1. to use display auto detection mode
setenv display_autodetect “true”

or

# 2. to use existing manual display mode
setenv m “1080p60hz”

setenv display_autodetect “false”

.....
.....
# HDMI DVI/VGA modes
# By default its set to HDMI, if needed, change below.
# Uncomment only a single Line.
# setenv vout "dvi"
# setenv vout "vga"
 
# Display Auto Detection
# "false" or "true"
setenv display_autodetect "true"
 
# HDMI HotPlug Detection control
.....
.....

Once the value is set as “true”, the command, “hdmitx edid” is working.
If you are using a multi-touch display, VU series (VU5, VU7/7+ and VU8C),
you need to add the command, “usb pwren” because usb power should be supplied to activate the display device via USB port.

.....
.....
###########################################
# Boot Arguments
if test "${display_autodetect}" = "true"; then usb pwren; hdmitx edid; fi
if test "${m}" = "custombuilt"; then setenv cmode "modeline=${modeline}"; fi
.....
.....
boot.ini
ODROIDC2-UBOOT-CONFIG
 
########################################################################
# Changes made to this are overwritten every time there is a new upgrade
# To make your changes permanent, make change on # boot.ini.default
# After changing it on boot.ini.default, run the bootini command to
# rewrite this file with your personal permanent settings.
# Documentation: http://odroid.com/dokuwiki/doku.php?id=en:c2_persistent_bootini
########################################################################
 
# Possible screen resolutions
# Uncomment only a single Line! The line with setenv written.
# At least one mode must be selected.
 
# Custom modeline!
# To use custom modeline you need to disable all the below resolutions
# and setup your own! 
# For more information check our wiki: 
# http://odroid.com/dokuwiki/doku.php?id=en:c2_hdmi_autosetting
# Example below:
# setenv m "custombuilt" 
# setenv modeline "1920,1200,154000,74040,60,1920,1968,2000,2080,1200,1202,1208,1235,1,0,1"
 
# Auto Detection of Monitor settings based on your Screen information
# See: http://odroid.com/dokuwiki/doku.php?id=en:c2_auto_detect_display
setenv display_autodetect "true"
 
# 480 Lines (720x480)
# setenv m "480i60hz" # Interlaced 60Hz
# setenv m "480i_rpt" # Interlaced for Rear Projection Televisions 60Hz
# setenv m "480p60hz" # 480 Progressive 60Hz
# setenv m "480p_rpt" # 480 Progressive for Rear Projection Televisions 60Hz
 
# 576 Lines (720x576)
# setenv m "576i50hz" # Interlaced 50Hz
# setenv m "576i_rpt" # Interlaced for Rear Projection Televisions 50Hz
# setenv m "576p50hz" # Progressive 50Hz
# setenv m "576p_rpt" # Progressive for Rear Projection Televisions 50Hz
 
# 720 Lines (1280x720)
# setenv m "720p50hz" # 50Hz
# setenv m "720p60hz" # 60Hz
 
# 1080 Lines (1920x1080)
# setenv m "1080i60hz" # Interlaced 60Hz
setenv m "1080p60hz" # Progressive 60Hz
# setenv m "1080i50hz" # Interlaced 50Hz
# setenv m "1080p50hz" # Progressive 50Hz
# setenv m "1080p24hz" # Progressive 24Hz
 
# 4K (3840x2160)
# setenv m "2160p30hz"    # Progressive 30Hz
# setenv m "2160p25hz"    # Progressive 25Hz
# setenv m "2160p24hz"    # Progressive 24Hz
# setenv m "smpte24hz"    # Progressive 24Hz SMPTE
# setenv m "2160p50hz"    # Progressive 50Hz
# setenv m "2160p60hz"    # Progressive 60Hz
# setenv m "2160p50hz420" # Progressive 50Hz with YCbCr 4:2:0 (Requires TV/Monitor that supports it)
# setenv m "2160p60hz420" # Progressive 60Hz with YCbCr 4:2:0 (Requires TV/Monitor that supports it)
 
### VESA modes ###
# setenv m "640x480p60hz"
# setenv m "800x480p60hz"
# setenv m "480x800p60hz"
# setenv m "800x600p60hz"
# setenv m "1024x600p60hz"
# setenv m "1024x768p60hz"  
# setenv m "1280x800p60hz"
# setenv m "1280x1024p60hz"
# setenv m "1360x768p60hz"
# setenv m "1440x900p60hz"
# setenv m "1600x900p60hz"
# setenv m "1680x1050p60hz"
# setenv m "1600x1200p60hz"
# setenv m "1920x1200p60hz"
# setenv m "2560x1080p60hz"
# setenv m "2560x1440p60hz"
# setenv m "2560x1600p60hz"
# setenv m "3440x1440p60hz"
 
# HDMI BPP Mode
setenv m_bpp "32"
# setenv m_bpp "24"
# setenv m_bpp "16"
 
# HDMI DVI/VGA modes
# By default its set to HDMI, if needed change below.
# Uncomment only a single Line.
# setenv vout "dvi"
# setenv vout "vga"
 
# HDMI HotPlug Detection control
# Allows you to force HDMI thinking that the cable is connected.
# true = HDMI will believe that cable is always connected
# false = will let board/monitor negotiate the connection status
setenv hpd "true"
# setenv hpd "false"
 
# Monitor output
# Controls if HDMI PHY should output anything to the monitor
setenv monitor_onoff "false" # true or false
 
# Server Mode (aka. No Graphics)
# Setting nographics to 1 will disable all video subsystem
# This mode is ideal of server type usage. (Saves ~300Mb of RAM)
setenv nographics "0"
 
# Meson Timer
# 1 - Meson Timer
# 0 - Arch Timer 
# Using meson_timer improves the video playback however it breaks KVM (virtualization).
# Using arch timer allows KVM/Virtualization to work however you'll experience poor video
setenv mesontimer "1"
 
# UHS (Ultra High Speed) MicroSD mode enable/disable
setenv disableuhs "false"
 
# MicroSD Card Detection enable/disable
# Force the MMC controlled to believe that a card is connected.
setenv mmc_removable "true"
 
# USB Multi WebCam tweak
# Only enable this if you use it.
setenv usbmulticam "false"
 
# Disable/Enable ODROID-VU7 Touchscreen
setenv disable_vu7 "true"
 
# Default Console Device Setting
setenv condev "console=ttyS0,115200n8 console=tty0"   # on both
 
# CPU Frequency / Cores control
###########################################
### WARNING!!! WARNING!!! WARNING!!!
# Before changing anything here please read the wiki entry: 
# http://odroid.com/dokuwiki/doku.php?id=en:c2_set_cpu_freq
#
# MAX CPU's
# setenv maxcpus "1"
# setenv maxcpus "2"
# setenv maxcpus "3"
setenv maxcpus "4"
 
# MAX Frequency
# setenv max_freq "2016"  # 2.016GHz
# setenv max_freq "1944"  # 1.944GHz
# setenv max_freq "1944"  # 1.944GHz
# setenv max_freq "1920"  # 1.920GHz
# setenv max_freq "1896"  # 1.896GHz
# setenv max_freq "1752"  # 1.752GHz
# setenv max_freq "1680"  # 1.680GHz
# setenv max_freq "1656"  # 1.656GHz
setenv max_freq "1536"  # 1.536GHz
 
 
 
###########################################
 
# Boot Arguments
if test "${display_autodetect}" = "true"; then usb pwren; hdmitx edid; fi
if test "${m}" = "custombuilt"; then setenv cmode "modeline=${modeline}"; fi
if test "${disable_vu7}" = "false"; then setenv hid_quirks "usbhid.quirks=0x0eef:0x0005:0x0004"; fi
 
setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro ${condev} no_console_suspend hdmimode=${m} ${cmode} m_bpp=${m_bpp} vout=${vout} fsck.repair=yes net.ifnames=0 elevator=noop disablehpd=${hpd} max_freq=${max_freq} maxcpus=${maxcpus} monitor_onoff=${monitor_onoff} disableuhs=${disableuhs} mmc_removable=${mmc_removable} usbmulticam=${usbmulticam} ${hid_quirks}"
 
# Booting
 
setenv loadaddr "0x11000000"
setenv dtb_loadaddr "0x1000000"
setenv initrd_loadaddr "0x13000000"
 
fatload mmc 0:1 ${initrd_loadaddr} uInitrd
fatload mmc 0:1 ${loadaddr} Image
fatload mmc 0:1 ${dtb_loadaddr} meson64_odroidc2.dtb
fdt addr ${dtb_loadaddr}
 
if test "${mesontimer}" = "0"; then fdt rm /meson_timer; fdt rm /cpus/cpu@0/timer; fdt rm /cpus/cpu@1/timer; fdt rm /cpus/cpu@2/timer; fdt rm /cpus/cpu@3/timer; fi
if test "${mesontimer}" = "1"; then fdt rm /timer; fi
 
if test "${nographics}" = "1"; then fdt rm /reserved-memory; fdt rm /aocec; fi
if test "${nographics}" = "1"; then fdt rm /meson-fb; fdt rm /amhdmitx; fdt rm /picdec; fdt rm /ppmgr; fi
if test "${nographics}" = "1"; then fdt rm /meson-vout; fdt rm /mesonstream; fdt rm /meson-fb; fi
if test "${nographics}" = "1"; then fdt rm /deinterlace; fdt rm /codec_mm; fi
 
booti ${loadaddr} ${initrd_loadaddr} ${dtb_loadaddr}

Once display auto detection is done, the following two binary files are generated in the FAT filesystem.
( Ubuntu : /media/boot , Android : /storage/internal/ )
They have edid data and detection logs so if display doesn't work normally, please share those files on the forum:
https://forum.odroid.com/viewtopic.php?f=135&t=25729

1. edid.bin

  • edid data in hex format

2. display.bin

  • Auto detection OK / FAIL
  • hdmi / dvi
  • display mode
  • modeline information

Here is a brief sequence diagram.

You can refer to the basic rules to choose the best display mode.

Timing Information Priority Order
(refer to E-EDID standard, Section 5)
1. Detailed Timings
2. Standard Timings
3. Established Timings

Extension block information
Extension block information will be excluded from candidates to find the best one.

The rules of DVI auto detect
1. extensions : 00h
2. IEEE registration identifier : 0x000c03h
(refer to E-EDID standard, Section 6.2)

On some VU8C monitors, the edid data has an unneeded resolution, 1152×768 except 1024×768,
so when using display auto detection mode, part of the right side display image can be clipped.

If you have the issue, please set the display mode as “Manual mode” and “1024x768p60hz” and the following,
to correct the display.

# Display Auto Detection
# "false" or "true"
setenv display_autodetect "false"
...
...
# setenv m "1080p60hz" # Progressive 60Hz
setenv m "1024x768p60hz"

Or, if you want to update the edid data of your VU8C converter board, please see link below.
We are preparing to release a new edid data binary by adjust the detailed timing table to fix ODROID-C2 display auto detection issue.
Once we are done, the update status will be specified here.
update_edid