diff options
Diffstat (limited to 'sound/pci/es1968.c')
-rw-r--r-- | sound/pci/es1968.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index 25ccfce45759..7d911a18c082 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c | |||
@@ -617,6 +617,18 @@ static int snd_es1968_ac97_wait(struct es1968 *chip) | |||
617 | return 1; /* timeout */ | 617 | return 1; /* timeout */ |
618 | } | 618 | } |
619 | 619 | ||
620 | static int snd_es1968_ac97_wait_poll(struct es1968 *chip) | ||
621 | { | ||
622 | int timeout = 100000; | ||
623 | |||
624 | while (timeout-- > 0) { | ||
625 | if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1)) | ||
626 | return 0; | ||
627 | } | ||
628 | snd_printd("es1968: ac97 timeout\n"); | ||
629 | return 1; /* timeout */ | ||
630 | } | ||
631 | |||
620 | static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) | 632 | static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) |
621 | { | 633 | { |
622 | struct es1968 *chip = ac97->private_data; | 634 | struct es1968 *chip = ac97->private_data; |
@@ -645,7 +657,7 @@ static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short | |||
645 | outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX); | 657 | outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX); |
646 | /*msleep(1);*/ | 658 | /*msleep(1);*/ |
647 | 659 | ||
648 | if (! snd_es1968_ac97_wait(chip)) { | 660 | if (!snd_es1968_ac97_wait_poll(chip)) { |
649 | data = inw(chip->io_port + ESM_AC97_DATA); | 661 | data = inw(chip->io_port + ESM_AC97_DATA); |
650 | /*msleep(1);*/ | 662 | /*msleep(1);*/ |
651 | } | 663 | } |