diff options
author | Bing Zhao <bzhao@marvell.com> | 2014-03-31 17:41:44 -0400 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2014-07-03 11:42:54 -0400 |
commit | 4df82b5911c0e380d8b308958f158c3e7b365467 (patch) | |
tree | f767af37131c47f205729c280a0f9352675963fe /drivers | |
parent | 2a8357f2393d89a34b5a77051d29951af9646406 (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.h | 1 | ||||
-rw-r--r-- | drivers/bluetooth/btmrvl_main.c | 19 | ||||
-rw-r--r-- | drivers/bluetooth/btmrvl_sdio.c | 5 | ||||
-rw-r--r-- | drivers/bluetooth/btmrvl_sdio.h | 2 |
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 | } |
215 | EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd); | 215 | EXPORT_SYMBOL_GPL(btmrvl_send_module_cfg_cmd); |
216 | 216 | ||
217 | int 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 | } | ||
232 | EXPORT_SYMBOL_GPL(btmrvl_pscan_window_reporting); | ||
233 | |||
217 | int btmrvl_send_hscfg_cmd(struct btmrvl_private *priv) | 234 | int 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 | ||