public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver
@ 2009-09-30 18:18 Bing Zhao
  2009-10-12 19:58 ` Bing Zhao
  0 siblings, 1 reply; 2+ messages in thread
From: Bing Zhao @ 2009-09-30 18:18 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Bing Zhao, Amitkumar Karwar

From: Amitkumar Karwar <akarwar@marvell.com>

The auto sleep mode for btmrvl driver is not enabled by default.
This patch enables auto sleep mode when card is probed.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
 drivers/bluetooth/btmrvl_drv.h  |    1 +
 drivers/bluetooth/btmrvl_main.c |   55 +++++++++++++++++++++++---------------
 drivers/bluetooth/btmrvl_sdio.c |    2 +
 3 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h
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 *skb);
 
 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);
 
 #ifdef CONFIG_DEBUG_FS
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
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)
 }
 EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd);
 
+int btmrvl_enable_ps(struct btmrvl_private *priv)
+{
+	struct sk_buff *skb;
+	struct btmrvl_cmd *cmd;
+
+	skb = bt_skb_alloc(sizeof(*cmd), GFP_ATOMIC);
+	if (skb == NULL) {
+		BT_ERR("No free skb");
+		return -ENOMEM;
+	}
+
+	cmd = (struct btmrvl_cmd *) skb_put(skb, sizeof(*cmd));
+	cmd->ocf_ogf = cpu_to_le16(hci_opcode_pack(OGF,
+					BT_CMD_AUTO_SLEEP_MODE));
+	cmd->length = 1;
+
+	if (priv->btmrvl_dev.psmode)
+		cmd->data[0] = BT_PS_ENABLE;
+	else
+		cmd->data[0] = BT_PS_DISABLE;
+
+	bt_cb(skb)->pkt_type = MRVL_VENDOR_PKT;
+
+	skb->dev = (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 *priv)
 
 	if (priv->btmrvl_dev.pscmd) {
 		priv->btmrvl_dev.pscmd = 0;
-
-		skb = bt_skb_alloc(sizeof(*cmd), GFP_ATOMIC);
-		if (skb == NULL) {
-			BT_ERR("No free skb");
-			return -ENOMEM;
-		}
-
-		cmd = (struct btmrvl_cmd *) skb_put(skb, sizeof(*cmd));
-		cmd->ocf_ogf = cpu_to_le16(hci_opcode_pack(OGF, BT_CMD_AUTO_SLEEP_MODE));
-		cmd->length = 1;
-
-		if (priv->btmrvl_dev.psmode)
-			cmd->data[0] = BT_PS_ENABLE;
-		else
-			cmd->data[0] = BT_PS_DISABLE;
-
-		bt_cb(skb)->pkt_type = MRVL_VENDOR_PKT;
-
-		skb->dev = (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);
 	}
 
 	if (priv->btmrvl_dev.hscmd) {
diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
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 = btmrvl_sdio_wakeup_fw;
 
 	btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ);
+	priv->btmrvl_dev.psmode = 1;
+	btmrvl_enable_ps(priv);
 
 	return 0;
 
-- 
1.5.4.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* RE: [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver
  2009-09-30 18:18 [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver Bing Zhao
@ 2009-10-12 19:58 ` Bing Zhao
  0 siblings, 0 replies; 2+ messages in thread
From: Bing Zhao @ 2009-10-12 19:58 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: Amitkumar Karwar, linux-bluetooth@vger.kernel.org


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 <akarwar@marvell.com>
>=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 <akarwar@marvell.com>
> Signed-off-by: Bing Zhao <bzhao@marvell.com>

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 +++++++++++++++++++++++----------=
-----
>  drivers/bluetooth/btmrvl_sdio.c |    2 +
>  3 files changed, 36 insertions(+), 22 deletions(-)
>=20
> diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_dr=
v.h
> 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);
>=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_FS
> diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_m=
ain.c
> 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)
>  }
>  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));
> -		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
> 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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-10-12 19:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-30 18:18 [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver Bing Zhao
2009-10-12 19:58 ` Bing Zhao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox