Intel x86 PINCTRL/GPIO controller

Pin-muxing on broadwell devices can be described with a node for the PINCTRL
master node and a set of child nodes for each required pin state on the SoC.
These pin states use phandles and are referred to but a configuration section
which lists all pins in the device.

The PINCTRL master node requires the following properties:
- compatible : "intel,x86-broadwell-pinctrl"

Pin state nodes must be sub-nodes of the pinctrl master node. The must have
a phandle. They can contain the following optional properties:
- mode-gpio	- forces the pin into GPIO mode
- output-value	- sets the default output value of the GPIO, 0 (low, default)
			or 1 (high)
- direction	- sets the direction of the gpio, either PIN_INPUT (default)
			or PIN_OUTPUT
- invert	- the input pin is inverted
- trigger	- sets the trigger type, either TRIGGER_EDGE (default) or
			TRIGGER_LEVEL
- sense-disable - the input state sense is disabled
- owner		0 sets the owner of the pin, either OWNER_ACPI (default) or
			ONWER_GPIO
- route		- sets whether the pin is routed, either PIRQ_APIC_MASK or
			PIRQ_APIC_ROUTE
- irq-enable	- the interrupt is enabled
- reset-rsmrst	- the pin will only be reset by RSMRST
- pirq-apic	- the pin will be routed to the IOxAPIC

The first pin state will be the default, so pins without a configuration will
use that.

The pin configuration node is also a sub-node of the pinctrl master node, but
does not have a phandle. It has a single property:

- config	- configuration to use for each pin. Each entry has of 3 cells:
			- GPIO number (0..94)
			- phandle of configuration (above)
			- interrupt number (0..15)

		  There should be one entry for each pin (i.e. 95 entries).
		  But missing pins will receive the default configuration.

Example:

