mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-11 23:27:42 +07:00
Merge branch 'fix/pcm-jiffies-check' into for-linus
* fix/pcm-jiffies-check: ALSA: pcm core - Avoid jiffies check for devices with BATCH flag ALSA: Add missing SNDRV_PCM_INFO_BATCH flag to some drivers
This commit is contained in:
commit
56dc16f75d
@ -249,6 +249,12 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
|
|||||||
new_hw_ptr = hw_base + pos;
|
new_hw_ptr = hw_base + pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Skip the jiffies check for hardwares with BATCH flag.
|
||||||
|
* Such hardware usually just increases the position at each IRQ,
|
||||||
|
* thus it can't give any strange position.
|
||||||
|
*/
|
||||||
|
if (runtime->hw.info & SNDRV_PCM_INFO_BATCH)
|
||||||
|
goto no_jiffies_check;
|
||||||
hdelta = new_hw_ptr - old_hw_ptr;
|
hdelta = new_hw_ptr - old_hw_ptr;
|
||||||
jdelta = jiffies - runtime->hw_ptr_jiffies;
|
jdelta = jiffies - runtime->hw_ptr_jiffies;
|
||||||
if (((hdelta * HZ) / runtime->rate) > jdelta + HZ/100) {
|
if (((hdelta * HZ) / runtime->rate) > jdelta + HZ/100) {
|
||||||
@ -272,6 +278,7 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
|
|||||||
hw_base -= hw_base % runtime->buffer_size;
|
hw_base -= hw_base % runtime->buffer_size;
|
||||||
delta = 0;
|
delta = 0;
|
||||||
}
|
}
|
||||||
|
no_jiffies_check:
|
||||||
if (delta > runtime->period_size + runtime->period_size / 2) {
|
if (delta > runtime->period_size + runtime->period_size / 2) {
|
||||||
hw_ptr_error(substream,
|
hw_ptr_error(substream,
|
||||||
"Lost interrupts? "
|
"Lost interrupts? "
|
||||||
|
@ -438,7 +438,8 @@ static void snd_msnd_capture_reset_queue(struct snd_msnd *chip,
|
|||||||
static struct snd_pcm_hardware snd_msnd_playback = {
|
static struct snd_pcm_hardware snd_msnd_playback = {
|
||||||
.info = SNDRV_PCM_INFO_MMAP |
|
.info = SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID,
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rates = SNDRV_PCM_RATE_8000_48000,
|
.rates = SNDRV_PCM_RATE_8000_48000,
|
||||||
.rate_min = 8000,
|
.rate_min = 8000,
|
||||||
@ -456,7 +457,8 @@ static struct snd_pcm_hardware snd_msnd_playback = {
|
|||||||
static struct snd_pcm_hardware snd_msnd_capture = {
|
static struct snd_pcm_hardware snd_msnd_capture = {
|
||||||
.info = SNDRV_PCM_INFO_MMAP |
|
.info = SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID,
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rates = SNDRV_PCM_RATE_8000_48000,
|
.rates = SNDRV_PCM_RATE_8000_48000,
|
||||||
.rate_min = 8000,
|
.rate_min = 8000,
|
||||||
|
@ -349,7 +349,8 @@ static struct snd_pcm_hardware snd_bt87x_digital_hw = {
|
|||||||
.info = SNDRV_PCM_INFO_MMAP |
|
.info = SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID,
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rates = 0, /* set at runtime */
|
.rates = 0, /* set at runtime */
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
@ -365,7 +366,8 @@ static struct snd_pcm_hardware snd_bt87x_analog_hw = {
|
|||||||
.info = SNDRV_PCM_INFO_MMAP |
|
.info = SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID,
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8,
|
||||||
.rates = SNDRV_PCM_RATE_KNOT,
|
.rates = SNDRV_PCM_RATE_KNOT,
|
||||||
.rate_min = ANALOG_CLOCK / CLOCK_DIV_MAX,
|
.rate_min = ANALOG_CLOCK / CLOCK_DIV_MAX,
|
||||||
|
@ -1238,7 +1238,8 @@ static struct snd_pcm_hardware snd_korg1212_playback_info =
|
|||||||
{
|
{
|
||||||
.info = (SNDRV_PCM_INFO_MMAP |
|
.info = (SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID |
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED),
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
|
SNDRV_PCM_INFO_BATCH),
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rates = (SNDRV_PCM_RATE_44100 |
|
.rates = (SNDRV_PCM_RATE_44100 |
|
||||||
SNDRV_PCM_RATE_48000),
|
SNDRV_PCM_RATE_48000),
|
||||||
@ -1258,7 +1259,8 @@ static struct snd_pcm_hardware snd_korg1212_capture_info =
|
|||||||
{
|
{
|
||||||
.info = (SNDRV_PCM_INFO_MMAP |
|
.info = (SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID |
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED),
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
|
SNDRV_PCM_INFO_BATCH),
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rates = (SNDRV_PCM_RATE_44100 |
|
.rates = (SNDRV_PCM_RATE_44100 |
|
||||||
SNDRV_PCM_RATE_48000),
|
SNDRV_PCM_RATE_48000),
|
||||||
|
@ -240,7 +240,8 @@ static int pdacf_pcm_prepare(struct snd_pcm_substream *subs)
|
|||||||
static struct snd_pcm_hardware pdacf_pcm_capture_hw = {
|
static struct snd_pcm_hardware pdacf_pcm_capture_hw = {
|
||||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME |
|
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID),
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH),
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
|
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
|
||||||
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_3BE |
|
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_3BE |
|
||||||
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE,
|
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE,
|
||||||
|
@ -82,7 +82,7 @@ static struct au1xpsc_audio_dmadata *au1xpsc_audio_pcmdma[2];
|
|||||||
/* PCM hardware DMA capabilities - platform specific */
|
/* PCM hardware DMA capabilities - platform specific */
|
||||||
static const struct snd_pcm_hardware au1xpsc_pcm_hardware = {
|
static const struct snd_pcm_hardware au1xpsc_pcm_hardware = {
|
||||||
.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID |
|
.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED,
|
SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = AU1XPSC_PCM_FMTS,
|
.formats = AU1XPSC_PCM_FMTS,
|
||||||
.period_bytes_min = AU1XPSC_PERIOD_MIN_BYTES,
|
.period_bytes_min = AU1XPSC_PERIOD_MIN_BYTES,
|
||||||
.period_bytes_max = 4096 * 1024 - 1,
|
.period_bytes_max = 4096 * 1024 - 1,
|
||||||
|
@ -504,7 +504,8 @@ static struct snd_soc_dai psc_i2s_dai_template = {
|
|||||||
|
|
||||||
static const struct snd_pcm_hardware psc_i2s_pcm_hardware = {
|
static const struct snd_pcm_hardware psc_i2s_pcm_hardware = {
|
||||||
.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID |
|
.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||||
|
SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE |
|
.formats = SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE |
|
||||||
SNDRV_PCM_FMTBIT_S24_BE | SNDRV_PCM_FMTBIT_S32_BE,
|
SNDRV_PCM_FMTBIT_S24_BE | SNDRV_PCM_FMTBIT_S32_BE,
|
||||||
.rate_min = 8000,
|
.rate_min = 8000,
|
||||||
|
@ -103,7 +103,8 @@ static struct snd_pcm_hardware camelot_pcm_hardware = {
|
|||||||
.info = (SNDRV_PCM_INFO_MMAP |
|
.info = (SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID),
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH),
|
||||||
.formats = DMABRG_FMTS,
|
.formats = DMABRG_FMTS,
|
||||||
.rates = DMABRG_RATES,
|
.rates = DMABRG_RATES,
|
||||||
.rate_min = 8000,
|
.rate_min = 8000,
|
||||||
|
@ -1975,7 +1975,8 @@ static struct snd_pcm_hardware snd_dbri_pcm_hw = {
|
|||||||
.info = SNDRV_PCM_INFO_MMAP |
|
.info = SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID,
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH,
|
||||||
.formats = SNDRV_PCM_FMTBIT_MU_LAW |
|
.formats = SNDRV_PCM_FMTBIT_MU_LAW |
|
||||||
SNDRV_PCM_FMTBIT_A_LAW |
|
SNDRV_PCM_FMTBIT_A_LAW |
|
||||||
SNDRV_PCM_FMTBIT_U8 |
|
SNDRV_PCM_FMTBIT_U8 |
|
||||||
|
@ -870,7 +870,8 @@ static struct snd_pcm_hardware snd_usX2Y_2c =
|
|||||||
{
|
{
|
||||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID),
|
SNDRV_PCM_INFO_MMAP_VALID |
|
||||||
|
SNDRV_PCM_INFO_BATCH),
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_3LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_3LE,
|
||||||
.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
|
.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
|
||||||
.rate_min = 44100,
|
.rate_min = 44100,
|
||||||
|
Loading…
Reference in New Issue
Block a user