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<jsl...@suse.cz>
Cc: Antti Palosaari<cr...@iki.fi>
Cc: Mauro Carvalho Chehab<mche...@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/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to