[PATCH] media: v4l2-common: Always register clock with device-specific name

Paul Cercueil posted 1 patch 5 days, 20 hours ago
There is a newer version of this series
drivers/media/v4l2-core/v4l2-common.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
[PATCH] media: v4l2-common: Always register clock with device-specific name
Posted by Paul Cercueil 5 days, 20 hours ago
If we need to register a dummy fixed-frequency clock, always register it
using a device-specific name.

This supports the use case where a system has two of the same sensor,
meaning two instances of the same driver, which previously both tried
(and failed) to create a clock with the same name.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/media/v4l2-core/v4l2-common.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
index 554c591e1113..5f3295c3122a 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -792,14 +792,11 @@ struct clk *__devm_v4l2_sensor_clk_get(struct device *dev, const char *id,
 	if (ret)
 		return ERR_PTR(ret == -EINVAL ? -EPROBE_DEFER : ret);
 
-	if (!id) {
-		clk_id = kasprintf(GFP_KERNEL, "clk-%s", dev_name(dev));
-		if (!clk_id)
-			return ERR_PTR(-ENOMEM);
-		id = clk_id;
-	}
+	clk_id = kasprintf(GFP_KERNEL, "clk-%s", dev_name(dev));
+	if (!clk_id)
+		return ERR_PTR(-ENOMEM);
 
-	clk_hw = devm_clk_hw_register_fixed_rate(dev, id, NULL, 0, rate);
+	clk_hw = devm_clk_hw_register_fixed_rate(dev, clk_id, NULL, 0, rate);
 	if (IS_ERR(clk_hw))
 		return ERR_CAST(clk_hw);
 
-- 
2.53.0
Re: [PATCH] media: v4l2-common: Always register clock with device-specific name
Posted by Laurent Pinchart 5 days, 20 hours ago
On Fri, Mar 27, 2026 at 06:52:12PM +0100, Paul Cercueil wrote:
> If we need to register a dummy fixed-frequency clock, always register it
> using a device-specific name.
> 
> This supports the use case where a system has two of the same sensor,
> meaning two instances of the same driver, which previously both tried
> (and failed) to create a clock with the same name.
> 
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> ---
>  drivers/media/v4l2-core/v4l2-common.c | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
> index 554c591e1113..5f3295c3122a 100644
> --- a/drivers/media/v4l2-core/v4l2-common.c
> +++ b/drivers/media/v4l2-core/v4l2-common.c
> @@ -792,14 +792,11 @@ struct clk *__devm_v4l2_sensor_clk_get(struct device *dev, const char *id,
>  	if (ret)
>  		return ERR_PTR(ret == -EINVAL ? -EPROBE_DEFER : ret);
>  
> -	if (!id) {
> -		clk_id = kasprintf(GFP_KERNEL, "clk-%s", dev_name(dev));
> -		if (!clk_id)
> -			return ERR_PTR(-ENOMEM);
> -		id = clk_id;
> -	}
> +	clk_id = kasprintf(GFP_KERNEL, "clk-%s", dev_name(dev));

This will now fail if the same device needs to register two clocks. You
need to include the id in the name. Maybe something like

	clk_id = kasprintf(GFP_KERNEL, "clk-%s-%s", dev_name(dev), id);

> +	if (!clk_id)
> +		return ERR_PTR(-ENOMEM);
>  
> -	clk_hw = devm_clk_hw_register_fixed_rate(dev, id, NULL, 0, rate);
> +	clk_hw = devm_clk_hw_register_fixed_rate(dev, clk_id, NULL, 0, rate);
>  	if (IS_ERR(clk_hw))
>  		return ERR_CAST(clk_hw);
>  

-- 
Regards,

Laurent Pinchart
Re: [PATCH] media: v4l2-common: Always register clock with device-specific name
Posted by Paul Cercueil 5 days, 18 hours ago
Hi Laurent,

Le vendredi 27 mars 2026 à 20:06 +0200, Laurent Pinchart a écrit :
> On Fri, Mar 27, 2026 at 06:52:12PM +0100, Paul Cercueil wrote:
> > If we need to register a dummy fixed-frequency clock, always
> > register it
> > using a device-specific name.
> > 
> > This supports the use case where a system has two of the same
> > sensor,
> > meaning two instances of the same driver, which previously both
> > tried
> > (and failed) to create a clock with the same name.
> > 
> > Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> > ---
> >  drivers/media/v4l2-core/v4l2-common.c | 11 ++++-------
> >  1 file changed, 4 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/media/v4l2-core/v4l2-common.c
> > b/drivers/media/v4l2-core/v4l2-common.c
> > index 554c591e1113..5f3295c3122a 100644
> > --- a/drivers/media/v4l2-core/v4l2-common.c
> > +++ b/drivers/media/v4l2-core/v4l2-common.c
> > @@ -792,14 +792,11 @@ struct clk *__devm_v4l2_sensor_clk_get(struct
> > device *dev, const char *id,
> >  	if (ret)
> >  		return ERR_PTR(ret == -EINVAL ? -EPROBE_DEFER :
> > ret);
> >  
> > -	if (!id) {
> > -		clk_id = kasprintf(GFP_KERNEL, "clk-%s",
> > dev_name(dev));
> > -		if (!clk_id)
> > -			return ERR_PTR(-ENOMEM);
> > -		id = clk_id;
> > -	}
> > +	clk_id = kasprintf(GFP_KERNEL, "clk-%s", dev_name(dev));
> 
> This will now fail if the same device needs to register two clocks.
> You
> need to include the id in the name. Maybe something like
> 
> 	clk_id = kasprintf(GFP_KERNEL, "clk-%s-%s", dev_name(dev),
> id);

Ha, good point. I'll v2.

Cheers,
-Paul

> 
> > +	if (!clk_id)
> > +		return ERR_PTR(-ENOMEM);
> >  
> > -	clk_hw = devm_clk_hw_register_fixed_rate(dev, id, NULL, 0,
> > rate);
> > +	clk_hw = devm_clk_hw_register_fixed_rate(dev, clk_id,
> > NULL, 0, rate);
> >  	if (IS_ERR(clk_hw))
> >  		return ERR_CAST(clk_hw);
> >