#
# GPIO infrastructure and drivers
#

menuconfig GPIO
	bool "GPIO support"
	default y
	help
	  Enable support for GPIOs (General-purpose Input/Output) in U-Boot.
	  GPIOs allow U-Boot to read the state of an input line (high or
	  low) and set the state of an output line. This can be used to
	  drive LEDs, control power to various system parts and read user
	  input. GPIOs can be useful to enable a 'sign-of-life' LED,
	  for example. Enable this option to build the drivers in
	  drivers/gpio as part of an U-Boot build.

if GPIO

config DM_GPIO
	bool "Enable Driver Model for GPIO drivers"
	depends on DM
	help
	  Enable driver model for GPIO access. The standard GPIO
	  interface (gpio_get_value(), etc.) is then implemented by
	  the GPIO uclass. Drivers provide methods to query the
	  particular GPIOs that they provide. The uclass interface
	  is defined in include/asm-generic/gpio.h.

config SPL_DM_GPIO
	bool "Enable Driver Model for GPIO drivers in SPL"
	depends on DM_GPIO && SPL_DM && SPL_GPIO
	default y
	help
	  Enable driver model for GPIO access in SPL. The standard GPIO
	  interface (gpio_get_value(), etc.) is then implemented by
	  the GPIO uclass. Drivers provide methods to query the
	  particular GPIOs that they provide. The uclass interface
	  is defined in include/asm-generic/gpio.h.

config TPL_DM_GPIO
	bool "Enable Driver Model for GPIO drivers in TPL"
	depends on DM_GPIO && TPL_DM && TPL_GPIO
	default y
	help
	  Enable driver model for GPIO access in TPL. The standard GPIO
	  interface (gpio_get_value(), etc.) is then implemented by
	  the GPIO uclass. Drivers provide methods to query the
	  particular GPIOs that they provide. The uclass interface
	  is defined in include/asm-generic/gpio.h.

config VPL_DM_GPIO
	bool "Enable Driver Model for GPIO drivers in VPL"
	depends on DM_GPIO && VPL_DM && VPL_GPIO
	default y
	help
	  Enable driver model for GPIO access in VPL. The standard GPIO
	  interface (gpio_get_value(), etc.) is then implemented by
	  the GPIO uclass. Drivers provide methods to query the
	  particular GPIOs that they provide. The uclass interface
	  is defined in include/asm-generic/gpio.h.

config GPIO_HOG
	bool "Enable GPIO hog support"
	depends on DM_GPIO
	help
	  Enable gpio hog support
	  The GPIO chip may contain GPIO hog definitions. GPIO hogging
	  is a mechanism providing automatic GPIO request and config-
	  uration as part of the gpio-controller's driver probe function.

config SPL_GPIO_HOG
	bool "Enable GPIO hog support in SPL"
	depends on SPL_GPIO
	help
	  Enable gpio hog support in SPL
	  The GPIO chip may contain GPIO hog definitions. GPIO hogging
	  is a mechanism providing automatic GPIO request and config-
	  uration as part of the gpio-controller's driver probe function.

config DM_GPIO_LOOKUP_LABEL
	bool "Enable searching for gpio labelnames"
	depends on DM_GPIO
	help
	  This option enables searching for gpio names in
	  the defined gpio labels, if the search for the
	  gpio bank name failed. This makes sense if you use
	  different gpios on different hardware versions
	  for the same functionality in board code.

config SPL_DM_GPIO_LOOKUP_LABEL
	bool "Enable searching for gpio labelnames"
	depends on SPL_DM_GPIO
	help
	  This option enables searching for gpio names in
	  the defined gpio labels, if the search for the
	  gpio bank name failed. This makes sense if you use
	  different gpios on different hardware versions
	  for the same functionality in board code.

config ALTERA_PIO
	bool "Altera PIO driver"
	depends on DM_GPIO
	help
	  Select this to enable PIO for Altera devices. Please find
	  details on the "Embedded Peripherals IP User Guide" of Altera.

config BCM2835_GPIO
	bool "BCM2835 GPIO driver"
	depends on DM_GPIO

