diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-11-12 05:05:10 +0000 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-11-12 05:05:10 +0000 |
commit | 215aa89455a6032cdf605bdd4b5064b8c14b8067 (patch) | |
tree | ed8d440d9afb551eb02c471abf833da48ade5e09 /linux/drivers | |
parent | 94a01f9a0f103d0960f2c005ed6c995982489054 (diff) | |
download | mediapointer-dvb-s2-215aa89455a6032cdf605bdd4b5064b8c14b8067.tar.gz mediapointer-dvb-s2-215aa89455a6032cdf605bdd4b5064b8c14b8067.tar.bz2 |
Skip reading eeprom in newer Empia devices
From: Devin Heitmueller <devin.heitmueller@gmail.com>
Skip reading eeprom in newer Empia devices
Empia switched to a 16-bit addressable eeprom in newer devices. While we
could certainly write a routine to read the eeprom, there is nothing of use
in there that cannot be accessed through registers, and there is the risk that
we could corrupt the eeprom (since a 16-bit read call is interpreted as a
write call by 8-bit eeproms). So just be safe and bail out of the function.
Thanks for Ray Lu from Empia for providing the em2874 datasheet.
Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/video/em28xx/em28xx-i2c.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/linux/drivers/media/video/em28xx/em28xx-i2c.c b/linux/drivers/media/video/em28xx/em28xx-i2c.c index 3bab56b99..51ecdcd34 100644 --- a/linux/drivers/media/video/em28xx/em28xx-i2c.c +++ b/linux/drivers/media/video/em28xx/em28xx-i2c.c @@ -332,6 +332,17 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len) struct em28xx_eeprom *em_eeprom = (void *)eedata; int i, err, size = len, block; + if (dev->chip_id == CHIP_ID_EM2874) { + /* Empia switched to a 16-bit addressable eeprom in newer + devices. While we could certainly write a routine to read + the eeprom, there is nothing of use in there that cannot be + accessed through registers, and there is the risk that we + could corrupt the eeprom (since a 16-bit read call is + interpreted as a write call by 8-bit eeproms). + */ + return 0; + } + dev->i2c_client.addr = 0xa0 >> 1; /* Check if board has eeprom */ |