[Intel-gfx] Backlight testing

Zhenyu Wang zhenyu.z.wang at intel.com
Fri Apr 25 05:37:53 CEST 2008


On 2008.04.24 14:47:10 +0200, Lukas Hejtmanek wrote:
> Hello Jesse,
> 
> unfortunately, the latest head of the intel driver has problem with backlight
> setting again.
> 
> If I change backlight setting while the xserver is running (using /sys
> interface), using mplayer resets the setting back to the previous value.
> 
> I think it happens if I set backlight level and then call DPMS from On to On.
> The current code does not reread the current value. The following patch works
> for me:

Good catch, I think we can ignore backlight setting if current target
power has already been on, or get/set current level as in your patch.

> 
> diff --git a/src/i830_lvds.c b/src/i830_lvds.c
> index 1562c21..2452513 100644
> --- a/src/i830_lvds.c
> +++ b/src/i830_lvds.c
> @@ -69,6 +69,7 @@ struct i830_lvds_priv {
>      void (*set_backlight)(xf86OutputPtr output, int level);
>      int (*get_backlight)(xf86OutputPtr output);
>      int backlight_max;
> +    char dpms;
>      enum pfit_mode fitting_mode;
>      uint32_t pfit_control;
>      uint32_t pfit_pgm_ratios;
> @@ -395,16 +396,20 @@ i830SetLVDSPanelPower(xf86OutputPtr output, Bool on)
>          * controller for example), so on them, when turning LVDS back on,
>          * they'll always re-maximize the brightness.
>          */
> -       if (!(INREG(PP_CONTROL) & POWER_TARGET_ON) &&
> +       if (!(INREG(PP_CONTROL) & POWER_TARGET_ON) && 
>             dev_priv->backlight_duty_cycle == 0)
>             dev_priv->backlight_duty_cycle = dev_priv->backlight_max;
>  
> +       if (!dev_priv->dpms)
> +           dev_priv->backlight_duty_cycle = dev_priv->get_backlight(output);
> +
>         OUTREG(PP_CONTROL, INREG(PP_CONTROL) | POWER_TARGET_ON);
>         do {
>             pp_status = INREG(PP_STATUS);
>         } while ((pp_status & PP_ON) == 0);
>  
>         dev_priv->set_backlight(output, dev_priv->backlight_duty_cycle);
> +       dev_priv->dpms = 0;
>      } else {
>         /*
>          * Only save the current backlight value if we're going from
> @@ -413,6 +418,7 @@ i830SetLVDSPanelPower(xf86OutputPtr output, Bool on)
>         if (INREG(PP_CONTROL) & POWER_TARGET_ON)
>             dev_priv->backlight_duty_cycle = dev_priv->get_backlight(output);
>         dev_priv->set_backlight(output, 0);
> +       dev_priv->dpms = 1;
>  
>         OUTREG(PP_CONTROL, INREG(PP_CONTROL) & ~POWER_TARGET_ON);
>         do {
> @@ -1222,6 +1228,7 @@ i830_lvds_init(ScrnInfoPtr pScrn)
>  
>      dev_priv = (struct i830_lvds_priv *) (intel_output + 1);
>      intel_output->dev_priv = dev_priv;
> +    dev_priv->dpms = 0;
>  
>      /* Set up the LVDS DDC channel.  Most panels won't support it, but it can
>       * be useful if available.
> 
> -- 
> Lukáš Hejtmánek
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827



More information about the Intel-gfx mailing list