I've been working on this since I got my new Bravia KDL-46HX800 TV. As it turns out the fix was simple after upgrading the nvidia drivers. The updated nvidia driver does a correct EDID handshake and recognizes that the Sony EDID is self contradictory in stating a 58 - 62hz vert refresh rate and at the same time specifying a valid 24p mode. X now just ignores the 58 - 62Hz limitation and adds 1920x1080_24 to the implicit X mode pool.
With Pin's image and using the default xorg.conf as created by X and running the following code:
Code:
sudo /etc/init.d/xbmc-live stop
X -verbose 6 > ~/xlog.txt 2>&1
The xlog.txt revealed:
Code:
(II) Dec 12 15:07:48 NVIDIA(0): Validating Mode "1920x1080":
(II) Dec 12 15:07:48 NVIDIA(0): 1920 x 1080 @ 24 Hz
(II) Dec 12 15:07:48 NVIDIA(0): For use as DFP backend.
(II) Dec 12 15:07:48 NVIDIA(0): Mode Source: EDID
(II) Dec 12 15:07:48 NVIDIA(0): Pixel Clock : 74.16 MHz
(II) Dec 12 15:07:48 NVIDIA(0): HRes, HSyncStart : 1920, 2558
(II) Dec 12 15:07:48 NVIDIA(0): HSyncEnd, HTotal : 2602, 2750
(II) Dec 12 15:07:48 NVIDIA(0): VRes, VSyncStart : 1080, 1084
(II) Dec 12 15:07:48 NVIDIA(0): VSyncEnd, VTotal : 1089, 1125
(II) Dec 12 15:07:48 NVIDIA(0): H/V Polarity : +/+
(WW) Dec 12 15:07:48 NVIDIA(0): The EDID for SONY TV (DFP-0) contradicts itself: mode
(WW) Dec 12 15:07:48 NVIDIA(0): "1920x1080" is specified in the EDID; however, the EDID's
(WW) Dec 12 15:07:48 NVIDIA(0): valid VertRefresh range (58.000-62.000 Hz) would exclude
(WW) Dec 12 15:07:48 NVIDIA(0): this mode's VertRefresh (24.0 Hz); ignoring VertRefresh
(WW) Dec 12 15:07:48 NVIDIA(0): check for mode "1920x1080".
(II) Dec 12 15:07:48 NVIDIA(0): Mode is valid.
Further:
Code:
(II) Dec 12 15:07:48 NVIDIA(0): Implicitly adding the following modes to X Screen 0 (these
(II) Dec 12 15:07:48 NVIDIA(0): will be available via XRandR and XF86VidMode):
(II) Dec 12 15:07:48 NVIDIA(0):
(II) Dec 12 15:07:48 NVIDIA(0): "1920x1080_60_0" : 1920 x 1080 @ 59.94/60 Hz (CEA-861B Format 16)
(II) Dec 12 15:07:48 NVIDIA(0): "1920x1080_24" : 1920 x 1080 @ 23.97/24 Hz (CEA-861B Format 32)
(II) Dec 12 15:07:48 NVIDIA(0): "1920x1080_60i" : 1920 x 1080 @ 59.94/60 Hz (CEA-861B Format 5)
(II) Dec 12 15:07:48 NVIDIA(0): "1680x1050" : 1680 x 1050 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1600x1024" : 1600 x 1024 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1440x900" : 1440 x 900 @ 60.2 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1440x480" : 1440 x 480 @ 60.1 Hz Interlace
(II) Dec 12 15:07:48 NVIDIA(0): "1400x1050" : 1400 x 1050 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1280x1024" : 1280 x 1024 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1280x960" : 1280 x 960 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1280x800" : 1280 x 800 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1280x768" : 1280 x 768 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "1280x720_60_0" : 1280 x 720 @ 59.94/60 Hz (CEA-861B Format 4)
(II) Dec 12 15:07:48 NVIDIA(0): "1024x768" : 1024 x 768 @ 60.0 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "840x525" : 840 x 525 @ 60.1 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "800x600" : 800 x 600 @ 60.3 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "800x512" : 800 x 512 @ 60.1 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "720x480_60i" : (1440)x 480 @ 59.94/60 Hz Interlace (CEA-861B Format 7)
(II) Dec 12 15:07:48 NVIDIA(0): "720x450" : 720 x 450 @ 60.2 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "640x512" : 640 x 512 @ 60.0 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "640x480" : 640 x 480 @ 60.0 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "640x480_60" : 640 x 480 @ 59.9 Hz
(II) Dec 12 15:07:48 NVIDIA(0): "640x480_60_0" : 640 x 480 @ 59.94/60 Hz Interlace (CEA-861B Format 1)
(II) Dec 12 15:07:48 NVIDIA(0): "640x400" : 640 x 400 @ 60.0 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "640x384" : 640 x 384 @ 60.1 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "512x384" : 512 x 384 @ 60.0 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "400x300" : 400 x 300 @ 60.3 Hz DoubleScan
(II) Dec 12 15:07:48 NVIDIA(0): "320x240" : 320 x 240 @ 60.1 Hz DoubleScan
So, all that was needed was to add the X implicit "Modes" labels to Xorg.conf:
Code:
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "NoLogo" "True"
SubSection "Display"
Depth 24
Modes "1920x1080_60_0" "1920x1080_24"
EndSubSection
EndSection
Note that the actual refresh rates are 59.94 and 23.97 respectively so no custom Modelines are needed! The Bravia is now running beautiful 1920x1080/24p (evidenced by pressing the "Display" button on the remote) or 1920x1080_60 and switching between modes according to content.