ALSA: Какой API для наушников?

Могу ли я обнаружить вставку и удаление гарнитуры, используя Alsa API? Какой API я должен использовать? Мое ядро ​​3.0 Linux работает на ARM.

1 ответ

Решение

Желая получить именно эту функциональность для встраиваемого проекта, я провел несколько исследований и пришел к выводу (около 6 месяцев назад), что в ALSA нет никакой общей поддержки для обнаружения вставки разъемов.

Интересно, что я обнаружил поддержку обнаружения наушников (и микрофона) в используемом мной драйвере кодека (tlv310aic3xxx), но, похоже, он не подключен ни к каким верхним уровням. Я подозреваю, что причиной этого является Android.

Существуют два основных способа добавления этой поддержки:

  1. Добавить поддержку драйвера кодека - возможно, sysfs узел, который может блокировать что-то в пользовательском пространстве.

  2. Принудительно получить доступ к шине I2C, на которой установлен кодек (драйвер кодека обычно "владеет" устройством), и запрограммировать соответствующие регистры из пространства пользователя.

Вы можете столкнуться с дополнительной архитектурной проблемой, заключающейся в том, что, хотя кодек может обнаруживать события вставки, ему необходим какой-то способ прерывания работы процессора. Устройства tlv310aic3xxx имеют программируемые выводы GPIO, которые могут подключаться к линии прерывания на главном ЦП (если на встроенной платформе это будет другая линия GPIO). Без этого вам нужно будет опросить его.

Другие вопросы по тегам