nuttx/arch/arm/src
dechao_gong 4e6ad4fb56 arch/arm/rtl8730e: add I2C master driver support
Expose the RTL8730E I2C controllers through the shared Ameba I2C driver
(arch/arm/src/common/ameba/ameba_i2c.c) by adding the chip-specific
glue, build wiring and a board bus table.  The change is gated by
CONFIG_AMEBA_I2C (default disabled).

Chip glue (ameba_i2c_chip.h) supplies the three controller register
bases, the APB function/clock masks -- amebasmart encodes these in
bit 25/26/27 with the group selector bit30=0, unlike the (bit30 |
bit10/11) layout of the KM4-based parts -- and the pad-mux code.
amebasmart has a single generic PINMUX_FUNCTION_I2C shared by every I2C
pad instead of per-signal SCL/SDA crossbar codes, and its
I2C_InitTypeDef omits the DMA request-level fields, so
AMEBA_I2C_HAS_DMA_FIELDS stays undefined.  The whole I2C fwlib lives in
ram_common/ameba_i2c.c rather than lib_rom.a, so it is compiled into
libameba_fwlib.a when I2C is enabled.

The shared driver gains an optional per-controller IP-clock hook,
AMEBA_I2C_IPCLK_FN(bus).  amebasmart needs it because its
I2C_StructInit() fills in a 10 MHz placeholder rather than the real
reference clock (the other Ameba parts fill in a correct XTAL_ClkGet()
/ PLL_GetHBUSClk() / HPERI_ClkGet()), which makes I2C_SetSpeed()
miscompute the SCL counts.  The hook resolves the rate at run time: the
two HS controllers sit on HS_AHB, i.e. NP_PLL divided by
REG_LSYS_CKD_GRP0.CKD_HBUS, so it is a PLL/board setting and not a
constant -- an EVB measured CKD_HBUS=8 (div9, 88.9 MHz) while the SDK's
own I2CCLK_TABLE claims a flat 100 MHz and the register reset value
would imply 80 MHz.  The LP-domain I2C0 keeps its fixed 20 MHz.  Chips
that leave the macro undefined use the fwlib default and are
unaffected; regression-tested on pke8721daf:i2c.

All three controllers are registered: /dev/i2c0 on PA9/PA10, /dev/i2c1
on PA3/PA4 and /dev/i2c2 on PB10/PB11.  Pad choice is constrained on
this chip -- a pad reaches exactly one controller (SDA fixed per
controller, SCL the next pad up), and the pads inside the analogue
audio ranges (PA20-PA29, PA30-PB2, PB3-PB6) are driven by the codec and
leave the bus stuck idle.  Both rules are noted in the table's
comment.

Also add a weak DiagVprintf stub: the I2C fwlib logs through RTK_LOGx()
-> rtk_log_write(), and unlike DiagPrintf that symbol is not in the AP
ROM symbol table.  It is weak so the strong definition in
rtl8730e_wifi_stubs.c still wins when WiFi is enabled; both route to
vprintf.

Hardware-verified on an RTL8730E EVB against a second board running an
I2C slave: register read, write, write/read round-trip, multi-byte dump
and a full address scan, on all three buses at 100 kHz.

