aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r--drivers/bluetooth/btmrvl_debugfs.c1
-rw-r--r--drivers/bluetooth/btmrvl_drv.h1
-rw-r--r--drivers/bluetooth/btmrvl_main.c55
-rw-r--r--drivers/bluetooth/btmrvl_sdio.c4
-rw-r--r--drivers/bluetooth/hci_vhci.c20
5 files changed, 41 insertions, 40 deletions
diff --git a/drivers/bluetooth/btmrvl_debugfs.c b/drivers/bluetooth/btmrvl_debugfs.c
index 4617bd12f63b..d43b5cb864ef 100644
--- a/drivers/bluetooth/btmrvl_debugfs.c
+++ b/drivers/bluetooth/btmrvl_debugfs.c
@@ -29,7 +29,6 @@ struct btmrvl_debugfs_data {
29 struct dentry *root_dir, *config_dir, *status_dir; 29 struct dentry *root_dir, *config_dir, *status_dir;
30 30
31 /* config */ 31 /* config */
32 struct dentry *drvdbg;
33 struct dentry *psmode; 32 struct dentry *psmode;
34 struct dentry *pscmd; 33 struct dentry *pscmd;
35 struct dentry *hsmode; 34 struct dentry *hsmode;
diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h
index 411c7a77082d..523d197b9824 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);
131int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb); 131int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb);
132 132
133int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, int subcmd); 133int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, int subcmd);
134int btmrvl_enable_ps(struct btmrvl_private *priv);
134int btmrvl_prepare_command(struct btmrvl_private *priv); 135int btmrvl_prepare_command(struct btmrvl_private *priv);
135 136
136#ifdef CONFIG_DEBUG_FS 137#ifdef CONFIG_DEBUG_FS
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index e605563b4eaa..f97771ce432c 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) {
diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 5b33b85790f2..1e6eb1aeba2b 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,
930 priv->hw_wakeup_firmware = btmrvl_sdio_wakeup_fw; 930 priv->hw_wakeup_firmware = btmrvl_sdio_wakeup_fw;
931 931
932 btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); 932 btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ);
933 priv->btmrvl_dev.psmode = 1;
934 btmrvl_enable_ps(priv);
933 935
934 return 0; 936 return 0;
935 937
@@ -1001,3 +1003,5 @@ MODULE_AUTHOR("Marvell International Ltd.");
1001MODULE_DESCRIPTION("Marvell BT-over-SDIO driver ver " VERSION); 1003MODULE_DESCRIPTION("Marvell BT-over-SDIO driver ver " VERSION);
1002MODULE_VERSION(VERSION); 1004MODULE_VERSION(VERSION);
1003MODULE_LICENSE("GPL v2"); 1005MODULE_LICENSE("GPL v2");
1006MODULE_FIRMWARE("sd8688_helper.bin");
1007MODULE_FIRMWARE("sd8688.bin");
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
index d5cde6d86f89..7595274103fd 100644
--- a/drivers/bluetooth/hci_vhci.c
+++ b/drivers/bluetooth/hci_vhci.c
@@ -41,8 +41,6 @@
41 41
42#define VERSION "1.3" 42#define VERSION "1.3"
43 43
44static int minor = MISC_DYNAMIC_MINOR;
45
46struct vhci_data { 44struct vhci_data {
47 struct hci_dev *hdev; 45 struct hci_dev *hdev;
48 46
@@ -218,12 +216,6 @@ static unsigned int vhci_poll(struct file *file, poll_table *wait)
218 return POLLOUT | POLLWRNORM; 216 return POLLOUT | POLLWRNORM;
219} 217}
220 218
221static int vhci_ioctl(struct inode *inode, struct file *file,
222 unsigned int cmd, unsigned long arg)
223{
224 return -EINVAL;
225}
226
227static int vhci_open(struct inode *inode, struct file *file) 219static int vhci_open(struct inode *inode, struct file *file)
228{ 220{
229 struct vhci_data *data; 221 struct vhci_data *data;
@@ -284,10 +276,10 @@ static int vhci_release(struct inode *inode, struct file *file)
284} 276}
285 277
286static const struct file_operations vhci_fops = { 278static const struct file_operations vhci_fops = {
279 .owner = THIS_MODULE,
287 .read = vhci_read, 280 .read = vhci_read,
288 .write = vhci_write, 281 .write = vhci_write,
289 .poll = vhci_poll, 282 .poll = vhci_poll,
290 .ioctl = vhci_ioctl,
291 .open = vhci_open, 283 .open = vhci_open,
292 .release = vhci_release, 284 .release = vhci_release,
293}; 285};
@@ -302,18 +294,12 @@ static int __init vhci_init(void)
302{ 294{
303 BT_INFO("Virtual HCI driver ver %s", VERSION); 295 BT_INFO("Virtual HCI driver ver %s", VERSION);
304 296
305 if (misc_register(&vhci_miscdev) < 0) { 297 return misc_register(&vhci_miscdev);
306 BT_ERR("Can't register misc device with minor %d", minor);
307 return -EIO;
308 }
309
310 return 0;
311} 298}
312 299
313static void __exit vhci_exit(void) 300static void __exit vhci_exit(void)
314{ 301{
315 if (misc_deregister(&vhci_miscdev) < 0) 302 misc_deregister(&vhci_miscdev);
316 BT_ERR("Can't unregister misc device with minor %d", minor);
317} 303}
318 304
319module_init(vhci_init); 305module_init(vhci_init);