cnlohr
Posts: 12
Joined: Fri Feb 12, 2016 10:34 pm

Converting modelines for hdmi_timings [SOLVED]

Wed Jun 13, 2018 2:58 am

It seems that there have been rumors of folks using the raspi's past the 150 MHz pixel clock limit without any issues. I really want to get the HTC Vive working on a raspberry pi so I can dump Orange Pi and their awful GPU support. So I am here again, this time with a brand new Pi Model 3 B+.

Unfortunately the Vive's 2160x1200 screen requires extremely precise timing. It seems even one iota off, and it will refuse to display anything at all, so CEA modes are not possible.

I still can't seem to get the pi to output anything that the Vive can read. I'm not sure why.

What I have is the EDID modeline:

Code: Select all

Modeline "Mode 0" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync


(It's actually more like 89.5 Hz)

The Raspi EDID tool prints this:

Code: Select all

HDMI:EDID found monitor name descriptor tag 0xfc
HDMI:EDID monitor name is HTC-VIVE
HDMI:EDID found monitor range descriptor tag 0xfd
HDMI:EDID monitor range offsets: V min=0, V max=0, H min=0, H max=0
HDMI:EDID monitor range: vertical is 20-120 Hz, horizontal is 1-255 kHz, max pixel clock is 290 MHz
HDMI:EDID monitor range does not support GTF
HDMI:EDID failed to find a matching detail format for 2160x1200p hfp:40 hs:20 hbp:46 vfp:28 vs:2 vbp:234 pixel clock:297 MHz
HDMI:EDID calculated refresh rate is 90 Hz
HDMI:EDID guessing the format to be 2160x1200p @85 Hz
HDMI:EDID found unknown detail timing format: 2160x1200p hfp:40 hs:20 hbp:46 vfp:28 vs:2 vbp:234 pixel clock:297 MHz
It refuses to treat it as a switchable mode, even if the pixel clock is overridden.

I've done the best I can to"convert" the modeline to hdmi_timing but, I am confident I'm still missing something.

Here's my config file:

Code: Select all

hdmi_pixel_freq_limit=400000000  #Set pixel limit well above the 297MHz needed.
hvs_priority=0x32ff  #Set priority on GPU stuff high.
gpu_mem=256 #Seems like a good amount.
hdmi_ignore_edid=0xa5000080  #Not sure - recommended by some folks.

#Make it so the framebuffer can actually use the full screen.
max_framebuffer_width=2160
max_framebuffer_height=1200
framebuffer_width=2160
framebuffer_height=1200

hdmi_force_hotplug=1 #Blast signal out regardless.
config_hdmi_boost=5  #0..11

#Not sure what DPI is for.
dpi_group=2
dpi_mode=87

hdmi_drive=2  #Must be 2!
hdmi_group=2  #DMT
hdmi_mode=87
hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 89 0 297000000 5
In recap:

Is:

Code: Select all

Modeline "Mode 0" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync

actually convertable to

Code: Select all

hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 89 0 297000000 5
?

EDIT: It is. Basically, the numbers after the polarity after resolution are just whatever incremental pixel count is added by the new thing. I.e. 2266-2220 = 46, 2220-2200 = 20, etc.
Last edited by cnlohr on Sat Jun 16, 2018 1:11 am, edited 1 time in total.

cnlohr
Posts: 12
Joined: Fri Feb 12, 2016 10:34 pm

Re: Converting modelines for hdmi_timings

Sat Jun 16, 2018 1:09 am

It seems that my guesses were correct. Not sure what is up with the pi, but when operating like this if you aren't writing to the framebuffer, or screen, it won't update. Only a small portion of the screen will be displayed. It seemed it worked with the vive the whole time.

For more information, including my config and my command I used to get video output (dumping urandom to fb0) here is the link:

https://gist.github.com/cnlohr/152d4b7f ... 4305d81a0b

Return to “Advanced users”

Who is online

Users browsing this forum: No registered users and 4 guests