aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/hda_intel.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 6a19f6af9517..76ec2421fae1 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -415,6 +415,7 @@ struct azx_dev {
415 */ 415 */
416 unsigned int insufficient :1; 416 unsigned int insufficient :1;
417 unsigned int wc_marked:1; 417 unsigned int wc_marked:1;
418 unsigned int no_period_wakeup:1;
418}; 419};
419 420
420/* CORB/RIRB */ 421/* CORB/RIRB */
@@ -1419,7 +1420,7 @@ static int azx_setup_periods(struct azx *chip,
1419 ofs = 0; 1420 ofs = 0;
1420 azx_dev->frags = 0; 1421 azx_dev->frags = 0;
1421 pos_adj = bdl_pos_adj[chip->dev_index]; 1422 pos_adj = bdl_pos_adj[chip->dev_index];
1422 if (pos_adj > 0) { 1423 if (!azx_dev->no_period_wakeup && pos_adj > 0) {
1423 struct snd_pcm_runtime *runtime = substream->runtime; 1424 struct snd_pcm_runtime *runtime = substream->runtime;
1424 int pos_align = pos_adj; 1425 int pos_align = pos_adj;
1425 pos_adj = (pos_adj * runtime->rate + 47999) / 48000; 1426 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
@@ -1435,8 +1436,7 @@ static int azx_setup_periods(struct azx *chip,
1435 pos_adj = 0; 1436 pos_adj = 0;
1436 } else { 1437 } else {
1437 ofs = setup_bdle(chip, substream, azx_dev, 1438 ofs = setup_bdle(chip, substream, azx_dev,
1438 &bdl, ofs, pos_adj, 1439 &bdl, ofs, pos_adj, true);
1439 !substream->runtime->no_period_wakeup);
1440 if (ofs < 0) 1440 if (ofs < 0)
1441 goto error; 1441 goto error;
1442 } 1442 }
@@ -1449,7 +1449,7 @@ static int azx_setup_periods(struct azx *chip,
1449 else 1449 else
1450 ofs = setup_bdle(chip, substream, azx_dev, &bdl, ofs, 1450 ofs = setup_bdle(chip, substream, azx_dev, &bdl, ofs,
1451 period_bytes, 1451 period_bytes,
1452 !substream->runtime->no_period_wakeup); 1452 !azx_dev->no_period_wakeup);
1453 if (ofs < 0) 1453 if (ofs < 0)
1454 goto error; 1454 goto error;
1455 } 1455 }
@@ -1922,10 +1922,12 @@ static int azx_pcm_prepare(struct snd_pcm_substream *substream)
1922 1922
1923 if (bufsize != azx_dev->bufsize || 1923 if (bufsize != azx_dev->bufsize ||
1924 period_bytes != azx_dev->period_bytes || 1924 period_bytes != azx_dev->period_bytes ||
1925 format_val != azx_dev->format_val) { 1925 format_val != azx_dev->format_val ||
1926 runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
1926 azx_dev->bufsize = bufsize; 1927 azx_dev->bufsize = bufsize;
1927 azx_dev->period_bytes = period_bytes; 1928 azx_dev->period_bytes = period_bytes;
1928 azx_dev->format_val = format_val; 1929 azx_dev->format_val = format_val;
1930 azx_dev->no_period_wakeup = runtime->no_period_wakeup;
1929 err = azx_setup_periods(chip, substream, azx_dev); 1931 err = azx_setup_periods(chip, substream, azx_dev);
1930 if (err < 0) 1932 if (err < 0)
1931 return err; 1933 return err;