pch_pinctrl {
	compatible = "intel,x86-broadwell-pinctrl";

	/* Put this first: it is the default */
	gpio_unused: gpio-unused {
		mode-gpio;
		direction = <PIN_INPUT>;
		owner = <OWNER_GPIO>;
		sense-disable;
	};

	gpio_acpi_sci: acpi-sci {
		mode-gpio;
		direction = <PIN_INPUT>;
		invert;
		route = <ROUTE_SCI>;
	};

	gpio_acpi_smi: acpi-smi {
		mode-gpio;
		direction = <PIN_INPUT>;
		invert;
		route = <ROUTE_SMI>;
	};

	gpio_input: gpio-input {
		mode-gpio;
		direction = <PIN_INPUT>;
		owner = <OWNER_GPIO>;
	};

	gpio_input_invert: gpio-input-invert {
		mode-gpio;
		direction = <PIN_INPUT>;
		owner = <OWNER_GPIO>;
		invert;
	};

	gpio_native: gpio-native {
	};

	gpio_out_high: gpio-out-high {
		mode-gpio;
		direction = <PIN_OUTPUT>;
		output-value = <1>;
		owner = <OWNER_GPIO>;
		sense-disable;
	};

	gpio_out_low: gpio-out-low {
		mode-gpio;
		direction = <PIN_OUTPUT>;
		output-value = <0>;
		owner = <OWNER_GPIO>;
		sense-disable;
	};

	gpio_pirq: gpio-pirq {
		mode-gpio;
		direction = <PIN_INPUT>;
		owner = <OWNER_GPIO>;
		pirq-apic = <PIRQ_APIC_ROUTE>;
	};

	soc_gpio@0 {
		config =
			<0 &gpio_unused 0>,	/* unused */
			<1 &gpio_unused 0>,	/* unused */
			<2 &gpio_unused 0>,	/* unused */
			<3 &gpio_unused 0>,	/* unused */
			<4 &gpio_native 0>,	/* native: i2c0_sda_gpio4 */
			<5 &gpio_native 0>,	/* native: i2c0_scl_gpio5 */
			<6 &gpio_native 0>,	/* native: i2c1_sda_gpio6 */
			<7 &gpio_native 0>,	/* native: i2c1_scl_gpio7 */
			<8 &gpio_acpi_sci 0>,	/* pch_lte_wake_l */
			<9 &gpio_input_invert 0>,/* trackpad_int_l (wake) */
			<10 &gpio_acpi_sci 0>,	/* pch_wlan_wake_l */
			<11 &gpio_unused 0>,	/* unused */
			<12 &gpio_unused 0>,	/* unused */
			<13 &gpio_pirq 3>,	/* trackpad_int_l (pirql) */
			<14 &gpio_pirq 4>,	/* touch_int_l (pirqm) */
			<15 &gpio_unused 0>,	/* unused (strap) */
			<16 &gpio_input 0>,	/* pch_wp */
			<17 &gpio_unused 0>,	/* unused */
			<18 &gpio_unused 0>,	/* unused */
			<19 &gpio_unused 0>,	/* unused */
			<20 &gpio_native 0>,	/* pcie_wlan_clkreq_l */
			<21 &gpio_out_high 0>,	/* pp3300_ssd_en */
			<22 &gpio_unused 0>,	/* unused */
			<23 &gpio_out_low 0>,	/* pp3300_autobahn_en */
			<24 &gpio_unused 0>,	/* unused */
			<25 &gpio_input 0>,	/* ec_in_rw */
			<26 &gpio_unused 0>,	/* unused */
			<27 &gpio_acpi_sci 0>,	/* pch_wake_l */
			<28 &gpio_unused 0>,	/* unused */
			<29 &gpio_unused 0>,	/* unused */
			<30 &gpio_native 0>,	/* native: pch_suswarn_l */
			<31 &gpio_native 0>,	/* native: acok_buf */
			<32 &gpio_native 0>,	/* native: lpc_clkrun_l */
			<33 &gpio_native 0>,	/* native: ssd_devslp */
			<34 &gpio_acpi_smi 0>,	/* ec_smi_l */
			<35 &gpio_acpi_smi 0>,	/* pch_nmi_dbg_l (route in nmi_en) */
			<36 &gpio_acpi_sci 0>,	/* ec_sci_l */
			<37 &gpio_unused 0>,	/* unused */
			<38 &gpio_unused 0>,	/* unused */
			<39 &gpio_unused 0>,	/* unused */
			<40 &gpio_native 0>,	/* native: pch_usb1_oc_l */
			<41 &gpio_native 0>,	/* native: pch_usb2_oc_l */
			<42 &gpio_unused 0>,	/* wlan_disable_l */
			<43 &gpio_out_high 0>,	/* pp1800_codec_en */
			<44 &gpio_unused 0>,	/* unused */
			<45 &gpio_acpi_sci 0>,	/* dsp_int - codec wake */
			<46 &gpio_pirq 6>,	/* hotword_det_l_3v3 (pirqo) - codec irq */
			<47 &gpio_out_low 0>,	/* ssd_reset_l */
			<48 &gpio_unused 0>,	/* unused */
			<49 &gpio_unused 0>,	/* unused */
			<50 &gpio_unused 0>,	/* unused */
			<51 &gpio_unused 0>,	/* unused */
			<52 &gpio_input 0>,	/* sim_det */
			<53 &gpio_unused 0>,	/* unused */
			<54 &gpio_unused 0>,	/* unused */
			<55 &gpio_unused 0>,	/* unused */
			<56 &gpio_unused 0>,	/* unused */
			<57 &gpio_out_high 0>,	/* codec_reset_l */
			<58 &gpio_unused 0>,	/* unused */
			<59 &gpio_out_high 0>,	/* lte_disable_l */
			<60 &gpio_unused 0>,	/* unused */
			<61 &gpio_native 0>,	/* native: pch_sus_stat */
			<62 &gpio_native 0>,	/* native: pch_susclk */
			<63 &gpio_native 0>,	/* native: pch_slp_s5_l */
			<64 &gpio_unused 0>,	/* unused */
			<65 &gpio_input 0>,	/* ram_id3 */
			<66 &gpio_input 0>,	/* ram_id3_old (strap) */
			<67 &gpio_input 0>,	/* ram_id0 */
			<68 &gpio_input 0>,	/* ram_id1 */
			<69 &gpio_input 0>,	/* ram_id2 */
			<70 &gpio_unused 0>,	/* unused */
			<71 &gpio_native 0>,	/* native: modphy_en */
			<72 &gpio_unused 0>,	/* unused */
			<73 &gpio_unused 0>,	/* unused */
			<74 &gpio_unused 0>,	/* unused */
			<75 &gpio_unused 0>,	/* unused */
			<76 &gpio_unused 0>,	/* unused */
			<77 &gpio_unused 0>,	/* unused */
			<78 &gpio_unused 0>,	/* unused */
			<79 &gpio_unused 0>,	/* unused */
			<80 &gpio_unused 0>,	/* unused */
			<81 &gpio_unused 0>,	/* unused */
			<82 &gpio_native 0>,	/* native: ec_rcin_l */
			<83 &gpio_native 0>,	/* gspi0_cs */
			<84 &gpio_native 0>,	/* gspi0_clk */
			<85 &gpio_native 0>,	/* gspi0_miso */
			<86 &gpio_native 0>,	/* gspi0_mosi (strap) */
			<87 &gpio_unused 0>,	/* unused */
			<88 &gpio_unused 0>,	/* unused */
			<89 &gpio_out_high 0>,	/* pp3300_sd_en */
			<90 &gpio_unused 0>,	/* unused */
			<91 &gpio_unused 0>,	/* unused */
			<92 &gpio_unused 0>,	/* unused */
			<93 &gpio_unused 0>,	/* unused */
			<94 &gpio_unused 0 >;	/* unused */
	};
};
