Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 331069
b: refs/heads/master
c: 2e35c66
h: refs/heads/master
i:
  331067: 47778d3
v: v3
  • Loading branch information
Antti Palosaari authored and Mauro Carvalho Chehab committed Sep 23, 2012
1 parent 0a27692 commit efe63cd
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f224749b68034619ff722576f46e4a4932d69d27
refs/heads/master: 2e35c66f138c6a4f50da863a82983a541f1c2a24
49 changes: 20 additions & 29 deletions trunk/drivers/media/usb/dvb-usb-v2/af9015.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,43 +398,34 @@ static int af9015_download_firmware(struct dvb_usb_device *d,
static int af9015_eeprom_hash(struct dvb_usb_device *d)
{
struct af9015_state *state = d_to_priv(d);
int ret;
static const unsigned int eeprom_size = 256;
unsigned int reg;
u8 val, *eeprom;
struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};

eeprom = kmalloc(eeprom_size, GFP_KERNEL);
if (eeprom == NULL)
return -ENOMEM;

for (reg = 0; reg < eeprom_size; reg++) {
req.addr = reg;
int ret, i;
static const unsigned int AF9015_EEPROM_SIZE = 256;
u8 buf[AF9015_EEPROM_SIZE];
struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, NULL};

/* read eeprom */
for (i = 0; i < AF9015_EEPROM_SIZE; i++) {
req.addr = i;
req.data = &buf[i];
ret = af9015_ctrl_msg(d, &req);
if (ret)
goto free;

eeprom[reg] = val;
if (ret < 0)
goto err;
}

for (reg = 0; reg < eeprom_size; reg += 16)
dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 16,
eeprom + reg);

BUG_ON(eeprom_size % 4);

state->eeprom_sum = 0;
for (reg = 0; reg < eeprom_size / sizeof(u32); reg++) {
/* calculate checksum */
for (i = 0; i < AF9015_EEPROM_SIZE / sizeof(u32); i++) {
state->eeprom_sum *= GOLDEN_RATIO_PRIME_32;
state->eeprom_sum += le32_to_cpu(((u32 *)eeprom)[reg]);
state->eeprom_sum += le32_to_cpu(((u32 *)buf)[i]);
}

for (i = 0; i < AF9015_EEPROM_SIZE; i += 16)
dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 16, buf + i);

dev_dbg(&d->udev->dev, "%s: eeprom sum=%.8x\n",
__func__, state->eeprom_sum);

ret = 0;
free:
kfree(eeprom);
return 0;
err:
dev_err(&d->udev->dev, "%s: eeprom failed=%d\n", KBUILD_MODNAME, ret);
return ret;
}

Expand Down

0 comments on commit efe63cd

Please sign in to comment.