Re: Re: [PATCH] tdfxfb: move I2C functionality into the tdfxfb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jean Delvare napisał(a):
> Hi Krzysztof,
> 
> On Sat, 21 Mar 2009 20:29:54 +0100, Krzysztof Helt wrote:
> > From: Krzysztof Helt >krzysztof.h1@xxxxx>
> > 
> > The I2C functionality provided by the
> > i2c-voodoo3 driver is moved into the
> > tdfxfb (frame buffer driver for Voodoo3
> > cards). This way there is no conflict
> > between i2c driver and the fb driver.
> > 
> > The tdfxfb does not make use from the
> > DDC functionality yet. It just provides 
> > two I2C buses like the i2c-voodoo3 driver
> > (DDC and I2C).
> 
> This change has my full support. In fact it was on my to-do list for
> this year, so I am very happy to see someone else beat me at it :)
> 
> (BTW: can you please trim lines at ~70 characters rather than 42? Too
> frequent new lines make the text harder to read IMHO.)
> 

I will make lines longer

> > 
> > Signed-off-by: Krzysztof Helt >krzysztof.h1@xxxxx>
> > ---
> > 
> > This open way to remove the i2c-voodoo3 driver.
> > 
> > 
> >  drivers/video/Kconfig  |    9 ++
> >  drivers/video/tdfxfb.c |  191
> +++++++++++++++++++++++++++++++++++++++++++++++-
> >  include/video/tdfx.h   |   24 ++++++
> >  3 files changed, 223 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
> > index 6ff3364..837479b 100644
> > --- a/drivers/video/Kconfig
> > +++ b/drivers/video/Kconfig
> > @@ -1550,6 +1550,7 @@ config FB_3DFX
> >  	select FB_CFB_IMAGEBLIT
> >  	select FB_CFB_FILLRECT
> >  	select FB_CFB_COPYAREA
> > +	select FB_MODE_HELPERS
> >  	help
> >  	  This driver supports graphics boards with the 3Dfx Banshee,
> >  	  Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have
> > @@ -1565,6 +1566,14 @@ config FB_3DFX_ACCEL
> >  	This will compile the 3Dfx Banshee/Voodoo3/VSA-100 frame buffer
> >  	device driver with acceleration functions.
> >  
> > +config FB_3DFX_I2C
> > +	bool "DDC/I2C for 3dfx Voodoo3 support"
> 
> I see that some other drivers have a similarly unfortunate wording, but
> I'd prefer something clearer and less redundant such as "Enable DDC/I2C
> Support" (as the nvidiafb, rivafb and i810fb drivers do.)
> 

Ok. The word "Enable" is a good hint. I'll change this.

> > +	depends on FB_3DFX >> EXPERIMENTAL
> > +	select FB_DDC
> > +	default y
> > +	help
> > +	  Say Y here if you want DDC/I2C support for your 3dfx Voodoo3.
> 
> It might be worth adding a note that the driver itself doesn't yet take
> benefit of the DDC channel.
> 

IHMO, it does not matter. A separate patch which make use of it is already
ready to post. If this patch is accepted, the second one will be posted. It 
is not worth to add a comment then remove it in the next patch.

> > +
> >  config FB_VOODOO1
> >  	tristate "3Dfx Voodoo Graphics (sst1) support"
> >  	depends on FB >> PCI
> > diff --git a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c
> > index 14bd3f3..c4152a5 100644
> > --- a/drivers/video/tdfxfb.c
> > +++ b/drivers/video/tdfxfb.c
> > @@ -1167,6 +1167,190 @@ static struct fb_ops tdfxfb_ops = {
> >  #endif
> >  };
> >  
> > +#ifdef CONFIG_FB_3DFX_I2C
> > +/* The voo GPIO registers don't have individual masks for each bit
> > +   so we always have to read before writing. */
> 
> As far as I can see, some of the code and comments is taken directly
> from the i2c-voodoo3 driver, so it would seem fair to acknowledge the
> work of its author (Philip Edelbrock >phil@xxxxxxxxxxxxx>) in the
> header comment of the file.
> 

Ok

