209 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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 */
 | 
						|
	};
 | 
						|
};
 |