linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report
@ 2021-09-08  8:51 Joseph Hwang
  2021-09-08  8:51 ` [PATCH v1 2/3] CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands Joseph Hwang
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Joseph Hwang @ 2021-09-08  8:51 UTC (permalink / raw)
  To: linux-bluetooth, marcel, luiz.dentz, pali
  Cc: chromeos-bluetooth-upstreaming, josephsih, Joseph Hwang,
	Miao-chen Chou, Johan Hedberg, linux-kernel

Add the btandroid.c file to support Android BQR commands.

This module may be referenced by btusb, btrtl, and hci_qca when a
Bluetooth controller supports the Android Bluetooth Quality Report.

Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Joseph Hwang <josephsih@chromium.org>
---

 drivers/bluetooth/Makefile    |   1 +
 drivers/bluetooth/btandroid.c | 106 ++++++++++++++++++++++++++++++++++
 drivers/bluetooth/btandroid.h |  10 ++++
 3 files changed, 117 insertions(+)
 create mode 100644 drivers/bluetooth/btandroid.c
 create mode 100644 drivers/bluetooth/btandroid.h

diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile
index 16286ea2655d..4d5d010bb947 100644
--- a/drivers/bluetooth/Makefile
+++ b/drivers/bluetooth/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_BT_HCIBT3C)	+= bt3c_cs.o
 obj-$(CONFIG_BT_HCIBLUECARD)	+= bluecard_cs.o
 
 obj-$(CONFIG_BT_HCIBTUSB)	+= btusb.o
+obj-$(CONFIG_BT_HCIBTUSB)	+= btandroid.o
 obj-$(CONFIG_BT_HCIBTSDIO)	+= btsdio.o
 
 obj-$(CONFIG_BT_INTEL)		+= btintel.o
diff --git a/drivers/bluetooth/btandroid.c b/drivers/bluetooth/btandroid.c
new file mode 100644
index 000000000000..fffacc8d67cc
--- /dev/null
+++ b/drivers/bluetooth/btandroid.c
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ *  Support for Android Bluetooth Quality Report (BQR) specifications
+ *      https://source.android.com/devices/bluetooth/hci_requirements
+ *
+ *  Copyright (C) 2021 Google Corporation
+ */
+
+#include <linux/module.h>
+
+#include <net/bluetooth/bluetooth.h>
+#include <net/bluetooth/hci.h>
+
+#include "btandroid.h"
+
+#define VERSION "0.1"
+
+/*
+ * Reference for the command op codes and parameters below:
+ *   https://source.android.com/devices/bluetooth/hci_requirements#bluetooth-quality-report-command
+ */
+#define BQR_COMMAND_OCF			0x015e
+#define BQR_OPCODE			hci_opcode_pack(0x3f, BQR_COMMAND_OCF)
+
+/* report action */
+#define REPORT_ACTION_ADD		0x00
+#define REPORT_ACTION_DELETE		0x01
+#define REPORT_ACTION_CLEAR		0x02
+
+/* BQR event masks */
+#define QUALITY_MONITORING		(1 << 0)
+#define APPRAOCHING_LSTO		(1 << 1)
+#define A2DP_AUDIO_CHOPPY		(1 << 2)
+#define SCO_VOICE_CHOPPY		(1 << 3)
+
+#define DEFAULT_BQR_EVENT_MASK	(QUALITY_MONITORING | APPRAOCHING_LSTO | \
+				 A2DP_AUDIO_CHOPPY | SCO_VOICE_CHOPPY)
+
+/*
+ * Reporting at seconds so as not to stress the controller too much.
+ * Range: 0 ~ 65535 ms
+ */
+#define DEFALUT_REPORT_INTERVAL_MS	5000
+
+struct android_bqr_cp {
+	__u8	report_action;
+	__u32	event_mask;
+	__u16	min_report_interval;
+} __packed;
+
+static int enable_quality_report(struct hci_dev *hdev)
+{
+	struct sk_buff *skb;
+	struct android_bqr_cp cp;
+
+	cp.report_action = REPORT_ACTION_ADD;
+	cp.event_mask = DEFAULT_BQR_EVENT_MASK;
+	cp.min_report_interval = DEFALUT_REPORT_INTERVAL_MS;
+
+	skb = __hci_cmd_sync(hdev, BQR_OPCODE, sizeof(cp), &cp,
+							HCI_CMD_TIMEOUT);
+	if (IS_ERR(skb)) {
+		bt_dev_err(hdev, "Enabling Android BQR failed (%ld)",
+			   PTR_ERR(skb));
+		return PTR_ERR(skb);
+	}
+
+	kfree_skb(skb);
+	return 0;
+}
+
+static int disable_quality_report(struct hci_dev *hdev)
+{
+	struct sk_buff *skb;
+	struct android_bqr_cp cp = { 0 };
+
+	cp.report_action = REPORT_ACTION_CLEAR;
+
+	skb = __hci_cmd_sync(hdev, BQR_OPCODE, sizeof(cp), &cp,
+							HCI_CMD_TIMEOUT);
+	if (IS_ERR(skb)) {
+		bt_dev_err(hdev, "Disabling Android BQR failed (%ld)",
+			   PTR_ERR(skb));
+		return PTR_ERR(skb);
+	}
+
+	kfree_skb(skb);
+	return 0;
+}
+
+int btandroid_set_quality_report(struct hci_dev *hdev, bool enable)
+{
+	bt_dev_info(hdev, "quality report enable %d", enable);
+
+	/* Enable or disable the quality report feature. */
+	if (enable)
+		return enable_quality_report(hdev);
+	else
+		return disable_quality_report(hdev);
+}
+EXPORT_SYMBOL_GPL(btandroid_set_quality_report);
+
+MODULE_AUTHOR("Google");
+MODULE_DESCRIPTION("Support for Android Bluetooth Specification " VERSION);
+MODULE_VERSION(VERSION);
+MODULE_LICENSE("GPL");
diff --git a/drivers/bluetooth/btandroid.h b/drivers/bluetooth/btandroid.h
new file mode 100644
index 000000000000..6abc9e8e0838
--- /dev/null
+++ b/drivers/bluetooth/btandroid.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ *  Bluetooth support for Android specifications
+ *
+ *  Copyright (C) 2021 Google Corporation
+ */
+
+#include <net/bluetooth/hci_core.h>
+
+int btandroid_set_quality_report(struct hci_dev *hdev, bool enable);
-- 
2.33.0.153.gba50c8fa24-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v1 2/3] CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands
  2021-09-08  8:51 [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report Joseph Hwang
@ 2021-09-08  8:51 ` Joseph Hwang
  2021-09-08  8:51 ` [PATCH v1 3/3] CHROMIUM: drivers: bluetooth: set up Realtek 8822CE " Joseph Hwang
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Joseph Hwang @ 2021-09-08  8:51 UTC (permalink / raw)
  To: linux-bluetooth, marcel, luiz.dentz, pali
  Cc: chromeos-bluetooth-upstreaming, josephsih, Joseph Hwang,
	Miao-chen Chou, Johan Hedberg, linux-kernel

This patch sets up Qualcomm WCN399x to support the Android BQR commands.

Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Joseph Hwang <josephsih@chromium.org>
---

 drivers/bluetooth/hci_qca.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index 53deea2eb7b4..bf576046681d 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -38,6 +38,7 @@
 
 #include "hci_uart.h"
 #include "btqca.h"
+#include "btandroid.h"
 
 /* HCI_IBS protocol messages */
 #define HCI_IBS_SLEEP_IND	0xFE
@@ -1730,6 +1731,7 @@ static int qca_setup(struct hci_uart *hu)
 	if (qca_is_wcn399x(soc_type) ||
 	    qca_is_wcn6750(soc_type)) {
 		set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
+		hdev->set_quality_report = btandroid_set_quality_report;
 
 		ret = qca_read_soc_version(hdev, &ver, soc_type);
 		if (ret)
-- 
2.33.0.153.gba50c8fa24-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v1 3/3] CHROMIUM: drivers: bluetooth: set up Realtek 8822CE for Android BQR commands
  2021-09-08  8:51 [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report Joseph Hwang
  2021-09-08  8:51 ` [PATCH v1 2/3] CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands Joseph Hwang
