]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
spi: docs: convert to ReST and add it to the kABI bookset
authorMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 31 Jul 2019 20:08:50 +0000 (17:08 -0300)
committerJonathan Corbet <corbet@lwn.net>
Wed, 31 Jul 2019 20:13:13 +0000 (14:13 -0600)
While there's one file there with briefily describes the uAPI,
the documentation was written just like most subsystems: focused
on kernel developers. So, add it together with driver-api books.

Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> # for iio
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
13 files changed:
Documentation/index.rst
Documentation/spi/butterfly.rst [moved from Documentation/spi/butterfly with 71% similarity]
Documentation/spi/index.rst [new file with mode: 0644]
Documentation/spi/pxa2xx.rst [moved from Documentation/spi/pxa2xx with 83% similarity]
Documentation/spi/spi-lm70llp.rst [moved from Documentation/spi/spi-lm70llp with 88% similarity]
Documentation/spi/spi-sc18is602.rst [moved from Documentation/spi/spi-sc18is602 with 97% similarity]
Documentation/spi/spi-summary.rst [moved from Documentation/spi/spi-summary with 93% similarity]
Documentation/spi/spidev.rst [moved from Documentation/spi/spidev with 90% similarity]
drivers/iio/dummy/iio_simple_dummy.c
drivers/spi/Kconfig
drivers/spi/spi-butterfly.c
drivers/spi/spi-lm70llp.c
include/linux/platform_data/sc18is602.h

index 6217acab92dbbc5a4868f2f402a311169e6fc958..472b8abe52e91bba0c0169870e2d5ef010422269 100644 (file)
@@ -116,6 +116,7 @@ needed).
    power/index
    target/index
    timers/index
+   spi/index
    watchdog/index
    virtual/index
    input/index
similarity index 71%
rename from Documentation/spi/butterfly
rename to Documentation/spi/butterfly.rst
index 9927af7a629c9a16022fc9cb689ae4f1ee2d91ef..e614a589547cf7ed7731c294ad6528e2186eb9d5 100644 (file)
@@ -1,3 +1,4 @@
+===================================================
 spi_butterfly - parport-to-butterfly adapter driver
 ===================================================
 
@@ -27,25 +28,29 @@ need to reflash the firmware, and the pins are the standard Atmel "ISP"
 connector pins (used also on non-Butterfly AVR boards).  On the parport
 side this is like "sp12" programming cables.
 
+       ======    =============   ===================
        Signal    Butterfly       Parport (DB-25)
-       ------    ---------       ---------------
-       SCK     = J403.PB1/SCK  = pin 2/D0
-       RESET   = J403.nRST     = pin 3/D1
-       VCC     = J403.VCC_EXT  = pin 8/D6
-       MOSI    = J403.PB2/MOSI = pin 9/D7
-       MISO    = J403.PB3/MISO = pin 11/S7,nBUSY
-       GND     = J403.GND      = pin 23/GND
+       ======    =============   ===================
+       SCK       J403.PB1/SCK    pin 2/D0
+       RESET     J403.nRST       pin 3/D1
+       VCC       J403.VCC_EXT    pin 8/D6
+       MOSI      J403.PB2/MOSI   pin 9/D7
+       MISO      J403.PB3/MISO   pin 11/S7,nBUSY
+       GND       J403.GND        pin 23/GND
+       ======    =============   ===================
 
 Then to let Linux master that bus to talk to the DataFlash chip, you must
 (a) flash new firmware that disables SPI (set PRR.2, and disable pullups
 by clearing PORTB.[0-3]); (b) configure the mtd_dataflash driver; and
 (c) cable in the chipselect.
 
+       ======    ============    ===================
        Signal    Butterfly       Parport (DB-25)
-       ------    ---------       ---------------
-       VCC     = J400.VCC_EXT  = pin 7/D5
-       SELECT  = J400.PB0/nSS  = pin 17/C3,nSELECT
-       GND     = J400.GND      = pin 24/GND
+       ======    ============    ===================
+       VCC       J400.VCC_EXT    pin 7/D5
+       SELECT    J400.PB0/nSS    pin 17/C3,nSELECT
+       GND       J400.GND        pin 24/GND
+       ======    ============    ===================
 
 Or you could flash firmware making the AVR into an SPI slave (keeping the
 DataFlash in reset) and tweak the spi_butterfly driver to make it bind to
