Am 01.05.2017 um 13:38 schrieb Mauro Carvalho Chehab:
> Right now, all devices use bus 0 for eeprom. However, newer
> versions of Terratec H6 use a different buffer for eeprom.
>
> So, add support to use a different I2C address for eeprom.

Has this been tested ?
Did you read my reply to the previous patch version ?:
See http://www.spinics.net/lists/linux-media/msg114860.html

I doubt it will work. At least not for the device from the thread in the
Kodi-forum.

Regards,
Frank

> Signed-off-by: Mauro Carvalho Chehab <mche...@s-opensource.com>
> ---
>  drivers/media/usb/em28xx/em28xx-cards.c | 1 +
>  drivers/media/usb/em28xx/em28xx-i2c.c   | 5 +----
>  drivers/media/usb/em28xx/em28xx.h       | 4 +++-
>  3 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/media/usb/em28xx/em28xx-cards.c 
> b/drivers/media/usb/em28xx/em28xx-cards.c
> index a12b599a1fa2..c7754303e88e 100644
> --- a/drivers/media/usb/em28xx/em28xx-cards.c
> +++ b/drivers/media/usb/em28xx/em28xx-cards.c
> @@ -2669,6 +2669,7 @@ static inline void em28xx_set_model(struct em28xx *dev)
>  
>       /* Should be initialized early, for I2C to work */
>       dev->def_i2c_bus = dev->board.def_i2c_bus;
> +     dev->eeprom_i2c_bus = dev->board.eeprom_i2c_bus;
>  }
>  
>  /* Wait until AC97_RESET reports the expected value reliably before 
> proceeding.
> diff --git a/drivers/media/usb/em28xx/em28xx-i2c.c 
> b/drivers/media/usb/em28xx/em28xx-i2c.c
> index 8c472d5adb50..df0ab4b6f18f 100644
> --- a/drivers/media/usb/em28xx/em28xx-i2c.c
> +++ b/drivers/media/usb/em28xx/em28xx-i2c.c
> @@ -665,8 +665,6 @@ static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned 
> bus,
>       *eedata = NULL;
>       *eedata_len = 0;
>  
> -     /* EEPROM is always on i2c bus 0 on all known devices. */
> -
>       dev->i2c_client[bus].addr = 0xa0 >> 1;
>  
>       /* Check if board has eeprom */
> @@ -975,8 +973,7 @@ int em28xx_i2c_register(struct em28xx *dev, unsigned bus,
>       dev->i2c_client[bus] = em28xx_client_template;
>       dev->i2c_client[bus].adapter = &dev->i2c_adap[bus];
>  
> -     /* Up to now, all eeproms are at bus 0 */
> -     if (!bus) {
> +     if (bus == dev->eeprom_i2c_bus) {
>               retval = em28xx_i2c_eeprom(dev, bus, &dev->eedata, 
> &dev->eedata_len);
>               if ((retval < 0) && (retval != -ENODEV)) {
>                       dev_err(&dev->intf->dev,
> diff --git a/drivers/media/usb/em28xx/em28xx.h 
> b/drivers/media/usb/em28xx/em28xx.h
> index e8d97d5ec161..8117536343ab 100644
> --- a/drivers/media/usb/em28xx/em28xx.h
> +++ b/drivers/media/usb/em28xx/em28xx.h
> @@ -440,7 +440,8 @@ struct em28xx_board {
>       int vchannels;
>       int tuner_type;
>       int tuner_addr;
> -     unsigned def_i2c_bus;   /* Default I2C bus */
> +     unsigned def_i2c_bus;           /* Default I2C bus */
> +     unsigned eeprom_i2c_bus;        /* EEPROM I2C bus */
>  
>       /* i2c flags */
>       unsigned int tda9887_conf;
> @@ -643,6 +644,7 @@ struct em28xx {
>  
>       unsigned char eeprom_addrwidth_16bit:1;
>       unsigned def_i2c_bus;   /* Default I2C bus */
> +     unsigned eeprom_i2c_bus;/* EEPROM I2C bus */
>       unsigned cur_i2c_bus;   /* Current I2C bus */
>       struct rt_mutex i2c_bus_lock;
>  

Reply via email to