static int scsi_runtime_idle(struct device *dev) { dev_dbg(dev, "scsi_runtime_idle\n"); /* Insert hooks here for targets, hosts, and transport classes */ if (scsi_is_sdev_device(dev)) { pm_runtime_mark_last_busy(dev); pm_runtime_autosuspend(dev); return -EBUSY; } return 0; }
static int mei_me_pm_runtime_idle(struct device *device) { struct pci_dev *pdev = to_pci_dev(device); struct mei_device *dev; dev_dbg(&pdev->dev, "rpm: me: runtime_idle\n"); dev = pci_get_drvdata(pdev); if (!dev) return -ENODEV; if (mei_write_is_idle(dev)) pm_runtime_autosuspend(device); return -EBUSY; }
/** * pm_generic_runtime_idle - Generic runtime idle callback for subsystems. * @dev: Device to handle. * * If PM operations are defined for the @dev's driver and they include * ->runtime_idle(), execute it and return its error code, if nonzero. * Otherwise, execute pm_runtime_suspend() for the device and return 0. */ int pm_generic_runtime_idle(struct device *dev) { const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; if (pm && pm->runtime_idle) { int ret = pm->runtime_idle(dev); if (ret) return ret; } if (dev->power.use_autosuspend) pm_runtime_autosuspend(dev); else pm_runtime_suspend(dev); return 0; }
static int dwc3_runtime_idle(struct device *dev) { struct dwc3 *dwc = dev_get_drvdata(dev); switch (dwc->current_dr_role) { case DWC3_GCTL_PRTCAP_DEVICE: if (dwc3_runtime_checks(dwc)) return -EBUSY; break; case DWC3_GCTL_PRTCAP_HOST: default: /* do nothing */ break; } pm_runtime_mark_last_busy(dev); pm_runtime_autosuspend(dev); return 0; }
static int dwc3_runtime_idle(struct device *dev) { struct dwc3 *dwc = dev_get_drvdata(dev); switch (dwc->dr_mode) { case USB_DR_MODE_PERIPHERAL: case USB_DR_MODE_OTG: if (dwc3_runtime_checks(dwc)) return -EBUSY; break; case USB_DR_MODE_HOST: default: /* do nothing */ break; } pm_runtime_mark_last_busy(dev); pm_runtime_autosuspend(dev); return 0; }
static int scsi_runtime_idle(struct device *dev) { int err; dev_dbg(dev, "scsi_runtime_idle\n"); /* Insert hooks here for targets, hosts, and transport classes */ if (scsi_is_sdev_device(dev)) { struct scsi_device *sdev = to_scsi_device(dev); if (sdev->request_queue->dev) { pm_runtime_mark_last_busy(dev); err = pm_runtime_autosuspend(dev); } else { err = pm_runtime_suspend(dev); } } else { err = pm_runtime_suspend(dev); } return err; }