You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
au1550 SPI controller driver
Here is a driver for the Alchemy au1550 PSC (Programmable Serial Controller) in SPI master mode. It supports dma transfers using the Alchemy descriptor based dma controller for 4-8 bits per word SPI transfers. For 9-24 bits per word transfers, pio irq based mode is used to avoid setup of dma channels from scratch on each number of bits per word change. Tested with au1550; this may also work on other MIPS Alchemy cpus, like au1200/au1210/au1250. Used extensively with SD card connected via SPI; this handles 8.1MHz SPI clock transfers using dma without any problem (the highest SPI clock freq possible with au1550 running on 324MHz). The driver supports sharing of SPI bus by multiple devices. All features of Alchemy SPI mode are supported (all SPI modes, msb/lsb first, bits per word in 4-24 range). As the SPI clock of the controller depends on main input clock that shall be configured externally, platform data structure for au1550 SPI controller driver contains mainclk_hz attribute to define the input clock rate. From this value, dividers of the controller for SPI clock are set up for required frequency. Signed-off-by: Jan Nikitenko <jan.nikitenko@gmail.com> Whitespace and section fixups. Remove partial workaround for platform setup bug in dma_mask setup; it couldn't work with multiple controllers. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
33e34dc6ee
commit
63bd23591e
@@ -64,6 +64,17 @@ config SPI_BFIN
|
||||
help
|
||||
This is the SPI controller master driver for Blackfin 5xx processor.
|
||||
|
||||
config SPI_AU1550
|
||||
tristate "Au1550/Au12x0 SPI Controller"
|
||||
depends on SPI_MASTER && (SOC_AU1550 || SOC_AU1200) && EXPERIMENTAL
|
||||
select SPI_BITBANG
|
||||
help
|
||||
If you say yes to this option, support will be included for the
|
||||
Au1550 SPI controller (may also work with Au1200,Au1210,Au1250).
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called au1550_spi.
|
||||
|
||||
config SPI_BITBANG
|
||||
tristate "Bitbanging SPI master"
|
||||
depends on SPI_MASTER && EXPERIMENTAL
|
||||
|
||||
@@ -14,6 +14,7 @@ obj-$(CONFIG_SPI_MASTER) += spi.o
|
||||
obj-$(CONFIG_SPI_ATMEL) += atmel_spi.o
|
||||
obj-$(CONFIG_SPI_BFIN) += spi_bfin5xx.o
|
||||
obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o
|
||||
obj-$(CONFIG_SPI_AU1550) += au1550_spi.o
|
||||
obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o
|
||||
obj-$(CONFIG_SPI_IMX) += spi_imx.o
|
||||
obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* au1550_spi.h - au1550 psc spi controller driver - platform data struct
|
||||
*/
|
||||
|
||||
#ifndef _AU1550_SPI_H_
|
||||
#define _AU1550_SPI_H_
|
||||
|
||||
struct au1550_spi_info {
|
||||
s16 bus_num; /* defines which PSC and IRQ to use */
|
||||
u32 mainclk_hz; /* main input clock frequency of PSC */
|
||||
u16 num_chipselect; /* number of chipselects supported */
|
||||
void (*activate_cs)(struct au1550_spi_info *spi, int cs, int polarity);
|
||||
void (*deactivate_cs)(struct au1550_spi_info *spi, int cs, int polarity);
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user