summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrik Sikken <bertrik@sikken.nl>2010-06-21 16:45:15 +0000
committerBertrik Sikken <bertrik@sikken.nl>2010-06-21 16:45:15 +0000
commit02e04585bdf1fbd00cf84d2000f59ec198440cb3 (patch)
tree2d4440f06f6c52920f2c36bebdea63af364fa568
parent9e5846e7fca80c7c9331375a0fc2b1941b8bd459 (diff)
downloadrockbox-02e04585bdf1fbd00cf84d2000f59ec198440cb3.tar.gz
rockbox-02e04585bdf1fbd00cf84d2000f59ec198440cb3.zip
Fix FS #10474 - FM tuner on Gigabeat S fails to tune last frequency on start
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27018 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/tuner/si4700.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/firmware/drivers/tuner/si4700.c b/firmware/drivers/tuner/si4700.c
index 8e43fe6acc..f9b26be6f8 100644
--- a/firmware/drivers/tuner/si4700.c
+++ b/firmware/drivers/tuner/si4700.c
@@ -370,19 +370,21 @@ static void si4700_set_frequency(int freq)
370 int space = SYSCONFIG2_SPACEr(cache[SYSCONFIG2]); 370 int space = SYSCONFIG2_SPACEr(cache[SYSCONFIG2]);
371 int band = SYSCONFIG2_BANDr(cache[SYSCONFIG2]); 371 int band = SYSCONFIG2_BANDr(cache[SYSCONFIG2]);
372 int chan = (freq - bands[band]) / spacings[space]; 372 int chan = (freq - bands[band]) / spacings[space];
373 int readchan;
373 374
374 curr_frequency = freq; 375 curr_frequency = freq;
375 376
376 si4700_write_reg(CHANNEL, CHANNEL_CHANw(chan) | CHANNEL_TUNE);
377
378 do 377 do
379 { 378 {
380 /* tuning should be done within 60 ms according to the datasheet */ 379 /* tuning should be done within 60 ms according to the datasheet */
380 si4700_write_reg(CHANNEL, CHANNEL_CHANw(chan) | CHANNEL_TUNE);
381 sleep(HZ * 60 / 1000); 381 sleep(HZ * 60 / 1000);
382 }
383 while ((si4700_read_reg(STATUSRSSI) & STATUSRSSI_STC) == 0); /* STC high? */
384 382
385 si4700_write_clear(CHANNEL, CHANNEL_TUNE); /* Set TUNE low */ 383 /* get tune result */
384 readchan = si4700_read_reg(READCHAN) & READCHAN_READCHAN;
385
386 si4700_write_clear(CHANNEL, CHANNEL_TUNE);
387 } while (!((cache[STATUSRSSI] & STATUSRSSI_STC) && (readchan == chan)));
386} 388}
387 389
388static int si4700_tuned(void) 390static int si4700_tuned(void)