[haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- From: "Jérôme Duval" <korli@xxxxxxxxxxxxxxxx>
- To: haiku-development@xxxxxxxxxxxxx
- Date: Sun, 23 Sep 2007 19:51:39 +0200
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;
- Follow-Ups:
- [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- From: Hüseyin Erdemir
- References:
- [haiku-development] Headphone Jacksense support for AD1981B chipset
- From: Hüseyin Erdemir
- [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- From: Hüseyin Erdemir
Other related posts:
- » [haiku-development] Headphone Jacksense support for AD1981B chipset
- » [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- » [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- » [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- » [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- » [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- From: Hüseyin Erdemir
- [haiku-development] Headphone Jacksense support for AD1981B chipset
- From: Hüseyin Erdemir
- [haiku-development] Re: Headphone Jacksense support for AD1981B chipset
- From: Hüseyin Erdemir