mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-03 02:58:00 +07:00
Merge remote branch 'alsa/devel' into topic/misc
This commit is contained in:
commit
d0d2c38e39
@ -271,6 +271,7 @@ struct snd_pcm_runtime {
|
|||||||
int overrange;
|
int overrange;
|
||||||
snd_pcm_uframes_t avail_max;
|
snd_pcm_uframes_t avail_max;
|
||||||
snd_pcm_uframes_t hw_ptr_base; /* Position at buffer restart */
|
snd_pcm_uframes_t hw_ptr_base; /* Position at buffer restart */
|
||||||
|
snd_pcm_uframes_t hw_ptr_interrupt; /* Position at interrupt time */
|
||||||
unsigned long hw_ptr_jiffies; /* Time when hw_ptr is updated */
|
unsigned long hw_ptr_jiffies; /* Time when hw_ptr is updated */
|
||||||
snd_pcm_sframes_t delay; /* extra delay; typically FIFO size */
|
snd_pcm_sframes_t delay; /* extra delay; typically FIFO size */
|
||||||
|
|
||||||
|
@ -635,8 +635,7 @@ static long snd_pcm_alsa_frames(struct snd_pcm_substream *substream, long bytes)
|
|||||||
static inline
|
static inline
|
||||||
snd_pcm_uframes_t get_hw_ptr_period(struct snd_pcm_runtime *runtime)
|
snd_pcm_uframes_t get_hw_ptr_period(struct snd_pcm_runtime *runtime)
|
||||||
{
|
{
|
||||||
snd_pcm_uframes_t ptr = runtime->status->hw_ptr;
|
return runtime->hw_ptr_interrupt;
|
||||||
return ptr - (ptr % runtime->period_size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* define extended formats in the recent OSS versions (if any) */
|
/* define extended formats in the recent OSS versions (if any) */
|
||||||
|
@ -325,8 +325,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
|
|||||||
if (in_interrupt) {
|
if (in_interrupt) {
|
||||||
/* we know that one period was processed */
|
/* we know that one period was processed */
|
||||||
/* delta = "expected next hw_ptr" for in_interrupt != 0 */
|
/* delta = "expected next hw_ptr" for in_interrupt != 0 */
|
||||||
delta = old_hw_ptr - (old_hw_ptr % runtime->period_size)
|
delta = runtime->hw_ptr_interrupt + runtime->period_size;
|
||||||
+ runtime->period_size;
|
|
||||||
if (delta > new_hw_ptr) {
|
if (delta > new_hw_ptr) {
|
||||||
hw_base += runtime->buffer_size;
|
hw_base += runtime->buffer_size;
|
||||||
if (hw_base >= runtime->boundary)
|
if (hw_base >= runtime->boundary)
|
||||||
@ -437,6 +436,10 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
|
|||||||
runtime->silence_size > 0)
|
runtime->silence_size > 0)
|
||||||
snd_pcm_playback_silence(substream, new_hw_ptr);
|
snd_pcm_playback_silence(substream, new_hw_ptr);
|
||||||
|
|
||||||
|
if (in_interrupt) {
|
||||||
|
runtime->hw_ptr_interrupt = new_hw_ptr -
|
||||||
|
(new_hw_ptr % runtime->period_size);
|
||||||
|
}
|
||||||
runtime->hw_ptr_base = hw_base;
|
runtime->hw_ptr_base = hw_base;
|
||||||
runtime->status->hw_ptr = new_hw_ptr;
|
runtime->status->hw_ptr = new_hw_ptr;
|
||||||
runtime->hw_ptr_jiffies = jiffies;
|
runtime->hw_ptr_jiffies = jiffies;
|
||||||
|
@ -1252,6 +1252,8 @@ static int snd_pcm_do_reset(struct snd_pcm_substream *substream, int state)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
runtime->hw_ptr_base = 0;
|
runtime->hw_ptr_base = 0;
|
||||||
|
runtime->hw_ptr_interrupt = runtime->status->hw_ptr -
|
||||||
|
runtime->status->hw_ptr % runtime->period_size;
|
||||||
runtime->silence_start = runtime->status->hw_ptr;
|
runtime->silence_start = runtime->status->hw_ptr;
|
||||||
runtime->silence_filled = 0;
|
runtime->silence_filled = 0;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2458,6 +2458,12 @@ static struct hda_verb ad1988_spdif_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct hda_verb ad1988_spdif_in_init_verbs[] = {
|
||||||
|
/* unmute SPDIF input pin */
|
||||||
|
{0x1c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
/* AD1989 has no ADC -> SPDIF route */
|
/* AD1989 has no ADC -> SPDIF route */
|
||||||
static struct hda_verb ad1989_spdif_init_verbs[] = {
|
static struct hda_verb ad1989_spdif_init_verbs[] = {
|
||||||
/* SPDIF-1 out pin */
|
/* SPDIF-1 out pin */
|
||||||
@ -3193,8 +3199,11 @@ static int patch_ad1988(struct hda_codec *codec)
|
|||||||
ad1988_spdif_init_verbs;
|
ad1988_spdif_init_verbs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (spec->dig_in_nid && codec->vendor_id < 0x11d4989a)
|
if (spec->dig_in_nid && codec->vendor_id < 0x11d4989a) {
|
||||||
spec->mixers[spec->num_mixers++] = ad1988_spdif_in_mixers;
|
spec->mixers[spec->num_mixers++] = ad1988_spdif_in_mixers;
|
||||||
|
spec->init_verbs[spec->num_init_verbs++] =
|
||||||
|
ad1988_spdif_in_init_verbs;
|
||||||
|
}
|
||||||
|
|
||||||
codec->patch_ops = ad198x_patch_ops;
|
codec->patch_ops = ad198x_patch_ops;
|
||||||
switch (board_config) {
|
switch (board_config) {
|
||||||
|
Loading…
Reference in New Issue
Block a user