[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