|
@@ -39,7 +39,8 @@ static const struct snd_pcm_hardware oxygen_stereo_hardware = {
|
|
|
SNDRV_PCM_INFO_MMAP_VALID |
|
|
|
SNDRV_PCM_INFO_INTERLEAVED |
|
|
|
SNDRV_PCM_INFO_PAUSE |
|
|
|
- SNDRV_PCM_INFO_SYNC_START,
|
|
|
+ SNDRV_PCM_INFO_SYNC_START |
|
|
|
+ SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
|
|
|
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
|
|
SNDRV_PCM_FMTBIT_S32_LE,
|
|
|
.rates = SNDRV_PCM_RATE_32000 |
|
|
@@ -65,7 +66,8 @@ static const struct snd_pcm_hardware oxygen_multichannel_hardware = {
|
|
|
SNDRV_PCM_INFO_MMAP_VALID |
|
|
|
SNDRV_PCM_INFO_INTERLEAVED |
|
|
|
SNDRV_PCM_INFO_PAUSE |
|
|
|
- SNDRV_PCM_INFO_SYNC_START,
|
|
|
+ SNDRV_PCM_INFO_SYNC_START |
|
|
|
+ SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
|
|
|
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
|
|
SNDRV_PCM_FMTBIT_S32_LE,
|
|
|
.rates = SNDRV_PCM_RATE_32000 |
|
|
@@ -91,7 +93,8 @@ static const struct snd_pcm_hardware oxygen_ac97_hardware = {
|
|
|
SNDRV_PCM_INFO_MMAP_VALID |
|
|
|
SNDRV_PCM_INFO_INTERLEAVED |
|
|
|
SNDRV_PCM_INFO_PAUSE |
|
|
|
- SNDRV_PCM_INFO_SYNC_START,
|
|
|
+ SNDRV_PCM_INFO_SYNC_START |
|
|
|
+ SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
|
|
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
|
|
.rates = SNDRV_PCM_RATE_48000,
|
|
|
.rate_min = 48000,
|
|
@@ -530,7 +533,10 @@ static int oxygen_prepare(struct snd_pcm_substream *substream)
|
|
|
oxygen_set_bits8(chip, OXYGEN_DMA_FLUSH, channel_mask);
|
|
|
oxygen_clear_bits8(chip, OXYGEN_DMA_FLUSH, channel_mask);
|
|
|
|
|
|
- chip->interrupt_mask |= channel_mask;
|
|
|
+ if (substream->runtime->no_period_wakeup)
|
|
|
+ chip->interrupt_mask &= ~channel_mask;
|
|
|
+ else
|
|
|
+ chip->interrupt_mask |= channel_mask;
|
|
|
oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, chip->interrupt_mask);
|
|
|
spin_unlock_irq(&chip->reg_lock);
|
|
|
return 0;
|