diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c
index 7b5ab07..fb314d0 100644
--- a/btif/src/btif_config.c
+++ b/btif/src/btif_config.c
@@ -452,7 +452,6 @@
 static int set_node(const char* section, const char* key, const char* name,
                     const char* value, short bytes, short type)
 {
-    int si = -1, ki = -1, vi = -1;
     cfg_node* section_node = NULL;
     if((section_node = find_add_node(&root, section)))
     {
@@ -575,7 +574,6 @@
             if(name == NULL)
             {
                 int count = GET_CHILD_COUNT(key_node);
-                int i;
                 free_child(key_node, 0, count);
                 free_child(section_node, ki, 1);
                 return TRUE;
@@ -613,7 +611,6 @@
     int child_count = GET_CHILD_COUNT(p);
     int occupy = 1;
     int empty = 0;
-    int i;
     for(;;)
     {
         empty = find_first_empty(p, empty, child_count);
@@ -766,7 +763,6 @@
 static void load_cfg()
 {
     const char* file_name = CFG_PATH CFG_FILE_NAME CFG_FILE_EXT;
-    const char* file_name_new = CFG_PATH CFG_FILE_NAME CFG_FILE_EXT_NEW;
     const char* file_name_old = CFG_PATH CFG_FILE_NAME CFG_FILE_EXT_OLD;
     if(!btif_config_load_file(file_name))
     {
diff --git a/btif/src/btif_core.c b/btif/src/btif_core.c
index 8964f5c..4e674c5 100644
--- a/btif/src/btif_core.c
+++ b/btif/src/btif_core.c
@@ -1001,8 +1001,6 @@
 
 static void execute_storage_request(UINT16 event, char *p_param)
 {
-    uint8_t is_local;
-    int num_entries = 0;
     bt_status_t status = BT_STATUS_SUCCESS;
 
     BTIF_TRACE_EVENT("execute storage request event : %d", event);
@@ -1312,7 +1310,6 @@
 
     if (storage_req_id != BTIF_CORE_STORAGE_NO_ACTION)
     {
-        int btif_status;
         /* pass on to storage for updating local database */
 
         memset(&(req.write_req.bd_addr), 0, sizeof(bt_bdaddr_t));
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index c110ee8..550a25e 100644
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -423,14 +423,12 @@
 *******************************************************************************/
 BOOLEAN check_sdp_bl(const bt_bdaddr_t *remote_bdaddr)
 {
-    UINT8 i = 0;
     UINT16 manufacturer = 0;
     UINT8 lmp_ver = 0;
     UINT16 lmp_subver = 0;
     tBTM_STATUS btm_status;
     bt_property_t prop_name;
     bt_remote_version_t info;
-    bt_status_t status;
 
 
     if (remote_bdaddr == NULL)
@@ -680,7 +678,6 @@
 *******************************************************************************/
 void btif_dm_cb_remove_bond(bt_bdaddr_t *bd_addr)
 {
-     bdstr_t bdstr;
      /*special handling for HID devices */
      /*  VUP needs to be sent if its a HID Device. The HID HOST module will check if there
      is a valid hid connection with this bd_addr. If yes VUP will be issued.*/
@@ -1182,11 +1179,9 @@
         {
             /* inquiry result */
             UINT32 cod;
-            UINT8 *p_eir_remote_name = NULL;
             bt_bdname_t bdname;
             bt_bdaddr_t bdaddr;
             UINT8 remote_name_len;
-            UINT8 *p_cached_name = NULL;
             tBTA_SERVICE_MASK services = 0;
             bdstr_t bdstr;
 
@@ -1334,9 +1329,8 @@
     {
         case BTA_DM_DISC_RES_EVT:
         {
-            bt_uuid_t uuid_arr[BT_MAX_NUM_UUIDS]; /* Max 32 services */
             bt_property_t prop;
-            uint32_t i = 0,  j = 0;
+            uint32_t i = 0;
             bt_bdaddr_t bd_addr;
             bt_status_t ret;
 
@@ -1470,7 +1464,6 @@
         {
             bt_service_record_t rec;
             bt_property_t prop;
-            uint32_t i = 0;
             bt_bdaddr_t bd_addr;
 
             memset(&rec, 0, sizeof(bt_service_record_t));
@@ -1513,7 +1506,6 @@
 *******************************************************************************/
 static void btif_dm_upstreams_evt(UINT16 event, char* p_param)
 {
-    tBTA_DM_SEC_EVT dm_event = (tBTA_DM_SEC_EVT)event;
     tBTA_DM_SEC *p_data = (tBTA_DM_SEC*)p_param;
     tBTA_SERVICE_MASK service_mask;
     uint32_t i;
@@ -2443,8 +2435,6 @@
 *******************************************************************************/
 bt_status_t btif_dm_get_adapter_property(bt_property_t *prop)
 {
-    bt_status_t status;
-
     BTIF_TRACE_EVENT("%s: type=0x%x", __FUNCTION__, prop->type);
     switch (prop->type)
     {
@@ -2818,8 +2808,6 @@
 
 void    btif_dm_load_ble_local_keys(void)
 {
-    bt_status_t bt_status;
-
     memset(&ble_local_key_cb, 0, sizeof(btif_dm_local_key_cb_t));
 
     if (btif_storage_get_ble_local_key(BTIF_DM_LE_LOCAL_KEY_ER,(char*)&ble_local_key_cb.er[0],
diff --git a/btif/src/btif_gatt_client.c b/btif/src/btif_gatt_client.c
index abe35c1..de55146 100644
--- a/btif/src/btif_gatt_client.c
+++ b/btif/src/btif_gatt_client.c
@@ -337,7 +337,6 @@
 
 static void btif_gattc_add_remote_bdaddr (BD_ADDR p_bda, uint8_t addr_type)
 {
-    BOOLEAN found=FALSE;
     uint8_t i;
     for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
     {
diff --git a/btif/src/btif_gatt_multi_adv_util.c b/btif/src/btif_gatt_multi_adv_util.c
index 68fc3ba..fc9da99 100755
--- a/btif/src/btif_gatt_multi_adv_util.c
+++ b/btif/src/btif_gatt_multi_adv_util.c
@@ -258,7 +258,6 @@
 
 BOOLEAN btif_gattc_copy_datacb(int cbindex, btif_adv_data_t *p_adv_data, BOOLEAN bInstData)
 {
-    int i=0;
     btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
     if (NULL == p_multi_adv_data_cb || cbindex < 0)
        return false;
diff --git a/btif/src/btif_gatt_util.c b/btif/src/btif_gatt_util.c
index ed66703..9e317ef 100644
--- a/btif/src/btif_gatt_util.c
+++ b/btif/src/btif_gatt_util.c
@@ -239,7 +239,6 @@
 
 uint16_t set_read_value(btgatt_read_params_t *p_dest, tBTA_GATTC_READ *p_src)
 {
-    int i = 0;
     uint16_t descr_type = 0;
     uint16_t len = 0;
 
diff --git a/btif/src/btif_hf.c b/btif/src/btif_hf.c
index c0cc4df..fcf9f1e 100644
--- a/btif/src/btif_hf.c
+++ b/btif/src/btif_hf.c
@@ -352,7 +352,7 @@
         int i;
         for (i = 0; i < btif_max_hf_clients; i++)
         {
-            if ((btif_hf_cb[i].state == BTHF_CONNECTION_STATE_SLC_CONNECTED))
+            if (btif_hf_cb[i].state == BTHF_CONNECTION_STATE_SLC_CONNECTED)
             {
                 BTIF_TRACE_EVENT("BTHF: %s: slc connected for idx = %d",
                                          __FUNCTION__, i);
@@ -388,7 +388,6 @@
 {
     tBTA_AG *p_data = (tBTA_AG *)p_param;
     bdstr_t bdstr;
-    bt_bdaddr_t addr;
     int idx = p_data->hdr.handle - 1;
 
     BTIF_TRACE_DEBUG("%s: event=%s", __FUNCTION__, dump_hf_event(event));
diff --git a/btif/src/btif_hf_client.c b/btif/src/btif_hf_client.c
index 22d5ba2..f9025eb 100644
--- a/btif/src/btif_hf_client.c
+++ b/btif/src/btif_hf_client.c
@@ -137,7 +137,7 @@
     switch (event) {
         case BTIF_HF_CLIENT_CB_AUDIO_CONNECTING:
         {
-            HAL_CBACK(bt_hf_client_callbacks, audio_state_cb, BTHF_AUDIO_STATE_CONNECTING,
+            HAL_CBACK(bt_hf_client_callbacks, audio_state_cb, (bthf_client_audio_state_t)BTHF_AUDIO_STATE_CONNECTING,
                       &btif_hf_client_cb.connected_bda);
         } break;
         default:
@@ -367,8 +367,6 @@
 *******************************************************************************/
 static bt_status_t volume_control(bthf_client_volume_type_t type, int volume)
 {
-    BOOLEAN speaker;
-
     CHECK_BTHF_CLIENT_SLC_CONNECTED();
 
     switch (type)
diff --git a/btif/src/btif_hh.c b/btif/src/btif_hh.c
index 1370264..b7d041e 100644
--- a/btif/src/btif_hh.c
+++ b/btif/src/btif_hh.c
@@ -68,7 +68,6 @@
 
 extern const int BT_UID;
 extern const int BT_GID;
-static int btif_hh_prev_keyevents=0; //The previous key events
 static int btif_hh_keylockstates=0; //The current key state of each key
 
 #define BTIF_HH_ID_1        0
@@ -624,7 +623,6 @@
     char bda_str[20];
     int i;
     BD_ADDR *bda = (BD_ADDR*)bd_addr;
-    tBTA_HH_CONN conn;
     CHECK_BTHH_INIT();
     dev = btif_hh_find_dev_by_bda(bd_addr);
     BTIF_TRACE_DEBUG("Connect _hh");
@@ -688,7 +686,6 @@
 
 void btif_hh_disconnect(bt_bdaddr_t *bd_addr)
 {
-    BD_ADDR *bda = (BD_ADDR*)bd_addr;
     btif_hh_device_t *p_dev;
     p_dev = btif_hh_find_connected_dev_by_bda(bd_addr);
     if (p_dev != NULL)
@@ -742,7 +739,6 @@
 static void btif_hh_upstreams_evt(UINT16 event, char* p_param)
 {
     tBTA_HH *p_data = (tBTA_HH *)p_param;
-    bdstr_t bdstr;
     btif_hh_device_t *p_dev = NULL;
     int i;
     int len, tmplen;
@@ -1185,7 +1181,7 @@
 void btif_hh_tmr_hdlr(TIMER_LIST_ENT *tle)
 {
     btif_hh_device_t *p_dev;
-    UINT8               i,j;
+    UINT8               i;
     tBTA_HH_EVT event;
     tBTA_HH p_data;
     int param_len = 0;
diff --git a/btif/src/btif_hl.c b/btif/src/btif_hl.c
index 64b1f59..e9b0f22 100644
--- a/btif/src/btif_hl.c
+++ b/btif/src/btif_hl.c
@@ -904,7 +904,7 @@
     btif_hl_app_cb_t            *p_acb;
     btif_hl_mcl_cb_t            *p_mcb;
     btif_hl_pending_chan_cb_t   *p_pcb;
-    UINT8                       app_idx, mcl_idx, chan_idx;
+    UINT8                       app_idx, mcl_idx;
     BOOLEAN                     status = TRUE;
 
     BTIF_TRACE_DEBUG("%s app_id=%d ctrl_psm=%d mdep_cfg_idx=%d op=%d",
@@ -1284,7 +1284,6 @@
 BOOLEAN btif_hl_find_mcl_idx(UINT8 app_idx, BD_ADDR p_bd_addr, UINT8 *p_mcl_idx){
     BOOLEAN found=FALSE;
     UINT8 i;
-    btif_hl_app_cb_t  *p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
     btif_hl_mcl_cb_t  *p_mcb;
 
     *p_mcl_idx = 0;
@@ -1856,7 +1855,6 @@
 *******************************************************************************/
 static void btif_hl_stop_timer_using_handle( tBTA_HL_MCL_HANDLE mcl_handle){
     btif_hl_app_cb_t  *p_acb;
-    BOOLEAN         found=FALSE;
     UINT8 i,j;
 
     for (i=0; i<BTA_HL_NUM_APPS; i++)
@@ -1886,7 +1884,7 @@
                                            UINT8 p_app_idx, UINT8 *p_mcl_idx){
     btif_hl_app_cb_t  *p_acb;
     BOOLEAN         found=FALSE;
-    UINT8 i,j;
+    UINT8 j;
 
     p_acb =BTIF_HL_GET_APP_CB_PTR(p_app_idx);
     for (j=0; j < BTA_HL_NUM_MCLS ; j++)
@@ -1917,7 +1915,7 @@
     btif_hl_app_cb_t  *p_acb;
     btif_hl_mcl_cb_t  *p_mcb;
     btif_hl_mdl_cb_t  *p_dcb;
-    UINT8 i,j,x,y;
+    UINT8 j,x,y;
     bt_bdaddr_t     bd_addr;
 
         p_acb =BTIF_HL_GET_APP_CB_PTR(app_idx);
@@ -2110,7 +2108,6 @@
     UINT8                   app_idx;
     int                     app_id = 0;
     bthl_app_reg_state_t    state = BTHL_APP_REG_STATE_DEREG_SUCCESS;
-    bt_status_t             status            = BT_STATUS_SUCCESS;
 
     BTIF_TRACE_DEBUG("%s de-reg status=%d app_handle=%d", __FUNCTION__,
                 p_data->dereg_cfm.status, p_data->dereg_cfm.app_handle);
@@ -2150,7 +2147,6 @@
     btif_hl_app_cb_t       *p_acb;
     UINT8                  app_idx;
     bthl_app_reg_state_t   state = BTHL_APP_REG_STATE_REG_SUCCESS;
-    bt_status_t            bt_status;
 
     BTIF_TRACE_DEBUG("%s reg status=%d app_handle=%d", __FUNCTION__, p_data->reg_cfm.status, p_data->reg_cfm.app_handle);
 
@@ -2454,7 +2450,7 @@
 
 {
     btif_hl_mcl_cb_t         *p_mcb;
-    UINT8                   app_idx, mcl_idx;
+    UINT8                   mcl_idx;
     int                     i;
 
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
@@ -2578,7 +2574,6 @@
     btif_hl_mcl_cb_t         *p_mcb;
     UINT8                    app_idx, mcl_idx;
     BOOLEAN                  status = FALSE;
-    tBTA_HL_DCH_OPEN_PARAM   dch_open;
 
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
 
@@ -2647,7 +2642,6 @@
 static void btif_hl_proc_cch_close_ind(tBTA_HL *p_data)
 
 {
-    UINT8                   app_idx, mcl_idx;
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
 
     btif_hl_clean_mcb_using_handle(p_data->cch_close_ind.mcl_handle);
@@ -2665,7 +2659,6 @@
 *******************************************************************************/
 static void btif_hl_proc_cch_close_cfm(tBTA_HL *p_data)
 {
-    UINT8                   app_idx, mcl_idx;
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
 
     btif_hl_clean_mcb_using_handle(p_data->cch_close_ind.mcl_handle);
@@ -2684,7 +2677,7 @@
     btif_hl_app_cb_t         *p_acb;
     btif_hl_mcl_cb_t         *p_mcb;
     tBTA_HL_MDEP            *p_mdep;
-    UINT8                   app_idx, orig_app_idx, mcl_idx, mdep_cfg_idx;
+    UINT8                   orig_app_idx, mcl_idx, mdep_cfg_idx;
     BOOLEAN                 first_reliable_exist;
     BOOLEAN                 success = TRUE;
     tBTA_HL_DCH_CFG         rsp_cfg = BTA_HL_DCH_CFG_UNKNOWN;
@@ -2769,7 +2762,6 @@
     btif_hl_mcl_cb_t         *p_mcb;
     btif_hl_mdl_cb_t         *p_dcb;
     UINT8                    orig_app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
-    UINT8                    dc_cfg;
     BOOLEAN close_dch = FALSE;
 
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
@@ -3003,7 +2995,7 @@
     btif_hl_app_cb_t        *p_acb;
     btif_hl_mcl_cb_t        *p_mcb;
     btif_hl_mdl_cb_t        *p_dcb;
-    UINT8                   app_idx, mcl_idx, mdl_idx, mdep_cfg_idx, dc_cfg;
+    UINT8                   app_idx, mcl_idx, mdl_idx, mdep_cfg_idx;
     BOOLEAN                 close_dch = FALSE;
 
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
@@ -3136,7 +3128,6 @@
 *******************************************************************************/
 static void btif_hl_proc_abort_ind(tBTA_HL_MCL_HANDLE mcl_handle){
 
-    UINT8                   app_idx,mcl_idx;
     BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
     btif_hl_app_cb_t  *p_acb;
     UINT8 i,j;
@@ -3169,8 +3160,6 @@
 **
 *******************************************************************************/
 static void btif_hl_proc_abort_cfm(tBTA_HL_MCL_HANDLE mcl_handle){
-    UINT8                   app_idx,mcl_idx;
-
     BTIF_TRACE_DEBUG("%s", __FUNCTION__ );
     btif_hl_app_cb_t  *p_acb;
     UINT8 i,j;
@@ -3257,9 +3246,6 @@
 static void btif_hl_proc_reg_request(UINT8 app_idx, UINT8  app_id,
                                      tBTA_HL_REG_PARAM *p_reg_param,
                                      tBTA_HL_CBACK *p_cback){
-    bt_status_t status= BT_STATUS_SUCCESS;
-    UINT8 i;
-    btif_hl_app_data_t *p_data;
     UNUSED(p_cback);
 
     BTIF_TRACE_DEBUG("%s app_idx=%d app_id=%d", __FUNCTION__, app_idx, app_id);
@@ -3291,10 +3277,7 @@
     BOOLEAN                         send_chan_cb=TRUE;
     tBTA_HL_REG_PARAM               reg_param;
     btif_hl_app_cb_t                *p_acb;
-    bthl_app_reg_state_t            reg_state = BTHL_APP_REG_STATE_REG_FAILED;
     int                             app_id;
-    UINT8                           preg_idx;
-    bt_status_t                     bt_status;
 
     BTIF_TRACE_DEBUG("%s event %d", __FUNCTION__, event);
     btif_hl_display_calling_process_name();
@@ -3382,7 +3365,6 @@
     UINT8                 app_idx, mcl_idx;
     btif_hl_app_cb_t      *p_acb;
     btif_hl_mcl_cb_t      *p_mcb = NULL;
-    BD_ADDR               bd_addr;
     btif_hl_pend_dch_op_t  pending_op;
     BOOLEAN status;
 
@@ -4075,11 +4057,10 @@
 **
 *******************************************************************************/
 static bt_status_t destroy_channel(int channel_id){
-    UINT8 app_idx, mcl_idx, mdl_idx, mdl_cfg_idx, app_id, mdep_cfg_idx = 0;
+    UINT8 app_idx, mcl_idx, mdl_cfg_idx, mdep_cfg_idx = 0;
     bt_status_t status = BT_STATUS_SUCCESS;
     btif_hl_mdl_cfg_t     *p_mdl;
     btif_hl_mcl_cb_t     *p_mcb;
-    btif_hl_mdl_cb_t     *p_dcb;
     btif_hl_app_cb_t     *p_acb;
 
     CHECK_BTHL_INIT();
@@ -4208,7 +4189,7 @@
     tBTA_HL_SUP_FEATURE         *p_sup;
     tBTA_HL_MDEP_CFG            *p_cfg;
     tBTA_HL_MDEP_DATA_TYPE_CFG  *p_data;
-    UINT8                       app_idx=0, i=0, pending_reg_idx=0;
+    UINT8                       app_idx=0, i=0;
     bthl_mdep_cfg_t             *p_mdep_cfg;
     bt_status_t                 status = BT_STATUS_SUCCESS;
     btif_hl_evt_cb_t            evt_param;
@@ -4338,7 +4319,7 @@
     BOOLEAN             success = FALSE;
     btif_hl_app_cb_t    *p_acb;
     btif_hl_mcl_cb_t    *p_mcb;
-    UINT8               app_idx, mcl_idx, mdl_idx, len;
+    UINT8               app_idx, mcl_idx, len;
     bt_status_t         bt_status;
     btif_hl_evt_cb_t    evt_param;
     int                 *p_channel_id;
@@ -4575,7 +4556,6 @@
 **
 *******************************************************************************/
 void btif_hl_release_mcl_sockets(UINT8 app_idx, UINT8 mcl_idx){
-    btif_hl_soc_cb_t    *p_scb = NULL;
     UINT8               i;
     btif_hl_mdl_cb_t    *p_dcb;
     BOOLEAN             found= FALSE;
@@ -4631,7 +4611,6 @@
     btif_hl_mcl_cb_t      *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
     btif_hl_mdl_cb_t      *p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
     btif_hl_soc_cb_t      *p_scb = NULL;
-    UINT8                 soc_idx;
     BOOLEAN               status = FALSE;
 
     BTIF_TRACE_DEBUG("%s", __FUNCTION__);
@@ -4733,10 +4712,8 @@
     btif_hl_soc_cb_t                *p_scb = NULL;
     BOOLEAN                         element_removed = FALSE;
     btif_hl_mdl_cb_t                *p_dcb = NULL ;
-    btif_hl_app_cb_t                *p_acb = NULL ;
     btif_hl_evt_cb_t                evt_param;
     int                             len;
-    int                             app_idx;
     bt_status_t                     status;
 
     BTIF_TRACE_DEBUG("entering %s",__FUNCTION__);
diff --git a/btif/src/btif_media_task.c b/btif/src/btif_media_task.c
index 4b04e1e..88ca6d4 100644
--- a/btif/src/btif_media_task.c
+++ b/btif/src/btif_media_task.c
@@ -1037,7 +1037,6 @@
 
 BOOLEAN btif_a2dp_on_started(tBTA_AV_START *p_av, BOOLEAN pending_start)
 {
-    tBTIF_STATUS status;
     BOOLEAN ack = FALSE;
 
     APPL_TRACE_EVENT("## ON A2DP STARTED ##");
@@ -1091,8 +1090,6 @@
 
 void btif_a2dp_ack_fail(void)
 {
-    tBTIF_STATUS status;
-
     APPL_TRACE_EVENT("## A2DP_CTRL_ACK_FAILURE ##");
     a2dp_cmd_acknowledge(A2DP_CTRL_ACK_FAILURE);
 }
diff --git a/btif/src/btif_rc.c b/btif/src/btif_rc.c
index de6c328..34041bf 100644
--- a/btif/src/btif_rc.c
+++ b/btif/src/btif_rc.c
@@ -173,11 +173,6 @@
  * For now, only the rc_white_addr_prefix is used in the code while
  * rc_black_addr_prefix is kept here for future long term solution.
  */
-static const UINT8 rc_black_addr_prefix[][3] = {
-    {0x0, 0x18, 0x6B}, // LG HBS-730
-    {0x0, 0x26, 0x7E}  // VW Passat
-};
-
 static const UINT8 rc_white_addr_prefix[][3] = {
     {0x94, 0xCE, 0x2C}, // Sony SBH50
     {0x30, 0x17, 0xC8} // Sony wm600
@@ -274,7 +269,7 @@
 int uinput_create(char *name)
 {
     struct uinput_dev dev;
-    int fd, err, x = 0;
+    int fd, x = 0;
 
     for(x=0; x < MAX_UINPUT_PATHS; x++)
     {
@@ -422,8 +417,6 @@
 {
     BTIF_TRACE_DEBUG("%s: rc_handle: %d", __FUNCTION__, p_rc_open->rc_handle);
     bt_status_t result = BT_STATUS_SUCCESS;
-    int i;
-    char bd_str[18];
 #if (AVRC_CTLR_INCLUDED == TRUE)
     bt_bdaddr_t rc_addr;
 #endif
@@ -917,7 +910,6 @@
     tAVRC_RESPONSE *pmetamsg_resp)
 {
     UINT8 ctype;
-    tAVRC_STS status;
 
     if (!pmetamsg_resp)
     {
@@ -1253,7 +1245,6 @@
     uint32_t song_pos)
 {
     tAVRC_RESPONSE avrc_rsp;
-    UINT32 i;
     CHECK_RC_CONNECTED
     memset(&(avrc_rsp.get_play_status), 0, sizeof(tAVRC_GET_PLAY_STATUS_RSP));
     avrc_rsp.get_play_status.song_len = song_len;
@@ -1282,7 +1273,6 @@
 {
     tAVRC_RESPONSE avrc_rsp;
     UINT32 i;
-    uint8_t j;
     tAVRC_ATTR_ENTRY element_attrs[BTRC_MAX_ELEM_ATTR_SIZE];
     CHECK_RC_CONNECTED
     memset(element_attrs, 0, sizeof(tAVRC_ATTR_ENTRY) * num_attr);
@@ -1451,8 +1441,6 @@
     tAVRC_COMMAND avrc_cmd = {0};
     BT_HDR *p_msg = NULL;
     tAVRC_STS BldResp=AVRC_STS_BAD_CMD;
-    UINT16 rv = 0;
-    bt_status_t tran_status;
     rc_transaction_t *p_transaction=NULL;
 
     BTIF_TRACE_DEBUG("%s called with label:%d",__FUNCTION__,lbl);
@@ -1592,7 +1580,6 @@
                                                     key_code, key_state);
     if (btif_rc_cb.rc_features & BTA_AV_FEAT_RCTG)
     {
-        tAVRC_MSG_PASS avrc_cmd;
         bt_status_t tran_status = get_transaction(&p_transaction);
         if(BT_STATUS_SUCCESS == tran_status && NULL != p_transaction)
         {
diff --git a/btif/src/btif_sock_rfc.c b/btif/src/btif_sock_rfc.c
index d934c52..46accf2 100644
--- a/btif/src/btif_sock_rfc.c
+++ b/btif/src/btif_sock_rfc.c
@@ -218,27 +218,6 @@
     return NULL;
 }
 
-static inline rfc_slot_t* find_rfc_slot_by_fd(int fd)
-{
-    int i;
-    if(fd >= 0)
-    {
-        for(i = 0; i < MAX_RFC_CHANNEL; i++)
-        {
-            if(rfc_slots[i].fd == fd)
-            {
-                if(rfc_slots[i].id)
-                    return &rfc_slots[i];
-                else
-                {
-                    APPL_TRACE_ERROR("invalid rfc slot id, cannot be 0");
-                    break;
-                }
-            }
-        }
-    }
-    return NULL;
-}
 static rfc_slot_t* alloc_rfc_slot(const bt_bdaddr_t *addr, const char* name, const uint8_t* uuid, int channel, int flags, BOOLEAN server)
 {
     int security = 0;
@@ -692,7 +671,6 @@
 
 static void *rfcomm_cback(tBTA_JV_EVT event, tBTA_JV *p_data, void *user_data)
 {
-    int rc;
     void* new_user_data = NULL;
     APPL_TRACE_DEBUG("event=%s", jv_evt[event]);
 
diff --git a/btif/src/btif_sock_thread.c b/btif/src/btif_sock_thread.c
index 687a1c5..b0946ec 100644
--- a/btif/src/btif_sock_thread.c
+++ b/btif/src/btif_sock_thread.c
@@ -112,55 +112,6 @@
 static pthread_mutex_t thread_slot_lock;
 
 
-static inline void set_socket_blocking(int s, int blocking)
-{
-    int opts;
-    opts = fcntl(s, F_GETFL);
-    if (opts<0) APPL_TRACE_ERROR("set blocking (%s)", strerror(errno));
-    if(blocking)
-        opts &= ~O_NONBLOCK;
-    else opts |= O_NONBLOCK;
-    fcntl(s, F_SETFL, opts);
-}
-
-static inline int create_server_socket(const char* name)
-{
-    int s = socket(AF_LOCAL, SOCK_STREAM, 0);
-    APPL_TRACE_DEBUG("covert name to android abstract name:%s", name);
-    if(socket_local_server_bind(s, name, ANDROID_SOCKET_NAMESPACE_ABSTRACT) >= 0)
-    {
-        if(listen(s, 5) == 0)
-        {
-            APPL_TRACE_DEBUG("listen to local socket:%s, fd:%d", name, s);
-            return s;
-        }
-        else APPL_TRACE_ERROR("listen to local socket:%s, fd:%d failed, errno:%d", name, s, errno);
-    }
-    else APPL_TRACE_ERROR("create local socket:%s fd:%d, failed, errno:%d", name, s, errno);
-    close(s);
-    return -1;
-}
-static inline int connect_server_socket(const char* name)
-{
-    int s = socket(AF_LOCAL, SOCK_STREAM, 0);
-    set_socket_blocking(s, TRUE);
-    if(socket_local_client_connect(s, name, ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM) >= 0)
-    {
-        APPL_TRACE_DEBUG("connected to local socket:%s, fd:%d", name, s);
-        return s;
-    }
-    else APPL_TRACE_ERROR("connect to local socket:%s, fd:%d failed, errno:%d", name, s, errno);
-    close(s);
-    return -1;
-}
-static inline int accept_server_socket(int s)
-{
-    struct sockaddr_un client_address;
-    socklen_t clen;
-    int fd = accept(s, (struct sockaddr*)&client_address, &clen);
-    APPL_TRACE_DEBUG("accepted fd:%d for server fd:%d", fd, s);
-    return fd;
-}
 static inline pthread_t create_thread(void *(*start_routine)(void *), void * arg)
 {
     pthread_attr_t thread_attr;
@@ -223,7 +174,6 @@
 }
 int btsock_thread_create(btsock_signaled_cb callback, btsock_cmd_cb cmd_callback)
 {
-    int ret = FALSE;
     asrt(callback || cmd_callback);
     lock_slot(&thread_slot_lock);
     int h = alloc_thread_slot();
diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c
index d3ecc45..55e6a26 100644
--- a/btif/src/btif_storage.c
+++ b/btif/src/btif_storage.c
@@ -440,7 +440,6 @@
 static bt_status_t btif_in_fetch_bonded_device(char *bdstr)
 {
     BOOLEAN bt_linkkey_file_found=FALSE;
-    int device_type;
 
         int type = BTIF_CFG_TYPE_BIN;
         LINK_KEY link_key;
@@ -489,7 +488,7 @@
     BTIF_TRACE_DEBUG("in add:%d", add);
     memset(p_bonded_devices, 0, sizeof(btif_bonded_devices_t));
 
-    char kname[128], vname[128];
+    char kname[128];
     short kpos;
     int kname_size;
     kname_size = sizeof(kname);
@@ -590,7 +589,6 @@
     /* Special handling for adapter BD_ADDR and BONDED_DEVICES */
     if (property->type == BT_PROPERTY_BDADDR)
     {
-        BD_ADDR addr;
         bt_bdaddr_t *bd_addr = (bt_bdaddr_t*)property->val;
         /* This has been cached in btif. Just fetch it from there */
         memcpy(bd_addr, &btif_local_bd_addr, sizeof(bt_bdaddr_t));
@@ -834,7 +832,6 @@
 *******************************************************************************/
 bt_status_t btif_storage_load_bonded_devices(void)
 {
-    char *fname;
     btif_bonded_devices_t bonded_devices;
     uint32_t i = 0;
     bt_property_t adapter_props[6];
@@ -1413,12 +1410,11 @@
 {
     bt_bdaddr_t bd_addr;
     tBTA_HH_DEV_DSCP_INFO dscp_info;
-    uint32_t i;
     uint16_t attr_mask;
     uint8_t  sub_class;
     uint8_t  app_id;
 
-    char kname[128], vname[128];
+    char kname[128];
     short kpos;
     int kname_size;
     kname_size = sizeof(kname);
@@ -1505,8 +1501,6 @@
 *******************************************************************************/
 bt_status_t btif_storage_remove_hid_info(bt_bdaddr_t *remote_bd_addr)
 {
-    char *fname;
-    int ret;
     bdstr_t bdstr;
     bd2str(remote_bd_addr, &bdstr);
 
@@ -1630,10 +1624,8 @@
 BOOLEAN  btif_storage_is_device_autopair_blacklisted(bt_bdaddr_t *remote_bd_addr)
 {
     char *token;
-    int ret;
     bdstr_t bdstr;
     char *dev_name_str;
-    uint8_t i = 0;
     char value[BTIF_STORAGE_MAX_LINE_SZ];
     int value_size = sizeof(value);
 
@@ -1735,10 +1727,7 @@
 *******************************************************************************/
 BOOLEAN btif_storage_is_fixed_pin_zeros_keyboard(bt_bdaddr_t *remote_bd_addr)
 {
-    int ret;
     bdstr_t bdstr;
-    char *dev_name_str;
-    uint8_t i = 0;
     char linebuf[BTIF_STORAGE_MAX_LINE_SZ];
 
     bd2str(remote_bd_addr, &bdstr);
