[PATCH v2 08/12] media: imx-mipi-csis: Only set clock rate when specified in DT

Frank Li Frank.li at nxp.com
Thu Aug 21 08:30:20 PDT 2025


On Thu, Aug 21, 2025 at 03:09:40AM +0300, Laurent Pinchart wrote:
> The imx-mipi-csis driver sets the rate of the wrap clock to the value
> specified in the device tree's "clock-frequency" property, and defaults
> to 166 MHz otherwise. This is a historical mistake, as clock rate
> selection should have been left to the assigned-clock-rates property.
>
> Honouring the clock-frequency property can't be removed without breaking
> backwards compatibility, and the corresponding code isn't very
> intrusive. The 166 MHz default, on the other hand, prevents
> configuration of the clock rate through assigned-clock-rates, as the
> driver immediately overwrites the rate. This behaviour is confusing and
> has cost debugging time.
>
> There is little value in a 166 MHz default. All mainline device tree
> sources that enable the CSIS specify a clock-frequency explicitly, and
> the default wrap clock configuration on supported platforms is at least
> as high as 166 MHz. Drop the default, and only set the clock rate
> manually when the clock-frequency property is specified.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Reviewed-by: Frank Li <Frank.Li at nxp.com>

> ---
>  drivers/media/platform/nxp/imx-mipi-csis.c | 23 +++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
> index 67da8326540b..83ba68a20bd1 100644
> --- a/drivers/media/platform/nxp/imx-mipi-csis.c
> +++ b/drivers/media/platform/nxp/imx-mipi-csis.c
> @@ -230,8 +230,6 @@
>  #define MIPI_CSIS_PKTDATA_EVEN			0x3000
>  #define MIPI_CSIS_PKTDATA_SIZE			SZ_4K
>
> -#define DEFAULT_SCLK_CSIS_FREQ			166000000UL
> -
>  struct mipi_csis_event {
>  	bool debug;
>  	u32 mask;
> @@ -708,12 +706,17 @@ static int mipi_csis_clk_get(struct mipi_csis_device *csis)
>  	if (ret < 0)
>  		return ret;
>
> -	/* Set clock rate */
> -	ret = clk_set_rate(csis->clks[MIPI_CSIS_CLK_WRAP].clk,
> -			   csis->clk_frequency);
> -	if (ret < 0)
> -		dev_err(csis->dev, "set rate=%d failed: %d\n",
> -			csis->clk_frequency, ret);
> +	if (csis->clk_frequency) {
> +		/*
> +		 * Set the clock rate. This is deprecated, for backward
> +		 * compatibility with old device trees.
> +		 */
> +		ret = clk_set_rate(csis->clks[MIPI_CSIS_CLK_WRAP].clk,
> +				   csis->clk_frequency);
> +		if (ret < 0)
> +			dev_err(csis->dev, "set rate=%d failed: %d\n",
> +				csis->clk_frequency, ret);
> +	}
>
>  	return ret;
>  }
> @@ -1417,9 +1420,7 @@ static int mipi_csis_parse_dt(struct mipi_csis_device *csis)
>  {
>  	struct device_node *node = csis->dev->of_node;
>
> -	if (of_property_read_u32(node, "clock-frequency",
> -				 &csis->clk_frequency))
> -		csis->clk_frequency = DEFAULT_SCLK_CSIS_FREQ;
> +	of_property_read_u32(node, "clock-frequency", &csis->clk_frequency);
>
>  	return 0;
>  }
> --
> Regards,
>
> Laurent Pinchart
>



More information about the linux-arm-kernel mailing list