diff mbox

USB-Audio: Add second S/PDIF device on Phiree U2

Message ID 1404807560-17139-1-git-send-email-anssi.hannula@iki.fi (mailing list archive)
State Accepted
Delegated to: Takashi Iwai
Headers show

Commit Message

Anssi Hannula July 8, 2014, 8:19 a.m. UTC
Phiree U2 has an unusual configuration. It only has S/PDIF output, but
there are still two devices presented:
- device 0: PCM audio, subject to volume control
- device 1: non-PCM data (passthrough), not subject to volume control

It looks like the AES bits are set according to the selected device,
since outputting PCM data via device 1 will not work (silence).

Currently only the device 0 is shown via the "iec958" alias, and the
second device is not accessible via hinted aliases.

Simply provide access to both of these devices via the "iec958" alias.

Reported-by: touc @ XBMC forum
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
---

This isn't really the optimal solution, but is probably one of the
simplest (except maybe just using device 1 as the only iec958 device).

I guess the kernel driver (or even config rules with sufficient @func
support) could select the appropriate device according to AES0, but
not sure if that is worth the effort?

Also, I'm not 100% sure if this is actually uncommon or if we just
hide it in on other such devices.


 src/conf/cards/USB-Audio.conf | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

Comments

Takashi Iwai July 8, 2014, 10:39 a.m. UTC | #1
At Tue,  8 Jul 2014 11:19:20 +0300,
Anssi Hannula wrote:
> 
> Phiree U2 has an unusual configuration. It only has S/PDIF output, but
> there are still two devices presented:
> - device 0: PCM audio, subject to volume control
> - device 1: non-PCM data (passthrough), not subject to volume control
> 
> It looks like the AES bits are set according to the selected device,
> since outputting PCM data via device 1 will not work (silence).
> 
> Currently only the device 0 is shown via the "iec958" alias, and the
> second device is not accessible via hinted aliases.
> 
> Simply provide access to both of these devices via the "iec958" alias.
> 
> Reported-by: touc @ XBMC forum
> Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
> ---
> 
> This isn't really the optimal solution, but is probably one of the
> simplest (except maybe just using device 1 as the only iec958 device).
> 
> I guess the kernel driver (or even config rules with sufficient @func
> support) could select the appropriate device according to AES0, but
> not sure if that is worth the effort?
> 
> Also, I'm not 100% sure if this is actually uncommon or if we just
> hide it in on other such devices.

This looks simple enough as a workaround, so I just took it as is.
Maybe Clemens or else has a better way to work around it, though.


thanks,

Takashi

> 
> 
>  src/conf/cards/USB-Audio.conf | 40 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
> index ce3ae01..77a48b9 100644
> --- a/src/conf/cards/USB-Audio.conf
> +++ b/src/conf/cards/USB-Audio.conf
> @@ -52,6 +52,11 @@ USB-Audio.pcm.iec958_device {
>  	"USB Device 0x46d:0x992" 999
>  }
>  
> +# Second iec958 device number, if any.
> +USB-Audio.pcm.iec958_2_device {
> +	"PHIREE U2" 1  # 0 = PCM S/PDIF, 1 = non-PCM S/PDIF
> +}
> +
>  
>  # If a device requires non-standard definitions for front, surround40,
>  # surround51, surround71 or iec958, they can be defined here.
> @@ -422,4 +427,39 @@ USB-Audio.pcm.iec958.0 {
>  	}
>  }
>  
> +USB-Audio.pcm.iec958.1 {
> +	@args [ CARD AES0 AES1 AES2 AES3 ]
> +	@args.CARD { type string }
> +	@args.AES0 { type integer }
> +	@args.AES1 { type integer }
> +	@args.AES2 { type integer }
> +	@args.AES3 { type integer }
> +	@func refer
> +	name {
> +		@func concat
> +		strings [
> +			"cards.USB-Audio."
> +			{ @func card_name card $CARD }
> +			".pcm.iec958_2:CARD=" $CARD
> +			",AES0=" $AES0 ",AES1=" $AES1 ",AES2=" $AES2 ",AES3=" $AES3
> +		]
> +	}
> +	default {
> +		# FIXME: we cannot set the AES parameters
> +		type hw
> +		card $CARD
> +		device {
> +			@func refer
> +			name {
> +				@func concat
> +				strings [
> +					"cards.USB-Audio.pcm.iec958_2_device."
> +					{ @func card_name card $CARD }
> +				]
> +			}
> +			default 999
> +		}
> +	}
> +}
> +
>  # vim: ft=alsaconf
> -- 
> 1.8.4.5
>
diff mbox

Patch

diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
index ce3ae01..77a48b9 100644
--- a/src/conf/cards/USB-Audio.conf
+++ b/src/conf/cards/USB-Audio.conf
@@ -52,6 +52,11 @@  USB-Audio.pcm.iec958_device {
 	"USB Device 0x46d:0x992" 999
 }
 
+# Second iec958 device number, if any.
+USB-Audio.pcm.iec958_2_device {
+	"PHIREE U2" 1  # 0 = PCM S/PDIF, 1 = non-PCM S/PDIF
+}
+
 
 # If a device requires non-standard definitions for front, surround40,
 # surround51, surround71 or iec958, they can be defined here.
@@ -422,4 +427,39 @@  USB-Audio.pcm.iec958.0 {
 	}
 }
 
+USB-Audio.pcm.iec958.1 {
+	@args [ CARD AES0 AES1 AES2 AES3 ]
+	@args.CARD { type string }
+	@args.AES0 { type integer }
+	@args.AES1 { type integer }
+	@args.AES2 { type integer }
+	@args.AES3 { type integer }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.USB-Audio."
+			{ @func card_name card $CARD }
+			".pcm.iec958_2:CARD=" $CARD
+			",AES0=" $AES0 ",AES1=" $AES1 ",AES2=" $AES2 ",AES3=" $AES3
+		]
+	}
+	default {
+		# FIXME: we cannot set the AES parameters
+		type hw
+		card $CARD
+		device {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"cards.USB-Audio.pcm.iec958_2_device."
+					{ @func card_name card $CARD }
+				]
+			}
+			default 999
+		}
+	}
+}
+
 # vim: ft=alsaconf