Hi Daniel, Thank you for the patch. On Mon, Nov 30, 2020 at 01:31:26PM +0000, Daniel Scally wrote: > Some places in the kernel allow users to map resources to a device > using device name (for example, gpiod_lookup_table). Currently > this involves waiting for the i2c_client to have been registered so we > can use dev_name(&client->dev). Adding this function means that we can > achieve the same thing without having to wait to the i2c device. > > Signed-off-by: Daniel Scally <djrscally@xxxxxxxxx> > --- > Changes since RFC v3: > > - Patch introduced > > drivers/i2c/i2c-core-acpi.c | 14 ++++++++++++++ > include/linux/i2c.h | 5 +++++ > 2 files changed, 19 insertions(+) > > diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c > index 37c510d9347a..d3a653eac79e 100644 > --- a/drivers/i2c/i2c-core-acpi.c > +++ b/drivers/i2c/i2c-core-acpi.c > @@ -497,6 +497,20 @@ struct i2c_client *i2c_acpi_new_device(struct device *dev, int index, > } > EXPORT_SYMBOL_GPL(i2c_acpi_new_device); > > +/** > + * i2c_acpi_dev_name - Construct i2c device name for devs sourced from ACPI > + * @adev: ACPI device to construct the name for > + * > + * Prefixes "i2c-" to the ACPI device name, for use in i2c_dev_set_name() and > + * also anywhere else in the kernel that needs to refer to an i2c device by > + * name but before they have been instantiated. The documentation should state that the caller must free the return value. > + */ > +char *i2c_acpi_dev_name(struct acpi_device *adev) > +{ > + return kasprintf(GFP_KERNEL, "i2c-%s", acpi_dev_name(adev)); > +} > +EXPORT_SYMBOL_GPL(i2c_acpi_dev_name); > + > #ifdef CONFIG_ACPI_I2C_OPREGION > static int acpi_gsb_i2c_read_bytes(struct i2c_client *client, > u8 cmd, u8 *data, u8 data_len) > diff --git a/include/linux/i2c.h b/include/linux/i2c.h > index 56622658b215..ab0e505b2ca6 100644 > --- a/include/linux/i2c.h > +++ b/include/linux/i2c.h > @@ -995,6 +995,7 @@ bool i2c_acpi_get_i2c_resource(struct acpi_resource *ares, > u32 i2c_acpi_find_bus_speed(struct device *dev); > struct i2c_client *i2c_acpi_new_device(struct device *dev, int index, > struct i2c_board_info *info); > +char *i2c_acpi_dev_name(struct acpi_device *adev); > struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle); > #else > static inline bool i2c_acpi_get_i2c_resource(struct acpi_resource *ares, > @@ -1011,6 +1012,10 @@ static inline struct i2c_client *i2c_acpi_new_device(struct device *dev, > { > return ERR_PTR(-ENODEV); > } > +static inline char *i2c_acpi_dev_name(struct acpi_device *adev) > +{ > + return NULL; > +} > static inline struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle) > { > return NULL; -- Regards, Laurent Pinchart