Changeset 25566

Show
Ignore:
Timestamp:
05/19/08 17:42:44 (6 months ago)
Author:
korli
Message:

wait on codec power up

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • haiku/trunk/src/add-ons/kernel/drivers/audio/ac97/auich/ac97.c

    r25563 r25566  
    200200        ac97_dev *dev; 
    201201        codec_table *codec; 
     202        int i; 
    202203         
    203204        *_dev = dev = (ac97_dev *) malloc(sizeof(ac97_dev)); 
     
    205206        dev->reg_read = reg_read; 
    206207        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; 
    211208        dev->set_rate = 0; 
    212209        dev->get_rate = 0; 
     
    215212        dev->max_vsr = 0xffff; 
    216213        dev->reversed_eamp_polarity = false; 
     214        dev->capabilities = 0; 
     215 
    217216        dev->subsystem = (subvendor_id << 16) | subsystem_id; 
    218217         
     
    230229                dev->reversed_eamp_polarity = true; 
    231230        } 
    232  
     231                 
    233232        /* reset the codec */    
    234233        LOG(("codec reset\n")); 
    235234        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        } 
    237240 
    238241        /* setup register cache */ 
    239242        ac97_update_register_cache(dev); 
    240243 
     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                 
    241249        dev->codec_3d_stereo_enhancement = stereo_enhancement_technique[(ac97_reg_cached_read(dev, AC97_RESET) >> 10) & 31]; 
    242         dev->capabilities = 0; 
    243  
     250         
    244251        ac97_reg_update_bits(dev, AC97_EXTENDED_STAT_CTRL, 1, 1); // enable variable rate audio 
    245252