diff mbox

ASoC: Add delay quirk for H650e/Jabra 550a USB headsets

Message ID 20170822063353.3612-1-joakim.tjernlund@infinera.com (mailing list archive)
State Accepted
Commit 07b3b5e9ed807a0d2077319b8e43a42e941db818
Headers show

Commit Message

Joakim Tjernlund Aug. 22, 2017, 6:33 a.m. UTC
These headsets reports a lot of: cannot set freq 44100 to ep 0x81
and need a small delay between sample rate settings, just like
Zoom R16/24. Add both headsets to the Zoom R16/24 quirk for
a 1 ms delay between control msgs.

Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
---
 sound/usb/quirks.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Joakim Tjernlund Aug. 23, 2017, 10:52 a.m. UTC | #1
On Tue, 2017-08-22 at 11:15 +0200, Takashi Iwai wrote:
> On Tue, 22 Aug 2017 08:33:53 +0200,
> Joakim Tjernlund wrote:
> > 
> > These headsets reports a lot of: cannot set freq 44100 to ep 0x81
> > and need a small delay between sample rate settings, just like
> > Zoom R16/24. Add both headsets to the Zoom R16/24 quirk for
> > a 1 ms delay between control msgs.
> > 
> > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> 
> Applied (with the correction of subject) now.  Thanks.
> 

Thank you

I have noticed though that the microphone stops working after a some seconds of 
audio chat in pidgin for all my USB headsets.
Any pointers how to debug this would be greatly appreciated.

 Jocke
diff mbox

Patch

diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index eb4b9f7a571e..6f395150243f 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1308,10 +1308,13 @@  void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
 	    && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
 		mdelay(20);
 
-	/* Zoom R16/24 needs a tiny delay here, otherwise requests like
-	 * get/set frequency return as failed despite actually succeeding.
+	/* Zoom R16/24, Logitech H650e, Jabra 550a needs a tiny delay here,
+	 * otherwise requests like get/set frequency return as failed despite
+	 * actually succeeding.
 	 */
-	if (chip->usb_id == USB_ID(0x1686, 0x00dd) &&
+	if ((chip->usb_id == USB_ID(0x1686, 0x00dd) ||
+	     chip->usb_id == USB_ID(0x046d, 0x0a46) ||
+	     chip->usb_id == USB_ID(0x0b0e, 0x0349)) &&
 	    (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
 		mdelay(1);
 }