Message ID | 1584133954-6953-4-git-send-email-prabhakar.mahadev-lad.rj@bp.renesas.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ov5645: Switch to assigned-clock-rates | expand |
Hi Prabhakar, Thank you for the patch. On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > While testing on Renesas RZ/G2E platform, noticed the clock frequency to > be 24242424 as a result the probe failed. However increasing the maximum > leverage of external clock frequency to 24480000 fixes this issue. Since > this difference is small enough and is insignificant set the same in the > driver. > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > --- > drivers/media/i2c/ov5645.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > index 4fbabf3..b49359b 100644 > --- a/drivers/media/i2c/ov5645.c > +++ b/drivers/media/i2c/ov5645.c > @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > } > > xclk_freq = clk_get_rate(ov5645->xclk); > - /* external clock must be 24MHz, allow 1% tolerance */ > - if (xclk_freq < 23760000 || xclk_freq > 24240000) { > + /* external clock must be 24MHz, allow a minimum 1% and a maximum of 2% > + * tolerance So where do these numbers come from ? I understand that 2% is what you need to make your clock fit in the range, but why -1%/+2% instead of -2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the range of supported xvclk frequencies to be 6MHz to 54MHz. I understand that PLL parameters depend on the clock frequency, but could they be calculated instead of hardcoded, to avoid requiring an exact 24MHz input frequency ? > + */ > + if (xclk_freq < 23760000 || xclk_freq > 24480000) { > dev_err(dev, "external clock frequency %u is not supported\n", > xclk_freq); > return -EINVAL;
Hi Laurent, Thank you for the review. > -----Original Message----- > From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Sent: 13 March 2020 21:24 > To: Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com> > Cc: Mauro Carvalho Chehab <mchehab@kernel.org>; Shawn Guo > <shawnguo@kernel.org>; Sascha Hauer <s.hauer@pengutronix.de>; > Pengutronix Kernel Team <kernel@pengutronix.de>; Rob Herring > <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Sakari > Ailus <sakari.ailus@linux.intel.com>; NXP Linux Team <linux-imx@nxp.com>; > Magnus Damm <magnus.damm@gmail.com>; Ezequiel Garcia > <ezequiel@collabora.com>; Geert Uytterhoeven <geert@linux-m68k.org>; > devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; linux-renesas- > soc@vger.kernel.org; Fabio Estevam <festevam@gmail.com>; linux- > media@vger.kernel.org; linux-arm-kernel@lists.infradead.org > Subject: Re: [PATCH v3 3/4] media: i2c: ov5645: Set maximum leverage of > external clock frequency to 24480000 > > Hi Prabhakar, > > Thank you for the patch. > > On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > > While testing on Renesas RZ/G2E platform, noticed the clock frequency > > to be 24242424 as a result the probe failed. However increasing the > > maximum leverage of external clock frequency to 24480000 fixes this > > issue. Since this difference is small enough and is insignificant set > > the same in the driver. > > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev- > lad.rj@bp.renesas.com> > > --- > > drivers/media/i2c/ov5645.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > > index 4fbabf3..b49359b 100644 > > --- a/drivers/media/i2c/ov5645.c > > +++ b/drivers/media/i2c/ov5645.c > > @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > > } > > > > xclk_freq = clk_get_rate(ov5645->xclk); > > -/* external clock must be 24MHz, allow 1% tolerance */ > > -if (xclk_freq < 23760000 || xclk_freq > 24240000) { > > +/* external clock must be 24MHz, allow a minimum 1% and a > maximum of 2% > > + * tolerance > > So where do these numbers come from ? I understand that 2% is what you > need to make your clock fit in the range, but why -1%/+2% instead of - > 2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the > range of supported xvclk frequencies to be 6MHz to 54MHz. I understand > that PLL parameters depend on the clock frequency, but could they be > calculated instead of hardcoded, to avoid requiring an exact 24MHz input > frequency ? > To be honest I don't have the datasheet for ov5645, the flyer says 6-54Mhz but the logs/comment says 24Mhz. Cheers, --Prabhakar > > + */ > > +if (xclk_freq < 23760000 || xclk_freq > 24480000) { > > dev_err(dev, "external clock frequency %u is not > supported\n", > > xclk_freq); > > return -EINVAL; > > -- > Regards, > > Laurent Pinchart Renesas Electronics Europe GmbH, Geschaeftsfuehrer/President: Carsten Jauch, Sitz der Gesellschaft/Registered office: Duesseldorf, Arcadiastrasse 10, 40472 Duesseldorf, Germany, Handelsregister/Commercial Register: Duesseldorf, HRB 3708 USt-IDNr./Tax identification no.: DE 119353406 WEEE-Reg.-Nr./WEEE reg. no.: DE 14978647
Hi Laurent, On Fri, Mar 13, 2020 at 9:31 PM Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com> wrote: > > Hi Laurent, > > Thank you for the review. > > > -----Original Message----- > > From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > Sent: 13 March 2020 21:24 > > To: Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com> > > Cc: Mauro Carvalho Chehab <mchehab@kernel.org>; Shawn Guo > > <shawnguo@kernel.org>; Sascha Hauer <s.hauer@pengutronix.de>; > > Pengutronix Kernel Team <kernel@pengutronix.de>; Rob Herring > > <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Sakari > > Ailus <sakari.ailus@linux.intel.com>; NXP Linux Team <linux-imx@nxp.com>; > > Magnus Damm <magnus.damm@gmail.com>; Ezequiel Garcia > > <ezequiel@collabora.com>; Geert Uytterhoeven <geert@linux-m68k.org>; > > devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; linux-renesas- > > soc@vger.kernel.org; Fabio Estevam <festevam@gmail.com>; linux- > > media@vger.kernel.org; linux-arm-kernel@lists.infradead.org > > Subject: Re: [PATCH v3 3/4] media: i2c: ov5645: Set maximum leverage of > > external clock frequency to 24480000 > > > > Hi Prabhakar, > > > > Thank you for the patch. > > > > On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > > > While testing on Renesas RZ/G2E platform, noticed the clock frequency > > > to be 24242424 as a result the probe failed. However increasing the > > > maximum leverage of external clock frequency to 24480000 fixes this > > > issue. Since this difference is small enough and is insignificant set > > > the same in the driver. > > > > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev- > > lad.rj@bp.renesas.com> > > > --- > > > drivers/media/i2c/ov5645.c | 6 ++++-- > > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > > > index 4fbabf3..b49359b 100644 > > > --- a/drivers/media/i2c/ov5645.c > > > +++ b/drivers/media/i2c/ov5645.c > > > @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > > > } > > > > > > xclk_freq = clk_get_rate(ov5645->xclk); > > > -/* external clock must be 24MHz, allow 1% tolerance */ > > > -if (xclk_freq < 23760000 || xclk_freq > 24240000) { > > > +/* external clock must be 24MHz, allow a minimum 1% and a > > maximum of 2% > > > + * tolerance > > > > So where do these numbers come from ? I understand that 2% is what you > > need to make your clock fit in the range, but why -1%/+2% instead of - > > 2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the > > range of supported xvclk frequencies to be 6MHz to 54MHz. I understand > > that PLL parameters depend on the clock frequency, but could they be > > calculated instead of hardcoded, to avoid requiring an exact 24MHz input > > frequency ? > > > To be honest I don't have the datasheet for ov5645, the flyer says 6-54Mhz but the > logs/comment says 24Mhz. > Comparing to ov5640 datasheet [1] (which I am assuming might be similar to ov5645), this change should affect the driver. [1] https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/OV5640_datasheet.pdf Cheers, --Prabhakar > Cheers, > --Prabhakar > > > > + */ > > > +if (xclk_freq < 23760000 || xclk_freq > 24480000) { > > > dev_err(dev, "external clock frequency %u is not > > supported\n", > > > xclk_freq); > > > return -EINVAL; > > > > -- > > Regards, > > > > Laurent Pinchart > > > Renesas Electronics Europe GmbH, Geschaeftsfuehrer/President: Carsten Jauch, Sitz der Gesellschaft/Registered office: Duesseldorf, Arcadiastrasse 10, 40472 Duesseldorf, Germany, Handelsregister/Commercial Register: Duesseldorf, HRB 3708 USt-IDNr./Tax identification no.: DE 119353406 WEEE-Reg.-Nr./WEEE reg. no.: DE 14978647 > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Prabhakar, On Fri, Mar 13, 2020 at 09:31:25PM +0000, Prabhakar Mahadev Lad wrote: > On 13 March 2020 21:24, Laurent Pinchart wrote: > > On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > > > While testing on Renesas RZ/G2E platform, noticed the clock frequency > > > to be 24242424 as a result the probe failed. However increasing the > > > maximum leverage of external clock frequency to 24480000 fixes this > > > issue. Since this difference is small enough and is insignificant set > > > the same in the driver. > > > > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > > > --- > > > drivers/media/i2c/ov5645.c | 6 ++++-- > > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > > > index 4fbabf3..b49359b 100644 > > > --- a/drivers/media/i2c/ov5645.c > > > +++ b/drivers/media/i2c/ov5645.c > > > @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > > > } > > > > > > xclk_freq = clk_get_rate(ov5645->xclk); > > > -/* external clock must be 24MHz, allow 1% tolerance */ > > > -if (xclk_freq < 23760000 || xclk_freq > 24240000) { > > > +/* external clock must be 24MHz, allow a minimum 1% and a maximum of 2% > > > + * tolerance > > > > So where do these numbers come from ? I understand that 2% is what you > > need to make your clock fit in the range, but why -1%/+2% instead of - > > 2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the > > range of supported xvclk frequencies to be 6MHz to 54MHz. I understand > > that PLL parameters depend on the clock frequency, but could they be > > calculated instead of hardcoded, to avoid requiring an exact 24MHz input > > frequency ? > > To be honest I don't have the datasheet for ov5645, the flyer says 6-54Mhz but the > logs/comment says 24Mhz. The OV5645 clock topology is fairly complex, with two PLLs and different set of output dividers. It however shouldn't be impossible to calculate the PLL configuration in the driver, but would require some dedication, and is probably not worth it. I've discussed the matter with Sakari, and we concluded that this is just a sanity check. We advise increasing the tolerance by a bigger amount to avoid patching this for every new board (completely arbitrarily, +/- 5%), and turning the fatal error into a dev_warn, dropping the return -EINVAL statement. > > > + */ > > > +if (xclk_freq < 23760000 || xclk_freq > 24480000) { > > > dev_err(dev, "external clock frequency %u is not supported\n", > > > xclk_freq); > > > return -EINVAL;
Hi Prabhakar, On Wed, Mar 18, 2020 at 10:41:57PM +0000, Lad, Prabhakar wrote: > On Fri, Mar 13, 2020 at 9:31 PM Prabhakar Mahadev Lad wrote: > > On 13 March 2020 21:24, Laurent Pinchart wrote: > >> On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > >>> While testing on Renesas RZ/G2E platform, noticed the clock frequency > >>> to be 24242424 as a result the probe failed. However increasing the > >>> maximum leverage of external clock frequency to 24480000 fixes this > >>> issue. Since this difference is small enough and is insignificant set > >>> the same in the driver. > >>> > >>> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > >>> --- > >>> drivers/media/i2c/ov5645.c | 6 ++++-- > >>> 1 file changed, 4 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > >>> index 4fbabf3..b49359b 100644 > >>> --- a/drivers/media/i2c/ov5645.c > >>> +++ b/drivers/media/i2c/ov5645.c > >>> @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > >>> } > >>> > >>> xclk_freq = clk_get_rate(ov5645->xclk); > >>> -/* external clock must be 24MHz, allow 1% tolerance */ > >>> -if (xclk_freq < 23760000 || xclk_freq > 24240000) { > >>> +/* external clock must be 24MHz, allow a minimum 1% and a > >> maximum of 2% > >>> + * tolerance > >> > >> So where do these numbers come from ? I understand that 2% is what you > >> need to make your clock fit in the range, but why -1%/+2% instead of - > >> 2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the > >> range of supported xvclk frequencies to be 6MHz to 54MHz. I understand > >> that PLL parameters depend on the clock frequency, but could they be > >> calculated instead of hardcoded, to avoid requiring an exact 24MHz input > >> frequency ? > >> > > To be honest I don't have the datasheet for ov5645, the flyer says 6-54Mhz but the > > logs/comment says 24Mhz. > > > Comparing to ov5640 datasheet [1] (which I am assuming might be > similar to ov5645), Let's assume this to be the case, I see no reason not to :-) > this change should affect the driver. How do you mean ? > [1] https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/OV5640_datasheet.pdf > > >>> + */ > >>> +if (xclk_freq < 23760000 || xclk_freq > 24480000) { > >>> dev_err(dev, "external clock frequency %u is not supported\n", > >>> xclk_freq); > >>> return -EINVAL;
Hi Laurent, On Wed, Mar 18, 2020 at 11:19 PM Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Hi Prabhakar, > > On Fri, Mar 13, 2020 at 09:31:25PM +0000, Prabhakar Mahadev Lad wrote: > > On 13 March 2020 21:24, Laurent Pinchart wrote: > > > On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > > > > While testing on Renesas RZ/G2E platform, noticed the clock frequency > > > > to be 24242424 as a result the probe failed. However increasing the > > > > maximum leverage of external clock frequency to 24480000 fixes this > > > > issue. Since this difference is small enough and is insignificant set > > > > the same in the driver. > > > > > > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > > > > --- > > > > drivers/media/i2c/ov5645.c | 6 ++++-- > > > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > > > > index 4fbabf3..b49359b 100644 > > > > --- a/drivers/media/i2c/ov5645.c > > > > +++ b/drivers/media/i2c/ov5645.c > > > > @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > > > > } > > > > > > > > xclk_freq = clk_get_rate(ov5645->xclk); > > > > -/* external clock must be 24MHz, allow 1% tolerance */ > > > > -if (xclk_freq < 23760000 || xclk_freq > 24240000) { > > > > +/* external clock must be 24MHz, allow a minimum 1% and a maximum of 2% > > > > + * tolerance > > > > > > So where do these numbers come from ? I understand that 2% is what you > > > need to make your clock fit in the range, but why -1%/+2% instead of - > > > 2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the > > > range of supported xvclk frequencies to be 6MHz to 54MHz. I understand > > > that PLL parameters depend on the clock frequency, but could they be > > > calculated instead of hardcoded, to avoid requiring an exact 24MHz input > > > frequency ? > > > > To be honest I don't have the datasheet for ov5645, the flyer says 6-54Mhz but the > > logs/comment says 24Mhz. > > The OV5645 clock topology is fairly complex, with two PLLs and different > set of output dividers. It however shouldn't be impossible to calculate > the PLL configuration in the driver, but would require some dedication, > and is probably not worth it. > > I've discussed the matter with Sakari, and we concluded that this is > just a sanity check. We advise increasing the tolerance by a bigger > amount to avoid patching this for every new board (completely > arbitrarily, +/- 5%), and turning the fatal error into a dev_warn, > dropping the return -EINVAL statement. > Thank you for looking into this. I'll update the patch accordingly. Cheers, --Prabhakar > > > > + */ > > > > +if (xclk_freq < 23760000 || xclk_freq > 24480000) { > > > > dev_err(dev, "external clock frequency %u is not supported\n", > > > > xclk_freq); > > > > return -EINVAL; > > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Laurent, On Wed, Mar 18, 2020 at 11:22 PM Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Hi Prabhakar, > > On Wed, Mar 18, 2020 at 10:41:57PM +0000, Lad, Prabhakar wrote: > > On Fri, Mar 13, 2020 at 9:31 PM Prabhakar Mahadev Lad wrote: > > > On 13 March 2020 21:24, Laurent Pinchart wrote: > > >> On Fri, Mar 13, 2020 at 09:12:33PM +0000, Lad Prabhakar wrote: > > >>> While testing on Renesas RZ/G2E platform, noticed the clock frequency > > >>> to be 24242424 as a result the probe failed. However increasing the > > >>> maximum leverage of external clock frequency to 24480000 fixes this > > >>> issue. Since this difference is small enough and is insignificant set > > >>> the same in the driver. > > >>> > > >>> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > > >>> --- > > >>> drivers/media/i2c/ov5645.c | 6 ++++-- > > >>> 1 file changed, 4 insertions(+), 2 deletions(-) > > >>> > > >>> diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > > >>> index 4fbabf3..b49359b 100644 > > >>> --- a/drivers/media/i2c/ov5645.c > > >>> +++ b/drivers/media/i2c/ov5645.c > > >>> @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) > > >>> } > > >>> > > >>> xclk_freq = clk_get_rate(ov5645->xclk); > > >>> -/* external clock must be 24MHz, allow 1% tolerance */ > > >>> -if (xclk_freq < 23760000 || xclk_freq > 24240000) { > > >>> +/* external clock must be 24MHz, allow a minimum 1% and a > > >> maximum of 2% > > >>> + * tolerance > > >> > > >> So where do these numbers come from ? I understand that 2% is what you > > >> need to make your clock fit in the range, but why -1%/+2% instead of - > > >> 2%/+2% ? And why not 2.5 or 3% ? The sensor datasheet documents the > > >> range of supported xvclk frequencies to be 6MHz to 54MHz. I understand > > >> that PLL parameters depend on the clock frequency, but could they be > > >> calculated instead of hardcoded, to avoid requiring an exact 24MHz input > > >> frequency ? > > >> > > > To be honest I don't have the datasheet for ov5645, the flyer says 6-54Mhz but the > > > logs/comment says 24Mhz. > > > > > Comparing to ov5640 datasheet [1] (which I am assuming might be > > similar to ov5645), > > Let's assume this to be the case, I see no reason not to :-) > > > this change should affect the driver. > > How do you mean ? > Oops sorry for for the typo I meant shouldn't affect the driver :) Cheers, --Prabhakar > > [1] https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/OV5640_datasheet.pdf > > > > >>> + */ > > >>> +if (xclk_freq < 23760000 || xclk_freq > 24480000) { > > >>> dev_err(dev, "external clock frequency %u is not supported\n", > > >>> xclk_freq); > > >>> return -EINVAL; > > -- > Regards, > > Laurent Pinchart
diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c index 4fbabf3..b49359b 100644 --- a/drivers/media/i2c/ov5645.c +++ b/drivers/media/i2c/ov5645.c @@ -1107,8 +1107,10 @@ static int ov5645_probe(struct i2c_client *client) } xclk_freq = clk_get_rate(ov5645->xclk); - /* external clock must be 24MHz, allow 1% tolerance */ - if (xclk_freq < 23760000 || xclk_freq > 24240000) { + /* external clock must be 24MHz, allow a minimum 1% and a maximum of 2% + * tolerance + */ + if (xclk_freq < 23760000 || xclk_freq > 24480000) { dev_err(dev, "external clock frequency %u is not supported\n", xclk_freq); return -EINVAL;
While testing on Renesas RZ/G2E platform, noticed the clock frequency to be 24242424 as a result the probe failed. However increasing the maximum leverage of external clock frequency to 24480000 fixes this issue. Since this difference is small enough and is insignificant set the same in the driver. Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> --- drivers/media/i2c/ov5645.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)