Message ID | 20210423035229.27513-1-hildawu@realtek.com |
---|---|
Headers | show |
Series | Bluetooth hci_h5 btrtl Add flag for keep power in suspend/resume | expand |
Hi Hilda, > RTL8822C and RTL8852A devices support BT wakeup Host. Add a flag > for these specific devices did not power off during suspend and resume. > By this change, if the Host support that received BT device signal then > it can wake Host up. > > Signed-off-by: hildawu <hildawu@realtek.com> > --- > Changed in v3: > - Reworked to use UART flag, refer to Maintainer's suggestion. > - Split into two patches for different purpose. > > Changes in v2: > - Add the missing struct member > - Modify title length > --- > --- > drivers/bluetooth/hci_h5.c | 34 ++++++++++++++++++++++++---------- > drivers/bluetooth/hci_ldisc.c | 3 ++- > drivers/bluetooth/hci_uart.h | 1 + > 3 files changed, 27 insertions(+), 11 deletions(-) > > diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c > index 27e96681d583..9cacc4cdc928 100644 > --- a/drivers/bluetooth/hci_h5.c > +++ b/drivers/bluetooth/hci_h5.c > @@ -911,6 +911,15 @@ static int h5_btrtl_setup(struct h5 *h5) > */ > set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &h5->hu->hdev->quirks); > > + switch (btrtl_dev->project_id) { > + case CHIP_ID_8822C: > + case CHIP_ID_8852A: > + set_bit(HCI_UART_WAKEUP_ENABLE, &h5->hu->hdev_flags); > + break; > + default: > + break; > + } > + > out_free: > btrtl_free(btrtl_dev); > > @@ -945,8 +954,11 @@ static void h5_btrtl_close(struct h5 *h5) > static int h5_btrtl_suspend(struct h5 *h5) > { > serdev_device_set_flow_control(h5->hu->serdev, false); > - gpiod_set_value_cansleep(h5->device_wake_gpio, 0); > - gpiod_set_value_cansleep(h5->enable_gpio, 0); > + > + if (!test_bit(HCI_UART_WAKEUP_ENABLE, &h5->hu->hdev_flags)) { > + gpiod_set_value_cansleep(h5->device_wake_gpio, 0); > + gpiod_set_value_cansleep(h5->enable_gpio, 0); > + } > return 0; > } > > @@ -972,17 +984,19 @@ static void h5_btrtl_reprobe_worker(struct work_struct *work) > > static int h5_btrtl_resume(struct h5 *h5) > { > - struct h5_btrtl_reprobe *reprobe; > + if (!test_bit(HCI_UART_WAKEUP_ENABLE, &h5->hu->hdev_flags)) { > + struct h5_btrtl_reprobe *reprobe; > > - reprobe = kzalloc(sizeof(*reprobe), GFP_KERNEL); > - if (!reprobe) > - return -ENOMEM; > + reprobe = kzalloc(sizeof(*reprobe), GFP_KERNEL); > + if (!reprobe) > + return -ENOMEM; > > - __module_get(THIS_MODULE); > + __module_get(THIS_MODULE); > > - INIT_WORK(&reprobe->work, h5_btrtl_reprobe_worker); > - reprobe->dev = get_device(&h5->hu->serdev->dev); > - queue_work(system_long_wq, &reprobe->work); > + INIT_WORK(&reprobe->work, h5_btrtl_reprobe_worker); > + reprobe->dev = get_device(&h5->hu->serdev->dev); > + queue_work(system_long_wq, &reprobe->work); > + } > return 0; > } > > diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c > index 637c5b8c2aa1..3a1038e9dc6a 100644 > --- a/drivers/bluetooth/hci_ldisc.c > +++ b/drivers/bluetooth/hci_ldisc.c > @@ -719,7 +719,8 @@ static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags) > BIT(HCI_UART_CREATE_AMP) | > BIT(HCI_UART_INIT_PENDING) | > BIT(HCI_UART_EXT_CONFIG) | > - BIT(HCI_UART_VND_DETECT); > + BIT(HCI_UART_VND_DETECT) | > + BIT(HCI_UART_WAKEUP_ENABLE); > > if (flags & ~valid_flags) > return -EINVAL; > diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h > index 4e039d7a16f8..25f5e5c7544c 100644 > --- a/drivers/bluetooth/hci_uart.h > +++ b/drivers/bluetooth/hci_uart.h > @@ -41,6 +41,7 @@ > #define HCI_UART_INIT_PENDING 3 > #define HCI_UART_EXT_CONFIG 4 > #define HCI_UART_VND_DETECT 5 > +#define HCI_UART_WAKEUP_ENABLE 6 don’t use these flags since they are an ioctl API. Regards Marcel
From: hildawu <hildawu@realtek.com> Hello! This v3 series is for support Host can be wakeup and device no need power down and no need re-dowload fw. Supported this feature chips RTL8822C/RTL8852A include UART interface. Avoid re-define related information. So move shared structure info the btrtl.h. The patch 1 is adjust the position of strcut definition for btrtl and hci_h5. The purpose for avoid re-defining chip features in btrtl with USB and UART devices. Let UART devices (hci_h5) can get relevant information too. That can be easily managed feature of chips. The patch 2 is support for Host can received BT device signal then wake Host up. So this patch, add a flag for these devices didnot power off and didnot re-download patch during suspend and resume. version 3 changes - Reworked to use UART flag, refer to Maintainer's suggestion. - Split into two patches for different purpose. version 2 changes - Add the missing struct member - Modify title length Thanks. Hilda hildawu (2): Bluetooth: btrtl: Adjust the position of strcut definition Bluetooth: hci_h5: Add flag for keep power during suspend/resume drivers/bluetooth/btrtl.c | 36 ----------------------------------- drivers/bluetooth/btrtl.h | 36 ++++++++++++++++++++++++++++++++++- drivers/bluetooth/hci_h5.c | 34 +++++++++++++++++++++++---------- drivers/bluetooth/hci_ldisc.c | 3 ++- drivers/bluetooth/hci_uart.h | 1 + 5 files changed, 62 insertions(+), 48 deletions(-)