Skip to content

Commit

Permalink
Bluetooth: hci_bcm: Enable support for set_diag driver callback
Browse files Browse the repository at this point in the history
The set_diag driver callback allows enabling and disabling the vendor
specific diagnostic information. Since Broadcom chips have support for
a dedicated LM_DIAG channel, hook it up accordingly.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
  • Loading branch information
Marcel Holtmann authored and Johan Hedberg committed Oct 8, 2015
1 parent 4b4113d commit 075e1f5
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions drivers/bluetooth/hci_bcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,29 @@ static inline int bcm_request_irq(struct bcm_data *bcm) { return 0; }
static inline int bcm_setup_sleep(struct hci_uart *hu) { return 0; }
#endif

static int bcm_set_diag(struct hci_dev *hdev, bool enable)
{
struct hci_uart *hu = hci_get_drvdata(hdev);
struct bcm_data *bcm = hu->priv;
struct sk_buff *skb;

if (!test_bit(HCI_RUNNING, &hdev->flags))
return -ENETDOWN;

skb = bt_skb_alloc(3, GFP_KERNEL);
if (IS_ERR(skb))
return PTR_ERR(skb);

*skb_put(skb, 1) = BCM_LM_DIAG_PKT;
*skb_put(skb, 1) = 0xf0;
*skb_put(skb, 1) = enable;

skb_queue_tail(&bcm->txq, skb);
hci_uart_tx_wakeup(hu);

return 0;
}

static int bcm_open(struct hci_uart *hu)
{
struct bcm_data *bcm;
Expand Down Expand Up @@ -342,6 +365,7 @@ static int bcm_setup(struct hci_uart *hu)

bt_dev_dbg(hu->hdev, "hu %p", hu);

hu->hdev->set_diag = bcm_set_diag;
hu->hdev->set_bdaddr = btbcm_set_bdaddr;

err = btbcm_initialize(hu->hdev, fw_name, sizeof(fw_name));
Expand Down

0 comments on commit 075e1f5

Please sign in to comment.