All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
@ 2013-03-19 16:12 Torstein Hegge
  2013-03-19 16:24 ` Daniel Mack
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Torstein Hegge @ 2013-03-19 16:12 UTC (permalink / raw)
  To: alsa-devel

UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
sees an extension unit on a UAC2 device.

UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.

Signed-off-by: Torstein Hegge <hegge@resisty.net>
---
 sound/usb/mixer.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 638e7f7..8eb84c0 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -725,7 +725,8 @@ static int check_input_term(struct mixer_build *state, int id, struct usb_audio_
 		case UAC1_PROCESSING_UNIT:
 		case UAC1_EXTENSION_UNIT:
 		/* UAC2_PROCESSING_UNIT_V2 */
-		/* UAC2_EFFECT_UNIT */ {
+		/* UAC2_EFFECT_UNIT */
+		case UAC2_EXTENSION_UNIT_V2: {
 			struct uac_processing_unit_descriptor *d = p1;
 
 			if (state->mixer->protocol == UAC_VERSION_2 &&
@@ -2052,6 +2053,8 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)
 			return parse_audio_extension_unit(state, unitid, p1);
 		else /* UAC_VERSION_2 */
 			return parse_audio_processing_unit(state, unitid, p1);
+	case UAC2_EXTENSION_UNIT_V2:
+		return parse_audio_extension_unit(state, unitid, p1);
 	default:
 		snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
 		return -EINVAL;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
  2013-03-19 16:12 [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1 Torstein Hegge
@ 2013-03-19 16:24 ` Daniel Mack
  2013-03-19 17:08 ` Takashi Iwai
  2013-03-20  7:45 ` Takashi Iwai
  2 siblings, 0 replies; 7+ messages in thread
From: Daniel Mack @ 2013-03-19 16:24 UTC (permalink / raw)
  To: Torstein Hegge; +Cc: alsa-devel

On 19.03.2013 17:12, Torstein Hegge wrote:
> UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
> the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
> sees an extension unit on a UAC2 device.
> 
> UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.
> 
> Signed-off-by: Torstein Hegge <hegge@resisty.net>

I can't test this, but the change seems fine, so I'll give my

Acked-by: Daniel Mack <zonque@gmail.com>

Apart from that, I already prepared some patches to make mixer unit
failures non-fatal, so that future occurances of unhandled unit types
won't prevent the entire card creation. I'll wait from test feedback and
then submit.



Thanks,
Daniel