@@ -56,13 +61,14 @@ That would let you talk to the AVR using custom SPI-with-USI firmware,
 while letting either Linux or the AVR use the DataFlash.  There are plenty
 of spare parport pins to wire this one up, such as:
 
+       ======    =============   ===================
        Signal    Butterfly       Parport (DB-25)
-       ------    ---------       ---------------
-       SCK     = J403.PE4/USCK = pin 5/D3
-       MOSI    = J403.PE5/DI   = pin 6/D4
-       MISO    = J403.PE6/DO   = pin 12/S5,nPAPEROUT
-       GND     = J403.GND      = pin 22/GND
-
-       IRQ     = J402.PF4      = pin 10/S6,ACK
-       GND     = J402.GND(P2)  = pin 25/GND
+       ======    =============   ===================
+       SCK       J403.PE4/USCK   pin 5/D3
+       MOSI      J403.PE5/DI     pin 6/D4
+       MISO      J403.PE6/DO     pin 12/S5,nPAPEROUT
+       GND       J403.GND        pin 22/GND
 
+       IRQ       J402.PF4        pin 10/S6,ACK
+       GND       J402.GND(P2)    pin 25/GND
+       ======    =============   ===================
diff --git a/Documentation/spi/index.rst b/Documentation/spi/index.rst
new file mode 100644 (file)
index 0000000..06c34ea
--- /dev/null
@@ -0,0 +1,22 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=================================
+Serial Peripheral Interface (SPI)
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   spi-summary
+   spidev
+   butterfly
+   pxa2xx
+   spi-lm70llp
+   spi-sc18is602
+
+.. only::  subproject and html
+
+   Indices
+   =======
+
+   * :ref:`genindex`
similarity index 83%
rename from Documentation/spi/pxa2xx
rename to Documentation/spi/pxa2xx.rst
index 551325b66b233686373f7ff4b1628a58dea55388..882d3cc72cc2b1598d603893c0e3d47a2f931785 100644 (file)
@@ -1,8 +1,10 @@
+==============================
 PXA2xx SPI on SSP driver HOWTO
-===================================================
+==============================
+
 This a mini howto on the pxa2xx_spi driver.  The driver turns a PXA2xx
 synchronous serial port into a SPI master controller
-(see Documentation/spi/spi-summary). The driver has the following features
+(see Documentation/spi/spi-summary.rst). The driver has the following features
 
 - Support for any PXA2xx SSP
 - SSP PIO and SSP DMA data transfers.
@@ -19,12 +21,12 @@ Declaring PXA2xx Master Controllers
 -----------------------------------
 Typically a SPI master is defined in the arch/.../mach-*/board-*.c as a
 "platform device".  The master configuration is passed to the driver via a table
-found in include/linux/spi/pxa2xx_spi.h:
+found in include/linux/spi/pxa2xx_spi.h::
 
-struct pxa2xx_spi_controller {
+  struct pxa2xx_spi_controller {
        u16 num_chipselect;
        u8 enable_dma;
-};
+  };
 
 The "pxa2xx_spi_controller.num_chipselect" field is used to determine the number of
 slave device (chips) attached to this SPI master.
@@ -36,9 +38,9 @@ See the "PXA2xx Developer Manual" section "DMA Controller".
 
 NSSP MASTER SAMPLE
 ------------------
-Below is a sample configuration using the PXA255 NSSP.
+Below is a sample configuration using the PXA255 NSSP::
 
