|
@@ -202,11 +202,12 @@ bool sys_spi_txrx(struct spi_port *port)
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
static
|
|
static
|
|
|
-void spi_emit_buf_reverse(struct spi_port *port, const void *p, size_t sz)
|
|
|
|
|
|
|
+void *spi_emit_buf_reverse(struct spi_port *port, const void *p, size_t sz)
|
|
|
{
|
|
{
|
|
|
const unsigned char *str = p;
|
|
const unsigned char *str = p;
|
|
|
|
|
+ void * const rv = &port->spibuf_rx[port->spibufsz];
|
|
|
if (port->spibufsz + sz >= SPIMAXSZ)
|
|
if (port->spibufsz + sz >= SPIMAXSZ)
|
|
|
- return;
|
|
|
|
|
|
|
+ return NULL;
|
|
|
for (size_t i = 0; i < sz; ++i)
|
|
for (size_t i = 0; i < sz; ++i)
|
|
|
{
|
|
{
|
|
|
// Reverse bit order in each byte!
|
|
// Reverse bit order in each byte!
|
|
@@ -216,6 +217,7 @@ void spi_emit_buf_reverse(struct spi_port *port, const void *p, size_t sz)
|
|
|
p = ((p & 0xf0)>>4) | ((p & 0x0f) << 4);
|
|
p = ((p & 0xf0)>>4) | ((p & 0x0f) << 4);
|
|
|
port->spibuf[port->spibufsz++] = p;
|
|
port->spibuf[port->spibufsz++] = p;
|
|
|
}
|
|
}
|
|
|
|
|
+ return rv;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static
|
|
static
|
|
@@ -253,15 +255,16 @@ void spi_emit_nop(struct spi_port *port, int n) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void spi_emit_data(struct spi_port *port, uint16_t addr, const void *buf, size_t len)
|
|
|
|
|
|
|
+void *spi_emit_data(struct spi_port *port, uint16_t addr, const void *buf, size_t len)
|
|
|
{
|
|
{
|
|
|
unsigned char otmp[3];
|
|
unsigned char otmp[3];
|
|
|
- if (len < 4 || len > 128) return; /* This cannot be programmed in single frame! */
|
|
|
|
|
|
|
+ if (len < 4 || len > 128)
|
|
|
|
|
+ return NULL; /* This cannot be programmed in single frame! */
|
|
|
len /= 4; /* Strip */
|
|
len /= 4; /* Strip */
|
|
|
otmp[0] = (len - 1) | 0xE0;
|
|
otmp[0] = (len - 1) | 0xE0;
|
|
|
otmp[1] = (addr >> 8)&0xFF; otmp[2] = addr & 0xFF;
|
|
otmp[1] = (addr >> 8)&0xFF; otmp[2] = addr & 0xFF;
|
|
|
spi_emit_buf(port, otmp, 3);
|
|
spi_emit_buf(port, otmp, 3);
|
|
|
- spi_emit_buf_reverse(port, buf, len*4);
|
|
|
|
|
|
|
+ return spi_emit_buf_reverse(port, buf, len*4);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#ifdef HAVE_LINUX_SPI
|
|
#ifdef HAVE_LINUX_SPI
|