[alsa-devel] Support for Compal EL81 (Intel HDA/Realtek alc883)
Carlo E. Prelz
fluido at fluido.as
Sat Mar 24 00:25:42 CET 2007
Good evening. I am the lucky owner of a nice Compal EL80 laptop, sporting an
Intel HDA audio controller with realtek alc883. Here is what I get with lspci -vvv:
00:1b.0 Audio device [0403]: Intel Corporation 82801G (ICH7 Family) High
Definition Audio Controller [8086:27d8] (rev 02)
Subsystem: COMPAL Electronics Inc Unknown device [14c0:0017]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 22
Region 0: Memory at d2500000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [60] Message Signalled Interrupts: Mask- 64bit+
Queue=0/0 Enable-
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express Unknown type IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0, ExtTag-
Device: Latency L0s <64ns, L1 <1us
Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+
Device: MaxPayload 128 bytes, MaxReadReq 128 bytes
Link: Supported Speed unknown, Width x0, ASPM unknown, Port 0
Link: Latency L0s <64ns, L1 <1us
Link: ASPM Disabled CommClk- ExtSynch-
Link: Speed unknown, Width x0
Capabilities: [100] Virtual Channel
Capabilities: [130] Unknown (5)
I had very elementary operativity, but missed much, including for example
microphone boost. I applied the following patch:
--8<-----8<----8<----8<----8<----8<----8<----8<----8<----8<---8<--
--- /usr/src/alsa/alsa-kernel/pci/hda/patch_realtek.c 2007-02-15
20:00:04.000000000 +0100
+++ ./patch_realtek.c 2007-03-15 08:36:30.000000000 +0100
@@ -141,6 +141,7 @@
ALC883_ACER,
ALC883_MEDION,
ALC883_LAPTOP_EAPD,
+ ALC883_LAPTOP_COMPAL,
ALC883_AUTO,
ALC883_MODEL_LAST,
};
@@ -5582,6 +5583,7 @@
[ALC883_ACER] = "acer",
[ALC883_MEDION] = "medion",
[ALC883_LAPTOP_EAPD] = "laptop-eapd",
+ [ALC883_LAPTOP_COMPAL] = "laptop-compal",
[ALC883_AUTO] = "auto",
};
@@ -5607,6 +5609,7 @@
SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_MEDION),
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD),
SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch),
+ SND_PCI_QUIRK(0x14c0, 0x0017, "Compal EL80", ALC883_LAPTOP_COMPAL),
{}
};
@@ -5747,6 +5750,76 @@
.channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source,
},
+#if 1
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_base_mixer,
+ alc883_chmode_mixer },
+ .init_verbs = { alc883_init_verbs, alc882_eapd_verbs },
+ .num_dacs = ARRAY_SIZE(alc883_dac_nids),
+ .dac_nids = alc883_dac_nids,
+ .num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
+ .adc_nids = alc883_adc_nids,
+ .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
+ .channel_mode = alc883_3ST_2ch_modes,
+ .input_mux = &alc883_capture_source,
+ },
+#else
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_fivestack_mixer,
--- /usr/src/alsa/alsa-kernel/pci/hda/patch_realtek.c 2007-02-15
20:00:04.000000000 +0100
+++ ./patch_realtek.c 2007-03-15 08:36:30.000000000 +0100
@@ -141,6 +141,7 @@
ALC883_ACER,
ALC883_MEDION,
ALC883_LAPTOP_EAPD,
+ ALC883_LAPTOP_COMPAL,
ALC883_AUTO,
ALC883_MODEL_LAST,
};
@@ -5582,6 +5583,7 @@
[ALC883_ACER] = "acer",
[ALC883_MEDION] = "medion",
[ALC883_LAPTOP_EAPD] = "laptop-eapd",
+ [ALC883_LAPTOP_COMPAL] = "laptop-compal",
[ALC883_AUTO] = "auto",
};
@@ -5607,6 +5609,7 @@
SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_MEDION),
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD),
SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch),
+ SND_PCI_QUIRK(0x14c0, 0x0017, "Compal EL80", ALC883_LAPTOP_COMPAL),
{}
};
@@ -5747,6 +5750,76 @@
.channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source,
},
+#if 1
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_base_mixer,
+ alc883_chmode_mixer },
+ .init_verbs = { alc883_init_verbs, alc882_eapd_verbs },
+ .num_dacs = ARRAY_SIZE(alc883_dac_nids),
+ .dac_nids = alc883_dac_nids,
+ .num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
+ .adc_nids = alc883_adc_nids,
+ .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
+ .channel_mode = alc883_3ST_2ch_modes,
+ .input_mux = &alc883_capture_source,
+ },
+#else
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_fivestack_mixer,
+ alc883_chmode_mixer },
+ .init_verbs = { alc883_init_verbs,
+ alc883_medion_eapd_verbs },
+ .num_dacs = ARRAY_SIZE(alc883_dac_nids),
+ .dac_nids = alc883_dac_nids,
+ .num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
+ .adc_nids = alc883_adc_nids,
+ .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes),
+ .channel_mode = alc883_sixstack_modes,
+ .input_mux = &alc883_capture_source,
+ },
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_3ST_2ch_mixer },
+ .init_verbs = { alc883_init_verbs },
+ .num_dacs = ARRAY_SIZE(alc883_dac_nids),
+ .dac_nids = alc883_dac_nids,
+ .dig_out_nid = ALC883_DIGOUT_NID,
+ .num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
+ .adc_nids = alc883_adc_nids,
+ .dig_in_nid = ALC883_DIGIN_NID,
+ .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
+ .channel_mode = alc883_3ST_2ch_modes,
+ .input_mux = &alc883_capture_source,
+ },
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer },
+ .init_verbs = { alc883_init_verbs },
+ .num_dacs = ARRAY_SIZE(alc883_dac_nids),
+ .dac_nids = alc883_dac_nids,
+ .dig_out_nid = ALC883_DIGOUT_NID,
+ .num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
+ .adc_nids = alc883_adc_nids,
+ .dig_in_nid = ALC883_DIGIN_NID,
+ .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
+ .channel_mode = alc883_3ST_6ch_modes,
+ .need_dac_fix = 1,
+ .input_mux = &alc883_capture_source,
+ },
+ [ALC883_LAPTOP_COMPAL] = {
+ .mixers = { alc883_tagra_mixer, alc883_chmode_mixer },
+ .init_verbs = { alc883_init_verbs, alc883_tagra_verbs},
+ .num_dacs = ARRAY_SIZE(alc883_dac_nids),
+ .dac_nids = alc883_dac_nids,
+ .dig_out_nid = ALC883_DIGOUT_NID,
+ .num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
+ .adc_nids = alc883_adc_nids,
+ .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
+ .channel_mode = alc883_3ST_6ch_modes,
+ .need_dac_fix = 1,
+ .input_mux = &alc883_capture_source,
+ .unsol_event = alc883_tagra_unsol_event,
+ .init_hook = alc883_tagra_automute,
+ },
+#endif
};
--8<-----8<----8<----8<----8<----8<----8<----8<----8<----8<---8<--
As you can see, I did various tests with possible 'alc_config_preset'
structures. I could only copy from other existing examples, since I have no
idea how you would obtain the correct values to insert there. With the first
example, the only one that is commented in (copied from LAPTOP_EAPD), I could
obtain a working microphone boost. The thing is far from perfect, though.
Suffice to say that I find the main volume in the cursor labeled 'Surround'
in alsamixer.
Is there any instruction about how to obtain the right information to
configure this laptop of mine? Can you help? In this case, what other
information may I provide?
Thanks in advance
Carlo - Den Haag, NL
--
* Se la Strada e la sua Virtu' non fossero state messe da parte,
* K * Carlo E. Prelz - fluido at fluido.as che bisogno ci sarebbe
* di parlare tanto di amore e di rettitudine? (Chuang-Tzu)
More information about the Alsa-devel
mailing list