diff -uNr pommed-1.25/.cproject pommed/.cproject
--- pommed-1.25/.cproject	1970-01-01 01:00:00.000000000 +0100
+++ pommed/.cproject	2009-02-24 18:17:45.000000000 +0100
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1108576630">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1108576630" moduleId="org.eclipse.cdt.core.settings" name="Linux GCC">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="pommed" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1108576630" name="Linux GCC" parent="org.eclipse.cdt.build.core.emptycfg">
+<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1108576630.1498263674" name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.base.587107189" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
+<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.10606341" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
+<builder id="cdt.managedbuild.target.gnu.builder.base.780046208" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
+<tool id="cdt.managedbuild.tool.gnu.archiver.base.845736079" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.987498320" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.2055880720" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1828627898" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.base.379958347" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base">
+<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1872809100" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1556536245" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
+<tool id="cdt.managedbuild.tool.gnu.assembler.base.1084738879" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
+<option id="gnu.both.asm.option.include.paths.1523588426" superClass="gnu.both.asm.option.include.paths" valueType="includePath"/>
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1893475869" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+</toolChain>
+</folderInfo>
+<sourceEntries>
+<entry excluding="client-common|gpomme|wmpomme|pommed" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="pommed"/>
+<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="client-common"/>
+<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="gpomme"/>
+<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="wmpomme"/>
+</sourceEntries>
+</configuration>
+</storageModule>
+
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.1108576630;cdt.managedbuild.toolchain.gnu.base.1108576630.1498263674;cdt.managedbuild.tool.gnu.c.compiler.base.2055880720;cdt.managedbuild.tool.gnu.c.compiler.input.1828627898">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+</cconfiguration>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<project id="pommed.null.1324627645" name="pommed"/>
+</storageModule>
+</cproject>
diff -uNr pommed-1.25/pommed/conffile.c pommed/pommed/conffile.c
--- pommed-1.25/pommed/conffile.c	2008-12-11 15:35:53.000000000 +0100
+++ pommed/pommed/conffile.c	2009-02-24 21:52:06.000000000 +0100
@@ -47,6 +47,7 @@
 struct _kbd_cfg kbd_cfg;
 struct _eject_cfg eject_cfg;
 struct _beep_cfg beep_cfg;
+struct _lid_cfg lid_cfg;
 #ifndef __powerpc__
 struct _appleir_cfg appleir_cfg;
 #endif
@@ -132,6 +133,13 @@
     CFG_END()
   };
 
+static cfg_opt_t lid_opts[] =
+  {
+    CFG_BOOL("enabled", 1, CFGF_NONE),
+    CFG_STR("suspend_cmd", SUSPEND_DEFAULT_CMD, CFGF_NONE),
+    CFG_END()
+  };
+
 #ifndef __powerpc__
 static cfg_opt_t appleir_opts[] =
   {
@@ -156,6 +164,7 @@
 #ifndef __powerpc__
     CFG_SEC("appleir", appleir_opts, CFGF_NONE),
 #endif
+    CFG_SEC("suspend_on_lid", lid_opts, CFGF_NONE),
     CFG_END()
   };
 
@@ -234,6 +243,9 @@
   printf(" + Beep:\n");
   printf("    enabled: %s\n", (beep_cfg.enabled) ? "yes" : "no");
   printf("    beepfile: %s\n", beep_cfg.beepfile);
+  printf(" + Suspend on lid:\n");
+  printf("    enabled: %s\n", (lid_cfg.enabled) ? "yes" : "no");
+  printf("    suspend cmd: %s\n", lid_cfg.suspend_cmd);
 #ifndef __powerpc__
   printf(" + Apple Remote IR Receiver:\n");
   printf("    enabled: %s\n", (appleir_cfg.enabled) ? "yes" : "no");
@@ -291,7 +303,7 @@
   /* beep */
   cfg_set_validate_func(cfg, "beep|beepfile", config_validate_string);
 
