Re: [PATCH v1] driver: bluetooth: hci_qca: Disable auto_off when BT_EN is pulled up by hw

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Shuai,

On Mon, Jun 9, 2025 at 7:00 AM Shuai Zhang <quic_shuaz@xxxxxxxxxxx> wrote:
>
> If the BT SoC BT_EN is controlled by hardware, disable the AUTO_OFF
> feature. Otherwise, BT will close the HCI layer except for the UART
> after firmware download. However, the SoC remains active. If the SoC
> sends a packet to the Host after firmware download, the Host cannot
> respond since the HCI layer is closed, which will cause the firmware
> to enter an incorrect state.
>
> Signed-off-by: Shuai Zhang <quic_shuaz@xxxxxxxxxxx>
> ---
>  drivers/bluetooth/hci_qca.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
> index a2dc39c00..0cb70a3cf 100644
> --- a/drivers/bluetooth/hci_qca.c
> +++ b/drivers/bluetooth/hci_qca.c
> @@ -2483,6 +2483,15 @@ static int qca_serdev_probe(struct serdev_device *serdev)
>                 set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
>                 hdev->shutdown = qca_power_off;
>         }
> +       /* If the BT SoC BT_EN is controlled by hardware, disable the AUTO_OFF
> +        * feature. Otherwise, BT will close the HCI layer except for
> +        * the UART after firmware download. However, the SoC remains active.
> +        * If the SoC sends a packet to the Host after firmware download,
> +        * the Host cannot respond since the HCI layer is closed, which will
> +        * cause the firmware to enter an incorrect state.
> +        */
> +       else
> +               hci_dev_clear_flag(hdev, HCI_AUTO_OFF);

This sounds like a bug imo, the driver shouldn't be messing up with
HCI_AUTO_OFF, if the packet mentioned above is required as part of the
setup stage then it shall be handled via setup callback otherwise the
stack will consider the setup as completed and proceed with auto off,
etc.

>         if (data) {
>                 /* Wideband speech support must be set per driver since it can't
> --
> 2.34.1
>
>


-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux