[2/2] mn88472: fix firmware loading

Message ID 5485F3D3.50403@southpole.se (mailing list archive)
State Superseded, archived
Headers

Commit Message

Benjamin Larsson Dec. 8, 2014, 6:54 p.m. UTC
  On 12/08/2014 06:46 PM, Antti Palosaari wrote:
> Hello!
> [...]
>> regmap_bulk_write(): Write multiple registers to the device
>>
>> In this case we want to write multiple bytes to the same register. So I
>> think that my patch is correct in principle.
>
> You haven't make any test whether it is possible to write that 
> firmware in a large chunks *or* writing one byte (smallest possible 
> ~chuck) at the time? I think it does not matter. I suspect you could 
> even download whole firmware as one go - but rtl2832p I2C adapter does 
> support only 22 bytes on one xfer.
>
> Even those are written to one register, chip knows how many bytes one 
> message has and could increase its internal address counter. That is 
> usually called register address auto-increment.
>
> A) writing:
> f6 00
> f6 01
> f6 02
> f6 03
> f6 04
> f6 05
> f6 06
> f6 07
> f6 08
> f6 09
>
> B) writing:
> f6 00 01 02 03 04
> f6 05 06 07 08 09
>
> will likely end up same. B is better as only 2 xfers are done - much 
> less IO.
>
> regards
> Antti
>
Hello Antti.

I have now tried the following patch on top of my load defaults patch.

index a7d35bb..fd9796d

With this patch I get data, without it I don't. Based on that info I 
started testing different i2c wr max values.

When I got to 18 it stopped working. So it seams like both you and me 
where right. We can write several
values at once but only a maximum of 16.

I have a patch that adds parity check of the firmware and all the times 
the check succeeded but the demodulator
didn't deliver data. So I guess that the parity checker is before the 16 
byte buffer and if you write more the data is
just ignored.

I will send an updated patch based on this.

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

Patch

--- a/drivers/staging/media/mn88472/mn88472.c
+++ b/drivers/staging/media/mn88472/mn88472.c
@@ -467,7 +467,7 @@  static int mn88472_probe(struct i2c_client *client,
                 goto err;
         }

-       dev->i2c_wr_max = config->i2c_wr_max;
+       dev->i2c_wr_max = 2;
         dev->xtal = config->xtal;
         dev->ts_mode = config->ts_mode;
         dev->ts_clock = config->ts_clock;