This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new c311a6d1814 drivers/i2s/i2schar: Fix return types
c311a6d1814 is described below

commit c311a6d181480a3aa8a70c191bcc76f051fe6a42
Author: Matteo Golin <[email protected]>
AuthorDate: Wed Jul 8 11:30:49 2026 -0400

    drivers/i2s/i2schar: Fix return types
    
    This commit fixes the incorrect casting of signed types to unsigned
    types in the I2S character driver.
    
    NOTE: the I2S character driver IOCTLs retain their original argument
    types. This is fine, because errors are reported through errno by the
    ioctl call. The returned value in the 'arg' parameter is to be ignored
    when the call results in an error. Outside of error codes, all i2s
    interfaces return unsigned values.
    
    Signed-off-by: Matteo Golin <[email protected]>
---
 drivers/i2s/i2schar.c | 65 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 57 insertions(+), 8 deletions(-)

diff --git a/drivers/i2s/i2schar.c b/drivers/i2s/i2schar.c
index 130149a8a7c..56a3d964382 100644
--- a/drivers/i2s/i2schar.c
+++ b/drivers/i2s/i2schar.c
@@ -500,73 +500,122 @@ static int i2schar_ioctl(FAR struct file *filep, int 
cmd, unsigned long arg)
     {
       case I2SIOC_GRXDATAWIDTH:
         {
-          *(FAR uint32_t *)arg = I2S_RXDATAWIDTH(priv->i2s, 0);
+          *(FAR int32_t *)arg = I2S_RXDATAWIDTH(priv->i2s, 0);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
+
           break;
         }
 
       case I2SIOC_GTXDATAWIDTH:
         {
-          *(FAR uint32_t *)arg = I2S_TXDATAWIDTH(priv->i2s, 0);
+          *(FAR int32_t *)arg = I2S_TXDATAWIDTH(priv->i2s, 0);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
         }
         break;
 
       case I2SIOC_GRXCHANNELS:
         {
           *(FAR int *)arg = I2S_RXCHANNELS(priv->i2s, 0);
+          if (*(FAR int *)arg < 0)
+            {
+              ret = *(FAR int *)arg;
+            }
         }
         break;
 
       case I2SIOC_GTXCHANNELS:
         {
           *(FAR int *)arg = I2S_TXCHANNELS(priv->i2s, 0);
+          if (*(FAR int *)arg < 0)
+            {
+              ret = *(FAR int *)arg;
+            }
         }
         break;
 
       case I2SIOC_GRXSAMPLERATE:
         {
-          *(FAR uint32_t *)arg = I2S_RXSAMPLERATE(priv->i2s, 0);
+          *(FAR int32_t *)arg = I2S_RXSAMPLERATE(priv->i2s, 0);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
         }
         break;
 
       case I2SIOC_GTXSAMPLERATE:
         {
-          *(FAR uint32_t *)arg = I2S_TXSAMPLERATE(priv->i2s, 0);
+          *(FAR int32_t *)arg = I2S_TXSAMPLERATE(priv->i2s, 0);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
         }
         break;
 
       case I2SIOC_SRXDATAWIDTH:
         {
-          *(FAR uint32_t *)arg = I2S_RXDATAWIDTH(priv->i2s, arg);
+          *(FAR int32_t *)arg = I2S_RXDATAWIDTH(priv->i2s, arg);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
           break;
         }
 
       case I2SIOC_STXDATAWIDTH:
         {
-          *(FAR uint32_t *)arg = I2S_TXDATAWIDTH(priv->i2s, arg);
+          *(FAR int32_t *)arg = I2S_TXDATAWIDTH(priv->i2s, arg);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
         }
         break;
 
       case I2SIOC_SRXCHANNELS:
         {
           *(FAR int *)arg = I2S_RXCHANNELS(priv->i2s, arg);
+          if (*(FAR int *)arg < 0)
+            {
+              ret = *(FAR int *)arg;
+            }
         }
         break;
 
       case I2SIOC_STXCHANNELS:
         {
           *(FAR int *)arg = I2S_TXCHANNELS(priv->i2s, arg);
+          if (*(FAR int *)arg < 0)
+            {
+              ret = *(FAR int *)arg;
+            }
         }
         break;
 
       case I2SIOC_SRXSAMPLERATE:
         {
-          *(FAR uint32_t *)arg = I2S_RXSAMPLERATE(priv->i2s, arg);
+          *(FAR int32_t *)arg = I2S_RXSAMPLERATE(priv->i2s, arg);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
         }
         break;
 
       case I2SIOC_STXSAMPLERATE:
         {
-          *(FAR uint32_t *)arg = I2S_TXSAMPLERATE(priv->i2s, arg);
+          *(FAR int32_t *)arg = I2S_TXSAMPLERATE(priv->i2s, arg);
+          if (*(FAR int32_t *)arg < 0)
+            {
+              ret = *(FAR int32_t *)arg;
+            }
         }
         break;
 

Reply via email to