aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c-core.c
diff options
context:
space:
mode:
authorJarkko Nikula <jarkko.nikula@linux.intel.com>2013-11-14 07:03:52 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-11-14 17:20:45 -0500
commit70762abb9f89d97603a04cc3438988ca0cf886eb (patch)
treea0968bc07accce62249a61820ab12b9dff302dbc /drivers/i2c/i2c-core.c
parent45c42a7f582cc07259bc78910de8b0b1c94094d5 (diff)
i2c: Use stable dev_name for ACPI enumerated I2C slaves
Current I2C adapter id - client address "x-00yy" based device naming scheme is not always stable enough to be used in name based matching, for instance within ALSA SoC subsystem. This is problematic in PC kind of platforms where I2C adapter numbers can change due variable amount of bus controllers, probe order, add-on cards or just because of BIOS settings. This patch addresses the problem by using the ACPI device name with "i2c-" prefix for ACPI enumerated I2C slaves. For them device name "x-00yz" becomes "i2c-INTABCD:ij" after this patch. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Acked-by: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r--drivers/i2c/i2c-core.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index f74af33f5ddc..bc9a294c07f7 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -618,6 +618,22 @@ void i2c_unlock_adapter(struct i2c_adapter *adapter)
618} 618}
619EXPORT_SYMBOL_GPL(i2c_unlock_adapter); 619EXPORT_SYMBOL_GPL(i2c_unlock_adapter);
620 620
621static void i2c_dev_set_name(struct i2c_adapter *adap,
622 struct i2c_client *client)
623{
624 struct acpi_device *adev = ACPI_COMPANION(&client->dev);
625
626 if (adev) {
627 dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
628 return;
629 }
630
631 /* For 10-bit clients, add an arbitrary offset to avoid collisions */
632 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
633 client->addr | ((client->flags & I2C_CLIENT_TEN)
634 ? 0xa000 : 0));
635}
636
621/** 637/**
622 * i2c_new_device - instantiate an i2c device 638 * i2c_new_device - instantiate an i2c device
623 * @adap: the adapter managing the device 639 * @adap: the adapter managing the device
@@ -676,10 +692,7 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
676 client->dev.of_node = info->of_node; 692 client->dev.of_node = info->of_node;
677 ACPI_COMPANION_SET(&client->dev, info->acpi_node.companion); 693 ACPI_COMPANION_SET(&client->dev, info->acpi_node.companion);
678 694
679 /* For 10-bit clients, add an arbitrary offset to avoid collisions */ 695 i2c_dev_set_name(adap, client);
680 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
681 client->addr | ((client->flags & I2C_CLIENT_TEN)
682 ? 0xa000 : 0));
683 status = device_register(&client->dev); 696 status = device_register(&client->dev);
684 if (status) 697 if (status)
685 goto out_err; 698 goto out_err;