On Wed, Feb 19, 2014 at 2:04 PM, Mark Brown <broonie@xxxxxxxxxx> wrote: > On Tue, Feb 18, 2014 at 10:59:09AM +0100, Geert Uytterhoeven wrote: > >> For Dual/Quad transfers, which are half-duplex, the buffer pointer for the >> unused direction must be NULL, so the driver knows in which direction to >> transfer. Hence SPI_MASTER_MUST_TX cannot be set for Dual/Quad >> capable SPI master. > > This is a particularly thoughtless hardware design it has to be said. Do you mean the fact that you need to transmit dummy data on this particular hardware, or that you need to know the direction for Dual/Quad transfers, and don't need dummy data for the latter? It actually makes sense from a hardware point of view: - Single SPI transfers are full-duplex. For every bit of output, there's a bit of input. As this is SPI master, not slave, the master controls everything based on the availability of data in the output FIFO. - Dual/Quad SPI transfers are half duplex: Transmission is controlled by the master, based on the availability of data in the output FIFO. Reception is also controlled by the master, but as there's no data to output, this is handled based on the amount of space in the RX FIFO. >> I'm also worried about the buffer allocation. With m25p80 and mtchar, the >> transfer buffer can be quite large (up to 4 MiB in my case), and this can be >> triggered from userspace. > > That's readily fixable for DMA capable drivers, we can just repeatedly > transfer the same page (or whatever). PIO drivers have big problems So let's hope all DMA-capable hardware has scatter/gather support, or an IOMMU ;-) >> Concluding, for PIO mode, I'm still in favor of using > >> data = tx_buf ? *tx_buf++ : DUMMY_DATA; > >> in the SPI master driver itself. > > With the ternery operator for legibility of course. You forgot the smiley ;-) While in general I care a lot about readability (code is read more than it's written), using a ternary operator for chosing between valid data and a dummy zero is fine, IMHO. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html