aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-acpi.c')
-rw-r--r--drivers/pci/pci-acpi.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 4a23654184fc..72f7476930c8 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -272,21 +272,29 @@ static int acpi_pci_set_power_state(struct pci_dev *dev, pci_power_t state)
272{ 272{
273 acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->dev); 273 acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->dev);
274 acpi_handle tmp; 274 acpi_handle tmp;
275 static int state_conv[] = { 275 static const u8 state_conv[] = {
276 [0] = 0, 276 [PCI_D0] = ACPI_STATE_D0,
277 [1] = 1, 277 [PCI_D1] = ACPI_STATE_D1,
278 [2] = 2, 278 [PCI_D2] = ACPI_STATE_D2,
279 [3] = 3, 279 [PCI_D3hot] = ACPI_STATE_D3,
280 [4] = 3 280 [PCI_D3cold] = ACPI_STATE_D3
281 }; 281 };
282 int acpi_state = state_conv[(int __force) state];
283 282
284 if (!handle) 283 if (!handle)
285 return -ENODEV; 284 return -ENODEV;
286 /* If the ACPI device has _EJ0, ignore the device */ 285 /* If the ACPI device has _EJ0, ignore the device */
287 if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp))) 286 if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
288 return 0; 287 return 0;
289 return acpi_bus_set_power(handle, acpi_state); 288
289 switch (state) {
290 case PCI_D0:
291 case PCI_D1:
292 case PCI_D2:
293 case PCI_D3hot:
294 case PCI_D3cold:
295 return acpi_bus_set_power(handle, state_conv[state]);
296 }
297 return -EINVAL;
290} 298}
291 299
292 300