[Intel-gfx] [PATCH 3/8] drm/i915: move is_dual_link_lvds to intel_lvds.c
Paulo Zanoni
przanoni at gmail.com
Fri Nov 16 18:18:11 CET 2012
Hi
2012/11/5 Daniel Vetter <daniel.vetter at ffwll.ch>:
> Just a prep patch to make this a property of intel_lvds. Makes more
> sense, removes clutter from intel_display.c and eventually I want to
> move all the encoder special cases wrt clock handling to encoders
> anyway.
>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/i915/intel_display.c | 60 +++---------------------------------
> drivers/gpu/drm/i915/intel_drv.h | 1 +
> drivers/gpu/drm/i915/intel_lvds.c | 53 +++++++++++++++++++++++++++++++
> 3 files changed, 59 insertions(+), 55 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 0973391..7309790 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -472,61 +472,14 @@ static void vlv_init_dpio(struct drm_device *dev)
> POSTING_READ(DPIO_CTL);
> }
>
> -static int intel_dual_link_lvds_callback(const struct dmi_system_id *id)
> -{
> - DRM_INFO("Forcing lvds to dual link mode on %s\n", id->ident);
> - return 1;
> -}
> -
> -static const struct dmi_system_id intel_dual_link_lvds[] = {
> - {
> - .callback = intel_dual_link_lvds_callback,
> - .ident = "Apple MacBook Pro (Core i5/i7 Series)",
> - .matches = {
> - DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
> - DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"),
> - },
> - },
> - { } /* terminating entry */
> -};
> -
> -static bool is_dual_link_lvds(struct drm_i915_private *dev_priv,
> - unsigned int reg)
> -{
> - unsigned int val;
> -
> - /* use the module option value if specified */
> - if (i915_lvds_channel_mode > 0)
> - return i915_lvds_channel_mode == 2;
> -
> - if (dmi_check_system(intel_dual_link_lvds))
> - return true;
> -
> - if (dev_priv->lvds_val)
> - val = dev_priv->lvds_val;
> - else {
> - /* BIOS should set the proper LVDS register value at boot, but
> - * in reality, it doesn't set the value when the lid is closed;
> - * we need to check "the value to be set" in VBT when LVDS
> - * register is uninitialized.
> - */
> - val = I915_READ(reg);
> - if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED)))
> - val = dev_priv->bios_lvds_val;
> - dev_priv->lvds_val = val;
> - }
> - return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP;
> -}
> -
> static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
> int refclk)
> {
> struct drm_device *dev = crtc->dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> const intel_limit_t *limit;
>
> if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
> - if (is_dual_link_lvds(dev_priv, PCH_LVDS)) {
> + if (is_dual_link_lvds(dev)) {
> /* LVDS dual channel */
> if (refclk == 100000)
> limit = &intel_limits_ironlake_dual_lvds_100m;
> @@ -550,11 +503,10 @@ static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
> static const intel_limit_t *intel_g4x_limit(struct drm_crtc *crtc)
> {
> struct drm_device *dev = crtc->dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> const intel_limit_t *limit;
>
> if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
> - if (is_dual_link_lvds(dev_priv, LVDS))
> + if (is_dual_link_lvds(dev))
> /* LVDS with dual channel */
> limit = &intel_limits_g4x_dual_channel_lvds;
> else
> @@ -686,7 +638,6 @@ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
>
> {
> struct drm_device *dev = crtc->dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> intel_clock_t clock;
> int err = target;
>
> @@ -697,7 +648,7 @@ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
> * reliably set up different single/dual channel state, if we
> * even can.
> */
> - if (is_dual_link_lvds(dev_priv, LVDS))
> + if (is_dual_link_lvds(dev))
> clock.p2 = limit->p2.p2_fast;
> else
> clock.p2 = limit->p2.p2_slow;
> @@ -750,7 +701,6 @@ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
> intel_clock_t *best_clock)
> {
> struct drm_device *dev = crtc->dev;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> intel_clock_t clock;
> int max_n;
> bool found;
> @@ -765,7 +715,7 @@ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
> lvds_reg = PCH_LVDS;
> else
> lvds_reg = LVDS;
> - if (is_dual_link_lvds(dev_priv, lvds_reg))
> + if (is_dual_link_lvds(dev))
> clock.p2 = limit->p2.p2_fast;
> else
> clock.p2 = limit->p2.p2_slow;
> @@ -5358,7 +5308,7 @@ static uint32_t ironlake_compute_dpll(struct intel_crtc *intel_crtc,
> if (is_lvds) {
> if ((intel_panel_use_ssc(dev_priv) &&
> dev_priv->lvds_ssc_freq == 100) ||
> - is_dual_link_lvds(dev_priv, PCH_LVDS))
> + is_dual_link_lvds(dev))
> factor = 25;
> } else if (is_sdvo && is_tv)
> factor = 20;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 42a40a1..ee4a4ba 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -439,6 +439,7 @@ extern void intel_mark_idle(struct drm_device *dev);
> extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj);
> extern void intel_mark_fb_idle(struct drm_i915_gem_object *obj);
> extern bool intel_lvds_init(struct drm_device *dev);
> +extern bool is_dual_link_lvds(struct drm_device *dev);
> extern void intel_dp_init(struct drm_device *dev, int output_reg,
> enum port port);
> extern void intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index ffa0051..2303984 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -900,6 +900,59 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev,
> return false;
> }
>
> +static int intel_dual_link_lvds_callback(const struct dmi_system_id *id)
> +{
> + DRM_INFO("Forcing lvds to dual link mode on %s\n", id->ident);
> + return 1;
> +}
> +
> +static const struct dmi_system_id intel_dual_link_lvds[] = {
> + {
> + .callback = intel_dual_link_lvds_callback,
> + .ident = "Apple MacBook Pro (Core i5/i7 Series)",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"),
> + },
> + },
> + { } /* terminating entry */
> +};
> +
> +bool is_dual_link_lvds(struct drm_device *dev)
The last time I did something similar someone asked me to add "intel_"
prefix to the function name.
With or without the intel_ prefix:
Yay! Encoder-specific code moving to encoder-specific file!
Reviewed-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> +{
> + unsigned int val;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + u32 lvds_reg;
> +
> + if (HAS_PCH_SPLIT(dev)) {
> + lvds_reg = PCH_LVDS;
> + } else {
> + lvds_reg = LVDS;
> + }
> +
> + /* use the module option value if specified */
> + if (i915_lvds_channel_mode > 0)
> + return i915_lvds_channel_mode == 2;
> +
> + if (dmi_check_system(intel_dual_link_lvds))
> + return true;
> +
> + if (dev_priv->lvds_val)
> + val = dev_priv->lvds_val;
> + else {
> + /* BIOS should set the proper LVDS register value at boot, but
> + * in reality, it doesn't set the value when the lid is closed;
> + * we need to check "the value to be set" in VBT when LVDS
> + * register is uninitialized.
> + */
> + val = I915_READ(lvds_reg);
> + if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED)))
> + val = dev_priv->bios_lvds_val;
> + dev_priv->lvds_val = val;
> + }
> + return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP;
> +}
> +
> static bool intel_lvds_supported(struct drm_device *dev)
> {
> /* With the introduction of the PCH we gained a dedicated
> --
> 1.7.11.7
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Paulo Zanoni
More information about the Intel-gfx
mailing list