The generic power sequence library

Some hard-wired devices (eg USB/MMC) need to do power sequence before
the device can be enumerated on the bus, the typical power sequence
like: enable USB PHY clock, toggle reset pin, etc. But current
Linux device driver lacks of such code to do it, it may cause some
hard-wired devices works abnormal or can't be recognized by
controller at all. The power sequence will be done before this device
can be found at the bus.

The power sequence properties is under the device node.

Optional properties:
- clocks: the input clocks for device.
- reset-gpios: Should specify the GPIO for reset.
- reset-duration-us: the duration in microsecond for assert reset signal.

Below is the example of USB power sequence properties on USB device
nodes which have two level USB hubs.

&usbotg1 {
	vbus-supply = <&reg_usb_otg1_vbus>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usb_otg1_id>;
	status = "okay";

	#address-cells = <1>;
	#size-cells = <0>;
	genesys: hub@1 {
		compatible = "usb5e3,608";
		reg = <1>;

		clocks = <&clks IMX6SX_CLK_CKO>;
		reset-gpios = <&gpio4 5 GPIO_ACTIVE_LOW>; /* hub reset pin */
		reset-duration-us = <10>;

		#address-cells = <1>;
		#size-cells = <0>;
		asix: ethernet@1 {
			compatible = "usbb95,1708";
			reg = <1>;

			clocks = <&clks IMX6SX_CLK_IPG>;
			reset-gpios = <&gpio4 6 GPIO_ACTIVE_LOW>; /* ethernet_rst */
			reset-duration-us = <15>;
		};
	};
};
