From: Benjamin Szőke <egyszeregy@xxxxxxxxxxx> Optionally, an I2C controller may have a "linux,i2c-dev-name" property. This is a string which is defining a custom suffix name for I2C device in /dev/i2c-<name> format. It helps to improve software portability between various SoCs and reduce complexities of hardware related codes in SWs. Signed-off-by: Benjamin Szőke <egyszeregy@xxxxxxxxxxx> --- drivers/i2c/i2c-dev.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c index 8b7e599f1674..df4cec88ea59 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c @@ -651,6 +651,7 @@ static void i2cdev_dev_release(struct device *dev) static int i2cdev_attach_adapter(struct device *dev) { + const char *name; struct i2c_adapter *adap; struct i2c_dev *i2c_dev; int res; @@ -672,7 +673,16 @@ static int i2cdev_attach_adapter(struct device *dev) i2c_dev->dev.parent = &adap->dev; i2c_dev->dev.release = i2cdev_dev_release; - res = dev_set_name(&i2c_dev->dev, "i2c-%d", adap->nr); + /* + * If "linux,i2c-dev-name" is specified in device tree, use /dev/i2c-<name> + * in Linux userspace, otherwise use /dev/i2c-<nr>. + */ + res = device_property_read_string(&adap->dev, "linux,i2c-dev-name", &name); + if (res < 0) + res = dev_set_name(&i2c_dev->dev, "i2c-%d", adap->nr); + else + res = dev_set_name(&i2c_dev->dev, "i2c-%s", name); + if (res) goto err_put_i2c_dev; -- 2.39.3