diff --git a/drivers/soc/qcom/icnss2/main.c b/drivers/soc/qcom/icnss2/main.c index dc873a24e54f..462d4bb807d7 100644 --- a/drivers/soc/qcom/icnss2/main.c +++ b/drivers/soc/qcom/icnss2/main.c @@ -400,6 +400,17 @@ bool icnss_is_fw_down(void) } EXPORT_SYMBOL(icnss_is_fw_down); +unsigned long icnss_get_device_config(void) +{ + struct icnss_priv *priv = icnss_get_plat_priv(); + + if (!priv) + return 0; + + return priv->device_config; +} +EXPORT_SYMBOL(icnss_get_device_config); + bool icnss_is_rejuvenate(void) { if (!penv) @@ -3905,6 +3916,14 @@ static void icnss_init_control_params(struct icnss_priv *priv) } } +static void icnss_read_device_configs(struct icnss_priv *priv) +{ + if (of_property_read_bool(priv->pdev->dev.of_node, + "wlan-ipa-disabled")) { + set_bit(ICNSS_IPA_DISABLED, &priv->device_config); + } +} + static inline void icnss_get_smp2p_info(struct icnss_priv *priv) { @@ -4007,6 +4026,8 @@ static int icnss_probe(struct platform_device *pdev) icnss_init_control_params(priv); + icnss_read_device_configs(priv); + ret = icnss_resource_parse(priv); if (ret) goto out_reset_drvdata; diff --git a/drivers/soc/qcom/icnss2/main.h b/drivers/soc/qcom/icnss2/main.h index b75767a07af0..8ff61897b8a9 100644 --- a/drivers/soc/qcom/icnss2/main.h +++ b/drivers/soc/qcom/icnss2/main.h @@ -465,6 +465,7 @@ struct icnss_priv { struct icnss_dms_data dms; u8 use_nv_mac; u32 wlan_en_delay_ms; + unsigned long device_config; }; struct icnss_reg_info { diff --git a/include/soc/qcom/icnss2.h b/include/soc/qcom/icnss2.h index cca3a95be74a..19510f022e12 100644 --- a/include/soc/qcom/icnss2.h +++ b/include/soc/qcom/icnss2.h @@ -23,6 +23,10 @@ enum icnss_uevent { ICNSS_UEVENT_SMMU_FAULT, }; +enum icnss_device_config { + ICNSS_IPA_DISABLED, +}; + struct icnss_uevent_hang_data { void *hang_event_data; uint16_t hang_event_data_len; @@ -196,4 +200,5 @@ extern int icnss_prevent_l1(struct device *dev); extern void icnss_allow_l1(struct device *dev); extern int icnss_get_mhi_state(struct device *dev); extern int icnss_is_pci_ep_awake(struct device *dev); +extern unsigned long icnss_get_device_config(void); #endif /* _ICNSS_WLAN_H_ */