<?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%BF%D0%BE%D1%81%D0%BB%D0%B5_%D1%81%D0%B0%D1%81%D0%BF%D0%B5%D0%BD%D0%B4%D0%B0</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%BF%D0%BE%D1%81%D0%BB%D0%B5_%D1%81%D0%B0%D1%81%D0%BF%D0%B5%D0%BD%D0%B4%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D1%81%D0%B0%D1%81%D0%BF%D0%B5%D0%BD%D0%B4%D0%B0&amp;action=history"/>
	<updated>2026-05-02T13:46:37Z</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%BF%D0%BE%D1%81%D0%BB%D0%B5_%D1%81%D0%B0%D1%81%D0%BF%D0%B5%D0%BD%D0%B4%D0%B0&amp;diff=48&amp;oldid=prev</id>
		<title>Unknown user в 08:13, 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%BF%D0%BE%D1%81%D0%BB%D0%B5_%D1%81%D0%B0%D1%81%D0%BF%D0%B5%D0%BD%D0%B4%D0%B0&amp;diff=48&amp;oldid=prev"/>
		<updated>2014-10-15T08:13:04Z</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;Это одна из двук наиболее актуальных проблем. Вторая - неправильное управление питанием (в частности нужно будет выкидывать функцию android_inits).&lt;br /&gt;
&lt;br /&gt;
'''Что мы имеем'''&lt;br /&gt;
После суспенда не работает звук. Ни в наушниках, ни в колонках. Мне с этой проблемой помогла справиться перезагрузка модулей snd_soc_tegra_paz00 и snd_soc_alc5632&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rmmod snd_soc_tegra_paz00&lt;br /&gt;
sudo rmmod snd_soc_alc5632&lt;br /&gt;
sudo modprobe snd_soc_alc5632&lt;br /&gt;
sudo modprobe snd_soc_tegra_paz00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Однако ogra сказал, что ему это не помогало. Он пробовал различные комбинации и даже выгружал все до модуля snd. leonro также не помогла перезагрузка модулей.&lt;br /&gt;
&lt;br /&gt;
'''План действий'''&lt;br /&gt;
 * заставить суспенд вызыватся&lt;br /&gt;
 * застащитх звук работать после суспенда&lt;br /&gt;
 * заставить работать микрофон&lt;br /&gt;
 * выкинуть андроид_инит&lt;br /&gt;
 * почистить срач&lt;br /&gt;
&lt;br /&gt;
UPD: leonro сделал вызов нашей функции суспенда (alc5632_suspend) форсированным и добавил принудительное сохранение регистров в кеше. На резьюме звук появился.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Epic fail'''&lt;br /&gt;
Есть два способа получить регистры звуковухи:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -t debugfs none /sys/kernel/debug&lt;br /&gt;
cat /sys/kernel/debug/asoc/tegra-paz00/alc5632.0-001e/codec_reg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и утилита [http://stuw.narod.ru/ac100/tools/alc-ctl alc-ctl] (исходный код [http://stuw.narod.ru/ac100/tools/alc-ctl.c alc-ctl.c]), читающая (и способная записать) регистры через i2c девайс.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo modprobe i2c-dev&lt;br /&gt;
sudo ./alc-ctl /dev/i2c-0 r 26&lt;br /&gt;
sudo ./alc-ctl /dev/i2c-0 w 26 000f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Самый большой облом оказался в том, что эти два способа дают нам разный результат. Полагаю лечше использовать alc-ctl.&lt;br /&gt;
&lt;br /&gt;
'''Делаем дамп регистров'''&lt;br /&gt;
full-dump.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for reg in `seq 0 2 96 | xargs -L1 -I% echo &amp;quot;obase=16; %&amp;quot; | bc | tr '[:upper:]' '[:lower:]'` ; do&lt;br /&gt;
    sudo ./alc-ctl /dev/i2c-0 r $reg&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./full-dump.sh &amp;gt; x01-before-playback.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Первая цель (ГОТОВО)''' - получить дамп регистров до саспенда и после (я нашел проблему с разным результатом дампа недавно и не имел возможности сделать его самостоятельно).&lt;br /&gt;
