From 5515a7a88049391b36d2b53a297c89c832bc8f26 Mon Sep 17 00:00:00 2001 From: Bertrik Sikken Date: Sun, 11 Dec 2011 17:38:49 +0000 Subject: [PATCH] RDA5802 tuner: use channel spacing of 100 kHz when possible (instead of always 50 kHz) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31213 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/tuner/rda5802.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/firmware/drivers/tuner/rda5802.c b/firmware/drivers/tuner/rda5802.c index e82b5e3893..c07adc1f07 100644 --- a/firmware/drivers/tuner/rda5802.c +++ b/firmware/drivers/tuner/rda5802.c @@ -208,10 +208,13 @@ static void rda5802_set_frequency(int freq) { int i; uint16_t readchan; + static const int spacings[] = {100000, 200000, 50000, 50000}; + static const int bandstart[] = {87000000, 76000000, 76000000, 65000000}; - /* check BAND and spacings */ - int start = CHANNEL_BANDr(cache[CHANNEL]) & 1 ? 76000000 : 87000000; - int chan = (freq - start) / 50000; + /* calculate channel number */ + int start = bandstart[CHANNEL_BANDr(cache[CHANNEL])]; + int space = spacings[CHANNEL_SPACEr(cache[CHANNEL])]; + int chan = (freq - start) / space; for (i = 0; i < 5; i++) { /* tune and wait a bit */ @@ -247,14 +250,16 @@ static int rda5802_tuned(void) static void rda5802_set_region(int region) { const struct fm_region_data *rd = &fm_region_data[region]; + int band = (rd->freq_min == 76000000) ? CHANNEL_BAND_760_900 : CHANNEL_BAND_870_1080; int deemphasis = (rd->deemphasis == 50) ? SYSCONFIG1_DE : 0; + int space = (rd->freq_step == 50000) ? + CHANNEL_SPACE_50KHZ : CHANNEL_SPACE_100KHZ; - uint16_t bandspacing = CHANNEL_BANDw(band) | - CHANNEL_SPACEw(CHANNEL_SPACE_50KHZ); rda5802_write_masked(SYSCONFIG1, deemphasis, SYSCONFIG1_DE); - rda5802_write_masked(CHANNEL, bandspacing, CHANNEL_BAND | CHANNEL_SPACE); + rda5802_write_masked(CHANNEL, CHANNEL_BANDw(band), CHANNEL_BAND); + rda5802_write_masked(CHANNEL, CHANNEL_SPACEw(space), CHANNEL_SPACE); rda5802_write_cache(); }