All of lore.kernel.org
 help / color / mirror / Atom feed
From: Archie Pusaka <apusaka@google.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Marcel Holtmann <marcel@holtmann.org>,
	Johan Hedberg <johan.hedberg@gmail.com>,
	Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
	linux-bluetooth@vger.kernel.org,
	Archie Pusaka <apusaka@chromium.org>
Subject: Re: [PATCH 5.15 regression fix] Bluetooth: hci_h5: Fix (runtime)suspend issues on RTL8723BS HCIs
Date: Fri, 24 Sep 2021 10:57:15 +0800	[thread overview]
Message-ID: <CAJQfnxHarzJOqTjG_-bpgTTna0E3EfcWrrVrvkpyFTwkJeBVkw@mail.gmail.com> (raw)
In-Reply-To: <20210920125739.111846-1-hdegoede@redhat.com>

Hi Hans,

On Mon, 20 Sept 2021 at 20:57, Hans de Goede <hdegoede@redhat.com> wrote:
>
> The recently added H5_WAKEUP_DISABLE h5->flags flag gets checked in
> h5_btrtl_open(), but it gets set in h5_serdev_probe() *after*
> calling  hci_uart_register_device() and thus after h5_btrtl_open()
> is called, set this flag earlier.
>
> Also on devices where suspend/resume involves fully re-probing the HCI,
> runtime-pm suspend should not be used, make the runtime-pm setup
> conditional on the H5_WAKEUP_DISABLE flag too.
>
> This fixes the HCI being removed and then re-added every 10 seconds
> because it was being reprobed as soon as it was runtime-suspended.
>
> Cc: Archie Pusaka <apusaka@chromium.org>
> Fixes: 66f077dde749 ("Bluetooth: hci_h5: add WAKEUP_DISABLE flag")
> Fixes: d9dd833cf6d2 ("Bluetooth: hci_h5: Add runtime suspend")
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

You are correct, I should have checked H5_WAKEUP_DISABLE before using
autosuspend.

Reviewed-by: Archie Pusaka <apusaka@chromium.org>

> ---
>  drivers/bluetooth/hci_h5.c | 20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c
> index 0c0dedece59c..59b712742d33 100644
> --- a/drivers/bluetooth/hci_h5.c
> +++ b/drivers/bluetooth/hci_h5.c
> @@ -846,6 +846,8 @@ static int h5_serdev_probe(struct serdev_device *serdev)
>                 h5->vnd = data->vnd;
>         }
>
> +       if (data->driver_info & H5_INFO_WAKEUP_DISABLE)
> +               set_bit(H5_WAKEUP_DISABLE, &h5->flags);
>
>         h5->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW);
>         if (IS_ERR(h5->enable_gpio))
> @@ -860,9 +862,6 @@ static int h5_serdev_probe(struct serdev_device *serdev)
>         if (err)
>                 return err;
>
> -       if (data->driver_info & H5_INFO_WAKEUP_DISABLE)
> -               set_bit(H5_WAKEUP_DISABLE, &h5->flags);
> -

We can simplify by just returning err and not check its value.

>         return 0;
>  }
>
> @@ -962,11 +961,13 @@ static void h5_btrtl_open(struct h5 *h5)
>         serdev_device_set_parity(h5->hu->serdev, SERDEV_PARITY_EVEN);
>         serdev_device_set_baudrate(h5->hu->serdev, 115200);
>
> -       pm_runtime_set_active(&h5->hu->serdev->dev);
> -       pm_runtime_use_autosuspend(&h5->hu->serdev->dev);
> -       pm_runtime_set_autosuspend_delay(&h5->hu->serdev->dev,
> -                                        SUSPEND_TIMEOUT_MS);
> -       pm_runtime_enable(&h5->hu->serdev->dev);
> +       if (!test_bit(H5_WAKEUP_DISABLE, &h5->flags)) {
> +               pm_runtime_set_active(&h5->hu->serdev->dev);
> +               pm_runtime_use_autosuspend(&h5->hu->serdev->dev);
> +               pm_runtime_set_autosuspend_delay(&h5->hu->serdev->dev,
> +                                                SUSPEND_TIMEOUT_MS);
> +               pm_runtime_enable(&h5->hu->serdev->dev);
> +       }
>
>         /* The controller needs up to 500ms to wakeup */
>         gpiod_set_value_cansleep(h5->enable_gpio, 1);
> @@ -976,7 +977,8 @@ static void h5_btrtl_open(struct h5 *h5)
>
>  static void h5_btrtl_close(struct h5 *h5)
>  {
> -       pm_runtime_disable(&h5->hu->serdev->dev);
> +       if (!test_bit(H5_WAKEUP_DISABLE, &h5->flags))
> +               pm_runtime_disable(&h5->hu->serdev->dev);
>
>         gpiod_set_value_cansleep(h5->device_wake_gpio, 0);
>         gpiod_set_value_cansleep(h5->enable_gpio, 0);
> --
> 2.31.1
>

Thanks,
Archie

  parent reply	other threads:[~2021-09-24  2:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-20 12:57 [PATCH 5.15 regression fix] Bluetooth: hci_h5: Fix (runtime)suspend issues on RTL8723BS HCIs Hans de Goede
2021-09-20 13:25 ` [5.15,regression,fix] " bluez.test.bot
2021-09-24  2:57 ` Archie Pusaka [this message]
2021-09-24  9:37 ` [PATCH 5.15 regression fix] " Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAJQfnxHarzJOqTjG_-bpgTTna0E3EfcWrrVrvkpyFTwkJeBVkw@mail.gmail.com \
    --to=apusaka@google.com \
    --cc=apusaka@chromium.org \
    --cc=hdegoede@redhat.com \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=luiz.dentz@gmail.com \
    --cc=marcel@holtmann.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.