diff --git a/Android.mk b/Android.mk
index 55b99cb..a8c40c8 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,6 +1,6 @@
 LOCAL_PATH := $(call my-dir)
 
-bdroid_CFLAGS := -Wno-unused-parameter
+bdroid_CFLAGS := -Wno-unused-parameter -Wno-missing-field-initializers
 
 # Setup bdroid local make variables for handling configuration
 ifneq ($(BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR),)
diff --git a/bta/av/bta_av_aact.c b/bta/av/bta_av_aact.c
index e8e5edc..f1aa795 100644
--- a/bta/av/bta_av_aact.c
+++ b/bta/av/bta_av_aact.c
@@ -1116,7 +1116,6 @@
     tAVDT_CFG            *p_evt_cfg = &p_data->str_msg.cfg;
     UINT8   psc_mask = (p_evt_cfg->psc_mask | p_scb->cfg.psc_mask);
     UINT8 local_sep;    /* sep type of local handle on which connection was received */
-    UINT8 count = 0;
     tBTA_AV_STR_MSG  *p_msg = (tBTA_AV_STR_MSG *)p_data;
     UNUSED(p_data);
 
diff --git a/bta/av/bta_av_api.c b/bta/av/bta_av_api.c
index 5aa401b..829c560 100644
--- a/bta/av/bta_av_api.c
+++ b/bta/av/bta_av_api.c
@@ -256,8 +256,6 @@
 *******************************************************************************/
 void BTA_AvEnable_Sink(int enable)
 {
-    BT_HDR  *p_buf;
-
 #if (BTA_AV_SINK_INCLUDED == TRUE)
     if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
     {
diff --git a/bta/dm/bta_dm_act.c b/bta/dm/bta_dm_act.c
index ed38b7e..4b893ea 100644
--- a/bta/dm/bta_dm_act.c
+++ b/bta/dm/bta_dm_act.c
@@ -113,7 +113,10 @@
     #endif
 static void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir);
 static void bta_dm_observe_cmpl_cb (void * p_result);
+
+#if BLE_VND_INCLUDED == TRUE
 static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result);
+#endif
 
 #ifndef BTA_DM_BLE_ADV_CHNL_MAP
 #define BTA_DM_BLE_ADV_CHNL_MAP (BTM_BLE_ADV_CHNL_37|BTM_BLE_ADV_CHNL_38|BTM_BLE_ADV_CHNL_39)
@@ -2198,8 +2201,6 @@
 {
 
     tSDP_UUID    uuid;
-    UINT16       attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, ATTR_ID_EXT_BRCM_VERSION};
-    UINT16       num_attrs = 1;
     tBTA_DM_MSG *p_msg;
 
     memset (&uuid, 0, sizeof(tSDP_UUID));
@@ -4755,7 +4756,6 @@
 ;
     tBTA_DM_SEARCH     result;
     tBTM_INQ_INFO      *p_inq_info;
-    UINT16             service_class;
     APPL_TRACE_DEBUG("bta_dm_observe_results_cb")
 
     bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr);
