NVIDIA Tegra20 Clock And Reset Controller

This binding uses the common clock binding:
Documentation/devicetree/bindings/clock/clock-bindings.txt

The CAR (Clock And Reset) Controller on Tegra is the HW module responsible
for muxing and gating Tegra's clocks, and setting their rates.

Required properties :
- compatible : Should be "nvidia,tegra20-car"
- reg : Should contain CAR registers location and length
- clocks : Should contain phandle and clock specifiers for two clocks:
  the 32 KHz "32k_in", and the board-specific oscillator "osc".
- #clock-cells : Should be 1.
  In clock consumers, this cell represents the clock ID exposed by the CAR.

  The first 96 clocks are numbered to match the bits in the CAR's CLK_OUT_ENB
  registers. These IDs often match those in the CAR's RST_DEVICES registers,
  but not in all cases. Some bits in CLK_OUT_ENB affect multiple clocks. In
  this case, those clocks are assigned IDs above 95 in order to highlight
  this issue. Implementations that interpret these clock IDs as bit values
  within the CLK_OUT_ENB or RST_DEVICES registers should be careful to
  explicitly handle these special cases.

  The balance of the clocks controlled by the CAR are assigned IDs of 96 and
  above.

  0	cpu
  1	unassigned
  2	unassigned
  3	ac97
  4	rtc
  5	tmr
  6	uart1
  7	unassigned	(register bit affects uart2 and vfir)
  8	gpio
  9	sdmmc2
  10	unassigned	(register bit affects spdif_in and spdif_out)
  11	i2s1
  12	i2c1
  13	ndflash
  14	sdmmc1
  15	sdmmc4
  16	twc
  17	pwm
  18	i2s2
  19	epp
  20	unassigned	(register bit affects vi and vi_sensor)
  21	2d
  22	usbd
  23	isp
  24	3d
  25	ide
  26	disp2
  27	disp1
  28	host1x
  29	vcp
  30	unassigned
  31	cache2

  32	mem
  33	ahbdma
  34	apbdma
  35	unassigned
  36	kbc
  37	stat_mon
  38	pmc
  39	fuse
  40	kfuse
  41	sbc1
  42	snor
  43	spi1
  44	sbc2
  45	xio
  46	sbc3
  47	dvc
  48	dsi
  49	unassigned	(register bit affects tvo and cve)
  50	mipi
  51	hdmi
  52	csi
  53	tvdac
  54	i2c2
  55	uart3
  56	unassigned
  57	emc
  58	usb2
  59	usb3
  60	mpe
  61	vde
  62	bsea
  63	bsev

  64	speedo
  65	uart4
  66	uart5
  67	i2c3
  68	sbc4
  69	sdmmc3
  70	pcie
  71	owr
  72	afi
  73	csite
  74	unassigned
  75	avpucq
  76	la
  77	unassigned
  78	unassigned
  79	unassigned
  80	unassigned
  81	unassigned
  82	unassigned
  83	unassigned
  84	irama
  85	iramb
  86	iramc
  87	iramd
  88	cram2
  89	audio_2x	a/k/a audio_2x_sync_clk
  90	clk_d
  91	unassigned
  92	sus
  93	cdev2
  94	cdev1
  95	unassigned

  96	uart2
  97	vfir
  98	spdif_in
  99	spdif_out
  100	vi
  101	vi_sensor
  102	tvo
  103	cve
  104	osc
  105	clk_32k		a/k/a clk_s
  106	clk_m
  107	sclk
  108	cclk
  109	hclk
  110	pclk
  111	blink
  112	pll_a
  113	pll_a_out0
  114	pll_c
  115	pll_c_out1
  116	pll_d
  117	pll_d_out0
  118	pll_e
  119	pll_m
  120	pll_m_out1
  121	pll_p
  122	pll_p_out1
  123	pll_p_out2
  124	pll_p_out3
  125	pll_p_out4
  126	pll_s
  127	pll_u
  128	pll_x
  129	cop		a/k/a avp
  130	audio		a/k/a audio_sync_clk
  131	pll_ref
  132	twd

Example SoC include file:

/ {
	tegra_car: clock {
		compatible = "nvidia,tegra20-car";
		reg = <0x60006000 0x1000>;
		#clock-cells = <1>;
	};

	usb@c5004000 {
		clocks = <&tegra_car 58>; /* usb2 */
	};
};

Example board file:

/ {
	clocks {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		osc: clock@0 {
			compatible = "fixed-clock";
			reg = <0>;
			#clock-cells = <0>;
			clock-frequency = <12000000>;
		};

		clk_32k: clock@1 {
			compatible = "fixed-clock";
			reg = <1>;
			#clock-cells = <0>;
			clock-frequency = <32768>;
		};
	};

	&tegra_car {
		clocks = <&clk_32k> <&osc>;
	};
};
