17.12.2019 23:03, Sowjanya Komatineni пишет: > Tegra PMC has 3 clocks clk_out_1, clk_out_2, and clk_out_3. > > This patch documents PMC clock bindings and adds a header defining > Tegra PMC clock ids. > > Signed-off-by: Sowjanya Komatineni <skomatineni@xxxxxxxxxx> > --- > .../bindings/arm/tegra/nvidia,tegra20-pmc.txt | 37 +++++++++++++++++++++- > include/dt-bindings/soc/tegra-pmc.h | 15 +++++++++ > 2 files changed, 51 insertions(+), 1 deletion(-) > create mode 100644 include/dt-bindings/soc/tegra-pmc.h > > diff --git a/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt b/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt > index cb12f33a247f..80cdcad4ab8c 100644 > --- a/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt > +++ b/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt > @@ -21,6 +21,10 @@ Required properties: > - clock-names : Must include the following entries: > "pclk" (The Tegra clock of that name), > "clk32k_in" (The 32KHz clock input to Tegra). > +- #clock-cells : Should be 1 for Tegra30 and higher. > + In clock consumers, this cell represents the PMC clock ID. > + The assignments may be found in header file > + <dt-bindings/soc/tegra-pmc.h>. > > Optional properties: > - nvidia,invert-interrupt : If present, inverts the PMU interrupt signal. > @@ -80,11 +84,12 @@ Optional nodes: > Example: > > / SoC dts including file > -pmc@7000f400 { > +pmc: pmc@7000f400 { > compatible = "nvidia,tegra20-pmc"; > reg = <0x7000e400 0x400>; > clocks = <&tegra_car 110>, <&clk32k_in>; > clock-names = "pclk", "clk32k_in"; > + #clock-cells = <1>; > nvidia,invert-interrupt; > nvidia,suspend-mode = <1>; > nvidia,cpu-pwr-good-time = <2000>; > @@ -171,6 +176,7 @@ Example: > reg = <0x0 0x7000e400 0x0 0x400>; > clocks = <&tegra_car TEGRA210_CLK_PCLK>, <&clk32k_in>; > clock-names = "pclk", "clk32k_in"; > + #clock-cells = <1>; > > powergates { > pd_audio: aud { > @@ -260,6 +266,7 @@ Pad configuration state example: > reg = <0x0 0x7000e400 0x0 0x400>; > clocks = <&tegra_car TEGRA210_CLK_PCLK>, <&clk32k_in>; > clock-names = "pclk", "clk32k_in"; > + #clock-cells = <1>; > > ... > > @@ -298,3 +305,31 @@ Pinctrl client example: > pinctrl-1 = <&hdmi_on>; > pinctrl-names = "hdmi-on", "hdmi-off"; > }; > + > +== Clock Control == > + > +Tegra PMC has 3 clocks clk_1, clk_2 and clk_3. Each of these clocks has > +source selection and enable/disable gate. > +Parent/source for these clocks can be either of osc, osc_div2, osc_div4, > +or extern clock from Tegra CAR module. > + > +Clock configuration example: > + pmc: pmc@7000e400 { > + compatible = "nvidia,tegra210-pmc"; > + reg = <0x0 0x7000e400 0x0 0x400>; > + clocks = <&tegra_car TEGRA210_CLK_PCLK>, <&clk32k_in>; > + clock-names = "pclk", "clk32k_in"; > + #clock-cells = <1>; > + }; > + > +Clock consumer example: > + i2c@7000c500 { > + cam_sensor { > + ... > + clocks = <&pmc TEGRA_PMC_CLK_OUT_3>; > + clock-names = "mclk"; > + assigned-clocks = <&pmc TEGRA_PMC_CLK_OUT_3>; > + assigned-clock-parents = <&tegra_car TEGRA210_CLK_EXTERN3>; > + ... > + }; > + }; > diff --git a/include/dt-bindings/soc/tegra-pmc.h b/include/dt-bindings/soc/tegra-pmc.h > new file mode 100644 > index 000000000000..f7c866404456 > --- /dev/null > +++ b/include/dt-bindings/soc/tegra-pmc.h > @@ -0,0 +1,15 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved. > + */ > + > +#ifndef _DT_BINDINGS_SOC_TEGRA_PMC_H > +#define _DT_BINDINGS_SOC_TEGRA_PMC_H > + > +#define TEGRA_PMC_CLK_OUT_1 0 > +#define TEGRA_PMC_CLK_OUT_2 1 > +#define TEGRA_PMC_CLK_OUT_3 2 > + > +#define TEGRA_PMC_CLK_MAX 3 > + > +#endif /* _DT_BINDINGS_SOC_TEGRA_PMC_H */ > The TXT binding should be removed since you converted it to YAML.