-  /* 
+  /*
    * Do the actual parsing.
    * If the file does not exist or cannot be opened,
    * we'll be using the default values defined in the cfg_opt_t arrays.
@@ -372,6 +384,10 @@
   beep_cfg.beepfile = strdup(cfg_getstr(sec, "beepfile"));
   beep_fix_config();
 
+  sec = cfg_getsec(cfg, "suspend_on_lid");
+  lid_cfg.enabled = cfg_getbool(sec, "enabled");
+  lid_cfg.suspend_cmd = strdup(cfg_getstr(sec, "suspend_cmd"));
+
 #ifndef __powerpc__
   sec = cfg_getsec(cfg, "appleir");
   appleir_cfg.enabled = cfg_getbool(sec, "enabled");
@@ -396,4 +412,5 @@
   free(eject_cfg.device);
 
   free(beep_cfg.beepfile);
+  free(lid_cfg.suspend_cmd);
 }
diff -uNr pommed-1.25/pommed/conffile.h pommed/pommed/conffile.h
--- pommed-1.25/pommed/conffile.h	2008-12-11 15:35:53.000000000 +0100
+++ pommed/pommed/conffile.h	2009-02-24 21:41:56.000000000 +0100
@@ -5,6 +5,8 @@
 #ifndef __CONFFILE_H__
 #define __CONFFILE_H__
 
+#define SUSPEND_DEFAULT_CMD	  "pm-suspend"
+
 struct _general_cfg {
   int fnmode;
 };
@@ -65,6 +67,11 @@
   char *beepfile;
 };
 
+struct _lid_cfg {
+	int enabled;
+	char *suspend_cmd;
+};
+
 #ifndef __powerpc__
 struct _appleir_cfg {
   int enabled;
@@ -83,6 +90,7 @@
 extern struct _kbd_cfg kbd_cfg;
 extern struct _eject_cfg eject_cfg;
 extern struct _beep_cfg beep_cfg;
+extern struct _lid_cfg lid_cfg;
 #ifndef __powerpc__
 extern struct _appleir_cfg appleir_cfg;
 #endif
diff -uNr pommed-1.25/pommed/evdev.c pommed/pommed/evdev.c
--- pommed-1.25/pommed/evdev.c	2009-01-03 19:07:38.000000000 +0100
+++ pommed/pommed/evdev.c	2009-02-24 22:28:20.000000000 +0100
@@ -211,15 +211,21 @@
 	{
 	  if (ev.value)
 	    {
+		  int ret;
 	      logdebug("\nLID: closed\n");
 
-	      kbd_backlight_inhibit_set(KBD_INHIBIT_LID);
+	      if (has_kbd_backlight())
+			kbd_backlight_inhibit_set(KBD_INHIBIT_LID);
+
+	      if (lid_cfg.enabled)
+	    	ret = system(lid_cfg.suspend_cmd);
 	    }
 	  else
 	    {
 	      logdebug("\nLID: open\n");
 
-	      kbd_backlight_inhibit_clear(KBD_INHIBIT_LID);
+	      if (has_kbd_backlight())
+	    	kbd_backlight_inhibit_clear(KBD_INHIBIT_LID);
 	    }
 	}
     }
@@ -782,13 +788,13 @@
 
   ioctl(fd, EVIOCGID, id);
 
-  if ((!evdev_is_internal(id))
+  if (!evdev_is_internal(id)
 #ifndef __powerpc__
       && !(appleir_cfg.enabled && evdev_is_appleir(id))
 #endif
-      && !(has_kbd_backlight() && evdev_is_lidswitch(id))
-      && !(evdev_is_mouseemu(id))
-      && !(evdev_is_extkbd(id)))
+      && !evdev_is_lidswitch(id)
+      && !evdev_is_mouseemu(id)
+      && !evdev_is_extkbd(id))
     {
       logdebug("Discarding evdev: bus 0x%04x, vid 0x%04x, pid 0x%04x\n", id[ID_BUS], id[ID_VENDOR], id[ID_PRODUCT]);
 
diff -uNr pommed-1.25/pommed/evloop.c pommed/pommed/evloop.c
--- pommed-1.25/pommed/evloop.c	2008-06-06 21:54:54.000000000 +0200
+++ pommed/pommed/evloop.c	2009-02-24 21:58:25.000000000 +0100
@@ -131,12 +131,13 @@
 evloop_timer_callback(int fd, uint32_t events)
 {
   uint64_t ticks;
+  int ret;
 
   struct pommed_timer *t;
   struct pommed_timer_job *j;
 
   /* Acknowledge timer */
-  read(fd, &ticks, sizeof(ticks));
+  ret = read(fd, &ticks, sizeof(ticks));
 
   j = NULL;
   for (t = timers; t != NULL; t = t->next)
diff -uNr pommed-1.25/pommed.conf.mactel pommed/pommed.conf.mactel
--- pommed-1.25/pommed.conf.mactel	2008-12-11 15:35:53.000000000 +0100
+++ pommed/pommed.conf.mactel	2009-02-24 21:37:43.000000000 +0100
@@ -117,3 +117,7 @@
 	enabled = no
 }
 
+suspend_on_lid {
+	enabled = yes
+	suspend_cmd = "pm-suspend"
+}