(...)
> > +static int __devinit tdfxfb_setup_ddc_bus(struct tdfxfb_i2c_chan
> *chan,
> > +					  const char *name, struct device *dev)
> > +{
> > +	int rc;
> > +
> > +	strcpy(chan->adapter.name, name);
> 
> Please use strlcpy() instead.
> 
> > +	chan->adapter.owner		= THIS_MODULE;
> > +	chan->adapter.class		= I2C_CLASS_DDC;
> 
> You must include >linux/i2c.h> to use this. I know it is indirectly
> included but relying on indirect includes is a bad practice.
> 

It is included by the tdfx.h which is vital to the tdfxfb.c.

> > +static void __devinit tdfxfb_create_i2c_busses(struct fb_info *info)
> > +{
> > +	struct tdfx_par *par = info->par;
> > +
> > +	tdfx_outl(par, VIDINFORMAT, 0x8160);
> > +	tdfx_outl(par, VIDSERPARPORT, 0xcffc0020);
> > +
> > +	par->chan[0].par = par;
> > +	par->chan[1].par = par;
> > +
> > +	tdfxfb_setup_ddc_bus(>par->chan[0], "VOODOO3-DDC", info->dev);
> > +	tdfxfb_setup_i2c_bus(>par->chan[1], "VOODOO3-I2C", info->dev);
> 
> Why all-caps names? What about "Voodoo3 DDC" and "Voodoo3 I2C" instead?
> 

Just a choice. One other driver does it this way. I'll change to
the proposed names.

> > @@ -1284,7 +1468,9 @@ static int __devinit tdfxfb_probe(struct pci_dev
> *pdev,
> >  	if (hwcursor)
> >  		info->fix.smem_len = (info->fix.smem_len - 1024) >
> >  					(PAGE_MASK >> 1);
> > -
> > +#ifdef CONFIG_FB_3DFX_I2C
> > +	tdfxfb_create_i2c_busses(info);
> > +#endif
> >  	if (!mode_option)
> >  		mode_option = "640x480@60";
> >  
> 
> Later in this function, errors can occur which cause an error path to
> be taken. There you should call tdfxfb_delete_i2c_busses(par) otherwise
> you're leaking resources.
> 

ok.

> > diff --git a/include/video/tdfx.h b/include/video/tdfx.h
> > index 7431d96..bc37022 100644
> > --- a/include/video/tdfx.h
> > +++ b/include/video/tdfx.h
> > @@ -168,12 +183,21 @@ struct banshee_reg {
> >  	unsigned long miscinit0;
> >  };
> >  
> > +struct tdfx_par;
> > +
> > +struct tdfxfb_i2c_chan {
> > +	struct tdfx_par *par;
> > +	struct i2c_adapter adapter;
> > +	struct i2c_algo_bit_data algo;
> > +};
> > +
> >  struct tdfx_par {
> >  	u32 max_pixclock;
> >  	u32 palette[16];
> >  	void __iomem *regbase_virt;
> >  	unsigned long iobase;
> >  	int mtrr_handle;
> > +	struct tdfxfb_i2c_chan chan[2];
> 
> ... and this struct member if CONFIG_FB_3DFX_I2C is defined (same as
> intelfb and radeonfb are doing for example.)
> 

ok.

> 
> Other than these details, it looks OK to me. Please send an updated
> version addressing my comments and I'll be happy to ack it. I've also
> tested the new code on my Voodoo3 and it worked just fine.
> 
> Was your code tested on a Voodoo5? The i2c-voodoo3 driver didn't claim
> to support it, so I wonder if it is compatible DDC/I2C-wise.
> 

It works on Voodoo5 at least.

> Next step is to deprecate i2c-voodoo3. This requires changes to
> drivers/i2c/busses/Kconfig and
> Documentation/feature-removal-schedule.txt. Are you going to do it or
> should I?
> 

I don't care. First, this patch must be accepted. 

Thank you,
Krzysztof

----------------------------------------------------------------------
Szukasz pieniedzy? Wez podwojny limit zadluzenia w koncie direct.
>> http://link.interia.pl/f20a3

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux