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_BM1880
131	bool "Bitmain BM1880 Pinctrl driver"
132	depends on OF && (ARCH_BITMAIN || COMPILE_TEST)
133	default ARCH_BITMAIN
134	select PINMUX
135	help
136	  Pinctrl driver for Bitmain BM1880 SoC.
137
138config PINCTRL_DA850_PUPD
139	tristate "TI DA850/OMAP-L138/AM18XX pull-up and pull-down groups"
140	depends on OF && (ARCH_DAVINCI_DA850 || COMPILE_TEST)
141	select PINCONF
142	select GENERIC_PINCONF
143	help
144	  Driver for TI DA850/OMAP-L138/AM18XX pinconf. Used to control
145	  pull-up and pull-down pin groups.
146
147config PINCTRL_DA9062
148	tristate "Dialog Semiconductor DA9062 PMIC pinctrl and GPIO Support"
149	depends on MFD_DA9062
150	select GPIOLIB
151	help
152	  The Dialog DA9062 PMIC provides multiple GPIOs that can be muxed for
153	  different functions. This driver bundles a pinctrl driver to select the
154	  function muxing and a GPIO driver to handle the GPIO when the GPIO
155	  function is selected.
156
157	  Say Y to enable pinctrl and GPIO support for the DA9062 PMIC.
158
159config PINCTRL_DIGICOLOR
160	bool
161	depends on OF && (ARCH_DIGICOLOR || COMPILE_TEST)
162	select PINMUX
163	select GENERIC_PINCONF
164
165config PINCTRL_EQUILIBRIUM
166	tristate "Generic pinctrl and GPIO driver for Intel Lightning Mountain SoC"
167	depends on OF && HAS_IOMEM
168	depends on X86 || COMPILE_TEST
169	select PINMUX
170	select PINCONF
171	select GPIOLIB
172	select GPIO_GENERIC
173	select GPIOLIB_IRQCHIP
174	select GENERIC_PINCONF
175	select GENERIC_PINCTRL_GROUPS
176	select GENERIC_PINMUX_FUNCTIONS
177	help
178	  Equilibrium driver is a pinctrl and GPIO driver for Intel Lightning
179	  Mountain network processor SoC that supports both the GPIO and pin
180	  control frameworks. It provides interfaces to setup pin muxing, assign
181	  desired pin functions, configure GPIO attributes for LGM SoC pins.
182	  Pin muxing and pin config settings are retrieved from device tree.
183
184config PINCTRL_GEMINI
185	bool
186	depends on ARCH_GEMINI
187	default ARCH_GEMINI
188	select PINMUX
189	select GENERIC_PINCONF
190	select MFD_SYSCON
191
192config PINCTRL_INGENIC
193	bool "Pinctrl driver for the Ingenic JZ47xx SoCs"
194	default MACH_INGENIC
195	depends on OF
196	depends on MIPS || COMPILE_TEST
197	select GENERIC_PINCONF
198	select GENERIC_PINCTRL_GROUPS
199	select GENERIC_PINMUX_FUNCTIONS
200	select GPIOLIB
201	select GPIOLIB_IRQCHIP
202	select REGMAP_MMIO
203
204config PINCTRL_K210
205	bool "Pinctrl driver for the Canaan Kendryte K210 SoC"
206	depends on RISCV && SOC_CANAAN && OF
207	select GENERIC_PINMUX_FUNCTIONS
208	select GENERIC_PINCONF
209	select GPIOLIB
210	select OF_GPIO
211	select REGMAP_MMIO
212	default SOC_CANAAN
213	help
214	  Add support for the Canaan Kendryte K210 RISC-V SOC Field
215	  Programmable IO Array (FPIOA) controller.
216
217config PINCTRL_KEEMBAY
218	tristate "Pinctrl driver for Intel Keem Bay SoC"
219	depends on ARCH_KEEMBAY || (ARM64 && COMPILE_TEST)
220	depends on HAS_IOMEM
221	select PINMUX
222	select PINCONF
223	select GENERIC_PINCONF
224	select GENERIC_PINCTRL_GROUPS
225	select GENERIC_PINMUX_FUNCTIONS
226	select GPIOLIB
227	select GPIOLIB_IRQCHIP
228	select GPIO_GENERIC
229	help
230	  This selects pin control driver for the Intel Keem Bay SoC.
231	  It provides pin config functions such as pull-up, pull-down,
232	  interrupt, drive strength, sec lock, Schmitt trigger, slew
233	  rate control and direction control. This module will be
234	  called as pinctrl-keembay.
235
236config PINCTRL_LANTIQ
237	bool
238	depends on LANTIQ
239	select PINMUX
240	select PINCONF
241
242config PINCTRL_FALCON
243	bool
244	depends on SOC_FALCON
245	depends on PINCTRL_LANTIQ
246
247config PINCTRL_XWAY
248	bool
249	depends on SOC_TYPE_XWAY
250	depends on PINCTRL_LANTIQ
251
252config PINCTRL_LPC18XX
253	bool "NXP LPC18XX/43XX SCU pinctrl driver"
254	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
255	default ARCH_LPC18XX
256	select PINMUX
257	select GENERIC_PINCONF
258	help
259	  Pinctrl driver for NXP LPC18xx/43xx System Control Unit (SCU).
260
261config PINCTRL_MAX77620
262	tristate "MAX77620/MAX20024 Pincontrol support"
263	depends on MFD_MAX77620 && OF
264	select PINMUX
265	select GENERIC_PINCONF
266	help
267	  Say Y here to enable Pin control support for Maxim MAX77620 PMIC.
268	  This PMIC has 8 GPIO pins that work as GPIO as well as special
269	  function in alternate mode. This driver also configure push-pull,
270	  open drain, FPS slots etc.
271
272config PINCTRL_MCP23S08_I2C
273	tristate
274	select REGMAP_I2C
275
276config PINCTRL_MCP23S08_SPI
277	tristate
278	select REGMAP_SPI
279
280config PINCTRL_MCP23S08
281	tristate "Microchip MCP23xxx I/O expander"
282	depends on SPI_MASTER || I2C
283	select GPIOLIB
284	select GPIOLIB_IRQCHIP
285	select GENERIC_PINCONF
286	select PINCTRL_MCP23S08_I2C if I2C
287	select PINCTRL_MCP23S08_SPI if SPI_MASTER
288	help
289	  SPI/I2C driver for Microchip MCP23S08 / MCP23S17 / MCP23S18 /
290	  MCP23008 / MCP23017 / MCP23018 I/O expanders.
291	  This provides a GPIO interface supporting inputs and outputs and a
292	  corresponding interrupt-controller.
293
294config PINCTRL_MICROCHIP_SGPIO
295	bool "Pinctrl driver for Microsemi/Microchip Serial GPIO"
296	depends on OF
297	depends on HAS_IOMEM
298	select GPIOLIB
299	select GPIOLIB_IRQCHIP
300	select GENERIC_PINCONF
301	select GENERIC_PINCTRL_GROUPS
302	select GENERIC_PINMUX_FUNCTIONS
303	select OF_GPIO
304	help
305	  Support for the serial GPIO interface used on Microsemi and
306	  Microchip SoCs. By using a serial interface, the SIO
307	  controller significantly extends the number of available
308	  GPIOs with a minimum number of additional pins on the
309	  device. The primary purpose of the SIO controller is to
310	  connect control signals from SFP modules and to act as an
311	  LED controller.
312
313config PINCTRL_OCELOT
314	bool "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
315	depends on OF
316	depends on HAS_IOMEM
317	select GPIOLIB
318	select GPIOLIB_IRQCHIP
319	select GENERIC_PINCONF
320	select GENERIC_PINCTRL_GROUPS
321	select GENERIC_PINMUX_FUNCTIONS
322	select OF_GPIO
323	select REGMAP_MMIO
324
325config PINCTRL_OXNAS
326	bool
327	depends on OF
328	select PINMUX
329	select PINCONF
330	select GENERIC_PINCONF
331	select GPIOLIB
332	select OF_GPIO
333	select GPIOLIB_IRQCHIP
334	select MFD_SYSCON
335
336config PINCTRL_PALMAS
337	tristate "Pinctrl driver for the PALMAS Series MFD devices"
338	depends on OF && MFD_PALMAS
339	select PINMUX
340	select GENERIC_PINCONF
341	help
342	  Palmas device supports the configuration of pins for different
343	  functionality. This driver supports the pinmux, push-pull and
344	  open drain configuration for the Palmas series devices like
345	  TPS65913, TPS80036 etc.
346
347config PINCTRL_PIC32
348	bool "Microchip PIC32 pin controller driver"
349	depends on OF
350	depends on MACH_PIC32
351	select PINMUX
352	select GENERIC_PINCONF
353	select GPIOLIB_IRQCHIP
354	select OF_GPIO
355	help
356	  This is the pin controller and gpio driver for Microchip PIC32
357	  microcontrollers. This option is selected automatically when specific
358	  machine and arch are selected to build.
359
360config PINCTRL_PIC32MZDA
361	def_bool y if PIC32MZDA
362	select PINCTRL_PIC32
363
364config PINCTRL_PISTACHIO
365	bool "IMG Pistachio SoC pinctrl driver"
366	depends on OF && (MIPS || COMPILE_TEST)
367	depends on GPIOLIB
368	select PINMUX
369	select GENERIC_PINCONF
370	select GPIOLIB_IRQCHIP
371	select OF_GPIO
372	help
373	  This support pinctrl and GPIO driver for IMG Pistachio SoC.
374
375config PINCTRL_RK805
376	tristate "Pinctrl and GPIO driver for RK805 PMIC"
377	depends on MFD_RK808
378	select GPIOLIB
379	select PINMUX
380	select GENERIC_PINCONF
381	help
382	  This selects the pinctrl driver for RK805.
383
384config PINCTRL_ROCKCHIP
385	tristate "Rockchip gpio and pinctrl driver"
386	depends on ARCH_ROCKCHIP || COMPILE_TEST
387	depends on OF
388	select GPIOLIB
389	select PINMUX
390	select GENERIC_PINCONF
391	select GENERIC_IRQ_CHIP
392	select MFD_SYSCON
393	select OF_GPIO
394	default ARCH_ROCKCHIP
395	help
396          This support pinctrl and GPIO driver for Rockchip SoCs.
397
398config PINCTRL_SINGLE
399	tristate "One-register-per-pin type device tree based pinctrl driver"
400	depends on OF
401	depends on HAS_IOMEM
402	select GENERIC_PINCTRL_GROUPS
403	select GENERIC_PINMUX_FUNCTIONS
404	select GENERIC_PINCONF
405	help
406	  This selects the device tree based generic pinctrl driver.
407
408config PINCTRL_ST
409	bool
410	depends on OF
411	select PINMUX
412	select PINCONF
413	select GPIOLIB_IRQCHIP
414
415config PINCTRL_STARFIVE
416	tristate "Pinctrl and GPIO driver for the StarFive JH7100 SoC"
417	depends on SOC_STARFIVE || COMPILE_TEST
418	depends on OF
419	default SOC_STARFIVE
420	select GENERIC_PINCTRL_GROUPS
421	select GENERIC_PINMUX_FUNCTIONS
422	select GENERIC_PINCONF
423	select GPIOLIB
424	select GPIOLIB_IRQCHIP
425	select OF_GPIO
426	help
427	  Say yes here to support pin control on the StarFive JH7100 SoC.
428	  This also provides an interface to the GPIO pins not used by other
429	  peripherals supporting inputs, outputs, configuring pull-up/pull-down
430	  and interrupts on input changes.
431
432config PINCTRL_STMFX
433	tristate "STMicroelectronics STMFX GPIO expander pinctrl driver"
434	depends on I2C
435	depends on OF_GPIO
436	select GENERIC_PINCONF
437	select GPIOLIB_IRQCHIP
438	select MFD_STMFX
439	help
440	  Driver for STMicroelectronics Multi-Function eXpander (STMFX)
441	  GPIO expander.
442	  This provides a GPIO interface supporting inputs and outputs,
443	  and configuring push-pull, open-drain, and can also be used as
444	  interrupt-controller.
445
446config PINCTRL_SX150X
447	bool "Semtech SX150x I2C GPIO expander pinctrl driver"
448	depends on I2C=y
449	select PINMUX
450	select PINCONF
451	select GENERIC_PINCONF
452	select GPIOLIB
453	select GPIOLIB_IRQCHIP
454	select REGMAP
455	help
456	  Say Y here to provide support for Semtech SX150x-series I2C
457	  GPIO expanders as pinctrl module.
458	  Compatible models include:
459	  - 8 bits:  sx1508q, sx1502q
460	  - 16 bits: sx1509q, sx1506q
461
462config PINCTRL_TB10X
463	bool
464	depends on OF && ARC_PLAT_TB10X
465	select GPIOLIB
466
467config PINCTRL_THUNDERBAY
468	tristate "Generic pinctrl and GPIO driver for Intel Thunder Bay SoC"
469	depends on ARCH_THUNDERBAY || (ARM64 && COMPILE_TEST)
470	depends on HAS_IOMEM
471	select PINMUX
472	select PINCONF
473	select GENERIC_PINCONF
474	select GENERIC_PINCTRL_GROUPS
475	select GENERIC_PINMUX_FUNCTIONS
476	select GPIOLIB
477	select GPIOLIB_IRQCHIP
478	select GPIO_GENERIC
479	help
480	  This selects pin control driver for the Intel Thunder Bay SoC.
481	  It provides pin config functions such as pull-up, pull-down,
482	  interrupt, drive strength, sec lock, Schmitt trigger, slew
483	  rate control and direction control. This module will be
484	  called as pinctrl-thunderbay.
485
486config PINCTRL_ZYNQ
487	bool "Pinctrl driver for Xilinx Zynq"
488	depends on ARCH_ZYNQ
489	select PINMUX
490	select GENERIC_PINCONF
491	help
492	  This selects the pinctrl driver for Xilinx Zynq.
493
494config PINCTRL_ZYNQMP
495	tristate "Pinctrl driver for Xilinx ZynqMP"
496	depends on ZYNQMP_FIRMWARE
497	select PINMUX
498	select GENERIC_PINCONF
499	default ZYNQMP_FIRMWARE
500	help
501	  This selects the pinctrl driver for Xilinx ZynqMP platform.
502	  This driver will query the pin information from the firmware
503	  and allow configuring the pins.
504	  Configuration can include the mux function to select on those
505	  pin(s)/group(s), and various pin configuration parameters
506	  such as pull-up, slew rate, etc.
507	  This driver can also be built as a module. If so, the module
508	  will be called pinctrl-zynqmp.
509
510source "drivers/pinctrl/actions/Kconfig"
511source "drivers/pinctrl/aspeed/Kconfig"
512source "drivers/pinctrl/bcm/Kconfig"
513source "drivers/pinctrl/berlin/Kconfig"
514source "drivers/pinctrl/cirrus/Kconfig"
515source "drivers/pinctrl/freescale/Kconfig"
516source "drivers/pinctrl/intel/Kconfig"
517source "drivers/pinctrl/mediatek/Kconfig"
518source "drivers/pinctrl/meson/Kconfig"
519source "drivers/pinctrl/mvebu/Kconfig"
520source "drivers/pinctrl/nomadik/Kconfig"
521source "drivers/pinctrl/nuvoton/Kconfig"
522source "drivers/pinctrl/pxa/Kconfig"
523source "drivers/pinctrl/qcom/Kconfig"
524source "drivers/pinctrl/ralink/Kconfig"
525source "drivers/pinctrl/renesas/Kconfig"
526source "drivers/pinctrl/samsung/Kconfig"
527source "drivers/pinctrl/spear/Kconfig"
528source "drivers/pinctrl/sprd/Kconfig"
529source "drivers/pinctrl/stm32/Kconfig"
530source "drivers/pinctrl/sunplus/Kconfig"
531source "drivers/pinctrl/sunxi/Kconfig"
532source "drivers/pinctrl/tegra/Kconfig"
533source "drivers/pinctrl/ti/Kconfig"
534source "drivers/pinctrl/uniphier/Kconfig"
535source "drivers/pinctrl/visconti/Kconfig"
536source "drivers/pinctrl/vt8500/Kconfig"
537
538endif
539