[alsa-devel] [RFC v2][PATCH 00/11] ALSA: fireface: new driver for RME Fireface series

Jonathan Woithe jwoithe at just42.net
Tue Dec 22 15:40:41 CET 2015


On Tue, Dec 22, 2015 at 07:54:19PM +0900, Takashi Sakamoto wrote:
> Once the device is unmute, then it keeps the state regardless of
> starting/stopping streams. If the vendor uses the unmute state to avoid
> any noises at starting packet streaming, the device should automatically
> be muted when starting streaming or after stopping streaming.

The vendor unmutes this register when streaming is started for the first
time after device initialisation.  This is possibly due to noise suppression
during the initial device setup although I have not verified this
electrically.  In my view we should do the same since this is the way the
device is used (and therefore supported) on other operating systems.  If we
deviate from the way the vendor drives the interface we could introduce
subtle side effects for no good reason.

> I realize it means that unmute/mute are not related to streaming
> functionality. Therefore, no reasons to implement it in streaming driver.

We may have to agree to disagree on this point.  Where possible we should,
imho, drive the hardware according to the vendor's procedures.

> >> I'd like to drop the code to send write transactions to the address, and
> >> leave the decision to userspace. ...
> :
> Please read fireface-proc.c or snd_ff_stream_get_clock() in
> fireface-stream.c, then describe your opinion about the issue.

snd_ff_stream_get_clock() is exclusively about identifying the clock source
and rate.  Some of this information is available in the read-only status
registers starting at 0x801c0000 as you have found.  However, deducing the
rate from bits returned by a single quadlet read of 0x801c0004 is
undocumented and in any case will not be accurate for some sync modes and
clock sources.  This means that some configuration needs persistent storage
and the kernel driver is the logical place for this.  As an aside, the
status register content changes depending on the block read origin and
request size.

fireface-proc.c provides userspace with access to the status register, with
the same access caveats as for snd_ff_stream_get_clock().

At this point I am inclined to just wait to see what lands and fix up the
usability and interfacing issues later.

Regards
  jonathan


More information about the Alsa-devel mailing list