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_EQUILIBRIUM
198	tristate "Generic pinctrl and GPIO driver for Intel Lightning Mountain SoC"
199	depends on OF && HAS_IOMEM
200	depends on X86 || COMPILE_TEST
201	select PINMUX
202	select PINCONF
203	select GPIOLIB
204	select GPIO_GENERIC
205	select GPIOLIB_IRQCHIP
206	select GENERIC_PINCONF
207	select GENERIC_PINCTRL_GROUPS
208	select GENERIC_PINMUX_FUNCTIONS
209	help
210	  Equilibrium driver is a pinctrl and GPIO driver for Intel Lightning
211	  Mountain network processor SoC that supports both the GPIO and pin
212	  control frameworks. It provides interfaces to setup pin muxing, assign
213	  desired pin functions, configure GPIO attributes for LGM SoC pins.
214	  Pin muxing and pin config settings are retrieved from device tree.
215
216config PINCTRL_GEMINI
217	bool
218	depends on ARCH_GEMINI
219	default ARCH_GEMINI
220	select PINMUX
221	select GENERIC_PINCONF
222	select MFD_SYSCON
223
224config PINCTRL_INGENIC
225	bool "Pinctrl driver for the Ingenic JZ47xx SoCs"
226	default MACH_INGENIC
227	depends on OF
228	depends on MIPS || COMPILE_TEST
229	select GENERIC_PINCONF
230	select GENERIC_PINCTRL_GROUPS
231	select GENERIC_PINMUX_FUNCTIONS
232	select GPIOLIB
233	select GPIOLIB_IRQCHIP
234	select REGMAP_MMIO
235
236config PINCTRL_K210
237	bool "Pinctrl driver for the Canaan Kendryte K210 SoC"
238	depends on RISCV && SOC_CANAAN && OF
239	select GENERIC_PINMUX_FUNCTIONS
240	select GENERIC_PINCONF
241	select GPIOLIB
242	select OF_GPIO
243	select REGMAP_MMIO
244	default SOC_CANAAN
245	help
246	  Add support for the Canaan Kendryte K210 RISC-V SOC Field
247	  Programmable IO Array (FPIOA) controller.
248
249config PINCTRL_KEEMBAY
250	tristate "Pinctrl driver for Intel Keem Bay SoC"
251	depends on ARCH_KEEMBAY || (ARM64 && COMPILE_TEST)
252	depends on HAS_IOMEM
253	select PINMUX
254	select PINCONF
255	select GENERIC_PINCONF
256	select GENERIC_PINCTRL_GROUPS
257	select GENERIC_PINMUX_FUNCTIONS
258	select GPIOLIB
259	select GPIOLIB_IRQCHIP
260	select GPIO_GENERIC
261	help
262	  This selects pin control driver for the Intel Keem Bay SoC.
263	  It provides pin config functions such as pull-up, pull-down,
264	  interrupt, drive strength, sec lock, Schmitt trigger, slew
265	  rate control and direction control. This module will be
266	  called as pinctrl-keembay.
267
268config PINCTRL_LANTIQ
269	bool
270	depends on LANTIQ
271	select PINMUX
272	select PINCONF
273
274config PINCTRL_FALCON
275	bool
276	depends on SOC_FALCON
277	depends on PINCTRL_LANTIQ
278
279config PINCTRL_LOONGSON2
280	tristate "Pinctrl driver for the Loongson-2 SoC"
281	depends on OF && (LOONGARCH || COMPILE_TEST)
282	select PINMUX
283	select GENERIC_PINCONF
284	help
285	 This selects pin control driver for the Loongson-2 SoC. It
286	 provides pin config functions multiplexing.  GPIO pin pull-up,
287	 pull-down functions are not supported. Say yes to enable
288	 pinctrl for Loongson-2 SoC.
289
290config PINCTRL_XWAY
291	bool
292	depends on SOC_TYPE_XWAY
293	depends on PINCTRL_LANTIQ
294
295config PINCTRL_LPC18XX
296	bool "NXP LPC18XX/43XX SCU pinctrl driver"
297	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
298	default ARCH_LPC18XX
299	select PINMUX
300	select GENERIC_PINCONF
301	help
302	  Pinctrl driver for NXP LPC18xx/43xx System Control Unit (SCU).
303
304config PINCTRL_MAX77620
305	tristate "MAX77620/MAX20024 Pincontrol support"
306	depends on MFD_MAX77620 && OF
307	select PINMUX
308	select GENERIC_PINCONF
309	help
310	  Say Y here to enable Pin control support for Maxim MAX77620 PMIC.
311	  This PMIC has 8 GPIO pins that work as GPIO as well as special
312	  function in alternate mode. This driver also configure push-pull,
313	  open drain, FPS slots etc.
314
315config PINCTRL_MCP23S08_I2C
316	tristate
317	select REGMAP_I2C
318
319config PINCTRL_MCP23S08_SPI
320	tristate
321	select REGMAP_SPI
322
323config PINCTRL_MCP23S08
324	tristate "Microchip MCP23xxx I/O expander"
325	depends on SPI_MASTER || I2C
326	select GPIOLIB
327	select GPIOLIB_IRQCHIP
328	select GENERIC_PINCONF
329	select PINCTRL_MCP23S08_I2C if I2C
330	select PINCTRL_MCP23S08_SPI if SPI_MASTER
331	help
332	  SPI/I2C driver for Microchip MCP23S08 / MCP23S17 / MCP23S18 /
333	  MCP23008 / MCP23017 / MCP23018 I/O expanders.
334	  This provides a GPIO interface supporting inputs and outputs and a
335	  corresponding interrupt-controller.
336
337config PINCTRL_MICROCHIP_SGPIO
338	tristate "Pinctrl driver for Microsemi/Microchip Serial GPIO"
339	depends on OF
340	depends on HAS_IOMEM
341	select GPIOLIB
342	select GPIOLIB_IRQCHIP
343	select GENERIC_PINCONF
344	select GENERIC_PINCTRL_GROUPS
345	select GENERIC_PINMUX_FUNCTIONS
346	select OF_GPIO
347	help
348	  Support for the serial GPIO interface used on Microsemi and
349	  Microchip SoCs. By using a serial interface, the SIO
350	  controller significantly extends the number of available
351	  GPIOs with a minimum number of additional pins on the
352	  device. The primary purpose of the SIO controller is to
353	  connect control signals from SFP modules and to act as an
354	  LED controller.
355
356	  If compiled as a module, the module name will be
357	  pinctrl-microchip-sgpio.
358
359config PINCTRL_OCELOT
360	tristate "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
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	select REGMAP_MMIO
370	help
371	  Support for the internal GPIO interfaces on Microsemi Ocelot and
372	  Jaguar2 SoCs.
373
374	  If conpiled as a module, the module name will be pinctrl-ocelot.
375
376config PINCTRL_PALMAS
377	tristate "Pinctrl driver for the PALMAS Series MFD devices"
378	depends on OF && MFD_PALMAS
379	select PINMUX
380	select GENERIC_PINCONF
381	help
382	  Palmas device supports the configuration of pins for different
383	  functionality. This driver supports the pinmux, push-pull and
384	  open drain configuration for the Palmas series devices like
385	  TPS65913, TPS80036 etc.
386
387config PINCTRL_PEF2256
388	tristate "Lantiq PEF2256 (FALC56) pin controller driver"
389	depends on OF && FRAMER_PEF2256
390	select PINMUX
391	select PINCONF
392	select GENERIC_PINCONF
393	help
394	  This option enables the pin controller support for the Lantiq PEF2256
395	  framer, also known as FALC56.
396
397	  If unsure, say N.
398
399	  To compile this driver as a module, choose M here: the
400	  module will be called pinctrl-pef2256.
401
402config PINCTRL_PIC32
403	bool "Microchip PIC32 pin controller driver"
404	depends on OF
405	depends on MACH_PIC32
406	select PINMUX
407	select GENERIC_PINCONF
408	select GPIOLIB_IRQCHIP
409	select OF_GPIO
410	help
411	  This is the pin controller and gpio driver for Microchip PIC32
412	  microcontrollers. This option is selected automatically when specific
413	  machine and arch are selected to build.
414
415config PINCTRL_PIC32MZDA
416	def_bool y if PIC32MZDA
417	select PINCTRL_PIC32
418
419config PINCTRL_PISTACHIO
420	bool "IMG Pistachio SoC pinctrl driver"
421	depends on OF && (MIPS || COMPILE_TEST)
422	depends on GPIOLIB
423	select PINMUX
424	select GENERIC_PINCONF
425	select GPIOLIB_IRQCHIP
426	select OF_GPIO
427	help
428	  This support pinctrl and GPIO driver for IMG Pistachio SoC.
429
430config PINCTRL_RK805
431	tristate "Pinctrl and GPIO driver for RK805 PMIC"
432	depends on MFD_RK8XX
433	select GPIOLIB
434	select PINMUX
435	select GENERIC_PINCONF
436	help
437	  This selects the pinctrl driver for RK805.
438
439config PINCTRL_ROCKCHIP
440	tristate "Rockchip gpio and pinctrl driver"
441	depends on ARCH_ROCKCHIP || COMPILE_TEST
442	depends on OF
443	select GPIOLIB
444	select PINMUX
445	select GENERIC_PINCONF
446	select GENERIC_IRQ_CHIP
447	select MFD_SYSCON
448	select OF_GPIO
449	default ARCH_ROCKCHIP
450	help
451          This support pinctrl and GPIO driver for Rockchip SoCs.
452
453config PINCTRL_SINGLE
454	tristate "One-register-per-pin type device tree based pinctrl driver"
455	depends on OF
456	depends on HAS_IOMEM
457	select GENERIC_PINCTRL_GROUPS
458	select GENERIC_PINMUX_FUNCTIONS
459	select GENERIC_PINCONF
460	help
461	  This selects the device tree based generic pinctrl driver.
462
463config PINCTRL_ST
464	bool
465	depends on OF
466	select PINMUX
467	select PINCONF
468	select GPIOLIB_IRQCHIP
469
470config PINCTRL_STMFX
471	tristate "STMicroelectronics STMFX GPIO expander pinctrl driver"
472	depends on I2C
473	depends on OF_GPIO
474	select GENERIC_PINCONF
475	select GPIOLIB_IRQCHIP
476	select MFD_STMFX
477	help
478	  Driver for STMicroelectronics Multi-Function eXpander (STMFX)
479	  GPIO expander.
480	  This provides a GPIO interface supporting inputs and outputs,
481	  and configuring push-pull, open-drain, and can also be used as
482	  interrupt-controller.
483
484config PINCTRL_SX150X
485	bool "Semtech SX150x I2C GPIO expander pinctrl driver"
486	depends on I2C=y
487	select PINMUX
488	select PINCONF
489	select GENERIC_PINCONF
490	select GPIOLIB
491	select GPIOLIB_IRQCHIP
492	select REGMAP
493	help
494	  Say Y here to provide support for Semtech SX150x-series I2C
495	  GPIO expanders as pinctrl module.
496	  Compatible models include:
497	  - 8 bits:  sx1508q, sx1502q
498	  - 16 bits: sx1509q, sx1506q
499
500config PINCTRL_TB10X
501	bool
502	depends on OF && ARC_PLAT_TB10X
503	select GPIOLIB
504
505config PINCTRL_TPS6594
506	tristate "Pinctrl and GPIO driver for TI TPS6594 PMIC"
507	depends on OF && MFD_TPS6594
508	default MFD_TPS6594
509	select PINMUX
510	select GPIOLIB
511	select REGMAP
512	select GPIO_REGMAP
513	select GENERIC_PINCONF
514	help
515	  Say Y to select the pinmuxing and GPIOs driver for the TPS6594
516	  PMICs chip family.
517
518	  This driver can also be built as a module
519	  called tps6594-pinctrl.
520
521config PINCTRL_ZYNQ
522	bool "Pinctrl driver for Xilinx Zynq"
523	depends on ARCH_ZYNQ
524	select PINMUX
525	select GENERIC_PINCONF
526	help
527	  This selects the pinctrl driver for Xilinx Zynq.
528
529config PINCTRL_ZYNQMP
530	tristate "Pinctrl driver for Xilinx ZynqMP"
531	depends on ZYNQMP_FIRMWARE
532	select PINMUX
533	select GENERIC_PINCONF
534	default ZYNQMP_FIRMWARE
535	help
536	  This selects the pinctrl driver for Xilinx ZynqMP platform.
537	  This driver will query the pin information from the firmware
538	  and allow configuring the pins.
539	  Configuration can include the mux function to select on those
540	  pin(s)/group(s), and various pin configuration parameters
541	  such as pull-up, slew rate, etc.
542	  This driver can also be built as a module. If so, the module
543	  will be called pinctrl-zynqmp.
544
545config PINCTRL_MLXBF3
546	tristate "NVIDIA BlueField-3 SoC Pinctrl driver"
547	depends on (MELLANOX_PLATFORM && ARM64) || COMPILE_TEST
548	select PINMUX
549	select GPIOLIB
550	select GPIOLIB_IRQCHIP
551	help
552	  Say Y to select the pinctrl driver for BlueField-3 SoCs.
553	  This pin controller allows selecting the mux function for
554	  each pin. This driver can also be built as a module called
555	  pinctrl-mlxbf3.
556
557source "drivers/pinctrl/actions/Kconfig"
558source "drivers/pinctrl/aspeed/Kconfig"
559source "drivers/pinctrl/bcm/Kconfig"
560source "drivers/pinctrl/berlin/Kconfig"
561source "drivers/pinctrl/cirrus/Kconfig"
562source "drivers/pinctrl/freescale/Kconfig"
563source "drivers/pinctrl/intel/Kconfig"
564source "drivers/pinctrl/mediatek/Kconfig"
565source "drivers/pinctrl/meson/Kconfig"
566source "drivers/pinctrl/mvebu/Kconfig"
567source "drivers/pinctrl/nomadik/Kconfig"
568source "drivers/pinctrl/nuvoton/Kconfig"
569source "drivers/pinctrl/nxp/Kconfig"
570source "drivers/pinctrl/pxa/Kconfig"
571source "drivers/pinctrl/qcom/Kconfig"
572source "drivers/pinctrl/realtek/Kconfig"
573source "drivers/pinctrl/renesas/Kconfig"
574source "drivers/pinctrl/samsung/Kconfig"
575source "drivers/pinctrl/spear/Kconfig"
576source "drivers/pinctrl/sprd/Kconfig"
577source "drivers/pinctrl/starfive/Kconfig"
578source "drivers/pinctrl/stm32/Kconfig"
579source "drivers/pinctrl/sunplus/Kconfig"
580source "drivers/pinctrl/sunxi/Kconfig"
581source "drivers/pinctrl/tegra/Kconfig"
582source "drivers/pinctrl/ti/Kconfig"
583source "drivers/pinctrl/uniphier/Kconfig"
584source "drivers/pinctrl/visconti/Kconfig"
585source "drivers/pinctrl/vt8500/Kconfig"
586
587endif
588