Bluetooth: Set LE Default PHY preferences
authorMarcel Holtmann <marcel@holtmann.org>
Tue, 2 May 2017 06:54:19 +0000 (23:54 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 18 May 2017 11:52:49 +0000 (13:52 +0200)
If the LE Set Default PHY command is supported, the indicate to the
controller that the host has no preferences for transmitter PHY or
receiver PHY selection.

Issuing this command gives the controller a clear indication that other
PHY can be selected if available.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
include/net/bluetooth/hci.h
net/bluetooth/hci_core.c

index dd43cfdd443a09db027461e12e721275fabca3ce..fe98f0a5bef0e5ebdf26a906d514474f4440e33f 100644 (file)
@@ -1499,6 +1499,13 @@ struct hci_rp_le_read_max_data_len {
        __le16  rx_time;
 } __packed;
 
+#define HCI_OP_LE_SET_DEFAULT_PHY      0x2031
+struct hci_cp_le_set_default_phy {
+       __u8    all_phys;
+       __u8    tx_phys;
+       __u8    rx_phys;
+} __packed;
+
 /* ---- HCI Events ---- */
 #define HCI_EV_INQUIRY_COMPLETE                0x01
 
index 88a616a2b959bdd82f8d57568e5db85d595c0f0a..43fecd59dfef0c9fd2f1d9658f90abc8fd7d1956 100644 (file)
@@ -794,6 +794,18 @@ static int hci_init4_req(struct hci_request *req, unsigned long opt)
                hci_req_add(req, HCI_OP_LE_WRITE_DEF_DATA_LEN, sizeof(cp), &cp);
        }
 
+       /* Set Default PHY parameters if command is supported */
+       if (hdev->commands[35] & 0x20) {
+               struct hci_cp_le_set_default_phy cp;
+
+               /* No transmitter PHY or receiver PHY preferences */
+               cp.all_phys = 0x03;
+               cp.tx_phys = 0;
+               cp.rx_phys = 0;
+
+               hci_req_add(req, HCI_OP_LE_SET_DEFAULT_PHY, sizeof(cp), &cp);
+       }
+
        return 0;
 }