FM: Remove Ioctl base code

FR61722 make fm system code generic for all the chipset types.

CRs-Fixed: 2653082
Change-Id: I1c557ea178295a96d7f77cceb58a5d288bbd75d8
diff --git a/helium/radio-helium.h b/helium/radio-helium.h
index eb6ea9b..d3dae68 100644
--- a/helium/radio-helium.h
+++ b/helium/radio-helium.h
@@ -134,6 +134,7 @@
 #define FM_AFJUMP_CONFG_MODE 0x42
 #define FM_SRCH_CNFG_LEN    0x08
 #define FM_AFJUMP_CNFG_LEN  0x06
+#define STD_BUF_SIZE  256
 
 /* HCI timeouts */
 #define RADIO_HCI_TIMEOUT   (10000) /* 10 seconds */
@@ -513,6 +514,10 @@
 #define HCI_EV_RADIO_TEXT_PLUS_TAG      0x19
 #define HCI_EV_HW_ERR_EVENT             0x1A
 
+/*HCI event opcode for fm driver RDS support*/
+#define HCI_EV_DRIVER_RDS_EVENT         0x1B
+#define HCI_EV_E_RADIO_TEXT             0x1C
+
 #define HCI_REQ_DONE      0
 #define HCI_REQ_PEND      1
 #define HCI_REQ_CANCELED  2
diff --git a/helium/radio_helium_hal.c b/helium/radio_helium_hal.c
index 79e69f5..e258bff 100644
--- a/helium/radio_helium_hal.c
+++ b/helium/radio_helium_hal.c
@@ -862,6 +862,50 @@
     }
 }
 
+static void hci_ev_driver_rds_event(uint8_t buff[])
+{
+    uint8_t rds_type;
+    char *rds_data = NULL;
+    rds_type = buff[0];
+
+    ALOGD("%s:%s:rds type = 0x%x", LOG_TAG, __func__, rds_type);
+    rds_data = malloc(STD_BUF_SIZE);
+    if (rds_data == NULL) {
+        ALOGE("%s:memory allocation failed\n", LOG_TAG);
+        return;
+    } else {
+        memcpy(rds_data, &buff[1],STD_BUF_SIZE);
+    }
+
+    switch (rds_type) {
+        case HCI_EV_RADIO_TEXT:
+            hal->jni_cb->rt_update_cb(rds_data);
+            break;
+
+        case HCI_EV_PROGRAM_SERVICE:
+            hal->jni_cb->ps_update_cb(rds_data);
+            break;
+
+        case HCI_EV_FM_AF_LIST:
+            hal->jni_cb->af_list_update_cb((uint16_t *)&rds_data);
+            break;
+
+        case HCI_EV_RADIO_TEXT_PLUS_TAG:
+            hal->jni_cb->rt_plus_update_cb(rds_data);
+            break;
+
+        case HCI_EV_E_RADIO_TEXT:
+            hal->jni_cb->ert_update_cb(rds_data);
+            break;
+
+        default:
+            ALOGD("%s: Unknown RDS event", __func__);
+            break;
+        }
+
+    free(rds_data);
+}
+
 static void hci_ev_ert()
 {
     char *data = NULL;
@@ -1075,6 +1119,9 @@
     case HCI_EV_EXT_COUNTRY_CODE:
         hci_ev_ext_country_code(((struct fm_event_header_t *)evt_buf)->params);
         break;
+    case HCI_EV_DRIVER_RDS_EVENT:
+        hci_ev_driver_rds_event(((struct fm_event_header_t *)evt_buf)->params);
+        break;
     case HCI_EV_HW_ERR_EVENT:
         hci_ev_hw_error();
         break;