Commit 1c0bc11c authored by Stefano Radaelli's avatar Stefano Radaelli Committed by Luiz Augusto von Dentz
Browse files

Bluetooth: hci_ll: Enable BROKEN_ENHANCED_SETUP_SYNC_CONN for WL183x



TI WL183x controllers advertise support for the HCI Enhanced Setup
Synchronous Connection command, but SCO setup fails when the enhanced
path is used. The only working configuration is to fall back to the
legacy HCI Setup Synchronous Connection (0x0028).

This matches the scenario described in commit 05abad85
("Bluetooth: HCI: Add HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN quirk").

Enable HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN automatically for
devices compatible with:
  - ti,wl1831-st
  - ti,wl1835-st
  - ti,wl1837-st

Signed-off-by: default avatarStefano Radaelli <stefano.r@variscite.com>
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
parent 5e17010b
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ struct ll_device {
	struct gpio_desc *enable_gpio;
	struct clk *ext_clk;
	bdaddr_t bdaddr;
	bool broken_enhanced_setup;
};

struct ll_struct {
@@ -658,6 +659,10 @@ static int ll_setup(struct hci_uart *hu)
			hci_set_quirk(hu->hdev, HCI_QUIRK_INVALID_BDADDR);
	}

	if (lldev->broken_enhanced_setup)
		hci_set_quirk(hu->hdev,
			      HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN);

	/* Operational speed if any */
	if (hu->oper_speed)
		speed = hu->oper_speed;
@@ -712,6 +717,11 @@ static int hci_ti_probe(struct serdev_device *serdev)
	of_property_read_u32(serdev->dev.of_node, "max-speed", &max_speed);
	hci_uart_set_speeds(hu, 115200, max_speed);

	if (of_device_is_compatible(serdev->dev.of_node, "ti,wl1831-st") ||
	    of_device_is_compatible(serdev->dev.of_node, "ti,wl1835-st") ||
	    of_device_is_compatible(serdev->dev.of_node, "ti,wl1837-st"))
		lldev->broken_enhanced_setup = true;

	/* optional BD address from nvram */
	bdaddr_cell = nvmem_cell_get(&serdev->dev, "bd-address");
	if (IS_ERR(bdaddr_cell)) {