mirror of
https://github.com/apache/nuttx.git
synced 2026-08-09 22:45:08 +00:00
arch/nrf52/nrf53/nrf91: allow zero-length I2C transfers
Some checks are pending
Build Documentation / build-html (push) Waiting to run
MemBrowse Memory Report / changes-filter (push) Waiting to run
MemBrowse Memory Report / load-targets (push) Waiting to run
MemBrowse Memory Report / identical (push) Blocked by required conditions
MemBrowse Memory Report / analyze (push) Blocked by required conditions
Some checks are pending
Build Documentation / build-html (push) Waiting to run
MemBrowse Memory Report / changes-filter (push) Waiting to run
MemBrowse Memory Report / load-targets (push) Waiting to run
MemBrowse Memory Report / identical (push) Blocked by required conditions
MemBrowse Memory Report / analyze (push) Blocked by required conditions
Allow zero-length I2C transfers when DEBUGASSERT is enabled. Zero-length transfers (used for I2C bus scanning) never access the transfer buffer, so any EasyDMA pointer is valid. Signed-off-by: raiden00pl <raiden00@railab.me> Assisted-by: Claude Code
This commit is contained in:
parent
659f47a824
commit
461e3fd362
3 changed files with 24 additions and 12 deletions
|
|
@ -358,10 +358,12 @@ static int nrf52_i2c_transfer(struct i2c_master_s *dev,
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Write TXD data pointer */
|
||||
/* Write TXD data pointer. Zero-length transfers (used for bus
|
||||
* scanning) never access the buffer, so any pointer is valid.
|
||||
*/
|
||||
|
||||
regval = (uint32_t)priv->ptr;
|
||||
DEBUGASSERT(nrf52_easydma_valid(regval));
|
||||
DEBUGASSERT(priv->dcnt == 0 || nrf52_easydma_valid(regval));
|
||||
nrf52_i2c_putreg(priv, NRF52_TWIM_TXDPTR_OFFSET, regval);
|
||||
|
||||
/* Write number of bytes in TXD buffer */
|
||||
|
|
@ -380,10 +382,12 @@ static int nrf52_i2c_transfer(struct i2c_master_s *dev,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Write RXD data pointer */
|
||||
/* Write RXD data pointer. Zero-length transfers (used for bus
|
||||
* scanning) never access the buffer, so any pointer is valid.
|
||||
*/
|
||||
|
||||
regval = (uint32_t)priv->ptr;
|
||||
DEBUGASSERT(nrf52_easydma_valid(regval));
|
||||
DEBUGASSERT(priv->dcnt == 0 || nrf52_easydma_valid(regval));
|
||||
nrf52_i2c_putreg(priv, NRF52_TWIM_RXDPTR_OFFSET, regval);
|
||||
|
||||
/* Write number of bytes in RXD buffer */
|
||||
|
|
|
|||
|
|
@ -408,10 +408,12 @@ static int nrf53_i2c_transfer(struct i2c_master_s *dev,
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Write TXD data pointer */
|
||||
/* Write TXD data pointer. Zero-length transfers (used for bus
|
||||
* scanning) never access the buffer, so any pointer is valid.
|
||||
*/
|
||||
|
||||
regval = (uint32_t)priv->ptr;
|
||||
DEBUGASSERT(nrf53_easydma_valid(regval));
|
||||
DEBUGASSERT(priv->dcnt == 0 || nrf53_easydma_valid(regval));
|
||||
nrf53_i2c_putreg(priv, NRF53_TWIM_TXDPTR_OFFSET, regval);
|
||||
|
||||
/* Write number of bytes in TXD buffer */
|
||||
|
|
@ -430,10 +432,12 @@ static int nrf53_i2c_transfer(struct i2c_master_s *dev,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Write RXD data pointer */
|
||||
/* Write RXD data pointer. Zero-length transfers (used for bus
|
||||
* scanning) never access the buffer, so any pointer is valid.
|
||||
*/
|
||||
|
||||
regval = (uint32_t)priv->ptr;
|
||||
DEBUGASSERT(nrf53_easydma_valid(regval));
|
||||
DEBUGASSERT(priv->dcnt == 0 || nrf53_easydma_valid(regval));
|
||||
nrf53_i2c_putreg(priv, NRF53_TWIM_RXDPTR_OFFSET, regval);
|
||||
|
||||
/* Write number of bytes in RXD buffer */
|
||||
|
|
|
|||
|
|
@ -408,10 +408,12 @@ static int nrf91_i2c_transfer(struct i2c_master_s *dev,
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Write TXD data pointer */
|
||||
/* Write TXD data pointer. Zero-length transfers (used for bus
|
||||
* scanning) never access the buffer, so any pointer is valid.
|
||||
*/
|
||||
|
||||
regval = (uint32_t)priv->ptr;
|
||||
DEBUGASSERT(nrf91_easydma_valid(regval));
|
||||
DEBUGASSERT(priv->dcnt == 0 || nrf91_easydma_valid(regval));
|
||||
nrf91_i2c_putreg(priv, NRF91_TWIM_TXDPTR_OFFSET, regval);
|
||||
|
||||
/* Write number of bytes in TXD buffer */
|
||||
|
|
@ -430,10 +432,12 @@ static int nrf91_i2c_transfer(struct i2c_master_s *dev,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Write RXD data pointer */
|
||||
/* Write RXD data pointer. Zero-length transfers (used for bus
|
||||
* scanning) never access the buffer, so any pointer is valid.
|
||||
*/
|
||||
|
||||
regval = (uint32_t)priv->ptr;
|
||||
DEBUGASSERT(nrf91_easydma_valid(regval));
|
||||
DEBUGASSERT(priv->dcnt == 0 || nrf91_easydma_valid(regval));
|
||||
nrf91_i2c_putreg(priv, NRF91_TWIM_RXDPTR_OFFSET, regval);
|
||||
|
||||
/* Write number of bytes in RXD buffer */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue