Messages in this thread | | | Date | Sun, 24 Jan 2010 18:16:24 +0200 | From | Antti Palosaari <> | Subject | Re: [PATCH 1/4] media: dvb/af9015, implement eeprom hashing |
| |
Hei, Comments below.
On 01/22/2010 05:10 PM, Jiri Slaby wrote: > We read the eeprom anyway for dumping. Switch the dumping to > print_hex_dump_bytes and compute hash above that by > hash = 0; > for (u32 VAL) in (eeprom): > hash *= GOLDEN_RATIO_PRIME_32 > hash += VAL; // while preserving endinaness > > The computation is moved earlier to the flow, namely from > af9015_af9013_frontend_attach to af9015_read_config, so that > we can access the sum in af9015_read_config already. > > Signed-off-by: Jiri Slaby<jslaby@suse.cz> > Cc: Antti Palosaari<crope@iki.fi> > Cc: Mauro Carvalho Chehab<mchehab@redhat.com> > Cc: linux-media@vger.kernel.org > --- > drivers/media/dvb/dvb-usb/af9015.c | 65 +++++++++++++++++++++++------------ > drivers/media/dvb/dvb-usb/af9015.h | 1 + > 2 files changed, 44 insertions(+), 22 deletions(-) > > diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c > index a365c05..616b3ba 100644 > --- a/drivers/media/dvb/dvb-usb/af9015.c > +++ b/drivers/media/dvb/dvb-usb/af9015.c > @@ -21,6 +21,8 @@ > * > */ > > +#include<linux/hash.h> > + > #include "af9015.h" > #include "af9013.h" > #include "mt2060.h" > @@ -553,26 +555,45 @@ exit: > return ret; > } > > -/* dump eeprom */ > -static int af9015_eeprom_dump(struct dvb_usb_device *d) > +/* hash (and dump) eeprom */ > +static int af9015_eeprom_hash(struct usb_device *udev) > { > - u8 reg, val; > + static const unsigned int eeprom_size = 256; > + unsigned int reg; > + int ret; > + u8 val, *eeprom; > + struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1,&val}; > > - for (reg = 0; ; reg++) { > - if (reg % 16 == 0) { > - if (reg) > - deb_info(KERN_CONT "\n"); > - deb_info(KERN_DEBUG "%02x:", reg); > - } > - if (af9015_read_reg_i2c(d, AF9015_I2C_EEPROM, reg,&val) == 0) > - deb_info(KERN_CONT " %02x", val); > - else > - deb_info(KERN_CONT " --"); > - if (reg == 0xff) > - break; > + eeprom = kmalloc(eeprom_size, GFP_KERNEL); > + if (eeprom == NULL) > + return -ENOMEM; > + > + for (reg = 0; reg< eeprom_size; reg++) { > + req.addr = reg; > + ret = af9015_rw_udev(udev,&req); > + if (ret) > + goto free; > + eeprom[reg] = val; > } > - deb_info(KERN_CONT "\n"); > - return 0; > + > + if (dvb_usb_af9015_debug& 0x01) > + print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, eeprom, > + eeprom_size); > + > + BUG_ON(eeprom_size % 4); > + > + af9015_config.eeprom_sum = 0; > + for (reg = 0; reg< eeprom_size / sizeof(u32); reg++) { > + af9015_config.eeprom_sum *= GOLDEN_RATIO_PRIME_32; > + af9015_config.eeprom_sum += le32_to_cpu(((u32 *)eeprom)[reg]); > + } > + > + deb_info("%s: eeprom sum=%.8x\n", __func__, af9015_config.eeprom_sum);
Does this sum contain all 256 bytes from EEPROM? 256/4 is 64.
regards Antti -- http://palosaari.fi/
| |