summaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/em28xx/em28xx-i2c.c
diff options
context:
space:
mode:
authorFrank Schaefer <fschaefer.oss@googlemail.com>2013-03-03 15:37:38 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-04 15:53:54 -0300
commit0c28dcc054ecbcd16e197bd9bf9b394cc1f691c5 (patch)
tree98bd83a09396675cd9d17bb77c59c8eac0e629c5 /drivers/media/usb/em28xx/em28xx-i2c.c
parentf55eacbe744f696fa5ff48fe4fdc0f00edc08619 (diff)
downloadop-kernel-dev-0c28dcc054ecbcd16e197bd9bf9b394cc1f691c5.zip
op-kernel-dev-0c28dcc054ecbcd16e197bd9bf9b394cc1f691c5.tar.gz
[media] em28xx: fix eeprom data endianess
The data is stored as little endian in the eeprom. Hence the correct data types should be used and the data should be converted to the machine endianess before using it. The eeprom id (key) also isn't a 32 bit value but 4 separate bytes instead. [mchehab@redhat.com: Fix CodingStyle] Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/usb/em28xx/em28xx-i2c.c')
-rw-r--r--drivers/media/usb/em28xx/em28xx-i2c.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-i2c.c b/drivers/media/usb/em28xx/em28xx-i2c.c
index b8a9bee..1b90e75 100644
--- a/drivers/media/usb/em28xx/em28xx-i2c.c
+++ b/drivers/media/usb/em28xx/em28xx-i2c.c
@@ -434,19 +434,21 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
printk("\n");
}
- if (em_eeprom->id != 0x9567eb1a) {
+ if (em_eeprom->id[0] != 0x1a || em_eeprom->id[1] != 0xeb ||
+ em_eeprom->id[2] != 0x67 || em_eeprom->id[3] != 0x95) {
em28xx_errdev("Unknown eeprom type or eeprom corrupted !");
return -ENODEV;
}
dev->hash = em28xx_hash_mem(eedata, len, 32);
- em28xx_info("EEPROM ID = 0x%08x, EEPROM hash = 0x%08lx\n",
- em_eeprom->id, dev->hash);
+ em28xx_info("EEPROM ID = %02x %02x %02x %02x, EEPROM hash = 0x%08lx\n",
+ em_eeprom->id[0], em_eeprom->id[1],
+ em_eeprom->id[2], em_eeprom->id[3], dev->hash);
em28xx_info("EEPROM info:\n");
- switch (em_eeprom->chip_conf >> 4 & 0x3) {
+ switch (le16_to_cpu(em_eeprom->chip_conf) >> 4 & 0x3) {
case 0:
em28xx_info("\tNo audio on board.\n");
break;
@@ -461,13 +463,13 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
break;
}
- if (em_eeprom->chip_conf & 1 << 3)
+ if (le16_to_cpu(em_eeprom->chip_conf) & 1 << 3)
em28xx_info("\tUSB Remote wakeup capable\n");
- if (em_eeprom->chip_conf & 1 << 2)
+ if (le16_to_cpu(em_eeprom->chip_conf) & 1 << 2)
em28xx_info("\tUSB Self power capable\n");
- switch (em_eeprom->chip_conf & 0x3) {
+ switch (le16_to_cpu(em_eeprom->chip_conf) & 0x3) {
case 0:
em28xx_info("\t500mA max power\n");
break;
@@ -483,9 +485,9 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
}
em28xx_info("\tTable at offset 0x%02x, strings=0x%04x, 0x%04x, 0x%04x\n",
em_eeprom->string_idx_table,
- em_eeprom->string1,
- em_eeprom->string2,
- em_eeprom->string3);
+ le16_to_cpu(em_eeprom->string1),
+ le16_to_cpu(em_eeprom->string2),
+ le16_to_cpu(em_eeprom->string3));
return 0;
}
OpenPOWER on IntegriCloud