aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Markgraf <steve@steve-m.de>2012-06-09 00:17:09 +0200
committerSteve Markgraf <steve@steve-m.de>2012-06-09 00:17:09 +0200
commite5afd9894d730dd012ad6b73e6e56cf99e6266a2 (patch)
treeacd787d7898decaaeb7faaf6660e836b87adadf3
parent6aec27c6d0830459e13f8781ad32a9c8345dcd5e (diff)
tuner_fc0012: add manual gain support
Signed-off-by: Steve Markgraf <steve@steve-m.de>
-rw-r--r--src/librtlsdr.c2
-rw-r--r--src/tuner_fc0012.c31
2 files changed, 30 insertions, 3 deletions
diff --git a/src/librtlsdr.c b/src/librtlsdr.c
index 2286c3a..ffb54a6 100644
--- a/src/librtlsdr.c
+++ b/src/librtlsdr.c
@@ -679,7 +679,7 @@ int rtlsdr_get_tuner_gains(rtlsdr_dev_t *dev, int *gains)
{
const int e4k_gains[] = { -10, 15, 40, 65, 90, 115, 140, 165, 190, 215,
240, 290, 340, 420, 430, 450, 470, 490 };
- const int fc0012_gains[] = { 0 /* no gain values */ };
+ const int fc0012_gains[] = { -99, -40, 71, 179, 192 };
const int fc0013_gains[] = { -63, 71, 191, 197 };
const int fc2580_gains[] = { 0 /* no gain values */ };
diff --git a/src/tuner_fc0012.c b/src/tuner_fc0012.c
index c1ad73c..91ac882 100644
--- a/src/tuner_fc0012.c
+++ b/src/tuner_fc0012.c
@@ -307,6 +307,33 @@ exit:
int fc0012_set_gain(void *dev, int gain)
{
- /* TODO add gain regulation */
- return 0;
+ int ret;
+ uint8_t tmp = 0;
+
+ ret = fc0012_readreg(dev, 0x13, &tmp);
+
+ /* mask bits off */
+ tmp &= 0xe0;
+
+ switch (gain) {
+ case -99: /* -9.9 dB */
+ tmp |= 0x02;
+ break;
+ case -40: /* -4 dB */
+ break;
+ case 71:
+ tmp |= 0x08; /* 7.1 dB */
+ break;
+ case 179:
+ tmp |= 0x17; /* 17.9 dB */
+ break;
+ case 192:
+ default:
+ tmp |= 0x10; /* 19.2 dB */
+ break;
+ }
+
+ ret = fc0012_writereg(dev, 0x13, tmp);
+
+ return ret;
}