diff --git a/CORE/HDD/src/bap_hdd_main.c b/CORE/HDD/src/bap_hdd_main.c
index 86c77ee..b095b80 100644
--- a/CORE/HDD/src/bap_hdd_main.c
+++ b/CORE/HDD/src/bap_hdd_main.c
@@ -432,13 +432,13 @@
     WLANTL_MetaInfoType TlMetaInfo;
     pctx = &BslClientCtx[0];
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "WLANBAP_STAFetchPktCB\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "WLANBAP_STAFetchPktCB" );
 
     // sanity checking
     if( pHddHdl == NULL || vosDataBuff == NULL ||
             tlMetaInfo == NULL || ucAC >= WLANTL_MAX_AC || ucAC < 0 )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STAFetchPktCB bad input\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STAFetchPktCB bad input" );
         return VOS_STATUS_E_FAILURE;
     }
 
@@ -496,12 +496,12 @@
     if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
     {
         VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STAFetchPktCB vos_pkt_wrap_data_packet "
-             "failed status =%d\n", VosStatus );
+             "failed status =%d", VosStatus );
         kfree_skb(skb);  
         return VosStatus;
     }
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO, "%s: pVosPkt(vos_pkt_t *)=%p\n", __func__,
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO, "%s: pVosPkt(vos_pkt_t *)=%p", __func__,
                pVosPkt );
 
     VosStatus = WLANBAP_XlateTxDataPkt( pctx->bapHdl, pPhyCtx->PhyLinkHdl,
@@ -510,7 +510,7 @@
     if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
     {
         VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STAFetchPktCB WLANBAP_XlateTxDataPkt "
-             "failed status =%d\n", VosStatus );
+             "failed status =%d", VosStatus );
 
         // return the packet
         VosStatus = vos_pkt_return_packet( pVosPkt );
@@ -525,7 +525,7 @@
     // provide the meta-info BAP provided previously
     *tlMetaInfo = TlMetaInfo;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "%s: *vosDataBuff(vos_pkt_t *)=%p\n", __func__, *vosDataBuff );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "%s: *vosDataBuff(vos_pkt_t *)=%p", __func__, *vosDataBuff );
 
     return(VOS_STATUS_SUCCESS);
 } // WLANBAP_STAFetchPktCB()
@@ -561,12 +561,12 @@
     vos_pkt_t* pVosPacket;
     vos_pkt_t* pNextVosPacket;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "WLANBAP_STARxCB\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "WLANBAP_STARxCB" );
 
     // sanity checking
     if ( pHddHdl == NULL || vosDataBuff == NULL || pRxMetaInfo == NULL )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STARxCB bad input\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STARxCB bad input" );
         if(NULL != vosDataBuff)
         {
             VosStatus = vos_pkt_return_packet( vosDataBuff );
@@ -579,7 +579,7 @@
 
     if( NULL == ppctx )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STARxCB ClientCtx is NULL\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_STARxCB ClientCtx is NULL" );
         VosStatus = vos_pkt_return_packet( vosDataBuff );
         return VOS_STATUS_E_FAILURE;
     }
@@ -606,7 +606,7 @@
        if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
        {
            VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_FATAL, "WLANBAP_STARxCB WLANBAP_XlateRxDataPkt "
-           "failed status = %d\n", VosStatus );
+           "failed status = %d", VosStatus );
 
            VosStatus = VOS_STATUS_E_FAILURE;
 
@@ -619,7 +619,7 @@
        if(!VOS_IS_STATUS_SUCCESS( VosStatus ))
        {
            VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "%s: Failure extracting skb from vos pkt. "
-             "VosStatus = %d\n", __func__, VosStatus );
+             "VosStatus = %d", __func__, VosStatus );
 
            VosStatus = VOS_STATUS_E_FAILURE;
 
@@ -682,7 +682,7 @@
     BslClientCtxType* ppctx;
     static int num_packets;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO, "WLANBAP_TxCompCB. vosDataBuff(vos_pkt_t *)=%p\n", vosDataBuff );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO, "WLANBAP_TxCompCB. vosDataBuff(vos_pkt_t *)=%p", vosDataBuff );
 
     // be aware that pHddHdl can be NULL or can point to the per association
     // BSL context from the register data plane. In either case it does not
@@ -692,7 +692,7 @@
     // sanity checking
     if ( vosDataBuff == NULL )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_TxCompCB bad input\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_TxCompCB bad input" );
         return VOS_STATUS_E_FAILURE;
     }
 
@@ -722,7 +722,7 @@
     num_packets = (num_packets + 1) % 4;
     if (num_packets == 0 )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO, "%s: Sending up number of completed packets.  num_packets = %d.\n", __func__, num_packets );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO, "%s: Sending up number of completed packets.  num_packets = %d.", __func__, num_packets );
         WLANBAP_TxPacketMonitorHandler ( (v_PVOID_t) ppctx->bapHdl ); // our handle in BAP
     }
 
@@ -790,7 +790,7 @@
     v_U32_t OldMapVal;
     VOS_STATUS VosStatus = VOS_STATUS_SUCCESS;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslReleasePhyCtx\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslReleasePhyCtx" );
 
     pPhyCtx->used = FALSE;
 
