diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/tuner/lv24020lp.c | 22 | ||||
-rw-r--r-- | firmware/drivers/tuner/rda5802.c | 22 | ||||
-rw-r--r-- | firmware/drivers/tuner/si4700.c | 18 | ||||
-rw-r--r-- | firmware/drivers/tuner/tea5760uk.c | 17 | ||||
-rw-r--r-- | firmware/drivers/tuner/tea5767.c | 16 | ||||
-rw-r--r-- | firmware/export/lv24020lp.h | 1 | ||||
-rw-r--r-- | firmware/export/rda5802.h | 1 | ||||
-rw-r--r-- | firmware/export/si4700.h | 1 | ||||
-rw-r--r-- | firmware/export/tea5760.h | 1 | ||||
-rw-r--r-- | firmware/export/tea5767.h | 1 | ||||
-rw-r--r-- | firmware/export/tuner.h | 3 |
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 | ||
36 | static struct mutex tuner_mtx; | 36 | static 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) | |||
966 | int lv24020lp_get(int setting) | 970 | int 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 | ||
270 | static 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 */ |
267 | int rda5802_set(int setting, int value) | 277 | int 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 | |||
33 | static bool tuner_present = false; | 37 | static bool tuner_present = false; |
34 | static unsigned char write_bytes[7] = { | 38 | static 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 | |||
37 | static bool tuner_present = true; | 41 | static bool tuner_present = true; |
38 | static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 }; | 42 | static 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 | ||
30 | struct rda5802_dbg_info | 31 | struct 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 | ||
30 | struct si4700_dbg_info | 31 | struct 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 | ||
31 | struct tea5760_dbg_info | 32 | struct 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 | ||
29 | struct tea5767_dbg_info | 30 | struct 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 |