diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2010-11-14 15:58:53 +0000 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2010-11-14 15:58:53 +0000 |
commit | 9772ea2b853fe8e141b7a53109c3fcc6e66a845e (patch) | |
tree | 431632ff0734ff0f051df06b759c4fda2633e199 | |
parent | 6c0746fc886e016db386cc09d7b18fba3dc72596 (diff) | |
download | rockbox-9772ea2b853fe8e141b7a53109c3fcc6e66a845e.tar.gz rockbox-9772ea2b853fe8e141b7a53109c3fcc6e66a845e.zip |
Back-port r28582 (prevent hang when changing radio region on si4700/rda5802), see also FS#11754
git-svn-id: svn://svn.rockbox.org/rockbox/branches/v3_7@28594 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/drivers/tuner/rda5802.c | 10 | ||||
-rw-r--r-- | firmware/drivers/tuner/si4700.c | 9 |
2 files changed, 0 insertions, 19 deletions
diff --git a/firmware/drivers/tuner/rda5802.c b/firmware/drivers/tuner/rda5802.c index 43dffe2355..ee2fd08579 100644 --- a/firmware/drivers/tuner/rda5802.c +++ b/firmware/drivers/tuner/rda5802.c @@ -96,7 +96,6 @@ static const uint16_t initvals[16] = { }; static bool tuner_present = false; -static int curr_frequency = 87500000; /* Current station frequency (HZ) */ static uint16_t cache[16]; /* reads <len> registers from radio at offset 0x0A into cache */ @@ -204,8 +203,6 @@ static void rda5802_set_frequency(int freq) int start = CHANNEL_BANDr(cache[CHANNEL]) & 1 ? 76000000 : 87000000; int chan = (freq - start) / 50000; - curr_frequency = freq; - for (i = 0; i < 5; i++) { /* tune and wait a bit */ rda5802_write_masked(CHANNEL, CHANNEL_CHANw(chan) | CHANNEL_TUNE, @@ -246,16 +243,9 @@ static void rda5802_set_region(int region) uint16_t bandspacing = CHANNEL_BANDw(band) | CHANNEL_SPACEw(CHANNEL_SPACE_50KHZ); - uint16_t oldbs = cache[CHANNEL] & (CHANNEL_BAND | CHANNEL_SPACE); - rda5802_write_masked(SYSCONFIG1, deemphasis, SYSCONFIG1_DE); rda5802_write_masked(CHANNEL, bandspacing, CHANNEL_BAND | CHANNEL_SPACE); rda5802_write_cache(); - - /* Retune if this region change would change the channel number. */ - if (oldbs != bandspacing) { - rda5802_set_frequency(curr_frequency); - } } static bool rda5802_st(void) diff --git a/firmware/drivers/tuner/si4700.c b/firmware/drivers/tuner/si4700.c index dfc0e46caf..0544fe1ea3 100644 --- a/firmware/drivers/tuner/si4700.c +++ b/firmware/drivers/tuner/si4700.c @@ -209,7 +209,6 @@ extern int si4700_st(void); /* 4702/03: RDS Block A-D data */ static bool tuner_present = false; -static int curr_frequency = 87500000; /* Current station frequency (HZ) */ static uint16_t cache[16]; /* reads <len> registers from radio at offset 0x0A into cache */ @@ -376,8 +375,6 @@ static void si4700_set_frequency(int freq) int chan = (freq - bands[band]) / spacings[space]; int readchan; - curr_frequency = freq; - do { /* tuning should be done within 60 ms according to the datasheet */ @@ -412,15 +409,9 @@ static void si4700_set_region(int region) uint16_t bandspacing = SYSCONFIG2_BANDw(band) | SYSCONFIG2_SPACEw(spacing); - uint16_t oldbs = cache[SYSCONFIG2] & (SYSCONFIG2_BAND | SYSCONFIG2_SPACE); - si4700_write_masked(SYSCONFIG1, deemphasis, SYSCONFIG1_DE); si4700_write_masked(SYSCONFIG2, bandspacing, SYSCONFIG2_BAND | SYSCONFIG2_SPACE); - - /* Retune if this region change would change the channel number. */ - if (oldbs != bandspacing) - si4700_set_frequency(curr_frequency); } /* tuner abstraction layer: set something to the tuner */ |