http://dl.dropbox.com/u/36754970/x01-after-playback.txt&lt;br /&gt;
http://dl.dropbox.com/u/36754970/x01-after-suspend.txt&lt;br /&gt;
http://dl.dropbox.com/u/36754970/x01-after-suspend-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
02: 8080        02: 0000 - Speaker Output Volume&lt;br /&gt;
06: 8080    06: 9c9c - AUXOUT Volume&lt;br /&gt;
08: c800    08: c000 - Phone Input&lt;br /&gt;
0a: e808    0a: e000 - LINE_IN Volume&lt;br /&gt;
0c: 1010    0c: 0c0c - STEREO DAC Input Volume&lt;br /&gt;
0e: 0808    0e: 0000 - MIC Input Volume&lt;br /&gt;
10: ee0f    10: e801 - Stereo DAC and MIC Routing Control&lt;br /&gt;
12: cbcb    12: dcdc - ADC Record Gain&lt;br /&gt;
14: 7f7f    14: 3f3f - ADC Record Mixer Control&lt;br /&gt;
18: e010    18: e035 - Voice DAC Volume&lt;br /&gt;
1c: 8008    1c: 0b88 - Output Mixer Control&lt;br /&gt;
22: 0000    22: 0a00 - Microphone Control&lt;br /&gt;
24: 00c0    24: 00c7 - Codec Digital MIC / Digital Boost Control&lt;br /&gt;
26: ef00    26: 000c - Power Down Control/Status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Вторая цель (ГОТОВО)''' - попробовать сохранять регистры в кэш прямо перед суспендом.&lt;br /&gt;
По словам leonro сохранение регистров не помогло. '''UPD''' не вызывалась функция суспенда. Поменяли на принудительный вызов и внутри стали сохранять регистры - после резбюма звук заработал.&lt;br /&gt;
Savalik: Тащем-та получить какой либо вывод так и не удалось. То ли alc5632_suspend и resume сами не вызываются..(не успевают вызываться) то ли нужен какой то фокус чтобы услышать ответ от туда. Stuw, ну ты понял. &amp;lt;-- была попытка добавить дамп регистров в лог, но никаких записей не появилось. Возможно проблемы с переводом драйвера в суспенд.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;leonro&amp;gt; если в кратце, то глобальный суспенд вызывает с SND_SOC_BIAS_ON&lt;br /&gt;
&amp;lt;leonro&amp;gt; поэтому вот этот свитч&lt;br /&gt;
&amp;lt;leonro&amp;gt; switch (codec-&amp;gt;dapm.bias_level) {&lt;br /&gt;
&amp;lt;leonro&amp;gt; не запускает нан суспенд&lt;br /&gt;
&amp;lt;leonro&amp;gt; теперь надо понять, почему alc5632_set_bias_level не вызывается&lt;br /&gt;
&amp;lt;leonro&amp;gt; это дифф, только он загаже&lt;br /&gt;
&amp;lt;leonro&amp;gt; загаже&lt;br /&gt;
&amp;lt;leonro&amp;gt; загажен&lt;br /&gt;
&amp;lt;leonro&amp;gt; http://paste.ubuntu.com/707283/&lt;br /&gt;
&amp;lt;leonro&amp;gt; а это греп на лог&lt;br /&gt;
&amp;lt;leonro&amp;gt; http://paste.ubuntu.com/707286/&lt;br /&gt;
&amp;lt;stuw&amp;gt; спасибо&lt;br /&gt;
&amp;lt;stuw&amp;gt; leonro, а ты запускал проигрывание музыки?&lt;br /&gt;
&amp;lt;leonro&amp;gt; да&lt;br /&gt;
&amp;lt;stuw&amp;gt; у нас при попытке суспенда карточка находится в состоянии ON, хотя функция суспенда ожидает STANDBY или OFF.&lt;br /&gt;
&amp;lt;leonro&amp;gt; ага&lt;br /&gt;
&amp;lt;stuw&amp;gt; по идее у нас должно быть в дмесг сообщение CODEC is on over suspend&lt;br /&gt;
&amp;lt;leonro&amp;gt; нет, не должен&lt;br /&gt;
&amp;lt;leonro&amp;gt; зависит от дебаг левел&lt;br /&gt;
&amp;lt;stuw&amp;gt; ах да, там не просто принтк&lt;br /&gt;
&amp;lt;stuw&amp;gt; возможно нам надо DAMP виджеты править, чтобы правильно звуковуха переходила между состояниями&lt;br /&gt;
&amp;lt;leonro&amp;gt; надо надо патчи взять с апстрима, я сделал гит лог на сок-кор.с&lt;br /&gt;
&amp;lt;leonro&amp;gt; у нас&lt;br /&gt;
&amp;lt;leonro&amp;gt; commit 5b54391a00b20031637ab2ced6d211f75d929195&lt;br /&gt;
&amp;lt;leonro&amp;gt; Author: Stephen Warren &amp;lt;swarren@nvidia.com&amp;gt;&lt;br /&gt;
&amp;lt;leonro&amp;gt; Date: Fri Apr 15 13:37:05 2011 -0700&lt;br /&gt;
&amp;lt;leonro&amp;gt; в апстрием&lt;br /&gt;
&amp;lt;leonro&amp;gt; commit f0e8ed858edb327802ee65fd695cc1538286226f&lt;br /&gt;
&amp;lt;leonro&amp;gt; Author: Mark Brown &amp;lt;broonie@opensource.wolfsonmicro.com&amp;gt;&lt;br /&gt;
&amp;lt;leonro&amp;gt; Date: Tue Sep 20 11:41:54 2011 +0100&lt;br /&gt;
&amp;lt;stuw&amp;gt; хм... тоже хорошая идея )&lt;br /&gt;
&amp;lt;leonro&amp;gt; плюс я подвинул codec-&amp;gt;driver-&amp;gt;suspend(codec, PMSG_SUSPEND);&lt;br /&gt;
&amp;lt;leonro&amp;gt; чуть выше, и заработал наш суспенд и резьюм, правда звук нет&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;leonro&amp;gt; в кратце, звук после суспенда заработал&lt;br /&gt;
&amp;lt;stuw&amp;gt; что ты для этого сделал?&lt;br /&gt;
&amp;lt;stuw&amp;gt; в 2-х словах&lt;br /&gt;
&amp;lt;leonro&amp;gt; я пишу :)&lt;br /&gt;
&amp;lt;leonro&amp;gt; сек&lt;br /&gt;
&amp;lt;leonro&amp;gt; подвинул вот эту строчку&lt;br /&gt;
&amp;lt;leonro&amp;gt; 1131 codec-&amp;gt;driver-&amp;gt;suspend(codec, PMSG_SUSPEND);&lt;br /&gt;
&amp;lt;leonro&amp;gt; в snd_soc_suspend наверх&lt;br /&gt;
&amp;lt;leonro&amp;gt; кто-то выставляет&lt;br /&gt;
&amp;lt;leonro&amp;gt; в функции alc5632_set_bias_level&lt;br /&gt;
&amp;lt;leonro&amp;gt; вот это значение SND_SOC_BIAS_ON&lt;br /&gt;
&amp;lt;leonro&amp;gt; вот эта строчка 1105 card-&amp;gt;rtd[i].codec-&amp;gt;dapm.suspend_bias_level = card-&amp;gt;rtd[i].codec-&amp;gt; dapm.bias_level;&lt;br /&gt;
&amp;lt;leonro&amp;gt; из soc_core.c&lt;br /&gt;
&amp;lt;leonro&amp;gt; корочен надо найти и понят кто играется с dapm.bias_level&lt;br /&gt;
&amp;lt;leonro&amp;gt; вот этим я и занимался, время от времени :)&lt;br /&gt;
&amp;lt;stuw&amp;gt; вот эта строчка 1105 card-&amp;gt;rtd[i].codec-&amp;gt;dapm.suspend_bias_level = card-&amp;gt;rtd[i].codec-&amp;gt; dapm.bias_level; &amp;lt;--- она вроде ни на что не влияет, т.к. ниже проверяется bias_level а не suspend_bias_level&lt;br /&gt;
&amp;lt;stuw&amp;gt; ты сохранение регистров добавлял в alc5632_suspend ?&lt;br /&gt;
&amp;lt;stuw&amp;gt; или оно и так заработало?&lt;br /&gt;
&amp;lt;leonro&amp;gt; да, я прогнал&lt;br /&gt;
&amp;lt;leonro&amp;gt; да у меня филл_кеш в суспенд&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Третья цель''' - собрать dmesg с дебажного ядра&lt;br /&gt;
в .config выставить y для:&lt;br /&gt;
CONFIG_DEBUG_KERNEL=y&lt;br /&gt;
а также&lt;br /&gt;
CONFIG_PM_DEBUG=y&lt;br /&gt;
CONFIG_PM_ADVANCED_DEBUG=y&lt;br /&gt;
CONFIG_PM_VERBOSE=y&lt;br /&gt;
CONFIG_PM_SLEEP_ADVANCED_DEBUG=y&lt;br /&gt;
&lt;br /&gt;
Спасибо leonro за принты - http://paste.ubuntu.com/707922/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
282 /* dapm stream operations */&lt;br /&gt;
283 #define SND_SOC_DAPM_STREAM_NOP         0x0&lt;br /&gt;
284 #define SND_SOC_DAPM_STREAM_START       0x1&lt;br /&gt;
285 #define SND_SOC_DAPM_STREAM_STOP        0x2&lt;br /&gt;
286 #define SND_SOC_DAPM_STREAM_SUSPEND     0x4&lt;br /&gt;
287 #define SND_SOC_DAPM_STREAM_RESUME      0x8&lt;br /&gt;
288 #define SND_SOC_DAPM_STREAM_PAUSE_PUSH  0x10&lt;br /&gt;
289 #define SND_SOC_DAPM_STREAM_PAUSE_RELEASE   0x20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[  148.627511] snd_ snd_soc_suspend: capture.stream_name=Capture&lt;br /&gt;
[  148.627558] snd_ soc_dapm_stream_event: widget Right ADC - Right HiFi Capture stream Capture event 4&lt;br /&gt;
[  148.627607] snd_ soc_dapm_stream_event: widget Left ADC - Left HiFi Capture stream Capture event 4&lt;br /&gt;
[  148.627653] snd_ soc_dapm_stream_event: widget Right DAC - Right HiFi Playback stream Capture event 4&lt;br /&gt;
[  148.627700] snd_ soc_dapm_stream_event: widget Left DAC - Left HiFi Playback stream Capture event 4&lt;br /&gt;
[  148.628541] snd_ dapm_power_widgets: Run all the bias changes in parallel&lt;br /&gt;
[  149.109072] snd_ soc_dapm_stream_event: widget Right ADC - Right HiFi Capture stream Playback event 8&lt;br /&gt;
[  149.109139] snd_ soc_dapm_stream_event: widget Left ADC - Left HiFi Capture stream Playback event 8&lt;br /&gt;
[  149.109190] snd_ soc_dapm_stream_event: widget Right DAC - Right HiFi Playback stream Playback event 8&lt;br /&gt;
[  149.109237] snd_ soc_dapm_stream_event: widget Left DAC - Left HiFi Playback stream Playback event 8&lt;br /&gt;
[  149.111545] snd_ dapm_power_widgets: Run all the bias changes in parallel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Т.е. события на suspend-resume приходят, но мы остаемся с неправильным биас левел&lt;br /&gt;
&lt;br /&gt;
Нужно потрейсить функции&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dapm_pre_sequence_async&lt;br /&gt;
dapm_post_sequence_async&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
При суспенде: первая переводит в режим PREPARE (если d-&amp;gt;dev_power = 0), потом меняются значения виджетов, потом вторая переводит из PREPARE в STANBY (что по идее должно позволять суспенд).&lt;br /&gt;
&lt;br /&gt;
[http://ac100.wikispaces.com/file/view/dmesg_suspend_log.txt/265418170/dmesg_suspend_log.txt dmesg_suspend_log.txt]&lt;br /&gt;
[http://ac100.wikispaces.com/file/view/dmesg_suspend_log.patch/265418188/dmesg_suspend_log.patch dmesg_suspend_log.patch]&lt;br /&gt;
В логе видно, что для '''Mic Bias1''' почему-то форсится питание.&lt;br /&gt;
snd_ dapm_power_widgets: force power to 1 for Mic Bias1 &lt;br /&gt;
Из-за этого похоже девайс и остается во включенном состоянии.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;leonro_&amp;gt; закоментирощал вот эти строчки http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line155 и http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line163&lt;br /&gt;
&amp;lt;stuw&amp;gt; leonro_, https://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/sound/soc/tegra/paz00.c#line220&lt;br /&gt;
&amp;lt;stuw&amp;gt; ее не хватает, чтобы мы не уходили в суспенд?&lt;br /&gt;
&amp;lt;stuw&amp;gt; в смысле закоментировать только ее если&lt;br /&gt;
&amp;lt;leonro_&amp;gt; stuw: возможно, я вчера много чего закоментировал :), ...&lt;br /&gt;
Возможно хватит 220 строки, чтобы мы начали в суспенд уходить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Цель четвертая''' - разобраться с колонками&lt;br /&gt;
Вообщем включение колонок после саспенда благодаря leonro было осилено:&lt;br /&gt;
http://pastebin.com/vqimtdcs&lt;br /&gt;
&lt;br /&gt;
Предсонный diff от leonro:&lt;br /&gt;
http://paste.ubuntu.com/708928/&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>