Revert "Bluetooth: hci_ll: set operational frequency earlier"
authorAdam Ford <aford173@gmail.com>
Wed, 2 Oct 2019 11:46:26 +0000 (06:46 -0500)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 16 Oct 2019 18:33:16 +0000 (20:33 +0200)
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 a2e02f38eff84f199c8e32359eb213f81f270047.

Signed-off-by: Adam Ford <aford173@gmail.com>
Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Cc: stable@vger.kernel.org
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_ll.c

index 2857066..d9a4c6c 100644 (file)
@@ -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;
 }