€•-Œ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)�”}”(hXŽ**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; 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. ``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¤)�”}”(hX<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; 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]”hX<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; 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ö)�”}”(hjX h]”hŒ chip_select”…”�”}”(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Œ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.”…”�”}”(hjq 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­hjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjR ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jm 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Œ tx_lane_map”…”�”}”(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Œ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”…”�”}”(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¤)�”}”(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; };”…”�”}”hjsbah}”(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‰)�”}”(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´Mhj÷ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ(``dev`` device interface to this driver ”h]”(jØ)�”}”(hŒ``dev``”h]”hö)�”}”(hjHh]”hŒdev”…”�”}”(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Œdevice interface to this driver”h]”hŒdevice interface to this driver”…”�”}”(hjah²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žhj?ubjÒ)�”}”(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õ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Œ(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Ÿhj?ubjÒ)�”}”(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¡hj?ubjÒ)�”}”(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”…”�”}”(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ŒÓ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.”…”�”}”(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?ubjÒ)�”}”(hŒT``num_data_lanes`` Number of data lanes supported by this controller. Default is 1. ”h]”(jØ)�”}”(hŒ``num_data_lanes``”h]”hö)�”}”(hj.h]”hŒnum_data_lanes”…”�”}”(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Œ@Number of data lanes supported by this controller. Default is 1.”h]”hŒ@Number of data lanes supported by this controller. Default is 1.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jCh´M¦hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jCh´M¦hj?ubjÒ)�”}”(hŒF``dma_alignment`` SPI controller constraint on DMA buffers alignment. ”h]”(jØ)�”}”(hŒ``dma_alignment``”h]”hö)�”}”(hjgh]”hŒ dma_alignment”…”�”}”(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Œ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ñhjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j|h´M§hj?ubjÒ)�”}”(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¨hj?ubjÒ)�”}”(hŒH``buswidth_override_bits`` flags to override for this controller driver ”h]”(jØ)�”}”(hŒ``buswidth_override_bits``”h]”hö)�”}”(hjÙh]”hŒbuswidth_override_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 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©hj?ubjÒ)�”}”(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ö)�”}”(hjh]”hŒbits_per_word_mask”…”�”}”(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Ì)�”}”(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.”…”�”}”(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?ubjÒ)�”}”(hŒ1``min_speed_hz`` Lowest supported transfer speed ”h]”(jØ)�”}”(hŒ``min_speed_hz``”h]”hö)�”}”(hjLh]”hŒ min_speed_hz”…”�”}”(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Ì)�”}”(hŒLowest supported transfer speed”h]”hŒLowest supported transfer speed”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jah´M¯hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jah´M¯hj?ubjÒ)�”}”(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°hjubjò)�”}”(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ñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jšh´M°hj?ubjÒ)�”}”(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”…”�”}”(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Œ``{unnamed_union}`` anonymous ”h]”(jØ)�”}”(hŒ``{unnamed_union}``”h]”hö)�”}”(hj÷h]”hŒ{unnamed_union}”…”�”}”(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´Khjñubjò)�”}”(hhh]”hÌ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j h´Khj?ubjÒ)�”}”(hŒ9``slave`` indicates that this is an SPI slave controller ”h]”(jØ)�”}”(hŒ ``slave``”h]”hö)�”}”(hj0h]”hŒslave”…”�”}”(hj2h²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 slave controller”h]”hŒ.indicates that this is an SPI slave controller”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jEh´M²hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jEh´M²hj?ubjÒ)�”}”(hŒ;``target`` indicates that this is an SPI target controller ”h]”(jØ)�”}”(hŒ ``target``”h]”hö)�”}”(hjih]”hŒtarget”…”�”}”(hjkh²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³hjcubjò)�”}”(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³hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j~h´M³hj?ubjÒ)�”}”(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”…”�”}”(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”‰jujx)�”}”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”…”�”}”(hjüh²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³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Œ—``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”…”�”}”(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 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 ”…”�”}”(hj?h²hh³Nh´Nubh)�”}”(hŒ:c:type:`spi_device`”h]”hö)�”}”(hjIh]”hŒ spi_device”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-type”eh"]”h$]”h&]”uh1hõhjGubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jujájŒ 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”…”�”}”(hjkh²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”…”�”}”(hj}h²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³jfh´M¶hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j;h´M·hj?ubjÒ)�”}”(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¸hj?ubjÒ)�”}”(hŒB``add_lock`` mutex to avoid adding devices to the same chipselect ”h]”(jØ)�”}”(hŒ ``add_lock``”h]”hö)�”}”(hjàh]”hŒadd_lock”…”�”}”(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Œ4mutex to avoid adding devices to the same chipselect”h]”hŒ4mutex to avoid adding devices to the same chipselect”…”�”}”(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``bus_lock_spinlock`` spinlock for SPI bus locking ”h]”(jØ)�”}”(hŒ``bus_lock_spinlock``”h]”hö)�”}”(hjh]”hŒbus_lock_spinlock”…”�”}”(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Œspinlock for SPI bus locking”h]”hŒspinlock for SPI bus locking”…”�”}”(hj2h²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ºhj?ubjÒ)�”}”(hŒ;``bus_lock_mutex`` mutex for exclusion of multiple callers ”h]”(jØ)�”}”(hŒ``bus_lock_mutex``”h]”hö)�”}”(hjRh]”hŒbus_lock_mutex”…”�”}”(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Œ'mutex for exclusion of multiple callers”h]”hŒ'mutex for exclusion of multiple callers”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jgh´M»hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jgh´M»hj?ubjÒ)�”}”(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¼hj?ubjÒ)�”}”(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”…”�”}”(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Ì)�”}”(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.”…”�”}”(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?ubjÒ)�”}”(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ö)�”}”(hjþh]”hŒ set_cs_timing”…”�”}”(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Œ•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”…”�”}”(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Ähj?ubjÒ)�”}”(hŒ@``transfer`` adds a message to the controller's transfer queue. ”h]”(jØ)�”}”(hŒ ``transfer``”h]”hö)�”}”(hj8h]”hŒtransfer”…”�”}”(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Œ2adds a message to the controller's transfer queue.”h]”hŒ4adds a message to the controller’s transfer queue.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jMh´MÅhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jMh´MÅhj?ubjÒ)�”}”(hŒ,``cleanup`` frees controller-specific state ”h]”(jØ)�”}”(hŒ ``cleanup``”h]”hö)�”}”(hjqh]”hŒcleanup”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjoubah}”(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Æhjkubjò)�”}”(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ñhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j†h´MÆhj?ubjÒ)�”}”(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Çhj?ubjÒ)�”}”(hŒ9``dma_map_dev`` device which can be used for DMA mapping ”h]”(jØ)�”}”(hŒ``dma_map_dev``”h]”hö)�”}”(hjãh]”hŒ dma_map_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 which can be used for DMA mapping”h]”hŒ(device which can be used for 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Èhj?ubjÒ)�”}”(hŒE``cur_rx_dma_dev`` device which is currently used for RX DMA mapping ”h]”(jØ)�”}”(hŒ``cur_rx_dma_dev``”h]”hö)�”}”(hjh]”hŒcur_rx_dma_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Œ1device which is currently used for RX DMA mapping”h]”hŒ1device which is currently used for RX DMA mapping”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j1h´MÉhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j1h´MÉhj?ubjÒ)�”}”(hŒE``cur_tx_dma_dev`` device which is currently used for TX DMA mapping ”h]”(jØ)�”}”(hŒ``cur_tx_dma_dev``”h]”hö)�”}”(hjUh]”hŒcur_tx_dma_dev”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjSubah}”(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ÊhjOubjò)�”}”(hhh]”hÌ)�”}”(hŒ1device which is currently used for TX DMA mapping”h]”hŒ1device which is currently used for TX DMA mapping”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jjh´MÊhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jjh´MÊhj?ubjÒ)�”}”(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Ëhj?ubjÒ)�”}”(hŒ6``kworker`` pointer to thread struct for message pump ”h]”(jØ)�”}”(hŒ ``kworker``”h]”hö)�”}”(hjÇh]”hŒkworker”…”�”}”(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Œ)pointer to thread struct for message pump”h]”hŒ)pointer to thread struct for message pump”…”�”}”(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ŒF``pump_messages`` work struct for scheduling work to the message pump ”h]”(jØ)�”}”(hŒ``pump_messages``”h]”hö)�”}”(hjh]”hŒ pump_messages”…”�”}”(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Œ3work struct for scheduling work to the message pump”h]”hŒ3work struct for scheduling work to the 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Íhj?ubjÒ)�”}”(hŒ?``queue_lock`` spinlock to synchronise access to message queue ”h]”(jØ)�”}”(hŒ``queue_lock``”h]”hö)�”}”(hj9h]”hŒ queue_lock”…”�”}”(hj;h²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Îhj3ubjò)�”}”(hhh]”hÌ)�”}”(hŒ/spinlock to synchronise access to message queue”h]”hŒ/spinlock to synchronise access to message queue”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jNh´MÎhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jNh´MÎhj?ubjÒ)�”}”(hŒ``queue`` message queue ”h]”(jØ)�”}”(hŒ ``queue``”h]”hö)�”}”(hjrh]”hŒqueue”…”�”}”(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Œ 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ñhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j‡h´MÏhj?ubjÒ)�”}”(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Ðhj?ubjÒ)�”}”(hŒF``cur_msg_completion`` a completion for the current in-flight message ”h]”(jØ)�”}”(hŒ``cur_msg_completion``”h]”hö)�”}”(hjäh]”hŒcur_msg_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Œ.a completion for the current in-flight message”h]”hŒ.a completion for the current 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Ñhj?ubjÒ)�”}”(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ö)�”}”(hjh]”hŒcur_msg_incomplete”…”�”}”(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Œ¦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 ”…”�”}”(hj6h²hh³Nh´Nubj‰)�”}”(hŒ**cur_msg_completion**”h]”hŒcur_msg_completion”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj6ubhŒ]. This flag is used to check if the driver has already called spi_finalize_current_message().”…”�”}”(hj6h²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Òhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j2h´MÔhj?ubjÒ)�”}”(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ö)�”}”(hjih]”hŒcur_msg_need_completion”…”�”}”(hjkh²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×hjcubjò)�”}”(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Õhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j~h´M×hj?ubjÒ)�”}”(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”…”�”}”(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Œ$``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”…”�”}”(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àhj?ubjÒ)�”}”(hŒ;``rt`` whether this queue is set to run as a realtime task ”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´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”…”�”}”(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Œ‘``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”…”�”}”(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Œ|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”…”�”}”(hjyh²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âhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³juh´Mähj?ubjÒ)�”}”(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Ùhj?ubjÒ)�”}”(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ö)�”}”(hjÔh]”hŒlast_cs_mode_high”…”�”}”(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Œ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ñhjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jéh´MÚhj?ubjÒ)�”}”(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ö)�”}”(hj h]”hŒlast_cs”…”�”}”(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Œ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ñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j"h´MÜhj?ubjÒ)�”}”(hŒE``last_cs_index_mask`` bit mask the last chip selects that were used ”h]”(jØ)�”}”(hŒ``last_cs_index_mask``”h]”hö)�”}”(hjGh]”hŒlast_cs_index_mask”…”�”}”(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Œ-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ñhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j\h´MÝhj?ubjÒ)�”}”(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Þhjzubjò)�”}”(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ñhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j•h´MÞhj?ubjÒ)�”}”(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³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``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”…”�”}”(hj h²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ôhj?ubjÒ)�”}”(hŒG``unoptimize_message`` release resources allocated by optimize_message ”h]”(jØ)�”}”(hŒ``unoptimize_message``”h]”hö)�”}”(hj+h]”hŒunoptimize_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Œ/release resources allocated by optimize_message”h]”hŒ/release resources allocated by optimize_message”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j@h´MõhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j@h´Mõhj?ubjÒ)�”}”(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ö)�”}”(hjdh]”hŒprepare_transfer_hardware”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjbubah}”(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æhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jyh´Mèhj?ubjÒ)�”}”(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íhj?ubjÒ)�”}”(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ðhj?ubjÒ)�”}”(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ö)�”}”(hj h]”hŒprepare_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Œ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.”…”�”}”(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?ubjÒ)�”}”(hŒ?``unprepare_message`` undo any work done by prepare_message(). ”h]”(jØ)�”}”(hŒ``unprepare_message``”h]”hö)�”}”(hjL h]”hŒunprepare_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Œ(undo any work done by prepare_message().”h]”hŒ(undo any work done by prepare_message().”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ja h´Mhjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³ja h´Mhj?ubjÒ)�”}”(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´Mhj?ubjÒ)�”}”(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óhj?ubjÒ)�”}”(hŒ1``transfer_one`` transfer a single spi_transfer. ”h]”(jØ)�”}”(hŒ``transfer_one``”h]”hö)�”}”(hjø h]”hŒ transfer_one”…”�”}”(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Œtransfer a single spi_transfer.”h]”hŒtransfer a single spi_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ùhj?ubjÒ)�”}”(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ö)�”}”(hj1!h]”hŒ handle_err”…”�”}”(hj3!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Œ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().”…”�”}”(hjJ!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´MhjG!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj+!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jF!h´Mhj?ubjÒ)�”}”(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ö)�”}”(hjk!h]”hŒmem_ops”…”�”}”(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´M hje!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ñhje!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j€!h´M hj?ubjÒ)�”}”(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´Mhj?ubjÒ)�”}”(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.”…”�”}”(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´Mhj?ubjÒ)�”}”(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ö)�”}”(hj"h]”hŒ get_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´M hj"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.”…”�”}”(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´M hj."ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j-"h´M hj?ubjÒ)�”}”(hŒJ``put_offload`` release the offload instance acquired by **get_offload**. ”h]”(jØ)�”}”(hŒ``put_offload``”h]”hö)�”}”(hjR"h]”hŒ put_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Œ9release the offload instance acquired by **get_offload**.”h]”(hŒ)release the offload instance acquired by ”…”�”}”(hjk"h²hh³Nh´Nubj‰)�”}”(hŒ**get_offload**”h]”hŒ get_offload”…”�”}”(hjs"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjk"ubhŒ.”…”�”}”(hjk"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jg"h´Mhjh"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjL"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jg"h´Mhj?ubjÒ)�”}”(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´Mhj?ubjÒ)�”}”(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´MhjÑ"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”…”�”}”(hjø"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´Mhjí"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÑ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jì"h´Mhj?ubjÒ)�”}”(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´Mhj#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.”…”�”}”(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´Mhj9#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j8#h´Mhj?ubjÒ)�”}”(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´MhjW#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.”…”�”}”(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´Mhjs#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjW#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jr#h´Mhj?ubjÒ)�”}”(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 hj?ubjÒ)�”}”(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!hj?ubjÒ)�”}”(hŒ``dma_rx`` DMA receive channel ”h]”(jØ)�”}”(hŒ ``dma_rx``”h]”hö)�”}”(hj $h]”hŒdma_rx”…”�”}”(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 receive channel”h]”hŒDMA receive 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"hj?ubjÒ)�”}”(hŒ:``dummy_rx`` dummy receive buffer for full-duplex devices ”h]”(jØ)�”}”(hŒ ``dummy_rx``”h]”hö)�”}”(hjB$h]”hŒdummy_rx”…”�”}”(hjD$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 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³jW$h´M#hjX$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj<$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jW$h´M#hj?ubjÒ)�”}”(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õhjy$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$hju$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ñhju$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�$h´M$hj?ubjÒ)�”}”(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´M'hj®$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´M'hj?ubjÒ)�”}”(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´M-hjè$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 ”…”�”}”(hj%h²hh³Nh´Nubj‰)�”}”(hŒ**spi_transfer->ptp_sts**”h]”hŒspi_transfer->ptp_sts”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj%ubhŒ1 as close as possible to the moment in time when ”…”�”}”(hj%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ˆhj%ubhŒ and ”…”�”}”(hj%h²hh³Nh´Nubj‰)�”}”(hŒ#**spi_transfer->ptp_sts_word_post**”h]”hŒspi_transfer->ptp_sts_word_post”…”�”}”(hj3%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj%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.”…”�”}”(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-hj?ubjÒ)�”}”(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´M.hjX%ubjò)�”}”(hhh]”hÌ)�”}”(hŒ5Interrupt enable state during PTP system timestamping”h]”hŒ5Interrupt enable state during PTP system timestamping”…”�”}”(hjw%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³js%h´M.hjt%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjX%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³js%h´M.hj?ubjÒ)�”}”(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´M0hj‘%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´M/hj­%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj‘%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¬%h´M0hj?ubjÒ)�”}”(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´M1hjË%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´M1hjç%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjË%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jæ%h´M1hj?ubjÒ)�”}”(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ö)�”}”(hj &h]”hŒdefer_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´M4hj&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´M2hj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j&h´M4hj?ubjÒ)�”}”(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ö)�”}”(hjD&h]”hŒuserspace_clients”…”�”}”(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´M6hj>&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”…”�”}”(hje&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´M5hjZ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj>&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jY&h´M6hj?ubjÒ)�”}”(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´M8hj†&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´M7hj¢&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj†&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¡&h´M8hj?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Ï&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<hh·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´Mùhjð&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().”…”�”}”(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&]”Œbullet”Œ-”uh1jé&h³j'h´Mùhjå&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³j'h´Mùhh·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 ”…”�”}”(hj/'h²hh³Nh´Nubj‰)�”}”(hŒ**spi_device**”h]”hŒ spi_device”…”�”}”(hj7'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj/'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.”…”�”}”(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´Mhh·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.”…”�”}”(hjP'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‰)�”}”(hja'h]”hŒNote”…”�”}”(hjc'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 hh·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´Mhjz'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´Mhj�'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjz'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŒ'h´Mhjw'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´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆ'h²hh³j×'h´M ubj$)�”}”(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´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Œ!SPI resource management structure”h]”hŒ!SPI resource management structure”…”�”}”(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)�”}”(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”…”�”}”(hj0(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¤)�”}”(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[]; };”…”�”}”hjI(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‰)�”}”(hjZ(h]”hŒMembers”…”�”}”(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´MÎhj((ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ``entry`` list entry ”h]”(jØ)�”}”(hŒ ``entry``”h]”hö)�”}”(hjy(h]”hŒentry”…”�”}”(hj{(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjw(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Ähjs(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ñhjs(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŽ(h´MÄhjp(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Åhjp(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Åhjp(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.)h]”hŒ Description”…”�”}”(hj0)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É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.”…”�”}”(hjD)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”…”�”}”(hjl)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjh)h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MÌubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh)h²hh³jy)h´MÌubj$)�”}”(hŒ spi_transfer”h]”j*)�”}”(hjf)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#hjh)h²hh³jy)h´MÌubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjd)h²hh³jy)h´MÌubah}”(h]”j_)ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jy)h´MÌhja)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&]”uh1jWhja)h²hh³jy)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‰)�”}”(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´MhjÊ)ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ9``tx_buf`` data to be written (DMA-safe memory), or NULL ”h]”(jØ)�”}”(hŒ ``tx_buf``”h]”hö)�”}”(hj*h]”hŒtx_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 written (DMA-safe memory), or NULL”h]”hŒ-data to be written (DMA-safe memory), or NULL”…”�”}”(hj4*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j0*h´Mæhj1*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j0*h´Mæhj*ubjÒ)�”}”(hŒ6``rx_buf`` data to be read (DMA-safe memory), or NULL ”h]”(jØ)�”}”(hŒ ``rx_buf``”h]”hö)�”}”(hjT*h]”hŒrx_buf”…”�”}”(hjV*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjR*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çhjN*ubjò)�”}”(hhh]”hÌ)�”}”(hŒ*data to be read (DMA-safe memory), or NULL”h]”hŒ*data to be read (DMA-safe memory), or NULL”…”�”}”(hjm*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ji*h´Mçhjj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjN*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³ji*h´Mçhj*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ðhj*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"hj*ubjÒ)�”}”(hŒ:``tx_sg_mapped`` If true, the **tx_sg** is mapped for DMA ”h]”(jØ)�”}”(hŒ``tx_sg_mapped``”h]”hö)�”}”(hjÿ*h]”hŒ tx_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´Mhjù*ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(If true, the **tx_sg** is mapped for DMA”h]”(hŒ If true, the ”…”�”}”(hj+h²hh³Nh´Nubj‰)�”}”(hŒ **tx_sg**”h]”hŒtx_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´Mhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjù*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j+h´Mhj*ubjÒ)�”}”(hŒ:``rx_sg_mapped`` If true, the **rx_sg** is mapped for DMA ”h]”(jØ)�”}”(hŒ``rx_sg_mapped``”h]”hö)�”}”(hjJ+h]”hŒ rx_sg_mapped”…”�”}”(hjL+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjH+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´MhjD+ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(If true, the **rx_sg** is mapped for DMA”h]”(hŒ If true, the ”…”�”}”(hjc+h²hh³Nh´Nubj‰)�”}”(hŒ **rx_sg**”h]”hŒrx_sg”…”�”}”(hjk+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjc+ubhŒ is mapped for DMA”…”�”}”(hjc+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j_+h´Mhj`+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjD+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j_+h´Mhj*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´Mhj*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´Mhj*ubjÒ)�”}”(hŒ?``tx_dma`` DMA address of tx_buf, currently not for client use ”h]”(jØ)�”}”(hŒ ``tx_dma``”h]”hö)�”}”(hj,h]”hŒtx_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Œ3DMA address of tx_buf, currently not for client use”h]”hŒ3DMA address of tx_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ñhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j,h´Mèhj*ubjÒ)�”}”(hŒ?``rx_dma`` DMA address of rx_buf, currently not for client use ”h]”(jØ)�”}”(hŒ ``rx_dma``”h]”hö)�”}”(hj@,h]”hŒrx_dma”…”�”}”(hjB,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 rx_buf, currently not for client use”h]”hŒ3DMA address of rx_buf, currently not for client use”…”�”}”(hjY,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jU,h´MéhjV,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj:,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jU,h´Méhj*ubjÒ)�”}”(hŒ;``dummy_data`` indicates transfer is dummy bytes transfer. ”•h]”(jØ)�”}”(hŒ``dummy_data``”h]”hö)�”}”(hjy,h]”hŒ dummy_data”…”�”}”(hj{,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjw,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õhjs,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ñhjs,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŽ,h´Mõhj*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öhj*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´M÷hjå,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´M÷hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjå,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j-h´M÷hj*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ëhj-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.”…”�”}”(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³j9-h´Mëhj*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íhjX-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.”…”�”}”(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íhj*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ïhj*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!hj*ubjÒ)�”}”(hŒ4``dtr_mode`` true if supports double transfer rate. ”h]”(jØ)�”}”(hŒ ``dtr_mode``”h]”hö)�”}”(hj .h]”hŒdtr_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Œ&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³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ŒŠ``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ö)�”}”(hjD.h]”hŒ bits_per_word”…”�”}”(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Œ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”…”�”}”(hje.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óhjZ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj>.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jY.h´Môhj*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´MühjŠ.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´Múhj¦.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjŠ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¥.h´Mühj*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´MùhjÖ.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”…”�”}”(hjý.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”…”�”}”(hj/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´Møhjò.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÖ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jñ.h´Mùhj*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ö)�”}”(hjH/h]”hŒ word_delay”…”�”}”(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´MþhjB/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.”…”�”}”(hja/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ñhjB/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j]/h´Mþhj*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òhj*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ö)�”}”(hjÎ/h]”hŒeffective_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´MhjÈ/ubjò)�”}”(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ç/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*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ö)�”}”(hj0h]”hŒ offload_flags”…”�”}”(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´Mhj0ubjò)�”}”(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_*”…”�”}”(hj)0h²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´Mhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j0h´Mhj*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ö)�”}”(hjT0h]”hŒptp_sts_word_pre”…”�”}”(hjV0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjR0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjN0ubjò)�”}”(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 ”…”�”}”(hjË0h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_word_pre**”h]”hŒptp_sts_word_pre”…”�”}”(hjÓ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjË0ubhŒw. The two can be equal (meaning that a single byte should be snapshotted). If the core takes care of the timestamp (if ”…”�”}”(hjË0h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_supported**”h]”hŒptp_sts_supported”…”�”}”(hjå0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjË0ubhŒ, is false for this controller), it will set ”…”�”}”(hjË0h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_word_pre**”h]”hŒptp_sts_word_pre”…”�”}”(hj÷0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjË0ubhŒ to 0, and ”…”�”}”(hjË0h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_word_post**”h]”hŒptp_sts_word_post”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjË0ubhŒÍ 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.”…”�”}”(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´MhjÈ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¬0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÇ0h´Mhj*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ö)�”}”(hj41h]”hŒptp_sts”…”�”}”(hj61h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj21ubah}”(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.1ubjò)�”}”(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 ”…”�”}”(hjM1h²hh³Nh´Nubj‰)�”}”(hŒ**ptp_sts_supported**”h]”hŒptp_sts_supported”…”�”}”(hjU1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjM1ubhXn 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.”…”�”}”(hjM1h²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´MhjJ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj.1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jI1h´Mhj*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´Mhjz1ubjò)�”}”(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´Mhj–1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjz1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j•1h´Mhj*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Ñ1h]”hŒ Description”…”�”}”(hjÓ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÏ1ubah}”(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ç1h²hh³Nh´Nubj‰)�”}”(hŒ **rx_buf**”h]”hŒrx_buf”…”�”}”(hjï1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjç1ubhŒ and/or ”…”�”}”(hjç1h²hh³Nh´Nubj‰)�”}”(hŒ **tx_buf**”h]”hŒtx_buf”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjç1ubhŒ›. 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ç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"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 ”…”�”}”(hj2h²hh³Nh´Nubj‰)�”}”(hŒ **rx_buf**”h]”hŒrx_buf”…”�”}”(hj"2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj2ubhX;. 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.)”…”�”}”(hj2h²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Ì)�”}”(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 (”…”�”}”(hj;2h²hh³Nh´Nubj‰)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjC2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj;2ubhŒ6 = 2N) and hold N sixteen bit words in CPU byte order.”…”�”}”(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Ì)�”}”(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´M4hh·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.”…”�”}”(hjk2h²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´M9hh·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.”…”�”}”(hjz2h²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Ì)�”}”(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´MChh·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´MMhh·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.”…”�”}”(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´MRhh·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Ú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´MUhh·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”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjþ2h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ2h²hh³j3h´M^ubj$)�”}”(hŒ spi_message”h]”j*)�”}”(hjü2h]”hŒ spi_message”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj3ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjþ2h²hh³j3h´M^ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjú2h²hh³j3h´M^ubah}”(h]”jõ2ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j3h´M^hj÷2h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ!one multi-segment SPI transaction”h]”hŒ!one multi-segment SPI transaction”…”�”}”(hjD3h²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—hjA3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj÷2h²hh³j3h´M^ubeh}”(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”…”�”}”(hjh3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjd3ubhŒ:”…”�”}”(hjd3h²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”…”�”}”(hjÊ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÆ3h´M™hjÇ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj«3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÆ3h´M™hj¨3ubjÒ)�”}”(hŒ6``spi`` SPI device to which the transaction is queued ”h]”(jØ)�”}”(hŒ``spi``”h]”hö)�”}”(hjê3h]”hŒspi”…”�”}”(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Œ-SPI device to which the transaction is queued”h]”hŒ-SPI device to which the transaction is queued”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÿ3h´Mšhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjä3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÿ3h´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›hj4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ+peripheral driver pre-optimized the message”h]”hŒ+peripheral driver pre-optimized the message”…”�”}”(hj<4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j84h´M›hj94ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j84h´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õhjZ4ubah}”(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œhjV4ubjò)�”}”(hhh]”hÌ)�”}”(hŒ%the message is in the optimized state”h]”hŒ%the message is in the optimized state”…”�”}”(hju4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jq4h´Mœhjr4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjV4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jq4h´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ö)�”}”(hjÎ4h]”hŒstatus”…”�”}”(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Œ%zero for success, else negative errno”h]”hŒ%zero for success, else negative errno”…”�”}”(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Œ6``complete`` called to report transaction completions ”h]”(jØ)�”}”(hŒ ``complete``”h]”hö)�”}”(hj5h]”hŒcomplete”…”�”}”(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Œ(called to report transaction completions”h]”hŒ(called to report transaction completions”…”�”}”(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Œ8``context`` the argument to complete() when it's called ”h]”(jØ)�”}”(hŒ ``context``”h]”hö)�”}”(hj@5h]”hŒcontext”…”�”}”(hjB5h²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 argument to complete() when it's called”h]”hŒ-the argument to complete() when it’s called”…”�”}”(hjY5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jU5h´M hjV5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj:5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jU5h´M hj¨3ubjÒ)�”}”(hŒ:``frame_length`` the total number of bytes in the message ”h]”(jØ)�”}”(hŒ``frame_length``”h]”hö)�”}”(hjy5h]”hŒ frame_length”…”�”}”(hj{5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjw5ubah}”(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¡hjs5ubjò)�”}”(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ñhjs5ubeh}”(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”…”�”}”(hjË5h²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È5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¬5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÇ5h´M£hj¨3ubjÒ)�”}”(hŒA``queue`` for use by whichever driver currently owns the message ”h]”(jØ)�”}”(hŒ ``queue``”h]”hö)�”}”(hjì5h]”hŒqueue”…”�”}”(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Œ6for use by whichever driver currently owns the message”h]”hŒ6for use by whichever driver currently owns the message”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j6h´M¤hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjæ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j6h´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”…”�”}”(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¥hj6ubjò)�”}”(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ñhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j:6h´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¦hjX6ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6for use by whichever driver currently owns the message”h]”hŒ6for use by whichever driver currently owns the message”…”�”}”(hjw6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³js6h´M¦hjt6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjX6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³js6h´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Ð6h]”hŒ resources”…”�”}”(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Œ9for resource management when the SPI message is processed”h]”hŒ9for resource management when the SPI message is processed”…”�”}”(hjé6h²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æ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÊ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jå6h´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‰)�”}”(hj7h]”hŒ Description”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj7ubah}”(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 ”…”�”}”(hj)7h²hh³Nh´Nubj‰)�”}”(hŒ**spi_message**”h]”hŒ spi_message”…”�”}”(hj17h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj)7ubhXà 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.”…”�”}”(hj)7h²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.”…”�”}”(hjJ7h²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]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjr7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjn7h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn7h²hh³j€7h´M ubj$)�”}”(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#hjn7h²hh³j€7h´M ubj2)�”}”(hŒK(struct spi_message *m, struct spi_transfer *xfers, unsigned int num_xfers)”h]”(j8)�”}”(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”…”�”}”(hjÍ7h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÊ7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jÏ7Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj•7sbŒ!c.spi_message_init_with_transfers”†”asbuh1hhj«7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«7ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjû7h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj«7ubj*)�”}”(hŒm”h]”hŒm”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj«7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj§7ubj8)�”}”(hŒstruct spi_transfer *xfers”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj!8h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hj?8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj<8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jA8Œmodname”NŒ classname”Njujx)�”}”j{]”jé7Œ!c.spi_message_init_with_transfers”†”asbuh1hhj8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjk8h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj8ubj*)�”}”(hŒxfers”h]”hŒxfers”…”�”}”(hjx8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj§7ubj8)�”}”(hŒunsigned int num_xfers”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‘8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj�8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�8ubjú)�”}”(hŒint”h]”hŒint”…”�”}”(hj­8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj�8ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�8ubj*)�”}”(hŒ num_xfers”h]”hŒ num_xfers”…”�”}”(hjÉ8h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj�8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj§7ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjn7h²hh³j€7h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjj7h²hh³j€7h´M ubah}”(h]”je7ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j€7h´M hjg7h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ+Initialize spi_message and append transfers”h]”hŒ+Initialize spi_message and append transfers”…”�”}”(hjó8h²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ð8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjg7h²hh³j€7h´M ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj 9jzj 9j{‰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‰)�”}”(hj9h]”hŒ Parameters”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj9ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ8``struct spi_message *m`` spi_message to be initialized ”h]”(jØ)�”}”(hŒ``struct spi_message *m``”h]”hö)�”}”(hj49h]”hŒstruct spi_message *m”…”�”}”(hj69h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj29ubah}”(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Œspi_message to be initialized”h]”hŒspi_message to be initialized”…”�”}”(hjM9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jI9h´MhjJ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj.9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jI9h´Mhj+9ubjÒ)�”}”(hŒ9``struct spi_transfer *xfers`` An array of SPI transfers ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfers``”h]”hö)�”}”(hjm9h]”hŒstruct spi_transfer *xfers”…”�”}”(hjo9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjk9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhjg9ubjò)�”}”(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ñhjg9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j‚9h´Mhj+9ubjÒ)�”}”(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´Mhj+9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj9ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjá9h]”hŒ Description”…”�”}”(hjã9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjß9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mhj9ubhÌ)�”}”(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.”…”�”}”(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´Mhj9ubeh}”(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]”(jú)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj&:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj":h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj":h²hh³j4:h´M^ubj$)�”}”(hŒspi_is_bpw_supported”h]”j*)�”}”(hŒspi_is_bpw_supported”h]”hŒspi_is_bpw_supported”…”�”}”(hjG:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjC:ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj":h²hh³j4:h´M^ubj2)�”}”(hŒ!(struct spi_device *spi, u32 bpw)”h]”(j8)�”}”(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”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj~:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jƒ:Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjI: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”ˆjAjBuh1j7hj[:ubj8)�”}”(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”jqŒ reftarget”jÚ:Œmodname”NŒ classname”Njujx)�”}”j{]”j�:Œc.spi_is_bpw_supported”†”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”ˆjAjBuh1j7hj[:ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj":h²hh³j4:h´M^ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj:h²hh³j4:h´M^ubah}”(h]”j:ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j4:h´M^hj:h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ#Check if bits per word is supported”h]”hŒ#Check if bits per word is supported”…”�”}”(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³j4:h´M^ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjF;jzjF;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‰)�”}”(hjP;h]”hŒ Parameters”…”�”}”(hjR;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjN;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´MbhjJ;ubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ&``struct spi_device *spi`` SPI device ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjo;h]”hŒstruct spi_device *spi”…”�”}”(hjq;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjm;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_hji;ubjò)�”}”(hhh]”hÌ)�”}”(hŒ SPI device”h]”hŒ SPI device”…”�”}”(hjˆ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j„;h´M_hj…;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhji;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j„;h´M_hjf;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´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`hjf;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjJ;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´MbhjJ;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 ”…”�”}”(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´MahjJ;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´MchjJ;ubhÌ)�”}”(hŒ.True if **bpw** is supported, false otherwise.”h]”(hŒTrue if ”…”�”}”(hj2<h²hh³Nh´Nubj‰)�”}”(hŒ**bpw**”h]”hŒbpw”…”�”}”(hj:<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj2<ubhŒ is supported, false otherwise.”…”�”}”(hj2<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´MdhjJ;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”…”�”}”(hjv<h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjs<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jx<Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒspi_bpw_to_bytes”sbŒc.spi_bpw_to_bytes”†”asbuh1hhjo<h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mrubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjo<h²hh³j—<h´Mrubj$)�”}”(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#hjo<h²hh³j—<h´Mrubj2)�”}”(hŒ (u32 bpw)”h]”j8)�”}”(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”jqŒ reftarget”jÊ<Œmodname”NŒ classname”Njujx)�”}”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”ˆjAjBuh1j7hj½<ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjo<h²hh³j—<h´Mrubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjk<h²hh³j—<h´Mrubah}”(h]”jf<ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j—<h´Mrhjh<h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒCovert bits per word to bytes”h]”hŒCovert bits per word to bytes”…”�”}”(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´Mrhj=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjh<h²hh³j—<h´Mrubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj6=jzj6=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‰)�”}”(hj@=h]”hŒ Parameters”…”�”}”(hjB=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´Mvhj:=ubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ``u32 bpw`` Bits per word ”h]”(jØ)�”}”(hŒ ``u32 bpw``”h]”hö)�”}”(hj_=h]”hŒu32 bpw”…”�”}”(hja=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´MshjY=ubjò)�”}”(hhh]”hÌ)�”}”(hŒ Bits per word”h]”hŒ Bits per word”…”�”}”(hjx=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jt=h´Mshju=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjY=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jt=h´MshjV=ubah}”(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´Muhj:=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´Mthj:=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´Mxhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ=hjü=ubj>)�”}”(hhh]”hÌ)�”}”(hŒOutput (in bytes)”h]”hŒOutput (in bytes)”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j>h´Mxhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ=hjü=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jú=hj÷=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõ=hjÜ=ubhŒtbody”“”)�”}”(hhh]”(jû=)�”}”(hhh]”(j>)�”}”(hhh]”hÌ)�”}”(hŒ5”h]”hŒ5”…”�”}”(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´MzhjD>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ=hjA>ubj>)�”}”(hhh]”hÌ)�”}”(hŒ1”h]”hŒ1”…”�”}”(hj_>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jU>h´Mzhj\>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿ=hjA>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jú=hj>>ubjû=)�”}”(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&]”uh1jÿ=hjy>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&]”uh1jÿ=hjy>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jú=hj>>ubjû=)�”}”(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&]”uh1jÿ=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&]”uh1jÿ=hj±>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jú=hj>>ubjû=)�”}”(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&]”uh1jÿ=hjé>ubj>)�”}”(hhh]”hÌ)�”}”(hŒ8”h]”hŒ8”…”�”}”(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ú=hj>>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<>hjÜ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jÚ=hj×=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕ=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´Mwhj:=ubhÌ)�”}”(hŒ!It will return 0 for the 0 input.”h]”hŒ!It will return 0 for the 0 input.”…”�”}”(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:=ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjL?h]”hŒReturn”…”�”}”(hjN?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjJ?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ŒBytes for the given **bpw**.”h]”(hŒBytes for the given ”…”�”}”(hjb?h²hh³Nh´Nubj‰)�”}”(hŒ**bpw**”h]”hŒbpw”…”�”}”(hjj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjb?ubhŒ.”…”�”}”(hjb?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:=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]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj£?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjŸ?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Œint”h]”hŒint”…”�”}”(hjÀ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjŸ?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Œubj2)�”}”(hŒ8(struct spi_controller *ctlr, struct spi_transfer *xfer)”h]”(j8)�”}”(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”jqŒ reftarget”j@Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjâ?sbŒ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Œ*”…”�”}”(hjH@h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjø?ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjU@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjø?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjô?ubj8)�”}”(hŒstruct spi_transfer *xfer”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjn@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjj@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj@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”jqŒ reftarget”jŽ@Œmodname”NŒ classname”Njujx)�”}”j{]”j6@Œc.spi_controller_xfer_timeout”†”asbuh1hhjj@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj@ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¸@h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjj@ubj*)�”}”(hŒxfer”h]”hŒxfer”…”�”}”(hjÅ@h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjô?ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjŸ?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ï@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Œfunction”eh"]”h$]”h&]”jxjjyjAjzjAj{‰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‰)�”}”(hjAh]”hŒ Parameters”…”�”}”(hjAh²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�hj AubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ+``struct spi_controller *ctlr`` SPI device ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj0Ah]”hŒstruct spi_controller *ctlr”…”�”}”(hj2Ah²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Œ SPI device”h]”hŒ SPI device”…”�”}”(hjIAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jEAh´M�hjFAubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj*Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jEAh´M�hj'AubjÒ)�”}”(hŒ2``struct spi_transfer *xfer`` Transfer descriptor ”h]”(jØ)�”}”(hŒ``struct spi_transfer *xfer``”h]”hö)�”}”(hjiAh]”hŒstruct spi_transfer *xfer”…”�”}”(hjkAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjgAubah}”(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ŽhjcAubjò)�”}”(hhh]”hÌ)�”}”(hŒTransfer descriptor”h]”hŒTransfer descriptor”…”�”}”(hj‚Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j~Ah´MŽhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjcAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j~Ah´MŽhj'Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj AubhÌ)�”}”(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�hj AubhÌ)�”}”(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�hj AubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjËAh]”hŒReturn”…”�”}”(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“hj AubhÌ)�”}”(hŒ'Transfer timeout value in milliseconds.”h]”hŒ'Transfer timeout value in milliseconds.”…”�”}”(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 Aubeh}”(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”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj Bh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Bh²hh³jBh´M™ubj$)�”}”(hŒspi_replaced_transfers”h]”j*)�”}”(hj Bh]”hŒspi_replaced_transfers”…”�”}”(hj0Bh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj,Bubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj Bh²hh³jBh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjBh²hh³jBh´M™ubah}”(h]”jBah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jBh´M™hjBh²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”…”�”}”(hjRBh²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¥hjOBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjBh²hh³jBh´M™ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyjjBjzjjBj{‰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”…”�”}”(hjvBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjrBubhŒ:”…”�”}”(hjrBh²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©hjnBubj¤)�”}”(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«hjnBubhÌ)�”}”(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´hjnBubjÍ)�”}”(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”…”�”}”(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ÕBubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¹Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÔBh´Mªhj¶BubjÒ)�”}”(hŒ>``extradata`` pointer to some extra data if requested or NULL ”h]”(jØ)�”}”(hŒ ``extradata``”h]”hö)�”}”(hjùBh]”hŒ extradata”…”�”}”(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Œ/pointer to some extra data if requested or NULL”h]”hŒ/pointer to some extra data if requested or NULL”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jCh´M«hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjóBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jCh´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ö)�”}”(hj2Ch]”hŒreplaced_transfers”…”�”}”(hj4Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj0Cubah}”(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Œ@transfers that have been replaced and which need to get restored”h]”hŒ@transfers that have been replaced and which need to get restored”…”�”}”(hjKCh²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¬hjHCubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj,Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jGCh´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ö)�”}”(hjlCh]”hŒreplaced_after”…”�”}”(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Œ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ñhjfCubeh}”(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ÑCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍCh´M°hjÎCubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj²Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÍCh´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ñCh]”hŒinserted_transfers”…”�”}”(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Œ^array of spi_transfers of array-size **inserted**, that have been replacing replaced_transfers”h]”(hŒ%array of spi_transfers of array-size ”…”�”}”(hj Dh²hh³Nh´Nubj‰)�”}”(hŒ **inserted**”h]”hŒinserted”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj DubhŒ-, that have been replacing replaced_transfers”…”�”}”(hj Dh²hh³Nh´Nubeh}”(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¶Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjnBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubhÌ)�”}”(hŒ**Note**”h]”j‰)�”}”(hjEDh]”hŒNote”…”�”}”(hjGDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjCDubah}”(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”…”�”}”(hjcDh²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”…”�”}”(hjuDh²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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj§Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj£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”…”�”}”(hjÈDh²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Ùubj2)�”}”(hŒL(struct spi_device *spi, struct spi_transfer *xfers, unsigned int num_xfers)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjäDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjàDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàDubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÿDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jEŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjÊDsbŒc.spi_sync_transfer”†”asbuh1hhjàDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàDubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj0Eh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjàDubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj=Eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjàDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÜDubj8)�”}”(hŒstruct spi_transfer *xfers”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjVEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjREubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjREubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hjtEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjqEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jvEŒmodname”NŒ classname”Njujx)�”}”j{]”jEŒc.spi_sync_transfer”†”asbuh1hhjREubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjREubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjREubj*)�”}”(hŒxfers”h]”hŒxfers”…”�”}”(hj­Eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjREubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÜDubj8)�”}”(hŒunsigned int num_xfers”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÆEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÂEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂEubjú)�”}”(hŒint”h]”hŒint”…”�”}”(hjâEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÂEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂEubj*)�”}”(hŒ num_xfers”h]”hŒ num_xfers”…”�”}”(hjþEh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÂEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÜDubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj£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”…”�”}”(hj(Fh²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&]”jxjjyj@Fjzj@Fj{‰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‰)�”}”(hjJFh]”hŒ Parameters”…”�”}”(hjLFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjHFubah}”(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ÝhjDFubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjiFh]”hŒstruct spi_device *spi”…”�”}”(hjkFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjgFubah}”(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ÚhjcFubjò)�”}”(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ÚhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjcFubeh}”(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ö)�”}”(hjÛFh]”hŒunsigned int num_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Œ!Number of items in the xfer array”h]”hŒ!Number of items in the xfer array”…”�”}”(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`Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjDFubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjGh]”hŒContext”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjGubah}”(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ÞhjDFubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(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ÝhjDFubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj=Gh]”hŒ Description”…”�”}”(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ßhjDFubhÌ)�”}”(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.”…”�”}”(hjSGh²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ÞhjDFubhÌ)�”}”(hŒ+For more specific semantics see spi_sync().”h]”hŒ+For more specific semantics see spi_sync().”…”�”}”(hjbGh²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àhjDFubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjsGh]”hŒReturn”…”�”}”(hjuGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjqGubah}”(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âhjDFubhÌ)�”}”(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ãhjDFubeh}”(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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj¸Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj´Gh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mñubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´Gh²hh³jÆGh´Mñubj$)�”}”(hŒ spi_write”h]”j*)�”}”(hŒ spi_write”h]”hŒ spi_write”…”�”}”(hjÙGh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÕGubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj´Gh²hh³jÆGh´Mñubj2)�”}”(hŒ5(struct spi_device *spi, const void *buf, size_t len)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjõGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjñGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñGubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jHŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjÛGsbŒ c.spi_write”†”asbuh1hhjñGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñGubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjAHh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjñGubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjNHh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjñGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjíGubj8)�”}”(hŒconst void *buf”h]”(j)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjgHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjcHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjcHubjú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjcHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjcHubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjŸHh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjcHubj*)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj¬Hh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjcHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjíGubj8)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j*)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÈHh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÅHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jÊHŒmodname”NŒ classname”Njujx)�”}”j{]”j/HŒ c.spi_write”†”asbuh1hhjÁHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁHubj*)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjôHh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÁHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjíGubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj´Gh²hh³jÆGh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj°Gh²hh³jÆGh´Mñubah}”(h]”j«Gah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jÆGh´Mñhj­Gh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒSPI synchronous write”h]”hŒSPI synchronous write”…”�”}”(hjIh²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ñhjIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj­Gh²hh³jÆGh´Mñubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj6Ijzj6Ij{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXP**Parameters** ``struct spi_device *spi`` device to which data will be written ``const void *buf`` data buffer ``size_t len`` data buffer size **Context** can sleep **Description** This function writes the buffer **buf**. Callable only from contexts that can sleep. **Return** zero on success, else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj@Ih]”hŒ Parameters”…”�”}”(hjBIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj>Iubah}”(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:IubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ@``struct spi_device *spi`` device to which data will be written ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hj_Ih]”hŒstruct spi_device *spi”…”�”}”(hjaIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj]Iubah}”(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òhjYIubjò)�”}”(hhh]”hÌ)�”}”(hŒ$device to which data will be written”h]”hŒ$device to which data will be written”…”�”}”(hjxIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jtIh´MòhjuIubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjYIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jtIh´MòhjVIubjÒ)�”}”(hŒ ``const void *buf`` data buffer ”h]”(jØ)�”}”(hŒ``const void *buf``”h]”hö)�”}”(hj˜Ih]”hŒconst void *buf”…”�”}”(hjšIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj–Iubah}”(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’Iubjò)�”}”(hhh]”hÌ)�”}”(hŒ data buffer”h]”hŒ data buffer”…”�”}”(hj±Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j­Ih´Móhj®Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj’Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j­Ih´MóhjVIubjÒ)�”}”(hŒ ``size_t len`` data buffer size ”h]”(jØ)�”}”(hŒ``size_t len``”h]”hö)�”}”(hjÑIh]”hŒ size_t len”…”�”}”(hjÓIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÏIubah}”(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ËIubjò)�”}”(hhh]”hÌ)�”}”(hŒdata buffer size”h]”hŒdata buffer size”…”�”}”(hjêIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jæIh´MôhjçIubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjËIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jæIh´MôhjVIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj:IubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj Jh]”hŒContext”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj Jubah}”(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:IubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj"Jh²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:IubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj3Jh]”hŒ Description”…”�”}”(hj5Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1Jubah}”(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:IubhÌ)�”}”(hŒTThis function writes the buffer **buf**. Callable only from contexts that can sleep.”h]”(hŒ This function writes the buffer ”…”�”}”(hjIJh²hh³Nh´Nubj‰)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjQJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjIJubhŒ-. Callable only from contexts that can sleep.”…”�”}”(hjIJh²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:IubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjlJh]”hŒReturn”…”�”}”(hjnJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjjJubah}”(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:IubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hj‚Jh²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:Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_read (C function)”Œ c.spi_read”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj:Lubah}”(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 hj6Lubjò)�”}”(hhh]”hÌ)�”}”(hŒ#device from which data will be read”h]”hŒ#device from which data will be read”…”�”}”(hjULh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jQLh´M hjRLubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj6Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jQLh´M hj3LubjÒ)�”}”(hŒ``void *buf`` data buffer ”h]”(jØ)�”}”(hŒ ``void *buf``”h]”hö)�”}”(hjuLh]”hŒ void *buf”…”�”}”(hjwLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjsLubah}”(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 hjoLubjò)�”}”(hhh]”hÌ)�”}”(hŒ data buffer”h]”hŒ data buffer”…”�”}”(hjŽLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŠLh´M hj‹Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjoLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jŠLh´M hj3LubjÒ)�”}”(hŒ ``size_t len`` data buffer size ”h]”(jØ)�”}”(hŒ``size_t len``”h]”hö)�”}”(hj®Lh]”hŒ size_t len”…”�”}”(hj°Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj¬Lubah}”(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¨Lubjò)�”}”(hhh]”hÌ)�”}”(hŒdata buffer size”h]”hŒdata buffer size”…”�”}”(hjÇLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÃLh´M hjÄLubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¨Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÃLh´M hj3Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjLubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjéLh]”hŒContext”…”�”}”(hjëLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjçLubah}”(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 hjLubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjÿLh²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 hjLubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjMh]”hŒ Description”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjLubhÌ)�”}”(hŒSThis function reads the buffer **buf**. Callable only from contexts that can sleep.”h]”(hŒThis function reads the buffer ”…”�”}”(hj&Mh²hh³Nh´Nubj‰)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj.Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj&MubhŒ-. Callable only from contexts that can sleep.”…”�”}”(hj&Mh²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 hjLubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjIMh]”hŒReturn”…”�”}”(hjKMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjGMubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MhjLubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(hj_Mh²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´MhjLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_w8r8 (C function)”Œ c.spi_w8r8”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ1ssize_t spi_w8r8 (struct spi_device *spi, u8 cmd)”h]”jû)�”}”(hŒ0ssize_t spi_w8r8(struct spi_device *spi, u8 cmd)”h]”(h)�”}”(hhh]”j*)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj‘Mh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjŽMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j“MŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒspi_w8r8”sbŒ c.spi_w8r8”†”asbuh1hhjŠMh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´M$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠMh²hh³j²Mh´M$ubj$)�”}”(hŒspi_w8r8”h]”j*)�”}”(hj¯Mh]”hŒspi_w8r8”…”�”}”(hjÅMh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÁMubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjŠMh²hh³j²Mh´M$ubj2)�”}”(hŒ (struct spi_device *spi, u8 cmd)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjàMh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÜMubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜMubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjþMh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjûMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jNŒmodname”NŒ classname”Njujx)�”}”j{]”j­MŒ c.spi_w8r8”†”asbuh1hhjÜMubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜMubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj*Nh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÜMubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj7Nh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÜMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjØMubj8)�”}”(hŒu8 cmd”h]”(h)�”}”(hhh]”j*)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjSNh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjPNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jUNŒmodname”NŒ classname”Njujx)�”}”j{]”j­MŒ c.spi_w8r8”†”asbuh1hhjLNubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLNubj*)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjLNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjØMubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjŠMh²hh³j²Mh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj†Mh²hh³j²Mh´M$ubah}”(h]”j�Mah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j²Mh´M$hjƒMh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ2SPI synchronous 8 bit write followed by 8 bit read”h]”hŒ2SPI synchronous 8 bit write followed by 8 bit read”…”�”}”(hj©Nh²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¦Nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjƒMh²hh³j²Mh´M$ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjÁNjzjÁNj{‰j|‰j}‰uh1jïh²hhh·h³jîh´Nubj)�”}”(hXL**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** Callable only from contexts that can sleep. **Return** the (unsigned) eight bit number returned by the device, or else a negative error code.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjËNh]”hŒ Parameters”…”�”}”(hjÍNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÉ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ÅNubjÍ)�”}”(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êNh]”hŒstruct spi_device *spi”…”�”}”(hjìNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjè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´M%hjäNubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÿNh´M%hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjäNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÿNh´M%hjáNubjÒ)�”}”(hŒ:``u8 cmd`` command to be written before data is read back ”h]”(jØ)�”}”(hŒ ``u8 cmd``”h]”hö)�”}”(hj#Oh]”hŒu8 cmd”…”�”}”(hj%Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj!Oubah}”(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&hjOubjò)�”}”(hhh]”hÌ)�”}”(hŒ.command to be written before data is read back”h]”hŒ.command to be written before data is read back”…”�”}”(hjhj(QubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒD``struct spi_device *spi`` device with which data will be exchanged ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjMQh]”hŒstruct spi_device *spi”…”�”}”(hjOQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjKQubah}”(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;hjGQubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjfQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jbQh´M;hjcQubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjGQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jbQh´M;hjDQubjÒ)�”}”(hŒ:``u8 cmd`` command to be written before data is read back ”h]”(jØ)�”}”(hŒ ``u8 cmd``”h]”hö)�”}”(hj†Qh]”hŒu8 cmd”…”�”}”(hjˆQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj„Qubah}”(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€Qubjò)�”}”(hhh]”hÌ)�”}”(hŒ.command to be written before data is read back”h]”hŒ.command to be written before data is read back”…”�”}”(hjŸQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›Qh´M<hjœQubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj€Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j›Qh´M<hjDQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj(QubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjÁQh]”hŒContext”…”�”}”(hjÃQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj¿Qubah}”(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(QubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hj×Qh²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(QubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjèQh]”hŒ Description”…”�”}”(hjêQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjæQubah}”(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(QubhÌ)�”}”(hŒMThe number is returned in wire-order, which is at least sometimes big-endian.”h]”hŒMThe number is returned in wire-order, which is at least sometimes big-endian.”…”�”}”(hjþQh²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(QubhÌ)�”}”(hŒ+Callable only from contexts that can sleep.”h]”hŒ+Callable only from contexts that can sleep.”…”�”}”(hj Rh²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´MAhj(QubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjRh]”hŒReturn”…”�”}”(hj Rh²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´MChj(QubhÌ)�”}”(hŒXthe (unsigned) sixteen bit number returned by the device, or else a negative error code.”h]”hŒXthe (unsigned) sixteen bit number returned by the device, or else a negative error code.”…”�”}”(hj4Rh²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´MDhj(Qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³jîh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_w8r16be (C function)”Œ c.spi_w8r16be”hNt”auh1jÝhh·h²hh³jîh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ4ssize_t spi_w8r16be (struct spi_device *spi, u8 cmd)”h]”jû)�”}”(hŒ3ssize_t spi_w8r16be(struct spi_device *spi, u8 cmd)”h]”(h)�”}”(hhh]”j*)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjfRh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjcRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jhRŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒ spi_w8r16be”sbŒ c.spi_w8r16be”†”asbuh1hhj_Rh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_Rh²hh³j‡Rh´MSubj$)�”}”(hŒ spi_w8r16be”h]”j*)�”}”(hj„Rh]”hŒ spi_w8r16be”…”�”}”(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´MSubj2)�”}”(hŒ (struct spi_device *spi, u8 cmd)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjµRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj±Rubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±Rubh)�”}”(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”jqŒ reftarget”jÕRŒmodname”NŒ classname”Njujx)�”}”j{]”j‚RŒ c.spi_w8r16be”†”asbuh1hhj±Rubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±Rubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÿRh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj±Rubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj±Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj­Rubj8)�”}”(hŒu8 cmd”h]”(h)�”}”(hhh]”j*)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj(Sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj%Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j*SŒmodname”NŒ classname”Njujx)�”}”j{]”j‚RŒ c.spi_w8r16be”†”asbuh1hhj!Subj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!Subj*)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjTSh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj!Subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj­Rubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj_Rh²hh³j‡Rh´MSubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj[Rh²hh³j‡Rh´MSubah}”(h]”jVRah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j‡Rh´MShjXRh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ>SPI 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´MShj{Sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjXRh²hh³j‡Rh´MSubeh}”(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´MWhjš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´MThj¹Subjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjØSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÔSh´MThjÕSubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¹Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÔSh´MThj¶SubjÒ)�”}”(hŒ:``u8 cmd`` command to be written before data is read back ”h]”(jØ)�”}”(hŒ ``u8 cmd``”h]”hö)�”}”(hjøSh]”hŒu8 cmd”…”�”}”(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´MUhjòSubjò)�”}”(hhh]”hÌ)�”}”(hŒ.command to be written before data is read back”h]”hŒ.command to be written before data is read back”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j Th´MUhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjòSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j Th´MUhj¶Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjšSubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj3Th]”hŒContext”…”�”}”(hj5Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj1Tubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MWhjšSubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjITh²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´MVhjšSubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjZTh]”hŒ Description”…”�”}”(hj\Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjXTubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´MXhjš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.”…”�”}”(hjpTh²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´MWhjšSubhÌ)�”}”(hŒ+Callable only from contexts that can sleep.”h]”hŒ+Callable only from contexts that can sleep.”…”�”}”(hjTh²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´MZhjš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´M\hjš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´M]hjš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”…”�”}”(hjÕTh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÑTh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/spi:46: ./include/linux/spi/spi.h”h´Mcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑTh²hh³jâTh´Mcubj$)�”}”(hŒspi_board_info”h]”j*)�”}”(hjÏTh]”hŒspi_board_info”…”�”}”(hjõTh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjñTubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÑTh²hh³jâTh´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÍTh²hh³jâTh´Mcubah}”(h]”jÈTah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jâTh´MchjÊTh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ(board-specific template for a SPI device”h]”hŒ(board-specific template for a SPI device”…”�”}”(hjUh²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~hjUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÊTh²hh³jâTh´Mcubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jxjjyj/Ujzj/Uj{‰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”…”�”}”(hj;Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj7UubhŒ:”…”�”}”(hj7Uh²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‚hj3Uubj¤)�”}”(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; };”…”�”}”hjTUsbah}”(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„hj3UubhÌ)�”}”(hŒ **Members**”h]”j‰)�”}”(hjeUh]”hŒMembers”…”�”}”(hjgUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjcUubah}”(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�hj3UubjÍ)�”}”(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.”…”�”}”(hjÖUh²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ÓUubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj·Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÒUh´M‚hj{UubjÒ)�”}”(hŒ)``swnode`` Software node for the device. ”h]”(jØ)�”}”(hŒ ``swnode``”h]”hö)�”}”(hj÷Uh]”hŒswnode”…”�”}”(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ŒSoftware node for the device.”h]”hŒSoftware node for the device.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j Vh´Mƒhj Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjñUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j Vh´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ö)�”}”(hj0Vh]”hŒcontroller_data”…”�”}”(hj2Vh²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Œ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.”…”�”}”(hjIVh²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„hjFVubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj*Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jEVh´M…hj{UubjÒ)�”}”(hŒG``irq`` Initializes spi_device.irq; depends on how the board is wired. ”h]”(jØ)�”}”(hŒ``irq``”h]”hö)�”}”(hjjVh]”hŒirq”…”�”}”(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Œ>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³jVh´M†hj€Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjdVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jVh´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ö)�”}”(hjÝVh]”hŒbus_num”…”�”}”(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Œ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.”…”�”}”(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ŒW``chip_select`` Initializes spi_device.chip_select; depends on how the board is wired. ”h]”(jØ)�”}”(hŒ``chip_select``”h]”hö)�”}”(hjWh]”hŒ chip_select”…”�”}”(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Œ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.”…”�”}”(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ŒÂ``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ö)�”}”(hjQWh]”hŒmode”…”�”}”(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Œ¹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.”…”�”}”(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{Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj3Uubeh}”(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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjáWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÝWh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝWh²hh³jïWh´MHubj$)�”}”(hŒspi_register_board_info”h]”j*)�”}”(hŒspi_register_board_info”h]”hŒspi_register_board_info”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjþWubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÝWh²hh³jïWh´MHubj2)�”}”(hŒ/(struct spi_board_info const *info, unsigned n)”h]”(j8)�”}”(hŒ!struct spi_board_info const *info”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubh)�”}”(hhh]”j*)�”}”(hŒspi_board_info”h]”hŒspi_board_info”…”�”}”(hjXŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjXsbŒc.spi_register_board_info”†”asbuh1hhjXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubj)�”}”(hjiHh]”hŒconst”…”�”}”(hjjXh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjXubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj…Xh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjXubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj’Xh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjXubj8)�”}”(hŒ unsigned n”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj«Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj§Xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§Xubj*)�”}”(hj5h]”hŒn”…”�”}”(hjÇXh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj§Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjXubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjÝWh²hh³jïWh´MHubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÙWh²hh³jïWh´MHubah}”(h]”jÔWah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jïWh´MHhjÖWh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ®ister SPI devices for a given board”h]”hŒ®ister SPI devices for a given board”…”�”}”(hjðXh²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´MHhjíXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÖWh²hh³jïWh´MHubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjYjzjYj{‰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‰)�”}”(hjYh]”hŒ Parameters”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MLhj YubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒ@``struct spi_board_info const *info`` array of chip descriptors ”h]”(jØ)�”}”(hŒ%``struct spi_board_info const *info``”h]”hö)�”}”(hj1Yh]”hŒ!struct spi_board_info const *info”…”�”}”(hj3Yh²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´MIhj+Yubjò)�”}”(hhh]”hÌ)�”}”(hŒarray of chip descriptors”h]”hŒarray of chip descriptors”…”�”}”(hjJYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jFYh´MIhjGYubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj+Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jFYh´MIhj(YubjÒ)�”}”(hŒ1``unsigned n`` how many descriptors are provided ”h]”(jØ)�”}”(hŒ``unsigned n``”h]”hö)�”}”(hjjYh]”hŒ unsigned n”…”�”}”(hjlYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjhYubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:49: ./drivers/spi/spi.c”h´MJhjdYubjò)�”}”(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³jYh´MJhj€Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjdYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jYh´MJhj(Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj YubhÌ)�”}”(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´MLhj YubhÌ)�”}”(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´MKhj YubhÌ)�”}”(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:49: ./drivers/spi/spi.c”h´MMhj YubhÌ)�”}”(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.”…”�”}”(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´MLhj YubhÌ)�”}”(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ñ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´MRhj YubhÌ)�”}”(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.”…”�”}”(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´MVhj YubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjZh]”hŒReturn”…”�”}”(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´MYhj YubhÌ)�”}”(hŒ,zero on success, else a negative error code.”h]”hŒ,zero on success, else a negative error code.”…”�”}”(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´MZhj Yubeh}”(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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjVZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjRZh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRZh²hh³jdZh´M�ubj$)�”}”(hŒ__spi_register_driver”h]”j*)�”}”(hŒ__spi_register_driver”h]”hŒ__spi_register_driver”…”�”}”(hjwZh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjsZubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjRZh²hh³jdZh´M�ubj2)�”}”(hŒ/(struct module *owner, struct spi_driver *sdrv)”h]”(j8)�”}”(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”jqŒ reftarget”j³ZŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjyZsbŒc.__spi_register_driver”†”asbuh1hhj�Zubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Zubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjßZh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj�Zubj*)�”}”(hŒowner”h]”hŒowner”…”�”}”(hjìZh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj�Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj‹Zubj8)�”}”(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Œ ”…”�”}”(hj[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)hj [ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j%[Œmodname”NŒ classname”Njujx)�”}”j{]”jÍZŒc.__spi_register_driver”†”asbuh1hhj[ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjO[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”ˆjAjBuh1j7hj‹Zubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjRZh²hh³jdZh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjNZh²hh³jdZh´M�ubah}”(h]”jIZah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jdZh´M�hjKZh²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&]”uh1jWhjKZh²hh³jdZh´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õ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 driver to register”h]”hŒ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¾[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ˆhj9\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´M“hj¢[ubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjb\h]”hŒReturn”…”�”}”(hjd\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.”…”�”}”(hjx\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”jqŒ reftarget”jÈ\Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒ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Ýubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(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”jqŒ reftarget”jA]Œmodname”NŒ classname”Njujx)�”}”j{]”jâ\Œc.spi_alloc_device”†”asbuh1hhj]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjk]h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj]ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjx]h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj]ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj£\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”…”�”}”(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Œ **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”…”�”}”(hj4^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‰)�”}”(hjE^h]”hŒ Description”…”�”}”(hjG^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjC^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.”…”�”}”(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Œ **Return**”h]”j‰)�”}”(hj{^h]”hŒReturn”…”�”}”(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Œ%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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀ^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj¼^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¾ubj2)�”}”(hŒ(struct spi_device *spi)”h]”j8)�”}”(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”jqŒ reftarget”j_Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjã^sbŒc.spi_add_device”†”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Œspi”h]”hŒspi”…”�”}”(hjV_h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjù^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjõ^ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj¼^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‰)�”}”(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Œ‚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.”…”�”}”(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Œ'0 on success; negative errno on failure”h]”hŒ'0 on success; negative errno on failure”…”�”}”(hj9`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”…”�”}”(hjh`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjd`h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÖubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd`h²hh³ju`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”jqŒ reftarget”j‰`Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒspi_new_device”sbŒc.spi_new_device”†”asbuh1hhjd`h²hh³ju`h´MÖubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd`h²hh³ju`h´MÖubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¶`h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjd`h²hh³ju`h´MÖubj$)�”}”(hŒspi_new_device”h]”j*)�”}”(hj¥`h]”hŒspi_new_device”…”�”}”(hjÇ`h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÃ`ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjd`h²hh³ju`h´MÖubj2)�”}”(hŒ:(struct spi_controller *ctlr, struct spi_board_info *chip)”h]”(j8)�”}”(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”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjý`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jaŒmodname”NŒ classname”Njujx)�”}”j{]”j£`Œc.spi_new_device”†”asbuh1hhjÞ`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞ`ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj,ah²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÞ`ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj9ah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÞ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÚ`ubj8)�”}”(hŒstruct spi_board_info *chip”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjRah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjNaubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNaubh)�”}”(hhh]”j*)�”}”(hŒspi_board_info”h]”hŒspi_board_info”…”�”}”(hjpah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjmaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jraŒmodname”NŒ classname”Njujx)�”}”j{]”j£`Œc.spi_new_device”†”asbuh1hhjNaubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNaubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjœah²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjNaubj*)�”}”(hŒchip”h]”hŒchip”…”�”}”(hj©ah²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjNaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÚ`ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjd`h²hh³ju`h´MÖubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj``h²hh³ju`h´MÖubah}”(h]”j[`ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³ju`h´MÖhj]`h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒinstantiate one new SPI device”h]”hŒinstantiate one new SPI device”…”�”}”(hjÓah²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Ðah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj]`h²hh³ju`h´MÖubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjëajzjëaj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX8**Parameters** ``struct spi_controller *ctlr`` Controller to which device is connected ``struct spi_board_info *chip`` Describes the SPI device **Context** can sleep **Description** On typical mainboards, this is purely internal; and it's not needed after board init creates the hard-wired devices. Some development platforms may not be able to use spi_register_board_info though, and this is exported so that for example a USB or parport based adapter driver could add devices (which it would learn about out-of-band). **Return** the new device, or NULL.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjõah]”hŒ Parameters”…”�”}”(hj÷ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjóaubah}”(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ïaubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒH``struct spi_controller *ctlr`` Controller to which device is connected ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjbh]”hŒstruct spi_controller *ctlr”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M×hjbubjò)�”}”(hhh]”hÌ)�”}”(hŒ'Controller to which device is connected”h]”hŒ'Controller to which device is connected”…”�”}”(hj-bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j)bh´M×hj*bubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j)bh´M×hj bubjÒ)�”}”(hŒ9``struct spi_board_info *chip`` Describes the SPI device ”h]”(jØ)�”}”(hŒ``struct spi_board_info *chip``”h]”hö)�”}”(hjMbh]”hŒstruct spi_board_info *chip”…”�”}”(hjObh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjKbubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MØhjGbubjò)�”}”(hhh]”hÌ)�”}”(hŒDescribes the SPI device”h]”hŒDescribes the SPI device”…”�”}”(hjfbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jbbh´MØhjcbubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjGbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jbbh´MØhj bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjïaubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjˆbh]”hŒContext”…”�”}”(hjŠbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj†bubah}”(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ïaubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjžbh²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ïaubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj¯bh]”hŒ Description”…”�”}”(hj±bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj­bubah}”(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ïaubhÌ)�”}”(hXROn typical mainboards, this is purely internal; and it's not needed after board init creates the hard-wired devices. Some development platforms may not be able to use spi_register_board_info though, and this is exported so that for example a USB or parport based adapter driver could add devices (which it would learn about out-of-band).”h]”hXTOn typical mainboards, this is purely internal; and it’s not needed after board init creates the hard-wired devices. Some development platforms may not be able to use spi_register_board_info though, and this is exported so that for example a USB or parport based adapter driver could add devices (which it would learn about out-of-band).”…”�”}”(hjÅbh²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ïaubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjÖbh]”hŒReturn”…”�”}”(hjØbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÔbubah}”(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ïaubhÌ)�”}”(hŒthe new device, or NULL.”h]”hŒthe new device, or NULL.”…”�”}”(hjìbh²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ïaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ"spi_unregister_device (C function)”Œc.spi_unregister_device”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ3void spi_unregister_device (struct spi_device *spi)”h]”jû)�”}”(hŒ2void spi_unregister_device(struct spi_device *spi)”h]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjch²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjch²hh³j)ch´Mubj$)�”}”(hŒspi_unregister_device”h]”j*)�”}”(hŒspi_unregister_device”h]”hŒspi_unregister_device”…”�”}”(hjcsbŒc.spi_unregister_device”†”asbuh1hhjTcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTcubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¤ch²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjTcubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj±ch²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjTcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjPcubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjch²hh³j)ch´Mubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjch²hh³j)ch´Mubah}”(h]”jcah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j)ch´Mhjch²hubjX)�”}”(hhh]”hÌ)�”}”(hŒunregister a single SPI device”h]”hŒunregister a single SPI device”…”�”}”(hjÛch²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Øch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjch²hh³j)ch´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjócjzjócj{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hŒÁ**Parameters** ``struct spi_device *spi`` spi_device to unregister **Description** Start making the passed SPI device vanish. Normally this would be handled by spi_unregister_controller().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjých]”hŒ Parameters”…”�”}”(hjÿch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjûcubah}”(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÷cubjÍ)�”}”(hhh]”jÒ)�”}”(hŒ4``struct spi_device *spi`` spi_device to unregister ”h]”(jØ)�”}”(hŒ``struct spi_device *spi``”h]”hö)�”}”(hjdh]”hŒstruct spi_device *spi”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mhjdubjò)�”}”(hhh]”hÌ)�”}”(hŒspi_device to unregister”h]”hŒspi_device to unregister”…”�”}”(hj5dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j1dh´Mhj2dubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j1dh´Mhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj÷cubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjWdh]”hŒ Description”…”�”}”(hjYdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjUdubah}”(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÷cubhÌ)�”}”(hŒiStart making the passed SPI device vanish. Normally this would be handled by spi_unregister_controller().”h]”hŒiStart making the passed SPI device vanish. Normally this would be handled by spi_unregister_controller().”…”�”}”(hjmdh²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÷cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ*spi_finalize_current_transfer (C function)”Œc.spi_finalize_current_transfer”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ@void spi_finalize_current_transfer (struct spi_controller *ctlr)”h]”jû)�”}”(hŒ?void spi_finalize_current_transfer(struct spi_controller *ctlr)”h]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjœdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj˜dh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”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_finalize_current_transfer”h]”j*)�”}”(hŒspi_finalize_current_transfer”h]”hŒspi_finalize_current_transfer”…”�”}”(hj½dh²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|ubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÙdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÕdubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjædh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕdubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hj÷dh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjôdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jùdŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj¿dsbŒc.spi_finalize_current_transfer”†”asbuh1hhjÕdubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕdubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj%eh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÕdubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj2eh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÕdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÑdubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj˜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Œreport completion of a transfer”h]”hŒreport completion of a transfer”…”�”}”(hj\eh²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|hjYeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj‘dh²hh³jªdh´M|ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjtejzjtej{‰j|‰j}‰uh1jïh²hhh·h³Nh´Nubj)�”}”(hX**Parameters** ``struct spi_controller *ctlr`` the controller reporting completion **Description** Called by SPI drivers using the core transfer_one_message() implementation to notify it that the current interrupt driven transfer has finished and the next one may be scheduled.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hj~eh]”hŒ Parameters”…”�”}”(hj€eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj|eubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M€hjxeubjÍ)�”}”(hhh]”jÒ)�”}”(hŒD``struct spi_controller *ctlr`` the controller reporting completion ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj�eh]”hŒstruct spi_controller *ctlr”…”�”}”(hjŸeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj›eubah}”(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—eubjò)�”}”(hhh]”hÌ)�”}”(hŒ#the controller reporting completion”h]”hŒ#the controller reporting completion”…”�”}”(hj¶eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j²eh´M}hj³eubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj—eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j²eh´M}hj”eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjxeubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjØeh]”hŒ Description”…”�”}”(hjÚeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjÖeubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjxeubhÌ)�”}”(hŒ²Called by SPI drivers using the core transfer_one_message() implementation to notify it that the current interrupt driven transfer has finished and the next one may be scheduled.”h]”hŒ²Called by SPI drivers using the core transfer_one_message() implementation to notify it that the current interrupt driven transfer has finished and the next one may be scheduled.”…”�”}”(hjîeh²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~hjxeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒ#spi_take_timestamp_pre (C function)”Œc.spi_take_timestamp_pre”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒtvoid spi_take_timestamp_pre (struct spi_controller *ctlr, struct spi_transfer *xfer, size_t progress, bool irqs_off)”h]”jû)�”}”(hŒsvoid spi_take_timestamp_pre(struct spi_controller *ctlr, struct spi_transfer *xfer, size_t progress, bool irqs_off)”h]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjfh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mdubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfh²hh³j+fh´Mdubj$)�”}”(hŒspi_take_timestamp_pre”h]”j*)�”}”(hŒspi_take_timestamp_pre”h]”hŒspi_take_timestamp_pre”…”�”}”(hj>f•h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj:fubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjfh²hh³j+fh´Mdubj2)�”}”(hŒX(struct spi_controller *ctlr, struct spi_transfer *xfer, size_t progress, bool irqs_off)”h]”(j8)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjZfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjVfubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVfubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjxfh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjufubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jzfŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj@fsbŒc.spi_take_timestamp_pre”†”asbuh1hhjVfubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVfubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¦fh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjVfubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj³fh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjVfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjRfubj8)�”}”(hŒstruct spi_transfer *xfer”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÌfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÈfubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈfubh)�”}”(hhh]”j*)�”}”(hŒ spi_transfer”h]”hŒ spi_transfer”…”�”}”(hjêfh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjçfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jìfŒmodname”NŒ classname”Njujx)�”}”j{]”j”fŒc.spi_take_timestamp_pre”†”asbuh1hhjÈfubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈfubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÈfubj*)�”}”(hŒxfer”h]”hŒxfer”…”�”}”(hj#gh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÈfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjRfubj8)�”}”(hŒsize_t progress”h]”(h)�”}”(hhh]”j*)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj?gh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjkubjÒ)�”}”(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“hjzkubjò)�”}”(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ñhjzkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j•kh´M“hj>kubjÒ)�”}”(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Ò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”hj>kubjÒ)�”}”(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òkh]”hŒ bool irqs_off”…”�”}”(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Œ>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.”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jlh´M•hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjìkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jlh´M•hj>kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj"kubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hj-lh]”hŒ Description”…”�”}”(hj/lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj+lubah}”(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 ”…”�”}”(hjClh²hh³Nh´Nubj‰)�”}”(hŒ**tx**”h]”hŒtx”…”�”}”(hjKlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjClubhŒ? exceeds or is equal to the requested word will be timestamped.”…”�”}”(hjClh²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”jqŒ reftarget”j¥lŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒ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Òlh²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”…”�”}”(hjãlh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjßlubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj€lh²hh³j‘lh´Méubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjþlh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjúlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúlubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jmŒmodname”NŒ classname”Njujx)�”}”j{]”j¿lŒc.spi_get_next_queued_message”†”asbuh1hhjúlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúlubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjHmh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjúlubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjUmh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjúlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjölubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj€lh²hh³j‘lh´Méubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj|lh²hh³j‘lh´Méubah}”(h]”jwlah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j‘lh´Méhjylh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ-called by driver to check for queued messages”h]”hŒ-called by driver to check for queued messages”…”�”}”(hjmh²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&]”uh1jWhjylh²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”…”�”}”(hjÙmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÕmh´MëhjÖmubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjºmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÕmh´Mëhj·mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj›mubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjûmh]”hŒ Description”…”�”}”(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›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.”…”�”}”(hjnh²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ˆhj 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Œ?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.”…”�”}”(hj8nh²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]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjgnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjcnh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M( ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjcnh²hh³junh´M( 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#hjcnh²hh³junh´M( ubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(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”jqŒ reftarget”jÄnŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjŠnsbŒc.spi_finalize_current_message”†”asbuh1hhj nubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjânh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj nubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjðnh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj nubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjýnh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjœnubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjcnh²hh³junh´M( ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj_nh²hh³junh´M( ubah}”(h]”jZnah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³junh´M( hj\nh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒthe current message is complete”h]”hŒthe current message is complete”…”�”}”(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´M( hj$oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj\nh²hh³junh´M( ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj?ojzj?oj{‰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‰)�”}”(hjIoh]”hŒ Parameters”…”�”}”(hjKoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjGoubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M, hjCoubjÍ)�”}”(hhh]”jÒ)�”}”(hŒH``struct spi_controller *ctlr`` the controller to return the message to ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hjhoh]”hŒstruct spi_controller *ctlr”…”�”}”(hjjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjfoubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M) hjboubjò)�”}”(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´M) hj~oubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjboubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j}oh´M) hj_oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjCoubhÌ)�”}”(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´M+ hjCoubhÌ)�”}”(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´M* hjCoubeh}”(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èoh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjäoh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MG ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäoh²hh³jõoh´MG ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j pŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒspi_new_ancillary_device”sbŒc.spi_new_ancillary_device”†”asbuh1hhjäoh²hh³jõoh´MG ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäoh²hh³jõoh´MG ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj6ph²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjäoh²hh³jõoh´MG ubj$)�”}”(hŒspi_new_ancillary_device”h]”j*)�”}”(hj%ph]”hŒspi_new_ancillary_device”…”�”}”(hjGph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjCpubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjäoh²hh³jõoh´MG ubj2)�”}”(hŒ((struct spi_device *spi, u8 chip_select)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjbph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj^pubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoph²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”jqŒ reftarget”j‚pŒmodname”NŒ classname”Njujx)�”}”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”ˆjAjBuh1j7hjZpubj8)�”}”(hŒu8 chip_select”h]”(h)�”}”(hhh]”j*)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjÕph²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÒpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j×pŒmodname”NŒ classname”Njujx)�”}”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*)�”}”(hŒ chip_select”h]”hŒ chip_select”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÎpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjZpubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjäoh²hh³jõoh´MG ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjàoh²hh³jõoh´MG ubah}”(h]”jÛoah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jõoh´MG hjÝoh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒRegister ancillary SPI device”h]”hŒRegister ancillary SPI device”…”�”}”(hj+qh²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´MG hj(qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÝoh²hh³jõoh´MG ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjCqjzjCqj{‰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** 0 on success; negative errno on failure”h]”(hÌ)�”}”(hŒ**Parameters**”h]”j‰)�”}”(hjMqh]”hŒ Parameters”…”�”}”(hjOqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjKqubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MK hjGqubjÍ)�”}”(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ö)�”}”(hjlqh]”hŒstruct spi_device *spi”…”�”}”(hjnqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MH hjfqubjò)�”}”(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´MH hj‚qubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjfqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�qh´MH hjcqubjÒ)�”}”(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´MI 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´MI hj»qubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjŸqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jºqh´MI hjcqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjGqubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjàqh]”hŒ Description”…”�”}”(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´MK hjGqubhÌ)�”}”(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öqh²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´MJ hjGqubhÌ)�”}”(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.”…”�”}”(hjrh²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´MM hjGqubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjrh]”hŒReturn”…”�”}”(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´MO hjGqubhÌ)�”}”(hŒ'0 on success; negative errno on failure”h]”hŒ'0 on success; negative errno on failure”…”�”}”(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´MP hjGqubeh}”(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&]”uh1jhjWrh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M… ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjirh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWrh²hh³jhrh´M… ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjzrh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjwrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j|rŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒdevm_spi_new_ancillary_device”sbŒc.devm_spi_new_ancillary_device”†”asbuh1hhjWrh²hh³jhrh´M… ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWrh²hh³jhrh´M… ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj©rh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjWrh²hh³jhrh´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#hjWrh²hh³jhrh´M… ubj2)�”}”(hŒ((struct spi_device *spi, u8 chip_select)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÕrh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÑrubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjârh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑrubh)�”}”(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”jqŒ reftarget”jõrŒmodname”NŒ classname”Njujx)�”}”j{]”j–rŒc.devm_spi_new_ancillary_device”†”asbuh1hhjÑrubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑrubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÑrubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj,sh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÑrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÍrubj8)�”}”(hŒu8 chip_select”h]”(h)�”}”(hhh]”j*)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjHsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjEsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jJsŒmodname”NŒ classname”Njujx)�”}”j{]”j–rŒc.devm_spi_new_ancillary_device”†”asbuh1hhjAsubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAsubj*)�”}”(hŒ chip_select”h]”hŒ chip_select”…”�”}”(hjtsh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjAsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÍrubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjWrh²hh³jhrh´M… ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjSrh²hh³jhrh´M… ubah}”(h]”jNrah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jhrh´M… hjPrh²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&]”uh1jWhjPrh²hh³jhrh´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ö)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M† hjÙsubjò)�”}”(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øsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jôsh´M† hjõsubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÙsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jôsh´M† hjÖsubjÒ)�”}”(hŒ7``u8 chip_select`` Chip Select of the ancillary device ”h]”(jØ)�”}”(hŒ``u8 chip_select``”h]”hö)�”}”(hjth]”hŒu8 chip_select”…”�”}”(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Œ#Chip Select of the ancillary device”h]”hŒ#Chip Select of the ancillary device”…”�”}”(hj1th²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‡ hjÖsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjºsubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjSth]”hŒ Description”…”�”}”(hjUth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjQtubah}”(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.”…”�”}”(hjith²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.”…”�”}”(hjxth²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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjÝth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÙth²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÅ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙth²hh³jëth´MÅ ubj$)�”}”(hŒacpi_spi_count_resources”h]”j*)�”}”(hŒacpi_spi_count_resources”h]”hŒacpi_spi_count_resources”…”�”}”(hjþth²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjútubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjÙth²hh³jëth´MÅ ubj2)�”}”(hŒ(struct acpi_device *adev)”h]”j8)�”}”(hŒstruct acpi_device *adev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjuubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuubh)�”}”(hhh]”j*)�”}”(hŒ acpi_device”h]”hŒ acpi_device”…”�”}”(hj8uh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj5uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j:uŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjusbŒc.acpi_spi_count_resources”†”asbuh1hhjuubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjfuh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjuubj*)�”}”(hŒadev”h]”hŒadev”…”�”}”(hjsuh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjuubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjÙth²hh³jëth´MÅ ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjÕth²hh³jëth´MÅ ubah}”(h]”jÐtah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jëth´MÅ hjÒth²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Òth²hh³jëth´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ö)�”}”(hjÞuh]”hŒstruct acpi_device *adev”…”�”}”(hjàuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjÜuubah}”(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Øuubjò)�”}”(hhh]”hÌ)�”}”(hŒ ACPI device”h]”hŒ ACPI device”…”�”}”(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Õuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj¹uubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjvh]”hŒReturn”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjvubah}”(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.”…”�”}”(hj/vh²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&]”uh1jhjZvh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MG ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZvh²hh³jkvh´MG ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hj}vh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjzvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jvŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒacpi_spi_device_alloc”sbŒc.acpi_spi_device_alloc”†”asbuh1hhjZvh²hh³jkvh´MG ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZvh²hh³jkvh´MG ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¬vh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjZvh²hh³jkvh´MG 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#hjZvh²hh³jkvh´MG ubj2)�”}”(hŒB(struct spi_controller *ctlr, struct acpi_device *adev, int index)”h]”(j8)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjØvh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÔvubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔvubh)�”}”(hhh]”j*)�”}”(hŒspi_controller”h]”hŒspi_controller”…”�”}”(hjövh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjóvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jøvŒmodname”NŒ classname”Njujx)�”}”j{]”j™vŒc.acpi_spi_device_alloc”†”asbuh1hhjÔvubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔvubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj"wh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÔvubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hj/wh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÔvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÐvubj8)�”}”(hŒstruct acpi_device *adev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjHwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjDwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDwubh)�”}”(hhh]”j*)�”}”(hŒ acpi_device”h]”hŒ acpi_device”…”�”}”(hjfwh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjcwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jhwŒmodname”NŒ classname”Njujx)�”}”j{]”j™vŒc.acpi_spi_device_alloc”†”asbuh1hhjDwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDwubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj’wh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjDwubj*)�”}”(hŒadev”h]”hŒadev”…”�”}”(hjŸwh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjDwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÐvubj8)�”}”(hŒ int index”h]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj¸wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj´wubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´wubj*)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjÔwh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj´wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÐvubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjZvh²hh³jkvh´MG ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjVvh²hh³jkvh´MG ubah}”(h]”jQvah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jkvh´MG hjSvh²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”…”�”}”(hjþwh²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´MG hjûwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjSvh²hh³jkvh´MG ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjxjzjxj{‰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‰)�”}”(hj xh]”hŒ Parameters”…”�”}”(hj"xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MK hjxubjÍ)�”}”(hhh]”(jÒ)�”}”(hŒK``struct spi_controller *ctlr`` controller to which the spi device belongs ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj?xh]”hŒstruct spi_controller *ctlr”…”�”}”(hjAxh²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´MH hj9xubjò)�”}”(hhh]”hÌ)�”}”(hŒ*controller to which the spi device belongs”h]”hŒ*controller to which the spi device belongs”…”�”}”(hjXxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jTxh´MH hjUxubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj9xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jTxh´MH hj6xubjÒ)�”}”(hŒ<``struct acpi_device *adev`` ACPI Device for the spi device ”h]”(jØ)�”}”(hŒ``struct acpi_device *adev``”h]”hö)�”}”(hjxxh]”hŒstruct acpi_device *adev”…”�”}”(hjzxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjvxubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MI hjrxubjò)�”}”(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´MI hjŽxubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjrxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j�xh´MI hj6xubjÒ)�”}”(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´MJ 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”…”�”}”(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 hj6xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjxubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjìxh]”hŒ Description”…”�”}”(hjîxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjêxubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´ML hjxubhÌ)�”}”(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.”…”�”}”(hjyh²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´MK hjxubhÌ)�”}”(hŒ‰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.”h]”hŒ‰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.”…”�”}”(hjyh²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´MN hjxubhÌ)�”}”(hŒ**Note**”h]”j‰)�”}”(hj"yh]”hŒNote”…”�”}”(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´MR hjxubhÌ)�”}”(hŒ!If index is -1, ctlr must be set.”h]”hŒ!If index is -1, ctlr must be set.”…”�”}”(hj8yh²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´MR hjxubhÌ)�”}”(hŒ **Return**”h]”j‰)�”}”(hjIyh]”hŒReturn”…”�”}”(hjKyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjGyubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MT hjxubhÌ)�”}”(hŒ1a pointer to the new device, or ERR_PTR on error.”h]”hŒ1a pointer to the new device, or ERR_PTR on error.”…”�”}”(hj_yh²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´MT hjxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j~hh·h²hh³Nh´NubjÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jêŒspi_target_abort (C function)”Œc.spi_target_abort”hNt”auh1jÝhh·h²hh³Nh´Nubjð)�”}”(hhh]”(jõ)�”}”(hŒ-int spi_target_abort (struct spi_device *spi)”h]”jû)�”}”(hŒ,int spi_target_abort(struct spi_device *spi)”h]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjŽyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjŠyh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´Mó ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠyh²hh³jœyh´Mó ubj$)�”}”(hŒspi_target_abort”h]”j*)�”}”(hŒspi_target_abort”h]”hŒspi_target_abort”…”�”}”(hj¯yh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj«yubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjŠyh²hh³jœyh´Mó ubj2)�”}”(hŒ(struct spi_device *spi)”h]”j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjËyh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÇyubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇyubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjéyh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjæyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jëyŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj±ysbŒc.spi_target_abort”†”asbuh1hhjÇyubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇyubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÇyubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj$zh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÇyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjÃyubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjŠyh²hh³jœyh´Mó ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj†yh²hh³jœyh´Mó ubah}”(h]”j�yah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jœyh´Mó hjƒyh²hubjX)�”}”(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”…”�”}”(hjNzh²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ó hjKzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjƒyh²hh³jœyh´Mó ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyjfzjzjfzj{‰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‰)�”}”(hjpzh]”hŒ Parameters”…”�”}”(hjrzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjnzubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M÷ hjjzubjÍ)�”}”(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Ìhjjzubeh}”(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ézh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjåzh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MR ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåzh²hh³jözh´MR 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”jqŒ reftarget”j {Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒ__spi_alloc_controller”sbŒc.__spi_alloc_controller”†”asbuh1hhjåzh²hh³jözh´MR ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj){h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåzh²hh³jözh´MR ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj7{h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjåzh²hh³jözh´MR ubj$)�”}”(hŒ__spi_alloc_controller”h]”j*)�”}”(hj&{h]”hŒ__spi_alloc_controller”…”�”}”(hjH{h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjD{ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjåzh²hh³jözh´MR ubj2)�”}”(hŒ4(struct device *dev, unsigned int size, bool target)”h]”(j8)�”}”(hŒstruct device *dev”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Œ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”jqŒ reftarget”jƒ{Œmodname”NŒ classname”Njujx)�”}”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”ˆjAjBuh1j7hj[{ubj8)�”}”(hŒunsigned int size”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÓ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÏ{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏ{ubjú)�”}”(hŒint”h]”hŒint”…”�”}”(hjï{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÏ{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏ{ubj*)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjÏ{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj[{ubj8)�”}”(hŒ bool target”h]”(jú)�”}”(hj(:h]”hŒbool”…”�”}”(hj$|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj |ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1|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”ˆjAjBuh1j7hj[{ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjåzh²hh³jözh´MR ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjázh²hh³jözh´MR ubah}”(h]”jÜzah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jözh´MR hjÞzh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)allocate an SPI host or target controller”h]”hŒ)allocate an SPI host or target controller”…”�”}”(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´MR hjf|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjÞzh²hh³jözh´MR 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´MV 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´MS 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´MS hjÀ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¤|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j¿|h´MS 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´MX 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 ”…”�”}”(hjü|h²hh³Nh´Nubj‰)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjü|ubhŒ. using ALIGN(size, dma_get_cache_alignment()).”…”�”}”(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´MT hjù|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjÝ|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jø|h´MX 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ö)�”}”(hj/}h]”hŒ bool target”…”�”}”(hj1}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´MZ hj)}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”…”�”}”(hjH}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´MY hjE}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj)}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jD}h´MZ hj¡|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj…|ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjk}h]”hŒContext”…”�”}”(hjm}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhji}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´Mb 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´Mg 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´Mh 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”…”�”}”(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_controller”h]”hŒspi_controller”…”�”}”(hj;~h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj8~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”j=~Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqŒ__devm_spi_alloc_controller”sbŒc.__devm_spi_alloc_controller”†”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Œ*”…”�”}”(hjj~h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj~h²hh³j)~h´M  ubj$)�”}”(hŒ__devm_spi_alloc_controller”h]”j*)�”}”(hjY~h]”hŒ__devm_spi_alloc_controller”…”�”}”(hj{~h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjw~ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj~h²hh³j)~h´M  ubj2)�”}”(hŒ4(struct device *dev, unsigned int size, bool target)”h]”(j8)�”}”(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”jqŒ reftarget”j¶~Œmodname”NŒ classname”Njujx)�”}”j{]”jW~Œ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Œ*”…”�”}”(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”ˆjAjBuh1j7hjŽ~ubj8)�”}”(hŒunsigned int size”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubjú)�”}”(hŒint”h]”hŒint”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj*)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjŽ~ubj8)�”}”(hŒ bool target”h]”(jú)�”}”(hj(:h]”hŒbool”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSubj*)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjŽ~ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj~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Œ)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&]”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)�”}”(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”…”�”}”(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ŒF``unsigned int size`` how much zeroed driver-private data to allocate ”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Ì)�”}”(hŒ/how much zeroed driver-private data to allocate”h]”hŒ/how much zeroed driver-private data to allocate”…”�”}”(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ŒX``bool target`` whether to allocate an SPI host (false) or SPI target (true) controller ”h]”(jØ)�”}”(hŒ``bool target``”h]”hö)�”}”(hjO€h]”hŒ bool target”…”�”}”(hjQ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjM€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£ hjI€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”…”�”}”(hjh€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jd€h´M£ hje€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjI€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jd€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‰)�”}”(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êŒ$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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj>�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj:�h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:�h²hh³jL�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#hj:�h²hh³jL�h´M.ubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(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Œ ”…”�”}”(hjˆ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw�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”jqŒ reftarget”j›�Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqja�sbŒc.spi_register_controller”†”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”ˆjAjBuh1j7hjs�ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj:�h²hh³jL�h´M.ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj6�h²hh³jL�h´M.ubah}”(h]”j1�ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jL�h´M.hj3�h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ®ister SPI host or target controller”h]”hŒ®ister 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&]”uh1jWhj3�h²hh³jL�h´M.ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jxjjyj‚jzj‚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‰)�”}”(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´M2hj‚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ö)�”}”(hj?‚h]”hŒstruct spi_controller *ctlr”…”�”}”(hjA‚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´M0hj9‚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()”…”�”}”(hjX‚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/hjU‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj9‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jT‚h´M0hj6‚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ˆ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´M2hj‚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´M1hj‚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´M3hj‚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´M2hj‚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´M6hj‚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Œ]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´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´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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj;ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj7ƒh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÖubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ƒh²hh³jIƒh´MÖubj$)�”}”(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)hjXƒubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj7ƒh²hh³jIƒh´MÖubj2)�”}”(hŒ1(struct device *dev, struct spi_controller *ctlr)”h]”(j8)�”}”(hŒstruct device *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjxƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjtƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtƒ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”jqŒ reftarget”j˜ƒŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj^ƒsbŒc.devm_spi_register_controller”†”asbuh1hhjtƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtƒubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjăh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjtƒubj*)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjуh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjtƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjpƒubj8)�”}”(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”jqŒ reftarget”j „Œmodname”NŒ classname”Njujx)�”}”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Œ*”…”�”}”(hj4„h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjæƒubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjA„h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjæƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjpƒubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj7ƒh²hh³jIƒh´MÖubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj3ƒh²hh³jIƒh´MÖubah}”(h]”j.ƒah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jIƒh´MÖhj0ƒh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ.register managed SPI host or target controller”h]”hŒ.register managed SPI host or target controller”…”�”}”(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Öhjh„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj0ƒh²hh³jIƒ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`` 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´MÚhj‡„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´M×hj¦„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´M×hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¦„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÁ„h´M×hj£„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´MÙhjß„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ñ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”…”�”}”(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Úhj‡„ubhÌ)�”}”(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³Œ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‰)�”}”(hjo…h]”hŒReturn”…”�”}”(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Þ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Œ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´Mzhj �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´Mzhj¼�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj �ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j»�h´Mzhj��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³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‰)�”}”(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Œè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.”…”�”}”(hj0‘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).”…”�”}”(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Œ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.”…”�”}”(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Œ **Context**”h]”j‰)�”}”(hj_‘h]”hŒContext”…”�”}”(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ˆhj��ubhÌ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(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‰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]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjË‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÇ‘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¨ubj2)�”}”(hŒ(struct spi_message *msg)”h]”j8)�”}”(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”jqŒ reftarget”j(’Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjî‘sbŒc.spi_unoptimize_message”†”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Œmsg”h]”hŒmsg”…”�”}”(hja’h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj’ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjÇ‘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‰)�”}”(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Œ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().”…”�”}”(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”…”�”}”(hj0“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”…”�”}”(hjD“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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjs“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjo“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&]”uh1jhjo“h²hh³j�“h´MÚubj$)�”}”(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#hjo“h²hh³j�“h´MÚubj2)�”}”(hŒE(struct device *dev, struct spi_device *spi, struct spi_message *msg)”h]”(j8)�”}”(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”jqŒ reftarget”jГŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj–“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Œ*”…”�”}”(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”ˆjAjBuh1j7hj¨“ubj8)�”}”(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”jqŒ reftarget”jB”Œmodname”NŒ classname”Njujx)�”}”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Œ*”…”�”}”(hjl”h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj”ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjy”h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hj¨“ubj8)�”}”(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”jqŒ reftarget”j²”Œmodname”NŒ classname”Njujx)�”}”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”ˆjAjBuh1j7hj¨“ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjo“h²hh³j�“h´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjk“h²hh³j�“h´MÚubah}”(h]”jf“ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³j�“h´MÚhjh“h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)managed version of spi_optimize_message()”h]”hŒ)managed version of 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&]”uh1jWhjh“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 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‰)�”}”(hj5•h]”hŒ Parameters”…”�”}”(hj7•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj3•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ŒN``struct device *dev`` the device that manages **msg** (usually **spi->dev**) ”h]”(jØ)�”}”(hŒ``struct device *dev``”h]”hö)�”}”(hjT•h]”hŒstruct device *dev”…”�”}”(hjV•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjR•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ÛhjN•ubjò)�”}”(hhh]”hÌ)�”}”(hŒ6the device that manages **msg** (usually **spi->dev**)”h]”(hŒthe device that manages ”…”�”}”(hjm•h²hh³Nh´Nubj‰)�”}”(hŒ**msg**”h]”hŒmsg”…”�”}”(hju•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjm•ubhŒ (usually ”…”�”}”(hjm•h²hh³Nh´Nubj‰)�”}”(hŒ **spi->dev**”h]”hŒspi->dev”…”�”}”(hj‡•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjm•ubhŒ)”…”�”}”(hjm•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ji•h´MÛhjj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjN•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³ji•h´MÛhjK•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ÜhjK•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³jÿ•h´MÝhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjä•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÿ•h´MÝhjK•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌ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/•ubhÌ)�”}”(hŒ**Description**”h]”j‰)�”}”(hjL–h]”hŒ Description”…”�”}”(hjN–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjJ–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Œ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.”…”�”}”(hjb–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_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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj�–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_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´Mñubj2)�”}”(hŒ5(struct spi_device *spi, struct spi_message *message)”h]”(j8)�”}”(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”jqŒ reftarget”jî–Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj´–sbŒ c.spi_async”†”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”ˆjAjBuh1j7hjÆ–ubj8)�”}”(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Œ ”…”�”}”(hjM—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”jqŒ reftarget”j`—Œmodname”NŒ classname”Njujx)�”}”j{]”j—Œ c.spi_async”†”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”ˆjAjBuh1j7hjÆ–ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj�–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Œ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´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`` 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ò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, including completion callback ”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õhj9˜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óhj5˜ubjò)�”}”(hhh]”hÌ)�”}”(hŒ;describes the data transfers, including completion callback”h]”hŒ;describes the data transfers, including completion callback”…”�”}”(hjT˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jP˜h´MóhjQ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj5˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jP˜h´Móhjù—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjÝ—ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjv˜h]”hŒContext”…”�”}”(hjx˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhjt˜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´MhjÝ—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´MhjÝ—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 (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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj6™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj2™h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´M‘ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2™h²hh³jD™h´M‘ubj$)�”}”(hŒspi_sync”h]”j*)�”}”(hŒspi_sync”h]”hŒspi_sync”…”�”}”(hjW™h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjS™ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj2™h²hh³jD™h´M‘ubj2)�”}”(hŒ5(struct spi_device *spi, struct spi_message *message)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjs™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjo™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjo™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”jqŒ reftarget”j“™Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjY™sbŒ c.spi_sync”†”asbuh1hhjo™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjo™ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¿™h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjo™ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjÌ™h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjo™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjk™ubj8)�”}”(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”jqŒ reftarget”jšŒmodname”NŒ classname”Njujx)�”}”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Œ*”…”�”}”(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”ˆjAjBuh1j7hjk™ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj2™h²hh³jD™h´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhj.™h²hh³jD™h´M‘ubah}”(h]”j)™ah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jD™h´M‘hj+™h²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ'blocking/synchronous SPI data transfers”h]”hŒ'blocking/synchronous SPI data transfers”…”�”}”(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´M‘hjcšh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhj+™h²hh³jD™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”…”�”}”(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”…”�”}”(hj1›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‰)�”}”(hjB›h]”hŒ Description”…”�”}”(hjD›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 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.”…”�”}”(hjX›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.)”…”�”}”(hjg›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.”…”�”}”(hjv›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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjÌ›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÈ›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²ubj2)�”}”(hŒ5(struct spi_device *spi, struct spi_message *message)”h]”(j8)�”}”(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”jqŒ reftarget”j)œŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjï›sbŒc.spi_sync_locked”†”asbuh1hhjœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjUœh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjœubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hjbœh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjœubj8)�”}”(hŒstruct spi_message *message”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj{œh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjwœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwœ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”jqŒ reftarget”j›œŒmodname”NŒ classname”Njujx)�”}”j{]”jCœŒc.spi_sync_locked”†”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Œmessage”h]”hŒmessage”…”�”}”(hjÒœh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjwœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjœubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjÈ›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”…”�”}”(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`` 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‰)�”}”(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³hj7�ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jR�h´M³hjS�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj7�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jR�h´M³hj4�ubjÒ)�”}”(hŒ=``struct spi_message *message`` describes the data transfers ”h]”(jØ)�”}”(hŒ``struct spi_message *message``”h]”hö)�”}”(hjv�h]”hŒstruct spi_message *message”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjt�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´hjp�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ñhjp�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j‹�h´M´hj4�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 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Ì)�”}”(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.”…”�”}”(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_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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hjSžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjOžh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MÈubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOžh²hh³jažh´MÈubj$)�”}”(hŒ spi_bus_lock”h]”j*)�”}”(hŒ spi_bus_lock”h]”hŒ spi_bus_lock”…”�”}”(hjtžh²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjpžubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hjOžh²hh³jažh´MÈubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(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”jqŒ reftarget”j°žŒmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjvž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”ˆjAjBuh1j7hjˆžubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hjOžh²hh³jažh´MÈubeh}”(h]”h ]”h"]”h$]”h&]”jAjBjIˆuh1jújJjKhjKžh²hh³jažh´MÈubah}”(h]”jFžah ]”(jOjPeh"]”h$]”h&]”jTˆjU)jVhuh1jôh³jažh´MÈhjHžh²hubjX)�”}”(hhh]”hÌ)�”}”(hŒ)obtain a lock for exclusive SPI bus usage”h]”hŒ)obtain a 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´MÈhjŸh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jWhjHžh²hh³jaž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_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‰)�”}”(hj5Ÿh]”hŒ Parameters”…”�”}”(hj7Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj3Ÿ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Œ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ö)�”}”(hjTŸh]”hŒstruct spi_controller *ctlr”…”�”}”(hjVŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjRŸ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ÉhjNŸ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”…”�”}”(hjmŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jiŸh´MÉhjjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjNŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jiŸh´MÉhjKŸ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³Œ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Œ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Ëhj/Ÿ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Î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Œ 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´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_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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj- 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_unlock”h]”j*)�”}”(hŒspi_bus_unlock”h]”hŒspi_bus_unlock”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjN ubah}”(h]”h ]”(j<j=eh"]”h$]”h&]”jAjBuh1j#hj- h²hh³j? h´Mçubj2)�”}”(hŒ(struct spi_controller *ctlr)”h]”j8)�”}”(hŒstruct spi_controller *ctlr”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj 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”jqŒ reftarget”jŽ Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqjT sbŒc.spi_bus_unlock”†”asbuh1hhjj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjj ubj*)�”}”(hŒctlr”h]”hŒctlr”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjf ubah}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj- 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Œ,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´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)�”}”(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‰)�”}”(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 spi_controller *ctlr`` SPI bus controller that was locked for exclusive bus access ”h]”(jØ)�”}”(hŒ``struct spi_controller *ctlr``”h]”hö)�”}”(hj2¡h]”hŒstruct spi_controller *ctlr”…”�”}”(hj4¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj0¡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 bus controller that was locked for exclusive bus access”h]”hŒ;SPI bus controller that was locked for exclusive bus access”…”�”}”(hjK¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jG¡h´MèhjH¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj,¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jG¡h´Mèhj)¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÌhj ¡ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hjm¡h]”hŒContext”…”�”}”(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´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Œ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êhj ¡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´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Œ 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´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_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]”(jú)�”}”(hŒint”h]”hŒint”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj ¢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_write_then_read”h]”j*)�”}”(hŒspi_write_then_read”h]”hŒspi_write_then_read”…”�”}”(hj0¢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´Mubj2)�”}”(hŒV(struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)”h]”(j8)�”}”(hŒstruct spi_device *spi”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjL¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjH¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH¢ubh)�”}”(hhh]”j*)�”}”(hŒ spi_device”h]”hŒ spi_device”…”�”}”(hjj¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjg¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jqŒ reftarget”jl¢Œmodname”NŒ classname”Njujx)�”}”j{]”j~)�”}”jqj2¢sbŒc.spi_write_then_read”†”asbuh1hhjH¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH¢ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj˜¢h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjH¢ubj*)�”}”(hŒspi”h]”hŒspi”…”�”}”(hj¥¢h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjH¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjD¢ubj8)�”}”(hŒconst void *txbuf”h]”(j)�”}”(hjiHh]”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º¢ubjú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÙ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjº¢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”ˆjAjBuh1j7hjD¢ubj8)�”}”(hŒ unsigned n_tx”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£ubj*)�”}”(hŒn_tx”h]”hŒn_tx”…”�”}”(hj7£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjD¢ubj8)�”}”(hŒ void *rxbuf”h]”(jú)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjP£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjL£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL£ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjl£h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjL£ubj*)�”}”(hŒrxbuf”h]”hŒrxbuf”…”�”}”(hjy£h²hh³Nh´Nubah}”(h]”h ]”j5ah"]”h$]”h&]”uh1j)hjL£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjAjBuh1j7hjD¢ubj8)�”}”(hŒ unsigned n_rx”h]”(jú)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj’£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjŽ£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”ˆjAjBuh1j7hjD¢ubeh}”(h]”h ]”h"]”h$]”h&]”jAjBuh1j1hj ¢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 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´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)�”}”(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‰)�”}”(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Œ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´Mhj¤ubjò)�”}”(hhh]”hÌ)�”}”(hŒ(device with which data will be exchanged”h]”hŒ(device with which data will be exchanged”…”�”}”(hj2¤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Œ@``const void *txbuf`` data to be written (need not be DMA-safe) ”h]”(jØ)�”}”(hŒ``const void *txbuf``”h]”hö)�”}”(hjR¤h]”hŒconst void *txbuf”…”�”}”(hjT¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjP¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×h³ŒP/var/lib/git/docbuild/linux/Documentation/driver-api/spi:52: ./drivers/spi/spi.c”h´MhjL¤ubjò)�”}”(hhh]”hÌ)�”}”(hŒ)data to be written (need not be DMA-safe)”h]”hŒ)data to be written (need not be DMA-safe)”…”�”}”(hjk¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jg¤h´Mhjh¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhjL¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jg¤h´Mhj¤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´Mhj…¤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´Mhj¡¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj…¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³j ¤h´Mhj¤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´Mhj¾¤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´MhjÚ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jñhj¾¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÑh³jÙ¤h´Mhj¤ubjÒ)�”}”(hŒ*``unsigned n_rx`` size of rxbuf, in bytes ”h]”(jØ)�”}”(hŒ``unsigned n_rx``”h]”hö)�”}”(hjý¤h]”hŒ unsigned n_rx”…”�”}”(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Œsize of rxbuf, in bytes”h]”hŒsize of rxbuf, in bytes”…”�”}”(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¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌhjô£ubhÌ)�”}”(hŒ **Context**”h]”j‰)�”}”(hj8¥h]”hŒContext”…”�”}”(hj:¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jˆhj6¥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”…”�”}”(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 hjô£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.”…”�”}”(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 hjô£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´Mhjô£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´Mhjô£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´Mhjô£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”jÿ=Œ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ÜjjjÈ jÍ jìjñj€j…jŒj‘j½'jÂ'j_)jd)jõ2jú2je7jj7j:j:jf<jk<j–?j›?jBjBjšDjŸDj«Gj°Gj¤Jj©Jj�Mj†MjäOjéOjVRj[RjÈTjÍTjÔWjÙWjIZjNZjš\jŸ\j³^j¸^j[`j``jcjcj�dj”djfjfjMijRijwlj|ljZnj_njÛojàojNrjSrjÐtjÕtjQvjVvj�yj†yjÜzjázj~j~j1�j6�j.ƒj3ƒj§…j¬…j^‡jc‡jTŠjYŠjJ�jO�j(�j-�j¾‘jÑjf“jk“j„–j‰–j)™j.™j¿›jÄ›jFžjKžj$ j) j¢j¢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.