Signed-off-by: dechao_gong <dechao_gong@realsil.com.cn>
Assisted-by: Claude <noreply@anthropic.com>
2026-10-08 15:49:34 -03:00
..
a1x
am67 drivers/vhost: Optimize vhost-net performance and robustness 2026-09-27 18:41:30 +08:00
am335x boards/arm: Add support for the original BeagleBone 2026-08-19 10:11:38 +08:00
arm !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
armv6-m arch: bound syscall numbers and nesting in every build 2026-10-01 22:53:55 +08:00
armv7-a arch: bound syscall numbers and nesting in every build 2026-10-01 22:53:55 +08:00
armv7-m arch: bound syscall numbers and nesting in every build 2026-10-01 22:53:55 +08:00
armv7-r arch: bound syscall numbers and nesting in every build 2026-10-01 22:53:55 +08:00
armv8-m arch: bound syscall numbers and nesting in every build 2026-10-01 22:53:55 +08:00
armv8-r arch: bound syscall numbers and nesting in every build 2026-10-01 22:53:55 +08:00
at32 {arm,xtensa}/otg: indent switch bodies per the coding standard. 2026-08-25 16:07:35 +08:00
c5471 drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
cmake arch/arm: Keep GCC from making tail calls in an FDPIC module. 2026-10-07 11:45:09 -03:00
common arch/arm/rtl8730e: add I2C master driver support 2026-10-08 15:49:34 -03:00
csk6
cxd32xx
cxd56xx arch/atomic: remove up_testset in spinlock 2026-09-08 08:58:54 +08:00
dm320
efm32 {arm,xtensa}/otg: indent switch bodies per the coding standard. 2026-08-25 16:07:35 +08:00
eoss3
fvp-v8r-aarch32
gd32f4
goldfish
ht32f491x3
imx1
imx6
imx9 arch/arm/src/imx9: add GPIO5 base address for i.MX95 2026-10-07 08:50:46 -03:00
imxrt arch/arm/imxrt: Make performance optimized memory configuration for M7 NSH 2026-10-08 16:25:44 +08:00
kinetis net, arch: Fix nxstyle errors in files the CAN ioctl merge touches. 2026-09-01 17:40:47 +08:00
kl
lc823450 arch/atomic: remove up_testset in spinlock 2026-09-08 08:58:54 +08:00
lpc17xx_40xx
lpc31xx
lpc43xx
lpc54xx
lpc214x arch/lpc214x: Fix LPC214x to work again 2026-07-01 03:00:43 +08:00
lpc2378 arch/arm: Fix LPC2378 to work again 2026-06-30 03:28:12 +08:00
max326xx
mcx-nxxx
moxart
mps arch/arm/mps: Let user code run modules from the text and data heaps. 2026-09-28 16:46:05 -03:00
mx8mp
n32h7 arch/arm/n32h7: Add N32H762IIL7 BSP 2026-09-17 09:39:41 -03:00
nrf52 arch/nrf52: add SAADC external TIMER trigger over PPI 2026-09-28 11:20:31 +02:00
nrf53 arch/nrf52,nrf53,nrf91: fix nxstyle issues 2026-09-25 18:24:36 +08:00
nrf54l arm/nrf54l: add USBHS device support 2026-10-08 09:54:55 -03:00
nrf91 arch/nrf52,nrf53,nrf91: fix nxstyle issues 2026-09-25 18:24:36 +08:00
nuc1xx
phy62xx drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
qemu
ra4
ra8m1 arch/arm/ra8m1: Add DTC and per-instance SCI FIFO/DTC/termios support 2026-10-06 16:56:58 -03:00
rp23xx arch/arm/rp23xx: Check the flash MTD region against the flash size. 2026-10-07 18:45:43 -03:00
rp2040 arch/arm/rp2040: fix IN endpoint DPSRAM index for bare-eplog callers 2026-09-08 08:22:37 -03:00
rtl8720c sched/semaphore: Fix pre-existing nxstyle issues in the touched files 2026-09-25 10:37:43 +02:00
rtl8720f arch/arm/rtl8720f: add timer driver support 2026-09-01 17:41:14 +08:00
rtl8721dx arch/arm/rtl8721dx: add shared Ameba timer driver 2026-09-01 17:41:14 +08:00
rtl8721f arch/arm/rtl8721f: add timer driver support 2026-09-01 17:41:14 +08:00
rtl8730e arch/arm/rtl8730e: add I2C master driver support 2026-10-08 15:49:34 -03:00
s32k1xx arch/atomic: remove up_testset in spinlock 2026-09-08 08:58:54 +08:00
s32k3xx arch/atomic: remove up_testset in spinlock 2026-09-08 08:58:54 +08:00
sam34
sama5 drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
samd2l2
samd5e5
samv7 arch/arm/src/samv7/sam_mcan.c: fix coding style issues 2026-09-23 11:28:27 +08:00
stm32c0 arch/arm/stm32c0: Add USB device support 2026-09-14 18:32:23 -03:00
stm32c5 arch/arm/stm32c5: Add STM32C562 architecture support 2026-08-27 01:07:10 +08:00
stm32f0 boards/nucleo-f072rb: Add USB device support and a CDC/ACM configuration. 2026-08-20 15:16:33 -03:00
stm32f1 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f2 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f3 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f4 arch/arm/stm32f4: add STM32F412CG chip selection 2026-09-01 17:40:30 +08:00
stm32f7 arch/arm/stm32: fix compare-match race and zero-period hang in tickless 2026-09-18 09:30:22 +08:00
stm32g0 arm/stm32g0: Expose SPI2 capability on STM32G0B1. 2026-10-01 23:14:44 +08:00
stm32g4 arch/arm/src/stm32: add G4 RNG base address 2026-07-09 09:59:02 -04:00
stm32h5 arch/arm/stm32h5: disable the ICACHE while program memory is modified. 2026-10-06 16:57:31 -03:00
stm32h7 arm/stm32h7: Allow PendSV with high-priority interrupts. 2026-10-08 10:36:28 -03:00
stm32l0 boards/nucleo-l073rz: Add USB device support and a CDC/ACM configuration. 2026-08-22 01:23:12 +08:00
stm32l1 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32l4 {arm,xtensa}/otg: indent switch bodies per the coding standard. 2026-08-25 16:07:35 +08:00
stm32l5 stm32l5: Fix nxstyle errors in drivers and board LEDs 2026-09-22 09:21:35 -03:00
stm32n6 arm/stm32n6: allow debugger access after flash boot 2026-10-06 15:34:14 -03:00
stm32u0 arch/arm: add stm32u0 support 2026-08-18 15:00:15 +02:00
stm32u3 arch/arm/stm32: Unify Cortex-M33 RCC include names 2026-08-27 01:07:10 +08:00
stm32u5 arch/arm/stm32: Unify Cortex-M33 RCC include names 2026-08-27 01:07:10 +08:00
stm32wb arch/arm/stm32: fix compare-match race and zero-period hang in tickless 2026-09-18 09:30:22 +08:00
stm32wl5 arch/arm/stm32: use common SYSTICK_HCLKd8 symbol 2026-08-18 09:34:58 +08:00
str71x
tiva arch/arm/src/at32/at32_can: Division by Zero in CAN Bit Timing Commands 2026-06-17 09:01:52 -03:00
tlsr82 !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
tms570
xmc4 arch/arm: xmc4: fix VADC index bounds checks 2026-07-06 07:47:17 +02:00
.gitignore
CMakeLists.txt
Makefile tools: fix stale archive members surviving a Kconfig-driven CSRCS change 2026-07-28 21:26:03 -03:00