aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBing Zhao <bzhao@marvell.com>2014-03-31 17:41:44 -0400
committerMarcel Holtmann <marcel@holtmann.org>2014-07-03 11:42:54 -0400
commit4df82b5911c0e380d8b308958f158c3e7b365467 (patch)
treef767af37131c47f205729c280a0f9352675963fe /drivers
parent2a8357f2393d89a34b5a77051d29951af9646406 (diff)
Bluetooth: btmrvl: indicate pscan scheduling instant in a debug event
A vendor specific command is sent to firmware during initialization to enable this feature. This command is for SD8897 only. Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/bluetooth/btmrvl_drv.h1
-rw-r--r--drivers/bluetooth/btmrvl_main.c19
-rw-r--r--drivers/bluetooth/btmrvl_sdio.c5
-rw-r--r--drivers/bluetooth/btmrvl_sdio.h2
4 files changed, 27 insertions, 0 deletions
diff --git a/drivers/bluetooth/btmrvl_drv.h b/drivers/bluetooth/btmrvl_drv.h
index dc79f88f8717..4c313e73df83 100644
--- a/drivers/bluetooth/btmrvl_drv.h
+++ b/drivers/bluetooth/btmrvl_drv.h
@@ -89,6 +89,7 @@ struct btmrvl_private {
89#define MRVL_VENDOR_PKT 0xFE 89#define MRVL_VENDOR_PKT 0xFE
90 90
91/* Vendor specific Bluetooth commands */ 91/* Vendor specific Bluetooth commands */
92#define BT_CMD_PSCAN_WIN_REPORT_ENABLE 0xFC03
92#define BT_CMD_AUTO_SLEEP_MODE 0xFC23 93#define BT_CMD_AUTO_SLEEP_MODE 0xFC23
93#define BT_CMD_HOST_SLEEP_CONFIG 0xFC59 94#define BT_CMD_HOST_SLEEP_CONFIG 0xFC59
94#define BT_CMD_HOST_SLEEP_ENABLE 0xFC5A 95#define BT_CMD_HOST_SLEEP_ENABLE 0xFC5A
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index e9dbddb0b8f1..d35f2e189a6d 100644
--- a/drivers/bluetooth/btmrvl_main.c
+++ b/drivers/bluetooth/btmrvl_main.c
@@ -214,6 +214,23 @@ int btmrvl_send_module_cfg_cmd(struct btmrvl_private *priv, u8 subcmd)
214} 214}
215EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd); 215EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd);
216 216
217int btmrvl_pscan_window_reporting(struct btmrvl_private *priv, u8 subcmd)
218{
219 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card;
220 int ret;
221
222 if (!card->support_pscan_win_report)
223 return 0;
224
225 ret = btmrvl_send_sync_cmd(priv, BT_CMD_PSCAN_WIN_REPORT_ENABLE,
226 &subcmd, 1);
227 if (ret)
228 BT_ERR("PSCAN_WIN_REPORT_ENABLE command failed: %#x", ret);
229
230 return ret;
231}
232EXPORT_SYMBOL_GPL(btmrvl_pscan_window_reporting);
233
217int btmrvl_send_hscfg_cmd(struct btmrvl_private *priv) 234int btmrvl_send_hscfg_cmd(struct btmrvl_private *priv)
218{ 235{
219 int ret; 236 int ret;
@@ -489,6 +506,8 @@ static int btmrvl_setup(struct hci_dev *hdev)
489 506
490 btmrvl_cal_data_dt(priv); 507 btmrvl_cal_data_dt(priv);
491 508
509 btmrvl_pscan_window_reporting(priv, 0x01);
510
492 priv->btmrvl_dev.psmode = 1; 511 priv->btmrvl_dev.psmode = 1;
493 btmrvl_enable_ps(priv); 512 btmrvl_enable_ps(priv);
494 513
diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 9dedca516ff5..efff06438b02 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -108,6 +108,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8688 = {
108 .helper = "mrvl/sd8688_helper.bin", 108 .helper = "mrvl/sd8688_helper.bin",
109 .firmware = "mrvl/sd8688.bin", 109 .firmware = "mrvl/sd8688.bin",
110 .reg = &btmrvl_reg_8688, 110 .reg = &btmrvl_reg_8688,
111 .support_pscan_win_report = false,
111 .sd_blksz_fw_dl = 64, 112 .sd_blksz_fw_dl = 64,
112}; 113};
113 114
@@ -115,6 +116,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8787 = {
115 .helper = NULL, 116 .helper = NULL,
116 .firmware = "mrvl/sd8787_uapsta.bin", 117 .firmware = "mrvl/sd8787_uapsta.bin",
117 .reg = &btmrvl_reg_87xx, 118 .reg = &btmrvl_reg_87xx,
119 .support_pscan_win_report = false,
118 .sd_blksz_fw_dl = 256, 120 .sd_blksz_fw_dl = 256,
119}; 121};
120 122
@@ -122,6 +124,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8797 = {
122 .helper = NULL, 124 .helper = NULL,
123 .firmware = "mrvl/sd8797_uapsta.bin", 125 .firmware = "mrvl/sd8797_uapsta.bin",
124 .reg = &btmrvl_reg_87xx, 126 .reg = &btmrvl_reg_87xx,
127 .support_pscan_win_report = false,
125 .sd_blksz_fw_dl = 256, 128 .sd_blksz_fw_dl = 256,
126}; 129};
127 130
@@ -129,6 +132,7 @@ static const struct btmrvl_sdio_device btmrvl_sdio_sd8897 = {
129 .helper = NULL, 132 .helper = NULL,
130 .firmware = "mrvl/sd8897_uapsta.bin", 133 .firmware = "mrvl/sd8897_uapsta.bin",
131 .reg = &btmrvl_reg_88xx, 134 .reg = &btmrvl_reg_88xx,
135 .support_pscan_win_report = true,
132 .sd_blksz_fw_dl = 256, 136 .sd_blksz_fw_dl = 256,
133}; 137};
134 138
@@ -1067,6 +1071,7 @@ static int btmrvl_sdio_probe(struct sdio_func *func,
1067 card->firmware = data->firmware; 1071 card->firmware = data->firmware;
1068 card->reg = data->reg; 1072 card->reg = data->reg;
1069 card->sd_blksz_fw_dl = data->sd_blksz_fw_dl; 1073 card->sd_blksz_fw_dl = data->sd_blksz_fw_dl;
1074 card->support_pscan_win_report = data->support_pscan_win_report;
1070 } 1075 }
1071 1076
1072 if (btmrvl_sdio_register_dev(card) < 0) { 1077 if (btmrvl_sdio_register_dev(card) < 0) {
diff --git a/drivers/bluetooth/btmrvl_sdio.h b/drivers/bluetooth/btmrvl_sdio.h
index d4dd3b0fa53d..453559f98a75 100644
--- a/drivers/bluetooth/btmrvl_sdio.h
+++ b/drivers/bluetooth/btmrvl_sdio.h
@@ -89,6 +89,7 @@ struct btmrvl_sdio_card {
89 const char *helper; 89 const char *helper;
90 const char *firmware; 90 const char *firmware;
91 const struct btmrvl_sdio_card_reg *reg; 91 const struct btmrvl_sdio_card_reg *reg;
92 bool support_pscan_win_report;
92 u16 sd_blksz_fw_dl; 93 u16 sd_blksz_fw_dl;
93 u8 rx_unit; 94 u8 rx_unit;
94 struct btmrvl_private *priv; 95 struct btmrvl_private *priv;
@@ -98,6 +99,7 @@ struct btmrvl_sdio_device {
98 const char *helper; 99 const char *helper;
99 const char *firmware; 100 const char *firmware;
100 const struct btmrvl_sdio_card_reg *reg; 101 const struct btmrvl_sdio_card_reg *reg;
102 const bool support_pscan_win_report;
101 u16 sd_blksz_fw_dl; 103 u16 sd_blksz_fw_dl;
102}; 104};
103 105