ALSA: firewire: introduce amdtp_out_stream_running()
Introduce the helper function amdtp_out_stream_running(). This makes many checks in amdtp.c clearer and frees the device drivers from having to track this with a separate variable. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
This commit is contained in:
Родитель
9dd81e3143
Коммит
20b65dd040
|
@ -59,7 +59,7 @@ EXPORT_SYMBOL(amdtp_out_stream_init);
|
|||
*/
|
||||
void amdtp_out_stream_destroy(struct amdtp_out_stream *s)
|
||||
{
|
||||
WARN_ON(!IS_ERR(s->context));
|
||||
WARN_ON(amdtp_out_stream_running(s));
|
||||
mutex_destroy(&s->mutex);
|
||||
fw_unit_put(s->unit);
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ void amdtp_out_stream_set_rate(struct amdtp_out_stream *s, unsigned int rate)
|
|||
};
|
||||
unsigned int sfc;
|
||||
|
||||
if (WARN_ON(!IS_ERR(s->context)))
|
||||
if (WARN_ON(amdtp_out_stream_running(s)))
|
||||
return;
|
||||
|
||||
for (sfc = 0; sfc < ARRAY_SIZE(rate_info); ++sfc)
|
||||
|
@ -145,7 +145,7 @@ static void amdtp_write_s32(struct amdtp_out_stream *s,
|
|||
void amdtp_out_stream_set_pcm_format(struct amdtp_out_stream *s,
|
||||
snd_pcm_format_t format)
|
||||
{
|
||||
if (WARN_ON(!IS_ERR(s->context)))
|
||||
if (WARN_ON(amdtp_out_stream_running(s)))
|
||||
return;
|
||||
|
||||
switch (format) {
|
||||
|
@ -481,7 +481,7 @@ int amdtp_out_stream_start(struct amdtp_out_stream *s, int channel, int speed)
|
|||
|
||||
mutex_lock(&s->mutex);
|
||||
|
||||
if (WARN_ON(!IS_ERR(s->context) ||
|
||||
if (WARN_ON(amdtp_out_stream_running(s) ||
|
||||
(!s->pcm_channels && !s->midi_ports))) {
|
||||
err = -EBADFD;
|
||||
goto err_unlock;
|
||||
|
@ -577,7 +577,7 @@ void amdtp_out_stream_stop(struct amdtp_out_stream *s)
|
|||
{
|
||||
mutex_lock(&s->mutex);
|
||||
|
||||
if (IS_ERR(s->context)) {
|
||||
if (!amdtp_out_stream_running(s)) {
|
||||
mutex_unlock(&s->mutex);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef SOUND_FIREWIRE_AMDTP_H_INCLUDED
|
||||
#define SOUND_FIREWIRE_AMDTP_H_INCLUDED
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mutex.h>
|
||||
#include "packets-buffer.h"
|
||||
|
@ -92,6 +93,11 @@ void amdtp_out_stream_pcm_prepare(struct amdtp_out_stream *s);
|
|||
unsigned long amdtp_out_stream_pcm_pointer(struct amdtp_out_stream *s);
|
||||
void amdtp_out_stream_pcm_abort(struct amdtp_out_stream *s);
|
||||
|
||||
static inline bool amdtp_out_stream_running(struct amdtp_out_stream *s)
|
||||
{
|
||||
return !IS_ERR(s->context);
|
||||
}
|
||||
|
||||
/**
|
||||
* amdtp_out_stream_set_pcm - configure format of PCM samples
|
||||
* @s: the AMDTP output stream to be configured
|
||||
|
|
|
@ -246,7 +246,6 @@ struct dice {
|
|||
int dev_lock_count; /* > 0 driver, < 0 userspace */
|
||||
bool dev_lock_changed;
|
||||
bool global_enabled;
|
||||
bool stream_running;
|
||||
wait_queue_head_t hwdep_wait;
|
||||
u32 notification_bits;
|
||||
struct snd_pcm_substream *pcm;
|
||||
|
@ -654,7 +653,7 @@ static int dice_stream_start_packets(struct dice *dice)
|
|||
{
|
||||
int err;
|
||||
|
||||
if (dice->stream_running)
|
||||
if (amdtp_out_stream_running(&dice->stream))
|
||||
return 0;
|
||||
|
||||
err = amdtp_out_stream_start(&dice->stream, dice->resources.channel,
|
||||
|
@ -668,8 +667,6 @@ static int dice_stream_start_packets(struct dice *dice)
|
|||
return err;
|
||||
}
|
||||
|
||||
dice->stream_running = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -712,14 +709,10 @@ error:
|
|||
|
||||
static void dice_stream_stop_packets(struct dice *dice)
|
||||
{
|
||||
if (!dice->stream_running)
|
||||
return;
|
||||
|
||||
dice_enable_clear(dice);
|
||||
|
||||
amdtp_out_stream_stop(&dice->stream);
|
||||
|
||||
dice->stream_running = false;
|
||||
if (amdtp_out_stream_running(&dice->stream)) {
|
||||
dice_enable_clear(dice);
|
||||
amdtp_out_stream_stop(&dice->stream);
|
||||
}
|
||||
}
|
||||
|
||||
static void dice_stream_stop(struct dice *dice)
|
||||
|
|
|
@ -53,7 +53,6 @@ struct fwspk {
|
|||
struct mutex mutex;
|
||||
struct cmp_connection connection;
|
||||
struct amdtp_out_stream stream;
|
||||
bool stream_running;
|
||||
bool mute;
|
||||
s16 volume[6];
|
||||
s16 volume_min;
|
||||
|
@ -189,10 +188,9 @@ static int fwspk_close(struct snd_pcm_substream *substream)
|
|||
|
||||
static void fwspk_stop_stream(struct fwspk *fwspk)
|
||||
{
|
||||
if (fwspk->stream_running) {
|
||||
if (amdtp_out_stream_running(&fwspk->stream)) {
|
||||
amdtp_out_stream_stop(&fwspk->stream);
|
||||
cmp_connection_break(&fwspk->connection);
|
||||
fwspk->stream_running = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -286,7 +284,7 @@ static int fwspk_prepare(struct snd_pcm_substream *substream)
|
|||
if (amdtp_out_streaming_error(&fwspk->stream))
|
||||
fwspk_stop_stream(fwspk);
|
||||
|
||||
if (!fwspk->stream_running) {
|
||||
if (!amdtp_out_stream_running(&fwspk->stream)) {
|
||||
err = cmp_connection_establish(&fwspk->connection,
|
||||
amdtp_out_stream_get_max_payload(&fwspk->stream));
|
||||
if (err < 0)
|
||||
|
@ -297,8 +295,6 @@ static int fwspk_prepare(struct snd_pcm_substream *substream)
|
|||
fwspk->connection.speed);
|
||||
if (err < 0)
|
||||
goto err_connection;
|
||||
|
||||
fwspk->stream_running = true;
|
||||
}
|
||||
|
||||
mutex_unlock(&fwspk->mutex);
|
||||
|
|
Загрузка…
Ссылка в новой задаче