On Thu, 26 Jul 2012 20:48:31 +0200
Daniel Vetter <daniel.vet...@ffwll.ch> wrote:

> All dvo drivers only support 2 dpms states, and our dvo driver
> even switches of the dvo port for anything else than DPMS_ON. Hence
> ditch this complexity and simply use bool enable.
> 
> While reading through this code I've noticed that the mode_set
> function of ch7017 is a bit peculiar - it disable the lvds again, even
> though the crtc helper code should have done that ... This might be to
> work around an issue at driver load, we pretty much ignore the hw
> state when taking over.
> 
> v2: Also do the conversion for the new ns2501 driver.
> 
> Signed-Off-by: Daniel Vetter <daniel.vet...@ffwll.ch>
> ---
>  drivers/gpu/drm/i915/dvo.h        |    9 ++++-----
>  drivers/gpu/drm/i915/dvo_ch7017.c |    8 ++++----
>  drivers/gpu/drm/i915/dvo_ch7xxx.c |    4 ++--
>  drivers/gpu/drm/i915/dvo_ivch.c   |    8 ++++----
>  drivers/gpu/drm/i915/dvo_ns2501.c |   14 ++++++--------
>  drivers/gpu/drm/i915/dvo_sil164.c |    4 ++--
>  drivers/gpu/drm/i915/dvo_tfp410.c |    4 ++--
>  drivers/gpu/drm/i915/intel_dvo.c  |    4 ++--
>  8 files changed, 26 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/dvo.h b/drivers/gpu/drm/i915/dvo.h
> index 0c8ac4d..0fa839e 100644
> --- a/drivers/gpu/drm/i915/dvo.h
> +++ b/drivers/gpu/drm/i915/dvo.h
> @@ -58,13 +58,12 @@ struct intel_dvo_dev_ops {
>       void (*create_resources)(struct intel_dvo_device *dvo);
>  
>       /*
> -      * Turn on/off output or set intermediate power levels if
> available.
> +      * Turn on/off output.
>        *
> -      * Unsupported intermediate modes drop to the lower power
> setting.
> -      * If the  mode is DPMSModeOff, the output must be disabled,
> -      * as the DPLL may be disabled afterwards.
> +      * Because none of our dvo drivers support an intermediate
> power levels,
> +      * we don't expose this in the interfac.
>        */
> -     void (*dpms)(struct intel_dvo_device *dvo, int mode);
> +     void (*dpms)(struct intel_dvo_device *dvo, bool enable);
>  
>       /*
>        * Callback for testing a video mode for a given output.
> diff --git a/drivers/gpu/drm/i915/dvo_ch7017.c
> b/drivers/gpu/drm/i915/dvo_ch7017.c index 1ca799a..71e7650 100644
> --- a/drivers/gpu/drm/i915/dvo_ch7017.c
> +++ b/drivers/gpu/drm/i915/dvo_ch7017.c
> @@ -163,7 +163,7 @@ struct ch7017_priv {
>  };
>  
>  static void ch7017_dump_regs(struct intel_dvo_device *dvo);
> -static void ch7017_dpms(struct intel_dvo_device *dvo, int mode);
> +static void ch7017_dpms(struct intel_dvo_device *dvo, bool enable);
>  
>  static bool ch7017_read(struct intel_dvo_device *dvo, u8 addr, u8
> *val) {
> @@ -309,7 +309,7 @@ static void ch7017_mode_set(struct
> intel_dvo_device *dvo, lvds_power_down =
> CH7017_LVDS_POWER_DOWN_DEFAULT_RESERVED | (mode->hdisplay & 0x0700)
> >> 8; 
> -     ch7017_dpms(dvo, DRM_MODE_DPMS_OFF);
> +     ch7017_dpms(dvo, false);
>       ch7017_write(dvo, CH7017_HORIZONTAL_ACTIVE_PIXEL_INPUT,
>                       horizontal_active_pixel_input);
>       ch7017_write(dvo, CH7017_HORIZONTAL_ACTIVE_PIXEL_OUTPUT,
> @@ -331,7 +331,7 @@ static void ch7017_mode_set(struct
> intel_dvo_device *dvo, }
>  
>  /* set the CH7017 power state */
> -static void ch7017_dpms(struct intel_dvo_device *dvo, int mode)
> +static void ch7017_dpms(struct intel_dvo_device *dvo, bool enable)
>  {
>       uint8_t val;
>  
> @@ -345,7 +345,7 @@ static void ch7017_dpms(struct intel_dvo_device
> *dvo, int mode) CH7017_DAC3_POWER_DOWN |
>                       CH7017_TV_POWER_DOWN_EN);
>  
> -     if (mode == DRM_MODE_DPMS_ON) {
> +     if (enable) {
>               /* Turn on the LVDS */
>               ch7017_write(dvo, CH7017_LVDS_POWER_DOWN,
>                            val & ~CH7017_LVDS_POWER_DOWN_EN);
> diff --git a/drivers/gpu/drm/i915/dvo_ch7xxx.c
> b/drivers/gpu/drm/i915/dvo_ch7xxx.c index 4a03660..c1dea5b 100644
> --- a/drivers/gpu/drm/i915/dvo_ch7xxx.c
> +++ b/drivers/gpu/drm/i915/dvo_ch7xxx.c
> @@ -289,9 +289,9 @@ static void ch7xxx_mode_set(struct
> intel_dvo_device *dvo, }
>  
>  /* set the CH7xxx power state */
> -static void ch7xxx_dpms(struct intel_dvo_device *dvo, int mode)
> +static void ch7xxx_dpms(struct intel_dvo_device *dvo, bool enable)
>  {
> -     if (mode == DRM_MODE_DPMS_ON)
> +     if (enable)
>               ch7xxx_writeb(dvo, CH7xxx_PM, CH7xxx_PM_DVIL |
> CH7xxx_PM_DVIP); else
>               ch7xxx_writeb(dvo, CH7xxx_PM, CH7xxx_PM_FPD);
> diff --git a/drivers/gpu/drm/i915/dvo_ivch.c
> b/drivers/gpu/drm/i915/dvo_ivch.c index 04f2893..fa8ff6b 100644
> --- a/drivers/gpu/drm/i915/dvo_ivch.c
> +++ b/drivers/gpu/drm/i915/dvo_ivch.c
> @@ -288,7 +288,7 @@ static enum drm_mode_status
> ivch_mode_valid(struct intel_dvo_device *dvo, }
>  
>  /** Sets the power state of the panel connected to the ivch */
> -static void ivch_dpms(struct intel_dvo_device *dvo, int mode)
> +static void ivch_dpms(struct intel_dvo_device *dvo, bool enable)
>  {
>       int i;
>       uint16_t vr01, vr30, backlight;
> @@ -297,13 +297,13 @@ static void ivch_dpms(struct intel_dvo_device
> *dvo, int mode) if (!ivch_read(dvo, VR01, &vr01))
>               return;
>  
> -     if (mode == DRM_MODE_DPMS_ON)
> +     if (enable)
>               backlight = 1;
>       else
>               backlight = 0;
>       ivch_write(dvo, VR80, backlight);
>  
> -     if (mode == DRM_MODE_DPMS_ON)
> +     if (enable)
>               vr01 |= VR01_LCD_ENABLE | VR01_DVO_ENABLE;
>       else
>               vr01 &= ~(VR01_LCD_ENABLE | VR01_DVO_ENABLE);
> @@ -315,7 +315,7 @@ static void ivch_dpms(struct intel_dvo_device
> *dvo, int mode) if (!ivch_read(dvo, VR30, &vr30))
>                       break;
>  
> -             if (((vr30 & VR30_PANEL_ON) != 0) == (mode ==
> DRM_MODE_DPMS_ON))
> +             if (((vr30 & VR30_PANEL_ON) != 0) == enable)
>                       break;
>               udelay(1000);
>       }
> diff --git a/drivers/gpu/drm/i915/dvo_ns2501.c
> b/drivers/gpu/drm/i915/dvo_ns2501.c index 6bd383d..c4d9f2f 100644
> --- a/drivers/gpu/drm/i915/dvo_ns2501.c
> +++ b/drivers/gpu/drm/i915/dvo_ns2501.c
> @@ -493,19 +493,19 @@ static void ns2501_mode_set(struct
> intel_dvo_device *dvo, }
>  
>  /* set the NS2501 power state */
> -static void ns2501_dpms(struct intel_dvo_device *dvo, int mode)
> +static void ns2501_dpms(struct intel_dvo_device *dvo, bool enable)
>  {
>       bool ok;
>       bool restore = false;
>       struct ns2501_priv *ns = (struct ns2501_priv
> *)(dvo->dev_priv); unsigned char ch;
>  
> -     DRM_DEBUG_KMS("%s: Trying set the dpms of the DVO to %d\n",
> -                   __FUNCTION__, mode);
> +     DRM_DEBUG_KMS("%s: Trying set the dpms of the DVO to %i\n",
> +                   __FUNCTION__, enable);
>  
>       ch = ns->reg_8_shadow;
>  
> -     if (mode == DRM_MODE_DPMS_ON)
> +     if (enable)
>               ch |= NS2501_8_PD;
>       else
>               ch &= ~NS2501_8_PD;
> @@ -519,12 +519,10 @@ static void ns2501_dpms(struct intel_dvo_device
> *dvo, int mode) ok &= ns2501_writeb(dvo, NS2501_REG8, ch);
>                       ok &=
>                           ns2501_writeb(dvo, 0x34,
> -                                       (mode ==
> -                                        DRM_MODE_DPMS_ON) ?
> (0x03) : (0x00));
> +                                       enable ? 0x03 : 0x00);
>                       ok &=
>                           ns2501_writeb(dvo, 0x35,
> -                                       (mode ==
> -                                        DRM_MODE_DPMS_ON) ?
> (0xff) : (0x00));
> +                                       enable ? 0xff : 0x00);
>                       if (!ok) {
>                               if (restore)
>                                       restore_dvo(dvo);
> diff --git a/drivers/gpu/drm/i915/dvo_sil164.c
> b/drivers/gpu/drm/i915/dvo_sil164.c index a0b13a6..cc24c1c 100644
> --- a/drivers/gpu/drm/i915/dvo_sil164.c
> +++ b/drivers/gpu/drm/i915/dvo_sil164.c
> @@ -208,7 +208,7 @@ static void sil164_mode_set(struct
> intel_dvo_device *dvo, }
>  
>  /* set the SIL164 power state */
> -static void sil164_dpms(struct intel_dvo_device *dvo, int mode)
> +static void sil164_dpms(struct intel_dvo_device *dvo, bool enable)
>  {
>       int ret;
>       unsigned char ch;
> @@ -217,7 +217,7 @@ static void sil164_dpms(struct intel_dvo_device
> *dvo, int mode) if (ret == false)
>               return;
>  
> -     if (mode == DRM_MODE_DPMS_ON)
> +     if (enable)
>               ch |= SIL164_8_PD;
>       else
>               ch &= ~SIL164_8_PD;
> diff --git a/drivers/gpu/drm/i915/dvo_tfp410.c
> b/drivers/gpu/drm/i915/dvo_tfp410.c index aa2cd3e..097b3e8 100644
> --- a/drivers/gpu/drm/i915/dvo_tfp410.c
> +++ b/drivers/gpu/drm/i915/dvo_tfp410.c
> @@ -234,14 +234,14 @@ static void tfp410_mode_set(struct
> intel_dvo_device *dvo, }
>  
>  /* set the tfp410 power state */
> -static void tfp410_dpms(struct intel_dvo_device *dvo, int mode)
> +static void tfp410_dpms(struct intel_dvo_device *dvo, bool enable)
>  {
>       uint8_t ctl1;
>  
>       if (!tfp410_readb(dvo, TFP410_CTL_1, &ctl1))
>               return;
>  
> -     if (mode == DRM_MODE_DPMS_ON)
> +     if (enable)
>               ctl1 |= TFP410_CTL_1_PD;
>       else
>               ctl1 &= ~TFP410_CTL_1_PD;
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c
> b/drivers/gpu/drm/i915/intel_dvo.c index 03dfdff..227551f 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -115,9 +115,9 @@ static void intel_dvo_dpms(struct drm_encoder
> *encoder, int mode) if (mode == DRM_MODE_DPMS_ON) {
>               I915_WRITE(dvo_reg, temp | DVO_ENABLE);
>               I915_READ(dvo_reg);
> -             intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, mode);
> +             intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, true);
>       } else {
> -             intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, mode);
> +             intel_dvo->dev.dev_ops->dpms(&intel_dvo->dev, false);
>               I915_WRITE(dvo_reg, temp & ~DVO_ENABLE);
>               I915_READ(dvo_reg);
>       }

Looks reasonable.  The comment about lvds disable probably doesn't need
to be in the commit message, but it would be good to test that theory
(need to find a tester though; maybe krh has his old system lying
around somewhere).

Jesse
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to