Ключевые слова:alsa, sound, linux, driver, hardware, (найти похожие документы)
From: nam <namari@mail.zp.ua.>
Newsgroups: email
Date: Mon, 26 Jul 2006 14:31:37 +0000 (UTC)
Subject: Настройка alsa в ядре 2.6.14.5 для систем на основе nvidia nforce
Настройка alsa в ядре 2.6.14.5 для систем на основе nvidia nforce mcp410
на примере Asrock K8NF4G-SATA2.
Побудило к этому драйвер от производителя который работал только через
OSS интерфейс и оставлял желать лучшего.
Для начала смотрим какой аудио чип используется в системе, для этого
примера это чип от Realtek alc850 , поддержка которого уже реализована
но работать с ним альса не хочет , но мы ёй поможем. Посмотреть можно на
самой материнке или в мануале на материнку в разделе specifications ->
audio, а реализована ли поддержка для этого чипа можно увидеть в файле
linux-2.6.14.5/sound/pci/ac97/ac97_id.h для данного примера это строка
#define AC97_ID_ALC850 0x414c4790.
Поддержка чипа есть но работать он не хочет почему ?
Полистав ReleaseNotes.html из NFORCE-Linux-x86-1.0-0310-pkg1.run и у
видев енто что в принципе не понравилось
...NVIDIA's audio driver is an OSS driver, and requires OSS sound support
in the kernel. NVIDIA's audio control panel is a Qt-based application,
and requires Qt run-time libraries in order to run....
и это что натолкнуло на мысль
...If your configuration file already contains an entry for the
i810_audio or snd-intel8x0 drivers (open-source audio drivers
that supports the nForce audio controller), that entry needs to be
commented out with a or removed:
alias sound-slot-0 i810_audio
Add the following lines to the configuration file:
alias sound-slot-0 nvsound
alias snd-intel8x0 off
alias i810_audio off...
копнуть поглубже в сторону snd_intel8x0
Посмотрев в linux-2.6.14.5/Documentation/sound/alsa/ALSA-Configuration.txt
натолкнулся на такие строки
Module snd-intel8x0
-------------------
Module for AC'97 motherboards from Intel and compatibles.
* Intel i810/810E, i815, i820, i830, i84x, MX440
* SiS 7012 (SiS 735)
* NVidia NForce, NForce2
* AMD AMD768, AMD8111
* ALi m5455
Заинтересовали строки про Нфорсе
Значит будем ковырять исходники ...
Роем /usr/src/linux-2.6.14.5/sound/pci/intel8x0.c строки около <400
/*
{ 0x10de, 0x01b1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE */
{ 0x10de, 0x003a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* MCP04 */
{ 0x10de, 0x006a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE2 */
{ 0x10de, 0x0059, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* CK804 */
{ 0x10de, 0x008a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* CK8 */
{ 0x10de, 0x00da, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE3 */
{ 0x10de, 0x00ea, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* CK8S */
*/
поддержка имеется токо надо добавить ID нашего звукового контролера
0x10de энто я так понял идентификатор производителя в нашем случае nvidia,
a чего добавить дальше сейчас будем посмотреть
дав в терминале команду lspci -v -v видим
/*
00:10.2 Multimedia audio controller: nVidia Corporation: Unknown device 026b (rev a2)
Subsystem: Unknown device 1849:0850
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 (500ns min, 1250ns max)
Interrupt: pin C routed to IRQ 11
Region 0: I/O ports at e400 [size=256]
Region 1: I/O ports at e000 [size=256]
Region 2: Memory at febdd000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [44] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
где Multimedia audio controller: nVidia Corporation:и есть наше 0x10de а
Unknown device 026b (rev a2) это то чего надо добавить относительно
Subsystem: Unknown device 1849:0850 это я так понял производитель 1849
Asrock a 0850 id кодека alc850 используется для дров винды токо там
наоборот 08501849 в дровах прописано.
Ну вернемся к теме добавляем стрку вида
/*
{ 0x10de, 0x026b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /*NFORCE MCP410 */
*/
но энто не все, пролистав до строк >2700
находим энто
/*
{ PCI_DEVICE_ID_NVIDIA_MCP1_AUDIO, "NVidia nForce" },
{ PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO, "NVidia nForce2" },
{ PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO, "NVidia nForce3" },
{ PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO, "NVidia CK8S" },
{ PCI_DEVICE_ID_NVIDIA_CK804_AUDIO, "NVidia CK804" },
{ PCI_DEVICE_ID_NVIDIA_CK8_AUDIO, "NVidia CK8" },
{ 0x003a, "NVidia MCP04" },
{ 0x746d, "AMD AMD8111" },
{ 0x7445, "AMD AMD768" },
{ 0x5455, "ALi M5455" },
{ 0, NULL },
*/
и добавляем
/*
{ 0x026b, "Nvidia MCP410" },
*/
всё теперь всё должно заработать
после пересборки и замены модуля snd_intel8x0.ko
править лучше в мс
Автор не несёт ответственности за убитое жёлезо и напрасно потраченное время.
Отзывы можно писать на [email protected]
Автору пожелание: учесть, что это статья, а не высказывание в чате. Уделить побольше внимания к грамматике, убрать жаргон. "Драйвер побудило", "энто", "токо".
Хочу аналогичную статью про nForce 4.
Вообще добавление одного PCI ID -- повод не для статьи на opennet (разве как пример, но тогда согласен с комментарием насчёт грамматики -- учить, так учить :), а для баги с низкой severity на bugs.alsa-project.org или письма в alsa-devel@ на крайний случай.
PS: перед тем, как вешать баги, применяя alsa из 2.6.x, стоит взять свежую с alsa-project.org. В частности, мне для MCP51 (или 54?) хватило собрать kernel-modules-alsa-std26-up-1.0.11 для того альтовского ядра, которое было в разливке. (не совсем так -- там ещё nvidia-1.0.8??? потребовалось для GF6100, но это отдельно)