On Wed, Jan 08, 2020 at 08:12:41PM +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > .get_modes() is supposed to return the number of modes added to the > probed_modes list (not that anyone actually checks for anything > except zero vs. not zero). Let's do that. Also switch over to using > intel_connector_update_modes() instead of hand rolling it. > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_sdvo.c | 56 +++++++++++++---------- > 1 file changed, 33 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c > index 34d5bd750de8..69ff297156cf 100644 > --- a/drivers/gpu/drm/i915/display/intel_sdvo.c > +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c > @@ -2120,8 +2120,9 @@ intel_sdvo_detect(struct drm_connector *connector, bool force) > return ret; > } > > -static void intel_sdvo_get_ddc_modes(struct drm_connector *connector) > +static int intel_sdvo_get_ddc_modes(struct drm_connector *connector) > { > + int num_modes = 0; > struct edid *edid; > > DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", > @@ -2136,18 +2137,19 @@ static void intel_sdvo_get_ddc_modes(struct drm_connector *connector) > * DDC fails, check to see if the analog output is disconnected, in > * which case we'll look there for the digital DDC data. > */ > - if (edid == NULL) > + if (!edid) > edid = intel_sdvo_get_analog_edid(connector); > > - if (edid != NULL) { > - if (intel_sdvo_connector_matches_edid(to_intel_sdvo_connector(connector), > - edid)) { > - drm_connector_update_edid_property(connector, edid); > - drm_add_edid_modes(connector, edid); > - } > + if (!edid) > + return 0; > > - kfree(edid); > - } > + if (intel_sdvo_connector_matches_edid(to_intel_sdvo_connector(connector), > + edid)) > + num_modes += intel_connector_update_modes(connector, edid); > + > + kfree(edid); > + > + return num_modes; > } > > /* > @@ -2215,12 +2217,13 @@ static const struct drm_display_mode sdvo_tv_modes[] = { > DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, > }; > > -static void intel_sdvo_get_tv_modes(struct drm_connector *connector) > +static int intel_sdvo_get_tv_modes(struct drm_connector *connector) > { > struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); > const struct drm_connector_state *conn_state = connector->state; > struct intel_sdvo_sdtv_resolution_request tv_res; > u32 reply = 0, format_map = 0; > + int num_modes = 0; > int i; > > DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", > @@ -2235,31 +2238,37 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector) > min(sizeof(format_map), sizeof(struct intel_sdvo_sdtv_resolution_request))); > > if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output)) > - return; > + return 0; > > BUILD_BUG_ON(sizeof(tv_res) != 3); > if (!intel_sdvo_write_cmd(intel_sdvo, > SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT, > &tv_res, sizeof(tv_res))) > - return; > + return 0; > if (!intel_sdvo_read_response(intel_sdvo, &reply, 3)) > - return; > + return 0; > > - for (i = 0; i < ARRAY_SIZE(sdvo_tv_modes); i++) > + for (i = 0; i < ARRAY_SIZE(sdvo_tv_modes); i++) { > if (reply & (1 << i)) { > struct drm_display_mode *nmode; > nmode = drm_mode_duplicate(connector->dev, > &sdvo_tv_modes[i]); > - if (nmode) > + if (nmode) { > drm_mode_probed_add(connector, nmode); > + num_modes++; > + } > } > + } > + > + return num_modes; > } > > -static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) > +static int intel_sdvo_get_lvds_modes(struct drm_connector *connector) > { > struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); > struct drm_i915_private *dev_priv = to_i915(connector->dev); > struct drm_display_mode *newmode; > + int num_modes = 0; > > DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", > connector->base.id, connector->name); > @@ -2276,6 +2285,7 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) > newmode->type = (DRM_MODE_TYPE_PREFERRED | > DRM_MODE_TYPE_DRIVER); > drm_mode_probed_add(connector, newmode); > + num_modes++; > } > } > > @@ -2284,7 +2294,9 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) > * Assume that the preferred modes are > * arranged in priority order. > */ > - intel_ddc_get_modes(connector, &intel_sdvo->ddc); > + num_modes += intel_ddc_get_modes(connector, &intel_sdvo->ddc); > + > + return num_modes; > } > > static int intel_sdvo_get_modes(struct drm_connector *connector) > @@ -2292,13 +2304,11 @@ static int intel_sdvo_get_modes(struct drm_connector *connector) > struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector); > > if (IS_TV(intel_sdvo_connector)) > - intel_sdvo_get_tv_modes(connector); > + return intel_sdvo_get_tv_modes(connector); > else if (IS_LVDS(intel_sdvo_connector)) > - intel_sdvo_get_lvds_modes(connector); > + return intel_sdvo_get_lvds_modes(connector); > else > - intel_sdvo_get_ddc_modes(connector); > - > - return !list_empty(&connector->probed_modes); > + return intel_sdvo_get_ddc_modes(connector); > } > > static int > -- > 2.24.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx