aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/dvb/dvb-usb/dib0700_devices.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c
index 36d29f9d2f68..ffecb6ed8190 100644
--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
+++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
@@ -94,12 +94,28 @@ static int bristol_frontend_attach(struct dvb_usb_adapter *adap)
94 (10 + adap->id) << 1, &bristol_dib3000mc_config[adap->id])) == NULL ? -ENODEV : 0; 94 (10 + adap->id) << 1, &bristol_dib3000mc_config[adap->id])) == NULL ? -ENODEV : 0;
95} 95}
96 96
97int eeprom_read(struct i2c_adapter *adap,u8 adrs,u8 *pval)
98{
99 struct i2c_msg msg[2] = {
100 { .addr = 0x50, .flags = 0, .buf = &adrs, .len = 1 },
101 { .addr = 0x50, .flags = I2C_M_RD, .buf = pval, .len = 1 },
102 };
103 if (i2c_transfer(adap, msg, 2) != 2) return -EREMOTEIO;
104 return 0;
105}
106
97static int bristol_tuner_attach(struct dvb_usb_adapter *adap) 107static int bristol_tuner_attach(struct dvb_usb_adapter *adap)
98{ 108{
99 struct dib0700_state *st = adap->dev->priv; 109 struct i2c_adapter *prim_i2c = &adap->dev->i2c_adap;
100 struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1); 110 struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1);
101 return dvb_attach(mt2060_attach,adap->fe, tun_i2c, &bristol_mt2060_config[adap->id], 111 s8 a;
102 st->mt2060_if1[adap->id]) == NULL ? -ENODEV : 0; 112 int if1=1220;
113 if (adap->dev->udev->descriptor.idVendor == USB_VID_HAUPPAUGE &&
114 adap->dev->udev->descriptor.idProduct == USB_PID_HAUPPAUGE_NOVA_T_500_2) {
115 if (!eeprom_read(prim_i2c,0x59 + adap->id,&a)) if1=1220+a;
116 }
117 return dvb_attach(mt2060_attach,adap->fe, tun_i2c,&bristol_mt2060_config[adap->id],
118 if1) == NULL ? -ENODEV : 0;
103} 119}
104 120
105/* STK7700D: Pinnacle/Terratec/Hauppauge Dual DVB-T Diversity */ 121/* STK7700D: Pinnacle/Terratec/Hauppauge Dual DVB-T Diversity */
@@ -628,16 +644,22 @@ static struct mt2060_config stk7700p_mt2060_config = {
628 644
629static int stk7700p_tuner_attach(struct dvb_usb_adapter *adap) 645static int stk7700p_tuner_attach(struct dvb_usb_adapter *adap)
630{ 646{
647 struct i2c_adapter *prim_i2c = &adap->dev->i2c_adap;
631 struct dib0700_state *st = adap->dev->priv; 648 struct dib0700_state *st = adap->dev->priv;
632 struct i2c_adapter *tun_i2c; 649 struct i2c_adapter *tun_i2c;
633 650 s8 a;
651 int if1=1220;
652 if (adap->dev->udev->descriptor.idVendor == USB_VID_HAUPPAUGE &&
653 adap->dev->udev->descriptor.idProduct == USB_PID_HAUPPAUGE_NOVA_T_STICK) {
654 if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+a;
655 }
634 if (st->is_dib7000pc) 656 if (st->is_dib7000pc)
635 tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 657 tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
636 else 658 else
637 tun_i2c = dib7000m_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 659 tun_i2c = dib7000m_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
638 660
639 return dvb_attach(mt2060_attach, adap->fe, tun_i2c, &stk7700p_mt2060_config, 661 return dvb_attach(mt2060_attach, adap->fe, tun_i2c, &stk7700p_mt2060_config,
640 st->mt2060_if1[0]) == NULL ? -ENODEV : 0; 662 if1) == NULL ? -ENODEV : 0;
641} 663}
642 664
643/* DIB7070 generic */ 665/* DIB7070 generic */