[Intel-gfx] [PATCH 2/2] drm/i915/sdvo: Utilize intel_panel for fixed_mode
Jani Nikula
jani.nikula at linux.intel.com
Tue Oct 9 14:44:57 UTC 2018
On Mon, 17 Sep 2018, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at 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 at linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula at 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;
--
Jani Nikula, Intel Open Source Graphics Center
More information about the Intel-gfx
mailing list