diff mbox series

media: i2c: ov02c10: Get the OF clock rate

Message ID 20250315220936.2477-1-bryan.odonoghue@linaro.org (mailing list archive)
State New
Headers show
Series media: i2c: ov02c10: Get the OF clock rate | expand

Commit Message

Bryan O'Donoghue March 15, 2025, 10:09 p.m. UTC
Add support to get the mclk rate specified in dts.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 drivers/media/i2c/ov02c10.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

Comments

Bryan O'Donoghue March 15, 2025, 10:12 p.m. UTC | #1
On 15/03/2025 22:09, Bryan O'Donoghue wrote:
> Add support to get the mclk rate specified in dts.
> 
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>   drivers/media/i2c/ov02c10.c | 24 +++++++++++++++---------
>   1 file changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/media/i2c/ov02c10.c b/drivers/media/i2c/ov02c10.c
> index 094651228763..236623b26da0 100644
> --- a/drivers/media/i2c/ov02c10.c
> +++ b/drivers/media/i2c/ov02c10.c
> @@ -647,11 +647,6 @@ static int ov02c10_get_pm_resources(struct device *dev)
>   	if (ov02c10->reset)
>   		fsleep(1000);
>   
> -	ov02c10->img_clk = devm_clk_get_optional(dev, NULL);
> -	if (IS_ERR(ov02c10->img_clk))
> -		return dev_err_probe(dev, PTR_ERR(ov02c10->img_clk),
> -				     "failed to get imaging clock\n");
> -
>   	for (i = 0; i < ARRAY_SIZE(ov02c10_supply_names); i++)
>   		ov02c10->supplies[i].supply = ov02c10_supply_names[i];
>   
> @@ -840,11 +835,22 @@ static int ov02c10_check_hwcfg(struct device *dev, struct ov02c10 *ov02c10)
>   		return dev_err_probe(dev, -EPROBE_DEFER,
>   				     "waiting for fwnode graph endpoint\n");
>   
> -	ret = fwnode_property_read_u32(fwnode, "clock-frequency", &mclk);
> -	if (ret) {
> +	ov02c10->img_clk = devm_clk_get_optional(dev, NULL);
> +	if (IS_ERR(ov02c10->img_clk)) {
>   		fwnode_handle_put(ep);
> -		return dev_err_probe(dev, ret,
> -				     "reading clock-frequency property\n");
> +		return dev_err_probe(dev, PTR_ERR(ov02c10->img_clk),
> +				     "failed to get imaging clock\n");
> +	}
> +
> +	if (ov02c10->img_clk) {
> +		mclk = clk_get_rate(ov02c10->img_clk);
> +	} else {
> +		ret = fwnode_property_read_u32(fwnode, "clock-frequency", &mclk);
> +		if (ret) {
> +			fwnode_handle_put(ep);
> +			return dev_err_probe(dev, ret,
> +					     "reading clock-frequency property\n");
> +		}
>   	}
>   
>   	if (mclk != OV02C10_MCLK) {

I completely forgot to include this logic.

We need this one get get the clock frequency from dts.

Thanks to kuruczgy[m] on #aarch64-laptops for testing.

---
bod
diff mbox series

Patch

diff --git a/drivers/media/i2c/ov02c10.c b/drivers/media/i2c/ov02c10.c
index 094651228763..236623b26da0 100644
--- a/drivers/media/i2c/ov02c10.c
+++ b/drivers/media/i2c/ov02c10.c
@@ -647,11 +647,6 @@  static int ov02c10_get_pm_resources(struct device *dev)
 	if (ov02c10->reset)
 		fsleep(1000);
 
-	ov02c10->img_clk = devm_clk_get_optional(dev, NULL);
-	if (IS_ERR(ov02c10->img_clk))
-		return dev_err_probe(dev, PTR_ERR(ov02c10->img_clk),
-				     "failed to get imaging clock\n");
-
 	for (i = 0; i < ARRAY_SIZE(ov02c10_supply_names); i++)
 		ov02c10->supplies[i].supply = ov02c10_supply_names[i];
 
@@ -840,11 +835,22 @@  static int ov02c10_check_hwcfg(struct device *dev, struct ov02c10 *ov02c10)
 		return dev_err_probe(dev, -EPROBE_DEFER,
 				     "waiting for fwnode graph endpoint\n");
 
-	ret = fwnode_property_read_u32(fwnode, "clock-frequency", &mclk);
-	if (ret) {
+	ov02c10->img_clk = devm_clk_get_optional(dev, NULL);
+	if (IS_ERR(ov02c10->img_clk)) {
 		fwnode_handle_put(ep);
-		return dev_err_probe(dev, ret,
-				     "reading clock-frequency property\n");
+		return dev_err_probe(dev, PTR_ERR(ov02c10->img_clk),
+				     "failed to get imaging clock\n");
+	}
+
+	if (ov02c10->img_clk) {
+		mclk = clk_get_rate(ov02c10->img_clk);
+	} else {
+		ret = fwnode_property_read_u32(fwnode, "clock-frequency", &mclk);
+		if (ret) {
+			fwnode_handle_put(ep);
+			return dev_err_probe(dev, ret,
+					     "reading clock-frequency property\n");
+		}
 	}
 
 	if (mclk != OV02C10_MCLK) {