diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index e4c451e8f268..03048e7eef21 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -1252,14 +1252,16 @@ static inline void btusb_free_frags(struct btusb_data *data) spin_unlock_irqrestore(&data->rxlock, flags); } -static int btusb_recv_event(struct btusb_data *data, struct sk_buff *skb) +static int btusb_recv_event(struct hci_dev *hdev, struct sk_buff *skb) { + struct btusb_data *data = hci_get_drvdata(hdev); + if (data->intr_interval) { /* Trigger dequeue immediately if an event is received */ schedule_delayed_work(&data->rx_work, 0); } - return data->recv_event(data->hdev, skb); + return data->recv_event(hdev, skb); } static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count) @@ -1319,7 +1321,7 @@ static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count) } /* Complete frame */ - btusb_recv_event(data, skb); + btusb_recv_event(data->hdev, skb); skb = NULL; } } @@ -1330,13 +1332,15 @@ static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count) return err; } -static int btusb_recv_acl(struct btusb_data *data, struct sk_buff *skb) +static int btusb_recv_acl(struct hci_dev *hdev, struct sk_buff *skb) { + struct btusb_data *data = hci_get_drvdata(hdev); + /* Only queue ACL packet if intr_interval is set as it means * force_poll_sync has been enabled. */ if (!data->intr_interval) - return data->recv_acl(data->hdev, skb); + return data->recv_acl(hdev, skb); skb_queue_tail(&data->acl_q, skb); schedule_delayed_work(&data->rx_work, data->intr_interval); @@ -1391,7 +1395,7 @@ static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count) if (!hci_skb_expect(skb)) { /* Complete frame */ - btusb_recv_acl(data, skb); + btusb_recv_acl(data->hdev, skb); skb = NULL; } }