wait on codec power up
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25566 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -199,21 +199,20 @@ ac97_attach(ac97_dev **_dev, codec_reg_read reg_read, codec_reg_write reg_write,
|
|||||||
{
|
{
|
||||||
ac97_dev *dev;
|
ac97_dev *dev;
|
||||||
codec_table *codec;
|
codec_table *codec;
|
||||||
|
int i;
|
||||||
|
|
||||||
*_dev = dev = (ac97_dev *) malloc(sizeof(ac97_dev));
|
*_dev = dev = (ac97_dev *) malloc(sizeof(ac97_dev));
|
||||||
dev->cookie = cookie;
|
dev->cookie = cookie;
|
||||||
dev->reg_read = reg_read;
|
dev->reg_read = reg_read;
|
||||||
dev->reg_write = reg_write;
|
dev->reg_write = reg_write;
|
||||||
dev->codec_id = ((uint32)reg_read(cookie, AC97_VENDOR_ID1) << 16) | reg_read(cookie, AC97_VENDOR_ID2);
|
|
||||||
codec = find_codec_table(dev->codec_id);
|
|
||||||
dev->codec_info = codec->info;
|
|
||||||
dev->init = codec->init;
|
|
||||||
dev->set_rate = 0;
|
dev->set_rate = 0;
|
||||||
dev->get_rate = 0;
|
dev->get_rate = 0;
|
||||||
dev->clock = 48000; /* default clock on non-broken motherboards */
|
dev->clock = 48000; /* default clock on non-broken motherboards */
|
||||||
dev->min_vsr = 0x0001;
|
dev->min_vsr = 0x0001;
|
||||||
dev->max_vsr = 0xffff;
|
dev->max_vsr = 0xffff;
|
||||||
dev->reversed_eamp_polarity = false;
|
dev->reversed_eamp_polarity = false;
|
||||||
|
dev->capabilities = 0;
|
||||||
|
|
||||||
dev->subsystem = (subvendor_id << 16) | subsystem_id;
|
dev->subsystem = (subvendor_id << 16) | subsystem_id;
|
||||||
|
|
||||||
if (dev->subsystem == 0x161f202f
|
if (dev->subsystem == 0x161f202f
|
||||||
@@ -233,13 +232,21 @@ ac97_attach(ac97_dev **_dev, codec_reg_read reg_read, codec_reg_write reg_write,
|
|||||||
/* reset the codec */
|
/* reset the codec */
|
||||||
LOG(("codec reset\n"));
|
LOG(("codec reset\n"));
|
||||||
ac97_reg_uncached_write(dev, AC97_RESET, 0x0000);
|
ac97_reg_uncached_write(dev, AC97_RESET, 0x0000);
|
||||||
snooze(50000); // 50 ms
|
for (i = 0; i < 500; i++) {
|
||||||
|
if ((ac97_reg_uncached_read(dev, AC97_POWERDOWN) & 0xf) == 0xf)
|
||||||
|
break;
|
||||||
|
snooze(1000);
|
||||||
|
}
|
||||||
|
|
||||||
/* setup register cache */
|
/* setup register cache */
|
||||||
ac97_update_register_cache(dev);
|
ac97_update_register_cache(dev);
|
||||||
|
|
||||||
|
dev->codec_id = ((uint32)reg_read(cookie, AC97_VENDOR_ID1) << 16) | reg_read(cookie, AC97_VENDOR_ID2);
|
||||||
|
codec = find_codec_table(dev->codec_id);
|
||||||
|
dev->codec_info = codec->info;
|
||||||
|
dev->init = codec->init;
|
||||||
|
|
||||||
dev->codec_3d_stereo_enhancement = stereo_enhancement_technique[(ac97_reg_cached_read(dev, AC97_RESET) >> 10) & 31];
|
dev->codec_3d_stereo_enhancement = stereo_enhancement_technique[(ac97_reg_cached_read(dev, AC97_RESET) >> 10) & 31];
|
||||||
dev->capabilities = 0;
|
|
||||||
|
|
||||||
ac97_reg_update_bits(dev, AC97_EXTENDED_STAT_CTRL, 1, 1); // enable variable rate audio
|
ac97_reg_update_bits(dev, AC97_EXTENDED_STAT_CTRL, 1, 1); // enable variable rate audio
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user