f2fs: Provide a splice-read wrapper
[linux-block.git] / Documentation / i2c / i2c-sysfs.rst
CommitLineData
31df7195
AQ
1.. SPDX-License-Identifier: GPL-2.0
2
3===============
4Linux I2C Sysfs
5===============
6
7Overview
8========
9
10I2C topology can be complex because of the existence of I2C MUX
11(I2C Multiplexer). The Linux
12kernel abstracts the MUX channels into logical I2C bus numbers. However, there
13is a gap of knowledge to map from the I2C bus physical number and MUX topology
14to logical I2C bus number. This doc is aimed to fill in this gap, so the
15audience (hardware engineers and new software developers for example) can learn
16the concept of logical I2C buses in the kernel, by knowing the physical I2C
17topology and navigating through the I2C sysfs in Linux shell. This knowledge is
18useful and essential to use ``i2c-tools`` for the purpose of development and
19debugging.
20
21Target audience
22---------------
23
24People who need to use Linux shell to interact with I2C subsystem on a system
25which the Linux is running on.
26
27Prerequisites
28-------------
29
301. Knowledge of general Linux shell file system commands and operations.
31
322. General knowledge of I2C, I2C MUX and I2C topology.
33
34Location of I2C Sysfs
35=====================
36
37Typically, the Linux Sysfs filesystem is mounted at the ``/sys`` directory,
38so you can find the I2C Sysfs under ``/sys/bus/i2c/devices``
39where you can directly ``cd`` to it.
40There is a list of symbolic links under that directory. The links that
41start with ``i2c-`` are I2C buses, which may be either physical or logical. The
42other links that begin with numbers and end with numbers are I2C devices, where
43the first number is I2C bus number, and the second number is I2C address.
44
45Google Pixel 3 phone for example::
46
47 blueline:/sys/bus/i2c/devices $ ls
48 0-0008 0-0061 1-0028 3-0043 4-0036 4-0041 i2c-1 i2c-3
49 0-000c 0-0066 2-0049 4-000b 4-0040 i2c-0 i2c-2 i2c-4
50
51``i2c-2`` is an I2C bus whose number is 2, and ``2-0049`` is an I2C device
52on bus 2 address 0x49 bound with a kernel driver.
53
55bdfb8b
LC
54Terminology
55===========
31df7195 56
55bdfb8b 57First, let us define some terms to avoid confusion in later sections.
31df7195
AQ
58
59(Physical) I2C Bus Controller
60-----------------------------
61
62The hardware system that the Linux kernel is running on may have multiple
63physical I2C bus controllers. The controllers are hardware and physical, and the
64system may define multiple registers in the memory space to manipulate the
65controllers. Linux kernel has I2C bus drivers under source directory
66``drivers/i2c/busses`` to translate kernel I2C API into register
67operations for different systems. This terminology is not limited to Linux
68kernel only.
69
70I2C Bus Physical Number
71-----------------------
72
73For each physical I2C bus controller, the system vendor may assign a physical
74number to each controller. For example, the first I2C bus controller which has
75the lowest register addresses may be called ``I2C-0``.
76
77Logical I2C Bus
78---------------
79
80Every I2C bus number you see in Linux I2C Sysfs is a logical I2C bus with a
81number assigned. This is similar to the fact that software code is usually
82written upon virtual memory space, instead of physical memory space.
83
84Each logical I2C bus may be an abstraction of a physical I2C bus controller, or
85an abstraction of a channel behind an I2C MUX. In case it is an abstraction of a
86MUX channel, whenever we access an I2C device via a such logical bus, the kernel
87will switch the I2C MUX for you to the proper channel as part of the
88abstraction.
89
90Physical I2C Bus
91----------------
92
93If the logical I2C bus is a direct abstraction of a physical I2C bus controller,
94let us call it a physical I2C bus.
95
96Caveat
97------
98
99This may be a confusing part for people who only know about the physical I2C
100design of a board. It is actually possible to rename the I2C bus physical number
101to a different number in logical I2C bus level in Device Tree Source (DTS) under
fe99b819 102section ``aliases``. See ``arch/arm/boot/dts/nuvoton-npcm730-gsj.dts``
31df7195
AQ
103for an example of DTS file.
104
105Best Practice: **(To kernel software developers)** It is better to keep the I2C
106bus physical number the same as their corresponding logical I2C bus number,
107instead of renaming or mapping them, so that it may be less confusing to other
108users. These physical I2C buses can be served as good starting points for I2C
109MUX fanouts. For the following examples, we will assume that the physical I2C
110bus has a number same as their I2C bus physical number.
111
112Walk through Logical I2C Bus
113============================
114
115For the following content, we will use a more complex I2C topology as an
116example. Here is a brief graph for the I2C topology. If you do not understand
55bdfb8b 117this graph at first glance, do not be afraid to continue reading this doc
31df7195
AQ
118and review it when you finish reading.
119
120::
121
122 i2c-7 (physical I2C bus controller 7)
123 `-- 7-0071 (4-channel I2C MUX at 0x71)
124 |-- i2c-60 (channel-0)
125 |-- i2c-73 (channel-1)
126 | |-- 73-0040 (I2C sensor device with hwmon directory)
127 | |-- 73-0070 (I2C MUX at 0x70, exists in DTS, but failed to probe)
128 | `-- 73-0072 (8-channel I2C MUX at 0x72)
129 | |-- i2c-78 (channel-0)
130 | |-- ... (channel-1...6, i2c-79...i2c-84)
131 | `-- i2c-85 (channel-7)
132 |-- i2c-86 (channel-2)
133 `-- i2c-203 (channel-3)
134
135Distinguish Physical and Logical I2C Bus
136----------------------------------------
137
138One simple way to distinguish between a physical I2C bus and a logical I2C bus,
139is to read the symbolic link ``device`` under the I2C bus directory by using
140command ``ls -l`` or ``readlink``.
141
142An alternative symbolic link to check is ``mux_device``. This link only exists
143in logical I2C bus directory which is fanned out from another I2C bus.
144Reading this link will also tell you which I2C MUX device created
145this logical I2C bus.
146
147If the symbolic link points to a directory ending with ``.i2c``, it should be a
148physical I2C bus, directly abstracting a physical I2C bus controller. For
149example::
150
151 $ readlink /sys/bus/i2c/devices/i2c-7/device
152 ../../f0087000.i2c
153 $ ls /sys/bus/i2c/devices/i2c-7/mux_device
154 ls: /sys/bus/i2c/devices/i2c-7/mux_device: No such file or directory
155
156In this case, ``i2c-7`` is a physical I2C bus, so it does not have the symbolic
157link ``mux_device`` under its directory. And if the kernel software developer
158follows the common practice by not renaming physical I2C buses, this should also
159mean the physical I2C bus controller 7 of the system.
160
161On the other hand, if the symbolic link points to another I2C bus, the I2C bus
162presented by the current directory has to be a logical bus. The I2C bus pointed
163by the link is the parent bus which may be either a physical I2C bus or a
164logical one. In this case, the I2C bus presented by the current directory
165abstracts an I2C MUX channel under the parent bus.
166
167For example::
168
169 $ readlink /sys/bus/i2c/devices/i2c-73/device
170 ../../i2c-7
171 $ readlink /sys/bus/i2c/devices/i2c-73/mux_device
172 ../7-0071
173
174``i2c-73`` is a logical bus fanout by an I2C MUX under ``i2c-7``
175whose I2C address is 0x71.
176Whenever we access an I2C device with bus 73, the kernel will always
177switch the I2C MUX addressed 0x71 to the proper channel for you as part of the
178abstraction.
179
180Finding out Logical I2C Bus Number
181----------------------------------
182
183In this section, we will describe how to find out the logical I2C bus number
184representing certain I2C MUX channels based on the knowledge of physical
185hardware I2C topology.
186
187In this example, we have a system which has a physical I2C bus 7 and not renamed
188in DTS. There is a 4-channel MUX at address 0x71 on that bus. There is another
1898-channel MUX at address 0x72 behind the channel 1 of the 0x71 MUX. Let us
190navigate through Sysfs and find out the logical I2C bus number of the channel 3
191of the 0x72 MUX.
192
193First of all, let us go to the directory of ``i2c-7``::
194
195 ~$ cd /sys/bus/i2c/devices/i2c-7
196 /sys/bus/i2c/devices/i2c-7$ ls
197 7-0071 i2c-60 name subsystem
198 delete_device i2c-73 new_device uevent
199 device i2c-86 of_node
200 i2c-203 i2c-dev power
201
202There, we see the 0x71 MUX as ``7-0071``. Go inside it::
203
204 /sys/bus/i2c/devices/i2c-7$ cd 7-0071/
205 /sys/bus/i2c/devices/i2c-7/7-0071$ ls -l
206 channel-0 channel-3 modalias power
207 channel-1 driver name subsystem
208 channel-2 idle_state of_node uevent
209
210Read the link ``channel-1`` using ``readlink`` or ``ls -l``::
211
212 /sys/bus/i2c/devices/i2c-7/7-0071$ readlink channel-1
213 ../i2c-73
214
215We find out that the channel 1 of 0x71 MUX on ``i2c-7`` is assigned
216with a logical I2C bus number of 73.
217Let us continue the journey to directory ``i2c-73`` in either ways::
218
219 # cd to i2c-73 under I2C Sysfs root
220 /sys/bus/i2c/devices/i2c-7/7-0071$ cd /sys/bus/i2c/devices/i2c-73
221 /sys/bus/i2c/devices/i2c-73$
222
223 # cd the channel symbolic link
224 /sys/bus/i2c/devices/i2c-7/7-0071$ cd channel-1
225 /sys/bus/i2c/devices/i2c-7/7-0071/channel-1$
226
227 # cd the link content
228 /sys/bus/i2c/devices/i2c-7/7-0071$ cd ../i2c-73
229 /sys/bus/i2c/devices/i2c-7/i2c-73$
230
231Either ways, you will end up in the directory of ``i2c-73``. Similar to above,
232we can now find the 0x72 MUX and what logical I2C bus numbers
233that its channels are assigned::
234
235 /sys/bus/i2c/devices/i2c-73$ ls
236 73-0040 device i2c-83 new_device
237 73-004e i2c-78 i2c-84 of_node
238 73-0050 i2c-79 i2c-85 power
239 73-0070 i2c-80 i2c-dev subsystem
240 73-0072 i2c-81 mux_device uevent
241 delete_device i2c-82 name
242 /sys/bus/i2c/devices/i2c-73$ cd 73-0072
243 /sys/bus/i2c/devices/i2c-73/73-0072$ ls
244 channel-0 channel-4 driver of_node
245 channel-1 channel-5 idle_state power
246 channel-2 channel-6 modalias subsystem
247 channel-3 channel-7 name uevent
248 /sys/bus/i2c/devices/i2c-73/73-0072$ readlink channel-3
249 ../i2c-81
250
251There, we find out the logical I2C bus number of the channel 3 of the 0x72 MUX
252is 81. We can later use this number to switch to its own I2C Sysfs directory or
253issue ``i2c-tools`` commands.
254
255Tip: Once you understand the I2C topology with MUX, command
256`i2cdetect -l
257<https://manpages.debian.org/unstable/i2c-tools/i2cdetect.8.en.html>`_
258in
259`I2C Tools
260<https://i2c.wiki.kernel.org/index.php/I2C_Tools>`_
261can give you
262an overview of the I2C topology easily, if it is available on your system. For
263example::
264
265 $ i2cdetect -l | grep -e '\-73' -e _7 | sort -V
266 i2c-7 i2c npcm_i2c_7 I2C adapter
267 i2c-73 i2c i2c-7-mux (chan_id 1) I2C adapter
268 i2c-78 i2c i2c-73-mux (chan_id 0) I2C adapter
269 i2c-79 i2c i2c-73-mux (chan_id 1) I2C adapter
270 i2c-80 i2c i2c-73-mux (chan_id 2) I2C adapter
271 i2c-81 i2c i2c-73-mux (chan_id 3) I2C adapter
272 i2c-82 i2c i2c-73-mux (chan_id 4) I2C adapter
273 i2c-83 i2c i2c-73-mux (chan_id 5) I2C adapter
274 i2c-84 i2c i2c-73-mux (chan_id 6) I2C adapter
275 i2c-85 i2c i2c-73-mux (chan_id 7) I2C adapter
276
277Pinned Logical I2C Bus Number
278-----------------------------
279
280If not specified in DTS, when an I2C MUX driver is applied and the MUX device is
281successfully probed, the kernel will assign the MUX channels with a logical bus
282number based on the current biggest logical bus number incrementally. For
283example, if the system has ``i2c-15`` as the highest logical bus number, and a
2844-channel MUX is applied successfully, we will have ``i2c-16`` for the
285MUX channel 0, and all the way to ``i2c-19`` for the MUX channel 3.
286
287The kernel software developer is able to pin the fanout MUX channels to a static
288logical I2C bus number in the DTS. This doc will not go through the details on
289how to implement this in DTS, but we can see an example in:
fe99b819 290``arch/arm/boot/dts/aspeed-bmc-facebook-wedge400.dts``
31df7195
AQ
291
292In the above example, there is an 8-channel I2C MUX at address 0x70 on physical
293I2C bus 2. The channel 2 of the MUX is defined as ``imux18`` in DTS,
294and pinned to logical I2C bus number 18 with the line of ``i2c18 = &imux18;``
295in section ``aliases``.
296
297Take it further, it is possible to design a logical I2C bus number schema that
298can be easily remembered by humans or calculated arithmetically. For example, we
299can pin the fanout channels of a MUX on bus 3 to start at 30. So 30 will be the
300logical bus number of the channel 0 of the MUX on bus 3, and 37 will be the
301logical bus number of the channel 7 of the MUX on bus 3.
302
303I2C Devices
304===========
305
306In previous sections, we mostly covered the I2C bus. In this section, let us see
307what we can learn from the I2C device directory whose link name is in the format
308of ``${bus}-${addr}``. The ``${bus}`` part in the name is a logical I2C bus
309decimal number, while the ``${addr}`` part is a hex number of the I2C address
310of each device.
311
312I2C Device Directory Content
313----------------------------
314
315Inside each I2C device directory, there is a file named ``name``.
316This file tells what device name it was used for the kernel driver to
317probe this device. Use command ``cat`` to read its content. For example::
318
319 /sys/bus/i2c/devices/i2c-73$ cat 73-0040/name
320 ina230
321 /sys/bus/i2c/devices/i2c-73$ cat 73-0070/name
322 pca9546
323 /sys/bus/i2c/devices/i2c-73$ cat 73-0072/name
324 pca9547
325
326There is a symbolic link named ``driver`` to tell what Linux kernel driver was
327used to probe this device::
328
329 /sys/bus/i2c/devices/i2c-73$ readlink -f 73-0040/driver
330 /sys/bus/i2c/drivers/ina2xx
331 /sys/bus/i2c/devices/i2c-73$ readlink -f 73-0072/driver
332 /sys/bus/i2c/drivers/pca954x
333
334But if the link ``driver`` does not exist at the first place,
335it may mean that the kernel driver failed to probe this device due to
336some errors. The error may be found in ``dmesg``::
337
338 /sys/bus/i2c/devices/i2c-73$ ls 73-0070/driver
339 ls: 73-0070/driver: No such file or directory
340 /sys/bus/i2c/devices/i2c-73$ dmesg | grep 73-0070
341 pca954x 73-0070: probe failed
342 pca954x 73-0070: probe failed
343
344Depending on what the I2C device is and what kernel driver was used to probe the
345device, we may have different content in the device directory.
346
347I2C MUX Device
348--------------
349
350While you may be already aware of this in previous sections, an I2C MUX device
351will have symbolic link ``channel-*`` inside its device directory.
352These symbolic links point to their logical I2C bus directories::
353
354 /sys/bus/i2c/devices/i2c-73$ ls -l 73-0072/channel-*
355 lrwxrwxrwx ... 73-0072/channel-0 -> ../i2c-78
356 lrwxrwxrwx ... 73-0072/channel-1 -> ../i2c-79
357 lrwxrwxrwx ... 73-0072/channel-2 -> ../i2c-80
358 lrwxrwxrwx ... 73-0072/channel-3 -> ../i2c-81
359 lrwxrwxrwx ... 73-0072/channel-4 -> ../i2c-82
360 lrwxrwxrwx ... 73-0072/channel-5 -> ../i2c-83
361 lrwxrwxrwx ... 73-0072/channel-6 -> ../i2c-84
362 lrwxrwxrwx ... 73-0072/channel-7 -> ../i2c-85
363
364I2C Sensor Device / Hwmon
365-------------------------
366
367I2C sensor device is also common to see. If they are bound by a kernel hwmon
368(Hardware Monitoring) driver successfully, you will see a ``hwmon`` directory
369inside the I2C device directory. Keep digging into it, you will find the Hwmon
370Sysfs for the I2C sensor device::
371
372 /sys/bus/i2c/devices/i2c-73/73-0040/hwmon/hwmon17$ ls
373 curr1_input in0_lcrit_alarm name subsystem
374 device in1_crit power uevent
375 in0_crit in1_crit_alarm power1_crit update_interval
376 in0_crit_alarm in1_input power1_crit_alarm
377 in0_input in1_lcrit power1_input
378 in0_lcrit in1_lcrit_alarm shunt_resistor
379
380For more info on the Hwmon Sysfs, refer to the doc:
381
fe99b819 382../hwmon/sysfs-interface.rst
31df7195
AQ
383
384Instantiate I2C Devices in I2C Sysfs
385------------------------------------
386
fe99b819 387Refer to section "Method 4: Instantiate from user-space" of instantiating-devices.rst