Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Binding for TI mux clock.

Binding status: Unstable - ABI compatibility may be broken in the future

This binding uses the common clock binding[1].  It assumes a
register-mapped multiplexer with multiple input clock signals or
parents, one of which can be selected as output.  This clock does not
gate or adjust the parent rate via a divider or multiplier.

By default the "clocks" property lists the parents in the same order
as they are programmed into the regster.  E.g:

	clocks = <&foo_clock>, <&bar_clock>, <&baz_clock>;

results in programming the register as follows:

register value		selected parent clock
0			foo_clock
1			bar_clock
2			baz_clock

Some clock controller IPs do not allow a value of zero to be programmed
into the register, instead indexing begins at 1.  The optional property
"index-starts-at-one" modified the scheme as follows:

register value		selected clock parent
1			foo_clock
2			bar_clock
3			baz_clock

The binding must provide the register to control the mux. Optionally
the number of bits to shift the control field in the register can be
supplied. If the shift value is missing it is the same as supplying
a zero shift.

[1] Documentation/devicetree/bindings/clock/clock-bindings.txt

Required properties:
- compatible : shall be "ti,mux-clock" or "ti,composite-mux-clock".
- #clock-cells : from common clock binding; shall be set to 0.
- clocks : link phandles of parent clocks
- reg : register offset for register controlling adjustable mux

Optional properties:
- ti,bit-shift : number of bits to shift the bit-mask, defaults to
  0 if not present
- ti,index-starts-at-one : valid input select programming starts at 1, not
  zero
- ti,set-rate-parent : clk_set_rate is propagated to parent clock,
  not supported by the composite-mux-clock subtype

Examples:

sys_clkin_ck: sys_clkin_ck@4a306110 {
	#clock-cells = <0>;
	compatible = "ti,mux-clock";
	clocks = <&virt_12000000_ck>, <&virt_13000000_ck>, <&virt_16800000_ck>, <&virt_19200000_ck>, <&virt_26000000_ck>, <&virt_27000000_ck>, <&virt_38400000_ck>;
	reg = <0x0110>;
	ti,index-starts-at-one;
};

abe_dpll_bypass_clk_mux_ck: abe_dpll_bypass_clk_mux_ck@4a306108 {
	#clock-cells = <0>;
	compatible = "ti,mux-clock";
	clocks = <&sys_clkin_ck>, <&sys_32k_ck>;
	ti,bit-shift = <24>;
	reg = <0x0108>;
};

mcbsp5_mux_fck: mcbsp5_mux_fck {
	#clock-cells = <0>;
	compatible = "ti,composite-mux-clock";
	clocks = <&core_96m_fck>, <&mcbsp_clks>;
	ti,bit-shift = <4>;
	reg = <0x02d8>;
};