1# SPDX-License-Identifier: GPL-2.0-only
2#
3# PINCTRL infrastructure and drivers
4#
5
6menuconfig PINCTRL
7	bool "Pin controllers"
8
9if PINCTRL
10
11config GENERIC_PINCTRL_GROUPS
12	bool
13
14config PINMUX
15	bool "Support pin multiplexing controllers" if COMPILE_TEST
16
17config GENERIC_PINMUX_FUNCTIONS
18	bool
19	select PINMUX
20
21config PINCONF
22	bool "Support pin configuration controllers" if COMPILE_TEST
23
24config GENERIC_PINCONF
25	bool
26	select PINCONF
27
28config DEBUG_PINCTRL
29	bool "Debug PINCTRL calls"
30	depends on DEBUG_KERNEL
31	help
32	  Say Y here to add some extra checks and diagnostics to PINCTRL calls.
33
34config PINCTRL_AMD
35	bool "AMD GPIO pin control"
36	depends on HAS_IOMEM
37	depends on ACPI || COMPILE_TEST
38	select GPIOLIB
39	select GPIOLIB_IRQCHIP
40	select PINMUX
41	select PINCONF
42	select GENERIC_PINCONF
43	help
44	  The driver for memory mapped GPIO functionality on AMD platforms
45	  (x86 or arm). Most of the pins are usually muxed to some other
46	  functionality by firmware, so only a small amount is available
47	  for GPIO use.
48
49	  Requires ACPI/FDT device enumeration code to set up a platform
50	  device.
51
52config PINCTRL_APPLE_GPIO
53	tristate "Apple SoC GPIO pin controller driver"
54	depends on ARCH_APPLE
55	select PINMUX
56	select GPIOLIB
57	select GPIOLIB_IRQCHIP
58	select GENERIC_PINCTRL_GROUPS
59	select GENERIC_PINMUX_FUNCTIONS
60	select OF_GPIO
61	help
62	  This is the driver for the GPIO controller found on Apple ARM SoCs,
63	  including M1.
64
65	  This driver can also be built as a module. If so, the module
66	  will be called pinctrl-apple-gpio.
67
68config PINCTRL_ARTPEC6
69	bool "Axis ARTPEC-6 pin controller driver"
70	depends on MACH_ARTPEC6
71	select PINMUX
72	select GENERIC_PINCONF
73	help
74	  This is the driver for the Axis ARTPEC-6 pin controller. This driver
75	  supports pin function multiplexing as well as pin bias and drive
76	  strength configuration. Device tree integration instructions can be
77	  found in Documentation/devicetree/bindings/pinctrl/axis,artpec6-pinctrl.txt
78
79config PINCTRL_AS3722
80	tristate "Pinctrl and GPIO driver for ams AS3722 PMIC"
81	depends on MFD_AS3722 && GPIOLIB
82	select PINMUX
83	select GENERIC_PINCONF
84	help
85	  AS3722 device supports the configuration of GPIO pins for different
86	  functionality. This driver supports the pinmux, push-pull and
87	  open drain configuration for the GPIO pins of AS3722 devices. It also
88	  supports the GPIO functionality through gpiolib.
89
90config PINCTRL_AT91
91	bool "AT91 pinctrl driver"
92	depends on OF
93	depends on ARCH_AT91
94	select PINMUX
95	select PINCONF
96	select GPIOLIB
97	select OF_GPIO
98	select GPIOLIB_IRQCHIP
99	help
100	  Say Y here to enable the at91 pinctrl driver
101
102config PINCTRL_AT91PIO4
103	bool "AT91 PIO4 pinctrl driver"
104	depends on OF
105	depends on HAS_IOMEM
106	depends on ARCH_AT91 || COMPILE_TEST
107	select PINMUX
108	select GENERIC_PINCONF
109	select GPIOLIB
110	select GPIOLIB_IRQCHIP
111	select OF_GPIO
112	help
113	  Say Y here to enable the at91 pinctrl/gpio driver for Atmel PIO4
114	  controller available on sama5d2 SoC.
115
116config PINCTRL_AXP209
117	tristate "X-Powers AXP209 PMIC pinctrl and GPIO Support"
118	depends on MFD_AXP20X
119	depends on OF
120	select PINMUX
121	select GENERIC_PINCONF
122	select GPIOLIB
123	help
124	  AXP PMICs provides multiple GPIOs that can be muxed for different
125	  functions. This driver bundles a pinctrl driver to select the function
126	  muxing and a GPIO driver to handle the GPIO when the GPIO function is
127	  selected.
128	  Say Y to enable pinctrl and GPIO support for the AXP209 PMIC.
129
130config PINCTRL_AW9523
131	tristate "Awinic AW9523/AW9523B I2C GPIO expander pinctrl driver"
132	depends on OF && I2C
133	select PINMUX
134	select PINCONF
135	select GENERIC_PINCONF
136	select GPIOLIB
137	select GPIOLIB_IRQCHIP
138	select REGMAP
139	select REGMAP_I2C
140	help
141	  The Awinic AW9523/AW9523B is a multi-function I2C GPIO
142	  expander with PWM functionality. This driver bundles a
143	  pinctrl driver to select the function muxing and a GPIO
144	  driver to handle GPIO, when the GPIO function is selected.
145
146	  Say yes to enable pinctrl and GPIO support for the AW9523(B).
147
148config PINCTRL_BM1880
149	bool "Bitmain BM1880 Pinctrl driver"
150	depends on OF && (ARCH_BITMAIN || COMPILE_TEST)
151	default ARCH_BITMAIN
152	select PINMUX
153	help
154	  Pinctrl driver for Bitmain BM1880 SoC.
155
156config PINCTRL_CY8C95X0
157	tristate "Cypress CY8C95X0 I2C pinctrl and GPIO driver"
158	depends on I2C
159	select GPIOLIB
160	select GPIOLIB_IRQCHIP
161	select PINMUX
162	select PINCONF
163	select GENERIC_PINCONF
164	select REGMAP_I2C
165	help
166	  Support for 20/40/60 pin Cypress Cy8C95x0 pinctrl/gpio I2C expander.
167	  This driver can also be built as a module. If so, the module will be
168	  called pinctrl-cy8c95x0.
169
170config PINCTRL_DA850_PUPD
171	tristate "TI DA850/OMAP-L138/AM18XX pull-up and pull-down groups"
172	depends on OF && (ARCH_DAVINCI_DA850 || COMPILE_TEST)
173	select PINCONF
174	select GENERIC_PINCONF
175	help
176	  Driver for TI DA850/OMAP-L138/AM18XX pinconf. Used to control
177	  pull-up and pull-down pin groups.
178
179config PINCTRL_DA9062
180	tristate "Dialog Semiconductor DA9062 PMIC pinctrl and GPIO Support"
181	depends on MFD_DA9062
182	select GPIOLIB
183	help
184	  The Dialog DA9062 PMIC provides multiple GPIOs that can be muxed for
185	  different functions. This driver bundles a pinctrl driver to select the
186	  function muxing and a GPIO driver to handle the GPIO when the GPIO
187	  function is selected.
188
189	  Say Y to enable pinctrl and GPIO support for the DA9062 PMIC.
190
191config PINCTRL_DIGICOLOR
192	bool
193	depends on ARCH_DIGICOLOR || COMPILE_TEST
194	select PINMUX
195	select GENERIC_PINCONF
196
197config PINCTRL_EP93XX
198	bool
199	depends on ARCH_EP93XX || COMPILE_TEST
200	select PINMUX
201	select GENERIC_PINCONF
202	select MFD_SYSCON
203
204config PINCTRL_EQUILIBRIUM
205	tristate "Generic pinctrl and GPIO driver for Intel Lightning Mountain SoC"
206	depends on OF && HAS_IOMEM
207	depends on X86 || COMPILE_TEST
208	select PINMUX
209	select PINCONF
210	select GPIOLIB
211	select GPIO_GENERIC
212	select GPIOLIB_IRQCHIP
213	select GENERIC_PINCONF
214	select GENERIC_PINCTRL_GROUPS
215	select GENERIC_PINMUX_FUNCTIONS
216	help
217	  Equilibrium driver is a pinctrl and GPIO driver for Intel Lightning
218	  Mountain network processor SoC that supports both the GPIO and pin
219	  control frameworks. It provides interfaces to setup pin muxing, assign
220	  desired pin functions, configure GPIO attributes for LGM SoC pins.
221	  Pin muxing and pin config settings are retrieved from device tree.
222
223config PINCTRL_EYEQ5
224	bool "Mobileye EyeQ5 pinctrl driver"
225	depends on OF
226	depends on MACH_EYEQ5 || COMPILE_TEST
227	select PINMUX
228	select GENERIC_PINCONF
229	select AUXILIARY_BUS
230	default MACH_EYEQ5
231	help
232	  Pin controller driver for the Mobileye EyeQ5 platform. It does both
233	  pin config & pin muxing. It does not handle GPIO.
234
235	  Pin muxing supports two functions for each pin: first is GPIO, second
236	  is pin-dependent. Pin config is about bias & drive strength.
237
238config PINCTRL_GEMINI
239	bool
240	depends on ARCH_GEMINI
241	default ARCH_GEMINI
242	select PINMUX
243	select GENERIC_PINCONF
244	select MFD_SYSCON
245
246config PINCTRL_INGENIC
247	bool "Pinctrl driver for the Ingenic JZ47xx SoCs"
248	default MACH_INGENIC
249	depends on OF
250	depends on MIPS || COMPILE_TEST
251	select GENERIC_PINCONF
252	select GENERIC_PINCTRL_GROUPS
253	select GENERIC_PINMUX_FUNCTIONS
254	select GPIOLIB
255	select GPIOLIB_IRQCHIP
256	select REGMAP_MMIO
257
258config PINCTRL_K210
259	bool "Pinctrl driver for the Canaan Kendryte K210 SoC"
260	depends on RISCV && SOC_CANAAN_K210 && OF
261	select GENERIC_PINMUX_FUNCTIONS
262	select GENERIC_PINCONF
263	select GPIOLIB
264	select OF_GPIO
265	select REGMAP_MMIO
266	default SOC_CANAAN_K210
267	help
268	  Add support for the Canaan Kendryte K210 RISC-V SOC Field
269	  Programmable IO Array (FPIOA) controller.
270
271config PINCTRL_KEEMBAY
272	tristate "Pinctrl driver for Intel Keem Bay SoC"
273	depends on ARCH_KEEMBAY || (ARM64 && COMPILE_TEST)
274	depends on HAS_IOMEM
275	select PINMUX
276	select PINCONF
277	select GENERIC_PINCONF
278	select GENERIC_PINCTRL_GROUPS
279	select GENERIC_PINMUX_FUNCTIONS
280	select GPIOLIB
281	select GPIOLIB_IRQCHIP
282	select GPIO_GENERIC
283	help
284	  This selects pin control driver for the Intel Keem Bay SoC.
285	  It provides pin config functions such as pull-up, pull-down,
286	  interrupt, drive strength, sec lock, Schmitt trigger, slew
287	  rate control and direction control. This module will be
288	  called as pinctrl-keembay.
289
290config PINCTRL_LANTIQ
291	bool
292	depends on LANTIQ
293	select PINMUX
294	select PINCONF
295
296config PINCTRL_FALCON
297	bool
298	depends on SOC_FALCON
299	depends on PINCTRL_LANTIQ
300
301config PINCTRL_LOONGSON2
302	tristate "Pinctrl driver for the Loongson-2 SoC"
303	depends on OF && (LOONGARCH || COMPILE_TEST)
304	select PINMUX
305	select GENERIC_PINCONF
306	help
307	 This selects pin control driver for the Loongson-2 SoC. It
308	 provides pin config functions multiplexing.  GPIO pin pull-up,
309	 pull-down functions are not supported. Say yes to enable
310	 pinctrl for Loongson-2 SoC.
311
312config PINCTRL_XWAY
313	bool
314	depends on SOC_TYPE_XWAY
315	depends on PINCTRL_LANTIQ
316
317config PINCTRL_LPC18XX
318	bool "NXP LPC18XX/43XX SCU pinctrl driver"
319	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
320	default ARCH_LPC18XX
321	select PINMUX
322	select GENERIC_PINCONF
323	help
324	  Pinctrl driver for NXP LPC18xx/43xx System Control Unit (SCU).
325
326config PINCTRL_MAX77620
327	tristate "MAX77620/MAX20024 Pincontrol support"
328	depends on MFD_MAX77620 && OF
329	select PINMUX
330	select GENERIC_PINCONF
331	help
332	  Say Y here to enable Pin control support for Maxim MAX77620 PMIC.
333	  This PMIC has 8 GPIO pins that work as GPIO as well as special
334	  function in alternate mode. This driver also configure push-pull,
335	  open drain, FPS slots etc.
336
337config PINCTRL_MCP23S08_I2C
338	tristate
339	select REGMAP_I2C
340
341config PINCTRL_MCP23S08_SPI
342	tristate
343	select REGMAP_SPI
344
345config PINCTRL_MCP23S08
346	tristate "Microchip MCP23xxx I/O expander"
347	depends on SPI_MASTER || I2C
348	select GPIOLIB
349	select GPIOLIB_IRQCHIP
350	select GENERIC_PINCONF
351	select PINCTRL_MCP23S08_I2C if I2C
352	select PINCTRL_MCP23S08_SPI if SPI_MASTER
353	help
354	  SPI/I2C driver for Microchip MCP23S08 / MCP23S17 / MCP23S18 /
355	  MCP23008 / MCP23017 / MCP23018 I/O expanders.
356	  This provides a GPIO interface supporting inputs and outputs and a
357	  corresponding interrupt-controller.
358
359config PINCTRL_MICROCHIP_SGPIO
360	tristate "Pinctrl driver for Microsemi/Microchip Serial GPIO"
361	depends on OF
362	depends on HAS_IOMEM
363	select GPIOLIB
364	select GPIOLIB_IRQCHIP
365	select GENERIC_PINCONF
366	select GENERIC_PINCTRL_GROUPS
367	select GENERIC_PINMUX_FUNCTIONS
368	select OF_GPIO
369	help
370	  Support for the serial GPIO interface used on Microsemi and
371	  Microchip SoCs. By using a serial interface, the SIO
372	  controller significantly extends the number of available
373	  GPIOs with a minimum number of additional pins on the
374	  device. The primary purpose of the SIO controller is to
375	  connect control signals from SFP modules and to act as an
376	  LED controller.
377
378	  If compiled as a module, the module name will be
379	  pinctrl-microchip-sgpio.
380
381config PINCTRL_OCELOT
382	tristate "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
383	depends on OF
384	depends on HAS_IOMEM
385	select GPIOLIB
386	select GPIOLIB_IRQCHIP
387	select GENERIC_PINCONF
388	select GENERIC_PINCTRL_GROUPS
389	select GENERIC_PINMUX_FUNCTIONS
390	select OF_GPIO
391	select REGMAP_MMIO
392	help
393	  Support for the internal GPIO interfaces on Microsemi Ocelot and
394	  Jaguar2 SoCs.
395
396	  If conpiled as a module, the module name will be pinctrl-ocelot.
397
398config PINCTRL_PALMAS
399	tristate "Pinctrl driver for the PALMAS Series MFD devices"
400	depends on OF && MFD_PALMAS
401	select PINMUX
402	select GENERIC_PINCONF
403	help
404	  Palmas device supports the configuration of pins for different
405	  functionality. This driver supports the pinmux, push-pull and
406	  open drain configuration for the Palmas series devices like
407	  TPS65913, TPS80036 etc.
408
409config PINCTRL_PEF2256
410	tristate "Lantiq PEF2256 (FALC56) pin controller driver"
411	depends on OF && FRAMER_PEF2256
412	select PINMUX
413	select PINCONF
414	select GENERIC_PINCONF
415	help
416	  This option enables the pin controller support for the Lantiq PEF2256
417	  framer, also known as FALC56.
418
419	  If unsure, say N.
420
421	  To compile this driver as a module, choose M here: the
422	  module will be called pinctrl-pef2256.
423
424config PINCTRL_PIC32
425	bool "Microchip PIC32 pin controller driver"
426	depends on OF
427	depends on MACH_PIC32
428	select PINMUX
429	select GENERIC_PINCONF
430	select GPIOLIB_IRQCHIP
431	select OF_GPIO
432	help
433	  This is the pin controller and gpio driver for Microchip PIC32
434	  microcontrollers. This option is selected automatically when specific
435	  machine and arch are selected to build.
436
437config PINCTRL_PIC32MZDA
438	def_bool y if PIC32MZDA
439	select PINCTRL_PIC32
440
441config PINCTRL_PISTACHIO
442	bool "IMG Pistachio SoC pinctrl driver"
443	depends on OF && (MIPS || COMPILE_TEST)
444	depends on GPIOLIB
445	select PINMUX
446	select GENERIC_PINCONF
447	select GPIOLIB_IRQCHIP
448	select OF_GPIO
449	help
450	  This support pinctrl and GPIO driver for IMG Pistachio SoC.
451
452config PINCTRL_RK805
453	tristate "Pinctrl and GPIO driver for RK805 PMIC"
454	depends on MFD_RK8XX
455	select GPIOLIB
456	select PINMUX
457	select GENERIC_PINCONF
458	help
459	  This selects the pinctrl driver for RK805.
460
461config PINCTRL_ROCKCHIP
462	tristate "Rockchip gpio and pinctrl driver"
463	depends on ARCH_ROCKCHIP || COMPILE_TEST
464	depends on OF
465	select GPIOLIB
466	select PINMUX
467	select GENERIC_PINCONF
468	select GENERIC_IRQ_CHIP
469	select MFD_SYSCON
470	select OF_GPIO
471	default ARCH_ROCKCHIP
472	help
473          This support pinctrl and GPIO driver for Rockchip SoCs.
474
475config PINCTRL_SCMI
476	tristate "Pinctrl driver using SCMI protocol interface"
477	depends on ARM_SCMI_PROTOCOL || COMPILE_TEST
478	select PINMUX
479	select GENERIC_PINCONF
480	help
481	  This driver provides support for pinctrl which is controlled
482	  by firmware that implements the SCMI interface.
483	  It uses SCMI Message Protocol to interact with the
484	  firmware providing all the pinctrl controls.
485
486config PINCTRL_SINGLE
487	tristate "One-register-per-pin type device tree based pinctrl driver"
488	depends on OF
489	depends on HAS_IOMEM
490	select GENERIC_PINCTRL_GROUPS
491	select GENERIC_PINMUX_FUNCTIONS
492	select GENERIC_PINCONF
493	help
494	  This selects the device tree based generic pinctrl driver.
495
496config PINCTRL_ST
497	bool
498	depends on OF
499	select PINMUX
500	select PINCONF
501	select GPIOLIB_IRQCHIP
502
503config PINCTRL_STMFX
504	tristate "STMicroelectronics STMFX GPIO expander pinctrl driver"
505	depends on I2C
506	depends on OF_GPIO
507	select GENERIC_PINCONF
508	select GPIOLIB_IRQCHIP
509	select MFD_STMFX
510	help
511	  Driver for STMicroelectronics Multi-Function eXpander (STMFX)
512	  GPIO expander.
513	  This provides a GPIO interface supporting inputs and outputs,
514	  and configuring push-pull, open-drain, and can also be used as
515	  interrupt-controller.
516
517config PINCTRL_SX150X
518	bool "Semtech SX150x I2C GPIO expander pinctrl driver"
519	depends on I2C=y
520	select PINMUX
521	select PINCONF
522	select GENERIC_PINCONF
523	select GPIOLIB
524	select GPIOLIB_IRQCHIP
525	select REGMAP
526	help
527	  Say Y here to provide support for Semtech SX150x-series I2C
528	  GPIO expanders as pinctrl module.
529	  Compatible models include:
530	  - 8 bits:  sx1508q, sx1502q
531	  - 16 bits: sx1509q, sx1506q
532
533config PINCTRL_TB10X
534	bool
535	depends on OF && ARC_PLAT_TB10X
536	select GPIOLIB
537
538config PINCTRL_TPS6594
539	tristate "Pinctrl and GPIO driver for TI TPS6594 PMIC"
540	depends on OF && MFD_TPS6594
541	default MFD_TPS6594
542	select PINMUX
543	select GPIOLIB
544	select REGMAP
545	select GPIO_REGMAP
546	select GENERIC_PINCONF
547	help
548	  Say Y to select the pinmuxing and GPIOs driver for the TPS6594
549	  PMICs chip family.
550
551	  This driver can also be built as a module
552	  called tps6594-pinctrl.
553
554config PINCTRL_ZYNQ
555	bool "Pinctrl driver for Xilinx Zynq"
556	depends on ARCH_ZYNQ
557	select PINMUX
558	select GENERIC_PINCONF
559	help
560	  This selects the pinctrl driver for Xilinx Zynq.
561
562config PINCTRL_ZYNQMP
563	tristate "Pinctrl driver for Xilinx ZynqMP"
564	depends on ZYNQMP_FIRMWARE
565	select PINMUX
566	select GENERIC_PINCONF
567	default ZYNQMP_FIRMWARE
568	help
569	  This selects the pinctrl driver for Xilinx ZynqMP platform.
570	  This driver will query the pin information from the firmware
571	  and allow configuring the pins.
572	  Configuration can include the mux function to select on those
573	  pin(s)/group(s), and various pin configuration parameters
574	  such as pull-up, slew rate, etc.
575	  This driver can also be built as a module. If so, the module
576	  will be called pinctrl-zynqmp.
577
578config PINCTRL_MLXBF3
579	tristate "NVIDIA BlueField-3 SoC Pinctrl driver"
580	depends on (MELLANOX_PLATFORM && ARM64) || COMPILE_TEST
581	select PINMUX
582	select GPIOLIB
583	select GPIOLIB_IRQCHIP
584	help
585	  Say Y to select the pinctrl driver for BlueField-3 SoCs.
586	  This pin controller allows selecting the mux function for
587	  each pin. This driver can also be built as a module called
588	  pinctrl-mlxbf3.
589
590source "drivers/pinctrl/actions/Kconfig"
591source "drivers/pinctrl/aspeed/Kconfig"
592source "drivers/pinctrl/bcm/Kconfig"
593source "drivers/pinctrl/berlin/Kconfig"
594source "drivers/pinctrl/cirrus/Kconfig"
595source "drivers/pinctrl/freescale/Kconfig"
596source "drivers/pinctrl/intel/Kconfig"
597source "drivers/pinctrl/mediatek/Kconfig"
598source "drivers/pinctrl/meson/Kconfig"
599source "drivers/pinctrl/mvebu/Kconfig"
600source "drivers/pinctrl/nomadik/Kconfig"
601source "drivers/pinctrl/nuvoton/Kconfig"
602source "drivers/pinctrl/nxp/Kconfig"
603source "drivers/pinctrl/pxa/Kconfig"
604source "drivers/pinctrl/qcom/Kconfig"
605source "drivers/pinctrl/realtek/Kconfig"
606source "drivers/pinctrl/renesas/Kconfig"
607source "drivers/pinctrl/samsung/Kconfig"
608source "drivers/pinctrl/sophgo/Kconfig"
609source "drivers/pinctrl/spear/Kconfig"
610source "drivers/pinctrl/sprd/Kconfig"
611source "drivers/pinctrl/starfive/Kconfig"
612source "drivers/pinctrl/stm32/Kconfig"
613source "drivers/pinctrl/sunplus/Kconfig"
614source "drivers/pinctrl/sunxi/Kconfig"
615source "drivers/pinctrl/tegra/Kconfig"
616source "drivers/pinctrl/ti/Kconfig"
617source "drivers/pinctrl/uniphier/Kconfig"
618source "drivers/pinctrl/visconti/Kconfig"
619source "drivers/pinctrl/vt8500/Kconfig"
620
621endif
622