diff --git a/os_if/linux/spectral/src/wlan_cfg80211_spectral.c b/os_if/linux/spectral/src/wlan_cfg80211_spectral.c
index fdb160a..57e465f 100644
--- a/os_if/linux/spectral/src/wlan_cfg80211_spectral.c
+++ b/os_if/linux/spectral/src/wlan_cfg80211_spectral.c
@@ -28,9 +28,6 @@
 #include <wlan_cfg80211.h>
 #include <wlan_osif_priv.h>
 #include <qdf_mem.h>
-#ifdef WLAN_POLICY_MGR_ENABLE
-#include <wlan_policy_mgr_api.h>
-#endif
 #include <wlan_spectral_ucfg_api.h>
 #include <wlan_cfg80211_spectral.h>
 #include <spectral_ioctl.h>
@@ -105,7 +102,7 @@
 	config_req->ss_pwr_format =      SPECTRAL_PHYERR_PARAM_NOVAL;
 	config_req->ss_rpt_mode =        SPECTRAL_PHYERR_PARAM_NOVAL;
 	config_req->ss_bin_scale =       SPECTRAL_PHYERR_PARAM_NOVAL;
-	config_req->ss_dBm_adj =         SPECTRAL_PHYERR_PARAM_NOVAL;
+	config_req->ss_dbm_adj =         SPECTRAL_PHYERR_PARAM_NOVAL;
 	config_req->ss_chn_mask =        SPECTRAL_PHYERR_PARAM_NOVAL;
 }
 
@@ -378,7 +375,7 @@
 		   [QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_BIN_SCALE]);
 
 	if (tb[QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_DBM_ADJ])
-		config_req.ss_dBm_adj = nla_get_u32(tb
+		config_req.ss_dbm_adj = nla_get_u32(tb
 		   [QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_DBM_ADJ]);
 
 	if (tb[QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_CHN_MASK])
@@ -521,7 +518,7 @@
 			config_buf.ss_bin_scale) ||
 	    nla_put_u32(skb,
 			QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_DBM_ADJ,
-			config_buf.ss_dBm_adj) ||
+			config_buf.ss_dbm_adj) ||
 	    nla_put_u32(skb,
 			QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_CHN_MASK,
 			config_buf.ss_chn_mask) ||
diff --git a/spectral/core/spectral_cmn_api_i.h b/spectral/core/spectral_cmn_api_i.h
index 4436c0d..1fb7586 100644
--- a/spectral/core/spectral_cmn_api_i.h
+++ b/spectral/core/spectral_cmn_api_i.h
@@ -131,5 +131,56 @@
 	return sc;
 }
 
+/**
+ * spectral_get_spectral_ctx_from_pscoc() - API to get spectral context object
+ *                                         from psoc
+ * @psoc : Reference to psoc global object
+ *
+ * This API used to get spectral context object from global psoc reference.
+ * Null check should be done before invoking this inline function.
+ *
+ * Return : Reference to spectral_context object
+ */
+static inline
+struct spectral_context *spectral_get_spectral_ctx_from_psoc(
+	struct wlan_objmgr_psoc *psoc)
+{
+	struct spectral_context *sc = NULL;
+
+	if (psoc) {
+		sc = wlan_objmgr_psoc_get_comp_private_obj(
+			psoc,
+			WLAN_UMAC_COMP_SPECTRAL);
+	}
+
+	return sc;
+}
+
+/**
+ * spectral_get_spectral_ctx_from_vdev() - API to get spectral context object
+ *                                         from vdev
+ * @vdev : Reference to vdev global object
+ *
+ * This API used to get spectral context object from global vdev reference.
+ * Null check should be done before invoking this inline function.
+ *
+ * Return : Reference to spectral_context object
+ */
+static inline
+struct spectral_context *spectral_get_spectral_ctx_from_vdev(
+	struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_objmgr_psoc *psoc = NULL;
+	struct spectral_context *sc = NULL;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+	if (psoc) {
+		sc = wlan_objmgr_psoc_get_comp_private_obj(
+			psoc,
+			WLAN_UMAC_COMP_SPECTRAL);
+	}
+
+	return sc;
+}
 #endif /* _SPECTRAL_CMN_API_I_H_*/
 