-static struct resource pxa_spi_nssp_resources[] = {
+  static struct resource pxa_spi_nssp_resources[] = {
        [0] = {
                .start  = __PREG(SSCR0_P(2)), /* Start address of NSSP */
                .end    = __PREG(SSCR0_P(2)) + 0x2c, /* Range of registers */
@@ -49,14 +51,14 @@ static struct resource pxa_spi_nssp_resources[] = {
                .end    = IRQ_NSSP,
                .flags  = IORESOURCE_IRQ,
        },
-};
+  };
 
-static struct pxa2xx_spi_controller pxa_nssp_master_info = {
+  static struct pxa2xx_spi_controller pxa_nssp_master_info = {
        .num_chipselect = 1, /* Matches the number of chips attached to NSSP */
        .enable_dma = 1, /* Enables NSSP DMA */
-};
+  };
 
-static struct platform_device pxa_spi_nssp = {
+  static struct platform_device pxa_spi_nssp = {
        .name = "pxa2xx-spi", /* MUST BE THIS VALUE, so device match driver */
        .id = 2, /* Bus number, MUST MATCH SSP number 1..n */
        .resource = pxa_spi_nssp_resources,
@@ -64,22 +66,22 @@ static struct platform_device pxa_spi_nssp = {
        .dev = {
                .platform_data = &pxa_nssp_master_info, /* Passed to driver */
        },
-};
+  };
 
-static struct platform_device *devices[] __initdata = {
+  static struct platform_device *devices[] __initdata = {
        &pxa_spi_nssp,
-};
+  };
 
-static void __init board_init(void)
-{
+  static void __init board_init(void)
+  {
        (void)platform_add_device(devices, ARRAY_SIZE(devices));
-}
+  }
 
 Declaring Slave Devices
 -----------------------
 Typically each SPI slave (chip) is defined in the arch/.../mach-*/board-*.c
 using the "spi_board_info" structure found in "linux/spi/spi.h". See
-"Documentation/spi/spi-summary" for additional information.
+"Documentation/spi/spi-summary.rst" for additional information.
 
 Each slave device attached to the PXA must provide slave specific configuration
 information via the structure "pxa2xx_spi_chip" found in
@@ -87,19 +89,21 @@ information via the structure "pxa2xx_spi_chip" found in
 will uses the configuration whenever the driver communicates with the slave
 device. All fields are optional.
 
-struct pxa2xx_spi_chip {
+::
+
+  struct pxa2xx_spi_chip {
        u8 tx_threshold;
        u8 rx_threshold;
        u8 dma_burst_size;
        u32 timeout;
        u8 enable_loopback;
        void (*cs_control)(u32 command);
-};
+  };
 
 The "pxa2xx_spi_chip.tx_threshold" and "pxa2xx_spi_chip.rx_threshold" fields are
 used to configure the SSP hardware fifo.  These fields are critical to the
 performance of pxa2xx_spi driver and misconfiguration will result in rx
-fifo overruns (especially in PIO mode transfers). Good default values are
+fifo overruns (especially in PIO mode transfers). Good default values are::
 
        .tx_threshold = 8,
        .rx_threshold = 8,
@@ -141,41 +145,43 @@ The pxa2xx_spi_chip structure is passed to the pxa2xx_spi driver in the
 "spi_board_info.controller_data" field. Below is a sample configuration using
 the PXA255 NSSP.
 
-/* Chip Select control for the CS8415A SPI slave device */
-static void cs8415a_cs_control(u32 command)
-{
+::
+
+  /* Chip Select control for the CS8415A SPI slave device */
+  static void cs8415a_cs_control(u32 command)
+  {
        if (command & PXA2XX_CS_ASSERT)
                GPCR(2) = GPIO_bit(2);
        else
                GPSR(2) = GPIO_bit(2);
-}
+  }
 
-/* Chip Select control for the CS8405A SPI slave device */
-static void cs8405a_cs_control(u32 command)
-{
+  /* Chip Select control for the CS8405A SPI slave device */
+  static void cs8405a_cs_control(u32 command)
+  {
        if (command & PXA2XX_CS_ASSERT)
                GPCR(3) = GPIO_bit(3);
        else
                GPSR(3) = GPIO_bit(3);
-}
+  }
 
-static struct pxa2xx_spi_chip cs8415a_chip_info = {
+  static struct pxa2xx_spi_chip cs8415a_chip_info = {
        .tx_threshold = 8, /* SSP hardward FIFO threshold */
        .rx_threshold = 8, /* SSP hardward FIFO threshold */
        .dma_burst_size = 8, /* Byte wide transfers used so 8 byte bursts */
        .timeout = 235, /* See Intel documentation */
        .cs_control = cs8415a_cs_control, /* Use external chip select */
-};
+  };
 
-static struct pxa2xx_spi_chip cs8405a_chip_info = {
+  static struct pxa2xx_spi_chip cs8405a_chip_info = {
        .tx_threshold = 8, /* SSP hardward FIFO threshold */
        .rx_threshold = 8, /* SSP hardward FIFO threshold */
        .dma_burst_size = 8, /* Byte wide transfers used so 8 byte bursts */
        .timeout = 235, /* See Intel documentation */
        .cs_control = cs8405a_cs_control, /* Use external chip select */
-};
+  };
 
-static struct spi_board_info streetracer_spi_board_info[] __initdata = {
+  static struct spi_board_info streetracer_spi_board_info[] __initdata = {
        {
                .modalias = "cs8415a", /* Name of spi_driver for this device */
                .max_speed_hz = 3686400, /* Run SSP as fast a possbile */
@@ -193,13 +199,13 @@ static struct spi_board_info streetracer_spi_board_info[] __initdata = {
                .controller_data = &cs8405a_chip_info, /* Master chip config */
                .irq = STREETRACER_APCI_IRQ, /* Slave device interrupt */
        },
-};
+  };
 
-static void __init streetracer_init(void)
-{
+  static void __init streetracer_init(void)
+  {
        spi_register_board_info(streetracer_spi_board_info,
                                ARRAY_SIZE(streetracer_spi_board_info));
-}
+  }
 
 
 DMA and PIO I/O Support
@@ -210,26 +216,25 @@ by setting the "enable_dma" flag in the "pxa2xx_spi_controller" structure.  The
 mode supports both coherent and stream based DMA mappings.
 
 The following logic is used to determine the type of I/O to be used on
-a per "spi_transfer" basis:
+a per "spi_transfer" basis::
 
-if !enable_dma then
+  if !enable_dma then
        always use PIO transfers
 
-if spi_message.len > 8191 then
+  if spi_message.len > 8191 then
        print "rate limited" warning
        use PIO transfers
 
-if spi_message.is_dma_mapped and rx_dma_buf != 0 and tx_dma_buf != 0 then
+  if spi_message.is_dma_mapped and rx_dma_buf != 0 and tx_dma_buf != 0 then
        use coherent DMA mode
 
-if rx_buf and tx_buf are aligned on 8 byte boundary then
+  if rx_buf and tx_buf are aligned on 8 byte boundary then
        use streaming DMA mode
 
-otherwise
+  otherwise
        use PIO transfer
 
 THANKS TO
 ---------
 
 David Brownell and others for mentoring the development of this driver.
-
similarity index 88%
rename from Documentation/spi/spi-lm70llp
rename to Documentation/spi/spi-lm70llp.rst
index 463f6d01fa155f3d61eed020c650de3e5511cc81..07631aef4343bdab4459110861a2792fe239afdf 100644 (file)
@@ -1,8 +1,11 @@
+==============================================
 spi_lm70llp :  LM70-LLP parport-to-SPI adapter
 ==============================================
 
 Supported board/chip:
+
   * National Semiconductor LM70 LLP evaluation board
+
     Datasheet: http://www.national.com/pf/LM/LM70.html
 
 Author:
@@ -29,9 +32,10 @@ available (on page 4) here:
 
 The hardware interfacing on the LM70 LLP eval board is as follows:
 
+   ======== == =========   ==========
    Parallel                 LM70 LLP
-     Port      Direction   JP2 Header
-   ----------- --------- ----------------
+     Port   .  Direction   JP2 Header
+   ======== == =========   ==========
       D0     2      -         -
       D1     3     -->      V+   5
       D2     4     -->      V+   5
@@ -42,7 +46,7 @@ The hardware interfacing on the LM70 LLP eval board is as follows:
       D7     9     -->      SI/O 5
      GND    25      -       GND  7
     Select  13     <--      SI/O 1
-   ----------- --------- ----------------
+   ======== == =========   ==========
 
 Note that since the LM70 uses a "3-wire" variant of SPI, the SI/SO pin
 is connected to both pin D7 (as Master Out) and Select (as Master In)
@@ -74,6 +78,7 @@ inverting the value read at pin 13.
 
 Thanks to
 ---------
-o David Brownell for mentoring the SPI-side driver development.
-o Dr.Craig Hollabaugh for the (early) "manual" bitbanging driver version.
-o Nadir Billimoria for help interpreting the circuit schematic.
+
+- David Brownell for mentoring the SPI-side driver development.
+- Dr.Craig Hollabaugh for the (early) "manual" bitbanging driver version.
+- Nadir Billimoria for help interpreting the circuit schematic.
similarity index 97%
rename from Documentation/spi/spi-sc18is602
rename to Documentation/spi/spi-sc18is602.rst
index 0feffd5af411127cce07dd885ea4dff7d8099a48..2a31dc722321bf1699fa83ae4ece789f4d47c6e5 100644 (file)
@@ -1,8 +1,11 @@
+===========================
 Kernel driver spi-sc18is602
 ===========================
 
 Supported chips:
+
   * NXP SI18IS602/602B/603
+
     Datasheet: http://www.nxp.com/documents/data_sheet/SC18IS602_602B_603.pdf
 
 Author:
similarity index 93%
rename from Documentation/spi/spi-summary
rename to Documentation/spi/spi-summary.rst
index 1a63194b74d7d7310efe1fab7e777a415d9a7a3c..f1daffe10d782086a1a7a4db0e1991a29edf930a 100644 (file)
@@ -1,3 +1,4 @@
+====================================
 Overview of Linux kernel SPI support
 ====================================
 
@@ -139,12 +140,14 @@ a command and then reading its response.
 
 There are two types of SPI driver, here called:
 
-  Controller drivers ... controllers may be built into System-On-Chip
+  Controller drivers ...
+        controllers may be built into System-On-Chip
        processors, and often support both Master and Slave roles.
        These drivers touch hardware registers and may use DMA.
        Or they can be PIO bitbangers, needing just GPIO pins.
 
-  Protocol drivers ... these pass messages through the controller
+  Protocol drivers ...
+        these pass messages through the controller
        driver to communicate with a Slave or Master device on the
        other side of an SPI link.
 
@@ -160,7 +163,7 @@ those two types of drivers.
 There is a minimal core of SPI programming interfaces, focussing on
 using the driver model to connect controller and protocol drivers using
 device tables provided by board specific initialization code.  SPI
-shows up in sysfs in several locations:
+shows up in sysfs in several locations::
 
    /sys/devices/.../CTLR ... physical node for a given SPI controller
 
@@ -168,7 +171,7 @@ shows up in sysfs in several locations:
        chipselect C, accessed through CTLR.
 
    /sys/bus/spi/devices/spiB.C ... symlink to that physical
-       .../CTLR/spiB.C device
+       .../CTLR/spiB.C device
 
    /sys/devices/.../CTLR/spiB.C/modalias ... identifies the driver
        that should be used with this device (for hotplug/coldplug)
@@ -206,7 +209,8 @@ Linux needs several kinds of information to properly configure SPI devices.
 That information is normally provided by board-specific code, even for
 chips that do support some of automated discovery/enumeration.
 
-DECLARE CONTROLLERS
+Declare Controllers
+^^^^^^^^^^^^^^^^^^^
 
 The first kind of information is a list of what SPI controllers exist.
 For System-on-Chip (SOC) based boards, these will usually be platform
@@ -221,7 +225,7 @@ same basic controller setup code.  This is because most SOCs have several
 SPI-capable controllers, and only the ones actually usable on a given
 board should normally be set up and registered.
 
-So for example arch/.../mach-*/board-*.c files might have code like:
+So for example arch/.../mach-*/board-*.c files might have code like::
 
        #include <mach/spi.h>   /* for mysoc_spi_data */
 
@@ -238,7 +242,7 @@ So for example arch/.../mach-*/board-*.c files might have code like:
                ...
        }
 
-And SOC-specific utility code might look something like:
+And SOC-specific utility code might look something like::
 
        #include <mach/spi.h>
 
@@ -269,8 +273,8 @@ same SOC controller is used.  For example, on one board SPI might use
 an external clock, where another derives the SPI clock from current
 settings of some master clock.
 
-
-DECLARE SLAVE DEVICES
+Declare Slave Devices
+^^^^^^^^^^^^^^^^^^^^^
 
 The second kind of information is a list of what SPI slave devices exist
 on the target board, often with some board-specific data needed for the
@@ -278,7 +282,7 @@ driver to work correctly.
 
 Normally your arch/.../mach-*/board-*.c files would provide a small table
 listing the SPI devices on each board.  (This would typically be only a
-small handful.)  That might look like:
+small handful.)  That might look like::
 
        static struct ads7846_platform_data ads_info = {
                .vref_delay_usecs       = 100,
@@ -316,7 +320,7 @@ not possible until the infrastructure knows how to deselect it.
 
 Then your board initialization code would register that table with the SPI
 infrastructure, so that it's available later when the SPI master controller
-driver is registered:
+driver is registered::
 
        spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
 
@@ -324,12 +328,13 @@ Like with other static board-specific setup, you won't unregister those.
 
 The widely used "card" style computers bundle memory, cpu, and little else
 onto a card that's maybe just thirty square centimeters.  On such systems,
-your arch/.../mach-.../board-*.c file would primarily provide information
+your ``arch/.../mach-.../board-*.c`` file would primarily provide information
 about the devices on the mainboard into which such a card is plugged.  That
 certainly includes SPI devices hooked up through the card connectors!
 
 
-NON-STATIC CONFIGURATIONS
+Non-static Configurations
+^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Developer boards often play by different rules than product boards, and one
 example is the potential need to hotplug SPI devices and/or controllers.
@@ -349,7 +354,7 @@ How do I write an "SPI Protocol Driver"?
 Most SPI drivers are currently kernel drivers, but there's also support
 for userspace drivers.  Here we talk only about kernel drivers.
 
-SPI protocol drivers somewhat resemble platform device drivers:
+SPI protocol drivers somewhat resemble platform device drivers::
 
        static struct spi_driver CHIP_driver = {
                .driver = {
@@ -367,6 +372,8 @@ device whose board_info gave a modalias of "CHIP".  Your probe() code
 might look like this unless you're creating a device which is managing
 a bus (appearing under /sys/class/spi_master).
 
+::
+
        static int CHIP_probe(struct spi_device *spi)
        {
                struct CHIP                     *chip;
@@ -479,6 +486,8 @@ The main task of this type of driver is to provide an "spi_master".
 Use spi_alloc_master() to allocate the master, and spi_master_get_devdata()
 to get the driver-private data allocated for that device.
 
+::
+
        struct spi_master       *master;
        struct CONTROLLER       *c;
 
@@ -503,7 +512,8 @@ If you need to remove your SPI controller driver, spi_unregister_master()
 will reverse the effect of spi_register_master().
 
 
-BUS NUMBERING
+Bus Numbering
+^^^^^^^^^^^^^
 
 Bus numbering is important, since that's how Linux identifies a given
 SPI bus (shared SCK, MOSI, MISO).  Valid bus numbers start at zero.  On
@@ -517,9 +527,10 @@ then be replaced by a dynamically assigned number. You'd then need to treat
 this as a non-static configuration (see above).
 
 
-SPI MASTER METHODS
+SPI Master Methods
+^^^^^^^^^^^^^^^^^^
 
-    master->setup(struct spi_device *spi)
+``master->setup(struct spi_device *spi)``
        This sets up the device clock rate, SPI mode, and word sizes.
        Drivers may change the defaults provided by board_info, and then
        call spi_setup(spi) to invoke this routine.  It may sleep.
@@ -528,37 +539,37 @@ SPI MASTER METHODS
        change them right away ... otherwise drivers could corrupt I/O
        that's in progress for other SPI devices.
 
-               ** BUG ALERT:  for some reason the first version of
-               ** many spi_master drivers seems to get this wrong.
-               ** When you code setup(), ASSUME that the controller
-               ** is actively processing transfers for another device.
+       .. note::
+
+               BUG ALERT:  for some reason the first version of
+               many spi_master drivers seems to get this wrong.
+               When you code setup(), ASSUME that the controller
+               is actively processing transfers for another device.
 
-    master->cleanup(struct spi_device *spi)
+``master->cleanup(struct spi_device *spi)``
        Your controller driver may use spi_device.controller_state to hold
        state it dynamically associates with that device.  If you do that,
        be sure to provide the cleanup() method to free that state.
 
-    master->prepare_transfer_hardware(struct spi_master *master)
+``master->prepare_transfer_hardware(struct spi_master *master)``
        This will be called by the queue mechanism to signal to the driver
        that a message is coming in soon, so the subsystem requests the
        driver to prepare the transfer hardware by issuing this call.
        This may sleep.
 
-    master->unprepare_transfer_hardware(struct spi_master *master)
+``master->unprepare_transfer_hardware(struct spi_master *master)``
        This will be called by the queue mechanism to signal to the driver
        that there are no more messages pending in the queue and it may
        relax the hardware (e.g. by power management calls). This may sleep.
 
-    master->transfer_one_message(struct spi_master *master,
-                                struct spi_message *mesg)
+``master->transfer_one_message(struct spi_master *master, struct spi_message *mesg)``
        The subsystem calls the driver to transfer a single message while
        queuing transfers that arrive in the meantime. When the driver is
        finished with this message, it must call
        spi_finalize_current_message() so the subsystem can issue the next
        message. This may sleep.
 
-    master->transfer_one(struct spi_master *master, struct spi_device *spi,
-                        struct spi_transfer *transfer)
+``master->transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *transfer)``
        The subsystem calls the driver to transfer a single transfer while
        queuing transfers that arrive in the meantime. When the driver is
        finished with this transfer, it must call
@@ -568,19 +579,20 @@ SPI MASTER METHODS
        not call your transfer_one callback.
 
        Return values:
-       negative errno: error
-       0: transfer is finished
-       1: transfer is still in progress
 
-    master->set_cs_timing(struct spi_device *spi, u8 setup_clk_cycles,
-                             u8 hold_clk_cycles, u8 inactive_clk_cycles)
+       * negative errno: error
+       * 0: transfer is finished
+       * 1: transfer is still in progress
+
+``master->set_cs_timing(struct spi_device *spi, u8 setup_clk_cycles, u8 hold_clk_cycles, u8 inactive_clk_cycles)``
        This method allows SPI client drivers to request SPI master controller
        for configuring device specific CS setup, hold and inactive timing
        requirements.
 
-    DEPRECATED METHODS
+Deprecated Methods
+^^^^^^^^^^^^^^^^^^
 
-    master->transfer(struct spi_device *spi, struct spi_message *message)
+``master->transfer(struct spi_device *spi, struct spi_message *message)``
        This must not sleep. Its responsibility is to arrange that the
        transfer happens and its complete() callback is issued. The two
        will normally happen later, after other transfers complete, and
@@ -590,7 +602,8 @@ SPI MASTER METHODS
        implemented.
 
 
-SPI MESSAGE QUEUE
+SPI Message Queue
+^^^^^^^^^^^^^^^^^
 
 If you are happy with the standard queueing mechanism provided by the
 SPI subsystem, just implement the queued methods specified above. Using
@@ -619,13 +632,13 @@ THANKS TO
 Contributors to Linux-SPI discussions include (in alphabetical order,
 by last name):
 
-Mark Brown
-David Brownell
-Russell King
-Grant Likely
-Dmitry Pervushin
-Stephen Street
-Mark Underwood
-Andrew Victor
-Linus Walleij
-Vitaly Wool
+Mark Brown
+David Brownell
+Russell King
+Grant Likely
+Dmitry Pervushin
+Stephen Street
+Mark Underwood
+Andrew Victor
+Linus Walleij
+Vitaly Wool
similarity index 90%
rename from Documentation/spi/spidev
rename to Documentation/spi/spidev.rst
index 3d14035b1766994b537fb273d20dffc92d9554d9..f05dbc5ccdbc66f3d9e916be44f13bb8ebf61833 100644 (file)
@@ -1,7 +1,13 @@
+=================
+SPI userspace API
+=================
+
 SPI devices have a limited userspace API, supporting basic half-duplex
 read() and write() access to SPI slave devices.  Using ioctl() requests,
 full duplex transfers and device I/O configuration are also available.
 
+::
+
        #include <fcntl.h>
        #include <unistd.h>
        #include <sys/ioctl.h>
@@ -39,14 +45,17 @@ device node with a "dev" attribute that will be understood by udev or mdev.
 busybox; it's less featureful, but often enough.)  For a SPI device with
 chipselect C on bus B, you should see:
 
-    /dev/spidevB.C ... character special device, major number 153 with
+    /dev/spidevB.C ...
+       character special device, major number 153 with
        a dynamically chosen minor device number.  This is the node
        that userspace programs will open, created by "udev" or "mdev".
 
-    /sys/devices/.../spiB.C ... as usual, the SPI device node will
+    /sys/devices/.../spiB.C ...
+       as usual, the SPI device node will
        be a child of its SPI master controller.
 
-    /sys/class/spidev/spidevB.C ... created when the "spidev" driver
+    /sys/class/spidev/spidevB.C ...
+       created when the "spidev" driver
        binds to that device.  (Directory or symlink, based on whether
        or not you enabled the "deprecated sysfs files" Kconfig option.)
 
@@ -80,7 +89,8 @@ the SPI_IOC_MESSAGE(N) request.
 Several ioctl() requests let your driver read or override the device's current
 settings for data transfer parameters:
 
-    SPI_IOC_RD_MODE, SPI_IOC_WR_MODE ... pass a pointer to a byte which will
+    SPI_IOC_RD_MODE, SPI_IOC_WR_MODE ...
+       pass a pointer to a byte which will
        return (RD) or assign (WR) the SPI transfer mode.  Use the constants
        SPI_MODE_0..SPI_MODE_3; or if you prefer you can combine SPI_CPOL
        (clock polarity, idle high iff this is set) or SPI_CPHA (clock phase,
@@ -88,22 +98,26 @@ settings for data transfer parameters:
        Note that this request is limited to SPI mode flags that fit in a
        single byte.
 
-    SPI_IOC_RD_MODE32, SPI_IOC_WR_MODE32 ... pass a pointer to a uin32_t
+    SPI_IOC_RD_MODE32, SPI_IOC_WR_MODE32 ...
+       pass a pointer to a uin32_t
        which will return (RD) or assign (WR) the full SPI transfer mode,
        not limited to the bits that fit in one byte.
 
-    SPI_IOC_RD_LSB_FIRST, SPI_IOC_WR_LSB_FIRST ... pass a pointer to a byte
+    SPI_IOC_RD_LSB_FIRST, SPI_IOC_WR_LSB_FIRST ...
+       pass a pointer to a byte
        which will return (RD) or assign (WR) the bit justification used to
        transfer SPI words.  Zero indicates MSB-first; other values indicate
        the less common LSB-first encoding.  In both cases the specified value
        is right-justified in each word, so that unused (TX) or undefined (RX)
        bits are in the MSBs.
 
-    SPI_IOC_RD_BITS_PER_WORD, SPI_IOC_WR_BITS_PER_WORD ... pass a pointer to
+    SPI_IOC_RD_BITS_PER_WORD, SPI_IOC_WR_BITS_PER_WORD ...
+       pass a pointer to
        a byte which will return (RD) or assign (WR) the number of bits in
        each SPI transfer word.  The value zero signifies eight bits.
 
-    SPI_IOC_RD_MAX_SPEED_HZ, SPI_IOC_WR_MAX_SPEED_HZ ... pass a pointer to a
+    SPI_IOC_RD_MAX_SPEED_HZ, SPI_IOC_WR_MAX_SPEED_HZ ...
+       pass a pointer to a
        u32 which will return (RD) or assign (WR) the maximum SPI transfer
        speed, in Hz.  The controller can't necessarily assign that specific
        clock speed.
index d28974ad9e0e8da1522c0e9767decbd38d1374e7..6cb02299a2152274b44a655026ad1633e8aca9b8 100644 (file)
@@ -695,7 +695,7 @@ static int iio_dummy_remove(struct iio_sw_device *swd)
  * i2c:
  * Documentation/i2c/writing-clients.rst
  * spi:
- * Documentation/spi/spi-summary
+ * Documentation/spi/spi-summary.rst
  */
 static const struct iio_sw_device_ops iio_dummy_device_ops = {
        .probe = iio_dummy_probe,
index 3a1d8f1170de0c6ab1006f15fbf3e559b2bf94ff..d5a24fe983e77dee4ac63f8aa5ce67c078ceffe1 100644 (file)
@@ -543,7 +543,7 @@ config SPI_PXA2XX
        help
          This enables using a PXA2xx or Sodaville SSP port as a SPI master
          controller. The driver can be configured to use any SSP port and
-         additional documentation can be found a Documentation/spi/pxa2xx.
+         additional documentation can be found a Documentation/spi/pxa2xx.rst.
 
 config SPI_PXA2XX_PCI
        def_tristate SPI_PXA2XX && PCI && COMMON_CLK
index 8c77d1114ad384be070b32cfdc94c358a534a139..7e71a351f3b732fe628b72e6d6d5b1d15d56bbab 100644 (file)
@@ -23,7 +23,7 @@
  * with a battery powered AVR microcontroller and lots of goodies.  You
  * can use GCC to develop firmware for this.
  *
- * See Documentation/spi/butterfly for information about how to build
+ * See Documentation/spi/butterfly.rst for information about how to build
  * and use this custom parallel port cable.
  */
 
index f18f912c9deab7175716b3896deaa375ca00f181..174dba29b1ddeb03763a918934b2a22e6ef85bf1 100644 (file)
@@ -34,7 +34,7 @@
  * available (on page 4) here:
  *  http://www.national.com/appinfo/tempsensors/files/LM70LLPEVALmanual.pdf
  *
- * Also see Documentation/spi/spi-lm70llp.  The SPI<->parport code here is
+ * Also see Documentation/spi/spi-lm70llp.rst.  The SPI<->parport code here is
  * (heavily) based on spi-butterfly by David Brownell.
  *
  * The LM70 LLP connects to the PC parallel port in the following manner:
index e066d3b0d6d83b74e3e1718392626b61f52e79c0..0e91489edfe671ca0f60f50aaaddf38a65186065 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Copyright (C) 2012 Guenter Roeck <linux@roeck-us.net>
  *
- * For further information, see the Documentation/spi/spi-sc18is602 file.
+ * For further information, see the Documentation/spi/spi-sc18is602.rst file.
  */
 
 /**