RE: [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver
From: Bing Zhao <hidden>
Date: 2009-10-12 19:58:16
Hi Marcel,
-----Original Message----- From: Bing Zhao [mailto:bzhao@marvell.com] Sent: Wednesday, September 30, 2009 11:19 AM To: linux-bluetooth@vger.kernel.org Cc: Bing Zhao; Amitkumar Karwar Subject: [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver =20 From: Amitkumar Karwar <redacted> =20 The auto sleep mode for btmrvl driver is not enabled by default. This patch enables auto sleep mode when card is probed. =20 Signed-off-by: Amitkumar Karwar <redacted> Signed-off-by: Bing Zhao <redacted>
Does this patch look okay to you? Please let me know if any change is neede= d. Thanks, Bing
--- drivers/bluetooth/btmrvl_drv.h | 1 + drivers/bluetooth/btmrvl_main.c | 55 +++++++++++++++++++++++----------=
-----
quoted hunk ↗ jump to hunk
drivers/bluetooth/btmrvl_sdio.c | 2 + 3 files changed, 36 insertions(+), 22 deletions(-) =20diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_dr=
v.h
quoted hunk ↗ jump to hunk
index 411c7a7..523d197 100644--- a/drivers/bluetooth/btmrvl_drv.h +++ b/drivers/bluetooth/btmrvl_drv.h@@ -131,6 +131,7 @@ void btmrvl_check_evtpkt(struct btmrvl_private *priv,=
struct sk_buff *skb);
int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *sk=
b);
quoted hunk ↗ jump to hunk
=20 int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, int subcmd); +int btmrvl_enable_ps(struct btmrvl_private *priv); int btmrvl_prepare_command(struct btmrvl_private *priv); =20 #ifdef CONFIG_DEBUG_FSdiff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_m=
ain.c
quoted hunk ↗ jump to hunk
index e605563..f97771c 100644--- a/drivers/bluetooth/btmrvl_main.c +++ b/drivers/bluetooth/btmrvl_main.c@@ -189,6 +189,38 @@ int btmrvl_send_module_cfg_cmd(struct btmrvl_private=
*priv, int subcmd)
quoted hunk ↗ jump to hunk
} EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd); =20 +int btmrvl_enable_ps(struct btmrvl_private *priv) +{ + struct sk_buff *skb; + struct btmrvl_cmd *cmd; + + skb =3D bt_skb_alloc(sizeof(*cmd), GFP_ATOMIC); + if (skb =3D=3D NULL) { + BT_ERR("No free skb"); + return -ENOMEM; + } + + cmd =3D (struct btmrvl_cmd *) skb_put(skb, sizeof(*cmd)); + cmd->ocf_ogf =3D cpu_to_le16(hci_opcode_pack(OGF, + BT_CMD_AUTO_SLEEP_MODE)); + cmd->length =3D 1; + + if (priv->btmrvl_dev.psmode) + cmd->data[0] =3D BT_PS_ENABLE; + else + cmd->data[0] =3D BT_PS_DISABLE; + + bt_cb(skb)->pkt_type =3D MRVL_VENDOR_PKT; + + skb->dev =3D (void *) priv->btmrvl_dev.hcidev; + skb_queue_head(&priv->adapter->tx_queue, skb); + + BT_DBG("Queue PSMODE Command:%d", cmd->data[0]); + + return 0; +} +EXPORT_SYMBOL_GPL(btmrvl_enable_ps); + static int btmrvl_enable_hs(struct btmrvl_private *priv) { struct sk_buff *skb;@@ -258,28 +290,7 @@ int btmrvl_prepare_command(struct btmrvl_private *pr=
iv)
=20
if (priv->btmrvl_dev.pscmd) {
priv->btmrvl_dev.pscmd =3D 0;
-
- skb =3D bt_skb_alloc(sizeof(*cmd), GFP_ATOMIC);
- if (skb =3D=3D NULL) {
- BT_ERR("No free skb");
- return -ENOMEM;
- }
-
- cmd =3D (struct btmrvl_cmd *) skb_put(skb, sizeof(*cmd));
- cmd->ocf_ogf =3D cpu_to_le16(hci_opcode_pack(OGF, BT_CMD_AUTO_SLEEP_MO=DE));
quoted hunk ↗ jump to hunk
- cmd->length =3D 1; - - if (priv->btmrvl_dev.psmode) - cmd->data[0] =3D BT_PS_ENABLE; - else - cmd->data[0] =3D BT_PS_DISABLE; - - bt_cb(skb)->pkt_type =3D MRVL_VENDOR_PKT; - - skb->dev =3D (void *) priv->btmrvl_dev.hcidev; - skb_queue_head(&priv->adapter->tx_queue, skb); - - BT_DBG("Queue PSMODE Command:%d", cmd->data[0]); + btmrvl_enable_ps(priv); } =20 if (priv->btmrvl_dev.hscmd) {diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_s=
dio.c
quoted hunk ↗ jump to hunk
index 5b33b85..d6aaf51 100644--- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c@@ -930,6 +930,8 @@ static int btmrvl_sdio_probe(struct sdio_func *func, priv->hw_wakeup_firmware =3D btmrvl_sdio_wakeup_fw;=20 btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); + priv->btmrvl_dev.psmode =3D 1; + btmrvl_enable_ps(priv); =20 return 0; =20 -- 1.5.4.3