瀏覽代碼

libertas: Add reset_card() callback to hardware driver

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
David Woodhouse 17 年之前
父節點
當前提交
edf5dabfa8
共有 2 個文件被更改,包括 6 次插入0 次删除
  1. 1 0
      drivers/net/wireless/libertas/dev.h
  2. 5 0
      drivers/net/wireless/libertas/main.c

+ 1 - 0
drivers/net/wireless/libertas/dev.h

@@ -153,6 +153,7 @@ struct lbs_private {
 
 
 	/** Hardware access */
 	/** Hardware access */
 	int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
 	int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
+	void (*reset_card) (struct lbs_private *priv);
 
 
 	/* Wake On LAN */
 	/* Wake On LAN */
 	uint32_t wol_criteria;
 	uint32_t wol_criteria;

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

@@ -787,6 +787,11 @@ static int lbs_thread(void *data)
 					    le16_to_cpu(cmdnode->cmdbuf->command));
 					    le16_to_cpu(cmdnode->cmdbuf->command));
 				lbs_complete_command(priv, cmdnode, -ETIMEDOUT);
 				lbs_complete_command(priv, cmdnode, -ETIMEDOUT);
 				priv->nr_retries = 0;
 				priv->nr_retries = 0;
+				if (priv->reset_card) {
+					spin_unlock_irq(&priv->driver_lock);
+					priv->reset_card(priv);
+					spin_lock_irq(&priv->driver_lock);
+				}
 			} else {
 			} else {
 				priv->cur_cmd = NULL;
 				priv->cur_cmd = NULL;
 				lbs_pr_info("requeueing command %x due to timeout (#%d)\n",
 				lbs_pr_info("requeueing command %x due to timeout (#%d)\n",