* [PATCH 1/2] Bluetooth: btusb: refactor endpoint lookup
2026-03-30 9:41 [PATCH 0/2] Bluetooth: refactor endpoint lookup Johan Hovold
@ 2026-03-30 9:41 ` Johan Hovold
2026-03-30 10:16 ` Bluetooth: " bluez.test.bot
2026-03-30 9:41 ` [PATCH 2/2] Bluetooth: btmtk: " Johan Hovold
1 sibling, 1 reply; 4+ messages in thread
From: Johan Hovold @ 2026-03-30 9:41 UTC (permalink / raw)
To: Luiz Augusto von Dentz, Marcel Holtmann
Cc: linux-bluetooth, linux-kernel, Johan Hovold
Use the common USB helper for looking up bulk and interrupt endpoints
instead of open coding.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/bluetooth/btusb.c | 51 ++++++---------------------------------
1 file changed, 8 insertions(+), 43 deletions(-)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 4c5344ce16c1..c4aee8e761b6 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3674,31 +3674,14 @@ static inline int __set_diag_interface(struct hci_dev *hdev)
{
struct btusb_data *data = hci_get_drvdata(hdev);
struct usb_interface *intf = data->diag;
- int i;
+ int ret;
if (!data->diag)
return -ENODEV;
- data->diag_tx_ep = NULL;
- data->diag_rx_ep = NULL;
-
- for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
- struct usb_endpoint_descriptor *ep_desc;
-
- ep_desc = &intf->cur_altsetting->endpoint[i].desc;
-
- if (!data->diag_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
- data->diag_tx_ep = ep_desc;
- continue;
- }
-
- if (!data->diag_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
- data->diag_rx_ep = ep_desc;
- continue;
- }
- }
-
- if (!data->diag_tx_ep || !data->diag_rx_ep) {
+ ret = usb_find_common_endpoints(intf->cur_altsetting, &data->diag_rx_ep,
+ &data->diag_tx_ep, NULL, NULL);
+ if (ret) {
bt_dev_err(hdev, "invalid diagnostic descriptors");
return -ENODEV;
}
@@ -4024,12 +4007,11 @@ static struct hci_drv btusb_hci_drv = {
static int btusb_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
- struct usb_endpoint_descriptor *ep_desc;
struct gpio_desc *reset_gpio;
struct btusb_data *data;
struct hci_dev *hdev;
unsigned ifnum_base;
- int i, err, priv_size;
+ int err, priv_size;
BT_DBG("intf %p id %p", intf, id);
@@ -4066,26 +4048,9 @@ static int btusb_probe(struct usb_interface *intf,
if (!data)
return -ENOMEM;
- for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
- ep_desc = &intf->cur_altsetting->endpoint[i].desc;
-
- if (!data->intr_ep && usb_endpoint_is_int_in(ep_desc)) {
- data->intr_ep = ep_desc;
- continue;
- }
-
- if (!data->bulk_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
- data->bulk_tx_ep = ep_desc;
- continue;
- }
-
- if (!data->bulk_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
- data->bulk_rx_ep = ep_desc;
- continue;
- }
- }
-
- if (!data->intr_ep || !data->bulk_tx_ep || !data->bulk_rx_ep) {
+ err = usb_find_common_endpoints(intf->cur_altsetting, &data->bulk_rx_ep,
+ &data->bulk_tx_ep, &data->intr_ep, NULL);
+ if (err) {
kfree(data);
return -ENODEV;
}
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2] Bluetooth: btmtk: refactor endpoint lookup
2026-03-30 9:41 [PATCH 0/2] Bluetooth: refactor endpoint lookup Johan Hovold
2026-03-30 9:41 ` [PATCH 1/2] Bluetooth: btusb: " Johan Hovold
@ 2026-03-30 9:41 ` Johan Hovold
1 sibling, 0 replies; 4+ messages in thread
From: Johan Hovold @ 2026-03-30 9:41 UTC (permalink / raw)
To: Luiz Augusto von Dentz, Marcel Holtmann
Cc: linux-bluetooth, linux-kernel, Johan Hovold
Use the common USB helper for looking up bulk and interrupt endpoints
instead of open coding.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/bluetooth/btmtk.c | 29 +++++------------------------
1 file changed, 5 insertions(+), 24 deletions(-)
diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
index fa7533578f85..ccea160da7ac 100644
--- a/drivers/bluetooth/btmtk.c
+++ b/drivers/bluetooth/btmtk.c
@@ -983,7 +983,7 @@ static int __set_mtk_intr_interface(struct hci_dev *hdev)
{
struct btmtk_data *btmtk_data = hci_get_priv(hdev);
struct usb_interface *intf = btmtk_data->isopkt_intf;
- int i, err;
+ int err;
if (!btmtk_data->isopkt_intf)
return -ENODEV;
@@ -994,29 +994,10 @@ static int __set_mtk_intr_interface(struct hci_dev *hdev)
return err;
}
- btmtk_data->isopkt_tx_ep = NULL;
- btmtk_data->isopkt_rx_ep = NULL;
-
- for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
- struct usb_endpoint_descriptor *ep_desc;
-
- ep_desc = &intf->cur_altsetting->endpoint[i].desc;
-
- if (!btmtk_data->isopkt_tx_ep &&
- usb_endpoint_is_int_out(ep_desc)) {
- btmtk_data->isopkt_tx_ep = ep_desc;
- continue;
- }
-
- if (!btmtk_data->isopkt_rx_ep &&
- usb_endpoint_is_int_in(ep_desc)) {
- btmtk_data->isopkt_rx_ep = ep_desc;
- continue;
- }
- }
-
- if (!btmtk_data->isopkt_tx_ep ||
- !btmtk_data->isopkt_rx_ep) {
+ err = usb_find_common_endpoints(intf->cur_altsetting, NULL, NULL,
+ &btmtk_data->isopkt_rx_ep,
+ &btmtk_data->isopkt_tx_ep);
+ if (err) {
bt_dev_err(hdev, "invalid interrupt descriptors");
return -ENODEV;
}
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread