Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Bing Zhao and committed by
Marcel Holtmann
4df82b59 2a8357f2

+27
+1
drivers/bluetooth/btmrvl_drv.h
··· 89 89 #define MRVL_VENDOR_PKT 0xFE 90 90 91 91 /* Vendor specific Bluetooth commands */ 92 + #define BT_CMD_PSCAN_WIN_REPORT_ENABLE 0xFC03 92 93 #define BT_CMD_AUTO_SLEEP_MODE 0xFC23 93 94 #define BT_CMD_HOST_SLEEP_CONFIG 0xFC59 94 95 #define BT_CMD_HOST_SLEEP_ENABLE 0xFC5A
+19
drivers/bluetooth/btmrvl_main.c
··· 214 214 } 215 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 234 int btmrvl_send_hscfg_cmd(struct btmrvl_private *priv) 218 235 { 219 236 int ret; ··· 505 488 btmrvl_send_module_cfg_cmd(priv, MODULE_BRINGUP_REQ); 506 489 507 490 btmrvl_cal_data_dt(priv); 491 + 492 + btmrvl_pscan_window_reporting(priv, 0x01); 508 493 509 494 priv->btmrvl_dev.psmode = 1; 510 495 btmrvl_enable_ps(priv);
+5
drivers/bluetooth/btmrvl_sdio.c
··· 108 108 .helper = "mrvl/sd8688_helper.bin", 109 109 .firmware = "mrvl/sd8688.bin", 110 110 .reg = &btmrvl_reg_8688, 111 + .support_pscan_win_report = false, 111 112 .sd_blksz_fw_dl = 64, 112 113 }; 113 114 ··· 116 115 .helper = NULL, 117 116 .firmware = "mrvl/sd8787_uapsta.bin", 118 117 .reg = &btmrvl_reg_87xx, 118 + .support_pscan_win_report = false, 119 119 .sd_blksz_fw_dl = 256, 120 120 }; 121 121 ··· 124 122 .helper = NULL, 125 123 .firmware = "mrvl/sd8797_uapsta.bin", 126 124 .reg = &btmrvl_reg_87xx, 125 + .support_pscan_win_report = false, 127 126 .sd_blksz_fw_dl = 256, 128 127 }; 129 128 ··· 132 129 .helper = NULL, 133 130 .firmware = "mrvl/sd8897_uapsta.bin", 134 131 .reg = &btmrvl_reg_88xx, 132 + .support_pscan_win_report = true, 135 133 .sd_blksz_fw_dl = 256, 136 134 }; 137 135 ··· 1071 1067 card->firmware = data->firmware; 1072 1068 card->reg = data->reg; 1073 1069 card->sd_blksz_fw_dl = data->sd_blksz_fw_dl; 1070 + card->support_pscan_win_report = data->support_pscan_win_report; 1074 1071 } 1075 1072 1076 1073 if (btmrvl_sdio_register_dev(card) < 0) {
+2
drivers/bluetooth/btmrvl_sdio.h
··· 89 89 const char *helper; 90 90 const char *firmware; 91 91 const struct btmrvl_sdio_card_reg *reg; 92 + bool support_pscan_win_report; 92 93 u16 sd_blksz_fw_dl; 93 94 u8 rx_unit; 94 95 struct btmrvl_private *priv; ··· 99 98 const char *helper; 100 99 const char *firmware; 101 100 const struct btmrvl_sdio_card_reg *reg; 101 + const bool support_pscan_win_report; 102 102 u16 sd_blksz_fw_dl; 103 103 }; 104 104