RE: [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marcel,

> -----Original Message-----
> From: Bing Zhao [mailto:bzhao@xxxxxxxxxxx]
> Sent: Wednesday, September 30, 2009 11:19 AM
> To: linux-bluetooth@xxxxxxxxxxxxxxx
> Cc: Bing Zhao; Amitkumar Karwar
> Subject: [PATCH v2] Bluetooth: Enable auto sleep mode for btmrvl driver
> 
> From: Amitkumar Karwar <akarwar@xxxxxxxxxxx>
> 
> 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@xxxxxxxxxxx>
> Signed-off-by: Bing Zhao <bzhao@xxxxxxxxxxx>

Does this patch look okay to you? Please let me know if any change is needed.

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(-)
> 
> 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

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux