diff --git a/Kbuild b/Kbuild
index 34abda0..9c6a78e 100644
--- a/Kbuild
+++ b/Kbuild
@@ -398,6 +398,9 @@
 #Flag to enable Stats Ext implementation
 CONFIG_FEATURE_STATS_EXT := 1
 
+#Flag to enable HTC credit history feature
+CONFIG_FEATURE_HTC_CREDIT_HISTORY := 1
+
 ifeq ($(CONFIG_CFG80211),y)
 HAVE_CFG80211 := 1
 else
@@ -1383,6 +1386,10 @@
             $(WLAN_COMMON_ROOT)/$(HTC_DIR)/htc_recv.o \
             $(WLAN_COMMON_ROOT)/$(HTC_DIR)/htc_services.o
 
+ifeq ($(CONFIG_FEATURE_HTC_CREDIT_HISTORY), 1)
+HTC_OBJS += $(WLAN_COMMON_ROOT)/$(HTC_DIR)/htc_credit_history.o
+endif
+
 ########### HIF ###########
 HIF_DIR := hif
 HIF_CE_DIR := $(HIF_DIR)/src/ce
@@ -1809,6 +1816,10 @@
 endif
 ####################################
 
+ifeq ($(CONFIG_FEATURE_HTC_CREDIT_HISTORY), 1)
+CDEFINES += -DFEATURE_HTC_CREDIT_HISTORY
+endif
+
 ifneq ($(CONFIG_HIF_USB), 1)
 CDEFINES += -DWLAN_LOGGING_SOCK_SVC_ENABLE
 endif
diff --git a/core/cds/inc/cds_api.h b/core/cds/inc/cds_api.h
index f3fe949..95f4ead 100644
--- a/core/cds/inc/cds_api.h
+++ b/core/cds/inc/cds_api.h
@@ -551,11 +551,28 @@
 }
 #endif
 
-#ifdef WMI_INTERFACE_EVENT_LOGGING
-void cds_print_htc_credit_history(uint32_t count, qdf_abstract_print * print,
-				  void *print_priv);
-#endif
+#ifdef FEATURE_HTC_CREDIT_HISTORY
+/**
+ * cds_print_htc_credit_history() - Helper function to copy HTC credit
+ *				    history via htc_print_credit_history()
+ *
+ * @count:	Number of lines to be copied
+ * @print:	Print callback to print in the buffer
+ *
+ * Return:	none
+ */
+void cds_print_htc_credit_history(uint32_t count,
+				qdf_abstract_print * print,
+				void *print_priv);
+#else
 
+static inline
+void cds_print_htc_credit_history(uint32_t count,
+				qdf_abstract_print *print,
+				void *print_priv)
+{
+}
+#endif
 /**
  * cds_is_group_addr() - checks whether addr is multi cast
  * @mac_addr: address to be checked for multicast
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index 6e3fdf2..2866a84 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -2762,7 +2762,7 @@
 	return con_mode;
 }
 
-#ifdef WMI_INTERFACE_EVENT_LOGGING
+#ifdef FEATURE_HTC_CREDIT_HISTORY
 inline void
 cds_print_htc_credit_history(uint32_t count, qdf_abstract_print *print,
 			     void *print_priv)
diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c
index 7adb478..dc84990 100644
--- a/core/hdd/src/wlan_hdd_wext.c
+++ b/core/hdd/src/wlan_hdd_wext.c
@@ -10604,7 +10604,6 @@
 	return qdf_status_to_os_return(status);
 }
 
-#ifdef WMI_INTERFACE_EVENT_LOGGING
 static int printk_adapter(void *priv, const char *fmt, ...)
 {
 	int ret;
@@ -10624,36 +10623,27 @@
 
 	switch (log_id) {
 	case HTC_CREDIT_HISTORY_LOG:
-		print(NULL, "HTC Credit History (count %u)", count);
 		cds_print_htc_credit_history(count, print, NULL);
 		break;
 	case COMMAND_LOG:
-		print(NULL, "Command Log (count %u)", count);
 		wma_print_wmi_cmd_log(count, print, NULL);
 		break;
 	case COMMAND_TX_CMP_LOG:
-		print(NULL, "Command Tx Complete Log (count %u)", count);
 		wma_print_wmi_cmd_tx_cmp_log(count, print, NULL);
 		break;
 	case MGMT_COMMAND_LOG:
-		print(NULL, "Management Command Log (count %u)", count);
 		wma_print_wmi_mgmt_cmd_log(count, print, NULL);
 		break;
 	case MGMT_COMMAND_TX_CMP_LOG:
-		print(NULL, "Management Command Tx Complete Log (count %u)",
-		      count);
 		wma_print_wmi_mgmt_cmd_tx_cmp_log(count, print, NULL);
 		break;
 	case EVENT_LOG:
-		print(NULL, "Event Log (count %u)", count);
 		wma_print_wmi_event_log(count, print, NULL);
 		break;
 	case RX_EVENT_LOG:
-		print(NULL, "Rx Event Log (count %u)", count);
 		wma_print_wmi_rx_event_log(count, print, NULL);
 		break;
 	case MGMT_EVENT_LOG:
-		print(NULL, "Management Event Log (count %u)", count);
 		wma_print_wmi_mgmt_event_log(count, print, NULL);
 		break;
 	default:
@@ -10661,11 +10651,6 @@
 		break;
 	}
 }
-#else
-static inline void hdd_ioctl_log_buffer(int log_id, uint32_t count)
-{
-}
-#endif /* WMI_INTERFACE_EVENT_LOGGING */
 
 static int __iw_set_two_ints_getnone(struct net_device *dev,
 				     struct iw_request_info *info,
@@ -11998,11 +11983,13 @@
 	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
 	 0, "crash_inject"}
 	,
