On Thu, May 19, 2011 at 8:42 PM, Matthew Garrett <mjg59@xxxxxxxxxxxxx> wrote: > On Thu, May 19, 2011 at 06:06:47PM +0800, aaron lwe wrote: > >> So on init, this device's power state will be set to D0 due to ABPS is >> 0, but its _PS0 never get called. >> If later I want to evaluate its _PS0 control method, what should I do? >> acpi_bus_set_power will return if it found the set state is the same >> with the current state. > > Why do you want to evaluate its _PS0 method? Hi Matthew, The following is a simplified code that this device did by disassembling the DSDT table. When I put the device to D3, and later changed its state back to D0, I got a problem due to HASD is never set to 1: Device (xx) { Name (ABPS, 0) Name (HASD, 0) Method (_PSC, 0, NotSerialized) { Return (ABPS) } Method (_PS0, 0, NotSerialized) { If (LOr (LEqual (HASD, 1), LAnd(LEqual(HASD, 0), LEqual(PORT, 1)))) { // do things to re-power this device Store (1, HASD) } } } PORT is a bit field defined in an operation region, it's an io port value which is used to detect if a device is there. HASD is used to store if a device is there. First I put the device to D3, and then put it back to D0, due to _PS0 is never evaluated before, HASD is 0. And since the device is powered off, the PORT will also be 0. And thus, I can't re-power this device. This control method depends on it being evaluated once during boot, so that it can set HASD to 1. Since this device's state is set to D0 in acpi_bus_init_power without evaluating _PS0 control method, and I need HASD to be set to 1 for _PS0 to be evaluated effectively when I put the device back to D0 from D3, I'll need to evaluate _PS0 when this device's power state is at D0. Thanks, Aaron -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html