Commit 8ae12a0d85987dc138f8c944cb78a92bf466cea0

Authored by David Brownell
Committed by Greg Kroah-Hartman
1 parent 67daf5f11f

[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>

Showing 8 changed files with 1630 additions and 0 deletions Side-by-side Diff

Documentation/spi/spi-summary
  1 +Overview of Linux kernel SPI support
  2 +====================================
  3 +
  4 +22-Nov-2005
  5 +
  6 +What is SPI?
  7 +------------
  8 +The "Serial Peripheral Interface" (SPI) is a four-wire point-to-point
  9 +serial link used to connect microcontrollers to sensors and memory.
  10 +
  11 +The three signal wires hold a clock (SCLK, often on the order of 10 MHz),
  12 +and parallel data lines with "Master Out, Slave In" (MOSI) or "Master In,
  13 +Slave Out" (MISO) signals. (Other names are also used.) There are four
  14 +clocking modes through which data is exchanged; mode-0 and mode-3 are most
  15 +commonly used.
  16 +
  17 +SPI masters may use a "chip select" line to activate a given SPI slave
  18 +device, so those three signal wires may be connected to several chips
  19 +in parallel. All SPI slaves support chipselects. Some devices have
  20 +other signals, often including an interrupt to the master.
  21 +
  22 +Unlike serial busses like USB or SMBUS, even low level protocols for
  23 +SPI slave functions are usually not interoperable between vendors
  24 +(except for cases like SPI memory chips).
  25 +
  26 + - SPI may be used for request/response style device protocols, as with
  27 + touchscreen sensors and memory chips.
  28 +
  29 + - It may also be used to stream data in either direction (half duplex),
  30 + or both of them at the same time (full duplex).
  31 +
  32 + - Some devices may use eight bit words. Others may different word
  33 + lengths, such as streams of 12-bit or 20-bit digital samples.
  34 +
  35 +In the same way, SPI slaves will only rarely support any kind of automatic
  36 +discovery/enumeration protocol. The tree of slave devices accessible from
  37 +a given SPI master will normally be set up manually, with configuration
  38 +tables.
  39 +
  40 +SPI is only one of the names used by such four-wire protocols, and
  41 +most controllers have no problem handling "MicroWire" (think of it as
  42 +half-duplex SPI, for request/response protocols), SSP ("Synchronous
  43 +Serial Protocol"), PSP ("Programmable Serial Protocol"), and other
  44 +related protocols.
  45 +
  46 +Microcontrollers often support both master and slave sides of the SPI
  47 +protocol. This document (and Linux) currently only supports the master
  48 +side of SPI interactions.
  49 +
  50 +
  51 +Who uses it? On what kinds of systems?
  52 +---------------------------------------
  53 +Linux developers using SPI are probably writing device drivers for embedded
  54 +systems boards. SPI is used to control external chips, and it is also a
  55 +protocol supported by every MMC or SD memory card. (The older "DataFlash"
  56 +cards, predating MMC cards but using the same connectors and card shape,
  57 +support only SPI.) Some PC hardware uses SPI flash for BIOS code.
  58 +
  59 +SPI slave chips range from digital/analog converters used for analog
  60 +sensors and codecs, to memory, to peripherals like USB controllers
  61 +or Ethernet adapters; and more.
  62 +
  63 +Most systems using SPI will integrate a few devices on a mainboard.
  64 +Some provide SPI links on expansion connectors; in cases where no
  65 +dedicated SPI controller exists, GPIO pins can be used to create a
  66 +low speed "bitbanging" adapter. Very few systems will "hotplug" an SPI
  67 +controller; the reasons to use SPI focus on low cost and simple operation,
  68 +and if dynamic reconfiguration is important, USB will often be a more
  69 +appropriate low-pincount peripheral bus.
  70 +
  71 +Many microcontrollers that can run Linux integrate one or more I/O
  72 +interfaces with SPI modes. Given SPI support, they could use MMC or SD
  73 +cards without needing a special purpose MMC/SD/SDIO controller.
  74 +
  75 +
  76 +How do these driver programming interfaces work?
  77 +------------------------------------------------
  78 +The <linux/spi/spi.h> header file includes kerneldoc, as does the
  79 +main source code, and you should certainly read that. This is just
  80 +an overview, so you get the big picture before the details.
  81 +
  82 +There are two types of SPI driver, here called:
  83 +
  84 + Controller drivers ... these are often built in to System-On-Chip
  85 + processors, and often support both Master and Slave roles.
  86 + These drivers touch hardware registers and may use DMA.
  87 +
  88 + Protocol drivers ... these pass messages through the controller
  89 + driver to communicate with a Slave or Master device on the
  90 + other side of an SPI link.
  91 +
  92 +So for example one protocol driver might talk to the MTD layer to export
  93 +data to filesystems stored on SPI flash like DataFlash; and others might
  94 +control audio interfaces, present touchscreen sensors as input interfaces,
  95 +or monitor temperature and voltage levels during industrial processing.
  96 +And those might all be sharing the same controller driver.
  97 +
  98 +A "struct spi_device" encapsulates the master-side interface between
  99 +those two types of driver. At this writing, Linux has no slave side
  100 +programming interface.
  101 +
  102 +There is a minimal core of SPI programming interfaces, focussing on
  103 +using driver model to connect controller and protocol drivers using
  104 +device tables provided by board specific initialization code. SPI
  105 +shows up in sysfs in several locations:
  106 +
  107 + /sys/devices/.../CTLR/spiB.C ... spi_device for on bus "B",
  108 + chipselect C, accessed through CTLR.
  109 +
  110 + /sys/bus/spi/devices/spiB.C ... symlink to the physical
  111 + spiB-C device
  112 +
  113 + /sys/bus/spi/drivers/D ... driver for one or more spi*.* devices
  114 +
  115 + /sys/class/spi_master/spiB ... class device for the controller
  116 + managing bus "B". All the spiB.* devices share the same
  117 + physical SPI bus segment, with SCLK, MOSI, and MISO.
  118 +
  119 +The basic I/O primitive submits an asynchronous message to an I/O queue
  120 +maintained by the controller driver. A completion callback is issued
  121 +asynchronously when the data transfer(s) in that message completes.
  122 +There are also some simple synchronous wrappers for those calls.
  123 +
  124 +
  125 +How does board-specific init code declare SPI devices?
  126 +------------------------------------------------------
  127 +Linux needs several kinds of information to properly configure SPI devices.
  128 +That information is normally provided by board-specific code, even for
  129 +chips that do support some of automated discovery/enumeration.
  130 +
  131 +DECLARE CONTROLLERS
  132 +
  133 +The first kind of information is a list of what SPI controllers exist.
  134 +For System-on-Chip (SOC) based boards, these will usually be platform
  135 +devices, and the controller may need some platform_data in order to
  136 +operate properly. The "struct platform_device" will include resources
  137 +like the physical address of the controller's first register and its IRQ.
  138 +
  139 +Platforms will often abstract the "register SPI controller" operation,
  140 +maybe coupling it with code to initialize pin configurations, so that
  141 +the arch/.../mach-*/board-*.c files for several boards can all share the
  142 +same basic controller setup code. This is because most SOCs have several
  143 +SPI-capable controllers, and only the ones actually usable on a given
  144 +board should normally be set up and registered.
  145 +
  146 +So for example arch/.../mach-*/board-*.c files might have code like:
  147 +
  148 + #include <asm/arch/spi.h> /* for mysoc_spi_data */
  149 +
  150 + /* if your mach-* infrastructure doesn't support kernels that can
  151 + * run on multiple boards, pdata wouldn't benefit from "__init".
  152 + */
  153 + static struct mysoc_spi_data __init pdata = { ... };
  154 +
  155 + static __init board_init(void)
  156 + {
  157 + ...
  158 + /* this board only uses SPI controller #2 */
  159 + mysoc_register_spi(2, &pdata);
  160 + ...
  161 + }
  162 +
  163 +And SOC-specific utility code might look something like:
  164 +
  165 + #include <asm/arch/spi.h>
  166 +
  167 + static struct platform_device spi2 = { ... };
  168 +
  169 + void mysoc_register_spi(unsigned n, struct mysoc_spi_data *pdata)
  170 + {
  171 + struct mysoc_spi_data *pdata2;
  172 +
  173 + pdata2 = kmalloc(sizeof *pdata2, GFP_KERNEL);
  174 + *pdata2 = pdata;
  175 + ...
  176 + if (n == 2) {
  177 + spi2->dev.platform_data = pdata2;
  178 + register_platform_device(&spi2);
  179 +
  180 + /* also: set up pin modes so the spi2 signals are
  181 + * visible on the relevant pins ... bootloaders on
  182 + * production boards may already have done this, but
  183 + * developer boards will often need Linux to do it.
  184 + */
  185 + }
  186 + ...
  187 + }
  188 +
  189 +Notice how the platform_data for boards may be different, even if the
  190 +same SOC controller is used. For example, on one board SPI might use
  191 +an external clock, where another derives the SPI clock from current
  192 +settings of some master clock.
  193 +
  194 +
  195 +DECLARE SLAVE DEVICES
  196 +
  197 +The second kind of information is a list of what SPI slave devices exist
  198 +on the target board, often with some board-specific data needed for the
  199 +driver to work correctly.
  200 +
  201 +Normally your arch/.../mach-*/board-*.c files would provide a small table
  202 +listing the SPI devices on each board. (This would typically be only a
  203 +small handful.) That might look like:
  204 +
  205 + static struct ads7846_platform_data ads_info = {
  206 + .vref_delay_usecs = 100,
  207 + .x_plate_ohms = 580,
  208 + .y_plate_ohms = 410,
  209 + };
  210 +
  211 + static struct spi_board_info spi_board_info[] __initdata = {
  212 + {
  213 + .modalias = "ads7846",
  214 + .platform_data = &ads_info,
  215 + .mode = SPI_MODE_0,
  216 + .irq = GPIO_IRQ(31),
  217 + .max_speed_hz = 120000 /* max sample rate at 3V */ * 16,
  218 + .bus_num = 1,
  219 + .chip_select = 0,
  220 + },
  221 + };
  222 +
  223 +Again, notice how board-specific information is provided; each chip may need
  224 +several types. This example shows generic constraints like the fastest SPI
  225 +clock to allow (a function of board voltage in this case) or how an IRQ pin
  226 +is wired, plus chip-specific constraints like an important delay that's
  227 +changed by the capacitance at one pin.
  228 +
  229 +(There's also "controller_data", information that may be useful to the
  230 +controller driver. An example would be peripheral-specific DMA tuning
  231 +data or chipselect callbacks. This is stored in spi_device later.)
  232 +
  233 +The board_info should provide enough information to let the system work
  234 +without the chip's driver being loaded. The most troublesome aspect of
  235 +that is likely the SPI_CS_HIGH bit in the spi_device.mode field, since
  236 +sharing a bus with a device that interprets chipselect "backwards" is
  237 +not possible.
  238 +
  239 +Then your board initialization code would register that table with the SPI
  240 +infrastructure, so that it's available later when the SPI master controller
  241 +driver is registered:
  242 +
  243 + spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
  244 +
  245 +Like with other static board-specific setup, you won't unregister those.
  246 +
  247 +
  248 +NON-STATIC CONFIGURATIONS
  249 +
  250 +Developer boards often play by different rules than product boards, and one
  251 +example is the potential need to hotplug SPI devices and/or controllers.
  252 +
  253 +For those cases you might need to use use spi_busnum_to_master() to look
  254 +up the spi bus master, and will likely need spi_new_device() to provide the
  255 +board info based on the board that was hotplugged. Of course, you'd later
  256 +call at least spi_unregister_device() when that board is removed.
  257 +
  258 +
  259 +How do I write an "SPI Protocol Driver"?
  260 +----------------------------------------
  261 +All SPI drivers are currently kernel drivers. A userspace driver API
  262 +would just be another kernel driver, probably offering some lowlevel
  263 +access through aio_read(), aio_write(), and ioctl() calls and using the
  264 +standard userspace sysfs mechanisms to bind to a given SPI device.
  265 +
  266 +SPI protocol drivers are normal device drivers, with no more wrapper
  267 +than needed by platform devices:
  268 +
  269 + static struct device_driver CHIP_driver = {
  270 + .name = "CHIP",
  271 + .bus = &spi_bus_type,
  272 + .probe = CHIP_probe,
  273 + .remove = __exit_p(CHIP_remove),
  274 + .suspend = CHIP_suspend,
  275 + .resume = CHIP_resume,
  276 + };
  277 +
  278 +The SPI core will autmatically attempt to bind this driver to any SPI
  279 +device whose board_info gave a modalias of "CHIP". Your probe() code
  280 +might look like this unless you're creating a class_device:
  281 +
  282 + static int __init CHIP_probe(struct device *dev)
  283 + {
  284 + struct spi_device *spi = to_spi_device(dev);
  285 + struct CHIP *chip;
  286 + struct CHIP_platform_data *pdata = dev->platform_data;
  287 +
  288 + /* get memory for driver's per-chip state */
  289 + chip = kzalloc(sizeof *chip, GFP_KERNEL);
  290 + if (!chip)
  291 + return -ENOMEM;
  292 + dev_set_drvdata(dev, chip);
  293 +
  294 + ... etc
  295 + return 0;
  296 + }
  297 +
  298 +As soon as it enters probe(), the driver may issue I/O requests to
  299 +the SPI device using "struct spi_message". When remove() returns,
  300 +the driver guarantees that it won't submit any more such messages.
  301 +
  302 + - An spi_message is a sequence of of protocol operations, executed
  303 + as one atomic sequence. SPI driver controls include:
  304 +
  305 + + when bidirectional reads and writes start ... by how its
  306 + sequence of spi_transfer requests is arranged;
  307 +
  308 + + optionally defining short delays after transfers ... using
  309 + the spi_transfer.delay_usecs setting;
  310 +
  311 + + whether the chipselect becomes inactive after a transfer and
  312 + any delay ... by using the spi_transfer.cs_change flag;
  313 +
  314 + + hinting whether the next message is likely to go to this same
  315 + device ... using the spi_transfer.cs_change flag on the last
  316 + transfer in that atomic group, and potentially saving costs
  317 + for chip deselect and select operations.
  318 +
  319 + - Follow standard kernel rules, and provide DMA-safe buffers in
  320 + your messages. That way controller drivers using DMA aren't forced
  321 + to make extra copies unless the hardware requires it (e.g. working
  322 + around hardware errata that force the use of bounce buffering).
  323 +
  324 + If standard dma_map_single() handling of these buffers is inappropriate,
  325 + you can use spi_message.is_dma_mapped to tell the controller driver
  326 + that you've already provided the relevant DMA addresses.
  327 +
  328 + - The basic I/O primitive is spi_async(). Async requests may be
  329 + issued in any context (irq handler, task, etc) and completion
  330 + is reported using a callback provided with the message.
  331 +
  332 + - There are also synchronous wrappers like spi_sync(), and wrappers
  333 + like spi_read(), spi_write(), and spi_write_then_read(). These
  334 + may be issued only in contexts that may sleep, and they're all
  335 + clean (and small, and "optional") layers over spi_async().
  336 +
  337 + - The spi_write_then_read() call, and convenience wrappers around
  338 + it, should only be used with small amounts of data where the
  339 + cost of an extra copy may be ignored. It's designed to support
  340 + common RPC-style requests, such as writing an eight bit command
  341 + and reading a sixteen bit response -- spi_w8r16() being one its
  342 + wrappers, doing exactly that.
  343 +
  344 +Some drivers may need to modify spi_device characteristics like the
  345 +transfer mode, wordsize, or clock rate. This is done with spi_setup(),
  346 +which would normally be called from probe() before the first I/O is
  347 +done to the device.
  348 +
  349 +While "spi_device" would be the bottom boundary of the driver, the
  350 +upper boundaries might include sysfs (especially for sensor readings),
  351 +the input layer, ALSA, networking, MTD, the character device framework,
  352 +or other Linux subsystems.
  353 +
  354 +
  355 +How do I write an "SPI Master Controller Driver"?
  356 +-------------------------------------------------
  357 +An SPI controller will probably be registered on the platform_bus; write
  358 +a driver to bind to the device, whichever bus is involved.
  359 +
  360 +The main task of this type of driver is to provide an "spi_master".
  361 +Use spi_alloc_master() to allocate the master, and class_get_devdata()
  362 +to get the driver-private data allocated for that device.
  363 +
  364 + struct spi_master *master;
  365 + struct CONTROLLER *c;
  366 +
  367 + master = spi_alloc_master(dev, sizeof *c);
  368 + if (!master)
  369 + return -ENODEV;
  370 +
  371 + c = class_get_devdata(&master->cdev);
  372 +
  373 +The driver will initialize the fields of that spi_master, including the
  374 +bus number (maybe the same as the platform device ID) and three methods
  375 +used to interact with the SPI core and SPI protocol drivers. It will
  376 +also initialize its own internal state.
  377 +
  378 + master->setup(struct spi_device *spi)
  379 + This sets up the device clock rate, SPI mode, and word sizes.
  380 + Drivers may change the defaults provided by board_info, and then
  381 + call spi_setup(spi) to invoke this routine. It may sleep.
  382 +
  383 + master->transfer(struct spi_device *spi, struct spi_message *message)
  384 + This must not sleep. Its responsibility is arrange that the
  385 + transfer happens and its complete() callback is issued; the two
  386 + will normally happen later, after other transfers complete.
  387 +
  388 + master->cleanup(struct spi_device *spi)
  389 + Your controller driver may use spi_device.controller_state to hold
  390 + state it dynamically associates with that device. If you do that,
  391 + be sure to provide the cleanup() method to free that state.
  392 +
  393 +The bulk of the driver will be managing the I/O queue fed by transfer().
  394 +
  395 +That queue could be purely conceptual. For example, a driver used only
  396 +for low-frequency sensor acess might be fine using synchronous PIO.
  397 +
  398 +But the queue will probably be very real, using message->queue, PIO,
  399 +often DMA (especially if the root filesystem is in SPI flash), and
  400 +execution contexts like IRQ handlers, tasklets, or workqueues (such
  401 +as keventd). Your driver can be as fancy, or as simple, as you need.
  402 +
  403 +
  404 +THANKS TO
  405 +---------
  406 +Contributors to Linux-SPI discussions include (in alphabetical order,
  407 +by last name):
  408 +
  409 +David Brownell
  410 +Russell King
  411 +Dmitry Pervushin
  412 +Stephen Street
  413 +Mark Underwood
  414 +Andrew Victor
  415 +Vitaly Wool
... ... @@ -729,6 +729,8 @@
729 729  
730 730 source "drivers/i2c/Kconfig"
731 731  
  732 +source "drivers/spi/Kconfig"
  733 +
732 734 source "drivers/hwmon/Kconfig"
733 735  
734 736 #source "drivers/l3/Kconfig"
... ... @@ -44,6 +44,8 @@
44 44  
45 45 source "drivers/i2c/Kconfig"
46 46  
  47 +source "drivers/spi/Kconfig"
  48 +
47 49 source "drivers/w1/Kconfig"
48 50  
49 51 source "drivers/hwmon/Kconfig"
... ... @@ -41,6 +41,7 @@
41 41 obj-$(CONFIG_IEEE1394) += ieee1394/
42 42 obj-y += cdrom/
43 43 obj-$(CONFIG_MTD) += mtd/
  44 +obj-$(CONFIG_SPI) += spi/
44 45 obj-$(CONFIG_PCCARD) += pcmcia/
45 46 obj-$(CONFIG_DIO) += dio/
46 47 obj-$(CONFIG_SBUS) += sbus/
  1 +#
  2 +# SPI driver configuration
  3 +#
  4 +# NOTE: the reason this doesn't show SPI slave support is mostly that
  5 +# nobody's needed a slave side API yet. The master-role API is not
  6 +# fully appropriate there, so it'd need some thought to do well.
  7 +#
  8 +menu "SPI support"
  9 +
  10 +config SPI
  11 + bool "SPI support"
  12 + help
  13 + The "Serial Peripheral Interface" is a low level synchronous
  14 + protocol. Chips that support SPI can have data transfer rates
  15 + up to several tens of Mbit/sec. Chips are addressed with a
  16 + controller and a chipselect. Most SPI slaves don't support
  17 + dynamic device discovery; some are even write-only or read-only.
  18 +
  19 + SPI is widely used by microcontollers to talk with sensors,
  20 + eeprom and flash memory, codecs and various other controller
  21 + chips, analog to digital (and d-to-a) converters, and more.
  22 + MMC and SD cards can be accessed using SPI protocol; and for
  23 + DataFlash cards used in MMC sockets, SPI must always be used.
  24 +
  25 + SPI is one of a family of similar protocols using a four wire
  26 + interface (select, clock, data in, data out) including Microwire
  27 + (half duplex), SSP, SSI, and PSP. This driver framework should
  28 + work with most such devices and controllers.
  29 +
  30 +config SPI_DEBUG
  31 + boolean "Debug support for SPI drivers"
  32 + depends on SPI && DEBUG_KERNEL
  33 + help
  34 + Say "yes" to enable debug messaging (like dev_dbg and pr_debug),
  35 + sysfs, and debugfs support in SPI controller and protocol drivers.
  36 +
  37 +#
  38 +# MASTER side ... talking to discrete SPI slave chips including microcontrollers
  39 +#
  40 +
  41 +config SPI_MASTER
  42 +# boolean "SPI Master Support"
  43 + boolean
  44 + default SPI
  45 + help
  46 + If your system has an master-capable SPI controller (which
  47 + provides the clock and chipselect), you can enable that
  48 + controller and the protocol drivers for the SPI slave chips
  49 + that are connected.
  50 +
  51 +comment "SPI Master Controller Drivers"
  52 + depends on SPI_MASTER
  53 +
  54 +
  55 +#
  56 +# Add new SPI master controllers in alphabetical order above this line
  57 +#
  58 +
  59 +
  60 +#
  61 +# There are lots of SPI device types, with sensors and memory
  62 +# being probably the most widely used ones.
  63 +#
  64 +comment "SPI Protocol Masters"
  65 + depends on SPI_MASTER
  66 +
  67 +
  68 +#
  69 +# Add new SPI protocol masters in alphabetical order above this line
  70 +#
  71 +
  72 +
  73 +# (slave support would go here)
  74 +
  75 +endmenu # "SPI support"
drivers/spi/Makefile
  1 +#
  2 +# Makefile for kernel SPI drivers.
  3 +#
  4 +
  5 +ifeq ($(CONFIG_SPI_DEBUG),y)
  6 +EXTRA_CFLAGS += -DDEBUG
  7 +endif
  8 +
  9 +# small core, mostly translating board-specific
  10 +# config declarations into driver model code
  11 +obj-$(CONFIG_SPI_MASTER) += spi.o
  12 +
  13 +# SPI master controller drivers (bus)
  14 +# ... add above this line ...
  15 +
  16 +# SPI protocol drivers (device/link on bus)
  17 +# ... add above this line ...
  18 +
  19 +# SPI slave controller drivers (upstream link)
  20 +# ... add above this line ...
  21 +
  22 +# SPI slave drivers (protocol for that link)
  23 +# ... add above this line ...
  1 +/*
  2 + * spi.c - SPI init/core code
  3 + *
  4 + * Copyright (C) 2005 David Brownell
  5 + *
  6 + * This program is free software; you can redistribute it and/or modify
  7 + * it under the terms of the GNU General Public License as published by
  8 + * the Free Software Foundation; either version 2 of the License, or
  9 + * (at your option) any later version.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU General Public License
  17 + * along with this program; if not, write to the Free Software
  18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19 + */
  20 +
  21 +#include <linux/autoconf.h>
  22 +#include <linux/kernel.h>
  23 +#include <linux/device.h>
  24 +#include <linux/init.h>
  25 +#include <linux/cache.h>
  26 +#include <linux/spi/spi.h>
  27 +
  28 +
  29 +/* SPI bustype and spi_master class are registered during early boot,
  30 + * usually before board init code provides the SPI device tables, and
  31 + * are available later when driver init code needs them.
  32 + *
  33 + * Drivers for SPI devices started out like those for platform bus
  34 + * devices. But both have changed in 2.6.15; maybe this should get
  35 + * an "spi_driver" structure at some point (not currently needed)
  36 + */
  37 +static void spidev_release(struct device *dev)
  38 +{
  39 + const struct spi_device *spi = to_spi_device(dev);
  40 +
  41 + /* spi masters may cleanup for released devices */
  42 + if (spi->master->cleanup)
  43 + spi->master->cleanup(spi);
  44 +
  45 + class_device_put(&spi->master->cdev);
  46 + kfree(dev);
  47 +}
  48 +
  49 +static ssize_t
  50 +modalias_show(struct device *dev, struct device_attribute *a, char *buf)
  51 +{
  52 + const struct spi_device *spi = to_spi_device(dev);
  53 +
  54 + return snprintf(buf, BUS_ID_SIZE + 1, "%s\n", spi->modalias);
  55 +}
  56 +
  57 +static struct device_attribute spi_dev_attrs[] = {
  58 + __ATTR_RO(modalias),
  59 + __ATTR_NULL,
  60 +};
  61 +
  62 +/* modalias support makes "modprobe $MODALIAS" new-style hotplug work,
  63 + * and the sysfs version makes coldplug work too.
  64 + */
  65 +
  66 +static int spi_match_device(struct device *dev, struct device_driver *drv)
  67 +{
  68 + const struct spi_device *spi = to_spi_device(dev);
  69 +
  70 + return strncmp(spi->modalias, drv->name, BUS_ID_SIZE) == 0;
  71 +}
  72 +
  73 +static int spi_uevent(struct device *dev, char **envp, int num_envp,
  74 + char *buffer, int buffer_size)
  75 +{
  76 + const struct spi_device *spi = to_spi_device(dev);
  77 +
  78 + envp[0] = buffer;
  79 + snprintf(buffer, buffer_size, "MODALIAS=%s", spi->modalias);
  80 + envp[1] = NULL;
  81 + return 0;
  82 +}
  83 +
  84 +#ifdef CONFIG_PM
  85 +
  86 +/* Suspend/resume in "struct device_driver" don't really need that
  87 + * strange third parameter, so we just make it a constant and expect
  88 + * SPI drivers to ignore it just like most platform drivers do.
  89 + *
  90 + * NOTE: the suspend() method for an spi_master controller driver
  91 + * should verify that all its child devices are marked as suspended;
  92 + * suspend requests delivered through sysfs power/state files don't
  93 + * enforce such constraints.
  94 + */
  95 +static int spi_suspend(struct device *dev, pm_message_t message)
  96 +{
  97 + int value;
  98 +
  99 + if (!dev->driver || !dev->driver->suspend)
  100 + return 0;
  101 +
  102 + /* suspend will stop irqs and dma; no more i/o */
  103 + value = dev->driver->suspend(dev, message);
  104 + if (value == 0)
  105 + dev->power.power_state = message;
  106 + return value;
  107 +}
  108 +
  109 +static int spi_resume(struct device *dev)
  110 +{
  111 + int value;
  112 +
  113 + if (!dev->driver || !dev->driver->resume)
  114 + return 0;
  115 +
  116 + /* resume may restart the i/o queue */
  117 + value = dev->driver->resume(dev);
  118 + if (value == 0)
  119 + dev->power.power_state = PMSG_ON;
  120 + return value;
  121 +}
  122 +
  123 +#else
  124 +#define spi_suspend NULL
  125 +#define spi_resume NULL
  126 +#endif
  127 +
  128 +struct bus_type spi_bus_type = {
  129 + .name = "spi",
  130 + .dev_attrs = spi_dev_attrs,
  131 + .match = spi_match_device,
  132 + .uevent = spi_uevent,
  133 + .suspend = spi_suspend,
  134 + .resume = spi_resume,
  135 +};
  136 +EXPORT_SYMBOL_GPL(spi_bus_type);
  137 +
  138 +/*-------------------------------------------------------------------------*/
  139 +
  140 +/* SPI devices should normally not be created by SPI device drivers; that
  141 + * would make them board-specific. Similarly with SPI master drivers.
  142 + * Device registration normally goes into like arch/.../mach.../board-YYY.c
  143 + * with other readonly (flashable) information about mainboard devices.
  144 + */
  145 +
  146 +struct boardinfo {
  147 + struct list_head list;
  148 + unsigned n_board_info;
  149 + struct spi_board_info board_info[0];
  150 +};
  151 +
  152 +static LIST_HEAD(board_list);
  153 +static DECLARE_MUTEX(board_lock);
  154 +
  155 +
  156 +/* On typical mainboards, this is purely internal; and it's not needed
  157 + * after board init creates the hard-wired devices. Some development
  158 + * platforms may not be able to use spi_register_board_info though, and
  159 + * this is exported so that for example a USB or parport based adapter
  160 + * driver could add devices (which it would learn about out-of-band).
  161 + */
  162 +struct spi_device *__init_or_module
  163 +spi_new_device(struct spi_master *master, struct spi_board_info *chip)
  164 +{
  165 + struct spi_device *proxy;
  166 + struct device *dev = master->cdev.dev;
  167 + int status;
  168 +
  169 + /* NOTE: caller did any chip->bus_num checks necessary */
  170 +
  171 + if (!class_device_get(&master->cdev))
  172 + return NULL;
  173 +
  174 + proxy = kzalloc(sizeof *proxy, GFP_KERNEL);
  175 + if (!proxy) {
  176 + dev_err(dev, "can't alloc dev for cs%d\n",
  177 + chip->chip_select);
  178 + goto fail;
  179 + }
  180 + proxy->master = master;
  181 + proxy->chip_select = chip->chip_select;
  182 + proxy->max_speed_hz = chip->max_speed_hz;
  183 + proxy->irq = chip->irq;
  184 + proxy->modalias = chip->modalias;
  185 +
  186 + snprintf(proxy->dev.bus_id, sizeof proxy->dev.bus_id,
  187 + "%s.%u", master->cdev.class_id,
  188 + chip->chip_select);
  189 + proxy->dev.parent = dev;
  190 + proxy->dev.bus = &spi_bus_type;
  191 + proxy->dev.platform_data = (void *) chip->platform_data;
  192 + proxy->controller_data = chip->controller_data;
  193 + proxy->controller_state = NULL;
  194 + proxy->dev.release = spidev_release;
  195 +
  196 + /* drivers may modify this default i/o setup */
  197 + status = master->setup(proxy);
  198 + if (status < 0) {
  199 + dev_dbg(dev, "can't %s %s, status %d\n",
  200 + "setup", proxy->dev.bus_id, status);
  201 + goto fail;
  202 + }
  203 +
  204 + /* driver core catches callers that misbehave by defining
  205 + * devices that already exist.
  206 + */
  207 + status = device_register(&proxy->dev);
  208 + if (status < 0) {
  209 + dev_dbg(dev, "can't %s %s, status %d\n",
  210 + "add", proxy->dev.bus_id, status);
  211 +fail:
  212 + class_device_put(&master->cdev);
  213 + kfree(proxy);
  214 + return NULL;
  215 + }
  216 + dev_dbg(dev, "registered child %s\n", proxy->dev.bus_id);
  217 + return proxy;
  218 +}
  219 +EXPORT_SYMBOL_GPL(spi_new_device);
  220 +
  221 +/*
  222 + * Board-specific early init code calls this (probably during arch_initcall)
  223 + * with segments of the SPI device table. Any device nodes are created later,
  224 + * after the relevant parent SPI controller (bus_num) is defined. We keep
  225 + * this table of devices forever, so that reloading a controller driver will
  226 + * not make Linux forget about these hard-wired devices.
  227 + *
  228 + * Other code can also call this, e.g. a particular add-on board might provide
  229 + * SPI devices through its expansion connector, so code initializing that board
  230 + * would naturally declare its SPI devices.
  231 + *
  232 + * The board info passed can safely be __initdata ... but be careful of
  233 + * any embedded pointers (platform_data, etc), they're copied as-is.
  234 + */
  235 +int __init
  236 +spi_register_board_info(struct spi_board_info const *info, unsigned n)
  237 +{
  238 + struct boardinfo *bi;
  239 +
  240 + bi = kmalloc (sizeof (*bi) + n * sizeof (*info), GFP_KERNEL);
  241 + if (!bi)
  242 + return -ENOMEM;
  243 + bi->n_board_info = n;
  244 + memcpy(bi->board_info, info, n * sizeof (*info));
  245 +
  246 + down(&board_lock);
  247 + list_add_tail(&bi->list, &board_list);
  248 + up(&board_lock);
  249 + return 0;
  250 +}
  251 +EXPORT_SYMBOL_GPL(spi_register_board_info);
  252 +
  253 +/* FIXME someone should add support for a __setup("spi", ...) that
  254 + * creates board info from kernel command lines
  255 + */
  256 +
  257 +static void __init_or_module
  258 +scan_boardinfo(struct spi_master *master)
  259 +{
  260 + struct boardinfo *bi;
  261 + struct device *dev = master->cdev.dev;
  262 +
  263 + down(&board_lock);
  264 + list_for_each_entry(bi, &board_list, list) {
  265 + struct spi_board_info *chip = bi->board_info;
  266 + unsigned n;
  267 +
  268 + for (n = bi->n_board_info; n > 0; n--, chip++) {
  269 + if (chip->bus_num != master->bus_num)
  270 + continue;
  271 + /* some controllers only have one chip, so they
  272 + * might not use chipselects. otherwise, the
  273 + * chipselects are numbered 0..max.
  274 + */
  275 + if (chip->chip_select >= master->num_chipselect
  276 + && master->num_chipselect) {
  277 + dev_dbg(dev, "cs%d > max %d\n",
  278 + chip->chip_select,
  279 + master->num_chipselect);
  280 + continue;
  281 + }
  282 + (void) spi_new_device(master, chip);
  283 + }
  284 + }
  285 + up(&board_lock);
  286 +}
  287 +
  288 +/*-------------------------------------------------------------------------*/
  289 +
  290 +static void spi_master_release(struct class_device *cdev)
  291 +{
  292 + struct spi_master *master;
  293 +
  294 + master = container_of(cdev, struct spi_master, cdev);
  295 + put_device(master->cdev.dev);
  296 + master->cdev.dev = NULL;
  297 + kfree(master);
  298 +}
  299 +
  300 +static struct class spi_master_class = {
  301 + .name = "spi_master",
  302 + .owner = THIS_MODULE,
  303 + .release = spi_master_release,
  304 +};
  305 +
  306 +
  307 +/**
  308 + * spi_alloc_master - allocate SPI master controller
  309 + * @dev: the controller, possibly using the platform_bus
  310 + * @size: how much driver-private data to preallocate; a pointer to this
  311 + * memory in the class_data field of the returned class_device
  312 + *
  313 + * This call is used only by SPI master controller drivers, which are the
  314 + * only ones directly touching chip registers. It's how they allocate
  315 + * an spi_master structure, prior to calling spi_add_master().
  316 + *
  317 + * This must be called from context that can sleep. It returns the SPI
  318 + * master structure on success, else NULL.
  319 + *
  320 + * The caller is responsible for assigning the bus number and initializing
  321 + * the master's methods before calling spi_add_master(), or else (on error)
  322 + * calling class_device_put() to prevent a memory leak.
  323 + */
  324 +struct spi_master * __init_or_module
  325 +spi_alloc_master(struct device *dev, unsigned size)
  326 +{
  327 + struct spi_master *master;
  328 +
  329 + master = kzalloc(size + sizeof *master, SLAB_KERNEL);
  330 + if (!master)
  331 + return NULL;
  332 +
  333 + master->cdev.class = &spi_master_class;
  334 + master->cdev.dev = get_device(dev);
  335 + class_set_devdata(&master->cdev, &master[1]);
  336 +
  337 + return master;
  338 +}
  339 +EXPORT_SYMBOL_GPL(spi_alloc_master);
  340 +
  341 +/**
  342 + * spi_register_master - register SPI master controller
  343 + * @master: initialized master, originally from spi_alloc_master()
  344 + *
  345 + * SPI master controllers connect to their drivers using some non-SPI bus,
  346 + * such as the platform bus. The final stage of probe() in that code
  347 + * includes calling spi_register_master() to hook up to this SPI bus glue.
  348 + *
  349 + * SPI controllers use board specific (often SOC specific) bus numbers,
  350 + * and board-specific addressing for SPI devices combines those numbers
  351 + * with chip select numbers. Since SPI does not directly support dynamic
  352 + * device identification, boards need configuration tables telling which
  353 + * chip is at which address.
  354 + *
  355 + * This must be called from context that can sleep. It returns zero on
  356 + * success, else a negative error code (dropping the master's refcount).
  357 + */
  358 +int __init_or_module
  359 +spi_register_master(struct spi_master *master)
  360 +{
  361 + static atomic_t dyn_bus_id = ATOMIC_INIT(0);
  362 + struct device *dev = master->cdev.dev;
  363 + int status = -ENODEV;
  364 + int dynamic = 0;
  365 +
  366 + /* convention: dynamically assigned bus IDs count down from the max */
  367 + if (master->bus_num == 0) {
  368 + master->bus_num = atomic_dec_return(&dyn_bus_id);
  369 + dynamic = 0;
  370 + }
  371 +
  372 + /* register the device, then userspace will see it.
  373 + * registration fails if the bus ID is in use.
  374 + */
  375 + snprintf(master->cdev.class_id, sizeof master->cdev.class_id,
  376 + "spi%u", master->bus_num);
  377 + status = class_device_register(&master->cdev);
  378 + if (status < 0) {
  379 + class_device_put(&master->cdev);
  380 + goto done;
  381 + }
  382 + dev_dbg(dev, "registered master %s%s\n", master->cdev.class_id,
  383 + dynamic ? " (dynamic)" : "");
  384 +
  385 + /* populate children from any spi device tables */
  386 + scan_boardinfo(master);
  387 + status = 0;
  388 +done:
  389 + return status;
  390 +}
  391 +EXPORT_SYMBOL_GPL(spi_register_master);
  392 +
  393 +
  394 +static int __unregister(struct device *dev, void *unused)
  395 +{
  396 + /* note: before about 2.6.14-rc1 this would corrupt memory: */
  397 + device_unregister(dev);
  398 + return 0;
  399 +}
  400 +
  401 +/**
  402 + * spi_unregister_master - unregister SPI master controller
  403 + * @master: the master being unregistered
  404 + *
  405 + * This call is used only by SPI master controller drivers, which are the
  406 + * only ones directly touching chip registers.
  407 + *
  408 + * This must be called from context that can sleep.
  409 + */
  410 +void spi_unregister_master(struct spi_master *master)
  411 +{
  412 + class_device_unregister(&master->cdev);
  413 + (void) device_for_each_child(master->cdev.dev, NULL, __unregister);
  414 +}
  415 +EXPORT_SYMBOL_GPL(spi_unregister_master);
  416 +
  417 +/**
  418 + * spi_busnum_to_master - look up master associated with bus_num
  419 + * @bus_num: the master's bus number
  420 + *
  421 + * This call may be used with devices that are registered after
  422 + * arch init time. It returns a refcounted pointer to the relevant
  423 + * spi_master (which the caller must release), or NULL if there is
  424 + * no such master registered.
  425 + */
  426 +struct spi_master *spi_busnum_to_master(u16 bus_num)
  427 +{
  428 + if (bus_num) {
  429 + char name[8];
  430 + struct kobject *bus;
  431 +
  432 + snprintf(name, sizeof name, "spi%u", bus_num);
  433 + bus = kset_find_obj(&spi_master_class.subsys.kset, name);
  434 + if (bus)
  435 + return container_of(bus, struct spi_master, cdev.kobj);
  436 + }
  437 + return NULL;
  438 +}
  439 +EXPORT_SYMBOL_GPL(spi_busnum_to_master);
  440 +
  441 +
  442 +/*-------------------------------------------------------------------------*/
  443 +
  444 +/**
  445 + * spi_sync - blocking/synchronous SPI data transfers
  446 + * @spi: device with which data will be exchanged
  447 + * @message: describes the data transfers
  448 + *
  449 + * This call may only be used from a context that may sleep. The sleep
  450 + * is non-interruptible, and has no timeout. Low-overhead controller
  451 + * drivers may DMA directly into and out of the message buffers.
  452 + *
  453 + * Note that the SPI device's chip select is active during the message,
  454 + * and then is normally disabled between messages. Drivers for some
  455 + * frequently-used devices may want to minimize costs of selecting a chip,
  456 + * by leaving it selected in anticipation that the next message will go
  457 + * to the same chip. (That may increase power usage.)
  458 + *
  459 + * The return value is a negative error code if the message could not be
  460 + * submitted, else zero. When the value is zero, then message->status is
  461 + * also defined: it's the completion code for the transfer, either zero
  462 + * or a negative error code from the controller driver.
  463 + */
  464 +int spi_sync(struct spi_device *spi, struct spi_message *message)
  465 +{
  466 + DECLARE_COMPLETION(done);
  467 + int status;
  468 +
  469 + message->complete = (void (*)(void *)) complete;
  470 + message->context = &done;
  471 + status = spi_async(spi, message);
  472 + if (status == 0)
  473 + wait_for_completion(&done);
  474 + message->context = NULL;
  475 + return status;
  476 +}
  477 +EXPORT_SYMBOL_GPL(spi_sync);
  478 +
  479 +#define SPI_BUFSIZ (SMP_CACHE_BYTES)
  480 +
  481 +static u8 *buf;
  482 +
  483 +/**
  484 + * spi_write_then_read - SPI synchronous write followed by read
  485 + * @spi: device with which data will be exchanged
  486 + * @txbuf: data to be written (need not be dma-safe)
  487 + * @n_tx: size of txbuf, in bytes
  488 + * @rxbuf: buffer into which data will be read
  489 + * @n_rx: size of rxbuf, in bytes (need not be dma-safe)
  490 + *
  491 + * This performs a half duplex MicroWire style transaction with the
  492 + * device, sending txbuf and then reading rxbuf. The return value
  493 + * is zero for success, else a negative errno status code.
  494 + *
  495 + * Parameters to this routine are always copied using a small buffer,
  496 + * large transfers should use use spi_{async,sync}() calls with
  497 + * dma-safe buffers.
  498 + */
  499 +int spi_write_then_read(struct spi_device *spi,
  500 + const u8 *txbuf, unsigned n_tx,
  501 + u8 *rxbuf, unsigned n_rx)
  502 +{
  503 + static DECLARE_MUTEX(lock);
  504 +
  505 + int status;
  506 + struct spi_message message;
  507 + struct spi_transfer x[2];
  508 + u8 *local_buf;
  509 +
  510 + /* Use preallocated DMA-safe buffer. We can't avoid copying here,
  511 + * (as a pure convenience thing), but we can keep heap costs
  512 + * out of the hot path ...
  513 + */
  514 + if ((n_tx + n_rx) > SPI_BUFSIZ)
  515 + return -EINVAL;
  516 +
  517 + /* ... unless someone else is using the pre-allocated buffer */
  518 + if (down_trylock(&lock)) {
  519 + local_buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);
  520 + if (!local_buf)
  521 + return -ENOMEM;
  522 + } else
  523 + local_buf = buf;
  524 +
  525 + memset(x, 0, sizeof x);
  526 +
  527 + memcpy(local_buf, txbuf, n_tx);
  528 + x[0].tx_buf = local_buf;
  529 + x[0].len = n_tx;
  530 +
  531 + x[1].rx_buf = local_buf + n_tx;
  532 + x[1].len = n_rx;
  533 +
  534 + /* do the i/o */
  535 + message.transfers = x;
  536 + message.n_transfer = ARRAY_SIZE(x);
  537 + status = spi_sync(spi, &message);
  538 + if (status == 0) {
  539 + memcpy(rxbuf, x[1].rx_buf, n_rx);
  540 + status = message.status;
  541 + }
  542 +
  543 + if (x[0].tx_buf == buf)
  544 + up(&lock);
  545 + else
  546 + kfree(local_buf);
  547 +
  548 + return status;
  549 +}
  550 +EXPORT_SYMBOL_GPL(spi_write_then_read);
  551 +
  552 +/*-------------------------------------------------------------------------*/
  553 +
  554 +static int __init spi_init(void)
  555 +{
  556 + buf = kmalloc(SPI_BUFSIZ, SLAB_KERNEL);
  557 + if (!buf)
  558 + return -ENOMEM;
  559 +
  560 + bus_register(&spi_bus_type);
  561 + class_register(&spi_master_class);
  562 + return 0;
  563 +}
  564 +/* board_info is normally registered in arch_initcall(),
  565 + * but even essential drivers wait till later
  566 + */
  567 +subsys_initcall(spi_init);
include/linux/spi/spi.h
  1 +/*
  2 + * Copyright (C) 2005 David Brownell
  3 + *
  4 + * This program is free software; you can redistribute it and/or modify
  5 + * it under the terms of the GNU General Public License as published by
  6 + * the Free Software Foundation; either version 2 of the License, or
  7 + * (at your option) any later version.
  8 + *
  9 + * This program is distributed in the hope that it will be useful,
  10 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12 + * GNU General Public License for more details.
  13 + *
  14 + * You should have received a copy of the GNU General Public License
  15 + * along with this program; if not, write to the Free Software
  16 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17 + */
  18 +
  19 +#ifndef __LINUX_SPI_H
  20 +#define __LINUX_SPI_H
  21 +
  22 +/*
  23 + * INTERFACES between SPI master drivers and infrastructure
  24 + * (There's no SPI slave support for Linux yet...)
  25 + *
  26 + * A "struct device_driver" for an spi_device uses "spi_bus_type" and
  27 + * needs no special API wrappers (much like platform_bus). These drivers
  28 + * are bound to devices based on their names (much like platform_bus),
  29 + * and are available in dev->driver.
  30 + */
  31 +extern struct bus_type spi_bus_type;
  32 +
  33 +/**
  34 + * struct spi_device - Master side proxy for an SPI slave device
  35 + * @dev: Driver model representation of the device.
  36 + * @master: SPI controller used with the device.
  37 + * @max_speed_hz: Maximum clock rate to be used with this chip
  38 + * (on this board); may be changed by the device's driver.
  39 + * @chip-select: Chipselect, distinguishing chips handled by "master".
  40 + * @mode: The spi mode defines how data is clocked out and in.
  41 + * This may be changed by the device's driver.
  42 + * @bits_per_word: Data transfers involve one or more words; word sizes
  43 + * like eight or 12 bits are common. In-memory wordsizes are
  44 + * powers of two bytes (e.g. 20 bit samples use 32 bits).
  45 + * This may be changed by the device's driver.
  46 + * @irq: Negative, or the number passed to request_irq() to receive
  47 + * interrupts from this device.
  48 + * @controller_state: Controller's runtime state
  49 + * @controller_data: Static board-specific definitions for controller, such
  50 + * as FIFO initialization parameters; from board_info.controller_data
  51 + *
  52 + * An spi_device is used to interchange data between an SPI slave
  53 + * (usually a discrete chip) and CPU memory.
  54 + *
  55 + * In "dev", the platform_data is used to hold information about this
  56 + * device that's meaningful to the device's protocol driver, but not
  57 + * to its controller. One example might be an identifier for a chip
  58 + * variant with slightly different functionality.
  59 + */
  60 +struct spi_device {
  61 + struct device dev;
  62 + struct spi_master *master;
  63 + u32 max_speed_hz;
  64 + u8 chip_select;
  65 + u8 mode;
  66 +#define SPI_CPHA 0x01 /* clock phase */
  67 +#define SPI_CPOL 0x02 /* clock polarity */
  68 +#define SPI_MODE_0 (0|0)
  69 +#define SPI_MODE_1 (0|SPI_CPHA)
  70 +#define SPI_MODE_2 (SPI_CPOL|0)
  71 +#define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
  72 +#define SPI_CS_HIGH 0x04 /* chipselect active high? */
  73 + u8 bits_per_word;
  74 + int irq;
  75 + void *controller_state;
  76 + const void *controller_data;
  77 + const char *modalias;
  78 +
  79 + // likely need more hooks for more protocol options affecting how
  80 + // the controller talks to its chips, like:
  81 + // - bit order (default is wordwise msb-first)
  82 + // - memory packing (12 bit samples into low bits, others zeroed)
  83 + // - priority
  84 + // - chipselect delays
  85 + // - ...
  86 +};
  87 +
  88 +static inline struct spi_device *to_spi_device(struct device *dev)
  89 +{
  90 + return container_of(dev, struct spi_device, dev);
  91 +}
  92 +
  93 +/* most drivers won't need to care about device refcounting */
  94 +static inline struct spi_device *spi_dev_get(struct spi_device *spi)
  95 +{
  96 + return (spi && get_device(&spi->dev)) ? spi : NULL;
  97 +}
  98 +
  99 +static inline void spi_dev_put(struct spi_device *spi)
  100 +{
  101 + if (spi)
  102 + put_device(&spi->dev);
  103 +}
  104 +
  105 +/* ctldata is for the bus_master driver's runtime state */
  106 +static inline void *spi_get_ctldata(struct spi_device *spi)
  107 +{
  108 + return spi->controller_state;
  109 +}
  110 +
  111 +static inline void spi_set_ctldata(struct spi_device *spi, void *state)
  112 +{
  113 + spi->controller_state = state;
  114 +}
  115 +
  116 +
  117 +struct spi_message;
  118 +
  119 +
  120 +/**
  121 + * struct spi_master - interface to SPI master controller
  122 + * @cdev: class interface to this driver
  123 + * @bus_num: board-specific (and often SOC-specific) identifier for a
  124 + * given SPI controller.
  125 + * @num_chipselects: chipselects are used to distinguish individual
  126 + * SPI slaves, and are numbered from zero to num_chipselects.
  127 + * each slave has a chipselect signal, but it's common that not
  128 + * every chipselect is connected to a slave.
  129 + * @setup: updates the device mode and clocking records used by a
  130 + * device's SPI controller; protocol code may call this.
  131 + * @transfer: adds a message to the controller's transfer queue.
  132 + * @cleanup: frees controller-specific state
  133 + *
  134 + * Each SPI master controller can communicate with one or more spi_device
  135 + * children. These make a small bus, sharing MOSI, MISO and SCK signals
  136 + * but not chip select signals. Each device may be configured to use a
  137 + * different clock rate, since those shared signals are ignored unless
  138 + * the chip is selected.
  139 + *
  140 + * The driver for an SPI controller manages access to those devices through
  141 + * a queue of spi_message transactions, copyin data between CPU memory and
  142 + * an SPI slave device). For each such message it queues, it calls the
  143 + * message's completion function when the transaction completes.
  144 + */
  145 +struct spi_master {
  146 + struct class_device cdev;
  147 +
  148 + /* other than zero (== assign one dynamically), bus_num is fully
  149 + * board-specific. usually that simplifies to being SOC-specific.
  150 + * example: one SOC has three SPI controllers, numbered 1..3,
  151 + * and one board's schematics might show it using SPI-2. software
  152 + * would normally use bus_num=2 for that controller.
  153 + */
  154 + u16 bus_num;
  155 +
  156 + /* chipselects will be integral to many controllers; some others
  157 + * might use board-specific GPIOs.
  158 + */
  159 + u16 num_chipselect;
  160 +
  161 + /* setup mode and clock, etc (spi driver may call many times) */
  162 + int (*setup)(struct spi_device *spi);
  163 +
  164 + /* bidirectional bulk transfers
  165 + *
  166 + * + The transfer() method may not sleep; its main role is
  167 + * just to add the message to the queue.
  168 + * + For now there's no remove-from-queue operation, or
  169 + * any other request management
  170 + * + To a given spi_device, message queueing is pure fifo
  171 + *
  172 + * + The master's main job is to process its message queue,
  173 + * selecting a chip then transferring data
  174 + * + If there are multiple spi_device children, the i/o queue
  175 + * arbitration algorithm is unspecified (round robin, fifo,
  176 + * priority, reservations, preemption, etc)
  177 + *
  178 + * + Chipselect stays active during the entire message
  179 + * (unless modified by spi_transfer.cs_change != 0).
  180 + * + The message transfers use clock and SPI mode parameters
  181 + * previously established by setup() for this device
  182 + */
  183 + int (*transfer)(struct spi_device *spi,
  184 + struct spi_message *mesg);
  185 +
  186 + /* called on release() to free memory provided by spi_master */
  187 + void (*cleanup)(const struct spi_device *spi);
  188 +};
  189 +
  190 +/* the spi driver core manages memory for the spi_master classdev */
  191 +extern struct spi_master *
  192 +spi_alloc_master(struct device *host, unsigned size);
  193 +
  194 +extern int spi_register_master(struct spi_master *master);
  195 +extern void spi_unregister_master(struct spi_master *master);
  196 +
  197 +extern struct spi_master *spi_busnum_to_master(u16 busnum);
  198 +
  199 +/*---------------------------------------------------------------------------*/
  200 +
  201 +/*
  202 + * I/O INTERFACE between SPI controller and protocol drivers
  203 + *
  204 + * Protocol drivers use a queue of spi_messages, each transferring data
  205 + * between the controller and memory buffers.
  206 + *
  207 + * The spi_messages themselves consist of a series of read+write transfer
  208 + * segments. Those segments always read the same number of bits as they
  209 + * write; but one or the other is easily ignored by passing a null buffer
  210 + * pointer. (This is unlike most types of I/O API, because SPI hardware
  211 + * is full duplex.)
  212 + *
  213 + * NOTE: Allocation of spi_transfer and spi_message memory is entirely
  214 + * up to the protocol driver, which guarantees the integrity of both (as
  215 + * well as the data buffers) for as long as the message is queued.
  216 + */
  217 +
  218 +/**
  219 + * struct spi_transfer - a read/write buffer pair
  220 + * @tx_buf: data to be written (dma-safe address), or NULL
  221 + * @rx_buf: data to be read (dma-safe address), or NULL
  222 + * @tx_dma: DMA address of buffer, if spi_message.is_dma_mapped
  223 + * @rx_dma: DMA address of buffer, if spi_message.is_dma_mapped
  224 + * @len: size of rx and tx buffers (in bytes)
  225 + * @cs_change: affects chipselect after this transfer completes
  226 + * @delay_usecs: microseconds to delay after this transfer before
  227 + * (optionally) changing the chipselect status, then starting
  228 + * the next transfer or completing this spi_message.
  229 + *
  230 + * SPI transfers always write the same number of bytes as they read.
  231 + * Protocol drivers should always provide rx_buf and/or tx_buf.
  232 + * In some cases, they may also want to provide DMA addresses for
  233 + * the data being transferred; that may reduce overhead, when the
  234 + * underlying driver uses dma.
  235 + *
  236 + * All SPI transfers start with the relevant chipselect active. Drivers
  237 + * can change behavior of the chipselect after the transfer finishes
  238 + * (including any mandatory delay). The normal behavior is to leave it
  239 + * selected, except for the last transfer in a message. Setting cs_change
  240 + * allows two additional behavior options:
  241 + *
  242 + * (i) If the transfer isn't the last one in the message, this flag is
  243 + * used to make the chipselect briefly go inactive in the middle of the
  244 + * message. Toggling chipselect in this way may be needed to terminate
  245 + * a chip command, letting a single spi_message perform all of group of
  246 + * chip transactions together.
  247 + *
  248 + * (ii) When the transfer is the last one in the message, the chip may
  249 + * stay selected until the next transfer. This is purely a performance
  250 + * hint; the controller driver may need to select a different device
  251 + * for the next message.
  252 + */
  253 +struct spi_transfer {
  254 + /* it's ok if tx_buf == rx_buf (right?)
  255 + * for MicroWire, one buffer must be null
  256 + * buffers must work with dma_*map_single() calls
  257 + */
  258 + const void *tx_buf;
  259 + void *rx_buf;
  260 + unsigned len;
  261 +
  262 + dma_addr_t tx_dma;
  263 + dma_addr_t rx_dma;
  264 +
  265 + unsigned cs_change:1;
  266 + u16 delay_usecs;
  267 +};
  268 +
  269 +/**
  270 + * struct spi_message - one multi-segment SPI transaction
  271 + * @transfers: the segements of the transaction
  272 + * @n_transfer: how many segments
  273 + * @spi: SPI device to which the transaction is queued
  274 + * @is_dma_mapped: if true, the caller provided both dma and cpu virtual
  275 + * addresses for each transfer buffer
  276 + * @complete: called to report transaction completions
  277 + * @context: the argument to complete() when it's called
  278 + * @actual_length: how many bytes were transferd
  279 + * @status: zero for success, else negative errno
  280 + * @queue: for use by whichever driver currently owns the message
  281 + * @state: for use by whichever driver currently owns the message
  282 + */
  283 +struct spi_message {
  284 + struct spi_transfer *transfers;
  285 + unsigned n_transfer;
  286 +
  287 + struct spi_device *spi;
  288 +
  289 + unsigned is_dma_mapped:1;
  290 +
  291 + /* REVISIT: we might want a flag affecting the behavior of the
  292 + * last transfer ... allowing things like "read 16 bit length L"
  293 + * immediately followed by "read L bytes". Basically imposing
  294 + * a specific message scheduling algorithm.
  295 + *
  296 + * Some controller drivers (message-at-a-time queue processing)
  297 + * could provide that as their default scheduling algorithm. But
  298 + * others (with multi-message pipelines) would need a flag to
  299 + * tell them about such special cases.
  300 + */
  301 +
  302 + /* completion is reported through a callback */
  303 + void FASTCALL((*complete)(void *context));
  304 + void *context;
  305 + unsigned actual_length;
  306 + int status;
  307 +
  308 + /* for optional use by whatever driver currently owns the
  309 + * spi_message ... between calls to spi_async and then later
  310 + * complete(), that's the spi_master controller driver.
  311 + */
  312 + struct list_head queue;
  313 + void *state;
  314 +};
  315 +
  316 +/**
  317 + * spi_setup -- setup SPI mode and clock rate
  318 + * @spi: the device whose settings are being modified
  319 + *
  320 + * SPI protocol drivers may need to update the transfer mode if the
  321 + * device doesn't work with the mode 0 default. They may likewise need
  322 + * to update clock rates or word sizes from initial values. This function
  323 + * changes those settings, and must be called from a context that can sleep.
  324 + */
  325 +static inline int
  326 +spi_setup(struct spi_device *spi)
  327 +{
  328 + return spi->master->setup(spi);
  329 +}
  330 +
  331 +
  332 +/**
  333 + * spi_async -- asynchronous SPI transfer
  334 + * @spi: device with which data will be exchanged
  335 + * @message: describes the data transfers, including completion callback
  336 + *
  337 + * This call may be used in_irq and other contexts which can't sleep,
  338 + * as well as from task contexts which can sleep.
  339 + *
  340 + * The completion callback is invoked in a context which can't sleep.
  341 + * Before that invocation, the value of message->status is undefined.
  342 + * When the callback is issued, message->status holds either zero (to
  343 + * indicate complete success) or a negative error code.
  344 + *
  345 + * Note that although all messages to a spi_device are handled in
  346 + * FIFO order, messages may go to different devices in other orders.
  347 + * Some device might be higher priority, or have various "hard" access
  348 + * time requirements, for example.
  349 + */
  350 +static inline int
  351 +spi_async(struct spi_device *spi, struct spi_message *message)
  352 +{
  353 + message->spi = spi;
  354 + return spi->master->transfer(spi, message);
  355 +}
  356 +
  357 +/*---------------------------------------------------------------------------*/
  358 +
  359 +/* All these synchronous SPI transfer routines are utilities layered
  360 + * over the core async transfer primitive. Here, "synchronous" means
  361 + * they will sleep uninterruptibly until the async transfer completes.
  362 + */
  363 +
  364 +extern int spi_sync(struct spi_device *spi, struct spi_message *message);
  365 +
  366 +/**
  367 + * spi_write - SPI synchronous write
  368 + * @spi: device to which data will be written
  369 + * @buf: data buffer
  370 + * @len: data buffer size
  371 + *
  372 + * This writes the buffer and returns zero or a negative error code.
  373 + * Callable only from contexts that can sleep.
  374 + */
  375 +static inline int
  376 +spi_write(struct spi_device *spi, const u8 *buf, size_t len)
  377 +{
  378 + struct spi_transfer t = {
  379 + .tx_buf = buf,
  380 + .rx_buf = NULL,
  381 + .len = len,
  382 + .cs_change = 0,
  383 + };
  384 + struct spi_message m = {
  385 + .transfers = &t,
  386 + .n_transfer = 1,
  387 + };
  388 +
  389 + return spi_sync(spi, &m);
  390 +}
  391 +
  392 +/**
  393 + * spi_read - SPI synchronous read
  394 + * @spi: device from which data will be read
  395 + * @buf: data buffer
  396 + * @len: data buffer size
  397 + *
  398 + * This writes the buffer and returns zero or a negative error code.
  399 + * Callable only from contexts that can sleep.
  400 + */
  401 +static inline int
  402 +spi_read(struct spi_device *spi, u8 *buf, size_t len)
  403 +{
  404 + struct spi_transfer t = {
  405 + .tx_buf = NULL,
  406 + .rx_buf = buf,
  407 + .len = len,
  408 + .cs_change = 0,
  409 + };
  410 + struct spi_message m = {
  411 + .transfers = &t,
  412 + .n_transfer = 1,
  413 + };
  414 +
  415 + return spi_sync(spi, &m);
  416 +}
  417 +
  418 +extern int spi_write_then_read(struct spi_device *spi,
  419 + const u8 *txbuf, unsigned n_tx,
  420 + u8 *rxbuf, unsigned n_rx);
  421 +
  422 +/**
  423 + * spi_w8r8 - SPI synchronous 8 bit write followed by 8 bit read
  424 + * @spi: device with which data will be exchanged
  425 + * @cmd: command to be written before data is read back
  426 + *
  427 + * This returns the (unsigned) eight bit number returned by the
  428 + * device, or else a negative error code. Callable only from
  429 + * contexts that can sleep.
  430 + */
  431 +static inline ssize_t spi_w8r8(struct spi_device *spi, u8 cmd)
  432 +{
  433 + ssize_t status;
  434 + u8 result;
  435 +
  436 + status = spi_write_then_read(spi, &cmd, 1, &result, 1);
  437 +
  438 + /* return negative errno or unsigned value */
  439 + return (status < 0) ? status : result;
  440 +}
  441 +
  442 +/**
  443 + * spi_w8r16 - SPI synchronous 8 bit write followed by 16 bit read
  444 + * @spi: device with which data will be exchanged
  445 + * @cmd: command to be written before data is read back
  446 + *
  447 + * This returns the (unsigned) sixteen bit number returned by the
  448 + * device, or else a negative error code. Callable only from
  449 + * contexts that can sleep.
  450 + *
  451 + * The number is returned in wire-order, which is at least sometimes
  452 + * big-endian.
  453 + */
  454 +static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd)
  455 +{
  456 + ssize_t status;
  457 + u16 result;
  458 +
  459 + status = spi_write_then_read(spi, &cmd, 1, (u8 *) &result, 2);
  460 +
  461 + /* return negative errno or unsigned value */
  462 + return (status < 0) ? status : result;
  463 +}
  464 +
  465 +/*---------------------------------------------------------------------------*/
  466 +
  467 +/*
  468 + * INTERFACE between board init code and SPI infrastructure.
  469 + *
  470 + * No SPI driver ever sees these SPI device table segments, but
  471 + * it's how the SPI core (or adapters that get hotplugged) grows
  472 + * the driver model tree.
  473 + *
  474 + * As a rule, SPI devices can't be probed. Instead, board init code
  475 + * provides a table listing the devices which are present, with enough
  476 + * information to bind and set up the device's driver. There's basic
  477 + * support for nonstatic configurations too; enough to handle adding
  478 + * parport adapters, or microcontrollers acting as USB-to-SPI bridges.
  479 + */
  480 +
  481 +/* board-specific information about each SPI device */
  482 +struct spi_board_info {
  483 + /* the device name and module name are coupled, like platform_bus;
  484 + * "modalias" is normally the driver name.
  485 + *
  486 + * platform_data goes to spi_device.dev.platform_data,
  487 + * controller_data goes to spi_device.platform_data,
  488 + * irq is copied too
  489 + */
  490 + char modalias[KOBJ_NAME_LEN];
  491 + const void *platform_data;
  492 + const void *controller_data;
  493 + int irq;
  494 +
  495 + /* slower signaling on noisy or low voltage boards */
  496 + u32 max_speed_hz;
  497 +
  498 +
  499 + /* bus_num is board specific and matches the bus_num of some
  500 + * spi_master that will probably be registered later.
  501 + *
  502 + * chip_select reflects how this chip is wired to that master;
  503 + * it's less than num_chipselect.
  504 + */
  505 + u16 bus_num;
  506 + u16 chip_select;
  507 +
  508 + /* ... may need additional spi_device chip config data here.
  509 + * avoid stuff protocol drivers can set; but include stuff
  510 + * needed to behave without being bound to a driver:
  511 + * - chipselect polarity
  512 + * - quirks like clock rate mattering when not selected
  513 + */
  514 +};
  515 +
  516 +#ifdef CONFIG_SPI
  517 +extern int
  518 +spi_register_board_info(struct spi_board_info const *info, unsigned n);
  519 +#else
  520 +/* board init code may ignore whether SPI is configured or not */
  521 +static inline int
  522 +spi_register_board_info(struct spi_board_info const *info, unsigned n)
  523 + { return 0; }
  524 +#endif
  525 +
  526 +
  527 +/* If you're hotplugging an adapter with devices (parport, usb, etc)
  528 + * use spi_new_device() to describe each device. You can also call
  529 + * spi_unregister_device() to get start making that device vanish,
  530 + * but normally that would be handled by spi_unregister_master().
  531 + */
  532 +extern struct spi_device *
  533 +spi_new_device(struct spi_master *, struct spi_board_info *);
  534 +
  535 +static inline void
  536 +spi_unregister_device(struct spi_device *spi)
  537 +{
  538 + if (spi)
  539 + device_unregister(&spi->dev);
  540 +}
  541 +
  542 +#endif /* __LINUX_SPI_H */