<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.</id>
	<title>Звук. Программная реализация. - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F."/>
	<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.&amp;action=history"/>
	<updated>2026-06-16T17:53:00Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://paz00.ru/index.php?title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.&amp;diff=685&amp;oldid=prev</id>
		<title>Zombah: fix links</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.&amp;diff=685&amp;oldid=prev"/>
		<updated>2015-01-16T16:23:22Z</updated>

		<summary type="html">&lt;p&gt;fix links&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 16:23, 16 января 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l8&quot;&gt;Строка 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Процесс инициализации===  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Процесс инициализации===  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В файле [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5623.c alc5632.c] описаны процедуры инициализации ядерного модуля для нашей звуковухи. Метод [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1177 alc5632_modinit] вызывается первым при инициализации модуля. Этот метод регистрирует структуру типа [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1167&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;i2c_dirver&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;] (в этой струкруре содержатся указатели на методы добавления/удаления устройства).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В файле [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5623.c alc5632.c] описаны процедуры инициализации ядерного модуля для нашей звуковухи. Метод [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1177 alc5632_modinit] вызывается первым при инициализации модуля. Этот метод регистрирует структуру типа [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1167 i2c_dirver] (в этой струкруре содержатся указатели на методы добавления/удаления устройства).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;После регистрации зовется метод [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1079 alc5632_i2c_probe] (он зарегистрирован как метод probe в структуре [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1167&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;i2c_driver&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]). В начале этого метода в dmesd плюется дебажное сообщение '''&amp;quot;in i2c probe&amp;quot;'''. Потом считывается vid1 и vid2 (vendor id), чтобы определить, действительно ли позвали инициализацию для нужного устройства, а именно звуковой карты. Если все хорошо, то в dmesg пишется сообщение '''&amp;quot;Found codec: ALC5632 (ID: 5c)&amp;quot;'''. Последний байт vid2 должен быть равен 0x5с (это значение выводится как ID), иначе дальше возвращается ошибка. Далее зовется функция регистрации кодека - [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3641&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;snd_soc_register_codec&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;], в которую передаются структуры [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1062 soc_codec_device_alc5632] (содержит указатели на методы инициализации/деинициализации, управления питанием и т.п.) и [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line855 alc5632_dai] (dai = digital audio interface, содержит общие методы инициализации/деинициализации и т.п., а также параметры для воспроизведения и записи).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;После регистрации зовется метод [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1079 alc5632_i2c_probe] (он зарегистрирован как метод probe в структуре [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1167 i2c_driver]). В начале этого метода в dmesd плюется дебажное сообщение '''&amp;quot;in i2c probe&amp;quot;'''. Потом считывается vid1 и vid2 (vendor id), чтобы определить, действительно ли позвали инициализацию для нужного устройства, а именно звуковой карты. Если все хорошо, то в dmesg пишется сообщение '''&amp;quot;Found codec: ALC5632 (ID: 5c)&amp;quot;'''. Последний байт vid2 должен быть равен 0x5с (это значение выводится как ID), иначе дальше возвращается ошибка. Далее зовется функция регистрации кодека - [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3641 snd_soc_register_codec], в которую передаются структуры [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1062 soc_codec_device_alc5632] (содержит указатели на методы инициализации/деинициализации, управления питанием и т.п.) и [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line855 alc5632_dai] (dai = digital audio interface, содержит общие методы инициализации/деинициализации и т.п., а также параметры для воспроизведения и записи).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;При регистрации кодека зовется функция инициализации [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line984 alc5632_probe] (именно она пишет в dmesg &amp;quot;'''in codec probe''' ...&amp;quot;). В этой функции происходит инициализация устройства - запись в регистры для сброса состояния, установка регистров питания в нужное значение, перевод в slave режим, ...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;При регистрации кодека зовется функция инициализации [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line984 alc5632_probe] (именно она пишет в dmesg &amp;quot;'''in codec probe''' ...&amp;quot;). В этой функции происходит инициализация устройства - запись в регистры для сброса состояния, установка регистров питания в нужное значение, перевод в slave режим, ...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Часть настройка производится вызовом функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line923 androids_init], часть вызовами функция для добавления &amp;quot;контролов&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Часть настройка производится вызовом функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line923 androids_init], часть вызовами функция для добавления &amp;quot;контролов&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l22&quot;&gt;Строка 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Они появляются из функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-dapm.c#line489 dapm_new_mux] (в нее ошибка приходит от [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/core/control.c#line326 snd_ctl_add]). Интересно то, что на '''SpeakerOut N Mux''' ругани нет ([https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line238 список mux'ов]).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Они появляются из функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-dapm.c#line489 dapm_new_mux] (в нее ошибка приходит от [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/core/control.c#line326 snd_ctl_add]). Интересно то, что на '''SpeakerOut N Mux''' ругани нет ([https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line238 список mux'ов]).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Вот здесь определяется дефайн инициализации, которую используют для контролов: [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/include/sound/soc-dapm.h#line93&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;SND_SOC_DAPM_MUX&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Вот здесь определяется дефайн инициализации, которую используют для контролов: [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/include/sound/soc-dapm.h#line93 SND_SOC_DAPM_MUX]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://www.alsa-project.org/main/index.php/DAPM&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;DAPM&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;] - Dynamic Audio Power Management, используется для включения/выключения аудиоустройств для экономии энергии на портативных девайсах.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://www.alsa-project.org/main/index.php/DAPM DAPM] - Dynamic Audio Power Management, используется для включения/выключения аудиоустройств для экономии энергии на портативных девайсах.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Сигнатура SND_SOC_DAPM_MUX:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Сигнатура SND_SOC_DAPM_MUX:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot;&gt;Строка 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Код ошибки 16: '''EBUSY''' /* Device or resource busy */, ошибка выпадает в этой проверке: [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/core/control.c#line338&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;sound/core/control.c#line338&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Код ошибки 16: '''EBUSY''' /* Device or resource busy */, ошибка выпадает в этой проверке: [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/core/control.c#line338 sound/core/control.c#line338]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if (snd_ctl_find_id(card, &amp;amp;id)) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if (snd_ctl_find_id(card, &amp;amp;id)) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l57&quot;&gt;Строка 57:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 57:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Файл [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c paz00.c] описывает процесс инициализации звука на платформе ''paz00''. Принцип регистрации драйвера и вызова основной probe функции аналогичен остальным модулям (более детально описано выше).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Файл [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c paz00.c] описывает процесс инициализации звука на платформе ''paz00''. Принцип регистрации драйвера и вызова основной probe функции аналогичен остальным модулям (более детально описано выше).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В качестве основной probe функции выступает [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line251 tegra_snd_paz00_probe]. В этой функции происходит проверка платформы. Далее получаются значения различных &amp;quot;клоков&amp;quot; - [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/tegra_asoc_utils.c#line106 tegra_asoc_utils_init]. Потом идет какая-то внутренняя магия и затем регистрация звуковой карты функцией [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3287&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;snd_soc_register_card&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В качестве основной probe функции выступает [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line251 tegra_snd_paz00_probe]. В этой функции происходит проверка платформы. Далее получаются значения различных &amp;quot;клоков&amp;quot; - [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/tegra_asoc_utils.c#line106 tegra_asoc_utils_init]. Потом идет какая-то внутренняя магия и затем регистрация звуковой карты функцией [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3287 snd_soc_register_card].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В какой именно последовательности дальше вызываются функции я пока не понял. В структуре, описывающей карту ([&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line245&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;snd_soc_paz00&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]) содержится указатель на структуру [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line234&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;paz00_alc5632_dai&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;], которая в свою очередь содержит указатель на функцию инициализации ([&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line170&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;paz00_asoc_init&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]) и на структуру с функциями операций - [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line103&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;paz00_asoc_ops&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;] (в нашем случае заполнено только одно поле '''hw_params''', которое указывает на [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line39 paz00_asoc_hw_params]).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В какой именно последовательности дальше вызываются функции я пока не понял. В структуре, описывающей карту ([http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line245 snd_soc_paz00]) содержится указатель на структуру [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line234 paz00_alc5632_dai], которая в свою очередь содержит указатель на функцию инициализации ([http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line170 paz00_asoc_init]) и на структуру с функциями операций - [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line103 paz00_asoc_ops] (в нашем случае заполнено только одно поле '''hw_params''', которое указывает на [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line39 paz00_asoc_hw_params]).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line170&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;paz00_asoc_init&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;] - добавляет контролы и пины.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line170 paz00_asoc_init] - добавляет контролы и пины.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line39 paz00_asoc_hw_params] - получает '''srate''', на его основе рассчитывает '''mclk''' затем на основе этих значений зовет [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/tegra_asoc_utils.c#line30 tegra_asoc_ustils_set_rate]. Затем выставляются форматы. В конце, если '''mclk''' отличается от того, что был по умолчанию зовется [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[@&lt;/del&gt;http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3090&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;snd_soc_dai_set_sysclk&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line39 paz00_asoc_hw_params] - получает '''srate''', на его основе рассчитывает '''mclk''' затем на основе этих значений зовет [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/tegra_asoc_utils.c#line30 tegra_asoc_ustils_set_rate]. Затем выставляются форматы. В конце, если '''mclk''' отличается от того, что был по умолчанию зовется [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3090 snd_soc_dai_set_sysclk]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Интеграция paz00 и alc5632 судя по всему происходит в функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line2079 soc_new_pcm]. Из нее в dmesg попадает сообщение '''&amp;quot;asoc: alc5632-hifi &amp;lt;-&amp;gt; tegra-i2s.0 mapping ok&amp;quot;'''.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Интеграция paz00 и alc5632 судя по всему происходит в функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line2079 soc_new_pcm]. Из нее в dmesg попадает сообщение '''&amp;quot;asoc: alc5632-hifi &amp;lt;-&amp;gt; tegra-i2s.0 mapping ok&amp;quot;'''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key paz00_wiki-ac100:diff::1.12:old-226:rev-685 --&gt;
