|
@@ -617,6 +617,18 @@ static int snd_es1968_ac97_wait(struct es1968 *chip)
|
|
|
return 1; /* timeout */
|
|
|
}
|
|
|
|
|
|
+static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
|
|
|
+{
|
|
|
+ int timeout = 100000;
|
|
|
+
|
|
|
+ while (timeout-- > 0) {
|
|
|
+ if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ snd_printd("es1968: ac97 timeout\n");
|
|
|
+ return 1; /* timeout */
|
|
|
+}
|
|
|
+
|
|
|
static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
|
|
|
{
|
|
|
struct es1968 *chip = ac97->private_data;
|
|
@@ -645,7 +657,7 @@ static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short
|
|
|
outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
|
|
|
/*msleep(1);*/
|
|
|
|
|
|
- if (! snd_es1968_ac97_wait(chip)) {
|
|
|
+ if (!snd_es1968_ac97_wait_poll(chip)) {
|
|
|
data = inw(chip->io_port + ESM_AC97_DATA);
|
|
|
/*msleep(1);*/
|
|
|
}
|