[PATCH] spi: simple SPI framework
This is the core of a small SPI framework, implementing the model of a
queue of messages which complete asynchronously (with thin synchronous
wrappers on top).
- It's still less than 2KB of ".text" (ARM). If there's got to be a
mid-layer for something so simple, that's the right size budget. :)
- The guts use board-specific SPI device tables to build the driver
model tree. (Hardware probing is rarely an option.)
- This version of Kconfig includes no drivers. At this writing there
are two known master controller drivers (PXA/SSP, OMAP MicroWire)
and three protocol drivers (CS8415a, ADS7846, DataFlash) with LKML
mentions of other drivers in development.
- No userspace API. There are several implementations to compare.
Implement them like any other driver, and bind them with sysfs.
The changes from last version posted to LKML (on 11-Nov-2005) are minor,
and include:
- One bugfix (removes a FIXME), with the visible effect of making device
names be "spiB.C" where B is the bus number and C is the chipselect.
- The "caller provides DMA mappings" mechanism now has kerneldoc, for
DMA drivers that want to be fancy.
- Hey, the framework init can be subsys_init. Even though board init
logic fires earlier, at arch_init ... since the framework init is
for driver support, and the board init support uses static init.
- Various additional spec/doc clarifications based on discussions
with other folk. It adds a brief "thank you" at the end, for folk
who've helped nudge this framework into existence.
As I've said before, I think that "protocol tweaking" is the main support
that this driver framework will need to evolve.
From: Mark Underwood <basicmark@yahoo.com>
Update the SPI framework to remove a potential priority inversion case by
reverting to kmalloc if the pre-allocated DMA-safe buffer isn't available.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-01-09 05:34:19 +08:00
|
|
|
#
|
|
|
|
# Makefile for kernel SPI drivers.
|
|
|
|
#
|
|
|
|
|
2010-09-25 03:17:32 +08:00
|
|
|
ccflags-$(CONFIG_SPI_DEBUG) := -DDEBUG
|
[PATCH] spi: simple SPI framework
This is the core of a small SPI framework, implementing the model of a
queue of messages which complete asynchronously (with thin synchronous
wrappers on top).
- It's still less than 2KB of ".text" (ARM). If there's got to be a
mid-layer for something so simple, that's the right size budget. :)
- The guts use board-specific SPI device tables to build the driver
model tree. (Hardware probing is rarely an option.)
- This version of Kconfig includes no drivers. At this writing there
are two known master controller drivers (PXA/SSP, OMAP MicroWire)
and three protocol drivers (CS8415a, ADS7846, DataFlash) with LKML
mentions of other drivers in development.
- No userspace API. There are several implementations to compare.
Implement them like any other driver, and bind them with sysfs.
The changes from last version posted to LKML (on 11-Nov-2005) are minor,
and include:
- One bugfix (removes a FIXME), with the visible effect of making device
names be "spiB.C" where B is the bus number and C is the chipselect.
- The "caller provides DMA mappings" mechanism now has kerneldoc, for
DMA drivers that want to be fancy.
- Hey, the framework init can be subsys_init. Even though board init
logic fires earlier, at arch_init ... since the framework init is
for driver support, and the board init support uses static init.
- Various additional spec/doc clarifications based on discussions
with other folk. It adds a brief "thank you" at the end, for folk
who've helped nudge this framework into existence.
As I've said before, I think that "protocol tweaking" is the main support
that this driver framework will need to evolve.
From: Mark Underwood <basicmark@yahoo.com>
Update the SPI framework to remove a potential priority inversion case by
reverting to kmalloc if the pre-allocated DMA-safe buffer isn't available.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-01-09 05:34:19 +08:00
|
|
|
|
|
|
|
# small core, mostly translating board-specific
|
|
|
|
# config declarations into driver model code
|
|
|
|
obj-$(CONFIG_SPI_MASTER) += spi.o
|
|
|
|
|
|
|
|
# SPI master controller drivers (bus)
|
2011-02-14 10:10:43 +08:00
|
|
|
obj-$(CONFIG_SPI_ALTERA) += spi_altera.o
|
2007-02-14 16:33:09 +08:00
|
|
|
obj-$(CONFIG_SPI_ATMEL) += atmel_spi.o
|
2011-01-05 04:28:22 +08:00
|
|
|
obj-$(CONFIG_SPI_ATH79) += ath79_spi.o
|
2007-05-07 05:50:34 +08:00
|
|
|
obj-$(CONFIG_SPI_BFIN) += spi_bfin5xx.o
|
|
|
|
obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o
|
2007-05-08 15:32:25 +08:00
|
|
|
obj-$(CONFIG_SPI_AU1550) += au1550_spi.o
|
2006-01-09 05:34:29 +08:00
|
|
|
obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o
|
2010-01-21 04:49:44 +08:00
|
|
|
obj-$(CONFIG_SPI_COLDFIRE_QSPI) += coldfire_qspi.o
|
2009-12-17 06:02:18 +08:00
|
|
|
obj-$(CONFIG_SPI_DAVINCI) += davinci_spi.o
|
2009-12-15 06:20:22 +08:00
|
|
|
obj-$(CONFIG_SPI_DESIGNWARE) += dw_spi.o
|
2010-12-24 13:59:11 +08:00
|
|
|
obj-$(CONFIG_SPI_DW_PCI) += dw_spi_midpci.o
|
|
|
|
dw_spi_midpci-objs := dw_spi_pci.o dw_spi_mid.o
|
2010-01-21 22:46:42 +08:00
|
|
|
obj-$(CONFIG_SPI_DW_MMIO) += dw_spi_mmio.o
|
2010-05-06 12:47:04 +08:00
|
|
|
obj-$(CONFIG_SPI_EP93XX) += ep93xx_spi.o
|
2009-01-07 06:41:41 +08:00
|
|
|
obj-$(CONFIG_SPI_GPIO) += spi_gpio.o
|
2009-10-02 06:44:28 +08:00
|
|
|
obj-$(CONFIG_SPI_IMX) += spi_imx.o
|
2007-07-17 19:04:05 +08:00
|
|
|
obj-$(CONFIG_SPI_LM70_LLP) += spi_lm70llp.o
|
2006-03-08 15:53:24 +08:00
|
|
|
obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o
|
2010-11-24 17:17:14 +08:00
|
|
|
obj-$(CONFIG_SPI_PXA2XX_PCI) += pxa2xx_spi_pci.o
|
2011-02-14 10:20:39 +08:00
|
|
|
obj-$(CONFIG_SPI_OC_TINY) += spi_oc_tiny.o
|
2007-02-12 16:52:37 +08:00
|
|
|
obj-$(CONFIG_SPI_OMAP_UWIRE) += omap_uwire.o
|
2007-07-17 19:04:13 +08:00
|
|
|
obj-$(CONFIG_SPI_OMAP24XX) += omap2_mcspi.o
|
2009-12-13 16:02:11 +08:00
|
|
|
obj-$(CONFIG_SPI_OMAP_100K) += omap_spi_100k.o
|
2008-08-06 04:01:09 +08:00
|
|
|
obj-$(CONFIG_SPI_ORION) += orion_spi.o
|
2009-06-09 15:11:42 +08:00
|
|
|
obj-$(CONFIG_SPI_PL022) += amba-pl022.o
|
2010-04-30 21:21:27 +08:00
|
|
|
obj-$(CONFIG_SPI_MPC512x_PSC) += mpc512x_psc_spi.o
|
2007-05-11 13:22:52 +08:00
|
|
|
obj-$(CONFIG_SPI_MPC52xx_PSC) += mpc52xx_psc_spi.o
|
2009-11-05 06:34:18 +08:00
|
|
|
obj-$(CONFIG_SPI_MPC52xx) += mpc52xx_spi.o
|
2010-10-12 18:18:31 +08:00
|
|
|
obj-$(CONFIG_SPI_FSL_LIB) += spi_fsl_lib.o
|
spi/fsl_spi: add eSPI controller support
Add eSPI controller support based on the library code spi_fsl_lib.c.
The eSPI controller is newer controller 85xx/Pxxx devices supported.
There're some differences comparing to the SPI controller:
1. Has different register map and different bit definition
So leave the code operated the register to the driver code, not
the common code.
2. Support 4 dedicated chip selects
The software can't controll the chip selects directly, The SPCOM[CS]
field is used to select which chip selects is used, and the
SPCOM[TRANLEN] field is set to tell the controller how long the CS
signal need to be asserted. So the driver doesn't need the chipselect
related function when transfering data, just set corresponding register
fields to controll the chipseclect.
3. Different Transmit/Receive FIFO access register behavior
For SPI controller, the Tx/Rx FIFO access register can hold only
one character regardless of the character length, but for eSPI
controller, the register can hold 4 or 2 characters according to
the character lengths. Access the Tx/Rx FIFO access register of the
eSPI controller will shift out/in 4/2 characters one time. For SPI
subsystem, the command and data are put into different transfers, so
we need to combine all the transfers to one transfer in order to pass
the transfer to eSPI controller.
4. The max transaction length limitation
The max transaction length one time is limitted by the SPCOM[TRANSLEN]
field which is 0xFFFF. When used mkfs.ext2 command to create ext2
filesystem on the flash, the read length will exceed the max value of
the SPCOM[TRANSLEN] field.
Signed-off-by: Mingkai Hu <Mingkai.hu@freescale.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
2010-10-12 18:18:32 +08:00
|
|
|
obj-$(CONFIG_SPI_FSL_ESPI) += spi_fsl_espi.o
|
2010-10-12 18:18:30 +08:00
|
|
|
obj-$(CONFIG_SPI_FSL_SPI) += spi_fsl_spi.o
|
2009-09-23 07:45:58 +08:00
|
|
|
obj-$(CONFIG_SPI_PPC4xx) += spi_ppc4xx.o
|
2006-05-21 06:00:17 +08:00
|
|
|
obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
|
2009-12-15 14:20:24 +08:00
|
|
|
obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx_hw.o
|
2009-11-30 15:39:42 +08:00
|
|
|
obj-$(CONFIG_SPI_S3C64XX) += spi_s3c64xx.o
|
2010-04-23 06:58:25 +08:00
|
|
|
obj-$(CONFIG_SPI_TEGRA) += spi_tegra.o
|
2011-01-19 03:21:36 +08:00
|
|
|
obj-$(CONFIG_SPI_TI_SSP) += ti-ssp-spi.o
|
2010-10-09 02:44:49 +08:00
|
|
|
obj-$(CONFIG_SPI_TOPCLIFF_PCH) += spi_topcliff_pch.o
|
2007-07-17 19:04:15 +08:00
|
|
|
obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
|
2007-07-17 19:04:11 +08:00
|
|
|
obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
|
2011-02-15 09:30:32 +08:00
|
|
|
obj-$(CONFIG_SPI_SH) += spi_sh.o
|
2008-02-06 17:38:15 +08:00
|
|
|
obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
|
2009-11-26 19:10:05 +08:00
|
|
|
obj-$(CONFIG_SPI_SH_MSIOF) += spi_sh_msiof.o
|
2009-09-23 07:46:15 +08:00
|
|
|
obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
|
2009-12-01 22:29:20 +08:00
|
|
|
obj-$(CONFIG_SPI_NUC900) += spi_nuc900.o
|
2009-12-15 14:20:24 +08:00
|
|
|
|
|
|
|
# special build for s3c24xx spi driver with fiq support
|
|
|
|
spi_s3c24xx_hw-y := spi_s3c24xx.o
|
|
|
|
spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) += spi_s3c24xx_fiq.o
|
|
|
|
|
[PATCH] spi: simple SPI framework
This is the core of a small SPI framework, implementing the model of a
queue of messages which complete asynchronously (with thin synchronous
wrappers on top).
- It's still less than 2KB of ".text" (ARM). If there's got to be a
mid-layer for something so simple, that's the right size budget. :)
- The guts use board-specific SPI device tables to build the driver
model tree. (Hardware probing is rarely an option.)
- This version of Kconfig includes no drivers. At this writing there
are two known master controller drivers (PXA/SSP, OMAP MicroWire)
and three protocol drivers (CS8415a, ADS7846, DataFlash) with LKML
mentions of other drivers in development.
- No userspace API. There are several implementations to compare.
Implement them like any other driver, and bind them with sysfs.
The changes from last version posted to LKML (on 11-Nov-2005) are minor,
and include:
- One bugfix (removes a FIXME), with the visible effect of making device
names be "spiB.C" where B is the bus number and C is the chipselect.
- The "caller provides DMA mappings" mechanism now has kerneldoc, for
DMA drivers that want to be fancy.
- Hey, the framework init can be subsys_init. Even though board init
logic fires earlier, at arch_init ... since the framework init is
for driver support, and the board init support uses static init.
- Various additional spec/doc clarifications based on discussions
with other folk. It adds a brief "thank you" at the end, for folk
who've helped nudge this framework into existence.
As I've said before, I think that "protocol tweaking" is the main support
that this driver framework will need to evolve.
From: Mark Underwood <basicmark@yahoo.com>
Update the SPI framework to remove a potential priority inversion case by
reverting to kmalloc if the pre-allocated DMA-safe buffer isn't available.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-01-09 05:34:19 +08:00
|
|
|
# ... add above this line ...
|
|
|
|
|
|
|
|
# SPI protocol drivers (device/link on bus)
|
2007-05-08 15:32:15 +08:00
|
|
|
obj-$(CONFIG_SPI_SPIDEV) += spidev.o
|
2007-07-17 19:04:10 +08:00
|
|
|
obj-$(CONFIG_SPI_TLE62X0) += tle62x0.o
|
[PATCH] spi: simple SPI framework
This is the core of a small SPI framework, implementing the model of a
queue of messages which complete asynchronously (with thin synchronous
wrappers on top).
- It's still less than 2KB of ".text" (ARM). If there's got to be a
mid-layer for something so simple, that's the right size budget. :)
- The guts use board-specific SPI device tables to build the driver
model tree. (Hardware probing is rarely an option.)
- This version of Kconfig includes no drivers. At this writing there
are two known master controller drivers (PXA/SSP, OMAP MicroWire)
and three protocol drivers (CS8415a, ADS7846, DataFlash) with LKML
mentions of other drivers in development.
- No userspace API. There are several implementations to compare.
Implement them like any other driver, and bind them with sysfs.
The changes from last version posted to LKML (on 11-Nov-2005) are minor,
and include:
- One bugfix (removes a FIXME), with the visible effect of making device
names be "spiB.C" where B is the bus number and C is the chipselect.
- The "caller provides DMA mappings" mechanism now has kerneldoc, for
DMA drivers that want to be fancy.
- Hey, the framework init can be subsys_init. Even though board init
logic fires earlier, at arch_init ... since the framework init is
for driver support, and the board init support uses static init.
- Various additional spec/doc clarifications based on discussions
with other folk. It adds a brief "thank you" at the end, for folk
who've helped nudge this framework into existence.
As I've said before, I think that "protocol tweaking" is the main support
that this driver framework will need to evolve.
From: Mark Underwood <basicmark@yahoo.com>
Update the SPI framework to remove a potential priority inversion case by
reverting to kmalloc if the pre-allocated DMA-safe buffer isn't available.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-01-09 05:34:19 +08:00
|
|
|
# ... add above this line ...
|
|
|
|
|
|
|
|
# SPI slave controller drivers (upstream link)
|
|
|
|
# ... add above this line ...
|
|
|
|
|
|
|
|
# SPI slave drivers (protocol for that link)
|
|
|
|
# ... add above this line ...
|