Binding for Texas Instruments DPLL clock.

This binding uses the common clock binding[1].  It assumes a
register-mapped DPLL with usually two selectable input clocks
(reference clock and bypass clock), with digital phase locked
loop logic for multiplying the input clock to a desired output
clock. This clock also typically supports different operation
modes (locked, low power stop etc.) This binding has several
sub-types, which effectively result in slightly different setup
for the actual DPLL clock.

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

Required properties:
- compatible : shall be one of:
		"ti,omap3-dpll-clock",
		"ti,omap3-dpll-core-clock",
		"ti,omap3-dpll-per-clock",
		"ti,omap3-dpll-per-j-type-clock",
		"ti,omap4-dpll-clock",
		"ti,omap4-dpll-x2-clock",
		"ti,omap4-dpll-core-clock",
		"ti,omap4-dpll-m4xen-clock",
		"ti,omap4-dpll-j-type-clock",
		"ti,omap5-mpu-dpll-clock",
		"ti,am3-dpll-no-gate-clock",
		"ti,am3-dpll-j-type-clock",
		"ti,am3-dpll-no-gate-j-type-clock",
		"ti,am3-dpll-clock",
		"ti,am3-dpll-core-clock",
		"ti,am3-dpll-x2-clock",
		"ti,omap2-dpll-core-clock",

- #clock-cells : from common clock binding; shall be set to 0.
- clocks : link phandles of parent clocks, first entry lists reference clock
  and second entry bypass clock
- reg : offsets for the register set for controlling the DPLL.
  Registers are listed in following order:
	"control" - contains the control register base address
	"idlest" - contains the idle status register base address
	"mult-div1" - contains the multiplier / divider register base address
	"autoidle" - contains the autoidle register base address (optional)
	"ssc-deltam" - DPLL supports spread spectrum clocking (SSC), contains
		       the frequency spreading register base address (optional)
	"ssc-modfreq" - DPLL supports spread spectrum clocking (SSC), contains
		        the modulation frequency register base address
			(optional)
  ti,am3-* dpll types do not have autoidle register
  ti,omap2-* dpll type does not support idlest / autoidle registers

Optional properties:
- DPLL mode setting - defining any one or more of the following overrides
  default setting.
	- ti,low-power-stop : DPLL supports low power stop mode, gating output
	- ti,low-power-bypass : DPLL output matches rate of parent bypass clock
	- ti,lock : DPLL locks in programmed rate
	- ti,min-div : the minimum divisor to start from to round the DPLL
		       target rate
	- ti,ssc-deltam : DPLL supports spread spectrum clocking, frequency
			  spreading in permille (10th of a percent)
	- ti,ssc-modfreq-hz : DPLL supports spread spectrum clocking, spread
			      spectrum modulation frequency
	- ti,ssc-downspread : DPLL supports spread spectrum clocking, boolean
			      to enable the downspread feature

Examples:
	dpll_core_ck: dpll_core_ck@44e00490 {
		#clock-cells = <0>;
		compatible = "ti,omap4-dpll-core-clock";
		clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
		reg = <0x490>, <0x45c>, <0x488>, <0x468>;
	};

	dpll2_ck: dpll2_ck@48004004 {
		#clock-cells = <0>;
		compatible = "ti,omap3-dpll-clock";
		clocks = <&sys_ck>, <&dpll2_fck>;
		ti,low-power-stop;
		ti,low-power-bypass;
		ti,lock;
		reg = <0x4>, <0x24>, <0x34>, <0x40>;
	};

	dpll_core_ck: dpll_core_ck@44e00490 {
		#clock-cells = <0>;
		compatible = "ti,am3-dpll-core-clock";
		clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
		reg = <0x90>, <0x5c>, <0x68>;
	};

	dpll_ck: dpll_ck {
		#clock-cells = <0>;
		compatible = "ti,omap2-dpll-core-clock";
		clocks = <&sys_ck>, <&sys_ck>;
		reg = <0x0500>, <0x0540>;
	};

	dpll_disp_ck: dpll_disp_ck {
		#clock-cells = <0>;
		compatible = "ti,am3-dpll-no-gate-clock";
		clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
		reg = <0x0498>, <0x0448>, <0x0454>, <0x044c>, <0x0450>;
	};
