summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/tuner/lv24020lp.c22
-rw-r--r--firmware/drivers/tuner/rda5802.c22
-rw-r--r--firmware/drivers/tuner/si4700.c18
-rw-r--r--firmware/drivers/tuner/tea5760uk.c17
-rw-r--r--firmware/drivers/tuner/tea5767.c16
-rw-r--r--firmware/export/lv24020lp.h1
-rw-r--r--firmware/export/rda5802.h1
-rw-r--r--firmware/export/si4700.h1
-rw-r--r--firmware/export/tea5760.h1
-rw-r--r--firmware/export/tea5767.h1
-rw-r--r--firmware/export/tuner.h3
11 files changed, 102 insertions, 1 deletions
diff --git a/firmware/drivers/tuner/lv24020lp.c b/firmware/drivers/tuner/lv24020lp.c
index 0228888309..590ca9641e 100644
--- a/firmware/drivers/tuner/lv24020lp.c
+++ b/firmware/drivers/tuner/lv24020lp.c
@@ -35,6 +35,10 @@
35 35
36static struct mutex tuner_mtx; 36static struct mutex tuner_mtx;
37 37
38/* define RSSI range */
39#define RSSI_MIN 5
40#define RSSI_MAX 75
41
38/* define to enable tuner logging */ 42/* define to enable tuner logging */
39#undef SANYO_TUNER_LOG_FILE 43#undef SANYO_TUNER_LOG_FILE
40#undef SANYO_TUNER_LOGF 44#undef SANYO_TUNER_LOGF
@@ -966,6 +970,8 @@ int lv24020lp_set(int setting, int value)
966int lv24020lp_get(int setting) 970int lv24020lp_get(int setting)
967{ 971{
968 int val = -1; 972 int val = -1;
973 const unsigned char fst[7] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f};
974 unsigned char fst_ndx, fs;
969 975
970 mutex_lock(&tuner_mtx); 976 mutex_lock(&tuner_mtx);
971 977
@@ -994,6 +1000,22 @@ int lv24020lp_get(int setting)
994 break; 1000 break;
995 } 1001 }
996 1002
1003 case RADIO_RSSI:
1004 fs = RSS_FS(lv24020lp_read(RADIO_STAT));
1005 for(fst_ndx=0; fst_ndx<7; fst_ndx++)
1006 if(fs == fst[fst_ndx])
1007 break;
1008 val = 75 - 10*fst_ndx;
1009 break;
1010
1011 case RADIO_RSSI_MIN:
1012 val = RSSI_MIN;
1013 break;
1014
1015 case RADIO_RSSI_MAX:
1016 val = RSSI_MAX;
1017 break;
1018
997 default: 1019 default:
998 val = lv24020lp_debug_info(setting); 1020 val = lv24020lp_debug_info(setting);
999 } 1021 }
diff --git a/firmware/drivers/tuner/rda5802.c b/firmware/drivers/tuner/rda5802.c
index 43dffe2355..82dc0bbcb9 100644
--- a/firmware/drivers/tuner/rda5802.c
+++ b/firmware/drivers/tuner/rda5802.c
@@ -34,6 +34,10 @@
34 34
35#define I2C_ADR 0x20 35#define I2C_ADR 0x20
36 36
37/* define RSSI range */
38#define RSSI_MIN 0
39#define RSSI_MAX 70
40
37/** Registers and bits **/ 41/** Registers and bits **/
38#define POWERCFG 0x2 42#define POWERCFG 0x2
39#define CHANNEL 0x3 43#define CHANNEL 0x3
@@ -263,6 +267,12 @@ static bool rda5802_st(void)
263 return (rda5802_read_reg(READCHAN) & READCHAN_ST); 267 return (rda5802_read_reg(READCHAN) & READCHAN_ST);
264} 268}
265 269
270static int rda5802_rssi(void)
271{
272 uint16_t status = rda5802_read_reg(STATUSRSSI);
273 return STATUSRSSI_RSSIr(status);
274}
275
266/* tuner abstraction layer: set something to the tuner */ 276/* tuner abstraction layer: set something to the tuner */
267int rda5802_set(int setting, int value) 277int rda5802_set(int setting, int value)
268{ 278{
@@ -323,6 +333,18 @@ int rda5802_get(int setting)
323 case RADIO_STEREO: 333 case RADIO_STEREO:
324 val = rda5802_st(); 334 val = rda5802_st();
325 break; 335 break;
336
337 case RADIO_RSSI:
338 val = rda5802_rssi();
339 break;
340
341 case RADIO_RSSI_MIN:
342 val = RSSI_MIN;
343 break;
344
345 case RADIO_RSSI_MAX:
346 val = RSSI_MAX;
347 break;
326 } 348 }
327 349
328 return val; 350 return val;
diff --git a/firmware/drivers/tuner/si4700.c b/firmware/drivers/tuner/si4700.c
index dfc0e46caf..4747357037 100644
--- a/firmware/drivers/tuner/si4700.c
+++ b/firmware/drivers/tuner/si4700.c
@@ -50,6 +50,10 @@ extern int si4700_st(void);
50 50
51#define I2C_ADR 0x20 51#define I2C_ADR 0x20
52 52
53/* define RSSI range */
54#define RSSI_MIN 0
55#define RSSI_MAX 70
56
53/** Registers and bits - "x" denotes Si4702/03 only (so they say) **/ 57/** Registers and bits - "x" denotes Si4702/03 only (so they say) **/
54#define DEVICEID 0x0 58#define DEVICEID 0x0
55#define CHIPID 0x1 59#define CHIPID 0x1
@@ -197,7 +201,7 @@ extern int si4700_st(void);
197#define STATUSRSSI_BLERA (0x3 << 9) /* x */ 201#define STATUSRSSI_BLERA (0x3 << 9) /* x */
198#define STATUSRSSI_ST (0x1 << 8) 202#define STATUSRSSI_ST (0x1 << 8)
199#define STATUSRSSI_RSSI (0xff << 0) 203#define STATUSRSSI_RSSI (0xff << 0)
200 #define STATUSRSSI_RSSIr(x) ((x) & 0xff) 204#define STATUSRSSI_RSSIr(x) ((x) & 0xff)
201 205
202/* READCHAN (0xB) */ 206/* READCHAN (0xB) */
203#define READCHAN_BLERB (0x3 << 14) /* x */ 207#define READCHAN_BLERB (0x3 << 14) /* x */
@@ -481,6 +485,18 @@ int si4700_get(int setting)
481 case RADIO_STEREO: 485 case RADIO_STEREO:
482 val = si4700_st(); 486 val = si4700_st();
483 break; 487 break;
488
489 case RADIO_RSSI:
490 val = STATUSRSSI_RSSIr(si4700_read_reg(STATUSRSSI));
491 break;
492
493 case RADIO_RSSI_MIN:
494 val = RSSI_MIN;
495 break;
496
497 case RADIO_RSSI_MAX:
498 val = RSSI_MAX;
499 break;
484 } 500 }
485 501
486 return val; 502 return val;
diff --git a/firmware/drivers/tuner/tea5760uk.c b/firmware/drivers/tuner/tea5760uk.c
index 20234e28ed..c1dff598b3 100644
--- a/firmware/drivers/tuner/tea5760uk.c
+++ b/firmware/drivers/tuner/tea5760uk.c
@@ -30,6 +30,10 @@
30 30
31#define I2C_ADR 0x22 31#define I2C_ADR 0x22
32 32
33/* define RSSI range */
34#define RSSI_MIN 4
35#define RSSI_MAX 46
36
33static bool tuner_present = false; 37static bool tuner_present = false;
34static unsigned char write_bytes[7] = { 38static unsigned char write_bytes[7] = {
35 0x00, /* INTREG LSB */ 39 0x00, /* INTREG LSB */
@@ -138,6 +142,19 @@ int tea5760_get(int setting)
138 case RADIO_STEREO: 142 case RADIO_STEREO:
139 val = read_bytes[9] >> 2; 143 val = read_bytes[9] >> 2;
140 break; 144 break;
145
146 case RADIO_RSSI:
147 val = (read_bytes[9] >> 4) & 0x0F;
148 val = 4 + (28 * val + 5) / 10;
149 break;
150
151 case RADIO_RSSI_MIN:
152 val = RSSI_MIN;
153 break;
154
155 case RADIO_RSSI_MAX:
156 val = RSSI_MAX;
157 break;
141 } 158 }
142 159
143 return val; 160 return val;
diff --git a/firmware/drivers/tuner/tea5767.c b/firmware/drivers/tuner/tea5767.c
index 67aa808f23..3f3af68602 100644
--- a/firmware/drivers/tuner/tea5767.c
+++ b/firmware/drivers/tuner/tea5767.c
@@ -34,6 +34,10 @@
34#define I2C_ADR 0xC0 34#define I2C_ADR 0xC0
35#endif 35#endif
36 36
37/* define RSSI range */
38#define RSSI_MIN 10
39#define RSSI_MAX 55
40
37static bool tuner_present = true; 41static bool tuner_present = true;
38static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 }; 42static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 };
39 43
@@ -132,6 +136,18 @@ int tea5767_get(int setting)
132 case RADIO_STEREO: 136 case RADIO_STEREO:
133 val = read_bytes[2] >> 7; 137 val = read_bytes[2] >> 7;
134 break; 138 break;
139
140 case RADIO_RSSI:
141 val = 10 + 3*(read_bytes[3] >> 4);
142 break;
143
144 case RADIO_RSSI_MIN:
145 val = RSSI_MIN;
146 break;
147
148 case RADIO_RSSI_MAX:
149 val = RSSI_MAX;
150 break;
135 } 151 }
136 152
137 return val; 153 return val;
diff --git a/firmware/export/lv24020lp.h b/firmware/export/lv24020lp.h
index 753949f361..f2e123b094 100644
--- a/firmware/export/lv24020lp.h
+++ b/firmware/export/lv24020lp.h
@@ -25,6 +25,7 @@
25 25
26/* Define additional tuner messages here */ 26/* Define additional tuner messages here */
27#define HAVE_RADIO_REGION 27#define HAVE_RADIO_REGION
28#define HAVE_RADIO_RSSI
28 29
29#define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0) 30#define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0)
30#define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1) 31#define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1)
diff --git a/firmware/export/rda5802.h b/firmware/export/rda5802.h
index 87707966fd..0dae3ab5d2 100644
--- a/firmware/export/rda5802.h
+++ b/firmware/export/rda5802.h
@@ -26,6 +26,7 @@
26#define _RDA5802_H_ 26#define _RDA5802_H_
27 27
28#define HAVE_RADIO_REGION 28#define HAVE_RADIO_REGION
29#define HAVE_RADIO_RSSI
29 30
30struct rda5802_dbg_info 31struct rda5802_dbg_info
31{ 32{
diff --git a/firmware/export/si4700.h b/firmware/export/si4700.h
index c4aff6ff30..debc176ec5 100644
--- a/firmware/export/si4700.h
+++ b/firmware/export/si4700.h
@@ -26,6 +26,7 @@
26#define _SI4700_H_ 26#define _SI4700_H_
27 27
28#define HAVE_RADIO_REGION 28#define HAVE_RADIO_REGION
29#define HAVE_RADIO_RSSI
29 30
30struct si4700_dbg_info 31struct si4700_dbg_info
31{ 32{
diff --git a/firmware/export/tea5760.h b/firmware/export/tea5760.h
index ea857dec3e..a5af67aac1 100644
--- a/firmware/export/tea5760.h
+++ b/firmware/export/tea5760.h
@@ -27,6 +27,7 @@
27#include "tuner.h" 27#include "tuner.h"
28 28
29#define HAVE_RADIO_REGION 29#define HAVE_RADIO_REGION
30#define HAVE_RADIO_RSSI
30 31
31struct tea5760_dbg_info 32struct tea5760_dbg_info
32{ 33{
diff --git a/firmware/export/tea5767.h b/firmware/export/tea5767.h
index 64dd266311..6def18576f 100644
--- a/firmware/export/tea5767.h
+++ b/firmware/export/tea5767.h
@@ -25,6 +25,7 @@
25 25
26#define HAVE_RADIO_REGION 26#define HAVE_RADIO_REGION
27#define HAVE_RADIO_MUTE_TIMEOUT 27#define HAVE_RADIO_MUTE_TIMEOUT
28#define HAVE_RADIO_RSSI
28 29
29struct tea5767_dbg_info 30struct tea5767_dbg_info
30{ 31{
diff --git a/firmware/export/tuner.h b/firmware/export/tuner.h
index 9263c08d90..c8bea86112 100644
--- a/firmware/export/tuner.h
+++ b/firmware/export/tuner.h
@@ -46,6 +46,9 @@ enum
46 RADIO_STEREO, 46 RADIO_STEREO,
47 /* RADIO_EVENT is an event that requests a screen update */ 47 /* RADIO_EVENT is an event that requests a screen update */
48 RADIO_EVENT, 48 RADIO_EVENT,
49 RADIO_RSSI,
50 RADIO_RSSI_MIN,
51 RADIO_RSSI_MAX,
49 52
50 /* Put new general-purpose readback values above this line */ 53 /* Put new general-purpose readback values above this line */
51 __RADIO_GET_STANDARD_LAST 54 __RADIO_GET_STANDARD_LAST