Changeset 25566
- Timestamp:
- 05/19/08 17:42:44 (6 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
haiku/trunk/src/add-ons/kernel/drivers/audio/ac97/auich/ac97.c
r25563 r25566 200 200 ac97_dev *dev; 201 201 codec_table *codec; 202 int i; 202 203 203 204 *_dev = dev = (ac97_dev *) malloc(sizeof(ac97_dev)); … … 205 206 dev->reg_read = reg_read; 206 207 dev->reg_write = reg_write; 207 dev->codec_id = ((uint32)reg_read(cookie, AC97_VENDOR_ID1) << 16) | reg_read(cookie, AC97_VENDOR_ID2);208 codec = find_codec_table(dev->codec_id);209 dev->codec_info = codec->info;210 dev->init = codec->init;211 208 dev->set_rate = 0; 212 209 dev->get_rate = 0; … … 215 212 dev->max_vsr = 0xffff; 216 213 dev->reversed_eamp_polarity = false; 214 dev->capabilities = 0; 215 217 216 dev->subsystem = (subvendor_id << 16) | subsystem_id; 218 217 … … 230 229 dev->reversed_eamp_polarity = true; 231 230 } 232 231 233 232 /* reset the codec */ 234 233 LOG(("codec reset\n")); 235 234 ac97_reg_uncached_write(dev, AC97_RESET, 0x0000); 236 snooze(50000); // 50 ms 235 for (i = 0; i < 500; i++) { 236 if ((ac97_reg_uncached_read(dev, AC97_POWERDOWN) & 0xf) == 0xf) 237 break; 238 snooze(1000); 239 } 237 240 238 241 /* setup register cache */ 239 242 ac97_update_register_cache(dev); 240 243 244 dev->codec_id = ((uint32)reg_read(cookie, AC97_VENDOR_ID1) << 16) | reg_read(cookie, AC97_VENDOR_ID2); 245 codec = find_codec_table(dev->codec_id); 246 dev->codec_info = codec->info; 247 dev->init = codec->init; 248 241 249 dev->codec_3d_stereo_enhancement = stereo_enhancement_technique[(ac97_reg_cached_read(dev, AC97_RESET) >> 10) & 31]; 242 dev->capabilities = 0; 243 250 244 251 ac97_reg_update_bits(dev, AC97_EXTENDED_STAT_CTRL, 1, 1); // enable variable rate audio 245 252
