Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: do not access BLC_PWM_CTL2 on pre-gen4 hardware

The BLC_PWM_CTL2 register does not exist before gen4. While at it, do a
slight drive by cleanup of the code.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

authored by

Jani Nikula and committed by
Daniel Vetter
bfd7590d 633cf8f5

+11 -10
+11 -10
drivers/gpu/drm/i915/intel_panel.c
··· 130 130 return 0; 131 131 } 132 132 133 - static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv) 133 + static u32 i915_read_blc_pwm_ctl(struct drm_device *dev) 134 134 { 135 + struct drm_i915_private *dev_priv = dev->dev_private; 135 136 u32 val; 136 137 137 138 /* Restore the CTL value if it lost, e.g. GPU reset */ ··· 142 141 if (dev_priv->regfile.saveBLC_PWM_CTL2 == 0) { 143 142 dev_priv->regfile.saveBLC_PWM_CTL2 = val; 144 143 } else if (val == 0) { 145 - I915_WRITE(BLC_PWM_PCH_CTL2, 146 - dev_priv->regfile.saveBLC_PWM_CTL2); 147 144 val = dev_priv->regfile.saveBLC_PWM_CTL2; 145 + I915_WRITE(BLC_PWM_PCH_CTL2, val); 148 146 } 149 147 } else { 150 148 val = I915_READ(BLC_PWM_CTL); 151 149 if (dev_priv->regfile.saveBLC_PWM_CTL == 0) { 152 150 dev_priv->regfile.saveBLC_PWM_CTL = val; 153 - dev_priv->regfile.saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2); 151 + if (INTEL_INFO(dev)->gen >= 4) 152 + dev_priv->regfile.saveBLC_PWM_CTL2 = 153 + I915_READ(BLC_PWM_CTL2); 154 154 } else if (val == 0) { 155 - I915_WRITE(BLC_PWM_CTL, 156 - dev_priv->regfile.saveBLC_PWM_CTL); 157 - I915_WRITE(BLC_PWM_CTL2, 158 - dev_priv->regfile.saveBLC_PWM_CTL2); 159 155 val = dev_priv->regfile.saveBLC_PWM_CTL; 156 + I915_WRITE(BLC_PWM_CTL, val); 157 + if (INTEL_INFO(dev)->gen >= 4) 158 + I915_WRITE(BLC_PWM_CTL2, 159 + dev_priv->regfile.saveBLC_PWM_CTL2); 160 160 } 161 161 } 162 162 ··· 166 164 167 165 static u32 _intel_panel_get_max_backlight(struct drm_device *dev) 168 166 { 169 - struct drm_i915_private *dev_priv = dev->dev_private; 170 167 u32 max; 171 168 172 - max = i915_read_blc_pwm_ctl(dev_priv); 169 + max = i915_read_blc_pwm_ctl(dev); 173 170 174 171 if (HAS_PCH_SPLIT(dev)) { 175 172 max >>= 16;