[alsa-devel] [PATCH] ALSA: fireworks: add support for AudioFire2 quirk
Takashi Iwai
tiwai at suse.de
Mon Jul 27 10:19:11 CEST 2015
On Sun, 26 Jul 2015 09:10:09 +0200,
Takashi Sakamoto wrote:
>
> Fireworks uses TSB43CB43(IceLynx-Micro) as its IEC 61883-1/6 interface.
> This chip includes ARM7 core, and loads and runs program. The firmware
> is stored in on-board memory and loaded every powering-on.
>
> Echo Audio ships several versions of firmwares for each model. These
> firmwares have each quirk and the quirk changes a sequence of packets.
>
> AudioFire2 has a quirk to transfer a first packet with non-zero in
> its dbc field. This causes ALSA Fireworks driver to detect discontinuity.
> As long as I investigated, firmware 5.7, 5.7.6 and 5.8 have this quirk.
>
> This commit adds a support for the quirk to handle AudioFire2 packets.
> For safe, CIP_SKIP_INIT_DBC_CHECK is applied to all versions of
> AudioFire2's firmwares.
>
> 02 00050002 90ffffff <-
> 42 0005000a 90013000
> 42 00050012 90014400
> 42 0005001a 90015800
> 02 0005001a 90ffffff
> 42 00050022 90019000
> 42 0005002a 9001a400
> 42 00050032 9001b800
> 02 00050032 90ffffff
> 42 0005003a 9001d000
> 42 00050042 9001e400
> 42 0005004a 9001f800
> 02 0005004a 90ffffff
>
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
Applied, thanks.
Takashi
> ---
> sound/firewire/fireworks/fireworks.c | 2 ++
> sound/firewire/fireworks/fireworks.h | 1 +
> sound/firewire/fireworks/fireworks_stream.c | 3 +++
> 3 files changed, 6 insertions(+)
>
> diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c
> index 2682e7e..c670db4 100644
> --- a/sound/firewire/fireworks/fireworks.c
> +++ b/sound/firewire/fireworks/fireworks.c
> @@ -248,6 +248,8 @@ efw_probe(struct fw_unit *unit,
> err = get_hardware_info(efw);
> if (err < 0)
> goto error;
> + if (entry->model_id == MODEL_ECHO_AUDIOFIRE_2)
> + efw->is_af2 = 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 4f0201a..c33252b 100644
> --- a/sound/firewire/fireworks/fireworks.h
> +++ b/sound/firewire/fireworks/fireworks.h
> @@ -70,6 +70,7 @@ struct snd_efw {
> bool resp_addr_changable;
>
> /* for quirks */
> + bool is_af2;
> bool is_af9;
> u32 firmware_version;
>
> diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c
> index c55db1b..a0762dd 100644
> --- a/sound/firewire/fireworks/fireworks_stream.c
> +++ b/sound/firewire/fireworks/fireworks_stream.c
> @@ -172,6 +172,9 @@ 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)
> + efw->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK;
> /* AudioFire9 always reports wrong dbs. */
> if (efw->is_af9)
> efw->tx_stream.flags |= CIP_WRONG_DBS;
> --
> 2.1.4
>
More information about the Alsa-devel
mailing list