€•IŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ"/translations/zh_CN/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/zh_TW/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/it_IT/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ja_JP/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ko_KR/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/pt_BR/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/sp_SP/driver-api/spi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ!Serial Peripheral Interface (SPI)”h]”hŒ!Serial Peripheral Interface (SPI)”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ`. SPI devices are children of that master, represented as a :c:type:`struct spi_device ` and manufactured from :c:type:`struct spi_board_info ` descriptors which are usually provided by board-specific initialization code. A :c:type:`struct spi_driver ` is called a "Protocol Driver", and is bound to a spi_device using normal driver model calls.”h]”(hXÏThe programming interface is structured around two kinds of driver, and two kinds of device. A “Controller Driverâ€� abstracts the controller hardware, which may be as simple as a set of GPIO pins or as complex as a pair of FIFOs connected to dual DMA engines on the other side of the SPI shift register (maximizing throughput). Such drivers bridge between whatever bus they sit on (often the platform bus) and SPI, and expose the SPI side of their device as a ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ0:c:type:`struct spi_controller `”h]”hŒliteral”“”)�”}”(hhóh]”hŒstruct spi_controller”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1hõhhñubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/spi”Œ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ reftarget”Œspi_controller”uh1hh³hÊh´KhhéubhŒ<. SPI devices are children of that master, represented as a ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct spi_device `”h]”hö)�”}”(hjh]”hŒstruct spi_device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ spi_device”uh1hh³hÊh´KhhéubhŒ and manufactured from ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ0:c:type:`struct spi_board_info `”h]”hö)�”}”(hj?h]”hŒstruct spi_board_info”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhj=ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒspi_board_info”uh1hh³hÊh´KhhéubhŒQ descriptors which are usually provided by board-specific initialization code. A ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct spi_driver `”h]”hö)�”}”(hjbh]”hŒstruct spi_driver”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhj`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ spi_driver”uh1hh³hÊh´KhhéubhŒa is called a “Protocol Driverâ€�, and is bound to a spi_device using normal driver model calls.”…”�”}”(hhéh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hXThe I/O model is a set of queued messages. Protocol drivers submit one or more :c:type:`struct spi_message ` objects, which are processed and completed asynchronously. (There are synchronous wrappers, however.) Messages are built from one or more :c:type:`struct spi_transfer ` objects, each of which wraps a full duplex SPI transfer. A variety of protocol tweaking options are needed, because different chips adopt very different policies for how they use the bits transferred with SPI.”h]”(hŒOThe I/O model is a set of queued messages. Protocol drivers submit one or more ”…”�”}”(hj‰h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct spi_message `”h]”hö)�”}”(hj“h]”hŒstruct spi_message”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ spi_message”uh1hh³hÊh´K%hj‰ubhŒ‹ objects, which are processed and completed asynchronously. (There are synchronous wrappers, however.) Messages are built from one or more ”…”�”}”(hj‰h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct spi_transfer `”h]”hö)�”}”(hj¶h]”hŒstruct spi_transfer”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhj´ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ spi_transfer”uh1hh³hÊh´K%hj‰ubhŒÒ objects, each of which wraps a full duplex SPI transfer. A variety of protocol tweaking options are needed, because different chips adopt very different policies for how they use the bits transferred with SPI.”…”�”}”(hj‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K%hh·h²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œspi_statistics (C struct)”Œc.spi_statistics”hNt”auh1jÝhh·h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒspi_statistics”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct spi_statistics”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jhjüh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhjüh²hh³jh´KubhŒ desc_name”“”)�”}”(hŒspi_statistics”h]”hŒ desc_sig_name”“”)�”}”(hjøh]”hŒspi_statistics”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j)hj%ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j#hjüh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jAjBŒ add_permalink”ˆuh1júŒsphinx_line_type”Œ declarator”hjöh²hh³jh´Kubah}”(h]”jìah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jôh³jh´Khjñh²hubhŒ desc_content”“”)�”}”(hhh]”hÌ)�”}”(hŒstatistics for spi transfers”h]”hŒstatistics for spi transfers”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K1hjYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjñh²hh³jh´Kubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”Œdomain”jŒobjtype”jtŒdesctype”jtŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jïh²hhh·h³jîh´NubhŒ container”“”)�”}”(hXW**Definition**:: struct spi_statistics { struct u64_stats_sync syncp; u64_stats_t messages; u64_stats_t transfers; u64_stats_t errors; u64_stats_t timedout; u64_stats_t spi_sync; u64_stats_t spi_sync_immediate; u64_stats_t spi_async; u64_stats_t bytes; u64_stats_t bytes_rx; u64_stats_t bytes_tx; #define SPI_STATISTICS_HISTO_SIZE 17; u64_stats_t transfer_bytes_histo[SPI_STATISTICS_HISTO_SIZE]; u64_stats_t transfers_split_maxsize; }; **Members** ``syncp`` seqcount to protect members in this struct for per-cpu update on 32-bit systems ``messages`` number of spi-messages handled ``transfers`` number of spi_transfers handled ``errors`` number of errors during spi_transfer ``timedout`` number of timeouts during spi_transfer ``spi_sync`` number of times spi_sync is used ``spi_sync_immediate`` number of times spi_sync is executed immediately in calling context without queuing and scheduling ``spi_async`` number of times spi_async is used ``bytes`` number of bytes transferred to/from device ``bytes_rx`` number of bytes received from device ``bytes_tx`` number of bytes sent to device ``transfer_bytes_histo`` transfer bytes histogram ``transfers_split_maxsize`` number of transfers that have been split because of maxsize limit”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj„ubhŒ:”…”�”}”(hj„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K5hj€ubhŒ literal_block”“”)�”}”(hXØstruct spi_statistics { struct u64_stats_sync syncp; u64_stats_t messages; u64_stats_t transfers; u64_stats_t errors; u64_stats_t timedout; u64_stats_t spi_sync; u64_stats_t spi_sync_immediate; u64_stats_t spi_async; u64_stats_t bytes; u64_stats_t bytes_rx; u64_stats_t bytes_tx; #define SPI_STATISTICS_HISTO_SIZE 17; u64_stats_t transfer_bytes_histo[SPI_STATISTICS_HISTO_SIZE]; u64_stats_t transfers_split_maxsize; };”h]”hXØstruct spi_statistics { struct u64_stats_sync syncp; u64_stats_t messages; u64_stats_t transfers; u64_stats_t errors; u64_stats_t timedout; u64_stats_t spi_sync; u64_stats_t spi_sync_immediate; u64_stats_t spi_async; u64_stats_t bytes; u64_stats_t bytes_rx; u64_stats_t bytes_tx; #define SPI_STATISTICS_HISTO_SIZE 17; u64_stats_t transfer_bytes_histo[SPI_STATISTICS_HISTO_SIZE]; u64_stats_t transfers_split_maxsize; };”…”�”}”hj¥sbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K7hj€ubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hj¶h]”hŒMembers”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KHhj€ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒZ``syncp`` seqcount to protect members in this struct for per-cpu update on 32-bit systems ”h]”(hŒterm”“”)�”}”(hŒ ``syncp``”h]”hö)�”}”(hjÛh]”hŒsyncp”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K4hjÓubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒOseqcount to protect members in this struct for per-cpu update on 32-bit systems”h]”hŒOseqcount to protect members in this struct for per-cpu update on 32-bit systems”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K3hjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jðh´K4hjÎubjÒ)�”}”(hŒ,``messages`` number of spi-messages handled ”h]”(jØ)�”}”(hŒ ``messages``”h]”hö)�”}”(hjh]”hŒmessages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K6hjubjò)�”}”(hhh]”hÌ)�”}”(hŒnumber of spi-messages handled”h]”hŒnumber of spi-messages handled”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j,h´K6hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j,h´K6hjÎubjÒ)�”}”(hŒ.``transfers`` number of spi_transfers handled ”h]”(jØ)�”}”(hŒ ``transfers``”h]”hö)�”}”(hjPh]”hŒ transfers”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K7hjJubjò)�”}”(hhh]”hÌ)�”}”(hŒnumber of spi_transfers handled”h]”hŒnumber of spi_transfers handled”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jeh´K7hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jeh´K7hjÎubjÒ)�”}”(hŒ0``errors`` number of errors during spi_transfer ”h]”(jØ)�”}”(hŒ ``errors``”h]”hö)�”}”(hj‰h]”hŒerrors”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K8hjƒubjò)�”}”(hhh]”hÌ)�”}”(hŒ$number of errors during spi_transfer”h]”hŒ$number of errors during spi_transfer”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jžh´K8hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jžh´K8hjÎubjÒ)�”}”(hŒ4``timedout`` number of timeouts during spi_transfer ”h]”(jØ)�”}”(hŒ ``timedout``”h]”hö)�”}”(hjÂh]”hŒtimedout”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K9hj¼ubjò)�”}”(hhh]”hÌ)�”}”(hŒ&number of timeouts during spi_transfer”h]”hŒ&number of timeouts during spi_transfer”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j×h´K9hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j×h´K9hjÎubjÒ)�”}”(hŒ.``spi_sync`` number of times spi_sync is used ”h]”(jØ)�”}”(hŒ ``spi_sync``”h]”hö)�”}”(hjûh]”hŒspi_sync”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K;hjõubjò)�”}”(hhh]”hÌ)�”}”(hŒ number of times spi_sync is used”h]”hŒ number of times spi_sync is used”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´K;hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh´K;hjÎubjÒ)�”}”(hŒz``spi_sync_immediate`` number of times spi_sync is executed immediately in calling context without queuing and scheduling ”h]”(jØ)�”}”(hŒ``spi_sync_immediate``”h]”hö)�”}”(hj4h]”hŒspi_sync_immediate”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K=hj.ubjò)�”}”(hhh]”hÌ)�”}”(hŒbnumber of times spi_sync is executed immediately in calling context without queuing and scheduling”h]”hŒbnumber of times spi_sync is executed immediately in calling context without queuing and scheduling”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Kjzj>j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX**Definition**:: struct spi_delay { #define SPI_DELAY_UNIT_USECS 0; #define SPI_DELAY_UNIT_NSECS 1; #define SPI_DELAY_UNIT_SCK 2; u16 value; u8 unit; }; **Members** ``value`` Value for the delay ``unit`` Unit for the delay”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjFubhŒ:”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K|hjBubj¤)�”}”(hŒšstruct spi_delay { #define SPI_DELAY_UNIT_USECS 0; #define SPI_DELAY_UNIT_NSECS 1; #define SPI_DELAY_UNIT_SCK 2; u16 value; u8 unit; };”h]”hŒšstruct spi_delay { #define SPI_DELAY_UNIT_USECS 0; #define SPI_DELAY_UNIT_NSECS 1; #define SPI_DELAY_UNIT_SCK 2; u16 value; u8 unit; };”…”�”}”hjcsbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K~hjBubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hjth]”hŒMembers”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K†hjBubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ``value`` Value for the delay ”h]”(jØ)�”}”(hŒ ``value``”h]”hö)�”}”(hj“h]”hŒvalue”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Kzhj�ubjò)�”}”(hhh]”hÌ)�”}”(hŒValue for the delay”h]”hŒValue for the delay”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¨h´Kzhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¨h´KzhjŠubjÒ)�”}”(hŒ``unit`` Unit for the delay”h]”(jØ)�”}”(hŒ``unit``”h]”hö)�”}”(hjÌh]”hŒunit”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KzhjÆubjò)�”}”(hhh]”hÌ)�”}”(hŒUnit for the delay”h]”hŒUnit for the delay”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K{hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jáh´KzhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_device (C struct)”Œ c.spi_device”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ spi_device”h]”jû)�”}”(hŒstruct spi_device”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj"h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"h²hh³j3h´K�ubj$)�”}”(hŒ spi_device”h]”j*)�”}”(hj h]”hŒ spi_device”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjBubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj"h²hh³j3h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjh²hh³j3h´K�ubah}”(h]”jah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j3h´K�hjh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ.Controller side proxy for an SPI target device”h]”hŒ.Controller side proxy for an SPI target device”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KŠhjeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjh²hh³j3h´K�ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj€jzj€j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX0**Definition**:: struct spi_device { struct device dev; struct spi_controller *controller; u32 max_speed_hz; u8 bits_per_word; bool rt; #define SPI_NO_TX BIT(31) ; #define SPI_NO_RX BIT(30) ; #define SPI_TPM_HW_FLOW BIT(29) ; #define SPI_MODE_KERNEL_MASK (~(BIT(29) - 1)); u32 mode; int irq; void *controller_state; void *controller_data; char modalias[SPI_NAME_SIZE]; struct spi_statistics __percpu *pcpu_statistics; struct spi_delay word_delay; struct spi_delay cs_setup; struct spi_delay cs_hold; struct spi_delay cs_inactive; u32 rx_sample_delay_ns; u8 chip_select[SPI_DEVICE_CS_CNT_MAX]; u8 num_chipselect; u32 cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct gpio_desc *cs_gpiod[SPI_DEVICE_CS_CNT_MAX]; u8 tx_lane_map[SPI_DEVICE_DATA_LANE_CNT_MAX]; u8 num_tx_lanes; u8 rx_lane_map[SPI_DEVICE_DATA_LANE_CNT_MAX]; u8 num_rx_lanes; #if IS_ENABLED(CONFIG_SPI_DYNAMIC); struct list_head userspace_node; #endif; }; **Members** ``dev`` Driver model representation of the device. ``controller`` SPI controller used with the device. ``max_speed_hz`` Maximum clock rate to be used with this chip (on this board); may be changed by the device's driver. The spi_transfer.speed_hz can override this for each transfer. ``bits_per_word`` Data transfers involve one or more words; word sizes like eight or 12 bits are common. In-memory wordsizes are powers of two bytes (e.g. 20 bit samples use 32 bits). This may be changed by the device's driver, or left at the default (0) indicating protocol words are eight bit bytes. The spi_transfer.bits_per_word can override this for each transfer. ``rt`` Make the pump thread real time priority. ``mode`` The spi mode defines how data is clocked out and in. This may be changed by the device's driver. The "active low" default for chipselect mode can be overridden (by specifying SPI_CS_HIGH) as can the "MSB first" default for each word in a transfer (by specifying SPI_LSB_FIRST). ``irq`` Negative, or the number passed to request_irq() to receive interrupts from this device. ``controller_state`` Controller's runtime state ``controller_data`` Board-specific definitions for controller, such as FIFO initialization parameters; from board_info.controller_data ``modalias`` Name of the driver to use with this device, or an alias for that name. This appears in the sysfs "modalias" attribute for driver coldplugging, and in uevents used for hotplugging ``pcpu_statistics`` statistics for the spi_device ``word_delay`` delay to be inserted between consecutive words of a transfer ``cs_setup`` delay to be introduced by the controller after CS is asserted ``cs_hold`` delay to be introduced by the controller before CS is deasserted ``cs_inactive`` delay to be introduced by the controller after CS is deasserted. If **cs_change_delay** is used from **spi_transfer**, then the two delays will be added up. ``rx_sample_delay_ns`` Delay in nanoseconds by which the controller should postpone sampling the incoming data, relative to the sampling point it uses by default. Describes the board rather than the device, namely the flight time of the clock and data signals between controller and device, and comes from the "rx-sample-delay-ns" property. Zero when the property is absent. ``chip_select`` Array of physical chipselect, spi->chipselect[i] gives the corresponding physical CS for logical CS i. ``num_chipselect`` Number of physical chipselects used. ``cs_index_mask`` Bit mask of the active chipselect(s) in the chipselect array ``cs_gpiod`` Array of GPIO descriptors of the corresponding chipselect lines (optional, NULL when not using a GPIO line) ``tx_lane_map`` Map of peripheral lanes (index) to controller lanes (value). ``num_tx_lanes`` Number of transmit lanes wired up. ``rx_lane_map`` Map of peripheral lanes (index) to controller lanes (value). ``num_rx_lanes`` Number of receive lanes wired up. ``userspace_node`` entry on the parent controller's userspace_clients list when this device was instantiated via the sysfs new_device interface”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjˆubhŒ:”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KŽhj„ubj¤)�”}”(hXXstruct spi_device { struct device dev; struct spi_controller *controller; u32 max_speed_hz; u8 bits_per_word; bool rt; #define SPI_NO_TX BIT(31) ; #define SPI_NO_RX BIT(30) ; #define SPI_TPM_HW_FLOW BIT(29) ; #define SPI_MODE_KERNEL_MASK (~(BIT(29) - 1)); u32 mode; int irq; void *controller_state; void *controller_data; char modalias[SPI_NAME_SIZE]; struct spi_statistics __percpu *pcpu_statistics; struct spi_delay word_delay; struct spi_delay cs_setup; struct spi_delay cs_hold; struct spi_delay cs_inactive; u32 rx_sample_delay_ns; u8 chip_select[SPI_DEVICE_CS_CNT_MAX]; u8 num_chipselect; u32 cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct gpio_desc *cs_gpiod[SPI_DEVICE_CS_CNT_MAX]; u8 tx_lane_map[SPI_DEVICE_DATA_LANE_CNT_MAX]; u8 num_tx_lanes; u8 rx_lane_map[SPI_DEVICE_DATA_LANE_CNT_MAX]; u8 num_rx_lanes; #if IS_ENABLED(CONFIG_SPI_DYNAMIC); struct list_head userspace_node; #endif; };”h]”hXXstruct spi_device { struct device dev; struct spi_controller *controller; u32 max_speed_hz; u8 bits_per_word; bool rt; #define SPI_NO_TX BIT(31) ; #define SPI_NO_RX BIT(30) ; #define SPI_TPM_HW_FLOW BIT(29) ; #define SPI_MODE_KERNEL_MASK (~(BIT(29) - 1)); u32 mode; int irq; void *controller_state; void *controller_data; char modalias[SPI_NAME_SIZE]; struct spi_statistics __percpu *pcpu_statistics; struct spi_delay word_delay; struct spi_delay cs_setup; struct spi_delay cs_hold; struct spi_delay cs_inactive; u32 rx_sample_delay_ns; u8 chip_select[SPI_DEVICE_CS_CNT_MAX]; u8 num_chipselect; u32 cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct gpio_desc *cs_gpiod[SPI_DEVICE_CS_CNT_MAX]; u8 tx_lane_map[SPI_DEVICE_DATA_LANE_CNT_MAX]; u8 num_tx_lanes; u8 rx_lane_map[SPI_DEVICE_DATA_LANE_CNT_MAX]; u8 num_rx_lanes; #if IS_ENABLED(CONFIG_SPI_DYNAMIC); struct list_head userspace_node; #endif; };”…”�”}”hj¥sbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K�hj„ubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hj¶h]”hŒMembers”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K²hj„ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ3``dev`` Driver model representation of the device. ”h]”(jØ)�”}”(hŒ``dev``”h]”hö)�”}”(hjÕh]”hŒdev”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KŒhjÏubjò)�”}”(hhh]”hÌ)�”}”(hŒ*Driver model representation of the device.”h]”hŒ*Driver model representation of the device.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jêh´KŒhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jêh´KŒhjÌubjÒ)�”}”(hŒ4``controller`` SPI controller used with the device. ”h]”(jØ)�”}”(hŒ``controller``”h]”hö)�”}”(hjh]”hŒ controller”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K�hjubjò)�”}”(hhh]”hÌ)�”}”(hŒ$SPI controller used with the device.”h]”hŒ$SPI controller used with the device.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j#h´K�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j#h´K�hjÌubjÒ)�”}”(hŒµ``max_speed_hz`` Maximum clock rate to be used with this chip (on this board); may be changed by the device's driver. The spi_transfer.speed_hz can override this for each transfer. ”h]”(jØ)�”}”(hŒ``max_speed_hz``”h]”hö)�”}”(hjGh]”hŒ max_speed_hz”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K�hjAubjò)�”}”(hhh]”hÌ)�”}”(hŒ£Maximum clock rate to be used with this chip (on this board); may be changed by the device's driver. The spi_transfer.speed_hz can override this for each transfer.”h]”hŒ¥Maximum clock rate to be used with this chip (on this board); may be changed by the device’s driver. The spi_transfer.speed_hz can override this for each transfer.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KŽhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j\h´K�hjÌubjÒ)�”}”(hXs``bits_per_word`` Data transfers involve one or more words; word sizes like eight or 12 bits are common. In-memory wordsizes are powers of two bytes (e.g. 20 bit samples use 32 bits). This may be changed by the device's driver, or left at the default (0) indicating protocol words are eight bit bytes. The spi_transfer.bits_per_word can override this for each transfer. ”h]”(jØ)�”}”(hŒ``bits_per_word``”h]”hö)�”}”(hj�h]”hŒ bits_per_word”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K–hj{ubjò)�”}”(hhh]”hÌ)�”}”(hX`Data transfers involve one or more words; word sizes like eight or 12 bits are common. In-memory wordsizes are powers of two bytes (e.g. 20 bit samples use 32 bits). This may be changed by the device's driver, or left at the default (0) indicating protocol words are eight bit bytes. The spi_transfer.bits_per_word can override this for each transfer.”h]”hXbData transfers involve one or more words; word sizes like eight or 12 bits are common. In-memory wordsizes are powers of two bytes (e.g. 20 bit samples use 32 bits). This may be changed by the device’s driver, or left at the default (0) indicating protocol words are eight bit bytes. The spi_transfer.bits_per_word can override this for each transfer.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K‘hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j–h´K–hjÌubjÒ)�”}”(hŒ0``rt`` Make the pump thread real time priority. ”h]”(jØ)�”}”(hŒ``rt``”h]”hö)�”}”(hj»h]”hŒrt”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K—hjµubjò)�”}”(hhh]”hÌ)�”}”(hŒ(Make the pump thread real time priority.”h]”hŒ(Make the pump thread real time priority.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÐh´K—hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÐh´K—hjÌubjÒ)�”}”(hX``mode`` The spi mode defines how data is clocked out and in. This may be changed by the device's driver. The "active low" default for chipselect mode can be overridden (by specifying SPI_CS_HIGH) as can the "MSB first" default for each word in a transfer (by specifying SPI_LSB_FIRST). ”h]”(jØ)�”}”(hŒ``mode``”h]”hö)�”}”(hjôh]”hŒmode”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Kœhjîubjò)�”}”(hhh]”hÌ)�”}”(hXThe spi mode defines how data is clocked out and in. This may be changed by the device's driver. The "active low" default for chipselect mode can be overridden (by specifying SPI_CS_HIGH) as can the "MSB first" default for each word in a transfer (by specifying SPI_LSB_FIRST).”h]”hXThe spi mode defines how data is clocked out and in. This may be changed by the device’s driver. The “active lowâ€� default for chipselect mode can be overridden (by specifying SPI_CS_HIGH) as can the “MSB firstâ€� default for each word in a transfer (by specifying SPI_LSB_FIRST).”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K˜hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j h´KœhjÌubjÒ)�”}”(hŒ```irq`` Negative, or the number passed to request_irq() to receive interrupts from this device. ”h]”(jØ)�”}”(hŒ``irq``”h]”hö)�”}”(hj. h]”hŒirq”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj, ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Kžhj( ubjò)�”}”(hhh]”hÌ)�”}”(hŒWNegative, or the number passed to request_irq() to receive interrupts from this device.”h]”hŒWNegative, or the number passed to request_irq() to receive interrupts from this device.”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K�hjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj( ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jC h´KžhjÌubjÒ)�”}”(hŒ0``controller_state`` Controller's runtime state ”h]”(jØ)�”}”(hŒ``controller_state``”h]”hö)�”}”(hjh h]”hŒcontroller_state”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjf ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KŸhjb ubjò)�”}”(hhh]”hÌ)�”}”(hŒController's runtime state”h]”hŒController’s runtime state”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j} h´KŸhj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjb ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j} h´KŸhjÌubjÒ)�”}”(hŒ‡``controller_data`` Board-specific definitions for controller, such as FIFO initialization parameters; from board_info.controller_data ”h]”(jØ)�”}”(hŒ``controller_data``”h]”hö)�”}”(hj¡ h]”hŒcontroller_data”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¡hj› ubjò)�”}”(hhh]”hÌ)�”}”(hŒrBoard-specific definitions for controller, such as FIFO initialization parameters; from board_info.controller_data”h]”hŒrBoard-specific definitions for controller, such as FIFO initialization parameters; from board_info.controller_data”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K hj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj› ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¶ h´K¡hjÌubjÒ)�”}”(hŒÁ``modalias`` Name of the driver to use with this device, or an alias for that name. This appears in the sysfs "modalias" attribute for driver coldplugging, and in uevents used for hotplugging ”h]”(jØ)�”}”(hŒ ``modalias``”h]”hö)�”}”(hjÛ h]”hŒmodalias”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¤hjÕ ubjò)�”}”(hhh]”hÌ)�”}”(hŒ³Name of the driver to use with this device, or an alias for that name. This appears in the sysfs "modalias" attribute for driver coldplugging, and in uevents used for hotplugging”h]”hŒ·Name of the driver to use with this device, or an alias for that name. This appears in the sysfs “modaliasâ€� attribute for driver coldplugging, and in uevents used for hotplugging”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¢hjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÕ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jð h´K¤hjÌubjÒ)�”}”(hŒ2``pcpu_statistics`` statistics for the spi_device ”h]”(jØ)�”}”(hŒ``pcpu_statistics``”h]”hö)�”}”(hj h]”hŒpcpu_statistics”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¥hj ubjò)�”}”(hhh]”hÌ)�”}”(hŒstatistics for the spi_device”h]”hŒstatistics for the spi_device”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j* h´K¥hj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j* h´K¥hjÌubjÒ)�”}”(hŒL``word_delay`` delay to be inserted between consecutive words of a transfer ”h]”(jØ)�”}”(hŒ``word_delay``”h]”hö)�”}”(hjN h]”hŒ word_delay”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjL ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K§hjH ubjò)�”}”(hhh]”hÌ)�”}”(hŒchipselect[i] gives the corresponding physical CS for logical CS i. ”h]”(jØ)�”}”(hŒ``chip_select``”h]”hö)�”}”(hj’ h]”hŒ chip_select”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K´hjŒ ubjò)�”}”(hhh]”hÌ)�”}”(hŒfArray of physical chipselect, spi->chipselect[i] gives the corresponding physical CS for logical CS i.”h]”hŒfArray of physical chipselect, spi->chipselect[i] gives the corresponding physical CS for logical CS i.”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K³hj¨ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjŒ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j§ h´K´hjÌubjÒ)�”}”(hŒ8``num_chipselect`` Number of physical chipselects used. ”h]”(jØ)�”}”(hŒ``num_chipselect``”h]”hö)�”}”(hjÌ h]”hŒnum_chipselect”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´KµhjÆ ubjò)�”}”(hhh]”hÌ)�”}”(hŒ$Number of physical chipselects used.”h]”hŒ$Number of physical chipselects used.”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³já h´Kµhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³já h´KµhjÌubjÒ)�”}”(hŒO``cs_index_mask`` Bit mask of the active chipselect(s) in the chipselect array ”h]”(jØ)�”}”(hŒ``cs_index_mask``”h]”hö)�”}”(hj h]”hŒ cs_index_mask”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¶hjÿ ubjò)�”}”(hhh]”hÌ)�”}”(hŒ h]”hŒcs_gpiod”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¸hj8 ubjò)�”}”(hhh]”hÌ)�”}”(hŒkArray of GPIO descriptors of the corresponding chipselect lines (optional, NULL when not using a GPIO line)”h]”hŒkArray of GPIO descriptors of the corresponding chipselect lines (optional, NULL when not using a GPIO line)”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K·hjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jS h´K¸hjÌubjÒ)�”}”(hŒM``tx_lane_map`` Map of peripheral lanes (index) to controller lanes (value). ”h]”(jØ)�”}”(hŒ``tx_lane_map``”h]”hö)�”}”(hjx h]”hŒ tx_lane_map”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´K¹hjr ubjò)�”}”(hhh]”hÌ)�”}”(hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj"ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj‚h]”hŒContext”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MŠhj"ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‰hj"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒmodule_spi_driver (C macro)”Œc.module_spi_driver”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒmodule_spi_driver”h]”jû)�”}”(hŒmodule_spi_driver”h]”j$)�”}”(hŒmodule_spi_driver”h]”j*)�”}”(hjÁh]”hŒmodule_spi_driver”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÇubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÃh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M™ubah}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj¿h²hh³jÞh´M™ubah}”(h]”jºah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jÞh´M™hj¼h²hubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¼h²hh³jÞh´M™ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jxjjyj÷jzj÷j{‰j|‰j}‰uh1jïh²hhh·h³jîh´NubhÌ)�”}”(hŒ$``module_spi_driver (__spi_driver)``”h]”hö)�”}”(hjýh]”hŒ module_spi_driver (__spi_driver)”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M›hh·h²hubhŒ block_quote”“”)�”}”(hŒ*Helper macro for registering a SPI driver ”h]”hÌ)�”}”(hŒ)Helper macro for registering a SPI driver”h]”hŒ)Helper macro for registering a SPI driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M™hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'h´M™hh·h²hubj)�”}”(hX!**Parameters** ``__spi_driver`` spi_driver struct **Description** Helper macro for SPI drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj4h]”hŒ Parameters”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hj.ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ#``__spi_driver`` spi_driver struct ”h]”(jØ)�”}”(hŒ``__spi_driver``”h]”hö)�”}”(hjSh]”hŒ __spi_driver”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MšhjMubjò)�”}”(hhh]”hÌ)�”}”(hŒspi_driver struct”h]”hŒspi_driver struct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jhh´Mšhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jhh´MšhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj.ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjŽh]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mœhj.ubhÌ)�”}”(hŒÚHelper macro for SPI drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()”h]”hŒÚHelper macro for SPI drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M›hj.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_controller (C struct)”Œc.spi_controller”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒspi_controller”h]”jû)�”}”(hŒstruct spi_controller”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÏh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏh²hh³jàh´M¢ubj$)�”}”(hŒspi_controller”h]”j*)�”}”(hjÍh]”hŒspi_controller”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjïubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÏh²hh³jàh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjËh²hh³jàh´M¢ubah}”(h]”jÆah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jàh´M¢hjÈh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ*interface to SPI host or target controller”h]”hŒ*interface to SPI host or target controller”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¥hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÈh²hh³jàh´M¢ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj-jzj-j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXÌ2**Definition**:: struct spi_controller { struct device dev; struct list_head list; s16 bus_num; u16 num_chipselect; u16 num_data_lanes; u16 dma_alignment; u32 mode_bits; u32 buswidth_override_bits; u32 bits_per_word_mask; #define SPI_BPW_MASK(bits) BIT((bits) - 1); #define SPI_BPW_RANGE_MASK(min, max) GENMASK((max) - 1, (min) - 1); u32 min_speed_hz; u32 max_speed_hz; u16 flags; #define SPI_CONTROLLER_HALF_DUPLEX BIT(0) ; #define SPI_CONTROLLER_NO_RX BIT(1) ; #define SPI_CONTROLLER_NO_TX BIT(2) ; #define SPI_CONTROLLER_MUST_RX BIT(3) ; #define SPI_CONTROLLER_MUST_TX BIT(4) ; #define SPI_CONTROLLER_GPIO_SS BIT(5) ; #define SPI_CONTROLLER_SUSPENDED BIT(6) ; #define SPI_CONTROLLER_MULTI_CS BIT(7); union { bool slave; bool target; }; size_t (*max_transfer_size)(struct spi_device *spi); size_t (*max_message_size)(struct spi_device *spi); struct mutex io_mutex; struct mutex add_lock; spinlock_t bus_lock_spinlock; struct mutex bus_lock_mutex; bool bus_lock_flag; int (*setup)(struct spi_device *spi); int (*set_cs_timing)(struct spi_device *spi); int (*transfer)(struct spi_device *spi, struct spi_message *mesg); void (*cleanup)(struct spi_device *spi); bool (*can_dma)(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *xfer); struct device *dma_map_dev; struct device *cur_rx_dma_dev; struct device *cur_tx_dma_dev; bool queued; struct kthread_worker *kworker; struct kthread_work pump_messages; spinlock_t queue_lock; struct list_head queue; struct spi_message *cur_msg; struct completion cur_msg_completion; bool cur_msg_incomplete; bool cur_msg_need_completion; bool busy; bool running; bool rt; bool auto_runtime_pm; bool fallback; bool last_cs_mode_high; s8 last_cs[SPI_DEVICE_CS_CNT_MAX]; u32 last_cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct completion xfer_completion; size_t max_dma_len; int (*optimize_message)(struct spi_message *msg); int (*unoptimize_message)(struct spi_message *msg); int (*prepare_transfer_hardware)(struct spi_controller *ctlr); int (*transfer_one_message)(struct spi_controller *ctlr, struct spi_message *mesg); int (*unprepare_transfer_hardware)(struct spi_controller *ctlr); int (*prepare_message)(struct spi_controller *ctlr, struct spi_message *message); int (*unprepare_message)(struct spi_controller *ctlr, struct spi_message *message); int (*target_abort)(struct spi_controller *ctlr); void (*set_cs)(struct spi_device *spi, bool enable); int (*transfer_one)(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *transfer); void (*handle_err)(struct spi_controller *ctlr, struct spi_message *message); const struct spi_controller_mem_ops *mem_ops; const struct spi_controller_mem_caps *mem_caps; bool dtr_caps; struct spi_offload *(*get_offload)(struct spi_device *spi, const struct spi_offload_config *config); void (*put_offload)(struct spi_offload *offload); struct gpio_desc **cs_gpiods; bool use_gpio_descriptors; s8 unused_native_cs; s8 max_native_cs; struct spi_statistics __percpu *pcpu_statistics; struct dma_chan *dma_tx; struct dma_chan *dma_rx; void *dummy_rx; void *dummy_tx; int (*fw_translate_cs)(struct spi_controller *ctlr, unsigned cs); bool ptp_sts_supported; unsigned long irq_flags; bool queue_empty; bool must_async; bool defer_optimize_message; #if IS_ENABLED(CONFIG_SPI_DYNAMIC); struct list_head userspace_clients; bool userspace_registered; #endif; }; **Members** ``dev`` device interface to this driver ``list`` link with the global spi_controller list ``bus_num`` board-specific (and often SOC-specific) identifier for a given SPI controller. ``num_chipselect`` chipselects are used to distinguish individual SPI targets, and are numbered from zero to num_chipselects. each target has a chipselect signal, but it's common that not every chipselect is connected to a target. ``num_data_lanes`` Number of data lanes supported by this controller. Default is 1. ``dma_alignment`` SPI controller constraint on DMA buffers alignment. ``mode_bits`` flags understood by this controller driver ``buswidth_override_bits`` flags to override for this controller driver ``bits_per_word_mask`` A mask indicating which values of bits_per_word are supported by the driver. Bit n indicates that a bits_per_word n+1 is supported. If set, the SPI core will reject any transfer with an unsupported bits_per_word. If not set, this value is simply ignored, and it's up to the individual driver to perform any validation. ``min_speed_hz`` Lowest supported transfer speed ``max_speed_hz`` Highest supported transfer speed ``flags`` other constraints relevant to this driver ``{unnamed_union}`` anonymous ``slave`` indicates that this is an SPI slave controller ``target`` indicates that this is an SPI target controller ``max_transfer_size`` function that returns the max transfer size for a :c:type:`spi_device`; may be ``NULL``, so the default ``SIZE_MAX`` will be used. ``max_message_size`` function that returns the max message size for a :c:type:`spi_device`; may be ``NULL``, so the default ``SIZE_MAX`` will be used. ``io_mutex`` mutex for physical bus access ``add_lock`` mutex to avoid adding devices to the same chipselect ``bus_lock_spinlock`` spinlock for SPI bus locking ``bus_lock_mutex`` mutex for exclusion of multiple callers ``bus_lock_flag`` indicates that the SPI bus is locked for exclusive use ``setup`` updates the device mode and clocking records used by a device's SPI controller; protocol code may call this. This must fail if an unrecognized or unsupported mode is requested. It's always safe to call this unless transfers are pending on the device whose settings are being modified. ``set_cs_timing`` optional hook for SPI devices to request SPI controller for configuring specific CS setup time, hold time and inactive delay in terms of clock counts ``transfer`` adds a message to the controller's transfer queue. ``cleanup`` frees controller-specific state ``can_dma`` determine whether this controller supports DMA ``dma_map_dev`` device which can be used for DMA mapping ``cur_rx_dma_dev`` device which is currently used for RX DMA mapping ``cur_tx_dma_dev`` device which is currently used for TX DMA mapping ``queued`` whether this controller is providing an internal message queue ``kworker`` pointer to thread struct for message pump ``pump_messages`` work struct for scheduling work to the message pump ``queue_lock`` spinlock to synchronise access to message queue ``queue`` message queue ``cur_msg`` the currently in-flight message ``cur_msg_completion`` a completion for the current in-flight message ``cur_msg_incomplete`` Flag used internally to opportunistically skip the **cur_msg_completion**. This flag is used to check if the driver has already called spi_finalize_current_message(). ``cur_msg_need_completion`` Flag used internally to opportunistically skip the **cur_msg_completion**. This flag is used to signal the context that is running spi_finalize_current_message() that it needs to complete() ``busy`` message pump is busy ``running`` message pump is running ``rt`` whether this queue is set to run as a realtime task ``auto_runtime_pm`` the core should ensure a runtime PM reference is held while the hardware is prepared, using the parent device for the spidev ``fallback`` fallback to PIO if DMA transfer return failure with SPI_TRANS_FAIL_NO_START. ``last_cs_mode_high`` was (mode & SPI_CS_HIGH) true on the last call to set_cs. ``last_cs`` the last chip_select that is recorded by set_cs, -1 on non chip selected ``last_cs_index_mask`` bit mask the last chip selects that were used ``xfer_completion`` used by core transfer_one_message() ``max_dma_len`` Maximum length of a DMA transfer for the device. ``optimize_message`` optimize the message for reuse ``unoptimize_message`` release resources allocated by optimize_message ``prepare_transfer_hardware`` a message will soon arrive from the queue so the subsystem requests the driver to prepare the transfer hardware by issuing this call ``transfer_one_message`` 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 ``unprepare_transfer_hardware`` there are currently no more messages on the queue so the subsystem notifies the driver that it may relax the hardware by issuing this call ``prepare_message`` set up the controller to transfer a single message, for example doing DMA mapping. Called from threaded context. ``unprepare_message`` undo any work done by prepare_message(). ``target_abort`` abort the ongoing transfer request on an SPI target controller ``set_cs`` set the logic level of the chip select line. May be called from interrupt context. ``transfer_one`` transfer a single spi_transfer. ``handle_err`` the subsystem calls the driver to handle an error that occurs in the generic implementation of transfer_one_message(). ``mem_ops`` optimized/dedicated operations for interactions with SPI memory. This field is optional and should only be implemented if the controller has native support for memory like operations. ``mem_caps`` controller capabilities for the handling of memory operations. ``dtr_caps`` true if controller has dtr(single/dual transfer rate) capability. QSPI based controller should fill this based on controller's capability. ``get_offload`` callback for controllers with offload support to get matching offload instance. Implementations should return -ENODEV if no match is found. ``put_offload`` release the offload instance acquired by **get_offload**. ``cs_gpiods`` Array of GPIO descriptors to use as chip select lines; one per CS number. Any individual value may be NULL for CS lines that are not GPIOs (driven by the SPI controller itself). ``use_gpio_descriptors`` Turns on the code in the SPI core to parse and grab GPIO descriptors. This will fill in **cs_gpiods** and SPI devices will have the cs_gpiod assigned if a GPIO line is found for the chipselect. ``unused_native_cs`` When cs_gpiods is used, spi_register_controller() will fill in this field with the first unused native CS, to be used by SPI controller drivers that need to drive a native CS when using GPIO CS. ``max_native_cs`` When cs_gpiods is used, and this field is filled in, spi_register_controller() will validate all native CS (including the unused native CS) against this value. ``pcpu_statistics`` statistics for the spi_controller ``dma_tx`` DMA transmit channel ``dma_rx`` DMA receive channel ``dummy_rx`` dummy receive buffer for full-duplex devices ``dummy_tx`` dummy transmit buffer for full-duplex devices ``fw_translate_cs`` If the boot firmware uses different numbering scheme what Linux expects, this optional hook can be used to translate between the two. ``ptp_sts_supported`` If the driver sets this to true, it must provide a time snapshot in **spi_transfer->ptp_sts** as close as possible to the moment in time when **spi_transfer->ptp_sts_word_pre** and **spi_transfer->ptp_sts_word_post** were transmitted. If the driver does not set this, the SPI core takes the snapshot as close to the driver hand-over as possible. ``irq_flags`` Interrupt enable state during PTP system timestamping ``queue_empty`` signal green light for opportunistically skipping the queue for spi_sync transfers. ``must_async`` disable all fast paths in the core ``defer_optimize_message`` set to true if controller cannot pre-optimize messages and needs to defer the optimization step until the message is actually being transferred ``userspace_clients`` list of SPI devices instantiated from userspace via the sysfs new_device interface; protected by **add_lock** ``userspace_registered`` true once the new_device/delete_device sysfs group has been added by spi_register_controller(); used by spi_unregister_controller() to know whether to remove it”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj5ubhŒ:”…”�”}”(hj5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M©hj1ubj¤)�”}”(hXTstruct spi_controller { struct device dev; struct list_head list; s16 bus_num; u16 num_chipselect; u16 num_data_lanes; u16 dma_alignment; u32 mode_bits; u32 buswidth_override_bits; u32 bits_per_word_mask; #define SPI_BPW_MASK(bits) BIT((bits) - 1); #define SPI_BPW_RANGE_MASK(min, max) GENMASK((max) - 1, (min) - 1); u32 min_speed_hz; u32 max_speed_hz; u16 flags; #define SPI_CONTROLLER_HALF_DUPLEX BIT(0) ; #define SPI_CONTROLLER_NO_RX BIT(1) ; #define SPI_CONTROLLER_NO_TX BIT(2) ; #define SPI_CONTROLLER_MUST_RX BIT(3) ; #define SPI_CONTROLLER_MUST_TX BIT(4) ; #define SPI_CONTROLLER_GPIO_SS BIT(5) ; #define SPI_CONTROLLER_SUSPENDED BIT(6) ; #define SPI_CONTROLLER_MULTI_CS BIT(7); union { bool slave; bool target; }; size_t (*max_transfer_size)(struct spi_device *spi); size_t (*max_message_size)(struct spi_device *spi); struct mutex io_mutex; struct mutex add_lock; spinlock_t bus_lock_spinlock; struct mutex bus_lock_mutex; bool bus_lock_flag; int (*setup)(struct spi_device *spi); int (*set_cs_timing)(struct spi_device *spi); int (*transfer)(struct spi_device *spi, struct spi_message *mesg); void (*cleanup)(struct spi_device *spi); bool (*can_dma)(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *xfer); struct device *dma_map_dev; struct device *cur_rx_dma_dev; struct device *cur_tx_dma_dev; bool queued; struct kthread_worker *kworker; struct kthread_work pump_messages; spinlock_t queue_lock; struct list_head queue; struct spi_message *cur_msg; struct completion cur_msg_completion; bool cur_msg_incomplete; bool cur_msg_need_completion; bool busy; bool running; bool rt; bool auto_runtime_pm; bool fallback; bool last_cs_mode_high; s8 last_cs[SPI_DEVICE_CS_CNT_MAX]; u32 last_cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct completion xfer_completion; size_t max_dma_len; int (*optimize_message)(struct spi_message *msg); int (*unoptimize_message)(struct spi_message *msg); int (*prepare_transfer_hardware)(struct spi_controller *ctlr); int (*transfer_one_message)(struct spi_controller *ctlr, struct spi_message *mesg); int (*unprepare_transfer_hardware)(struct spi_controller *ctlr); int (*prepare_message)(struct spi_controller *ctlr, struct spi_message *message); int (*unprepare_message)(struct spi_controller *ctlr, struct spi_message *message); int (*target_abort)(struct spi_controller *ctlr); void (*set_cs)(struct spi_device *spi, bool enable); int (*transfer_one)(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *transfer); void (*handle_err)(struct spi_controller *ctlr, struct spi_message *message); const struct spi_controller_mem_ops *mem_ops; const struct spi_controller_mem_caps *mem_caps; bool dtr_caps; struct spi_offload *(*get_offload)(struct spi_device *spi, const struct spi_offload_config *config); void (*put_offload)(struct spi_offload *offload); struct gpio_desc **cs_gpiods; bool use_gpio_descriptors; s8 unused_native_cs; s8 max_native_cs; struct spi_statistics __percpu *pcpu_statistics; struct dma_chan *dma_tx; struct dma_chan *dma_rx; void *dummy_rx; void *dummy_tx; int (*fw_translate_cs)(struct spi_controller *ctlr, unsigned cs); bool ptp_sts_supported; unsigned long irq_flags; bool queue_empty; bool must_async; bool defer_optimize_message; #if IS_ENABLED(CONFIG_SPI_DYNAMIC); struct list_head userspace_clients; bool userspace_registered; #endif; };”h]”hXTstruct spi_controller { struct device dev; struct list_head list; s16 bus_num; u16 num_chipselect; u16 num_data_lanes; u16 dma_alignment; u32 mode_bits; u32 buswidth_override_bits; u32 bits_per_word_mask; #define SPI_BPW_MASK(bits) BIT((bits) - 1); #define SPI_BPW_RANGE_MASK(min, max) GENMASK((max) - 1, (min) - 1); u32 min_speed_hz; u32 max_speed_hz; u16 flags; #define SPI_CONTROLLER_HALF_DUPLEX BIT(0) ; #define SPI_CONTROLLER_NO_RX BIT(1) ; #define SPI_CONTROLLER_NO_TX BIT(2) ; #define SPI_CONTROLLER_MUST_RX BIT(3) ; #define SPI_CONTROLLER_MUST_TX BIT(4) ; #define SPI_CONTROLLER_GPIO_SS BIT(5) ; #define SPI_CONTROLLER_SUSPENDED BIT(6) ; #define SPI_CONTROLLER_MULTI_CS BIT(7); union { bool slave; bool target; }; size_t (*max_transfer_size)(struct spi_device *spi); size_t (*max_message_size)(struct spi_device *spi); struct mutex io_mutex; struct mutex add_lock; spinlock_t bus_lock_spinlock; struct mutex bus_lock_mutex; bool bus_lock_flag; int (*setup)(struct spi_device *spi); int (*set_cs_timing)(struct spi_device *spi); int (*transfer)(struct spi_device *spi, struct spi_message *mesg); void (*cleanup)(struct spi_device *spi); bool (*can_dma)(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *xfer); struct device *dma_map_dev; struct device *cur_rx_dma_dev; struct device *cur_tx_dma_dev; bool queued; struct kthread_worker *kworker; struct kthread_work pump_messages; spinlock_t queue_lock; struct list_head queue; struct spi_message *cur_msg; struct completion cur_msg_completion; bool cur_msg_incomplete; bool cur_msg_need_completion; bool busy; bool running; bool rt; bool auto_runtime_pm; bool fallback; bool last_cs_mode_high; s8 last_cs[SPI_DEVICE_CS_CNT_MAX]; u32 last_cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct completion xfer_completion; size_t max_dma_len; int (*optimize_message)(struct spi_message *msg); int (*unoptimize_message)(struct spi_message *msg); int (*prepare_transfer_hardware)(struct spi_controller *ctlr); int (*transfer_one_message)(struct spi_controller *ctlr, struct spi_message *mesg); int (*unprepare_transfer_hardware)(struct spi_controller *ctlr); int (*prepare_message)(struct spi_controller *ctlr, struct spi_message *message); int (*unprepare_message)(struct spi_controller *ctlr, struct spi_message *message); int (*target_abort)(struct spi_controller *ctlr); void (*set_cs)(struct spi_device *spi, bool enable); int (*transfer_one)(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *transfer); void (*handle_err)(struct spi_controller *ctlr, struct spi_message *message); const struct spi_controller_mem_ops *mem_ops; const struct spi_controller_mem_caps *mem_caps; bool dtr_caps; struct spi_offload *(*get_offload)(struct spi_device *spi, const struct spi_offload_config *config); void (*put_offload)(struct spi_offload *offload); struct gpio_desc **cs_gpiods; bool use_gpio_descriptors; s8 unused_native_cs; s8 max_native_cs; struct spi_statistics __percpu *pcpu_statistics; struct dma_chan *dma_tx; struct dma_chan *dma_rx; void *dummy_rx; void *dummy_tx; int (*fw_translate_cs)(struct spi_controller *ctlr, unsigned cs); bool ptp_sts_supported; unsigned long irq_flags; bool queue_empty; bool must_async; bool defer_optimize_message; #if IS_ENABLED(CONFIG_SPI_DYNAMIC); struct list_head userspace_clients; bool userspace_registered; #endif; };”…”�”}”hjRsbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M«hj1ubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hjch]”hŒMembers”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj1ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ(``dev`` device interface to this driver ”h]”(jØ)�”}”(hŒ``dev``”h]”hö)�”}”(hj‚h]”hŒdev”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M§hj|ubjò)�”}”(hhh]”hÌ)�”}”(hŒdevice interface to this driver”h]”hŒdevice interface to this driver”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j—h´M§hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j—h´M§hjyubjÒ)�”}”(hŒ2``list`` link with the global spi_controller list ”h]”(jØ)�”}”(hŒ``list``”h]”hö)�”}”(hj»h]”hŒlist”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¨hjµubjò)�”}”(hhh]”hÌ)�”}”(hŒ(link with the global spi_controller list”h]”hŒ(link with the global spi_controller list”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÐh´M¨hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÐh´M¨hjyubjÒ)�”}”(hŒ[``bus_num`` board-specific (and often SOC-specific) identifier for a given SPI controller. ”h]”(jØ)�”}”(hŒ ``bus_num``”h]”hö)�”}”(hjôh]”hŒbus_num”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mªhjîubjò)�”}”(hhh]”hÌ)�”}”(hŒNboard-specific (and often SOC-specific) identifier for a given SPI controller.”h]”hŒNboard-specific (and often SOC-specific) identifier for a given SPI controller.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M©hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j h´MªhjyubjÒ)�”}”(hŒç``num_chipselect`` chipselects are used to distinguish individual SPI targets, and are numbered from zero to num_chipselects. each target has a chipselect signal, but it's common that not every chipselect is connected to a target. ”h]”(jØ)�”}”(hŒ``num_chipselect``”h]”hö)�”}”(hj.h]”hŒnum_chipselect”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M®hj(ubjò)�”}”(hhh]”hÌ)�”}”(hŒÓchipselects are used to distinguish individual SPI targets, and are numbered from zero to num_chipselects. each target has a chipselect signal, but it's common that not every chipselect is connected to a target.”h]”hŒÕchipselects are used to distinguish individual SPI targets, and are numbered from zero to num_chipselects. each target has a chipselect signal, but it’s common that not every chipselect is connected to a target.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M«hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jCh´M®hjyubjÒ)�”}”(hŒT``num_data_lanes`` Number of data lanes supported by this controller. Default is 1. ”h]”(jØ)�”}”(hŒ``num_data_lanes``”h]”hö)�”}”(hjhh]”hŒnum_data_lanes”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¯hjbubjò)�”}”(hhh]”hÌ)�”}”(hŒ@Number of data lanes supported by this controller. Default is 1.”h]”hŒ@Number of data lanes supported by this controller. Default is 1.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j}h´M¯hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j}h´M¯hjyubjÒ)�”}”(hŒF``dma_alignment`` SPI controller constraint on DMA buffers alignment. ”h]”(jØ)�”}”(hŒ``dma_alignment``”h]”hö)�”}”(hj¡h]”hŒ dma_alignment”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M°hj›ubjò)�”}”(hhh]”hÌ)�”}”(hŒ3SPI controller constraint on DMA buffers alignment.”h]”hŒ3SPI controller constraint on DMA buffers alignment.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¶h´M°hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¶h´M°hjyubjÒ)�”}”(hŒ9``mode_bits`` flags understood by this controller driver ”h]”(jØ)�”}”(hŒ ``mode_bits``”h]”hö)�”}”(hjÚh]”hŒ mode_bits”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M±hjÔubjò)�”}”(hhh]”hÌ)�”}”(hŒ*flags understood by this controller driver”h]”hŒ*flags understood by this controller driver”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jïh´M±hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jïh´M±hjyubjÒ)�”}”(hŒH``buswidth_override_bits`` flags to override for this controller driver ”h]”(jØ)�”}”(hŒ``buswidth_override_bits``”h]”hö)�”}”(hjh]”hŒbuswidth_override_bits”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M²hj ubjò)�”}”(hhh]”hÌ)�”}”(hŒ,flags to override for this controller driver”h]”hŒ,flags to override for this controller driver”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j(h´M²hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j(h´M²hjyubjÒ)�”}”(hXV``bits_per_word_mask`` A mask indicating which values of bits_per_word are supported by the driver. Bit n indicates that a bits_per_word n+1 is supported. If set, the SPI core will reject any transfer with an unsupported bits_per_word. If not set, this value is simply ignored, and it's up to the individual driver to perform any validation. ”h]”(jØ)�”}”(hŒ``bits_per_word_mask``”h]”hö)�”}”(hjLh]”hŒbits_per_word_mask”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M·hjFubjò)�”}”(hhh]”hÌ)�”}”(hX>A mask indicating which values of bits_per_word are supported by the driver. Bit n indicates that a bits_per_word n+1 is supported. If set, the SPI core will reject any transfer with an unsupported bits_per_word. If not set, this value is simply ignored, and it's up to the individual driver to perform any validation.”h]”hX@A mask indicating which values of bits_per_word are supported by the driver. Bit n indicates that a bits_per_word n+1 is supported. If set, the SPI core will reject any transfer with an unsupported bits_per_word. If not set, this value is simply ignored, and it’s up to the individual driver to perform any validation.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M³hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jah´M·hjyubjÒ)�”}”(hŒ1``min_speed_hz`` Lowest supported transfer speed ”h]”(jØ)�”}”(hŒ``min_speed_hz``”h]”hö)�”}”(hj†h]”hŒ min_speed_hz”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¸hj€ubjò)�”}”(hhh]”hÌ)�”}”(hŒLowest supported transfer speed”h]”hŒLowest supported transfer speed”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›h´M¸hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j›h´M¸hjyubjÒ)�”}”(hŒ2``max_speed_hz`` Highest supported transfer speed ”h]”(jØ)�”}”(hŒ``max_speed_hz``”h]”hö)�”}”(hj¿h]”hŒ max_speed_hz”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¹hj¹ubjò)�”}”(hhh]”hÌ)�”}”(hŒ Highest supported transfer speed”h]”hŒ Highest supported transfer speed”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÔh´M¹hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÔh´M¹hjyubjÒ)�”}”(hŒ4``flags`` other constraints relevant to this driver ”h]”(jØ)�”}”(hŒ ``flags``”h]”hö)�”}”(hjøh]”hŒflags”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mºhjòubjò)�”}”(hhh]”hÌ)�”}”(hŒ)other constraints relevant to this driver”h]”hŒ)other constraints relevant to this driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´Mºhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j h´MºhjyubjÒ)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(jØ)�”}”(hŒ``{unnamed_union}``”h]”hö)�”}”(hj1h]”hŒ{unnamed_union}”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Khj+ubjò)�”}”(hhh]”hÌ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jFh´KhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jFh´KhjyubjÒ)�”}”(hŒ9``slave`` indicates that this is an SPI slave controller ”h]”(jØ)�”}”(hŒ ``slave``”h]”hö)�”}”(hjjh]”hŒslave”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M»hjdubjò)�”}”(hhh]”hÌ)�”}”(hŒ.indicates that this is an SPI slave controller”h]”hŒ.indicates that this is an SPI slave controller”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M»hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh´M»hjyubjÒ)�”}”(hŒ;``target`` indicates that this is an SPI target controller ”h]”(jØ)�”}”(hŒ ``target``”h]”hö)�”}”(hj£h]”hŒtarget”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¼hj�ubjò)�”}”(hhh]”hÌ)�”}”(hŒ/indicates that this is an SPI target controller”h]”hŒ/indicates that this is an SPI target controller”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¸h´M¼hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¸h´M¼hjyubjÒ)�”}”(hŒ™``max_transfer_size`` function that returns the max transfer size for a :c:type:`spi_device`; may be ``NULL``, so the default ``SIZE_MAX`` will be used. ”h]”(jØ)�”}”(hŒ``max_transfer_size``”h]”hö)�”}”(hjÜh]”hŒmax_transfer_size”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¾hjÖubjò)�”}”(hhh]”hÌ)�”}”(hŒ‚function that returns the max transfer size for a :c:type:`spi_device`; may be ``NULL``, so the default ``SIZE_MAX`` will be used.”h]”(hŒ2function that returns the max transfer size for a ”…”�”}”(hjõh²hh³Nh´Nubh)�”}”(hŒ:c:type:`spi_device`”h]”hö)�”}”(hjÿh]”hŒ spi_device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhjýubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j¯j²)�”}”jµ]”sbjŒ spi_device”uh1hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M½hjõubhŒ ; may be ”…”�”}”(hjõh²hh³Nh´Nubhö)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjõubhŒ, so the default ”…”�”}”(hjõh²hh³Nh´Nubhö)�”}”(hŒ ``SIZE_MAX``”h]”hŒSIZE_MAX”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjõubhŒ will be used.”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M½hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jñh´M¾hjyubjÒ)�”}”(hŒ—``max_message_size`` function that returns the max message size for a :c:type:`spi_device`; may be ``NULL``, so the default ``SIZE_MAX`` will be used. ”h]”(jØ)�”}”(hŒ``max_message_size``”h]”hö)�”}”(hj`h]”hŒmax_message_size”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÀhjZubjò)�”}”(hhh]”hÌ)�”}”(hŒ�function that returns the max message size for a :c:type:`spi_device`; may be ``NULL``, so the default ``SIZE_MAX`` will be used.”h]”(hŒ1function that returns the max message size for a ”…”�”}”(hjyh²hh³Nh´Nubh)�”}”(hŒ:c:type:`spi_device`”h]”hö)�”}”(hjƒh]”hŒ spi_device”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j¯jjŒ spi_device”uh1hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¿hjyubhŒ ; may be ”…”�”}”(hjyh²hh³Nh´Nubhö)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjyubhŒ, so the default ”…”�”}”(hjyh²hh³Nh´Nubhö)�”}”(hŒ ``SIZE_MAX``”h]”hŒSIZE_MAX”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjyubhŒ will be used.”…”�”}”(hjyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´M¿hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³juh´MÀhjyubjÒ)�”}”(hŒ+``io_mutex`` mutex for physical bus access ”h]”(jØ)�”}”(hŒ ``io_mutex``”h]”hö)�”}”(hjáh]”hŒio_mutex”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÁhjÛubjò)�”}”(hhh]”hÌ)�”}”(hŒmutex for physical bus access”h]”hŒmutex for physical bus access”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jöh´MÁhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jöh´MÁhjyubjÒ)�”}”(hŒB``add_lock`` mutex to avoid adding devices to the same chipselect ”h]”(jØ)�”}”(hŒ ``add_lock``”h]”hö)�”}”(hjh]”hŒadd_lock”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÂhjubjò)�”}”(hhh]”hÌ)�”}”(hŒ4mutex to avoid adding devices to the same chipselect”h]”hŒ4mutex to avoid adding devices to the same chipselect”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j/h´MÂhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j/h´MÂhjyubjÒ)�”}”(hŒ3``bus_lock_spinlock`` spinlock for SPI bus locking ”h]”(jØ)�”}”(hŒ``bus_lock_spinlock``”h]”hö)�”}”(hjSh]”hŒbus_lock_spinlock”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÃhjMubjò)�”}”(hhh]”hÌ)�”}”(hŒspinlock for SPI bus locking”h]”hŒspinlock for SPI bus locking”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jhh´MÃhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jhh´MÃhjyubjÒ)�”}”(hŒ;``bus_lock_mutex`` mutex for exclusion of multiple callers ”h]”(jØ)�”}”(hŒ``bus_lock_mutex``”h]”hö)�”}”(hjŒh]”hŒbus_lock_mutex”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÄhj†ubjò)�”}”(hhh]”hÌ)�”}”(hŒ'mutex for exclusion of multiple callers”h]”hŒ'mutex for exclusion of multiple callers”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¡h´MÄhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¡h´MÄhjyubjÒ)�”}”(hŒI``bus_lock_flag`` indicates that the SPI bus is locked for exclusive use ”h]”(jØ)�”}”(hŒ``bus_lock_flag``”h]”hö)�”}”(hjÅh]”hŒ bus_lock_flag”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÅhj¿ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6indicates that the SPI bus is locked for exclusive use”h]”hŒ6indicates that the SPI bus is locked for exclusive use”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÚh´MÅhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÚh´MÅhjyubjÒ)�”}”(hX(``setup`` updates the device mode and clocking records used by a device's SPI controller; protocol code may call this. This must fail if an unrecognized or unsupported mode is requested. It's always safe to call this unless transfers are pending on the device whose settings are being modified. ”h]”(jØ)�”}”(hŒ ``setup``”h]”hö)�”}”(hjþh]”hŒsetup”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÊhjøubjò)�”}”(hhh]”hÌ)�”}”(hXupdates the device mode and clocking records used by a device's SPI controller; protocol code may call this. This must fail if an unrecognized or unsupported mode is requested. It's always safe to call this unless transfers are pending on the device whose settings are being modified.”h]”hX!updates the device mode and clocking records used by a device’s SPI controller; protocol code may call this. This must fail if an unrecognized or unsupported mode is requested. It’s always safe to call this unless transfers are pending on the device whose settings are being modified.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÆhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh´MÊhjyubjÒ)�”}”(hŒ¨``set_cs_timing`` optional hook for SPI devices to request SPI controller for configuring specific CS setup time, hold time and inactive delay in terms of clock counts ”h]”(jØ)�”}”(hŒ``set_cs_timing``”h]”hö)�”}”(hj8h]”hŒ set_cs_timing”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÍhj2ubjò)�”}”(hhh]”hÌ)�”}”(hŒ•optional hook for SPI devices to request SPI controller for configuring specific CS setup time, hold time and inactive delay in terms of clock counts”h]”hŒ•optional hook for SPI devices to request SPI controller for configuring specific CS setup time, hold time and inactive delay in terms of clock counts”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MËhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jMh´MÍhjyubjÒ)�”}”(hŒ@``transfer`` adds a message to the controller's transfer queue. ”h]”(jØ)�”}”(hŒ ``transfer``”h]”hö)�”}”(hjrh]”hŒtransfer”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÎhjlubjò)�”}”(hhh]”hÌ)�”}”(hŒ2adds a message to the controller's transfer queue.”h]”hŒ4adds a message to the controller’s transfer queue.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‡h´MÎhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j‡h´MÎhjyubjÒ)�”}”(hŒ,``cleanup`` frees controller-specific state ”h]”(jØ)�”}”(hŒ ``cleanup``”h]”hö)�”}”(hj«h]”hŒcleanup”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÏhj¥ubjò)�”}”(hhh]”hÌ)�”}”(hŒfrees controller-specific state”h]”hŒfrees controller-specific state”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÀh´MÏhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÀh´MÏhjyubjÒ)�”}”(hŒ;``can_dma`` determine whether this controller supports DMA ”h]”(jØ)�”}”(hŒ ``can_dma``”h]”hö)�”}”(hjäh]”hŒcan_dma”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÐhjÞubjò)�”}”(hhh]”hÌ)�”}”(hŒ.determine whether this controller supports DMA”h]”hŒ.determine whether this controller supports DMA”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jùh´MÐhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jùh´MÐhjyubjÒ)�”}”(hŒ9``dma_map_dev`` device which can be used for DMA mapping ”h]”(jØ)�”}”(hŒ``dma_map_dev``”h]”hö)�”}”(hjh]”hŒ dma_map_dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÑhjubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device which can be used for DMA mapping”h]”hŒ(device which can be used for DMA mapping”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j2h´MÑhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j2h´MÑhjyubjÒ)�”}”(hŒE``cur_rx_dma_dev`` device which is currently used for RX DMA mapping ”h]”(jØ)�”}”(hŒ``cur_rx_dma_dev``”h]”hö)�”}”(hjVh]”hŒcur_rx_dma_dev”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÒhjPubjò)�”}”(hhh]”hÌ)�”}”(hŒ1device which is currently used for RX DMA mapping”h]”hŒ1device which is currently used for RX DMA mapping”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jkh´MÒhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jkh´MÒhjyubjÒ)�”}”(hŒE``cur_tx_dma_dev`` device which is currently used for TX DMA mapping ”h]”(jØ)�”}”(hŒ``cur_tx_dma_dev``”h]”hö)�”}”(hj�h]”hŒcur_tx_dma_dev”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÓhj‰ubjò)�”}”(hhh]”hÌ)�”}”(hŒ1device which is currently used for TX DMA mapping”h]”hŒ1device which is currently used for TX DMA mapping”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¤h´MÓhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¤h´MÓhjyubjÒ)�”}”(hŒJ``queued`` whether this controller is providing an internal message queue ”h]”(jØ)�”}”(hŒ ``queued``”h]”hö)�”}”(hjÈh]”hŒqueued”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÔhjÂubjò)�”}”(hhh]”hÌ)�”}”(hŒ>whether this controller is providing an internal message queue”h]”hŒ>whether this controller is providing an internal message queue”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÝh´MÔhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÝh´MÔhjyubjÒ)�”}”(hŒ6``kworker`` pointer to thread struct for message pump ”h]”(jØ)�”}”(hŒ ``kworker``”h]”hö)�”}”(hjh]”hŒkworker”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÕhjûubjò)�”}”(hhh]”hÌ)�”}”(hŒ)pointer to thread struct for message pump”h]”hŒ)pointer to thread struct for message pump”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´MÕhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh´MÕhjyubjÒ)�”}”(hŒF``pump_messages`` work struct for scheduling work to the message pump ”h]”(jØ)�”}”(hŒ``pump_messages``”h]”hö)�”}”(hj:h]”hŒ pump_messages”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÖhj4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ3work struct for scheduling work to the message pump”h]”hŒ3work struct for scheduling work to the message pump”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jOh´MÖhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jOh´MÖhjyubjÒ)�”}”(hŒ?``queue_lock`` spinlock to synchronise access to message queue ”h]”(jØ)�”}”(hŒ``queue_lock``”h]”hö)�”}”(hjsh]”hŒ queue_lock”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M×hjmubjò)�”}”(hhh]”hÌ)�”}”(hŒ/spinlock to synchronise access to message queue”h]”hŒ/spinlock to synchronise access to message queue”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jˆh´M×hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jˆh´M×hjyubjÒ)�”}”(hŒ``queue`` message queue ”h]”(jØ)�”}”(hŒ ``queue``”h]”hö)�”}”(hj¬h]”hŒqueue”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MØhj¦ubjò)�”}”(hhh]”hÌ)�”}”(hŒ message queue”h]”hŒ message queue”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÁh´MØhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÁh´MØhjyubjÒ)�”}”(hŒ,``cur_msg`` the currently in-flight message ”h]”(jØ)�”}”(hŒ ``cur_msg``”h]”hö)�”}”(hjåh]”hŒcur_msg”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÙhjßubjò)�”}”(hhh]”hÌ)�”}”(hŒthe currently in-flight message”h]”hŒthe currently in-flight message”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³júh´MÙhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³júh´MÙhjyubjÒ)�”}”(hŒF``cur_msg_completion`` a completion for the current in-flight message ”h]”(jØ)�”}”(hŒ``cur_msg_completion``”h]”hö)�”}”(hjh]”hŒcur_msg_completion”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÚhjubjò)�”}”(hhh]”hÌ)�”}”(hŒ.a completion for the current in-flight message”h]”hŒ.a completion for the current in-flight message”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j3h´MÚhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j3h´MÚhjyubjÒ)�”}”(hŒ¾``cur_msg_incomplete`` Flag used internally to opportunistically skip the **cur_msg_completion**. This flag is used to check if the driver has already called spi_finalize_current_message(). ”h]”(jØ)�”}”(hŒ``cur_msg_incomplete``”h]”hö)�”}”(hjWh]”hŒcur_msg_incomplete”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÝhjQubjò)�”}”(•hhh]”hÌ)�”}”(hŒ¦Flag used internally to opportunistically skip the **cur_msg_completion**. This flag is used to check if the driver has already called spi_finalize_current_message().”h]”(hŒ3Flag used internally to opportunistically skip the ”…”�”}”(hjph²hh³Nh´Nubj‰)�”}”(hŒ**cur_msg_completion**”h]”hŒcur_msg_completion”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjpubhŒ]. This flag is used to check if the driver has already called spi_finalize_current_message().”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÛhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jlh´MÝhjyubjÒ)�”}”(hŒÚ``cur_msg_need_completion`` Flag used internally to opportunistically skip the **cur_msg_completion**. This flag is used to signal the context that is running spi_finalize_current_message() that it needs to complete() ”h]”(jØ)�”}”(hŒ``cur_msg_need_completion``”h]”hö)�”}”(hj£h]”hŒcur_msg_need_completion”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Màhj�ubjò)�”}”(hhh]”hÌ)�”}”(hŒ½Flag used internally to opportunistically skip the **cur_msg_completion**. This flag is used to signal the context that is running spi_finalize_current_message() that it needs to complete()”h]”(hŒ3Flag used internally to opportunistically skip the ”…”�”}”(hj¼h²hh³Nh´Nubj‰)�”}”(hŒ**cur_msg_completion**”h]”hŒcur_msg_completion”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¼ubhŒt. This flag is used to signal the context that is running spi_finalize_current_message() that it needs to complete()”…”�”}”(hj¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÞhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¸h´MàhjyubjÒ)�”}”(hŒ``busy`` message pump is busy ”h]”(jØ)�”}”(hŒ``busy``”h]”hö)�”}”(hjïh]”hŒbusy”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mèhjéubjò)�”}”(hhh]”hÌ)�”}”(hŒmessage pump is busy”h]”hŒmessage pump is busy”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mèhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh´MèhjyubjÒ)�”}”(hŒ$``running`` message pump is running ”h]”(jØ)�”}”(hŒ ``running``”h]”hö)�”}”(hj(h]”hŒrunning”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Méhj"ubjò)�”}”(hhh]”hÌ)�”}”(hŒmessage pump is running”h]”hŒmessage pump is running”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j=h´Méhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j=h´MéhjyubjÒ)�”}”(hŒ;``rt`` whether this queue is set to run as a realtime task ”h]”(jØ)�”}”(hŒ``rt``”h]”hö)�”}”(hjah]”hŒrt”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mêhj[ubjò)�”}”(hhh]”hÌ)�”}”(hŒ3whether this queue is set to run as a realtime task”h]”hŒ3whether this queue is set to run as a realtime task”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jvh´Mêhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jvh´MêhjyubjÒ)�”}”(hŒ‘``auto_runtime_pm`` the core should ensure a runtime PM reference is held while the hardware is prepared, using the parent device for the spidev ”h]”(jØ)�”}”(hŒ``auto_runtime_pm``”h]”hö)�”}”(hjšh]”hŒauto_runtime_pm”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Míhj”ubjò)�”}”(hhh]”hÌ)�”}”(hŒ|the core should ensure a runtime PM reference is held while the hardware is prepared, using the parent device for the spidev”h]”hŒ|the core should ensure a runtime PM reference is held while the hardware is prepared, using the parent device for the spidev”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mëhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¯h´MíhjyubjÒ)�”}”(hŒZ``fallback`` fallback to PIO if DMA transfer return failure with SPI_TRANS_FAIL_NO_START. ”h]”(jØ)�”}”(hŒ ``fallback``”h]”hö)�”}”(hjÔh]”hŒfallback”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MâhjÎubjò)�”}”(hhh]”hÌ)�”}”(hŒLfallback to PIO if DMA transfer return failure with SPI_TRANS_FAIL_NO_START.”h]”hŒLfallback to PIO if DMA transfer return failure with SPI_TRANS_FAIL_NO_START.”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Máhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jéh´MâhjyubjÒ)�”}”(hŒP``last_cs_mode_high`` was (mode & SPI_CS_HIGH) true on the last call to set_cs. ”h]”(jØ)�”}”(hŒ``last_cs_mode_high``”h]”hö)�”}”(hjh]”hŒlast_cs_mode_high”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mãhjubjò)�”}”(hhh]”hÌ)�”}”(hŒ9was (mode & SPI_CS_HIGH) true on the last call to set_cs.”h]”hŒ9was (mode & SPI_CS_HIGH) true on the last call to set_cs.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j#h´Mãhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j#h´MãhjyubjÒ)�”}”(hŒU``last_cs`` the last chip_select that is recorded by set_cs, -1 on non chip selected ”h]”(jØ)�”}”(hŒ ``last_cs``”h]”hö)�”}”(hjGh]”hŒlast_cs”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MåhjAubjò)�”}”(hhh]”hÌ)�”}”(hŒHthe last chip_select that is recorded by set_cs, -1 on non chip selected”h]”hŒHthe last chip_select that is recorded by set_cs, -1 on non chip selected”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mähj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j\h´MåhjyubjÒ)�”}”(hŒE``last_cs_index_mask`` bit mask the last chip selects that were used ”h]”(jØ)�”}”(hŒ``last_cs_index_mask``”h]”hö)�”}”(hj�h]”hŒlast_cs_index_mask”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mæhj{ubjò)�”}”(hhh]”hÌ)�”}”(hŒ-bit mask the last chip selects that were used”h]”hŒ-bit mask the last chip selects that were used”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j–h´Mæhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j–h´MæhjyubjÒ)�”}”(hŒ8``xfer_completion`` used by core transfer_one_message() ”h]”(jØ)�”}”(hŒ``xfer_completion``”h]”hö)�”}”(hjºh]”hŒxfer_completion”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mçhj´ubjò)�”}”(hhh]”hÌ)�”}”(hŒ#used by core transfer_one_message()”h]”hŒ#used by core transfer_one_message()”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÏh´MçhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÏh´MçhjyubjÒ)�”}”(hŒA``max_dma_len`` Maximum length of a DMA transfer for the device. ”h]”(jØ)�”}”(hŒ``max_dma_len``”h]”hö)�”}”(hjóh]”hŒ max_dma_len”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mîhjíubjò)�”}”(hhh]”hÌ)�”}”(hŒ0Maximum length of a DMA transfer for the device.”h]”hŒ0Maximum length of a DMA transfer for the device.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mîhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh´MîhjyubjÒ)�”}”(hŒ4``optimize_message`` optimize the message for reuse ”h]”(jØ)�”}”(hŒ``optimize_message``”h]”hö)�”}”(hj,h]”hŒoptimize_message”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mýhj&ubjò)�”}”(hhh]”hÌ)�”}”(hŒoptimize the message for reuse”h]”hŒoptimize the message for reuse”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jAh´MýhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jAh´MýhjyubjÒ)�”}”(hŒG``unoptimize_message`` release resources allocated by optimize_message ”h]”(jØ)�”}”(hŒ``unoptimize_message``”h]”hö)�”}”(hjeh]”hŒunoptimize_message”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mþhj_ubjò)�”}”(hhh]”hÌ)�”}”(hŒ/release resources allocated by optimize_message”h]”hŒ/release resources allocated by optimize_message”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jzh´Mþhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jzh´MþhjyubjÒ)�”}”(hŒ£``prepare_transfer_hardware`` a message will soon arrive from the queue so the subsystem requests the driver to prepare the transfer hardware by issuing this call ”h]”(jØ)�”}”(hŒ``prepare_transfer_hardware``”h]”hö)�”}”(hjžh]”hŒprepare_transfer_hardware”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mñhj˜ubjò)�”}”(hhh]”hÌ)�”}”(hŒ„a message will soon arrive from the queue so the subsystem requests the driver to prepare the transfer hardware by issuing this call”h]”hŒ„a message will soon arrive from the queue so the subsystem requests the driver to prepare the transfer hardware by issuing this call”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mïhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j³h´MñhjyubjÒ)�”}”(hX``transfer_one_message`` 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 ”h]”(jØ)�”}”(hŒ``transfer_one_message``”h]”hö)�”}”(hjØh]”hŒtransfer_one_message”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MöhjÒubjò)�”}”(hhh]”hÌ)�”}”(hŒ÷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”h]”hŒ÷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”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mòhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jíh´MöhjyubjÒ)�”}”(hŒ«``unprepare_transfer_hardware`` there are currently no more messages on the queue so the subsystem notifies the driver that it may relax the hardware by issuing this call ”h]”(jØ)�”}”(hŒ``unprepare_transfer_hardware``”h]”hö)�”}”(hj h]”hŒunprepare_transfer_hardware”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mùhj ubjò)�”}”(hhh]”hÌ)�”}”(hŒŠthere are currently no more messages on the queue so the subsystem notifies the driver that it may relax the hardware by issuing this call”h]”hŒŠthere are currently no more messages on the queue so the subsystem notifies the driver that it may relax the hardware by issuing this call”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M÷hj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j' h´MùhjyubjÒ)�”}”(hŒ†``prepare_message`` set up the controller to transfer a single message, for example doing DMA mapping. Called from threaded context. ”h]”(jØ)�”}”(hŒ``prepare_message``”h]”hö)�”}”(hjL h]”hŒprepare_message”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjF ubjò)�”}”(hhh]”hÌ)�”}”(hŒqset up the controller to transfer a single message, for example doing DMA mapping. Called from threaded context.”h]”hŒqset up the controller to transfer a single message, for example doing DMA mapping. Called from threaded context.”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mÿhjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³ja h´MhjyubjÒ)�”}”(hŒ?``unprepare_message`` undo any work done by prepare_message(). ”h]”(jØ)�”}”(hŒ``unprepare_message``”h]”hö)�”}”(hj† h]”hŒunprepare_message”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj„ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj€ ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(undo any work done by prepare_message().”h]”hŒ(undo any work done by prepare_message().”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j› h´Mhjœ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j› h´MhjyubjÒ)�”}”(hŒP``target_abort`` abort the ongoing transfer request on an SPI target controller ”h]”(jØ)�”}”(hŒ``target_abort``”h]”hö)�”}”(hj¿ h]”hŒ target_abort”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj¹ ubjò)�”}”(hhh]”hÌ)�”}”(hŒ>abort the ongoing transfer request on an SPI target controller”h]”hŒ>abort the ongoing transfer request on an SPI target controller”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÔ h´MhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¹ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÔ h´MhjyubjÒ)�”}”(hŒ_``set_cs`` set the logic level of the chip select line. May be called from interrupt context. ”h]”(jØ)�”}”(hŒ ``set_cs``”h]”hö)�”}”(hjø h]”hŒset_cs”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mühjò ubjò)�”}”(hhh]”hÌ)�”}”(hŒSset the logic level of the chip select line. May be called from interrupt context.”h]”hŒSset the logic level of the chip select line. May be called from interrupt context.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mûhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjò ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j !h´MühjyubjÒ)�”}”(hŒ1``transfer_one`` transfer a single spi_transfer. ”h]”(jØ)�”}”(hŒ``transfer_one``”h]”hö)�”}”(hj2!h]”hŒ transfer_one”…”�”}”(hj4!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj0!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj,!ubjò)�”}”(hhh]”hÌ)�”}”(hŒtransfer a single spi_transfer.”h]”hŒtransfer a single spi_transfer.”…”�”}”(hjK!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jG!h´MhjH!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj,!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jG!h´MhjyubjÒ)�”}”(hŒ†``handle_err`` the subsystem calls the driver to handle an error that occurs in the generic implementation of transfer_one_message(). ”h]”(jØ)�”}”(hŒ``handle_err``”h]”hö)�”}”(hjk!h]”hŒ handle_err”…”�”}”(hjm!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhji!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhje!ubjò)�”}”(hhh]”hÌ)�”}”(hŒvthe subsystem calls the driver to handle an error that occurs in the generic implementation of transfer_one_message().”h]”hŒvthe subsystem calls the driver to handle an error that occurs in the generic implementation of transfer_one_message().”…”�”}”(hj„!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj�!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhje!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j€!h´MhjyubjÒ)�”}”(hŒÄ``mem_ops`` optimized/dedicated operations for interactions with SPI memory. This field is optional and should only be implemented if the controller has native support for memory like operations. ”h]”(jØ)�”}”(hŒ ``mem_ops``”h]”hö)�”}”(hj¥!h]”hŒmem_ops”…”�”}”(hj§!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj£!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjŸ!ubjò)�”}”(hhh]”hÌ)�”}”(hŒ·optimized/dedicated operations for interactions with SPI memory. This field is optional and should only be implemented if the controller has native support for memory like operations.”h]”hŒ·optimized/dedicated operations for interactions with SPI memory. This field is optional and should only be implemented if the controller has native support for memory like operations.”…”�”}”(hj¾!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj»!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjŸ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jº!h´MhjyubjÒ)�”}”(hŒL``mem_caps`` controller capabilities for the handling of memory operations. ”h]”(jØ)�”}”(hŒ ``mem_caps``”h]”hö)�”}”(hjß!h]”hŒmem_caps”…”�”}”(hjá!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÝ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjÙ!ubjò)�”}”(hhh]”hÌ)�”}”(hŒ>controller capabilities for the handling of memory operations.”h]”hŒ>controller capabilities for the handling of memory operations.”…”�”}”(hjø!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jô!h´Mhjõ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÙ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jô!h´MhjyubjÒ)�”}”(hŒ˜``dtr_caps`` true if controller has dtr(single/dual transfer rate) capability. QSPI based controller should fill this based on controller's capability. ”h]”(jØ)�”}”(hŒ ``dtr_caps``”h]”hö)�”}”(hj"h]”hŒdtr_caps”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj"ubjò)�”}”(hhh]”hÌ)�”}”(hŒŠtrue if controller has dtr(single/dual transfer rate) capability. QSPI based controller should fill this based on controller's capability.”h]”hŒŒtrue if controller has dtr(single/dual transfer rate) capability. QSPI based controller should fill this based on controller’s capability.”…”�”}”(hj1"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj."ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j-"h´MhjyubjÒ)�”}”(hŒœ``get_offload`` callback for controllers with offload support to get matching offload instance. Implementations should return -ENODEV if no match is found. ”h]”(jØ)�”}”(hŒ``get_offload``”h]”hö)�”}”(hjR"h]”hŒ get_offload”…”�”}”(hjT"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjP"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjL"ubjò)�”}”(hhh]”hÌ)�”}”(hŒ‹callback for controllers with offload support to get matching offload instance. Implementations should return -ENODEV if no match is found.”h]”hŒ‹callback for controllers with offload support to get matching offload instance. Implementations should return -ENODEV if no match is found.”…”�”}”(hjk"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjh"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjL"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jg"h´MhjyubjÒ)�”}”(hŒJ``put_offload`` release the offload instance acquired by **get_offload**. ”h]”(jØ)�”}”(hŒ``put_offload``”h]”hö)�”}”(hjŒ"h]”hŒ put_offload”…”�”}”(hjŽ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŠ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj†"ubjò)�”}”(hhh]”hÌ)�”}”(hŒ9release the offload instance acquired by **get_offload**.”h]”(hŒ)release the offload instance acquired by ”…”�”}”(hj¥"h²hh³Nh´Nubj‰)�”}”(hŒ**get_offload**”h]”hŒ get_offload”…”�”}”(hj­"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¥"ubhŒ.”…”�”}”(hj¥"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¡"h´Mhj¢"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj†"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¡"h´MhjyubjÒ)�”}”(hŒÀ``cs_gpiods`` Array of GPIO descriptors to use as chip select lines; one per CS number. Any individual value may be NULL for CS lines that are not GPIOs (driven by the SPI controller itself). ”h]”(jØ)�”}”(hŒ ``cs_gpiods``”h]”hö)�”}”(hj×"h]”hŒ cs_gpiods”…”�”}”(hjÙ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÕ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjÑ"ubjò)�”}”(hhh]”hÌ)�”}”(hŒ±Array of GPIO descriptors to use as chip select lines; one per CS number. Any individual value may be NULL for CS lines that are not GPIOs (driven by the SPI controller itself).”h]”hŒ±Array of GPIO descriptors to use as chip select lines; one per CS number. Any individual value may be NULL for CS lines that are not GPIOs (driven by the SPI controller itself).”…”�”}”(hjð"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjí"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÑ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jì"h´MhjyubjÒ)�”}”(hŒÛ``use_gpio_descriptors`` Turns on the code in the SPI core to parse and grab GPIO descriptors. This will fill in **cs_gpiods** and SPI devices will have the cs_gpiod assigned if a GPIO line is found for the chipselect. ”h]”(jØ)�”}”(hŒ``use_gpio_descriptors``”h]”hö)�”}”(hj#h]”hŒuse_gpio_descriptors”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M"hj #ubjò)�”}”(hhh]”hÌ)�”}”(hŒÁTurns on the code in the SPI core to parse and grab GPIO descriptors. This will fill in **cs_gpiods** and SPI devices will have the cs_gpiod assigned if a GPIO line is found for the chipselect.”h]”(hŒXTurns on the code in the SPI core to parse and grab GPIO descriptors. This will fill in ”…”�”}”(hj*#h²hh³Nh´Nubj‰)�”}”(hŒ **cs_gpiods**”h]”hŒ cs_gpiods”…”�”}”(hj2#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj*#ubhŒ\ and SPI devices will have the cs_gpiod assigned if a GPIO line is found for the chipselect.”…”�”}”(hj*#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj'#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj #ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j&#h´M"hjyubjÒ)�”}”(hŒØ``unused_native_cs`` When cs_gpiods is used, spi_register_controller() will fill in this field with the first unused native CS, to be used by SPI controller drivers that need to drive a native CS when using GPIO CS. ”h]”(jØ)�”}”(hŒ``unused_native_cs``”h]”hö)�”}”(hj]#h]”hŒunused_native_cs”…”�”}”(hj_#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj[#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M%hjW#ubjò)�”}”(hhh]”hÌ)�”}”(hŒÂWhen cs_gpiods is used, spi_register_controller() will fill in this field with the first unused native CS, to be used by SPI controller drivers that need to drive a native CS when using GPIO CS.”h]”hŒÂWhen cs_gpiods is used, spi_register_controller() will fill in this field with the first unused native CS, to be used by SPI controller drivers that need to drive a native CS when using GPIO CS.”…”�”}”(hjv#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M#hjs#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjW#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jr#h´M%hjyubjÒ)�”}”(hŒ²``max_native_cs`` When cs_gpiods is used, and this field is filled in, spi_register_controller() will validate all native CS (including the unused native CS) against this value. ”h]”(jØ)�”}”(hŒ``max_native_cs``”h]”hö)�”}”(hj—#h]”hŒ max_native_cs”…”�”}”(hj™#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj•#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M(hj‘#ubjò)�”}”(hhh]”hÌ)�”}”(hŒŸWhen cs_gpiods is used, and this field is filled in, spi_register_controller() will validate all native CS (including the unused native CS) against this value.”h]”hŒŸWhen cs_gpiods is used, and this field is filled in, spi_register_controller() will validate all native CS (including the unused native CS) against this value.”…”�”}”(hj°#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M&hj­#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj‘#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¬#h´M(hjyubjÒ)�”}”(hŒ6``pcpu_statistics`` statistics for the spi_controller ”h]”(jØ)�”}”(hŒ``pcpu_statistics``”h]”hö)�”}”(hjÑ#h]”hŒpcpu_statistics”…”�”}”(hjÓ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÏ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M)hjË#ubjò)�”}”(hhh]”hÌ)�”}”(hŒ!statistics for the spi_controller”h]”hŒ!statistics for the spi_controller”…”�”}”(hjê#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jæ#h´M)hjç#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjË#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jæ#h´M)hjyubjÒ)�”}”(hŒ ``dma_tx`` DMA transmit channel ”h]”(jØ)�”}”(hŒ ``dma_tx``”h]”hö)�”}”(hj $h]”hŒdma_tx”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M*hj$ubjò)�”}”(hhh]”hÌ)�”}”(hŒDMA transmit channel”h]”hŒDMA transmit channel”…”�”}”(hj#$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j$h´M*hj $ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j$h´M*hjyubjÒ)�”}”(hŒ``dma_rx`` DMA receive channel ”h]”(jØ)�”}”(hŒ ``dma_rx``”h]”hö)�”}”(hjC$h]”hŒdma_rx”…”�”}”(hjE$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjA$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M+hj=$ubjò)�”}”(hhh]”hÌ)�”}”(hŒDMA receive channel”h]”hŒDMA receive channel”…”�”}”(hj\$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jX$h´M+hjY$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj=$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jX$h´M+hjyubjÒ)�”}”(hŒ:``dummy_rx`` dummy receive buffer for full-duplex devices ”h]”(jØ)�”}”(hŒ ``dummy_rx``”h]”hö)�”}”(hj|$h]”hŒdummy_rx”…”�”}”(hj~$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjz$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M,hjv$ubjò)�”}”(hhh]”hÌ)�”}”(hŒ,dummy receive buffer for full-duplex devices”h]”hŒ,dummy receive buffer for full-duplex devices”…”�”}”(hj•$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‘$h´M,hj’$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjv$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j‘$h´M,hjyubjÒ)�”}”(hŒ;``dummy_tx`` dummy transmit buffer for full-duplex devices ”h]”(jØ)�”}”(hŒ ``dummy_tx``”h]”hö)�”}”(hjµ$h]”hŒdummy_tx”…”�”}”(hj·$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj³$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M-hj¯$ubjò)�”}”(hhh]”hÌ)�”}”(hŒ-dummy transmit buffer for full-duplex devices”h]”hŒ-dummy transmit buffer for full-duplex devices”…”�”}”(hjÎ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÊ$h´M-hjË$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¯$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÊ$h´M-hjyubjÒ)�”}”(hŒš``fw_translate_cs`` If the boot firmware uses different numbering scheme what Linux expects, this optional hook can be used to translate between the two. ”h]”(jØ)�”}”(hŒ``fw_translate_cs``”h]”hö)�”}”(hjî$h]”hŒfw_translate_cs”…”�”}”(hjð$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjì$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M0hjè$ubjò)�”}”(hhh]”hÌ)�”}”(hŒ…If the boot firmware uses different numbering scheme what Linux expects, this optional hook can be used to translate between the two.”h]”hŒ…If the boot firmware uses different numbering scheme what Linux expects, this optional hook can be used to translate between the two.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M.hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjè$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j%h´M0hjyubjÒ)�”}”(hXp``ptp_sts_supported`` If the driver sets this to true, it must provide a time snapshot in **spi_transfer->ptp_sts** as close as possible to the moment in time when **spi_transfer->ptp_sts_word_pre** and **spi_transfer->ptp_sts_word_post** were transmitted. If the driver does not set this, the SPI core takes the snapshot as close to the driver hand-over as possible. ”h]”(jØ)�”}”(hŒ``ptp_sts_supported``”h]”hö)�”}”(hj(%h]”hŒptp_sts_supported”…”�”}”(hj*%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj&%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M6hj"%ubjò)�”}”(hhh]”hÌ)�”}”(hXYIf the driver sets this to true, it must provide a time snapshot in **spi_transfer->ptp_sts** as close as possible to the moment in time when **spi_transfer->ptp_sts_word_pre** and **spi_transfer->ptp_sts_word_post** were transmitted. If the driver does not set this, the SPI core takes the snapshot as close to the driver hand-over as possible.”h]”(hŒDIf the driver sets this to true, it must provide a time snapshot in ”…”�”}”(hjA%h²hh³Nh´Nubj‰)�”}”(hŒ**spi_transfer->ptp_sts**”h]”hŒspi_transfer->ptp_sts”…”�”}”(hjI%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjA%ubhŒ1 as close as possible to the moment in time when ”…”�”}”(hjA%h²hh³Nh´Nubj‰)�”}”(hŒ"**spi_transfer->ptp_sts_word_pre**”h]”hŒspi_transfer->ptp_sts_word_pre”…”�”}”(hj[%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjA%ubhŒ and ”…”�”}”(hjA%h²hh³Nh´Nubj‰)�”}”(hŒ#**spi_transfer->ptp_sts_word_post**”h]”hŒspi_transfer->ptp_sts_word_post”…”�”}”(hjm%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjA%ubhŒ� were transmitted. If the driver does not set this, the SPI core takes the snapshot as close to the driver hand-over as possible.”…”�”}”(hjA%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M1hj>%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj"%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j=%h´M6hjyubjÒ)�”}”(hŒD``irq_flags`` Interrupt enable state during PTP system timestamping ”h]”(jØ)�”}”(hŒ ``irq_flags``”h]”hö)�”}”(hj˜%h]”hŒ irq_flags”…”�”}”(hjš%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj–%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M7hj’%ubjò)�”}”(hhh]”hÌ)�”}”(hŒ5Interrupt enable state during PTP system timestamping”h]”hŒ5Interrupt enable state during PTP system timestamping”…”�”}”(hj±%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j­%h´M7hj®%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj’%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j­%h´M7hjyubjÒ)�”}”(hŒd``queue_empty`` signal green light for opportunistically skipping the queue for spi_sync transfers. ”h]”(jØ)�”}”(hŒ``queue_empty``”h]”hö)�”}”(hjÑ%h]”hŒ queue_empty”…”�”}”(hjÓ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÏ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M9hjË%ubjò)�”}”(hhh]”hÌ)�”}”(hŒSsignal green light for opportunistically skipping the queue for spi_sync transfers.”h]”hŒSsignal green light for opportunistically skipping the queue for spi_sync transfers.”…”�”}”(hjê%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M8hjç%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjË%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jæ%h´M9hjyubjÒ)�”}”(hŒ2``must_async`` disable all fast paths in the core ”h]”(jØ)�”}”(hŒ``must_async``”h]”hö)�”}”(hj &h]”hŒ must_async”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M:hj&ubjò)�”}”(hhh]”hÌ)�”}”(hŒ"disable all fast paths in the core”h]”hŒ"disable all fast paths in the core”…”�”}”(hj$&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j &h´M:hj!&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j &h´M:hjyubjÒ)�”}”(hŒ«``defer_optimize_message`` set to true if controller cannot pre-optimize messages and needs to defer the optimization step until the message is actually being transferred ”h]”(jØ)�”}”(hŒ``defer_optimize_message``”h]”hö)�”}”(hjD&h]”hŒdefer_optimize_message”…”�”}”(hjF&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjB&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M=hj>&ubjò)�”}”(hhh]”hÌ)�”}”(hŒ�set to true if controller cannot pre-optimize messages and needs to defer the optimization step until the message is actually being transferred”h]”hŒ�set to true if controller cannot pre-optimize messages and needs to defer the optimization step until the message is actually being transferred”…”�”}”(hj]&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M;hjZ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj>&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jY&h´M=hjyubjÒ)�”}”(hŒ„``userspace_clients`` list of SPI devices instantiated from userspace via the sysfs new_device interface; protected by **add_lock** ”h]”(jØ)�”}”(hŒ``userspace_clients``”h]”hö)�”}”(hj~&h]”hŒuserspace_clients”…”�”}”(hj€&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj|&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M?hjx&ubjò)�”}”(hhh]”hÌ)�”}”(hŒmlist of SPI devices instantiated from userspace via the sysfs new_device interface; protected by **add_lock**”h]”(hŒalist of SPI devices instantiated from userspace via the sysfs new_device interface; protected by ”…”�”}”(hj—&h²hh³Nh´Nubj‰)�”}”(hŒ **add_lock**”h]”hŒadd_lock”…”�”}”(hjŸ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj—&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M>hj”&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjx&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j“&h´M?hjyubjÒ)�”}”(hŒ¹``userspace_registered`` true once the new_device/delete_device sysfs group has been added by spi_register_controller(); used by spi_unregister_controller() to know whether to remove it”h]”(jØ)�”}”(hŒ``userspace_registered``”h]”hö)�”}”(hjÆ&h]”hŒuserspace_registered”…”�”}”(hjÈ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÄ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MAhjÀ&ubjò)�”}”(hhh]”hÌ)�”}”(hŒ true once the new_device/delete_device sysfs group has been added by spi_register_controller(); used by spi_unregister_controller() to know whether to remove it”h]”hŒ true once the new_device/delete_device sysfs group has been added by spi_register_controller(); used by spi_unregister_controller() to know whether to remove it”…”�”}”(hjß&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M@hjÜ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÀ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÛ&h´MAhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj 'h]”hŒ Description”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MEhh·h²hubj)�”}”(hXƒ- return 0 if the transfer is finished, - return 1 if the transfer is still in progress. When the driver is finished with this transfer it must call spi_finalize_current_transfer() so the subsystem can issue the next transfer. If the transfer fails, the driver must set the flag SPI_TRANS_FAIL_IO to spi_transfer->error first, before calling spi_finalize_current_transfer(). ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ%return 0 if the transfer is finished,”h]”hÌ)�”}”(hj,'h]”hŒ%return 0 if the transfer is finished,”…”�”}”(hj.'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj*'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j('hj%'ubj)')�”}”(hXMreturn 1 if the transfer is still in progress. When the driver is finished with this transfer it must call spi_finalize_current_transfer() so the subsystem can issue the next transfer. If the transfer fails, the driver must set the flag SPI_TRANS_FAIL_IO to spi_transfer->error first, before calling spi_finalize_current_transfer(). ”h]”hÌ)�”}”(hXLreturn 1 if the transfer is still in progress. When the driver is finished with this transfer it must call spi_finalize_current_transfer() so the subsystem can issue the next transfer. If the transfer fails, the driver must set the flag SPI_TRANS_FAIL_IO to spi_transfer->error first, before calling spi_finalize_current_transfer().”h]”hXLreturn 1 if the transfer is still in progress. When the driver is finished with this transfer it must call spi_finalize_current_transfer() so the subsystem can issue the next transfer. If the transfer fails, the driver must set the flag SPI_TRANS_FAIL_IO to spi_transfer->error first, before calling spi_finalize_current_transfer().”…”�”}”(hjF'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjB'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j('hj%'ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j#'h³j;'h´Mhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;'h´Mhh·h²hubhÌ)�”}”(hX(Each SPI controller can communicate with one or more **spi_device** children. These make a small bus, sharing MOSI, MISO and SCK signals but not chip select signals. Each device may be configured to use a different clock rate, since those shared signals are ignored unless the chip is selected.”h]”(hŒ5Each SPI controller can communicate with one or more ”…”�”}”(hji'h²hh³Nh´Nubj‰)�”}”(hŒ**spi_device**”h]”hŒ spi_device”…”�”}”(hjq'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhji'ubhŒå children. These make a small bus, sharing MOSI, MISO and SCK signals but not chip select signals. Each device may be configured to use a different clock rate, since those shared signals are ignored unless the chip is selected.”…”�”}”(hji'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hh·h²hubhÌ)�”}”(hXThe driver for an SPI controller manages access to those devices through a queue of spi_message transactions, copying data between CPU memory and an SPI target device. For each such message it queues, it calls the message's completion function when the transaction completes.”h]”hXThe driver for an SPI controller manages access to those devices through a queue of spi_message transactions, copying data between CPU memory and an SPI target device. For each such message it queues, it calls the message’s completion function when the transaction completes.”…”�”}”(hjŠ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhh·h²hubhÌ)�”}”(hŒ**Note**”h]”j‰)�”}”(hj›'h]”hŒNote”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj™'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhh·h²hubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ”transfer_one and transfer_one_message are mutually exclusive; when both are set, the generic subsystem does not call your transfer_one callback. ”h]”(jØ)�”}”(hŒ2transfer_one and transfer_one_message are mutually”h]”hŒ2transfer_one and transfer_one_message are mutually”…”�”}”(hj¸'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj´'ubjò)�”}”(hhh]”hÌ)�”}”(hŒ]exclusive; when both are set, the generic subsystem does not call your transfer_one callback.”h]”hŒ]exclusive; when both are set, the generic subsystem does not call your transfer_one callback.”…”�”}”(hjÊ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hjÇ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj´'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÆ'h´Mhj±'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_res (C struct)”Œ c.spi_res”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒspi_res”h]”jû)�”}”(hŒstruct spi_res”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj(h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(h²hh³j(h´Mubj$)�”}”(hŒspi_res”h]”j*)�”}”(hjþ'h]”hŒspi_res”…”�”}”(hj$(h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj (ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj(h²hh³j(h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjü'h²hh³j(h´Mubah}”(h]”j÷'ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j(h´Mhjù'h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ!SPI resource management structure”h]”hŒ!SPI resource management structure”…”�”}”(hjF(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MËhjC(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjù'h²hh³j(h´Mubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj^(jzj^(j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX7**Definition**:: struct spi_res { struct list_head entry; spi_res_release_t release; unsigned long long data[]; }; **Members** ``entry`` list entry ``release`` release code called prior to freeing this resource ``data`` extra data allocated for the specific use-case”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjf(ubhŒ:”…”�”}”(hjf(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÏhjb(ubj¤)�”}”(hŒystruct spi_res { struct list_head entry; spi_res_release_t release; unsigned long long data[]; };”h]”hŒystruct spi_res { struct list_head entry; spi_res_release_t release; unsigned long long data[]; };”…”�”}”hjƒ(sbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÑhjb(ubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hj”(h]”hŒMembers”…”�”}”(hj–(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj’(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M×hjb(ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ``entry`` list entry ”h]”(jØ)�”}”(hŒ ``entry``”h]”hö)�”}”(hj³(h]”hŒentry”…”�”}”(hjµ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj±(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÍhj­(ubjò)�”}”(hhh]”hÌ)�”}”(hŒ list entry”h]”hŒ list entry”…”�”}”(hjÌ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÈ(h´MÍhjÉ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj­(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÈ(h´MÍhjª(ubjÒ)�”}”(hŒ?``release`` release code called prior to freeing this resource ”h]”(jØ)�”}”(hŒ ``release``”h]”hö)�”}”(hjì(h]”hŒrelease”…”�”}”(hjî(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjê(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÎhjæ(ubjò)�”}”(hhh]”hÌ)�”}”(hŒ2release code called prior to freeing this resource”h]”hŒ2release code called prior to freeing this resource”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j)h´MÎhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjæ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j)h´MÎhjª(ubjÒ)�”}”(hŒ7``data`` extra data allocated for the specific use-case”h]”(jØ)�”}”(hŒ``data``”h]”hö)�”}”(hj%)h]”hŒdata”…”�”}”(hj')h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj#)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÎhj)ubjò)�”}”(hhh]”hÌ)�”}”(hŒ.extra data allocated for the specific use-case”h]”hŒ.extra data allocated for the specific use-case”…”�”}”(hj>)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÏhj;)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j:)h´MÎhjª(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjb(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjh)h]”hŒ Description”…”�”}”(hjj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjf)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÒhh·h²hubhÌ)�”}”(hŒgThis is based on ideas from devres, but focused on life-cycle management during spi_message processing.”h]”hŒgThis is based on ideas from devres, but focused on life-cycle management during spi_message processing.”…”�”}”(hj~)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÏhh·h²hubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_transfer (C struct)”Œc.spi_transfer”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ spi_transfer”h]”jû)�”}”(hŒstruct spi_transfer”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¦)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj¢)h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÕubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢)h²hh³j³)h´MÕubj$)�”}”(hŒ spi_transfer”h]”j*)�”}”(hj )h]”hŒ spi_transfer”…”�”}”(hjÆ)h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÂ)ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj¢)h²hh³j³)h´MÕubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjž)h²hh³j³)h´MÕubah}”(h]”j™)ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j³)h´MÕhj›)h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒa read/write buffer pair”h]”hŒa read/write buffer pair”…”�”}”(hjè)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Míhjå)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj›)h²hh³j³)h´MÕubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj*jzj*j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX**Definition**:: struct spi_transfer { const void *tx_buf; void *rx_buf; unsigned len; #define SPI_TRANS_FAIL_NO_START BIT(0); #define SPI_TRANS_FAIL_IO BIT(1); u16 error; bool tx_sg_mapped; bool rx_sg_mapped; struct sg_table tx_sg; struct sg_table rx_sg; dma_addr_t tx_dma; dma_addr_t rx_dma; unsigned dummy_data:1; unsigned cs_off:1; unsigned cs_change:1; unsigned tx_nbits:4; unsigned rx_nbits:4; #define SPI_MULTI_LANE_MODE_SINGLE 0 ; #define SPI_MULTI_LANE_MODE_STRIPE 1 ; #define SPI_MULTI_LANE_MODE_MIRROR 2 ; unsigned multi_lane_mode: 2; unsigned timestamped:1; bool dtr_mode; #define SPI_NBITS_SINGLE 0x01 ; #define SPI_NBITS_DUAL 0x02 ; #define SPI_NBITS_QUAD 0x04 ; #define SPI_NBITS_OCTAL 0x08 ; u8 bits_per_word; struct spi_delay delay; struct spi_delay cs_change_delay; struct spi_delay word_delay; u32 speed_hz; u32 effective_speed_hz; unsigned int offload_flags; unsigned int ptp_sts_word_pre; unsigned int ptp_sts_word_post; struct ptp_system_timestamp *ptp_sts; struct list_head transfer_list; }; **Members** ``tx_buf`` data to be written (DMA-safe memory), or NULL ``rx_buf`` data to be read (DMA-safe memory), or NULL ``len`` size of rx and tx buffers (in bytes) ``error`` Error status logged by SPI controller driver. ``tx_sg_mapped`` If true, the **tx_sg** is mapped for DMA ``rx_sg_mapped`` If true, the **rx_sg** is mapped for DMA ``tx_sg`` Scatterlist for transmit, currently not for client use ``rx_sg`` Scatterlist for receive, currently not for client use ``tx_dma`` DMA address of tx_buf, currently not for client use ``rx_dma`` DMA address of rx_buf, currently not for client use ``dummy_data`` indicates transfer is dummy bytes transfer. ``cs_off`` performs the transfer with chipselect off. ``cs_change`` affects chipselect after this transfer completes ``tx_nbits`` number of bits used for writing. If 0 the default (SPI_NBITS_SINGLE) is used. ``rx_nbits`` number of bits used for reading. If 0 the default (SPI_NBITS_SINGLE) is used. ``multi_lane_mode`` How to serialize data on multiple lanes. One of the SPI_MULTI_LANE_MODE_* values. ``timestamped`` true if the transfer has been timestamped ``dtr_mode`` true if supports double transfer rate. ``bits_per_word`` select a bits_per_word other than the device default for this transfer. If 0 the default (from **spi_device**) is used. ``delay`` delay to be introduced after this transfer before (optionally) changing the chipselect status, then starting the next transfer or completing this **spi_message**. ``cs_change_delay`` delay between cs deassert and assert when **cs_change** is set and **spi_transfer** is not the last in **spi_message** ``word_delay`` inter word delay to be introduced after each word size (set by bits_per_word) transmission. ``speed_hz`` Select a speed other than the device default for this transfer. If 0 the default (from **spi_device**) is used. ``effective_speed_hz`` the effective SCK-speed that was used to transfer this transfer. Set to 0 if the SPI bus driver does not support it. ``offload_flags`` Flags that are only applicable to specialized SPI offload transfers. See ``SPI_OFFLOAD_XFER_*`` in spi-offload.h. ``ptp_sts_word_pre`` The word (subject to bits_per_word semantics) offset within **tx_buf** for which the SPI device is requesting that the time snapshot for this transfer begins. Upon completing the SPI transfer, this value may have changed compared to what was requested, depending on the available snapshotting resolution (DMA transfer, **ptp_sts_supported** is false, etc). ``ptp_sts_word_post`` See **ptp_sts_word_pre**. The two can be equal (meaning that a single byte should be snapshotted). If the core takes care of the timestamp (if **ptp_sts_supported** is false for this controller), it will set **ptp_sts_word_pre** to 0, and **ptp_sts_word_post** to the length of the transfer. This is done purposefully (instead of setting to spi_transfer->len - 1) to denote that a transfer-level snapshot taken from within the driver may still be of higher quality. ``ptp_sts`` Pointer to a memory location held by the SPI target device where a PTP system timestamp structure may lie. If drivers use PIO or their hardware has some sort of assist for retrieving exact transfer timing, they can (and should) assert **ptp_sts_supported** and populate this structure using the ptp_read_system_*ts helper functions. The timestamp must represent the time at which the SPI target device has processed the word, i.e. the "pre" timestamp should be taken before transmitting the "pre" word, and the "post" timestamp after receiving transmit confirmation from the controller for the "post" word. ``transfer_list`` transfers are sequenced through **spi_message.transfers**”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj *h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj*ubhŒ:”…”�”}”(hj*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mñhj*ubj¤)�”}”(hXªstruct spi_transfer { const void *tx_buf; void *rx_buf; unsigned len; #define SPI_TRANS_FAIL_NO_START BIT(0); #define SPI_TRANS_FAIL_IO BIT(1); u16 error; bool tx_sg_mapped; bool rx_sg_mapped; struct sg_table tx_sg; struct sg_table rx_sg; dma_addr_t tx_dma; dma_addr_t rx_dma; unsigned dummy_data:1; unsigned cs_off:1; unsigned cs_change:1; unsigned tx_nbits:4; unsigned rx_nbits:4; #define SPI_MULTI_LANE_MODE_SINGLE 0 ; #define SPI_MULTI_LANE_MODE_STRIPE 1 ; #define SPI_MULTI_LANE_MODE_MIRROR 2 ; unsigned multi_lane_mode: 2; unsigned timestamped:1; bool dtr_mode; #define SPI_NBITS_SINGLE 0x01 ; #define SPI_NBITS_DUAL 0x02 ; #define SPI_NBITS_QUAD 0x04 ; #define SPI_NBITS_OCTAL 0x08 ; u8 bits_per_word; struct spi_delay delay; struct spi_delay cs_change_delay; struct spi_delay word_delay; u32 speed_hz; u32 effective_speed_hz; unsigned int offload_flags; unsigned int ptp_sts_word_pre; unsigned int ptp_sts_word_post; struct ptp_system_timestamp *ptp_sts; struct list_head transfer_list; };”h]”hXªstruct spi_transfer { const void *tx_buf; void *rx_buf; unsigned len; #define SPI_TRANS_FAIL_NO_START BIT(0); #define SPI_TRANS_FAIL_IO BIT(1); u16 error; bool tx_sg_mapped; bool rx_sg_mapped; struct sg_table tx_sg; struct sg_table rx_sg; dma_addr_t tx_dma; dma_addr_t rx_dma; unsigned dummy_data:1; unsigned cs_off:1; unsigned cs_change:1; unsigned tx_nbits:4; unsigned rx_nbits:4; #define SPI_MULTI_LANE_MODE_SINGLE 0 ; #define SPI_MULTI_LANE_MODE_STRIPE 1 ; #define SPI_MULTI_LANE_MODE_MIRROR 2 ; unsigned multi_lane_mode: 2; unsigned timestamped:1; bool dtr_mode; #define SPI_NBITS_SINGLE 0x01 ; #define SPI_NBITS_DUAL 0x02 ; #define SPI_NBITS_QUAD 0x04 ; #define SPI_NBITS_OCTAL 0x08 ; u8 bits_per_word; struct spi_delay delay; struct spi_delay cs_change_delay; struct spi_delay word_delay; u32 speed_hz; u32 effective_speed_hz; unsigned int offload_flags; unsigned int ptp_sts_word_pre; unsigned int ptp_sts_word_post; struct ptp_system_timestamp *ptp_sts; struct list_head transfer_list; };”…”�”}”hj%*sbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Móhj*ubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hj6*h]”hŒMembers”…”�”}”(hj8*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj4*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj*ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ9``tx_buf`` data to be written (DMA-safe memory), or NULL ”h]”(jØ)�”}”(hŒ ``tx_buf``”h]”hö)�”}”(hjU*h]”hŒtx_buf”…”�”}”(hjW*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjS*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MïhjO*ubjò)�”}”(hhh]”hÌ)�”}”(hŒ-data to be written (DMA-safe memory), or NULL”h]”hŒ-data to be written (DMA-safe memory), or NULL”…”�”}”(hjn*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jj*h´Mïhjk*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjO*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jj*h´MïhjL*ubjÒ)�”}”(hŒ6``rx_buf`` data to be read (DMA-safe memory), or NULL ”h]”(jØ)�”}”(hŒ ``rx_buf``”h]”hö)�”}”(hjŽ*h]”hŒrx_buf”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŒ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mðhjˆ*ubjò)�”}”(hhh]”hÌ)�”}”(hŒ*data to be read (DMA-safe memory), or NULL”h]”hŒ*data to be read (DMA-safe memory), or NULL”…”�”}”(hj§*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j£*h´Mðhj¤*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjˆ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j£*h´MðhjL*ubjÒ)�”}”(hŒ-``len`` size of rx and tx buffers (in bytes) ”h]”(jØ)�”}”(hŒ``len``”h]”hö)�”}”(hjÇ*h]”hŒlen”…”�”}”(hjÉ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÅ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MùhjÁ*ubjò)�”}”(hhh]”hÌ)�”}”(hŒ$size of rx and tx buffers (in bytes)”h]”hŒ$size of rx and tx buffers (in bytes)”…”�”}”(hjà*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÜ*h´MùhjÝ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÁ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÜ*h´MùhjL*ubjÒ)�”}”(hŒ8``error`` Error status logged by SPI controller driver. ”h]”(jØ)�”}”(hŒ ``error``”h]”hö)�”}”(hj+h]”hŒerror”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjþ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M+hjú*ubjò)�”}”(hhh]”hÌ)�”}”(hŒ-Error status logged by SPI controller driver.”h]”hŒ-Error status logged by SPI controller driver.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j+h´M+hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjú*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j+h´M+hjL*ubjÒ)�”}”(hŒ:``tx_sg_mapped`` If true, the **tx_sg** is mapped for DMA ”h]”(jØ)�”}”(hŒ``tx_sg_mapped``”h]”hö)�”}”(hj9+h]”hŒ tx_sg_mapped”…”�”}”(hj;+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj7+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj3+ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(If true, the **tx_sg** is mapped for DMA”h]”(hŒ If true, the ”…”�”}”(hjR+h²hh³Nh´Nubj‰)�”}”(hŒ **tx_sg**”h]”hŒtx_sg”…”�”}”(hjZ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjR+ubhŒ is mapped for DMA”…”�”}”(hjR+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jN+h´M hjO+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj3+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jN+h´M hjL*ubjÒ)�”}”(hŒ:``rx_sg_mapped`` If true, the **rx_sg** is mapped for DMA ”h]”(jØ)�”}”(hŒ``rx_sg_mapped``”h]”hö)�”}”(hj„+h]”hŒ rx_sg_mapped”…”�”}”(hj†+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj‚+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj~+ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(If true, the **rx_sg** is mapped for DMA”h]”(hŒ If true, the ”…”�”}”(hj�+h²hh³Nh´Nubj‰)�”}”(hŒ **rx_sg**”h]”hŒrx_sg”…”�”}”(hj¥+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj�+ubhŒ is mapped for DMA”…”�”}”(hj�+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j™+h´M hjš+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj~+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j™+h´M hjL*ubjÒ)�”}”(hŒA``tx_sg`` Scatterlist for transmit, currently not for client use ”h]”(jØ)�”}”(hŒ ``tx_sg``”h]”hö)�”}”(hjÏ+h]”hŒtx_sg”…”�”}”(hjÑ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÍ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjÉ+ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6Scatterlist for transmit, currently not for client use”h]”hŒ6Scatterlist for transmit, currently not for client use”…”�”}”(hjè+h²hh³Nh´Nubah}”(h]”h ]”•h"]”h$]”h&]”uh1hËh³jä+h´Mhjå+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÉ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jä+h´MhjL*ubjÒ)�”}”(hŒ@``rx_sg`` Scatterlist for receive, currently not for client use ”h]”(jØ)�”}”(hŒ ``rx_sg``”h]”hö)�”}”(hj,h]”hŒrx_sg”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj,ubjò)�”}”(hhh]”hÌ)�”}”(hŒ5Scatterlist for receive, currently not for client use”h]”hŒ5Scatterlist for receive, currently not for client use”…”�”}”(hj!,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j,h´Mhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j,h´MhjL*ubjÒ)�”}”(hŒ?``tx_dma`` DMA address of tx_buf, currently not for client use ”h]”(jØ)�”}”(hŒ ``tx_dma``”h]”hö)�”}”(hjA,h]”hŒtx_dma”…”�”}”(hjC,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj?,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mñhj;,ubjò)�”}”(hhh]”hÌ)�”}”(hŒ3DMA address of tx_buf, currently not for client use”h]”hŒ3DMA address of tx_buf, currently not for client use”…”�”}”(hjZ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jV,h´MñhjW,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj;,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jV,h´MñhjL*ubjÒ)�”}”(hŒ?``rx_dma`` DMA address of rx_buf, currently not for client use ”h]”(jØ)�”}”(hŒ ``rx_dma``”h]”hö)�”}”(hjz,h]”hŒrx_dma”…”�”}”(hj|,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjx,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mòhjt,ubjò)�”}”(hhh]”hÌ)�”}”(hŒ3DMA address of rx_buf, currently not for client use”h]”hŒ3DMA address of rx_buf, currently not for client use”…”�”}”(hj“,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�,h´Mòhj�,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjt,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�,h´MòhjL*ubjÒ)�”}”(hŒ;``dummy_data`` indicates transfer is dummy bytes transfer. ”h]”(jØ)�”}”(hŒ``dummy_data``”h]”hö)�”}”(hj³,h]”hŒ dummy_data”…”�”}”(hjµ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj±,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mþhj­,ubjò)�”}”(hhh]”hÌ)�”}”(hŒ+indicates transfer is dummy bytes transfer.”h]”hŒ+indicates transfer is dummy bytes transfer.”…”�”}”(hjÌ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÈ,h´MþhjÉ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj­,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÈ,h´MþhjL*ubjÒ)�”}”(hŒ6``cs_off`` performs the transfer with chipselect off. ”h]”(jØ)�”}”(hŒ ``cs_off``”h]”hö)�”}”(hjì,h]”hŒcs_off”…”�”}”(hjî,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjê,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mÿhjæ,ubjò)�”}”(hhh]”hÌ)�”}”(hŒ*performs the transfer with chipselect off.”h]”hŒ*performs the transfer with chipselect off.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j-h´Mÿhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjæ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j-h´MÿhjL*ubjÒ)�”}”(hŒ?``cs_change`` affects chipselect after this transfer completes ”h]”(jØ)�”}”(hŒ ``cs_change``”h]”hö)�”}”(hj%-h]”hŒ cs_change”…”�”}”(hj'-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj#-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj-ubjò)�”}”(hhh]”hÌ)�”}”(hŒ0affects chipselect after this transfer completes”h]”hŒ0affects chipselect after this transfer completes”…”�”}”(hj>-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j:-h´Mhj;-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j:-h´MhjL*ubjÒ)�”}”(hŒ[``tx_nbits`` number of bits used for writing. If 0 the default (SPI_NBITS_SINGLE) is used. ”h]”(jØ)�”}”(hŒ ``tx_nbits``”h]”hö)�”}”(hj^-h]”hŒtx_nbits”…”�”}”(hj`-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj\-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MôhjX-ubjò)�”}”(hhh]”hÌ)�”}”(hŒMnumber of bits used for writing. If 0 the default (SPI_NBITS_SINGLE) is used.”h]”hŒMnumber of bits used for writing. If 0 the default (SPI_NBITS_SINGLE) is used.”…”�”}”(hjw-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Móhjt-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjX-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³js-h´MôhjL*ubjÒ)�”}”(hŒ[``rx_nbits`` number of bits used for reading. If 0 the default (SPI_NBITS_SINGLE) is used. ”h]”(jØ)�”}”(hŒ ``rx_nbits``”h]”hö)�”}”(hj˜-h]”hŒrx_nbits”…”�”}”(hjš-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj–-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Möhj’-ubjò)�”}”(hhh]”hÌ)�”}”(hŒMnumber of bits used for reading. If 0 the default (SPI_NBITS_SINGLE) is used.”h]”hŒMnumber of bits used for reading. If 0 the default (SPI_NBITS_SINGLE) is used.”…”�”}”(hj±-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mõhj®-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj’-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j­-h´MöhjL*ubjÒ)�”}”(hŒf``multi_lane_mode`` How to serialize data on multiple lanes. One of the SPI_MULTI_LANE_MODE_* values. ”h]”(jØ)�”}”(hŒ``multi_lane_mode``”h]”hö)�”}”(hjÒ-h]”hŒmulti_lane_mode”…”�”}”(hjÔ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÐ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MøhjÌ-ubjò)�”}”(hhh]”hÌ)�”}”(hŒQHow to serialize data on multiple lanes. One of the SPI_MULTI_LANE_MODE_* values.”h]”hŒQHow to serialize data on multiple lanes. One of the SPI_MULTI_LANE_MODE_* values.”…”�”}”(hjë-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M÷hjè-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÌ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jç-h´MøhjL*ubjÒ)�”}”(hŒ:``timestamped`` true if the transfer has been timestamped ”h]”(jØ)�”}”(hŒ``timestamped``”h]”hö)�”}”(hj .h]”hŒ timestamped”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M*hj.ubjò)�”}”(hhh]”hÌ)�”}”(hŒ)true if the transfer has been timestamped”h]”hŒ)true if the transfer has been timestamped”…”�”}”(hj%.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!.h´M*hj".ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j!.h´M*hjL*ubjÒ)�”}”(hŒ4``dtr_mode`` true if supports double transfer rate. ”h]”(jØ)�”}”(hŒ ``dtr_mode``”h]”hö)�”}”(hjE.h]”hŒdtr_mode”…”�”}”(hjG.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjC.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M)hj?.ubjò)�”}”(hhh]”hÌ)�”}”(hŒ&true if supports double transfer rate.”h]”hŒ&true if supports double transfer rate.”…”�”}”(hj^.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZ.h´M)hj[.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj?.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jZ.h´M)hjL*ubjÒ)�”}”(hŒŠ``bits_per_word`` select a bits_per_word other than the device default for this transfer. If 0 the default (from **spi_device**) is used. ”h]”(jØ)�”}”(hŒ``bits_per_word``”h]”hö)�”}”(hj~.h]”hŒ bits_per_word”…”�”}”(hj€.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj|.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mýhjx.ubjò)�”}”(hhh]”hÌ)�”}”(hŒwselect a bits_per_word other than the device default for this transfer. If 0 the default (from **spi_device**) is used.”h]”(hŒ_select a bits_per_word other than the device default for this transfer. If 0 the default (from ”…”�”}”(hj—.h²hh³Nh´Nubj‰)�”}”(hŒ**spi_device**”h]”hŒ spi_device”…”�”}”(hjŸ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj—.ubhŒ ) is used.”…”�”}”(hj—.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mühj”.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjx.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j“.h´MýhjL*ubjÒ)�”}”(hŒ­``delay`` delay to be introduced after this transfer before (optionally) changing the chipselect status, then starting the next transfer or completing this **spi_message**. ”h]”(jØ)�”}”(hŒ ``delay``”h]”hö)�”}”(hjÊ.h]”hŒdelay”…”�”}”(hjÌ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÈ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjÄ.ubjò)�”}”(hhh]”hÌ)�”}”(hŒ¢delay to be introduced after this transfer before (optionally) changing the chipselect status, then starting the next transfer or completing this **spi_message**.”h]”(hŒ’delay to be introduced after this transfer before (optionally) changing the chipselect status, then starting the next transfer or completing this ”…”�”}”(hjã.h²hh³Nh´Nubj‰)�”}”(hŒ**spi_message**”h]”hŒ spi_message”…”�”}”(hjë.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjã.ubhŒ.”…”�”}”(hjã.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjà.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÄ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jß.h´MhjL*ubjÒ)�”}”(hŒ‹``cs_change_delay`` delay between cs deassert and assert when **cs_change** is set and **spi_transfer** is not the last in **spi_message** ”h]”(jØ)�”}”(hŒ``cs_change_delay``”h]”hö)�”}”(hj/h]”hŒcs_change_delay”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj/ubjò)�”}”(hhh]”hÌ)�”}”(hŒvdelay between cs deassert and assert when **cs_change** is set and **spi_transfer** is not the last in **spi_message**”h]”(hŒ*delay between cs deassert and assert when ”…”�”}”(hj//h²hh³Nh´Nubj‰)�”}”(hŒ **cs_change**”h]”hŒ cs_change”…”�”}”(hj7/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj//ubhŒ is set and ”…”�”}”(hj//h²hh³Nh´Nubj‰)�”}”(hŒ**spi_transfer**”h]”hŒ spi_transfer”…”�”}”(hjI/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj//ubhŒ is not the last in ”…”�”}”(hj//h²hh³Nh´Nubj‰)�”}”(hŒ**spi_message**”h]”hŒ spi_message”…”�”}”(hj[/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj//ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj,/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j+/h´MhjL*ubjÒ)�”}”(hŒk``word_delay`` inter word delay to be introduced after each word size (set by bits_per_word) transmission. ”h]”(jØ)�”}”(hŒ``word_delay``”h]”hö)�”}”(hj‚/h]”hŒ word_delay”…”�”}”(hj„/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj€/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj|/ubjò)�”}”(hhh]”hÌ)�”}”(hŒ[inter word delay to be introduced after each word size (set by bits_per_word) transmission.”h]”hŒ[inter word delay to be introduced after each word size (set by bits_per_word) transmission.”…”�”}”(hj›/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj˜/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj|/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j—/h´MhjL*ubjÒ)�”}”(hŒ}``speed_hz`` Select a speed other than the device default for this transfer. If 0 the default (from **spi_device**) is used. ”h]”(jØ)�”}”(hŒ ``speed_hz``”h]”hö)�”}”(hj¼/h]”hŒspeed_hz”…”�”}”(hj¾/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjº/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mûhj¶/ubjò)�”}”(hhh]”hÌ)�”}”(hŒoSelect a speed other than the device default for this transfer. If 0 the default (from **spi_device**) is used.”h]”(hŒWSelect a speed other than the device default for this transfer. If 0 the default (from ”…”�”}”(hjÕ/h²hh³Nh´Nubj‰)�”}”(hŒ**spi_device**”h]”hŒ spi_device”…”�”}”(hjÝ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÕ/ubhŒ ) is used.”…”�”}”(hjÕ/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MúhjÒ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¶/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÑ/h´MûhjL*ubjÒ)�”}”(hŒŒ``effective_speed_hz`` the effective SCK-speed that was used to transfer this transfer. Set to 0 if the SPI bus driver does not support it. ”h]”(jØ)�”}”(hŒ``effective_speed_hz``”h]”hö)�”}”(hj0h]”hŒeffective_speed_hz”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj0ubjò)�”}”(hhh]”hÌ)�”}”(hŒtthe effective SCK-speed that was used to transfer this transfer. Set to 0 if the SPI bus driver does not support it.”h]”hŒtthe effective SCK-speed that was used to transfer this transfer. Set to 0 if the SPI bus driver does not support it.”…”�”}”(hj!0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j0h´M hjL*ubjÒ)�”}”(hŒ„``offload_flags`` Flags that are only applicable to specialized SPI offload transfers. See ``SPI_OFFLOAD_XFER_*`` in spi-offload.h. ”h]”(jØ)�”}”(hŒ``offload_flags``”h]”hö)�”}”(hjB0h]”hŒ offload_flags”…”�”}”(hjD0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj@0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj<0ubjò)�”}”(hhh]”hÌ)�”}”(hŒqFlags that are only applicable to specialized SPI offload transfers. See ``SPI_OFFLOAD_XFER_*`` in spi-offload.h.”h]”(hŒIFlags that are only applicable to specialized SPI offload transfers. See ”…”�”}”(hj[0h²hh³Nh´Nubhö)�”}”(hŒ``SPI_OFFLOAD_XFER_*``”h]”hŒSPI_OFFLOAD_XFER_*”…”�”}”(hjc0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj[0ubhŒ in spi-offload.h.”…”�”}”(hj[0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjX0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj<0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jW0h´MhjL*ubjÒ)�”}”(hXz``ptp_sts_word_pre`` The word (subject to bits_per_word semantics) offset within **tx_buf** for which the SPI device is requesting that the time snapshot for this transfer begins. Upon completing the SPI transfer, this value may have changed compared to what was requested, depending on the available snapshotting resolution (DMA transfer, **ptp_sts_supported** is false, etc). ”h]”(jØ)�”}”(hŒ``ptp_sts_word_pre``”h]”hö)�”}”(hjŽ0h]”hŒptp_sts_word_pre”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŒ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjˆ0ubjò)�”}”(hhh]”hÌ)�”}”(hXdThe word (subject to bits_per_word semantics) offset within **tx_buf** for which the SPI device is requesting that the time snapshot for this transfer begins. Upon completing the SPI transfer, this value may have changed compared to what was requested, depending on the available snapshotting resolution (DMA transfer, **ptp_sts_supported** is false, etc).”h]”(hŒlen - 1) to denote that a transfer-level snapshot taken from within the driver may still be of higher quality. ”h]”(jØ)�”}”(hŒ``ptp_sts_word_post``”h]”hö)�”}”(hjì0h]”hŒptp_sts_word_post”…”�”}”(hjî0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjê0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjæ0ubjò)�”}”(hhh]”hÌ)�”}”(hXÑSee **ptp_sts_word_pre**. The two can be equal (meaning that a single byte should be snapshotted). If the core takes care of the timestamp (if **ptp_sts_supported** is false for this controller), it will set **ptp_sts_word_pre** to 0, and **ptp_sts_word_post** to the length of the transfer. This is done purposefully (instead of setting to spi_transfer->len - 1) to denote that a transfer-level snapshot taken from within the driver may still be of higher quality.”h]”(hŒSee ”…”�”}”(hj1h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_word_pre**”h]”hŒptp_sts_word_pre”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1ubhŒw. The two can be equal (meaning that a single byte should be snapshotted). If the core takes care of the timestamp (if ”…”�”}”(hj1h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_supported**”h]”hŒptp_sts_supported”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1ubhŒ, is false for this controller), it will set ”…”�”}”(hj1h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_word_pre**”h]”hŒptp_sts_word_pre”…”�”}”(hj11h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1ubhŒ to 0, and ”…”�”}”(hj1h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_word_post**”h]”hŒptp_sts_word_post”…”�”}”(hjC1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1ubhŒÍ to the length of the transfer. This is done purposefully (instead of setting to spi_transfer->len - 1) to denote that a transfer-level snapshot taken from within the driver may still be of higher quality.”…”�”}”(hj1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjæ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j1h´MhjL*ubjÒ)�”}”(hXk``ptp_sts`` Pointer to a memory location held by the SPI target device where a PTP system timestamp structure may lie. If drivers use PIO or their hardware has some sort of assist for retrieving exact transfer timing, they can (and should) assert **ptp_sts_supported** and populate this structure using the ptp_read_system_*ts helper functions. The timestamp must represent the time at which the SPI target device has processed the word, i.e. the "pre" timestamp should be taken before transmitting the "pre" word, and the "post" timestamp after receiving transmit confirmation from the controller for the "post" word. ”h]”(jØ)�”}”(hŒ ``ptp_sts``”h]”hö)�”}”(hjn1h]”hŒptp_sts”…”�”}”(hjp1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjl1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M(hjh1ubjò)�”}”(hhh]”hÌ)�”}”(hX^Pointer to a memory location held by the SPI target device where a PTP system timestamp structure may lie. If drivers use PIO or their hardware has some sort of assist for retrieving exact transfer timing, they can (and should) assert **ptp_sts_supported** and populate this structure using the ptp_read_system_*ts helper functions. The timestamp must represent the time at which the SPI target device has processed the word, i.e. the "pre" timestamp should be taken before transmitting the "pre" word, and the "post" timestamp after receiving transmit confirmation from the controller for the "post" word.”h]”(hŒëPointer to a memory location held by the SPI target device where a PTP system timestamp structure may lie. If drivers use PIO or their hardware has some sort of assist for retrieving exact transfer timing, they can (and should) assert ”…”�”}”(hj‡1h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_supported**”h]”hŒptp_sts_supported”…”�”}”(hj�1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj‡1ubhXn and populate this structure using the ptp_read_system_*ts helper functions. The timestamp must represent the time at which the SPI target device has processed the word, i.e. the “preâ€� timestamp should be taken before transmitting the “preâ€� word, and the “postâ€� timestamp after receiving transmit confirmation from the controller for the “postâ€� word.”…”�”}”(hj‡1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj„1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjh1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jƒ1h´M(hjL*ubjÒ)�”}”(hŒK``transfer_list`` transfers are sequenced through **spi_message.transfers**”h]”(jØ)�”}”(hŒ``transfer_list``”h]”hö)�”}”(hjº1h]”hŒ transfer_list”…”�”}”(hj¼1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¸1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj´1ubjò)�”}”(hhh]”hÌ)�”}”(hŒ9transfers are sequenced through **spi_message.transfers**”h]”(hŒ transfers are sequenced through ”…”�”}”(hjÓ1h²hh³Nh´Nubj‰)�”}”(hŒ**spi_message.transfers**”h]”hŒspi_message.transfers”…”�”}”(hjÛ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÓ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hjÐ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj´1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÏ1h´M hjL*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj 2h]”hŒ Description”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj 2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhh·h²hubhÌ)�”}”(hX SPI transfers always write the same number of bytes as they read. Protocol drivers should always provide **rx_buf** and/or **tx_buf**. In some cases, they may also want to provide DMA addresses for the data being transferred; that may reduce overhead, when the underlying driver uses DMA.”h]”(hŒiSPI transfers always write the same number of bytes as they read. Protocol drivers should always provide ”…”�”}”(hj!2h²hh³Nh´Nubj‰)�”}”(hŒ **rx_buf**”h]”hŒrx_buf”…”�”}”(hj)2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj!2ubhŒ and/or ”…”�”}”(hj!2h²hh³Nh´Nubj‰)�”}”(hŒ **tx_buf**”h]”hŒtx_buf”…”�”}”(hj;2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj!2ubhŒ›. In some cases, they may also want to provide DMA addresses for the data being transferred; that may reduce overhead, when the underlying driver uses DMA.”…”�”}”(hj!2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M+hh·h²hubhÌ)�”}”(hXˆIf the transmit buffer is NULL, zeroes will be shifted out while filling **rx_buf**. If the receive buffer is NULL, the data shifted in will be discarded. Only "len" bytes shift out (or in). It's an error to try to shift out a partial word. (For example, by shifting out three bytes with word size of sixteen or twenty bits; the former uses two bytes per word, the latter uses four bytes.)”h]”(hŒIIf the transmit buffer is NULL, zeroes will be shifted out while filling ”…”�”}”(hjT2h²hh³Nh´Nubj‰)�”}”(hŒ **rx_buf**”h]”hŒrx_buf”…”�”}”(hj\2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjT2ubhX;. If the receive buffer is NULL, the data shifted in will be discarded. Only “lenâ€� bytes shift out (or in). It’s an error to try to shift out a partial word. (For example, by shifting out three bytes with word size of sixteen or twenty bits; the former uses two bytes per word, the latter uses four bytes.)”…”�”}”(hjT2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M1hh·h²hubhÌ)�”}”(hXIn-memory data values are always in native CPU byte order, translated from the wire byte order (big-endian except with SPI_LSB_FIRST). So for example when bits_per_word is sixteen, buffers are 2N bytes long (**len** = 2N) and hold N sixteen bit words in CPU byte order.”h]”(hŒÑIn-memory data values are always in native CPU byte order, translated from the wire byte order (big-endian except with SPI_LSB_FIRST). So for example when bits_per_word is sixteen, buffers are 2N bytes long (”…”�”}”(hju2h²hh³Nh´Nubj‰)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hj}2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhju2ubhŒ6 = 2N) and hold N sixteen bit words in CPU byte order.”…”�”}”(hju2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M8hh·h²hubhÌ)�”}”(hXWhen the word size of the SPI transfer is not a power-of-two multiple of eight bits, those in-memory words include extra bits. In-memory words are always seen by protocol drivers as right-justified, so the undefined (rx) or unused (tx) bits are always the most significant bits.”h]”hXWhen the word size of the SPI transfer is not a power-of-two multiple of eight bits, those in-memory words include extra bits. In-memory words are always seen by protocol drivers as right-justified, so the undefined (rx) or unused (tx) bits are always the most significant bits.”…”�”}”(hj–2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M=hh·h²hubhÌ)�”}”(hŒ¿All SPI transfers start with the relevant chipselect active. Normally it stays selected until after the last transfer in a message. Drivers can affect the chipselect signal using cs_change.”h]”hŒ¿All SPI transfers start with the relevant chipselect active. Normally it stays selected until after the last transfer in a message. Drivers can affect the chipselect signal using cs_change.”…”�”}”(hj¥2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MBhh·h²hubhÌ)�”}”(hX.(i) If the transfer isn't the last one in the message, this flag is used to make the chipselect briefly go inactive in the middle of the message. Toggling chipselect in this way may be needed to terminate a chip command, letting a single spi_message perform all of group of chip transactions together.”h]”hX0(i) If the transfer isn’t the last one in the message, this flag is used to make the chipselect briefly go inactive in the middle of the message. Toggling chipselect in this way may be needed to terminate a chip command, letting a single spi_message perform all of group of chip transactions together.”…”�”}”(hj´2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MFhh·h²hubhÌ)�”}”(hXM(ii) When the transfer is the last one in the message, the chip may stay selected until the next transfer. On multi-device SPI busses with nothing blocking messages going to other devices, this is just a performance hint; starting a message to another device deselects this one. But in other cases, this can be used to ensure correctness. Some devices need protocol transactions to be built from a series of spi_message submissions, where the content of one message is determined by the results of previous messages and where the whole transaction ends when the chipselect goes inactive.”h]”hXM(ii) When the transfer is the last one in the message, the chip may stay selected until the next transfer. On multi-device SPI busses with nothing blocking messages going to other devices, this is just a performance hint; starting a message to another device deselects this one. But in other cases, this can be used to ensure correctness. Some devices need protocol transactions to be built from a series of spi_message submissions, where the content of one message is determined by the results of previous messages and where the whole transaction ends when the chipselect goes inactive.”…”�”}”(hjÃ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MLhh·h²hubhÌ)�”}”(hX,When SPI can transfer in 1x,2x or 4x. It can get this transfer information from device through **tx_nbits** and **rx_nbits**. In Bi-direction, these two should both be set. User can set transfer mode with SPI_NBITS_SINGLE(1x) SPI_NBITS_DUAL(2x) and SPI_NBITS_QUAD(4x) to support these three transfer.”h]”(hŒ_When SPI can transfer in 1x,2x or 4x. It can get this transfer information from device through ”…”�”}”(hjÒ2h²hh³Nh´Nubj‰)�”}”(hŒ **tx_nbits**”h]”hŒtx_nbits”…”�”}”(hjÚ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÒ2ubhŒ and ”…”�”}”(hjÒ2h²hh³Nh´Nubj‰)�”}”(hŒ **rx_nbits**”h]”hŒrx_nbits”…”�”}”(hjì2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÒ2ubhŒ°. In Bi-direction, these two should both be set. User can set transfer mode with SPI_NBITS_SINGLE(1x) SPI_NBITS_DUAL(2x) and SPI_NBITS_QUAD(4x) to support these three transfer.”…”�”}”(hjÒ2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MVhh·h²hubhÌ)�”}”(hŒ|User may also set dtr_mode to true to use dual transfer mode if desired. if not, default considered as single transfer mode.”h]”hŒ|User may also set dtr_mode to true to use dual transfer mode if desired. if not, default considered as single transfer mode.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M[hh·h²hubhÌ)�”}”(hX3The code that submits an spi_message (and its spi_transfers) to the lower layers is responsible for managing its memory. Zero-initialize every field you don't set up explicitly, to insulate against future API updates. After you submit a message and its transfers, ignore them until its completion callback.”h]”hX5The code that submits an spi_message (and its spi_transfers) to the lower layers is responsible for managing its memory. Zero-initialize every field you don’t set up explicitly, to insulate against future API updates. After you submit a message and its transfers, ignore them until its completion callback.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M^hh·h²hubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_message (C struct)”Œ c.spi_message”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ spi_message”h]”jû)�”}”(hŒstruct spi_message”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj<3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj83h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj83h²hh³jI3h´Mgubj$)�”}”(hŒ spi_message”h]”j*)�”}”(hj63h]”hŒ spi_message”…”�”}”(hj\3h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjX3ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj83h²hh³jI3h´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj43h²hh³jI3h´Mgubah}”(h]”j/3ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jI3h´Mghj13h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ!one multi-segment SPI transaction”h]”hŒ!one multi-segment SPI transaction”…”�”}”(hj~3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M hj{3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj13h²hh³jI3h´Mgubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj–3jzj–3j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXË**Definition**:: struct spi_message { struct list_head transfers; struct spi_device *spi; bool pre_optimized; bool optimized; bool prepared; int status; void (*complete)(void *context); void *context; unsigned frame_length; unsigned actual_length; struct list_head queue; void *state; void *opt_state; struct spi_offload *offload; struct list_head resources; }; **Members** ``transfers`` list of transfer segments in this transaction ``spi`` SPI device to which the transaction is queued ``pre_optimized`` peripheral driver pre-optimized the message ``optimized`` the message is in the optimized state ``prepared`` spi_prepare_message was called for the this message ``status`` zero for success, else negative errno ``complete`` called to report transaction completions ``context`` the argument to complete() when it's called ``frame_length`` the total number of bytes in the message ``actual_length`` the total number of bytes that were transferred in all successful segments ``queue`` for use by whichever driver currently owns the message ``state`` for use by whichever driver currently owns the message ``opt_state`` for use by whichever driver currently owns the message ``offload`` (optional) offload instance used by this message ``resources`` for resource management when the SPI message is processed”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¢3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjž3ubhŒ:”…”�”}”(hjž3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¤hjš3ubj¤)�”}”(hX´struct spi_message { struct list_head transfers; struct spi_device *spi; bool pre_optimized; bool optimized; bool prepared; int status; void (*complete)(void *context); void *context; unsigned frame_length; unsigned actual_length; struct list_head queue; void *state; void *opt_state; struct spi_offload *offload; struct list_head resources; };”h]”hX´struct spi_message { struct list_head transfers; struct spi_device *spi; bool pre_optimized; bool optimized; bool prepared; int status; void (*complete)(void *context); void *context; unsigned frame_length; unsigned actual_length; struct list_head queue; void *state; void *opt_state; struct spi_offload *offload; struct list_head resources; };”…”�”}”hj»3sbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¦hjš3ubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hjÌ3h]”hŒMembers”…”�”}”(hjÎ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÊ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¸hjš3ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ<``transfers`` list of transfer segments in this transaction ”h]”(jØ)�”}”(hŒ ``transfers``”h]”hö)�”}”(hjë3h]”hŒ transfers”…”�”}”(hjí3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjé3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¢hjå3ubjò)�”}”(hhh]”hÌ)�”}”(hŒ-list of transfer segments in this transaction”h]”hŒ-list of transfer segments in this transaction”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j4h´M¢hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjå3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j4h´M¢hjâ3ubjÒ)�”}”(hŒ6``spi`` SPI device to which the transaction is queued ”h]”(jØ)�”}”(hŒ``spi``”h]”hö)�”}”(hj$4h]”hŒspi”…”�”}”(hj&4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj"4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M£hj4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ-SPI device to which the transaction is queued”h]”hŒ-SPI device to which the transaction is queued”…”�”}”(hj=4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j94h´M£hj:4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j94h´M£hjâ3ubjÒ)�”}”(hŒ>``pre_optimized`` peripheral driver pre-optimized the message ”h]”(jØ)�”}”(hŒ``pre_optimized``”h]”hö)�”}”(hj]4h]”hŒ pre_optimized”…”�”}”(hj_4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj[4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¤hjW4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ+peripheral driver pre-optimized the message”h]”hŒ+peripheral driver pre-optimized the message”…”�”}”(hjv4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jr4h´M¤hjs4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjW4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jr4h´M¤hjâ3ubjÒ)�”}”(hŒ4``optimized`` the message is in the optimized state ”h]”(jØ)�”}”(hŒ ``optimized``”h]”hö)�”}”(hj–4h]”hŒ optimized”…”�”}”(hj˜4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj”4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¥hj�4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ%the message is in the optimized state”h]”hŒ%the message is in the optimized state”…”�”}”(hj¯4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j«4h´M¥hj¬4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj�4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j«4h´M¥hjâ3ubjÒ)�”}”(hŒA``prepared`` spi_prepare_message was called for the this message ”h]”(jØ)�”}”(hŒ ``prepared``”h]”hö)�”}”(hjÏ4h]”hŒprepared”…”�”}”(hjÑ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÍ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¦hjÉ4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ3spi_prepare_message was called for the this message”h]”hŒ3spi_prepare_message was called for the this message”…”�”}”(hjè4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jä4h´M¦hjå4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÉ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jä4h´M¦hjâ3ubjÒ)�”}”(hŒ1``status`` zero for success, else negative errno ”h]”(jØ)�”}”(hŒ ``status``”h]”hö)�”}”(hj5h]”hŒstatus”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M§hj5ubjò)�”}”(hhh]”hÌ)�”}”(hŒ%zero for success, else negative errno”h]”hŒ%zero for success, else negative errno”…”�”}”(hj!5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j5h´M§hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j5h´M§hjâ3ubjÒ)�”}”(hŒ6``complete`` called to report transaction completions ”h]”(jØ)�”}”(hŒ ``complete``”h]”hö)�”}”(hjA5h]”hŒcomplete”…”�”}”(hjC5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj?5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¨hj;5ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(called to report transaction completions”h]”hŒ(called to report transaction completions”…”�”}”(hjZ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jV5h´M¨hjW5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj;5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jV5h´M¨hjâ3ubjÒ)�”}”(hŒ8``context`` the argument to complete() when it's called ”h]”(jØ)�”}”(hŒ ``context``”h]”hö)�”}”(hjz5h]”hŒcontext”…”�”}”(hj|5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjx5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M©hjt5ubjò)�”}”(hhh]”hÌ)�”}”(hŒ+the argument to complete() when it's called”h]”hŒ-the argument to complete() when it’s called”…”�”}”(hj“5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�5h´M©hj�5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjt5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�5h´M©hjâ3ubjÒ)�”}”(hŒ:``frame_length`` the total number of bytes in the message ”h]”(jØ)�”}”(hŒ``frame_length``”h]”hö)�”}”(hj³5h]”hŒ frame_length”…”�”}”(hjµ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj±5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mªhj­5ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(the total number of bytes in the message”h]”hŒ(the total number of bytes in the message”…”�”}”(hjÌ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÈ5h´MªhjÉ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj­5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÈ5h´Mªhjâ3ubjÒ)�”}”(hŒ]``actual_length`` the total number of bytes that were transferred in all successful segments ”h]”(jØ)�”}”(hŒ``actual_length``”h]”hö)�”}”(hjì5h]”hŒ actual_length”…”�”}”(hjî5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjê5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¬hjæ5ubjò)�”}”(hhh]”hÌ)�”}”(hŒJthe total number of bytes that were transferred in all successful segments”h]”hŒJthe total number of bytes that were transferred in all successful segments”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M«hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjæ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j6h´M¬hjâ3ubjÒ)�”}”(hŒA``queue`` for use by whichever driver currently owns the message ”h]”(jØ)�”}”(hŒ ``queue``”h]”hö)�”}”(hj&6h]”hŒqueue”…”�”}”(hj(6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj$6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M­hj 6ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6for use by whichever driver currently owns the message”h]”hŒ6for use by whichever driver currently owns the message”…”�”}”(hj?6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j;6h´M­hj<6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj 6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j;6h´M­hjâ3ubjÒ)�”}”(hŒA``state`` for use by whichever driver currently owns the message ”h]”(jØ)�”}”(hŒ ``state``”h]”hö)�”}”(hj_6h]”hŒstate”…”�”}”(hja6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj]6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M®hjY6ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6for use by whichever driver currently owns the message”h]”hŒ6for use by whichever driver currently owns the message”…”�”}”(hjx6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jt6h´M®hju6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjY6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jt6h´M®hjâ3ubjÒ)�”}”(hŒE``opt_state`` for use by whichever driver currently owns the message ”h]”(jØ)�”}”(hŒ ``opt_state``”h]”hö)�”}”(hj˜6h]”hŒ opt_state”…”�”}”(hjš6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj–6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¯hj’6ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6for use by whichever driver currently owns the message”h]”hŒ6for use by whichever driver currently owns the message”…”�”}”(hj±6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j­6h´M¯hj®6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj’6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j­6h´M¯hjâ3ubjÒ)�”}”(hŒ=``offload`` (optional) offload instance used by this message ”h]”(jØ)�”}”(hŒ ``offload``”h]”hö)�”}”(hjÑ6h]”hŒoffload”…”�”}”(hjÓ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÏ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M±hjË6ubjò)�”}”(hhh]”hÌ)�”}”(hŒ0(optional) offload instance used by this message”h]”hŒ0(optional) offload instance used by this message”…”�”}”(hjê6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jæ6h´M±hjç6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjË6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jæ6h´M±hjâ3ubjÒ)�”}”(hŒG``resources`` for resource management when the SPI message is processed”h]”(jØ)�”}”(hŒ ``resources``”h]”hö)�”}”(hj 7h]”hŒ resources”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¯hj7ubjò)�”}”(hhh]”hÌ)�”}”(hŒ9for resource management when the SPI message is processed”h]”hŒ9for resource management when the SPI message is processed”…”�”}”(hj#7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M°hj 7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j7h´M¯hjâ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjš3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjM7h]”hŒ Description”…”�”}”(hjO7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjK7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M³hh·h²hubhÌ)�”}”(hXíA **spi_message** is used to execute an atomic sequence of data transfers, each represented by a struct spi_transfer. The sequence is "atomic" in the sense that no other spi_message may use that SPI bus until that sequence completes. On some systems, many such sequences can execute as a single programmed DMA transfer. On all systems, these messages are queued, and might complete after transactions to other devices. Messages sent to a given spi_device are always executed in FIFO order.”h]”(hŒA ”…”�”}”(hjc7h²hh³Nh´Nubj‰)�”}”(hŒ**spi_message**”h]”hŒ spi_message”…”�”}”(hjk7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjc7ubhXà is used to execute an atomic sequence of data transfers, each represented by a struct spi_transfer. The sequence is “atomicâ€� in the sense that no other spi_message may use that SPI bus until that sequence completes. On some systems, many such sequences can execute as a single programmed DMA transfer. On all systems, these messages are queued, and might complete after transactions to other devices. Messages sent to a given spi_device are always executed in FIFO order.”…”�”}”(hjc7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M±hh·h²hubhÌ)�”}”(hX3The code that submits an spi_message (and its spi_transfers) to the lower layers is responsible for managing its memory. Zero-initialize every field you don't set up explicitly, to insulate against future API updates. After you submit a message and its transfers, ignore them until its completion callback.”h]”hX5The code that submits an spi_message (and its spi_transfers) to the lower layers is responsible for managing its memory. Zero-initialize every field you don’t set up explicitly, to insulate against future API updates. After you submit a message and its transfers, ignore them until its completion callback.”…”�”}”(hj„7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¹hh·h²hubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ,spi_message_init_with_transfers (C function)”Œ!c.spi_message_init_with_transfers”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒpvoid spi_message_init_with_transfers (struct spi_message *m, struct spi_transfer *xfers, unsigned int num_xfers)”h]”jû)�”}”(hŒovoid spi_message_init_with_transfers(struct spi_message *m, struct spi_transfer *xfers, unsigned int num_xfers)”h]”(j4)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¬7h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj¨7h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨7h²hh³jº7h´Mubj$)�”}”(hŒspi_message_init_with_transfers”h]”j*)�”}”(hŒspi_message_init_with_transfers”h]”hŒspi_message_init_with_transfers”…”�”}”(hjÍ7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÉ7ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj¨7h²hh³jº7h´Mubjl)�”}”(hŒK(struct spi_message *m, struct spi_transfer *xfers, unsigned int num_xfers)”h]”(jr)�”}”(hŒstruct spi_message *m”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjé7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjå7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå7ubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j 8Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jÏ7sbŒ!c.spi_message_init_with_transfers”†”asbuh1hhjå7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå7ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj58h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjå7ubj*)�”}”(hŒm”h]”hŒm”…”�”}”(hjB8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjå7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjá7ubjr)�”}”(hŒstruct spi_transfer *xfers”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj[8h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjW8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW8ubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hjy8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjv8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j{8Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j#8Œ!c.spi_message_init_with_transfers”†”asbuh1hhjW8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW8ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj¥8h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjW8ubj*)�”}”(hŒxfers”h]”hŒxfers”…”�”}”(hj²8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjW8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjá7ubjr)�”}”(hŒunsigned int num_xfers”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjË8h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÇ8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ8ubj4)�”}”(hŒint”h]”hŒint”…”�”}”(hjç8h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÇ8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ8ubj*)�”}”(hŒ num_xfers”h]”hŒ num_xfers”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÇ8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjá7ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj¨7h²hh³jº7h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj¤7h²hh³jº7h´Mubah}”(h]”jŸ7ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jº7h´Mhj¡7h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ+Initialize spi_message and append transfers”h]”hŒ+Initialize spi_message and append transfers”…”�”}”(hj-9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj*9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¡7h²hh³jº7h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjE9jzjE9j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXE**Parameters** ``struct spi_message *m`` spi_message to be initialized ``struct spi_transfer *xfers`` An array of SPI transfers ``unsigned int num_xfers`` Number of items in the xfer array **Description** This function initializes the given spi_message and adds each spi_transfer in the given array to the message.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjO9h]”hŒ Parameters”…”�”}”(hjQ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjM9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjI9ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ8``struct spi_message *m`` spi_message to be initialized ”h]”(jØ)�”}”(hŒ``struct spi_message *m``”h]”hö)�”}”(hjn9h]”hŒstruct spi_message *m”…”�”}”(hjp9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjl9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjh9ubjò)�”}”(hhh]”hÌ)�”}”(hŒspi_message to be initialized”h]”hŒspi_message to be initialized”…”�”}”(hj‡9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jƒ9h´Mhj„9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjh9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jƒ9h´Mhje9ubjÒ)�”}”(hŒ9``struct spi_transfer *xfers`` An array of SPI transfers ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfers``”h]”hö)�”}”(hj§9h]”hŒstruct spi_transfer *xfers”…”�”}”(hj©9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¥9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj¡9ubjò)�”}”(hhh]”hÌ)�”}”(hŒAn array of SPI transfers”h]”hŒAn array of SPI transfers”…”�”}”(hjÀ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¼9h´Mhj½9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¡9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¼9h´Mhje9ubjÒ)�”}”(hŒ=``unsigned int num_xfers`` Number of items in the xfer array ”h]”(jØ)�”}”(hŒ``unsigned int num_xfers``”h]”hö)�”}”(hjà9h]”hŒunsigned int num_xfers”…”�”}”(hjâ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÞ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjÚ9ubjò)�”}”(hhh]”hÌ)�”}”(hŒ!Number of items in the xfer array”h]”hŒ!Number of items in the xfer array”…”�”}”(hjù9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jõ9h´Mhjö9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÚ9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jõ9h´Mhje9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjI9ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj:h]”hŒ Description”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjI9ubhÌ)�”}”(hŒmThis function initializes the given spi_message and adds each spi_transfer in the given array to the message.”h]”hŒmThis function initializes the given spi_message and adds each spi_transfer in the given array to the message.”…”�”}”(hj1:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjI9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ!spi_is_bpw_supported (C function)”Œc.spi_is_bpw_supported”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ;bool spi_is_bpw_supported (struct spi_device *spi, u32 bpw)”h]”jû)�”}”(hŒ:bool spi_is_bpw_supported(struct spi_device *spi, u32 bpw)”h]”(j4)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj`:h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj\:h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\:h²hh³jn:h´Mgubj$)�”}”(hŒspi_is_bpw_supported”h]”j*)�”}”(hŒspi_is_bpw_supported”h]”hŒspi_is_bpw_supported”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj}:ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj\:h²hh³jn:h´Mgubjl)�”}”(hŒ!(struct spi_device *spi, u32 bpw)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj™:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™:ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj»:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¸:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j½:Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jƒ:sbŒc.spi_is_bpw_supported”†”asbuh1hhj™:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™:ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjé:h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj™:ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjö:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj™:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj•:ubjr)�”}”(hŒu32 bpw”h]”(h)�”}”(hhh]”j*)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j;Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j×:Œc.spi_is_bpw_supported”†”asbuh1hhj ;ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ;ubj*)�”}”(hŒbpw”h]”hŒbpw”…”�”}”(hj>;h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj ;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj•:ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj\:h²hh³jn:h´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjX:h²hh³jn:h´Mgubah}”(h]”jS:ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jn:h´MghjU:h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ#Check if bits per word is supported”h]”hŒ#Check if bits per word is supported”…”�”}”(hjh;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mghje;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjU:h²hh³jn:h´Mgubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj€;jzj€;j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hŒæ**Parameters** ``struct spi_device *spi`` SPI device ``u32 bpw`` Bits per word **Description** This function checks to see if the SPI controller supports **bpw**. **Return** True if **bpw** is supported, false otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjŠ;h]”hŒ Parameters”…”�”}”(hjŒ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjˆ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mkhj„;ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ&``struct spi_device *spi`` SPI device ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hj©;h]”hŒstruct spi_device *spi”…”�”}”(hj«;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj§;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhhj£;ubjò)�”}”(hhh]”hÌ)�”}”(hŒ SPI device”h]”hŒ SPI device”…”�”}”(hjÂ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¾;h´Mhhj¿;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj£;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¾;h´Mhhj ;ubjÒ)�”}”(hŒ``u32 bpw`` Bits per word ”h]”(jØ)�”}”(hŒ ``u32 bpw``”h]”hö)�”}”(hjâ;h]”hŒu32 bpw”…”�”}”(hjä;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjà;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MihjÜ;ubjò)�”}”(hhh]”hÌ)�”}”(hŒ Bits per word”h]”hŒ Bits per word”…”�”}”(hjû;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j÷;h´Mihjø;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÜ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j÷;h´Mihj ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj„;ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj<h]”hŒ Description”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mkhj„;ubhÌ)�”}”(hŒCThis function checks to see if the SPI controller supports **bpw**.”h]”(hŒ;This function checks to see if the SPI controller supports ”…”�”}”(hj3<h²hh³Nh´Nubj‰)�”}”(hŒ**bpw**”h]”hŒbpw”…”�”}”(hj;<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj3<ubhŒ.”…”�”}”(hj3<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mjhj„;ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjV<h]”hŒReturn”…”�”}”(hjX<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjT<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mlhj„;ubhÌ)�”}”(hŒ.True if **bpw** is supported, false otherwise.”h]”(hŒTrue if ”…”�”}”(hjl<h²hh³Nh´Nubj‰)�”}”(hŒ**bpw**”h]”hŒbpw”…”�”}”(hjt<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjl<ubhŒ is supported, false otherwise.”…”�”}”(hjl<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mmhj„;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_bpw_to_bytes (C function)”Œc.spi_bpw_to_bytes”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒu32 spi_bpw_to_bytes (u32 bpw)”h]”jû)�”}”(hŒu32 spi_bpw_to_bytes(u32 bpw)”h]”(h)�”}”(hhh]”j*)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj°<h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj­<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j²<Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œspi_bpw_to_bytes”sbŒc.spi_bpw_to_bytes”†”asbuh1hhj©<h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©<h²hh³jÑ<h´M{ubj$)�”}”(hŒspi_bpw_to_bytes”h]”j*)�”}”(hjÎ<h]”hŒspi_bpw_to_bytes”…”�”}”(hjä<h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjà<ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj©<h²hh³jÑ<h´M{ubjl)�”}”(hŒ (u32 bpw)”h]”jr)�”}”(hŒu32 bpw”h]”(•h)�”}”(hhh]”j*)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÿ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j=Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”jÌ<Œc.spi_bpw_to_bytes”†”asbuh1hhjû<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj =h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjû<ubj*)�”}”(hŒbpw”h]”hŒbpw”…”�”}”(hj.=h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjû<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj÷<ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj©<h²hh³jÑ<h´M{ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj¥<h²hh³jÑ<h´M{ubah}”(h]”j <ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jÑ<h´M{hj¢<h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒCovert bits per word to bytes”h]”hŒCovert bits per word to bytes”…”�”}”(hjX=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M{hjU=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¢<h²hh³jÑ<h´M{ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjp=jzjp=j{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXû**Parameters** ``u32 bpw`` Bits per word **Description** This function converts the given **bpw** to bytes. The result is always power-of-two, e.g., =============== ================= Input (in bits) Output (in bytes) =============== ================= 5 1 9 2 21 4 37 8 =============== ================= It will return 0 for the 0 input. **Return** Bytes for the given **bpw**.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjz=h]”hŒ Parameters”…”�”}”(hj|=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjx=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjt=ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ``u32 bpw`` Bits per word ”h]”(jØ)�”}”(hŒ ``u32 bpw``”h]”hö)�”}”(hj™=h]”hŒu32 bpw”…”�”}”(hj›=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj—=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M|hj“=ubjò)�”}”(hhh]”hÌ)�”}”(hŒ Bits per word”h]”hŒ Bits per word”…”�”}”(hj²=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j®=h´M|hj¯=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj“=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j®=h´M|hj�=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjt=ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjÔ=h]”hŒ Description”…”�”}”(hjÖ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÒ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M~hjt=ubhÌ)�”}”(hŒ[This function converts the given **bpw** to bytes. The result is always power-of-two, e.g.,”h]”(hŒ!This function converts the given ”…”�”}”(hjê=h²hh³Nh´Nubj‰)�”}”(hŒ**bpw**”h]”hŒbpw”…”�”}”(hjò=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjê=ubhŒ3 to bytes. The result is always power-of-two, e.g.,”…”�”}”(hjê=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M}hjt=ubj)�”}”(hX =============== ================= Input (in bits) Output (in bytes) =============== ================= 5 1 9 2 21 4 37 8 =============== ================= ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j>hj>ubj>)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j>hj>ubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒInput (in bits)”h]”hŒInput (in bits)”…”�”}”(hj>>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hj;>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj6>ubj:>)�”}”(hhh]”hÌ)�”}”(hŒOutput (in bytes)”h]”hŒOutput (in bytes)”…”�”}”(hjV>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jL>h´M�hjS>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj6>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4>hj1>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j/>hj>ubhŒtbody”“”)�”}”(hhh]”(j5>)�”}”(hhh]”(j:>)�”}”(hhh]”hÌ)�”}”(hŒ5”h]”hŒ5”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mƒhj~>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj{>ubj:>)�”}”(hhh]”hÌ)�”}”(hŒ1”h]”hŒ1”…”�”}”(hj™>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�>h´Mƒhj–>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj{>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4>hjx>ubj5>)�”}”(hhh]”(j:>)�”}”(hhh]”hÌ)�”}”(hŒ9”h]”hŒ9”…”�”}”(hj¹>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M„hj¶>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj³>ubj:>)�”}”(hhh]”hÌ)�”}”(hŒ2”h]”hŒ2”…”�”}”(hjÑ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÇ>h´M„hjÎ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj³>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4>hjx>ubj5>)�”}”(hhh]”(j:>)�”}”(hhh]”hÌ)�”}”(hŒ21”h]”hŒ21”…”�”}”(hjñ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M…hjî>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hjë>ubj:>)�”}”(hhh]”hÌ)�”}”(hŒ4”h]”hŒ4”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÿ>h´M…hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hjë>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4>hjx>ubj5>)�”}”(hhh]”(j:>)�”}”(hhh]”hÌ)�”}”(hŒ37”h]”hŒ37”…”�”}”(hj)?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M†hj&?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj#?ubj:>)�”}”(hhh]”hÌ)�”}”(hŒ8”h]”hŒ8”…”�”}”(hjA?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j7?h´M†hj>?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9>hj#?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j4>hjx>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jv>hj>ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j>hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj >ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M€hjt=ubhÌ)�”}”(hŒ!It will return 0 for the 0 input.”h]”hŒ!It will return 0 for the 0 input.”…”�”}”(hju?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‰hjt=ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj†?h]”hŒReturn”…”�”}”(hjˆ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj„?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‹hjt=ubhÌ)�”}”(hŒBytes for the given **bpw**.”h]”(hŒBytes for the given ”…”�”}”(hjœ?h²hh³Nh´Nubj‰)�”}”(hŒ**bpw**”h]”hŒbpw”…”�”}”(hj¤?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjœ?ubhŒ.”…”�”}”(hjœ?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MŒhjt=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ(spi_controller_xfer_timeout (C function)”Œc.spi_controller_xfer_timeout”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒaunsigned int spi_controller_xfer_timeout (struct spi_controller *ctlr, struct spi_transfer *xfer)”h]”jû)�”}”(hŒ`unsigned int spi_controller_xfer_timeout(struct spi_controller *ctlr, struct spi_transfer *xfer)”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÝ?h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÙ?h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M•ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ?h²hh³jë?h´M•ubj4)�”}”(hŒint”h]”hŒint”…”�”}”(hjú?h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÙ?h²hh³jë?h´M•ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ?h²hh³jë?h´M•ubj$)�”}”(hŒspi_controller_xfer_timeout”h]”j*)�”}”(hŒspi_controller_xfer_timeout”h]”hŒspi_controller_xfer_timeout”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj@ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÙ?h²hh³jë?h´M•ubjl)�”}”(hŒ8(struct spi_controller *ctlr, struct spi_transfer *xfer)”h]”(jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj6@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj2@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2@ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjT@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjQ@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jV@Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j@sbŒc.spi_controller_xfer_timeout”†”asbuh1hhj2@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2@ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj‚@h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj2@ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj2@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj.@ubjr)�”}”(hŒstruct spi_transfer *xfer”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¨@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj¤@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤@ubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hjÆ@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÃ@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÈ@Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”jp@Œc.spi_controller_xfer_timeout”†”asbuh1hhj¤@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤@ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjò@h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj¤@ubj*)�”}”(hŒxfer”h]”hŒxfer”…”�”}”(hjÿ@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¤@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj.@ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjÙ?h²hh³jë?h´M•ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÕ?h²hh³jë?h´M•ubah}”(h]”jÐ?ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jë?h´M•hjÒ?h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ Compute a suitable timeout value”h]”hŒ Compute a suitable timeout value”…”�”}”(hj)Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M•hj&Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÒ?h²hh³jë?h´M•ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjAAjzjAAj{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX”**Parameters** ``struct spi_controller *ctlr`` SPI device ``struct spi_transfer *xfer`` Transfer descriptor **Description** Compute a relevant timeout value for the given transfer. We derive the time that it would take on a single data line and take twice this amount of time with a minimum of 500ms to avoid false positives on loaded systems. **Return** Transfer timeout value in milliseconds.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjKAh]”hŒ Parameters”…”�”}”(hjMAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjIAubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M™hjEAubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ+``struct spi_controller *ctlr`` SPI device ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjjAh]”hŒstruct spi_controller *ctlr”…”�”}”(hjlAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjhAubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M–hjdAubjò)�”}”(hhh]”hÌ)�”}”(hŒ SPI device”h]”hŒ SPI device”…”�”}”(hjƒAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jAh´M–hj€Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjdAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jAh´M–hjaAubjÒ)�”}”(hŒ2``struct spi_transfer *xfer`` Transfer descriptor ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfer``”h]”hö)�”}”(hj£Ah]”hŒstruct spi_transfer *xfer”…”�”}”(hj¥Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¡Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M—hj�Aubjò)�”}”(hhh]”hÌ)�”}”(hŒTransfer descriptor”h]”hŒTransfer descriptor”…”�”}”(hj¼Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¸Ah´M—hj¹Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj�Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¸Ah´M—hjaAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjEAubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjÞAh]”hŒ Description”…”�”}”(hjàAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÜAubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M™hjEAubhÌ)�”}”(hŒÛCompute a relevant timeout value for the given transfer. We derive the time that it would take on a single data line and take twice this amount of time with a minimum of 500ms to avoid false positives on loaded systems.”h]”hŒÛCompute a relevant timeout value for the given transfer. We derive the time that it would take on a single data line and take twice this amount of time with a minimum of 500ms to avoid false positives on loaded systems.”…”�”}”(hjôAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M˜hjEAubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjBh]”hŒReturn”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MœhjEAubhÌ)�”}”(hŒ'Transfer timeout value in milliseconds.”h]”hŒ'Transfer timeout value in milliseconds.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hjEAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ!spi_replaced_transfers (C struct)”Œc.spi_replaced_transfers”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒspi_replaced_transfers”h]”jû)�”}”(hŒstruct spi_replaced_transfers”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjJBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjFBh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFBh²hh³jWBh´M¢ubj$)�”}”(hŒspi_replaced_transfers”h]”j*)�”}”(hjDBh]”hŒspi_replaced_transfers”…”�”}”(hjjBh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjfBubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjFBh²hh³jWBh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjBBh²hh³jWBh´M¢ubah}”(h]”j=Bah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jWBh´M¢hj?Bh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒcstructure describing the spi_transfer replacements that have occurred so that they can get reverted”h]”hŒcstructure describing the spi_transfer replacements that have occurred so that they can get reverted”…”�”}”(hjŒBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M®hj‰Bh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj?Bh²hh³jWBh´M¢ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj¤Bjzj¤Bj{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX **Definition**:: struct spi_replaced_transfers { spi_replaced_release_t release; void *extradata; struct list_head replaced_transfers; struct list_head *replaced_after; size_t inserted; struct spi_transfer inserted_transfers[]; }; **Members** ``release`` some extra release code to get executed prior to releasing this structure ``extradata`` pointer to some extra data if requested or NULL ``replaced_transfers`` transfers that have been replaced and which need to get restored ``replaced_after`` the transfer after which the **replaced_transfers** are to get re-inserted ``inserted`` number of transfers inserted ``inserted_transfers`` array of spi_transfers of array-size **inserted**, that have been replacing replaced_transfers”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj°Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¬BubhŒ:”…”�”}”(hj¬Bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M²hj¨Bubj¤)�”}”(hŒístruct spi_replaced_transfers { spi_replaced_release_t release; void *extradata; struct list_head replaced_transfers; struct list_head *replaced_after; size_t inserted; struct spi_transfer inserted_transfers[]; };”h]”hŒístruct spi_replaced_transfers { spi_replaced_release_t release; void *extradata; struct list_head replaced_transfers; struct list_head *replaced_after; size_t inserted; struct spi_transfer inserted_transfers[]; };”…”�”}”hjÉBsbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M´hj¨BubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hjÚBh]”hŒMembers”…”�”}”(hjÜBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjØBubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M½hj¨BubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒV``release`` some extra release code to get executed prior to releasing this structure ”h]”(jØ)�”}”(hŒ ``release``”h]”hö)�”}”(hjùBh]”hŒrelease”…”�”}”(hjûBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj÷Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M³hjóBubjò)�”}”(hhh]”hÌ)�”}”(hŒIsome extra release code to get executed prior to releasing this structure”h]”hŒIsome extra release code to get executed prior to releasing this structure”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M²hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjóBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jCh´M³hjðBubjÒ)�”}”(hŒ>``extradata`` pointer to some extra data if requested or NULL ”h]”(jØ)�”}”(hŒ ``extradata``”h]”hö)�”}”(hj3Ch]”hŒ extradata”…”�”}”(hj5Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj1Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M´hj-Cubjò)�”}”(hhh]”hÌ)�”}”(hŒ/pointer to some extra data if requested or NULL”h]”hŒ/pointer to some extra data if requested or NULL”…”�”}”(hjLCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jHCh´M´hjICubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj-Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jHCh´M´hjðBubjÒ)�”}”(hŒX``replaced_transfers`` transfers that have been replaced and which need to get restored ”h]”(jØ)�”}”(hŒ``replaced_transfers``”h]”hö)�”}”(hjlCh]”hŒreplaced_transfers”…”�”}”(hjnCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¶hjfCubjò)�”}”(hhh]”hÌ)�”}”(hŒ@transfers that have been replaced and which need to get restored”h]”hŒ@transfers that have been replaced and which need to get restored”…”�”}”(hj…Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mµhj‚Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjfCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�Ch´M¶hjðBubjÒ)�”}”(hŒ^``replaced_after`` the transfer after which the **replaced_transfers** are to get re-inserted ”h]”(jØ)�”}”(hŒ``replaced_after``”h]”hö)�”}”(hj¦Ch]”hŒreplaced_after”…”�”}”(hj¨Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¤Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¸hj Cubjò)�”}”(hhh]”hÌ)�”}”(hŒJthe transfer after which the **replaced_transfers** are to get re-inserted”h]”(hŒthe transfer after which the ”…”�”}”(hj¿Ch²hh³Nh´Nubj‰)�”}”(hŒ**replaced_transfers**”h]”hŒreplaced_transfers”…”�”}”(hjÇCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¿CubhŒ are to get re-inserted”…”�”}”(hj¿Ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M·hj¼Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j»Ch´M¸hjðBubjÒ)�”}”(hŒ*``inserted`` number of transfers inserted ”h]”(jØ)�”}”(hŒ ``inserted``”h]”hö)�”}”(hjòCh]”hŒinserted”…”�”}”(hjôCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjðCubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¹hjìCubjò)�”}”(hhh]”hÌ)�”}”(hŒnumber of transfers inserted”h]”hŒnumber of transfers inserted”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jDh´M¹hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjìCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jDh´M¹hjðBubjÒ)�”}”(hŒu``inserted_transfers`` array of spi_transfers of array-size **inserted**, that have been replacing replaced_transfers”h]”(jØ)�”}”(hŒ``inserted_transfers``”h]”hö)�”}”(hj+Dh]”hŒinserted_transfers”…”�”}”(hj-Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj)Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mºhj%Dubjò)�”}”(hhh]”hÌ)�”}”(hŒ^array of spi_transfers of array-size **inserted**, that have been replacing replaced_transfers”h]”(hŒ%array of spi_transfers of array-size ”…”�”}”(hjDDh²hh³Nh´Nubj‰)�”}”(hŒ **inserted**”h]”hŒinserted”…”�”}”(hjLDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjDDubhŒ-, that have been replacing replaced_transfers”…”�”}”(hjDDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j@Dh´MºhjADubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj%Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j@Dh´MºhjðBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj¨Bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Note**”h]”j‰)�”}”(hjDh]”hŒNote”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj}Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¾hh·h²hubhÌ)�”}”(hŒ that **extradata** will point to **inserted_transfers**[**inserted**] if some extra allocation is requested, so alignment will be the same as for spi_transfers.”h]”(hŒthat ”…”�”}”(hj•Dh²hh³Nh´Nubj‰)�”}”(hŒ **extradata**”h]”hŒ extradata”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj•DubhŒ will point to ”…”�”}”(hj•Dh²hh³Nh´Nubj‰)�”}”(hŒ#**inserted_transfers**[**inserted**”h]”hŒinserted_transfers**[**inserted”…”�”}”(hj¯Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj•DubhŒ\] if some extra allocation is requested, so alignment will be the same as for spi_transfers.”…”�”}”(hj•Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M¼hh·h²hubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_sync_transfer (C function)”Œc.spi_sync_transfer”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒbint spi_sync_transfer (struct spi_device *spi, struct spi_transfer *xfers, unsigned int num_xfers)”h]”jû)�”}”(hŒaint spi_sync_transfer(struct spi_device *spi, struct spi_transfer *xfers, unsigned int num_xfers)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjáDh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÝDh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mâubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝDh²hh³jïDh´Mâubj$)�”}”(hŒspi_sync_transfer”h]”j*)�”}”(hŒspi_sync_transfer”h]”hŒspi_sync_transfer”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjþDubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÝDh²hh³jïDh´Mâubjl)�”}”(hŒL(struct spi_device *spi, struct spi_transfer *xfers, unsigned int num_xfers)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjEŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jEsbŒc.spi_sync_transfer”†”asbuh1hhjEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjjEh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjEubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjwEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjEubjr)�”}”(hŒstruct spi_transfer *xfers”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjŒEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒEubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hj®Eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj«Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j°EŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”jXEŒc.spi_sync_transfer”†”asbuh1hhjŒEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒEubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjÚEh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjŒEubj*)�”}”(hŒxfers”h]”hŒxfers”…”�”}”(hjçEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjŒEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjEubjr)�”}”(hŒunsigned int num_xfers”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjüEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüEubj4)�”}”(hŒint”h]”hŒint”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjüEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüEubj*)�”}”(hŒ num_xfers”h]”hŒ num_xfers”…”�”}”(hj8Fh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjüEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjEubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjÝDh²hh³jïDh´Mâubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÙDh²hh³jïDh´Mâubah}”(h]”jÔDah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jïDh´MâhjÖDh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒsynchronous SPI data transfer”h]”hŒsynchronous SPI data transfer”…”�”}”(hjbFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mâhj_Fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÖDh²hh³jïDh´Mâubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjzFjzjzFj{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX¨**Parameters** ``struct spi_device *spi`` device with which data will be exchanged ``struct spi_transfer *xfers`` An array of spi_transfers ``unsigned int num_xfers`` Number of items in the xfer array **Context** can sleep **Description** Does a synchronous SPI data transfer of the given spi_transfer array. For more specific semantics see spi_sync(). **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj„Fh]”hŒ Parameters”…”�”}”(hj†Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj‚Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mæhj~FubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hj£Fh]”hŒstruct spi_device *spi”…”�”}”(hj¥Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¡Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mãhj�Fubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hj¼Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¸Fh´Mãhj¹Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj�Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¸Fh´MãhjšFubjÒ)�”}”(hŒ9``struct spi_transfer *xfers`` An array of spi_transfers ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfers``”h]”hö)�”}”(hjÜFh]”hŒstruct spi_transfer *xfers”…”�”}”(hjÞFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÚFubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MähjÖFubjò)�”}”(hhh]”hÌ)�”}”(hŒAn array of spi_transfers”h]”hŒAn array of spi_transfers”…”�”}”(hjõFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jñFh´MähjòFubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÖFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jñFh´MähjšFubjÒ)�”}”(hŒ=``unsigned int num_xfers`` Number of items in the xfer array ”h]”(jØ)�”}”(hŒ``unsigned int num_xfers``”h]”hö)�”}”(hjGh]”hŒunsigned int num_xfers”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MåhjGubjò)�”}”(hhh]”hÌ)�”}”(hŒ!Number of items in the xfer array”h]”hŒ!Number of items in the xfer array”…”�”}”(hj.Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j*Gh´Måhj+Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j*Gh´MåhjšFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj~FubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjPGh]”hŒContext”…”�”}”(hjRGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjNGubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mçhj~FubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjfGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mæhj~FubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjwGh]”hŒ Description”…”�”}”(hjyGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjuGubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mèhj~FubhÌ)�”}”(hŒEDoes a synchronous SPI data transfer of the given spi_transfer array.”h]”hŒEDoes a synchronous SPI data transfer of the given spi_transfer array.”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mçhj~FubhÌ)�”}”(hŒ+For more specific semantics see spi_sync().”h]”hŒ+For more specific semantics see spi_sync().”…”�”}”(hjœGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Méhj~FubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj­Gh]”hŒReturn”…”�”}”(hj¯Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj«Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mëhj~FubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hjÃGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mìhj~Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_write (C function)”Œ c.spi_write”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒCint spi_write (struct spi_device *spi, const void *buf, size_t len)”h]”jû)�”}”(hŒBint spi_write(struct spi_device *spi, const void *buf, size_t len)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjòGh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjîGh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Múubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîGh²hh³jHh´Múubj$)�”}”(hŒ spi_write”h]”j*)�”}”(hŒ spi_write”h]”hŒ spi_write”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjHubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjîGh²hh³jHh´Múubjl)�”}”(hŒ5(struct spi_device *spi, const void *buf, size_t len)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj/Hh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj+Hubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSPI synchronous 8 bit write followed by 16 bit big-endian read”h]”hŒ>SPI synchronous 8 bit write followed by 16 bit big-endian read”…”�”}”(hj¸Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M\hjµSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj’Rh²hh³jÁRh´M\ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjÐSjzjÐSj{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXð**Parameters** ``struct spi_device *spi`` device with which data will be exchanged ``u8 cmd`` command to be written before data is read back **Context** can sleep **Description** This function is similar to spi_w8r16, with the exception that it will convert the read 16 bit data word from big-endian to native endianness. Callable only from contexts that can sleep. **Return** the (unsigned) sixteen bit number returned by the device in CPU endianness, or else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjÚSh]”hŒ Parameters”…”�”}”(hjÜSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjØSubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M`hjÔSubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjùSh]”hŒstruct spi_device *spi”…”�”}”(hjûSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj÷Subah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M]hjóSubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jTh´M]hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjóSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jTh´M]hjðSubjÒ)�”}”(hŒ:``u8 cmd`` command to be written before data is read back ”h]”(jØ)�”}”(hŒ ``u8 cmd``”h]”hö)�”}”(hj2Th]”hŒu8 cmd”…”�”}”(hj4Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj0Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M^hj,Tubjò)�”}”(hhh]”hÌ)�”}”(hŒ.command to be written before data is read back”h]”hŒ.command to be written before data is read back”…”�”}”(hjKTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jGTh´M^hjHTubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj,Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jGTh´M^hjðSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÔSubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjmTh]”hŒContext”…”�”}”(hjoTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjkTubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M`hjÔSubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjƒTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M_hjÔSubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj”Th]”hŒ Description”…”�”}”(hj–Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj’Tubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MahjÔSubhÌ)�”}”(hŒŽThis function is similar to spi_w8r16, with the exception that it will convert the read 16 bit data word from big-endian to native endianness.”h]”hŒŽThis function is similar to spi_w8r16, with the exception that it will convert the read 16 bit data word from big-endian to native endianness.”…”�”}”(hjªTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M`hjÔSubhÌ)�”}”(hŒ+Callable only from contexts that can sleep.”h]”hŒ+Callable only from contexts that can sleep.”…”�”}”(hj¹Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MchjÔSubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjÊTh]”hŒReturn”…”�”}”(hjÌTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÈTubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MehjÔSubhÌ)�”}”(hŒjthe (unsigned) sixteen bit number returned by the device in CPU endianness, or else a negative error code.”h]”hŒjthe (unsigned) sixteen bit number returned by the device in CPU endianness, or else a negative error code.”…”�”}”(hjàTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MfhjÔSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_board_info (C struct)”Œc.spi_board_info”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒspi_board_info”h]”jû)�”}”(hŒstruct spi_board_info”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj Uh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Uh²hh³jUh´Mlubj$)�”}”(hŒspi_board_info”h]”j*)�”}”(hj Uh]”hŒspi_board_info”…”�”}”(hj/Uh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj+Uubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj Uh²hh³jUh´Mlubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjUh²hh³jUh´Mlubah}”(h]”jUah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jUh´MlhjUh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ(board-specific template for a SPI device”h]”hŒ(board-specific template for a SPI device”…”�”}”(hjQUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‡hjNUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjUh²hh³jUh´Mlubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyjiUjzjiUj{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hX**Definition**:: struct spi_board_info { char modalias[SPI_NAME_SIZE]; const void *platform_data; const struct software_node *swnode; void *controller_data; int irq; u32 max_speed_hz; u16 bus_num; u16 chip_select; u32 mode; }; **Members** ``modalias`` Initializes spi_device.modalias; identifies the driver. ``platform_data`` Initializes spi_device.platform_data; the particular data stored there is driver-specific. ``swnode`` Software node for the device. ``controller_data`` Initializes spi_device.controller_data; some controllers need hints about hardware setup, e.g. for DMA. ``irq`` Initializes spi_device.irq; depends on how the board is wired. ``max_speed_hz`` Initializes spi_device.max_speed_hz; based on limits from the chip datasheet and board-specific signal quality issues. ``bus_num`` Identifies which spi_controller parents the spi_device; unused by spi_new_device(), and otherwise depends on board wiring. ``chip_select`` Initializes spi_device.chip_select; depends on how the board is wired. ``mode`` Initializes spi_device.mode; based on the chip datasheet, board wiring (some devices support both 3WIRE and standard modes), and possibly presence of an inverter in the chipselect path.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(j‰)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjuUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjqUubhŒ:”…”�”}”(hjqUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‹hjmUubj¤)�”}”(hŒústruct spi_board_info { char modalias[SPI_NAME_SIZE]; const void *platform_data; const struct software_node *swnode; void *controller_data; int irq; u32 max_speed_hz; u16 bus_num; u16 chip_select; u32 mode; };”h]”hŒústruct spi_board_info { char modalias[SPI_NAME_SIZE]; const void *platform_data; const struct software_node *swnode; void *controller_data; int irq; u32 max_speed_hz; u16 bus_num; u16 chip_select; u32 mode; };”…”�”}”hjŽUsbah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j£h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hjmUubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hjŸUh]”hŒMembers”…”�”}”(hj¡Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj�Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M™hjmUubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒE``modalias`` Initializes spi_device.modalias; identifies the driver. ”h]”(jØ)�”}”(hŒ ``modalias``”h]”hö)�”}”(hj¾Uh]”hŒmodalias”…”�”}”(hjÀUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¼Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‰hj¸Uubjò)�”}”(hhh]”hÌ)�”}”(hŒ7Initializes spi_device.modalias; identifies the driver.”h]”hŒ7Initializes spi_device.modalias; identifies the driver.”…”�”}”(hj×Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÓUh´M‰hjÔUubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¸Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÓUh´M‰hjµUubjÒ)�”}”(hŒm``platform_data`` Initializes spi_device.platform_data; the particular data stored there is driver-specific. ”h]”(jØ)�”}”(hŒ``platform_data``”h]”hö)�”}”(hj÷Uh]”hŒ platform_data”…”�”}”(hjùUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjõUubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‹hjñUubjò)�”}”(hhh]”hÌ)�”}”(hŒZInitializes spi_device.platform_data; the particular data stored there is driver-specific.”h]”hŒZInitializes spi_device.platform_data; the particular data stored there is driver-specific.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MŠhj Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjñUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j Vh´M‹hjµUubjÒ)�”}”(hŒ)``swnode`` Software node for the device. ”h]”(jØ)�”}”(hŒ ``swnode``”h]”hö)�”}”(hj1Vh]”hŒswnode”…”�”}”(hj3Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj/Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MŒhj+Vubjò)�”}”(hhh]”hÌ)�”}”(hŒSoftware node for the device.”h]”hŒSoftware node for the device.”…”�”}”(hjJVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jFVh´MŒhjGVubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj+Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jFVh´MŒhjµUubjÒ)�”}”(hŒ|``controller_data`` Initializes spi_device.controller_data; some controllers need hints about hardware setup, e.g. for DMA. ”h]”(jØ)�”}”(hŒ``controller_data``”h]”hö)�”}”(hjjVh]”hŒcontroller_data”…”�”}”(hjlVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjhVubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MŽhjdVubjò)�”}”(hhh]”hÌ)�”}”(hŒgInitializes spi_device.controller_data; some controllers need hints about hardware setup, e.g. for DMA.”h]”hŒgInitializes spi_device.controller_data; some controllers need hints about hardware setup, e.g. for DMA.”…”�”}”(hjƒVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hj€Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjdVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jVh´MŽhjµUubjÒ)�”}”(hŒG``irq`` Initializes spi_device.irq; depends on how the board is wired. ”h]”(jØ)�”}”(hŒ``irq``”h]”hö)�”}”(hj¤Vh]”hŒirq”…”�”}”(hj¦Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¢Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hjžVubjò)�”}”(hhh]”hÌ)�”}”(hŒ>Initializes spi_device.irq; depends on how the board is wired.”h]”hŒ>Initializes spi_device.irq; depends on how the board is wired.”…”�”}”(hj½Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¹Vh´M�hjºVubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjžVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¹Vh´M�hjµUubjÒ)�”}”(hŒˆ``max_speed_hz`` Initializes spi_device.max_speed_hz; based on limits from the chip datasheet and board-specific signal quality issues. ”h]”(jØ)�”}”(hŒ``max_speed_hz``”h]”hö)�”}”(hjÝVh]”hŒ max_speed_hz”…”�”}”(hjßVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÛVubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M‘hj×Vubjò)�”}”(hhh]”hÌ)�”}”(hŒvInitializes spi_device.max_speed_hz; based on limits from the chip datasheet and board-specific signal quality issues.”h]”hŒvInitializes spi_device.max_speed_hz; based on limits from the chip datasheet and board-specific signal quality issues.”…”�”}”(hjöVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hjóVubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj×Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jòVh´M‘hjµUubjÒ)�”}”(hŒ‡``bus_num`` Identifies which spi_controller parents the spi_device; unused by spi_new_device(), and otherwise depends on board wiring. ”h]”(jØ)�”}”(hŒ ``bus_num``”h]”hö)�”}”(hjWh]”hŒbus_num”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M“hjWubjò)�”}”(hhh]”hÌ)�”}”(hŒzIdentifies which spi_controller parents the spi_device; unused by spi_new_device(), and otherwise depends on board wiring.”h]”hŒzIdentifies which spi_controller parents the spi_device; unused by spi_new_device(), and otherwise depends on board wiring.”…”�”}”(hj0Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M’hj-Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j,Wh´M“hjµUubjÒ)�”}”(hŒW``chip_select`` Initializes spi_device.chip_select; depends on how the board is wired. ”h]”(jØ)�”}”(hŒ``chip_select``”h]”hö)�”}”(hjQWh]”hŒ chip_select”…”�”}”(hjSWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjOWubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M•hjKWubjò)�”}”(hhh]”hÌ)�”}”(hŒFInitializes spi_device.chip_select; depends on how the board is wired.”h]”hŒFInitializes spi_device.chip_select; depends on how the board is wired.”…”�”}”(hjjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M”hjgWubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjKWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jfWh´M•hjµUubjÒ)�”}”(hŒÂ``mode`` Initializes spi_device.mode; based on the chip datasheet, board wiring (some devices support both 3WIRE and standard modes), and possibly presence of an inverter in the chipselect path.”h]”(jØ)�”}”(hŒ``mode``”h]”hö)�”}”(hj‹Wh]”hŒmode”…”�”}”(hj�Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj‰Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M—hj…Wubjò)�”}”(hhh]”hÌ)�”}”(hŒ¹Initializes spi_device.mode; based on the chip datasheet, board wiring (some devices support both 3WIRE and standard modes), and possibly presence of an inverter in the chipselect path.”h]”hŒ¹Initializes spi_device.mode; based on the chip datasheet, board wiring (some devices support both 3WIRE and standard modes), and possibly presence of an inverter in the chipselect path.”…”�”}”(hj¤Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M–hj¡Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj…Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j Wh´M—hjµUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjmUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjÎWh]”hŒ Description”…”�”}”(hjÐWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÌWubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M›hh·h²hubhÌ)�”}”(hXWhen adding new SPI devices to the device tree, these structures serve as a partial device template. They hold information which can't always be determined by drivers. Information that probe() can establish (such as the default transfer wordsize) is not included here.”h]”hXWhen adding new SPI devices to the device tree, these structures serve as a partial device template. They hold information which can’t always be determined by drivers. Information that probe() can establish (such as the default transfer wordsize) is not included here.”…”�”}”(hjäWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M˜hh·h²hubhÌ)�”}”(hXÐThese structures are used in two places. Their primary role is to be stored in tables of board-specific device descriptors, which are declared early in board initialization and then used (much later) to populate a controller's device tree after the that controller's driver initializes. A secondary (and atypical) role is as a parameter to spi_new_device() call, which happens after those controller drivers are active in some dynamic board configuration models.”h]”hXÔThese structures are used in two places. Their primary role is to be stored in tables of board-specific device descriptors, which are declared early in board initialization and then used (much later) to populate a controller’s device tree after the that controller’s driver initializes. A secondary (and atypical) role is as a parameter to spi_new_device() call, which happens after those controller drivers are active in some dynamic board configuration models.”…”�”}”(hjóWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M�hh·h²hubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ$spi_register_board_info (C function)”Œc.spi_register_board_info”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒKint spi_register_board_info (struct spi_board_info const *info, unsigned n)”h]”jû)�”}”(hŒJint spi_register_board_info(struct spi_board_info const *info, unsigned n)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjXh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MQubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXh²hh³j)Xh´MQubj$)�”}”(hŒspi_register_board_info”h]”j*)�”}”(hŒspi_register_board_info”h]”hŒspi_register_board_info”…”�”}”(hjXsbŒc.spi_register_board_info”†”asbuh1hhjTXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTXubj)�”}”(hj£Hh]”hŒconst”…”�”}”(hj¤Xh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjTXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTXubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj¿Xh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjTXubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hjÌXh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjTXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjPXubjr)�”}”(hŒ unsigned n”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjåXh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjáXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjáXubj*)�”}”(hj5h]”hŒn”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjáXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjPXubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjXh²hh³j)Xh´MQubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjXh²hh³j)Xh´MQubah}”(h]”jXah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j)Xh´MQhjXh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ®ister SPI devices for a given board”h]”hŒ®ister SPI devices for a given board”…”�”}”(hj*Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MQhj'Yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjXh²hh³j)Xh´MQubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjBYjzjBYj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX’**Parameters** ``struct spi_board_info const *info`` array of chip descriptors ``unsigned n`` how many descriptors are provided **Context** can sleep **Description** Board-specific early init code calls this (probably during arch_initcall) with segments of the SPI device table. Any device nodes are created later, after the relevant parent SPI controller (bus_num) is defined. We keep this table of devices forever, so that reloading a controller driver will not make Linux forget about these hard-wired devices. Other code can also call this, e.g. a particular add-on board might provide SPI devices through its expansion connector, so code initializing that board would naturally declare its SPI devices. The board info passed can safely be __initdata ... but be careful of any embedded pointers (platform_data, etc), they're copied as-is. **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjLYh]”hŒ Parameters”…”�”}”(hjNYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjJYubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MUhjFYubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ@``struct spi_board_info const *info`` array of chip descriptors ”h]”(jØ)�”}”(hŒ%``struct spi_board_info const *info``”h]”hö)�”}”(hjkYh]”hŒ!struct spi_board_info const *info”…”�”}”(hjmYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjiYubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MRhjeYubjò)�”}”(hhh]”hÌ)�”}”(hŒarray of chip descriptors”h]”hŒarray of chip descriptors”…”�”}”(hj„Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€Yh´MRhj�Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjeYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j€Yh´MRhjbYubjÒ)�”}”(hŒ1``unsigned n`` how many descriptors are provided ”h]”(jØ)�”}”(hŒ``unsigned n``”h]”hö)�”}”(hj¤Yh]”hŒ unsigned n”…”�”}”(hj¦Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¢Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MShjžYubjò)�”}”(hhh]”hÌ)�”}”(hŒ!how many descriptors are provided”h]”hŒ!how many descriptors are provided”…”�”}”(hj½Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¹Yh´MShjºYubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjžYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¹Yh´MShjbYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjFYubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjßYh]”hŒContext”…”�”}”(hjáYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÝYubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MUhjFYubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjõYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MThjFYubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjZh]”hŒ Description”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MVhjFYubhÌ)�”}”(hX]Board-specific early init code calls this (probably during arch_initcall) with segments of the SPI device table. Any device nodes are created later, after the relevant parent SPI controller (bus_num) is defined. We keep this table of devices forever, so that reloading a controller driver will not make Linux forget about these hard-wired devices.”h]”hX]Board-specific early init code calls this (probably during arch_initcall) with segments of the SPI device table. Any device nodes are created later, after the relevant parent SPI controller (bus_num) is defined. We keep this table of devices forever, so that reloading a controller driver will not make Linux forget about these hard-wired devices.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MUhjFYubhÌ)�”}”(hŒÁOther code can also call this, e.g. a particular add-on board might provide SPI devices through its expansion connector, so code initializing that board would naturally declare its SPI devices.”h]”hŒÁOther code can also call this, e.g. a particular add-on board might provide SPI devices through its expansion connector, so code initializing that board would naturally declare its SPI devices.”…”�”}”(hj+Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´M[hjFYubhÌ)�”}”(hŒ†The board info passed can safely be __initdata ... but be careful of any embedded pointers (platform_data, etc), they're copied as-is.”h]”hŒˆThe board info passed can safely be __initdata ... but be careful of any embedded pointers (platform_data, etc), they’re copied as-is.”…”�”}”(hj:Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´M_hjFYubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjKZh]”hŒReturn”…”�”}”(hjMZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjIZubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MbhjFYubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hjaZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MchjFYubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ"__spi_register_driver (C function)”Œc.__spi_register_driver”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒIint __spi_register_driver (struct module *owner, struct spi_driver *sdrv)”h]”jû)�”}”(hŒHint __spi_register_driver(struct module *owner, struct spi_driver *sdrv)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hj�Zh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjŒZh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒZh²hh³jžZh´M�ubj$)�”}”(hŒ__spi_register_driver”h]”j*)�”}”(hŒ__spi_register_driver”h]”hŒ__spi_register_driver”…”�”}”(hj±Zh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj­Zubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjŒZh²hh³jžZh´M�ubjl)�”}”(hŒ/(struct module *owner, struct spi_driver *sdrv)”h]”(jr)�”}”(hŒstruct module *owner”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÍZh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÉZubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉZubh)�”}”(hhh]”j*)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjëZh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjèZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jíZŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j³ZsbŒc.__spi_register_driver”†”asbuh1hhjÉZubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉZubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÉZubj*)�”}”(hŒowner”h]”hŒowner”…”�”}”(hj&[h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÉZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÅZubjr)�”}”(hŒstruct spi_driver *sdrv”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj?[h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj;[ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;[ubh)�”}”(hhh]”j*)�”}”(hŒ spi_driver”h]”hŒ spi_driver”…”�”}”(hj][h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjZ[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j_[Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j[Œc.__spi_register_driver”†”asbuh1hhj;[ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;[ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj‰[h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj;[ubj*)�”}”(hŒsdrv”h]”hŒsdrv”…”�”}”(hj–[h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj;[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÅZubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjŒZh²hh³jžZh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjˆZh²hh³jžZh´M�ubah}”(h]”jƒZah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jžZh´M�hj…Zh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒregister a SPI driver”h]”hŒregister a SPI driver”…”�”}”(hjÀ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M�hj½[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj…Zh²hh³jžZh´M�ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjØ[jzjØ[j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hŒÙ**Parameters** ``struct module *owner`` owner module of the driver to register ``struct spi_driver *sdrv`` the driver to register **Context** can sleep **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjâ[h]”hŒ Parameters”…”�”}”(hjä[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjà[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M”hjÜ[ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ@``struct module *owner`` owner module of the driver to register ”h]”(jØ)�”}”(hŒ``struct module *owner``”h]”hö)�”}”(hj\h]”hŒstruct module *owner”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÿ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‘hjû[ubjò)�”}”(hhh]”hÌ)�”}”(hŒ&owner module of the driver to register”h]”hŒ&owner module of the driver to register”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j\h´M‘hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjû[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j\h´M‘hjø[ubjÒ)�”}”(hŒ3``struct spi_driver *sdrv`` the driver to register ”h]”(jØ)�”}”(hŒ``struct spi_driver *sdrv``”h]”hö)�”}”(hj:\h]”hŒstruct spi_driver *sdrv”…”�”}”(hj<\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj8\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M’hj4\ubjò)�”}”(hhh]”hÌ)�”}”(hŒthe driver to register”h]”hŒthe driver to register”…”�”}”(hjS\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jO\h´M’hjP\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj4\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jO\h´M’hjø[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÜ[ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hju\h]”hŒContext”…”�”}”(hjw\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjs\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M”hjÜ[ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj‹\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M“hjÜ[ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjœ\h]”hŒReturn”…”�”}”(hjž\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjš\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M•hjÜ[ubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hj²\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M•hjÜ[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_alloc_device (C function)”Œc.spi_alloc_device”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒBstruct spi_device * spi_alloc_device (struct spi_controller *ctlr)”h]”jû)�”}”(hŒ@struct spi_device *spi_alloc_device(struct spi_controller *ctlr)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjá\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÝ\h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÝubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ\h²hh³jî\h´MÝubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjý\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j]Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œspi_alloc_device”sbŒc.spi_alloc_device”†”asbuh1hhjÝ\h²hh³jî\h´MÝubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ\h²hh³jî\h´MÝubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj/]h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÝ\h²hh³jî\h´MÝubj$)�”}”(hŒspi_alloc_device”h]”j*)�”}”(hj]h]”hŒspi_alloc_device”…”�”}”(hj@]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj<]ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÝ\h²hh³jî\h´MÝubjl)�”}”(hŒ(struct spi_controller *ctlr)”h]”jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj[]h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjW]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW]ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjy]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjv]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j{]Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j]Œc.spi_alloc_device”†”asbuh1hhjW]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW]ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj¥]h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjW]ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj²]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjW]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjS]ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjÝ\h²hh³jî\h´MÝubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÙ\h²hh³jî\h´MÝubah}”(h]”jÔ\ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jî\h´MÝhjÖ\h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒAllocate a new SPI device”h]”hŒAllocate a new SPI device”…”�”}”(hjÜ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÝhjÙ]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÖ\h²hh³jî\h´MÝubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjô]jzjô]j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXg**Parameters** ``struct spi_controller *ctlr`` Controller to which device is connected **Context** can sleep **Description** Allows a driver to allocate and initialize a spi_device without registering it immediately. This allows a driver to directly fill the spi_device with device parameters before calling spi_add_device() on it. Caller is responsible to call spi_add_device() on the returned spi_device structure to add it to the SPI controller. If the caller needs to discard the spi_device without adding it, then it should call spi_dev_put() on it. **Return** a pointer to the new device, or NULL.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjþ]h]”hŒ Parameters”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjü]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Máhjø]ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒH``struct spi_controller *ctlr`` Controller to which device is connected ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj^h]”hŒstruct spi_controller *ctlr”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÞhj^ubjò)�”}”(hhh]”hÌ)�”}”(hŒ'Controller to which device is connected”h]”hŒ'Controller to which device is connected”…”�”}”(hj6^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j2^h´MÞhj3^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j2^h´MÞhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjø]ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjX^h]”hŒContext”…”�”}”(hjZ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjV^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Màhjø]ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjn^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mßhjø]ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj^h]”hŒ Description”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj}^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Máhjø]ubhÌ)�”}”(hŒÏAllows a driver to allocate and initialize a spi_device without registering it immediately. This allows a driver to directly fill the spi_device with device parameters before calling spi_add_device() on it.”h]”hŒÏAllows a driver to allocate and initialize a spi_device without registering it immediately. This allows a driver to directly fill the spi_device with device parameters before calling spi_add_device() on it.”…”�”}”(hj•^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Màhjø]ubhÌ)�”}”(hŒßCaller is responsible to call spi_add_device() on the returned spi_device structure to add it to the SPI controller. If the caller needs to discard the spi_device without adding it, then it should call spi_dev_put() on it.”h]”hŒßCaller is responsible to call spi_add_device() on the returned spi_device structure to add it to the SPI controller. If the caller needs to discard the spi_device without adding it, then it should call spi_dev_put() on it.”…”�”}”(hj¤^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Måhjø]ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjµ^h]”hŒReturn”…”�”}”(hj·^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj³^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mêhjø]ubhÌ)�”}”(hŒ%a pointer to the new device, or NULL.”h]”hŒ%a pointer to the new device, or NULL.”…”�”}”(hjË^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mëhjø]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_add_device (C function)”Œc.spi_add_device”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ+int spi_add_device (struct spi_device *spi)”h]”jû)�”}”(hŒ*int spi_add_device(struct spi_device *spi)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjú^h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjö^h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÇubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj _h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjö^h²hh³j_h´MÇubj$)�”}”(hŒspi_add_device”h]”j*)�”}”(hŒspi_add_device”h]”hŒspi_add_device”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj_ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjö^h²hh³j_h´MÇubjl)�”}”(hŒ(struct spi_device *spi)”h]”jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj7_h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj3_ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3_ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjU_h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjR_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jW_Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j_sbŒc.spi_add_device”†”asbuh1hhj3_ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3_ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjƒ_h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj3_ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj3_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj/_ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjö^h²hh³j_h´MÇubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjò^h²hh³j_h´MÇubah}”(h]”jí^ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j_h´MÇhjï^h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ.Add spi_device allocated with spi_alloc_device”h]”hŒ.Add spi_device allocated with spi_alloc_device”…”�”}”(hjº_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÇhj·_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjï^h²hh³j_h´MÇubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjÒ_jzjÒ_j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX **Parameters** ``struct spi_device *spi`` spi_device to register **Description** Companion function to spi_alloc_device. Devices allocated with spi_alloc_device can be added onto the SPI bus with this function. **Return** 0 on success; negative errno on failure”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjÜ_h]”hŒ Parameters”…”�”}”(hjÞ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÚ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MËhjÖ_ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ2``struct spi_device *spi`` spi_device to register ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjû_h]”hŒstruct spi_device *spi”…”�”}”(hjý_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjù_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÈhjõ_ubjò)�”}”(hhh]”hÌ)�”}”(hŒspi_device to register”h]”hŒspi_device to register”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j`h´MÈhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjõ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j`h´MÈhjò_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÖ_ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj6`h]”hŒ Description”…”�”}”(hj8`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj4`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÊhjÖ_ubhÌ)�”}”(hŒ‚Companion function to spi_alloc_device. Devices allocated with spi_alloc_device can be added onto the SPI bus with this function.”h]”hŒ‚Companion function to spi_alloc_device. Devices allocated with spi_alloc_device can be added onto the SPI bus with this function.”…”�”}”(hjL`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÉhjÖ_ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj]`h]”hŒReturn”…”�”}”(hj_`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj[`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÌhjÖ_ubhÌ)�”}”(hŒ'0 on success; negative errno on failure”h]”hŒ'0 on success; negative errno on failure”…”�”}”(hjs`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÍhjÖ_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_new_device (C function)”Œc.spi_new_device”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ]struct spi_device * spi_new_device (struct spi_controller *ctlr, struct spi_board_info *chip)”h]”jû)�”}”(hŒ[struct spi_device *spi_new_device(struct spi_controller *ctlr, struct spi_board_info *chip)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¢`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjž`h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mßubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž`h²hh³j¯`h´Mßubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjÁ`h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¾`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÃ`Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œspi_new_device”sbŒc.spi_new_device”†”asbuh1hhjž`h²hh³j¯`h´Mßubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž`h²hh³j¯`h´MßubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjð`h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjž`h²hh³j¯`h´Mßubj$)�”}”(hŒspi_new_device”h]”j*)�”}”(hjß`h]”hŒspi_new_device”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjý`ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjž`h²hh³j¯`h´Mßubjl)�”}”(hŒ:(struct spi_controller *ctlr, struct spi_board_info *chip)”h]”(jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjaubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hj:ah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj7aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jhubjò)�”}”(hhh]”hÌ)�”}”(hŒ5Pointer to the spi_controller structure of the driver”h]”hŒ5Pointer to the spi_controller structure of the driver”…”�”}”(hj]hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jYhh´M~hjZhubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj>hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jYhh´M~hj;hubjÒ)�”}”(hŒH``struct spi_transfer *xfer`` Pointer to the transfer being timestamped ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfer``”h]”hö)�”}”(hj}hh]”hŒstruct spi_transfer *xfer”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj{hubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhjwhubjò)�”}”(hhh]”hÌ)�”}”(hŒ)Pointer to the transfer being timestamped”h]”hŒ)Pointer to the transfer being timestamped”…”�”}”(hj–hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j’hh´Mhj“hubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjwhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j’hh´Mhj;hubjÒ)�”}”(hŒL``size_t progress`` How many words (not bytes) have been transferred so far ”h]”(jØ)�”}”(hŒ``size_t progress``”h]”hö)�”}”(hj¶hh]”hŒsize_t progress”…”�”}”(hj¸hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj´hubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M€hj°hubjò)�”}”(hhh]”hÌ)�”}”(hŒ7How many words (not bytes) have been transferred so far”h]”hŒ7How many words (not bytes) have been transferred so far”…”�”}”(hjÏhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jËhh´M€hjÌhubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj°hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jËhh´M€hj;hubjÒ)�”}”(hX[``bool irqs_off`` If true, will disable IRQs and preemption for the duration of the transfer, for less jitter in time measurement. Only compatible with PIO drivers. If true, must follow up with spi_take_timestamp_post or otherwise system will crash. WARNING: for fully predictable results, the CPU frequency must also be under control (governor). ”h]”(jØ)�”}”(hŒ``bool irqs_off``”h]”hö)�”}”(hjïhh]”hŒ bool irqs_off”…”�”}”(hjñhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjíhubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M†hjéhubjò)�”}”(hhh]”hÌ)�”}”(hXHIf true, will disable IRQs and preemption for the duration of the transfer, for less jitter in time measurement. Only compatible with PIO drivers. If true, must follow up with spi_take_timestamp_post or otherwise system will crash. WARNING: for fully predictable results, the CPU frequency must also be under control (governor).”h]”hXHIf true, will disable IRQs and preemption for the duration of the transfer, for less jitter in time measurement. Only compatible with PIO drivers. If true, must follow up with spi_take_timestamp_post or otherwise system will crash. WARNING: for fully predictable results, the CPU frequency must also be under control (governor).”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M�hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjéhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jih´M†hj;hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjhubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj+ih]”hŒ Description”…”�”}”(hj-ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj)iubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MˆhjhubhÌ)�”}”(hXúThis is a helper for drivers to collect the beginning of the TX timestamp for the requested byte from the SPI transfer. The frequency with which this function must be called (once per word, once for the whole transfer, once per batch of words etc) is arbitrary as long as the **tx** buffer offset is greater than or equal to the requested byte at the time of the call. The timestamp is only taken once, at the first such call. It is assumed that the driver advances its **tx** buffer pointer monotonically.”h]”(hXThis is a helper for drivers to collect the beginning of the TX timestamp for the requested byte from the SPI transfer. The frequency with which this function must be called (once per word, once for the whole transfer, once per batch of words etc) is arbitrary as long as the ”…”�”}”(hjAih²hh³Nh´Nubj‰)�”}”(hŒ**tx**”h]”hŒtx”…”�”}”(hjIih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjAiubhŒ¼ buffer offset is greater than or equal to the requested byte at the time of the call. The timestamp is only taken once, at the first such call. It is assumed that the driver advances its ”…”�”}”(hjAih²hh³Nh´Nubj‰)�”}”(hŒ**tx**”h]”hŒtx”…”�”}”(hj[ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjAiubhŒ buffer pointer monotonically.”…”�”}”(hjAih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‡hjhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ$spi_take_timestamp_post (C function)”Œc.spi_take_timestamp_post”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒuvoid spi_take_timestamp_post (struct spi_controller *ctlr, struct spi_transfer *xfer, size_t progress, bool irqs_off)”h]”jû)�”}”(hŒtvoid spi_take_timestamp_post(struct spi_controller *ctlr, struct spi_transfer *xfer, size_t progress, bool irqs_off)”h]”(j4)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj”ih²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj�ih²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mªubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ih²hh³j¢ih´Mªubj$)�”}”(hŒspi_take_timestamp_post”h]”j*)�”}”(hŒspi_take_timestamp_post”h]”hŒspi_take_timestamp_post”…”�”}”(hjµih²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj±iubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj�ih²hh³j¢ih´Mªubjl)�”}”(hŒX(struct spi_controller *ctlr, struct spi_transfer *xfer, size_t progress, bool irqs_off)”h]”(jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÑih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÍiubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍiubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjïih²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjìiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jñiŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j·isbŒc.spi_take_timestamp_post”†”asbuh1hhjÍiubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍiubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÍiubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj*jh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÍiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÉiubjr)�”}”(hŒstruct spi_transfer *xfer”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjCjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj?jubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?jubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hjajh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj^jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jcjŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j jŒc.spi_take_timestamp_post”†”asbuh1hhj?jubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?jubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj?jubj*)�”}”(hŒxfer”h]”hŒxfer”…”�”}”(hjšjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj?jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÉiubjr)�”}”(hŒsize_t progress”h]”(h)�”}”(hhh]”j*)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¶jh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj³jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j¸jŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j jŒc.spi_take_timestamp_post”†”asbuh1hhj¯jubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯jubj*)�”}”(hŒprogress”h]”hŒprogress”…”�”}”(hjâjh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¯jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÉiubjr)�”}”(hŒ bool irqs_off”h]”(j4)�”}”(hjb:h]”hŒbool”…”�”}”(hjûjh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj÷jubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷jubj*)�”}”(hŒirqs_off”h]”hŒirqs_off”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj÷jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÉiubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj�ih²hh³j¢ih´Mªubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjŒih²hh³j¢ih´Mªubah}”(h]”j‡iah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j¢ih´Mªhj‰ih²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ-helper to collect the end of the TX timestamp”h]”hŒ-helper to collect the end of the TX timestamp”…”�”}”(hj@kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mªhj=kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj‰ih²hh³j¢ih´Mªubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjXkjzjXkj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXd**Parameters** ``struct spi_controller *ctlr`` Pointer to the spi_controller structure of the driver ``struct spi_transfer *xfer`` Pointer to the transfer being timestamped ``size_t progress`` How many words (not bytes) have been transferred so far ``bool irqs_off`` If true, will re-enable IRQs and preemption for the local CPU. **Description** This is a helper for drivers to collect the end of the TX timestamp for the requested byte from the SPI transfer. Can be called with an arbitrary frequency: only the first call where **tx** exceeds or is equal to the requested word will be timestamped.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjbkh]”hŒ Parameters”…”�”}”(hjdkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj`kubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M®hj\kubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒV``struct spi_controller *ctlr`` Pointer to the spi_controller structure of the driver ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj�kh]”hŒstruct spi_controller *ctlr”…”�”}”(hjƒkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M«hj{kubjò)�”}”(hhh]”hÌ)�”}”(hŒ5Pointer to the spi_controller structure of the driver”h]”hŒ5Pointer to the spi_controller structure of the driver”…”�”}”(hjškh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j–kh´M«hj—kubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj{kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j–kh´M«hjxkubjÒ)�”}”(hŒH``struct spi_transfer *xfer`` Pointer to the transfer being timestamped ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfer``”h]”hö)�”}”(hjºkh]”hŒstruct spi_transfer *xfer”…”�”}”(hj¼kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¸kubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¬hj´kubjò)�”}”(hhh]”hÌ)�”}”(hŒ)Pointer to the transfer being timestamped”h]”hŒ)Pointer to the transfer being timestamped”…”�”}”(hjÓkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÏkh´M¬hjÐkubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj´kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÏkh´M¬hjxkubjÒ)�”}”(hŒL``size_t progress`` How many words (not bytes) have been transferred so far ”h]”(jØ)�”}”(hŒ``size_t progress``”h]”hö)�”}”(hjókh]”hŒsize_t progress”…”�”}”(hjõkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjñkubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M­hjíkubjò)�”}”(hhh]”hÌ)�”}”(hŒ7How many words (not bytes) have been transferred so far”h]”hŒ7How many words (not bytes) have been transferred so far”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jlh´M­hj lubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjíkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jlh´M­hjxkubjÒ)�”}”(hŒQ``bool irqs_off`` If true, will re-enable IRQs and preemption for the local CPU. ”h]”(jØ)�”}”(hŒ``bool irqs_off``”h]”hö)�”}”(hj,lh]”hŒ bool irqs_off”…”�”}”(hj.lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj*lubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M®hj&lubjò)�”}”(hhh]”hÌ)�”}”(hŒ>If true, will re-enable IRQs and preemption for the local CPU.”h]”hŒ>If true, will re-enable IRQs and preemption for the local CPU.”…”�”}”(hjElh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jAlh´M®hjBlubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj&lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jAlh´M®hjxkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj\kubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjglh]”hŒ Description”…”�”}”(hjilh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjelubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M°hj\kubhÌ)�”}”(hŒüThis is a helper for drivers to collect the end of the TX timestamp for the requested byte from the SPI transfer. Can be called with an arbitrary frequency: only the first call where **tx** exceeds or is equal to the requested word will be timestamped.”h]”(hŒ·This is a helper for drivers to collect the end of the TX timestamp for the requested byte from the SPI transfer. Can be called with an arbitrary frequency: only the first call where ”…”�”}”(hj}lh²hh³Nh´Nubj‰)�”}”(hŒ**tx**”h]”hŒtx”…”�”}”(hj…lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj}lubhŒ? exceeds or is equal to the requested word will be timestamped.”…”�”}”(hj}lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¯hj\kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ(spi_get_next_queued_message (C function)”Œc.spi_get_next_queued_message”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒNstruct spi_message * spi_get_next_queued_message (struct spi_controller *ctlr)”h]”jû)�”}”(hŒLstruct spi_message *spi_get_next_queued_message(struct spi_controller *ctlr)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¾lh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjºlh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjºlh²hh³jËlh´M ubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hjÝlh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÚlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jßlŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œspi_get_next_queued_message”sbŒc.spi_get_next_queued_message”†”asbuh1hhjºlh²hh³jËlh´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjºlh²hh³jËlh´M ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjºlh²hh³jËlh´M ubj$)�”}”(hŒspi_get_next_queued_message”h]”j*)�”}”(hjûlh]”hŒspi_get_next_queued_message”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjmubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjºlh²hh³jËlh´M ubjl)�”}”(hŒ(struct spi_controller *ctlr)”h]”jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj8mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj4mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4mubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjVmh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjSmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jXmŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”jùlŒc.spi_get_next_queued_message”†”asbuh1hhj4mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4mubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj‚mh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj4mubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj4mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj0mubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjºlh²hh³jËlh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj¶lh²hh³jËlh´M ubah}”(h]”j±lah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jËlh´M hj³lh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ-called by driver to check for queued messages”h]”hŒ-called by driver to check for queued messages”…”�”}”(hj¹mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hj¶mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj³lh²hh³jËlh´M ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjÑmjzjÑmj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX**Parameters** ``struct spi_controller *ctlr`` the controller to check for queued messages **Description** If there are more messages in the queue, the next message is returned from this call. **Return** the next message in the queue, else NULL if the queue is empty.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjÛmh]”hŒ Parameters”…”�”}”(hjÝmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÙmubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÕmubjÍ)�”}”(hhh]”jÒ)�”}”(hŒL``struct spi_controller *ctlr`` the controller to check for queued messages ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjúmh]”hŒstruct spi_controller *ctlr”…”�”}”(hjümh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjømubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjômubjò)�”}”(hhh]”hÌ)�”}”(hŒ+the controller to check for queued messages”h]”hŒ+the controller to check for queued messages”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jnh´M hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjômubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jnh´M hjñmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÕmubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj5nh]”hŒ Description”…”�”}”(hj7nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj3nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÕmubhÌ)�”}”(hŒUIf there are more messages in the queue, the next message is returned from this call.”h]”hŒUIf there are more messages in the queue, the next message is returned from this call.”…”�”}”(hjKnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÕmubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj\nh]”hŒReturn”…”�”}”(hj^nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjZnubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÕmubhÌ)�”}”(hŒ?the next message in the queue, else NULL if the queue is empty.”h]”hŒ?the next message in the queue, else NULL if the queue is empty.”…”�”}”(hjrnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÕmubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ)spi_finalize_current_message (C function)”Œc.spi_finalize_current_message”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ?void spi_finalize_current_message (struct spi_controller *ctlr)”h]”jû)�”}”(hŒ>void spi_finalize_current_message(struct spi_controller *ctlr)”h]”(j4)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¡nh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj�nh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MA ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�nh²hh³j¯nh´MA ubj$)�”}”(hŒspi_finalize_current_message”h]”j*)�”}”(hŒspi_finalize_current_message”h]”hŒspi_finalize_current_message”…”�”}”(hjÂnh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¾nubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj�nh²hh³j¯nh´MA ubjl)�”}”(hŒ(struct spi_controller *ctlr)”h]”jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÞnh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÚnubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjënh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚnubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjünh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjùnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jþnŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jÄnsbŒc.spi_finalize_current_message”†”asbuh1hhjÚnubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚnubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj*oh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÚnubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj7oh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÚnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÖnubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj�nh²hh³j¯nh´MA ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj™nh²hh³j¯nh´MA ubah}”(h]”j”nah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j¯nh´MA hj–nh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒthe current message is complete”h]”hŒthe current message is complete”…”�”}”(hjaoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MA hj^oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj–nh²hh³j¯nh´MA ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjyojzjyoj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hŒí**Parameters** ``struct spi_controller *ctlr`` the controller to return the message to **Description** Called by the driver to notify the core that the message in the front of the queue is complete and can be removed from the queue.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjƒoh]”hŒ Parameters”…”�”}”(hj…oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj�oubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´ME hj}oubjÍ)�”}”(hhh]”jÒ)�”}”(hŒH``struct spi_controller *ctlr`` the controller to return the message to ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj¢oh]”hŒstruct spi_controller *ctlr”…”�”}”(hj¤oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj oubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MB hjœoubjò)�”}”(hhh]”hÌ)�”}”(hŒ'the controller to return the message to”h]”hŒ'the controller to return the message to”…”�”}”(hj»oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j·oh´MB hj¸oubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjœoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j·oh´MB hj™oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj}oubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjÝoh]”hŒ Description”…”�”}”(hjßoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÛoubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MD hj}oubhÌ)�”}”(hŒ�Called by the driver to notify the core that the message in the front of the queue is complete and can be removed from the queue.”h]”hŒ�Called by the driver to notify the core that the message in the front of the queue is complete and can be removed from the queue.”…”�”}”(hjóoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MC hj}oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ%spi_new_ancillary_device (C function)”Œc.spi_new_ancillary_device”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒUstruct spi_device * spi_new_ancillary_device (struct spi_device *spi, u8 chip_select)”h]”jû)�”}”(hŒSstruct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 chip_select)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj"ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjph²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M` ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjph²hh³j/ph´M` ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjAph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj>pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jCpŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œspi_new_ancillary_device”sbŒc.spi_new_ancillary_device”†”asbuh1hhjph²hh³j/ph´M` ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjph²hh³j/ph´M` ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjpph²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjph²hh³j/ph´M` ubj$)�”}”(hŒspi_new_ancillary_device”h]”j*)�”}”(hj_ph]”hŒspi_new_ancillary_device”…”�”}”(hj�ph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj}pubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjph²hh³j/ph´M` ubjl)�”}”(hŒ((struct spi_device *spi, u8 chip_select)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjœph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj˜pubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜pubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjºph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj·pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j¼pŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j]pŒc.spi_new_ancillary_device”†”asbuh1hhj˜pubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜pubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjæph²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj˜pubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjóph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj˜pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj”pubjr)�”}”(hŒu8 chip_select”h]”(h)�”}”(hhh]”j*)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jqŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j]pŒc.spi_new_ancillary_device”†”asbuh1hhjqubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubj*)�”}”(hŒ chip_select”h]”hŒ chip_select”…”�”}”(hj;qh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj”pubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjph²hh³j/ph´M` ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjph²hh³j/ph´M` ubah}”(h]”jpah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j/ph´M` hjph²hubjX)�”}”(hhh]”hÌ)�”}”(hŒRegister ancillary SPI device”h]”hŒRegister ancillary SPI device”…”�”}”(hjeqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M` hjbqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjph²hh³j/ph´M` ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj}qjzj}qj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXÆ**Parameters** ``struct spi_device *spi`` Pointer to the main SPI device registering the ancillary device ``u8 chip_select`` Chip Select of the ancillary device **Description** Register an ancillary SPI device; for example some chips have a chip-select for normal device usage and another one for setup/firmware upload. This may only be called from main SPI device's probe routine. **Return** the new device on success; an ERR_PTR() on failure”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj‡qh]”hŒ Parameters”…”�”}”(hj‰qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj…qubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Md hj�qubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ[``struct spi_device *spi`` Pointer to the main SPI device registering the ancillary device ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hj¦qh]”hŒstruct spi_device *spi”…”�”}”(hj¨qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¤qubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Ma hj qubjò)�”}”(hhh]”hÌ)�”}”(hŒ?Pointer to the main SPI device registering the ancillary device”h]”hŒ?Pointer to the main SPI device registering the ancillary device”…”�”}”(hj¿qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j»qh´Ma hj¼qubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j»qh´Ma hj�qubjÒ)�”}”(hŒ7``u8 chip_select`` Chip Select of the ancillary device ”h]”(jØ)�”}”(hŒ``u8 chip_select``”h]”hö)�”}”(hjßqh]”hŒu8 chip_select”…”�”}”(hjáqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÝqubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mb hjÙqubjò)�”}”(hhh]”hÌ)�”}”(hŒ#Chip Select of the ancillary device”h]”hŒ#Chip Select of the ancillary device”…”�”}”(hjøqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jôqh´Mb hjõqubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÙqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jôqh´Mb hj�qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj�qubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjrh]”hŒ Description”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Md hj�qubhÌ)�”}”(hŒŽRegister an ancillary SPI device; for example some chips have a chip-select for normal device usage and another one for setup/firmware upload.”h]”hŒŽRegister an ancillary SPI device; for example some chips have a chip-select for normal device usage and another one for setup/firmware upload.”…”�”}”(hj0rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mc hj�qubhÌ)�”}”(hŒ=This may only be called from main SPI device's probe routine.”h]”hŒ?This may only be called from main SPI device’s probe routine.”…”�”}”(hj?rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mf hj�qubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjPrh]”hŒReturn”…”�”}”(hjRrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjNrubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mh hj�qubhÌ)�”}”(hŒ2the new device on success; an ERR_PTR() on failure”h]”hŒ2the new device on success; an ERR_PTR() on failure”…”�”}”(hjfrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mi hj�qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ*devm_spi_new_ancillary_device (C function)”Œc.devm_spi_new_ancillary_device”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒZstruct spi_device * devm_spi_new_ancillary_device (struct spi_device *spi, u8 chip_select)”h]”jû)�”}”(hŒXstruct spi_device *devm_spi_new_ancillary_device(struct spi_device *spi, u8 chip_select)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj•rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj‘rh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mž ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘rh²hh³j¢rh´Mž ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj´rh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj±rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j¶rŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œdevm_spi_new_ancillary_device”sbŒc.devm_spi_new_ancillary_device”†”asbuh1hhj‘rh²hh³j¢rh´Mž ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘rh²hh³j¢rh´Mž ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjãrh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj‘rh²hh³j¢rh´Mž ubj$)�”}”(hŒdevm_spi_new_ancillary_device”h]”j*)�”}”(hjÒrh]”hŒdevm_spi_new_ancillary_device”…”�”}”(hjôrh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjðrubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj‘rh²hh³j¢rh´Mž ubjl)�”}”(hŒ((struct spi_device *spi, u8 chip_select)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj subj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj subh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj-sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj*subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j/sŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”jÐrŒc.devm_spi_new_ancillary_device”†”asbuh1hhj subj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj subjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjYsh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj subj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjfsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjsubjr)�”}”(hŒu8 chip_select”h]”(h)�”}”(hhh]”j*)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj‚sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j„sŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”jÐrŒc.devm_spi_new_ancillary_device”†”asbuh1hhj{subj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{subj*)�”}”(hŒ chip_select”h]”hŒ chip_select”…”�”}”(hj®sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj{subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjsubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj‘rh²hh³j¢rh´Mž ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj�rh²hh³j¢rh´Mž ubah}”(h]”jˆrah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j¢rh´Mž hjŠrh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ%Register managed ancillary SPI device”h]”hŒ%Register managed ancillary SPI device”…”�”}”(hjØsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mž hjÕsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjŠrh²hh³j¢rh´Mž ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjðsjzjðsj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXr**Parameters** ``struct spi_device *spi`` Pointer to the main SPI device registering the ancillary device ``u8 chip_select`` Chip Select of the ancillary device **Description** Register an ancillary SPI device; for example some chips have a chip-select for normal device usage and another one for setup/firmware upload. This is the managed version of spi_new_ancillary_device(). The ancillary device will be unregistered automatically when the parent SPI device is unregistered. This may only be called from main SPI device's probe routine. **Return** Pointer to new ancillary device on success; ERR_PTR on failure”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjúsh]”hŒ Parameters”…”�”}”(hjüsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjøsubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¢ hjôsubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ[``struct spi_device *spi`` Pointer to the main SPI device registering the ancillary device ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjth]”hŒstruct spi_device *spi”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MŸ hjtubjò)�”}”(hhh]”hÌ)�”}”(hŒ?Pointer to the main SPI device registering the ancillary device”h]”hŒ?Pointer to the main SPI device registering the ancillary device”…”�”}”(hj2th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j.th´MŸ hj/tubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j.th´MŸ hjtubjÒ)�”}”(hŒ7``u8 chip_select`` Chip Select of the ancillary device ”h]”(jØ)�”}”(hŒ``u8 chip_select``”h]”hö)�”}”(hjRth]”hŒu8 chip_select”…”�”}”(hjTth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjPtubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M  hjLtubjò)�”}”(hhh]”hÌ)�”}”(hŒ#Chip Select of the ancillary device”h]”hŒ#Chip Select of the ancillary device”…”�”}”(hjkth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jgth´M  hjhtubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjLtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jgth´M  hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjôsubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj�th]”hŒ Description”…”�”}”(hj�th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj‹tubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¢ hjôsubhÌ)�”}”(hŒŽRegister an ancillary SPI device; for example some chips have a chip-select for normal device usage and another one for setup/firmware upload.”h]”hŒŽRegister an ancillary SPI device; for example some chips have a chip-select for normal device usage and another one for setup/firmware upload.”…”�”}”(hj£th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¡ hjôsubhÌ)�”}”(hŒžThis is the managed version of spi_new_ancillary_device(). The ancillary device will be unregistered automatically when the parent SPI device is unregistered.”h]”hŒžThis is the managed version of spi_new_ancillary_device(). The ancillary device will be unregistered automatically when the parent SPI device is unregistered.”…”�”}”(hj²th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¤ hjôsubhÌ)�”}”(hŒ=This may only be called from main SPI device's probe routine.”h]”hŒ?This may only be called from main SPI device’s probe routine.”…”�”}”(hjÁth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¨ hjôsubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjÒth]”hŒReturn”…”�”}”(hjÔth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÐtubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mª hjôsubhÌ)�”}”(hŒ>Pointer to new ancillary device on success; ERR_PTR on failure”h]”hŒ>Pointer to new ancillary device on success; ERR_PTR on failure”…”�”}”(hjèth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M« hjôsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ%acpi_spi_count_resources (C function)”Œc.acpi_spi_count_resources”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ7int acpi_spi_count_resources (struct acpi_device *adev)”h]”jû)�”}”(hŒ6int acpi_spi_count_resources(struct acpi_device *adev)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjuh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÞ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuh²hh³j%uh´MÞ ubj$)�”}”(hŒacpi_spi_count_resources”h]”j*)�”}”(hŒacpi_spi_count_resources”h]”hŒacpi_spi_count_resources”…”�”}”(hj8uh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj4uubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjuh²hh³j%uh´MÞ ubjl)�”}”(hŒ(struct acpi_device *adev)”h]”jr)�”}”(hŒstruct acpi_device *adev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjTuh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjPuubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjauh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPuubh)�”}”(hhh]”j*)�”}”(hŒ acpi_device”h]”hŒ acpi_device”…”�”}”(hjruh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjouubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jtuŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j:usbŒc.acpi_spi_count_resources”†”asbuh1hhjPuubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPuubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjPuubj*)�”}”(hŒadev”h]”hŒadev”…”�”}”(hj­uh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjPuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjLuubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjuh²hh³j%uh´MÞ ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjuh²hh³j%uh´MÞ ubah}”(h]”j uah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j%uh´MÞ hj uh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ*Count the number of SpiSerialBus resources”h]”hŒ*Count the number of SpiSerialBus resources”…”�”}”(hj×uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÞ hjÔuh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj uh²hh³j%uh´MÞ ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjïujzjïuj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hŒª**Parameters** ``struct acpi_device *adev`` ACPI device **Return** the number of SpiSerialBus resources in the ACPI-device's resource-list; or a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjùuh]”hŒ Parameters”…”�”}”(hjûuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj÷uubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mâ hjóuubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ)``struct acpi_device *adev`` ACPI device ”h]”(jØ)�”}”(hŒ``struct acpi_device *adev``”h]”hö)�”}”(hjvh]”hŒstruct acpi_device *adev”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mß hjvubjò)�”}”(hhh]”hÌ)�”}”(hŒ ACPI device”h]”hŒ ACPI device”…”�”}”(hj1vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j-vh´Mß hj.vubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j-vh´Mß hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjóuubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjSvh]”hŒReturn”…”�”}”(hjUvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjQvubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Má hjóuubhÌ)�”}”(hŒbthe number of SpiSerialBus resources in the ACPI-device's resource-list; or a negative error code.”h]”hŒdthe number of SpiSerialBus resources in the ACPI-device’s resource-list; or a negative error code.”…”�”}”(hjivh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Má hjóuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ"acpi_spi_device_alloc (C function)”Œc.acpi_spi_device_alloc”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒlstruct spi_device * acpi_spi_device_alloc (struct spi_controller *ctlr, struct acpi_device *adev, int index)”h]”jû)�”}”(hŒjstruct spi_device *acpi_spi_device_alloc(struct spi_controller *ctlr, struct acpi_device *adev, int index)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj˜vh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj”vh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mh ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”vh²hh³j¥vh´Mh ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj·vh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj´vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j¹vŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œacpi_spi_device_alloc”sbŒc.acpi_spi_device_alloc”†”asbuh1hhj”vh²hh³j¥vh´Mh ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”vh²hh³j¥vh´Mh ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjævh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj”vh²hh³j¥vh´Mh ubj$)�”}”(hŒacpi_spi_device_alloc”h]”j*)�”}”(hjÕvh]”hŒacpi_spi_device_alloc”…”�”}”(hj÷vh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjóvubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj”vh²hh³j¥vh´Mh ubjl)�”}”(hŒB(struct spi_controller *ctlr, struct acpi_device *adev, int index)”h]”(jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hj0wh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj-wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j2wŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”jÓvŒc.acpi_spi_device_alloc”†”asbuh1hhjwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj\wh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjwubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjiwh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj wubjr)�”}”(hŒstruct acpi_device *adev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj‚wh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj~wubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~wubh)�”}”(hhh]”j*)�”}”(hŒ acpi_device”h]”hŒ acpi_device”…”�”}”(hj wh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj�wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j¢wŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”jÓvŒc.acpi_spi_device_alloc”†”asbuh1hhj~wubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~wubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjÌwh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj~wubj*)�”}”(hŒadev”h]”hŒadev”…”�”}”(hjÙwh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj~wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj wubjr)�”}”(hŒ int index”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjòwh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjîwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîwubj*)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjîwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj wubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj”vh²hh³j¥vh´Mh ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj�vh²hh³j¥vh´Mh ubah}”(h]”j‹vah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j¥vh´Mh hj�vh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ;Allocate a spi device, and fill it in with ACPI information”h]”hŒ;Allocate a spi device, and fill it in with ACPI information”…”�”}”(hj8xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mh hj5xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj�vh²hh³j¥vh´Mh ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjPxjzjPxj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX�**Parameters** ``struct spi_controller *ctlr`` controller to which the spi device belongs ``struct acpi_device *adev`` ACPI Device for the spi device ``int index`` Index of the spi resource inside the ACPI Node **Description** This should be used to allocate a new SPI device from and ACPI Device node. The caller is responsible for calling spi_add_device to register the SPI device. If ctlr is set to NULL, the Controller for the SPI device will be looked up using the resource. If index is set to -1, index is not used. **Note** If index is -1, ctlr must be set. **Return** a pointer to the new device, or ERR_PTR on error.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjZxh]”hŒ Parameters”…”�”}”(hj\xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjXxubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Ml hjTxubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒK``struct spi_controller *ctlr`` controller to which the spi device belongs ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjyxh]”hŒstruct spi_controller *ctlr”…”�”}”(hj{xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjwxubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mi hjsxubjò)�”}”(hhh]”hÌ)�”}”(hŒ*controller to which the spi device belongs”h]”hŒ*controller to which the spi device belongs”…”�”}”(hj’xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŽxh´Mi hj�xubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjsxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŽxh´Mi hjpxubjÒ)�”}”(hŒ<``struct acpi_device *adev`` ACPI Device for the spi device ”h]”(jØ)�”}”(hŒ``struct acpi_device *adev``”h]”hö)�”}”(hj²xh]”hŒstruct acpi_device *adev”…”�”}”(hj´xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj°xubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mj hj¬xubjò)�”}”(hhh]”hÌ)�”}”(hŒACPI Device for the spi device”h]”hŒACPI Device for the spi device”…”�”}”(hjËxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÇxh´Mj hjÈxubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¬xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÇxh´Mj hjpxubjÒ)�”}”(hŒ=``int index`` Index of the spi resource inside the ACPI Node ”h]”(jØ)�”}”(hŒ ``int index``”h]”hö)�”}”(hjëxh]”hŒ int index”…”�”}”(hjíxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjéxubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mk hjåxubjò)�”}”(hhh]”hÌ)�”}”(hŒ.Index of the spi resource inside the ACPI Node”h]”hŒ.Index of the spi resource inside the ACPI Node”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jyh´Mk hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjåxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jyh´Mk hjpxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjTxubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj&yh]”hŒ Description”…”�”}”(hj(yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj$yubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mm hjTxubhÌ)�”}”(hŒœThis should be used to allocate a new SPI device from and ACPI Device node. The caller is responsible for calling spi_add_device to register the SPI device.”h]”hŒœThis should be used to allocate a new SPI device from and ACPI Device node. The caller is responsible for calling spi_add_device to register the SPI device.”…”�”}”(hjabort the ongoing transfer request on an SPI target controller”h]”hŒ>abort the ongoing transfer request on an SPI target controller”…”�”}”(hjˆzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M" hj…zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj½yh²hh³jÖyh´M" ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj zjzj zj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hŒQ**Parameters** ``struct spi_device *spi`` device used for the current transfer”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjªzh]”hŒ Parameters”…”�”}”(hj¬zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¨zubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M& hj¤zubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ?``struct spi_device *spi`` device used for the current transfer”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjÉzh]”hŒstruct spi_device *spi”…”�”}”(hjËzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÇzubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M( hjÃzubjò)�”}”(hhh]”hÌ)�”}”(hŒ$device used for the current transfer”h]”hŒ$device used for the current transfer”…”�”}”(hjâzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M# hjßzubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÃzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÞzh´M( hjÀzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj¤zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ#__spi_alloc_controller (C function)”Œc.__spi_alloc_controller”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒcstruct spi_controller * __spi_alloc_controller (struct device *dev, unsigned int size, bool target)”h]”jû)�”}”(hŒastruct spi_controller *__spi_alloc_controller(struct device *dev, unsigned int size, bool target)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj#{h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj{h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M� ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{h²hh³j0{h´M� ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjB{h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj?{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jD{Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œ__spi_alloc_controller”sbŒc.__spi_alloc_controller”†”asbuh1hhj{h²hh³j0{h´M� ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{h²hh³j0{h´M� ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjq{h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj{h²hh³j0{h´M� ubj$)�”}”(hŒ__spi_alloc_controller”h]”j*)�”}”(hj`{h]”hŒ__spi_alloc_controller”…”�”}”(hj‚{h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj~{ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj{h²hh³j0{h´M� ubjl)�”}”(hŒ4(struct device *dev, unsigned int size, bool target)”h]”(jr)�”}”(hŒstruct device *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj�{h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj™{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™{ubh)�”}”(hhh]”j*)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj»{h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¸{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j½{Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j^{Œc.__spi_alloc_controller”†”asbuh1hhj™{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™{ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjç{h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj™{ubj*)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjô{h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj™{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj•{ubjr)�”}”(hŒunsigned int size”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj |ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj |ubj4)�”}”(hŒint”h]”hŒint”…”�”}”(hj)|h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj |ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj |ubj*)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjE|h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj |ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj•{ubjr)�”}”(hŒ bool target”h]”(j4)�”}”(hjb:h]”hŒbool”…”�”}”(hj^|h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjZ|ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZ|ubj*)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hjy|h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjZ|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj•{ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj{h²hh³j0{h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj{h²hh³j0{h´M� ubah}”(h]”j{ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j0{h´M� hj{h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)allocate an SPI host or target controller”h]”hŒ)allocate an SPI host or target controller”…”�”}”(hj£|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M� hj |h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj{h²hh³j0{h´M� ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj»|jzj»|j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXŠ**Parameters** ``struct device *dev`` the controller, possibly using the platform_bus ``unsigned int size`` how much zeroed driver-private data to allocate; the pointer to this memory is in the driver_data field of the returned device, accessible with spi_controller_get_devdata(); the memory is cacheline aligned; drivers granting DMA access to portions of their private data need to round up **size** using ALIGN(size, dma_get_cache_alignment()). ``bool target`` flag indicating whether to allocate an SPI host (false) or SPI target (true) controller **Context** can sleep **Description** This call is used only by SPI controller drivers, which are the only ones directly touching chip registers. It's how they allocate an spi_controller structure, prior to calling spi_register_controller(). This must be called from context that can sleep. The caller is responsible for assigning the bus number and initializing the controller's methods before calling spi_register_controller(); and calling spi_controller_put() to prevent a memory leak when done with the controller. **Return** the SPI controller structure on success, else NULL.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjÅ|h]”hŒ Parameters”…”�”}”(hjÇ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÃ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M… hj¿|ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒG``struct device *dev`` the controller, possibly using the platform_bus ”h]”(jØ)�”}”(hŒ``struct device *dev``”h]”hö)�”}”(hjä|h]”hŒstruct device *dev”…”�”}”(hjæ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjâ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‚ hjÞ|ubjò)�”}”(hhh]”hÌ)�”}”(hŒ/the controller, possibly using the platform_bus”h]”hŒ/the controller, possibly using the platform_bus”…”�”}”(hjý|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jù|h´M‚ hjú|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÞ|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jù|h´M‚ hjÛ|ubjÒ)�”}”(hXk``unsigned int size`` how much zeroed driver-private data to allocate; the pointer to this memory is in the driver_data field of the returned device, accessible with spi_controller_get_devdata(); the memory is cacheline aligned; drivers granting DMA access to portions of their private data need to round up **size** using ALIGN(size, dma_get_cache_alignment()). ”h]”(jØ)�”}”(hŒ``unsigned int size``”h]”hö)�”}”(hj}h]”hŒunsigned int size”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‡ hj}ubjò)�”}”(hhh]”hÌ)�”}”(hXThow much zeroed driver-private data to allocate; the pointer to this memory is in the driver_data field of the returned device, accessible with spi_controller_get_devdata(); the memory is cacheline aligned; drivers granting DMA access to portions of their private data need to round up **size** using ALIGN(size, dma_get_cache_alignment()).”h]”(hXhow much zeroed driver-private data to allocate; the pointer to this memory is in the driver_data field of the returned device, accessible with spi_controller_get_devdata(); the memory is cacheline aligned; drivers granting DMA access to portions of their private data need to round up ”…”�”}”(hj6}h²hh³Nh´Nubj‰)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj>}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj6}ubhŒ. using ALIGN(size, dma_get_cache_alignment()).”…”�”}”(hj6}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mƒ hj3}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j2}h´M‡ hjÛ|ubjÒ)�”}”(hŒh``bool target`` flag indicating whether to allocate an SPI host (false) or SPI target (true) controller ”h]”(jØ)�”}”(hŒ``bool target``”h]”hö)�”}”(hji}h]”hŒ bool target”…”�”}”(hjk}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjg}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‰ hjc}ubjò)�”}”(hhh]”hÌ)�”}”(hŒWflag indicating whether to allocate an SPI host (false) or SPI target (true) controller”h]”hŒWflag indicating whether to allocate an SPI host (false) or SPI target (true) controller”…”�”}”(hj‚}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mˆ hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjc}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j~}h´M‰ hjÛ|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj¿|ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj¥}h]”hŒContext”…”�”}”(hj§}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj£}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‹ hj¿|ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj»}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MŠ hj¿|ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjÌ}h]”hŒ Description”…”�”}”(hjÎ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÊ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MŒ hj¿|ubhÌ)�”}”(hŒÌThis call is used only by SPI controller drivers, which are the only ones directly touching chip registers. It's how they allocate an spi_controller structure, prior to calling spi_register_controller().”h]”hŒÎThis call is used only by SPI controller drivers, which are the only ones directly touching chip registers. It’s how they allocate an spi_controller structure, prior to calling spi_register_controller().”…”�”}”(hjâ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‹ hj¿|ubhÌ)�”}”(hŒ0This must be called from context that can sleep.”h]”hŒ0This must be called from context that can sleep.”…”�”}”(hjñ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M� hj¿|ubhÌ)�”}”(hŒãThe caller is responsible for assigning the bus number and initializing the controller's methods before calling spi_register_controller(); and calling spi_controller_put() to prevent a memory leak when done with the controller.”h]”hŒåThe caller is responsible for assigning the bus number and initializing the controller’s methods before calling spi_register_controller(); and calling spi_controller_put() to prevent a memory leak when done with the controller.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‘ hj¿|ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj~h]”hŒReturn”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M– hj¿|ubhÌ)�”}”(hŒ3the SPI controller structure on success, else NULL.”h]”hŒ3the SPI controller structure on success, else NULL.”…”�”}”(hj'~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M— hj¿|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ(__devm_spi_alloc_controller (C function)”Œc.__devm_spi_alloc_controller”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒhstruct spi_controller * __devm_spi_alloc_controller (struct device *dev, unsigned int size, bool target)”h]”jû)�”}”(hŒfstruct spi_controller *__devm_spi_alloc_controller(struct device *dev, unsigned int size, bool target)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjV~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjR~h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÏ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR~h²hh³jc~h´MÏ ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hju~h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjr~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jw~Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«Œ__devm_spi_alloc_controller”sbŒc.__devm_spi_alloc_controller”†”asbuh1hhjR~h²hh³jc~h´MÏ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR~h²hh³jc~h´MÏ ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj¤~h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjR~h²hh³jc~h´MÏ ubj$)�”}”(hŒ__devm_spi_alloc_controller”h]”j*)�”}”(hj“~h]”hŒ__devm_spi_alloc_controller”…”�”}”(hjµ~h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj±~ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjR~h²hh³jc~h´MÏ ubjl)�”}”(hŒ4(struct device *dev, unsigned int size, bool target)”h]”(jr)�”}”(hŒstruct device *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÐ~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÌ~ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌ~ubh)�”}”(hhh]”j*)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjî~h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjë~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jð~Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j‘~Œc.__devm_spi_alloc_controller”†”asbuh1hhjÌ~ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌ~ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÌ~ubj*)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÌ~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÈ~ubjr)�”}”(hŒunsigned int size”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubj4)�”}”(hŒint”h]”hŒint”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubj*)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÈ~ubjr)�”}”(hŒ bool target”h]”(j4)�”}”(hjb:h]”hŒbool”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubj*)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjÈ~ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjR~h²hh³jc~h´MÏ ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjN~h²hh³jc~h´MÏ ubah}”(h]”jI~ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jc~h´MÏ hjK~h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)resource-managed __spi_alloc_controller()”h]”hŒ)resource-managed __spi_alloc_controller()”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÏ hjÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjK~h²hh³jc~h´MÏ ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjîjzjîj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXY**Parameters** ``struct device *dev`` physical device of SPI controller ``unsigned int size`` how much zeroed driver-private data to allocate ``bool target`` whether to allocate an SPI host (false) or SPI target (true) controller **Context** can sleep **Description** Allocate an SPI controller and automatically release a reference on it when **dev** is unbound from its driver. Drivers are thus relieved from having to call spi_controller_put(). The arguments to this function are identical to __spi_alloc_controller(). **Return** the SPI controller structure on success, else NULL.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjøh]”hŒ Parameters”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÓ hjòubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ9``struct device *dev`` physical device of SPI controller ”h]”(jØ)�”}”(hŒ``struct device *dev``”h]”hö)�”}”(hj€h]”hŒstruct device *dev”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÐ hj€ubjò)�”}”(hhh]”hÌ)�”}”(hŒ!physical device of SPI controller”h]”hŒ!physical device of SPI controller”…”�”}”(hj0€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j,€h´MÐ hj-€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j,€h´MÐ hj€ubjÒ)�”}”(hŒF``unsigned int size`` how much zeroed driver-private data to allocate ”h]”(jØ)�”}”(hŒ``unsigned int size``”h]”hö)�”}”(hjP€h]”hŒunsigned int size”…”�”}”(hjR€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjN€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÑ hjJ€ubjò)�”}”(hhh]”hÌ)�”}”(hŒ/how much zeroed driver-private data to allocate”h]”hŒ/how much zeroed driver-private data to allocate”…”�”}”(hji€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³je€h´MÑ hjf€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjJ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³je€h´MÑ hj€ubjÒ)�”}”(hŒX``bool target`` whether to allocate an SPI host (false) or SPI target (true) controller ”h]”(jØ)�”}”(hŒ``bool target``”h]”hö)�”}”(hj‰€h]”hŒ bool target”…”�”}”(hj‹€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj‡€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÒ hjƒ€ubjò)�”}”(hhh]”hÌ)�”}”(hŒGwhether to allocate an SPI host (false) or SPI target (true) controller”h]”hŒGwhether to allocate an SPI host (false) or SPI target (true) controller”…”�”}”(hj¢€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jž€h´MÒ hjŸ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjƒ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jž€h´MÒ hj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjòubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjÄ€h]”hŒContext”…”�”}”(hjÆ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÔ hjòubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjÚ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÓ hjòubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjë€h]”hŒ Description”…”�”}”(hjí€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjé€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÕ hjòubhÌ)�”}”(hŒ´Allocate an SPI controller and automatically release a reference on it when **dev** is unbound from its driver. Drivers are thus relieved from having to call spi_controller_put().”h]”(hŒLAllocate an SPI controller and automatically release a reference on it when ”…”�”}”(hj�h²hh³Nh´Nubj‰)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj�ubhŒa is unbound from its driver. Drivers are thus relieved from having to call spi_controller_put().”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÔ hjòubhÌ)�”}”(hŒIThe arguments to this function are identical to __spi_alloc_controller().”h]”hŒIThe arguments to this function are identical to __spi_alloc_controller().”…”�”}”(hj"�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MØ hjòubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj3�h]”hŒReturn”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÚ hjòubhÌ)�”}”(hŒ3the SPI controller structure on success, else NULL.”h]”hŒ3the SPI controller structure on success, else NULL.”…”�”}”(hjI�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÛ hjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ$spi_register_controller (C function)”Œc.spi_register_controller”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ9int spi_register_controller (struct spi_controller *ctlr)”h]”jû)�”}”(hŒ8int spi_register_controller(struct spi_controller *ctlr)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjt�h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M\ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjt�h²hh³j†�h´M\ubj$)�”}”(hŒspi_register_controller”h]”j*)�”}”(hŒspi_register_controller”h]”hŒspi_register_controller”…”�”}”(hj™�h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj•�ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjt�h²hh³j†�h´M\ubjl)�”}”(hŒ(struct spi_controller *ctlr)”h]”jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjµ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj±�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±�ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÐ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÕ�Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j›�sbŒc.spi_register_controller”†”asbuh1hhj±�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±�ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj±�ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj±�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj­�ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjt�h²hh³j†�h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjp�h²hh³j†�h´M\ubah}”(h]”jk�ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j†�h´M\hjm�h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ®ister SPI host or target controller”h]”hŒ®ister SPI host or target controller”…”�”}”(hj8‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M\hj5‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjm�h²hh³j†�h´M\ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjP‚jzjP‚j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXy**Parameters** ``struct spi_controller *ctlr`` initialized controller, originally from spi_alloc_host() or spi_alloc_target() **Context** can sleep **Description** SPI controllers connect to their drivers using some non-SPI bus, such as the platform bus. The final stage of probe() in that code includes calling spi_register_controller() to hook up to this SPI bus glue. SPI controllers use board specific (often SOC specific) bus numbers, and board-specific addressing for SPI devices combines those numbers with chip select numbers. Since SPI does not directly support dynamic device identification, boards need configuration tables telling which chip is at which address. This must be called from context that can sleep. After a successful return, the caller is responsible for calling spi_unregister_controller(). **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjZ‚h]”hŒ Parameters”…”�”}”(hj\‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjX‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M`hjT‚ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒo``struct spi_controller *ctlr`` initialized controller, originally from spi_alloc_host() or spi_alloc_target() ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjy‚h]”hŒstruct spi_controller *ctlr”…”�”}”(hj{‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjw‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M^hjs‚ubjò)�”}”(hhh]”hÌ)�”}”(hŒNinitialized controller, originally from spi_alloc_host() or spi_alloc_target()”h]”hŒNinitialized controller, originally from spi_alloc_host() or spi_alloc_target()”…”�”}”(hj’‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M]hj�‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjs‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŽ‚h´M^hjp‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjT‚ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjµ‚h]”hŒContext”…”�”}”(hj·‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj³‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M`hjT‚ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjË‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M_hjT‚ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjÜ‚h]”hŒ Description”…”�”}”(hjÞ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÚ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MahjT‚ubhÌ)�”}”(hŒÏSPI controllers connect to their drivers using some non-SPI bus, such as the platform bus. The final stage of probe() in that code includes calling spi_register_controller() to hook up to this SPI bus glue.”h]”hŒÏSPI controllers connect to their drivers using some non-SPI bus, such as the platform bus. The final stage of probe() in that code includes calling spi_register_controller() to hook up to this SPI bus glue.”…”�”}”(hjò‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M`hjT‚ubhÌ)�”}”(hX0SPI controllers use board specific (often SOC specific) bus numbers, and board-specific addressing for SPI devices combines those numbers with chip select numbers. Since SPI does not directly support dynamic device identification, boards need configuration tables telling which chip is at which address.”h]”hX0SPI controllers use board specific (often SOC specific) bus numbers, and board-specific addressing for SPI devices combines those numbers with chip select numbers. Since SPI does not directly support dynamic device identification, boards need configuration tables telling which chip is at which address.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MdhjT‚ubhÌ)�”}”(hŒ0This must be called from context that can sleep.”h]”hŒ0This must be called from context that can sleep.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MjhjT‚ubhÌ)�”}”(hŒ]After a successful return, the caller is responsible for calling spi_unregister_controller().”h]”hŒ]After a successful return, the caller is responsible for calling spi_unregister_controller().”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MlhjT‚ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj0ƒh]”hŒReturn”…”�”}”(hj2ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj.ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MohjT‚ubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hjFƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MphjT‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ)devm_spi_register_controller (C function)”Œc.devm_spi_register_controller”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒRint devm_spi_register_controller (struct device *dev, struct spi_controller *ctlr)”h]”jû)�”}”(hŒQint devm_spi_register_controller(struct device *dev, struct spi_controller *ctlr)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjuƒh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjqƒh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqƒh²hh³jƒƒh´Mubj$)�”}”(hŒdevm_spi_register_controller”h]”j*)�”}”(hŒdevm_spi_register_controller”h]”hŒdevm_spi_register_controller”…”�”}”(hj–ƒh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj’ƒubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjqƒh²hh³jƒƒh´Mubjl)�”}”(hŒ1(struct device *dev, struct spi_controller *ctlr)”h]”(jr)�”}”(hŒstruct device *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj²ƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj®ƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®ƒubh)�”}”(hhh]”j*)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjЃh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj̓ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÒƒŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j˜ƒsbŒc.devm_spi_register_controller”†”asbuh1hhj®ƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®ƒubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjþƒh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj®ƒubj*)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj®ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjªƒubjr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj$„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj „ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj „ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjB„h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj?„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jD„Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j샌c.devm_spi_register_controller”†”asbuh1hhj „ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj „ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjn„h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj „ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj{„h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj „ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjªƒubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjqƒh²hh³jƒƒh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjmƒh²hh³jƒƒh´Mubah}”(h]”jhƒah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jƒƒh´Mhjjƒh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ.register managed SPI host or target controller”h]”hŒ.register managed SPI host or target controller”…”�”}”(hj¥„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhj¢„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjjƒh²hh³jƒƒh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj½„jzj½„j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX�**Parameters** ``struct device *dev`` device managing SPI controller ``struct spi_controller *ctlr`` initialized controller, originally from spi_alloc_host() or spi_alloc_target() **Context** can sleep **Description** Register a SPI device as with spi_register_controller() which will automatically be unregistered. **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjÇ„h]”hŒ Parameters”…”�”}”(hjÉ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÅ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjÁ„ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ6``struct device *dev`` device managing SPI controller ”h]”(jØ)�”}”(hŒ``struct device *dev``”h]”hö)�”}”(hjæ„h]”hŒstruct device *dev”…”�”}”(hjè„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjä„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhjà„ubjò)�”}”(hhh]”hÌ)�”}”(hŒdevice managing SPI controller”h]”hŒdevice managing SPI controller”…”�”}”(hjÿ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jû„h´Mhjü„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjà„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jû„h´MhjÝ„ubjÒ)�”}”(hŒo``struct spi_controller *ctlr`` initialized controller, originally from spi_alloc_host() or spi_alloc_target() ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj…h]”hŒstruct spi_controller *ctlr”…”�”}”(hj!…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhj…ubjò)�”}”(hhh]”hÌ)�”}”(hŒNinitialized controller, originally from spi_alloc_host() or spi_alloc_target()”h]”hŒNinitialized controller, originally from spi_alloc_host() or spi_alloc_target()”…”�”}”(hj8…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhj5…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j4…h´MhjÝ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÁ„ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj[…h]”hŒContext”…”�”}”(hj]…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjY…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÁ„ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjq…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjÁ„ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj‚…h]”hŒ Description”…”�”}”(hj„…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj€…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÁ„ubhÌ)�”}”(hŒaRegister a SPI device as with spi_register_controller() which will automatically be unregistered.”h]”hŒaRegister a SPI device as with spi_register_controller() which will automatically be unregistered.”…”�”}”(hj˜…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÁ„ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj©…h]”hŒReturn”…”�”}”(hj«…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj§…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÁ„ubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hj¿…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjÁ„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ&spi_unregister_controller (C function)”Œc.spi_unregister_controller”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ�Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”jæ�Œc.spi_optimize_message”†”asbuh1hhj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjh�h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj�ubj*)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj¤�ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjk�h²hh³j}�h´M§ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjg�h²hh³j}�h´M§ubah}”(h]”jb�ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j}�h´M§hjd�h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ6do any one-time validation and setup for a SPI message”h]”hŒ6do any one-time validation and setup for a SPI message”…”�”}”(hjŸ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M§hjœ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjd�h²hh³j}�h´M§ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj·�jzj·�j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX **Parameters** ``struct spi_device *spi`` the device that will be used for the message ``struct spi_message *msg`` the message to optimize **Description** Peripheral drivers that reuse the same message repeatedly may call this to perform as much message prep as possible once, rather than repeating it each time a message transfer is performed to improve throughput and reduce CPU usage. Once a message has been optimized, it cannot be modified with the exception of updating the contents of any xfer->tx_buf (the pointer can't be changed, only the data in the memory it points to). Calls to this function must be balanced with calls to spi_unoptimize_message() to avoid leaking resources. **Context** can sleep **Return** zero on success, else a negative error code”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjÁ�h]”hŒ Parameters”…”�”}”(hjÃ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¿�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M«hj»�ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒH``struct spi_device *spi`` the device that will be used for the message ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjà�h]”hŒstruct spi_device *spi”…”�”}”(hjâ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÞ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¨hjÚ�ubjò)�”}”(hhh]”hÌ)�”}”(hŒ,the device that will be used for the message”h]”hŒ,the device that will be used for the message”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jõ�h´M¨hjö�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÚ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jõ�h´M¨hj×�ubjÒ)�”}”(hŒ4``struct spi_message *msg`` the message to optimize ”h]”(jØ)�”}”(hŒ``struct spi_message *msg``”h]”hö)�”}”(hj‘h]”hŒstruct spi_message *msg”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M©hj‘ubjò)�”}”(hhh]”hÌ)�”}”(hŒthe message to optimize”h]”hŒthe message to optimize”…”�”}”(hj2‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j.‘h´M©hj/‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j.‘h´M©hj×�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj»�ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjT‘h]”hŒ Description”…”�”}”(hjV‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjR‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M«hj»�ubhÌ)�”}”(hŒèPeripheral drivers that reuse the same message repeatedly may call this to perform as much message prep as possible once, rather than repeating it each time a message transfer is performed to improve throughput and reduce CPU usage.”h]”hŒèPeripheral drivers that reuse the same message repeatedly may call this to perform as much message prep as possible once, rather than repeating it each time a message transfer is performed to improve throughput and reduce CPU usage.”…”�”}”(hjj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mªhj»�ubhÌ)�”}”(hŒÂOnce a message has been optimized, it cannot be modified with the exception of updating the contents of any xfer->tx_buf (the pointer can't be changed, only the data in the memory it points to).”h]”hŒÄOnce a message has been optimized, it cannot be modified with the exception of updating the contents of any xfer->tx_buf (the pointer can’t be changed, only the data in the memory it points to).”…”�”}”(hjy‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¯hj»�ubhÌ)�”}”(hŒjCalls to this function must be balanced with calls to spi_unoptimize_message() to avoid leaking resources.”h]”hŒjCalls to this function must be balanced with calls to spi_unoptimize_message() to avoid leaking resources.”…”�”}”(hjˆ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M³hj»�ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj™‘h]”hŒContext”…”�”}”(hj›‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj—‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¶hj»�ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj¯‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M·hj»�ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjÀ‘h]”hŒReturn”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¾‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¹hj»�ubhÌ)�”}”(hŒ+zero on success, else a negative error code”h]”hŒ+zero on success, else a negative error code”…”�”}”(hjÖ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¸hj»�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ#spi_unoptimize_message (C function)”Œc.spi_unoptimize_message”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ5void spi_unoptimize_message (struct spi_message *msg)”h]”jû)�”}”(hŒ4void spi_unoptimize_message(struct spi_message *msg)”h]”(j4)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj’h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÖubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’h²hh³j’h´MÖubj$)�”}”(hŒspi_unoptimize_message”h]”j*)�”}”(hŒspi_unoptimize_message”h]”hŒspi_unoptimize_message”…”�”}”(hj&’h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj"’ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj’h²hh³j’h´MÖubjl)�”}”(hŒ(struct spi_message *msg)”h]”jr)�”}”(hŒstruct spi_message *msg”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjB’h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj>’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>’ubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hj`’h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj]’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jb’Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j(’sbŒc.spi_unoptimize_message”†”asbuh1hhj>’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>’ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjŽ’h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj>’ubj*)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj›’h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj>’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj:’ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj’h²hh³j’h´MÖubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjý‘h²hh³j’h´MÖubah}”(h]”jø‘ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j’h´MÖhjú‘h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ:releases any resources allocated by spi_optimize_message()”h]”hŒ:releases any resources allocated by spi_optimize_message()”…”�”}”(hjÅ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÖhjÂ’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjú‘h²hh³j’h´MÖubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjÝ’jzjÝ’j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hŒ¿**Parameters** ``struct spi_message *msg`` the message to unoptimize **Description** Calls to this function must be balanced with calls to spi_optimize_message(). **Context** can sleep”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjç’h]”hŒ Parameters”…”�”}”(hjé’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjå’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÚhjá’ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ6``struct spi_message *msg`` the message to unoptimize ”h]”(jØ)�”}”(hŒ``struct spi_message *msg``”h]”hö)�”}”(hj“h]”hŒstruct spi_message *msg”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M×hj“ubjò)�”}”(hhh]”hÌ)�”}”(hŒthe message to unoptimize”h]”hŒthe message to unoptimize”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j“h´M×hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j“h´M×hjý’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjá’ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjA“h]”hŒ Description”…”�”}”(hjC“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj?“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÙhjá’ubhÌ)�”}”(hŒMCalls to this function must be balanced with calls to spi_optimize_message().”h]”hŒMCalls to this function must be balanced with calls to spi_optimize_message().”…”�”}”(hjW“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MØhjá’ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjh“h]”hŒContext”…”�”}”(hjj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjf“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÚhjá’ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj~“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÛhjá’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ&devm_spi_optimize_message (C function)”Œc.devm_spi_optimize_message”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒcint devm_spi_optimize_message (struct device *dev, struct spi_device *spi, struct spi_message *msg)”h]”jû)�”}”(hŒbint devm_spi_optimize_message(struct device *dev, struct spi_device *spi, struct spi_message *msg)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hj­“h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj©“h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©“h²hh³j»“h´Mubj$)�”}”(hŒdevm_spi_optimize_message”h]”j*)�”}”(hŒdevm_spi_optimize_message”h]”hŒdevm_spi_optimize_message”…”�”}”(hjΓh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÊ“ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj©“h²hh³j»“h´Mubjl)�”}”(hŒE(struct device *dev, struct spi_device *spi, struct spi_message *msg)”h]”(jr)�”}”(hŒstruct device *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjê“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjæ“ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæ“ubh)�”}”(hhh]”j*)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j ”Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jГsbŒc.devm_spi_optimize_message”†”asbuh1hhjæ“ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæ“ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj6”h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjæ“ubj*)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjC”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjæ“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjâ“ubjr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj\”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjX”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjX”ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjz”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjw”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j|”Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j$”Œc.devm_spi_optimize_message”†”asbuh1hhjX”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjX”ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj¦”h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjX”ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj³”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjX”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjâ“ubjr)�”}”(hŒstruct spi_message *msg”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÌ”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÈ”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ”ubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hjê”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjç”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j씌modname”NŒ classname”Nj¯j²)�”}”jµ]”j$”Œc.devm_spi_optimize_message”†”asbuh1hhjÈ”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ”ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÈ”ubj*)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj#•h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÈ”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjâ“ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj©“h²hh³j»“h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj¥“h²hh³j»“h´Mubah}”(h]”j “ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j»“h´Mhj¢“h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)managed version of spi_optimize_message()”h]”hŒ)managed version of spi_optimize_message()”…”�”}”(hjM•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjJ•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj¢“h²hh³j»“h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyje•jzje•j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX~**Parameters** ``struct device *dev`` the device that manages **msg** (usually **spi->dev**) ``struct spi_device *spi`` the device that will be used for the message ``struct spi_message *msg`` the message to optimize **Return** zero on success, else a negative error code **Description** spi_unoptimize_message() will automatically be called when the device is removed.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjo•h]”hŒ Parameters”…”�”}”(hjq•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjm•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hji•ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒN``struct device *dev`` the device that manages **msg** (usually **spi->dev**) ”h]”(jØ)�”}”(hŒ``struct device *dev``”h]”hö)�”}”(hjŽ•h]”hŒstruct device *dev”…”�”}”(hj�•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŒ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjˆ•ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6the device that manages **msg** (usually **spi->dev**)”h]”(hŒthe device that manages ”…”�”}”(hj§•h²hh³Nh´Nubj‰)�”}”(hŒ**msg**”h]”hŒmsg”…”�”}”(hj¯•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj§•ubhŒ (usually ”…”�”}”(hj§•h²hh³Nh´Nubj‰)�”}”(hŒ **spi->dev**”h]”hŒspi->dev”…”�”}”(hjÁ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj§•ubhŒ)”…”�”}”(hj§•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j£•h´M hj¤•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjˆ•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j£•h´M hj…•ubjÒ)�”}”(hŒH``struct spi_device *spi`` the device that will be used for the message ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjë•h]”hŒstruct spi_device *spi”…”�”}”(hjí•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjé•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hjå•ubjò)�”}”(hhh]”hÌ)�”}”(hŒ,the device that will be used for the message”h]”hŒ,the device that will be used for the message”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j–h´M hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjå•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j–h´M hj…•ubjÒ)�”}”(hŒ4``struct spi_message *msg`` the message to optimize ”h]”(jØ)�”}”(hŒ``struct spi_message *msg``”h]”hö)�”}”(hj$–h]”hŒstruct spi_message *msg”…”�”}”(hj&–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj"–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hj–ubjò)�”}”(hhh]”hÌ)�”}”(hŒthe message to optimize”h]”hŒthe message to optimize”…”�”}”(hj=–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j9–h´M hj:–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j9–h´M hj…•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhji•ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj_–h]”hŒReturn”…”�”}”(hja–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj]–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hji•ubhÌ)�”}”(hŒ+zero on success, else a negative error code”h]”hŒ+zero on success, else a negative error code”…”�”}”(hju–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hji•ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj†–h]”hŒ Description”…”�”}”(hjˆ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj„–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhji•ubhÌ)�”}”(hŒQspi_unoptimize_message() will automatically be called when the device is removed.”h]”hŒQspi_unoptimize_message() will automatically be called when the device is removed.”…”�”}”(hjœ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hji•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_async (C function)”Œ c.spi_async”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒCint spi_async (struct spi_device *spi, struct spi_message *message)”h]”jû)�”}”(hŒBint spi_async(struct spi_device *spi, struct spi_message *message)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjË–h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÇ–h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ–h²hh³jÙ–h´Mubj$)�”}”(hŒ spi_async”h]”j*)�”}”(hŒ spi_async”h]”hŒ spi_async”…”�”}”(hjì–h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjè–ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÇ–h²hh³jÙ–h´Mubjl)�”}”(hŒ5(struct spi_device *spi, struct spi_message *message)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj&—h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj#—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j(—Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jî–sbŒ c.spi_async”†”asbuh1hhj—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjT—h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj—ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hja—h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj—ubjr)�”}”(hŒstruct spi_message *message”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjz—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjv—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv—ubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hj˜—h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj•—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jš—Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”jB—Œ c.spi_async”†”asbuh1hhjv—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv—ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjÄ—h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjv—ubj*)�”}”(hŒmessage”h]”hŒmessage”…”�”}”(hjÑ—h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjv—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj—ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjÇ–h²hh³jÙ–h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÖh²hh³jÙ–h´Mubah}”(h]”j¾–ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jÙ–h´MhjÀ–h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒasynchronous SPI transfer”h]”hŒasynchronous SPI transfer”…”�”}”(hjû—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhjø—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÀ–h²hh³jÙ–h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj˜jzj˜j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX¯**Parameters** ``struct spi_device *spi`` device with which data will be exchanged ``struct spi_message *message`` describes the data transfers, including completion callback **Context** any (IRQs may be blocked, etc) **Description** This call may be used in_irq and other contexts which can't sleep, as well as from task contexts which can sleep. The completion callback is invoked in a context which can't sleep. Before that invocation, the value of message->status is undefined. When the callback is issued, message->status holds either zero (to indicate complete success) or a negative error code. After that callback returns, the driver which issued the transfer request may deallocate the associated memory; it's no longer in use by any SPI core or controller driver code. Note that although all messages to a spi_device are handled in FIFO order, messages may go to different devices in other orders. Some device might be higher priority, or have various "hard" access time requirements, for example. On detection of any fault during the transfer, processing of the entire message is aborted, and the device is deselected. Until returning from the associated message completion callback, no other spi_message queued to that device will be processed. (This rule applies equally to all the synchronous transfer calls, which are wrappers around this core asynchronous primitive.) **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M#hj˜ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hj<˜h]”hŒstruct spi_device *spi”…”�”}”(hj>˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj:˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M hj6˜ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjU˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jQ˜h´M hjR˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj6˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jQ˜h´M hj3˜ubjÒ)�”}”(hŒ\``struct spi_message *message`` describes the data transfers, including completion callback ”h]”(jØ)�”}”(hŒ``struct spi_message *message``”h]”hö)�”}”(hju˜h]”hŒstruct spi_message *message”…”�”}”(hjw˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjs˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M!hjo˜ubjò)�”}”(hhh]”hÌ)�”}”(hŒ;describes the data transfers, including completion callback”h]”hŒ;describes the data transfers, including completion callback”…”�”}”(hjŽ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŠ˜h´M!hj‹˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjo˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŠ˜h´M!hj3˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj˜ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj°˜h]”hŒContext”…”�”}”(hj²˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj®˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M#hj˜ubhÌ)�”}”(hŒany (IRQs may be blocked, etc)”h]”hŒany (IRQs may be blocked, etc)”…”�”}”(hjƘh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M"hj˜ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjטh]”hŒ Description”…”�”}”(hjÙ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÕ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M$hj˜ubhÌ)�”}”(hŒqThis call may be used in_irq and other contexts which can't sleep, as well as from task contexts which can sleep.”h]”hŒsThis call may be used in_irq and other contexts which can’t sleep, as well as from task contexts which can sleep.”…”�”}”(hjí˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M#hj˜ubhÌ)�”}”(hX¯The completion callback is invoked in a context which can't sleep. Before that invocation, the value of message->status is undefined. When the callback is issued, message->status holds either zero (to indicate complete success) or a negative error code. After that callback returns, the driver which issued the transfer request may deallocate the associated memory; it's no longer in use by any SPI core or controller driver code.”h]”hX³The completion callback is invoked in a context which can’t sleep. Before that invocation, the value of message->status is undefined. When the callback is issued, message->status holds either zero (to indicate complete success) or a negative error code. After that callback returns, the driver which issued the transfer request may deallocate the associated memory; it’s no longer in use by any SPI core or controller driver code.”…”�”}”(hjü˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M&hj˜ubhÌ)�”}”(hŒäNote that although all messages to a spi_device are handled in FIFO order, messages may go to different devices in other orders. Some device might be higher priority, or have various "hard" access time requirements, for example.”h]”hŒèNote that although all messages to a spi_device are handled in FIFO order, messages may go to different devices in other orders. Some device might be higher priority, or have various “hardâ€� access time requirements, for example.”…”�”}”(hj ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M.hj˜ubhÌ)�”}”(hXwOn detection of any fault during the transfer, processing of the entire message is aborted, and the device is deselected. Until returning from the associated message completion callback, no other spi_message queued to that device will be processed. (This rule applies equally to all the synchronous transfer calls, which are wrappers around this core asynchronous primitive.)”h]”hXwOn detection of any fault during the transfer, processing of the entire message is aborted, and the device is deselected. Until returning from the associated message completion callback, no other spi_message queued to that device will be processed. (This rule applies equally to all the synchronous transfer calls, which are wrappers around this core asynchronous primitive.)”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M3hj˜ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj+™h]”hŒReturn”…”�”}”(hj-™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj)™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M:hj˜ubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hjA™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M;hj˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_sync (C function)”Œ c.spi_sync”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒBint spi_sync (struct spi_device *spi, struct spi_message *message)”h]”jû)�”}”(hŒAint spi_sync(struct spi_device *spi, struct spi_message *message)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjp™h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjl™h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¿ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl™h²hh³j~™h´M¿ubj$)�”}”(hŒspi_sync”h]”j*)�”}”(hŒspi_sync”h]”hŒspi_sync”…”�”}”(hj‘™h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj�™ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjl™h²hh³j~™h´M¿ubjl)�”}”(hŒ5(struct spi_device *spi, struct spi_message *message)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj­™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj©™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©™ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjË™h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÈ™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÍ™Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j“™sbŒ c.spi_sync”†”asbuh1hhj©™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©™ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjù™h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj©™ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj©™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj¥™ubjr)�”}”(hŒstruct spi_message *message”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjšubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hj=šh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj:šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j?šŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j癌 c.spi_sync”†”asbuh1hhjšubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjišh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjšubj*)�”}”(hŒmessage”h]”hŒmessage”…”�”}”(hjvšh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj¥™ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjl™h²hh³j~™h´M¿ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjh™h²hh³j~™h´M¿ubah}”(h]”jc™ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j~™h´M¿hje™h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ'blocking/synchronous SPI data transfers”h]”hŒ'blocking/synchronous SPI data transfers”…”�”}”(hj šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M¿hj�šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhje™h²hh³j~™h´M¿ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj¸šjzj¸šj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX‚**Parameters** ``struct spi_device *spi`` device with which data will be exchanged ``struct spi_message *message`` describes the data transfers **Context** can sleep **Description** This call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. Low-overhead controller drivers may DMA directly into and out of the message buffers. Note that the SPI device's chip select is active during the message, and then is normally disabled between messages. Drivers for some frequently-used devices may want to minimize costs of selecting a chip, by leaving it selected in anticipation that the next message will go to the same chip. (That may increase power usage.) Also, the caller is guaranteeing that the memory associated with the message will not be freed before this call returns. **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjšh]”hŒ Parameters”…”�”}”(hjÄšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÀšubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÃhj¼šubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjášh]”hŒstruct spi_device *spi”…”�”}”(hjãšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjßšubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÀhjÛšubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjúšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jöšh´MÀhj÷šubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÛšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jöšh´MÀhjØšubjÒ)�”}”(hŒ=``struct spi_message *message`` describes the data transfers ”h]”(jØ)�”}”(hŒ``struct spi_message *message``”h]”hö)�”}”(hj›h]”hŒstruct spi_message *message”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÁhj›ubjò)�”}”(hhh]”hÌ)�”}”(hŒdescribes the data transfers”h]”hŒdescribes the data transfers”…”�”}”(hj3›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j/›h´MÁhj0›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j/›h´MÁhjØšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj¼šubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjU›h]”hŒContext”…”�”}”(hjW›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjS›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÃhj¼šubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjk›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÂhj¼šubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj|›h]”hŒ Description”…”�”}”(hj~›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjz›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÄhj¼šubhÌ)�”}”(hŒÅThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. Low-overhead controller drivers may DMA directly into and out of the message buffers.”h]”hŒÅThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. Low-overhead controller drivers may DMA directly into and out of the message buffers.”…”�”}”(hj’›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÃhj¼šubhÌ)�”}”(hXGNote that the SPI device's chip select is active during the message, and then is normally disabled between messages. Drivers for some frequently-used devices may want to minimize costs of selecting a chip, by leaving it selected in anticipation that the next message will go to the same chip. (That may increase power usage.)”h]”hXINote that the SPI device’s chip select is active during the message, and then is normally disabled between messages. Drivers for some frequently-used devices may want to minimize costs of selecting a chip, by leaving it selected in anticipation that the next message will go to the same chip. (That may increase power usage.)”…”�”}”(hj¡›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÇhj¼šubhÌ)�”}”(hŒxAlso, the caller is guaranteeing that the memory associated with the message will not be freed before this call returns.”h]”hŒxAlso, the caller is guaranteeing that the memory associated with the message will not be freed before this call returns.”…”�”}”(hj°›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÍhj¼šubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjÁ›h]”hŒReturn”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¿›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÐhj¼šubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hj×›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÑhj¼šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_sync_locked (C function)”Œc.spi_sync_locked”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒIint spi_sync_locked (struct spi_device *spi, struct spi_message *message)”h]”jû)�”}”(hŒHint spi_sync_locked(struct spi_device *spi, struct spi_message *message)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjœh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Màubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœh²hh³jœh´Màubj$)�”}”(hŒspi_sync_locked”h]”j*)�”}”(hŒspi_sync_locked”h]”hŒspi_sync_locked”…”�”}”(hj'œh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj#œubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjœh²hh³jœh´Màubjl)�”}”(hŒ5(struct spi_device *spi, struct spi_message *message)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjCœh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj?œubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?œubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjaœh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj^œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jcœŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j)œsbŒc.spi_sync_locked”†”asbuh1hhj?œubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?œubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj�œh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj?œubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjœœh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj?œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj;œubjr)�”}”(hŒstruct spi_message *message”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjµœh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj±œubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±œubh)�”}”(hhh]”j*)�”}”(hŒ spi_message”h]”hŒ spi_message”…”�”}”(hjÓœh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjМubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÕœŒmodname”NŒ classname”Nj¯j²)�”}”jµ]”j}œŒc.spi_sync_locked”†”asbuh1hhj±œubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±œubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjÿœh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj±œubj*)�”}”(hŒmessage”h]”hŒmessage”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj±œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj;œubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjœh²hh³jœh´Màubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjþ›h²hh³jœh´Màubah}”(h]”jù›ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jœh´Màhjû›h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ,version of spi_sync with exclusive bus usage”h]”hŒ,version of spi_sync with exclusive bus usage”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Màhj3�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjû›h²hh³jœh´Màubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjN�jzjN�j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX™**Parameters** ``struct spi_device *spi`` device with which data will be exchanged ``struct spi_message *message`` describes the data transfers **Context** can sleep **Description** This call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. Low-overhead controller drivers may DMA directly into and out of the message buffers. This call should be used by drivers that require exclusive access to the SPI bus. It has to be preceded by a spi_bus_lock call. The SPI bus must be released by a spi_bus_unlock call when the exclusive access is over. **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjX�h]”hŒ Parameters”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjV�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MähjR�ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjw�h]”hŒstruct spi_device *spi”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhju�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Máhjq�ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŒ�h´Máhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjq�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŒ�h´Máhjn�ubjÒ)�”}”(hŒ=``struct spi_message *message`` describes the data transfers ”h]”(jØ)�”}”(hŒ``struct spi_message *message``”h]”hö)�”}”(hj°�h]”hŒstruct spi_message *message”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mâhjª�ubjò)�”}”(hhh]”hÌ)�”}”(hŒdescribes the data transfers”h]”hŒdescribes the data transfers”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÅ�h´MâhjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjª�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÅ�h´Mâhjn�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjR�ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjë�h]”hŒContext”…”�”}”(hjí�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjé�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MähjR�ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MãhjR�ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjžh]”hŒ Description”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MåhjR�ubhÌ)�”}”(hŒÅThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. Low-overhead controller drivers may DMA directly into and out of the message buffers.”h]”hŒÅThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. Low-overhead controller drivers may DMA directly into and out of the message buffers.”…”�”}”(hj(žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MähjR�ubhÌ)�”}”(hŒØThis call should be used by drivers that require exclusive access to the SPI bus. It has to be preceded by a spi_bus_lock call. The SPI bus must be released by a spi_bus_unlock call when the exclusive access is over.”h]”hŒØThis call should be used by drivers that require exclusive access to the SPI bus. It has to be preceded by a spi_bus_lock call. The SPI bus must be released by a spi_bus_unlock call when the exclusive access is over.”…”�”}”(hj7žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MèhjR�ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjHžh]”hŒReturn”…”�”}”(hjJžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjFžubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MìhjR�ubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hj^žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MíhjR�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_bus_lock (C function)”Œc.spi_bus_lock”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ.int spi_bus_lock (struct spi_controller *ctlr)”h]”jû)�”}”(hŒ-int spi_bus_lock(struct spi_controller *ctlr)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hj�žh²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj‰žh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Möubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰žh²hh³j›žh´Möubj$)�”}”(hŒ spi_bus_lock”h]”j*)�”}”(hŒ spi_bus_lock”h]”hŒ spi_bus_lock”…”�”}”(hj®žh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjªžubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj‰žh²hh³j›žh´Möubjl)�”}”(hŒ(struct spi_controller *ctlr)”h]”jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÊžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÆžubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjמh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆžubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjèžh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjåžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jꞌmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«j°žsbŒc.spi_bus_lock”†”asbuh1hhjÆžubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆžubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjÆžubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj#Ÿh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÆžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhjžubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhj‰žh²hh³j›žh´Möubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj…žh²hh³j›žh´Möubah}”(h]”j€žah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j›žh´Möhj‚žh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)obtain a lock for exclusive SPI bus usage”h]”hŒ)obtain a lock for exclusive SPI bus usage”…”�”}”(hjMŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MöhjJŸh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj‚žh²hh³j›žh´Möubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjeŸjzjeŸj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX:**Parameters** ``struct spi_controller *ctlr`` SPI bus controller that should be locked for exclusive bus access **Context** can sleep **Description** This call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. This call should be used by drivers that require exclusive access to the SPI bus. The SPI bus must be released by a spi_bus_unlock call when the exclusive access is over. Data transfer must be done by spi_sync_locked and spi_async_locked calls when the SPI bus lock is held. **Return** always zero.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjoŸh]”hŒ Parameters”…”�”}”(hjqŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjmŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MúhjiŸubjÍ)�”}”(hhh]”jÒ)�”}”(hŒb``struct spi_controller *ctlr`` SPI bus controller that should be locked for exclusive bus access ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjŽŸh]”hŒstruct spi_controller *ctlr”…”�”}”(hj�Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjŒŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M÷hjˆŸubjò)�”}”(hhh]”hÌ)�”}”(hŒASPI bus controller that should be locked for exclusive bus access”h]”hŒASPI bus controller that should be locked for exclusive bus access”…”�”}”(hj§Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j£Ÿh´M÷hj¤Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjˆŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j£Ÿh´M÷hj…Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjiŸubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjÉŸh]”hŒContext”…”�”}”(hjËŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÇŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MùhjiŸubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjߟh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MøhjiŸubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjðŸh]”hŒ Description”…”�”}”(hjòŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjîŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MúhjiŸubhÌ)�”}”(hŒnThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout.”h]”hŒnThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MùhjiŸubhÌ)�”}”(hXThis call should be used by drivers that require exclusive access to the SPI bus. The SPI bus must be released by a spi_bus_unlock call when the exclusive access is over. Data transfer must be done by spi_sync_locked and spi_async_locked calls when the SPI bus lock is held.”h]”hXThis call should be used by drivers that require exclusive access to the SPI bus. The SPI bus must be released by a spi_bus_unlock call when the exclusive access is over. Data transfer must be done by spi_sync_locked and spi_async_locked calls when the SPI bus lock is held.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MühjiŸubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj& h]”hŒReturn”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj$ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjiŸubhÌ)�”}”(hŒ always zero.”h]”hŒ always zero.”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjiŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_bus_unlock (C function)”Œc.spi_bus_unlock”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ0int spi_bus_unlock (struct spi_controller *ctlr)”h]”jû)�”}”(hŒ/int spi_bus_unlock(struct spi_controller *ctlr)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjg h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg h²hh³jy h´Mubj$)�”}”(hŒspi_bus_unlock”h]”j*)�”}”(hŒspi_bus_unlock”h]”hŒspi_bus_unlock”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjˆ ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjg h²hh³jy h´Mubjl)�”}”(hŒ(struct spi_controller *ctlr)”h]”jr)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj¤ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ ubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”jÈ Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jŽ sbŒc.spi_bus_unlock”†”asbuh1hhj¤ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj¤ ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj  ubah}”(h]”h •¯H]”h"]”h$]”h&]”jAjBuh1jkhjg h²hh³jy h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjc h²hh³jy h´Mubah}”(h]”j^ ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jy h´Mhj` h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ,release the lock for exclusive SPI bus usage”h]”hŒ,release the lock for exclusive SPI bus usage”…”�”}”(hj+¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhj(¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj` h²hh³jy h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjC¡jzjC¡j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXq**Parameters** ``struct spi_controller *ctlr`` SPI bus controller that was locked for exclusive bus access **Context** can sleep **Description** This call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout. This call releases an SPI bus lock previously obtained by an spi_bus_lock call. **Return** always zero.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjM¡h]”hŒ Parameters”…”�”}”(hjO¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjK¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ\``struct spi_controller *ctlr`` SPI bus controller that was locked for exclusive bus access ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjl¡h]”hŒstruct spi_controller *ctlr”…”�”}”(hjn¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhjf¡ubjò)�”}”(hhh]”hÌ)�”}”(hŒ;SPI bus controller that was locked for exclusive bus access”h]”hŒ;SPI bus controller that was locked for exclusive bus access”…”�”}”(hj…¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�¡h´Mhj‚¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjf¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�¡h´Mhjc¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjG¡ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj§¡h]”hŒContext”…”�”}”(hj©¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¥¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj½¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjΡh]”hŒ Description”…”�”}”(hjСh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÌ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubhÌ)�”}”(hŒnThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout.”h]”hŒnThis call may only be used from a context that may sleep. The sleep is non-interruptible, and has no timeout.”…”�”}”(hjä¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubhÌ)�”}”(hŒOThis call releases an SPI bus lock previously obtained by an spi_bus_lock call.”h]”hŒOThis call releases an SPI bus lock previously obtained by an spi_bus_lock call.”…”�”}”(hjó¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hj¢h]”hŒReturn”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubhÌ)�”}”(hŒ always zero.”h]”hŒ always zero.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjG¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ spi_write_then_read (C function)”Œc.spi_write_then_read”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒnint spi_write_then_read (struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)”h]”jû)�”}”(hŒmint spi_write_then_read(struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjI¢h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjE¢h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE¢h²hh³jW¢h´M1ubj$)�”}”(hŒspi_write_then_read”h]”j*)�”}”(hŒspi_write_then_read”h]”hŒspi_write_then_read”…”�”}”(hjj¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjf¢ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjE¢h²hh³jW¢h´M1ubjl)�”}”(hŒV(struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)”h]”(jr)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj†¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj‚¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚¢ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj¤¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj¡¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”j«Œ reftarget”j¦¢Œmodname”NŒ classname”Nj¯j²)�”}”jµ]”j¸)�”}”j«jl¢sbŒc.spi_write_then_read”†”asbuh1hhj‚¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚¢ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hjÒ¢h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj‚¢ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjߢh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj‚¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj~¢ubjr)�”}”(hŒconst void *txbuf”h]”(j)�”}”(hj£Hh]”hŒconst”…”�”}”(hjø¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjô¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô¢ubj4)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjô¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô¢ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj/£h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhjô¢ubj*)�”}”(hŒtxbuf”h]”hŒtxbuf”…”�”}”(hj<£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjô¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj~¢ubjr)�”}”(hŒ unsigned n_tx”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjU£h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjQ£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ£ubj*)�”}”(hŒn_tx”h]”hŒn_tx”…”�”}”(hjq£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjQ£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj~¢ubjr)�”}”(hŒ void *rxbuf”h]”(j4)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠ£h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hj†£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†£ubjÌ)�”}”(hjÏh]”hŒ*”…”�”}”(hj¦£h²hh³Nh´Nubah}”(h]”h ]”jØah"]”h$]”h&]”uh1jËhj†£ubj*)�”}”(hŒrxbuf”h]”hŒrxbuf”…”�”}”(hj³£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj†£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj~¢ubjr)�”}”(hŒ unsigned n_rx”h]”(j4)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÌ£h²hh³Nh´Nubah}”(h]”h ]”j@ah"]”h$]”h&]”uh1j3hjÈ£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ£ubj*)�”}”(hŒn_rx”h]”hŒn_rx”…”�”}”(hjè£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÈ£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1jqhj~¢ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1jkhjE¢h²hh³jW¢h´M1ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjA¢h²hh³jW¢h´M1ubah}”(h]”j<¢ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jW¢h´M1hj>¢h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ&SPI synchronous write followed by read”h]”hŒ&SPI synchronous write followed by read”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M1hj¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj>¢h²hh³jW¢h´M1ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj*¤jzj*¤j{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hXJ**Parameters** ``struct spi_device *spi`` device with which data will be exchanged ``const void *txbuf`` data to be written (need not be DMA-safe) ``unsigned n_tx`` size of txbuf, in bytes ``void *rxbuf`` buffer into which data will be read (need not be DMA-safe) ``unsigned n_rx`` size of rxbuf, in bytes **Context** can sleep **Description** This performs a half duplex MicroWire style transaction with the device, sending txbuf and then reading rxbuf. The return value is zero for success, else a negative errno status code. This call may only be used from a context that may sleep. Parameters to this routine are always copied using a small buffer. Performance-sensitive or bulk transfer code should instead use spi_{async,sync}() calls with DMA-safe buffers. **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj4¤h]”hŒ Parameters”…”�”}”(hj6¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj2¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M5hj.¤ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjS¤h]”hŒstruct spi_device *spi”…”�”}”(hjU¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjQ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M2hjM¤ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjl¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh¤h´M2hji¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjM¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jh¤h´M2hjJ¤ubjÒ)�”}”(hŒ@``const void *txbuf`` data to be written (need not be DMA-safe) ”h]”(jØ)�”}”(hŒ``const void *txbuf``”h]”hö)�”}”(hjŒ¤h]”hŒconst void *txbuf”…”�”}”(hjޤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjФubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M3hj†¤ubjò)�”}”(hhh]”hÌ)�”}”(hŒ)data to be written (need not be DMA-safe)”h]”hŒ)data to be written (need not be DMA-safe)”…”�”}”(hj¥¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¡¤h´M3hj¢¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj†¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¡¤h´M3hjJ¤ubjÒ)�”}”(hŒ*``unsigned n_tx`` size of txbuf, in bytes ”h]”(jØ)�”}”(hŒ``unsigned n_tx``”h]”hö)�”}”(hjŤh]”hŒ unsigned n_tx”…”�”}”(hjǤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M4hj¿¤ubjò)�”}”(hhh]”hÌ)�”}”(hŒsize of txbuf, in bytes”h]”hŒsize of txbuf, in bytes”…”�”}”(hjÞ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÚ¤h´M4hjÛ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¿¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÚ¤h´M4hjJ¤ubjÒ)�”}”(hŒK``void *rxbuf`` buffer into which data will be read (need not be DMA-safe) ”h]”(jØ)�”}”(hŒ``void *rxbuf``”h]”hö)�”}”(hjþ¤h]”hŒ void *rxbuf”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjü¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M5hjø¤ubjò)�”}”(hhh]”hÌ)�”}”(hŒ:buffer into which data will be read (need not be DMA-safe)”h]”hŒ:buffer into which data will be read (need not be DMA-safe)”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¥h´M5hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjø¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¥h´M5hjJ¤ubjÒ)�”}”(hŒ*``unsigned n_rx`` size of rxbuf, in bytes ”h]”(jØ)�”}”(hŒ``unsigned n_rx``”h]”hö)�”}”(hj7¥h]”hŒ unsigned n_rx”…”�”}”(hj9¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj5¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M6hj1¥ubjò)�”}”(hhh]”hÌ)�”}”(hŒsize of rxbuf, in bytes”h]”hŒsize of rxbuf, in bytes”…”�”}”(hjP¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jL¥h´M6hjM¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj1¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jL¥h´M6hjJ¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj.¤ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjr¥h]”hŒContext”…”�”}”(hjt¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjp¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M8hj.¤ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjˆ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M7hj.¤ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj™¥h]”hŒ Description”…”�”}”(hj›¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj—¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M9hj.¤ubhÌ)�”}”(hŒòThis performs a half duplex MicroWire style transaction with the device, sending txbuf and then reading rxbuf. The return value is zero for success, else a negative errno status code. This call may only be used from a context that may sleep.”h]”hŒòThis performs a half duplex MicroWire style transaction with the device, sending txbuf and then reading rxbuf. The return value is zero for success, else a negative errno status code. This call may only be used from a context that may sleep.”…”�”}”(hj¯¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M8hj.¤ubhÌ)�”}”(hŒ±Parameters to this routine are always copied using a small buffer. Performance-sensitive or bulk transfer code should instead use spi_{async,sync}() calls with DMA-safe buffers.”h]”hŒ±Parameters to this routine are always copied using a small buffer. Performance-sensitive or bulk transfer code should instead use spi_{async,sync}() calls with DMA-safe buffers.”…”�”}”(hj¾¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M=hj.¤ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjÏ¥h]”hŒReturn”…”�”}”(hjÑ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÍ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MAhj.¤ubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hjå¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MBhj.¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´Nubeh}”(h]”Œserial-peripheral-interface-spi”ah ]”h"]”Œ!serial peripheral interface (spi)”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”j9>Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j%¦Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”j¦jý¥sŒ nametypes”}”j¦‰sh}”(jý¥h·jìjöj×jÜjjjjj&j+jºj¿jÆjËj÷'jü'j™)jž)j/3j43jŸ7j¤7jS:jX:j <j¥<jÐ?jÕ?j=BjBBjÔDjÙDjåGjêGjÞJjãJj»MjÀMjPj#Pj�Rj•RjUjUjXjXjƒZjˆZjÔ\jÙ\jí^jò^j•`jš`jHcjMcjÉdjÎdjJfjOfj‡ijŒij±lj¶lj”nj™njpjpjˆrj�rj ujuj‹vj�vj»yjÀyj{j{jI~jN~jk�jp�jhƒjmƒjá…jæ…j˜‡j�‡jŽŠj“Šj„�j‰�jb�jg�jø‘jý‘j “j¥“j¾–jÖjc™jh™jù›jþ›j€žj…žj^ jc j<¢jA¢uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.