mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
spi: SuperH MSIOF SPI Master driver V2
This patch is V2 of SPI Master support for the SuperH MSIOF. Full duplex, spi mode 0-3, active high cs, 3-wire and lsb first should all be supported, but the driver has so far only been tested with "mmc_spi". The MSIOF hardware comes with 32-bit FIFOs for receive and transmit, and this driver simply breaks the SPI messages into FIFO-sized chunks. The MSIOF hardware manages the pins for clock, receive and transmit (sck/miso/mosi), but the chip select pin is managed by software and must be configured as a regular GPIO pin by the board code. Performance wise there is still room for improvement, but on a Ecovec board with the built-in sh7724 MSIOF0 this driver gets Mini-sd read speeds of about half a megabyte per second. Future work include better clock setup and merging of 8-bit transfers into 32-bit words to reduce interrupt load and improve throughput. Signed-off-by: Magnus Damm <damm@opensource.se> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
1 parent
41df70d9ac
commit
8051effcbc
4 files changed
+709
No files matched your search
@@ -223,6 +223,13 @@ config SPI_S3C24XX_GPIO
|
||||
the inbuilt hardware cannot provide the transfer mode, or
|
||||
where the board is using non hardware connected pins.
|
||||
|
||||
config SPI_SH_MSIOF
|
||||
tristate "SuperH MSIOF SPI controller"
|
||||
depends on SUPERH && HAVE_CLK
|
||||
select SPI_BITBANG
|
||||
help
|
||||
SPI driver for SuperH MSIOF blocks.
|
||||
|
||||
config SPI_SH_SCI
|
||||
tristate "SuperH SCI SPI controller"
|
||||
depends on SUPERH
|
||||
|
||||
@@ -35,6 +35,7 @@ obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
|
||||
obj-$(CONFIG_SPI_XILINX_OF) += xilinx_spi_of.o
|
||||
obj-$(CONFIG_SPI_XILINX_PLTFM) += xilinx_spi_pltfm.o
|
||||
obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
|
||||
obj-$(CONFIG_SPI_SH_MSIOF) += spi_sh_msiof.o
|
||||
obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
|
||||
# ... add above this line ...
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,10 @@
|
||||
#ifndef __SPI_SH_MSIOF_H__
|
||||
#define __SPI_SH_MSIOF_H__
|
||||
|
||||
struct sh_msiof_spi_info {
|
||||
int tx_fifo_override;
|
||||
int rx_fifo_override;
|
||||
u16 num_chipselect;
|
||||
};
|
||||
|
||||
#endif /* __SPI_SH_MSIOF_H__ */
|
||||
Reference in new issue
Block a user