Return-path: Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:54400 "EHLO mx0a-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754707Ab3ITWVh (ORCPT ); Fri, 20 Sep 2013 18:21:37 -0400 From: Bing Zhao To: CC: Marcel Holtmann , Gustavo Padovan , Johan Hedberg , , Mike Frysinger , Hyuckjoo Lee , Bing Zhao , Amitkumar Karwar Subject: [PATCH v5 1/2] Bluetooth: btmrvl: add setup handler Date: Fri, 20 Sep 2013 15:21:06 -0700 Message-ID: <1379715667-22424-1-git-send-email-bzhao@marvell.com> (sfid-20130921_002142_513832_0E6BE026) MIME-Version: 1.0 Content-Type: text/plain Sender: linux-wireless-owner@vger.kernel.org List-ID: From: Amitkumar Karwar Move initialization code to hdev's setup handler. New flag setup_done is added to make sure that initialization is done only during driver load time. Our firmware doesn't expect re-initialization later when interface is re-enabled. Signed-off-by: Amitkumar Karwar Signed-off-by: Bing Zhao --- v5: make use of hdev's setup handler (Marcel Holtmann) drivers/bluetooth/btmrvl_drv.h | 1 + drivers/bluetooth/btmrvl_main.c | 23 +++++++++++++++++++++-- drivers/bluetooth/btmrvl_sdio.c | 6 ------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h index 27068d1..e776b8b 100644 --- a/drivers/bluetooth/btmrvl_drv.h +++ b/drivers/bluetooth/btmrvl_drv.h @@ -68,6 +68,7 @@ struct btmrvl_adapter { wait_queue_head_t cmd_wait_q; u8 cmd_complete; bool is_suspended; + bool setup_done; }; struct btmrvl_private { diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c index 9a9f518..e352f8e 100644 --- a/drivers/bluetooth/btmrvl_main.c +++ b/drivers/bluetooth/btmrvl_main.c @@ -479,6 +479,27 @@ static int btmrvl_open(struct hci_dev *hdev) return 0; } +static int btmrvl_setup(struct hci_dev *hdev) +{ + struct btmrvl_private *priv = hci_get_drvdata(hdev); + struct btmrvl_adapter *adapter = priv->adapter; + + if (adapter->setup_done) + return 0; + + btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); + + priv->btmrvl_dev.psmode = 1; + btmrvl_enable_ps(priv); + + priv->btmrvl_dev.gpio_gap = 0xffff; + btmrvl_send_hscfg_cmd(priv); + + adapter->setup_done = true; + + return 0; +} + /* * This function handles the event generated by firmware, rx data * received from firmware, and tx data sent from kernel. @@ -572,8 +592,7 @@ int btmrvl_register_hdev(struct btmrvl_private *priv) hdev->flush = btmrvl_flush; hdev->send = btmrvl_send_frame; hdev->ioctl = btmrvl_ioctl; - - btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); + hdev->setup = btmrvl_setup; hdev->dev_type = priv->btmrvl_dev.dev_type; diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index 75c2626..c526915 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c @@ -1046,12 +1046,6 @@ static int btmrvl_sdio_probe(struct sdio_func *func, goto disable_host_int; } - priv->btmrvl_dev.psmode = 1; - btmrvl_enable_ps(priv); - - priv->btmrvl_dev.gpio_gap = 0xffff; - btmrvl_send_hscfg_cmd(priv); - return 0; disable_host_int: -- 1.7.3.4