nuttx/include
Alan Carvalho de Assis 8342c51d59 ioexpander/ch422g: add a driver for the WCH CH422G I/O
The CH422G offers eight bi-directional pins, IO0-IO7, and four open-drain
outputs, OC0-OC3.  It appears on boards that have run out of usable GPIOs
once a parallel RGB panel has taken its share, the Waveshare
ESP32-S3-Touch-LCD-7 among them, where it holds the panel and touch
controller in and out of reset and switches the backlight.

Two things about the device do not fit the shape a register-per-address
I2C driver usually takes, and both are handled here rather than pushed on
to board logic:

  - A register is selected by the I2C address the transfer is addressed
    to, not by a register address written ahead of the data.  Each access
    carries a single byte to one of four addresses.
  - None of the write-only registers can be read back, so the driver
    keeps a shadow copy of each and updates it in step with the device.

IO0-IO7 have no individual direction control; one bit of the system
parameter register drives the whole group.  The driver records the
direction asked of each pin and puts the group in output mode once at
least one of them is an output, which is what a board that drives some of
the pins would expect.  Reading a pin of a group held in output mode
reports the value last written, because the hardware cannot report the
level, and that is documented rather than hidden.

The four open-drain outputs are presented as pins 8-11 of the same
ioexpander_dev_s so that one instance covers the chip, which means
CONFIG_IOEXPANDER_NPINS must be at least 12.

Builds clean with no new warnings on esp32s3-touch-lcd7:usbnsh and passes
nxstyle.

