aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/tuners/xc5000.c
diff options
context:
space:
mode:
authorRichard Vollkommer <linux@hauppauge.com>2014-10-25 17:17:22 -0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-11-03 12:24:52 -0200
commit52e269b133d167a345758cb9d76d6348b3c66ebb (patch)
tree50ee3d4511d5f873e0b7653d3f447c0ad6cd8f05 /drivers/media/tuners/xc5000.c
parent[media] lirc_igorplugusb: remove (diff)
downloadlinux-dev-52e269b133d167a345758cb9d76d6348b3c66ebb.tar.xz
linux-dev-52e269b133d167a345758cb9d76d6348b3c66ebb.zip
[media] xc5000: add IF output level control
Adds control of the IF output level to the xc5000 tuner configuration structure. Increases the IF level to the demodulator to fix failure to lock and picture breakup issues (with the au8522 demodulator, in the case of the Hauppauge HVR950Q). This patch works with all XC5000 firmware versions. Signed-off-by: Richard Vollkommer <linux@hauppauge.com> Signed-off-by: Michael Ira Krufky <mkrufky@linuxtv.org> Reviewed-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/tuners/xc5000.c')
-rw-r--r--drivers/media/tuners/xc5000.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/media/tuners/xc5000.c b/drivers/media/tuners/xc5000.c
index 803a0e63d47e..705c258d1101 100644
--- a/drivers/media/tuners/xc5000.c
+++ b/drivers/media/tuners/xc5000.c
@@ -62,6 +62,7 @@ struct xc5000_priv {
unsigned int mode;
u8 rf_mode;
u8 radio_input;
+ u16 output_amp;
int chip_id;
u16 pll_register_no;
@@ -744,7 +745,9 @@ static int xc5000_tune_digital(struct dvb_frontend *fe)
return -EIO;
}
- xc_write_reg(priv, XREG_OUTPUT_AMP, 0x8a);
+ dprintk(1, "%s() setting OUTPUT_AMP to 0x%x\n",
+ __func__, priv->output_amp);
+ xc_write_reg(priv, XREG_OUTPUT_AMP, priv->output_amp);
xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);
@@ -1358,6 +1361,9 @@ static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
if (p->radio_input)
priv->radio_input = p->radio_input;
+ if (p->output_amp)
+ priv->output_amp = p->output_amp;
+
return 0;
}
@@ -1438,6 +1444,12 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
it can be overridden if this is a hybrid driver */
priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
+ /* don't override output_amp if it's already been set
+ unless explicitly specified */
+ if ((priv->output_amp == 0) || (cfg->output_amp))
+ /* use default output_amp value if none specified */
+ priv->output_amp = (cfg->output_amp) ? cfg->output_amp : 0x8a;
+
/* Check if firmware has been loaded. It is possible that another
instance of the driver has loaded the firmware.
*/