config BCM6345_GPIO
	bool "BCM6345 GPIO driver"
	depends on DM_GPIO && (ARCH_BMIPS || BCM6856 || \
			       BCM6858 || BCM63158 || BCM6855)
	help
	  This driver supports the GPIO banks on BCM6345 SoCs.

config CORTINA_GPIO
	bool "Cortina-Access GPIO driver"
	depends on DM_GPIO && CORTINA_PLATFORM
	help
	  Enable support for the GPIO controller in Cortina CAxxxx SoCs.
	  This driver supports all CPU ISA variants supported by Cortina
	  Access CAxxxx SoCs.

config DWAPB_GPIO
	bool "DWAPB GPIO driver"
	depends on DM && DM_GPIO
	help
	  Support for the Designware APB GPIO driver.

config AT91_GPIO
	bool "AT91 PIO GPIO driver"
	help
	  Say yes here to select AT91 PIO GPIO driver. AT91 PIO
	  controller manages up to 32 fully programmable input/output
	  lines. Each I/O line may be dedicated as a general-purpose
	  I/O or be assigned to a function of an embedded peripheral.
	  The assignment to a function of an embedded peripheral is
	  the responsibility of AT91 Pinctrl driver. This driver is
	  responsible for the general-purpose I/O.

config ATMEL_PIO4
	bool "ATMEL PIO4 driver"
	depends on DM_GPIO
	help
	  Say yes here to support the Atmel PIO4 driver.
	  The PIO4 is new version of Atmel PIO controller, which manages
	  up to 128 fully programmable input/output lines. Each I/O line
	  may be dedicated as a general purpose I/O or be assigned to
	  a function of an embedded peripheral.

config ASPEED_GPIO
	bool "Aspeed GPIO Driver"
	help
	  Say yes here to support the Aspeed GPIO driver. The controller
	  is found in the AST2400, AST2500 and AST2600 BMC SoCs and
	  provides access to over 200 GPIOs on each chip.

config DA8XX_GPIO
	bool "DA8xx GPIO Driver"
	help
	  This driver supports the DA8xx GPIO controller

config FXL6408_GPIO
	bool "FXL6408 I2C GPIO expander driver"
	depends on DM_GPIO && DM_I2C
	help
	  This driver supports the Fairchild FXL6408 device. FXL6408 is a
	  fully configurable 8-bit I2C-controlled GPIO expander.

config HIKEY_GPIO
	bool "HI6220 GPIO driver"
	depends on DM_GPIO

config INTEL_BROADWELL_GPIO
	bool "Intel Broadwell GPIO driver"
	depends on DM
	help
	  This driver supports Broadwell U devices which have an expanded
	  GPIO feature set. The difference is large enough to merit a separate
	  driver from the common Intel ICH6 driver. It supports a total of
	  95 GPIOs which can be configured from the device tree.

config INTEL_GPIO
	bool "Intel generic GPIO driver"
	depends on DM_GPIO
	help
	  Say yes here to select Intel generic GPIO driver. This controller
	  supports recent chips (e.g. Apollo Lake). It permits basic GPIO
	  control including setting pins to input/output. It makes use of its
	  parent pinctrl driver to actually effect changes.

config INTEL_ICH6_GPIO
	bool "Intel ICH6 compatible legacy GPIO driver"
	depends on DM_GPIO
	help
	  Say yes here to select Intel ICH6 compatible legacy GPIO driver.

config IMX_RGPIO2P
	bool "i.MX7ULP RGPIO2P driver"
	depends on DM
	help
	  This driver supports i.MX7ULP Rapid GPIO2P controller.

config IPROC_GPIO
	bool "Broadcom iProc GPIO driver(without pinconf)"
	help
	  The Broadcom iProc based SoCs- Cygnus, NS2, NS3, NSP and Stingray,
	  use the same GPIO Controller IP hence this driver could be used
	  for all.

	  The Broadcom iProc based SoCs have multiple GPIO controllers and only
	  the always-ON GPIO controller (CRMU/AON) is supported by this driver.

config HSDK_CREG_GPIO
	bool "HSDK CREG GPIO griver"
	depends on DM_GPIO
	help
	  This driver supports CREG GPIOs on Synopsys HSDK SOC.

config KIRKWOOD_GPIO
	bool "Kirkwood GPIO driver"
	help
	  This drdiver supports GPIOs on Kirkwood platforms

config LPC32XX_GPIO
	bool "LPC32XX GPIO driver"
	depends on DM
	help
	  Support for the LPC32XX GPIO driver.

config MAX7320_GPIO
	bool "MAX7320 I2C GPIO Expander driver"
	depends on DM_GPIO && DM_I2C
	help
	 Support for MAX7320 I2C 8/16-bit GPIO expander.
	 original maxim device has 8 push/pull outputs,
	 some clones offers 16bit.

config MAX77663_GPIO
	bool "MAX77663 GPIO cell of PMIC driver"
	depends on DM_GPIO && DM_PMIC_MAX77663
	help
	  GPIO driver for MAX77663 PMIC from Maxim Semiconductor.
	  MAX77663 PMIC has 8 pins that can be configured as GPIOs
	  and 3 GPIO-like pins dedicated for power/reset buttons
	  and LID sensor.

config MCP230XX_GPIO
	bool "MCP230XX GPIO driver"
	depends on DM
	help
	  Support for Microchip's MCP230XX I2C connected GPIO devices.
	  The following chips are supported:
	   - MCP23008
	   - MCP23017
	   - MCP23018

config MSCC_SGPIO
	bool "Microsemi Serial GPIO driver"
	depends on DM_GPIO && SOC_VCOREIII
	help
	  Support for the VCoreIII SoC serial GPIO device. By using a
          serial interface, the SIO controller significantly extends
          the number of available GPIOs with a minimum number of
          additional pins on the device. The primary purpose of the
          SIO controller is to connect control signals from SFP
          modules and to act as an LED controller.

config MSM_GPIO
	bool "Qualcomm GPIO driver"
	depends on DM_GPIO
	help
	  Support GPIO controllers on Qualcomm Snapdragon family of SoCs.
	  This controller have single bank (default name "soc"), every
	  gpio has it's own set of registers.
	  Only simple GPIO operations are supported (get/set, change of
	  direction and checking pin function).
	  Supported devices:
	  - APQ8016
	  - MSM8916

config MXC_GPIO
	bool "Freescale/NXP MXC GPIO driver"
	help
	  Support GPIO controllers on various i.MX platforms

config MXS_GPIO
	bool "Freescale/NXP MXS GPIO driver"
	help
	  Support GPIO controllers on i.MX23 and i.MX28 platforms

config NPCM_GPIO
	bool "Nuvoton NPCM GPIO driver"
	depends on DM_GPIO
	help
	  Support GPIO controllers on Nuvovon NPCM SoCs.
	  NPCM7xx/NPCM8xx contain 8 GPIO banks, each bank contains 32 pins.

config OMAP_GPIO
	bool "TI OMAP GPIO driver"
	depends on ARCH_OMAP2PLUS
	default y
	help
	  Support GPIO controllers on the TI OMAP3/4/5 and related (such as
	  AM335x/AM43xx/AM57xx/DRA7xx/etc) families of SoCs.

config CMD_PCA953X
	bool "Enable the pca953x command"
	help
	  Deprecated: This should be converted to driver model.

	  This command provides access to a pca953x GPIO device using the
	  legacy GPIO interface. Several subcommands are provided which mirror
	  the standard 'gpio' command. It should use that instead.

config QCOM_PMIC_GPIO
	bool "Qualcomm generic PMIC GPIO/keypad driver"
	depends on DM_GPIO && PMIC_QCOM
	help
	  Support for GPIO pins and power/reset buttons found on
	  Qualcomm SoCs PMIC.
	  Default name for GPIO bank is "pm8916".
	  Power and reset buttons are placed in "pwkey_qcom" bank and
          have gpio numbers 0 and 1 respectively.

config PCF8575_GPIO
	bool "PCF8575 I2C GPIO Expander driver"
	depends on DM_GPIO && DM_I2C
	help
	 Support for PCF8575 I2C 16-bit GPIO expander. Most of these
	 chips are from NXP and TI.

config RCAR_GPIO
	bool "Renesas RCar GPIO driver"
	depends on DM_GPIO && ARCH_RMOBILE
	help
	  This driver supports the GPIO banks on Renesas RCar SoCs.

config RZA1_GPIO
	bool "Renesas RZ/A1 GPIO driver"
	depends on DM_GPIO && RZA1
	help
	  This driver supports the GPIO banks on Renesas RZ/A1 R7S72100 SoCs.

config ROCKCHIP_GPIO
	bool "Rockchip GPIO driver"
	depends on DM_GPIO
	help
	  Support GPIO access on Rockchip SoCs. The GPIOs are arranged into
	  a number of banks (different for each SoC type) each with 32 GPIOs.
	  The GPIOs for a device are defined in the device tree with one node
	  for each bank.

config SANDBOX_GPIO
	bool "Enable sandbox GPIO driver"
	depends on SANDBOX && DM && DM_GPIO
	help
	  This driver supports some simulated GPIOs which can be adjusted
	  using 'back door' functions like sandbox_gpio_set_value(). Then the
	  GPIOs can be inspected through the normal get_get_value()
	  interface. The purpose of this is to allow GPIOs to be used as
	  normal in sandbox, perhaps with test code actually driving the
	  behaviour of those GPIOs.

config SANDBOX_GPIO_COUNT
	int "Number of sandbox GPIOs"
	depends on SANDBOX_GPIO
	default 128
	help
	  The sandbox driver can support any number of GPIOs. Generally these
	  are specified using the device tree. But you can also have a number
	  of 'anonymous' GPIOs that do not belong to any device or bank.
	  Select a suitable value depending on your needs.

config SUNXI_GPIO
	bool "Allwinner GPIO driver"
	depends on ARCH_SUNXI
	select SPL_STRTO if SPL
	help
	  Support the GPIO device in Allwinner SoCs.

config SUNXI_NEW_PINCTRL
	bool
	depends on SUNXI_GPIO
	---help---
	The Allwinner D1 and other new SoCs use a different register map
	for the GPIO block, which we need to know about in the SPL.

config XILINX_GPIO
	bool "Xilinx GPIO driver"
	depends on DM_GPIO
	help
	  This config enable the Xilinx GPIO driver for Microblaze.

config TCA642X
	bool "TCA642x legacy GPIO driver"

config CMD_TCA642X
	bool "tca642x - Command to access tca642x state"
	depends on TCA642X
	default y
	help
	  DEPRECATED - This needs conversion to driver model

	  This provides a way to looking at the pin state of this device.
	  This mirrors the 'gpio' command and that should be used in preference
	  to custom code.

config TEGRA_GPIO
	bool "Tegra20..210 GPIO driver"
	depends on DM_GPIO
	help
	  Support for the GPIO controller contained in NVIDIA Tegra20 through
	  Tegra210.

config TEGRA186_GPIO
	bool "Tegra186 GPIO driver"
	depends on DM_GPIO
	help
	  Support for the GPIO controller contained in NVIDIA Tegra186. This
	  covers both the "main" and "AON" controller instances, even though
	  they have slightly different register layout.

config GPIO_UNIPHIER
	bool "UniPhier GPIO"
	depends on ARCH_UNIPHIER
	help
	  Say yes here to support UniPhier GPIOs.

config VYBRID_GPIO
	bool "Vybrid GPIO driver"
	depends on DM
	help
	  Say yes here to support Vybrid vf610 GPIOs.

config PALMAS_GPIO
	bool "TI PALMAS series PMICs GPIO"
	depends on DM_GPIO && PMIC_PALMAS
	help
	  Select this option to enable GPIO driver for the TI PALMAS
	  series chip family.

config PIC32_GPIO
	bool "Microchip PIC32 GPIO driver"
	depends on DM_GPIO && MACH_PIC32
	default y
	help
	  Say yes here to support Microchip PIC32 GPIOs.

config OCTEON_GPIO
	bool "Octeon II/III/TX/TX2 GPIO driver"
	depends on DM_GPIO && PCI && (ARCH_OCTEON || ARCH_OCTEONTX || ARCH_OCTEONTX2)
	default y
	help
	  Add support for the Marvell Octeon GPIO driver. This is used with
	  various Octeon parts such as Octeon II/III and OcteonTX/TX2.
	  Octeon II/III has 32 GPIOs (count defined via DT) and OcteonTX/TX2
	  has 64 GPIOs (count defined via internal register).

