From a4f5cfda318066bf1b97dded6fa7d7b3fa092758 Mon Sep 17 00:00:00 2001 From: beveloper Date: Sun, 7 Sep 2003 22:27:10 +0000 Subject: [PATCH] detect double mode rates only if they are supported by the codec git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4535 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/audio/ac97/ich/ac97.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c b/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c index f7cae69825..aea60e681c 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c @@ -177,6 +177,8 @@ codec_table codecs[] = { 0x00000000, 0x00000000, default_init, "Unknown" } /* must be last one, matches every codec */ }; +codec_table *find_codec_table(uint32 codecid); + codec_table * find_codec_table(uint32 codecid) { @@ -478,12 +480,18 @@ ac97_detect_rates(ac97_dev *dev) dev->capabilities |= CAP_PCM_RATE_44100; if (ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, 48000)) dev->capabilities |= CAP_PCM_RATE_48000; - if (ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, 48000)) - dev->capabilities |= CAP_PCM_RATE_48000; - if (ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, 88200)) - dev->capabilities |= CAP_PCM_RATE_88200; - if (ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, 96000)) - dev->capabilities |= CAP_PCM_RATE_96000; + + if (dev->capabilities & CAP_DOUBLE_PCM) { + // enable double rate mode + if (ac97_reg_update_bits(dev, AC97_EXTENDED_STAT_CTRL, 0x0002, 0x0002)) { + if (ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, 88200)) + dev->capabilities |= CAP_PCM_RATE_88200; + if (ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, 96000)) + dev->capabilities |= CAP_PCM_RATE_96000; + // disable double rate mode + ac97_reg_update_bits(dev, AC97_EXTENDED_STAT_CTRL, 0x0002, 0x0000); + } + } ac97_set_rate(dev, AC97_PCM_FRONT_DAC_RATE, oldrate); }