Broadcom Kona Family Clocks

This binding is associated with Broadcom SoCs having "Kona" style
clock control units (CCUs).  A CCU is a clock provider that manages
a set of clock signals.  Each CCU is represented by a node in the
device tree.

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

Required properties:
- compatible
	Shall have a value of the form "brcm,<model>-<which>-ccu",
	where <model> is a Broadcom SoC model number and <which> is
	the name of a defined CCU.  For example:
	    "brcm,bcm11351-root-ccu"
	The compatible strings used for each supported SoC family
	are defined below.
- reg
	Shall define the base and range of the address space
	containing clock control registers
- #clock-cells
	Shall have value <1>.  The permitted clock-specifier values
	are defined below.
- clock-output-names
	Shall be an ordered list of strings defining the names of
	the clocks provided by the CCU.

Device tree example:

	slave_ccu: slave_ccu {
		compatible = "brcm,bcm11351-slave-ccu";
		reg = <0x3e011000 0x0f00>;
		#clock-cells = <1>;
		clock-output-names = "uartb",
				     "uartb2",
				     "uartb3",
				     "uartb4";
	};

	ref_crystal_clk: ref_crystal {
		#clock-cells = <0>;
		compatible = "fixed-clock";
		clock-frequency = <26000000>;
	};

	uart@3e002000 {
		compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart";
		status = "disabled";
		reg = <0x3e002000 0x1000>;
		clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB3>;
		interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
		reg-shift = <2>;
		reg-io-width = <4>;
	};

BCM281XX family
---------------
CCU compatible string values for SoCs in the BCM281XX family are:
    "brcm,bcm11351-root-ccu"
    "brcm,bcm11351-aon-ccu"
    "brcm,bcm11351-hub-ccu"
    "brcm,bcm11351-master-ccu"
    "brcm,bcm11351-slave-ccu"

The following table defines the set of CCUs and clock specifiers for
BCM281XX family clocks.  When a clock consumer references a clocks,
its symbolic specifier (rather than its numeric index value) should
be used.  These specifiers are defined in:
    "include/dt-bindings/clock/bcm281xx.h"

    CCU     Clock           Type    Index   Specifier
    ---     -----           ----    -----   ---------
    root    frac_1m         peri      0     BCM281XX_ROOT_CCU_FRAC_1M

    aon     hub_timer       peri      0     BCM281XX_AON_CCU_HUB_TIMER
    aon     pmu_bsc         peri      1     BCM281XX_AON_CCU_PMU_BSC
    aon     pmu_bsc_var     peri      2     BCM281XX_AON_CCU_PMU_BSC_VAR

    hub     tmon_1m         peri      0     BCM281XX_HUB_CCU_TMON_1M

    master  sdio1           peri      0     BCM281XX_MASTER_CCU_SDIO1
    master  sdio2           peri      1     BCM281XX_MASTER_CCU_SDIO2
    master  sdio3           peri      2     BCM281XX_MASTER_CCU_SDIO3
    master  sdio4           peri      3     BCM281XX_MASTER_CCU_SDIO4
    master  dmac            peri      4     BCM281XX_MASTER_CCU_DMAC
    master  usb_ic          peri      5     BCM281XX_MASTER_CCU_USB_IC
    master  hsic2_48m       peri      6     BCM281XX_MASTER_CCU_HSIC_48M
    master  hsic2_12m       peri      7     BCM281XX_MASTER_CCU_HSIC_12M

    slave   uartb           peri      0     BCM281XX_SLAVE_CCU_UARTB
    slave   uartb2          peri      1     BCM281XX_SLAVE_CCU_UARTB2
    slave   uartb3          peri      2     BCM281XX_SLAVE_CCU_UARTB3
    slave   uartb4          peri      3     BCM281XX_SLAVE_CCU_UARTB4
    slave   ssp0            peri      4     BCM281XX_SLAVE_CCU_SSP0
    slave   ssp2            peri      5     BCM281XX_SLAVE_CCU_SSP2
    slave   bsc1            peri      6     BCM281XX_SLAVE_CCU_BSC1
    slave   bsc2            peri      7     BCM281XX_SLAVE_CCU_BSC2
    slave   bsc3            peri      8     BCM281XX_SLAVE_CCU_BSC3
    slave   pwm             peri      9     BCM281XX_SLAVE_CCU_PWM


BCM21664 family
---------------
CCU compatible string values for SoCs in the BCM21664 family are:
    "brcm,bcm21664-root-ccu"
    "brcm,bcm21664-aon-ccu"
    "brcm,bcm21664-master-ccu"
    "brcm,bcm21664-slave-ccu"

The following table defines the set of CCUs and clock specifiers for
BCM21664 family clocks.  When a clock consumer references a clocks,
its symbolic specifier (rather than its numeric index value) should
be used.  These specifiers are defined in:
    "include/dt-bindings/clock/bcm21664.h"

    CCU     Clock           Type    Index   Specifier
    ---     -----           ----    -----   ---------
    root    frac_1m         peri      0     BCM21664_ROOT_CCU_FRAC_1M

    aon     hub_timer       peri      0     BCM21664_AON_CCU_HUB_TIMER

    master  sdio1           peri      0     BCM21664_MASTER_CCU_SDIO1
    master  sdio2           peri      1     BCM21664_MASTER_CCU_SDIO2
    master  sdio3           peri      2     BCM21664_MASTER_CCU_SDIO3
    master  sdio4           peri      3     BCM21664_MASTER_CCU_SDIO4
    master  sdio1_sleep     peri      4     BCM21664_MASTER_CCU_SDIO1_SLEEP
    master  sdio2_sleep     peri      5     BCM21664_MASTER_CCU_SDIO2_SLEEP
    master  sdio3_sleep     peri      6     BCM21664_MASTER_CCU_SDIO3_SLEEP
    master  sdio4_sleep     peri      7     BCM21664_MASTER_CCU_SDIO4_SLEEP

    slave   uartb           peri      0     BCM21664_SLAVE_CCU_UARTB
    slave   uartb2          peri      1     BCM21664_SLAVE_CCU_UARTB2
    slave   uartb3          peri      2     BCM21664_SLAVE_CCU_UARTB3
    slave   uartb4          peri      3     BCM21664_SLAVE_CCU_UARTB4
    slave   bsc1            peri      4     BCM21664_SLAVE_CCU_BSC1
    slave   bsc2            peri      5     BCM21664_SLAVE_CCU_BSC2
    slave   bsc3            peri      6     BCM21664_SLAVE_CCU_BSC3
    slave   bsc4            peri      7     BCM21664_SLAVE_CCU_BSC4
