From 2a1e8562e0a02d84ce8c1e424d7c638042247fc6 Mon Sep 17 00:00:00 2001 From: SPRESENSE <41312067+SPRESENSE@users.noreply.github.com> Date: Wed, 19 Feb 2025 17:03:53 +0900 Subject: [PATCH] arch: cxd56xx: Improve i2c initialize function During I2C communication between non-Spresense devices is performed, the I2C bus may freeze after initialization of the Spresense I2C. As a workaround, switch the pin mode to I2C at the end of the i2c initialization function. --- arch/arm/src/cxd56xx/cxd56_i2c.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm/src/cxd56xx/cxd56_i2c.c b/arch/arm/src/cxd56xx/cxd56_i2c.c index f6b23dd2dbafe..3ee002688970a 100644 --- a/arch/arm/src/cxd56xx/cxd56_i2c.c +++ b/arch/arm/src/cxd56xx/cxd56_i2c.c @@ -1140,10 +1140,6 @@ struct i2c_master_s *cxd56_i2cbus_initialize(int port) cxd56_i2c_setfrequency(priv, I2C_DEFAULT_FREQUENCY); - /* Configure pin */ - - cxd56_i2c_pincontrol(port, true); - /* Attach Interrupt Handler */ irq_attach(priv->irqid, cxd56_i2c_interrupt, priv); @@ -1164,6 +1160,10 @@ struct i2c_master_s *cxd56_i2cbus_initialize(int port) cxd56_i2c_clock_gate_enable(port); + /* Configure pin */ + + cxd56_i2c_pincontrol(port, true); + nxmutex_unlock(&priv->lock); return &priv->dev; }