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

gma500: move the ASLE enable

Otherwise we end up getting the masks wrong, can get events before we
are doing power control and other ungood things. Again this is a
regression fix where the ordering of handling was disturbed by other
work, and the user experience on some boxes is a blank screen.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Alan Cox and committed by
Linus Torvalds
166973e5 f507598b

+9 -5
+3 -5
drivers/gpu/drm/gma500/opregion.c
··· 144 144 145 145 #define ASLE_CBLV_VALID (1<<31) 146 146 147 + static struct psb_intel_opregion *system_opregion; 148 + 147 149 static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) 148 150 { 149 151 struct drm_psb_private *dev_priv = dev->dev_private; ··· 207 205 struct drm_psb_private *dev_priv = dev->dev_private; 208 206 struct opregion_asle *asle = dev_priv->opregion.asle; 209 207 210 - if (asle) { 208 + if (asle && system_opregion ) { 211 209 /* Don't do this on Medfield or other non PC like devices, they 212 210 use the bit for something different altogether */ 213 211 psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE); ··· 223 221 #define ACPI_EV_LID (1<<1) 224 222 #define ACPI_EV_DOCK (1<<2) 225 223 226 - static struct psb_intel_opregion *system_opregion; 227 224 228 225 static int psb_intel_opregion_video_event(struct notifier_block *nb, 229 226 unsigned long val, void *data) ··· 267 266 system_opregion = opregion; 268 267 register_acpi_notifier(&psb_intel_opregion_notifier); 269 268 } 270 - 271 - if (opregion->asle) 272 - psb_intel_opregion_enable_asle(dev); 273 269 } 274 270 275 271 void psb_intel_opregion_fini(struct drm_device *dev)
+5
drivers/gpu/drm/gma500/opregion.h
··· 27 27 extern void psb_intel_opregion_init(struct drm_device *dev); 28 28 extern void psb_intel_opregion_fini(struct drm_device *dev); 29 29 extern int psb_intel_opregion_setup(struct drm_device *dev); 30 + extern void psb_intel_opregion_enable_asle(struct drm_device *dev); 30 31 31 32 #else 32 33 ··· 46 45 extern inline int psb_intel_opregion_setup(struct drm_device *dev) 47 46 { 48 47 return 0; 48 + } 49 + 50 + extern inline void psb_intel_opregion_enable_asle(struct drm_device *dev) 51 + { 49 52 } 50 53 #endif
+1
drivers/gpu/drm/gma500/psb_drv.c
··· 374 374 375 375 if (ret) 376 376 return ret; 377 + psb_intel_opregion_enable_asle(dev); 377 378 #if 0 378 379 /*enable runtime pm at last*/ 379 380 pm_runtime_enable(&dev->pdev->dev);