Hi Hubert, 2011/6/24 Hubert Feurstein > Hi Franck, > > 2011/6/23 Franck JULLIEN : > > Hello, I have a question regarding the SPI spi_write_then_read function. > > > [snip] > >> +int spi_write_then_read(struct spi_device *spi, > >> + const void *txbuf, unsigned n_tx, > > > > Could you explain me why const is used here ? > Because this function will *not* write to the data of txbuf. With the > const here, this is > ensured at least at syntax level. > OK. > > [snip] > > > > Then we call spi_sync then master->transfer. In this last function we > have: > > list_for_each_entry (t, &mesg->transfers, transfer_list) { > > const u32 *txbuf = t->tx_buf; <--- point to zero when x[1] right ????? > > u32 *rxbuf = t->rx_buf; <--- point to zero when x[0] right ????? > > int i = 0; > > while(i < t->len >> 2) { > > rxbuf[i] = imx->xchg_single(imx, txbuf[i]); > > i++; > > } > > } > > What am I missing ??? > Your transfer function has to handle this correctly: > while(i < t->len >> 2) { > u32 txval = txbuf ? txbuf[i] : 0 > u32 rxval = imx->xchg_single(imx, txval); > if (rxbuf) > rxbuf[i] = rxval; > i++; > } > That's what I was thinking about. The code above is from imx_spi.c. I am currently writing an Altera spi driver that's why I was looking at this... > If no txbuf is available then simply transfer 0, if no rxbuf is > available then throw away the result. > BTW, I'm not sure if the above transfer-handler is able to handle 8bit > transfers correctly (because of len >> 2). > > I agree. > Hope this helps. > > Best Regards > Hubert > Thanks, Franck.