}
 
 static void i2c_dev_set_name(struct i2c_adapter *adap,
-                            struct i2c_client *client)
+                            struct i2c_client *client,
+                            struct i2c_board_info const *info)
 {
        struct acpi_device *adev = ACPI_COMPANION(&client->dev);
 
+       if (info && info->dev_name) {
+               dev_set_name(&client->dev, "i2c-%s", info->dev_name);
+               return;
+       }
+
        if (adev) {
                dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
                return;
        client->dev.of_node = info->of_node;
        client->dev.fwnode = info->fwnode;
 
-       i2c_dev_set_name(adap, client);
+       i2c_dev_set_name(adap, client, info);
 
        if (info->properties) {
                status = device_add_properties(&client->dev, info->properties);
 
  * @type: chip type, to initialize i2c_client.name
  * @flags: to initialize i2c_client.flags
  * @addr: stored in i2c_client.addr
+ * @dev_name: Overrides the default <busnr>-<addr> dev_name if set
  * @platform_data: stored in i2c_client.dev.platform_data
  * @archdata: copied into i2c_client.dev.archdata
  * @of_node: pointer to OpenFirmware device node
        char            type[I2C_NAME_SIZE];
        unsigned short  flags;
        unsigned short  addr;
+       const char      *dev_name;
        void            *platform_data;
        struct dev_archdata     *archdata;
        struct device_node *of_node;