walnux/drivers/ioexpander/Kconfig
Zik Saleeba 835c535e18 drivers/ioexpander/aw9523b: New driver for AW9523B i/o expander
This is an I2C driver for the Awinic AW9523B I/O expander. As well
as the supporting usual digital I/Os, this device features the
ability to drive LEDs directly, and can control the drive current
to each LED individually. The driver was derived from the PCA9555
driver, provides all the standard interfaces of an i/o expander
driver. It also features support for the special features of the
AW9523B through pin direction IOEXPANDER_DIRECTION_OUT_LED and
IOEXPANDER_OPTION_NONGENERIC with AW9523B_OPTION_* options.

The driver has a number of configurable features including interrupt
handling and a shadow register mode based on the PCA9555 driver,
plus new LED/dimming support.

Testing was done using an ESP32S3 host and I2C connection to the
Adafruit AW9523 breakout board.

Signed-off-by: Zik Saleeba <zik@zikzak.net>
2025-08-29 09:10:50 -03:00

625 lines
15 KiB
Text

#
# 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 ICJX_MULTIPLE
bool "Multiple iC-JX Devices"
default n
---help---
Can be defined to support multiple iC-JX devices on board.
config ICJX_INT_ENABLE
bool "Enable iC-JX Interrupt Support"
default n
select IOEXPANDER_INT_ENABLE
---help---
Enable driver interrupt functionality
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_PCA9557
bool "PCA9557 I2C IO expander"
default n
depends on I2C
---help---
Enable support for the NXP PCA9557 IO Expander
if IOEXPANDER_PCA9557
config PCA9557_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 PCA9557_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_PCA9557
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_AW9523B
bool "AW9523B I2C IO expander"
default n
depends on I2C
---help---
Enable support for the Awinic AW9523B IO Expander
if IOEXPANDER_AW9523B
config AW9523B_MULTIPLE
bool "Multiple AW9523B Devices"
default n
---help---
Can be defined to support multiple AW9523B devices on board.
config AW9523B_LED_ENABLE
bool "Enable AW9523B LED Support"
default y
---help---
Enable driver LED functionality
config AW9523B_INT_ENABLE
bool "Enable AW9523B Interrupt Support"
default n
select IOEXPANDER_INT_ENABLE
---help---
Enable driver interrupt functionality
config AW9523B_INT_NCALLBACKS
int "Max number of interrupt callbacks"
default 4
depends on AW9523B_INT_ENABLE
---help---
This is the maximum number of interrupt callbacks supported
config AW9523B_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 AW9523B_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_AW9523B
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_NPOLLWAITERS
int "Max number of polls"
default 1
depends on DEV_GPIO
---help---
The maximum number of polls that can be registered with the GPIO
driver
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