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); |