Currently, there's code in acpi.c that sends the system back to sleep when resuming with closed lid and machdep.lidsuspend=1. I often use my laptop in a docking station with an external monitor and keep the lid closed, and I'd like to be able to resume just by pushing the power button on the docking station. (Also, I first thought something was broken when pushing the button only made the suspend-indicator light blink for a moment.)
If checking for open lids is necessary in some cases, then I can certainly live with lidsuspend=0, but otherwise I'd prefer if it was possible to resume with a closed lid. I removed the check and didn't notice any problems. The diff below removes the check and also the function acpibtn_numopenlids which is not used anywhere else. Index: sys/dev/acpi/acpi.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpi.c,v retrieving revision 1.281 diff -u -p -r1.281 acpi.c --- sys/dev/acpi/acpi.c 17 Jan 2015 04:18:49 -0000 1.281 +++ sys/dev/acpi/acpi.c 29 Jan 2015 22:53:42 -0000 @@ -2161,7 +2161,6 @@ int acpi_sleep_state(struct acpi_softc *sc, int state) { extern int perflevel; - extern int lid_suspend; int error = ENXIO; int s; @@ -2305,10 +2304,6 @@ fail_alloc: acpi_record_event(sc, APM_NORMAL_RESUME); acpi_indicator(sc, ACPI_SST_WORKING); - - /* If we woke up but all the lids are closed, go back to sleep */ - if (acpibtn_numopenlids() == 0 && lid_suspend != 0) - acpi_addtask(sc, acpi_sleep_task, sc, state); fail_tts: return (error); Index: sys/dev/acpi/acpibtn.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpibtn.c,v retrieving revision 1.41 diff -u -p -r1.41 acpibtn.c --- sys/dev/acpi/acpibtn.c 27 Jan 2015 19:40:14 -0000 1.41 +++ sys/dev/acpi/acpibtn.c 29 Jan 2015 22:53:42 -0000 @@ -74,37 +74,6 @@ struct cfdriver acpibtn_cd = { const char *acpibtn_hids[] = { ACPI_DEV_LD, ACPI_DEV_PBD, ACPI_DEV_SBD, 0 }; -/* - * acpibtn_numopenlids - * - * Return the number of _LID devices that are in the "open" state. - * Used to determine if we should go back to sleep/hibernate if we - * woke up with the all the lids still closed for some reason. If - * the machine has no lids, returns -1. - */ -int -acpibtn_numopenlids(void) -{ - struct acpi_lid *lid; - int64_t val; - int ct = 0; - - /* If we have no lids ... */ - if (SLIST_EMPTY(&acpibtn_lids)) - return (-1); - - /* - * Determine how many lids are open. Assumes _LID evals to - * non-0 or 0, for on / off (which is what the spec says). - */ - SLIST_FOREACH(lid, &acpibtn_lids, abl_link) - if (!aml_evalinteger(lid->abl_softc->sc_acpi, - lid->abl_softc->sc_devnode, "_LID", 0, NULL, &val) && - val != 0) - ct++; - return (ct); -} - int acpibtn_setpsw(struct acpibtn_softc *sc, int psw) { Index: sys/dev/acpi/acpidev.h =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpidev.h,v retrieving revision 1.36 diff -u -p -r1.36 acpidev.h --- sys/dev/acpi/acpidev.h 23 Nov 2014 20:33:47 -0000 1.36 +++ sys/dev/acpi/acpidev.h 29 Jan 2015 22:53:42 -0000 @@ -337,5 +337,4 @@ struct acpiec_softc { void acpibtn_disable_psw(void); void acpibtn_enable_psw(void); -int acpibtn_numopenlids(void); #endif /* __DEV_ACPI_ACPIDEV_H__ */