Kendryte K210 FPIOA

This binding describes the Fully-Programmable Input/Output Array (FPIOA) found
in Kendryte K210 SoCs. Any of the 256 functions can be mapped to any of the 48
pins.

Required properties:
- compatible: should be "kendryte,k210-fpioa"
- reg: address and length of the FPIOA registers
- kendryte,sysctl: phandle to the "sysctl" register map node
- kendryte,power-offset: offset in the register map of the power bank control
  register (in bytes)

Configuration nodes

Pin configuration nodes are documented in pinctrl-bindings.txt

Required properties for pin-configuration nodes or sub-nodes are:
- groups: list of power groups to which the configuration applies. Valid groups
  are:
	A0, A1, A2, B3, B4, B5, C6, C7
  (either this or "pinmux" must be specified)
- pinmux: integer array representing pin multiplexing configuration. In addition
  to the 256 standard functions, each pin can also output the direction
  indicator (DO) of any function. This signal is high whenever the function
  would normally drive the output. Helper macros to ease assembling the "pinmux"
  arguments from the pin and function are provided by the FPIOA header file at:
  <dt-bindings/pinctrl/k210-pinctrl.h>
  Integer values in the "pinmux" argument list are assembled as:
  ((PIN << 16) | (DO << 8) | (FUNC))
  Valid values for PIN are numbers 0 through 47.
  Valid values for DO are 0 or 1.
  Valid values for FUNC are numbers 0 through 255. For a complete list of
  acceptable functions, consult the FPIOA header file.
  (either this or "groups" must be specified)

Optional properties for "pinmux" nodes are:
	bias-disable, bias-pull-down, bias-pull-up, drive-strength,
	drive-strength-ua, input-enable, input-disable, input-schmitt-enable,
	input-schmitt-disable, output-low, output-high, output-enable,
	output-disable, slew-rate, output-polarity-invert, input-polarity-invert

Optional properties for "groups" nodes are:
	power-source

Notes on specific properties include:
- bias-pull-up, -down, and -pin-default: The pull strength cannot be configured.
- drive-strength: There are 8 drive strength settings between 11 and 50 mA.
- input- and output-polarity-invert: Invert the polarity of either the input or
  the output, respectively.
- power-source: Controls the output voltage of a bank of pins. Either
  K210_PC_POWER_1V8 or K210_PC_POWER_3V3 may be specified.
- slew-rate: Specifying this property reduces the slew rate.

Example:
fpioa: pinmux@502B0000 {
	compatible = "kendryte,k210-fpioa";
	reg = <0x502B0000 0x100>;
	kendryte,sysctl = <&sysctl>;
	kendryte,power-offset = <K210_SYSCTL_POWER_SEL>;

	/* JTAG running at 3.3V and driven at 11 mA */
	fpioa_jtag: jtag {
		voltage {
			group = "A0";
			power-source = <K210_PC_POWER_3V3>;
		};

		jtag {
			pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCK)>,
				 <K210_FPIOA(1, K210_PCF_JTAG_TDI)>,
				 <K210_FPIOA(2, K210_PCF_JTAG_TMS)>,
				 <K210_FPIOA(3, K210_PCF_JTAG_TDO)>;
			drive-strength = <11>;
		}
	};

	/* I2C configured for use with a TCA9800 level shifter */
	fpioa_i2c: i2c {
		i2c {
			pinmux = <K210_FPIOA(6, K210_PCF_I2C0_SCLK)>,
				 <K210_FPIOA(7, K210_PCF_I2C0_SDA)>;
		};

		direction {
			pinmux = <K210_FPIOA_DO(8, K210_PCF_I2C0_SDA)>;
			output-polarity-invert;
		};
	};

	/* UART with an active-high TX status LED */
	fpioa_uart1: uart1 {
		uart {
			pinmux = <K210_FPIOA(9, K210_PCF_UART1_TX)>,
				 <K210_FPIOA(10, K210_PCF_UART1_RX)>;
		};

		status {
			pinmux = <K210_FPIOA_DO(11, K210_PCF_UART1_TX)>;
		};
	};
};
