Merge "FM: Disable slimbus only if receiver is not null" into fm.lnx.2.9.1
diff --git a/fm_hci/fm_hci.c b/fm_hci/fm_hci.c
index f45a00a..d509395 100644
--- a/fm_hci/fm_hci.c
+++ b/fm_hci/fm_hci.c
@@ -391,6 +391,7 @@
return;
}
// property_set("wc_transport.fm_service_status", "0");
+ usleep(100 * 1000); // 100 msecs
property_set(FM_VND_SERVICE_START, "true");
ALOGI("%s: %s set to true ", __func__, FM_VND_SERVICE_START );
for(i=0; i<45; i++) {
diff --git a/helium/radio-helium-commands.h b/helium/radio-helium-commands.h
index 46ed651..5aac139 100644
--- a/helium/radio-helium-commands.h
+++ b/helium/radio-helium-commands.h
@@ -115,6 +115,9 @@
HCI_FM_HELIUM_AUDIO_MODE,
HCI_FM_HELIUM_RMSSI,
HCI_FM_HELIUM_AUDIO_MUTE,
+ HCI_FM_HELIUM_AF_ALGO,
+ HCI_FM_HELIUM_AF_SINR_GD_CH_TH,
+ HCI_FM_HELIUM_AF_SINR_TH,
/*FM VSC command to enable/disable slimbus data port*/
HCI_FM_HELIUM_AUDIO = 0x00980940,
diff --git a/helium/radio-helium.h b/helium/radio-helium.h
index 79f61bd..a244925 100644
--- a/helium/radio-helium.h
+++ b/helium/radio-helium.h
@@ -98,8 +98,13 @@
/**RDS CONFIG MODE**/
#define FM_RDS_CNFG_MODE 0x0f
#define FM_RDS_CNFG_LEN 0x10
+
+/**AF JUMP CONFIG MODE**/
+#define AF_ALGO_OFFSET 0
#define AF_RMSSI_TH_OFFSET 1
#define AF_RMSSI_SAMPLES_OFFSET 2
+#define AF_SINR_GD_CH_TH_OFFSET 4
+#define AF_SINR_TH_OFFSET 5
/**RX CONFIG MODE**/
#define FM_RX_CONFG_MODE 0x15
#define FM_RX_CNFG_LEN 0x15
@@ -1186,6 +1191,9 @@
#define CMD_DEFRD_CF0TH12 (7)
#define CMD_DEFRD_TUNE_POWER (8)
#define CMD_DEFRD_REPEATCOUNT (9)
+#define CMD_DEFRD_AF_ALGO (10)
+#define CMD_DEFRD_AF_SINR_GD_CH_TH (11)
+#define CMD_DEFRD_AF_SINR_TH (12)
#define CMD_STNPARAM_RSSI (1)
#define CMD_STNPARAM_SINR (2)
diff --git a/helium/radio_helium_hal.c b/helium/radio_helium_hal.c
index a25d888..7d04cb4 100644
--- a/helium/radio_helium_hal.c
+++ b/helium/radio_helium_hal.c
@@ -282,31 +282,48 @@
if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_RMSSI_TH)) {
val = hal->radio->def_data.data[AF_RMSSI_TH_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_RMSSI_TH);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_RMSSI_SAMPLE)) {
val = hal->radio->def_data.data[AF_RMSSI_SAMPLES_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_RMSSI_SAMPLE);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_GD_CH_RMSSI_TH)) {
val = hal->radio->def_data.data[GD_CH_RMSSI_TH_OFFSET];
if (val > MAX_GD_CH_RMSSI_TH)
val -= 256;
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_GD_CH_RMSSI_TH);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_SEARCH_ALGO)) {
val = hal->radio->def_data.data[SRCH_ALGO_TYPE_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_SEARCH_ALGO);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_SINR_FIRST_STAGE)) {
val = hal->radio->def_data.data[SINRFIRSTSTAGE_OFFSET];
if (val > MAX_SINR_FIRSTSTAGE)
val -= 256;
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_SINR_FIRST_STAGE);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_RMSSI_FIRST_STAGE)) {
val = hal->radio->def_data.data[RMSSIFIRSTSTAGE_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_RMSSI_FIRST_STAGE);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_CF0TH12)) {
val = (hal->radio->def_data.data[CF0TH12_BYTE1_OFFSET] |
(hal->radio->def_data.data[CF0TH12_BYTE2_OFFSET] << 8));
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_CF0TH12);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_TUNE_POWER)) {
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_TUNE_POWER);
} else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_REPEATCOUNT)) {
val = hal->radio->def_data.data[RX_REPEATE_BYTE_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_REPEATCOUNT);
+ } else if(test_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_ALGO)) {
+ val = hal->radio->def_data.data[AF_ALGO_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_ALGO);
+ } else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_SINR_GD_CH_TH)) {
+ val = hal->radio->def_data.data[AF_SINR_GD_CH_TH_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_SINR_GD_CH_TH);
+ } else if (test_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_SINR_TH)) {
+ val = hal->radio->def_data.data[AF_SINR_TH_OFFSET];
+ clear_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_SINR_TH);
}
} else {
ALOGE("%s: Error: Status= 0x%x", __func__, status);
}
- clear_all_bit(def_data_rd_mask_flag);
hal->jni_cb->fm_def_data_read_cb(val, status);
}
@@ -1597,7 +1614,31 @@
def_data_wrt.length = RDS_PS0_LEN;
memcpy(&def_data_wrt.data, &hal->radio->def_data.data,
hal->radio->def_data.data_len);
- def_data_wrt.data[AF_RMSSI_SAMPLES_OFFSET] = val;
+ def_data_wrt.data[RX_REPEATE_BYTE_OFFSET] = val;
+ ret = hci_fm_default_data_write_req(&def_data_wrt);
+ break;
+ case HCI_FM_HELIUM_AF_ALGO:
+ def_data_wrt.mode = FM_AFJUMP_CONFG_MODE;
+ def_data_wrt.length = FM_AFJUMP_CNFG_LEN;
+ memcpy(&def_data_wrt.data, &hal->radio->def_data.data,
+ hal->radio->def_data.data_len);
+ def_data_wrt.data[AF_ALGO_OFFSET] = (char)val;
+ ret = hci_fm_default_data_write_req(&def_data_wrt);
+ break;
+ case HCI_FM_HELIUM_AF_SINR_GD_CH_TH:
+ def_data_wrt.mode = FM_AFJUMP_CONFG_MODE;
+ def_data_wrt.length = FM_AFJUMP_CNFG_LEN;
+ memcpy(&def_data_wrt.data, &hal->radio->def_data.data,
+ hal->radio->def_data.data_len);
+ def_data_wrt.data[AF_SINR_GD_CH_TH_OFFSET] = (char)val;
+ ret = hci_fm_default_data_write_req(&def_data_wrt);
+ break;
+ case HCI_FM_HELIUM_AF_SINR_TH:
+ def_data_wrt.mode = FM_AFJUMP_CONFG_MODE;
+ def_data_wrt.length = FM_AFJUMP_CNFG_LEN;
+ memcpy(&def_data_wrt.data, &hal->radio->def_data.data,
+ hal->radio->def_data.data_len);
+ def_data_wrt.data[AF_SINR_TH_OFFSET] = (char)val;
ret = hci_fm_default_data_write_req(&def_data_wrt);
break;
case HCI_FM_HELIUM_BLEND_SINRHI:
@@ -1729,7 +1770,21 @@
set_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_RMSSI_SAMPLE);
def_data_rd.mode = FM_AFJUMP_CONFG_MODE;
def_data_rd.length = FM_AFJUMP_CNFG_LEN;
-
+ goto cmd;
+ case HCI_FM_HELIUM_AF_ALGO:
+ set_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_ALGO);
+ def_data_rd.mode = FM_AFJUMP_CONFG_MODE;
+ def_data_rd.length = FM_AFJUMP_CNFG_LEN;
+ goto cmd;
+ case HCI_FM_HELIUM_AF_SINR_GD_CH_TH:
+ set_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_SINR_GD_CH_TH);
+ def_data_rd.mode = FM_AFJUMP_CONFG_MODE;
+ def_data_rd.length = FM_AFJUMP_CNFG_LEN;
+ goto cmd;
+ case HCI_FM_HELIUM_AF_SINR_TH:
+ set_bit(def_data_rd_mask_flag, CMD_DEFRD_AF_SINR_TH);
+ def_data_rd.mode = FM_AFJUMP_CONFG_MODE;
+ def_data_rd.length = FM_AFJUMP_CNFG_LEN;
cmd:
def_data_rd.param_len = 0;
def_data_rd.param = 0;