diff mbox series

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

Message ID 20201130133129.1024662-16-djrscally@gmail.com
State New
Headers show
Series Add functionality to ipu3-cio2 driver allowing software_node connections to sensors on platforms designed for Windows | expand

Commit Message

Daniel Scally Nov. 30, 2020, 1:31 p.m. UTC
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(+)

Comments

Daniel Scally Dec. 2, 2020, 10:44 p.m. UTC | #1
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;

>
diff mbox series

Patch

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