Messages in this thread | | | Date | Wed, 27 Oct 2010 15:11:16 -0200 | From | Mauro Carvalho Chehab <> | Subject | Re: DVB: af9015 defunct [was: mmotm 2010-10-20-15-01 uploaded] |
| |
Em 27-10-2010 14:41, Antti Palosaari escreveu: > On 10/27/2010 07:12 PM, Mauro Carvalho Chehab wrote: >> int tda18271_write_regs(struct dvb_frontend *fe, int idx, int len) >> { >> ... >> switch (priv->small_i2c) { >> case TDA18271_03_BYTE_CHUNK_INIT: >> max = 3; >> break; >> case TDA18271_08_BYTE_CHUNK_INIT: >> max = 8; >> break; >> case TDA18271_16_BYTE_CHUNK_INIT: >> max = 16; >> break; >> case TDA18271_39_BYTE_CHUNK_INIT: >> default: >> max = 39; >> } >> >> >> with small_i2c = 1, the driver will not restrict the maximum length size. >> >> It's weird that the patch didn't fix it. Are you sure that reverting this >> patch is enough to make the driver work? >> >> Please test this one. >> >> It will properly log the size of the message the driver tried to use, and will >> reduce the max number of bytes per I2C transfer to 8. > > All in all, this small_i2c was added (Michael Krufky and I) when this tuner was taken in use with af9015 and it was 16 bytes initially. I think those other chunks are added later.
Yeah, another change added a max restriction of 8.
> AF9015 I2C adapter can write 21 bytes at once. > Correct solution is to add option which splits writes as wanted (like option .i2c_wr_max) to the TDA18271. I have no HW to test.
Changing to 21 won't change anything in practice, as it will still use 3 URB's for transferring data. Only at setup, it needs to write values on more than 16 registers.
The current way that .small_i2c is defined is like that: it specifies the maximum amount of data that can be transferred.
I won't object to change it from an enum into an integer, although I would do it only if we need to touch on that code for another reason.
Cheers, Mauro
| |