~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/spi/spi-summary.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/spi/spi-summary.rst (Version linux-6.12-rc7) and /Documentation/spi/spi-summary.rst (Version unix-v6-master)


  1 ====================================              
  2 Overview of Linux kernel SPI support              
  3 ====================================              
  4                                                   
  5 02-Feb-2012                                       
  6                                                   
  7 What is SPI?                                      
  8 ------------                                      
  9 The "Serial Peripheral Interface" (SPI) is a s    
 10 link used to connect microcontrollers to senso    
 11 It's a simple "de facto" standard, not complic    
 12 standardization body.  SPI uses a host/target     
 13                                                   
 14 The three signal wires hold a clock (SCK, ofte    
 15 and parallel data lines with "Master Out, Slav    
 16 Slave Out" (MISO) signals.  (Other names are a    
 17 clocking modes through which data is exchanged    
 18 commonly used.  Each clock cycle shifts data o    
 19 doesn't cycle except when there is a data bit     
 20 are used though; not every protocol uses those    
 21                                                   
 22 SPI hosts use a fourth "chip select" line to a    
 23 device, so those three signal wires may be con    
 24 in parallel.  All SPI targets support chipsele    
 25 low signals, labeled nCSx for target 'x' (e.g.    
 26 other signals, often including an interrupt to    
 27                                                   
 28 Unlike serial busses like USB or SMBus, even l    
 29 SPI target functions are usually not interoper    
 30 (except for commodities like SPI memory chips)    
 31                                                   
 32   - SPI may be used for request/response style    
 33     touchscreen sensors and memory chips.         
 34                                                   
 35   - It may also be used to stream data in eith    
 36     or both of them at the same time (full dup    
 37                                                   
 38   - Some devices may use eight bit words.  Oth    
 39     lengths, such as streams of 12-bit or 20-b    
 40                                                   
 41   - Words are usually sent with their most sig    
 42     but sometimes the least significant bit (L    
 43                                                   
 44   - Sometimes SPI is used to daisy-chain devic    
 45                                                   
 46 In the same way, SPI targets will only rarely     
 47 discovery/enumeration protocol. The tree of ta    
 48 a given SPI host controller will normally be s    
 49 configuration tables.                             
 50                                                   
 51 SPI is only one of the names used by such four    
 52 most controllers have no problem handling "Mic    
 53 half-duplex SPI, for request/response protocol    
 54 Serial Protocol"), PSP ("Programmable Serial P    
 55 related protocols.                                
 56                                                   
 57 Some chips eliminate a signal line by combinin    
 58 limiting themselves to half-duplex at the hard    
 59 some SPI chips have this signal mode as a stra    
 60 can be accessed using the same programming int    
 61 course they won't handle full duplex transfers    
 62 chips described as using "three wire" signalin    
 63 (That data line is sometimes called MOMI or SI    
 64                                                   
 65 Microcontrollers often support both host and t    
 66 protocol.  This document (and Linux) supports     
 67 sides of SPI interactions.                        
 68                                                   
 69                                                   
 70 Who uses it?  On what kinds of systems?           
 71 ---------------------------------------           
 72 Linux developers using SPI are probably writin    
 73 systems boards.  SPI is used to control extern    
 74 protocol supported by every MMC or SD memory c    
 75 cards, predating MMC cards but using the same     
 76 support only SPI.)  Some PC hardware uses SPI     
 77                                                   
 78 SPI target chips range from digital/analog con    
 79 sensors and codecs, to memory, to peripherals     
 80 or Ethernet adapters; and more.                   
 81                                                   
 82 Most systems using SPI will integrate a few de    
 83 Some provide SPI links on expansion connectors    
 84 dedicated SPI controller exists, GPIO pins can    
 85 low speed "bitbanging" adapter.  Very few syst    
 86 controller; the reasons to use SPI focus on lo    
 87 and if dynamic reconfiguration is important, U    
 88 appropriate low-pincount peripheral bus.          
 89                                                   
 90 Many microcontrollers that can run Linux integ    
 91 interfaces with SPI modes.  Given SPI support,    
 92 cards without needing a special purpose MMC/SD    
 93                                                   
 94                                                   
 95 I'm confused.  What are these four SPI "clock     
 96 ----------------------------------------------    
 97 It's easy to be confused here, and the vendor     
 98 find isn't necessarily helpful.  The four mode    
 99                                                   
100  - CPOL indicates the initial clock polarity.     
101    clock starts low, so the first (leading) ed    
102    the second (trailing) edge is falling.  CPO    
103    starts high, so the first (leading) edge is    
104                                                   
105  - CPHA indicates the clock phase used to samp    
106    sample on the leading edge, CPHA=1 means th    
107                                                   
108    Since the signal needs to stabilize before     
109    implies that its data is written half a clo    
110    clock edge.  The chipselect may have made i    
111                                                   
112 Chip specs won't always say "uses SPI mode X"     
113 but their timing diagrams will make the CPOL a    
114                                                   
115 In the SPI mode number, CPOL is the high order    
116 low order bit.  So when a chip's timing diagra    
117 starting low (CPOL=0) and data stabilized for     
118 trailing clock edge (CPHA=1), that's SPI mode     
119                                                   
120 Note that the clock mode is relevant as soon a    
121 active.  So the host must set the clock to ina    
122 a target, and the target can tell the chosen p    
123 clock level when its select line goes active.     
124 support for example both modes 0 and 3:  they     
125 and always clock data in/out on rising clock e    
126                                                   
127                                                   
128 How do these driver programming interfaces wor    
129 ----------------------------------------------    
130 The <linux/spi/spi.h> header file includes ker    
131 main source code, and you should certainly rea    
132 kernel API document.  This is just an overview    
133 picture before those details.                     
134                                                   
135 SPI requests always go into I/O queues.  Reque    
136 are always executed in FIFO order, and complet    
137 completion callbacks.  There are also some sim    
138 for those calls, including ones for common tra    
139 a command and then reading its response.          
140                                                   
141 There are two types of SPI driver, here called    
142                                                   
143   Controller drivers ...                          
144         controllers may be built into System-O    
145         processors, and often support both Con    
146         These drivers touch hardware registers    
147         Or they can be PIO bitbangers, needing    
148                                                   
149   Protocol drivers ...                            
150         these pass messages through the contro    
151         driver to communicate with a target or    
152         other side of an SPI link.                
153                                                   
154 So for example one protocol driver might talk     
155 data to filesystems stored on SPI flash like D    
156 control audio interfaces, present touchscreen     
157 or monitor temperature and voltage levels duri    
158 And those might all be sharing the same contro    
159                                                   
160 A "struct spi_device" encapsulates the control    
161 those two types of drivers.                       
162                                                   
163 There is a minimal core of SPI programming int    
164 using the driver model to connect controller a    
165 device tables provided by board specific initi    
166 shows up in sysfs in several locations::          
167                                                   
168    /sys/devices/.../CTLR ... physical node for    
169                                                   
170    /sys/devices/.../CTLR/spiB.C ... spi_device    
171         chipselect C, accessed through CTLR.      
172                                                   
173    /sys/bus/spi/devices/spiB.C ... symlink to     
174         .../CTLR/spiB.C device                    
175                                                   
176    /sys/devices/.../CTLR/spiB.C/modalias ... i    
177         that should be used with this device (    
178                                                   
179    /sys/bus/spi/drivers/D ... driver for one o    
180                                                   
181    /sys/class/spi_master/spiB ... symlink to a    
182         class related state for the SPI host c    
183         All spiB.* devices share one physical     
184         MOSI, and MISO.                           
185                                                   
186    /sys/devices/.../CTLR/slave ... virtual fil    
187         target device for an SPI target contro    
188         Writing the driver name of an SPI targ    
189         registers the target device; writing "    
190         device.                                   
191         Reading from this file shows the name     
192         if not registered).                       
193                                                   
194    /sys/class/spi_slave/spiB ... symlink to a     
195         class related state for the SPI target    
196         registered, a single spiB.* device is     
197         the physical SPI bus segment with othe    
198                                                   
199 At this time, the only class-specific state is    
200 so those /sys/class entries are only useful to    
201                                                   
202                                                   
203 How does board-specific init code declare SPI     
204 ----------------------------------------------    
205 Linux needs several kinds of information to pr    
206 That information is normally provided by board    
207 chips that do support some of automated discov    
208                                                   
209 Declare Controllers                               
210 ^^^^^^^^^^^^^^^^^^^                               
211                                                   
212 The first kind of information is a list of wha    
213 For System-on-Chip (SOC) based boards, these w    
214 devices, and the controller may need some plat    
215 operate properly.  The "struct platform_device    
216 like the physical address of the controller's     
217                                                   
218 Platforms will often abstract the "register SP    
219 maybe coupling it with code to initialize pin     
220 the arch/.../mach-*/board-*.c files for severa    
221 same basic controller setup code.  This is bec    
222 SPI-capable controllers, and only the ones act    
223 board should normally be set up and registered    
224                                                   
225 So for example arch/.../mach-*/board-*.c files    
226                                                   
227         #include <mach/spi.h>   /* for mysoc_s    
228                                                   
229         /* if your mach-* infrastructure doesn    
230          * run on multiple boards, pdata would    
231          */                                       
232         static struct mysoc_spi_data pdata __i    
233                                                   
234         static __init board_init(void)            
235         {                                         
236                 ...                               
237                 /* this board only uses SPI co    
238                 mysoc_register_spi(2, &pdata);    
239                 ...                               
240         }                                         
241                                                   
242 And SOC-specific utility code might look somet    
243                                                   
244         #include <mach/spi.h>                     
245                                                   
246         static struct platform_device spi2 = {    
247                                                   
248         void mysoc_register_spi(unsigned n, st    
249         {                                         
250                 struct mysoc_spi_data *pdata2;    
251                                                   
252                 pdata2 = kmalloc(sizeof *pdata    
253                 *pdata2 = pdata;                  
254                 ...                               
255                 if (n == 2) {                     
256                         spi2->dev.platform_dat    
257                         register_platform_devi    
258                                                   
259                         /* also: set up pin mo    
260                          * visible on the rele    
261                          * production boards m    
262                          * developer boards wi    
263                          */                       
264                 }                                 
265                 ...                               
266         }                                         
267                                                   
268 Notice how the platform_data for boards may be    
269 same SOC controller is used.  For example, on     
270 an external clock, where another derives the S    
271 settings of some master clock.                    
272                                                   
273 Declare target Devices                            
274 ^^^^^^^^^^^^^^^^^^^^^^                            
275                                                   
276 The second kind of information is a list of wh    
277 on the target board, often with some board-spe    
278 driver to work correctly.                         
279                                                   
280 Normally your arch/.../mach-*/board-*.c files     
281 listing the SPI devices on each board.  (This     
282 small handful.)  That might look like::           
283                                                   
284         static struct ads7846_platform_data ad    
285                 .vref_delay_usecs       = 100,    
286                 .x_plate_ohms           = 580,    
287                 .y_plate_ohms           = 410,    
288         };                                        
289                                                   
290         static struct spi_board_info spi_board    
291         {                                         
292                 .modalias       = "ads7846",      
293                 .platform_data  = &ads_info,      
294                 .mode           = SPI_MODE_0,     
295                 .irq            = GPIO_IRQ(31)    
296                 .max_speed_hz   = 120000 /* ma    
297                 .bus_num        = 1,              
298                 .chip_select    = 0,              
299         },                                        
300         };                                        
301                                                   
302 Again, notice how board-specific information i    
303 several types.  This example shows generic con    
304 clock to allow (a function of board voltage in    
305 is wired, plus chip-specific constraints like     
306 changed by the capacitance at one pin.            
307                                                   
308 (There's also "controller_data", information t    
309 controller driver.  An example would be periph    
310 data or chipselect callbacks.  This is stored     
311                                                   
312 The board_info should provide enough informati    
313 without the chip's driver being loaded.  The m    
314 that is likely the SPI_CS_HIGH bit in the spi_    
315 sharing a bus with a device that interprets ch    
316 not possible until the infrastructure knows ho    
317                                                   
318 Then your board initialization code would regi    
319 infrastructure, so that it's available later w    
320 driver is registered::                            
321                                                   
322         spi_register_board_info(spi_board_info    
323                                                   
324 Like with other static board-specific setup, y    
325                                                   
326 The widely used "card" style computers bundle     
327 onto a card that's maybe just thirty square ce    
328 your ``arch/.../mach-.../board-*.c`` file woul    
329 about the devices on the mainboard into which     
330 certainly includes SPI devices hooked up throu    
331                                                   
332                                                   
333 Non-static Configurations                         
334 ^^^^^^^^^^^^^^^^^^^^^^^^^                         
335                                                   
336 When Linux includes support for MMC/SD/SDIO/Da    
337 configurations will also be dynamic.  Fortunat    
338 basic device identification probes, so they sh    
339                                                   
340                                                   
341 How do I write an "SPI Protocol Driver"?          
342 ----------------------------------------          
343 Most SPI drivers are currently kernel drivers,    
344 for userspace drivers.  Here we talk only abou    
345                                                   
346 SPI protocol drivers somewhat resemble platfor    
347                                                   
348         static struct spi_driver CHIP_driver =    
349                 .driver = {                       
350                         .name           = "CHI    
351                         .pm             = &CHI    
352                 },                                
353                                                   
354                 .probe          = CHIP_probe,     
355                 .remove         = CHIP_remove,    
356         };                                        
357                                                   
358 The driver core will automatically attempt to     
359 device whose board_info gave a modalias of "CH    
360 might look like this unless you're creating a     
361 a bus (appearing under /sys/class/spi_master).    
362                                                   
363 ::                                                
364                                                   
365         static int CHIP_probe(struct spi_devic    
366         {                                         
367                 struct CHIP                       
368                 struct CHIP_platform_data         
369                                                   
370                 /* assuming the driver require    
371                 pdata = &spi->dev.platform_dat    
372                 if (!pdata)                       
373                         return -ENODEV;           
374                                                   
375                 /* get memory for driver's per    
376                 chip = kzalloc(sizeof *chip, G    
377                 if (!chip)                        
378                         return -ENOMEM;           
379                 spi_set_drvdata(spi, chip);       
380                                                   
381                 ... etc                           
382                 return 0;                         
383         }                                         
384                                                   
385 As soon as it enters probe(), the driver may i    
386 the SPI device using "struct spi_message".  Wh    
387 or after probe() fails, the driver guarantees     
388 any more such messages.                           
389                                                   
390   - An spi_message is a sequence of protocol o    
391     as one atomic sequence.  SPI driver contro    
392                                                   
393       + when bidirectional reads and writes st    
394         sequence of spi_transfer requests is a    
395                                                   
396       + which I/O buffers are used ... each sp    
397         buffer for each transfer direction, su    
398         (two pointers, maybe the same one in b    
399         duplex (one pointer is NULL) transfers    
400                                                   
401       + optionally defining short delays after    
402         the spi_transfer.delay.value setting (    
403         only protocol effect, if the buffer le    
404         when specifying this delay the default    
405         is microseconds, however this can be a    
406         or nanoseconds if needed;                 
407                                                   
408       + whether the chipselect becomes inactiv    
409         any delay ... by using the spi_transfe    
410                                                   
411       + hinting whether the next message is li    
412         device ... using the spi_transfer.cs_c    
413         transfer in that atomic group, and pot    
414         for chip deselect and select operation    
415                                                   
416   - Follow standard kernel rules, and provide     
417     your messages.  That way controller driver    
418     to make extra copies unless the hardware r    
419     around hardware errata that force the use     
420                                                   
421   - The basic I/O primitive is spi_async().  A    
422     issued in any context (irq handler, task,     
423     is reported using a callback provided with    
424     After any detected error, the chip is dese    
425     of that spi_message is aborted.               
426                                                   
427   - There are also synchronous wrappers like s    
428     like spi_read(), spi_write(), and spi_writ    
429     may be issued only in contexts that may sl    
430     clean (and small, and "optional") layers o    
431                                                   
432   - The spi_write_then_read() call, and conven    
433     it, should only be used with small amounts    
434     cost of an extra copy may be ignored.  It'    
435     common RPC-style requests, such as writing    
436     and reading a sixteen bit response -- spi_    
437     wrappers, doing exactly that.                 
438                                                   
439 Some drivers may need to modify spi_device cha    
440 transfer mode, wordsize, or clock rate.  This     
441 which would normally be called from probe() be    
442 done to the device.  However, that can also be    
443 that no message is pending for that device.       
444                                                   
445 While "spi_device" would be the bottom boundar    
446 upper boundaries might include sysfs (especial    
447 the input layer, ALSA, networking, MTD, the ch    
448 or other Linux subsystems.                        
449                                                   
450 Note that there are two types of memory your d    
451 of interacting with SPI devices.                  
452                                                   
453   - I/O buffers use the usual Linux rules, and    
454     You'd normally allocate them from the heap    
455     Don't use the stack, or anything that's de    
456                                                   
457   - The spi_message and spi_transfer metadata     
458     I/O buffers into a group of protocol trans    
459     be allocated anywhere it's convenient, inc    
460     other allocate-once driver data structures    
461                                                   
462 If you like, spi_message_alloc() and spi_messa    
463 routines are available to allocate and zero-in    
464 with several transfers.                           
465                                                   
466                                                   
467 How do I write an "SPI Controller Driver"?        
468 ----------------------------------------------    
469 An SPI controller will probably be registered     
470 a driver to bind to the device, whichever bus     
471                                                   
472 The main task of this type of driver is to pro    
473 Use spi_alloc_host() to allocate the host cont    
474 spi_controller_get_devdata() to get the driver    
475 device.                                           
476                                                   
477 ::                                                
478                                                   
479         struct spi_controller   *ctlr;            
480         struct CONTROLLER       *c;               
481                                                   
482         ctlr = spi_alloc_host(dev, sizeof *c);    
483         if (!ctlr)                                
484                 return -ENODEV;                   
485                                                   
486         c = spi_controller_get_devdata(ctlr);     
487                                                   
488 The driver will initialize the fields of that     
489 number (maybe the same as the platform device     
490 interact with the SPI core and SPI protocol dr    
491 its own internal state.  (See below about bus     
492                                                   
493 After you initialize the spi_controller, then     
494 publish it to the rest of the system. At that     
495 controller and any predeclared spi devices wil    
496 the driver model core will take care of bindin    
497                                                   
498 If you need to remove your SPI controller driv    
499 will reverse the effect of spi_register_contro    
500                                                   
501                                                   
502 Bus Numbering                                     
503 ^^^^^^^^^^^^^                                     
504                                                   
505 Bus numbering is important, since that's how L    
506 SPI bus (shared SCK, MOSI, MISO).  Valid bus n    
507 SOC systems, the bus numbers should match the     
508 manufacturer.  For example, hardware controlle    
509 and spi_board_info for devices connected to it    
510                                                   
511 If you don't have such hardware-assigned bus n    
512 you can't just assign them, then provide a neg    
513 then be replaced by a dynamically assigned num    
514 this as a non-static configuration (see above)    
515                                                   
516                                                   
517 SPI Host Controller Methods                       
518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^                       
519                                                   
520 ``ctlr->setup(struct spi_device *spi)``           
521         This sets up the device clock rate, SP    
522         Drivers may change the defaults provid    
523         call spi_setup(spi) to invoke this rou    
524                                                   
525         Unless each SPI target has its own con    
526         change them right away ... otherwise d    
527         that's in progress for other SPI devic    
528                                                   
529         .. note::                                 
530                                                   
531                 BUG ALERT:  for some reason th    
532                 many spi_controller drivers se    
533                 When you code setup(), ASSUME     
534                 is actively processing transfe    
535                                                   
536 ``ctlr->cleanup(struct spi_device *spi)``         
537         Your controller driver may use spi_dev    
538         state it dynamically associates with t    
539         be sure to provide the cleanup() metho    
540                                                   
541 ``ctlr->prepare_transfer_hardware(struct spi_c    
542         This will be called by the queue mecha    
543         that a message is coming in soon, so t    
544         driver to prepare the transfer hardwar    
545         This may sleep.                           
546                                                   
547 ``ctlr->unprepare_transfer_hardware(struct spi    
548         This will be called by the queue mecha    
549         that there are no more messages pendin    
550         relax the hardware (e.g. by power mana    
551                                                   
552 ``ctlr->transfer_one_message(struct spi_contro    
553         The subsystem calls the driver to tran    
554         queuing transfers that arrive in the m    
555         finished with this message, it must ca    
556         spi_finalize_current_message() so the     
557         message. This may sleep.                  
558                                                   
559 ``ctrl->transfer_one(struct spi_controller *ct    
560         The subsystem calls the driver to tran    
561         queuing transfers that arrive in the m    
562         finished with this transfer, it must c    
563         spi_finalize_current_transfer() so the    
564         transfer. This may sleep. Note: transf    
565         are mutually exclusive; when both are     
566         not call your transfer_one callback.      
567                                                   
568         Return values:                            
569                                                   
570         * negative errno: error                   
571         * 0: transfer is finished                 
572         * 1: transfer is still in progress        
573                                                   
574 ``ctrl->set_cs_timing(struct spi_device *spi,     
575         This method allows SPI client drivers     
576         for configuring device specific CS set    
577         requirements.                             
578                                                   
579 Deprecated Methods                                
580 ^^^^^^^^^^^^^^^^^^                                
581                                                   
582 ``ctrl->transfer(struct spi_device *spi, struc    
583         This must not sleep. Its responsibilit    
584         transfer happens and its complete() ca    
585         will normally happen later, after othe    
586         if the controller is idle it will need    
587         method is not used on queued controlle    
588         transfer_one_message() and (un)prepare    
589         implemented.                              
590                                                   
591                                                   
592 SPI Message Queue                                 
593 ^^^^^^^^^^^^^^^^^                                 
594                                                   
595 If you are happy with the standard queueing me    
596 SPI subsystem, just implement the queued metho    
597 the message queue has the upside of centralizi    
598 providing pure process-context execution of me    
599 can also be elevated to realtime priority on h    
600                                                   
601 Unless the queueing mechanism in the SPI subsy    
602 of the driver will be managing the I/O queue f    
603 function transfer().                              
604                                                   
605 That queue could be purely conceptual.  For ex    
606 for low-frequency sensor access might be fine     
607                                                   
608 But the queue will probably be very real, usin    
609 often DMA (especially if the root filesystem i    
610 execution contexts like IRQ handlers, tasklets    
611 as keventd).  Your driver can be as fancy, or     
612 Such a transfer() method would normally just a    
613 queue, and then start some asynchronous transf    
614 already running).                                 
615                                                   
616                                                   
617 Extensions to the SPI protocol                    
618 ------------------------------                    
619 The fact that SPI doesn't have a formal specif    
620 manufacturers to implement the SPI protocol in    
621 cases, SPI protocol implementations from diffe    
622 each other. For example, in SPI mode 0 (CPOL=0    
623 like the following:                               
624                                                   
625 ::                                                
626                                                   
627   nCSx ___                                        
628           \___________________________________    
629   
630   
631   SCLK         ___     ___     ___     ___        
632        _______/   \___/   \___/   \___/   \___    
633           •   :   ;   :   ;   :   ;   :   ;     
634           •   :   ;   :   ;   :   ;   :   ;     
635   MOSI XXX__________         _______              
636   0xA5 XXX__/ 1     \_0_____/ 1     \_0_______    
637           •       ;       ;       ;       ;     
638           •       ;       ;       ;       ;     
639   MISO XXX__________         _________________    
640   0xBA XXX__/     1 \_____0_/     1       1       
641                                                   
642 Legend::                                          
643                                                   
644   • marks the start/end of transmission;        
645   : marks when data is clocked into the periph    
646   ; marks when data is clocked into the contro    
647   X marks when line states are not specified.     
648                                                   
649 In some few cases, chips extend the SPI protoc    
650 that other SPI protocols don't (e.g. data line    
651 asserted). Those distinct SPI protocols, modes    
652 by different SPI mode flags.                      
653                                                   
654 MOSI idle state configuration                     
655 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                     
656                                                   
657 Common SPI protocol implementations don't spec    
658 MOSI line when the controller is not clocking     
659 peripherals that require specific MOSI line st    
660 out. For example, if the peripheral expects th    
661 controller is not clocking out data (``SPI_MOS    
662 SPI mode 0 would look like the following:         
663                                                   
664 ::                                                
665                                                   
666   nCSx ___                                        
667           \___________________________________    
668   
669   
670   SCLK         ___     ___     ___     ___        
671        _______/   \___/   \___/   \___/   \___    
672           •   :   ;   :   ;   :   ;   :   ;     
673           •   :   ;   :   ;   :   ;   :   ;     
674   MOSI _____         _______         _______      
675   0x56      \_0_____/ 1     \_0_____/ 1     \_    
676           •       ;       ;       ;       ;     
677           •       ;       ;       ;       ;     
678   MISO XXX__________         _________________    
679   0xBA XXX__/     1 \_____0_/     1       1       
680                                                   
681 Legend::                                          
682                                                   
683   • marks the start/end of transmission;        
684   : marks when data is clocked into the periph    
685   ; marks when data is clocked into the contro    
686   X marks when line states are not specified.     
687                                                   
688 In this extension to the usual SPI protocol, t    
689 be kept high when CS is asserted but the contr    
690 the peripheral and also when CS is not asserte    
691                                                   
692 Peripherals that require this extension must r    
693 ``SPI_MOSI_IDLE_HIGH`` bit into the mode attri    
694 spi_device`` and call spi_setup(). Controllers    
695 should indicate it by setting ``SPI_MOSI_IDLE_    
696 of their ``struct spi_controller``. The config    
697 analogous but uses the ``SPI_MOSI_IDLE_LOW`` m    
698                                                   
699                                                   
700 THANKS TO                                         
701 ---------                                         
702 Contributors to Linux-SPI discussions include     
703 by last name):                                    
704                                                   
705 - Mark Brown                                      
706 - David Brownell                                  
707 - Russell King                                    
708 - Grant Likely                                    
709 - Dmitry Pervushin                                
710 - Stephen Street                                  
711 - Mark Underwood                                  
712 - Andrew Victor                                   
713 - Linus Walleij                                   
714 - Vitaly Wool                                     
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php