Сообщение от
kvnik
Скрытый текст
Offтопик:
Интересно, set_rate для clock_mux не поддерживается (в их коде написано). У меня получилось так (в твоих определениях): передаю в i2s_tdm clkin_i2s1, osc44m, osc48m, в hw_params по сетке делаю clk_set_parent(clkin_i2s1,osc4?m), mclk_fs не использую. Работает.
Если использовать только один fixed-clock, код вообще не надо править (для rk3308). (Я и не планировал два гена, только 44.1).
По хорошему, веточку для Rockchip отдельную
[свернуть]
Offтопик:
set_rate, в глубине, для MUX вызывает функцию
clk_mux_determine_rate_flags, в ней перебирает родителей, которые могут обеспечить заданную частоту и определяет наиболее подходящего. В моем случае нужную частоту обеспечивал либо clk_i2s1_div, либо clk_i2s1_frac, поэтому претендент всегда находился до проверки clkin_i2s1.
Такая штука как clk_set_parent(clkin_i2s1,osc4?m) не пройдет, так как между ними в иерархии стоит i2s1_pre, поэтому у меня и стоит что-то типа: clk_set_parent(get_parent(clkin_i2s1),osc4?m).
То, что у меня две сетки с переключением по GPIO, никак не меняет ситуации, с одной на 44100 было ровно так же. На rk3308 я не смотрел, может там есть какие-то отличия, что позволяют сделать так, как у тебя.
Социальные закладки