Lines Matching +full:panel +full:- +full:lvds
3 * Copyright © 2006-2007 Intel Corporation
135 struct drm_device *dev = connector->base.dev; in intel_dvo_connector_get_hw_state()
137 struct intel_dvo *intel_dvo = intel_attached_dvo(&connector->base); in intel_dvo_connector_get_hw_state()
140 tmp = I915_READ(intel_dvo->dev.dvo_reg); in intel_dvo_connector_get_hw_state()
145 return intel_dvo->dev.dev_ops->get_hw_state(&intel_dvo->dev); in intel_dvo_connector_get_hw_state()
151 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_dvo_get_hw_state()
155 tmp = I915_READ(intel_dvo->dev.dvo_reg); in intel_dvo_get_hw_state()
165 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_dvo_get_config()
169 pipe_config->output_types |= BIT(INTEL_OUTPUT_DVO); in intel_dvo_get_config()
171 tmp = I915_READ(intel_dvo->dev.dvo_reg); in intel_dvo_get_config()
181 pipe_config->base.adjusted_mode.flags |= flags; in intel_dvo_get_config()
183 pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock; in intel_dvo_get_config()
190 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_disable_dvo()
192 i915_reg_t dvo_reg = intel_dvo->dev.dvo_reg; in intel_disable_dvo()
195 intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, false); in intel_disable_dvo()
204 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_enable_dvo()
206 i915_reg_t dvo_reg = intel_dvo->dev.dvo_reg; in intel_enable_dvo()
209 intel_dvo->dev.dev_ops->mode_set(&intel_dvo->dev, in intel_enable_dvo()
210 &pipe_config->base.mode, in intel_enable_dvo()
211 &pipe_config->base.adjusted_mode); in intel_enable_dvo()
216 intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, true); in intel_enable_dvo()
225 to_intel_connector(connector)->panel.fixed_mode; in intel_dvo_mode_valid()
226 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; in intel_dvo_mode_valid()
227 int target_clock = mode->clock; in intel_dvo_mode_valid()
229 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) in intel_dvo_mode_valid()
235 if (mode->hdisplay > fixed_mode->hdisplay) in intel_dvo_mode_valid()
237 if (mode->vdisplay > fixed_mode->vdisplay) in intel_dvo_mode_valid()
240 target_clock = fixed_mode->clock; in intel_dvo_mode_valid()
246 return intel_dvo->dev.dev_ops->mode_valid(&intel_dvo->dev, mode); in intel_dvo_mode_valid()
255 intel_dvo->attached_connector->panel.fixed_mode; in intel_dvo_compute_config()
256 struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; in intel_dvo_compute_config()
259 * If we have timings from the BIOS for the panel, put them in in intel_dvo_compute_config()
261 * with the panel scaling set up to source from the H/VDisplay in intel_dvo_compute_config()
267 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) in intel_dvo_compute_config()
268 return -EINVAL; in intel_dvo_compute_config()
270 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; in intel_dvo_compute_config()
279 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_dvo_pre_enable()
280 struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc); in intel_dvo_pre_enable()
281 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; in intel_dvo_pre_enable()
283 int pipe = crtc->pipe; in intel_dvo_pre_enable()
285 i915_reg_t dvo_reg = intel_dvo->dev.dvo_reg; in intel_dvo_pre_enable()
286 i915_reg_t dvo_srcdim_reg = intel_dvo->dev.dvo_srcdim_reg; in intel_dvo_pre_enable()
296 if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) in intel_dvo_pre_enable()
298 if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) in intel_dvo_pre_enable()
302 (adjusted_mode->crtc_hdisplay << DVO_SRCDIM_HORIZONTAL_SHIFT) | in intel_dvo_pre_enable()
303 (adjusted_mode->crtc_vdisplay << DVO_SRCDIM_VERTICAL_SHIFT));*/ in intel_dvo_pre_enable()
305 (adjusted_mode->crtc_hdisplay << DVO_SRCDIM_HORIZONTAL_SHIFT) | in intel_dvo_pre_enable()
306 (adjusted_mode->crtc_vdisplay << DVO_SRCDIM_VERTICAL_SHIFT)); in intel_dvo_pre_enable()
316 connector->base.id, connector->name); in intel_dvo_detect()
317 return intel_dvo->dev.dev_ops->detect(&intel_dvo->dev); in intel_dvo_detect()
322 struct drm_i915_private *dev_priv = to_i915(connector->dev); in intel_dvo_get_modes()
324 to_intel_connector(connector)->panel.fixed_mode; in intel_dvo_get_modes()
329 * (TV-out, for example), but for now with just TMDS and LVDS, in intel_dvo_get_modes()
334 if (!list_empty(&connector->probed_modes)) in intel_dvo_get_modes()
339 mode = drm_mode_duplicate(connector->dev, fixed_mode); in intel_dvo_get_modes()
368 if (intel_dvo->dev.dev_ops->destroy) in intel_dvo_enc_destroy()
369 intel_dvo->dev.dev_ops->destroy(&intel_dvo->dev); in intel_dvo_enc_destroy()
379 * Attempts to get a fixed panel timing for LVDS (currently only the i830).
381 * Other chips with DVO LVDS will need to extend this to deal with the LVDS
393 mode->type |= DRM_MODE_TYPE_PREFERRED; in intel_dvo_get_current_mode()
427 intel_dvo->attached_connector = intel_connector; in intel_dvo_init()
429 intel_encoder = &intel_dvo->base; in intel_dvo_init()
431 intel_encoder->disable = intel_disable_dvo; in intel_dvo_init()
432 intel_encoder->enable = intel_enable_dvo; in intel_dvo_init()
433 intel_encoder->get_hw_state = intel_dvo_get_hw_state; in intel_dvo_init()
434 intel_encoder->get_config = intel_dvo_get_config; in intel_dvo_init()
435 intel_encoder->compute_config = intel_dvo_compute_config; in intel_dvo_init()
436 intel_encoder->pre_enable = intel_dvo_pre_enable; in intel_dvo_init()
437 intel_connector->get_hw_state = intel_dvo_connector_get_hw_state; in intel_dvo_init()
441 struct drm_connector *connector = &intel_connector->base; in intel_dvo_init()
455 if (intel_gmbus_is_valid_pin(dev_priv, dvo->gpio)) in intel_dvo_init()
456 gpio = dvo->gpio; in intel_dvo_init()
457 else if (dvo->type == INTEL_DVO_CHIP_LVDS) in intel_dvo_init()
469 intel_dvo->dev = *dvo; in intel_dvo_init()
488 dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c); in intel_dvo_init()
500 port = intel_dvo_port(dvo->dvo_reg); in intel_dvo_init()
501 drm_encoder_init(&dev_priv->drm, &intel_encoder->base, in intel_dvo_init()
505 intel_encoder->type = INTEL_OUTPUT_DVO; in intel_dvo_init()
506 intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER; in intel_dvo_init()
507 intel_encoder->port = port; in intel_dvo_init()
508 intel_encoder->crtc_mask = (1 << 0) | (1 << 1); in intel_dvo_init()
510 switch (dvo->type) { in intel_dvo_init()
512 intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) | in intel_dvo_init()
514 drm_connector_init(&dev_priv->drm, connector, in intel_dvo_init()
520 intel_encoder->cloneable = 0; in intel_dvo_init()
521 drm_connector_init(&dev_priv->drm, connector, in intel_dvo_init()
530 connector->display_info.subpixel_order = SubPixelHorizontalRGB; in intel_dvo_init()
531 connector->interlace_allowed = false; in intel_dvo_init()
532 connector->doublescan_allowed = false; in intel_dvo_init()
535 if (dvo->type == INTEL_DVO_CHIP_LVDS) { in intel_dvo_init()
537 * For our LVDS chipsets, we should hopefully be able in intel_dvo_init()
538 * to dig the fixed panel mode out of the BIOS data. in intel_dvo_init()
540 * data on chipsets with integrated LVDS (stored in AIM in intel_dvo_init()
544 intel_panel_init(&intel_connector->panel, in intel_dvo_init()
547 intel_dvo->panel_wants_dither = true; in intel_dvo_init()