Я пишу драйвер Линукс и нужно определить следующие часы-дерево в виде дерева устройства файла:Как определить мультиплексор часов в дереве устройств в ядре Linux
Примечание: Выбор генератор в мультиплексоре осуществляется путем вытягивания выходного сигнала высокого или низкого уровня. Генератор тактовых импульсов запрограммирован через I2C.
Вот пример того, что я до сих пор:
clocks {
/* fixed clock oscillators */
osc22: oscillator22 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <22579200>;
};
osc24: oscillator24 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24576000>;
};
/* clock multiplexer
* I'm afraid the following is not going to work :(?
*/
mux: multiplexer {
compatible = "mux-clock"; /* <-------- ??? */
clocks = <&osc22>, <&osc24>; /* parent clocks */
};
};
i2c1 {
/* clock generator */
si5351: [email protected] {
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <1>;
compatible = "silabs,si5351c";
reg = <0x60>;
clocks = <0>, <&mux>;
clock-names = "xtal", "clkin";
status = "okay";
clkout0 {
reg = <0>;
silabs,disable-state = <2>;
silabs,clock-source = <3>;
};
};
};
Ссылки:
- Clock Bindings
- Binding for simple fixed-rate clock sources
- Binding for Silicon Labs Si5351a/b/c programmable i2c clock generator
Как определить простой тактовый мультиплексор gpio- в дереве устройств?
Спасибо за ваш ответ. Si5351c имеет две ссылки на часы, xtal и clkin. Первые часы из списка часов DT используются как xtal ref, второй - как clkin ref, другие будут проигнорированы. Изменение родительских часов для clkin во время выполнения с использованием 'clk_set_parent()' не выполняется. – sergej
Функция 'si5351_pll_set_parent' делает фактическое повторение. Я не знаю конкретного случая использования, с которым вы боретесь, хотя из драйвера я могу сказать, что поставщик часов для точного устройства может вызывать 'clk_set_parent()' для повторения часов. – 0andriy