linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Remove voodoo code from i2c
@ 2004-03-05 21:52 Kronos
  2004-03-05 23:55 ` Benjamin Herrenschmidt
  2004-03-06  0:12 ` Michel Dänzer
  0 siblings, 2 replies; 10+ messages in thread
From: Kronos @ 2004-03-05 21:52 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linux-fbdev-devel

Hi,
radeon_probe_i2c_connector contains very strange code that just send
empty start-stop sequencies on the I2C bus. I copied the code from
XFree86, but speaking with I2C gurus the general feeling is that this
code can go away without any harm. I tested it on 3 different setup (all
x86...) and it works well. I don't have any "old" monitor around to
fiddle with though.

Oh, if you think that this code should stay I'll send you another patch
to make it more readable.

===== drivers/video/aty/radeon_i2c.c 1.3 vs edited =====
--- 1.3/drivers/video/aty/radeon_i2c.c	Wed Feb 18 07:02:05 2004
+++ edited/drivers/video/aty/radeon_i2c.c	Fri Mar  5 22:44:21 2004
@@ -180,59 +180,9 @@
 	OUTREG(reg, INREG(reg) & 
 			~(VGA_DDC_DATA_OUTPUT | VGA_DDC_CLK_OUTPUT));
 
-	OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
-	(void)INREG(reg);
-
 	for (i = 0; i < 3; i++) {
-		/* For some old monitors we need the
-		 * following process to initialize/stop DDC
-		 */
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
-		(void)INREG(reg);
-		wait_ms(13);
-
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
-		for (j = 0; j < 5; j++) {
-			wait_ms(10);
-			if (INREG(reg) & VGA_DDC_CLK_INPUT)
-				break;
-		}
-		if (j == 5)
-			continue;
-
-		OUTREG(reg, INREG(reg) | VGA_DDC_DATA_OUT_EN);
-		(void)INREG(reg);
-		wait_ms(15);
-		OUTREG(reg, INREG(reg) | VGA_DDC_CLK_OUT_EN);
-		(void)INREG(reg);
-		wait_ms(15);
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
-		(void)INREG(reg);
-		wait_ms(15);
-
 		/* Do the real work */
 		edid = radeon_do_probe_i2c_edid(&rinfo->i2c[conn-1]);
-
-		OUTREG(reg, INREG(reg) | 
-				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
-		wait_ms(15);
-		
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
-		for (j = 0; j < 10; j++) {
-			wait_ms(10);
-			if (INREG(reg) & VGA_DDC_CLK_INPUT)
-				break;
-		}
-
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
-		(void)INREG(reg);
-		wait_ms(15);
-		OUTREG(reg, INREG(reg) |
-				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
 		if (edid)
 			break;
 	}

Luca
-- 
Home: http://kronoz.cjb.net
Runtime error 6D at f000:a12f : user incompetente


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Remove voodoo code from i2c
  2004-03-05 21:52 [PATCH] Remove voodoo code from i2c Kronos
@ 2004-03-05 23:55 ` Benjamin Herrenschmidt
  2004-03-06  0:47   ` Kronos
  2004-03-08 22:17   ` Richard Smith
  2004-03-06  0:12 ` Michel Dänzer
  1 sibling, 2 replies; 10+ messages in thread
From: Benjamin Herrenschmidt @ 2004-03-05 23:55 UTC (permalink / raw)
  To: Kronos; +Cc: Linux Fbdev development list

On Sat, 2004-03-06 at 08:52, Kronos wrote:
> Hi,
> radeon_probe_i2c_connector contains very strange code that just send
> empty start-stop sequencies on the I2C bus. I copied the code from
> XFree86, but speaking with I2C gurus the general feeling is that this
> code can go away without any harm. I tested it on 3 different setup (all
> x86...) and it works well. I don't have any "old" monitor around to
> fiddle with though.
> 
> Oh, if you think that this code should stay I'll send you another patch
> to make it more readable.

I'd rather keep the code as close to XFree as possible at this point..

BTW... I'm still looking for an EDID spec if that exist ;)

Ben.




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Remove voodoo code from i2c
  2004-03-05 21:52 [PATCH] Remove voodoo code from i2c Kronos
  2004-03-05 23:55 ` Benjamin Herrenschmidt
@ 2004-03-06  0:12 ` Michel Dänzer
  1 sibling, 0 replies; 10+ messages in thread
From: Michel Dänzer @ 2004-03-06  0:12 UTC (permalink / raw)
  To: kronos; +Cc: Benjamin Herrenschmidt, linux-fbdev-devel

On Fri, 2004-03-05 at 22:52, Kronos wrote:
> Hi,
> radeon_probe_i2c_connector contains very strange code that just send
> empty start-stop sequencies on the I2C bus. I copied the code from
> XFree86, but speaking with I2C gurus the general feeling is that this
> code can go away without any harm. I tested it on 3 different setup (all
> x86...) and it works well. I don't have any "old" monitor around to
> fiddle with though.

Have you asked Hui Yu, assuming the code originates from him? He might
be able to explain what it's all about. There are many kinds of Radeon
cards out there, some very weird...


-- 
Earthling Michel Dänzer      |     Debian (powerpc), X and DRI developer
Libre software enthusiast    |   http://svcs.affero.net/rm.php?r=daenzer



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Remove voodoo code from i2c
  2004-03-05 23:55 ` Benjamin Herrenschmidt
@ 2004-03-06  0:47   ` Kronos
  2004-03-06  2:10     ` Jon Smirl
  2004-03-08 22:17   ` Richard Smith
  1 sibling, 1 reply; 10+ messages in thread
From: Kronos @ 2004-03-06  0:47 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: Linux Fbdev development list

Il Sat, Mar 06, 2004 at 10:55:14AM +1100, Benjamin Herrenschmidt ha scritto: 
> On Sat, 2004-03-06 at 08:52, Kronos wrote:
> > Hi,
> > radeon_probe_i2c_connector contains very strange code that just send
> > empty start-stop sequencies on the I2C bus. I copied the code from
> > XFree86, but speaking with I2C gurus the general feeling is that this
> > code can go away without any harm. I tested it on 3 different setup (all
> > x86...) and it works well. I don't have any "old" monitor around to
> > fiddle with though.
> > 
> > Oh, if you think that this code should stay I'll send you another patch
> > to make it more readable.
> 
> I'd rather keep the code as close to XFree as possible at this point..

Ok, what about this (cosmetic) patch:

--- linux-2.6/drivers/video/aty/radeon_i2c.c.orig	Sat Feb 28 18:11:42 2004
+++ linux-2.6/drivers/video/aty/radeon_i2c.c	Sat Feb 28 18:49:31 2004
@@ -174,65 +174,59 @@
 int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8 **out_edid)
 {
 	u32 reg = rinfo->i2c[conn-1].ddc_reg;
+	struct radeon_i2c_chan *chan = &rinfo->i2c[conn-1];
 	u8 *edid = NULL;
 	int i, j;
 
 	OUTREG(reg, INREG(reg) & 
 			~(VGA_DDC_DATA_OUTPUT | VGA_DDC_CLK_OUTPUT));
 
-	OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
-	(void)INREG(reg);
+	radeon_gpio_setscl(chan, 1);
 
 	for (i = 0; i < 3; i++) {
 		/* For some old monitors we need the
 		 * following process to initialize/stop DDC
 		 */
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
-		(void)INREG(reg);
+		radeon_gpio_setsda(chan, 1);
 		wait_ms(13);
 
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
+		radeon_gpio_setscl(chan, 1);
 		for (j = 0; j < 5; j++) {
+			/* Wait for ack */
 			wait_ms(10);
-			if (INREG(reg) & VGA_DDC_CLK_INPUT)
+			if (radeon_gpio_getscl(chan))
 				break;
 		}
 		if (j == 5)
 			continue;
 
-		OUTREG(reg, INREG(reg) | VGA_DDC_DATA_OUT_EN);
-		(void)INREG(reg);
+		radeon_gpio_setsda(chan, 0);
 		wait_ms(15);
-		OUTREG(reg, INREG(reg) | VGA_DDC_CLK_OUT_EN);
-		(void)INREG(reg);
+		radeon_gpio_setscl(chan, 0);
 		wait_ms(15);
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
-		(void)INREG(reg);
+		radeon_gpio_setsda(chan, 1);
 		wait_ms(15);
 
 		/* Do the real work */
-		edid = radeon_do_probe_i2c_edid(&rinfo->i2c[conn-1]);
+		edid = radeon_do_probe_i2c_edid(chan);
 
-		OUTREG(reg, INREG(reg) | 
-				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
+		radeon_gpio_setsda(chan, 0);
+		radeon_gpio_setscl(chan, 0);
 		wait_ms(15);
-		
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
+	
+		radeon_gpio_setscl(chan, 1);
 		for (j = 0; j < 10; j++) {
+			/* Wait for ack */
 			wait_ms(10);
-			if (INREG(reg) & VGA_DDC_CLK_INPUT)
+			if (radeon_gpio_getscl(chan))
 				break;
 		}
 
-		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
-		(void)INREG(reg);
+		radeon_gpio_setsda(chan, 1);
 		wait_ms(15);
-		OUTREG(reg, INREG(reg) |
-				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
-		(void)INREG(reg);
+
+		radeon_gpio_setsda(chan, 0);
+		radeon_gpio_setscl(chan, 0);
 		if (edid)
 			break;
 	}

In this way it clearer what's going on.

Luca
-- 
Home: http://kronoz.cjb.net
"Sei l'unica donna della mia vita".
(Adamo)


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH] Remove voodoo code from i2c
  2004-03-06  0:47   ` Kronos
@ 2004-03-06  2:10     ` Jon Smirl
  2004-03-06  3:42       ` Benjamin Herrenschmidt
  2004-03-06 15:08       ` Kronos
  0 siblings, 2 replies; 10+ messages in thread
From: Jon Smirl @ 2004-03-06  2:10 UTC (permalink / raw)
  To: kronos, Benjamin Herrenschmidt; +Cc: Linux Fbdev development list

Can this be written as a generic i2c probe function by calling i2c chanel
functions instead of directly calling radeon_gpio_setscl, etc? The i2c chanel
functions will then in turn call radeon_gpio_setscl, etc.

I was under the impression that this code is used to wake up old style DDC chips
in the monitor. Waking them up is a function of the monitor, not the radeon
card. If that is right, this is a monitor problem and this code needs to be in
every DDC driver, not just the radeon one. On the other hand I've tried every
old monitor I have around here and none of them need this code.

--- Kronos <kronos@kronoz.cjb.net> wrote:
> Il Sat, Mar 06, 2004 at 10:55:14AM +1100, Benjamin Herrenschmidt ha scritto: 
> > On Sat, 2004-03-06 at 08:52, Kronos wrote:
> > > Hi,
> > > radeon_probe_i2c_connector contains very strange code that just send
> > > empty start-stop sequencies on the I2C bus. I copied the code from
> > > XFree86, but speaking with I2C gurus the general feeling is that this
> > > code can go away without any harm. I tested it on 3 different setup (all
> > > x86...) and it works well. I don't have any "old" monitor around to
> > > fiddle with though.
> > > 
> > > Oh, if you think that this code should stay I'll send you another patch
> > > to make it more readable.
> > 
> > I'd rather keep the code as close to XFree as possible at this point..
> 
> Ok, what about this (cosmetic) patch:
> 
> --- linux-2.6/drivers/video/aty/radeon_i2c.c.orig	Sat Feb 28 18:11:42 2004
> +++ linux-2.6/drivers/video/aty/radeon_i2c.c	Sat Feb 28 18:49:31 2004
> @@ -174,65 +174,59 @@
>  int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8
> **out_edid)
>  {
>  	u32 reg = rinfo->i2c[conn-1].ddc_reg;
> +	struct radeon_i2c_chan *chan = &rinfo->i2c[conn-1];
>  	u8 *edid = NULL;
>  	int i, j;
>  
>  	OUTREG(reg, INREG(reg) & 
>  			~(VGA_DDC_DATA_OUTPUT | VGA_DDC_CLK_OUTPUT));
>  
> -	OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
> -	(void)INREG(reg);
> +	radeon_gpio_setscl(chan, 1);
>  
>  	for (i = 0; i < 3; i++) {
>  		/* For some old monitors we need the
>  		 * following process to initialize/stop DDC
>  		 */
> -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
> -		(void)INREG(reg);
> +		radeon_gpio_setsda(chan, 1);
>  		wait_ms(13);
>  
> -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
> -		(void)INREG(reg);
> +		radeon_gpio_setscl(chan, 1);
>  		for (j = 0; j < 5; j++) {
> +			/* Wait for ack */
>  			wait_ms(10);
> -			if (INREG(reg) & VGA_DDC_CLK_INPUT)
> +			if (radeon_gpio_getscl(chan))
>  				break;
>  		}
>  		if (j == 5)
>  			continue;
>  
> -		OUTREG(reg, INREG(reg) | VGA_DDC_DATA_OUT_EN);
> -		(void)INREG(reg);
> +		radeon_gpio_setsda(chan, 0);
>  		wait_ms(15);
> -		OUTREG(reg, INREG(reg) | VGA_DDC_CLK_OUT_EN);
> -		(void)INREG(reg);
> +		radeon_gpio_setscl(chan, 0);
>  		wait_ms(15);
> -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
> -		(void)INREG(reg);
> +		radeon_gpio_setsda(chan, 1);
>  		wait_ms(15);
>  
>  		/* Do the real work */
> -		edid = radeon_do_probe_i2c_edid(&rinfo->i2c[conn-1]);
> +		edid = radeon_do_probe_i2c_edid(chan);
>  
> -		OUTREG(reg, INREG(reg) | 
> -				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
> -		(void)INREG(reg);
> +		radeon_gpio_setsda(chan, 0);
> +		radeon_gpio_setscl(chan, 0);
>  		wait_ms(15);
> -		
> -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
> -		(void)INREG(reg);
> +	
> +		radeon_gpio_setscl(chan, 1);
>  		for (j = 0; j < 10; j++) {
> +			/* Wait for ack */
>  			wait_ms(10);
> -			if (INREG(reg) & VGA_DDC_CLK_INPUT)
> +			if (radeon_gpio_getscl(chan))
>  				break;
>  		}
>  
> -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
> -		(void)INREG(reg);
> +		radeon_gpio_setsda(chan, 1);
>  		wait_ms(15);
> -		OUTREG(reg, INREG(reg) |
> -				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
> -		(void)INREG(reg);
> +
> +		radeon_gpio_setsda(chan, 0);
> +		radeon_gpio_setscl(chan, 0);
>  		if (edid)
>  			break;
>  	}
> 
> In this way it clearer what's going on.
> 
> Luca
> -- 
> Home: http://kronoz.cjb.net
> "Sei l'unica donna della mia vita".
> (Adamo)
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by: IBM Linux Tutorials
> Free Linux tutorial presented by Daniel Robbins, President and CEO of
> GenToo technologies. Learn everything from fundamentals to system
> administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
> _______________________________________________
> Linux-fbdev-devel mailing list
> Linux-fbdev-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel


=====
Jon Smirl
jonsmirl@yahoo.com

__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you’re looking for faster
http://search.yahoo.com


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH] Remove voodoo code from i2c
  2004-03-06  2:10     ` Jon Smirl
@ 2004-03-06  3:42       ` Benjamin Herrenschmidt
  2004-03-06  4:02         ` Jon Smirl
  2004-03-06 15:08       ` Kronos
  1 sibling, 1 reply; 10+ messages in thread
From: Benjamin Herrenschmidt @ 2004-03-06  3:42 UTC (permalink / raw)
  To: Jon Smirl; +Cc: Kronos, Linux Fbdev development list

On Sat, 2004-03-06 at 13:10, Jon Smirl wrote:
> Can this be written as a generic i2c probe function by calling i2c chanel
> functions instead of directly calling radeon_gpio_setscl, etc? The i2c chanel
> functions will then in turn call radeon_gpio_setscl, etc.

Why ? we aren't doing normal i2c big banging here, just hacking
around.

> I was under the impression that this code is used to wake up old style DDC chips
> in the monitor. Waking them up is a function of the monitor, not the radeon
> card. If that is right, this is a monitor problem and this code needs to be in
> every DDC driver, not just the radeon one. On the other hand I've tried every
> old monitor I have around here and none of them need this code.

Why the hell are you folks trying to change that perfectly working code?

We have much more important things to do at this point.

Ben.

> --- Kronos <kronos@kronoz.cjb.net> wrote:
> > Il Sat, Mar 06, 2004 at 10:55:14AM +1100, Benjamin Herrenschmidt ha scritto: 
> > > On Sat, 2004-03-06 at 08:52, Kronos wrote:
> > > > Hi,
> > > > radeon_probe_i2c_connector contains very strange code that just send
> > > > empty start-stop sequencies on the I2C bus. I copied the code from
> > > > XFree86, but speaking with I2C gurus the general feeling is that this
> > > > code can go away without any harm. I tested it on 3 different setup (all
> > > > x86...) and it works well. I don't have any "old" monitor around to
> > > > fiddle with though.
> > > > 
> > > > Oh, if you think that this code should stay I'll send you another patch
> > > > to make it more readable.
> > > 
> > > I'd rather keep the code as close to XFree as possible at this point..
> > 
> > Ok, what about this (cosmetic) patch:
> > 
> > --- linux-2.6/drivers/video/aty/radeon_i2c.c.orig	Sat Feb 28 18:11:42 2004
> > +++ linux-2.6/drivers/video/aty/radeon_i2c.c	Sat Feb 28 18:49:31 2004
> > @@ -174,65 +174,59 @@
> >  int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8
> > **out_edid)
> >  {
> >  	u32 reg = rinfo->i2c[conn-1].ddc_reg;
> > +	struct radeon_i2c_chan *chan = &rinfo->i2c[conn-1];
> >  	u8 *edid = NULL;
> >  	int i, j;
> >  
> >  	OUTREG(reg, INREG(reg) & 
> >  			~(VGA_DDC_DATA_OUTPUT | VGA_DDC_CLK_OUTPUT));
> >  
> > -	OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
> > -	(void)INREG(reg);
> > +	radeon_gpio_setscl(chan, 1);
> >  
> >  	for (i = 0; i < 3; i++) {
> >  		/* For some old monitors we need the
> >  		 * following process to initialize/stop DDC
> >  		 */
> > -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
> > -		(void)INREG(reg);
> > +		radeon_gpio_setsda(chan, 1);
> >  		wait_ms(13);
> >  
> > -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
> > -		(void)INREG(reg);
> > +		radeon_gpio_setscl(chan, 1);
> >  		for (j = 0; j < 5; j++) {
> > +			/* Wait for ack */
> >  			wait_ms(10);
> > -			if (INREG(reg) & VGA_DDC_CLK_INPUT)
> > +			if (radeon_gpio_getscl(chan))
> >  				break;
> >  		}
> >  		if (j == 5)
> >  			continue;
> >  
> > -		OUTREG(reg, INREG(reg) | VGA_DDC_DATA_OUT_EN);
> > -		(void)INREG(reg);
> > +		radeon_gpio_setsda(chan, 0);
> >  		wait_ms(15);
> > -		OUTREG(reg, INREG(reg) | VGA_DDC_CLK_OUT_EN);
> > -		(void)INREG(reg);
> > +		radeon_gpio_setscl(chan, 0);
> >  		wait_ms(15);
> > -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
> > -		(void)INREG(reg);
> > +		radeon_gpio_setsda(chan, 1);
> >  		wait_ms(15);
> >  
> >  		/* Do the real work */
> > -		edid = radeon_do_probe_i2c_edid(&rinfo->i2c[conn-1]);
> > +		edid = radeon_do_probe_i2c_edid(chan);
> >  
> > -		OUTREG(reg, INREG(reg) | 
> > -				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
> > -		(void)INREG(reg);
> > +		radeon_gpio_setsda(chan, 0);
> > +		radeon_gpio_setscl(chan, 0);
> >  		wait_ms(15);
> > -		
> > -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
> > -		(void)INREG(reg);
> > +	
> > +		radeon_gpio_setscl(chan, 1);
> >  		for (j = 0; j < 10; j++) {
> > +			/* Wait for ack */
> >  			wait_ms(10);
> > -			if (INREG(reg) & VGA_DDC_CLK_INPUT)
> > +			if (radeon_gpio_getscl(chan))
> >  				break;
> >  		}
> >  
> > -		OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
> > -		(void)INREG(reg);
> > +		radeon_gpio_setsda(chan, 1);
> >  		wait_ms(15);
> > -		OUTREG(reg, INREG(reg) |
> > -				(VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
> > -		(void)INREG(reg);
> > +
> > +		radeon_gpio_setsda(chan, 0);
> > +		radeon_gpio_setscl(chan, 0);
> >  		if (edid)
> >  			break;
> >  	}
> > 
> > In this way it clearer what's going on.
> > 
> > Luca
> > -- 
> > Home: http://kronoz.cjb.net
> > "Sei l'unica donna della mia vita".
> > (Adamo)
> > 
> > 
> > -------------------------------------------------------
> > This SF.Net email is sponsored by: IBM Linux Tutorials
> > Free Linux tutorial presented by Daniel Robbins, President and CEO of
> > GenToo technologies. Learn everything from fundamentals to system
> > administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
> > _______________________________________________
> > Linux-fbdev-devel mailing list
> > Linux-fbdev-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
> 
> 
> =====
> Jon Smirl
> jonsmirl@yahoo.com
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! Search - Find what youre looking for faster
> http://search.yahoo.com
-- 
Benjamin Herrenschmidt <benh@kernel.crashing.org>



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH] Remove voodoo code from i2c
  2004-03-06  3:42       ` Benjamin Herrenschmidt
@ 2004-03-06  4:02         ` Jon Smirl
  0 siblings, 0 replies; 10+ messages in thread
From: Jon Smirl @ 2004-03-06  4:02 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: Kronos, Linux Fbdev development list

--- Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> On Sat, 2004-03-06 at 13:10, Jon Smirl wrote:
> > Can this be written as a generic i2c probe function by calling i2c chanel
> > functions instead of directly calling radeon_gpio_setscl, etc? The i2c
> chanel
> > functions will then in turn call radeon_gpio_setscl, etc.
> 
> Why ? we aren't doing normal i2c big banging here, just hacking
> around.

If I understand correctly, this code is needed to enable DDC on older monitors. 
If this is the case it is a generic problem and it needs to be corrected in all
of the framebuffer drivers. Correcting it in all of the drivers is easier if the
code is written in the generic i2c form.

Also, how do we know this is working? Nobody can come up with one of the
monitors that needs this or even a spec describing it.

The discussion about this got started around a port of 2.4 ddcmon (i2c device
driver like eeprom) to 2.6 and sysfs. The code in the radeon driver is not in
ddcmon and the question is, should it be added? If it should be added it needs
to be converted to the i2c generic form, not the radeon specific one.


=====
Jon Smirl
jonsmirl@yahoo.com

__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you’re looking for faster
http://search.yahoo.com


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH] Remove voodoo code from i2c
  2004-03-06  2:10     ` Jon Smirl
  2004-03-06  3:42       ` Benjamin Herrenschmidt
@ 2004-03-06 15:08       ` Kronos
  1 sibling, 0 replies; 10+ messages in thread
From: Kronos @ 2004-03-06 15:08 UTC (permalink / raw)
  To: Jon Smirl; +Cc: Linux Fbdev development list

Il Fri, Mar 05, 2004 at 06:10:16PM -0800, Jon Smirl ha scritto: 
> Can this be written as a generic i2c probe function by calling i2c chanel
> functions instead of directly calling radeon_gpio_setscl, etc? The i2c chanel
> functions will then in turn call radeon_gpio_setscl, etc.

You can't use the i2c layer because you just send empty start-stop
sequencies on the bus, no real data. You must use bit banging functions:

struct i2c_algo_bit_data *bits = adapter->algo_data;

Then you use ->{s,g}et{scl,sda}. Remeber to pass bits->data to those
functions.

Luca
-- 
Home: http://kronoz.cjb.net
"It is more complicated than you think"
                -- The Eighth Networking Truth from RFC 1925


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH] Remove voodoo code from i2c
  2004-03-05 23:55 ` Benjamin Herrenschmidt
  2004-03-06  0:47   ` Kronos
@ 2004-03-08 22:17   ` Richard Smith
  2004-03-08 22:56     ` Benjamin Herrenschmidt
  1 sibling, 1 reply; 10+ messages in thread
From: Richard Smith @ 2004-03-08 22:17 UTC (permalink / raw)
  To: benh; +Cc: Kronos, Linux Fbdev development list

Benjamin Herrenschmidt wrote:

> 
> BTW... I'm still looking for an EDID spec if that exist ;)
> 

One exists but you have to pay for it.  We have the spec.. What info do 
you need?

-- 
Richard A. Smith
rsmith@bitworks.com




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH] Remove voodoo code from i2c
  2004-03-08 22:17   ` Richard Smith
@ 2004-03-08 22:56     ` Benjamin Herrenschmidt
  0 siblings, 0 replies; 10+ messages in thread
From: Benjamin Herrenschmidt @ 2004-03-08 22:56 UTC (permalink / raw)
  To: rsmith; +Cc: Kronos, Linux Fbdev development list

On Tue, 2004-03-09 at 09:17, Richard Smith wrote:
> Benjamin Herrenschmidt wrote:
> 
> > 
> > BTW... I'm still looking for an EDID spec if that exist ;)
> > 
> 
> One exists but you have to pay for it.  We have the spec.. What info do 
> you need?

Thanks. I'll have those soon I suppose, I think I found out who within
IBM is doing the VESA membership stuff.

Ben.




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2004-03-08 23:16 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-05 21:52 [PATCH] Remove voodoo code from i2c Kronos
2004-03-05 23:55 ` Benjamin Herrenschmidt
2004-03-06  0:47   ` Kronos
2004-03-06  2:10     ` Jon Smirl
2004-03-06  3:42       ` Benjamin Herrenschmidt
2004-03-06  4:02         ` Jon Smirl
2004-03-06 15:08       ` Kronos
2004-03-08 22:17   ` Richard Smith
2004-03-08 22:56     ` Benjamin Herrenschmidt
2004-03-06  0:12 ` Michel Dänzer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).