Re: [PATCH 15/18] i2c: i2c-core-acpi: Add i2c_acpi_dev_name()

Dan Scally
2020-12-02T22:45:23Z

On 30/11/2020 17:11, Laurent Pinchart wrote:
> 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@gmail.com>
>> ---
>> 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.

Updated to include that - thanks

>> + */
>> +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;
>