Commit cbb44514048a250647c6c6b3df27ff62cb71f7d5

Authored by Jean Delvare
Committed by Jean Delvare
1 parent cc6bcf7d2e

i2c: Fix device name for 10-bit slave address

10-bit addresses overlap with traditional 7-bit addresses, leading in
device name collisions. Add an arbitrary offset to 10-bit addresses to
prevent this collision. The offset was chosen so that the address is
still easily recognizable.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>

Showing 2 changed files with 22 additions and 18 deletions Side-by-side Diff

Documentation/i2c/ten-bit-addresses
1 1 The I2C protocol knows about two kinds of device addresses: normal 7 bit
2 2 addresses, and an extended set of 10 bit addresses. The sets of addresses
3 3 do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
4   -address 0x10 (though a single device could respond to both of them). You
5   -select a 10 bit address by adding an extra byte after the address
6   -byte:
7   - S Addr7 Rd/Wr ....
8   -becomes
9   - S 11110 Addr10 Rd/Wr
10   -S is the start bit, Rd/Wr the read/write bit, and if you count the number
11   -of bits, you will see the there are 8 after the S bit for 7 bit addresses,
12   -and 16 after the S bit for 10 bit addresses.
  4 +address 0x10 (though a single device could respond to both of them).
13 5  
14   -WARNING! The current 10 bit address support is EXPERIMENTAL. There are
15   -several places in the code that will cause SEVERE PROBLEMS with 10 bit
16   -addresses, even though there is some basic handling and hooks. Also,
17   -almost no supported adapter handles the 10 bit addresses correctly.
  6 +I2C messages to and from 10-bit address devices have a different format.
  7 +See the I2C specification for the details.
18 8  
19   -As soon as a real 10 bit address device is spotted 'in the wild', we
20   -can and will add proper support. Right now, 10 bit address devices
21   -are defined by the I2C protocol, but we have never seen a single device
22   -which supports them.
  9 +The current 10 bit address support is minimal. It should work, however
  10 +you can expect some problems along the way:
  11 +* Not all bus drivers support 10-bit addresses. Some don't because the
  12 + hardware doesn't support them (SMBus doesn't require 10-bit address
  13 + support for example), some don't because nobody bothered adding the
  14 + code (or it's there but not working properly.) Software implementation
  15 + (i2c-algo-bit) is known to work.
  16 +* Some optional features do not support 10-bit addresses. This is the
  17 + case of automatic detection and instantiation of devices by their,
  18 + drivers, for example.
  19 +* Many user-space packages (for example i2c-tools) lack support for
  20 + 10-bit addresses.
  21 +
  22 +Note that 10-bit address devices are still pretty rare, so the limitations
  23 +listed above could stay for a long time, maybe even forever if nobody
  24 +needs them to be fixed.
drivers/i2c/i2c-core.c
... ... @@ -539,8 +539,10 @@
539 539 client->dev.type = &i2c_client_type;
540 540 client->dev.of_node = info->of_node;
541 541  
  542 + /* For 10-bit clients, add an arbitrary offset to avoid collisions */
542 543 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
543   - client->addr);
  544 + client->addr | ((client->flags & I2C_CLIENT_TEN)
  545 + ? 0xa000 : 0));
544 546 status = device_register(&client->dev);
545 547 if (status)
546 548 goto out_err;