&lt;/table&gt;</summary>
		<author><name>Zombah</name></author>
	</entry>
	<entry>
		<id>https://paz00.ru/index.php?title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.&amp;diff=226&amp;oldid=prev</id>
		<title>Unknown user в 08:15, 15 октября 2014</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=%D0%97%D0%B2%D1%83%D0%BA._%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.&amp;diff=226&amp;oldid=prev"/>
		<updated>2014-10-15T08:15:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Как устроен звук на тоше в плане железа, можно посмотреть на странице [[Звук]]&lt;br /&gt;
&lt;br /&gt;
===Исходники ядра, связанные со звуком:=== &lt;br /&gt;
* [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/trees/chromeos-ac100-2.6.38/sound/soc/codecs sound/soc/codecs] ([http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5623.c alc5632.c] и [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5623.h alc5632.h])&lt;br /&gt;
* [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra sound/soc/tegra] (интересно все кроме harmony.c и seabord.c)&lt;br /&gt;
* [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/pinmux.c arch/arm/mach-tegra/pinmux.c]&lt;br /&gt;
* [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/pinmux-t2-tables.c arch/arm/mach-tegra/pinmux-t2-tables.c]&lt;br /&gt;
&lt;br /&gt;
===Процесс инициализации=== &lt;br /&gt;
В файле [http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5623.c alc5632.c] описаны процедуры инициализации ядерного модуля для нашей звуковухи. Метод [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1177 alc5632_modinit] вызывается первым при инициализации модуля. Этот метод регистрирует структуру типа [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1167|i2c_dirver]] (в этой струкруре содержатся указатели на методы добавления/удаления устройства).&lt;br /&gt;
После регистрации зовется метод [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1079 alc5632_i2c_probe] (он зарегистрирован как метод probe в структуре [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1167|i2c_driver]]). В начале этого метода в dmesd плюется дебажное сообщение '''&amp;quot;in i2c probe&amp;quot;'''. Потом считывается vid1 и vid2 (vendor id), чтобы определить, действительно ли позвали инициализацию для нужного устройства, а именно звуковой карты. Если все хорошо, то в dmesg пишется сообщение '''&amp;quot;Found codec: ALC5632 (ID: 5c)&amp;quot;'''. Последний байт vid2 должен быть равен 0x5с (это значение выводится как ID), иначе дальше возвращается ошибка. Далее зовется функция регистрации кодека - [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3641|snd_soc_register_codec]], в которую передаются структуры [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line1062 soc_codec_device_alc5632] (содержит указатели на методы инициализации/деинициализации, управления питанием и т.п.) и [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line855 alc5632_dai] (dai = digital audio interface, содержит общие методы инициализации/деинициализации и т.п., а также параметры для воспроизведения и записи).&lt;br /&gt;
При регистрации кодека зовется функция инициализации [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line984 alc5632_probe] (именно она пишет в dmesg &amp;quot;'''in codec probe''' ...&amp;quot;). В этой функции происходит инициализация устройства - запись в регистры для сброса состояния, установка регистров питания в нужное значение, перевод в slave режим, ...&lt;br /&gt;
Часть настройка производится вызовом функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line923 androids_init], часть вызовами функция для добавления &amp;quot;контролов&amp;quot;.&lt;br /&gt;
При ошибке добавления &amp;quot;контрола&amp;quot; в dmesg должно появляться сообщение вида &amp;lt;range type=&amp;quot;comment&amp;quot; id=&amp;quot;85502&amp;quot;&amp;gt;&amp;quot;%s: Failed to add %s: %d&amp;quot;&amp;lt;/range id=&amp;quot;85502&amp;quot;&amp;gt; (%s - строка, %d - число).&lt;br /&gt;
&lt;br /&gt;
Сейчас в dmesg есть сообщения:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ 8.151320] alc5632 0-001e: asoc: failed to add kcontrol Right Headphone Mux&lt;br /&gt;
[ 8.157220] alc5632 0-001e: asoc: failed to add kcontrol Left Headphone Mux&lt;br /&gt;
[ 8.162891] alc5632 0-001e: asoc: failed to add kcontrol SpeakerOut Mux&lt;br /&gt;
[ 8.168566] alc5632 0-001e: asoc: failed to add kcontrol AuxOut Mux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Они появляются из функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-dapm.c#line489 dapm_new_mux] (в нее ошибка приходит от [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/core/control.c#line326 snd_ctl_add]). Интересно то, что на '''SpeakerOut N Mux''' ругани нет ([https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line238 список mux'ов]).&lt;br /&gt;
Вот здесь определяется дефайн инициализации, которую используют для контролов: [[@https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/include/sound/soc-dapm.h#line93|SND_SOC_DAPM_MUX]]&lt;br /&gt;
[[@http://www.alsa-project.org/main/index.php/DAPM|DAPM]] - Dynamic Audio Power Management, используется для включения/выключения аудиоустройств для экономии энергии на портативных девайсах.&lt;br /&gt;
Сигнатура SND_SOC_DAPM_MUX:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols)&lt;br /&gt;
wname const char* Name to give to the widget.&lt;br /&gt;
wreg unsigned int Register to modify when turning the DAC on or off&lt;br /&gt;
wshift unsigned int Bit in register to modify when turning the DAC on or off&lt;br /&gt;
winvert unsigned int Is the control inverted? If set to 1, setting the bit turns the DAC off&lt;br /&gt;
wcontrols ???&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Код ошибки 16: '''EBUSY''' /* Device or resource busy */, ошибка выпадает в этой проверке: [[@https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/core/control.c#line338|sound/core/control.c#line338]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (snd_ctl_find_id(card, &amp;amp;id)) {&lt;br /&gt;
    up_write(&amp;amp;card-&amp;gt;controls_rwsem);&lt;br /&gt;
    snd_printd(KERN_ERR &amp;quot;control %i:%i:%i:%s:%i is already present\n&amp;quot;,&lt;br /&gt;
              id.iface,&lt;br /&gt;
              id.device,&lt;br /&gt;
              id.subdevice,&lt;br /&gt;
              id.name,&lt;br /&gt;
              id.index);&lt;br /&gt;
    err = -EBUSY;&lt;br /&gt;
    goto error;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Видимо, устройства уже инициализированы до этого. Если так, то нужно найти, где они инициализируются и проверить, все ли в порядке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ 40.211708] spk event: 2&lt;br /&gt;
[ 46.076741] spk event: 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Эти два сообщения выводятся из функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line134 paz00_event_int_spk], которая на данный момент ничего не делает (за исключением вывода сообщения :) ) Очень похоже, что это события для обработки драйвером включения/выключения спикера.&lt;br /&gt;
&lt;br /&gt;
Файл [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c paz00.c] описывает процесс инициализации звука на платформе ''paz00''. Принцип регистрации драйвера и вызова основной probe функции аналогичен остальным модулям (более детально описано выше).&lt;br /&gt;
В качестве основной probe функции выступает [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line251 tegra_snd_paz00_probe]. В этой функции происходит проверка платформы. Далее получаются значения различных &amp;quot;клоков&amp;quot; - [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/tegra_asoc_utils.c#line106 tegra_asoc_utils_init]. Потом идет какая-то внутренняя магия и затем регистрация звуковой карты функцией [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3287|snd_soc_register_card]].&lt;br /&gt;
В какой именно последовательности дальше вызываются функции я пока не понял. В структуре, описывающей карту ([[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line245|snd_soc_paz00]]) содержится указатель на структуру [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line234|paz00_alc5632_dai]], которая в свою очередь содержит указатель на функцию инициализации ([[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line170|paz00_asoc_init]]) и на структуру с функциями операций - [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line103|paz00_asoc_ops]] (в нашем случае заполнено только одно поле '''hw_params''', которое указывает на [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line39 paz00_asoc_hw_params]).&lt;br /&gt;
[[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line170|paz00_asoc_init]] - добавляет контролы и пины.&lt;br /&gt;
[https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line39 paz00_asoc_hw_params] - получает '''srate''', на его основе рассчитывает '''mclk''' затем на основе этих значений зовет [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/tegra_asoc_utils.c#line30 tegra_asoc_ustils_set_rate]. Затем выставляются форматы. В конце, если '''mclk''' отличается от того, что был по умолчанию зовется [[@http://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line3090|snd_soc_dai_set_sysclk]]&lt;br /&gt;
&lt;br /&gt;
Интеграция paz00 и alc5632 судя по всему происходит в функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/soc-core.c#line2079 soc_new_pcm]. Из нее в dmesg попадает сообщение '''&amp;quot;asoc: alc5632-hifi &amp;lt;-&amp;gt; tegra-i2s.0 mapping ok&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
dmesg с дебажными сообщениями - [http://ac100.wikispaces.com/file/view/music_dmesg_debug.txt/249973974/music_dmesg_debug.txt music_dmesg_debug.txt]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ 20.853311] snd_ctl_add: add control Route&lt;br /&gt;
[ 20.857859] snd_ctl_add, card - id: , shortname: , longname: driver:&lt;br /&gt;
[ 20.862657] control 2:0:0:Route:0 is already present (snd_ctrl_find_id ret db313480, Route)&lt;br /&gt;
[ 20.867439] alc5632 0-001e: asoc: ac100-dbg: failed to add kcontrol Right Headphone Mux, err: -16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
после Route не добавляются контролы. я пытаюсь понять почему.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SND_SOC_DAPM_PGA задает, к какому регистру/биту какой id соответствует. Согласно даташиту в регистре 3e (ALC5632_PWR_MANAG_ADD3 - дополнительный регистр питания 3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SND_SOC_DAPM_PGA(&amp;quot;Left Headphone&amp;quot;, ALC5632_PWR_MANAG_ADD3, 11, 0, NULL, 0),&lt;br /&gt;
SND_SOC_DAPM_PGA(&amp;quot;Right Headphone&amp;quot;, ALC5632_PWR_MANAG_ADD3, 10, 0, NULL, 0),&lt;br /&gt;
SND_SOC_DAPM_PGA(&amp;quot;Left Speaker&amp;quot;, ALC5632_PWR_MANAG_ADD3, 13, 0, NULL, 0),&lt;br /&gt;
SND_SOC_DAPM_PGA(&amp;quot;Right Speaker&amp;quot;, ALC5632_PWR_MANAG_ADD3, 12, 0, NULL, 0),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Контролы==== &lt;br /&gt;
В алсамиксере звук встроенных колонок и наушников регулируется итемами '''Line''' (изначально я полагал, что за громкость динамиков отвечают итемы &amp;quot;Speaker...&amp;quot;) и '''Headphone'''. Эти итемы добавляются в функции [https://gitorious.org/%7Emarvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line984 alc5632_probe] и описаны массивом [https://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c#line94 alc5632_vol_snd_controls] в файле [https://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/codecs/alc5632.c alc5632.c].&lt;br /&gt;
&lt;br /&gt;
... продолжение следует&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Наблюдения=== &lt;br /&gt;
====alsamixer==== &lt;br /&gt;
При включении/выключении итемов '''HPR Mix ADC2HP_R''' и '''.._L''' слышны щелчки в наушниках.&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>