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";
		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
