Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6decb5b4 authored by Jaganath Kanakkassery's avatar Jaganath Kanakkassery Committed by Marcel Holtmann
Browse files

Bluetooth: Define PHY flags in hdev and set 1M as default



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: default avatarJaganath Kanakkassery <jaganathx.kanakkassery@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 25a13e38
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
+3 −0
Original line number Diff line number Diff line
@@ -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;

+5 −4
Original line number Diff line number Diff line
@@ -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;