+#if defined(WMI_INTERFACE_EVENT_LOGGING) || defined(FEATURE_HTC_CREDIT_HISTORY)
 	{WE_LOG_BUFFER,
 	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
 	 0, "log_buffer"}
 	,
 #endif
+#endif
 #ifdef WLAN_SUSPEND_RESUME_TEST
 	{WE_SET_WLAN_SUSPEND,
 	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h
index fe227d6..28073a9 100644
--- a/core/wma/inc/wma.h
+++ b/core/wma/inc/wma.h
@@ -2500,8 +2500,10 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv, "Command Log (count %u)", count);
 		wmi_print_cmd_log(wma->wmi_handle, count, print, print_priv);
+	}
 }
 
 static inline void wma_print_wmi_cmd_tx_cmp_log(uint32_t count,
@@ -2510,9 +2512,11 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv, "Command Tx Complete Log (count %u)", count);
 		wmi_print_cmd_tx_cmp_log(wma->wmi_handle, count, print,
 					 print_priv);
+	}
 }
 
 static inline void wma_print_wmi_mgmt_cmd_log(uint32_t count,
@@ -2521,9 +2525,11 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv, "Management Command Log (count %u)", count);
 		wmi_print_mgmt_cmd_log(wma->wmi_handle, count, print,
 				       print_priv);
+	}
 }
 
 static inline void wma_print_wmi_mgmt_cmd_tx_cmp_log(uint32_t count,
@@ -2532,9 +2538,12 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv,
+		"Management Command Tx Complete Log (count %u)", count);
 		wmi_print_mgmt_cmd_tx_cmp_log(wma->wmi_handle, count, print,
 					      print_priv);
+	}
 }
 
 static inline void wma_print_wmi_event_log(uint32_t count,
@@ -2543,8 +2552,10 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv, "Event Log (count %u)", count);
 		wmi_print_event_log(wma->wmi_handle, count, print, print_priv);
+	}
 }
 
 static inline void wma_print_wmi_rx_event_log(uint32_t count,
@@ -2553,9 +2564,11 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv, "Rx Event Log (count %u)", count);
 		wmi_print_rx_event_log(wma->wmi_handle, count, print,
 				       print_priv);
+	}
 }
 
 static inline void wma_print_wmi_mgmt_event_log(uint32_t count,
@@ -2564,9 +2577,54 @@
 {
 	t_wma_handle *wma = cds_get_context(QDF_MODULE_ID_WMA);
 
-	if (wma)
+	if (wma) {
+		print(print_priv, "Management Event Log (count %u)", count);
 		wmi_print_mgmt_event_log(wma->wmi_handle, count, print,
 					 print_priv);
+	}
+}
+#else
+
+static inline void wma_print_wmi_cmd_log(uint32_t count,
+					 qdf_abstract_print *print,
+					 void *print_priv)
+{
+}
+
+static inline void wma_print_wmi_cmd_tx_cmp_log(uint32_t count,
+						qdf_abstract_print *print,
+						void *print_priv)
+{
+}
+
+static inline void wma_print_wmi_mgmt_cmd_log(uint32_t count,
+					      qdf_abstract_print *print,
+					      void *print_priv)
+{
+}
+
+static inline void wma_print_wmi_mgmt_cmd_tx_cmp_log(uint32_t count,
+						     qdf_abstract_print *print,
+						     void *print_priv)
+{
+}
+
+static inline void wma_print_wmi_event_log(uint32_t count,
+					   qdf_abstract_print *print,
+					   void *print_priv)
+{
+}
+
+static inline void wma_print_wmi_rx_event_log(uint32_t count,
+					      qdf_abstract_print *print,
+					      void *print_priv)
+{
+}
+
+static inline void wma_print_wmi_mgmt_event_log(uint32_t count,
+						qdf_abstract_print *print,
+						void *print_priv)
+{
 }
 #endif /* WMI_INTERFACE_EVENT_LOGGING */
 
