А нет какого-то универсального способа сделать дамп?) или нужно где-то в модуле делать дамп вручную?
Вообще устанавливается формат 16bit LE 44100 master=0, а так же записывается sysclk, но что именно записывается смогу показать чуть позже...
Хм............ Тогда довольно странно. Вряд ли это настройка нувотона..... а точно должен быть меандр?
Это смотря чем смотреть. Щупы с большой емкостью могут меандр высокой частоты в синус превратить. У меня тоже "синус" на входе кодека, но все работает.
В моей схеме по рекомендации производителя кодека на сигналаы LRCK и BCK поставлены емкости по 20 пФ, а на MCLK резистор 47 Ом.
Если процессор выдает данные, а кодек их не воспринимает, то тут возможны следующие варианты:
1. Кодек неправильно сконфигурирован. Нужно смотреть регистры. Проще всего вставить вывод дампа (или ключевых регистров) прямо в код драйвера.
2. Кодек игнорирует настройки. Так было в моем случае. Кодек просто не воспринимал установки пока на него не будет подана тактовая. Пришлось использовать другой сигнал тактирования (который присутствует постоянно) и использовать PLL.
3. Кодек неисправен.
Честно говоря вообще какая-то ерунда получается. Не выставляется длинна слова (регистр 0х16), а так же регистр состояния (рег. 0х1Е).
С последним, не вообще ясно. Есть функция "wm8804_set_bias_level" которая переключает состояния. При инициализации, он записывает в регистр "standby", при этом ядро вываливалось при загрузке с сообщением о том, что оно не может принять никакое значенение кроме "off". Что я благополучно и заменил...
Я так понимаю, если у нас standby, то alsa сама должна выставлять состояние на on тогда когда это нужно, но этого не происходит.
Вообщем, получается что у меня кодек находится постоянно в состоянии powerdown, а я еще хочу добиться от него данных.
собственно, продолжаются мои скитания в поисках правильного решения по впиливаю кодека wm8804. Мои догадки состоят в следующем:
После загрузки драйверов ALSA вводит в состояние bias_off всю аудиоподсистему, я это вижу по сообщениям:
Но по идее, когда я пытаюсь воспроизвести что-то, оно должно включать его обратно... или я чего-то непонимаю.
Это объясняет, то что звука из wm8804 нет, хотя iis поток идет, это видно осцилографом. Так же эта теория подтверждается выдержкой из даташита, в котором говорится о том, что в hardware control mode все функциональные блоки включаются после сброса(я вижу что светится оптический передатчик и приемник захватывает сигнал), тогда как в software control mode все выключено и нужно включать все в ручную(опт. передатчик не светится).
Вообще плохо понимаю как должна работать ALSA. Но оживить пока не получилось, я даже пытался поднять устройство на probe и в set_bias_level ниделать ничего, но тоже не вышло...что-то здесь глубже или я вообще не туда смотрю.