Broadcom BCMRPC GPIO (and pinmux) controller

The BCMRPC GPIO module is a combined GPIO controller, (GPIO) interrupt
controller, and pinmux/control device.

Required properties:
- compatible: "brcm,bcmrpc-pinctrl-gpio"
- reg: Should contain the physical address of the GPIO module's registers.
- gpio-names: GPIO naming convention used to communicate through
  itc-rpc communication channel.
- gpio-pins-info: GPIO pin information has 4 cells for each gpio name.
  The first cell is the GPIO offset number.
  The second cell is the number of GPIO supported.
  The third cell is the number format for GPIO.
  The fourth cell is the default GPIO mux function value.
  for example if gpio name is gpio000, then number format is 3,
  since it has 3 number digits after the gpio-names.
- gpio-controller: Marks the device node as a GPIO controller.
- #gpio-cells : Should be two. The first cell is the pin number and the
  second cell is used to specify optional parameters:
  - bit 0 specifies polarity (0 for normal, 1 for inverted)
- interrupts : The interrupt outputs from the controller. One interrupt per
  individual bank followed by the "all banks" interrupt.
- interrupt-controller: Marks the device node as an interrupt controller.
- #interrupt-cells : Should be 2.
  The first cell is the GPIO number.
  The second cell is used to specify flags:
    bits[3:0] trigger type and level flags:
      1 = low-to-high edge triggered.
      2 = high-to-low edge triggered.
      4 = active high level-sensitive.
      8 = active low level-sensitive.
    Valid combinations are 1, 2, 3, 4, 8.
- rpc-channel : itc-rpc communication channel establishment, this node is must
  without which the driver can't control the registers.

Please refer to ../gpio/gpio.txt for a general description of GPIO bindings.

Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node".

Each pin configuration node lists the pin(s) to which it applies, and one or
more of the mux function to select on those pin(s), and pin configuration.
Each subnode only affects those parameters that are explicitly
listed. In other words, a subnode that lists only a mux function implies no
information about any pin configuration. Similarly, a subnode that lists only
a pull parameter implies no information about the mux function.

Required subnode-properties:
- brcm,pins: An array of cells. Each cell contains the ID of a pin. Valid IDs
  are the integer GPIO IDs; 0==GPIO000, 1==GPIO01, ... 129==GPIO129 ...
  160==SGPIO00 ...191==SGPIO032

Optional subnode-properties:
- brcm,function: Integer, containing the function to mux to the pin(s):
  0: alt0
  1: alt1
  2: alt2
  3: alt3
  4: alt4
  5: alt5
  6: alt6
  7: alt7
- brcm,pull: Integer, representing the pad pull-down/up to apply to the pin(s):
  0: none
  1: down
  2: up
- brcm,indis: Integer, representing the Pad input disable control to apply to the pin(s):
  0: enable
  1: disable
- brcm,hyst: Integer, representing the Pad input hysteresis control to apply to the pin(s):
  0: ttl
  1: schmitt trigger
- brcm,slew: Integer, representing the Pad slew rate control to apply to the pin(s):
  0: fast edge
  1: slew edge
- brcm,drv: Integer, representing the Pad drive strength control to apply to the pin(s):
  0: 1ma
  1: 2ma
  2: 3ma
  3: 4ma
  4: 5ma
  5: 6ma
  6: 7ma
  7: 8ma

Each of brcm,function and brcm,<config> may contain either a single value which
will be applied to all pins in brcm,pins, or 1 value for each entry in
brcm,pins.

Example:

	pinctrl_gpio: pinctrl_gpio@a19000 {
		compatible = "brcm,bcmrpc-pinctrl-gpio";
		#gpio-cells = <0x2>;
		#interrupt-cells = <0x2>;
		gpio-controller;
		interrupt-controller;
		reg = <0x1 0xa19000 0x0 0xc0>;
		gpio-names = "gpio", "sgpio";
		gpio-pins-info = <0x0 0xa0 0x3 0x0 0xa0 0x8 0x2 0x0>;
		interrupts = <0x0>;
		interrupt-parent = <&upg_intc>;
		interrupt-names = "upg_gio";
		brcm,gpio-bank-widths = <0x20 0x20 0x20 0x20 0x2 0x8>;
		rpc-channel = <&rpcrgsmc>;
		pinctrl-names = "default";
		pinctrl-0 = <&bbs_spi &bcm3222_spi>;

		bbs_spi: bbs-spi {
			brcm,pins = <8 9 10 11>;
			brcm,function = <1>;	/* gpio_008 <-- SPI_1_SSB gpio_009 <-- SPI_1_MISO  gpio_010 <-- SPI_1_MOSI gpio_011 <-- SPI_1_SCK */
			brcm,pull = <2>;
			brcm,indis = <1>;
			brcm,hyst = <0>;
			brcm,slew = <1>;
			brcm,drv = <5>;
			};
		bcm3222_spi: bcm3222-spi {
			brcm,pins = <32 35 36 37>;
			brcm,function = <3>;	/* gpio_032 <-- ALT_SPI_M0_SCK gpio_035 <-- ALT_SPI_M0_MOSI gpio_036 <-- ALT_SPI_M0_MISO gpio_037 <-- ALT_SPI_M0_SS0b */
			brcm,pull = <2>;
		};
	};

	rpcrgsmc: rpcrgsmc {
		compatible = "brcm,itc-rpc";
		dev-name = "rg-smc";
		fifo-dev = "smc";
		tx-fifo = <0>;
		rx-fifo = <1>;
	};

	pinctrl_gpo: pinctrl_gpo@a11048 {
		compatible = "brcm,bcmrpc-pinctrl-gpo";
		#gpio-cells = <0x2>;
		gpio-controller;
		reg = <0x1 0xa11048 0x0 0x0c>;
		gpio-names = "gpo";
		gpio-pins-info = <0xc0 0x20 0x2>;
		brcm,gpio-bank-widths = <0x20>;
	};
