Lines Matching +full:i2c +full:- +full:bus
2 How to instantiate I2C devices
5 Unlike PCI or USB devices, I2C devices are not enumerated at the hardware
7 I2C bus segment, and what address these devices are using. For this
8 reason, the kernel code must instantiate I2C devices explicitly. There are
12 Method 1: Declare the I2C devices statically
13 --------------------------------------------
15 This method is appropriate when the I2C bus is a system bus as is the case
16 for many embedded systems. On such systems, each I2C bus has a number which
17 is known in advance. It is thus possible to pre-declare the I2C devices
18 which live on this bus.
23 When the I2C bus in question is registered, the I2C devices will be
24 instantiated automatically by i2c-core. The devices will be automatically
25 unbound and destroyed when the I2C bus they sit on goes away (if ever).
28 Declare the I2C devices via devicetree
31 On platforms using devicetree, the declaration of I2C devices is done in
36 .. code-block:: dts
38 i2c1: i2c@400a0000 {
40 clock-frequency = <100000>;
49 gpio-controller;
50 #gpio-cells = <2>;
55 Here, two devices are attached to the bus using a speed of 100kHz. For
60 Declare the I2C devices via ACPI
63 ACPI can also describe I2C devices. There is special documentation for this
64 which is currently located at Documentation/firmware-guide/acpi/enumeration.rst.
67 Declare the I2C devices in board files
72 code. Instantiating I2C devices via board files is done with an array of
78 .. code-block:: c
103 The above code declares 3 devices on I2C bus 1, including their respective
108 --------------------------------------------
110 This method is appropriate when a larger device uses an I2C bus for
113 main chip by the means of an I2C bus. You won't know the number of the I2C
114 bus in advance, so the method 1 described above can't be used. Instead,
115 you can instantiate your I2C devices explicitly. This is done by filling
120 .. code-block:: c
129 efx->board_info.hwmon_client =
130 i2c_new_client_device(&efx->i2c_adap, &sfe4001_hwmon_info);
135 The above code instantiates 1 I2C device on the I2C bus which is on the
138 A variant of this is when you don't know for sure if an I2C device is
147 .. code-block:: c
167 The above code instantiates up to 1 I2C device on the I2C bus which is on
172 The driver which instantiated the I2C device is responsible for destroying
178 Method 3: Probe an I2C bus for certain devices
179 ----------------------------------------------
181 Sometimes you do not have enough information about an I2C device, not even
190 In that case, I2C devices are neither declared nor instantiated
191 explicitly. Instead, i2c-core will probe for such devices as soon as their
192 drivers are loaded, and if any is found, an I2C device will be
196 * The I2C device driver must implement the detect() method, which
205 I2C devices instantiated as a result of such a successful probe will be
207 or when the underlying I2C bus is itself destroyed, whichever happens
210 Those of you familiar with the I2C subsystem of 2.4 kernels and early 2.6
214 * Probing is only one way to instantiate I2C devices now, while it was the
218 * I2C buses must now explicitly say which I2C driver classes can probe
219 them (by the means of the class bitfield), while all I2C buses were
229 Method 4: Instantiate from user-space
230 -------------------------------------
232 In general, the kernel should know which I2C devices are connected and
235 interface is made of 2 attribute files which are created in every I2C bus
238 instantiate, respectively delete, an I2C device.
240 File ``new_device`` takes 2 parameters: the name of the I2C device (a
241 string) and the address of the I2C device (a number, typically expressed
244 File ``delete_device`` takes a single parameter: the address of the I2C
245 device. As no two devices can live at the same address on a given I2C
251 # echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-3/new_device
253 While this interface should only be used when in-kernel device declaration
256 * The I2C driver usually detects devices (method 3 above) but the bus
259 * The I2C driver usually detects devices, but your device lives at an
261 * The I2C driver usually detects devices, but your device is not detected,
264 * You are developing a driver on a test board, where you soldered the I2C
267 This interface is a replacement for the force_* module parameters some I2C
268 drivers implement. Being implemented in i2c-core rather than in each