> ---
>  sound/usb/mixer.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 638e7f7..8eb84c0 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -725,7 +725,8 @@ static int check_input_term(struct mixer_build *state, int id, struct usb_audio_
>  		case UAC1_PROCESSING_UNIT:
>  		case UAC1_EXTENSION_UNIT:
>  		/* UAC2_PROCESSING_UNIT_V2 */
> -		/* UAC2_EFFECT_UNIT */ {
> +		/* UAC2_EFFECT_UNIT */
> +		case UAC2_EXTENSION_UNIT_V2: {
>  			struct uac_processing_unit_descriptor *d = p1;
>  
>  			if (state->mixer->protocol == UAC_VERSION_2 &&
> @@ -2052,6 +2053,8 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)
>  			return parse_audio_extension_unit(state, unitid, p1);
>  		else /* UAC_VERSION_2 */
>  			return parse_audio_processing_unit(state, unitid, p1);
> +	case UAC2_EXTENSION_UNIT_V2:
> +		return parse_audio_extension_unit(state, unitid, p1);
>  	default:
>  		snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
>  		return -EINVAL;
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
  2013-03-19 16:12 [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1 Torstein Hegge
  2013-03-19 16:24 ` Daniel Mack
@ 2013-03-19 17:08 ` Takashi Iwai
  2013-03-19 18:10   ` Torstein Hegge
  2013-03-20  7:45 ` Takashi Iwai
  2 siblings, 1 reply; 7+ messages in thread
From: Takashi Iwai @ 2013-03-19 17:08 UTC (permalink / raw)
  To: Torstein Hegge; +Cc: alsa-devel

At Tue, 19 Mar 2013 17:12:14 +0100,
Torstein Hegge wrote:
> 
> UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
> the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
> sees an extension unit on a UAC2 device.
> 
> UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.
> 
> Signed-off-by: Torstein Hegge <hegge@resisty.net>

Does this bug hit on any existing device with 3.9-rc kernel?
If it does, it'd be nice to have a bit actual description.  Then I'm
going to merge this for the next 3.9-rc.  Otherwise it'll go to
for-next branch.


thanks,

Takashi


> ---
>  sound/usb/mixer.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 638e7f7..8eb84c0 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -725,7 +725,8 @@ static int check_input_term(struct mixer_build *state, int id, struct usb_audio_
>  		case UAC1_PROCESSING_UNIT:
>  		case UAC1_EXTENSION_UNIT:
>  		/* UAC2_PROCESSING_UNIT_V2 */
> -		/* UAC2_EFFECT_UNIT */ {
> +		/* UAC2_EFFECT_UNIT */
> +		case UAC2_EXTENSION_UNIT_V2: {
>  			struct uac_processing_unit_descriptor *d = p1;
>  
>  			if (state->mixer->protocol == UAC_VERSION_2 &&
> @@ -2052,6 +2053,8 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)
>  			return parse_audio_extension_unit(state, unitid, p1);
>  		else /* UAC_VERSION_2 */
>  			return parse_audio_processing_unit(state, unitid, p1);
> +	case UAC2_EXTENSION_UNIT_V2:
> +		return parse_audio_extension_unit(state, unitid, p1);
>  	default:
>  		snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
>  		return -EINVAL;
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
  2013-03-19 17:08 ` Takashi Iwai
@ 2013-03-19 18:10   ` Torstein Hegge
  2013-03-19 19:26     ` Daniel Mack
  0 siblings, 1 reply; 7+ messages in thread
From: Torstein Hegge @ 2013-03-19 18:10 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

On Tue, Mar 19, 2013 at 06:08:15PM +0100, Takashi Iwai wrote:
> At Tue, 19 Mar 2013 17:12:14 +0100,
> Torstein Hegge wrote:
> > 
> > UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
> > the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
> > sees an extension unit on a UAC2 device.
> > 
> > UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.
> > 
> > Signed-off-by: Torstein Hegge <hegge@resisty.net>
> 
> Does this bug hit on any existing device with 3.9-rc kernel?
> If it does, it'd be nice to have a bit actual description.

The bug was reported on a Focusrite Scarlett 8i6 USB with a 3.5.0 kernel [1],
where the unhandled subtype causes the card creation to fail:

[ 1144.857836] usb 2-1.2: new high-speed USB device number 4 using ehci_hcd
[ 1144.951520] usb 2-1.2: New USB device found, idVendor=1235, idProduct=8002
[ 1144.951531] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1144.951538] usb 2-1.2: Product: Scarlett 8i6 USB 
[ 1144.951543] usb 2-1.2: Manufacturer: Focusrite
[ 1144.951547] usb 2-1.2: SerialNumber: 00006B8B
[ 1144.956590] usbaudio: unit 51: unexpected type 0x09
[ 1144.956640] snd-usb-audio: probe of 2-1.2:1.0 failed with error -5

Still waiting for him to report back with a 3.9-rc kernel.

[1] http://thread.gmane.org/gmane.linux.alsa.user/37289/focus=37294


Torstein

> > ---
> >  sound/usb/mixer.c |    5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> > index 638e7f7..8eb84c0 100644
> > --- a/sound/usb/mixer.c
> > +++ b/sound/usb/mixer.c
> > @@ -725,7 +725,8 @@ static int check_input_term(struct mixer_build *state, int id, struct usb_audio_
> >  		case UAC1_PROCESSING_UNIT:
> >  		case UAC1_EXTENSION_UNIT:
> >  		/* UAC2_PROCESSING_UNIT_V2 */
> > -		/* UAC2_EFFECT_UNIT */ {
> > +		/* UAC2_EFFECT_UNIT */
> > +		case UAC2_EXTENSION_UNIT_V2: {
> >  			struct uac_processing_unit_descriptor *d = p1;
> >  
> >  			if (state->mixer->protocol == UAC_VERSION_2 &&
> > @@ -2052,6 +2053,8 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)
> >  			return parse_audio_extension_unit(state, unitid, p1);
> >  		else /* UAC_VERSION_2 */
> >  			return parse_audio_processing_unit(state, unitid, p1);
> > +	case UAC2_EXTENSION_UNIT_V2:
> > +		return parse_audio_extension_unit(state, unitid, p1);
> >  	default:
> >  		snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
> >  		return -EINVAL;
> > -- 
> > 1.7.10.4

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
  2013-03-19 18:10   ` Torstein Hegge
@ 2013-03-19 19:26     ` Daniel Mack
  2013-03-20  7:12       ` Takashi Iwai
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Mack @ 2013-03-19 19:26 UTC (permalink / raw)
  To: Torstein Hegge; +Cc: Takashi Iwai, alsa-devel

On 19.03.2013 19:10, Torstein Hegge wrote:
> On Tue, Mar 19, 2013 at 06:08:15PM +0100, Takashi Iwai wrote:
>> At Tue, 19 Mar 2013 17:12:14 +0100,
>> Torstein Hegge wrote:
>>>
>>> UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
>>> the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
>>> sees an extension unit on a UAC2 device.
>>>
>>> UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.
>>>
>>> Signed-off-by: Torstein Hegge <hegge@resisty.net>
>>
>> Does this bug hit on any existing device with 3.9-rc kernel?
>> If it does, it'd be nice to have a bit actual description.
> 
> The bug was reported on a Focusrite Scarlett 8i6 USB with a 3.5.0 kernel [1],
> where the unhandled subtype causes the card creation to fail:
> 
> [ 1144.857836] usb 2-1.2: new high-speed USB device number 4 using ehci_hcd
> [ 1144.951520] usb 2-1.2: New USB device found, idVendor=1235, idProduct=8002
> [ 1144.951531] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> [ 1144.951538] usb 2-1.2: Product: Scarlett 8i6 USB 
> [ 1144.951543] usb 2-1.2: Manufacturer: Focusrite
> [ 1144.951547] usb 2-1.2: SerialNumber: 00006B8B
> [ 1144.956590] usbaudio: unit 51: unexpected type 0x09
> [ 1144.956640] snd-usb-audio: probe of 2-1.2:1.0 failed with error -5
> 
> Still waiting for him to report back with a 3.9-rc kernel.
> 
> [1] http://thread.gmane.org/gmane.linux.alsa.user/37289/focus=37294

The 3.9-rc kernel doesn't change anything about that, but two error path
cleanup patches in the mixer code seem to have at least some effect.
I'll post them in a while.

I frankly think we should merge both this and my patches to 3.9, and
maybe even mark the for @stable.


Daniel

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
  2013-03-19 19:26     ` Daniel Mack
@ 2013-03-20  7:12       ` Takashi Iwai
  0 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2013-03-20  7:12 UTC (permalink / raw)
  To: Daniel Mack; +Cc: Torstein Hegge, alsa-devel

At Tue, 19 Mar 2013 20:26:22 +0100,
Daniel Mack wrote:
> 
> On 19.03.2013 19:10, Torstein Hegge wrote:
> > On Tue, Mar 19, 2013 at 06:08:15PM +0100, Takashi Iwai wrote:
> >> At Tue, 19 Mar 2013 17:12:14 +0100,
> >> Torstein Hegge wrote:
> >>>
> >>> UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
> >>> the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
> >>> sees an extension unit on a UAC2 device.
> >>>
> >>> UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.
> >>>
> >>> Signed-off-by: Torstein Hegge <hegge@resisty.net>
> >>
> >> Does this bug hit on any existing device with 3.9-rc kernel?
> >> If it does, it'd be nice to have a bit actual description.
> > 
> > The bug was reported on a Focusrite Scarlett 8i6 USB with a 3.5.0 kernel [1],
> > where the unhandled subtype causes the card creation to fail:
> > 
> > [ 1144.857836] usb 2-1.2: new high-speed USB device number 4 using ehci_hcd
> > [ 1144.951520] usb 2-1.2: New USB device found, idVendor=1235, idProduct=8002
> > [ 1144.951531] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> > [ 1144.951538] usb 2-1.2: Product: Scarlett 8i6 USB 
> > [ 1144.951543] usb 2-1.2: Manufacturer: Focusrite
> > [ 1144.951547] usb 2-1.2: SerialNumber: 00006B8B
> > [ 1144.956590] usbaudio: unit 51: unexpected type 0x09
> > [ 1144.956640] snd-usb-audio: probe of 2-1.2:1.0 failed with error -5
> > 
> > Still waiting for him to report back with a 3.9-rc kernel.
> > 
> > [1] http://thread.gmane.org/gmane.linux.alsa.user/37289/focus=37294
> 
> The 3.9-rc kernel doesn't change anything about that, but two error path
> cleanup patches in the mixer code seem to have at least some effect.
> I'll post them in a while.
> 
> I frankly think we should merge both this and my patches to 3.9, and
> maybe even mark the for @stable.

OK, that's fine.  I just wanted to know the situation.


Takashi

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1
  2013-03-19 16:12 [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1 Torstein Hegge
  2013-03-19 16:24 ` Daniel Mack
  2013-03-19 17:08 ` Takashi Iwai
@ 2013-03-20  7:45 ` Takashi Iwai
  2 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2013-03-20  7:45 UTC (permalink / raw)
  To: Torstein Hegge; +Cc: alsa-devel

At Tue, 19 Mar 2013 17:12:14 +0100,
Torstein Hegge wrote:
> 
> UAC2_EXTENSION_UNIT_V2 differs from UAC1_EXTENSION_UNIT, but can be handled in
> the same way when parsing the unit. Otherwise parse_audio_unit() fails when it
> sees an extension unit on a UAC2 device.
> 
> UAC2_EXTENSION_UNIT_V2 is outside the range allocated by UAC1.
> 
> Signed-off-by: Torstein Hegge <hegge@resisty.net>

OK, applied now with Cc to stable as Daniel suggested.


thanks,

Takashi

> ---
>  sound/usb/mixer.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 638e7f7..8eb84c0 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -725,7 +725,8 @@ static int check_input_term(struct mixer_build *state, int id, struct usb_audio_
>  		case UAC1_PROCESSING_UNIT:
>  		case UAC1_EXTENSION_UNIT:
>  		/* UAC2_PROCESSING_UNIT_V2 */
> -		/* UAC2_EFFECT_UNIT */ {
> +		/* UAC2_EFFECT_UNIT */
> +		case UAC2_EXTENSION_UNIT_V2: {
>  			struct uac_processing_unit_descriptor *d = p1;
>  
>  			if (state->mixer->protocol == UAC_VERSION_2 &&
> @@ -2052,6 +2053,8 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)
>  			return parse_audio_extension_unit(state, unitid, p1);
>  		else /* UAC_VERSION_2 */
>  			return parse_audio_processing_unit(state, unitid, p1);
> +	case UAC2_EXTENSION_UNIT_V2:
> +		return parse_audio_extension_unit(state, unitid, p1);
>  	default:
>  		snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
>  		return -EINVAL;
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-03-20  7:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-19 16:12 [PATCH] ALSA: usb: Parse UAC2 extension unit like for UAC1 Torstein Hegge
2013-03-19 16:24 ` Daniel Mack
2013-03-19 17:08 ` Takashi Iwai
2013-03-19 18:10   ` Torstein Hegge
2013-03-19 19:26     ` Daniel Mack
2013-03-20  7:12       ` Takashi Iwai
2013-03-20  7:45 ` Takashi Iwai

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.