Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 1 | ============================== |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 2 | How to instantiate I2C devices |
| 3 | ============================== |
| 4 | |
| 5 | Unlike PCI or USB devices, I2C devices are not enumerated at the hardware |
| 6 | level. Instead, the software must know which devices are connected on each |
| 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 |
| 9 | several ways to achieve this, depending on the context and requirements. |
| 10 | |
| 11 | |
Luca Ceresoli | da9a80b | 2020-01-29 16:19:46 +0100 | [diff] [blame] | 12 | Method 1: Declare the I2C devices statically |
| 13 | -------------------------------------------- |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 14 | |
| 15 | This method is appropriate when the I2C bus is a system bus as is the case |
Luca Ceresoli | da9a80b | 2020-01-29 16:19:46 +0100 | [diff] [blame] | 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. |
| 19 | |
| 20 | This information is provided to the kernel in a different way on different |
| 21 | architectures: device tree, ACPI or board files. |
| 22 | |
| 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). |
| 26 | |
| 27 | |
| 28 | Declare the I2C devices via devicetree |
| 29 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 30 | |
| 31 | On platforms using devicetree, the declaration of I2C devices is done in |
| 32 | subnodes of the master controller. |
| 33 | |
| 34 | Example:: |
| 35 | |
| 36 | i2c1: i2c@400a0000 { |
| 37 | /* ... master properties skipped ... */ |
| 38 | clock-frequency = <100000>; |
| 39 | |
| 40 | flash@50 { |
| 41 | compatible = "atmel,24c256"; |
| 42 | reg = <0x50>; |
| 43 | }; |
| 44 | |
| 45 | pca9532: gpio@60 { |
| 46 | compatible = "nxp,pca9532"; |
| 47 | gpio-controller; |
| 48 | #gpio-cells = <2>; |
| 49 | reg = <0x60>; |
| 50 | }; |
| 51 | }; |
| 52 | |
| 53 | Here, two devices are attached to the bus using a speed of 100kHz. For |
| 54 | additional properties which might be needed to set up the device, please refer |
| 55 | to its devicetree documentation in Documentation/devicetree/bindings/. |
| 56 | |
| 57 | |
| 58 | Declare the I2C devices via ACPI |
| 59 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 60 | |
| 61 | ACPI can also describe I2C devices. There is special documentation for this |
| 62 | which is currently located at :doc:`../firmware-guide/acpi/enumeration`. |
| 63 | |
| 64 | |
| 65 | Declare the I2C devices in board files |
| 66 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 67 | |
| 68 | In many embedded architectures, devicetree has replaced the old hardware |
| 69 | description based on board files, but the latter are still used in old |
| 70 | code. Instantiating I2C devices via board files is done with an array of |
| 71 | struct i2c_board_info which is registered by calling |
| 72 | i2c_register_board_info(). |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 73 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 74 | Example (from omap2 h4):: |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 75 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 76 | static struct i2c_board_info h4_i2c_board_info[] __initdata = { |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 77 | { |
| 78 | I2C_BOARD_INFO("isp1301_omap", 0x2d), |
| 79 | .irq = OMAP_GPIO_IRQ(125), |
| 80 | }, |
| 81 | { /* EEPROM on mainboard */ |
| 82 | I2C_BOARD_INFO("24c01", 0x52), |
| 83 | .platform_data = &m24c01, |
| 84 | }, |
| 85 | { /* EEPROM on cpu card */ |
| 86 | I2C_BOARD_INFO("24c01", 0x57), |
| 87 | .platform_data = &m24c01, |
| 88 | }, |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 89 | }; |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 90 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 91 | static void __init omap_h4_init(void) |
| 92 | { |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 93 | (...) |
| 94 | i2c_register_board_info(1, h4_i2c_board_info, |
| 95 | ARRAY_SIZE(h4_i2c_board_info)); |
| 96 | (...) |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 97 | } |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 98 | |
| 99 | The above code declares 3 devices on I2C bus 1, including their respective |
Luca Ceresoli | da9a80b | 2020-01-29 16:19:46 +0100 | [diff] [blame] | 100 | addresses and custom data needed by their drivers. |
Wolfram Sang | fde1e41 | 2014-02-15 15:58:35 +0100 | [diff] [blame] | 101 | |
| 102 | |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 103 | Method 2: Instantiate the devices explicitly |
| 104 | -------------------------------------------- |
| 105 | |
| 106 | This method is appropriate when a larger device uses an I2C bus for |
| 107 | internal communication. A typical case is TV adapters. These can have a |
| 108 | tuner, a video decoder, an audio decoder, etc. usually connected to the |
| 109 | main chip by the means of an I2C bus. You won't know the number of the I2C |
| 110 | bus in advance, so the method 1 described above can't be used. Instead, |
| 111 | you can instantiate your I2C devices explicitly. This is done by filling |
Wolfram Sang | e634a50 | 2020-01-07 18:47:45 +0100 | [diff] [blame] | 112 | a struct i2c_board_info and calling i2c_new_client_device(). |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 113 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 114 | Example (from the sfe4001 network driver):: |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 115 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 116 | static struct i2c_board_info sfe4001_hwmon_info = { |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 117 | I2C_BOARD_INFO("max6647", 0x4e), |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 118 | }; |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 119 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 120 | int sfe4001_init(struct efx_nic *efx) |
| 121 | { |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 122 | (...) |
| 123 | efx->board_info.hwmon_client = |
Wolfram Sang | e634a50 | 2020-01-07 18:47:45 +0100 | [diff] [blame] | 124 | i2c_new_client_device(&efx->i2c_adap, &sfe4001_hwmon_info); |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 125 | |
| 126 | (...) |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 127 | } |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 128 | |
| 129 | The above code instantiates 1 I2C device on the I2C bus which is on the |
| 130 | network adapter in question. |
| 131 | |
| 132 | A variant of this is when you don't know for sure if an I2C device is |
| 133 | present or not (for example for an optional feature which is not present |
| 134 | on cheap variants of a board but you have no way to tell them apart), or |
| 135 | it may have different addresses from one board to the next (manufacturer |
| 136 | changing its design without notice). In this case, you can call |
Wolfram Sang | e634a50 | 2020-01-07 18:47:45 +0100 | [diff] [blame] | 137 | i2c_new_scanned_device() instead of i2c_new_client_device(). |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 138 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 139 | Example (from the nxp OHCI driver):: |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 140 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 141 | static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END }; |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 142 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 143 | static int usb_hcd_nxp_probe(struct platform_device *pdev) |
| 144 | { |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 145 | (...) |
| 146 | struct i2c_adapter *i2c_adap; |
| 147 | struct i2c_board_info i2c_info; |
| 148 | |
| 149 | (...) |
| 150 | i2c_adap = i2c_get_adapter(2); |
| 151 | memset(&i2c_info, 0, sizeof(struct i2c_board_info)); |
Stephen Kitt | 220ee02 | 2019-06-13 18:25:48 +0200 | [diff] [blame] | 152 | strscpy(i2c_info.type, "isp1301_nxp", sizeof(i2c_info.type)); |
Wolfram Sang | c1d08475 | 2019-11-06 10:50:19 +0100 | [diff] [blame] | 153 | isp1301_i2c_client = i2c_new_scanned_device(i2c_adap, &i2c_info, |
| 154 | normal_i2c, NULL); |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 155 | i2c_put_adapter(i2c_adap); |
| 156 | (...) |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 157 | } |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 158 | |
| 159 | The above code instantiates up to 1 I2C device on the I2C bus which is on |
| 160 | the OHCI adapter in question. It first tries at address 0x2c, if nothing |
| 161 | is found there it tries address 0x2d, and if still nothing is found, it |
| 162 | simply gives up. |
| 163 | |
| 164 | The driver which instantiated the I2C device is responsible for destroying |
| 165 | it on cleanup. This is done by calling i2c_unregister_device() on the |
Wolfram Sang | e634a50 | 2020-01-07 18:47:45 +0100 | [diff] [blame] | 166 | pointer that was earlier returned by i2c_new_client_device() or |
Wolfram Sang | c1d08475 | 2019-11-06 10:50:19 +0100 | [diff] [blame] | 167 | i2c_new_scanned_device(). |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 168 | |
| 169 | |
| 170 | Method 3: Probe an I2C bus for certain devices |
| 171 | ---------------------------------------------- |
| 172 | |
| 173 | Sometimes you do not have enough information about an I2C device, not even |
Wolfram Sang | c1d08475 | 2019-11-06 10:50:19 +0100 | [diff] [blame] | 174 | to call i2c_new_scanned_device(). The typical case is hardware monitoring |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 175 | chips on PC mainboards. There are several dozen models, which can live |
| 176 | at 25 different addresses. Given the huge number of mainboards out there, |
| 177 | it is next to impossible to build an exhaustive list of the hardware |
| 178 | monitoring chips being used. Fortunately, most of these chips have |
| 179 | manufacturer and device ID registers, so they can be identified by |
| 180 | probing. |
| 181 | |
| 182 | In that case, I2C devices are neither declared nor instantiated |
| 183 | explicitly. Instead, i2c-core will probe for such devices as soon as their |
| 184 | drivers are loaded, and if any is found, an I2C device will be |
| 185 | instantiated automatically. In order to prevent any misbehavior of this |
| 186 | mechanism, the following restrictions apply: |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 187 | |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 188 | * The I2C device driver must implement the detect() method, which |
| 189 | identifies a supported device by reading from arbitrary registers. |
| 190 | * Only buses which are likely to have a supported device and agree to be |
| 191 | probed, will be probed. For example this avoids probing for hardware |
| 192 | monitoring chips on a TV adapter. |
| 193 | |
| 194 | Example: |
| 195 | See lm90_driver and lm90_detect() in drivers/hwmon/lm90.c |
| 196 | |
| 197 | I2C devices instantiated as a result of such a successful probe will be |
| 198 | destroyed automatically when the driver which detected them is removed, |
| 199 | or when the underlying I2C bus is itself destroyed, whichever happens |
| 200 | first. |
| 201 | |
Luca Ceresoli | 2f07c05 | 2020-01-29 16:19:29 +0100 | [diff] [blame] | 202 | Those of you familiar with the I2C subsystem of 2.4 kernels and early 2.6 |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 203 | kernels will find out that this method 3 is essentially similar to what |
| 204 | was done there. Two significant differences are: |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 205 | |
Jean Delvare | 764c169 | 2009-03-28 21:34:40 +0100 | [diff] [blame] | 206 | * Probing is only one way to instantiate I2C devices now, while it was the |
| 207 | only way back then. Where possible, methods 1 and 2 should be preferred. |
| 208 | Method 3 should only be used when there is no other way, as it can have |
| 209 | undesirable side effects. |
| 210 | * I2C buses must now explicitly say which I2C driver classes can probe |
| 211 | them (by the means of the class bitfield), while all I2C buses were |
| 212 | probed by default back then. The default is an empty class which means |
| 213 | that no probing happens. The purpose of the class bitfield is to limit |
| 214 | the aforementioned undesirable side effects. |
| 215 | |
| 216 | Once again, method 3 should be avoided wherever possible. Explicit device |
| 217 | instantiation (methods 1 and 2) is much preferred for it is safer and |
| 218 | faster. |
Jean Delvare | 99cd8e2 | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 219 | |
| 220 | |
| 221 | Method 4: Instantiate from user-space |
| 222 | ------------------------------------- |
| 223 | |
| 224 | In general, the kernel should know which I2C devices are connected and |
| 225 | what addresses they live at. However, in certain cases, it does not, so a |
| 226 | sysfs interface was added to let the user provide the information. This |
| 227 | interface is made of 2 attribute files which are created in every I2C bus |
Luca Ceresoli | 22714ef | 2020-01-29 16:19:47 +0100 | [diff] [blame] | 228 | directory: ``new_device`` and ``delete_device``. Both files are write |
| 229 | only and you must write the right parameters to them in order to properly |
| 230 | instantiate, respectively delete, an I2C device. |
Jean Delvare | 99cd8e2 | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 231 | |
Luca Ceresoli | 22714ef | 2020-01-29 16:19:47 +0100 | [diff] [blame] | 232 | File ``new_device`` takes 2 parameters: the name of the I2C device (a |
| 233 | string) and the address of the I2C device (a number, typically expressed |
| 234 | in hexadecimal starting with 0x, but can also be expressed in decimal.) |
Jean Delvare | 99cd8e2 | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 235 | |
Luca Ceresoli | 22714ef | 2020-01-29 16:19:47 +0100 | [diff] [blame] | 236 | File ``delete_device`` takes a single parameter: the address of the I2C |
Jean Delvare | 99cd8e2 | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 237 | device. As no two devices can live at the same address on a given I2C |
| 238 | segment, the address is sufficient to uniquely identify the device to be |
| 239 | deleted. |
| 240 | |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 241 | Example:: |
| 242 | |
| 243 | # echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-3/new_device |
Jean Delvare | 99cd8e2 | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 244 | |
| 245 | While this interface should only be used when in-kernel device declaration |
| 246 | can't be done, there is a variety of cases where it can be helpful: |
Mauro Carvalho Chehab | ccf988b | 2019-07-26 09:51:16 -0300 | [diff] [blame] | 247 | |
Jean Delvare | 99cd8e2 | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 248 | * The I2C driver usually detects devices (method 3 above) but the bus |
| 249 | segment your device lives on doesn't have the proper class bit set and |
| 250 | thus detection doesn't trigger. |
| 251 | * The I2C driver usually detects devices, but your device lives at an |
| 252 | unexpected address. |
| 253 | * The I2C driver usually detects devices, but your device is not detected, |
| 254 | either because the detection routine is too strict, or because your |
| 255 | device is not officially supported yet but you know it is compatible. |
| 256 | * You are developing a driver on a test board, where you soldered the I2C |
| 257 | device yourself. |
| 258 | |
| 259 | This interface is a replacement for the force_* module parameters some I2C |
| 260 | drivers implement. Being implemented in i2c-core rather than in each |
| 261 | device driver individually, it is much more efficient, and also has the |
| 262 | advantage that you do not have to reload the driver to change a setting. |
| 263 | You can also instantiate the device before the driver is loaded or even |
| 264 | available, and you don't need to know what driver the device needs. |