aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/pci/saa7134/saa7134-i2c.c')
-rw-r--r--drivers/media/pci/saa7134/saa7134-i2c.c31
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 */
359static 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
358static int 386static int
359saa7134_i2c_eeprom(struct saa7134_dev *dev, unsigned char *eedata, int len) 387saa7134_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))) {