/** * ahci_platform_suspend - Suspend an ahci-platform device * @dev: the platform device to suspend * * This function suspends the host associated with the device, followed by * disabling all the resources of the device. * * RETURNS: * 0 on success otherwise a negative error code */ int ahci_platform_suspend(struct device *dev) { struct ahci_platform_data *pdata = dev_get_platdata(dev); struct ata_host *host = dev_get_drvdata(dev); struct ahci_host_priv *hpriv = host->private_data; int rc; rc = ahci_platform_suspend_host(dev); if (rc) return rc; if (pdata && pdata->suspend) { rc = pdata->suspend(dev); if (rc) goto resume_host; } ahci_platform_disable_resources(hpriv); return 0; resume_host: ahci_platform_resume_host(dev); return rc; }
static int st_ahci_suspend(struct device *dev) { struct st_ahci_drv_data *drv_data = dev_get_drvdata(dev); struct ahci_host_priv *hpriv = drv_data->hpriv; int err; err = ahci_platform_suspend_host(dev); if (err) return err; if (drv_data->pwr) { err = reset_control_assert(drv_data->pwr); if (err) { dev_err(dev, "unable to pwrdwn"); return err; } } ahci_platform_disable_resources(hpriv); return 0; }