[PATCH 1/3] media: i2c: imx219: add support for specifying clock-frequencies

Michael Srba Michael.Srba at seznam.cz
Sun Dec 6 12:18:17 EST 2020


On 05. 12. 20 19:54, Geert Uytterhoeven wrote:
> Hi Michael,
>
> On Sat, Dec 5, 2020 at 7:36 PM <michael.srba at seznam.cz> wrote:
>> From: Michael Srba <Michael.Srba at seznam.cz>
>>
>> This patch adds 1% tolerance on input clock, similar to other camera sensor
>> drivers. It also allows for specifying the actual clock in the device tree,
>> instead of relying on it being already set to the right frequency (which is
>> often not the case).
>>
>> Signed-off-by: Michael Srba <Michael.Srba at seznam.cz>
> Thanks for your patch!
>
>> --- a/drivers/media/i2c/imx219.c
>> +++ b/drivers/media/i2c/imx219.c
>> @@ -1443,13 +1443,26 @@ static int imx219_probe(struct i2c_client *client)
>>                 return PTR_ERR(imx219->xclk);
>>         }
>>
>> -       imx219->xclk_freq = clk_get_rate(imx219->xclk);
>> -       if (imx219->xclk_freq != IMX219_XCLK_FREQ) {
>> +       ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency", &imx219->xclk_freq);
>> +       if (ret) {
>> +               dev_err(dev, "could not get xclk frequency\n");
>> +               return ret;
> This breaks compatibility with existing DTBs, which do not have the
> clock-frequency property.
> For backwards compatibility, you should assume the default 24 MHz
> instead of returning an error.
Good point, will do.

>> +       }
>> +
>> +       /* this driver currently expects 24MHz; allow 1% tolerance */
>> +       if (imx219->xclk_freq < 23760000 || imx219->xclk_freq > 24240000) {
>>                 dev_err(dev, "xclk frequency not supported: %d Hz\n",
>>                         imx219->xclk_freq);
>>                 return -EINVAL;
>>         }
>>
>> +       ret = clk_set_rate(imx219->xclk, imx219->xclk_freq);
>> +       if (ret) {
>> +               dev_err(dev, "could not set xclk frequency\n");
>> +               return ret;
>> +       }
>> +
>> +
>>         ret = imx219_get_regulators(imx219);
>>         if (ret) {
>>                 dev_err(dev, "failed to get regulators\n");
> Gr{oetje,eeting}s,
>
>                         Geert
>

Michael



More information about the linux-arm-kernel mailing list