diff --git a/msm8992/libbt-vendor/src/hw_ar3k.c b/msm8992/libbt-vendor/src/hw_ar3k.c
index 9ca5b3c..dbe6b51 100644
--- a/msm8992/libbt-vendor/src/hw_ar3k.c
+++ b/msm8992/libbt-vendor/src/hw_ar3k.c
@@ -45,6 +45,7 @@
 #include <dirent.h>
 #include <ctype.h>
 #include <cutils/properties.h>
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 #include <termios.h>
@@ -434,19 +435,19 @@
 static int get_ps_type(char *ptr, int index, char *type, char *sub_type)
 {
     int i;
-    int delim = FALSE;
+    int delim = false;
 
     if (index > MAX_PREAMBLE_LEN)
         return -EILSEQ;
 
     for (i = 1; i < index; i++) {
         if (__is_delim(ptr[i])) {
-            delim = TRUE;
+            delim = true;
             continue;
         }
 
         if (isalpha(ptr[i])) {
-            if (delim == FALSE)
+            if (delim == false)
                 (*type) = toupper(ptr[i]);
             else
                 (*sub_type)	= toupper(ptr[i]);
@@ -471,7 +472,7 @@
     char sub_type = '\0';
 
     format->type = PS_HEX;
-    format->array = TRUE;
+    format->array = true;
 
     if (strstr(buf, "[") != buf)
         return 0;
@@ -485,10 +486,10 @@
 
     /* Check is data type is of array */
     if (type == ARRAY || sub_type == ARRAY)
-        format->array = TRUE;
+        format->array = true;
 
     if (type == STRING || sub_type == STRING)
-        format->array = FALSE;
+        format->array = false;
 
     if (type == DECIMAL || type == BINARY)
         format->type = PS_DEC;
@@ -517,7 +518,7 @@
         ptr++;
     }
 
-    if (type.type == PS_HEX && type.array != TRUE)
+    if (type.type == PS_HEX && type.array != true)
         return strtol(ptr, NULL, 16);
 
     return UNDEFINED;
@@ -630,7 +631,7 @@
             read_count = (byte_count > ENTRY_PER_LINE) ?
             ENTRY_PER_LINE : byte_count;
 
-            if (format.type == PS_HEX && format.array == TRUE) {
+            if (format.type == PS_HEX && format.array == true) {
                 while (read_count > 0) {
                     update_tag_data(tag, &status, ptr);
                     read_count -= 2;
diff --git a/msm8996/libbt-vendor/src/hw_ar3k.c b/msm8996/libbt-vendor/src/hw_ar3k.c
index 681cd09..f8e3342 100644
--- a/msm8996/libbt-vendor/src/hw_ar3k.c
+++ b/msm8996/libbt-vendor/src/hw_ar3k.c
@@ -437,19 +437,19 @@
 static int get_ps_type(char *ptr, int index, char *type, char *sub_type)
 {
     int i;
-    int delim = FALSE;
+    int delim = false;
 
     if (index > MAX_PREAMBLE_LEN)
         return -EILSEQ;
 
     for (i = 1; i < index; i++) {
         if (__is_delim(ptr[i])) {
-            delim = TRUE;
+            delim = true;
             continue;
         }
 
         if (isalpha(ptr[i])) {
-            if (delim == FALSE)
+            if (delim == false)
                 (*type) = toupper(ptr[i]);
             else
                 (*sub_type)	= toupper(ptr[i]);
@@ -474,7 +474,7 @@
     char sub_type = '\0';
 
     format->type = PS_HEX;
-    format->array = TRUE;
+    format->array = true;
 
     if (strstr(buf, "[") != buf)
         return 0;
@@ -488,10 +488,10 @@
 
     /* Check is data type is of array */
     if (type == ARRAY || sub_type == ARRAY)
-        format->array = TRUE;
+        format->array = true;
 
     if (type == STRING || sub_type == STRING)
-        format->array = FALSE;
+        format->array = false;
 
     if (type == DECIMAL || type == BINARY)
         format->type = PS_DEC;
@@ -520,7 +520,7 @@
         ptr++;
     }
 
-    if (type.type == PS_HEX && type.array != TRUE)
+    if (type.type == PS_HEX && type.array != true)
         return strtol(ptr, NULL, 16);
 
     return UNDEFINED;
@@ -633,7 +633,7 @@
             read_count = (byte_count > ENTRY_PER_LINE) ?
             ENTRY_PER_LINE : byte_count;
 
-            if (format.type == PS_HEX && format.array == TRUE) {
+            if (format.type == PS_HEX && format.array == true) {
                 while (read_count > 0) {
                     update_tag_data(tag, &status, ptr);
                     read_count -= 2;
