Re: [PATCH 06/21] [staging] tm6000: Increase maximum I2C packet size.

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

 



* Mauro Carvalho Chehab wrote:
> Em 04-08-2011 04:14, Thierry Reding escreveu:
> > The TM6010 supports much larger I2C transfers than currently specified.
> > In fact the Windows driver seems to use 81 bytes per packet by default.
> > This commit improves the speed of firmware loading a bit.
> > ---
> >  drivers/staging/tm6000/tm6000-cards.c |    1 +
> >  drivers/staging/tm6000/tm6000-i2c.c   |    2 +-
> >  2 files changed, 2 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c
> > index c3b84c9..a5d2a71 100644
> > --- a/drivers/staging/tm6000/tm6000-cards.c
> > +++ b/drivers/staging/tm6000/tm6000-cards.c
> > @@ -929,6 +929,7 @@ static void tm6000_config_tuner(struct tm6000_core *dev)
> >  		memset(&ctl, 0, sizeof(ctl));
> >  
> >  		ctl.demod = XC3028_FE_ZARLINK456;
> > +		ctl.max_len = 81;
> >  
> >  		xc2028_cfg.tuner = TUNER_XC2028;
> >  		xc2028_cfg.priv  = &ctl;
> > diff --git a/drivers/staging/tm6000/tm6000-i2c.c b/drivers/staging/tm6000/tm6000-i2c.c
> > index 21cd9f8..2cb7573 100644
> > --- a/drivers/staging/tm6000/tm6000-i2c.c
> > +++ b/drivers/staging/tm6000/tm6000-i2c.c
> > @@ -50,7 +50,7 @@ static int tm6000_i2c_send_regs(struct tm6000_core *dev, unsigned char addr,
> >  	unsigned int i2c_packet_limit = 16;
> >  
> >  	if (dev->dev_type == TM6010)
> > -		i2c_packet_limit = 64;
> > +		i2c_packet_limit = 256;
> 
> This shouldn't work fine. As said at USB 2.0 specification:
> 
> 	An endpoint for control transfers specifies the maximum data payload size that the endpoint can accept from
> 	or transmit to the bus. The allowable maximum control transfer data payload sizes for full-speed devices is
> 	8, 16, 32, or 64 bytes; for high-speed devices, it is 64 bytes and for low-speed devices, it is 8 bytes. This
> 	maximum applies to the data payloads of the Data packets following a Setup; i.e., the size specified is for
> 	the data field of the packet as defined in Chapter 8, not including other information that is required by the
> 	protocol. A Setup packet is always eight bytes. A control pipe (including the Default Control Pipe) always
> 	uses its wMaxPacketSize value for data payloads.
> 	(Item 5.5.3 Control Transfer Packet Size Constraints).
> 
> Using a value higher than 64 may cause troubles with some USB devices
> (hubs, USB adapters, etc).

Okay, fine by me. I was basically just copying what the Windows driver was
doing here, but I've tested with smaller sizes as well and if my memory
serves me well that also worked. As I hinted at in the commit message this
was mostly for performance improvement.

Thierry

Attachment: pgpX67vTyhfSQ.pgp
Description: PGP signature


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux