#
# 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 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 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 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 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.

endif
