Skip to content

Commit

Permalink
ALSA: firewire-motu: wait for notification when changing clock config…
Browse files Browse the repository at this point in the history
…uration for protocol v3

It costs expensive to change clock configuration for models of protocol
version 3. In current implementation, speculative strategy is used to
finish the operation; just waiting for 4 seconds. As long as I investigate,
when accepting and changing clock status actually, the device sends
notification with mask.

This commit uses wise way to wait for the notification after changing
sampling clock rate during 4 seconds.

Signed-off-by: Takashi Sakamoto <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
takaswie authored and tiwai committed Jun 15, 2020
1 parent d9d5239 commit 6753986
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions sound/firewire/motu/motu-protocol-v3.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
#define V3_NO_ADAT_OPT_OUT_IFACE_A 0x00040000
#define V3_NO_ADAT_OPT_OUT_IFACE_B 0x00400000

#define V3_MSG_FLAG_CLK_CHANGED 0x00000002
#define V3_CLK_WAIT_MSEC 4000

int snd_motu_protocol_v3_get_clock_rate(struct snd_motu *motu,
unsigned int *rate)
{
Expand Down Expand Up @@ -79,9 +82,16 @@ int snd_motu_protocol_v3_set_clock_rate(struct snd_motu *motu,
return err;

if (need_to_wait) {
/* Cost expensive. */
if (msleep_interruptible(4000) > 0)
return -EINTR;
int result;

motu->msg = 0;
result = wait_event_interruptible_timeout(motu->hwdep_wait,
motu->msg & V3_MSG_FLAG_CLK_CHANGED,
msecs_to_jiffies(V3_CLK_WAIT_MSEC));
if (result < 0)
return result;
if (result == 0)
return -ETIMEDOUT;
}

return 0;
Expand Down

0 comments on commit 6753986

Please sign in to comment.