Commit cef456cd authored by Adam Ford's avatar Adam Ford Committed by Marcel Holtmann
Browse files

Revert "Bluetooth: hci_ll: set operational frequency earlier"



As nice as it would be to update firmware faster, that patch broke
at least two different boards, an OMAP4+WL1285 based Motorola Droid
4, as reported by Sebasian Reichel and the Logic PD i.MX6Q +
WL1837MOD.

This reverts commit a2e02f38.

Signed-off-by: default avatarAdam Ford <aford173@gmail.com>
Acked-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent c0a21a52
Loading
Loading
Loading
Loading
+18 −21
Original line number Diff line number Diff line
@@ -621,13 +621,6 @@ static int ll_setup(struct hci_uart *hu)

	serdev_device_set_flow_control(serdev, true);

	if (hu->oper_speed)
		speed = hu->oper_speed;
	else if (hu->proto->oper_speed)
		speed = hu->proto->oper_speed;
	else
		speed = 0;

	do {
		/* Reset the Bluetooth device */
		gpiod_set_value_cansleep(lldev->enable_gpio, 0);
@@ -639,20 +632,6 @@ static int ll_setup(struct hci_uart *hu)
			return err;
		}

		if (speed) {
			__le32 speed_le = cpu_to_le32(speed);
			struct sk_buff *skb;

			skb = __hci_cmd_sync(hu->hdev,
					     HCI_VS_UPDATE_UART_HCI_BAUDRATE,
					     sizeof(speed_le), &speed_le,
					     HCI_INIT_TIMEOUT);
			if (!IS_ERR(skb)) {
				kfree_skb(skb);
				serdev_device_set_baudrate(serdev, speed);
			}
		}

		err = download_firmware(lldev);
		if (!err)
			break;
@@ -677,7 +656,25 @@ static int ll_setup(struct hci_uart *hu)
	}

	/* Operational speed if any */
	if (hu->oper_speed)
		speed = hu->oper_speed;
	else if (hu->proto->oper_speed)
		speed = hu->proto->oper_speed;
	else
		speed = 0;

	if (speed) {
		__le32 speed_le = cpu_to_le32(speed);
		struct sk_buff *skb;

		skb = __hci_cmd_sync(hu->hdev, HCI_VS_UPDATE_UART_HCI_BAUDRATE,
				     sizeof(speed_le), &speed_le,
				     HCI_INIT_TIMEOUT);
		if (!IS_ERR(skb)) {
			kfree_skb(skb);
			serdev_device_set_baudrate(serdev, speed);
		}
	}

	return 0;
}