Skip to content

Commit 5f5f657

Browse files
Kwiboommind
authored andcommitted
drm/rockchip: dw_hdmi: Add max_tmds_clock validation
Add max_tmds_clock validation to prepare for additions and changes to the MPLL config table. Use the same rate restrictions that is currently applied. The rate limit for RK3288, RK3399 and RK3568 is based on current mpll table. The rate limit for RK3228 and RK3328 is based on the inno-hdmi-phy pre-pll table. Signed-off-by: Jonas Karlman <[email protected]> Signed-off-by: Heiko Stuebner <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 1213b65 commit 5f5f657

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,13 @@
6161
* @lcdsel_grf_reg: grf register offset of lcdc select
6262
* @lcdsel_big: reg value of selecting vop big for HDMI
6363
* @lcdsel_lit: reg value of selecting vop little for HDMI
64+
* @max_tmds_clock: maximum TMDS clock rate supported
6465
*/
6566
struct rockchip_hdmi_chip_data {
6667
int lcdsel_grf_reg;
6768
u32 lcdsel_big;
6869
u32 lcdsel_lit;
70+
int max_tmds_clock;
6971
};
7072

7173
struct rockchip_hdmi {
@@ -254,6 +256,10 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *dw_hdmi, void *data,
254256
bool exact_match = hdmi->plat_data->phy_force_vendor;
255257
int i;
256258

259+
if (hdmi->chip_data->max_tmds_clock &&
260+
mode->clock > hdmi->chip_data->max_tmds_clock)
261+
return MODE_CLOCK_HIGH;
262+
257263
if (hdmi->ref_clk) {
258264
int rpclk = clk_round_rate(hdmi->ref_clk, pclk);
259265

@@ -444,6 +450,7 @@ static const struct dw_hdmi_phy_ops rk3228_hdmi_phy_ops = {
444450

445451
static struct rockchip_hdmi_chip_data rk3228_chip_data = {
446452
.lcdsel_grf_reg = -1,
453+
.max_tmds_clock = 594000,
447454
};
448455

449456
static const struct dw_hdmi_plat_data rk3228_hdmi_drv_data = {
@@ -458,6 +465,7 @@ static struct rockchip_hdmi_chip_data rk3288_chip_data = {
458465
.lcdsel_grf_reg = RK3288_GRF_SOC_CON6,
459466
.lcdsel_big = HIWORD_UPDATE(0, RK3288_HDMI_LCDC_SEL),
460467
.lcdsel_lit = HIWORD_UPDATE(RK3288_HDMI_LCDC_SEL, RK3288_HDMI_LCDC_SEL),
468+
.max_tmds_clock = 340000,
461469
};
462470

463471
static const struct dw_hdmi_plat_data rk3288_hdmi_drv_data = {
@@ -478,6 +486,7 @@ static const struct dw_hdmi_phy_ops rk3328_hdmi_phy_ops = {
478486

479487
static struct rockchip_hdmi_chip_data rk3328_chip_data = {
480488
.lcdsel_grf_reg = -1,
489+
.max_tmds_clock = 594000,
481490
};
482491

483492
static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
@@ -493,6 +502,7 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = {
493502
.lcdsel_grf_reg = RK3399_GRF_SOC_CON20,
494503
.lcdsel_big = HIWORD_UPDATE(0, RK3399_HDMI_LCDC_SEL),
495504
.lcdsel_lit = HIWORD_UPDATE(RK3399_HDMI_LCDC_SEL, RK3399_HDMI_LCDC_SEL),
505+
.max_tmds_clock = 340000,
496506
};
497507

498508
static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
@@ -506,6 +516,7 @@ static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
506516

507517
static struct rockchip_hdmi_chip_data rk3568_chip_data = {
508518
.lcdsel_grf_reg = -1,
519+
.max_tmds_clock = 340000,
509520
};
510521

511522
static const struct dw_hdmi_plat_data rk3568_hdmi_drv_data = {

0 commit comments

Comments
 (0)