diff --git a/spectral/core/spectral_common.c b/spectral/core/spectral_common.c
index 07d228f..a0e6ee7 100644
--- a/spectral/core/spectral_common.c
+++ b/spectral/core/spectral_common.c
@@ -65,6 +65,7 @@
 	return vdev;
 }
 
+#ifndef CONFIG_MCL
 static void spectral_register_cfg80211_handlers(struct wlan_objmgr_pdev *pdev)
 {
 	wlan_cfg80211_register_spectral_cmd_handler(
@@ -92,6 +93,11 @@
 			SPECTRAL_SCAN_GET_STATUS_HANDLER_IDX,
 			wlan_cfg80211_spectral_scan_get_status);
 }
+#else
+static void spectral_register_cfg80211_handlers(struct wlan_objmgr_pdev *pdev)
+{
+}
+#endif
 
 int spectral_control_cmn(
 	struct wlan_objmgr_pdev *pdev,
@@ -433,7 +439,7 @@
 		if (!vdev)
 			return -ENOENT;
 
-		chan_width = wlan_vdev_get_ch_width(vdev);
+		chan_width = spectral_vdev_get_ch_width(vdev);
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_SPECTRAL_ID);
 
 		if (!outdata || !outsize ||
diff --git a/spectral/core/spectral_defs_i.h b/spectral/core/spectral_defs_i.h
index 7d86bab..315e7ee 100644
--- a/spectral/core/spectral_defs_i.h
+++ b/spectral/core/spectral_defs_i.h
@@ -24,10 +24,12 @@
 #include <wlan_objmgr_global_obj.h>
 #include <wlan_objmgr_psoc_obj.h>
 #include <wlan_objmgr_pdev_obj.h>
+#include <wlan_objmgr_vdev_obj.h>
 #include <qdf_list.h>
 #include <qdf_timer.h>
 #include <qdf_util.h>
 #include <wlan_spectral_public_structs.h>
+#include <wlan_spectral_utils_api.h>
 #include <if_athioctl.h>
 #include <spectral_ioctl.h>
 
@@ -84,6 +86,7 @@
  */
 struct spectral_context {
 	struct wlan_objmgr_psoc *psoc_obj;
+	struct spectral_legacy_cbacks legacy_cbacks;
 	int (*sptrlc_spectral_control)(struct wlan_objmgr_pdev *pdev, u_int id,
 				       void *indata, u_int32_t insize,
 		void *outdata, u_int32_t *outsize);
diff --git a/spectral/dispatcher/inc/wlan_spectral_utils_api.h b/spectral/dispatcher/inc/wlan_spectral_utils_api.h
index cdcf99c..beef773 100644
--- a/spectral/dispatcher/inc/wlan_spectral_utils_api.h
+++ b/spectral/dispatcher/inc/wlan_spectral_utils_api.h
@@ -67,4 +67,23 @@
 void wlan_register_wmi_spectral_cmd_ops(
 		struct wlan_objmgr_pdev *pdev,
 		struct wmi_spectral_cmd_ops *cmd_ops);
+
+/**
+ * struct spectral_legacy_cbacks - Spectral legacy callbacks
+ * @vdev_get_chan_freq:          Get channel frequency
+ * @vdev_get_ch_width:           Get channel width
+ * @vdev_get_sec20chan_freq_mhz: Get seconadry 20 frequency
+ */
+struct spectral_legacy_cbacks {
+	int16_t (*vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
+	enum phy_ch_width (*vdev_get_ch_width)(struct wlan_objmgr_vdev *vdev);
+	int (*vdev_get_sec20chan_freq_mhz)(struct wlan_objmgr_vdev *vdev,
+					     uint16_t *sec20chan_freq);
+};
+
+QDF_STATUS spectral_register_legacy_cb(struct wlan_objmgr_psoc *psoc,
+		struct spectral_legacy_cbacks *legacy_cbacks);
+
+enum phy_ch_width spectral_vdev_get_ch_width(struct wlan_objmgr_vdev *vdev);
+
 #endif /* _WLAN_SPECTRAL_UTILS_API_H_*/
diff --git a/spectral/dispatcher/src/wlan_spectral_utils_api.c b/spectral/dispatcher/src/wlan_spectral_utils_api.c
index 171bdf1..607cd25 100644
--- a/spectral/dispatcher/src/wlan_spectral_utils_api.c
+++ b/spectral/dispatcher/src/wlan_spectral_utils_api.c
@@ -82,13 +82,64 @@
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS spectral_register_legacy_cb(struct wlan_objmgr_psoc *psoc,
+		struct spectral_legacy_cbacks *legacy_cbacks)
+{
+	struct spectral_context *sc;
+
+	sc = spectral_get_spectral_ctx_from_psoc(psoc);
+	if (!sc) {
+		spectral_err("Invalid Context");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	sc->legacy_cbacks.vdev_get_chan_freq =
+		legacy_cbacks->vdev_get_chan_freq;
+	sc->legacy_cbacks.vdev_get_ch_width =
+		legacy_cbacks->vdev_get_ch_width;
+	sc->legacy_cbacks.vdev_get_sec20chan_freq_mhz =
+		legacy_cbacks->vdev_get_sec20chan_freq_mhz;
+
+	return QDF_STATUS_SUCCESS;
+}
+EXPORT_SYMBOL(spectral_register_legacy_cb);
+
+int16_t spectral_vdev_get_chan_freq(struct wlan_objmgr_vdev *vdev)
+{
+	struct spectral_context *sc;
+
+	sc = spectral_get_spectral_ctx_from_vdev(vdev);
+	return sc->legacy_cbacks.vdev_get_chan_freq(vdev);
+}
+
+enum phy_ch_width spectral_vdev_get_ch_width(struct wlan_objmgr_vdev *vdev)
+{
+	struct spectral_context *sc;
+
+	sc = spectral_get_spectral_ctx_from_vdev(vdev);
+	return sc->legacy_cbacks.vdev_get_ch_width(vdev);
+}
+
+int spectral_vdev_get_sec20chan_freq_mhz(struct wlan_objmgr_vdev *vdev,
+		uint16_t *sec20chan_freq)
+{
+	struct spectral_context *sc;
+
+	sc = spectral_get_spectral_ctx_from_vdev(vdev);
+	return sc->legacy_cbacks.vdev_get_sec20chan_freq_mhz(vdev, sec20chan_freq);
+}
+
 void wlan_lmac_if_sptrl_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
 {
 	struct wlan_lmac_if_sptrl_rx_ops *sptrl_rx_ops = &rx_ops->sptrl_rx_ops;
 
 	/* Spectral rx ops */
 	sptrl_rx_ops->sptrlro_send_phydata = tgt_send_phydata;
-	sptrl_rx_ops->sptrlro_get_target_handle = tgt_get_target_handle;
+	sptrl_rx_ops->sptrlro_get_target_handle  = tgt_get_target_handle;
+	sptrl_rx_ops->sptrlro_vdev_get_chan_freq = spectral_vdev_get_chan_freq;
+	sptrl_rx_ops->sptrlro_vdev_get_ch_width  = spectral_vdev_get_ch_width;
+	sptrl_rx_ops->sptrlro_vdev_get_sec20chan_freq_mhz =
+		spectral_vdev_get_sec20chan_freq_mhz;
 }
 
 void wlan_register_wmi_spectral_cmd_ops(
diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c
index 089451a..118313b 100644
--- a/target_if/spectral/target_if_spectral.c
+++ b/target_if/spectral/target_if_spectral.c
@@ -940,7 +940,7 @@
 	if (!vdev)
 		return 0;
 
-	if (wlan_vdev_get_sec20chan_freq_mhz(vdev, &sec20chan_freq) < 0) {
+	if (target_if_vdev_get_sec20chan_freq_mhz(vdev, &sec20chan_freq) < 0) {
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_SPECTRAL_ID);
 		return 0;
 	}
@@ -974,7 +974,7 @@
 	if (!vdev)
 		return 0;
 
-	chan_freq = wlan_vdev_get_chan_freq(vdev);
+	chan_freq = target_if_vdev_get_chan_freq(vdev);
 	if (chan_freq < 0) {
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_SPECTRAL_ID);
 		return 0;
@@ -1967,7 +1967,7 @@
 	if (!vdev)
 		return 1;
 
-	spectral->ch_width  = wlan_vdev_get_ch_width(vdev);
+	spectral->ch_width  = target_if_vdev_get_ch_width(vdev);
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_SPECTRAL_ID);
 
 	if (spectral->ch_width == CH_WIDTH_INVALID)
diff --git a/target_if/spectral/target_if_spectral.h b/target_if/spectral/target_if_spectral.h
index 04a3a5f..f75d1a5 100644
--- a/target_if/spectral/target_if_spectral.h
+++ b/target_if/spectral/target_if_spectral.h
@@ -939,6 +939,40 @@
 	return spectral;
 }
 
+static inline
+int16_t target_if_vdev_get_chan_freq(struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_objmgr_psoc *psoc = NULL;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+
+	return psoc->soc_cb.rx_ops.sptrl_rx_ops.sptrlro_vdev_get_chan_freq(
+		vdev);
+}
+
+static inline
+enum phy_ch_width target_if_vdev_get_ch_width(struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_objmgr_psoc *psoc = NULL;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+
+	return psoc->soc_cb.rx_ops.sptrl_rx_ops.sptrlro_vdev_get_ch_width(
+		vdev);
+}
+
+static inline
+int target_if_vdev_get_sec20chan_freq_mhz(struct wlan_objmgr_vdev *vdev,
+		uint16_t *sec20chan_freq)
+{
+	struct wlan_objmgr_psoc *psoc = NULL;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+
+	return psoc->soc_cb.rx_ops.sptrl_rx_ops.
+		sptrlro_vdev_get_sec20chan_freq_mhz(vdev, sec20chan_freq);
+}
+
 /**
  * target_if_spectral_set_rxchainmask() - Set Spectral Rx chainmask
  * @pdev: Pointer to pdev
diff --git a/target_if/spectral/target_if_spectral_sim.c b/target_if/spectral/target_if_spectral_sim.c
index 587d345..1dec379 100644
--- a/target_if/spectral/target_if_spectral_sim.c
+++ b/target_if/spectral/target_if_spectral_sim.c
@@ -848,7 +848,7 @@
 		return 0;
 	}
 
-	bw = wlan_vdev_get_ch_width(vdev);
+	bw = target_if_vdev_get_ch_width(vdev);
 
 	switch (bw) {
 	case CH_WIDTH_20MHZ:
diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
index d11d121..8224e07 100644
--- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
+++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
@@ -760,6 +760,12 @@
 	int (*sptrlro_send_phydata)(struct wlan_objmgr_pdev *pdev,
 				    struct sock *sock, qdf_nbuf_t nbuf);
 	void * (*sptrlro_get_target_handle)(struct wlan_objmgr_pdev *pdev);
+	int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
+	enum phy_ch_width (*sptrlro_vdev_get_ch_width)(
+			struct wlan_objmgr_vdev *vdev);
+	int (*sptrlro_vdev_get_sec20chan_freq_mhz)(
+			struct wlan_objmgr_vdev *vdev,
+			uint16_t *sec20chan_freq);
 };
 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
 
