Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm: bridge: ldb: Warn if LDB clock does not match requested link frequency

The LDB clock needs to be exactly 7-times the pixel clock used by the
display.

Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20221208065538.1753666-1-alexander.stein@ew.tq-group.com

authored by

Alexander Stein and committed by
Neil Armstrong
bd43a984 ae5a8dce

+19 -4
+19 -4
drivers/gpu/drm/bridge/fsl-ldb.c
··· 66 66 return container_of(bridge, struct fsl_ldb, bridge); 67 67 } 68 68 69 + static unsigned long fsl_ldb_link_frequency(struct fsl_ldb *fsl_ldb, int clock) 70 + { 71 + if (fsl_ldb->lvds_dual_link) 72 + return clock * 3500; 73 + else 74 + return clock * 7000; 75 + } 76 + 69 77 static int fsl_ldb_attach(struct drm_bridge *bridge, 70 78 enum drm_bridge_attach_flags flags) 71 79 { ··· 93 85 const struct drm_display_mode *mode; 94 86 struct drm_connector *connector; 95 87 struct drm_crtc *crtc; 88 + unsigned long configured_link_freq; 89 + unsigned long requested_link_freq; 96 90 bool lvds_format_24bpp; 97 91 bool lvds_format_jeida; 98 92 u32 reg; ··· 138 128 crtc_state = drm_atomic_get_new_crtc_state(state, crtc); 139 129 mode = &crtc_state->adjusted_mode; 140 130 141 - if (fsl_ldb->lvds_dual_link) 142 - clk_set_rate(fsl_ldb->clk, mode->clock * 3500); 143 - else 144 - clk_set_rate(fsl_ldb->clk, mode->clock * 7000); 131 + requested_link_freq = fsl_ldb_link_frequency(fsl_ldb, mode->clock); 132 + clk_set_rate(fsl_ldb->clk, requested_link_freq); 133 + 134 + configured_link_freq = clk_get_rate(fsl_ldb->clk); 135 + if (configured_link_freq != requested_link_freq) 136 + dev_warn(fsl_ldb->dev, "Configured LDB clock (%lu Hz) does not match requested LVDS clock: %lu Hz", 137 + configured_link_freq, 138 + requested_link_freq); 139 + 145 140 clk_prepare_enable(fsl_ldb->clk); 146 141 147 142 /* Program LDB_CTRL */