From patchwork Wed May 4 14:56:43 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lin Ming X-Patchwork-Id: 753982 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p44Eui96028377 for ; Wed, 4 May 2011 14:56:44 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754166Ab1EDO4n (ORCPT ); Wed, 4 May 2011 10:56:43 -0400 Received: from mga09.intel.com ([134.134.136.24]:41040 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753167Ab1EDO4n (ORCPT ); Wed, 4 May 2011 10:56:43 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 04 May 2011 07:56:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.64,314,1301900400"; d="scan'208";a="742286294" Received: from unknown (HELO [10.255.20.107]) ([10.255.20.107]) by orsmga001.jf.intel.com with ESMTP; 04 May 2011 07:56:41 -0700 Subject: [PATCH] acpi: Add D3 cold state From: Lin Ming To: Len Brown Cc: Jesse Barnes , linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, "Moore, Robert" Date: Wed, 04 May 2011 22:56:43 +0800 Message-Id: <1304521003.2624.18.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.28.0 (2.28.0-2.fc12) Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 04 May 2011 14:56:44 +0000 (UTC) _SxW returns an Integer containing the lowest D-state supported in state Sx. If OSPM has not indicated that it supports _PR3, then the value “3” corresponds to D3. If it has indicated _PR3 support, the value “3” represents D3hot and the value “4” represents D3cold. Linux does set _OSC._PR3, so we should fix it to expect that _SxW can return 4. Signed-off-by: Lin Ming Acked-by: Jesse Barnes --- drivers/acpi/bus.c | 2 +- drivers/pci/pci-acpi.c | 2 ++ include/acpi/actypes.h | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 9749980..d1e06c1 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -227,7 +227,7 @@ static int __acpi_bus_set_power(struct acpi_device *device, int state) acpi_status status = AE_OK; char object_name[5] = { '_', 'P', 'S', '0' + state, '\0' }; - if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3)) + if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3_COLD)) return -EINVAL; /* Make sure this is a valid target state */ diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index 7c3b18e..d36f41e 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -195,6 +195,8 @@ static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev) return PCI_D2; case ACPI_STATE_D3: return PCI_D3hot; + case ACPI_STATE_D3_COLD: + return PCI_D3cold; } return PCI_POWER_ERROR; } diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 64f838b..f72cbe5 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h @@ -501,8 +501,9 @@ typedef u64 acpi_integer; #define ACPI_STATE_D1 (u8) 1 #define ACPI_STATE_D2 (u8) 2 #define ACPI_STATE_D3 (u8) 3 -#define ACPI_D_STATES_MAX ACPI_STATE_D3 -#define ACPI_D_STATE_COUNT 4 +#define ACPI_STATE_D3_COLD (u8) 4 +#define ACPI_D_STATES_MAX ACPI_STATE_D3_COLD +#define ACPI_D_STATE_COUNT 5 #define ACPI_STATE_C0 (u8) 0 #define ACPI_STATE_C1 (u8) 1