Hello,

I'm currently working on adding SPI driver for AM335X. The MCSPI controller
of AM335X supports the transfer of up to 32-bits long SPI words. Currently,
SPI driver in Nuttx supports up to 16-bits long words transfer. The
attached patch extends it to 32-bit long words.

Regards,
Petro Karashchenko
diff --git a/Documentation/NuttxPortingGuide.html 
b/Documentation/NuttxPortingGuide.html
index c9e2d0c76d..b362f7522a 100644
--- a/Documentation/NuttxPortingGuide.html
+++ b/Documentation/NuttxPortingGuide.html
@@ -1751,7 +1751,7 @@ The specific environmental definitions are unique for 
each board but should incl
       The definitions in that header file provide the common interface between 
NuttX and the architecture-specific implementation in <code>arch/</code>.
     </p>
     <blockquote><small>
-      <code>up_</code> is supposed to stand for microprocessor; the 
<code>u</code> is like the Greek letter micron: <i>µ</i>.    So it would be 
<code>µP</code> which is a common shortening of the word microprocessor.  I 
don't like that name very much.  I wish I would have used a more obvious prefix 
like <code>arch_</code> instead -- then I would not have to answer this 
question so often.
+      <code>up_</code> is supposed to stand for microprocessor; the 
<code>u</code> is like the Greek letter micron: <i>�</i>.    So it would be 
<code>�P</code> which is a common shortening of the word microprocessor.  I 
don't like that name very much.  I wish I would have used a more obvious prefix 
like <code>arch_</code> instead -- then I would not have to answer this 
question so often.
     </small></blockquote>
   </li>
   <li>
@@ -5865,7 +5865,7 @@ int kbd_decode(FAR struct lib_instream_s *stream, FAR 
struct kbd_getstate_s *sta
      <code>void setmode(FAR struct spi_dev_s *dev, enum spi_mode_e 
mode);</code><br>
      <code>void setbits(FAR struct spi_dev_s *dev, int nbits);</code><br>
      <code>uint8_t status(FAR struct spi_dev_s *dev, uint32_t 
devid);</code><br>
-     <code>uint16_t send(FAR struct spi_dev_s *dev, uint16_t wd);</code><br>
+     <code>uint32_t send(FAR struct spi_dev_s *dev, uint32_t wd);</code><br>
      <code>void exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer, 
FAR void *rxbuffer, size_t nwords);</code><br>
      <p><code>int registercallback(FAR struct spi_dev_s *dev, mediachange_t 
callback, void *arg);</code></p>
     </ul>
