Инструменты4 сентября 2026 г., 22:22 МСК🤖 Auto

Linux 7.4: Apple Silicon Audio и «невозможное» управление питанием

В ядро Linux 7.4 войдут патчи James Calligeros, использующие общую инфраструктуру GPIO для исправления критических проблем с управлением питанием аудиокодеков на Apple Silicon.

Проблема: «Невозможное» управление питанием

Разработчики Asahi Linux долгое время сталкивались с архитектурным тупиком при работе с аудиокодеками на чипах M-series. На Mac с Apple Silicon выводы программного отключения (shutdown pins) всех аудиокодеков физически подключены к одной и той же линии GPIO. Эта линия должна оставаться в высоком уровне (high), пока любой кодек требует её активации.

Стандартный цикл suspend/resume приводил к конфликтам: первый приостановленный кодек опускал линию в низкий уровень, что приводило к преждевременному отключению последующих кодеков до того, как ядро успевало кэшировать их состояние регистров. Раньше разработчики обходили это, используя API регуляторов (regulator API) как виртуальный прокси, но это было «костылем».

Решение: Shared GPIO Infrastructure

Патчи, подготовленные Джеймсом Каллигеросом (James Calligeros), интегрируют новую инфраструктуру Shared GPIO в ветку драйверов Apple SoC для включения в Linux 7.4. Это позволяет нескольким драйверам безопасно разделять одну линию GPIO, отслеживая состояние каждого потребителя.

Ключевая сложность заключалась в инициализации. Инфраструктура Shared GPIO считает первое изменение состояния лини «дефолтным». Поскольку драйверы TAS2764 и TAS2770 изначально выставляли линию в high, первое изменение шло в low, что блокировало повторную активацию лини при пробуждении, пока все кодеки не перейдут в активное состояние. Решение оказалось элегантным:

  • Драйверы были изменены так, чтобы явно выставлять линию в low при инициализации (probe).
  • Это делает первое изменение состояния переходом из low в high.
  • Shared GPIO корректно обрабатывает это как запрос на активацию, позволяя лини подниматься, когда нужен хотя бы один кодек, и опускаться только когда все кодеки завершили работу.

Технические детали и метрики

Новая архитектура заменяет устаревший подход с виртуальными регуляторами, делая код ядра чище и ближе к upstream-стандартам. Ниже приведено сравнение подходов до и после внедрения патчей:

Параметр До Linux 7.4 (Asahi Downstream) В Linux 7.4 (Upstream)
Механизм разделения GPIO Виртуальный регулятор (Regulator API proxy) Нативная Shared GPIO инфраструктура
Логика состояния Ручное управление через свойства DeviceTree Автоматический учет потребителей лини
Инициализация TAS2764/TAS2770 High (приводила к конфликтам) Low (корректно обрабатывается как старт)
Статус в ядре Кастомные патчи Asahi Запланировано в Apple SoC driver branch

Значение для сообщества

Интеграция этих патчей в Linux 7.4 (ожидаемой осенью 2026 года) означает, что поддержка аудио на Apple Silicon перестанет быть эксклюзивной особенностью форка Asahi Linux. Разработчики получат более стабильное управление питанием без необходимости поддерживать разрозненные патчи, что критически важно для стабильности работы Mac на Linux.

Источник: Phoronix ↗