aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/em28xx/em28xx-i2c.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-i2c.c')
-rw-r--r--drivers/media/video/em28xx/em28xx-i2c.c36
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 */
587int em28xx_i2c_register(struct em28xx *dev) 590int 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);