Проблема: «Невозможное» управление питанием
Разработчики 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 ↗