diff options
Diffstat (limited to 'Documentation/i2c')
| -rw-r--r-- | Documentation/i2c/busses/i2c-i801 | 3 | ||||
| -rw-r--r-- | Documentation/i2c/busses/i2c-parport | 3 | ||||
| -rw-r--r-- | Documentation/i2c/busses/i2c-parport-light | 11 | ||||
| -rw-r--r-- | Documentation/i2c/busses/i2c-voodoo3 | 62 | ||||
| -rw-r--r-- | Documentation/i2c/i2c-stub | 16 | ||||
| -rw-r--r-- | Documentation/i2c/old-module-parameters | 44 | ||||
| -rw-r--r-- | Documentation/i2c/smbus-protocol | 16 | ||||
| -rw-r--r-- | Documentation/i2c/writing-clients | 12 |
8 files changed, 96 insertions, 71 deletions
diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801 index 81c0c59a60ea..e1bb5b261693 100644 --- a/Documentation/i2c/busses/i2c-i801 +++ b/Documentation/i2c/busses/i2c-i801 | |||
| @@ -15,7 +15,8 @@ Supported adapters: | |||
| 15 | * Intel 82801I (ICH9) | 15 | * Intel 82801I (ICH9) |
| 16 | * Intel EP80579 (Tolapai) | 16 | * Intel EP80579 (Tolapai) |
| 17 | * Intel 82801JI (ICH10) | 17 | * Intel 82801JI (ICH10) |
| 18 | * Intel PCH | 18 | * Intel 3400/5 Series (PCH) |
| 19 | * Intel Cougar Point (PCH) | ||
| 19 | Datasheets: Publicly available at the Intel website | 20 | Datasheets: Publicly available at the Intel website |
| 20 | 21 | ||
| 21 | Authors: | 22 | Authors: |
diff --git a/Documentation/i2c/busses/i2c-parport b/Documentation/i2c/busses/i2c-parport index dceaba1ad930..2461c7b53b2c 100644 --- a/Documentation/i2c/busses/i2c-parport +++ b/Documentation/i2c/busses/i2c-parport | |||
| @@ -29,6 +29,9 @@ can be easily added when needed. | |||
| 29 | Earlier kernels defaulted to type=0 (Philips). But now, if the type | 29 | Earlier kernels defaulted to type=0 (Philips). But now, if the type |
| 30 | parameter is missing, the driver will simply fail to initialize. | 30 | parameter is missing, the driver will simply fail to initialize. |
| 31 | 31 | ||
| 32 | SMBus alert support is available on adapters which have this line properly | ||
| 33 | connected to the parallel port's interrupt pin. | ||
| 34 | |||
| 32 | 35 | ||
| 33 | Building your own adapter | 36 | Building your own adapter |
| 34 | ------------------------- | 37 | ------------------------- |
diff --git a/Documentation/i2c/busses/i2c-parport-light b/Documentation/i2c/busses/i2c-parport-light index 287436478520..bdc9cbb2e0f2 100644 --- a/Documentation/i2c/busses/i2c-parport-light +++ b/Documentation/i2c/busses/i2c-parport-light | |||
| @@ -9,3 +9,14 @@ parport handling is not an option. The drawback is a reduced portability | |||
| 9 | and the impossibility to daisy-chain other parallel port devices. | 9 | and the impossibility to daisy-chain other parallel port devices. |
| 10 | 10 | ||
| 11 | Please see i2c-parport for documentation. | 11 | Please see i2c-parport for documentation. |
| 12 | |||
| 13 | Module parameters: | ||
| 14 | |||
| 15 | * type: type of adapter (see i2c-parport or modinfo) | ||
| 16 | |||
| 17 | * base: base I/O address | ||
| 18 | Default is 0x378 which is fairly common for parallel ports, at least on PC. | ||
| 19 | |||
| 20 | * irq: optional IRQ | ||
| 21 | This must be passed if you want SMBus alert support, assuming your adapter | ||
| 22 | actually supports this. | ||
diff --git a/Documentation/i2c/busses/i2c-voodoo3 b/Documentation/i2c/busses/i2c-voodoo3 deleted file mode 100644 index 62d90a454d39..000000000000 --- a/Documentation/i2c/busses/i2c-voodoo3 +++ /dev/null | |||
| @@ -1,62 +0,0 @@ | |||
| 1 | Kernel driver i2c-voodoo3 | ||
| 2 | |||
| 3 | Supported adapters: | ||
| 4 | * 3dfx Voodoo3 based cards | ||
| 5 | * Voodoo Banshee based cards | ||
| 6 | |||
| 7 | Authors: | ||
| 8 | Frodo Looijaard <frodol@dds.nl>, | ||
| 9 | Philip Edelbrock <phil@netroedge.com>, | ||
| 10 | Ralph Metzler <rjkm@thp.uni-koeln.de>, | ||
| 11 | Mark D. Studebaker <mdsxyz123@yahoo.com> | ||
| 12 | |||
| 13 | Main contact: Philip Edelbrock <phil@netroedge.com> | ||
| 14 | |||
| 15 | The code is based upon Ralph's test code (he did the hard stuff ;') | ||
| 16 | |||
| 17 | Description | ||
| 18 | ----------- | ||
| 19 | |||
| 20 | The 3dfx Voodoo3 chip contains two I2C interfaces (aka a I2C 'master' or | ||
| 21 | 'host'). | ||
| 22 | |||
| 23 | The first interface is used for DDC (Data Display Channel) which is a | ||
| 24 | serial channel through the VGA monitor connector to a DDC-compliant | ||
| 25 | monitor. This interface is defined by the Video Electronics Standards | ||
| 26 | Association (VESA). The standards are available for purchase at | ||
| 27 | http://www.vesa.org . | ||
| 28 | |||
| 29 | The second interface is a general-purpose I2C bus. The intent by 3dfx was | ||
| 30 | to allow manufacturers to add extra chips to the video card such as a | ||
| 31 | TV-out chip such as the BT869 or possibly even I2C based temperature | ||
| 32 | sensors like the ADM1021 or LM75. | ||
| 33 | |||
| 34 | Stability | ||
| 35 | --------- | ||
| 36 | |||
| 37 | Seems to be stable on the test machine, but needs more testing on other | ||
| 38 | machines. Simultaneous accesses of the DDC and I2C busses may cause errors. | ||
| 39 | |||
| 40 | Supported Devices | ||
| 41 | ----------------- | ||
| 42 | |||
| 43 | Specifically, this driver was written and tested on the '3dfx Voodoo3 AGP | ||
| 44 | 3000' which has a tv-out feature (s-video or composite). According to the | ||
| 45 | docs and discussions, this code should work for any Voodoo3 based cards as | ||
| 46 | well as Voodoo Banshee based cards. The DDC interface has been tested on a | ||
| 47 | Voodoo Banshee card. | ||
| 48 | |||
| 49 | Issues | ||
| 50 | ------ | ||
| 51 | |||
| 52 | Probably many, but it seems to work OK on my system. :') | ||
| 53 | |||
| 54 | |||
| 55 | External Device Connection | ||
| 56 | -------------------------- | ||
| 57 | |||
| 58 | The digital video input jumpers give availability to the I2C bus. | ||
| 59 | Specifically, pins 13 and 25 (bottom row middle, and bottom right-end) are | ||
| 60 | the I2C clock and I2C data lines, respectively. +5V and GND are probably | ||
| 61 | also easily available making the addition of extra I2C/SMBus devices easy | ||
| 62 | to implement. | ||
diff --git a/Documentation/i2c/i2c-stub b/Documentation/i2c/i2c-stub index 0d8be1c20c16..fa4b669c166b 100644 --- a/Documentation/i2c/i2c-stub +++ b/Documentation/i2c/i2c-stub | |||
| @@ -2,9 +2,9 @@ MODULE: i2c-stub | |||
| 2 | 2 | ||
| 3 | DESCRIPTION: | 3 | DESCRIPTION: |
| 4 | 4 | ||
| 5 | This module is a very simple fake I2C/SMBus driver. It implements four | 5 | This module is a very simple fake I2C/SMBus driver. It implements five |
| 6 | types of SMBus commands: write quick, (r/w) byte, (r/w) byte data, and | 6 | types of SMBus commands: write quick, (r/w) byte, (r/w) byte data, (r/w) |
| 7 | (r/w) word data. | 7 | word data, and (r/w) I2C block data. |
| 8 | 8 | ||
| 9 | You need to provide chip addresses as a module parameter when loading this | 9 | You need to provide chip addresses as a module parameter when loading this |
| 10 | driver, which will then only react to SMBus commands to these addresses. | 10 | driver, which will then only react to SMBus commands to these addresses. |
| @@ -21,8 +21,8 @@ EEPROMs, among others. | |||
| 21 | 21 | ||
| 22 | The typical use-case is like this: | 22 | The typical use-case is like this: |
| 23 | 1. load this module | 23 | 1. load this module |
| 24 | 2. use i2cset (from lm_sensors project) to pre-load some data | 24 | 2. use i2cset (from the i2c-tools project) to pre-load some data |
| 25 | 3. load the target sensors chip driver module | 25 | 3. load the target chip driver module |
| 26 | 4. observe its behavior in the kernel log | 26 | 4. observe its behavior in the kernel log |
| 27 | 27 | ||
| 28 | There's a script named i2c-stub-from-dump in the i2c-tools package which | 28 | There's a script named i2c-stub-from-dump in the i2c-tools package which |
| @@ -33,6 +33,12 @@ PARAMETERS: | |||
| 33 | int chip_addr[10]: | 33 | int chip_addr[10]: |
| 34 | The SMBus addresses to emulate chips at. | 34 | The SMBus addresses to emulate chips at. |
| 35 | 35 | ||
| 36 | unsigned long functionality: | ||
| 37 | Functionality override, to disable some commands. See I2C_FUNC_* | ||
| 38 | constants in <linux/i2c.h> for the suitable values. For example, | ||
| 39 | value 0x1f0000 would only enable the quick, byte and byte data | ||
| 40 | commands. | ||
| 41 | |||
| 36 | CAVEATS: | 42 | CAVEATS: |
| 37 | 43 | ||
| 38 | If your target driver polls some byte or word waiting for it to change, the | 44 | If your target driver polls some byte or word waiting for it to change, the |
diff --git a/Documentation/i2c/old-module-parameters b/Documentation/i2c/old-module-parameters new file mode 100644 index 000000000000..8e2b629d533c --- /dev/null +++ b/Documentation/i2c/old-module-parameters | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | I2C device driver binding control from user-space | ||
| 2 | ================================================= | ||
| 3 | |||
| 4 | Up to kernel 2.6.32, many i2c drivers used helper macros provided by | ||
| 5 | <linux/i2c.h> which created standard module parameters to let the user | ||
| 6 | control how the driver would probe i2c buses and attach to devices. These | ||
| 7 | parameters were known as "probe" (to let the driver probe for an extra | ||
| 8 | address), "force" (to forcibly attach the driver to a given device) and | ||
| 9 | "ignore" (to prevent a driver from probing a given address). | ||
| 10 | |||
| 11 | With the conversion of the i2c subsystem to the standard device driver | ||
| 12 | binding model, it became clear that these per-module parameters were no | ||
| 13 | longer needed, and that a centralized implementation was possible. The new, | ||
| 14 | sysfs-based interface is described in the documentation file | ||
| 15 | "instantiating-devices", section "Method 4: Instantiate from user-space". | ||
| 16 | |||
| 17 | Below is a mapping from the old module parameters to the new interface. | ||
| 18 | |||
| 19 | Attaching a driver to an I2C device | ||
| 20 | ----------------------------------- | ||
| 21 | |||
| 22 | Old method (module parameters): | ||
| 23 | # modprobe <driver> probe=1,0x2d | ||
| 24 | # modprobe <driver> force=1,0x2d | ||
| 25 | # modprobe <driver> force_<device>=1,0x2d | ||
| 26 | |||
| 27 | New method (sysfs interface): | ||
| 28 | # echo <device> 0x2d > /sys/bus/i2c/devices/i2c-1/new_device | ||
| 29 | |||
| 30 | Preventing a driver from attaching to an I2C device | ||
| 31 | --------------------------------------------------- | ||
| 32 | |||
| 33 | Old method (module parameters): | ||
| 34 | # modprobe <driver> ignore=1,0x2f | ||
| 35 | |||
| 36 | New method (sysfs interface): | ||
| 37 | # echo dummy 0x2f > /sys/bus/i2c/devices/i2c-1/new_device | ||
| 38 | # modprobe <driver> | ||
| 39 | |||
| 40 | Of course, it is important to instantiate the "dummy" device before loading | ||
| 41 | the driver. The dummy device will be handled by i2c-core itself, preventing | ||
| 42 | other drivers from binding to it later on. If there is a real device at the | ||
| 43 | problematic address, and you want another driver to bind to it, then simply | ||
| 44 | pass the name of the device in question instead of "dummy". | ||
diff --git a/Documentation/i2c/smbus-protocol b/Documentation/i2c/smbus-protocol index 9df47441f0e7..7c19d1a2bea0 100644 --- a/Documentation/i2c/smbus-protocol +++ b/Documentation/i2c/smbus-protocol | |||
| @@ -185,6 +185,22 @@ the protocol. All ARP communications use slave address 0x61 and | |||
| 185 | require PEC checksums. | 185 | require PEC checksums. |
| 186 | 186 | ||
| 187 | 187 | ||
| 188 | SMBus Alert | ||
| 189 | =========== | ||
| 190 | |||
| 191 | SMBus Alert was introduced in Revision 1.0 of the specification. | ||
| 192 | |||
| 193 | The SMBus alert protocol allows several SMBus slave devices to share a | ||
| 194 | single interrupt pin on the SMBus master, while still allowing the master | ||
| 195 | to know which slave triggered the interrupt. | ||
| 196 | |||
| 197 | This is implemented the following way in the Linux kernel: | ||
| 198 | * I2C bus drivers which support SMBus alert should call | ||
| 199 | i2c_setup_smbus_alert() to setup SMBus alert support. | ||
| 200 | * I2C drivers for devices which can trigger SMBus alerts should implement | ||
| 201 | the optional alert() callback. | ||
| 202 | |||
| 203 | |||
| 188 | I2C Block Transactions | 204 | I2C Block Transactions |
| 189 | ====================== | 205 | ====================== |
| 190 | 206 | ||
diff --git a/Documentation/i2c/writing-clients b/Documentation/i2c/writing-clients index 7860aafb483d..5ebf5af1d716 100644 --- a/Documentation/i2c/writing-clients +++ b/Documentation/i2c/writing-clients | |||
| @@ -44,7 +44,7 @@ static struct i2c_driver foo_driver = { | |||
| 44 | /* if device autodetection is needed: */ | 44 | /* if device autodetection is needed: */ |
| 45 | .class = I2C_CLASS_SOMETHING, | 45 | .class = I2C_CLASS_SOMETHING, |
| 46 | .detect = foo_detect, | 46 | .detect = foo_detect, |
| 47 | .address_data = &addr_data, | 47 | .address_list = normal_i2c, |
| 48 | 48 | ||
| 49 | .shutdown = foo_shutdown, /* optional */ | 49 | .shutdown = foo_shutdown, /* optional */ |
| 50 | .suspend = foo_suspend, /* optional */ | 50 | .suspend = foo_suspend, /* optional */ |
| @@ -74,6 +74,11 @@ structure at all. You should use this to keep device-specific data. | |||
| 74 | /* retrieve the value */ | 74 | /* retrieve the value */ |
| 75 | void *i2c_get_clientdata(const struct i2c_client *client); | 75 | void *i2c_get_clientdata(const struct i2c_client *client); |
| 76 | 76 | ||
| 77 | Note that starting with kernel 2.6.34, you don't have to set the `data' field | ||
| 78 | to NULL in remove() or if probe() failed anymore. The i2c-core does this | ||
| 79 | automatically on these occasions. Those are also the only times the core will | ||
| 80 | touch this field. | ||
| 81 | |||
| 77 | 82 | ||
| 78 | Accessing the client | 83 | Accessing the client |
| 79 | ==================== | 84 | ==================== |
| @@ -318,8 +323,9 @@ Plain I2C communication | |||
| 318 | These routines read and write some bytes from/to a client. The client | 323 | These routines read and write some bytes from/to a client. The client |
| 319 | contains the i2c address, so you do not have to include it. The second | 324 | contains the i2c address, so you do not have to include it. The second |
| 320 | parameter contains the bytes to read/write, the third the number of bytes | 325 | parameter contains the bytes to read/write, the third the number of bytes |
| 321 | to read/write (must be less than the length of the buffer.) Returned is | 326 | to read/write (must be less than the length of the buffer, also should be |
| 322 | the actual number of bytes read/written. | 327 | less than 64k since msg.len is u16.) Returned is the actual number of bytes |
| 328 | read/written. | ||
| 323 | 329 | ||
| 324 | int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg, | 330 | int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg, |
| 325 | int num); | 331 | int num); |
