Loading drivers/soc/qcom/icnss.c +19 −0 Original line number Diff line number Diff line Loading @@ -841,6 +841,10 @@ static int icnss_driver_event_server_arrive(void *data) ret = wlfw_ind_register_send_sync_msg(penv); if (ret < 0) { if (ret == -EALREADY) { ret = 0; goto qmi_registered; } ignore_assert = true; goto err_power_on; } Loading Loading @@ -889,6 +893,7 @@ static int icnss_driver_event_server_arrive(void *data) icnss_clear_server(penv); fail: ICNSS_ASSERT(ignore_assert); qmi_registered: return ret; } Loading Loading @@ -2505,6 +2510,15 @@ static void icnss_allow_recursive_recovery(struct device *dev) icnss_pr_info("Recursive recovery allowed for WLAN\n"); } static void icnss_disallow_recursive_recovery(struct device *dev) { struct icnss_priv *priv = dev_get_drvdata(dev); priv->allow_recursive_recovery = false; icnss_pr_info("Recursive recovery disallowed for WLAN\n"); } static ssize_t icnss_fw_debug_write(struct file *fp, const char __user *user_buf, size_t count, loff_t *off) Loading Loading @@ -2556,6 +2570,9 @@ static ssize_t icnss_fw_debug_write(struct file *fp, case 4: icnss_allow_recursive_recovery(&priv->pdev->dev); break; case 5: icnss_disallow_recursive_recovery(&priv->pdev->dev); break; default: return -EINVAL; } Loading Loading @@ -3204,6 +3221,8 @@ static int icnss_probe(struct platform_device *pdev) priv->vreg_info = icnss_vreg_info; icnss_allow_recursive_recovery(dev); if (of_property_read_bool(pdev->dev.of_node, "qcom,icnss-adc_tm")) { ret = icnss_get_vbatt_info(priv); if (ret == -EPROBE_DEFER) Loading drivers/soc/qcom/icnss_qmi.c +10 −1 Original line number Diff line number Diff line Loading @@ -307,14 +307,23 @@ int wlfw_ind_register_send_sync_msg(struct icnss_priv *priv) priv->stats.ind_register_resp++; if (resp->fw_status_valid && (resp->fw_status & QMI_WLFW_ALREADY_REGISTERED_V01)) { ret = -EALREADY; icnss_pr_dbg("WLFW already registered\n"); goto qmi_registered; } kfree(resp); kfree(req); return 0; out: priv->stats.ind_register_err++; qmi_registered: kfree(resp); kfree(req); priv->stats.ind_register_err++; return ret; } Loading Loading
drivers/soc/qcom/icnss.c +19 −0 Original line number Diff line number Diff line Loading @@ -841,6 +841,10 @@ static int icnss_driver_event_server_arrive(void *data) ret = wlfw_ind_register_send_sync_msg(penv); if (ret < 0) { if (ret == -EALREADY) { ret = 0; goto qmi_registered; } ignore_assert = true; goto err_power_on; } Loading Loading @@ -889,6 +893,7 @@ static int icnss_driver_event_server_arrive(void *data) icnss_clear_server(penv); fail: ICNSS_ASSERT(ignore_assert); qmi_registered: return ret; } Loading Loading @@ -2505,6 +2510,15 @@ static void icnss_allow_recursive_recovery(struct device *dev) icnss_pr_info("Recursive recovery allowed for WLAN\n"); } static void icnss_disallow_recursive_recovery(struct device *dev) { struct icnss_priv *priv = dev_get_drvdata(dev); priv->allow_recursive_recovery = false; icnss_pr_info("Recursive recovery disallowed for WLAN\n"); } static ssize_t icnss_fw_debug_write(struct file *fp, const char __user *user_buf, size_t count, loff_t *off) Loading Loading @@ -2556,6 +2570,9 @@ static ssize_t icnss_fw_debug_write(struct file *fp, case 4: icnss_allow_recursive_recovery(&priv->pdev->dev); break; case 5: icnss_disallow_recursive_recovery(&priv->pdev->dev); break; default: return -EINVAL; } Loading Loading @@ -3204,6 +3221,8 @@ static int icnss_probe(struct platform_device *pdev) priv->vreg_info = icnss_vreg_info; icnss_allow_recursive_recovery(dev); if (of_property_read_bool(pdev->dev.of_node, "qcom,icnss-adc_tm")) { ret = icnss_get_vbatt_info(priv); if (ret == -EPROBE_DEFER) Loading
drivers/soc/qcom/icnss_qmi.c +10 −1 Original line number Diff line number Diff line Loading @@ -307,14 +307,23 @@ int wlfw_ind_register_send_sync_msg(struct icnss_priv *priv) priv->stats.ind_register_resp++; if (resp->fw_status_valid && (resp->fw_status & QMI_WLFW_ALREADY_REGISTERED_V01)) { ret = -EALREADY; icnss_pr_dbg("WLFW already registered\n"); goto qmi_registered; } kfree(resp); kfree(req); return 0; out: priv->stats.ind_register_err++; qmi_registered: kfree(resp); kfree(req); priv->stats.ind_register_err++; return ret; } Loading