From 6fc1b5bacdfb4ee47daa8e16e31b86c288ff78bd Mon Sep 17 00:00:00 2001 From: beveloper Date: Thu, 15 May 2003 19:20:14 +0000 Subject: [PATCH] Fix sample rate calculation based on the AC-link clock rate. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3248 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c | 8 ++++---- src/add-ons/kernel/drivers/audio/ac97/ich/ich.c | 3 --- 2 files changed, 4 insertions(+), 7 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 47de98ad31..cf024251d0 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c @@ -332,7 +332,7 @@ ac97_set_rate(ac97_dev *dev, uint8 reg, uint32 rate) if (dev->set_rate) return dev->set_rate(dev, reg, rate); - value = (uint32)((rate * (uint64)dev->clock) / 48000); /* use 64 bit calculation for rates 96000 or higher */ + value = (uint32)((rate * 48000ULL) / dev->clock); /* need 64 bit calculation for rates 96000 or higher */ LOG(("ac97_set_rate: clock = %d, rate = %d, value = %d\n", dev->clock, rate, value)); @@ -370,7 +370,7 @@ ac97_get_rate(ac97_dev *dev, uint8 reg, uint32 *rate) if (ac97_reg_cached_read(dev, AC97_EXTENDED_STAT_CTRL) & 0x0002) value *= 2; - *rate = (value * 48000ULL) / dev->clock; /* use 64 bit calculation to avoid overflow*/ + *rate = (uint32)((value * (uint64)dev->clock) / 48000); /* need 64 bit calculation to avoid overflow*/ return true; } @@ -640,7 +640,7 @@ ad1819_set_rate(ac97_dev *dev, uint8 reg, uint32 rate) { uint32 value; - value = (uint32)((rate * (uint64)dev->clock) / 48000); /* use 64 bit calculation for rates 96000 or higher */ + value = (uint32)((rate * 48000ULL) / dev->clock); /* need 64 bit calculation for rates 96000 or higher */ LOG(("ad1819_set_rate: clock = %d, rate = %d, value = %d\n", dev->clock, rate, value)); @@ -679,7 +679,7 @@ ad1819_get_rate(ac97_dev *dev, uint8 reg, uint32 *rate) return false; } - *rate = (value * 48000) / dev->clock; + *rate = (uint32)((value * (uint64)dev->clock) / 48000); /* need 64 bit calculation to avoid overflow*/ return true; } diff --git a/src/add-ons/kernel/drivers/audio/ac97/ich/ich.c b/src/add-ons/kernel/drivers/audio/ac97/ich/ich.c index 518b5e3aae..cd80bd3a78 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ich/ich.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ich/ich.c @@ -434,9 +434,6 @@ ich_clock_calibrate() } else if (rate > (48000 - 1000) && rate < (48000 + 1000)) { LOG(("ich_clock_calibrate: setting clock 48000\n")); ac97_set_clock(config->ac97, 48000); - } else if (rate > (41194 - 1000) && rate < (41194 + 1000)) { - LOG(("ich_clock_calibrate: setting clock 41194\n")); - ac97_set_clock(config->ac97, 41194); } else if (rate > (55930 - 1000) && rate < (55930 + 1000)) { LOG(("ich_clock_calibrate: setting clock 55930\n")); ac97_set_clock(config->ac97, 55930);