Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34195cbf authored by Yue Ma's avatar Yue Ma
Browse files

cnss2: Prevent vote for MHI wake after device error



Ignore MHI wake vote after device error and let MHI driver to
take care the usage count internelly.

Change-Id: I573b7c054d43920c33a2f22c53b7da7e33780c4c
Signed-off-by: default avatarYue Ma <yuem@codeaurora.org>
parent fc77ef6b
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -1716,6 +1716,7 @@ int cnss_pci_force_wake_request(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(pci_dev);
	struct cnss_plat_data *plat_priv;
	struct mhi_controller *mhi_ctrl;

	if (!pci_priv)
@@ -1729,9 +1730,14 @@ int cnss_pci_force_wake_request(struct device *dev)
	if (!mhi_ctrl)
		return -EINVAL;

	read_lock_bh(&mhi_ctrl->pm_lock);
	mhi_ctrl->wake_get(mhi_ctrl, true);
	read_unlock_bh(&mhi_ctrl->pm_lock);
	plat_priv = pci_priv->plat_priv;
	if (!plat_priv)
		return -ENODEV;

	if (test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state))
		return -EAGAIN;

	mhi_device_get(mhi_ctrl->mhi_dev, MHI_VOTE_DEVICE);

	return 0;
}
@@ -1762,6 +1768,7 @@ int cnss_pci_force_wake_release(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(pci_dev);
	struct cnss_plat_data *plat_priv;
	struct mhi_controller *mhi_ctrl;

	if (!pci_priv)
@@ -1775,9 +1782,14 @@ int cnss_pci_force_wake_release(struct device *dev)
	if (!mhi_ctrl)
		return -EINVAL;

	read_lock_bh(&mhi_ctrl->pm_lock);
	mhi_ctrl->wake_put(mhi_ctrl, false);
	read_unlock_bh(&mhi_ctrl->pm_lock);
	plat_priv = pci_priv->plat_priv;
	if (!plat_priv)
		return -ENODEV;

	if (test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state))
		return -EAGAIN;

	mhi_device_put(mhi_ctrl->mhi_dev, MHI_VOTE_DEVICE);

	return 0;
}