struct hci_uart *hu = hci_get_drvdata(hdev);
        struct qca_data *qca = hu->priv;
        struct sk_buff *skb;
-       struct qca_serdev *qcadev;
        u8 cmd[] = { 0x01, 0x48, 0xFC, 0x01, 0x00 };
 
        if (baudrate > QCA_BAUDRATE_3200000)
                return -ENOMEM;
        }
 
-       /* Disabling hardware flow control is mandatory while
-        * sending change baudrate request to wcn3990 SoC.
-        */
-       qcadev = serdev_device_get_drvdata(hu->serdev);
-       if (qcadev->btsoc_type == QCA_WCN3990)
-               hci_uart_set_flow_control(hu, true);
-
        /* Assign commands to change baudrate and packet type. */
        skb_put_data(skb, cmd, sizeof(cmd));
        hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
        schedule_timeout(msecs_to_jiffies(BAUDRATE_SETTLE_TIMEOUT_MS));
        set_current_state(TASK_RUNNING);
 
-       if (qcadev->btsoc_type == QCA_WCN3990)
-               hci_uart_set_flow_control(hu, false);
-
        return 0;
 }
 
 static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
 {
        unsigned int speed, qca_baudrate;
-       int ret;
+       struct qca_serdev *qcadev;
+       int ret = 0;
 
        if (speed_type == QCA_INIT_SPEED) {
                speed = qca_get_speed(hu, QCA_INIT_SPEED);
                if (!speed)
                        return 0;
 
+               /* Disable flow control for wcn3990 to deassert RTS while
+                * changing the baudrate of chip and host.
+                */
+               qcadev = serdev_device_get_drvdata(hu->serdev);
+               if (qcadev->btsoc_type == QCA_WCN3990)
+                       hci_uart_set_flow_control(hu, true);
+
                qca_baudrate = qca_get_baudrate_value(speed);
                bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed);
                ret = qca_set_baudrate(hu->hdev, qca_baudrate);
                if (ret)
-                       return ret;
+                       goto error;
 
                host_set_baudrate(hu, speed);
+
+error:
+               if (qcadev->btsoc_type == QCA_WCN3990)
+                       hci_uart_set_flow_control(hu, false);
        }
 
-       return 0;
+       return ret;
 }
 
 static int qca_wcn3990_init(struct hci_uart *hu)