From b6c6cd2b3a580fe50b46cd9f23a11678411d9cd7 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Wed, 18 Sep 2024 17:29:44 +0800 Subject: [PATCH 1/4] soc: rockchip: system_monitor: Fix dev_pm_opp_get_opp_table() return value Signed-off-by: Finley Xiao Change-Id: Ia1db3e6087f57c4d804da779059584c56610e9ef --- drivers/soc/rockchip/rockchip_system_monitor.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c index d6cb20dbfa5e..991e788d98f6 100644 --- a/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -648,10 +648,10 @@ static int rockchip_init_temp_opp_table(struct monitor_dev_info *info) return -ENOMEM; opp_table = dev_pm_opp_get_opp_table(dev); - if (!opp_table) { + if (IS_ERR(opp_table)) { kfree(info->opp_table); info->opp_table = NULL; - return -ENOMEM; + return PTR_ERR(opp_table); } mutex_lock(&opp_table->lock); list_for_each_entry(opp, &opp_table->opp_list, node) { @@ -989,8 +989,8 @@ static int rockchip_adjust_low_temp_opp_volt(struct monitor_dev_info *info, int i = 0; opp_table = dev_pm_opp_get_opp_table(dev); - if (!opp_table) - return -ENOMEM; + if (IS_ERR(opp_table)) + return PTR_ERR(opp_table); mutex_lock(&opp_table->lock); list_for_each_entry(opp, &opp_table->opp_list, node) { From 8ceb525d09ef38ead3c367d0c3be0b3d4ee3cfc2 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Wed, 18 Sep 2024 17:32:20 +0800 Subject: [PATCH 2/4] soc: rockchip: opp_select: Fix dev_pm_opp_get_opp_table() return value Signed-off-by: Finley Xiao Change-Id: I2f3b2bb6ccf359574a0b8d503f3491d9fa7e2299 --- drivers/soc/rockchip/rockchip_opp_select.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_opp_select.c b/drivers/soc/rockchip/rockchip_opp_select.c index 246e1460a7a1..e603f82b388f 100644 --- a/drivers/soc/rockchip/rockchip_opp_select.c +++ b/drivers/soc/rockchip/rockchip_opp_select.c @@ -785,10 +785,10 @@ static int rockchip_init_pvtpll_info(struct rockchip_opp_info *info) return -ENOMEM; opp_table = dev_pm_opp_get_opp_table(info->dev); - if (!opp_table) { + if (IS_ERR(opp_table)) { kfree(info->opp_table); info->opp_table = NULL; - return -ENOMEM; + return PTR_ERR(opp_table); } mutex_lock(&opp_table->lock); @@ -863,7 +863,7 @@ static void rockchip_pvtpll_calibrate_opp(struct rockchip_opp_info *info) return; opp_table = dev_pm_opp_get_opp_table(info->dev); - if (!opp_table) + if (IS_ERR(opp_table)) return; if (info->clocks) { @@ -1020,7 +1020,7 @@ static void rockchip_pvtpll_add_length(struct rockchip_opp_info *info) goto out; opp_table = dev_pm_opp_get_opp_table(info->dev); - if (!opp_table) + if (IS_ERR(opp_table)) goto out; old_rate = clk_get_rate(opp_table->clk); opp_flag = OPP_ADD_LENGTH | ((margin & OPP_LENGTH_MASK) << OPP_LENGTH_SHIFT); @@ -1783,8 +1783,8 @@ static int rockchip_adjust_opp_by_irdrop(struct device *dev, rockchip_get_sel_table(np, "rockchip,board-irdrop", &irdrop_table); opp_table = dev_pm_opp_get_opp_table(dev); - if (!opp_table) { - ret = -ENOMEM; + if (IS_ERR(opp_table)) { + ret = PTR_ERR(opp_table); goto out; } @@ -1855,7 +1855,7 @@ static void rockchip_adjust_opp_by_mbist_vmin(struct device *dev, return; opp_table = dev_pm_opp_get_opp_table(dev); - if (!opp_table) + if (IS_ERR(opp_table)) return; mutex_lock(&opp_table->lock); @@ -1887,7 +1887,7 @@ static void rockchip_adjust_opp_by_otp(struct device *dev, opp_info.min_freq, opp_info.max_freq, opp_info.volt); opp_table = dev_pm_opp_get_opp_table(dev); - if (!opp_table) + if (IS_ERR(opp_table)) return; mutex_lock(&opp_table->lock); From 885afdcd0e93ab3e331f1ef59a3477d3b61d5ec1 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Wed, 18 Sep 2024 17:25:44 +0800 Subject: [PATCH 3/4] PM / devfreq: rockchip_dmc: Fix dev_pm_opp_get_opp_table() return value Change-Id: I8a3f293bdfc17574735365e5049bdf47ce321770 Signed-off-by: Finley Xiao --- drivers/devfreq/rockchip_dmc.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/devfreq/rockchip_dmc.c b/drivers/devfreq/rockchip_dmc.c index a60617210d93..c798f9220ed7 100644 --- a/drivers/devfreq/rockchip_dmc.c +++ b/drivers/devfreq/rockchip_dmc.c @@ -1299,9 +1299,11 @@ rockchip_dmcfreq_adjust_opp_table(struct rockchip_dmcfreq *dmcfreq) } freq_table = kzalloc(sizeof(*freq_table) * count, GFP_KERNEL); + if (!freq_table) + return -ENOMEM; opp_table = dev_pm_opp_get_opp_table(dev); - if (!opp_table) { - ret = -ENOMEM; + if (IS_ERR(opp_table)) { + ret = PTR_ERR(opp_table); goto out; } @@ -1344,7 +1346,7 @@ rockchip_dmcfreq_adjust_opp_table(struct rockchip_dmcfreq *dmcfreq) dmcfreq->freq_info_rate[i]); if (i == 0) { ret = -EPERM; - goto out; + break; } else { opp->available = false; dmcfreq->freq_count = i; From 44ccff798bbba3c5812c1c2957d9cfd85562d4c8 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Wed, 18 Sep 2024 16:27:45 +0800 Subject: [PATCH 4/4] drm/bridge: synopsys: dw-hdmi-qp: add mode covert at dual_connector_split At split mode or dual connector split, the mode of horizontal direction must x2. Signed-off-by: Sandy Huang Change-Id: I4583cb575c6714796b63c3dc312eb3c23319b116 --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c index 6511cabe9071..466d204a7b11 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -2771,9 +2771,6 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) } secondary_data = secondary->plat_data->phy_data; - list_for_each_entry(mode, &connector->probed_modes, head) - hdmi->plat_data->convert_to_split_mode(mode); - secondary->sink_is_hdmi = drm_detect_hdmi_monitor(edid); secondary->sink_has_audio = drm_detect_monitor_audio(edid); if (secondary->cec_notifier) @@ -2809,12 +2806,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) ret++; } } - if (ret > 0 && (hdmi->plat_data->split_mode || hdmi->plat_data->dual_connector_split)) { - struct drm_display_mode *mode; - list_for_each_entry(mode, &connector->probed_modes, head) - hdmi->plat_data->convert_to_split_mode(mode); - } info->edid_hdmi_rgb444_dc_modes = 0; info->edid_hdmi_ycbcr444_dc_modes = 0; info->hdmi.y420_dc_modes = 0; @@ -2822,6 +2814,12 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) dev_info(hdmi->dev, "failed to get edid\n"); } + if (ret > 0 && (hdmi->plat_data->split_mode || hdmi->plat_data->dual_connector_split)) { + struct drm_display_mode *mode; + + list_for_each_entry(mode, &connector->probed_modes, head) + hdmi->plat_data->convert_to_split_mode(mode); + } return ret; }