blob: e9890709c508b25ed9878ab979797d1fc58a7a4b [file] [log] [blame]
Andrea Gelmini89140f42010-06-03 11:33:50 +02001The I2C protocol knows about two kinds of device addresses: normal 7 bit
Linus Torvalds1da177e2005-04-16 15:20:36 -07002addresses, and an extended set of 10 bit addresses. The sets of addresses
3do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
4address 0x10 (though a single device could respond to both of them). You
5select a 10 bit address by adding an extra byte after the address
6byte:
Andrea Gelmini89140f42010-06-03 11:33:50 +02007 S Addr7 Rd/Wr ....
Linus Torvalds1da177e2005-04-16 15:20:36 -07008becomes
9 S 11110 Addr10 Rd/Wr
10S is the start bit, Rd/Wr the read/write bit, and if you count the number
11of bits, you will see the there are 8 after the S bit for 7 bit addresses,
12and 16 after the S bit for 10 bit addresses.
13
Andrea Gelmini89140f42010-06-03 11:33:50 +020014WARNING! The current 10 bit address support is EXPERIMENTAL. There are
Linus Torvalds1da177e2005-04-16 15:20:36 -070015several places in the code that will cause SEVERE PROBLEMS with 10 bit
16addresses, even though there is some basic handling and hooks. Also,
17almost no supported adapter handles the 10 bit addresses correctly.
18
19As soon as a real 10 bit address device is spotted 'in the wild', we
20can and will add proper support. Right now, 10 bit address devices
21are defined by the I2C protocol, but we have never seen a single device
22which supports them.