]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/pci/pci.c
Merge branch 'fix/hda' into for-linus
[karo-tx-linux.git] / drivers / pci / pci.c
index 17bd9325a245333f4400676ceed18fe58d2f6a34..6d6120007af4ed01d5fdc39331bff59349b1ed00 100644 (file)
@@ -1393,35 +1393,35 @@ int pci_restore_standard_config(struct pci_dev *dev)
        pci_power_t prev_state;
        int error;
 
-       pci_restore_state(dev);
        pci_update_current_state(dev, PCI_D0);
 
        prev_state = dev->current_state;
        if (prev_state == PCI_D0)
-               return 0;
+               goto Restore;
 
        error = pci_raw_set_power_state(dev, PCI_D0, false);
        if (error)
                return error;
 
-       if (pci_is_bridge(dev)) {
-               if (prev_state > PCI_D1)
-                       mdelay(PCI_PM_BUS_WAIT);
-       } else {
-               switch(prev_state) {
-               case PCI_D3cold:
-               case PCI_D3hot:
-                       mdelay(pci_pm_d3_delay);
-                       break;
-               case PCI_D2:
-                       udelay(PCI_PM_D2_DELAY);
-                       break;
-               }
+       /*
+        * This assumes that we won't get a bus in B2 or B3 from the BIOS, but
+        * we've made this assumption forever and it appears to be universally
+        * satisfied.
+        */
+       switch(prev_state) {
+       case PCI_D3cold:
+       case PCI_D3hot:
+               mdelay(pci_pm_d3_delay);
+               break;
+       case PCI_D2:
+               udelay(PCI_PM_D2_DELAY);
+               break;
        }
 
-       dev->current_state = PCI_D0;
+       pci_update_current_state(dev, PCI_D0);
 
-       return 0;
+ Restore:
+       return dev->state_saved ? pci_restore_state(dev) : 0;
 }
 
 /**
@@ -1540,16 +1540,21 @@ void pci_release_region(struct pci_dev *pdev, int bar)
 }
 
 /**
- *     pci_request_region - Reserved PCI I/O and memory resource
+ *     __pci_request_region - Reserved PCI I/O and memory resource
  *     @pdev: PCI device whose resources are to be reserved
  *     @bar: BAR to be reserved
  *     @res_name: Name to be associated with resource.
+ *     @exclusive: whether the region access is exclusive or not
  *
  *     Mark the PCI region associated with PCI device @pdev BR @bar as
  *     being reserved by owner @res_name.  Do not access any
  *     address inside the PCI regions unless this call returns
  *     successfully.
  *
+ *     If @exclusive is set, then the region is marked so that userspace
+ *     is explicitly not allowed to map the resource via /dev/mem or
+ *     sysfs MMIO access.
+ *
  *     Returns 0 on success, or %EBUSY on error.  A warning
  *     message is also printed on failure.
  */
@@ -1588,12 +1593,12 @@ err_out:
 }
 
 /**
- *     pci_request_region - Reserved PCI I/O and memory resource
+ *     pci_request_region - Reserve PCI I/O and memory resource
  *     @pdev: PCI device whose resources are to be reserved
  *     @bar: BAR to be reserved
- *     @res_name: Name to be associated with resource.
+ *     @res_name: Name to be associated with resource
  *
- *     Mark the PCI region associated with PCI device @pdev BR @bar as
+ *     Mark the PCI region associated with PCI device @pdev BAR @bar as
  *     being reserved by owner @res_name.  Do not access any
  *     address inside the PCI regions unless this call returns
  *     successfully.