Hi Hüseyin, thanks for your patch. 2007/9/23, Hüseyin Erdemir <herdemir@xxxxxxxxx>: > > In previous patch you couldn't change headphone volume in AC 97 MIXER. Now > headphone volume is synced to Master Volume. > > As for my report before about sample rate conversion, just ignore it. It > works flawless. Sorry for the mislead. I think your patch is not for every AD1981B chipset, only some HP laptops. It would be better to check the subvendor/subproduct. Could you check with the attached patch ? Please eventually fix it to have it work with your laptop. Thanks. Bye, Jérôme
Index: src/add-ons/kernel/drivers/audio/ac97/auich/ac97.c =================================================================== --- src/add-ons/kernel/drivers/audio/ac97/auich/ac97.c (révision 22273) +++ src/add-ons/kernel/drivers/audio/ac97/auich/ac97.c (copie de travail) @@ -95,12 +95,14 @@ void default_init(device_config *); void ad1886_init(device_config *); +void ad1981b_init(device_config *); void default_amp_enable(device_config *, bool); void cs4299_amp_enable(device_config *, bool); codec_ops default_ops = { default_init, default_amp_enable }; codec_ops ad1886_ops = { ad1886_init, default_amp_enable }; +codec_ops ad1981b_ops = { ad1981b_init, default_amp_enable }; codec_ops cs4299_ops = { default_init, cs4299_amp_enable }; codec_table codecs[] = @@ -150,6 +152,7 @@ { 0x41445363, 0xffffffff, &default_ops, "Analog Devices AD1886A SoundMAX"B_UTF8_REGISTERED }, { 0x41445371, 0xffffffff, &default_ops, "Analog Devices AD1981A SoundMAX"B_UTF8_REGISTERED }, { 0x41445372, 0xffffffff, &default_ops, "Analog Devices AD1981A SoundMAX"B_UTF8_REGISTERED }, + { 0x41445374, 0xffffffff, &ad1981b_ops, "Analog Devices AD1981B SoundMAX"B_UTF8_REGISTERED }, { 0x414c4320, 0xfffffff0, &default_ops, "Avance Logic (Realtek) ALC100/ALC100P, RL5383/RL5522" }, { 0x414c4730, 0xffffffff, &default_ops, "Avance Logic (Realtek) ALC101" }, #if 0 @@ -251,9 +254,21 @@ void ad1886_init(device_config *config) { LOG(("ad1886_init\n")); - auich_codec_write(config, 0x72, 0x0010); + auich_codec_write(config, AC97_AD_JACKSENSE, 0x0010); } +void ad1981b_init(device_config *config) +{ + LOG(("ad1981b_init\n")); + uint32 id = (config->subvendor_id << 16) | config->subsystem_id; + if (id == 0x103c0934) { + auich_codec_write(config, AC97_AD_JACKSENSE, + auich_codec_read(config, AC97_AD_JACKSENSE) | 0x0800); + + source_info[1].reg = AC97_AUX_OUT_VOLUME; + } +} + void default_amp_enable(device_config *config, bool yesno) { LOG(("default_amp_enable\n")); @@ -278,7 +293,7 @@ auich_codec_write(config, 0x68, 0); } -const ac97_source_info source_info[] = { +ac97_source_info source_info[] = { { "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 }, { "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 }, //{ "Bass/Treble", B_MIX_GAIN|B_MIX_STEREO, 102, AC97_MASTER_TONE, 0x0f0f, 4, 0, 1, 1,-12.0, 10.5, 1.5 }, Index: src/add-ons/kernel/drivers/audio/ac97/auich/ac97.h =================================================================== --- src/add-ons/kernel/drivers/audio/ac97/auich/ac97.h (révision 22273) +++ src/add-ons/kernel/drivers/audio/ac97/auich/ac97.h (copie de travail) @@ -64,6 +64,7 @@ AC97_CENTER_LFE_VOLUME = 0x36, AC97_SURROUND_VOLUME = 0x38, AC97_SPDIF_CONTROL = 0x3A, + AC97_AD_JACKSENSE = 0x72, AC97_VENDOR_ID1 = 0x7C, AC97_VENDOR_ID2 = 0x7E }; @@ -101,7 +102,7 @@ float granularity; } ac97_source_info; -extern const ac97_source_info source_info[]; +extern ac97_source_info source_info[]; extern const int32 source_info_size; #endif Index: src/add-ons/kernel/drivers/audio/ac97/auich/config.h =================================================================== --- src/add-ons/kernel/drivers/audio/ac97/auich/config.h (révision 22273) +++ src/add-ons/kernel/drivers/audio/ac97/auich/config.h (copie de travail) @@ -46,6 +46,9 @@ void * log_mbbar; // ich4 area_id area_mmbar; // ich4 area_id area_mbbar; // ich4 + + ushort subvendor_id; + ushort subsystem_id; } device_config; #define TYPE_ICH4 0x01 Index: src/add-ons/kernel/drivers/audio/ac97/auich/auich.c =================================================================== --- src/add-ons/kernel/drivers/audio/ac97/auich/auich.c (révision 22273) +++ src/add-ons/kernel/drivers/audio/ac97/auich/auich.c (copie de travail) @@ -607,6 +607,8 @@ make_device_names(card); + card->config.subvendor_id = card->info.u.h0.subsystem_vendor_id; + card->config.subsystem_id = card->info.u.h0.subsystem_id; card->config.nabmbar = card->info.u.h0.base_registers[0]; card->config.irq = card->info.u.h0.interrupt_line; card->config.type = 0;