ALSA: x86: simplify with sync_stop PCM ops
The reset procedure in had_do_reset() is exactly for the recently introduced PCM sync_stop ops. Replace the call with the new ops and clean up the unnecessary code and flags. Link: https://lore.kernel.org/r/20210712091915.28067-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
3b0f7eeff6
commit
82a60352c2
|
@ -1024,19 +1024,21 @@ static void wait_clear_underrun_bit(struct snd_intelhad *intelhaddata)
|
||||||
dev_err(intelhaddata->dev, "Unable to clear UNDERRUN bits\n");
|
dev_err(intelhaddata->dev, "Unable to clear UNDERRUN bits\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Perform some reset procedure but only when need_reset is set;
|
/* Perform some reset procedure after stopping the stream;
|
||||||
* this is called from prepare or hw_free callbacks once after trigger STOP
|
* this is called from prepare or hw_free callbacks once after trigger STOP
|
||||||
* or underrun has been processed in order to settle down the h/w state.
|
* or underrun has been processed in order to settle down the h/w state.
|
||||||
*/
|
*/
|
||||||
static void had_do_reset(struct snd_intelhad *intelhaddata)
|
static int had_pcm_sync_stop(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
if (!intelhaddata->need_reset || !intelhaddata->connected)
|
struct snd_intelhad *intelhaddata = snd_pcm_substream_chip(substream);
|
||||||
return;
|
|
||||||
|
if (!intelhaddata->connected)
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* Reset buffer pointers */
|
/* Reset buffer pointers */
|
||||||
had_reset_audio(intelhaddata);
|
had_reset_audio(intelhaddata);
|
||||||
wait_clear_underrun_bit(intelhaddata);
|
wait_clear_underrun_bit(intelhaddata);
|
||||||
intelhaddata->need_reset = false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called from irq handler */
|
/* called from irq handler */
|
||||||
|
@ -1050,7 +1052,6 @@ static void had_process_buffer_underrun(struct snd_intelhad *intelhaddata)
|
||||||
snd_pcm_stop_xrun(substream);
|
snd_pcm_stop_xrun(substream);
|
||||||
had_substream_put(intelhaddata);
|
had_substream_put(intelhaddata);
|
||||||
}
|
}
|
||||||
intelhaddata->need_reset = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1141,19 +1142,6 @@ static int had_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* ALSA PCM hw_free callback
|
|
||||||
*/
|
|
||||||
static int had_pcm_hw_free(struct snd_pcm_substream *substream)
|
|
||||||
{
|
|
||||||
struct snd_intelhad *intelhaddata;
|
|
||||||
|
|
||||||
intelhaddata = snd_pcm_substream_chip(substream);
|
|
||||||
had_do_reset(intelhaddata);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ALSA PCM trigger callback
|
* ALSA PCM trigger callback
|
||||||
*/
|
*/
|
||||||
|
@ -1178,7 +1166,6 @@ static int had_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
|
||||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||||
/* Disable Audio */
|
/* Disable Audio */
|
||||||
had_enable_audio(intelhaddata, false);
|
had_enable_audio(intelhaddata, false);
|
||||||
intelhaddata->need_reset = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1210,8 +1197,6 @@ static int had_pcm_prepare(struct snd_pcm_substream *substream)
|
||||||
dev_dbg(intelhaddata->dev, "rate=%d\n", runtime->rate);
|
dev_dbg(intelhaddata->dev, "rate=%d\n", runtime->rate);
|
||||||
dev_dbg(intelhaddata->dev, "channels=%d\n", runtime->channels);
|
dev_dbg(intelhaddata->dev, "channels=%d\n", runtime->channels);
|
||||||
|
|
||||||
had_do_reset(intelhaddata);
|
|
||||||
|
|
||||||
/* Get N value in KHz */
|
/* Get N value in KHz */
|
||||||
disp_samp_freq = intelhaddata->tmds_clock_speed;
|
disp_samp_freq = intelhaddata->tmds_clock_speed;
|
||||||
|
|
||||||
|
@ -1287,9 +1272,9 @@ static const struct snd_pcm_ops had_pcm_ops = {
|
||||||
.open = had_pcm_open,
|
.open = had_pcm_open,
|
||||||
.close = had_pcm_close,
|
.close = had_pcm_close,
|
||||||
.hw_params = had_pcm_hw_params,
|
.hw_params = had_pcm_hw_params,
|
||||||
.hw_free = had_pcm_hw_free,
|
|
||||||
.prepare = had_pcm_prepare,
|
.prepare = had_pcm_prepare,
|
||||||
.trigger = had_pcm_trigger,
|
.trigger = had_pcm_trigger,
|
||||||
|
.sync_stop = had_pcm_sync_stop,
|
||||||
.pointer = had_pcm_pointer,
|
.pointer = had_pcm_pointer,
|
||||||
.mmap = had_pcm_mmap,
|
.mmap = had_pcm_mmap,
|
||||||
};
|
};
|
||||||
|
|
|
@ -127,7 +127,6 @@ struct snd_intelhad {
|
||||||
union aud_cfg aud_config; /* AUD_CONFIG reg value cache */
|
union aud_cfg aud_config; /* AUD_CONFIG reg value cache */
|
||||||
struct work_struct hdmi_audio_wq;
|
struct work_struct hdmi_audio_wq;
|
||||||
struct mutex mutex; /* for protecting chmap and eld */
|
struct mutex mutex; /* for protecting chmap and eld */
|
||||||
bool need_reset;
|
|
||||||
struct snd_jack *jack;
|
struct snd_jack *jack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue