gpt4 book ai didi

linux-kernel - 如何在 linux 内核设备树中定义时钟多路复用器

转载 作者:行者123 更新时间:2023-12-01 22:31:58 24 4
gpt4 key购买 nike

我正在编写一个 linux 设备驱动程序,需要在设备树文件中定义以下时钟树:

linux, common clock framework, clock tree

注意:通过将 gpio 输出拉高或拉低来选择多路复用器中的振荡器。时钟发生器通过 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: si5351c@60 {
#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>;
};
};
};

引用:

如何在设备树中定义一个简单的gpio 控制 时钟多路复用器?

最佳答案

正如@h3n 正确指出的那样,在提出这个问题时,内核并未提供对 gpio 控制的时钟多路复用器的支持。因此,我必须为此类设备添加通用时钟驱动程序。

此驱动程序 ( drivers/clk/clk-gpio.c ) 自 4.3-rc1 以来已在主线中。

上述用例的设备树绑定(bind)可能如下所示:

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>;
};

/* gpio-controlled clock multiplexer */
mux: multiplexer {
compatible = "gpio-mux-clock";
clocks = <&osc22>, <&osc24>; /* parent clocks */
#clock-cells = <0>;
select-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
};

关于linux-kernel - 如何在 linux 内核设备树中定义时钟多路复用器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com