summaryrefslogtreecommitdiff
path: root/firmware/drivers/tuner/rda5802.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/tuner/rda5802.c')
-rw-r--r--firmware/drivers/tuner/rda5802.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/firmware/drivers/tuner/rda5802.c b/firmware/drivers/tuner/rda5802.c
index a505b6b382..8c78a9f243 100644
--- a/firmware/drivers/tuner/rda5802.c
+++ b/firmware/drivers/tuner/rda5802.c
@@ -59,16 +59,16 @@
59#define CHANNEL_BAND (0x3 << 2) 59#define CHANNEL_BAND (0x3 << 2)
60 #define CHANNEL_BANDw(x) (((x) << 2) & CHANNEL_BAND) 60 #define CHANNEL_BANDw(x) (((x) << 2) & CHANNEL_BAND)
61 #define CHANNEL_BANDr(x) (((x) & CHANNEL_BAND) >> 2) 61 #define CHANNEL_BANDr(x) (((x) & CHANNEL_BAND) >> 2)
62 #define CHANNEL_BAND_875_1080 (0x0 << 2) /* tenth-megahertz */ 62 #define CHANNEL_BAND_870_1080 (0x0) /* tenth-megahertz */
63 #define CHANNEL_BAND_760_1080 (0x1 << 2) 63 #define CHANNEL_BAND_760_1080 (0x1)
64 #define CHANNEL_BAND_760_900 (0x2 << 2) 64 #define CHANNEL_BAND_760_900 (0x2)
65 #define CHANNEL_BAND_650_760 (0x3 << 2) 65 #define CHANNEL_BAND_650_760 (0x3)
66#define CHANNEL_SPACE (0x3 << 0) 66#define CHANNEL_SPACE (0x3 << 0)
67 #define CHANNEL_SPACEw(x) (((x) << 0) & CHANNEL_SPACE) 67 #define CHANNEL_SPACEw(x) (((x) << 0) & CHANNEL_SPACE)
68 #define CHANNEL_SPACEr(x) (((x) & CHANNEL_SPACE) >> 0) 68 #define CHANNEL_SPACEr(x) (((x) & CHANNEL_SPACE) >> 0)
69 #define CHANNEL_SPACE_100KHZ (0x0 << 0) 69 #define CHANNEL_SPACE_100KHZ (0x0)
70 #define CHANNEL_SPACE_200KHZ (0x1 << 0) 70 #define CHANNEL_SPACE_200KHZ (0x1)
71 #define CHANNEL_SPACE_50KHZ (0x2 << 0) 71 #define CHANNEL_SPACE_50KHZ (0x2)
72 72
73/* SYSCONFIG1 (0x4) */ 73/* SYSCONFIG1 (0x4) */
74#define SYSCONFIG1_DE (0x1 << 11) 74#define SYSCONFIG1_DE (0x1 << 11)
@@ -239,13 +239,16 @@ static int rda5802_tuned(void)
239 239
240static void rda5802_set_region(int region) 240static void rda5802_set_region(int region)
241{ 241{
242 const struct rda5802_region_data *rd = &rda5802_region_data[region]; 242 const struct fm_region_data *rd = &fm_region_data[region];
243 uint16_t bandspacing = CHANNEL_BANDw(rd->band) | 243 int band = (rd->freq_min == 76000000) ?
244 CHANNEL_BAND_760_900 : CHANNEL_BAND_870_1080;
245 int deemphasis = (rd->deemphasis == 50) ? SYSCONFIG1_DE : 0;
246
247 uint16_t bandspacing = CHANNEL_BANDw(band) |
244 CHANNEL_SPACEw(CHANNEL_SPACE_50KHZ); 248 CHANNEL_SPACEw(CHANNEL_SPACE_50KHZ);
245 uint16_t oldbs = cache[CHANNEL] & (CHANNEL_BAND | CHANNEL_SPACE); 249 uint16_t oldbs = cache[CHANNEL] & (CHANNEL_BAND | CHANNEL_SPACE);
246 250
247 rda5802_write_masked(SYSCONFIG1, rd->deemphasis ? SYSCONFIG1_DE : 0, 251 rda5802_write_masked(SYSCONFIG1, deemphasis, SYSCONFIG1_DE);
248 SYSCONFIG1_DE);
249 rda5802_write_masked(CHANNEL, bandspacing, CHANNEL_BAND | CHANNEL_SPACE); 252 rda5802_write_masked(CHANNEL, bandspacing, CHANNEL_BAND | CHANNEL_SPACE);
250 rda5802_write_cache(); 253 rda5802_write_cache();
251 254