From b32df6967328f41af3f631ff495cecb5a562bf5b Mon Sep 17 00:00:00 2001 From: himta ram Date: Thu, 30 Jul 2020 14:37:37 +0530 Subject: [PATCH] RTC6226: disable the RDS during scan operation RDS enable is set during scanning and it causing the incorrect register update for rtc6226 chip and this leads to no audio issue. Set the RDS enable bit to 0 before scanning and set to 1 after scanning finishes. CRs-Fixed: 2744378 Change-Id: I2c2fae1e01fb1fadccbc9133f472fca996bc2496 Signed-off-by: himta ram --- drivers/media/radio/rtc6226/radio-rtc6226-common.c | 12 +++++++++++- drivers/media/radio/rtc6226/radio-rtc6226-i2c.c | 2 ++ drivers/media/radio/rtc6226/radio-rtc6226.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/media/radio/rtc6226/radio-rtc6226-common.c b/drivers/media/radio/rtc6226/radio-rtc6226-common.c index 16b1f4b54d0a..ef2eb5dee70f 100644 --- a/drivers/media/radio/rtc6226/radio-rtc6226-common.c +++ b/drivers/media/radio/rtc6226/radio-rtc6226-common.c @@ -494,6 +494,8 @@ seek_cancelled: else FMDERR("%s: received STD for tune\n", __func__); } + /* Enable the RDS as it was disabled before scan */ + rtc6226_rds_on(radio); rtc6226_q_event(radio, RTC6226_EVT_SEEK_COMPLETE); rtc6226_q_event(radio, RTC6226_EVT_TUNE_SUCC); radio->seek_tune_status = NO_SEEK_TUNE_PENDING; @@ -1357,7 +1359,7 @@ void rtc6226_rds_handler(struct work_struct *worker) /* * rtc6226_rds_on - switch on rds reception */ -static int rtc6226_rds_on(struct rtc6226_device *radio) +int rtc6226_rds_on(struct rtc6226_device *radio) { int retval; @@ -2271,6 +2273,14 @@ static int rtc6226_vidioc_s_hw_freq_seek(struct file *file, void *priv, radio->is_search_cancelled = false; + /* Disable the rds before seek */ + radio->registers[SYSCFG] &= ~SYSCFG_CSR0_RDS_EN; + retval = rtc6226_set_register(radio, SYSCFG); + if (retval < 0) { + FMDERR("%s fail to disable RDS\n", __func__); + return retval; + } + if (radio->g_search_mode == SEEK) { /* seek */ FMDBG("%s starting seek\n", __func__); diff --git a/drivers/media/radio/rtc6226/radio-rtc6226-i2c.c b/drivers/media/radio/rtc6226/radio-rtc6226-i2c.c index 4694ef5d2770..58c3225af429 100644 --- a/drivers/media/radio/rtc6226/radio-rtc6226-i2c.c +++ b/drivers/media/radio/rtc6226/radio-rtc6226-i2c.c @@ -259,6 +259,8 @@ static void rtc6226_i2c_interrupt_handler(struct rtc6226_device *radio) rtc6226_reset_rds_data(radio); FMDBG("%s clear Seek/Tune bit\n", __func__); if (radio->seek_tune_status == SEEK_PENDING) { + /* Enable the RDS as it was disabled before seek */ + rtc6226_rds_on(radio); FMDBG("posting RTC6226_EVT_SEEK_COMPLETE event\n"); rtc6226_q_event(radio, RTC6226_EVT_SEEK_COMPLETE); /* post tune comp evt since seek results in a tune.*/ diff --git a/drivers/media/radio/rtc6226/radio-rtc6226.h b/drivers/media/radio/rtc6226/radio-rtc6226.h index c1e3de812e91..8410e88b5687 100644 --- a/drivers/media/radio/rtc6226/radio-rtc6226.h +++ b/drivers/media/radio/rtc6226/radio-rtc6226.h @@ -695,3 +695,4 @@ int rtc6226_cancel_seek(struct rtc6226_device *radio); void rtc6226_rds_handler(struct work_struct *worker); void rtc6226_q_event(struct rtc6226_device *radio, enum rtc6226_evt_t event); int rtc6226_reset_rds_data(struct rtc6226_device *radio); +int rtc6226_rds_on(struct rtc6226_device *radio);