[alsa-devel] AudioFire4 quirk
Takashi Sakamoto
o-takashi at sakamocchi.jp
Sat Aug 1 03:07:54 CEST 2015
Hi Johannes,
On Jul 30 2015 02:29, Johannes Oertel wrote:
> when I try to use the snd-fireworks driver with my AudioFire4 (see the
> output of /proc/asound/cardX/firewire/firmware below) on my machine
> (kernel 4.1), it doesn't work. I am experiencing exactly the same
> problems as Harry with his AudioFire2 [1]; dmesg was reporting
> discontinuities.
>
> A few days ago, I saw Takashi Sakamoto's most recent patch for making
> the AudioFire2 work in this case [2]. I adapted his patch (see below) to
> apply to my situation with the AudioFire4 and now it is working
> flawlessly! However, according to the README in Takashi's GitHub
> repository [3], he is testing the driver with an AudioFire4 as well, so
> I asked him why I need this patch and he does not. He told me he is
> using firmware version 5.5 while I'm on 5.7.3. He said he is going to
> test his device with different firmware versions soon and write a patch,
> if needed.
>
> Finally, he asked me to post this whole issue to this list as well and
> that's what I have just done. :)
I remember that I did investigate AudioFire4 with several versions of
firmware when I committed ALSA Fireworks driver. But I might have
overlooked something. In this weekend, I'll investigate my AudioFire4 again.
Thanks for posting this issue and sharing this information with us.
Regards
Takashi Sakamoto
> Best regards,
> Johannes
>
>
> [1]
> http://mailman.alsa-project.org/pipermail/alsa-devel/2014-August/080379.html
>
> [2]
> http://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/?id=9c6893e0be38b6ca9a56a854226e51dee0a16a5a
>
> [3] https://github.com/takaswie/snd-firewire-improve
>
> /proc/asound/cardX/firewire/firmware:
> guid_hi: 0x148604
> guid_lo: 0x5BA8D7BF
> type: 0xAF4
> version: 0x0
> vendor_name: Echo Digital Audio
> model_name: AudioFire4
> dsp_version: 0x0
> arm_version: 0x5070300
> fpga_version: 0x3000200
> flags: 0xE1
> max_sample_rate: 0x17700
> min_sample_rate: 0x7D00
> supported_clock: 0x9
> phys out: 0x6
> phys in: 0x6
> phys in grps: 0x2
> phys in grp[0]: type 0x0, count 0x4
> phys in grp[1]: type 0x1, count 0x2
> phys out grps: 0x2
> phys out grps[0]: type 0x0, count 0x4
> phys out grps[1]: type 0x1, count 0x2
> amdtp rx pcm channels 1x: 0x6
> amdtp tx pcm channels 1x: 0x6
> amdtp rx pcm channels 2x: 0x6
> amdtp tx pcm channels 2x: 0x6
> amdtp rx pcm channels 4x: 0x6
> amdtp tx pcm channels 4x: 0x6
> midi out ports: 0x1
> midi in ports: 0x1
> mixer playback channels: 0x6
> mixer capture channels: 0x6
>
> The patch:
> ---
> sound/firewire/fireworks/fireworks.c | 2 ++
> sound/firewire/fireworks/fireworks.h | 1 +
> sound/firewire/fireworks/fireworks_stream.c | 4 ++--
> 3 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/sound/firewire/fireworks/fireworks.c
> b/sound/firewire/fireworks/fireworks.c
> index c670db4..544bdbf 100644
> --- a/sound/firewire/fireworks/fireworks.c
> +++ b/sound/firewire/fireworks/fireworks.c
> @@ -250,6 +250,8 @@ efw_probe(struct fw_unit *unit,
> goto error;
> if (entry->model_id == MODEL_ECHO_AUDIOFIRE_2)
> efw->is_af2 = true;
> + if (entry->model_id == MODEL_ECHO_AUDIOFIRE_4)
> + efw->is_af4 = true;
> if (entry->model_id == MODEL_ECHO_AUDIOFIRE_9)
> efw->is_af9 = true;
>
> diff --git a/sound/firewire/fireworks/fireworks.h
> b/sound/firewire/fireworks/fireworks.h
> index 9493122..9a7dcbb 100644
> --- a/sound/firewire/fireworks/fireworks.h
> +++ b/sound/firewire/fireworks/fireworks.h
> @@ -74,6 +74,7 @@ struct snd_efw {
>
> /* for quirks */
> bool is_af2;
> + bool is_af4;
> bool is_af9;
> u32 firmware_version;
>
> diff --git a/sound/firewire/fireworks/fireworks_stream.c
> b/sound/firewire/fireworks/fireworks_stream.c
> index a0762dd..182b96f 100644
> --- a/sound/firewire/fireworks/fireworks_stream.c
> +++ b/sound/firewire/fireworks/fireworks_stream.c
> @@ -172,8 +172,8 @@ int snd_efw_stream_init_duplex(struct snd_efw *efw)
> efw->tx_stream.flags |= CIP_DBC_IS_END_EVENT;
> /* Fireworks reset dbc at bus reset. */
> efw->tx_stream.flags |= CIP_SKIP_DBC_ZERO_CHECK;
> - /* AudioFire2 starts packets with non-zero dbc. */
> - if (efw->is_af2)
> + /* AudioFire2 and AudioFire4 start packets with non-zero dbc. */
> + if (efw->is_af2 || efw->is_af4)
> efw->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK;
> /* AudioFire9 always reports wrong dbs. */
> if (efw->is_af9)
More information about the Alsa-devel
mailing list