1

Linux デバイス ドライバーを作成しており、デバイス ツリー ファイルで次のクロック ツリーを定義する必要があります。

Linux、共通クロック フレームワーク、クロック ツリー

注: マルチプレクサーのオシレーターの選択は、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 制御クロック マルチプレクサーを定義するにはどうすればよいですか?

4

4 に答える 4

1

現在のカーネルはそれをサポートしていません。独自のカーネル モジュールを作成する必要があります。

于 2015-05-22T13:42:16.007 に答える
1

マルチプレクサを使用して、親クロックの 1 つ (osc22 または osc24) を選択できます。ただし、ドライバーでプロパティ「mux-clock」の独自のバインドを記述する必要があります。

以下のリンクが直接役立つかどうかはわかりませんが、参照してください: https://www.kernel.org/doc/Documentation/devicetree/bindings/clock/ti/mux.txt

上記のリンクは、DT で使用されるマルチプレクサ バインディングを定義します。

ここで、mux バインディング「ti,mux-clock」は、一般的な clk フレームワークに従ってドライバーで定義されます: http://lxr.free-electrons.com/source/drivers/clk/ti/mux.c

バインディングを実装する方法について、いくつかのアイデアを導き出すことができるかもしれません。

于 2015-08-02T15:37:03.087 に答える