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; 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; } 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); 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) {