RTC6226: append the valid channel in scan list

During scan operation some channel are getting scanned
with rssi value less then the rssi threshold value.
Append the channel in scan list if it found with rssi
greater or equal to rssi threshold value.
Tune back to the original tuned frequency when scan
is cancelled in between.

CRs-Fixed: 2734678
Change-Id: Ib431ce70e9c32b2ddf3f991b41abc0c23c74e820
Signed-off-by: himta ram <hram@codeaurora.org>
This commit is contained in:
himta ram 2020-07-17 17:15:10 +05:30 • committed by Gerrit - the friendly Code Review server
commit 6c61c1b2c7

View file

@ -313,7 +313,7 @@ void rtc6226_scan(struct work_struct *work)
int len = 0;
u32 next_freq_khz;
int retval = 0;
int i;
int i, rssi;
FMDBG("%s enter\n", __func__);
@ -385,11 +385,11 @@ void rtc6226_scan(struct work_struct *work)
FMDERR("%s read fail to RSSI\n", __func__);
goto seek_tune_fail;
}
rssi = radio->registers[RSSI] & RSSI_RSSI;
FMDBG("%s valid channel %d, rssi %d threshold rssi %d\n",
__func__, next_freq_khz, rssi, radio->rssi_th);
FMDBG("%s valid channel %d, rssi %d\n", __func__,
next_freq_khz, radio->registers[RSSI] & RSSI_RSSI);
if (radio->g_search_mode == SCAN)
if (radio->g_search_mode == SCAN && rssi >= radio->rssi_th)
rtc6226_q_event(radio, RTC6226_EVT_TUNE_SUCC);
/*
* If scan is cancelled or FM is not ON, break ASAP so that we
@ -408,18 +408,23 @@ void rtc6226_scan(struct work_struct *work)
return;
}
FMDBG("%s update search list %d\n", __func__, next_freq_khz);
if (radio->g_search_mode == SCAN) {
if (radio->g_search_mode == SCAN && rssi >= radio->rssi_th) {
/* sleep for dwell period */
msleep(radio->dwell_time_sec * 1000);
/* need to queue the event when the seek completes */
FMDBG("%s frequency update list %d\n", __func__,
next_freq_khz);
rtc6226_q_event(radio, RTC6226_EVT_SCAN_NEXT);
} else if (radio->g_search_mode == SCAN_FOR_STRONG) {
} else if (radio->g_search_mode == SCAN_FOR_STRONG
&& rssi >= radio->rssi_th) {
rtc6226_update_search_list(radio, next_freq_khz);
}
if (radio->registers[STATUS] & STATUS_SF) {
FMDBG("%s : STATUS=0x%4.4hx\n", __func__,
radio->registers[STATUS]);
if (radio->registers[STATUS] & STATUS_SF ||
(radio->recv_conf.band_high_limit *
TUNE_STEP_SIZE) == next_freq_khz) {
FMDERR("%s Seek one more time if lower freq is valid\n",
__func__);
retval = rtc6226_set_seek(radio, SRCH_UP, WRAP_ENABLE);
@ -440,9 +445,19 @@ void rtc6226_scan(struct work_struct *work)
FMDERR("%s getFreq failed\n", __func__);
goto seek_tune_fail;
}
retval = rtc6226_get_register(radio, RSSI);
if (retval < 0) {
FMDERR("%s read fail to RSSI\n",
__func__);
goto seek_tune_fail;
}
rssi = radio->registers[RSSI] & RSSI_RSSI;
FMDBG("%s freq %d, rssi %d rssi threshold %d\n",
__func__, next_freq_khz, rssi, radio->rssi_th);
if ((radio->recv_conf.band_low_limit *
TUNE_STEP_SIZE) ==
next_freq_khz) {
next_freq_khz &&
rssi >= radio->rssi_th) {
FMDERR("lower band freq is valid\n");
rtc6226_q_event(radio,
RTC6226_EVT_TUNE_SUCC);
@ -466,6 +481,7 @@ seek_tune_fail:
&radio->buf_lock[RTC6226_FM_BUF_SRCH_LIST]);
rtc6226_q_event(radio, RTC6226_EVT_NEW_SRCH_LIST);
}
seek_cancelled:
/* tune to original frequency */
retval = rtc6226_set_freq(radio, current_freq_khz);
if (retval < 0)
@ -478,7 +494,6 @@ seek_tune_fail:
else
FMDERR("%s: received STD for tune\n", __func__);
}
seek_cancelled:
rtc6226_q_event(radio, RTC6226_EVT_SEEK_COMPLETE);
rtc6226_q_event(radio, RTC6226_EVT_TUNE_SUCC);
radio->seek_tune_status = NO_SEEK_TUNE_PENDING;
@ -518,7 +533,6 @@ void rtc6226_search(struct rtc6226_device *radio, bool on)
msecs_to_jiffies(10));
} else {
rtc6226_cancel_seek(radio);
rtc6226_q_event(radio, RTC6226_EVT_SEEK_COMPLETE);
}
}