On Thu, Jul 1, 2010 at 10:07 AM, Pasi K?rkk?inen <pasik at iki.fi> wrote: > On Mon, Jun 21, 2010 at 09:18:01PM +0300, Pasi K?rkk?inen wrote: >> > >> >> > >> I am not sure your patch is right, my guess is that devices field of >> > >> radeon connector structure btw the HDMI & DVI connector are different >> > >> and thus that drm_detect_hdmi_monitor is not call. I expect it's normal >> > >> for the device field to be different (my understanding being that HDMI >> > >> will have one more bit set than the DVI connector). Bottom line is >> > >> i think we want to discard non hdmi connector just in case we face >> > >> shared connector. >> > >> >> > >> Alex would have to comment on the device field test, maybe your atombios >> > >> is broken. Does it works if instead of removing >> > >> if (connector == list_connector) >> > >> ? ? ? ?continue; >> > >> You remove : >> > >> if (radeon_connector->devices == list_radeon_connector->devices) >> > >> >> > >> Also can you print the radeon_connector->devices of all your connector >> > >> so we can compare them. >> > > >> > > The code was for systems with shared ddc lines and shared encoders, >> > > but it looks like your system may have a shared ddc line and (sort of) >> > > non-shared encoders. ?I suspect the DVI port is using UNIPHY A or A+B >> > > (for dual link) and HDMI is using UNIPHY link B. ?It's probably >> > > actually using router objects (gpio toggle to switch gpio routing >> > > between physical ports), however support for that is not implemented >> > > yet which is why we have the current code. ?Can you send me a copy of >> > > your vbios so I can verify? >> > > >> > > To access your vbios (as root): >> > > cd /sys/bus/pci/device/<pci bus id> >> > > echo 1 > rom >> > > cat rom > /tmp/vbios.rom >> > > echo 0 > rom >> > >> > Does the attached patch fix the issue? >> > >> >> Thanks for the patch. I'll try it when I'm back where the dock is.. will >> take a couple of days. >> > > Sorry it took a while.. I tried your patch now. > It seems to fix the problem! > > When you send it upstream please also CC it for 2.6.33/2.6.34 stable branches? > Just hoping to get the fix into Fedora 13.. >
I've sent the patch to Dave and cc'ed stable. Alex > -- Pasi > >> >> >> > From 557b452536c9390105539a264d342d963d71b087 Mon Sep 17 00:00:00 2001 >> > From: Alex Deucher <alexdeucher at gmail.com> >> > Date: Mon, 21 Jun 2010 12:07:52 -0400 >> > Subject: [PATCH] drm/radeon/kms: fix shared ddc handling >> > MIME-Version: 1.0 >> > Content-Type: text/plain; charset=UTF-8 >> > Content-Transfer-Encoding: 8bit >> > >> > Connectors with a shared ddc line can be connected to different >> > encoders. >> > >> > Reported by Pasi K?rkk?inen <pasik at iki.fi> on dri-devel >> > >> > Signed-off-by: Alex Deucher <alexdeucher at gmail.com> >> > --- >> > ?drivers/gpu/drm/radeon/radeon_connectors.c | ? ?4 +++- >> > ?1 files changed, 3 insertions(+), 1 deletions(-) >> > >> > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c >> > b/drivers/gpu/drm/radeon/radeon_connectors.c >> > index 0c7ccc6..f58f8bd 100644 >> > --- a/drivers/gpu/drm/radeon/radeon_connectors.c >> > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c >> > @@ -785,7 +785,9 @@ static enum drm_connector_status >> > radeon_dvi_detect(struct drm_connector *connect >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (connector == list_connector) >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? continue; >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? list_radeon_connector = >> > to_radeon_connector(list_connector); >> > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (radeon_connector->devices == >> > list_radeon_connector->devices) { >> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (list_radeon_connector->shared_ddc >> > && >> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> > (list_radeon_connector->ddc_bus->rec.i2c_id == >> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> > ?radeon_connector->ddc_bus->rec.i2c_id)) { >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if >> > (drm_detect_hdmi_monitor(radeon_connector->edid)) { >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if >> > (connector->connector_type == DRM_MODE_CONNECTOR_DVID) { >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> > kfree(radeon_connector->edid); >> > -- >> > 1.7.0.1 >> > >> >