@@ -5285,7 +5285,6 @@
 void bta_dm_ble_multi_adv_enb(tBTA_DM_MSG *p_data)
 {
     tBTM_STATUS btm_status = 0;
-    void *p_ref = NULL;
 
     bta_dm_cb.p_multi_adv_cback = p_data->ble_multi_adv_enb.p_cback;
     if(BTM_BleMaxMultiAdvInstanceCount() > 0 && NULL != p_data->ble_multi_adv_enb.p_ref)
@@ -5600,27 +5599,6 @@
 
 /*******************************************************************************
 **
-** Function         bta_ble_status_cmpl
-**
-** Description      ADV payload filtering enable / disable complete callback
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-static void bta_ble_status_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_REF_VALUE ref_value,
-                                    tBTM_STATUS status)
-{
-    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
-
-    APPL_TRACE_DEBUG("bta_ble_status_cmpl: %d, %d", action, status);
-
-    if(bta_dm_cb.p_scan_filt_status_cback)
-       bta_dm_cb.p_scan_filt_status_cback(action, ref_value, st);
-}
-
-/*******************************************************************************
-**
 ** Function         bta_dm_cfg_filter_cond
 **
 ** Description      This function configure adv payload filtering condition
@@ -6113,6 +6091,7 @@
 
 #endif /* BTA_GATT_INCLUDED */
 
+#if BLE_VND_INCLUDED == TRUE
 /*******************************************************************************
 **
 ** Function         bta_dm_ctrl_features_rd_cmpl_cback
@@ -6136,6 +6115,6 @@
     }
 
 }
-
+#endif /* BLE_VND_INCLUDED */
 
 #endif  /* BLE_INCLUDED */
diff --git a/bta/dm/bta_dm_pm.c b/bta/dm/bta_dm_pm.c
index 6bf1697..e1826d8 100644
--- a/bta/dm/bta_dm_pm.c
+++ b/bta/dm/bta_dm_pm.c
@@ -154,7 +154,6 @@
 {
 
     UINT8 i,j;
-    UINT16 policy_setting;
     tBTM_STATUS btm_status;
     tBTM_VERSION_INFO vers;
 #if (BTM_SSR_INCLUDED == TRUE)
diff --git a/bta/gatt/bta_gattc_utils.c b/bta/gatt/bta_gattc_utils.c
index a7a9557..db4b6a3 100644
--- a/bta/gatt/bta_gattc_utils.c
+++ b/bta/gatt/bta_gattc_utils.c
@@ -944,7 +944,6 @@
 tBTA_GATTC_CLCB * bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA *p_msg)
 {
     tBTA_GATTC_CLCB         *p_clcb = NULL;
-    tGATT_DISCONN_REASON    reason = p_msg->int_conn.reason;
 
     bta_gattc_conn_dealloc(p_msg->int_conn.remote_bda);
     if ((p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->int_conn.hdr.layer_specific)) == NULL)
diff --git a/bta/gatt/bta_gatts_act.c b/bta/gatt/bta_gatts_act.c
index 20faa62..7dd3581 100644
--- a/bta/gatt/bta_gatts_act.c
+++ b/bta/gatt/bta_gatts_act.c
@@ -154,7 +154,6 @@
 void bta_gatts_api_disable(tBTA_GATTS_CB *p_cb)
 {
     UINT8 i;
-    tBTA_GATT_STATUS    status = BTA_GATT_OK;
 
     if (p_cb->enabled)
     {
diff --git a/bta/hf_client/bta_hf_client_act.c b/bta/hf_client/bta_hf_client_act.c
index 8e37909..5b70db2 100644
--- a/bta/hf_client/bta_hf_client_act.c
+++ b/bta/hf_client/bta_hf_client_act.c
@@ -264,7 +264,6 @@
 void bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA *p_data)
 {
     UINT16          lcid;
-    int             i;
     BD_ADDR         dev_addr;
     int             status;
 
@@ -392,7 +391,6 @@
 *******************************************************************************/
 void bta_hf_client_rfc_close(tBTA_HF_CLIENT_DATA *p_data)
 {
-    int i, num_active_conn = 0;
     UNUSED(p_data);
 
     /* reinitialize stuff */
diff --git a/bta/hf_client/bta_hf_client_api.c b/bta/hf_client/bta_hf_client_api.c
index 6fdad9a..2365e9d 100644
--- a/bta/hf_client/bta_hf_client_api.c
+++ b/bta/hf_client/bta_hf_client_api.c
@@ -59,7 +59,6 @@
 BTA_API tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK *p_cback)
 {
     tBTA_HF_CLIENT_API_ENABLE  *p_buf;
-    UINT8       idx;
 
     if (bta_sys_is_register (BTA_ID_HS))
     {
diff --git a/bta/hf_client/bta_hf_client_rfc.c b/bta/hf_client/bta_hf_client_rfc.c
index 4c73b5a..43a3e0c 100644
--- a/bta/hf_client/bta_hf_client_rfc.c
+++ b/bta/hf_client/bta_hf_client_rfc.c
@@ -145,7 +145,6 @@
 *******************************************************************************/
 void bta_hf_client_start_server(void)
 {
-    int i;
     int port_status;
 
     if (bta_hf_client_cb.scb.serv_handle > 0)
diff --git a/bta/hf_client/bta_hf_client_sdp.c b/bta/hf_client/bta_hf_client_sdp.c
index a19912c..fd55a6c 100644
--- a/bta/hf_client/bta_hf_client_sdp.c
+++ b/bta/hf_client/bta_hf_client_sdp.c
@@ -94,7 +94,6 @@
     UINT16              version;
     UINT16              profile_uuid;
     BOOLEAN             result = TRUE;
-    BOOLEAN             codec_supported = FALSE;
     UINT8               buf[2];
     UINT16              sdp_features = 0;
 
diff --git a/bta/hh/bta_hh_le.c b/bta/hh/bta_hh_le.c
index 7cbf09c..df541af 100644
--- a/bta/hh/bta_hh_le.c
+++ b/bta/hh/bta_hh_le.c
@@ -2405,7 +2405,6 @@
 void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data)
 {
     tBTA_HH_CONN            conn_dat ;
-    tBTA_HH_LE_HID_SRVC     *p_hid_srvc = &p_cb->hid_srvc[0];
 
     /* open failure in the middle of service discovery, clear all services */
     if (p_cb->disc_active & BTA_HH_LE_DISC_HIDS)
diff --git a/bta/hl/bta_hl_utils.c b/bta/hl/bta_hl_utils.c
index 3a5df45..6c67e2f 100644
--- a/bta/hl/bta_hl_utils.c
+++ b/bta/hl/bta_hl_utils.c
@@ -1604,7 +1604,6 @@
 *******************************************************************************/
 void  bta_hl_compact_mdl_cfg_time(UINT8 app_idx, UINT8 mdep_id)
 {
-    tBTA_HL_APP_CB      *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx);
     tBTA_HL_MDL_CFG     *p_mdl;
     UINT8 i, time_min, cnt=0;
     UINT8   s_arr[BTA_HL_NUM_MDL_CFGS];
@@ -1703,8 +1702,6 @@
     tBTA_HL_MDL_CFG     *p_mdl;
     BOOLEAN             success = FALSE;
     UINT8               i;
-    tBTA_HL_APP_CB      *p_acb= BTA_HL_GET_APP_CB_PTR(app_idx);
-    UINT8               app_id = p_acb->app_id;
 
     for (i = 0; i< BTA_HL_NUM_MDL_CFGS; i++)
     {
diff --git a/bta/include/bta_api.h b/bta/include/bta_api.h
index 22eab79..aef2606 100644
--- a/bta/include/bta_api.h
+++ b/bta/include/bta_api.h
@@ -960,20 +960,10 @@
 #define BTA_DM_BLE_PF_CONFIG_EVT       BTM_BLE_PF_CONFIG
 typedef UINT8 tBTA_DM_BLE_PF_EVT;
 
-typedef UINT8   tBTA_DM_BLE_PF_COND_TYPE;
-
-#define BTA_DM_BLE_PF_LOGIC_OR              0
-#define BTA_DM_BLE_PF_LOGIC_AND             1
-typedef UINT8 tBTA_DM_BLE_PF_LOGIC_TYPE;
-
 #define BTA_DM_BLE_PF_ENABLE       1
 #define BTA_DM_BLE_PF_CONFIG       2
 typedef UINT8 tBTA_DM_BLE_PF_ACTION;
 
-typedef UINT8 tBTA_DM_BLE_PF_FILT_INDEX;
-
-typedef UINT8 tBTA_DM_BLE_PF_AVBL_SPACE;
-
 /* Config callback */
 typedef void (tBTA_DM_BLE_PF_CFG_CBACK) (tBTA_DM_BLE_PF_ACTION action,
                                          tBTA_DM_BLE_PF_COND_TYPE cfg_cond,
diff --git a/bta/jv/bta_jv_act.c b/bta/jv/bta_jv_act.c
index 3419089..8bcb7c6 100644
--- a/bta/jv/bta_jv_act.c
+++ b/bta/jv/bta_jv_act.c
@@ -546,8 +546,6 @@
             /* rfc handle bd addr retrieval requires core stack handle */
             if (bRfcHandle)
             {
-                UINT32 hi = ((jv_handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1;
-                UINT32 si = BTA_JV_RFC_HDL_TO_SIDX(jv_handle);
                 for (j = 0; j < BTA_JV_MAX_RFC_CONN; j++)
                 {
                     if (jv_handle == bta_jv_cb.port_cb[j].handle)
@@ -2145,8 +2143,6 @@
     tBTA_JV evt_data;
     BD_ADDR rem_bda;
     UINT16 lcid;
-    UINT8  num;
-    UINT32  si;
     APPL_TRACE_DEBUG("bta_jv_port_mgmt_sr_cback, code:%d, port_handle:%d", code, port_handle);
     if(NULL == p_cb || NULL == p_cb->p_cback)
     {
diff --git a/btif/co/bta_av_co.c b/btif/co/bta_av_co.c
index 985d39f..e0d7e4a 100644
--- a/btif/co/bta_av_co.c
+++ b/btif/co/bta_av_co.c
@@ -463,7 +463,6 @@
     BOOLEAN supported;
     tBTA_AV_CO_PEER *p_peer;
     tBTA_AV_CO_SINK *p_src;
-    UINT8 codec_cfg[AVDT_CODEC_SIZE];
     UINT8 pref_cfg[AVDT_CODEC_SIZE];
     UINT8 index;
 
diff --git a/btif/co/bta_fs_co.c b/btif/co/bta_fs_co.c
index 54bb87e..e85e9f9 100644
--- a/btif/co/bta_fs_co.c
+++ b/btif/co/bta_fs_co.c
@@ -560,7 +560,6 @@
 tBTA_FS_CO_STATUS bta_fs_co_access(const char *p_path, int mode, BOOLEAN *p_is_dir,
                                    UINT8 app_id)
 {
-    int err;
     int os_mode = 0;
     tBTA_FS_CO_STATUS status = BTA_FS_CO_OK;
     struct stat buffer;
diff --git a/btif/co/bta_pan_co.c b/btif/co/bta_pan_co.c
index ad0c796..631ffbe 100644
--- a/btif/co/bta_pan_co.c
+++ b/btif/co/bta_pan_co.c
@@ -159,7 +159,6 @@
 void bta_pan_co_tx_path(UINT16 handle, UINT8 app_id)
 {
     BT_HDR          *p_buf;
-    UINT8           i;
     BD_ADDR            src;
     BD_ADDR            dst;
     UINT16            protocol;
diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c
index 629f4c6..7e7ffbd 100644
--- a/btif/src/btif_config.c
+++ b/btif/src/btif_config.c
@@ -494,7 +494,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)))
     {
@@ -617,7 +616,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;
@@ -655,7 +653,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);
@@ -808,7 +805,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 2957847..ab2da46 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.*/
@@ -1197,11 +1194,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;
 
@@ -1349,9 +1344,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;
 
@@ -1485,7 +1479,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));
@@ -1528,7 +1521,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;
@@ -2467,8 +2459,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)
     {
@@ -2847,8 +2837,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 084950d..313d5fb 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 2a61cc8..b32b8b5 100644
--- a/btif/src/btif_gatt_multi_adv_util.c
+++ b/btif/src/btif_gatt_multi_adv_util.c
@@ -253,7 +253,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 001fb0b..03c208c 100644
--- a/btif/src/btif_gatt_util.c
+++ b/btif/src/btif_gatt_util.c
@@ -237,7 +237,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 99b0840..176643e 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;
@@ -1183,7 +1179,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 e5ea51a..1942122 100644
--- a/btif/src/btif_media_task.c
+++ b/btif/src/btif_media_task.c
@@ -1031,7 +1031,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 ##");
@@ -1085,8 +1084,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 5b1bf96..d9898cb 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];
@@ -1420,12 +1417,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);
@@ -1512,8 +1508,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);
 
@@ -1637,10 +1631,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);
 
@@ -1742,10 +1734,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);
diff --git a/gki/common/gki_buffer.c b/gki/common/gki_buffer.c
index 0ce98a1..1d176b3 100644
--- a/gki/common/gki_buffer.c
+++ b/gki/common/gki_buffer.c
@@ -22,9 +22,6 @@
 #error Number of pools out of range (16 Max)!
 #endif
 
-static void gki_add_to_pool_list(UINT8 pool_id);
-static void gki_remove_from_pool_list(UINT8 pool_id);
-
 /*******************************************************************************
 **
 ** Function         gki_init_free_queue
@@ -1024,70 +1021,6 @@
 
 /*******************************************************************************
 **
-** Function         gki_add_to_pool_list
-**
-** Description      Adds pool to the pool list which is arranged in the
-**                  order of size
-**
-** Returns          void
-**
-*******************************************************************************/
-static void gki_add_to_pool_list(UINT8 pool_id)
-{
-
-    INT32 i, j;
-    tGKI_COM_CB *p_cb = &gki_cb.com;
-
-     /* Find the position where the specified pool should be inserted into the list */
-    for(i=0; i < p_cb->curr_total_no_of_pools; i++)
-    {
-
-        if(p_cb->freeq[pool_id].size <= p_cb->freeq[ p_cb->pool_list[i] ].size)
-            break;
-    }
-
-    /* Insert the new buffer pool ID into the list of pools */
-    for(j = p_cb->curr_total_no_of_pools; j > i; j--)
-    {
-        p_cb->pool_list[j] = p_cb->pool_list[j-1];
-    }
-
-    p_cb->pool_list[i] = pool_id;
-
-    return;
-}
-
-/*******************************************************************************
-**
-** Function         gki_remove_from_pool_list
-**
-** Description      Removes pool from the pool list. Called when a pool is deleted
-**
-** Returns          void
-**
-*******************************************************************************/
-static void gki_remove_from_pool_list(UINT8 pool_id)
-{
-    tGKI_COM_CB *p_cb = &gki_cb.com;
-    UINT8 i;
-
-    for(i=0; i < p_cb->curr_total_no_of_pools; i++)
-    {
-        if(pool_id == p_cb->pool_list[i])
-            break;
-    }
-
-    while (i < (p_cb->curr_total_no_of_pools - 1))
-    {
-        p_cb->pool_list[i] = p_cb->pool_list[i+1];
-        i++;
-    }
-
-    return;
-}
-
-/*******************************************************************************
-**
 ** Function         GKI_igetpoolbuf
 **
 ** Description      Called by an interrupt service routine to get a free buffer from
diff --git a/gki/common/gki_time.c b/gki/common/gki_time.c
index aa95195..5c35726 100644
--- a/gki/common/gki_time.c
+++ b/gki/common/gki_time.c
@@ -698,8 +698,6 @@
 *******************************************************************************/
 BOOLEAN GKI_remove_from_timer_list (TIMER_LIST_Q *p_timer_listq, TIMER_LIST_ENT  *p_tle)
 {
-    UINT8 tt;
-
     /* Verify that the entry is valid */
     if (p_tle == NULL || p_timer_listq->p_first == NULL)
         return FALSE;
diff --git a/gki/ulinux/gki_ulinux.c b/gki/ulinux/gki_ulinux.c
index db1409b..51038d6 100644
--- a/gki/ulinux/gki_ulinux.c
+++ b/gki/ulinux/gki_ulinux.c
@@ -367,8 +367,6 @@
 *******************************************************************************/
 UINT8 GKI_create_task (TASKPTR task_entry, UINT8 task_id, INT8 *taskname, UINT16 *stack, UINT16 stacksize)
 {
-    UINT16  i;
-    UINT8   *p;
     struct sched_param param;
     int policy, ret = 0;
     pthread_attr_t attr1;
@@ -1050,7 +1048,6 @@
 void GKI_exception (UINT16 code, char *msg)
 {
     UINT8 task_id;
-    int i = 0;
 
     ALOGE( "GKI_exception(): Task State Table");
 
diff --git a/main/bte_main.c b/main/bte_main.c
index 75cc440..688c2b1 100755
--- a/main/bte_main.c
+++ b/main/bte_main.c
@@ -777,7 +777,6 @@
 ******************************************************************************/
 static int data_ind(TRANSAC transac, char *p_buf, int len)
 {
-    BT_HDR *p_msg = (BT_HDR *) transac;
     UNUSED(p_buf);
     UNUSED(len);
 
diff --git a/osi/src/fixed_queue.c b/osi/src/fixed_queue.c
index 2d64367..b27659c 100644
--- a/osi/src/fixed_queue.c
+++ b/osi/src/fixed_queue.c
@@ -25,13 +25,13 @@
 #include "osi.h"
 #include "semaphore.h"
 
-typedef struct fixed_queue_t {
+struct fixed_queue_t {
   list_t *list;
   semaphore_t *enqueue_sem;
   semaphore_t *dequeue_sem;
   pthread_mutex_t lock;
   size_t capacity;
-} fixed_queue_t;
+};
 
 fixed_queue_t *fixed_queue_new(size_t capacity) {
   fixed_queue_t *ret = calloc(1, sizeof(fixed_queue_t));
diff --git a/osi/src/list.c b/osi/src/list.c
index 691f039..bfdbb1a 100644
--- a/osi/src/list.c
+++ b/osi/src/list.c
@@ -3,17 +3,17 @@
 #include "list.h"
 #include "osi.h"
 
-typedef struct list_node_t {
+struct list_node_t {
   struct list_node_t *next;
   void *data;
-} list_node_t;
+};
 
-typedef struct list_t {
+struct list_t {
   list_node_t *head;
   list_node_t *tail;
   size_t length;
   list_free_cb free_cb;
-} list_t;
+};
 
 static list_node_t *list_free_node_(list_t *list, list_node_t *node);
 
diff --git a/stack/avrc/avrc_pars_ct.c b/stack/avrc/avrc_pars_ct.c
index 143ce81..f268800 100644
--- a/stack/avrc/avrc_pars_ct.c
+++ b/stack/avrc/avrc_pars_ct.c
@@ -45,14 +45,6 @@
     tAVRC_STS  status = AVRC_STS_NO_ERROR;
     UINT8   *p = p_msg->p_vendor_data;
     UINT16  len;
-    UINT8   xx, yy;
-    tAVRC_NOTIF_RSP_PARAM   *p_param;
-    tAVRC_APP_SETTING       *p_app_set;
-    tAVRC_APP_SETTING_TEXT  *p_app_txt;
-    tAVRC_ATTR_ENTRY        *p_entry;
-    UINT32  *p_u32;
-    UINT8   *p_u8;
-    UINT16  size_needed;
     UINT8 eventid=0;
 
     BE_STREAM_TO_UINT8 (p_result->pdu, p);
diff --git a/stack/btm/btm_acl.c b/stack/btm/btm_acl.c
index fa742e5..9b2c990 100644
--- a/stack/btm/btm_acl.c
+++ b/stack/btm/btm_acl.c
@@ -210,7 +210,6 @@
                       UINT16 hci_handle, UINT8 link_role, tBT_TRANSPORT transport)
 {
     tBTM_SEC_DEV_REC *p_dev_rec = NULL;
-    UINT8             yy;
     tACL_CONN        *p;
     UINT8             xx;
 
@@ -2446,8 +2445,6 @@
 
 BOOLEAN BTM_TryAllocateSCN(UINT8 scn)
 {
-    UINT8   x;
-
     /* Make sure we don't exceed max port range.
      * Stack reserves scn 1 for HFP, HSP we still do the correct way.
      */
diff --git a/stack/btm/btm_ble.c b/stack/btm/btm_ble.c
index 58d3971..1552c4e 100644
--- a/stack/btm/btm_ble.c
+++ b/stack/btm/btm_ble.c
@@ -692,7 +692,6 @@
 void btm_ble_test_command_complete(UINT8 *p)
 {
     tBTM_CMPL_CB   *p_cb = btm_cb.devcb.p_le_test_cmd_cmpl_cb;
-    UINT8           status;
 
     btm_cb.devcb.p_le_test_cmd_cmpl_cb = NULL;
 
diff --git a/stack/btm/btm_ble_batchscan.c b/stack/btm/btm_ble_batchscan.c
index 7ae4b1e..b2181c8 100644
--- a/stack/btm/btm_ble_batchscan.c
+++ b/stack/btm/btm_ble_batchscan.c
@@ -318,7 +318,6 @@
     UINT8  *p = p_params->p_param_buf;
     UINT16  len = p_params->param_len;
     tBTM_BLE_REF_VALUE ref_value = 0;
-    int index = 0;
 
     UINT8  status = 0, subcode = 0, opcode = 0;
     UINT8 report_format = 0, num_records = 0, cb_evt = 0;
@@ -801,7 +800,7 @@
     tBTM_STATUS     status = BTM_NO_RESOURCES;
     tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
     UINT8 read_scan_mode = 0;
-    UINT8  *p_data = NULL, report_format = 0, num_records = 0;
+    UINT8  *p_data = NULL, num_records = 0;
     UINT16 data_len = 0;
 
     BTM_TRACE_EVENT (" BTM_BleReadScanReports; %d, %d", scan_mode, ref_value);
diff --git a/stack/btm/btm_ble_gap.c b/stack/btm/btm_ble_gap.c
index 8549fcd..902c776 100644
--- a/stack/btm/btm_ble_gap.c
+++ b/stack/btm/btm_ble_gap.c
@@ -54,8 +54,9 @@
 #define BTM_EXT_BLE_RMT_NAME_TIMEOUT        30
 #define MIN_ADV_LENGTH                       2
 
-static tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
+#if BLE_VND_INCLUDED == TRUE
 static tBTM_BLE_CTRL_FEATURES_CBACK    *p_ctrl_le_feature_rd_cmpl_cback = NULL;
+#endif
 
 /*******************************************************************************
 **  Local functions
@@ -422,6 +423,7 @@
     return status;
 }
 
+#if BLE_VND_INCLUDED == TRUE
 /*******************************************************************************
 **
 ** Function         btm_vsc_brcm_features_complete
@@ -433,7 +435,6 @@
 *******************************************************************************/
 static void btm_ble_vendor_capability_vsc_cmpl_cback (tBTM_VSC_CMPL *p_vcs_cplt_params)
 {
-#if BLE_VND_INCLUDED == TRUE
     UINT8  status = 0xFF, *p;
 
     BTM_TRACE_DEBUG("btm_ble_vendor_capability_vsc_cmpl_cback");
@@ -479,11 +480,8 @@
 
     if (p_ctrl_le_feature_rd_cmpl_cback != NULL)
         p_ctrl_le_feature_rd_cmpl_cback(status);
-
-#else
-    UNUSED(p_vcs_cplt_params);
-#endif
 }
+#endif
 
 /*******************************************************************************
 **
@@ -3111,8 +3109,6 @@
 BOOLEAN btm_ble_topology_check(tBTM_BLE_STATE_MASK request_state_mask)
 {
     BOOLEAN rt = FALSE;
-    UINT32  llt_mask = 0;
-    UINT8   *p;
 
     UINT8   state_offset = 0;
     UINT16  cur_states = btm_cb.ble_ctr_cb.cur_states;
diff --git a/stack/btm/btm_ble_multi_adv.c b/stack/btm/btm_ble_multi_adv.c
index 6876726..1ca6cd3 100644
--- a/stack/btm/btm_ble_multi_adv.c
+++ b/stack/btm/btm_ble_multi_adv.c
@@ -362,7 +362,6 @@
 void btm_ble_multi_adv_gen_rpa_cmpl(tBTM_RAND_ENC *p)
 {
 #if (SMP_INCLUDED == TRUE)
-    tBTM_LE_RANDOM_CB *p_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb;
     tSMP_ENC    output;
     UINT8 index = 0;
     tBTM_BLE_MULTI_ADV_INST *p_inst = NULL;
diff --git a/stack/btm/btm_devctl.c b/stack/btm/btm_devctl.c
index 910a892..f001c5f 100644
--- a/stack/btm/btm_devctl.c
+++ b/stack/btm/btm_devctl.c
@@ -985,9 +985,6 @@
 *******************************************************************************/
 static void btm_decode_ext_features_page (UINT8 page_number, const UINT8 *p_features)
 {
-    UINT8 last;
-    UINT8 first;
-
     BTM_TRACE_DEBUG ("btm_decode_ext_features_page page: %d", page_number);
     switch (page_number)
     {
@@ -1423,8 +1420,6 @@
 *******************************************************************************/
 void btm_read_local_ext_features_complete (UINT8 *p, UINT16 evt_len)
 {
-    tBTM_DEVCB     *p_devcb = &btm_cb.devcb;
-    tBTM_CMPL_CB   *p_cb = p_devcb->p_reset_cmpl_cb;
     UINT8           status;
     UINT8           page_number;
     UINT8           page_number_max;
diff --git a/stack/btm/btm_inq.c b/stack/btm/btm_inq.c
index 6e7ad87..4cabf25 100644
--- a/stack/btm/btm_inq.c
+++ b/stack/btm/btm_inq.c
@@ -2715,7 +2715,7 @@
          /* Note: If part of the inquiry, the name is not stored, and the    */
          /*       inquiry complete callback is called.                       */
 
-        if ((hci_status == HCI_SUCCESS))
+        if (hci_status == HCI_SUCCESS)
         {
             /* Copy the name from the data stream into the return structure */
             /* Note that even if it is not being returned, it is used as a  */
diff --git a/stack/btm/btm_sec.c b/stack/btm/btm_sec.c
index 9d7bf5a..f6810fe 100644
--- a/stack/btm/btm_sec.c
+++ b/stack/btm/btm_sec.c
@@ -394,8 +394,6 @@
 *******************************************************************************/
 void BTM_SetSecurityMode (UINT8 security_mode)
 {
-    UINT8   old_mode = btm_cb.security_mode;
-
     UINT8   sp_mode = HCI_SP_MODE_ENABLED;
     UINT8   sp_debug_mode = HCI_SPD_MODE_DISABLED;
 
@@ -5863,7 +5861,7 @@
 
     return("???");
 #else
-    sprintf(btm_cb.state_temp_buffer,"%hu",state);
+    sprintf(btm_cb.state_temp_buffer,"%hhu",state);
 
     return(btm_cb.state_temp_buffer);
 #endif
diff --git a/stack/btu/btu_task.c b/stack/btu/btu_task.c
index 16c671c..f93e637 100644
--- a/stack/btu/btu_task.c
+++ b/stack/btu/btu_task.c
@@ -583,7 +583,6 @@
         if (event & TIMER_3_EVT_MASK) {
             BTM_TRACE_API("Received oneshot timer event complete");
             if (!GKI_timer_queue_is_empty(&btu_cb.timer_queue_oneshot)) {
-                TIMER_LIST_ENT *p_tle = GKI_timer_getfirst(&btu_cb.timer_queue_oneshot);
                 INT32 ticks_since_last_update = GKI_timer_ticks_getinitial(GKI_timer_getfirst(&btu_cb.timer_queue_oneshot));
                 GKI_update_timer_list(&btu_cb.timer_queue_oneshot, ticks_since_last_update);
             }
diff --git a/stack/gap/gap_conn.c b/stack/gap/gap_conn.c
index d1e96d8..6bab72d 100644
--- a/stack/gap/gap_conn.c
+++ b/stack/gap/gap_conn.c
@@ -125,7 +125,6 @@
 {
     tGAP_CCB    *p_ccb;
     UINT16       cid;
-    tBT_UUID    bt_uuid = {2, {GAP_PROTOCOL_ID}};
 
     GAP_TRACE_EVENT ("GAP_CONN - Open Request");
 
@@ -728,7 +727,6 @@
 {
     UINT16       xx;
     tGAP_CCB     *p_ccb;
-    tBT_UUID    bt_uuid = {2, {GAP_PROTOCOL_ID}};
 
     /* See if we have a CCB listening for the connection */
     for (xx = 0, p_ccb = gap_cb.conn.ccb_pool; xx < GAP_MAX_CONNECTIONS; xx++, p_ccb++)
diff --git a/stack/gatt/gatt_sr.c b/stack/gatt/gatt_sr.c
index eac00db..dafaf30 100755
--- a/stack/gatt/gatt_sr.c
+++ b/stack/gatt/gatt_sr.c
@@ -332,7 +332,6 @@
 {
     UINT8   *p = p_data, flag, i = 0;
     UINT32  trans_id = 0;
-    BT_HDR  *p_buf;
     tGATT_IF gatt_if;
     UINT16  conn_id;
 
diff --git a/stack/hid/hidh_conn.c b/stack/hid/hidh_conn.c
index 853e3ed..3a354cc 100644
--- a/stack/hid/hidh_conn.c
+++ b/stack/hid/hidh_conn.c
@@ -324,7 +324,6 @@
 #if (HID_HOST_MAX_CONN_RETRY > 0)
     UINT32 cb_res = HID_ERR_AUTH_FAILED;
 #endif
-    UINT32 reason;
     UNUSED(bd_addr);
     UNUSED (transport);
 
diff --git a/stack/l2cap/l2c_api.c b/stack/l2cap/l2c_api.c
index 3d228d8..b53eff0 100644
--- a/stack/l2cap/l2c_api.c
+++ b/stack/l2cap/l2c_api.c
@@ -1317,7 +1317,6 @@
 {
     tL2C_LCB        *p_lcb;
     tBT_TRANSPORT   transport = BT_TRANSPORT_BR_EDR;
-    UINT16          reason;
 
     L2CAP_TRACE_API  ("L2CA_ConnectFixedChnl()  CID: 0x%04x  BDA: %08x%04x", fixed_cid,
                     (rem_bda[0]<<24)+(rem_bda[1]<<16)+(rem_bda[2]<<8)+rem_bda[3], (rem_bda[4]<<8)+rem_bda[5]);
diff --git a/stack/l2cap/l2c_main.c b/stack/l2cap/l2c_main.c
index 325f7af..c2531a7 100755
--- a/stack/l2cap/l2c_main.c
+++ b/stack/l2cap/l2c_main.c
@@ -327,7 +327,7 @@
     tL2CAP_CFG_INFO cfg_info;
     UINT16          rej_reason, rej_mtu, lcid, rcid, info_type;
     tL2C_CCB        *p_ccb;
-    tL2C_RCB        *p_rcb, *p_rcb2;
+    tL2C_RCB        *p_rcb;
     BOOLEAN         cfg_rej, pkt_size_rej = FALSE;
     UINT16          cfg_rej_len, cmd_len;
     UINT16          result;
diff --git a/stack/pan/pan_utils.c b/stack/pan/pan_utils.c
index 7a550fa..3c1f8b3 100644
--- a/stack/pan/pan_utils.c
+++ b/stack/pan/pan_utils.c
@@ -63,7 +63,6 @@
     UINT32  sdp_handle;
     UINT16  browse_list = UUID_SERVCLASS_PUBLIC_BROWSE_GROUP;
     UINT16  security = 0;
-    UINT8   availability;
     UINT32  proto_len = (UINT32)pan_proto_elem_data[1];
 
     /* Create a record */
diff --git a/stack/rfcomm/port_api.c b/stack/rfcomm/port_api.c
index 3643088..0cbae96 100644
--- a/stack/rfcomm/port_api.c
+++ b/stack/rfcomm/port_api.c
@@ -1487,7 +1487,6 @@
     UINT16     length;
 
     RFCOMM_TRACE_API ("PORT_WriteDataCO() handle:%d", handle);
-    int written;
     *p_len = 0;
 
     /* Check if handle is valid to avoid crashing */
diff --git a/stack/sdp/sdp_api.c b/stack/sdp/sdp_api.c
index 9b3628c..024a7bd 100644
--- a/stack/sdp/sdp_api.c
+++ b/stack/sdp/sdp_api.c
@@ -432,7 +432,7 @@
 BOOLEAN SDP_FindServiceUUIDInRec_128bit(tSDP_DISC_REC *p_rec, tBT_UUID * p_uuid)
 {
 #if SDP_CLIENT_ENABLED == TRUE
-    tSDP_DISC_ATTR  *p_attr, *p_sattr, *p_extra_sattr;
+    tSDP_DISC_ATTR  *p_attr, *p_sattr;
 
     p_attr = p_rec->p_first_attr;
 
@@ -597,7 +597,7 @@
 {
 #if SDP_CLIENT_ENABLED == TRUE
     tSDP_DISC_REC   *p_rec;
-    tSDP_DISC_ATTR  *p_attr, *p_sattr, *p_extra_sattr;
+    tSDP_DISC_ATTR  *p_attr, *p_sattr;
 
     /* Must have a valid database */
     if (p_db == NULL)
diff --git a/stack/sdp/sdp_discovery.c b/stack/sdp/sdp_discovery.c
index 3fca831..caeeccf 100644
--- a/stack/sdp/sdp_discovery.c
+++ b/stack/sdp/sdp_discovery.c
@@ -385,7 +385,6 @@
     UINT8           *p;
     UINT8           * p_temp;
     UINT8           type;
-    UINT32          delta_len = 0;
 
 #if (SDP_DEBUG_RAW == TRUE)
     UINT8 num_array[SDP_MAX_LIST_BYTE_COUNT];
diff --git a/stack/smp/smp_keys.c b/stack/smp/smp_keys.c
index 31313c9..ec7d129 100644
--- a/stack/smp/smp_keys.c
+++ b/stack/smp/smp_keys.c
@@ -53,21 +53,6 @@
 static void smp_process_compare(tSMP_CB *p_cb, tSMP_ENC *p);
 static void smp_process_ediv(tSMP_CB *p_cb, tSMP_ENC *p);
 
-static const tSMP_ACT smp_encrypt_action[] =
-{
-    smp_generate_compare,           /* SMP_GEN_COMPARE */
-    smp_genenrate_confirm,          /* SMP_GEN_CONFIRM*/
-    smp_generate_stk,               /* SMP_GEN_STK*/
-    smp_genenrate_ltk_cont,          /* SMP_GEN_LTK */
-    smp_generate_ltk,               /* SMP_GEN_DIV_LTK */
-    smp_generate_rand_vector,        /* SMP_GEN_RAND_V */
-    smp_generate_y,                  /* SMP_GEN_EDIV */
-    smp_generate_passkey,           /* SMP_GEN_TK */
-    smp_generate_confirm,           /* SMP_GEN_SRAND_MRAND */
-    smp_genenrate_rand_cont         /* SMP_GEN_SRAND_MRAND_CONT */
-};
-
-
     #define SMP_PASSKEY_MASK    0xfff00000
 
     #if SMP_DEBUG == TRUE
diff --git a/udrv/ulinux/uipc.c b/udrv/ulinux/uipc.c
index 81ca7f8..4906ad8 100644
--- a/udrv/ulinux/uipc.c
+++ b/udrv/ulinux/uipc.c
@@ -702,7 +702,6 @@
 UDRV_API BOOLEAN UIPC_Send(tUIPC_CH_ID ch_id, UINT16 msg_evt, UINT8 *p_buf,
         UINT16 msglen)
 {
-    int n;
     UNUSED(msg_evt);
 
     BTIF_TRACE_DEBUG("UIPC_Send : ch_id:%d %d bytes", ch_id, msglen);
diff --git a/vnd/ble/vendor_ble.c b/vnd/ble/vendor_ble.c
index 61d6780..bfdfc58 100644
--- a/vnd/ble/vendor_ble.c
+++ b/vnd/ble/vendor_ble.c
@@ -39,8 +39,6 @@
 tBTM_BLE_VENDOR_CB  btm_ble_vendor_cb;
 #endif
 
-static const BD_ADDR     na_bda= {0};
-
 /*******************************************************************************
 **         Resolve Address Using IRK List functions
 *******************************************************************************/
@@ -663,7 +661,6 @@
 #if BLE_PRIVACY_SPT == TRUE
     UINT8           param[20], *p;
     tBTM_STATUS     st = BTM_WRONG_MODE;
-    tBTM_BLE_PF_COUNT *p_bda_filter;
 
     if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
         return BTM_MODE_UNSUPPORTED;
