Bluetooth: Define PHY flags in hdev and set 1M as default
authorJaganath Kanakkassery <jaganath.k.os@gmail.com>
Thu, 19 Jul 2018 11:39:32 +0000 (17:09 +0530)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 30 Jul 2018 11:44:52 +0000 (13:44 +0200)
1M is mandatory to be supported by LE controllers and the same
would be set in power on. This patch defines hdev flags for
LE PHYs and set 1M to default.

Signed-off-by: Jaganath Kanakkassery <jaganathx.kanakkassery@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci.h
include/net/bluetooth/hci_core.h
net/bluetooth/hci_core.c

index 73e48be5bbb33c9c1da31e157fbfc563a5752632..664fe1ebf2c7d22eee3690bef555f416b8c19cd8 100644 (file)
@@ -1514,6 +1514,10 @@ struct hci_cp_le_set_default_phy {
        __u8    rx_phys;
 } __packed;
 
+#define HCI_LE_SET_PHY_1M              0x01
+#define HCI_LE_SET_PHY_2M              0x02
+#define HCI_LE_SET_PHY_CODED           0x04
+
 #define HCI_OP_LE_SET_EXT_SCAN_PARAMS   0x2041
 struct hci_cp_le_set_ext_scan_params {
        __u8    own_addr_type;
index a74453571264ba7f0ac3a8569bb8232bc4957ca9..71f79df9ee05b898d596631879e55c918d40ed77 100644 (file)
@@ -315,6 +315,9 @@ struct hci_dev {
        unsigned long   sco_last_tx;
        unsigned long   le_last_tx;
 
+       __u8            le_tx_def_phys;
+       __u8            le_rx_def_phys;
+
        struct workqueue_struct *workqueue;
        struct workqueue_struct *req_workqueue;
 
index f5c21004186c771a3431d4e8fb1e61cb84b57e5f..432f89f390c05e4f2aa1fd38f7afa8ea8c31066a 100644 (file)
@@ -830,10 +830,9 @@ static int hci_init4_req(struct hci_request *req, unsigned long opt)
        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;
+               cp.all_phys = 0x00;
+               cp.tx_phys = hdev->le_tx_def_phys;
+               cp.rx_phys = hdev->le_rx_def_phys;
 
                hci_req_add(req, HCI_OP_LE_SET_DEFAULT_PHY, sizeof(cp), &cp);
        }
@@ -3027,6 +3026,8 @@ struct hci_dev *hci_alloc_dev(void)
        hdev->le_max_tx_time = 0x0148;
        hdev->le_max_rx_len = 0x001b;
        hdev->le_max_rx_time = 0x0148;
+       hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M;
+       hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M;
 
        hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT;
        hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT;