Re: [PATCH] Bluetooth: btusb: CSR chip hangs when unbound

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

 



Hello Alan,

Ok, I will prepare a new patch in that way.

Thanks

Best regards
José Ignacio


On Sat, Apr 30, 2022 at 3:18 AM Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On Fri, Apr 29, 2022 at 05:31:38PM +0200, Jose Ignacio Tornos Martinez wrote:
> > Bluetooth Dongles with CSR chip (i.e. USB Bluetooth V4.0 Dongle by
> > Trust) hang when they are unbound from 'unbind' sysfs entry and
> > can not be bound again.
> >
> > The reason is CSR chip hangs when usb configuration command with
> > index 0 (used to unconfigure) is sent during disconnection.
> >
> > To avoid this unwanted result, it is necessary not to send this
> > command for CSR chip when usb device is unbound.
> > Besides, "skip_unconfigure" sysfs entry has been created for
> > testing purposes with these or other devices.
>
> I don't see any good reason for adding this sysfs entry.  Normal users
> won't want to do it, and developers can add their own quirks to their
> kernels.  Also, see below.
>
> > Athough device is not unconfigured, it is better to avoid device
> > hanging to be able to operate. Even bluetooth can be previously
> > turned off.
> > On the other hand, this is not important if usb device is going to
> > be bound again (normal behavior), i.e. with usbip.
> >
> > Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@xxxxxxxxxx>
> > ---
> >  drivers/bluetooth/btusb.c  |  8 +++++++-
> >  drivers/usb/core/generic.c |  2 +-
> >  drivers/usb/core/sysfs.c   | 36 ++++++++++++++++++++++++++++++++++++
> >  include/linux/usb.h        |  2 ++
> >  4 files changed, 46 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/usb.h b/include/linux/usb.h
> > index 86a73d834e38..55828cd0a0d1 100644
> > --- a/include/linux/usb.h
> > +++ b/include/linux/usb.h
> > @@ -618,6 +618,7 @@ struct usb3_lpm_parameters {
> >   *   parent->hub_delay + wHubDelay + tTPTransmissionDelay (40ns)
> >   *   Will be used as wValue for SetIsochDelay requests.
> >   * @use_generic_driver: ask driver core to reprobe using the generic driver.
> > + * @skip_unconfigure: disable unconfigure operation for devices without support.
> >   *
> >   * Notes:
> >   * Usbcore drivers should not set usbdev->state directly.  Instead use
> > @@ -704,6 +705,7 @@ struct usb_device {
> >
> >       u16 hub_delay;
> >       unsigned use_generic_driver:1;
> > +     unsigned skip_unconfigure:1;
> >  };
> >  #define      to_usb_device(d) container_of(d, struct usb_device, dev)
>
> This is not a good way to do it.  Instead you should create a new USB
> device quirk bit.  An advantage of this is that there is already a
> mechanism for users to manually set a quirk flag for a device (the
> "quirks" sysfs module file).
>
> Alan Stern
>





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux