Ticket #1146: auich.patch

File auich.patch, 9.5 KB (added by tqh, 17 years ago)

auich patch

  • ac97.c

     
    279279}
    280280
    281281const ac97_source_info source_info[] = {
    282     { "Record", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO|B_MIX_RECORDMUX, 100, AC97_RECORD_GAIN, 0x8000, 4, 0, 1, 0, 0.0, 22.5, 1.5 },
     282    { "Recording", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO|B_MIX_RECORDMUX, 100, AC97_RECORD_GAIN, 0x8000, 4, 0, 1, 0, 0.0, 22.5, 1.5 },
    283283    { "Master", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 101, AC97_MASTER_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
    284     //{ "Bass/Trebble", B_MIX_GAIN|B_MIX_STEREO, 102, AC97_MASTER_TONE, 0x0f0f, 4, 0, 1, 1,-12.0, 10.5, 1.5 },
     284    //{ "Bass/Treble", B_MIX_GAIN|B_MIX_STEREO, 102, AC97_MASTER_TONE, 0x0f0f, 4, 0, 1, 1,-12.0, 10.5, 1.5 },
    285285    //{ "Aux Out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 103, AC97_AUX_OUT_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
    286286    { "PCM Out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 104, AC97_PCM_OUT_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
    287287    { "CD", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 105, AC97_CD_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
  • auich.c

     
    659659    snooze(50000); // 50 ms
    660660
    661661    ac97_init(&card->config);
    662     ac97_amp_enable(&card->config, true);
    663662   
    664663    rv = auich_reg_read_32(&card->config, AUICH_REG_GLOB_STA);
    665664    if (!(rv & STA_S0CR)) { /* reset failure */
     
    698697    PRINT(("codec record gain   = %#04x\n",auich_codec_read(&card->config, 0x1c)));*/
    699698   
    700699    PRINT(("writing codec registers\n"));
     700
    701701    // TODO : to move with AC97
    702702    /* enable master output */
    703703    auich_codec_write(&card->config, AC97_MASTER_VOLUME, 0x0000);
     
    714714    /* set record gain */
    715715    //auich_codec_write(&card->config, AC97_RECORD_GAIN, 0x0000);
    716716
     717    ac97_amp_enable(&card->config, true);
     718
    717719    PRINT(("codec master output = %#04x\n",auich_codec_read(&card->config, AC97_MASTER_VOLUME)));
    718720    PRINT(("codec aux output    = %#04x\n",auich_codec_read(&card->config, AC97_AUX_OUT_VOLUME)));
    719721    PRINT(("codec mono output   = %#04x\n",auich_codec_read(&card->config, AC97_MONO_VOLUME)));
     
    830832auich_shutdown(auich_dev *card)
    831833{
    832834    PRINT(("shutdown(%p)\n", card));
     835    ac97_amp_enable(&card->config, false);
    833836    card->interrupt_mask = 0;
    834837   
    835838    if (current_settings.use_thread) {
  • multi.c

     
    194194{
    195195    uint32  i = 0, index = 0, count, id, parent, parent2, parent3;
    196196    const ac97_source_info *info;
     197
     198    /* AC97 Mixer */
     199    parent = auich_create_group_control(multi, &index, 0, 0, "AC97 Mixer");
     200   
     201    count = source_info_size;
     202    //Note that we ignore first item in source_info
     203    //It's for recording, but do match this with ac97.c's source_info
     204    for(i=1; i < count ; i++) {
     205        info = &source_info[i];
     206        PRINT(("name : %s\n", info->name));
    197207           
    198     parent = auich_create_group_control(multi, &index, 0, 0, "Record");
     208        parent2 = auich_create_group_control(multi, &index, parent, 0, info->name);
     209               
     210        if(info->type & B_MIX_GAIN) {
     211            if(info->type & B_MIX_MUTE) {
     212                multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
     213                multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
     214                multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
     215                multi->controls[index].mix_control.parent = parent2;
     216                multi->controls[index].mix_control.string = S_MUTE;
     217                multi->controls[index].cookie = info;
     218                multi->controls[index].type = B_MIX_MUTE;
     219                multi->controls[index].get = &auich_ac97_get_mix;
     220                multi->controls[index].set = &auich_ac97_set_mix;
     221                index++;
     222            }
    199223       
     224            multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
     225            multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
     226            multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
     227            multi->controls[index].mix_control.parent = parent2;
     228            strcpy(multi->controls[index].mix_control.name, info->name);
     229            multi->controls[index].mix_control.u.gain.min_gain = info->min_gain;
     230            multi->controls[index].mix_control.u.gain.max_gain = info->max_gain;
     231            multi->controls[index].mix_control.u.gain.granularity = info->granularity;
     232            multi->controls[index].cookie = info;
     233            multi->controls[index].type = B_MIX_GAIN;
     234            multi->controls[index].get = &auich_ac97_get_mix;
     235            multi->controls[index].set = &auich_ac97_set_mix;
     236            id = multi->controls[index].mix_control.id;
     237            index++;
     238           
     239            if(info->type & B_MIX_STEREO) {
     240                multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
     241                multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
     242                multi->controls[index].mix_control.master = id;
     243                multi->controls[index].mix_control.parent = parent2;
     244                strcpy(multi->controls[index].mix_control.name, info->name);
     245                multi->controls[index].mix_control.u.gain.min_gain = info->min_gain;
     246                multi->controls[index].mix_control.u.gain.max_gain = info->max_gain;
     247                multi->controls[index].mix_control.u.gain.granularity = info->granularity;
     248                multi->controls[index].cookie = info;
     249                multi->controls[index].type = B_MIX_GAIN;
     250                multi->controls[index].get = &auich_ac97_get_mix;
     251                multi->controls[index].set = &auich_ac97_set_mix;
     252                index++;
     253            }
     254           
     255            if(info->type & B_MIX_MICBOOST) {
     256                multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
     257                multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
     258                multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
     259                multi->controls[index].mix_control.parent = parent2;
     260                strcpy(multi->controls[index].mix_control.name, "+20 dB");
     261                multi->controls[index].cookie = info;
     262                multi->controls[index].type = B_MIX_MICBOOST;
     263                multi->controls[index].get = &auich_ac97_get_mix;
     264                multi->controls[index].set = &auich_ac97_set_mix;
     265                index++;
     266            }
     267        }
     268    }
     269
    200270    /* AC97 Record */
     271    parent = auich_create_group_control(multi, &index, 0, 0, "Recording");
     272       
    201273    info = &source_info[0];
    202274    PRINT(("name : %s\n", info->name));
    203275   
     
    302374            index++;
    303375        }
    304376    }   
    305    
    306     parent = auich_create_group_control(multi, &index, 0, 0, "AC97 Mixer");
    307    
    308     count = source_info_size;
    309     count--;   
    310    
    311     for(i=1; i < count ; i++) {
    312         info = &source_info[i];
    313         PRINT(("name : %s\n", info->name));
    314            
    315         parent2 = auich_create_group_control(multi, &index, parent, 0, info->name);
    316                
    317         if(info->type & B_MIX_GAIN) {
    318             if(info->type & B_MIX_MUTE) {
    319                 multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
    320                 multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
    321                 multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
    322                 multi->controls[index].mix_control.parent = parent2;
    323                 multi->controls[index].mix_control.string = S_MUTE;
    324                 multi->controls[index].cookie = info;
    325                 multi->controls[index].type = B_MIX_MUTE;
    326                 multi->controls[index].get = &auich_ac97_get_mix;
    327                 multi->controls[index].set = &auich_ac97_set_mix;
    328                 index++;
    329             }
    330377       
    331             multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
    332             multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
    333             multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
    334             multi->controls[index].mix_control.parent = parent2;
    335             strcpy(multi->controls[index].mix_control.name, info->name);
    336             multi->controls[index].mix_control.u.gain.min_gain = info->min_gain;
    337             multi->controls[index].mix_control.u.gain.max_gain = info->max_gain;
    338             multi->controls[index].mix_control.u.gain.granularity = info->granularity;
    339             multi->controls[index].cookie = info;
    340             multi->controls[index].type = B_MIX_GAIN;
    341             multi->controls[index].get = &auich_ac97_get_mix;
    342             multi->controls[index].set = &auich_ac97_set_mix;
    343             id = multi->controls[index].mix_control.id;
    344             index++;
    345            
    346             if(info->type & B_MIX_STEREO) {
    347                 multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
    348                 multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
    349                 multi->controls[index].mix_control.master = id;
    350                 multi->controls[index].mix_control.parent = parent2;
    351                 strcpy(multi->controls[index].mix_control.name, info->name);
    352                 multi->controls[index].mix_control.u.gain.min_gain = info->min_gain;
    353                 multi->controls[index].mix_control.u.gain.max_gain = info->max_gain;
    354                 multi->controls[index].mix_control.u.gain.granularity = info->granularity;
    355                 multi->controls[index].cookie = info;
    356                 multi->controls[index].type = B_MIX_GAIN;
    357                 multi->controls[index].get = &auich_ac97_get_mix;
    358                 multi->controls[index].set = &auich_ac97_set_mix;
    359                 index++;
    360             }
    361         }   
    362     }
    363    
    364     parent = auich_create_group_control(multi, &index, 0, S_SETUP, NULL);
    365    
    366     /* AC97 20db Boost Mic */
    367     info = &source_info[6];
    368        
    369     if(info->type & B_MIX_GAIN && info->type & B_MIX_MICBOOST) {
    370         multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
    371         multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
    372         multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
    373         multi->controls[index].mix_control.parent = parent;
    374         strcpy(multi->controls[index].mix_control.name, "Mic +20dB");
    375         multi->controls[index].cookie = info;
    376         multi->controls[index].type = B_MIX_MICBOOST;
    377         multi->controls[index].get = &auich_ac97_get_mix;
    378         multi->controls[index].set = &auich_ac97_set_mix;
    379         index++;
    380     }
    381                
    382378    multi->control_count = index;
    383379    PRINT(("multi->control_count %lu\n", multi->control_count));
    384380    return B_OK;