ALSA: Какой API для наушников?
Могу ли я обнаружить вставку и удаление гарнитуры, используя Alsa API? Какой API я должен использовать? Мое ядро 3.0 Linux работает на ARM.
1 ответ
Желая получить именно эту функциональность для встраиваемого проекта, я провел несколько исследований и пришел к выводу (около 6 месяцев назад), что в ALSA нет никакой общей поддержки для обнаружения вставки разъемов.
Интересно, что я обнаружил поддержку обнаружения наушников (и микрофона) в используемом мной драйвере кодека (tlv310aic3xxx), но, похоже, он не подключен ни к каким верхним уровням. Я подозреваю, что причиной этого является Android.
Существуют два основных способа добавления этой поддержки:
Добавить поддержку драйвера кодека - возможно,
sysfs
узел, который может блокировать что-то в пользовательском пространстве.Принудительно получить доступ к шине I2C, на которой установлен кодек (драйвер кодека обычно "владеет" устройством), и запрограммировать соответствующие регистры из пространства пользователя.
Вы можете столкнуться с дополнительной архитектурной проблемой, заключающейся в том, что, хотя кодек может обнаруживать события вставки, ему необходим какой-то способ прерывания работы процессора. Устройства tlv310aic3xxx имеют программируемые выводы GPIO, которые могут подключаться к линии прерывания на главном ЦП (если на встроенной платформе это будет другая линия GPIO). Без этого вам нужно будет опросить его.