diff --git a/arch/arm/src/cxd56xx/cxd56_spi.c b/arch/arm/src/cxd56xx/cxd56_spi.c
index 73b89a0dd5..b144cf0268 100644
--- a/arch/arm/src/cxd56xx/cxd56_spi.c
+++ b/arch/arm/src/cxd56xx/cxd56_spi.c
@@ -148,7 +148,7 @@ static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev,
                                  uint32_t frequency);
 static void spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void __unused spi_exchange(FAR struct spi_dev_s *dev,
                                   FAR const void *txbuffer,
                                   FAR void *rxbuffer,
@@ -654,7 +654,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct cxd56_spidev_s *priv = (FAR struct cxd56_spidev_s *)dev;
   register uint32_t regval;
@@ -678,7 +678,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Write the byte to the TX FIFO */
 
-  spi_putreg(priv, CXD56_SPI_DR_OFFSET, (uint32_t)wd);
+  spi_putreg(priv, CXD56_SPI_DR_OFFSET, wd);
 
   /* Wait for the RX FIFO not empty */
 
@@ -700,7 +700,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   cxd56_spi_clock_gate_enable(priv->port);
 
-  return (uint16_t)regval;
+  return regval;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/efm32/efm32_spi.c b/arch/arm/src/efm32/efm32_spi.c
index e9925297c9..3ccc4c77d4 100644
--- a/arch/arm/src/efm32/efm32_spi.c
+++ b/arch/arm/src/efm32/efm32_spi.c
@@ -194,7 +194,7 @@ static uint8_t   spi_status(struct spi_dev_s *dev, uint32_t 
devid);
 static int       spi_cmddata(struct spi_dev_s *dev, uint32_t devid,
                    bool cmd);
 #endif
-static uint16_t  spi_send(struct spi_dev_s *dev, uint16_t wd);
+static uint32_t  spi_send(struct spi_dev_s *dev, uint32_t wd);
 static void      spi_exchange(struct spi_dev_s *dev, const void *txbuffer,
                    void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -1194,11 +1194,11 @@ static int spi_cmddata(struct spi_dev_s *dev, uint32_t 
devid,
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   struct efm32_spidev_s *priv = (struct efm32_spidev_s *)dev;
   const struct efm32_spiconfig_s *config;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->config);
   config = priv->config;
@@ -1213,12 +1213,12 @@ static uint16_t spi_send(struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Write the data */
 
-  spi_putreg(config, EFM32_USART_TXDATA_OFFSET, (uint32_t)wd);
+  spi_putreg(config, EFM32_USART_TXDATA_OFFSET, wd);
 
   /* Wait for receive data to be available */
 
   spi_wait_status(config, _USART_STATUS_RXDATAV_MASK, USART_STATUS_RXDATAV);
-  ret = (uint16_t)spi_getreg(config, EFM32_USART_RXDATA_OFFSET);
+  ret = spi_getreg(config, EFM32_USART_RXDATA_OFFSET);
 
   spiinfo("Sent: %04x Return: %04x \n", wd, ret);
   return ret;
diff --git a/arch/arm/src/imx1/imx_spi.c b/arch/arm/src/imx1/imx_spi.c
index 8c486050e9..42f8574e8d 100644
--- a/arch/arm/src/imx1/imx_spi.c
+++ b/arch/arm/src/imx1/imx_spi.c
@@ -173,7 +173,7 @@ static int    spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void   spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void   spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SPI_EXCHANGE
 static void   spi_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer,
                            FAR void *rxbuffer, size_t nwords);
@@ -900,10 +900,10 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   struct imx_spidev_s *priv = (struct imx_spidev_s *)dev;
-  uint16_t response = 0;
+  uint32_t response = 0;
 
   spi_transfer(priv, &wd, &response, 1);
   return response;
diff --git a/arch/arm/src/imx6/imx_ecspi.c b/arch/arm/src/imx6/imx_ecspi.c
index 17cf2bcfc6..42da86a433 100644
--- a/arch/arm/src/imx6/imx_ecspi.c
+++ b/arch/arm/src/imx6/imx_ecspi.c
@@ -233,7 +233,7 @@ static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev,
                                  uint32_t frequency);
 static void   spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void   spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static uint8_t spi_status(FAR struct spi_dev_s *dev, uint32_t devid);
 #ifdef CONFIG_SPI_CMDDATA
 static int spi_cmddata(FAR struct spi_dev_s *dev, uint32_t devid,
@@ -1013,10 +1013,10 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   struct imx_spidev_s *priv = (struct imx_spidev_s *)dev;
-  uint16_t response = 0;
+  uint32_t response = 0;
 
   spi_transfer(priv, &wd, &response, 1);
   return response;
diff --git a/arch/arm/src/imxrt/imxrt_lpspi.c b/arch/arm/src/imxrt/imxrt_lpspi.c
index d196d27279..3f8cdccd7c 100644
--- a/arch/arm/src/imxrt/imxrt_lpspi.c
+++ b/arch/arm/src/imxrt/imxrt_lpspi.c
@@ -151,7 +151,7 @@ static inline uint32_t imxrt_lpspi_getreg32(FAR struct 
imxrt_lpspidev_s *priv,
                                             uint8_t offset);
 static inline void imxrt_lpspi_putreg32(FAR struct imxrt_lpspidev_s *priv,
                                         uint8_t offset, uint32_t value);
-static inline uint16_t imxrt_lpspi_readword(
+static inline uint32_t imxrt_lpspi_readword(
                           FAR struct imxrt_lpspidev_s *priv);
 static inline void imxrt_lpspi_writeword(FAR struct imxrt_lpspidev_s *priv,
                                          uint16_t byte);
@@ -177,7 +177,7 @@ static void imxrt_lpspi_setbits(FAR struct spi_dev_s *dev, 
int nbits);
 static int imxrt_lpspi_hwfeatures(FAR struct spi_dev_s *dev,
                                   imxrt_lpspi_hwfeatures_t features);
 #endif
-static uint16_t imxrt_lpspi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t imxrt_lpspi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void imxrt_lpspi_exchange(FAR struct spi_dev_s *dev,
                                  FAR const void *txbuffer, FAR void *rxbuffer,
                                  size_t nwords);
@@ -482,7 +482,7 @@ static inline void imxrt_lpspi_putreg32(FAR struct 
imxrt_lpspidev_s *priv,
  *
  *****************************************************************************/
 
-static inline uint16_t imxrt_lpspi_readword(FAR struct imxrt_lpspidev_s *priv)
+static inline uint32_t imxrt_lpspi_readword(FAR struct imxrt_lpspidev_s *priv)
 {
   /* Wait until the receive buffer is not empty */
 
@@ -491,7 +491,7 @@ static inline uint16_t imxrt_lpspi_readword(FAR struct 
imxrt_lpspidev_s *priv)
 
   /* Then return the received byte */
 
-  return (uint16_t) imxrt_lpspi_getreg32(priv, IMXRT_LPSPI_RDR_OFFSET);
+  return imxrt_lpspi_getreg32(priv, IMXRT_LPSPI_RDR_OFFSET);
 }
 
 /*****************************************************************************
@@ -1233,15 +1233,15 @@ static int imxrt_lpspi_hwfeatures(FAR struct spi_dev_s 
*dev,
  *
  *****************************************************************************/
 
-static uint16_t imxrt_lpspi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t imxrt_lpspi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct imxrt_lpspidev_s *priv = (FAR struct imxrt_lpspidev_s *)dev;
   uint32_t regval;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->spibase);
 
-  imxrt_lpspi_writeword(priv, (uint32_t) wd);
+  imxrt_lpspi_writeword(priv, wd);
 
   while ((imxrt_lpspi_getreg32(priv, IMXRT_LPSPI_SR_OFFSET) & LPSPI_SR_RDF) !=
          LPSPI_SR_RDF);
@@ -1322,7 +1322,7 @@ static void imxrt_lpspi_exchange_nodma(FAR struct 
spi_dev_s *dev,
 
           /* Exchange one word */
 
-          word = imxrt_lpspi_send(dev, word);
+          word = (uint16_t) imxrt_lpspi_send(dev, (uint32_t) word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1355,7 +1355,7 @@ static void imxrt_lpspi_exchange_nodma(FAR struct 
spi_dev_s *dev,
 
           /* Exchange one word */
 
-          word = (uint8_t) imxrt_lpspi_send(dev, (uint16_t) word);
+          word = (uint8_t) imxrt_lpspi_send(dev, (uint32_t) word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/kinetis/kinetis_spi.c 
b/arch/arm/src/kinetis/kinetis_spi.c
index 07229ec8f9..4e8eb4b124 100644
--- a/arch/arm/src/kinetis/kinetis_spi.c
+++ b/arch/arm/src/kinetis/kinetis_spi.c
@@ -157,7 +157,7 @@ static void        spi_setbits(FAR struct spi_dev_s *dev, 
int nbits);
 static int         spi_hwfeatures(FAR struct spi_dev_s *dev,
                                   spi_hwfeatures_t features);
 #endif
-static uint16_t    spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t    spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void        spi_exchange(FAR struct spi_dev_s *dev,
                                 FAR const void *txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
@@ -937,11 +937,11 @@ static uint16_t spi_send_data(FAR struct kinetis_spidev_s 
*priv, uint16_t wd,
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct kinetis_spidev_s *priv = (FAR struct kinetis_spidev_s *)dev;
 
-  return spi_send_data(priv, wd, true);
+  return (uint32_t)spi_send_data(priv, (uint16_t)wd, true);
 }
 
 
/************************************************************************************
diff --git a/arch/arm/src/kl/kl_spi.c b/arch/arm/src/kl/kl_spi.c
index bb9608fc67..cb5cc487cd 100644
--- a/arch/arm/src/kl/kl_spi.c
+++ b/arch/arm/src/kl/kl_spi.c
@@ -91,7 +91,7 @@ static int         spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t    spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void        spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e 
mode);
 static void        spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t    spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t    spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void        spi_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -287,7 +287,7 @@ static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, 
uint32_t frequency)
    * divisor in the range {2, 4, 8, 16, 32, 64, 128, 256, or 512).
    *
    *
-   * BaudRateDivisor = (SPPR + 1) × 2^(SPR + 1)
+   * BaudRateDivisor = (SPPR + 1) × 2^(SPR + 1)
    * BaudRate = BusClock / BaudRateDivisor
    *
    * The strategy is to pick the smallest divisor that yields an in-range
@@ -438,7 +438,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct kl_spidev_s *priv = (FAR struct kl_spidev_s *)dev;
 
@@ -459,7 +459,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Return the data */
 
-  return (uint16_t)spi_getreg(priv, KL_SPI_D_OFFSET);
+  return (uint32_t)spi_getreg(priv, KL_SPI_D_OFFSET);
 }
 
 
/************************************************************************************
diff --git a/arch/arm/src/lc823450/lc823450_spi.c 
b/arch/arm/src/lc823450/lc823450_spi.c
index 6c681f3862..d89a69c2e3 100644
--- a/arch/arm/src/lc823450/lc823450_spi.c
+++ b/arch/arm/src/lc823450/lc823450_spi.c
@@ -104,7 +104,7 @@ static int      spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 #ifndef CONFIG_SPI_EXCHANGE
 static void     spi_sndblock(FAR struct spi_dev_s *dev, FAR const void 
*buffer, size_t nwords);
 static void     spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, 
size_t nwords);
@@ -333,15 +333,15 @@ static void spi_dma_callback(DMA_HANDLE hdma, void *arg, 
int result)
  ****************************************************************************/
 
 #ifdef CONFIG_LC823450_SPI_DMA
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   spi_sndblock(dev, &wd, 1);
   return 0;
 }
 #else /* CONFIG_LC823450_SPI_DMA */
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
-  putreg16(wd, LC823450_SPI_STR);
+  putreg16((uint16_t)wd, LC823450_SPI_STR);
 
   modifyreg32(LC823450_SPI_ISR, 0, SPI_ISR_SPIF);
 
@@ -352,7 +352,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
   while ((getreg32(LC823450_SPI_ISR) & SPI_ISR_SPIF) == 0)
     ;
 
-  return getreg16(LC823450_SPI_SRR);
+  return (uint32_t)getreg16(LC823450_SPI_SRR);
 }
 #endif
 
@@ -431,14 +431,14 @@ static void spi_sndblock(FAR struct spi_dev_s *dev, FAR 
const void *buffer,
     {
       for (i = 0; i < nwords; i++)
         {
-          spi_send(dev, *buf16++);
+          spi_send(dev, (uint32_t)*buf16++);
         }
     }
   else
     {
       for (i = 0; i < nwords; i++)
         {
-          spi_send(dev, *buf++);
+          spi_send(dev, (uint32_t)*buf++);
         }
     }
 #endif /* CONFIG_LC823450_SPI_DMA */
@@ -476,14 +476,14 @@ static void spi_recvblock(FAR struct spi_dev_s *dev, FAR 
void *buffer, size_t nw
     {
       for (i = 0; i < nwords; i++)
         {
-          *buf16++ = spi_send(dev, 0xffff);
+          *buf16++ = (uint16_t)spi_send(dev, 0xffff);
         }
     }
   else
     {
       for (i = 0; i < nwords; i++)
         {
-          *buf++ = spi_send(dev,  0xffff);
+          *buf++ = (uint8_t)spi_send(dev,  0xffff);
         }
     }
 }
diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_spi.c 
b/arch/arm/src/lpc17xx_40xx/lpc17_40_spi.c
index 843f8d59b8..37610a31bf 100644
--- a/arch/arm/src/lpc17xx_40xx/lpc17_40_spi.c
+++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_spi.c
@@ -114,7 +114,7 @@ static int      spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_sndblock(FAR struct spi_dev_s *dev, FAR const void 
*buffer, size_t nwords);
 static void     spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, 
size_t nwords);
 
@@ -380,11 +380,11 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   /* Write the data to transmitted to the SPI Data Register */
 
-  putreg32((uint32_t)wd, LPC17_40_SPI_DR);
+  putreg32(wd, LPC17_40_SPI_DR);
 
   /* Wait for the SPIF bit in the SPI Status Register to be set to 1. The
    * SPIF bit will be set after the last sampling clock edge of the SPI
@@ -396,7 +396,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
   /* Read the SPI Status Register again to clear the status bit */
 
   getreg32(LPC17_40_SPI_SR);
-  return (uint16_t)getreg32(LPC17_40_SPI_DR);
+  return getreg32(LPC17_40_SPI_DR);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_ssp.c 
b/arch/arm/src/lpc17xx_40xx/lpc17_40_ssp.c
index 197e11f358..011b38a2c1 100644
--- a/arch/arm/src/lpc17xx_40xx/lpc17_40_ssp.c
+++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_ssp.c
@@ -138,7 +138,7 @@ static int      ssp_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t ssp_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     ssp_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     ssp_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t ssp_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t ssp_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     ssp_sndblock(FAR struct spi_dev_s *dev, FAR const void 
*buffer, size_t nwords);
 static void     ssp_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, 
size_t nwords);
 
@@ -562,7 +562,7 @@ static void ssp_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t ssp_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t ssp_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct lpc17_40_sspdev_s *priv = (FAR struct lpc17_40_sspdev_s *)dev;
   register uint32_t regval;
@@ -573,7 +573,7 @@ static uint16_t ssp_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Write the byte to the TX FIFO */
 
-  ssp_putreg(priv, LPC17_40_SSP_DR_OFFSET, (uint32_t)wd);
+  ssp_putreg(priv, LPC17_40_SSP_DR_OFFSET, wd);
 
   /* Wait for the RX FIFO not empty */
 
@@ -583,7 +583,7 @@ static uint16_t ssp_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   regval = ssp_getreg(priv, LPC17_40_SSP_DR_OFFSET);
   spiinfo("%04x->%04x\n", wd, regval);
-  return (uint16_t)regval;
+  return regval;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lpc2378/lpc23xx_spi.c 
b/arch/arm/src/lpc2378/lpc23xx_spi.c
index 251b9bf886..97de91a755 100644
--- a/arch/arm/src/lpc2378/lpc23xx_spi.c
+++ b/arch/arm/src/lpc2378/lpc23xx_spi.c
@@ -120,7 +120,7 @@ static int      spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_sndblock(FAR struct spi_dev_s *dev, FAR const void 
*buffer, size_t nwords);
 static void     spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, 
size_t nwords);
 
@@ -387,11 +387,11 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   /* Write the data to transmitted to the SPI Data Register */
 
-  putreg32((uint32_t)wd, SPI_DR);
+  putreg32(wd, SPI_DR);
 
   /* Wait for the SPIF bit in the SPI Status Register to be set to 1. The
    * SPIF bit will be set after the last sampling clock edge of the SPI
@@ -403,7 +403,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
   /* Read the SPI Status Register again to clear the status bit */
 
   getreg32(SPI_SR);
-  return (uint16_t)getreg32(SPI_DR);
+  return getreg32(SPI_DR);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lpc31xx/lpc31_spi.c b/arch/arm/src/lpc31xx/lpc31_spi.c
index 3a08508281..b62be850d2 100644
--- a/arch/arm/src/lpc31xx/lpc31_spi.c
+++ b/arch/arm/src/lpc31xx/lpc31_spi.c
@@ -111,8 +111,8 @@ static uint32_t    spi_getreg(uint32_t address);
 
 static inline void spi_drive_cs(FAR struct lpc31_spidev_s *priv, uint8_t 
slave, uint8_t val);
 static inline void spi_select_slave(FAR struct lpc31_spidev_s *priv, uint8_t 
slave);
-static inline uint16_t spi_readword(FAR struct lpc31_spidev_s *priv);
-static inline void spi_writeword(FAR struct lpc31_spidev_s *priv, uint16_t 
word);
+static inline uint32_t spi_readword(FAR struct lpc31_spidev_s *priv);
+static inline void spi_writeword(FAR struct lpc31_spidev_s *priv, uint32_t 
word);
 
 static int         spi_lock(FAR struct spi_dev_s *dev, bool lock);
 static void        spi_select(FAR struct spi_dev_s *dev, uint32_t devid, bool 
selected);
@@ -120,7 +120,7 @@ static uint32_t    spi_setfrequency(FAR struct spi_dev_s 
*dev, uint32_t frequenc
 static void        spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e 
mode);
 static void        spi_setbits(FAR struct spi_dev_s *dev, int nbits);
 static uint8_t     spi_status(FAR struct spi_dev_s *dev, uint32_t devid);
-static uint16_t    spi_send(FAR struct spi_dev_s *dev, uint16_t word);
+static uint32_t    spi_send(FAR struct spi_dev_s *dev, uint32_t word);
 static void        spi_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -382,7 +382,7 @@ static inline void spi_select_slave(FAR struct 
lpc31_spidev_s *priv, uint8_t sla
  *
  
************************************************************************************/
 
-static inline uint16_t spi_readword(FAR struct lpc31_spidev_s *priv)
+static inline uint32_t spi_readword(FAR struct lpc31_spidev_s *priv)
 {
   /* Wait until the RX FIFO is not empty */
 
@@ -390,7 +390,7 @@ static inline uint16_t spi_readword(FAR struct 
lpc31_spidev_s *priv)
 
   /* Then return the received word */
 
-  return (uint16_t)spi_getreg(LPC31_SPI_FIFODATA);
+  return spi_getreg(LPC31_SPI_FIFODATA);
 }
 
 
/************************************************************************************
@@ -408,7 +408,7 @@ static inline uint16_t spi_readword(FAR struct 
lpc31_spidev_s *priv)
  *
  
************************************************************************************/
 
-static inline void spi_writeword(FAR struct lpc31_spidev_s *priv, uint16_t 
word)
+static inline void spi_writeword(FAR struct lpc31_spidev_s *priv, uint32_t 
word)
 {
   /* Wait until the TX FIFO is not full */
 
@@ -706,7 +706,7 @@ static uint8_t spi_status(FAR struct spi_dev_s *dev, 
uint32_t devid)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t word)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t word)
 {
   FAR struct lpc31_spidev_s *priv = (FAR struct lpc31_spidev_s *)dev;
   DEBUGASSERT(priv);
@@ -767,7 +767,7 @@ static void spi_exchange(FAR struct spi_dev_s *dev, FAR 
const void *txbuffer,
 
               /* Then send the word */
 
-              spi_writeword(priv, word);
+              spi_writeword(priv, (uint32_t)word);
             }
           nwords -= maxtx;
 
@@ -807,7 +807,7 @@ static void spi_exchange(FAR struct spi_dev_s *dev, FAR 
const void *txbuffer,
 
               /* Then send the word */
 
-              spi_writeword(priv, (uint16_t)word);
+              spi_writeword(priv, (uint32_t)word);
             }
           nwords -= maxtx;
 
diff --git a/arch/arm/src/lpc43xx/lpc43_spi.c b/arch/arm/src/lpc43xx/lpc43_spi.c
index d884dd7491..a935fba6fd 100644
--- a/arch/arm/src/lpc43xx/lpc43_spi.c
+++ b/arch/arm/src/lpc43xx/lpc43_spi.c
@@ -107,7 +107,7 @@ static void     spi_select(FAR struct spi_dev_s *dev, 
uint32_t devid, bool selec
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_sndblock(FAR struct spi_dev_s *dev, FAR const void 
*buffer, size_t nwords);
 static void     spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, 
size_t nwords);
 
@@ -371,11 +371,11 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   /* Write the data to transmitted to the SPI Data Register */
 
-  putreg32((uint32_t)wd, LPC43_SPI_DR);
+  putreg32(wd, LPC43_SPI_DR);
 
   /* Wait for the SPIF bit in the SPI Status Register to be set to 1. The
    * SPIF bit will be set after the last sampling clock edge of the SPI
@@ -387,7 +387,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
   /* Read the SPI Status Register again to clear the status bit */
 
   getreg32(LPC43_SPI_SR);
-  return (uint16_t)getreg32(LPC43_SPI_DR);
+  return getreg32(LPC43_SPI_DR);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lpc43xx/lpc43_ssp.c b/arch/arm/src/lpc43xx/lpc43_ssp.c
index 0da6da5ef0..a66f946498 100644
--- a/arch/arm/src/lpc43xx/lpc43_ssp.c
+++ b/arch/arm/src/lpc43xx/lpc43_ssp.c
@@ -101,7 +101,7 @@ static int      ssp_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t ssp_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     ssp_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     ssp_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t ssp_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t ssp_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     ssp_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                          FAR void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -468,7 +468,7 @@ static void ssp_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t ssp_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t ssp_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct lpc43_sspdev_s *priv = (FAR struct lpc43_sspdev_s *)dev;
   register uint32_t regval;
@@ -479,7 +479,7 @@ static uint16_t ssp_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Write the byte to the TX FIFO */
 
-  ssp_putreg(priv, LPC43_SSP_DR_OFFSET, (uint32_t)wd);
+  ssp_putreg(priv, LPC43_SSP_DR_OFFSET, wd);
 
   /* Wait for the RX FIFO not empty */
 
@@ -489,7 +489,7 @@ static uint16_t ssp_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   regval = ssp_getreg(priv, LPC43_SSP_DR_OFFSET);
   spiinfo("%04x->%04x\n", wd, regval);
-  return (uint16_t)regval;
+  return regval;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lpc54xx/lpc54_spi_master.c 
b/arch/arm/src/lpc54xx/lpc54_spi_master.c
index 9d41d59cef..8f2186f01d 100644
--- a/arch/arm/src/lpc54xx/lpc54_spi_master.c
+++ b/arch/arm/src/lpc54xx/lpc54_spi_master.c
@@ -209,7 +209,7 @@ static uint32_t lpc54_spi_setfrequency(FAR struct spi_dev_s 
*dev,
 static void     lpc54_spi_setmode(FAR struct spi_dev_s *dev,
                   enum spi_mode_e mode);
 static void     lpc54_spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t lpc54_spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t lpc54_spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SPI_EXCHANGE
 static void     lpc54_spi_exchange(FAR struct spi_dev_s *dev,
                   FAR const void *txbuffer, FAR void *rxbuffer,
@@ -1445,7 +1445,7 @@ static void lpc54_spi_setbits(FAR struct spi_dev_s *dev, 
int nbits)
  *
  ****************************************************************************/
 
-static uint16_t lpc54_spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t lpc54_spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct lpc54_spidev_s *priv = (FAR struct lpc54_spidev_s *)dev;
   uint32_t regval;
@@ -1473,7 +1473,7 @@ static uint16_t lpc54_spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Then read and return the value from the Rx FIFO */
 
-  return (uint16_t)lpc54_spi_getreg(priv, LPC54_SPI_FIFORD_OFFSET);
+  return lpc54_spi_getreg(priv, LPC54_SPI_FIFORD_OFFSET);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/max326xx/max32660/max32660_spim.c 
b/arch/arm/src/max326xx/max32660/max32660_spim.c
index 34e65578ad..80552bc34d 100644
--- a/arch/arm/src/max326xx/max32660/max32660_spim.c
+++ b/arch/arm/src/max326xx/max32660/max32660_spim.c
@@ -193,7 +193,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits);
 static int  spi_hwfeatures(struct spi_dev_s *dev,
               spi_hwfeatures_t features);
 #endif
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd);
 static void spi_exchange(struct spi_dev_s *dev, const void *txbuffer,
               void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -1160,9 +1160,9 @@ static int spi_hwfeatures(struct spi_dev_s *dev, 
spi_hwfeatures_t features)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
-  uint16_t ret;
+  uint32_t ret;
 
   spiinfo("wd=%04u\n", wd);
   spi_exchange(dev, &wd, &ret, 1);
diff --git a/arch/arm/src/nrf52/nrf52_spi.c b/arch/arm/src/nrf52/nrf52_spi.c
index ced714ecfa..48a5929d06 100644
--- a/arch/arm/src/nrf52/nrf52_spi.c
+++ b/arch/arm/src/nrf52/nrf52_spi.c
@@ -112,7 +112,7 @@ static void nrf52_spi_setbits(FAR struct spi_dev_s *priv, 
int nbits);
 static int nrf52_spi_hwfeatures(FAR struct spi_dev_s *dev,
                                 spi_hwfeatures_t features);
 #endif
-static uint16_t nrf52_spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t nrf52_spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void nrf52_spi_exchange(FAR struct spi_dev_s *dev,
                                FAR const void *txbuffer,
                                FAR void *rxbuffer, size_t nwords);
@@ -757,9 +757,9 @@ static int nrf52_spi_hwfeatures(FAR struct spi_dev_s *dev,
  *
  ****************************************************************************/
 
-static uint16_t nrf52_spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t nrf52_spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
-  uint16_t ret = 0;
+  uint32_t ret = 0;
 
   /* Exchange one word on SPI */
 
diff --git a/arch/arm/src/s32k1xx/s32k1xx_lpspi.c 
b/arch/arm/src/s32k1xx/s32k1xx_lpspi.c
index 33d9e92248..8c0c4644e8 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_lpspi.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_lpspi.c
@@ -149,7 +149,7 @@ static inline uint32_t s32k1xx_lpspi_getreg32(FAR struct 
s32k1xx_lpspidev_s *pri
               uint8_t offset);
 static inline void s32k1xx_lpspi_putreg32(FAR struct s32k1xx_lpspidev_s *priv,
               uint8_t offset, uint32_t value);
-static inline uint16_t s32k1xx_lpspi_readword(FAR struct s32k1xx_lpspidev_s 
*priv);
+static inline uint32_t s32k1xx_lpspi_readword(FAR struct s32k1xx_lpspidev_s 
*priv);
 static inline void s32k1xx_lpspi_writeword(FAR struct s32k1xx_lpspidev_s *priv,
               uint16_t byte);
 static inline bool s32k1xx_lpspi_9to16bitmode(FAR struct s32k1xx_lpspidev_s 
*priv);
@@ -171,7 +171,7 @@ static void s32k1xx_lpspi_setbits(FAR struct spi_dev_s 
*dev, int nbits);
 static int s32k1xx_lpspi_hwfeatures(FAR struct spi_dev_s *dev,
               s32k1xx_lpspi_hwfeatures_t features);
 #endif
-static uint16_t s32k1xx_lpspi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t s32k1xx_lpspi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void s32k1xx_lpspi_exchange(FAR struct spi_dev_s *dev,
               FAR const void *txbuffer, FAR void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -428,7 +428,7 @@ static inline void s32k1xx_lpspi_putreg32(FAR struct 
s32k1xx_lpspidev_s *priv,
  *
  
************************************************************************************/
 
-static inline uint16_t s32k1xx_lpspi_readword(FAR struct s32k1xx_lpspidev_s 
*priv)
+static inline uint32_t s32k1xx_lpspi_readword(FAR struct s32k1xx_lpspidev_s 
*priv)
 {
   /* Wait until the receive buffer is not empty */
 
@@ -438,7 +438,7 @@ static inline uint16_t s32k1xx_lpspi_readword(FAR struct 
s32k1xx_lpspidev_s *pri
 
   /* Then return the received byte */
 
-  return (uint16_t) s32k1xx_lpspi_getreg32(priv, S32K1XX_LPSPI_RDR_OFFSET);
+  return (uint32_t) s32k1xx_lpspi_getreg32(priv, S32K1XX_LPSPI_RDR_OFFSET);
 }
 
 
/************************************************************************************
@@ -1192,15 +1192,15 @@ static int s32k1xx_lpspi_hwfeatures(FAR struct 
spi_dev_s *dev,
  *
  
************************************************************************************/
 
-static uint16_t s32k1xx_lpspi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t s32k1xx_lpspi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct s32k1xx_lpspidev_s *priv = (FAR struct s32k1xx_lpspidev_s *)dev;
   uint32_t regval;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->spibase);
 
-  s32k1xx_lpspi_writeword(priv, (uint32_t) wd);
+  s32k1xx_lpspi_writeword(priv, wd);
 
   while ((s32k1xx_lpspi_getreg32(priv, S32K1XX_LPSPI_SR_OFFSET) & 
LPSPI_SR_RDF) !=
          LPSPI_SR_RDF);
@@ -1281,7 +1281,7 @@ static void s32k1xx_lpspi_exchange_nodma(FAR struct 
spi_dev_s *dev,
 
           /* Exchange one word */
 
-          word = s32k1xx_lpspi_send(dev, word);
+          word = (uint16_t) s32k1xx_lpspi_send(dev, (uint32_t) word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1314,7 +1314,7 @@ static void s32k1xx_lpspi_exchange_nodma(FAR struct 
spi_dev_s *dev,
 
           /* Exchange one word */
 
-          word = (uint8_t) s32k1xx_lpspi_send(dev, (uint16_t) word);
+          word = (uint8_t) s32k1xx_lpspi_send(dev, (uint32_t) word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/sam34/sam_spi.c b/arch/arm/src/sam34/sam_spi.c
index 53b7915fd7..48258f76cc 100644
--- a/arch/arm/src/sam34/sam_spi.c
+++ b/arch/arm/src/sam34/sam_spi.c
@@ -278,7 +278,7 @@ static void     spi_select(struct spi_dev_s *dev, uint32_t 
devid,
 static uint32_t spi_setfrequency(struct spi_dev_s *dev, uint32_t frequency);
 static void     spi_setmode(struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SAM34_SPI_DMA
 static void     spi_exchange_nodma(struct spi_dev_s *dev,
                    const void *txbuffer, void *rxbuffer, size_t nwords);
@@ -1194,7 +1194,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -1209,7 +1209,7 @@ static uint16_t spi_send(struct spi_dev_s *dev, uint16_t 
wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/sama5/sam_spi.c b/arch/arm/src/sama5/sam_spi.c
index ef5fa25f20..b52cf4a315 100644
--- a/arch/arm/src/sama5/sam_spi.c
+++ b/arch/arm/src/sama5/sam_spi.c
@@ -267,7 +267,7 @@ static void     spi_select(struct spi_dev_s *dev, uint32_t 
devid,
 static uint32_t spi_setfrequency(struct spi_dev_s *dev, uint32_t frequency);
 static void     spi_setmode(struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SAMA5_SPI_DMA
 static void     spi_exchange_nodma(struct spi_dev_s *dev,
                    const void *txbuffer, void *rxbuffer, size_t nwords);
@@ -1185,7 +1185,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -1200,7 +1200,7 @@ static uint16_t spi_send(struct spi_dev_s *dev, uint16_t 
wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/samd2l2/sam_spi.c b/arch/arm/src/samd2l2/sam_spi.c
index c2941fb789..9d62114c07 100644
--- a/arch/arm/src/samd2l2/sam_spi.c
+++ b/arch/arm/src/samd2l2/sam_spi.c
@@ -190,7 +190,7 @@ static int      spi_lock(struct spi_dev_s *dev, bool lock);
 static uint32_t spi_setfrequency(struct spi_dev_s *dev, uint32_t frequency);
 static void     spi_setmode(struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd);
 static void     spi_exchange(struct spi_dev_s *dev, const void *txbuffer,
                    void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -1072,7 +1072,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -1087,7 +1087,7 @@ static uint16_t spi_send(struct spi_dev_s *dev, uint16_t 
wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/samd5e5/sam_spi.c b/arch/arm/src/samd5e5/sam_spi.c
index 4aaca3dbe1..4a820790a5 100644
--- a/arch/arm/src/samd5e5/sam_spi.c
+++ b/arch/arm/src/samd5e5/sam_spi.c
@@ -185,7 +185,7 @@ static int      spi_lock(struct spi_dev_s *dev, bool lock);
 static uint32_t spi_setfrequency(struct spi_dev_s *dev, uint32_t frequency);
 static void     spi_setmode(struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t ch);
 static void     spi_exchange(struct spi_dev_s *dev, const void *txbuffer,
                    void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -1167,7 +1167,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -1182,7 +1182,7 @@ static uint16_t spi_send(struct spi_dev_s *dev, uint16_t 
wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/samv7/sam_spi.c b/arch/arm/src/samv7/sam_spi.c
index 25f5c57fbf..34479dd38a 100644
--- a/arch/arm/src/samv7/sam_spi.c
+++ b/arch/arm/src/samv7/sam_spi.c
@@ -272,7 +272,7 @@ static int      spi_hwfeatures(struct spi_dev_s *dev, 
uint8_t features);
 #endif
 static void     spi_setmode(struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SAMV7_SPI_DMA
 static void     spi_exchange_nodma(struct spi_dev_s *dev,
                    const void *txbuffer, void *rxbuffer, size_t nwords);
@@ -1416,7 +1416,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -1431,7 +1431,7 @@ static uint16_t spi_send(struct spi_dev_s *dev, uint16_t 
wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32/stm32_spi.c b/arch/arm/src/stm32/stm32_spi.c
index 978ea18556..8efedd2dbe 100644
--- a/arch/arm/src/stm32/stm32_spi.c
+++ b/arch/arm/src/stm32/stm32_spi.c
@@ -232,7 +232,7 @@ static void        spi_setbits(FAR struct spi_dev_s *dev, 
int nbits);
 static int         spi_hwfeatures(FAR struct spi_dev_s *dev,
                                   spi_hwfeatures_t features);
 #endif
-static uint16_t    spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t    spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void        spi_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
 #ifdef CONFIG_SPI_TRIGGER
@@ -1508,16 +1508,16 @@ static int spi_hwfeatures(FAR struct spi_dev_s *dev, 
spi_hwfeatures_t features)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct stm32_spidev_s *priv = (FAR struct stm32_spidev_s *)dev;
   uint32_t regval;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->spibase);
 
-  spi_writeword(priv, wd);
-  ret = spi_readword(priv);
+  spi_writeword(priv, (uin32_t)(wd & 0xffff));
+  ret = (uin32_t)spi_readword(priv);
 
   /* Check and clear any error flags (Reading from the SR clears the error 
flags) */
 
@@ -1592,7 +1592,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = spi_send(dev, word);
+          word = (uin16_t)spi_send(dev, (uin32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1625,7 +1625,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = (uint8_t)spi_send(dev, (uint16_t)word);
+          word = (uint8_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/stm32f0l0g0/stm32_spi.c 
b/arch/arm/src/stm32f0l0g0/stm32_spi.c
index 421f3d05a6..f2574237f9 100644
--- a/arch/arm/src/stm32f0l0g0/stm32_spi.c
+++ b/arch/arm/src/stm32f0l0g0/stm32_spi.c
@@ -1214,16 +1214,16 @@ static int spi_hwfeatures(FAR struct spi_dev_s *dev, 
spi_hwfeatures_t features)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct stm32_spidev_s *priv = (FAR struct stm32_spidev_s *)dev;
   uint32_t regval;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->spibase);
 
-  spi_writeword(priv, wd);
-  ret = spi_readword(priv);
+  spi_writeword(priv, (uint16_t)(wd & 0xffff));
+  ret = (uint32_t)spi_readword(priv);
 
   /* Check and clear any error flags (Reading from the SR clears the error 
flags) */
 
@@ -1294,7 +1294,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = spi_send(dev, word);
+          word = (uint16_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1327,7 +1327,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = (uint8_t)spi_send(dev, (uint16_t)word);
+          word = (uint8_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/stm32f7/stm32_spi.c b/arch/arm/src/stm32f7/stm32_spi.c
index 90a18bfb3e..4e4b8e2bc7 100644
--- a/arch/arm/src/stm32f7/stm32_spi.c
+++ b/arch/arm/src/stm32f7/stm32_spi.c
@@ -1473,11 +1473,11 @@ static int spi_hwfeatures(FAR struct spi_dev_s *dev, 
spi_hwfeatures_t features)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct stm32_spidev_s *priv = (FAR struct stm32_spidev_s *)dev;
   uint32_t regval;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->spibase);
 
@@ -1488,8 +1488,8 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   if (spi_9to16bitmode(priv))
     {
-      spi_writeword(priv, wd);
-      ret = spi_readword(priv);
+      spi_writeword(priv, (uint16_t)(wd & 0xffff));
+      ret = (uint32_t)spi_readword(priv);
     }
   else
     {
@@ -1576,7 +1576,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = spi_send(dev, word);
+          word = (uin16_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1609,7 +1609,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = (uint8_t)spi_send(dev, (uint16_t)word);
+          word = (uint8_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/stm32h7/stm32_spi.c b/arch/arm/src/stm32h7/stm32_spi.c
index 115f2e15a2..591037369d 100644
--- a/arch/arm/src/stm32h7/stm32_spi.c
+++ b/arch/arm/src/stm32h7/stm32_spi.c
@@ -252,7 +252,7 @@ static void        spi_setbits(FAR struct spi_dev_s *dev, 
int nbits);
 static int         spi_hwfeatures(FAR struct spi_dev_s *dev,
                                   spi_hwfeatures_t features);
 #endif
-static uint16_t    spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t    spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void        spi_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
 #ifdef CONFIG_SPI_TRIGGER
@@ -1508,7 +1508,7 @@ static int spi_hwfeatures(FAR struct spi_dev_s *dev, 
spi_hwfeatures_t features)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct stm32_spidev_s *priv = (FAR struct stm32_spidev_s *)dev;
   uint32_t regval = 0;
@@ -1531,7 +1531,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   if (spi_9to16bitmode(priv))
     {
-      spi_writeword(priv, wd);
+      spi_writeword(priv, (uint16_t)(wd & 0xffff));
       ret = spi_readword(priv);
     }
   else
@@ -1626,7 +1626,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = spi_send(dev, word);
+          word = (uint16_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1659,7 +1659,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = (uint8_t)spi_send(dev, (uint16_t)word);
+          word = (uint8_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/stm32l4/stm32l4_spi.c 
b/arch/arm/src/stm32l4/stm32l4_spi.c
index cd0628cada..0f36a0876f 100644
--- a/arch/arm/src/stm32l4/stm32l4_spi.c
+++ b/arch/arm/src/stm32l4/stm32l4_spi.c
@@ -223,7 +223,7 @@ static void        spi_setbits(FAR struct spi_dev_s *dev, 
int nbits);
 static int         spi_hwfeatures(FAR struct spi_dev_s *dev,
                                   spi_hwfeatures_t features);
 #endif
-static uint16_t    spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t    spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void        spi_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
 #ifdef CONFIG_SPI_TRIGGER
@@ -1253,11 +1253,11 @@ static int spi_hwfeatures(FAR struct spi_dev_s *dev, 
spi_hwfeatures_t features)
  *
  
************************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct stm32l4_spidev_s *priv = (FAR struct stm32l4_spidev_s *)dev;
   uint32_t regval;
-  uint16_t ret;
+  uint32_t ret;
 
   DEBUGASSERT(priv && priv->spibase);
 
@@ -1268,13 +1268,13 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   if (spi_16bitmode(priv))
     {
-      spi_writeword(priv, wd);
-      ret = spi_readword(priv);
+      spi_writeword(priv, (uint16_t)(wd & 0xffff));
+      ret = (uint32_t)spi_readword(priv);
     }
   else
     {
       spi_writebyte(priv, (uint8_t)(wd & 0xff));
-      ret = (uint16_t)spi_readbyte(priv);
+      ret = (uint32_t)spi_readbyte(priv);
     }
 
   /* Check and clear any error flags (Reading from the SR clears the error
@@ -1355,7 +1355,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = spi_send(dev, word);
+          word = (uint16_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
@@ -1388,7 +1388,7 @@ static void spi_exchange_nodma(FAR struct spi_dev_s *dev, 
FAR const void *txbuff
 
           /* Exchange one word */
 
-          word = (uint8_t)spi_send(dev, (uint16_t)word);
+          word = (uint8_t)spi_send(dev, (uint32_t)word);
 
           /* Is there a buffer to receive the return value? */
 
diff --git a/arch/arm/src/tiva/common/tiva_ssi.c 
b/arch/arm/src/tiva/common/tiva_ssi.c
index c17f836b5f..893ae0f0ee 100644
--- a/arch/arm/src/tiva/common/tiva_ssi.c
+++ b/arch/arm/src/tiva/common/tiva_ssi.c
@@ -281,7 +281,7 @@ static void ssi_setmodeinternal(struct tiva_ssidev_s *priv,
 static void ssi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void ssi_setbitsinternal(struct tiva_ssidev_s *priv, int nbits);
 static void ssi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t ssi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t ssi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SPI_EXCHANGE
 static void ssi_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer,
                          FAR void *rxbuffer, size_t nwords);
@@ -1363,10 +1363,10 @@ static void ssi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t ssi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t ssi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   struct tiva_ssidev_s *priv = (struct tiva_ssidev_s *)dev;
-  uint16_t response = 0;
+  uint32_t response = 0;
 
   ssi_transfer(priv, &wd, &response, 1);
   return response;
diff --git a/arch/arm/src/xmc4/xmc4_spi.c b/arch/arm/src/xmc4/xmc4_spi.c
index 34959983f8..038437d377 100644
--- a/arch/arm/src/xmc4/xmc4_spi.c
+++ b/arch/arm/src/xmc4/xmc4_spi.c
@@ -287,7 +287,7 @@ static void     spi_select(struct spi_dev_s *dev, uint32_t 
devid,
 static uint32_t spi_setfrequency(struct spi_dev_s *dev, uint32_t frequency);
 static void     spi_setmode(struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd);
 
 #ifdef CONFIG_XMC4_SPI_DMA
 static void     spi_exchange_nodma(struct spi_dev_s *dev,
@@ -1300,7 +1300,7 @@ static void spi_setbits(struct spi_dev_s *dev, int nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -1315,7 +1315,7 @@ static uint16_t spi_send(struct spi_dev_s *dev, uint16_t 
wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/avr/src/avr/up_spi.c b/arch/avr/src/avr/up_spi.c
index bce9f6a0fe..540c284c43 100644
--- a/arch/avr/src/avr/up_spi.c
+++ b/arch/avr/src/avr/up_spi.c
@@ -85,7 +85,7 @@ static int      spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_sndblock(FAR struct spi_dev_s *dev, FAR const void 
*buffer, size_t nwords);
 static void     spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, 
size_t nwords);
 
@@ -340,7 +340,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   /* Write the data to transmitted to the SPI Data Register */
 
@@ -352,7 +352,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Then return the received value */
 
-  return (uint16_t)SPDR;
+  return (uint32_t)SPDR;
 }
 
 /****************************************************************************
diff --git a/arch/mips/src/pic32mx/pic32mx-spi.c 
b/arch/mips/src/pic32mx/pic32mx-spi.c
index 89a22a1d90..57bd293c39 100644
--- a/arch/mips/src/pic32mx/pic32mx-spi.c
+++ b/arch/mips/src/pic32mx/pic32mx-spi.c
@@ -112,7 +112,7 @@ static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev,
                                  uint32_t frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_sndblock(FAR struct spi_dev_s *dev,
                              FAR const void *buffer, size_t nwords);
 static void     spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer,
@@ -694,7 +694,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct pic32mx_dev_s *priv = (FAR struct pic32mx_dev_s *)dev;
 
@@ -702,7 +702,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Write the data to transmitted to the SPI Data Register */
 
-  spi_putreg(priv, PIC32MX_SPI_BUF_OFFSET, (uint32_t)wd);
+  spi_putreg(priv, PIC32MX_SPI_BUF_OFFSET, wd);
 
 #ifdef CONFIG_PIC32MX_SPI_ENHBUF
   /* Wait for the SPIRBE bit in the SPI Status Register to be set to 0. In
@@ -722,7 +722,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
 
   /* Return the SPI data */
 
-  return (uint16_t)spi_getreg(priv, PIC32MX_SPI_BUF_OFFSET);
+  return spi_getreg(priv, PIC32MX_SPI_BUF_OFFSET);
 }
 
 /****************************************************************************
diff --git a/arch/mips/src/pic32mz/pic32mz-spi.c 
b/arch/mips/src/pic32mz/pic32mz-spi.c
index ac0d94962a..5eb2dc6d00 100644
--- a/arch/mips/src/pic32mz/pic32mz-spi.c
+++ b/arch/mips/src/pic32mz/pic32mz-spi.c
@@ -228,7 +228,7 @@ static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev,
                    uint32_t frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_exchange(FAR struct spi_dev_s *dev,
                              FAR const void *txbuffer, FAR void *rxbuffer,
                              size_t nwords);
@@ -1434,7 +1434,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct pic32mz_dev_s *priv = (FAR struct pic32mz_dev_s *)dev;
 
@@ -1456,7 +1456,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
       spi_exchange16(priv, &txword, &rxword, 1);
 
       spiinfo("Sent %04x received %04x\n", txword, rxword);
-      return rxword;
+      return (uint32_t)rxword;
     }
   else
     {
@@ -1470,7 +1470,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
       spi_exchange8(priv, &txbyte, &rxbyte, 1);
 
       spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-      return (uint16_t)rxbyte;
+      return (uint32_t)rxbyte;
     }
 }
 
diff --git a/arch/sim/src/sim/up_spiflash.c b/arch/sim/src/sim/up_spiflash.c
index 7eb8ee4534..6429b76e86 100644
--- a/arch/sim/src/sim/up_spiflash.c
+++ b/arch/sim/src/sim/up_spiflash.c
@@ -178,7 +178,7 @@ struct sim_spiflashdev_s
   FAR char *        name;       /* Name of the flash type (m25p, w25, etc.) */
   int               wren;
   int               state;
-  uint16_t          read_data;
+  uint32_t          read_data;
   uint8_t           last_cmd;
   uint8_t           capacity;
   uint8_t           manuf;
@@ -197,7 +197,7 @@ static int         spiflash_lock(FAR struct spi_dev_s *dev, 
bool lock);
 static uint32_t    spiflash_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void        spiflash_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e 
mode);
 static void        spiflash_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t    spiflash_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t    spiflash_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void        spiflash_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                                 FAR void *rxbuffer, size_t nwords);
 static void        spiflash_select(FAR struct spi_dev_s *dev, uint32_t devid,
@@ -214,7 +214,7 @@ static void        spiflash_recvblock(FAR struct spi_dev_s 
*dev, FAR void *rxbuf
 #endif
 
 static void spiflash_writeword(FAR struct sim_spiflashdev_s *priv, uint16_t 
data);
-static uint16_t spiflash_readword(FAR struct sim_spiflashdev_s *priv);
+static uint32_t spiflash_readword(FAR struct sim_spiflashdev_s *priv);
 
 
/************************************************************************************
  * Private Data
@@ -500,10 +500,10 @@ static uint8_t spiflash_status(FAR struct spi_dev_s *dev, 
uint32_t devid)
  *
  
************************************************************************************/
 
-static uint16_t spiflash_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spiflash_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct sim_spiflashdev_s *priv = (FAR struct sim_spiflashdev_s *)dev;
-  uint16_t ret;
+  uint32_t ret;
 
   if (priv->selected)
     {
@@ -897,7 +897,7 @@ static void spiflash_writeword(FAR struct sim_spiflashdev_s 
*priv, uint16_t data
  *
  
************************************************************************************/
 
-static uint16_t spiflash_readword(FAR struct sim_spiflashdev_s *priv)
+static uint32_t spiflash_readword(FAR struct sim_spiflashdev_s *priv)
 {
   return priv->read_data;
 }
diff --git a/arch/z16/src/z16f/z16f_espi.c b/arch/z16/src/z16f/z16f_espi.c
index 65c811f21b..b6d5498d5a 100644
--- a/arch/z16/src/z16f/z16f_espi.c
+++ b/arch/z16/src/z16f/z16f_espi.c
@@ -115,7 +115,7 @@ static int      spi_lock(FAR struct spi_dev_s *dev, bool 
lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t 
frequency);
 static void     spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_exchange(FAR struct spi_dev_s *dev, FAR const void 
*txbuffer,
                    FAR void *rxbuffer, size_t nwords);
 #ifndef CONFIG_SPI_EXCHANGE
@@ -580,7 +580,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t txbyte;
   uint8_t rxbyte;
@@ -595,7 +595,7 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
   spi_exchange(dev, &txbyte, &rxbyte, 1);
 
   spiinfo("Sent %02x received %02x\n", txbyte, rxbyte);
-  return (uint16_t)rxbyte;
+  return (uint32_t)rxbyte;
 }
 
 /****************************************************************************
diff --git a/arch/z80/src/ez80/ez80_spi.c b/arch/z80/src/ez80/ez80_spi.c
index f46b4a5a06..d74e520cdb 100644
--- a/arch/z80/src/ez80/ez80_spi.c
+++ b/arch/z80/src/ez80/ez80_spi.c
@@ -74,7 +74,7 @@ static int    spi_lock(FAR struct spi_dev_s *dev, bool lock);
 static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev,
                 uint32_t frequency);
 static void   spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SPI_EXCHANGE
 static void   spi_exchange(FAR struct spi_dev_s *dev,
                 FAR const void *txbuffer, FAR void *rxbuffer,
@@ -405,7 +405,7 @@ static int spi_transfer(uint8_t chout, FAR uint8_t *chin)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   uint8_t response;
   int ret;
@@ -414,11 +414,11 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, 
uint16_t wd)
   if (ret < 0)
     {
       spierr("ERROR: spi_transfer returned %d\n", ret);
-      return (uint16_t)0xff;
+      return (uint32_t)0xff;
     }
 
   spiinfo("ch: %04x response: %02x\n", wd, response);
-  return (uint16_t)response;
+  return (uint32_t)response;
 }
 
 /****************************************************************************
diff --git a/drivers/spi/spi_bitbang.c b/drivers/spi/spi_bitbang.c
index 646c6db4ce..7b957ed915 100644
--- a/drivers/spi/spi_bitbang.c
+++ b/drivers/spi/spi_bitbang.c
@@ -96,7 +96,7 @@ static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev,
 static void     spi_setmode(FAR struct spi_dev_s *dev,
                   enum spi_mode_e mode);
 static void     spi_setbits(FAR struct spi_dev_s *dev, int nbits);
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd);
 static void     spi_exchange(FAR struct spi_dev_s *dev,
                    FAR const void *txbuffer, FAR void *rxbuffer,
                    size_t nwords);
@@ -308,12 +308,12 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int 
nbits)
  *
  ****************************************************************************/
 
-static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd)
+static uint32_t spi_send(FAR struct spi_dev_s *dev, uint32_t wd)
 {
   FAR struct spi_bitbang_s *priv = (FAR struct spi_bitbang_s *)dev;
   DEBUGASSERT(priv && priv->low && priv->low->exchange);
 
-  return priv->low->exchange(priv, wd);
+  return priv->low->exchange(priv, (uint16_t)wd);
 }
 
 /****************************************************************************
diff --git a/include/nuttx/spi/spi.h b/include/nuttx/spi/spi.h
index aba5de25a7..b840b1d3f4 100644
--- a/include/nuttx/spi/spi.h
+++ b/include/nuttx/spi/spi.h
@@ -573,7 +573,7 @@ struct spi_ops_s
   CODE int      (*cmddata)(FAR struct spi_dev_s *dev, uint32_t devid,
                   bool cmd);
 #endif
-  CODE uint16_t (*send)(FAR struct spi_dev_s *dev, uint16_t wd);
+  CODE uint32_t (*send)(FAR struct spi_dev_s *dev, uint32_t wd);
 #ifdef CONFIG_SPI_EXCHANGE
   CODE void     (*exchange)(FAR struct spi_dev_s *dev,
                   FAR const void *txbuffer, FAR void *rxbuffer,

Reply via email to