Получение ARM / WM8350 управления звуком и питанием в linux

У меня есть 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, у них нет никаких замечаний по применению или примеров, которые на самом деле полезны что я могу найти, кроме даташита. Я подозреваю, что у меня есть драйверы ядра, это бета-код, потому что они, похоже, не работают должным образом (несколько сообщений об ошибках в журнале ядра о том, что регистры 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) и т. Д. .

Итак, я застрял. Указатели, мысли, подсказки желательны.


person Andrew of Scappoose    schedule 28.06.2014    source источник
comment
Чтобы получить звук, используйте alsamixer для включения Left DAC и Right DAC. Вам нужно будет включить звук PCM и т. Д. Должен быть файл route iirc. Для получения звука все элементы должны быть включены от источника до приемника (динамика).   -  person artless noise    schedule 01.07.2014
comment
Хотя компания довольно много хвастается своей поддержкой под Linux ... На мой взгляд, есть несколько компаний, которые лучше, чем Wolfson, поддерживают Linux и пишут понятную документацию. Другое дело, Sony и их версия Linux.   -  person artless noise    schedule 01.07.2014
comment
Кроме того, похоже, что Sony нарушает GPL? Им необходимо предоставить файл .config, который используется для генерации ядра Linux для вашего PRS900. Т.е. все для построения проекта. Я не вижу .config внутри архива Linux. Вы знаете, где он находится?   -  person artless noise    schedule 02.07.2014


Ответы (1)


Я хотел бы немного изменить ваш вопрос.

Как работает управление питанием Linux ASOC (система alsa на кристалле)?

Я отвечу на этот вопрос, а затем дам несколько советов по использованию этого конкретного чипа.


.. Если я сделаю cat /sys/power/state, он вернет слово "mem" и ничего больше. У файла есть права доступа -rw-r - r--, так что потенциально он может быть записан, но я не знаю с помощью каких. Строка «mem» не существует нигде в исходном коде для драйверов wm8350pm, поэтому я даже не знаю, является ли / sys / power / state частью исходного кода.

Вам необходимо получить представление о Модель драйвера Linux. Оборудование в Linux имеет древовидную структуру. Рационально то, что вещи должны включаться / выключаться в определенной последовательности. Например, не следует выключать контроллер шины PCI перед выключением периферийных устройств PCI. Linux строит дерево оборудования, и каждый драйвер (код) и устройство (данные / фактическое оборудование) имеет конкретные обратные вызовы / указатели на функции, которые обрабатывают некоторые конкретные задачи.

  1. probe - Ты там? Определяет наличие фактического оборудования / устройства.
  2. remove - выключает устройство. Удаление модуля, отключение питания и т. Д.
  3. suspend - засыпаю.
  4. resume - просыпаюсь.

Три и четыре могут показаться вам интересными. Теперь, чтобы прочитать о том, что _ 6_ примерно. Текст mem означает, что приостановка в памяти поддерживается вашей системой. В этом режиме Linux выполняет следующие действия:

  1. Найдите активный автобус самого низкого уровня.
  2. suspend устройств на этой шине.
  3. suspend и деактивируйте.
  4. Если шина активна, перейдите к шагу 1.
  5. Установите для ЦП состояние низкого энергопотребления (приостановить в ОЗУ).

Это не совсем полная история. Некоторые устройства могут поддерживать пробуждение. У них будут дополнительные функции обратного вызова, чтобы вывести систему из спящего режима. Прочтите документацию, чтобы узнать об этом.


Это общая структура управления питанием и драйвер / устройство. Итак, как же структурирована ASOC (система alsa на кристалле)?

Обычно сшиваются три драйвера / устройства.

  1. Кодек - wm8350 в вашем случае. Это включает в себя схему управления усилителем звука и может включать микширование звука и элементы управления источником. Поддерживает цифро-аналоговое и аналоговое-цифровое, обычно через интерфейс i2s. i2s - не единственный интерфейс. Обычно банк регистров управляется через вторичный интерфейс; i2c в случае wm8350.
  2. DAI - см. глава 1.2.18.1 справочного руководства iMx31; Freescale называет это оборудование SSI. Следующая глава, посвященная AUDMUX, также полезна для понимания поддержки звука в iMx31 / 32.
  3. Машинный файл - это маршрутизация платы. Он связывает DAI с кодеком и является родительским для обоих. Он предоставляет информацию о тактовой частоте платы и другую конкретную конфигурацию. Например, он может использовать AUDMUX для маршрутизации физических контактов к блоку SSI.
  4. Интерфейс i2c (или SPI) от драйвера кодека для отправки команд управления кодированной микросхеме. Некоторые микросхемы могут использовать дурацкий интерфейс i2s или что-то еще для управления (но не в вашем случае).

Теперь, если вы это поняли, вы увидите, что некоторые функции wm8350, похоже, нарушают модель Linux. Интерфейс DAI можно остановить (цифровое аудио), но интерфейс i2c должен оставаться активным для программирования регистров, связанных с функциями питания в кодеке / PMIC (ИС управления питанием).

Последняя версия WM8350 называет IC a многофункциональное устройство и поддержка появилась в версии 2.6.35. Первоначальная поддержка могла не включать функции WM8350. К сожалению, без некоторых подробностей о компоновке платы Sony prs900 было бы трудно понять, как использовать функциональные возможности WM8350 PMIC. Код будет включать процессор iMx31, WM8350, соединение i2c и, возможно, некоторые схемы источника питания.

Конечно, вы можете просто попробовать echo mem > /sys/power/state и посмотреть, что из этого получится. Если получится, то вам повезло. Энергопотребление / потребление тока в спящем режиме может быть неоптимальным, но его, вероятно, будет сложно исправить с помощью ядра 2.6.23. Вам нужно будет просмотреть каталоги / sys на предмет источников пробуждения и, возможно, зарегистрировать их, прежде чем вводить команду приостановить в памяти.

Я не могу понять, как читать информацию о состоянии батареи / линии питания, как заставить аудиочип воспроизводить звук и т. Д ... хотя я некоторое время изучаю модули ядра ...

Судя по приведенным выше обсуждениям, статус батареи и powerline, вероятно, будет обнаружен через другое устройство. Однако файл pmic_reg может фактически давать статус, если все правильно подключено на плате.

аудиочип будет использовать ALSA. Для настройки аудиомаршрутов через кодек необходимо использовать alsamixer или командную строку amixer, чтобы канал DAI (PCM от iMx32) маршрутизировался и отправлялся на динамик. . Для минимизации энергопотребления обычно по умолчанию все выключено. Файлы / dev / dsp совместимы только с OSS. Эта конфигурация будет изначально поддерживать ALSA. По возможности лучше использовать ALSA.

Сделайте пожертвование в OSF и получите налоговую квитанцию, если это было достаточно полезно.

person artless noise    schedule 01.07.2014
comment
Еще один вопрос типа xy на модели устройства Linux. - person artless noise; 01.07.2014
comment
Мне пришло в голову, что управление питанием - это очень перегруженная фраза. Вся электроника использует питание. SOC dapm doc содержит дополнительную информацию о том, почему вам нужно активировать элементы управления ALSA. Также см. Все документы ASOC для общего ознакомления. wm8350 сбивает с толку, добавляя поддержку PMIC (другой тип мощности). - person artless noise; 01.07.2014