Re: [PATCH] drm/bridge: imx8mp-hdmi-tx: allow 0.5% margin with selected clock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 4, 2024 at 3:31 AM Dominique Martinet
<dominique.martinet@xxxxxxxxxxxxxxxxx> wrote:
>
> This allows the hdmi driver to pick e.g. 64.8MHz instead of 65Mhz when we
> cannot output the exact frequency, enabling the imx8mp HDMI output to
> support more modes
>
I went from 19 options on Modetest with my AOC 4K monitor to 31.  Of
those 31, three did not appear to sync, but not all the frequencies in
the LUT sync for me either, so I have no objection to moving forward
with this, but I wonder if we should have a note in there about why we
have a 5% tolerance.

> Signed-off-by: Dominique Martinet <dominique.martinet@xxxxxxxxxxxxxxxxx>

Tested-by:  Adam Ford <aford173@xxxxxxxxx> #imx8mp-beacon

> ---
> This completes the patch series sent by Adam Ford here:
> https://lkml.kernel.org/r/20240904023310.163371-1-aford173@xxxxxxxxx
>
> and makes the cheap screens we recommend work with our imx8mp board
> without further kludging.
>
>
>  drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c
> index 13bc570c5473..9431cd5e06c3 100644
> --- a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c
> +++ b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c
> @@ -23,6 +23,7 @@ imx8mp_hdmi_mode_valid(struct dw_hdmi *dw_hdmi, void *data,
>                        const struct drm_display_mode *mode)
>  {
>         struct imx8mp_hdmi *hdmi = (struct imx8mp_hdmi *)data;
> +       long round_rate;
>
>         if (mode->clock < 13500)
>                 return MODE_CLOCK_LOW;
> @@ -30,8 +31,9 @@ imx8mp_hdmi_mode_valid(struct dw_hdmi *dw_hdmi, void *data,
>         if (mode->clock > 297000)
>                 return MODE_CLOCK_HIGH;
>
> -       if (clk_round_rate(hdmi->pixclk, mode->clock * 1000) !=
> -           mode->clock * 1000)
> +       round_rate = clk_round_rate(hdmi->pixclk, mode->clock * 1000);
> +       /* accept 0.5% = 1/200 = 5/1000 tolerance */
> +       if (abs(round_rate - mode->clock * 1000) > mode->clock * 5)
>                 return MODE_CLOCK_RANGE;
>
>         /* We don't support double-clocked and Interlaced modes */
> --
> 2.39.2
>
>




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux