[PATCH 4/4] media: i2c: imx214: Read clock frequency from device tree

André Apitzsch via B4 Relay posted 4 patches 8 months, 1 week ago
There is a newer version of this series
[PATCH 4/4] media: i2c: imx214: Read clock frequency from device tree
Posted by André Apitzsch via B4 Relay 8 months, 1 week ago
From: André Apitzsch <git@apitzsch.eu>

Replace the hard coded external clock frequency by the one read from
device tree.

Signed-off-by: André Apitzsch <git@apitzsch.eu>
---
 drivers/media/i2c/imx214.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/media/i2c/imx214.c b/drivers/media/i2c/imx214.c
index 5589228d2b44417c0dbf15a6a17fd8f954f1a2bc..6d7f05073aa9ffb054d454771ce22e3141af60e8 100644
--- a/drivers/media/i2c/imx214.c
+++ b/drivers/media/i2c/imx214.c
@@ -1388,6 +1388,7 @@ static int imx214_probe(struct i2c_client *client)
 {
 	struct device *dev = &client->dev;
 	struct imx214 *imx214;
+	u32 xclk_freq;
 	int ret;
 
 	imx214 = devm_kzalloc(dev, sizeof(*imx214), GFP_KERNEL);
@@ -1401,7 +1402,14 @@ static int imx214_probe(struct i2c_client *client)
 		return dev_err_probe(dev, PTR_ERR(imx214->xclk),
 				     "failed to get xclk\n");
 
-	ret = clk_set_rate(imx214->xclk, IMX214_DEFAULT_CLK_FREQ);
+	ret = device_property_read_u32(dev, "clock-frequency", &xclk_freq);
+	if (ret) {
+		dev_warn(dev,
+			 "clock-frequency not set, please review your DT. Fallback to default\n");
+		xclk_freq = IMX214_DEFAULT_CLK_FREQ;
+	}
+
+	ret = clk_set_rate(imx214->xclk, xclk_freq);
 	if (ret)
 		return dev_err_probe(dev, ret,
 				     "failed to set xclk frequency\n");

-- 
2.49.0


Re: [PATCH 4/4] media: i2c: imx214: Read clock frequency from device tree
Posted by Sakari Ailus 7 months, 2 weeks ago
Hi André,

On Tue, Apr 15, 2025 at 11:22:18PM +0200, André Apitzsch via B4 Relay wrote:
> From: André Apitzsch <git@apitzsch.eu>
> 
> Replace the hard coded external clock frequency by the one read from
> device tree.
> 
> Signed-off-by: André Apitzsch <git@apitzsch.eu>
> ---
>  drivers/media/i2c/imx214.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/i2c/imx214.c b/drivers/media/i2c/imx214.c
> index 5589228d2b44417c0dbf15a6a17fd8f954f1a2bc..6d7f05073aa9ffb054d454771ce22e3141af60e8 100644
> --- a/drivers/media/i2c/imx214.c
> +++ b/drivers/media/i2c/imx214.c
> @@ -1388,6 +1388,7 @@ static int imx214_probe(struct i2c_client *client)
>  {
>  	struct device *dev = &client->dev;
>  	struct imx214 *imx214;
> +	u32 xclk_freq;
>  	int ret;
>  
>  	imx214 = devm_kzalloc(dev, sizeof(*imx214), GFP_KERNEL);
> @@ -1401,7 +1402,14 @@ static int imx214_probe(struct i2c_client *client)
>  		return dev_err_probe(dev, PTR_ERR(imx214->xclk),
>  				     "failed to get xclk\n");
>  
> -	ret = clk_set_rate(imx214->xclk, IMX214_DEFAULT_CLK_FREQ);
> +	ret = device_property_read_u32(dev, "clock-frequency", &xclk_freq);
> +	if (ret) {
> +		dev_warn(dev,
> +			 "clock-frequency not set, please review your DT. Fallback to default\n");
> +		xclk_freq = IMX214_DEFAULT_CLK_FREQ;
> +	}
> +
> +	ret = clk_set_rate(imx214->xclk, xclk_freq);

Please instead rely on the rate set on the clock (using
assigned-clock-rates etc.). See how other drivers do this. Essentially,
"clock-frequency" is only relevant for ancient systems and ACPI today.

<URL:https://hverkuil.home.xs4all.nl/spec/driver-api/camera-sensor.html>

>  	if (ret)
>  		return dev_err_probe(dev, ret,
>  				     "failed to set xclk frequency\n");
> 

-- 
Kind regards,

Sakari Ailus