cnss2: Ensure driver registration before suspend
Ensure wlan driver registration before invoking suspend callback. Change-Id: I2c8e40770209ae37364bdfea71045522d43465a8 CRs-Fixed: 3378544
This commit is contained in:

committed by
Madan Koyyalamudi

parent
313bb86570
commit
9d783b8514
18
cnss2/pci.c
18
cnss2/pci.c
@@ -3620,10 +3620,12 @@ static int cnss_pci_suspend_driver(struct cnss_pci_data *pci_priv)
|
||||
struct pci_dev *pci_dev = pci_priv->pci_dev;
|
||||
struct cnss_wlan_driver *driver_ops = pci_priv->driver_ops;
|
||||
int ret = 0;
|
||||
struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
|
||||
|
||||
pm_message_t state = { .event = PM_EVENT_SUSPEND };
|
||||
|
||||
if (driver_ops && driver_ops->suspend) {
|
||||
if (test_bit(CNSS_DRIVER_REGISTERED, &plat_priv->driver_state) &&
|
||||
driver_ops && driver_ops->suspend) {
|
||||
ret = driver_ops->suspend(pci_dev, state);
|
||||
if (ret) {
|
||||
cnss_pr_err("Failed to suspend host driver, err = %d\n",
|
||||
@@ -3640,8 +3642,10 @@ static int cnss_pci_resume_driver(struct cnss_pci_data *pci_priv)
|
||||
struct pci_dev *pci_dev = pci_priv->pci_dev;
|
||||
struct cnss_wlan_driver *driver_ops = pci_priv->driver_ops;
|
||||
int ret = 0;
|
||||
struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
|
||||
|
||||
if (driver_ops && driver_ops->resume) {
|
||||
if (test_bit(CNSS_DRIVER_REGISTERED, &plat_priv->driver_state) &&
|
||||
driver_ops && driver_ops->resume) {
|
||||
ret = driver_ops->resume(pci_dev);
|
||||
if (ret)
|
||||
cnss_pr_err("Failed to resume host driver, err = %d\n",
|
||||
@@ -3849,6 +3853,7 @@ static int cnss_pci_suspend_noirq(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_wlan_driver *driver_ops;
|
||||
struct cnss_plat_data *plat_priv;
|
||||
|
||||
if (!pci_priv)
|
||||
goto out;
|
||||
@@ -3857,7 +3862,9 @@ static int cnss_pci_suspend_noirq(struct device *dev)
|
||||
goto out;
|
||||
|
||||
driver_ops = pci_priv->driver_ops;
|
||||
if (driver_ops && driver_ops->suspend_noirq)
|
||||
plat_priv = pci_priv->plat_priv;
|
||||
if (test_bit(CNSS_DRIVER_REGISTERED, &plat_priv->driver_state) &&
|
||||
driver_ops && driver_ops->suspend_noirq)
|
||||
ret = driver_ops->suspend_noirq(pci_dev);
|
||||
|
||||
if (pci_priv->disable_pc && !pci_dev->state_saved &&
|
||||
@@ -3874,6 +3881,7 @@ static int cnss_pci_resume_noirq(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_wlan_driver *driver_ops;
|
||||
struct cnss_plat_data *plat_priv;
|
||||
|
||||
if (!pci_priv)
|
||||
goto out;
|
||||
@@ -3881,8 +3889,10 @@ static int cnss_pci_resume_noirq(struct device *dev)
|
||||
if (!cnss_is_device_powered_on(pci_priv->plat_priv))
|
||||
goto out;
|
||||
|
||||
plat_priv = pci_priv->plat_priv;
|
||||
driver_ops = pci_priv->driver_ops;
|
||||
if (driver_ops && driver_ops->resume_noirq &&
|
||||
if (test_bit(CNSS_DRIVER_REGISTERED, &plat_priv->driver_state) &&
|
||||
driver_ops && driver_ops->resume_noirq &&
|
||||
!pci_priv->pci_link_down_ind)
|
||||
ret = driver_ops->resume_noirq(pci_dev);
|
||||
|
||||
|
Reference in New Issue
Block a user