SB450 HDA Audio

From wiki.habital.lv
Jump to navigation Jump to search
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: ALC262 Analog [ALC262 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 1: ALC262 Digital [ALC262 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 6: Si3054 Modem [Si3054 Modem]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
$ cat /proc/asound/card0/codec#*|grep Codec
Codec: Realtek ALC262
Codec: Generic 11c1 Si3054
$ lspci -v
...
00:14.2 Audio device: ATI Technologies Inc IXP SB4x0 High Definition Audio Controller (rev 01)
       Subsystem: Benq Corporation Unknown device 058f
       Flags: bus master, slow devsel, latency 64, IRQ 16
       Memory at c0000000 (64-bit, non-prefetchable) [size=16K]
       Capabilities: [50] Power Management version 2
       Capabilities: [60] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
       Kernel driver in use: HDA Intel
       Kernel modules: snd-hda-intel
...
Модель и описание:
ALC262
fujitsu      - Fujitsu Laptop
hp-bpc       - HP xw4400/6400/8400/9400 laptops
hp-bpc-d7000 - HP BPC D7000
benq         - Benq ED8
benq-t31     - Benq T31
hippo        - Hippo (ATI) with jack detection, Sony UX-90s
hippo_1      - Hippo (Benq) with jack detection
sony-assamd  - Sony ASSAMD
basic        - fixed pin assignment w/o SPDIF
auto         - auto-config reading BIOS (default)
$ less /etc/modprobe.d/sound
# ALSA portion
alias char-major-116 snd
alias snd-card-0 snd-hda-intel
options snd-hda-intel index=0 model=basic

# OSS/Free portion
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0

# card #1
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

К сожалению в ноутбуке по-умолчании не работает встроенный микрофон. Для включения микрофона я предлагаю следующий патч (проверено на alsa-1.0.18rc3):

--- patch_realtek.c.orig        2008-12-29 10:10:38.000000000 +0200
+++ patch_realtek.c     2009-01-29 09:44:04.000000000 +0200
@@ -104,6 +104,7 @@
        ALC262_NEC,
        ALC262_TOSHIBA_S06,
        ALC262_TOSHIBA_RX1,
+       ALC262_BENQ_P52,
        ALC262_AUTO,
        ALC262_MODEL_LAST /* last tag */
 };
@@ -9311,6 +9312,21 @@
        { } /* end */
 };
 
+static struct snd_kcontrol_new alc262_benq_p52_mixer[] = {
+       HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
+       HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT),
+       HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
+       HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
+       HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
+       HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT),
+       HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT),
+       HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT),
+       HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT),
+       HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
+       HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
+       { } /* end */
+};
+
 #define alc262_capture_mixer           alc882_capture_mixer
 #define alc262_capture_alt_mixer       alc882_capture_alt_mixer
 
@@ -10433,6 +10449,7 @@
        [ALC262_ULTRA]          = "ultra",
        [ALC262_LENOVO_3000]    = "lenovo-3000",
        [ALC262_NEC]            = "nec",
+       [ALC262_BENQ_P52]       = "benq-p52",
        [ALC262_AUTO]           = "auto",
 };
 
@@ -10476,7 +10493,7 @@
        SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000 y410", ALC262_LENOVO_3000),
        SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8),
        SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31),
-       SND_PCI_QUIRK(0x17ff, 0x058f, "Benq Hippo", ALC262_HIPPO_1),
+       SND_PCI_QUIRK(0x17ff, 0x058f, "Benq P52", ALC262_BENQ_P52),
        {}
 };
 
@@ -10623,6 +10640,19 @@
                .unsol_event = alc262_hippo_unsol_event,
                .init_hook = alc262_hippo_automute,
        },
+       [ALC262_BENQ_P52] = {
+               .mixers = { alc262_benq_p52_mixer },
+               .init_verbs = { alc262_init_verbs, alc262_benq_t31_EAPD_verbs, alc262_hippo_unsol_verbs },
+               .num_dacs = ARRAY_SIZE(alc262_dac_nids),
+               .dac_nids = alc262_dac_nids,
+               .hp_nid = 0x02,
+               .dig_out_nid = ALC262_DIGOUT_NID,
+               .num_channel_mode = ARRAY_SIZE(alc262_modes),
+               .channel_mode = alc262_modes,
+               .input_mux = &alc262_capture_source,
+               .unsol_event = alc262_hippo_unsol_event,
+               .init_hook = alc262_hippo_automute,
+       },
        [ALC262_ULTRA] = {
                .mixers = { alc262_ultra_mixer, alc262_ultra_capture_mixer },
                .init_verbs = { alc262_ultra_verbs },