msmcobalt: Update to LA.UM.5.7_RB1.07.00.00.251.006

msmcobalt: from hardware/qcom/bt
  5af5ba4 Promotion of bt.lnx.2.1-00035.
  cb1c424 BT: Modify implementation for command timeout crashdump collection
  d56edb0 Promotion of bt.lnx.2.1-00032.
  e5a8533 Add ioctl to do power control ops for connectivity chips
  eaa36e0 Remove tcflush during BT_ON

Bug: 33405777
Change-Id: I54c3694c1469b7cc7aed3174b9b45b8949295339
Signed-off-by: Thierry Strudel <tstrudel@google.com>
diff --git a/msmcobalt/libbt-vendor/Android.mk b/msmcobalt/libbt-vendor/Android.mk
index 27f8c4d..671a58e 100644
--- a/msmcobalt/libbt-vendor/Android.mk
+++ b/msmcobalt/libbt-vendor/Android.mk
@@ -37,6 +37,7 @@
 
 ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
 LOCAL_CFLAGS += -DPANIC_ON_SOC_CRASH
+LOCAL_CFLAGS += -DENABLE_DBG_FLAGS
 endif
 
 LOCAL_C_INCLUDES += \
diff --git a/msmcobalt/libbt-vendor/include/bt_vendor_qcom.h b/msmcobalt/libbt-vendor/include/bt_vendor_qcom.h
index ac8d2fd..c71ce8a 100644
--- a/msmcobalt/libbt-vendor/include/bt_vendor_qcom.h
+++ b/msmcobalt/libbt-vendor/include/bt_vendor_qcom.h
@@ -63,6 +63,7 @@
 #define HCI_CMD_PREAMBLE_SIZE 3
 #define HCI_EVT_CMD_CMPL_STATUS_RET_BYTE   5
 #define HCI_EVT_CMD_CMPL_OPCODE        3
+#define BT_PWR_CNTRL_DEVICE    "/dev/btpower"
 
 enum {
     BT_STATUS_SUCCESS = 0,
@@ -71,7 +72,7 @@
     BT_STATUS_NOMEM,
     BT_STATUS_PROP_FAILURE,
 };
-
+#define BT_CMD_PWR_CTRL         0xbfad
 struct bt_qcom_struct {
     int fd[2];
     int ant_fd;
diff --git a/msmcobalt/libbt-vendor/src/bt_vendor_qcom.c b/msmcobalt/libbt-vendor/src/bt_vendor_qcom.c
index 278e897..2d4d689 100644
--- a/msmcobalt/libbt-vendor/src/bt_vendor_qcom.c
+++ b/msmcobalt/libbt-vendor/src/bt_vendor_qcom.c
@@ -33,6 +33,7 @@
 #include "bt_vendor_qcom.h"
 #include "hci_uart.h"
 #include "hci_smd.h"
+#include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <cutils/sockets.h>
 #include <linux/un.h>
@@ -380,7 +381,7 @@
 {
     char rfkill_type[64], *enable_ldo_path = NULL;
     char type[16], enable_ldo[6];
-    int fd = 0, size, i, ret, fd_ldo;
+    int fd = 0, size, i, ret, fd_ldo, fd_btpower;
 
     char disable[PROPERTY_VALUE_MAX];
     char state;
@@ -489,20 +490,36 @@
         property_set("wc_transport.soc_initialized", "0");
     }
 
-    ALOGI("Write %c to rfkill\n", on);
-
-    /* Write value to control rfkill */
-    if(fd >= 0) {
-        if ((size = write(fd, &on, 1)) < 0) {
-            ALOGE("write(%s) failed: %s (%d)", q->rfkill_state, strerror(errno), errno);
+    if (q->soc_type >= BT_SOC_CHEROKEE && q->soc_type < BT_SOC_RESERVED) {
+       ALOGI("open bt power devnode,send ioctl power op  :%d ",en);
+       fd_btpower = open(BT_PWR_CNTRL_DEVICE, O_RDWR, O_NONBLOCK);
+       if (fd_btpower < 0) {
+           ALOGE("\nfailed to open bt device error = (%s)\n",strerror(errno));
 #ifdef WIFI_BT_STATUS_SYNC
-            bt_semaphore_release(lock_fd);
-            bt_semaphore_destroy(lock_fd);
+           bt_semaphore_release(lock_fd);
+           bt_semaphore_destroy(lock_fd);
 #endif
-            return -1;
+           return -1;
+       }
+       ret = ioctl(fd_btpower, BT_CMD_PWR_CTRL, (unsigned long)en);
+        if (ret < 0) {
+            ALOGE(" ioctl failed to power control:%d error =(%s)",ret,strerror(errno));
         }
-    }
-
+        close(fd_btpower);
+    } else {
+       ALOGI("Write %c to rfkill\n", on);
+       /* Write value to control rfkill */
+       if(fd >= 0) {
+           if ((size = write(fd, &on, 1)) < 0) {
+               ALOGE("write(%s) failed: %s (%d)", q->rfkill_state, strerror(errno), errno);
+#ifdef WIFI_BT_STATUS_SYNC
+               bt_semaphore_release(lock_fd);
+               bt_semaphore_destroy(lock_fd);
+#endif
+               return -1;
+           }
+       }
+   }
 #ifdef WIFI_BT_STATUS_SYNC
     /* query wifi status */
     property_get(WIFI_PROP_NAME, wifi_status, "");
@@ -545,7 +562,6 @@
 done:
     if (fd >= 0)
         close(fd);
-
     return 0;
 }
 
@@ -1422,6 +1438,9 @@
     int ret = 0;
     char value[PROPERTY_VALUE_MAX] = {'\0'};
     bool enabled = false;
+#ifdef ENABLE_DBG_FLAGS
+    enabled = true;
+#endif
 
     ret = property_get("wc_transport.force_special_byte", value, NULL);
 
diff --git a/msmcobalt/libbt-vendor/src/hw_rome.c b/msmcobalt/libbt-vendor/src/hw_rome.c
index 56c3b9a..ccfb137 100644
--- a/msmcobalt/libbt-vendor/src/hw_rome.c
+++ b/msmcobalt/libbt-vendor/src/hw_rome.c
@@ -1456,7 +1456,7 @@
 
     /* Total length of the packet to be sent to the Controller */
     size = (HCI_CMD_IND + HCI_COMMAND_HDR_SIZE + VSC_SET_BAUDRATE_REQ_LEN);
-    tcflush(fd,TCIOFLUSH);
+
     /* Flow off during baudrate change */
     if ((err = userial_vendor_ioctl(USERIAL_OP_FLOW_OFF , &flags)) < 0)
     {