У меня есть root-права Sony prs900 с ядром linux 2.6.23 # 2 PREEMPT для ARMv6. (Ядро Montavista linux). У меня проблемы с выяснением того, как работает управление питанием, как для работы системы, так и для включения и выключения аудиопорта. Я не могу понять, как читать информацию о состоянии батареи / линии питания, как заставить аудиочип воспроизводить звук и т. Д ... хотя я некоторое время изучаю модули ядра ...
Это стоит небольших денег за помощь, скажем, пожертвование 100 долларов через PayPal на электронную почту (или больше, если это займет много времени ...) для первого человека, который сможет объяснить мне, как это сделать так, чтобы это работало. Например: считайте состояние батареи и измените некоторые режимы питания, такие как включение / выключение аудиоусилителей, чтобы звук, воспроизводимый в /dev/dsp
(эмуляция oss), фактически воспроизводился как звук, а не просто потреблялся чипом и игнорировался ...
Фактическое ядро sony и двоичные пакеты инструментов кросс-компилятора расположены на главной страница. Фактический исходный код ядра также доступный.
Что я сам до сих пор узнал:
Sony использует аудиодрайвер wolfson micro WM8350 и микросхему зарядного устройства / управления питанием для обеспечения всей мощности системы; например: он может отключать / включать карты памяти SD, передавать больше энергии на процессор, включать усилители звука и т. д. См .: Техническое описание WM8350.
По сути, вся проблема заключается в том, чтобы заставить работать драйверы ядра WM8350 ... Хотя компания довольно много хвастается своей поддержкой в Linux, у них нет никаких замечаний по применению или примеров, которые на самом деле полезны em> что я могу найти, кроме даташита. Я подозреваю, что у меня есть драйверы ядра, это бета-код, потому что они, похоже, не работают должным образом (несколько сообщений об ошибках в журнале ядра о том, что регистры wm8350 не читаются, происходят при каждой загрузке, даже при запуске только собственного программного обеспечения sony ... ).
Исходный код драйвера ядра, представляющий наибольший интерес, находится в: linux-2.6.23_091126 / drivers / mxc / pmic / {core, wm8350} Обратите внимание, wm8350 является конкурентом MC14783, но драйверы ядра Linux используют тот же {core } исходный код драйвера для обоих чипов; У Sony есть ТОЛЬКО wm8350 - нет MC14783.
Код, который я больше всего хочу понять, как заставить работать, находится в подкаталоге {wm8350}, например: wm8350 / wm8350pm / power_supply_sysfs.c.
Я хочу, чтобы звук тоже включился, но я еще не совсем уверен, где находится соответствующий код аудиоусилителя ...
Совершенно очевидно, что код wm8350pm предназначен для экспорта интерфейса каталога / sys; сейчас / sys смонтирован и работает в системе; но я не очень знаком с семантикой этих интерфейсов нового стиля ... они не совсем похожи на старые интерфейсы питания APM для ноутбуков с Linux ...
Сначала я проверил очевидное: если я сделаю «cat / sys / power / state», он вернет слово «mem» и ничего больше. У файла есть права доступа -rw-r--r--
, поэтому потенциально он может быть записан, но я не знаю какими. Строка «mem» не существует нигде в исходном коде для драйверов wm8350pm, поэтому я даже не знаю, является ли / sys / power / state частью исходного кода.
Выполнение find / sys -iname "wm8350" открывает несколько каталогов с шаблонами: wm8350-rtc, wm8350-pmic, wm8350-bl, wm8350-power, wm8350-led wm8350-hifi-dai , wm8350-кодек wm8350-imx32ads.0
Итак, я использую ls-l для каждого каталога и ищу реальные файлы, а не символические ссылки или подкаталоги, и нахожу бесполезные стандартные файлы с возможностью записи: bind, unbind, uevent,
и очень мало файлов только для чтения: pmic_reg, dapm_widget, modalias, codec_reg, которые не очень полезны.
Неудивительно, что:
Выполнение: cat / sys / devices / platform / wm8350-ebx5016-audi / modalias дает "wm8350-ebx5016-audio"
Выполнение: cat /sys/devices/platform/wm8350-imx32ads.0/modalias дает "wm8350-imx32ads"
и поскольку звук выключен ... Выполнение: cat / sys / devices / platform / wm8350-ebx5016-audi / dapm_widget показывает состояние звука:
Headphone Jack: Off
Line In Jack: On
Mic Bias: Off
Left DAC: Off
Right DAC: Off
... (all else off and omitted except )...
EBX5016-hifi: PM State: D3hot
Я полагаю, что последние два файла должны делать дампы регистров чипа wm8350 ... и один сделал. Выполнение: cat / sys / devices / wm8350-pmic / pmic-reg вызывает долгую паузу, затем ничего не печатается. но: Выполнение: cat / sys / devices / wm8350 / platform / wm8350-ebx5016-audi / wm8350-codec / codec_reg действительно печатает список регистров до e8, который всего на несколько байтов больше, чем указано в таблице данных чипа ( От 0x00 до 0xe6).
Я попытался использовать программу python для воспроизведения файлов wav (работает на моем настольном компьютере) и заметил, что / dev / dsp действительно открывается, микшеры DO устанавливают уровни громкости, и ничего не выходит. Итак - аудиодрайвер не может автоматически включать усилители звука.
В / dev нет звуковых файлов alsa, и на встроенной машине нет инструментов alsa ... поэтому я предполагаю, что Sony строго использует OSS / dev / dsp и / dev / Mixer.
Я могу найти только одну точку доступа к ws8350: там ЕСТЬ драйвер устройства / dev / wm8350.
Этот драйвер создан исходным кодом в подкаталоге wm8350 / wm8350_reg.c; теоретически он должен иметь возможность читать и писать во все регистры, используя вызовы ioctls () из пользовательского пространства. Однако что-то кажется совершенно неправильным, потому что я написал тестовую программу для чтения регистров wm8350 ... и большинство регистров возвращают сообщения об ошибках, а не разрешают чтение, включая большинство регистров идентификатора Pulic (0x00, 0x01) и т. Д. .
Итак, я застрял. Указатели, мысли, подсказки желательны.