Message ID | 20180917151504.8754-2-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm/i915/sdvo: Fix multi function encoder stuff | expand |
On Mon, 17 Sep 2018, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Remove the local lvds fixed mode pointer from the sdvo encoder > structure and instead utilize intel_panel like everyone else. > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> > --- > drivers/gpu/drm/i915/intel_sdvo.c | 40 ++++++++++++++++++++------------------- > 1 file changed, 21 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c > index 701372e512a8..11e8d598702e 100644 > --- a/drivers/gpu/drm/i915/intel_sdvo.c > +++ b/drivers/gpu/drm/i915/intel_sdvo.c > @@ -105,11 +105,6 @@ struct intel_sdvo { > bool has_hdmi_audio; > bool rgb_quant_range_selectable; > > - /** > - * This is sdvo fixed pannel mode pointer > - */ > - struct drm_display_mode *sdvo_lvds_fixed_mode; > - > /* DDC bus used by this SDVO encoder */ > uint8_t ddc_bus; > > @@ -765,10 +760,14 @@ intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo, > args.height = height; > args.interlace = 0; > > - if (IS_LVDS(intel_sdvo_connector) && > - (intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width || > - intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height)) > - args.scaled = 1; > + if (IS_LVDS(intel_sdvo_connector)) { > + const struct drm_display_mode *fixed_mode = > + intel_sdvo_connector->base.panel.fixed_mode; > + > + if (fixed_mode->hdisplay != width || > + fixed_mode->vdisplay != height) > + args.scaled = 1; > + } > > return intel_sdvo_set_value(intel_sdvo, > SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING, > @@ -1144,7 +1143,7 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder, > pipe_config->sdvo_tv_clock = true; > } else if (IS_LVDS(intel_sdvo_connector)) { > if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, > - intel_sdvo->sdvo_lvds_fixed_mode)) > + intel_sdvo_connector->base.panel.fixed_mode)) > return false; > > (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, > @@ -1301,7 +1300,7 @@ static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder, > /* lvds has a special fixed output timing. */ > if (IS_LVDS(intel_sdvo_connector)) > intel_sdvo_get_dtd_from_mode(&output_dtd, > - intel_sdvo->sdvo_lvds_fixed_mode); > + intel_sdvo_connector->base.panel.fixed_mode); > else > intel_sdvo_get_dtd_from_mode(&output_dtd, mode); > if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) > @@ -1642,10 +1641,13 @@ intel_sdvo_mode_valid(struct drm_connector *connector, > return MODE_CLOCK_HIGH; > > if (IS_LVDS(intel_sdvo_connector)) { > - if (mode->hdisplay > intel_sdvo->sdvo_lvds_fixed_mode->hdisplay) > + const struct drm_display_mode *fixed_mode = > + intel_sdvo_connector->base.panel.fixed_mode; > + > + if (mode->hdisplay > fixed_mode->hdisplay) > return MODE_PANEL; > > - if (mode->vdisplay > intel_sdvo->sdvo_lvds_fixed_mode->vdisplay) > + if (mode->vdisplay > fixed_mode->vdisplay) > return MODE_PANEL; > } > > @@ -2063,6 +2065,7 @@ static void intel_sdvo_destroy(struct drm_connector *connector) > struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector); > > drm_connector_cleanup(connector); > + intel_panel_fini(&intel_sdvo_connector->base.panel); > kfree(intel_sdvo_connector); > } > > @@ -2267,10 +2270,6 @@ static void intel_sdvo_enc_destroy(struct drm_encoder *encoder) > { > struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder)); > > - if (intel_sdvo->sdvo_lvds_fixed_mode != NULL) > - drm_mode_destroy(encoder->dev, > - intel_sdvo->sdvo_lvds_fixed_mode); > - > i2c_del_adapter(&intel_sdvo->ddc); > intel_encoder_destroy(encoder); > } > @@ -2663,13 +2662,16 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) > > list_for_each_entry(mode, &connector->probed_modes, head) { > if (mode->type & DRM_MODE_TYPE_PREFERRED) { > - intel_sdvo->sdvo_lvds_fixed_mode = > + struct drm_display_mode *fixed_mode = > drm_mode_duplicate(connector->dev, mode); > + > + intel_panel_init(&intel_connector->panel, > + fixed_mode, NULL); > break; > } > } > > - if (!intel_sdvo->sdvo_lvds_fixed_mode) > + if (!intel_connector->panel.fixed_mode) > goto err; > > return true;
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 701372e512a8..11e8d598702e 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -105,11 +105,6 @@ struct intel_sdvo { bool has_hdmi_audio; bool rgb_quant_range_selectable; - /** - * This is sdvo fixed pannel mode pointer - */ - struct drm_display_mode *sdvo_lvds_fixed_mode; - /* DDC bus used by this SDVO encoder */ uint8_t ddc_bus; @@ -765,10 +760,14 @@ intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo, args.height = height; args.interlace = 0; - if (IS_LVDS(intel_sdvo_connector) && - (intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width || - intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height)) - args.scaled = 1; + if (IS_LVDS(intel_sdvo_connector)) { + const struct drm_display_mode *fixed_mode = + intel_sdvo_connector->base.panel.fixed_mode; + + if (fixed_mode->hdisplay != width || + fixed_mode->vdisplay != height) + args.scaled = 1; + } return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING, @@ -1144,7 +1143,7 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder, pipe_config->sdvo_tv_clock = true; } else if (IS_LVDS(intel_sdvo_connector)) { if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, - intel_sdvo->sdvo_lvds_fixed_mode)) + intel_sdvo_connector->base.panel.fixed_mode)) return false; (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, @@ -1301,7 +1300,7 @@ static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder, /* lvds has a special fixed output timing. */ if (IS_LVDS(intel_sdvo_connector)) intel_sdvo_get_dtd_from_mode(&output_dtd, - intel_sdvo->sdvo_lvds_fixed_mode); + intel_sdvo_connector->base.panel.fixed_mode); else intel_sdvo_get_dtd_from_mode(&output_dtd, mode); if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) @@ -1642,10 +1641,13 @@ intel_sdvo_mode_valid(struct drm_connector *connector, return MODE_CLOCK_HIGH; if (IS_LVDS(intel_sdvo_connector)) { - if (mode->hdisplay > intel_sdvo->sdvo_lvds_fixed_mode->hdisplay) + const struct drm_display_mode *fixed_mode = + intel_sdvo_connector->base.panel.fixed_mode; + + if (mode->hdisplay > fixed_mode->hdisplay) return MODE_PANEL; - if (mode->vdisplay > intel_sdvo->sdvo_lvds_fixed_mode->vdisplay) + if (mode->vdisplay > fixed_mode->vdisplay) return MODE_PANEL; } @@ -2063,6 +2065,7 @@ static void intel_sdvo_destroy(struct drm_connector *connector) struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector); drm_connector_cleanup(connector); + intel_panel_fini(&intel_sdvo_connector->base.panel); kfree(intel_sdvo_connector); } @@ -2267,10 +2270,6 @@ static void intel_sdvo_enc_destroy(struct drm_encoder *encoder) { struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder)); - if (intel_sdvo->sdvo_lvds_fixed_mode != NULL) - drm_mode_destroy(encoder->dev, - intel_sdvo->sdvo_lvds_fixed_mode); - i2c_del_adapter(&intel_sdvo->ddc); intel_encoder_destroy(encoder); } @@ -2663,13 +2662,16 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) list_for_each_entry(mode, &connector->probed_modes, head) { if (mode->type & DRM_MODE_TYPE_PREFERRED) { - intel_sdvo->sdvo_lvds_fixed_mode = + struct drm_display_mode *fixed_mode = drm_mode_duplicate(connector->dev, mode); + + intel_panel_init(&intel_connector->panel, + fixed_mode, NULL); break; } } - if (!intel_sdvo->sdvo_lvds_fixed_mode) + if (!intel_connector->panel.fixed_mode) goto err; return true;