Skip to content

Commit 0d776e5

Browse files
VARoDeKstorulf
authored andcommitted
mmc: via-sdmmc: use generic power management
Drivers using legacy PM have to manage PCI states and device's PM states themselves. They also need to take care of configuration registers. With improved and powerful support of generic PM, PCI Core takes care of above mentioned, device-independent, jobs. This driver makes use of PCI helper functions like pci_save/restore_state(), pci_enable/disable_device(), pci_enable_wake() and pci_set_power_state() and to do required operations. In generic mode, they are no longer needed. Change function parameter in both .suspend() and .resume() to "struct device*" type. Use dev_get_drvdata() to get drv data. Compile-tested only. Signed-off-by: Vaibhav Gupta <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Ulf Hansson <[email protected]>
1 parent c4e5e22 commit 0d776e5

File tree

1 file changed

+8
-25
lines changed

1 file changed

+8
-25
lines changed

drivers/mmc/host/via-sdmmc.c

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,9 +1220,7 @@ static void via_sd_remove(struct pci_dev *pcidev)
12201220
pci_name(pcidev), (int)pcidev->vendor, (int)pcidev->device);
12211221
}
12221222

1223-
#ifdef CONFIG_PM
1224-
1225-
static void via_init_sdc_pm(struct via_crdr_mmc_host *host)
1223+
static void __maybe_unused via_init_sdc_pm(struct via_crdr_mmc_host *host)
12261224
{
12271225
struct sdhcreg *pm_sdhcreg;
12281226
void __iomem *addrbase;
@@ -1256,30 +1254,27 @@ static void via_init_sdc_pm(struct via_crdr_mmc_host *host)
12561254
via_print_sdchc(host);
12571255
}
12581256

1259-
static int via_sd_suspend(struct pci_dev *pcidev, pm_message_t state)
1257+
static int __maybe_unused via_sd_suspend(struct device *dev)
12601258
{
12611259
struct via_crdr_mmc_host *host;
12621260

1263-
host = pci_get_drvdata(pcidev);
1261+
host = dev_get_drvdata(dev);
12641262

12651263
via_save_pcictrlreg(host);
12661264
via_save_sdcreg(host);
12671265

1268-
pci_save_state(pcidev);
1269-
pci_enable_wake(pcidev, pci_choose_state(pcidev, state), 0);
1270-
pci_disable_device(pcidev);
1271-
pci_set_power_state(pcidev, pci_choose_state(pcidev, state));
1266+
device_wakeup_enable(dev);
12721267

12731268
return 0;
12741269
}
12751270

1276-
static int via_sd_resume(struct pci_dev *pcidev)
1271+
static int __maybe_unused via_sd_resume(struct device *dev)
12771272
{
12781273
struct via_crdr_mmc_host *sdhost;
12791274
int ret = 0;
12801275
u8 gatt;
12811276

1282-
sdhost = pci_get_drvdata(pcidev);
1277+
sdhost = dev_get_drvdata(dev);
12831278

12841279
gatt = VIA_CRDR_PCICLKGATT_PAD_PWRON;
12851280
if (sdhost->power == MMC_VDD_165_195)
@@ -1294,32 +1289,20 @@ static int via_sd_resume(struct pci_dev *pcidev)
12941289

12951290
msleep(100);
12961291

1297-
pci_set_power_state(pcidev, PCI_D0);
1298-
pci_restore_state(pcidev);
1299-
ret = pci_enable_device(pcidev);
1300-
if (ret)
1301-
return ret;
1302-
13031292
via_restore_pcictrlreg(sdhost);
13041293
via_init_sdc_pm(sdhost);
13051294

13061295
return ret;
13071296
}
13081297

1309-
#else /* CONFIG_PM */
1310-
1311-
#define via_sd_suspend NULL
1312-
#define via_sd_resume NULL
1313-
1314-
#endif /* CONFIG_PM */
1298+
static SIMPLE_DEV_PM_OPS(via_sd_pm_ops, via_sd_suspend, via_sd_resume);
13151299

13161300
static struct pci_driver via_sd_driver = {
13171301
.name = DRV_NAME,
13181302
.id_table = via_ids,
13191303
.probe = via_sd_probe,
13201304
.remove = via_sd_remove,
1321-
.suspend = via_sd_suspend,
1322-
.resume = via_sd_resume,
1305+
.driver.pm = &via_sd_pm_ops,
13231306
};
13241307

13251308
module_pci_driver(via_sd_driver);

0 commit comments

Comments
 (0)