Merge "cnss2: Add force wake support"
This commit is contained in:
commit
2690915ff3
2 changed files with 91 additions and 0 deletions
|
@ -1297,6 +1297,94 @@ int cnss_pm_request_resume(struct cnss_pci_data *pci_priv)
|
||||||
return pm_request_resume(&pci_dev->dev);
|
return pm_request_resume(&pci_dev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_CNSS_QCA6390
|
||||||
|
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 mhi_controller *mhi_ctrl;
|
||||||
|
|
||||||
|
if (!pci_priv)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (pci_priv->device_id != QCA6390_DEVICE_ID)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
mhi_ctrl = pci_priv->mhi_ctrl;
|
||||||
|
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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cnss_pci_force_wake_request);
|
||||||
|
|
||||||
|
int cnss_pci_is_device_awake(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 mhi_controller *mhi_ctrl;
|
||||||
|
|
||||||
|
if (!pci_priv)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (pci_priv->device_id != QCA6390_DEVICE_ID)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
mhi_ctrl = pci_priv->mhi_ctrl;
|
||||||
|
if (!mhi_ctrl)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return mhi_ctrl->dev_state == MHI_STATE_M0 ? true : false;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cnss_pci_is_device_awake);
|
||||||
|
|
||||||
|
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 mhi_controller *mhi_ctrl;
|
||||||
|
|
||||||
|
if (!pci_priv)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (pci_priv->device_id != QCA6390_DEVICE_ID)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
mhi_ctrl = pci_priv->mhi_ctrl;
|
||||||
|
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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cnss_pci_force_wake_release);
|
||||||
|
#else
|
||||||
|
int cnss_pci_force_wake_request(struct device *dev)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cnss_pci_force_wake_request);
|
||||||
|
|
||||||
|
int cnss_pci_is_device_awake(struct device *dev)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cnss_pci_is_device_awake);
|
||||||
|
|
||||||
|
int cnss_pci_force_wake_release(struct device *dev)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cnss_pci_force_wake_release);
|
||||||
|
#endif
|
||||||
|
|
||||||
int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv)
|
int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv)
|
||||||
{
|
{
|
||||||
struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
|
struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
|
||||||
|
|
|
@ -192,6 +192,9 @@ extern void cnss_lock_pm_sem(struct device *dev);
|
||||||
extern void cnss_release_pm_sem(struct device *dev);
|
extern void cnss_release_pm_sem(struct device *dev);
|
||||||
extern int cnss_auto_suspend(struct device *dev);
|
extern int cnss_auto_suspend(struct device *dev);
|
||||||
extern int cnss_auto_resume(struct device *dev);
|
extern int cnss_auto_resume(struct device *dev);
|
||||||
|
extern int cnss_pci_force_wake_request(struct device *dev);
|
||||||
|
extern int cnss_pci_is_device_awake(struct device *dev);
|
||||||
|
extern int cnss_pci_force_wake_release(struct device *dev);
|
||||||
extern int cnss_get_user_msi_assignment(struct device *dev, char *user_name,
|
extern int cnss_get_user_msi_assignment(struct device *dev, char *user_name,
|
||||||
int *num_vectors,
|
int *num_vectors,
|
||||||
uint32_t *user_base_data,
|
uint32_t *user_base_data,
|
||||||
|
|
Loading…
Add table
Reference in a new issue