mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
ALSA: hda - Handle -1 as invalid position, too
When reading from the position-buffer results in -1, handle as it's invalid and falls back to LPIB mode as well as 0. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
384a48d715
commit
a810364a04
@ -1930,6 +1930,17 @@ static unsigned int azx_get_position(struct azx *chip,
|
|||||||
default:
|
default:
|
||||||
/* use the position buffer */
|
/* use the position buffer */
|
||||||
pos = le32_to_cpu(*azx_dev->posbuf);
|
pos = le32_to_cpu(*azx_dev->posbuf);
|
||||||
|
if (chip->position_fix[stream] == POS_FIX_AUTO) {
|
||||||
|
if (!pos || pos == (u32)-1) {
|
||||||
|
printk(KERN_WARNING
|
||||||
|
"hda-intel: Invalid position buffer, "
|
||||||
|
"using LPIB read method instead.\n");
|
||||||
|
chip->position_fix[stream] = POS_FIX_LPIB;
|
||||||
|
pos = azx_sd_readl(azx_dev, SD_LPIB);
|
||||||
|
} else
|
||||||
|
chip->position_fix[stream] = POS_FIX_POSBUF;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos >= azx_dev->bufsize)
|
if (pos >= azx_dev->bufsize)
|
||||||
@ -1967,16 +1978,6 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
|
|||||||
|
|
||||||
stream = azx_dev->substream->stream;
|
stream = azx_dev->substream->stream;
|
||||||
pos = azx_get_position(chip, azx_dev);
|
pos = azx_get_position(chip, azx_dev);
|
||||||
if (chip->position_fix[stream] == POS_FIX_AUTO) {
|
|
||||||
if (!pos) {
|
|
||||||
printk(KERN_WARNING
|
|
||||||
"hda-intel: Invalid position buffer, "
|
|
||||||
"using LPIB read method instead.\n");
|
|
||||||
chip->position_fix[stream] = POS_FIX_LPIB;
|
|
||||||
pos = azx_get_position(chip, azx_dev);
|
|
||||||
} else
|
|
||||||
chip->position_fix[stream] = POS_FIX_POSBUF;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (WARN_ONCE(!azx_dev->period_bytes,
|
if (WARN_ONCE(!azx_dev->period_bytes,
|
||||||
"hda-intel: zero azx_dev->period_bytes"))
|
"hda-intel: zero azx_dev->period_bytes"))
|
||||||
|
Loading…
Reference in New Issue
Block a user