@@ -877,12 +877,12 @@
     // sanity checking
     if ( pBapHCIEvent == NULL )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB bad input\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB bad input" );
         return VOS_STATUS_E_FAILURE;
     }
 
     VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "WLANBAP_EventCB event=%d "
-       "assoc_specific=%d\n", pBapHCIEvent->bapHCIEventCode, AssocSpecificEvent );
+       "assoc_specific=%d", pBapHCIEvent->bapHCIEventCode, AssocSpecificEvent );
 
     if ( pHddHdl == NULL )
     {
@@ -900,7 +900,7 @@
         }
         else
         {
-            VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_FATAL, "WLANBAP_EventCB bad input\n" );
+            VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_FATAL, "WLANBAP_EventCB bad input" );
             return VOS_STATUS_E_FAILURE;
         }
     }
@@ -934,7 +934,7 @@
     if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
     {
         VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB vos_pkt_get_packet "
-          "failed status=%d\n", VosStatus );
+          "failed status=%d", VosStatus );
         return(VosStatus);
     }
 
@@ -1218,7 +1218,7 @@
             if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
             {
                 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB WLANBAP_RegisterDataPlane "
-                  "failed status = %d\n", VosStatus );
+                  "failed status = %d", VosStatus );
                 // we still want to send the event upto app so do not bail
             }
             else
@@ -1281,7 +1281,7 @@
         else
         {
             VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB unexpected HCI Phy Link Comp Evt "
-               "status =%d\n", pBapHCIEvent->u.btampPhysicalLinkCompleteEvent.status );
+               "status =%d", pBapHCIEvent->u.btampPhysicalLinkCompleteEvent.status );
         }
 
         break;
@@ -1333,7 +1333,7 @@
         else
         {
             VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB unexpected HCI Dis Phy Link Comp Evt "
-               "status =%d reason =%d\n", pBapHCIEvent->u.btampDisconnectPhysicalLinkCompleteEvent.status,
+               "status =%d reason =%d", pBapHCIEvent->u.btampDisconnectPhysicalLinkCompleteEvent.status,
                        pBapHCIEvent->u.btampDisconnectPhysicalLinkCompleteEvent.reason );
         }
 
@@ -1455,7 +1455,7 @@
     }
     default:
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB unexpected event\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB unexpected event" );
 
         VosStatus = vos_pkt_return_packet( pVosPkt );
 
@@ -1474,7 +1474,7 @@
         if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
         {
             VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_EventCB vos_pkt_push_head "
-          "status =%d\n", VosStatus );
+          "status =%d", VosStatus );
 
             // return the packet
             VosStatus = vos_pkt_return_packet( pVosPkt );
@@ -1489,7 +1489,7 @@
     if(!VOS_IS_STATUS_SUCCESS( VosStatus ))
     {
         VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "%s: Failure extracting skb from vos pkt. "
-          "VosStatus = %d\n", __func__, VosStatus );
+          "VosStatus = %d", __func__, VosStatus );
 
         // return the packet
         VosStatus = vos_pkt_return_packet( pVosPkt );
@@ -1561,7 +1561,7 @@
     BslClientCtxType* pctx;
     v_U8_t i;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslFindAndInitClientCtx\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslFindAndInitClientCtx" );
 
     if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
     {
@@ -1583,7 +1583,7 @@
     {
         // no more clients can be supported
         VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "BslFindAndInitClientCtx no more "
-          "clients can be supported MAX=%d\n", BSL_MAX_CLIENTS );
+          "clients can be supported MAX=%d", BSL_MAX_CLIENTS );
         return FALSE;
     }
 
@@ -1646,7 +1646,7 @@
     vos_list_node_t* pLink;
     BslPhyLinksNodeType *pPhyNode;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslReleaseClientCtx\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslReleaseClientCtx" );
 
     // an app can do this without cleaning up after itself i.e. it can have active associations and
     // data pending, we need to cleanup its mess
@@ -1728,7 +1728,7 @@
     vos_list_node_t* pLink;
     BslPhyLinksNodeType *pNode;
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslFindAndInitPhyCtx\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslFindAndInitPhyCtx" );
 
     for ( i=0; i<BSL_MAX_PHY_LINKS; i++ )
     {
@@ -1778,7 +1778,7 @@
         {
             // this could happen due to pool not being big enough, etc
             VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslFindAndInitPhyCtx failed to "
-             "get node from BslPhyLinksDescPool vstatus=%d\n", VosStatus );
+             "get node from BslPhyLinksDescPool vstatus=%d", VosStatus );
             BslReleasePhyCtx( *ppPhyCtx );
             return FALSE;
         }
@@ -1847,10 +1847,10 @@
         cmdOpcode = ( cmdOpcode & 0xFF ) << 8 | ( cmdOpcode & 0xFF00 ) >> 8;
     }
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslProcessHCICommand: cmdOpcode = %hx\n", cmdOpcode );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslProcessHCICommand: cmdOpcode = %hx", cmdOpcode );
 
     for(i=0; i<4; i++)
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslProcessHCICommand: *pBuf before advancepTmp[%x] = %x\n", i,pTmp[i] );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslProcessHCICommand: *pBuf before advancepTmp[%x] = %x", i,pTmp[i] );
 
     pBuf+=CMD_TLV_TYPE_AND_LEN_SIZE;
 