Signed-off-by: Alan Carvalho de Assis <acassis@gmail.com>
Assisted-by: Claude Code
2026-08-24 09:39:58 +02:00
..
android include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
arpa include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
crypto crypto: add CRYPTO_AES_CTR_SSH variant (128-bit big-endian counter) 2026-07-16 15:42:10 +08:00
cxx include/cxx/{cstdlib,cmath}: Provide std::abs overloads 2026-08-24 12:04:30 +08:00
net forward: Add IFF_NOSRC_FORWARD and IFF_NODST_FORWARD flags. 2026-01-31 02:37:58 +08:00
netinet netinet/in.h: Rename imr_interface to imr_address in struct ip_mreqn. 2026-01-16 09:42:12 +08:00
netpacket net/packet: add PACKET_<ADD|DROP>_MEMBERSHIP support 2025-12-25 10:01:43 +08:00
nuttx ioexpander/ch422g: add a driver for the WCH CH422G I/O 2026-08-24 09:39:58 +02:00
ssp include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
sys libc: add wait4() 2026-08-14 10:20:52 +08:00
.gitignore ci: add stdbit.h test 2026-06-29 14:44:17 +02:00
aio.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
alloca.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
assert.h assert: add header files to resolve compile failed 2024-10-12 09:29:37 +08:00
byteswap.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
ctype.h libcxx: fix compile error 2024-10-23 09:42:57 +08:00
debug.h style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
dirent.h fs/dirent: add d_ino member to struct dirent 2026-06-26 10:45:33 -04:00
dlfcn.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
dsp.h libs/libdsp: Add Matrix operations 2026-07-11 14:55:59 -03:00
dspb16.h style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
elf.h arch:use ARCH_64BIT to mark arch is support 64bit 2025-12-18 22:05:12 +08:00
elf32.h modlib:Standardized module loading method 2024-10-05 15:22:02 +08:00
elf64.h modlib:Standardized module loading method 2024-10-05 15:22:02 +08:00
endian.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
err.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
errno.h include/errno.h: skip set_errno in interrupt context 2026-05-03 17:23:40 -03:00
execinfo.h sched: support backtrace record 2024-10-11 00:37:27 +08:00
fcntl.h !include/fcntl.h: align open flags with Linux values 2026-06-30 13:43:44 +08:00
fixedmath.h !compiler: drop CONFIG_HAVE_LONG_LONG and require long long support 2026-05-19 16:21:28 +08:00
fnmatch.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
ftw.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
gcov.h gcov: Refactoring the implementation framework of gcov 2025-07-03 00:17:58 +08:00
getopt.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
glob.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
grp.h libc/grp: add getgrouplist() 2026-06-23 23:09:22 +08:00
hex2bin.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
iconv.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
ifaddrs.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
imx_container.h arch/arm64/imx9: Add ROMAPI and AHAB support for i.MX9 2025-05-09 19:21:17 +08:00
inttypes.h !sched/clock: remove CONFIG_SYSTEM_TIME64 and always use 64-bit time 2026-05-19 16:21:28 +08:00
iso646.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
langinfo.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
libgen.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
libintl.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
limits.h sched: add supplementary group IDs (setgroups/getgroups/initgroups) 2026-08-12 16:06:03 -03:00
locale.h style/FAR: remove FAR qualifier 2025-11-10 10:56:29 +01:00
lzf.h lzf: prevent lzf header struct optimization 2026-02-13 11:58:50 +01:00
malloc.h memdump: add dump for the orphan nodes(neighbor of free node) 2024-10-08 23:55:59 +08:00
mqueue.h [POSIX][Bug] mqueue.h: Include file does not conform the standard 2024-12-09 21:21:09 +08:00
netdb.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
nl_types.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
nxflat.h !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
obstack.h libs/libc/obstack: fix allocated chunk overrun due to invalid limit 2024-10-30 11:53:18 -03:00
poll.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
pthread.h include/pthread : initialize wait_count in PTHREAD_COND_INITIALIZER 2026-06-16 19:12:30 -03:00
pty.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
pwd.h libs/libc/pwd: add new member to passwd struct 2024-10-16 11:15:25 +08:00
regex.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
resolv.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
sched.h sched: remove csection and reduce the interrupt disabling time in sched_[un]lock 2025-01-23 19:58:49 +08:00
search.h LICENSE: update NuttX-PublicDomain SPDX identifier 2025-12-26 19:46:12 +08:00
semaphore.h sched/semaphore: add support to customize semaphore max allowed value 2025-09-04 09:48:34 +08:00
shadow.h libs/libc/unistd: add getspnam function 2024-10-16 11:15:25 +08:00
signal.h sched/timer: Fix MISRA Rule 10.4 2026-01-22 22:14:00 +08:00
spawn.h sched/spawn: Fix MISRA C 2012 Rule 10.4 violations 2026-02-02 20:39:36 +08:00
stdbool.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
stddef.h !compiler: drop CONFIG_HAVE_LONG_LONG and require long long support 2026-05-19 16:21:28 +08:00
stdint.h arm64_head.S: fix the asm code build error 2026-01-13 21:20:52 +08:00
stdio.h stdio.h: Update TMP_MAX definition to match Linux. 2026-01-14 17:28:30 -08:00
stdlib.h fs/binfmt: close symlink TOCTOU and harden setuid/setgid exec hygiene 2026-08-01 15:32:03 -03:00
stdnoreturn.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
string.h include/string.h: mark memset and memcpy as used_code 2026-02-12 13:19:06 -05:00
strings.h !compiler: drop CONFIG_HAVE_LONG_LONG and require long long support 2026-05-19 16:21:28 +08:00
syscall.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
syslog.h drivers/syslog: Add RFC 5424 protocol support 2025-06-13 20:26:57 +08:00
termios.h include: modify for support socat, so need add some macro same as linux 2025-12-10 23:44:14 +08:00
threads.h include/threads.h: Replace thrd_ defines by actual function definitions 2024-12-19 21:56:02 +08:00
time.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
ulimit.h ulimit: add ulimit implementation 2026-01-16 10:03:53 +08:00
unistd.h sched: add supplementary group IDs (setgroups/getgroups/initgroups) 2026-08-12 16:06:03 -03:00
utime.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
uuid.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00
wait.h wait: add wait.h header file 2024-12-20 11:46:14 -03:00
wchar.h fix misspelled names in locally scoped code 2025-05-15 10:12:12 +08:00
wctype.h include: migrate to SPDX identifier 2024-10-04 08:18:42 +08:00