浏览代码

libertas sdio: fix suspend when interface is down

When the interface is down, the hardware is powered off.
However, the suspend handler currently tries to send host sleep commands
(when wakeup params are set) in this configuration, causing a system hang
when going into suspend (the commands will never complete).

Avoid this by detecting this situation and simply returning from
the suspend handler without doing anything special.

Signed-off-by: Daniel Drake <dsd@laptop.org>
Acked-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Daniel Drake 13 年之前
父节点
当前提交
f10723841e
共有 1 个文件被更改,包括 5 次插入0 次删除
  1. 5 0
      drivers/net/wireless/libertas/if_sdio.c

+ 5 - 0
drivers/net/wireless/libertas/if_sdio.c

@@ -1326,6 +1326,11 @@ static int if_sdio_suspend(struct device *dev)
 
 
 	mmc_pm_flag_t flags = sdio_get_host_pm_caps(func);
 	mmc_pm_flag_t flags = sdio_get_host_pm_caps(func);
 
 
+	/* If we're powered off anyway, just let the mmc layer remove the
+	 * card. */
+	if (!lbs_iface_active(card->priv))
+		return -ENOSYS;
+
 	dev_info(dev, "%s: suspend: PM flags = 0x%x\n",
 	dev_info(dev, "%s: suspend: PM flags = 0x%x\n",
 		 sdio_func_id(func), flags);
 		 sdio_func_id(func), flags);