sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget//translations/zh_CN/i2c/i2c-address-translatorsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/zh_TW/i2c/i2c-address-translatorsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/it_IT/i2c/i2c-address-translatorsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ja_JP/i2c/i2c-address-translatorsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ko_KR/i2c/i2c-address-translatorsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/pt_BR/i2c/i2c-address-translatorsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/sp_SP/i2c/i2c-address-translatorsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhI/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators.rsthKubhsection)}(hhh](htitle)}(hI2C Address Translatorsh]hI2C Address Translators}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hfAuthor: Luca Ceresoli Author: Tomi Valkeinen h](hAuthor: Luca Ceresoli <}(hhhhhNhNubh reference)}(hluca@lucaceresoli.neth]hluca@lucaceresoli.net}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:luca@lucaceresoli.netuh1hhhubh> Author: Tomi Valkeinen <}(hhhhhNhNubh)}(htomi.valkeinen@ideasonboard.comh]htomi.valkeinen@ideasonboard.com}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri&mailto:tomi.valkeinen@ideasonboard.comuh1hhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(hXAn I2C Address Translator (ATR) is a device with an I2C slave parent ("upstream") port and N I2C master child ("downstream") ports, and forwards transactions from upstream to the appropriate downstream port with a modified slave address. The address used on the parent bus is called the "alias" and is (potentially) different from the physical slave address of the child bus. Address translation is done by the hardware.h]hXAn I2C Address Translator (ATR) is a device with an I2C slave parent (“upstream”) port and N I2C master child (“downstream”) ports, and forwards transactions from upstream to the appropriate downstream port with a modified slave address. The address used on the parent bus is called the “alias” and is (potentially) different from the physical slave address of the child bus. Address translation is done by the hardware.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjhhubhdefinition_list)}(hhh]hdefinition_list_item)}(hAn ATR looks similar to an i2c-mux except: - the address on the parent and child busses can be different - there is normally no need to select the child port; the alias used on the parent bus implies it h](hterm)}(h*An ATR looks similar to an i2c-mux except:h]h*An ATR looks similar to an i2c-mux except:}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jAhhhKhj=ubh definition)}(hhh]h bullet_list)}(hhh](h list_item)}(h;the address on the parent and child busses can be differenth]h)}(hj_h]h;the address on the parent and child busses can be different}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj]ubah}(h]h ]h"]h$]h&]uh1j[hjXubj\)}(h`there is normally no need to select the child port; the alias used on the parent bus implies it h]h)}(h_there is normally no need to select the child port; the alias used on the parent bus implies ith]h_there is normally no need to select the child port; the alias used on the parent bus implies it}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjtubah}(h]h ]h"]h$]h&]uh1j[hjXubeh}(h]h ]h"]h$]h&]bullet-uh1jVhhhKhjSubah}(h]h ]h"]h$]h&]uh1jQhj=ubeh}(h]h ]h"]h$]h&]uh1j;hhhKhj8ubah}(h]h ]h"]h$]h&]uh1j6hjhhhNhNubh)}(hThe ATR functionality can be provided by a chip with many other features. The kernel i2c-atr provides a helper to implement an ATR within a driver.h]hThe ATR functionality can be provided by a chip with many other features. The kernel i2c-atr provides a helper to implement an ATR within a driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXThe ATR creates a new I2C "child" adapter on each child bus. Adding devices on the child bus ends up in invoking the driver code to select an available alias. Maintaining an appropriate pool of available aliases and picking one for each new device is up to the driver implementer. The ATR maintains a table of currently assigned alias and uses it to modify all I2C transactions directed to devices on the child buses.h]hXThe ATR creates a new I2C “child” adapter on each child bus. Adding devices on the child bus ends up in invoking the driver code to select an available alias. Maintaining an appropriate pool of available aliases and picking one for each new device is up to the driver implementer. The ATR maintains a table of currently assigned alias and uses it to modify all I2C transactions directed to devices on the child buses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hA typical example follows.h]hA typical example follows.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubh)}(h Topology::h]h Topology:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh literal_block)}(h Slave X @ 0x10 .-----. | .-----. | |---+---- B | CPU |--A--| ATR | `-----' | |---+---- C `-----' | Slave Y @ 0x10h]h Slave X @ 0x10 .-----. | .-----. | |---+---- B | CPU |--A--| ATR | `-----' | |---+---- C `-----' | Slave Y @ 0x10}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK(hjhhubh)}(h Alias table:h]h Alias table:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjhhubh)}(hXA, B and C are three physical I2C busses, electrically independent from each other. The ATR receives the transactions initiated on bus A and propagates them on bus B or bus C or none depending on the device address in the transaction and based on the alias table.h]hXA, B and C are three physical I2C busses, electrically independent from each other. The ATR receives the transactions initiated on bus A and propagates them on bus B or bus C or none depending on the device address in the transaction and based on the alias table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubh)}(h Alias table:h]h Alias table:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j"hjubj#)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j"hjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hClienth]hClient}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)}(hhh](jC)}(hhh]h)}(hX (bus B, 0x10)h]hX (bus B, 0x10)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjubah}(h]h ]h"]h$]h&]uh1jBhjubjC)}(hhh]h)}(h0x20h]h0x20}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j=hjubj>)}(hhh](jC)}(hhh]h)}(hY (bus C, 0x10)h]hY (bus C, 0x10)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1jBhjubjC)}(hhh]h)}(h0x30h]h0x30}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(h Transaction:h]h Transaction:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubh block_quote)}(hX!- Slave X driver requests a transaction (on adapter B), slave address 0x10 - ATR driver finds slave X is on bus B and has alias 0x20, rewrites messages with address 0x20, forwards to adapter A - Physical I2C transaction on bus A, slave address 0x20 - ATR chip detects transaction on address 0x20, finds it in table, propagates transaction on bus B with address translated to 0x10, keeps clock stretched on bus A waiting for reply - Slave X chip (on bus B) detects transaction at its own physical address 0x10 and replies normally - ATR chip stops clock stretching and forwards reply on bus A, with address translated back to 0x20 - ATR driver receives the reply, rewrites messages with address 0x10 as they were initially - Slave X driver gets back the msgs[], with reply and address 0x10 h]jW)}(hhh](j\)}(hHSlave X driver requests a transaction (on adapter B), slave address 0x10h]h)}(hjh]hHSlave X driver requests a transaction (on adapter B), slave address 0x10}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(hsATR driver finds slave X is on bus B and has alias 0x20, rewrites messages with address 0x20, forwards to adapter Ah]h)}(hsATR driver finds slave X is on bus B and has alias 0x20, rewrites messages with address 0x20, forwards to adapter Ah]hsATR driver finds slave X is on bus B and has alias 0x20, rewrites messages with address 0x20, forwards to adapter A}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhj2ubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(h5Physical I2C transaction on bus A, slave address 0x20h]h)}(hjLh]h5Physical I2C transaction on bus A, slave address 0x20}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjJubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(hATR chip detects transaction on address 0x20, finds it in table, propagates transaction on bus B with address translated to 0x10, keeps clock stretched on bus A waiting for replyh]h)}(hATR chip detects transaction on address 0x20, finds it in table, propagates transaction on bus B with address translated to 0x10, keeps clock stretched on bus A waiting for replyh]hATR chip detects transaction on address 0x20, finds it in table, propagates transaction on bus B with address translated to 0x10, keeps clock stretched on bus A waiting for reply}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjaubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(haSlave X chip (on bus B) detects transaction at its own physical address 0x10 and replies normallyh]h)}(haSlave X chip (on bus B) detects transaction at its own physical address 0x10 and replies normallyh]haSlave X chip (on bus B) detects transaction at its own physical address 0x10 and replies normally}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjyubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(haATR chip stops clock stretching and forwards reply on bus A, with address translated back to 0x20h]h)}(haATR chip stops clock stretching and forwards reply on bus A, with address translated back to 0x20h]haATR chip stops clock stretching and forwards reply on bus A, with address translated back to 0x20}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhjubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(hYATR driver receives the reply, rewrites messages with address 0x10 as they were initiallyh]h)}(hYATR driver receives the reply, rewrites messages with address 0x10 as they were initiallyh]hYATR driver receives the reply, rewrites messages with address 0x10 as they were initially}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(hASlave X driver gets back the msgs[], with reply and address 0x10 h]h)}(h@Slave X driver gets back the msgs[], with reply and address 0x10h]h@Slave X driver gets back the msgs[], with reply and address 0x10}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjubah}(h]h ]h"]h$]h&]uh1j[hjubeh}(h]h ]h"]h$]h&]jjuh1jVhhhKDhjubah}(h]h ]h"]h$]h&]uh1jhhhKDhjhhubh)}(hUsage:h]hUsage:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjhhubj)}(hX1. In the driver (typically in the probe function) add an ATR by calling i2c_atr_new() passing attach/detach callbacks 2. When the attach callback is called pick an appropriate alias, configure it in the chip and return the chosen alias in the alias_id parameter 3. When the detach callback is called, deconfigure the alias from the chip and put the alias back in the pool for later usage h]henumerated_list)}(hhh](j\)}(hsIn the driver (typically in the probe function) add an ATR by calling i2c_atr_new() passing attach/detach callbacksh]h)}(hsIn the driver (typically in the probe function) add an ATR by calling i2c_atr_new() passing attach/detach callbacksh]hsIn the driver (typically in the probe function) add an ATR by calling i2c_atr_new() passing attach/detach callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(hWhen the attach callback is called pick an appropriate alias, configure it in the chip and return the chosen alias in the alias_id parameterh]h)}(hWhen the attach callback is called pick an appropriate alias, configure it in the chip and return the chosen alias in the alias_id parameterh]hWhen the attach callback is called pick an appropriate alias, configure it in the chip and return the chosen alias in the alias_id parameter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubah}(h]h ]h"]h$]h&]uh1j[hjubj\)}(h{When the detach callback is called, deconfigure the alias from the chip and put the alias back in the pool for later usage h]h)}(hzWhen the detach callback is called, deconfigure the alias from the chip and put the alias back in the pool for later usageh]hzWhen the detach callback is called, deconfigure the alias from the chip and put the alias back in the pool for later usage}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhj,ubah}(h]h ]h"]h$]h&]uh1j[hjubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKUhjhhubeh}(h] descriptionah ]h"] descriptionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h%I2C ATR functions and data structuresh]h%I2C ATR functions and data structures}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhhhK^ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlei2c_atr_flags (C enum)c.i2c_atr_flagshNtauh1jnhj]hhhNhNubhdesc)}(hhh](hdesc_signature)}(h i2c_atr_flagsh]hdesc_signature_line)}(henum i2c_atr_flagsh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h i2c_atr_flagsh]h desc_sig_name)}(hjh]h i2c_atr_flags}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]j}ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(hFlags for an I2C ATR driverh]hFlags for an I2C ATR driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhj]hNhNubh container)}(hX**Constants** ``I2C_ATR_F_STATIC`` ATR does not support dynamic mapping, use static mapping. Mappings will only be added or removed as a result of devices being added or removed from a child bus. The ATR pool will have to be big enough to accomodate all devices expected to be added to the child buses. ``I2C_ATR_F_PASSTHROUGH`` Allow unmapped incoming addresses to pass throughh](h)}(h **Constants**h]hstrong)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubj7)}(hhh](j<)}(hX!``I2C_ATR_F_STATIC`` ATR does not support dynamic mapping, use static mapping. Mappings will only be added or removed as a result of devices being added or removed from a child bus. The ATR pool will have to be big enough to accomodate all devices expected to be added to the child buses. h](jB)}(h``I2C_ATR_F_STATIC``h]hliteral)}(hj6h]hI2C_ATR_F_STATIC}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK!hj0ubjR)}(hhh]h)}(hX ATR does not support dynamic mapping, use static mapping. Mappings will only be added or removed as a result of devices being added or removed from a child bus. The ATR pool will have to be big enough to accomodate all devices expected to be added to the child buses.h]hX ATR does not support dynamic mapping, use static mapping. Mappings will only be added or removed as a result of devices being added or removed from a child bus. The ATR pool will have to be big enough to accomodate all devices expected to be added to the child buses.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjNubah}(h]h ]h"]h$]h&]uh1jQhj0ubeh}(h]h ]h"]h$]h&]uh1j;hjMhK!hj-ubj<)}(hK``I2C_ATR_F_PASSTHROUGH`` Allow unmapped incoming addresses to pass throughh](jB)}(h``I2C_ATR_F_PASSTHROUGH``h]j9)}(hjrh]hI2C_ATR_F_PASSTHROUGH}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK#hjlubjR)}(hhh]h)}(h1Allow unmapped incoming addresses to pass throughh]h1Allow unmapped incoming addresses to pass through}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK$hjubah}(h]h ]h"]h$]h&]uh1jQhjlubeh}(h]h ]h"]h$]h&]uh1j;hjhK#hj-ubeh}(h]h ]h"]h$]h&]uh1j6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{i2c_atr_ops (C struct) c.i2c_atr_opshNtauh1jnhj]hhhNhNubj)}(hhh](j)}(h i2c_atr_opsh]j)}(hstruct i2c_atr_opsh](j)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK)ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK)ubj)}(h i2c_atr_opsh]j)}(hjh]h i2c_atr_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK)ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK)ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK)hjhhubj)}(hhh]h)}(h(Callbacks from ATR to the device driver.h]h(Callbacks from ATR to the device driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK%hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK)ubeh}(h]h ](jstructeh"]h$]h&]jjjj'j j'j j j uh1jhhhj]hNhNubj)}(hX**Definition**:: struct i2c_atr_ops { int (*attach_addr)(struct i2c_atr *atr, u32 chan_id, u16 addr, u16 alias); void (*detach_addr)(struct i2c_atr *atr, u32 chan_id, u16 addr); }; **Members** ``attach_addr`` Notify the driver of a new device connected on a child bus, with the alias assigned to it. The driver must configure the hardware to use the alias. ``detach_addr`` Notify the driver of a device getting disconnected. The driver must configure the hardware to stop using the alias.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh:}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK)hj+ubj)}(hstruct i2c_atr_ops { int (*attach_addr)(struct i2c_atr *atr, u32 chan_id, u16 addr, u16 alias); void (*detach_addr)(struct i2c_atr *atr, u32 chan_id, u16 addr); };h]hstruct i2c_atr_ops { int (*attach_addr)(struct i2c_atr *atr, u32 chan_id, u16 addr, u16 alias); void (*detach_addr)(struct i2c_atr *atr, u32 chan_id, u16 addr); };}hjLsbah}(h]h ]h"]h$]h&]hhuh1jhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK+hj+ubh)}(h **Members**h]j)}(hj]h]hMembers}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK0hj+ubj7)}(hhh](j<)}(h``attach_addr`` Notify the driver of a new device connected on a child bus, with the alias assigned to it. The driver must configure the hardware to use the alias. h](jB)}(h``attach_addr``h]j9)}(hj|h]h attach_addr}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK)hjvubjR)}(hhh]h)}(hNotify the driver of a new device connected on a child bus, with the alias assigned to it. The driver must configure the hardware to use the alias.h]hNotify the driver of a new device connected on a child bus, with the alias assigned to it. The driver must configure the hardware to use the alias.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK'hjubah}(h]h ]h"]h$]h&]uh1jQhjvubeh}(h]h ]h"]h$]h&]uh1j;hjhK)hjsubj<)}(h``detach_addr`` Notify the driver of a device getting disconnected. The driver must configure the hardware to stop using the alias.h](jB)}(h``detach_addr``h]j9)}(hjh]h detach_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK+hjubjR)}(hhh]h)}(hsNotify the driver of a device getting disconnected. The driver must configure the hardware to stop using the alias.h]hsNotify the driver of a device getting disconnected. The driver must configure the hardware to stop using the alias.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK*hjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhK+hjsubeh}(h]h ]h"]h$]h&]uh1j6hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK/hj]hhubh)}(hIAll these functions return 0 on success, a negative error code otherwise.h]hIAll these functions return 0 on success, a negative error code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK,hj]hhubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{i2c_atr_adap_desc (C struct)c.i2c_atr_adap_deschNtauh1jnhj]hhhNhNubj)}(hhh](j)}(hi2c_atr_adap_desch]j)}(hstruct i2c_atr_adap_desch](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK1ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjDhK1ubj)}(hi2c_atr_adap_desch]j)}(hj1h]hi2c_atr_adap_desc}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]hhuh1jhj3hhhjDhK1ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj/hhhjDhK1ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhjDhK1hj,hhubj)}(hhh]h)}(h An ATR downstream bus descriptorh]h An ATR downstream bus descriptor}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK7hjvhhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjDhK1ubeh}(h]h ](jstructeh"]h$]h&]jjjjj jj j j uh1jhhhj]hNhNubj)}(hXx**Definition**:: struct i2c_atr_adap_desc { u32 chan_id; struct device *parent; struct fwnode_handle *bus_handle; size_t num_aliases; u16 *aliases; }; **Members** ``chan_id`` Index of the new adapter (0 .. max_adapters-1). This value is passed to the callbacks in `struct i2c_atr_ops`. ``parent`` The device used as the parent of the new i2c adapter, or NULL to use the i2c-atr device as the parent. ``bus_handle`` The fwnode handle that points to the adapter's i2c peripherals, or NULL. ``num_aliases`` The number of aliases in this adapter's private alias pool. Set to zero if this adapter uses the ATR's global alias pool. ``aliases`` An optional array of private aliases used by the adapter instead of the ATR's global pool of aliases. Must contain exactly num_aliases entries if num_aliases > 0, is ignored otherwise.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK;hjubj)}(hstruct i2c_atr_adap_desc { u32 chan_id; struct device *parent; struct fwnode_handle *bus_handle; size_t num_aliases; u16 *aliases; };h]hstruct i2c_atr_adap_desc { u32 chan_id; struct device *parent; struct fwnode_handle *bus_handle; size_t num_aliases; u16 *aliases; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK=hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKEhjubj7)}(hhh](j<)}(h|``chan_id`` Index of the new adapter (0 .. max_adapters-1). This value is passed to the callbacks in `struct i2c_atr_ops`. h](jB)}(h ``chan_id``h]j9)}(hjh]hchan_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK:hjubjR)}(hhh]h)}(hoIndex of the new adapter (0 .. max_adapters-1). This value is passed to the callbacks in `struct i2c_atr_ops`.h](hZIndex of the new adapter (0 .. max_adapters-1). This value is passed to the callbacks in }(hjhhhNhNubhtitle_reference)}(h`struct i2c_atr_ops`h]hstruct i2c_atr_ops}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK9hjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhK:hjubj<)}(hr``parent`` The device used as the parent of the new i2c adapter, or NULL to use the i2c-atr device as the parent. h](jB)}(h ``parent``h]j9)}(hj4h]hparent}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjhubjR)}(hhh]h)}(hHThe fwnode handle that points to the adapter's i2c peripherals, or NULL.h]hJThe fwnode handle that points to the adapter’s i2c peripherals, or NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK=hjubah}(h]h ]h"]h$]h&]uh1jQhjhubeh}(h]h ]h"]h$]h&]uh1j;hjhK>hjubj<)}(h``num_aliases`` The number of aliases in this adapter's private alias pool. Set to zero if this adapter uses the ATR's global alias pool. h](jB)}(h``num_aliases``h]j9)}(hjh]h num_aliases}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK@hjubjR)}(hhh]h)}(hyThe number of aliases in this adapter's private alias pool. Set to zero if this adapter uses the ATR's global alias pool.h]h}The number of aliases in this adapter’s private alias pool. Set to zero if this adapter uses the ATR’s global alias pool.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK?hjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhK@hjubj<)}(h``aliases`` An optional array of private aliases used by the adapter instead of the ATR's global pool of aliases. Must contain exactly num_aliases entries if num_aliases > 0, is ignored otherwise.h](jB)}(h ``aliases``h]j9)}(hjh]haliases}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKChjubjR)}(hhh]h)}(hAn optional array of private aliases used by the adapter instead of the ATR's global pool of aliases. Must contain exactly num_aliases entries if num_aliases > 0, is ignored otherwise.h]hAn optional array of private aliases used by the adapter instead of the ATR’s global pool of aliases. Must contain exactly num_aliases entries if num_aliases > 0, is ignored otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKAhjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhKChjubeh}(h]h ]h"]h$]h&]uh1j6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{i2c_atr_new (C function) c.i2c_atr_newhNtauh1jnhj]hhhNhNubj)}(hhh](j)}(hstruct i2c_atr * i2c_atr_new (struct i2c_adapter *parent, struct device *dev, const struct i2c_atr_ops *ops, int max_adapters, u32 flags)h]j)}(hstruct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev, const struct i2c_atr_ops *ops, int max_adapters, u32 flags)h](j)}(hjh]hstruct}(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 hhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKNubj)}(h h]h }(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 hhhjI hKNubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj] modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jv ASTIdentifier)}jq i2c_atr_newsb c.i2c_atr_newasbuh1hhj8 hhhjI hKNubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 hhhjI hKNubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj8 hhhjI hKNubj)}(h i2c_atr_newh]j)}(hj h]h i2c_atr_new}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj8 hhhjI hKNubhdesc_parameterlist)}(hl(struct i2c_adapter *parent, struct device *dev, const struct i2c_atr_ops *ops, int max_adapters, u32 flags)h](hdesc_parameter)}(hstruct i2c_adapter *parenth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetj modnameN classnameNju jx )}j{ ]j c.i2c_atr_newasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hparenth]hparent}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hstruct device *devh](j)}(hjh]hstruct}(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 ubj)}(h h]h }(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 ubh)}(hhh]j)}(hdeviceh]hdevice}(hjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetjV modnameN classnameNju jx )}j{ ]j c.i2c_atr_newasbuh1hhj2 ubj)}(h h]h }(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2 ubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hconst struct i2c_atr_ops *opsh](j)}(hconsth]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h i2c_atr_opsh]h i2c_atr_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetj modnameN classnameNju jx )}j{ ]j c.i2c_atr_newasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hopsh]hops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hint max_adaptersh](hdesc_sig_keyword_type)}(hinth]hint}(hj4 hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j2 hj. ubj)}(h h]h }(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj. ubj)}(h max_adaptersh]h max_adapters}(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj. ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetjo modnameN classnameNju jx )}j{ ]j c.i2c_atr_newasbuh1hhjf ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubj)}(hflagsh]hflags}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1j hj8 hhhjI hKNubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj4 hhhjI hKNubah}(h]j/ ah ](jjeh"]h$]h&]jj)jhuh1jhjI hKNhj1 hhubj)}(hhh]h)}(h*Allocate and initialize an I2C ATR helper.h]h*Allocate and initialize an I2C ATR helper.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKNhj hhubah}(h]h ]h"]h$]h&]uh1jhj1 hhhjI hKNubeh}(h]h ](jfunctioneh"]h$]h&]jjjj j j j j j uh1jhhhj]hNhNubj)}(hX**Parameters** ``struct i2c_adapter *parent`` The parent (upstream) adapter ``struct device *dev`` The device acting as an ATR ``const struct i2c_atr_ops *ops`` Driver-specific callbacks ``int max_adapters`` Maximum number of child adapters ``u32 flags`` Flags for ATR **Description** The new ATR helper is connected to the parent adapter but has no child adapters. Call i2c_atr_add_adapter() to add some. Call i2c_atr_delete() to remove. **Return** pointer to the new ATR helper object, or ERR_PTRh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKRhj ubj7)}(hhh](j<)}(h=``struct i2c_adapter *parent`` The parent (upstream) adapter h](jB)}(h``struct i2c_adapter *parent``h]j9)}(hj h]hstruct i2c_adapter *parent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKOhj ubjR)}(hhh]h)}(hThe parent (upstream) adapterh]hThe parent (upstream) adapter}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKOhj ubah}(h]h ]h"]h$]h&]uh1jQhj ubeh}(h]h ]h"]h$]h&]uh1j;hj hKOhj ubj<)}(h3``struct device *dev`` The device acting as an ATR h](jB)}(h``struct device *dev``h]j9)}(hj= h]hstruct device *dev}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj; ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKPhj7 ubjR)}(hhh]h)}(hThe device acting as an ATRh]hThe device acting as an ATR}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR hKPhjS ubah}(h]h ]h"]h$]h&]uh1jQhj7 ubeh}(h]h ]h"]h$]h&]uh1j;hjR hKPhj ubj<)}(h<``const struct i2c_atr_ops *ops`` Driver-specific callbacks h](jB)}(h!``const struct i2c_atr_ops *ops``h]j9)}(hjv h]hconst struct i2c_atr_ops *ops}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjt ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKQhjp ubjR)}(hhh]h)}(hDriver-specific callbacksh]hDriver-specific callbacks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKQhj ubah}(h]h ]h"]h$]h&]uh1jQhjp ubeh}(h]h ]h"]h$]h&]uh1j;hj hKQhj ubj<)}(h6``int max_adapters`` Maximum number of child adapters h](jB)}(h``int max_adapters``h]j9)}(hj h]hint max_adapters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKRhj ubjR)}(hhh]h)}(h Maximum number of child adaptersh]h Maximum number of child adapters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKRhj ubah}(h]h ]h"]h$]h&]uh1jQhj ubeh}(h]h ]h"]h$]h&]uh1j;hj hKRhj ubj<)}(h``u32 flags`` Flags for ATR h](jB)}(h ``u32 flags``h]j9)}(hj h]h u32 flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKShj ubjR)}(hhh]h)}(h Flags for ATRh]h Flags for ATR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKShj ubah}(h]h ]h"]h$]h&]uh1jQhj ubeh}(h]h ]h"]h$]h&]uh1j;hj hKShj ubeh}(h]h ]h"]h$]h&]uh1j6hj ubh)}(h**Description**h]j)}(hj# h]h Description}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj! ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKUhj ubh)}(hxThe new ATR helper is connected to the parent adapter but has no child adapters. Call i2c_atr_add_adapter() to add some.h]hxThe new ATR helper is connected to the parent adapter but has no child adapters. Call i2c_atr_add_adapter() to add some.}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKThj ubh)}(h Call i2c_atr_delete() to remove.h]h Call i2c_atr_delete() to remove.}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKWhj ubh)}(h **Return**h]j)}(hjY h]hReturn}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKYhj ubh)}(h0pointer to the new ATR helper object, or ERR_PTRh]h0pointer to the new ATR helper object, or ERR_PTR}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKZhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{i2c_atr_delete (C function)c.i2c_atr_deletehNtauh1jnhj]hhhNhNubj)}(hhh](j)}(h)void i2c_atr_delete (struct i2c_atr *atr)h]j)}(h(void i2c_atr_delete(struct i2c_atr *atr)h](j3 )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j? ah"]h$]h&]uh1j2 hj hhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKaubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKaubj)}(hi2c_atr_deleteh]j)}(hi2c_atr_deleteh]hi2c_atr_delete}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKaubj )}(h(struct i2c_atr *atr)h]j )}(hstruct i2c_atr *atrh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetj modnameN classnameNju jx )}j{ ]j~ )}jq j sbc.i2c_atr_deleteasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hatrh]hatr}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj hKaubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKaubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKahj hhubj)}(hhh]h)}(hDelete an I2C ATR helper.h]hDelete an I2C ATR helper.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKahj[hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvj jvj j j uh1jhhhj]hNhNubj)}(h**Parameters** ``struct i2c_atr *atr`` I2C ATR helper to be deleted. **Description** Precondition: all the adapters added with i2c_atr_add_adapter() must be removed by calling i2c_atr_del_adapter().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKehjzubj7)}(hhh]j<)}(h6``struct i2c_atr *atr`` I2C ATR helper to be deleted. h](jB)}(h``struct i2c_atr *atr``h]j9)}(hjh]hstruct i2c_atr *atr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKbhjubjR)}(hhh]h)}(hI2C ATR helper to be deleted.h]hI2C ATR helper to be deleted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKbhjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhKbhjubah}(h]h ]h"]h$]h&]uh1j6hjzubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKdhjzubh)}(hqPrecondition: all the adapters added with i2c_atr_add_adapter() must be removed by calling i2c_atr_del_adapter().h]hqPrecondition: all the adapters added with i2c_atr_add_adapter() must be removed by calling i2c_atr_del_adapter().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKchjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{ i2c_atr_add_adapter (C function)c.i2c_atr_add_adapterhNtauh1jnhj]hhhNhNubj)}(hhh](j)}(hMint i2c_atr_add_adapter (struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)h]j)}(hLint i2c_atr_add_adapter(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)h](j3 )}(hinth]hint}(hjhhhNhNubah}(h]h ]j? ah"]h$]h&]uh1j2 hjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hKjubj)}(hi2c_atr_add_adapterh]j)}(hi2c_atr_add_adapterh]hi2c_atr_add_adapter}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj-hKjubj )}(h5(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)h](j )}(hstruct i2c_atr *atrh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetj|modnameN classnameNju jx )}j{ ]j~ )}jq jBsbc.i2c_atr_add_adapterasbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjXubj)}(hatrh]hatr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjTubj )}(hstruct i2c_atr_adap_desc *desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hi2c_atr_adap_desch]hi2c_atr_adap_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetjmodnameN classnameNju jx )}j{ ]jc.i2c_atr_add_adapterasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdesch]hdesc}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjTubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhj-hKjubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj-hKjubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj-hKjhjhhubj)}(hhh]h)}(h&Create a child ("downstream") I2C bus.h]h*Create a child (“downstream”) I2C bus.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKjhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj-hKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgj jgj j j uh1jhhhj]hNhNubj)}(hX**Parameters** ``struct i2c_atr *atr`` The I2C ATR ``struct i2c_atr_adap_desc *desc`` An ATR adapter descriptor **Description** After calling this function a new i2c bus will appear. Adding and removing devices on the downstream bus will result in calls to the :c:type:`i2c_atr_ops->attach_client ` and :c:type:`i2c_atr_ops->detach_client ` callbacks for the driver to assign an alias to the device. The adapter's fwnode is set to **bus_handle**, or if **bus_handle** is NULL the function looks for a child node whose 'reg' property matches the chan_id under the i2c-atr device's 'i2c-atr' node. Call i2c_atr_del_adapter() to remove the adapter. **Return** 0 on success, a negative error code otherwise.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKnhjkubj7)}(hhh](j<)}(h$``struct i2c_atr *atr`` The I2C ATR h](jB)}(h``struct i2c_atr *atr``h]j9)}(hjh]hstruct i2c_atr *atr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKkhjubjR)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKkhjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhKkhjubj<)}(h=``struct i2c_atr_adap_desc *desc`` An ATR adapter descriptor h](jB)}(h"``struct i2c_atr_adap_desc *desc``h]j9)}(hjh]hstruct i2c_atr_adap_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKlhjubjR)}(hhh]h)}(hAn ATR adapter descriptorh]hAn ATR adapter descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKlhjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhKlhjubeh}(h]h ]h"]h$]h&]uh1j6hjkubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKnhjkubh)}(hX)After calling this function a new i2c bus will appear. Adding and removing devices on the downstream bus will result in calls to the :c:type:`i2c_atr_ops->attach_client ` and :c:type:`i2c_atr_ops->detach_client ` callbacks for the driver to assign an alias to the device.h](hAfter calling this function a new i2c bus will appear. Adding and removing devices on the downstream bus will result in calls to the }(hjhhhNhNubh)}(h2:c:type:`i2c_atr_ops->attach_client `h]j9)}(hj$h]hi2c_atr_ops->attach_client}(hj&hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j8hj"ubah}(h]h ]h"]h$]h&]refdoci2c/i2c-address-translators refdomainjreftypetype refexplicitrefwarnju jx )}j{ ]sb reftarget i2c_atr_opsuh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKmhjubh and }(hjhhhNhNubh)}(h2:c:type:`i2c_atr_ops->detach_client `h]j9)}(hjNh]hi2c_atr_ops->detach_client}(hjPhhhNhNubah}(h]h ](j0jc-typeeh"]h$]h&]uh1j8hjLubah}(h]h ]h"]h$]h&]refdocj< refdomainjreftypetype refexplicitrefwarnju jBjE i2c_atr_opsuh1hhjGhKmhjubh; callbacks for the driver to assign an alias to the device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhKmhjkubh)}(hThe adapter's fwnode is set to **bus_handle**, or if **bus_handle** is NULL the function looks for a child node whose 'reg' property matches the chan_id under the i2c-atr device's 'i2c-atr' node.h](h!The adapter’s fwnode is set to }(hjuhhhNhNubj)}(h**bus_handle**h]h bus_handle}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh, or if }(hjuhhhNhNubj)}(h**bus_handle**h]h bus_handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh is NULL the function looks for a child node whose ‘reg’ property matches the chan_id under the i2c-atr device’s ‘i2c-atr’ node.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKrhjkubh)}(h1Call i2c_atr_del_adapter() to remove the adapter.h]h1Call i2c_atr_del_adapter() to remove the adapter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKvhjkubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKxhjkubh)}(h.0 on success, a negative error code otherwise.h]h.0 on success, a negative error code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKyhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{ i2c_atr_del_adapter (C function)c.i2c_atr_del_adapterhNtauh1jnhj]hhhNhNubj)}(hhh](j)}(h;void i2c_atr_del_adapter (struct i2c_atr *atr, u32 chan_id)h]j)}(h:void i2c_atr_del_adapter(struct i2c_atr *atr, u32 chan_id)h](j3 )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j? ah"]h$]h&]uh1j2 hjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK~ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hK~ubj)}(hi2c_atr_del_adapterh]j)}(hi2c_atr_del_adapterh]hi2c_atr_del_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj hK~ubj )}(h"(struct i2c_atr *atr, u32 chan_id)h](j )}(hstruct i2c_atr *atrh](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetj[modnameN classnameNju jx )}j{ ]j~ )}jq j!sbc.i2c_atr_del_adapterasbuh1hhj7ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubj)}(hatrh]hatr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubj )}(h u32 chan_idh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetjmodnameN classnameNju jx )}j{ ]juc.i2c_atr_del_adapterasbuh1hhjubj)}(h h]h :}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hchan_idh]hchan_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhj hK~ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hK~ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hK~hjhhubj)}(hhh]h)}(h|Remove a child ("downstream") I2C bus added by i2c_atr_add_adapter(). If no I2C bus has been added this function is a no-op.h]hRemove a child (“downstream”) I2C bus added by i2c_atr_add_adapter(). If no I2C bus has been added this function is a no-op.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK~hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hK~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjj jj j j uh1jhhhj]hNhNubj)}(h**Parameters** ``struct i2c_atr *atr`` The I2C ATR ``u32 chan_id`` Index of the adapter to be removed (0 .. max_adapters-1)h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhj"ubj7)}(hhh](j<)}(h$``struct i2c_atr *atr`` The I2C ATR h](jB)}(h``struct i2c_atr *atr``h]j9)}(hjGh]hstruct i2c_atr *atr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjAubjR)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jQhjAubeh}(h]h ]h"]h$]h&]uh1j;hj\hKhj>ubj<)}(hH``u32 chan_id`` Index of the adapter to be removed (0 .. max_adapters-1)h](jB)}(h``u32 chan_id``h]j9)}(hjh]h u32 chan_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~ubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjzubjR)}(hhh]h)}(h8Index of the adapter to be removed (0 .. max_adapters-1)h]h8Index of the adapter to be removed (0 .. max_adapters-1)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubah}(h]h ]h"]h$]h&]uh1jQhjzubeh}(h]h ]h"]h$]h&]uh1j;hjhKhj>ubeh}(h]h ]h"]h$]h&]uh1j6hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{$i2c_atr_set_driver_data (C function)c.i2c_atr_set_driver_datahNtauh1jnhj]hhhNhNubj)}(hhh](j)}(h>void i2c_atr_set_driver_data (struct i2c_atr *atr, void *data)h]j)}(h=void i2c_atr_set_driver_data(struct i2c_atr *atr, void *data)h](j3 )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j? ah"]h$]h&]uh1j2 hjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hi2c_atr_set_driver_datah]j)}(hi2c_atr_set_driver_datah]hi2c_atr_set_driver_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj )}(h!(struct i2c_atr *atr, void *data)h](j )}(hstruct i2c_atr *atrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetj7modnameN classnameNju jx )}j{ ]j~ )}jq jsbc.i2c_atr_set_driver_dataasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hatrh]hatr}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h void *datah](j3 )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j? ah"]h$]h&]uh1j2 hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h0Set private driver data to the i2c-atr instance.h]h0Set private driver data to the i2c-atr instance.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjj jj j j uh1jhhhj]hNhNubj)}(hd**Parameters** ``struct i2c_atr *atr`` The I2C ATR ``void *data`` Pointer to the data to storeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubj7)}(hhh](j<)}(h$``struct i2c_atr *atr`` The I2C ATR h](jB)}(h``struct i2c_atr *atr``h]j9)}(hjh]hstruct i2c_atr *atr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubjR)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj3ubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hj2hKhjubj<)}(h+``void *data`` Pointer to the data to storeh](jB)}(h``void *data``h]j9)}(hjVh]h void *data}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjTubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjPubjR)}(hhh]h)}(hPointer to the data to storeh]hPointer to the data to store}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjlubah}(h]h ]h"]h$]h&]uh1jQhjPubeh}(h]h ]h"]h$]h&]uh1j;hjkhKhjubeh}(h]h ]h"]h$]h&]uh1j6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubjo)}(hhh]h}(h]h ]h"]h$]h&]entries](j{$i2c_atr_get_driver_data (C function)c.i2c_atr_get_driver_datahNtauh1jnhj]hhhNhNubj)}(hhh](j)}(h4void * i2c_atr_get_driver_data (struct i2c_atr *atr)h]j)}(h2void *i2c_atr_get_driver_data(struct i2c_atr *atr)h](j3 )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j? ah"]h$]h&]uh1j2 hjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj)}(hi2c_atr_get_driver_datah]j)}(hi2c_atr_get_driver_datah]hi2c_atr_get_driver_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj )}(h(struct i2c_atr *atr)h]j )}(hstruct i2c_atr *atrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypejq reftargetjmodnameN classnameNju jx )}j{ ]j~ )}jq jsbc.i2c_atr_get_driver_dataasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hatrh]hatr}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hGet the stored drive data.h]hGet the stored drive data.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjj jj j j uh1jhhhj]hNhNubj)}(h]**Parameters** ``struct i2c_atr *atr`` The I2C ATR **Return** Pointer to the stored datah](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubj7)}(hhh]j<)}(h$``struct i2c_atr *atr`` The I2C ATR h](jB)}(h``struct i2c_atr *atr``h]j9)}(hjh]hstruct i2c_atr *atr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&]uh1jAhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubjR)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]uh1j;hjhKhjubah}(h]h ]h"]h$]h&]uh1j6hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubh)}(hPointer to the stored datah]hPointer to the stored data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hj]hhhNhNubeh}(h]%i2c-atr-functions-and-data-structuresah ]h"]%i2c atr functions and data structuresah$]h&]uh1hhhhhhhhK^ubeh}(h]i2c-address-translatorsah ]h"]i2c address translatorsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjBfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjWerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j2j/jZjWj*j'u nametypes}(j2jZj*uh}(j/hjWjj'j]j}jjjj*j/j/ j4 j j jjjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.