====== HDMI PHY Auto Setting using modeline information ====== * To support this functionality, your kernel version should be 3.14.77-79 or higher. * For Android, it's available with Android v2.2 or higher. If you have information of your monitor's modeline information, hdmi driver builds up the hdmi-related parameters based on the parameter described in boot.ini. The required items are as following. 1. Resolutions and Clock - horizontal pixels / vertical pixels - pixel clock - horizontal frequency / vertical frequency 2. HTimings - hdisp / hsyncstart / hsyncend / htotal 3. VTimings - vdisp / vsyncstart / vsyncend / vtotal 4. Sync Polarity and Scanning Method - hsync_polarity / vsync_polarity - progress_mode or interlaced mode ===== Modeline Information ===== === Descriptions of Modeline information and Examples === Let's talk about the detailed descriptions and examples of modeline information here. * Resolutions and Clock | name| description| example : 1080p60hz | example : 1792x1344p60hz | | hor_pixels| display width | 1920 | 1792 | | ver_pixels| display height | 1080 | 1344 | | pixel_clock | pixel clock | 148.50 MHz | 204.8 MHz | | hor_freq | horizontal frequency | 67.5 kHz | 83.66 kHz | | ver_freq | vertical frequency | 60 Hz | 60 Hz | * HTimings | name | example : 1080p60hz | example : 1792x1344p60hz | | hdisp | 1920 | 1792 | | hsyncstart | 2008 | 1920 | | hsyncend | 2052 | 2120 | | htotal | 2200 | 2448 | * VTimings | name | example : 1080p60hz | example : 1792x1344p60hz | | vdisp | 1080 | 1344 | | vsyncstart | 1084 | 1345 | | vsyncend | 1089 | 1348 | | vtotal | 1125 | 1394 | * Sync Polarity and Scanning Method | name | descriptioin | example : 1080p60hz | example : 1792x1344p60hz | | hsync_polarity | +HSync or -HSync | +HSync, '1' | -HSync, '0' | | vsync_polarity | +VSync or -VSync | -VSync, '0' | +VSync, '1' | | progress_mode | 'P' or 'I' | progress mode, '1' | progress mode, '1' | === Syntax === The formats of modeline can be as following. 1. Modeline Syntax (1) Modeline "width x height" pclk hdisp hsyncstart hsyncend htotal vdisp vsyncstart vsyncend vtotal [flags] For example, in case of 1920x1080p60Hz, 1920 1080 60 Hz 67.5 kHz ModeLine "1920x1080" 148.50 1920 2008 2052 2200 1080 1084 1088 1125 -HSync -VSync 2. Modeline Syntax (2) [width x height] [pixel clock in MHz] [hsync_polarity] [vsync_polarity] h: width [width] start [hsyncstart] end [hsyncend] total [htotal] skew 0 clock [hor_freq in KHz] v: height [height] start [vsyncstart] end [vsyncend] total [vtotal] clock [ver_freq in Hz] * Example - 1920x1080p60Hz case 1920x1080 148.5MHz +HSync +VSync h: width 1920 start 2008 end 2052 total 2200 skew 0 clock 67.5KHz v: height 1080 start 1084 end 1089 total 1125 clock 60.0Hz * Example - 1792x1344p60Hz case 1792x1344 204.80MHz -HSync +VSync h: width 1792 start 1920 end 2120 total 2448 skew 0 clock 83.66KHz v: height 1344 start 1345 end 1348 total 1394 clock 60.0Hz ==== How to get the modeline information of my monitor ==== == on Ubuntu Host PC == If you have a linux pc, you can get the modeline information using the command, 'xrandr'. $ xrandr Screen 0: minimum 320 x 200, current 5120 x 1600, maximum 16384 x 16384 DFP1 disconnected (normal left inverted right x axis y axis) ..... DFP6 connected primary 2560x1440+2560+160 (normal left inverted right x axis y axis) 596mm x 335mm 2560x1440 60.0*+ 1856x1392 60.0 1792x1344 60.0 1920x1200 60.0 ..... 640x480 66.6 59.9 DFP7 connected 2560x1600+0+0 (normal left inverted right x axis y axis) 641mm x 401mm 2560x1600 60.0*+ 2048x1536 60.0 ..... 640x480 59.9 CRT1 disconnected (normal left inverted right x axis y axis) $ xrandr --verbose Screen 0: minimum 320 x 200, current 5120 x 1600, maximum 16384 x 16384 DFP1 disconnected (normal left inverted right x axis y axis) Identifier: 0x75 Timestamp: 24992 Subpixel: unknown Clones: CRTCs: 0 1 2 3 4 5 Transform: 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 filter: SignalFormat: DisplayPort ConnectorType: DisplayPort ..... ..... 2560x1440 (0x7d) 241.5MHz +HSync +VSync *current +preferred h: width 2560 start 2608 end 2640 total 2720 skew 0 clock 88.8KHz v: height 1440 start 1442 end 1447 total 1481 clock 60.0Hz 1800x1440 (0x7e) 241.5MHz +HSync +VSync h: width 1800 start 2608 end 2640 total 2720 skew 0 clock 88.8KHz v: height 1440 start 1442 end 1447 total 1481 clock 60.0Hz 1856x1392 (0x7f) 241.5MHz +HSync +VSync h: width 1856 start 2608 end 2640 total 2720 skew 0 clock 88.8KHz v: height 1392 start 1442 end 1447 total 1481 clock 60.0Hz 1792x1344 (0x80) 241.5MHz +HSync +VSync h: width 1792 start 2608 end 2640 total 2720 skew 0 clock 88.8KHz v: height 1344 start 1442 end 1447 total 1481 clock 60.0Hz ..... 640x480 (0x97) 25.2MHz -HSync -VSync h: width 640 start 656 end 752 total 800 skew 0 clock 31.5KHz v: height 480 start 490 end 492 total 525 clock 59.9Hz ..... == on Windows Host PC == TODO ===== Descriptions in boot.ini ===== == hdmimode == # setenv hdmimode "1080p60hz" setenv hdmimode "custombuilt" == modeline == The basic form of related env parameter in boot.ini is as following. setenv modeline horpixels,verpixels,pixel_clock,hor_freq,ver_freq,hdisp,hsyncstart,hsyncend,htotal,vdisp,vsyncstart,vsyncend,vtotal,hsync_polarity,vsync_polarity,progress_mode == width and height for Android == For Android, "customwidth" and "customheight" parameters are needed. setenv customwidth horpixels setenv customheight verpixels Please be sure of units for pixel_clock, hor_freq and ver_freq. * pixel_clock : in KHz unit, ex) 148.5MHz -> 148500 * hor_freq : in Hz unit ex) 67.5KHz -> 67500 * ver_freq : in Hz unit ex) 60Hz -> 60 For example, let's suppose we're building 1920x1080p60Hz mode. setenv modeline "1920,1080,148500,67500,60,1920,2008,2052,2200,1080,1084,1088,1125,0,1,1" # Only for Android setenv customwidth "1920" setenv customheight "1080" For another example of 1792x1344p60Hz mode, the env configuration should be as following. setenv modeline "1792,1344,204800,83660,60,1792,1920,2120,2448,1344,1345,1348,1394,0,1,1" # Only for Android setenv customwidth "1792" setenv customheight "1344" For Android, here is a example in case of 1792x1344p60Hz. ODROIDC2-UBOOT-CONFIG setenv dtbaddr 0x1000000 setenv loadaddr 0x20000000 # Resolution Configuration # 'hdmimode' must be one of below to configure display resolution within # supported by your TV or monitor. # Symbol | Resolution # ----------------------+------------- # "480p60hz" | 720x480 Progressive 60Hz # ..... # "3440x1440p60hz" | 3440x1440 Progressive 60Hz setenv hdmimode "custombuilt" # modeline for 1792x1344p60Hz setenv modeline "1792,1344,204800,83660,60,1792,1920,2120,2448,1344,1345,1348,1394,0,1,1" setenv customwidth "1792" setenv customheight "1344" setenv rootopt "root=/dev/mmcblk0p2 rw init=/init rootwait" setenv consoleopt "console=ttyS0,115200" setenv androidopt "androidboot.hardware=odroidc2 androidboot.serialno=${fbt_id#}" setenv logoopt "osd1,loaded,${fb_addr},${hdmimode}" setenv selinuxopt "androidboot.selinux=disabled" # HDMI/DVI Mode Configuration # This will enforce the signal type of display # "hdmi" - For HDMI interface # "dvi" - For DVI interface setenv vout_mode "hdmi" # HPD enable/disable option setenv disablehpd "false" # Overscan offset configuration # All offsets are zero and can be tuned by manual or ODROID Utility setenv overscan_top "0" setenv overscan_left "0" setenv overscan_bottom "0" setenv overscan_right "0" suspend_hdmiphy=0 led_blink=1 setenv bootargs "${rootopt} ${consoleopt} modeline=${modeline} hdmimode=${hdmimode} hdmitx=${cecconfig} vout=${vout_mode} disablehpd=${disablehpd} logo=${logoopt} ${androidopt} ${selinuxopt} suspend_hdmiphy=${suspend_hdmiphy} led_blink=${led_blink}" save showlogo ${hdmimode} #usb pwren movi read dtb 0 ${dtbaddr} movi read boot 0 ${loadaddr} booti ${loadaddr} - ${dtbaddr}