config STM32_GPIO
	bool "ST STM32 GPIO driver"
	depends on DM_GPIO && (ARCH_STM32 || ARCH_STM32MP)
	default y
	help
	  Device model driver support for STM32 GPIO controller. It should be
	  usable on many stm32 families like stm32f4/f7/h7 and stm32mp1.
	  Tested on STM32F7.

config SIFIVE_GPIO
	bool "SiFive GPIO driver"
	depends on DM_GPIO
	help
	  Device model driver for GPIO controller present in SiFive FU540 SoC. This
	  driver enables GPIO interface on HiFive Unleashed A00 board.

config MVEBU_GPIO
	bool "Marvell MVEBU GPIO driver"
	depends on DM_GPIO && (ARCH_MVEBU || ARCH_KIRKWOOD)
	default y
	help
	  Say yes here to support Marvell MVEBU (Armada XP/38x) GPIOs.

config ZYNQ_GPIO
	bool "Zynq GPIO driver"
	depends on DM_GPIO
	default y if ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL
	help
	  Supports GPIO access on Zynq SoC.

config DM_74X164
	bool "74x164 serial-in/parallel-out 8-bits shift register"
	depends on DM_GPIO
	help
	  Driver for 74x164 compatible serial-in/parallel-out 8-outputs
	  shift registers, such as 74lv165, 74hc595.
	  This driver can be used to provide access to more gpio outputs.

config DM_PCA953X
	bool "PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports"
	depends on DM_GPIO && DM_I2C
	help
	  Say yes here to provide access to several register-oriented
	  SMBus I/O expanders, made mostly by NXP or TI.  Compatible
	  models include:

	  4 bits:	pca9536, pca9537

	  8 bits:	max7310, max7315, pca6107, pca9534, pca9538, pca9554,
			pca9556, pca9557, pca9574, tca6408, xra1202

	  16 bits:	max7312, max7313, pca9535, pca9539, pca9555, pca9575,
			tca6416

	  24 bits:	tca6424

	  40 bits:	pca9505, pca9698

	  Now, max 24 bits chips and PCA953X compatible chips are
	  supported

config SPL_DM_PCA953X
	bool "PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports in SPL"
	depends on SPL_DM_GPIO
	help
	  Say yes here to provide access to several register-oriented
	  SMBus I/O expanders, made mostly by NXP or TI.  Compatible
	  models include:

	  4 bits:	pca9536, pca9537

	  8 bits:	max7310, max7315, pca6107, pca9534, pca9538, pca9554,
			pca9556, pca9557, pca9574, tca6408, xra1202

	  16 bits:	max7312, max7313, pca9535, pca9539, pca9555, pca9575,
			tca6416

	  24 bits:	tca6424

	  40 bits:	pca9505, pca9698

	  Now, max 24 bits chips and PCA953X compatible chips are
	  supported

config PCA953X
	bool "NXP's PCA953X series I2C GPIO (legacy driver)"
	depends on !DM_PCA953X

config MPC8XXX_GPIO
	bool "Freescale MPC8XXX GPIO driver"
	depends on DM_GPIO
	help
	  This driver supports the built-in GPIO controller of MPC8XXX CPUs.
	  Each GPIO bank is identified by its own entry in the device tree,
	  i.e.

	  gpio-controller@fc00 {
		#gpio-cells = <2>;
		compatible = "fsl,pq3-gpio";
		reg = <0xfc00 0x100>
	  }

	  By default, each bank is assumed to have 32 GPIOs, but the ngpios
	  setting is honored, so the number of GPIOs for each bank is
	  configurable to match the actual GPIO count of the SoC (e.g. the
	  32/32/23 banks of the P1022 SoC).

	  Aside from the standard functions of input/output mode, and output
	  value setting, the open-drain feature, which can configure individual
	  GPIOs to work as open-drain outputs, is supported.

config QE_GPIO
	bool "Freescale QUICC ENGINE GPIO driver"
	depends on DM_GPIO
	depends on QE
	help
	  This driver supports the QUICC Engine GPIOs of MPC83XX CPUs.
	  Each GPIO bank is identified by its own entry in the device tree,
	  i.e.

	  qe_pio_a: gpio-controller@1400 {
		compatible = "fsl,mpc8323-qe-pario-bank";
		reg = <0x1400 0x18>;
		gpio-controller;
		#gpio-cells = <2>;
	  };

	  Each bank has 32 GPIOs.

config MPC8XX_GPIO
	bool "Freescale MPC8XX GPIO driver"
	depends on DM_GPIO
	help
	  This driver supports parallel IO ports from MPC8XX CPUs.
	  Each GPIO bank is identified by its own entry in the device tree.

config MPC83XX_SPISEL_BOOT
	bool "Freescale MPC83XX SPISEL_BOOT driver"
	depends on DM_GPIO && ARCH_MPC830X
	help
	  GPIO driver to set/clear dedicated SPISEL_BOOT output on MPC83XX.

	  This pin is typically used as spi chip select to a spi nor flash.

config MT7620_GPIO
	bool "MediaTek MT7620 GPIO driver"
	depends on DM_GPIO && SOC_MT7620
	default y
	help
	  Device model driver for GPIO controller present in MediaTek MT7620
	  and earlier SoCs.

config MT7621_GPIO
	bool "MediaTek MT7621 GPIO driver"
	depends on DM_GPIO && (SOC_MT7621 || SOC_MT7628)
	default y
	help
	  Say yes here to support MediaTek MT7621 compatible GPIOs.

config NX_GPIO
	bool "Nexell GPIO driver"
	depends on DM_GPIO
	help
	  Support GPIO access on Nexell SoCs. The GPIOs are arranged into
	  a number of banks (different for each SoC type) each with 32 GPIOs.
	  The GPIOs for a device are defined in the device tree with one node
	  for each bank.

config NOMADIK_GPIO
	bool "Nomadik GPIO driver"
	depends on DM_GPIO
	help
	  Support GPIO access on ST-Ericsson Ux500 SoCs. The GPIOs are arranged
	  into a number of banks each with 32 GPIOs. The GPIOs for a device are
	  defined in the device tree with one node for each bank.

config ZYNQMP_GPIO_MODEPIN
	bool "ZynqMP gpio modepin"
	depends on DM_GPIO
	help
	  This config enables the ZynqMP gpio modepin driver. ZynqMP modepin
	  driver will set and get the status of PS_MODE pins. These modepins
	  are accessed using xilinx firmware. In modepin register, [3:0] bits
	  set direction, [7:4] bits read IO, [11:8] bits set/clear IO.

config SH_GPIO_PFC
	bool "Pinmuxed GPIO support for SuperH"
	depends on RCAR_GEN2 && !PINCTRL_PFC
	default y

config SL28CPLD_GPIO
	bool "Kontron sl28cpld GPIO driver"
	depends on DM_GPIO && SL28CPLD
	help
	  Support GPIO access on Kontron sl28cpld board management controllers.

config SLG7XL45106_I2C_GPO
	bool "slg7xl45106 i2c gpo expander"
	depends on DM_GPIO
	help
	   Support for slg7xl45106 i2c gpo expander. It is an i2c based
	   8-bit gpo expander, all gpo lines are controlled by writing
	   value into data register.

config TURRIS_OMNIA_MCU
	bool "Turris Omnia MCU GPIO driver"
	depends on DM_GPIO
	default y if TARGET_TURRIS_OMNIA
	help
	   Support for GPIOs on MCU connected to Turris Omnia via i2c.

config FTGPIO010
	bool "Faraday Technology FTGPIO010 driver"
	depends on DM_GPIO
	help
	   Support for GPIOs on Faraday Technology's FTGPIO010 controller.

config ADP5585_GPIO
	bool "ADP5585 GPIO driver"
	depends on DM_GPIO && DM_I2C
	help
	  Support ADP5585 GPIO expander.

config RZG2L_GPIO
	bool "Renesas RZ/G2L family GPIO driver"
	depends on DM_GPIO && PINCTRL_RZG2L
	help
	  Support the gpio functionality of the pin function controller (PFC)
	  on the Renesas RZ/G2L SoC family.

endif
