Re: [PATCH 1/3] v4l: subdev: Add a function to set an I²C sub-device's name

2018-08-30 Thread Hans Verkuil
On 08/29/2018 12:52 PM, Sakari Ailus wrote:
> v4l2_i2c_subdev_set_name() can be used to assign a name to a sub-device.
> This way uniform names can be formed easily without having to resort to
> things such as snprintf in drivers.
> 
> Signed-off-by: Sakari Ailus 

Acked-by: Hans Verkuil 

Thanks!

Hans

> ---
>  drivers/media/v4l2-core/v4l2-common.c | 18 ++
>  include/media/v4l2-common.h   | 12 
>  2 files changed, 26 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-common.c 
> b/drivers/media/v4l2-core/v4l2-common.c
> index b518b92d6d96..9c48b90b4ae8 100644
> --- a/drivers/media/v4l2-core/v4l2-common.c
> +++ b/drivers/media/v4l2-core/v4l2-common.c
> @@ -109,6 +109,19 @@ EXPORT_SYMBOL(v4l2_ctrl_query_fill);
>  
>  #if IS_ENABLED(CONFIG_I2C)
>  
> +void v4l2_i2c_subdev_set_name(struct v4l2_subdev *sd, struct i2c_client 
> *client,
> +   const char *devname, const char *postfix)
> +{
> + if (!devname)
> + devname = client->dev.driver->name;
> + if (!postfix)
> + postfix = "";
> +
> + snprintf(sd->name, sizeof(sd->name), "%s%s %d-%04x", devname, postfix,
> +  i2c_adapter_id(client->adapter), client->addr);
> +}
> +EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_set_name);
> +
>  void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
>   const struct v4l2_subdev_ops *ops)
>  {
> @@ -120,10 +133,7 @@ void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct 
> i2c_client *client,
>   /* i2c_client and v4l2_subdev point to one another */
>   v4l2_set_subdevdata(sd, client);
>   i2c_set_clientdata(client, sd);
> - /* initialize name */
> - snprintf(sd->name, sizeof(sd->name), "%s %d-%04x",
> - client->dev.driver->name, i2c_adapter_id(client->adapter),
> - client->addr);
> + v4l2_i2c_subdev_set_name(sd, client, NULL, NULL);
>  }
>  EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
>  
> diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
> index cdc87ec61e54..bd880a909ecf 100644
> --- a/include/media/v4l2-common.h
> +++ b/include/media/v4l2-common.h
> @@ -155,6 +155,18 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct 
> v4l2_device *v4l2_dev,
>   const unsigned short *probe_addrs);
>  
>  /**
> + * v4l2_i2c_subdev_set_name - Set name for an I²C sub-device
> + *
> + * @sd: pointer to &struct v4l2_subdev
> + * @client: pointer to struct i2c_client
> + * @devname: the name of the device; if NULL, the I²C device's name will be 
> used
> + * @postfix: sub-device specific string to put right after the I²C device 
> name;
> + *may be NULL
> + */
> +void v4l2_i2c_subdev_set_name(struct v4l2_subdev *sd, struct i2c_client 
> *client,
> +   const char *devname, const char *postfix);
> +
> +/**
>   * v4l2_i2c_subdev_init - Initializes a &struct v4l2_subdev with data from
>   *   an i2c_client struct.
>   *
> 



[PATCH 1/3] v4l: subdev: Add a function to set an I²C sub-device's name

2018-08-29 Thread Sakari Ailus
v4l2_i2c_subdev_set_name() can be used to assign a name to a sub-device.
This way uniform names can be formed easily without having to resort to
things such as snprintf in drivers.

Signed-off-by: Sakari Ailus 
---
 drivers/media/v4l2-core/v4l2-common.c | 18 ++
 include/media/v4l2-common.h   | 12 
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-common.c 
b/drivers/media/v4l2-core/v4l2-common.c
index b518b92d6d96..9c48b90b4ae8 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -109,6 +109,19 @@ EXPORT_SYMBOL(v4l2_ctrl_query_fill);
 
 #if IS_ENABLED(CONFIG_I2C)
 
+void v4l2_i2c_subdev_set_name(struct v4l2_subdev *sd, struct i2c_client 
*client,
+ const char *devname, const char *postfix)
+{
+   if (!devname)
+   devname = client->dev.driver->name;
+   if (!postfix)
+   postfix = "";
+
+   snprintf(sd->name, sizeof(sd->name), "%s%s %d-%04x", devname, postfix,
+i2c_adapter_id(client->adapter), client->addr);
+}
+EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_set_name);
+
 void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
const struct v4l2_subdev_ops *ops)
 {
@@ -120,10 +133,7 @@ void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct 
i2c_client *client,
/* i2c_client and v4l2_subdev point to one another */
v4l2_set_subdevdata(sd, client);
i2c_set_clientdata(client, sd);
-   /* initialize name */
-   snprintf(sd->name, sizeof(sd->name), "%s %d-%04x",
-   client->dev.driver->name, i2c_adapter_id(client->adapter),
-   client->addr);
+   v4l2_i2c_subdev_set_name(sd, client, NULL, NULL);
 }
 EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
 
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index cdc87ec61e54..bd880a909ecf 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -155,6 +155,18 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct 
v4l2_device *v4l2_dev,
const unsigned short *probe_addrs);
 
 /**
+ * v4l2_i2c_subdev_set_name - Set name for an I²C sub-device
+ *
+ * @sd: pointer to &struct v4l2_subdev
+ * @client: pointer to struct i2c_client
+ * @devname: the name of the device; if NULL, the I²C device's name will be 
used
+ * @postfix: sub-device specific string to put right after the I²C device name;
+ *  may be NULL
+ */
+void v4l2_i2c_subdev_set_name(struct v4l2_subdev *sd, struct i2c_client 
*client,
+ const char *devname, const char *postfix);
+
+/**
  * v4l2_i2c_subdev_init - Initializes a &struct v4l2_subdev with data from
  * an i2c_client struct.
  *
-- 
2.11.0