Created attachment 53949 [details] dmesg log Hello, I have an Innocore's DPX-S410 board. When I plug in a second monitor to it it starts turning on and off in its native resolution (1680x1050). This situation continues to occur when I enter Xorg. I can only get the second monitor to work if I select a VESA resolution in menu.lst (video=800x600) or use a different resolution with xrandr. What is also strange is that EDID from VGA2 seems to mirror that of VGA1.
I'd also like to add that the VGA2 is connected through Chrontel 7317A-TF chip.
Can you please provide the output of "xrandr --verbose" with two monitors attached? (when the monitor is turning on/off) Does the 1600x1200 and 1280x1024 modes work on that monitor? And if they *do* work, I'll ask you to test the 1440x900, 1360x768 and 1280x800 modes: if they *don't* work, then I'd say this bug might be a duplicate of 42174.
I was able to fix both issues. The problem with EDID of VGA2 being a duplicate of VGA1 turned out to be a bad ddc guess in intel_sdvo_guess_ddc_bus(). sdvo->controlled_output has the value of 14 in the case of and it maps to sdvo->ddc_bus 1, which retrieved EDID from VGA1. Changing this to 2 fixed the problem with monitor detection. Modes which didn't work had +vsync -hsync set. I was able to fix this patch applied to intel_sdvo_mode_set(): if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) { sdvox |= SDVO_VSYNC_ACTIVE_HIGH; + sdvox |= SDVO_HSYNC_ACTIVE_HIGH; } if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) { sdvox |= SDVO_HSYNC_ACTIVE_HIGH; + sdvox |= SDVO_VSYNC_ACTIVE_HIGH; } I adopted this solution from an old patch for Xorg. I don't understand why it is needed to set both flags, but it simply works. Are there any refs for this stuff?
(In reply to comment #3) > I was able to fix both issues. The problem with EDID of VGA2 being a duplicate > of VGA1 turned out to be a bad ddc guess in intel_sdvo_guess_ddc_bus(). > sdvo->controlled_output has the value of 14 in the case of and it maps to > sdvo->ddc_bus 1, which retrieved EDID from VGA1. Changing this to 2 fixed the > problem with monitor detection. > Is this documented anywhere? Is there a bug report or patch on a list? If you found a fix for a problem, let's try to push it upstream :) > Modes which didn't work had +vsync -hsync set. I was able to fix this patch > applied to intel_sdvo_mode_set(): > > if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) { > sdvox |= SDVO_VSYNC_ACTIVE_HIGH; > + sdvox |= SDVO_HSYNC_ACTIVE_HIGH; > } > if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) { > sdvox |= SDVO_HSYNC_ACTIVE_HIGH; > + sdvox |= SDVO_VSYNC_ACTIVE_HIGH; > } > > I adopted this solution from an old patch for Xorg. Where is this patch? Can you please provide a link? This might really help us. > I don't understand why it > is needed to set both flags, but it simply works. Are there any refs for this > stuff? With your patch, modes that have -VSync +HSync will become +VSync +HSync and modes that have +VSync -HSync will become +VSync +HSync. And this *really* makes me think this bug is a duplicate of #42174. I have a theory on the reason but I'll need you to help me: With your current patch, I believe that modes with -VSync -HSync still won't work for you. Can you please confirm that? Use "dmesg | grep Modeline | grep 0xa$" or "xrandr --verbose" to find out which modes have -VSync and -HSync and then test them and tell me whether they work or not with (or without) your patch. Thank you, Paulo
(In reply to comment #4) > (In reply to comment #3) > > I was able to fix both issues. The problem with EDID of VGA2 being a duplicate > > of VGA1 turned out to be a bad ddc guess in intel_sdvo_guess_ddc_bus(). > > sdvo->controlled_output has the value of 14 in the case of and it maps to > > sdvo->ddc_bus 1, which retrieved EDID from VGA1. Changing this to 2 fixed the > > problem with monitor detection. > > > > Is this documented anywhere? Is there a bug report or patch on a list? If you > found a fix for a problem, let's try to push it upstream :) See the series of patches Adam Jackson sent to fix this: 1308256588-8026-1-git-send-email-ajax@redhat.com > > Modes which didn't work had +vsync -hsync set. I was able to fix this patch > > applied to intel_sdvo_mode_set(): > > > > if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) { > > sdvox |= SDVO_VSYNC_ACTIVE_HIGH; > > + sdvox |= SDVO_HSYNC_ACTIVE_HIGH; > > } > > if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) { > > sdvox |= SDVO_HSYNC_ACTIVE_HIGH; > > + sdvox |= SDVO_VSYNC_ACTIVE_HIGH; > > } > > > > I adopted this solution from an old patch for Xorg. > > Where is this patch? Can you please provide a link? This might really help us. That's not a patch, but a hack around a buggy EDID, In this case hacking around reading the wrong one.
Created attachment 54212 [details] xrandr -q --verbose
The patch for the orignal Xorg driver can be found here: https://bugs.freedesktop.org/show_bug.cgi?id=15766
Paulo Zanoni: you were right that modes with -vsync -hsync still didn't work. I fixed it by unconditionally SDVO_VSYNC_ACTIVE_HIGH and SDVO_HSYNC_ACTIVE_HIGH.
*** This bug has been marked as a duplicate of bug 42174 ***
A patch referencing this bug report has been merged in Linux v3.3-rc2: commit ba68e086223a5f149f37bf8692c8cdbf1b0ba3ef Author: Paulo Zanoni <paulo.r.zanoni@intel.com> Date: Fri Jan 6 19:45:34 2012 -0200 drm/i915/sdvo: always set positive sync polarity
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.