aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btmrvl_main.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /drivers/bluetooth/btmrvl_main.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/bluetooth/btmrvl_main.c')
-rw-r--r--drivers/bluetooth/btmrvl_main.c57
1 files changed, 34 insertions, 23 deletions
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index e605563b4eaa..53a43adf2e21 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)
189} 189}
190EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd); 190EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd);
191 191
192int 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}
222EXPORT_SYMBOL_GPL(btmrvl_enable_ps);
223
192static int btmrvl_enable_hs(struct btmrvl_private *priv) 224static int btmrvl_enable_hs(struct btmrvl_private *priv)
193{ 225{
194 struct sk_buff *skb; 226 struct sk_buff *skb;
@@ -258,28 +290,7 @@ int btmrvl_prepare_command(struct btmrvl_private *priv)
258 290
259 if (priv->btmrvl_dev.pscmd) { 291 if (priv->btmrvl_dev.pscmd) {
260 priv->btmrvl_dev.pscmd = 0; 292 priv->btmrvl_dev.pscmd = 0;
261 293 btmrvl_enable_ps(priv);
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]);
283 } 294 }
284 295
285 if (priv->btmrvl_dev.hscmd) { 296 if (priv->btmrvl_dev.hscmd) {
@@ -552,7 +563,7 @@ struct btmrvl_private *btmrvl_add_card(void *card)
552 563
553 priv->btmrvl_dev.tx_dnld_rdy = true; 564 priv->btmrvl_dev.tx_dnld_rdy = true;
554 565
555 hdev->type = HCI_SDIO; 566 hdev->bus = HCI_SDIO;
556 hdev->open = btmrvl_open; 567 hdev->open = btmrvl_open;
557 hdev->close = btmrvl_close; 568 hdev->close = btmrvl_close;
558 hdev->flush = btmrvl_flush; 569 hdev->flush = btmrvl_flush;