Skip to contentSkip to conversation

radeonfb: DDC i2c fix

PATCH In review Benjamin Herrenschmidt 2 participants 4 messages Mar 11, 2005 – Mar 12, 2005 Framebuffer layer

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 radeonfb: DDC i2c fix

Hi !

The radeonfb code for DDC probing (like it's X.org counterpart) uses to leave the DDC clock & data lines asserted after the probing is complete. This causes problems with some Apple monitors like the new Cinema HD 23", who will turn themselves off when that happens. This fixes it.

drivers/video/aty/radeon_i2c.c +6 -0
Index: linux-work/drivers/video/aty/radeon_i2c.c
===================================================================
@@ -236,6 +236,12 @@
 		if (edid)
 			break;
 	}
+	/* Release the DDC lines when done or the Apple Cinema HD display
+	 * will switch off
+	 */
+	OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN | VGA_DDC_DATA_OUT_EN));
+	(void)INREG(reg);
+
 	if (out_edid)
 		*out_edid = edid;
 	if (!edid) {

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click

#1 lore raw

Il Fri, Mar 11, 2005 at 04:46:10PM +1100, Benjamin Herrenschmidt ha scritto:

Quoted 4 lines

The radeonfb code for DDC probing (like it's X.org counterpart) uses to leave the DDC clock & data lines asserted after the probing is complete. This causes problems with some Apple monitors like the new Cinema HD 23", who will turn themselves off when that happens. This fixes it.

Fix is correct, but comment is not ;) After the loop SCL and SDA are left low. Pulling them high puts the I2C bus in the stop condition.

Luca

Signature · 11 lines
Home: http://kronoz.cjb.net
Inquietudine sintetica
Solo, davanti all'ignoto
Tienimi stretto a te


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
#2 lore raw
Quoted 8 lines · Kronos

Il Fri, Mar 11, 2005 at 04:46:10PM +1100, Benjamin Herrenschmidt ha scritto:

Quoted 4 lines

The radeonfb code for DDC probing (like it's X.org counterpart) uses to leave the DDC clock & data lines asserted after the probing is complete. This causes problems with some Apple monitors like the new Cinema HD 23", who will turn themselves off when that happens. This fixes it.

Fix is correct, but comment is not ;) After the loop SCL and SDA are left low. Pulling them high puts the I2C bus in the stop condition.

Well, they are pull-up lines. I'm not pulling them high per-se, I'm "releasing" them to their natural state, which is high ;) The ATI code does some weird shit around the i2c transfer proper, and I don't know exactly why. I don't have any spec about DDC2 though, my understand is that it's more than just i2c EEPROM though. It used to leave the 2 lines "assserted" at the end of the transfer (after the last stop condition) and that sounded wrong and causes the misbehaviour on the Apple display ...

Ben.

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click

#3 lore raw

Il Sat, Mar 12, 2005 at 10:52:17AM +1100, Benjamin Herrenschmidt ha scritto:

Quoted 7 lines · Kronos
Quoted 6 lines

Il Fri, Mar 11, 2005 at 04:46:10PM +1100, Benjamin Herrenschmidt ha scritto:

Quoted 4 lines

The radeonfb code for DDC probing (like it's X.org counterpart) uses to leave the DDC clock & data lines asserted after the probing is complete. This causes problems with some Apple monitors like the new Cinema HD 23", who will turn themselves off when that happens. This fixes it.

Quoted 7 lines
Quoted 2 lines

Fix is correct, but comment is not ;) After the loop SCL and SDA are left low. Pulling them high puts the I2C bus in the stop condition.

Well, they are pull-up lines. I'm not pulling them high per-se, I'm "releasing" them to their natural state, which is high ;) The ATI code does some weird shit around the i2c transfer proper, and I don't know exactly why.

When I wrote that code I asked a clarification from ATI (IIRC I spoke with Hui Yu) and they said that it was needed to cover some strange corner case.
My tests showed that I was able to read EDID even without that black magic but since the code originated from ATI I left it in place.

Quoted 2 lines

I don't have any spec about DDC2 though, my understand is that it's more than just i2c EEPROM though.

I don't have DDC2 spec because VESA.org prices are too high... but I know that it's based on I2C protocol and it follows I2C format (ie. start-stop sequencies and so on).
AFAIK for EDID initiating a read at the right address is enough, but DDC2 is meant to be bi-directional to control brightness, contrast, you name it. I'm clueless on this part of DCC2.

Luca

Signature · 10 lines
Home: http://kronoz.cjb.net
Il piu` bel momento dell'amore e` quando ci si illude che duri per 
sempre; il piu` brutto, quando ci si accorge che dura da troppo.


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click