diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 07f28b07388b..7c512b989a42 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -5798,6 +5798,29 @@ enum hdd_link_speed_rpt_type {
#define CFG_RATE_FOR_TX_MGMT_5G_MAX (WNI_CFG_RATE_FOR_TX_MGMT_5G_STAMAX)
#define CFG_RATE_FOR_TX_MGMT_5G_DEFAULT (WNI_CFG_RATE_FOR_TX_MGMT_5G_STADEF)
+/*
+ *
+ * gPreventLinkDown - Enable to prevent bus link from going down
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * Enable to prevent bus link from going down. Useful for platforms that do not
+ * (yet) support link down suspend cases.
+ *
+ * Related: N/A
+ *
+ * Supported Feature: Suspend/Resume
+ *
+ * Usage: Internal
+ *
+ *
+ */
+#define CFG_PREVENT_LINK_DOWN_NAME "gPreventLinkDown"
+#define CFG_PREVENT_LINK_DOWN_MIN (0)
+#define CFG_PREVENT_LINK_DOWN_MAX (1)
+#define CFG_PREVENT_LINK_DOWN_DEFAULT (0)
+
#ifdef FEATURE_WLAN_TDLS
/*
*
@@ -10848,6 +10871,7 @@ struct hdd_config {
uint8_t enable_tx_ldpc;
uint8_t enable_rx_ldpc;
bool enable5gEBT;
+ bool prevent_link_down;
#ifdef FEATURE_WLAN_TDLS
bool fEnableTDLSSupport;
bool fEnableTDLSImplicitTrigger;
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index 6e69b7206480..0a29fc058c43 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -2197,6 +2197,13 @@ struct reg_table_entry g_registry_table[] = {
CFG_PPS_ENABLE_5G_EBT_FEATURE_MIN,
CFG_PPS_ENABLE_5G_EBT_FEATURE_MAX),
+ REG_VARIABLE(CFG_PREVENT_LINK_DOWN_NAME, WLAN_PARAM_Integer,
+ struct hdd_config, prevent_link_down,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_PREVENT_LINK_DOWN_DEFAULT,
+ CFG_PREVENT_LINK_DOWN_MIN,
+ CFG_PREVENT_LINK_DOWN_MAX),
+
#ifdef FEATURE_WLAN_TDLS
REG_VARIABLE(CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer,
struct hdd_config, fEnableTDLSSupport,
diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c
index 0dc6b35b9d3d..8b657b77ac51 100644
--- a/core/hdd/src/wlan_hdd_driver_ops.c
+++ b/core/hdd/src/wlan_hdd_driver_ops.c
@@ -230,6 +230,9 @@ int hdd_hif_open(struct device *dev, void *bdev, const struct hif_bus_id *bid,
goto err_hif_close;
}
+ if (hdd_ctx->config->prevent_link_down)
+ hif_vote_link_up(hif_ctx);
+
status = hif_enable(hif_ctx, dev, bdev, bid, bus_type,
(reinit == true) ? HIF_ENABLE_TYPE_REINIT :
HIF_ENABLE_TYPE_PROBE);