diff options
Diffstat (limited to 'drivers/media/pci/saa7134/saa7134-i2c.c')
-rw-r--r-- | drivers/media/pci/saa7134/saa7134-i2c.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/media/pci/saa7134/saa7134-i2c.c b/drivers/media/pci/saa7134/saa7134-i2c.c index 8ef6399d794f..bc957528f69f 100644 --- a/drivers/media/pci/saa7134/saa7134-i2c.c +++ b/drivers/media/pci/saa7134/saa7134-i2c.c | |||
@@ -355,12 +355,43 @@ static struct i2c_client saa7134_client_template = { | |||
355 | 355 | ||
356 | /* ----------------------------------------------------------- */ | 356 | /* ----------------------------------------------------------- */ |
357 | 357 | ||
358 | /* On Medion 7134 reading EEPROM needs DVB-T demod i2c gate open */ | ||
359 | static void saa7134_i2c_eeprom_md7134_gate(struct saa7134_dev *dev) | ||
360 | { | ||
361 | u8 subaddr = 0x7, dmdregval; | ||
362 | u8 data[2]; | ||
363 | int ret; | ||
364 | struct i2c_msg i2cgatemsg_r[] = { {.addr = 0x08, .flags = 0, | ||
365 | .buf = &subaddr, .len = 1}, | ||
366 | {.addr = 0x08, | ||
367 | .flags = I2C_M_RD, | ||
368 | .buf = &dmdregval, .len = 1} | ||
369 | }; | ||
370 | struct i2c_msg i2cgatemsg_w[] = { {.addr = 0x08, .flags = 0, | ||
371 | .buf = data, .len = 2} }; | ||
372 | |||
373 | ret = i2c_transfer(&dev->i2c_adap, i2cgatemsg_r, 2); | ||
374 | if ((ret == 2) && (dmdregval & 0x2)) { | ||
375 | pr_debug("%s: DVB-T demod i2c gate was left closed\n", | ||
376 | dev->name); | ||
377 | |||
378 | data[0] = subaddr; | ||
379 | data[1] = (dmdregval & ~0x2); | ||
380 | if (i2c_transfer(&dev->i2c_adap, i2cgatemsg_w, 1) != 1) | ||
381 | pr_err("%s: EEPROM i2c gate open failure\n", | ||
382 | dev->name); | ||
383 | } | ||
384 | } | ||
385 | |||
358 | static int | 386 | static int |
359 | saa7134_i2c_eeprom(struct saa7134_dev *dev, unsigned char *eedata, int len) | 387 | saa7134_i2c_eeprom(struct saa7134_dev *dev, unsigned char *eedata, int len) |
360 | { | 388 | { |
361 | unsigned char buf; | 389 | unsigned char buf; |
362 | int i,err; | 390 | int i,err; |
363 | 391 | ||
392 | if (dev->board == SAA7134_BOARD_MD7134) | ||
393 | saa7134_i2c_eeprom_md7134_gate(dev); | ||
394 | |||
364 | dev->i2c_client.addr = 0xa0 >> 1; | 395 | dev->i2c_client.addr = 0xa0 >> 1; |
365 | buf = 0; | 396 | buf = 0; |
366 | if (1 != (err = i2c_master_send(&dev->i2c_client,&buf,1))) { | 397 | if (1 != (err = i2c_master_send(&dev->i2c_client,&buf,1))) { |