[Intel-gfx] [PATCH 06/76] drm/i915: simplify dvo dpms interface
Jesse Barnes
jbarnes at virtuousgeek.org
Wed Aug 29 19:09:18 CEST 2012
On Thu, 26 Jul 2012 20:48:31 +0200
Daniel Vetter <daniel.vetter at 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.vetter at 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
More information about the Intel-gfx
mailing list