Dell laptop LCDs not powering up on lid open event

My Dell Inspiron 640m laptop has some strange behaviour which irritates me: when the lid is closed, the display turns off as you might expect. However, when the lid is opened, the display remains off.

The workaround up to this point has been to use acpid to listen for “lid open” events, and then have an event handler which uses vbetool (or xset) to restore power to the display.

I’ve been digging deeper into this problem, and have realised that the above behaviour is entirely due to the behaviour coded into the system ACPI tables (DSDT). With just a few lines of code, this strange behaviour can be “corrected”.

I’ve posted a DSDT patch to fix this. To use it, you have to decompile your DSDT, apply the patch, recompile it, and then build it into your kernel. For interested people, there are plenty of DSDT-patching guides on the Gentoo Forums and similar.

After applying this fix, I can uninstall acpid completely and the screen blank/unblank “just works”. The above patch is suitable for Dell 640m and e1405 models, and possibly others too.

UPDATE: I’m working on kernel patches which will mean that no DSDT hacking is needed, and LCD resuming will really “just work”. Keep an eye on my weblog for more.

9 Responses to “Dell laptop LCDs not powering up on lid open event”

  1. Ira Snyder Says:

    Thanks for this patch! I just applied it to my DSDT on my Dell Inspiron E1505 / Inspiron 6000, and it works great. I’ve been fighting with the screen staying off for what seems like forever, and now it “just works.”

    This will sure make life a lot easier when I try to get suspend working again. Most of the problems I’ve had have been related to the screen not turning back on.

  2. jvs Says:

    so, this actually means, that if you have a complete and error-free dsdt table for your machine, acpid is not needed? only if you want to achieve special behaviour? I always thought the acpid just reads the dsdt table… -_-

  3. dsd Says:

    acpid may be useful to you for other purposes. It doesn’t read the DSDT table, it just responds to ACPI events from the kernel (and the kernel is the thing which reads and interprets the DSDT). For me, the only reason I had it acpid was to turn my damn screen back on when opening the lid. Now that I have fixed that on another level, bye bye acpid :)

  4. jvs Says:

    another lesson learned today. great :)

  5. pclouds Says:

    Works well with my 640m. Thanks!

  6. Ryan Neufeld Says:

    I have a D620 with a similar problem, unfortunately your patch does not match my DSDT.

    Would you mind having a look at mine and seeing if there is anything you can do do help?

  7. Georges Says:

    I just got a 640m and this hack works perfectly ! Thanks !

    Georges.

  8. Ryan Novosielski Says:

    I am another Ryan N. with a D620 that has the same problem. I did not try the patch or looking at the DSDT problem. Also, my laptop only occasionally exhibits the problem (seems like most frequently when I close the display and say “oh, wait” and open it back up — after that, the display seems to never power up). Any ideas?

  9. Cortland Robinson Says:

    Wow.. I have never heard of DSDT and, I have no clue how to apply this patch! My screen will not turn back on after closing the lid. I purchased a new motherboard for my Dell E1505, since the sound stopped working on the other. Well this new one works great, except for when I close the lid. I have also googled and read forums on DSDT and it’s foreign to me! Anyway able to help me apply this? Thanks in advance. Email: cortlands @ Gmail.com

Leave a Reply