@@ -1888,7 +1888,7 @@
         Status = BslFindAndInitPhyCtx( pctx, CreatePhysicalLinkCmd.phy_link_handle,
                                        &pPhyCtx );
 
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "CreatePhysicalLinkCmd.phy_link_handle=%d\n",CreatePhysicalLinkCmd.phy_link_handle);
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "CreatePhysicalLinkCmd.phy_link_handle=%d",CreatePhysicalLinkCmd.phy_link_handle);
 
         if ( !Status )
         {
@@ -1956,7 +1956,7 @@
         Status = BslFindAndInitPhyCtx( pctx, AcceptPhysicalLinkCmd.phy_link_handle,
                                        &pPhyCtx );
 
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "AcceptPhysicalLinkCmd.phy_link_handle=%d\n",AcceptPhysicalLinkCmd.phy_link_handle);
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "AcceptPhysicalLinkCmd.phy_link_handle=%d",AcceptPhysicalLinkCmd.phy_link_handle);
 
         if ( !Status )
         {
@@ -1999,7 +1999,7 @@
         Count = Count - 3;//Type and length field lengths are not needed
         pTmp = pBuf;
         for(i=0; i<4; i++)
-            VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslProcessHCICommand: *pBuf in Disconnect phy link pTmp[%x] = %x\n", i,pTmp[i] );
+            VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "BslProcessHCICommand: *pBuf in Disconnect phy link pTmp[%x] = %x", i,pTmp[i] );
         // unpack
         UnpackStatus = btampUnpackTlvHCI_Disconnect_Physical_Link_Cmd( NULL,
                        pBuf, Count, &DisconnectPhysicalLinkCmd );
@@ -3546,7 +3546,7 @@
     static int num_packets;
 #endif
 
-    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslProcessACLDataTx\n" );
+    VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_LOW, "BslProcessACLDataTx" );
 
     // need to find the PHY link for this ACL data pkt based on phy_link_handle
     // TODO need some endian-ness check?
@@ -3570,7 +3570,7 @@
         if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
         {
             VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "BslProcessACLDataTx WLANBAP_GetAcFromTxDataPkt "
-                 "failed status =%d\n", VosStatus );
+                 "failed status =%d", VosStatus );
 
             Ac = WLANTL_AC_BE;
         }
@@ -3602,7 +3602,7 @@
             if ( !VOS_IS_STATUS_SUCCESS( VosStatus ) )
             {
                 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "BslProcessACLDataTx WLANBAP_STAPktPending "
-                "failed status =%d\n", VosStatus );
+                "failed status =%d", VosStatus );
                 VOS_ASSERT(0);
             }
         }
@@ -3612,7 +3612,7 @@
     else
     {
         VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "BslProcessACLDataTx attempting to send "
-          "data for a non-existant assocation\n" );
+          "data for a non-existant assocation" );
 
         return(FALSE);
     }
@@ -3814,7 +3814,7 @@
     if (err < 0)
     {
         VOS_TRACE(VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
-                  "Unable to register HCI device, err=%d\n", err);
+                  "Unable to register HCI device, err=%d", err);
         pctx->hdev = NULL;
         hci_free_dev(hdev);
         return -ENODEV;
@@ -4336,7 +4336,7 @@
     // sanity checking
     if ( pConfig == NULL )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_SetConfig bad input\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_SetConfig bad input" );
         return VOS_STATUS_E_FAILURE;
     }
     pctx = gpBslctx;
@@ -4351,7 +4351,7 @@
     status = WLANBAP_GetNewHndl(&pctx->bapHdl);
     if ( !VOS_IS_STATUS_SUCCESS( status ) )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_SetConfig can't get BAP handle\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_SetConfig can't get BAP handle" );
         return VOS_STATUS_E_FAILURE;
     }
 
@@ -4359,7 +4359,7 @@
     status = WLAN_BAPSetConfig(pctx->bapHdl, pConfig);
     if ( !VOS_IS_STATUS_SUCCESS( status ) )
     {
-        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_SetConfig can't set BAP config\n" );
+        VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "WLANBAP_SetConfig can't set BAP config" );
         return VOS_STATUS_E_FAILURE;
     }
 
@@ -4392,7 +4392,7 @@
     if(NULL != pctx->hdev)
     {
         VOS_TRACE(VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_WARN,
-                  "Already registered as HCI device\n");
+                  "Already registered as HCI device");
         return VOS_STATUS_SUCCESS;
     }
 
@@ -4465,7 +4465,7 @@
     if (err < 0)
     {
         VOS_TRACE(VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
-                  "Unable to register HCI device, err=%d\n", err);
+                  "Unable to register HCI device, err=%d", err);
         pctx->hdev = NULL;
         hci_free_dev(hdev);
         return VOS_STATUS_E_FAULT;