@ 2021-09-08  8:51 ` Joseph Hwang
  2021-09-08 10:06 ` [v1,1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report bluez.test.bot
  2021-09-08 20:36 ` [PATCH v1 1/3] " Marcel Holtmann
  3 siblings, 0 replies; 5+ messages in thread
From: Joseph Hwang @ 2021-09-08  8:51 UTC (permalink / raw)
  To: linux-bluetooth, marcel, luiz.dentz, pali
  Cc: chromeos-bluetooth-upstreaming, josephsih, Joseph Hwang,
	Miao-chen Chou, Johan Hedberg, linux-kernel

This patch sets up Realtek 8822CE to support the Android BQR commands.

Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Joseph Hwang <josephsih@chromium.org>
---

 drivers/bluetooth/btrtl.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
index 1f8afa0244d8..e0bcdbe03eca 100644
--- a/drivers/bluetooth/btrtl.c
+++ b/drivers/bluetooth/btrtl.c
@@ -14,6 +14,7 @@
 #include <net/bluetooth/hci_core.h>
 
 #include "btrtl.h"
+#include "btandroid.h"
 
 #define VERSION "0.1"
 
@@ -740,12 +741,13 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)
 	/* Enable central-peripheral role (able to create new connections with
 	 * an existing connection in slave role).
 	 */
-	/* Enable WBS supported for the specific Realtek devices. */
+	/* Enable WBS and quality report supported by the specific devices. */
 	switch (btrtl_dev->project_id) {
 	case CHIP_ID_8822C:
 	case CHIP_ID_8852A:
 		set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
 		set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
+		hdev->set_quality_report = btandroid_set_quality_report;
 		break;
 	default:
 		rtl_dev_dbg(hdev, "Central-peripheral role not enabled.");
-- 
2.33.0.153.gba50c8fa24-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [v1,1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report
  2021-09-08  8:51 [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report Joseph Hwang
  2021-09-08  8:51 ` [PATCH v1 2/3] CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands Joseph Hwang
  2021-09-08  8:51 ` [PATCH v1 3/3] CHROMIUM: drivers: bluetooth: set up Realtek 8822CE " Joseph Hwang
@ 2021-09-08 10:06 ` bluez.test.bot
  2021-09-08 20:36 ` [PATCH v1 1/3] " Marcel Holtmann
  3 siblings, 0 replies; 5+ messages in thread
From: bluez.test.bot @ 2021-09-08 10:06 UTC (permalink / raw)
  To: linux-bluetooth, josephsih

[-- Attachment #1: Type: text/plain, Size: 3710 bytes --]

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=543659

---Test result---

Test Summary:
CheckPatch                    FAIL      1.09 seconds
GitLint                       FAIL      0.39 seconds
BuildKernel                   PASS      711.40 seconds
TestRunner: Setup             PASS      463.39 seconds
TestRunner: l2cap-tester      PASS      3.46 seconds
TestRunner: bnep-tester       PASS      2.24 seconds
TestRunner: mgmt-tester       FAIL      35.94 seconds
TestRunner: rfcomm-tester     PASS      2.55 seconds
TestRunner: sco-tester        PASS      2.46 seconds
TestRunner: smp-tester        PASS      2.55 seconds
TestRunner: userchan-tester   PASS      2.27 seconds

Details
##############################
Test: CheckPatch - FAIL - 1.09 seconds
Run checkpatch.pl script with rule in .checkpatch.conf
Bluetooth: btandroid: Support Android Bluetooth Quality Report
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#28: 
new file mode 100644

total: 0 errors, 1 warnings, 123 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

"[PATCH] Bluetooth: btandroid: Support Android Bluetooth Quality" has style problems, please review.

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: GitLint - FAIL - 0.39 seconds
Run gitlint with rule in .gitlint
CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands
1: T1 Title exceeds max length (78>72): "CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands"

CHROMIUM: drivers: bluetooth: set up Realtek 8822CE for Android BQR commands
1: T1 Title exceeds max length (76>72): "CHROMIUM: drivers: bluetooth: set up Realtek 8822CE for Android BQR commands"


##############################
Test: BuildKernel - PASS - 711.40 seconds
Build Kernel with minimal configuration supports Bluetooth


##############################
Test: TestRunner: Setup - PASS - 463.39 seconds
Setup environment for running Test Runner


##############################
Test: TestRunner: l2cap-tester - PASS - 3.46 seconds
Run test-runner with l2cap-tester
Total: 40, Passed: 40 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: bnep-tester - PASS - 2.24 seconds
Run test-runner with bnep-tester
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: mgmt-tester - FAIL - 35.94 seconds
Run test-runner with mgmt-tester
Total: 452, Passed: 451 (99.8%), Failed: 1, Not Run: 0

Failed Test Cases
Read Exp Feature - Success                           Failed       0.028 seconds

##############################
Test: TestRunner: rfcomm-tester - PASS - 2.55 seconds
Run test-runner with rfcomm-tester
Total: 9, Passed: 9 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: sco-tester - PASS - 2.46 seconds
Run test-runner with sco-tester
Total: 11, Passed: 11 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: smp-tester - PASS - 2.55 seconds
Run test-runner with smp-tester
Total: 8, Passed: 8 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: userchan-tester - PASS - 2.27 seconds
Run test-runner with userchan-tester
Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0



---
Regards,
Linux Bluetooth


[-- Attachment #2: l2cap-tester.log --]
[-- Type: application/octet-stream, Size: 51566 bytes --]

[-- Attachment #3: bnep-tester.log --]
[-- Type: application/octet-stream, Size: 3934 bytes --]

[-- Attachment #4: mgmt-tester.log --]
[-- Type: application/octet-stream, Size: 626847 bytes --]

[-- Attachment #5: rfcomm-tester.log --]
[-- Type: application/octet-stream, Size: 14790 bytes --]

[-- Attachment #6: sco-tester.log --]
[-- Type: application/octet-stream, Size: 13044 bytes --]

[-- Attachment #7: smp-tester.log --]
[-- Type: application/octet-stream, Size: 11858 bytes --]

[-- Attachment #8: userchan-tester.log --]
[-- Type: application/octet-stream, Size: 6514 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report
  2021-09-08  8:51 [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report Joseph Hwang
                   ` (2 preceding siblings ...)
  2021-09-08 10:06 ` [v1,1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report bluez.test.bot
@ 2021-09-08 20:36 ` Marcel Holtmann
  3 siblings, 0 replies; 5+ messages in thread
From: Marcel Holtmann @ 2021-09-08 20:36 UTC (permalink / raw)
  To: Joseph Hwang
  Cc: linux-bluetooth, Luiz Augusto von Dentz, Pali Rohár,
	CrosBT Upstreaming, Joseph Hwang, Miao-chen Chou, Johan Hedberg,
	linux-kernel

Hi Joseph,

> Add the btandroid.c file to support Android BQR commands.
> 
> This module may be referenced by btusb, btrtl, and hci_qca when a
> Bluetooth controller supports the Android Bluetooth Quality Report.
> 
> Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
> Signed-off-by: Joseph Hwang <josephsih@chromium.org>
> ---
> 
> drivers/bluetooth/Makefile    |   1 +
> drivers/bluetooth/btandroid.c | 106 ++++++++++++++++++++++++++++++++++
> drivers/bluetooth/btandroid.h |  10 ++++
> 3 files changed, 117 insertions(+)
> create mode 100644 drivers/bluetooth/btandroid.c
> create mode 100644 drivers/bluetooth/btandroid.h

so please lets not do this. Nothing AOSP specific belongs into drivers/bluetooth/. Doing this multitudes of dependencies for the drivers will cause long term so much pain and complexity that it is not worth it. If more than one manufacturer supports it, it has earned the right to be in net/bluetooth/ as a pseudo standard.

Like with the MSFT extensions, I expect this to be in net/bluetooth/aosp.c and enabled based on hci_set_aosp_capable() being set by a driver or not.

And I choose “aosp” for prefix on purpose and not “android”.

Regards

Marcel


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-09-08 20:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-08  8:51 [PATCH v1 1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report Joseph Hwang
2021-09-08  8:51 ` [PATCH v1 2/3] CHROMIUM: drivers: bluetooth: set up Qualcomm WCN399x for Android BQR commands Joseph Hwang
2021-09-08  8:51 ` [PATCH v1 3/3] CHROMIUM: drivers: bluetooth: set up Realtek 8822CE " Joseph Hwang
2021-09-08 10:06 ` [v1,1/3] Bluetooth: btandroid: Support Android Bluetooth Quality Report bluez.test.bot
2021-09-08 20:36 ` [PATCH v1 1/3] " Marcel Holtmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).