AudioFire4 quirk
diff mbox

Message ID 55B90D73.4000602@uni-due.de
State New
Headers show

Commit Message

Johannes Oertel July 29, 2015, 5:29 p.m. UTC
Hi,

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. :)

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(-)

Comments

Takashi Sakamoto Aug. 1, 2015, 1:07 a.m. UTC | #1
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)

Patch
diff mbox

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)