diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2014-11-03 07:16:07 +0300 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2014-11-03 11:13:42 +0300 |
commit | 2cbd3f5ccd43ba823e183f98a798d4b23cfb12b8 (patch) | |
tree | 4699a93e0a0932208fe2f09a945600411c4d8390 /drivers/bluetooth/btusb.c | |
parent | 40f4938aa6bfe2d792c0665c16d9dd15a5c1b119 (diff) | |
download | linux-2cbd3f5ccd43ba823e183f98a798d4b23cfb12b8.tar.xz |
Bluetooth: btusb: Add internal callback for USB bulk rx data
Some vendors require special handling of the rx data from the USB
bulk endpoints. For that case provide an internal callback that
can overwrite it with a custom receive function.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r-- | drivers/bluetooth/btusb.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index c85426d6e33d..cd634f3b76d3 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -299,6 +299,8 @@ struct btusb_data { unsigned int sco_num; int isoc_altsetting; int suspend_count; + + int (*recv_bulk)(struct btusb_data *data, void *buffer, int count); }; static inline void btusb_free_frags(struct btusb_data *data) @@ -590,7 +592,7 @@ static void btusb_bulk_complete(struct urb *urb) if (urb->status == 0) { hdev->stat.byte_rx += urb->actual_length; - if (btusb_recv_bulk(data, urb->transfer_buffer, + if (data->recv_bulk(data, urb->transfer_buffer, urb->actual_length) < 0) { BT_ERR("%s corrupted ACL packet", hdev->name); hdev->stat.err_rx++; @@ -2012,6 +2014,8 @@ static int btusb_probe(struct usb_interface *intf, init_usb_anchor(&data->isoc_anchor); spin_lock_init(&data->rxlock); + data->recv_bulk = btusb_recv_bulk; + hdev = hci_alloc_dev(); if (!hdev) return -ENOMEM; |