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]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.}(hjhhhNhNubah}(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:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hhhKhj)ubh definition)}(hhh]h bullet_list)}(hhh](h list_item)}(h;the address on the parent and child busses can be differenth]h)}(hjKh]h;the address on the parent and child busses can be different}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjIubah}(h]h ]h"]h$]h&]uh1jGhjDubjH)}(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}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1jGhjDubeh}(h]h ]h"]h$]h&]bullet-uh1jBhhhKhj?ubah}(h]h ]h"]h$]h&]uh1j=hj)ubeh}(h]h ]h"]h$]h&]uh1j'hhhKhj$ubah}(h]h ]h"]h$]h&]uh1j"hjhhhNhNubh)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhj ubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhj ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hClienth]hClient}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrubah}(h]h ]h"]h$]h&]uh1j.hjoubj/)}(hhh]h)}(h0x20h]h0x20}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjubah}(h]h ]h"]h$]h&]uh1j.hjoubeh}(h]h ]h"]h$]h&]uh1j)hjlubj*)}(hhh](j/)}(hhh]h)}(hY (bus C, 0x10)h]hY (bus C, 0x10)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1j.hjubj/)}(hhh]h)}(h0x30h]h0x30}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1j.hjubeh}(h]h ]h"]h$]h&]uh1j)hjlubeh}(h]h ]h"]h$]h&]uh1jjhj ubeh}(h]h ]h"]h$]h&]colsKuh1j hjubah}(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]jC)}(hhh](jH)}(hHSlave X driver requests a transaction (on adapter B), slave address 0x10h]h)}(hj h]hHSlave X driver requests a transaction (on adapter B), slave address 0x10}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(h5Physical I2C transaction on bus A, slave address 0x20h]h)}(hj8h]h5Physical I2C transaction on bus A, slave address 0x20}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhj6ubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(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}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjMubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(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}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjeubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(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&]uh1hhhhKMhj}ubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(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&]uh1jGhjubjH)}(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&]uh1jGhjubeh}(h]h ]h"]h$]h&]j~juh1jBhhhKDhjubah}(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](jH)}(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&]uh1jGhjubjH)}(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&]uh1jGhjubjH)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjubah}(h]h ]h"]h$]h&]uh1jGhjubeh}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhhhhhK^ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlei2c_atr_flags (C enum)c.i2c_atr_flagshNtauh1jZhjIhhhNhNubhdesc)}(hhh](hdesc_signature)}(h i2c_atr_flagsh]hdesc_signature_line)}(henum i2c_atr_flagsh](hdesc_sig_keyword)}(henumh]henum}(hj~hhhNhNubah}(h]h ]kah"]h$]h&]uh1j|hjxhhhc/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&]uh1jhjxhhhjhKubh desc_name)}(h i2c_atr_flagsh]h desc_sig_name)}(hjth]h i2c_atr_flags}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjxhhhjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jvsphinx_line_type declaratorhjrhhhjhKubah}(h]jiah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jphjhKhjmhhubh 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&]uh1jhjmhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jkhhhjIhNhNubh 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.hhKhjubj#)}(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](j.)}(h``I2C_ATR_F_STATIC``h]hliteral)}(hj"h]hI2C_ATR_F_STATIC}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK!hjubj>)}(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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhj:ubah}(h]h ]h"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hj9hK!hjubj()}(hK``I2C_ATR_F_PASSTHROUGH`` Allow unmapped incoming addresses to pass throughh](j.)}(h``I2C_ATR_F_PASSTHROUGH``h]j%)}(hj^h]hI2C_ATR_F_PASSTHROUGH}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK#hjXubj>)}(hhh]h)}(h1Allow unmapped incoming addresses to pass throughh]h1Allow unmapped incoming addresses to pass through}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK$hjtubah}(h]h ]h"]h$]h&]uh1j=hjXubeh}(h]h ]h"]h$]h&]uh1j'hjshK#hjubeh}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jgi2c_atr_ops (C struct) c.i2c_atr_opshNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(h i2c_atr_opsh]jw)}(hstruct i2c_atr_opsh](j})}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hjhhhc/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&]hhjuh1jvjjhjhhhjhK)ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jphjhK)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%hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK)ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jkhhhjIhNhNubj)}(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}(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_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); };}hj8sbah}(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)}(hjIh]hMembers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK0hjubj#)}(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](j.)}(h``attach_addr``h]j%)}(hjhh]h attach_addr}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK)hjbubj>)}(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'hj~ubah}(h]h ]h"]h$]h&]uh1j=hjbubeh}(h]h ]h"]h$]h&]uh1j'hj}hK)hj_ubj()}(h``detach_addr`` Notify the driver of a device getting disconnected. The driver must configure the hardware to stop using the alias.h](j.)}(h``detach_addr``h]j%)}(hjh]h detach_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK+hjubj>)}(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&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hjhK+hj_ubeh}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubh)}(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/hjIhhubh)}(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-hjIhhubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jgi2c_atr_adap_desc (C struct)c.i2c_atr_adap_deschNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(hi2c_atr_adap_desch]jw)}(hstruct i2c_atr_adap_desch](j})}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK2ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hK2ubj)}(hi2c_atr_adap_desch]j)}(hjh]hi2c_atr_adap_desc}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj0hK2ubeh}(h]h ]h"]h$]h&]hhjuh1jvjjhjhhhj0hK2ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jphj0hK2hjhhubj)}(hhh]h)}(h An ATR downstream bus descriptorh]h An ATR downstream bus descriptor}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK7hjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hK2ubeh}(h]h ](jstructeh"]h$]h&]jjjj}jj}jjjuh1jkhhhjIhNhNubj)}(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.hhKEhjubj#)}(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](j.)}(h ``chan_id``h]j%)}(hjh]hchan_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK:hjubj>)}(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}(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.hhK9hjubah}(h]h ]h"]h$]h&]uh1j=hjubeh}(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](j.)}(h ``parent``h]j%)}(hj h]hparent}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK)}(hhh]h)}(hfThe device used as the parent of the new i2c adapter, or NULL to use the i2c-atr device as the parent.h]hfThe device used as the parent of the new i2c adapter, or NULL to use the i2c-atr device as the parent.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK;hj6ubah}(h]h ]h"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hj5hKhjTubj>)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK=hjpubah}(h]h ]h"]h$]h&]uh1j=hjTubeh}(h]h ]h"]h$]h&]uh1j'hjohK>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](j.)}(h``num_aliases``h]j%)}(hjh]h num_aliases}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhK@hjubj>)}(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&]uh1j=hjubeh}(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](j.)}(h ``aliases``h]j%)}(hjh]haliases}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKChjubj>)}(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&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hjhKChjubeh}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jgi2c_atr_new (C function) c.i2c_atr_newhNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(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]jw)}(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&]uh1j|hj$ hhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKNubj)}(h h]h }(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ hhhj5 hKNubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjI modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jb ASTIdentifier)}j] i2c_atr_newsb c.i2c_atr_newasbuh1hhj$ hhhj5 hKNubj)}(h h]h }(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ hhhj5 hKNubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j~ hj$ hhhj5 hKNubj)}(h i2c_atr_newh]j)}(hjm h]h i2c_atr_new}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj$ hhhj5 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&]uh1j|hj 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&] refdomainjreftypej] reftargetj modnameN classnameNja jd )}jg ]jk 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}(hj" hhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hj ubj)}(h h]h }(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&] refdomainjreftypej] reftargetjB modnameN classnameNja jd )}jg ]jk c.i2c_atr_newasbuh1hhj ubj)}(h h]h }(hj^ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hjl hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hj ubj)}(hdevh]hdev}(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 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&]uh1j|hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj})}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hj 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&] refdomainjreftypej] reftargetj modnameN classnameNja jd )}jg ]jk 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}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hj ubj)}(h h]h }(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h max_adaptersh]h max_adapters}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&] refdomainjreftypej] reftargetj[ modnameN classnameNja jd )}jg ]jk c.i2c_atr_newasbuh1hhjR ubj)}(h h]h }(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj)}(hflagsh]hflags}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1j hj$ hhhj5 hKNubeh}(h]h ]h"]h$]h&]hhjuh1jvjjhj hhhj5 hKNubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jphj5 hKNhj 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&]uh1jhj hhhj5 hKNubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jkhhhjIhNhNubj)}(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 ubj#)}(hhh](j()}(h=``struct i2c_adapter *parent`` The parent (upstream) adapter h](j.)}(h``struct i2c_adapter *parent``h]j%)}(hj h]hstruct i2c_adapter *parent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKOhj ubj>)}(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&]uh1j=hj ubeh}(h]h ]h"]h$]h&]uh1j'hj hKOhj ubj()}(h3``struct device *dev`` The device acting as an ATR h](j.)}(h``struct device *dev``h]j%)}(hj) h]hstruct device *dev}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj' ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKPhj# ubj>)}(hhh]h)}(hThe device acting as an ATRh]hThe device acting as an ATR}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj> hKPhj? ubah}(h]h ]h"]h$]h&]uh1j=hj# ubeh}(h]h ]h"]h$]h&]uh1j'hj> hKPhj ubj()}(h<``const struct i2c_atr_ops *ops`` Driver-specific callbacks h](j.)}(h!``const struct i2c_atr_ops *ops``h]j%)}(hjb h]hconst struct i2c_atr_ops *ops}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj` ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKQhj\ ubj>)}(hhh]h)}(hDriver-specific callbacksh]hDriver-specific callbacks}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw hKQhjx ubah}(h]h ]h"]h$]h&]uh1j=hj\ ubeh}(h]h ]h"]h$]h&]uh1j'hjw hKQhj ubj()}(h6``int max_adapters`` Maximum number of child adapters h](j.)}(h``int max_adapters``h]j%)}(hj h]hint max_adapters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKRhj ubj>)}(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&]uh1j=hj ubeh}(h]h ]h"]h$]h&]uh1j'hj hKRhj ubj()}(h``u32 flags`` Flags for ATR h](j.)}(h ``u32 flags``h]j%)}(hj h]h u32 flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKShj ubj>)}(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&]uh1j=hj ubeh}(h]h ]h"]h$]h&]uh1j'hj hKShj ubeh}(h]h ]h"]h$]h&]uh1j"hj 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.}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKUhj ubh)}(h Call i2c_atr_delete() to remove.h]h Call i2c_atr_delete() to remove.}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKXhj ubh)}(h **Return**h]j)}(hjE h]hReturn}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKZhj ubh)}(h0pointer to the new ATR helper object, or ERR_PTRh]h0pointer to the new ATR helper object, or ERR_PTR}(hj[ 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&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jgi2c_atr_delete (C function)c.i2c_atr_deletehNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(h)void i2c_atr_delete (struct i2c_atr *atr)h]jw)}(h(void i2c_atr_delete(struct i2c_atr *atr)h](j )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j+ ah"]h$]h&]uh1j 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&]uh1j|hj 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&] refdomainjreftypej] reftargetj modnameN classnameNja jd )}jg ]jj )}j] j sbc.i2c_atr_deleteasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hj ubj)}(hatrh]hatr}(hj hhhNhNubah}(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&]hhjuh1jvjjhj hhhj hKaubah}(h]j} ah ](jjeh"]h$]h&]jj)jhuh1jphj hKahj hhubj)}(hhh]h)}(hDelete an I2C ATR helper.h]hDelete an I2C ATR helper.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKahjGhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jkhhhjIhNhNubj)}(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)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKehjfubj#)}(hhh]j()}(h6``struct i2c_atr *atr`` I2C ATR helper to be deleted. h](j.)}(h``struct i2c_atr *atr``h]j%)}(hjh]hstruct i2c_atr *atr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKbhjubj>)}(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&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hjhKbhjubah}(h]h ]h"]h$]h&]uh1j"hjfubh)}(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.hhKdhjfubh)}(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.hhKdhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jg i2c_atr_add_adapter (C function)c.i2c_atr_add_adapterhNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(hMint i2c_atr_add_adapter (struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)h]jw)}(hLint i2c_atr_add_adapter(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)h](j )}(hinth]hint}(hj hhhNhNubah}(h]h ]j+ ah"]h$]h&]uh1j hjhhhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKjubj)}(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&]hhuh1jhjhhhjhKjubj )}(h5(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)h](j )}(hstruct i2c_atr *atrh](j})}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej] reftargetjhmodnameN classnameNja jd )}jg ]jj )}j] j.sbc.i2c_atr_add_adapterasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjDubj)}(hatrh]hatr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj@ubj )}(hstruct i2c_atr_adap_desc *desch](j})}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j|hjubj)}(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&] refdomainjreftypej] reftargetjmodnameN classnameNja jd )}jg ]jc.i2c_atr_add_adapterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj@ubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKjubeh}(h]h ]h"]h$]h&]hhjuh1jvjjhjhhhjhKjubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jphjhKjhjhhubj)}(hhh]h)}(h&Create a child ("downstream") I2C bus.h]h*Create a child (“downstream”) I2C bus.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKjhj8hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jkhhhjIhNhNubj)}(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)}(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.hhKnhjWubj#)}(hhh](j()}(h$``struct i2c_atr *atr`` The I2C ATR h](j.)}(h``struct i2c_atr *atr``h]j%)}(hj|h]hstruct i2c_atr *atr}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKkhjvubj>)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKkhjubah}(h]h ]h"]h$]h&]uh1j=hjvubeh}(h]h ]h"]h$]h&]uh1j'hjhKkhjsubj()}(h=``struct i2c_atr_adap_desc *desc`` An ATR adapter descriptor h](j.)}(h"``struct i2c_atr_adap_desc *desc``h]j%)}(hjh]hstruct i2c_atr_adap_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKlhjubj>)}(hhh]h)}(hAn ATR adapter descriptorh]hAn ATR adapter descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKlhjubah}(h]h ]h"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hjhKlhjsubeh}(h]h ]h"]h$]h&]uh1j"hjWubh)}(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.hhKnhjWubh)}(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]j%)}(hjh]hi2c_atr_ops->attach_client}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]refdoci2c/i2c-address-translators refdomainjreftypetype refexplicitrefwarnja jd )}jg ]sb reftarget i2c_atr_opsuh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKnhjubh and }(hjhhhNhNubh)}(h2:c:type:`i2c_atr_ops->detach_client `h]j%)}(hj:h]hi2c_atr_ops->detach_client}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]refdocj( refdomainjreftypetype refexplicitrefwarnja j.j1 i2c_atr_opsuh1hhj3hKnhjubh; callbacks for the driver to assign an alias to the device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hKnhjWubh)}(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 }(hjahhhNhNubj)}(h**bus_handle**h]h bus_handle}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh, or if }(hjahhhNhNubj)}(h**bus_handle**h]h bus_handle}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh 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.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKshjWubh)}(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.hhKwhjWubh)}(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.hhKyhjWubh)}(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.hhKyhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jg i2c_atr_del_adapter (C function)c.i2c_atr_del_adapterhNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(h;void i2c_atr_del_adapter (struct i2c_atr *atr, u32 chan_id)h]jw)}(h:void i2c_atr_del_adapter(struct i2c_atr *atr, u32 chan_id)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j+ ah"]h$]h&]uh1j hjhhhc/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)}(hi2c_atr_del_adapterh]j)}(hi2c_atr_del_adapterh]hi2c_atr_del_adapter}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK~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&]uh1j|hj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej] reftargetjGmodnameN classnameNja jd )}jg ]jj )}j] j sbc.i2c_atr_del_adapterasbuh1hhj#ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj )}(hj h]h*}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hj#ubj)}(hatrh]hatr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h u32 chan_idh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej] reftargetjmodnameN classnameNja jd )}jg ]jac.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&]noemph)9hhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhK~ubeh}(h]h ]h"]h$]h&]hhjuh1jvjjhjhhhjhK~ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jphjhK~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&]uh1jhjhhhjhK~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jkhhhjIhNhNubj)}(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)}(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.hhKhjubj#)}(hhh](j()}(h$``struct i2c_atr *atr`` The I2C ATR h](j.)}(h``struct i2c_atr *atr``h]j%)}(hj3h]hstruct i2c_atr *atr}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhj-ubj>)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKhjIubah}(h]h ]h"]h$]h&]uh1j=hj-ubeh}(h]h ]h"]h$]h&]uh1j'hjHhKhj*ubj()}(hH``u32 chan_id`` Index of the adapter to be removed (0 .. max_adapters-1)h](j.)}(h``u32 chan_id``h]j%)}(hjlh]h u32 chan_id}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjfubj>)}(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&]uh1j=hjfubeh}(h]h ]h"]h$]h&]uh1j'hjhKhj*ubeh}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jg$i2c_atr_set_driver_data (C function)c.i2c_atr_set_driver_datahNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(h>void i2c_atr_set_driver_data (struct i2c_atr *atr, void *data)h]jw)}(h=void i2c_atr_set_driver_data(struct i2c_atr *atr, void *data)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j+ ah"]h$]h&]uh1j 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&]uh1j|hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hi2c_atrh]hi2c_atr}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej] reftargetj#modnameN classnameNja jd )}jg ]jj )}j] jsbc.i2c_atr_set_driver_dataasbuh1hhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hatrh]hatr}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h void *datah](j )}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]j+ ah"]h$]h&]uh1j hjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjqubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jvjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jphjhKhjhhubj)}(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&]jjjjjjjjjuh1jkhhhjIhNhNubj)}(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.hhKhjubj#)}(hhh](j()}(h$``struct i2c_atr *atr`` The I2C ATR h](j.)}(h``struct i2c_atr *atr``h]j%)}(hj h]hstruct i2c_atr *atr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubj>)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubj()}(h+``void *data`` Pointer to the data to storeh](j.)}(h``void *data``h]j%)}(hjBh]h void *data}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhj<ubj>)}(hhh]h)}(hPointer to the data to storeh]hPointer to the data to store}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjXubah}(h]h ]h"]h$]h&]uh1j=hj<ubeh}(h]h ]h"]h$]h&]uh1j'hjWhKhjubeh}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj[)}(hhh]h}(h]h ]h"]h$]h&]entries](jg$i2c_atr_get_driver_data (C function)c.i2c_atr_get_driver_datahNtauh1jZhjIhhhNhNubjl)}(hhh](jq)}(h4void * i2c_atr_get_driver_data (struct i2c_atr *atr)h]jw)}(h2void *i2c_atr_get_driver_data(struct i2c_atr *atr)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j+ ah"]h$]h&]uh1j 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&]uh1j|hjubj)}(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&] refdomainjreftypej] reftargetjmodnameN classnameNja jd )}jg ]jj )}j] jsbc.i2c_atr_get_driver_dataasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j~ hjubj)}(hatrh]hatr}(hj?hhhNhNubah}(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&]hhjuh1jvjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jphjhKhjhhubj)}(hhh]h)}(hGet the stored drive data.h]hGet the stored drive data.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jkhhhjIhNhNubj)}(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.hhKhjubj#)}(hhh]j()}(h$``struct i2c_atr *atr`` The I2C ATR h](j.)}(h``struct i2c_atr *atr``h]j%)}(hjh]hstruct i2c_atr *atr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1j-hc/var/lib/git/docbuild/linux/Documentation/i2c/i2c-address-translators:96: ./include/linux/i2c-atr.hhKhjubj>)}(hhh]h)}(h The I2C ATRh]h The I2C ATR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(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&]uh1jhjIhhhNhNubeh}(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_backlinksj.footnote_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_handlerjCerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _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}(jjjFjCjju nametypes}(jjFjuh}(jhjCjjjIjijrjjjjj j 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.