Commit 32fd63981ed453bd882f22e3e9b0ccbc11fb47e5
Committed by
Marcel Holtmann
1 parent
2ab25cdd7b
Bluetooth: Enable auto sleep mode for btmrvl driver
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> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Showing 3 changed files with 36 additions and 22 deletions Side-by-side Diff
drivers/bluetooth/btmrvl_drv.h
... | ... | @@ -131,6 +131,7 @@ |
131 | 131 | int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb); |
132 | 132 | |
133 | 133 | int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, int subcmd); |
134 | +int btmrvl_enable_ps(struct btmrvl_private *priv); | |
134 | 135 | int btmrvl_prepare_command(struct btmrvl_private *priv); |
135 | 136 | |
136 | 137 | #ifdef CONFIG_DEBUG_FS |
drivers/bluetooth/btmrvl_main.c
... | ... | @@ -189,6 +189,38 @@ |
189 | 189 | } |
190 | 190 | EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd); |
191 | 191 | |
192 | +int btmrvl_enable_ps(struct btmrvl_private *priv) | |
193 | +{ | |
194 | + struct sk_buff *skb; | |
195 | + struct btmrvl_cmd *cmd; | |
196 | + | |
197 | + skb = bt_skb_alloc(sizeof(*cmd), GFP_ATOMIC); | |
198 | + if (skb == NULL) { | |
199 | + BT_ERR("No free skb"); | |
200 | + return -ENOMEM; | |
201 | + } | |
202 | + | |
203 | + cmd = (struct btmrvl_cmd *) skb_put(skb, sizeof(*cmd)); | |
204 | + cmd->ocf_ogf = cpu_to_le16(hci_opcode_pack(OGF, | |
205 | + BT_CMD_AUTO_SLEEP_MODE)); | |
206 | + cmd->length = 1; | |
207 | + | |
208 | + if (priv->btmrvl_dev.psmode) | |
209 | + cmd->data[0] = BT_PS_ENABLE; | |
210 | + else | |
211 | + cmd->data[0] = BT_PS_DISABLE; | |
212 | + | |
213 | + bt_cb(skb)->pkt_type = MRVL_VENDOR_PKT; | |
214 | + | |
215 | + skb->dev = (void *) priv->btmrvl_dev.hcidev; | |
216 | + skb_queue_head(&priv->adapter->tx_queue, skb); | |
217 | + | |
218 | + BT_DBG("Queue PSMODE Command:%d", cmd->data[0]); | |
219 | + | |
220 | + return 0; | |
221 | +} | |
222 | +EXPORT_SYMBOL_GPL(btmrvl_enable_ps); | |
223 | + | |
192 | 224 | static int btmrvl_enable_hs(struct btmrvl_private *priv) |
193 | 225 | { |
194 | 226 | struct sk_buff *skb; |
... | ... | @@ -258,28 +290,7 @@ |
258 | 290 | |
259 | 291 | if (priv->btmrvl_dev.pscmd) { |
260 | 292 | priv->btmrvl_dev.pscmd = 0; |
261 | - | |
262 | - skb = bt_skb_alloc(sizeof(*cmd), GFP_ATOMIC); | |
263 | - if (skb == NULL) { | |
264 | - BT_ERR("No free skb"); | |
265 | - return -ENOMEM; | |
266 | - } | |
267 | - | |
268 | - cmd = (struct btmrvl_cmd *) skb_put(skb, sizeof(*cmd)); | |
269 | - cmd->ocf_ogf = cpu_to_le16(hci_opcode_pack(OGF, BT_CMD_AUTO_SLEEP_MODE)); | |
270 | - cmd->length = 1; | |
271 | - | |
272 | - if (priv->btmrvl_dev.psmode) | |
273 | - cmd->data[0] = BT_PS_ENABLE; | |
274 | - else | |
275 | - cmd->data[0] = BT_PS_DISABLE; | |
276 | - | |
277 | - bt_cb(skb)->pkt_type = MRVL_VENDOR_PKT; | |
278 | - | |
279 | - skb->dev = (void *) priv->btmrvl_dev.hcidev; | |
280 | - skb_queue_head(&priv->adapter->tx_queue, skb); | |
281 | - | |
282 | - BT_DBG("Queue PSMODE Command:%d", cmd->data[0]); | |
293 | + btmrvl_enable_ps(priv); | |
283 | 294 | } |
284 | 295 | |
285 | 296 | if (priv->btmrvl_dev.hscmd) { |
drivers/bluetooth/btmrvl_sdio.c