aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorOlivier DANET <odanet at caramail.com>2008-01-25 04:50:07 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-01-25 16:05:19 -0500
commitc52344fdc49665a4eeef24236750b49637d6982f (patch)
tree7ec5e25eae6e8ad2329cdcd2560104e4c3414d4c /drivers/media
parenta162abb06bda3f38750a208e85e27f419798aa79 (diff)
V4L/DVB (7072): sets the MT2060 IF1 frequency according to EEPROM
Here is a patch for Hauppage Nova-T-Stick and Nova-T-500 users. It sets the MT2060 IF1 frequency according to the calibration values stored in the EEPROM. It is supposed to enhance the signal quality, but, hey, there is no guarantee. Feedbacks would be much appreciated, to know whether it deserves being applied. Signed-off-by: Olivier DANET <odanet at caramail.com> Signed-off-by: Patrick Boettcher <pb@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media')
-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 */