From patchwork Mon Aug 27 07:38:46 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Lu X-Patchwork-Id: 1376601 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 8B6D6DF215 for ; Mon, 27 Aug 2012 07:39:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752783Ab2H0HjX (ORCPT ); Mon, 27 Aug 2012 03:39:23 -0400 Received: from mga09.intel.com ([134.134.136.24]:48168 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752758Ab2H0HjX (ORCPT ); Mon, 27 Aug 2012 03:39:23 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 27 Aug 2012 00:39:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.80,318,1344236400"; d="scan'208";a="185701809" Received: from mint-spring.sh.intel.com ([10.239.36.45]) by orsmga001.jf.intel.com with ESMTP; 27 Aug 2012 00:39:21 -0700 From: Aaron Lu To: Len Brown , "Rafael J. Wysocki" Cc: linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org, Aaron Lu , Aaron Lu Subject: [PATCH] acpi: bus: handle power manageable but no _PSC/_PRx case Date: Mon, 27 Aug 2012 15:38:46 +0800 Message-Id: <1346053126-7646-1-git-send-email-aaron.lu@intel.com> X-Mailer: git-send-email 1.7.12.21.g871e293 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Currently, when we are trying to get the power state of an acpi device, we will do the following: If device is not power manageable, init its power state as its parent or if it does not have a parent, init as D0; If device is power manageable, evaluate _PSC and then refine with acpi_power_get_inferred_state. But there exist some devices with _PSx defined, but no _PSC or _PRx. It is power manageable, but the above method to get power state does not cover this case and its power state will be UNKNOWN(255). So change the check of power manageable to whether _PSC and _PRx defined. Signed-off-by: Aaron Lu --- drivers/acpi/bus.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 9628652..b564e6d 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -207,7 +207,8 @@ static int __acpi_bus_get_power(struct acpi_device *device, int *state) if (!device || !state) return -EINVAL; - if (!device->flags.power_manageable) { + if (!device->power.flags.explicit_get && + !device->power.flags.power_resources) { /* TBD: Non-recursive algorithm for walking up hierarchy. */ *state = device->parent ? device->parent->power.state : ACPI_STATE_D0;