[alsa-devel] Balanced output support for Xonar: Patches for Virtuoso driver to add mixer option for balanced mono output (PCM179x dacs)
clemens at ladisch.de
Mon Nov 1 16:59:54 CET 2010
Christian Wisner-Carlson wrote:
> I tested this thoroughly with an Asus Xonar Essence ST, although it
> should also work with the HDAV, Essence STX, and probably other cards.
> The patches that I am posting only give one control regardless of
> whether or not more than one DAC is connected. I have another patchset
> that gives individual control of all 4 dacs in the Xonar Essence ST+H6
> and HDAV+H6 setups (H6 is an optional daughterboard for surround sound).
BTW: any new information about the H6 problem?
> It allows for 4 balanced outputs, 8 unbalanced outputs, or any
> combination of balanced and unbalanced outputs. HOWEVER, it adds 4
> mixer controls and the code isn't very pretty.
The controller can route any stereo pair to each DAC, so it would be a
good idea to have one global control that also affects this routing so
that, e.g., configuring the card for 4 outputs works correctly when
playing 4-channel data.
Alternatively, having low-level controls for each detail of the hardware
is workable when somebody (i.e., you :-) writes a special graphical tool
to configure the Xonar outputs (any the other settings).
The Xense has one PCM1796 for the front channels and a CS4362A for the
other channels. Like the stereo-only cards, this would result in an odd
number of channels in balanced mode, which is somewhat counterintuitive
because the controller would need to be fed an extra unused channel.
> Please tell me if this is not the correct way to post a patch, and
> tell me if it seems like a candidate to be merged.
Your mailer wrapped lines; see Documentation/email-clients.txt.
Also see Documentation/SubmittingPatches.
Overall, this patch looks good. But I wouldn't want to apply it without
the followup patch that handles the D2's four DACs.
> @@ -532,6 +534,13 @@
> reg = PCM1796_OS_64;
> reg = PCM1796_OS_32;
> + if (data->monomode)
> + reg = reg | PCM1796_MONO;
> + if (data->rightmono)
> + reg = reg | PCM1796_CHSL_RIGHT;
> for (i = 0; i < data->dacs; ++i)
> pcm1796_write_cached(chip, i, 20, reg);
This function's purpose is no longer to _only_ update the oversampling
setting; please rename it to, e.g., update_reg20.
More information about the Alsa-devel