diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-04-11 10:59:12 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-04-16 21:33:36 -0300 |
commit | 52775fd5b599c79e9a4152f75a6426bf376198dc (patch) | |
tree | a168bfa7d06eba19fbc46a19b145a59176fe7c3d /drivers/media/tuners | |
parent | 6596e88043e2c55d934f43701c3ca9860f009b06 (diff) |
[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')
-rw-r--r-- | drivers/media/tuners/r820t.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/media/tuners/r820t.c b/drivers/media/tuners/r820t.c index 0125de897c8..2e6a690ffb1 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; |