Skip to content

Commit

Permalink
Bluetooth: hci_h5: btrtl: Maintain flow control if wakeup is enabled
Browse files Browse the repository at this point in the history
For chips that doesn't reset on suspend, we need to provide the correct
value of flow_control when it resumes. Therefore, store the flow
control value when reading from the config file to be reused upon
suspend.

Signed-off-by: Archie Pusaka <[email protected]>
Reviewed-by: Abhishek Pandit-Subedi <[email protected]>
Reviewed-by: Hilda Wu <[email protected]>
Signed-off-by: Marcel Holtmann <[email protected]>
  • Loading branch information
apusaka authored and holtmann committed Jul 23, 2021
1 parent 66f077d commit 30f11dd
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/bluetooth/hci_h5.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ enum {
H5_RX_ESC, /* SLIP escape mode */
H5_TX_ACK_REQ, /* Pending ack to send */
H5_WAKEUP_DISABLE, /* Device cannot wake host */
H5_HW_FLOW_CONTROL, /* Use HW flow control */
};

struct h5 {
Expand Down Expand Up @@ -920,6 +921,9 @@ static int h5_btrtl_setup(struct h5 *h5)
serdev_device_set_baudrate(h5->hu->serdev, controller_baudrate);
serdev_device_set_flow_control(h5->hu->serdev, flow_control);

if (flow_control)
set_bit(H5_HW_FLOW_CONTROL, &h5->flags);

err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev);
/* Give the device some time before the hci-core sends it a reset */
usleep_range(10000, 20000);
Expand Down Expand Up @@ -1012,7 +1016,11 @@ static int h5_btrtl_resume(struct h5 *h5)
queue_work(system_long_wq, &reprobe->work);
} else {
gpiod_set_value_cansleep(h5->device_wake_gpio, 1);

if (test_bit(H5_HW_FLOW_CONTROL, &h5->flags))
serdev_device_set_flow_control(h5->hu->serdev, true);
}

return 0;
}

Expand Down

0 comments on commit 30f11dd

Please sign in to comment.