diff options
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-i2c.c')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-i2c.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/drivers/media/video/em28xx/em28xx-i2c.c b/drivers/media/video/em28xx/em28xx-i2c.c index 6a78fd294cab..3bab56b997fc 100644 --- a/drivers/media/video/em28xx/em28xx-i2c.c +++ b/drivers/media/video/em28xx/em28xx-i2c.c | |||
@@ -143,10 +143,11 @@ static int em2800_i2c_check_for_device(struct em28xx *dev, unsigned char addr) | |||
143 | } | 143 | } |
144 | for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0; | 144 | for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0; |
145 | write_timeout -= 5) { | 145 | write_timeout -= 5) { |
146 | unsigned msg = dev->em28xx_read_reg(dev, 0x5); | 146 | unsigned reg = dev->em28xx_read_reg(dev, 0x5); |
147 | if (msg == 0x94) | 147 | |
148 | if (reg == 0x94) | ||
148 | return -ENODEV; | 149 | return -ENODEV; |
149 | else if (msg == 0x84) | 150 | else if (reg == 0x84) |
150 | return 0; | 151 | return 0; |
151 | msleep(5); | 152 | msleep(5); |
152 | } | 153 | } |
@@ -335,8 +336,11 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len) | |||
335 | 336 | ||
336 | /* Check if board has eeprom */ | 337 | /* Check if board has eeprom */ |
337 | err = i2c_master_recv(&dev->i2c_client, &buf, 0); | 338 | err = i2c_master_recv(&dev->i2c_client, &buf, 0); |
338 | if (err < 0) | 339 | if (err < 0) { |
339 | return -1; | 340 | em28xx_errdev("%s: i2c_master_recv failed! err [%d]\n", |
341 | __func__, err); | ||
342 | return err; | ||
343 | } | ||
340 | 344 | ||
341 | buf = 0; | 345 | buf = 0; |
342 | 346 | ||
@@ -344,7 +348,7 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len) | |||
344 | if (err != 1) { | 348 | if (err != 1) { |
345 | printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n", | 349 | printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n", |
346 | dev->name, err); | 350 | dev->name, err); |
347 | return -1; | 351 | return err; |
348 | } | 352 | } |
349 | while (size > 0) { | 353 | while (size > 0) { |
350 | if (size > 16) | 354 | if (size > 16) |
@@ -357,7 +361,7 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len) | |||
357 | printk(KERN_WARNING | 361 | printk(KERN_WARNING |
358 | "%s: i2c eeprom read error (err=%d)\n", | 362 | "%s: i2c eeprom read error (err=%d)\n", |
359 | dev->name, err); | 363 | dev->name, err); |
360 | return -1; | 364 | return err; |
361 | } | 365 | } |
362 | size -= block; | 366 | size -= block; |
363 | p += block; | 367 | p += block; |
@@ -432,7 +436,6 @@ static u32 functionality(struct i2c_adapter *adap) | |||
432 | return I2C_FUNC_SMBUS_EMUL; | 436 | return I2C_FUNC_SMBUS_EMUL; |
433 | } | 437 | } |
434 | 438 | ||
435 | |||
436 | /* | 439 | /* |
437 | * attach_inform() | 440 | * attach_inform() |
438 | * gets called when a device attaches to the i2c bus | 441 | * gets called when a device attaches to the i2c bus |
@@ -586,18 +589,31 @@ void em28xx_i2c_call_clients(struct em28xx *dev, unsigned int cmd, void *arg) | |||
586 | */ | 589 | */ |
587 | int em28xx_i2c_register(struct em28xx *dev) | 590 | int em28xx_i2c_register(struct em28xx *dev) |
588 | { | 591 | { |
592 | int retval; | ||
593 | |||
589 | BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg); | 594 | BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg); |
590 | BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req); | 595 | BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req); |
591 | dev->i2c_adap = em28xx_adap_template; | 596 | dev->i2c_adap = em28xx_adap_template; |
592 | dev->i2c_adap.dev.parent = &dev->udev->dev; | 597 | dev->i2c_adap.dev.parent = &dev->udev->dev; |
593 | strcpy(dev->i2c_adap.name, dev->name); | 598 | strcpy(dev->i2c_adap.name, dev->name); |
594 | dev->i2c_adap.algo_data = dev; | 599 | dev->i2c_adap.algo_data = dev; |
595 | i2c_add_adapter(&dev->i2c_adap); | 600 | |
601 | retval = i2c_add_adapter(&dev->i2c_adap); | ||
602 | if (retval < 0) { | ||
603 | em28xx_errdev("%s: i2c_add_adapter failed! retval [%d]\n", | ||
604 | __func__, retval); | ||
605 | return retval; | ||
606 | } | ||
596 | 607 | ||
597 | dev->i2c_client = em28xx_client_template; | 608 | dev->i2c_client = em28xx_client_template; |
598 | dev->i2c_client.adapter = &dev->i2c_adap; | 609 | dev->i2c_client.adapter = &dev->i2c_adap; |
599 | 610 | ||
600 | em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata)); | 611 | retval = em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata)); |
612 | if (retval < 0) { | ||
613 | em28xx_errdev("%s: em28xx_i2_eeprom failed! retval [%d]\n", | ||
614 | __func__, retval); | ||
615 | return retval; | ||
616 | } | ||
601 | 617 | ||
602 | if (i2c_scan) | 618 | if (i2c_scan) |
603 | em28xx_do_i2c_scan(dev); | 619 | em28xx_do_i2c_scan(dev); |