summaryrefslogtreecommitdiff
path: root/drivers/media/tuners/r820t.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2013-04-11 17:59:12 +0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-04-17 04:33:36 +0400
commit52775fd5b599c79e9a4152f75a6426bf376198dc (patch)
treea168bfa7d06eba19fbc46a19b145a59176fe7c3d /drivers/media/tuners/r820t.c
parent6596e88043e2c55d934f43701c3ca9860f009b06 (diff)
downloadlinux-52775fd5b599c79e9a4152f75a6426bf376198dc.tar.xz
[media] r820t: Allow disabling IMR callibration
The rtl-sdr library disabled IMR callibration. While I'm not sure yet why, it could be a good idea to add a modprobe parameter here, to allow to also disable it. There are two rationale behind it: - It helps to compare USB dumps between rtl-sdr and the Kernel module; - If rtl-sdr disabled it, perhaps there's a good reason (e. g. it might not be actually working, or it might be causing some trouble). For both cases, it seems useful to add a modprobe parameter to allow testing the device with both configurations. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com> Tested-by: Antti Palosaari <crope@iki.fi>
Diffstat (limited to 'drivers/media/tuners/r820t.c')
-rw-r--r--drivers/media/tuners/r820t.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/media/tuners/r820t.c b/drivers/media/tuners/r820t.c
index 0125de897c8d..2e6a690ffb1a 100644
--- a/drivers/media/tuners/r820t.c
+++ b/drivers/media/tuners/r820t.c
@@ -56,6 +56,11 @@ static int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "enable verbose debug messages");
+static int no_imr_cal;
+module_param(no_imr_cal, int, 0444);
+MODULE_PARM_DESC(no_imr_cal, "Disable IMR calibration at module init");
+
+
/*
* enums and structures
*/
@@ -87,7 +92,8 @@ struct r820t_priv {
u32 int_freq;
u8 fil_cal_code;
bool imr_done;
-
+ bool has_lock;
+ bool init_done;
struct r820t_sect_type imr_data[NUM_IMR];
/* Store current mode */
@@ -95,8 +101,6 @@ struct r820t_priv {
enum v4l2_tuner_type type;
v4l2_std_id std;
u32 bw; /* in MHz */
-
- bool has_lock;
};
struct r820t_freq_range {
@@ -1999,7 +2003,7 @@ static int r820t_imr_callibrate(struct r820t_priv *priv)
int rc, i;
int xtal_cap = 0;
- if (priv->imr_done)
+ if (priv->init_done)
return 0;
/* Initialize registers */
@@ -2024,6 +2028,16 @@ static int r820t_imr_callibrate(struct r820t_priv *priv)
priv->xtal_cap_sel = xtal_cap;
}
+ /*
+ * Disables IMR callibration. That emulates the same behaviour
+ * as what is done by rtl-sdr userspace library. Useful for testing
+ */
+ if (no_imr_cal) {
+ priv->init_done = true;
+
+ return 0;
+ }
+
/* Initialize registers */
rc = r820t_write(priv, 0x05,
r820t_init_array, sizeof(r820t_init_array));
@@ -2050,6 +2064,7 @@ static int r820t_imr_callibrate(struct r820t_priv *priv)
if (rc < 0)
return rc;
+ priv->init_done = true;
priv->imr_done = true;
return 0;