Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecdd3441 authored by himta ram's avatar himta ram
Browse files

RTC6226: keep tuned to valid lower band channel for dwell time



While scan operation at rtc6226 driver when band limit
is reached and then we seek with WRAP_ENABLE one more
time to know if lower freq is valid, we update the
valid lower band frequency to user space without keeping
tuned to lower band frequency for specified dwell time.
This leads to tuned freq mismatch between user space and
kernel driver. Keep tuned to valid lower band channel for
dwell time and also scan the lower band frequency channel
once all the frequencies are scanned in the band range.

CRs-Fixed: 2725895
Change-Id: I8efb580c495baa314ef1a162e19c52eafbc085a9
Signed-off-by: default avatarhimta ram <hram@codeaurora.org>
parent daae2461
Loading
Loading
Loading
Loading
+34 −27
Original line number Diff line number Diff line
@@ -384,33 +384,6 @@ void rtc6226_scan(struct work_struct *work)
		FMDBG("%s valid channel %d, rssi %d\n", __func__,
			next_freq_khz, radio->registers[RSSI] & RSSI_RSSI);

		if (radio->registers[STATUS] & STATUS_SF) {
			FMDERR("%s Seek one more time if lower freq is valid\n",
					__func__);
			retval = rtc6226_set_seek(radio, SRCH_UP, WRAP_ENABLE);
			if (retval < 0) {
				FMDERR("%s seek fail %d\n", __func__, retval);
				goto seek_tune_fail;
			}
			if (!wait_for_completion_timeout(&radio->completion,
					msecs_to_jiffies(WAIT_TIMEOUT_MSEC))) {
				FMDERR("timeout didn't receive STC for seek\n");
			} else {
				FMDERR("%s: received STC for seek\n", __func__);
				retval = rtc6226_get_freq(radio,
						&next_freq_khz);
				if (retval < 0) {
					FMDERR("%s getFreq failed\n", __func__);
					goto seek_tune_fail;
				}
				if ((radio->recv_conf.band_low_limit *
						TUNE_STEP_SIZE) ==
							next_freq_khz)
					rtc6226_q_event(radio,
						RTC6226_EVT_TUNE_SUCC);
			}
			break;
		}
		if (radio->g_search_mode == SCAN)
			rtc6226_q_event(radio, RTC6226_EVT_TUNE_SUCC);
		/*
@@ -440,6 +413,40 @@ void rtc6226_scan(struct work_struct *work)
			rtc6226_update_search_list(radio, next_freq_khz);
		}

		if (radio->registers[STATUS] & STATUS_SF) {
			FMDERR("%s Seek one more time if lower freq is valid\n",
					__func__);
			retval = rtc6226_set_seek(radio, SRCH_UP, WRAP_ENABLE);
			if (retval < 0) {
				FMDERR("%s seek fail %d\n", __func__, retval);
				goto seek_tune_fail;
			}
			if (!wait_for_completion_timeout(&radio->completion,
					msecs_to_jiffies(WAIT_TIMEOUT_MSEC))) {
				FMDERR("timeout didn't receive STC for seek\n");
			} else {
				FMDERR("%s: received STC for seek\n", __func__);
				retval = rtc6226_get_freq(radio,
						&next_freq_khz);
				if (retval < 0) {
					FMDERR("%s getFreq failed\n", __func__);
					goto seek_tune_fail;
				}
				if ((radio->recv_conf.band_low_limit *
						TUNE_STEP_SIZE) ==
							next_freq_khz) {
					FMDERR("lower band freq is valid\n");
					rtc6226_q_event(radio,
						RTC6226_EVT_TUNE_SUCC);
					/* sleep for dwell period */
					msleep(radio->dwell_time_sec * 1000);
					rtc6226_q_event(radio,
						RTC6226_EVT_SCAN_NEXT);
				}
			}
			break;
		}

	}

seek_tune_fail: