#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

menu "IO Expander/GPIO Support"

config IOEXPANDER
	bool "Enable IO Expander Support"
	default n
	---help---
		This directory holds implementations of IO expander drivers.
		See include/nuttx/ioexpander/ioexpander.h for registration information.

if IOEXPANDER

config IOEXPANDER_RPMSG
	bool "IO expander RPMSG server and client"
	depends on RPMSG
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		This settings enable ioexpander RPMSG server and client.

if IOEXPANDER_RPMSG

config IOEXPANDER_RPMSG_INT_NCALLBACKS
	int "number of ioexpander RPMSG interrupt callbacks"
	default 32
	---help---
		This set the IO expander number in interrupt callbacks.

endif # IOEXPANDER_RPMSG

config IOEXPANDER_DUMMY
	bool "Simulated I/O Expander"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Build a simple, simulated I/O Expander chip simulation (for testing
		purposes only).

if IOEXPANDER_DUMMY

config IOEXPANDER_DUMMY_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	---help---
		This is the maximum number of interrupt callbacks supported

config IOEXPANDER_DUMMY_INT_POLLDELAY
	int "Interrupt poll delay (used)"
	default 500000
	---help---
		This microsecond delay defines the polling rate for missed interrupts.

endif # IOEXPANDER_DUMMY

config IOEXPANDER_ICJX
	bool "iC-JX SPI IO expander"
	default n
	depends on SPI
	---help---
		Enable support for the iC-JX expander from iC-Haus GmbH manufacturer.
		SPI peripheral is used for the communication.

if IOEXPANDER_ICJX

config iC-JX_MULTIPLE
	bool "Multiple iC-JX Devices"
	default n
	---help---
		Can be defined to support multiple iC-JX devices on board.

endif # IOEXPANDER_ICJX

config IOEXPANDER_ISO1H812G
	bool "ISO1H812G SPI IO expander"
	default n
	depends on SPI
	---help---
		Enable support for the ISO1H812G SPI IO expander.

if IOEXPANDER_ISO1H812G

config ISO1H812G_MULTIPLE
	bool "Multiple ISO1H812G Devices"
	default n
	---help---
		Can be defined to support multiple ISO1H812G devices on board.

endif # IOEXPANDER_ISO1H812G

config IOEXPANDER_ISO1I813T
	bool "ISO1I813T SPI IO expander"
	default n
	depends on SPI
	---help---
		Enable support for the ISO1I813T SPI IO expander.

if IOEXPANDER_ISO1I813T

config ISO1I813T_MULTIPLE
	bool "Multiple ISO1I813T Devices"
	default n
	---help---
		Can be defined to support multiple ISO1I813T devices on board.

endif # IOEXPANDER_ISO1I813T

config IOEXPANDER_MCP23X08
	bool "MCP23008/MCP23S08 I2C/SPI IO expander"
	default n
	depends on I2C
	---help---
		Enable support for the MCP23008/MCP23S08 IO Expander

if IOEXPANDER_MCP23X08

config MCP23X08_MULTIPLE
	bool "Multiple MCP23x08 Devices"
	default n
	---help---
		Can be defined to support multiple MCP23x08 devices on board.

config MCP23X08_INT_ENABLE
	bool "Enable MCP23x08 Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config MCP23X08_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on MCP23X08_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config MCP23X08_INT_POLL
	bool "Enable interrupt poll"
	default n
	---help---
		Enable polling for missed interrupts.

config MCP23X08_INT_POLLDELAY
	int "Interrupt poll delay (used)"
	default 500000
	depends on MCP23X08_INT_POLL
	---help---
		This microsecond delay defines the polling rate for missed interrupts.

endif # IOEXPANDER_MCP23X08

config IOEXPANDER_MCP23X17
	bool "MCP23017/MCP23S17 I2C/SPI IO expander"
	default n
	depends on I2C
	---help---
		Enable support for the MCP23017/MCP23S17 IO Expander

if IOEXPANDER_MCP23X17

config MCP23X17_MULTIPLE
	bool "Multiple MCP23x17 Devices"
	default n
	---help---
		Can be defined to support multiple MCP23x17 devices on board.

config MCP23X17_INT_ENABLE
	bool "Enable MCP23x17 Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config MCP23X17_INT_MIRROR
	bool "Enable MCP23x17 Interrupt Mirror"
	default n
	select MCP23X17_INT_ENABLE
	---help---
		Enable driver interrupt mirror functionality

config MCP23X17_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on MCP23X17_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config MCP23X17_INT_POLL
	bool "Enable interrupt poll"
	default n
	---help---
		Enable polling for missed interrupts.

config MCP23X17_INT_POLLDELAY
	int "Interrupt poll delay (used)"
	default 500000
	depends on MCP23X17_INT_POLL
	---help---
		This microsecond delay defines the polling rate for missed interrupts.

endif # IOEXPANDER_MCP23X17

config IOEXPANDER_PCA9555
	bool "PCA9555 I2C IO expander"
	default n
	depends on I2C
	---help---
		Enable support for the NXP PCA9555 IO Expander

if IOEXPANDER_PCA9555

config PCA9555_MULTIPLE
	bool "Multiple PCA9555 Devices"
	default n
	---help---
		Can be defined to support multiple PCA9555 devices on board.

config PCA9555_INT_ENABLE
	bool "Enable PCA9555 Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config PCA9555_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on PCA9555_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config PCA9555_SHADOW_MODE
	bool "Use Shadow Mode instead of Read-Modify-Write Operations"
	default n
	---help---
		This setting enables a mode where the output and pin
		configuration registers are held in RAM.
		With this for example we do not need to read back the
		output-register every time we want to change one pin.
		We do instead change the bit in the internal register
		and then just write this register to the IO-Expander.
		This reduces bus traffic and eliminates the problem of
		EMC-caused toggling of output pins.

config PCA9555_RETRY
	bool "Retry to send commands and data at I2C communication errors"
	default n
	---help---
		Retry to send commands and data if a I2C-communication
		error occurs (eg. caused by EMC).

endif # IOEXPANDER_PCA9555

config IOEXPANDER_PCA9538
	bool "PCA9538 I2C IO expander"
	default n
	depends on I2C
	---help---
		Enable support for the NXP PCA9538 IO Expander

if IOEXPANDER_PCA9538

config PCA9538_MULTIPLE
	bool "Multiple PCA9538 Devices"
	default n
	---help---
		Can be defined to support multiple PCA9538 devices on board.

config PCA9538_INT_ENABLE
	bool "Enable PCA9538 Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config PCA9538_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on PCA9538_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config PCA9538_SHADOW_MODE
	bool "Use Shadow Mode instead of Read-Modify-Write Operations"
	default n
	---help---
		This setting enables a mode where the output and pin
		configuration registers are held in RAM.
		With this for example we do not need to read back the
		output-register every time we want to change one pin.
		We do instead change the bit in the internal register
		and then just write this register to the IO-Expander.
		This reduces bus traffic and eliminates the problem of
		EMC-caused toggling of output pins.

config PCA9538_RETRY
	bool "Retry to send commands and data at I2C communication errors"
	default n
	---help---
		Retry to send commands and data if a I2C-communication
		error occurs (eg. caused by EMC).

endif # IOEXPANDER_PCA9538

config IOEXPANDER_TCA64XX
	bool "TCA64XX I2C IO expander"
	default n
	depends on I2C && EXPERIMENTAL
	---help---
		Enable support for the TCA64XX IO Expander

if IOEXPANDER_TCA64XX

config TCA64XX_MULTIPLE
	bool "Multiple TCA64XX Devices"
	default n
	---help---
		Can be defined to support multiple TCA64XX devices on board.

config TCA64XX_INT_ENABLE
	bool "Enable TCA64XX Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config TCA64XX_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on TCA64XX_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config TCA64XX_INT_POLL
	bool "Enable interrupt poll"
	default n
	---help---
		Enable polling for missed interrupts.

config TCA64XX_INT_POLLDELAY
	int "Interrupt poll delay (used)"
	default 500000
	depends on TCA64XX_INT_POLL
	---help---
		This microsecond delay defines the polling rate for missed interrupts.

endif # IOEXPANDER_TCA64XX

config IOEXPANDER_PCF8574
	bool "PCF8574 I2C IO expander"
	default n
	depends on I2C && EXPERIMENTAL
	---help---
		Enable support for the PCF8574 IO Expander

if IOEXPANDER_PCF8574

config PCF8574_MULTIPLE
	bool "Multiple PCF8574 Devices"
	default n
	---help---
		Can be defined to support multiple PCF8574 devices on board.

config PCF8574_INT_ENABLE
	bool "Enable PCF8574 Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config PCF8574_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on PCF8574_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config PCF8574_INT_POLL
	bool "Enable interrupt poll"
	default n
	---help---
		Enable polling for missed interrupts.

config PCF8574_INT_POLLDELAY
	int "Interrupt poll delay (used)"
	default 500000
	depends on PCF8574_INT_POLL
	---help---
		This microsecond delay defines the polling rate for missed interrupts.

endif # IOEXPANDER_PCF8574

config IOEXPANDER_PCF8575
	bool "PCF8575 I2C IO expander"
	default n
	depends on I2C
	---help---
		Enable support for 16 bit PCF8575 IO Expander. Software driver
		interrupt is currently not supported therefore decated HW interrupt
		pin should be used.

if IOEXPANDER_PCF8575

config PCF8575_MULTIPLE
	bool "Multiple PCF8575 Devices"
	default n
	---help---
		Can be defined to support multiple PCF8575 devices on board.

endif # IOEXPANDER_PCF8575

config IOEXPANDER_SX1509
	bool "SX1509 I2C IO expander"
	default n
	depends on I2C
	---help---
		Enable support for the SX1509 IO Expander

if IOEXPANDER_SX1509

config SX1509_MULTIPLE
	bool "Multiple SX1509 Devices"
	default n
	---help---
		Can be defined to support multiple SX1509 devices on board.

config SX1509_INT_ENABLE
	bool "Enable SX1509 Interrupt Support"
	default n
	select IOEXPANDER_INT_ENABLE
	---help---
		Enable driver interrupt functionality

config SX1509_LED_ENABLE
	bool "Enable SX1509 LED Support"
	default n
	select IOEXPANDER_LED_ENABLE
	---help---
		Enable driver LED functionality

config SX1509_INT_NCALLBACKS
	int "Max number of interrupt callbacks"
	default 4
	depends on SX1509_INT_ENABLE
	---help---
		This is the maximum number of interrupt callbacks supported

config SX1509_RETRY
	bool "Retry to send commands and data at I2C communication errors"
	default n
	---help---
		Retry to send commands and data if a I2C-communication
		error occurs (eg. caused by EMC).

endif # IOEXPANDER_SX1509

config IOEXPANDER_INT_ENABLE
	bool
	default n
	---help---
		This is the global INT supported flag for io expanders

config IOEXPANDER_LED_ENABLE
	bool
	default n
	select USERLED
	---help---
		This is the global LED supported flag for io expanders

config IOEXPANDER_NPINS
	int "Number of pins"
	default 16
	---help---
		Maximum number of pins supported per driver.

config IOEXPANDER_MULTIPIN
	bool "Support multi-pin access routines"
	default n
	---help---
		This settings enable the definition of routines for
		optimized simultaneous access to multiple pins.

endif # IOEXPANDER

config DEV_GPIO
	bool "GPIO driver"
	default n
	---help---
		Enables a simple GPIO input/output driver to support application-
		space testing of hardware.

config DEV_GPIO_NSIGNALS
	int "Max number of signals"
	default 1
	depends on DEV_GPIO
	---help---
		The maximum number of signals that can be registered with the GPIO
		driver

config GPIO_LOWER_HALF
	bool "GPIO Lower Half"
	default n
	depends on DEV_GPIO && IOEXPANDER
	---help---
		Enable support for a lower half driver that provides GPIO driver
		support for I/O expander pins.

if GPIO_LOWER_HALF

config GPIO_LOWER_HALF_INTTYPE
	int "default interrupt type for GPIO_INTERRUPT_PIN pintype"
	default 14
	---help---
		This is the default interrupt type (IOEXPANDER_VAL_BOTH) for
		GPIO_INTERRUPT_PIN pintype in gplf driver register.

endif

endmenu # IO Expander/GPIO Support
