diff options
author | Alan <alan@lxorguk.ukuu.org.uk> | 2007-02-20 12:44:25 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-21 04:58:20 -0500 |
commit | aa6de4942c25f05cb7f4aa8efa20c5ec0884d8f1 (patch) | |
tree | a8cfa86d4ff27eb37079c51072fc5695c61ea7a3 /drivers/ata/pata_cs5520.c | |
parent | e852f7054df7cf4be686d8cff9c33333a36b59e9 (diff) |
pata_cs5520: suspend/resume
The CS5520 isn't just an ATA controller and we must not
pci_disable_device it as it turns into pci_disable_computer.
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/pata_cs5520.c')
-rw-r--r-- | drivers/ata/pata_cs5520.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c index 1ce8fcfd7826..b49d8b70577a 100644 --- a/drivers/ata/pata_cs5520.c +++ b/drivers/ata/pata_cs5520.c | |||
@@ -325,6 +325,30 @@ static int cs5520_reinit_one(struct pci_dev *pdev) | |||
325 | pci_write_config_byte(pdev, 0x60, pcicfg | 0x40); | 325 | pci_write_config_byte(pdev, 0x60, pcicfg | 0x40); |
326 | return ata_pci_device_resume(pdev); | 326 | return ata_pci_device_resume(pdev); |
327 | } | 327 | } |
328 | |||
329 | /** | ||
330 | * cs5520_pci_device_suspend - device suspend | ||
331 | * @pdev: PCI device | ||
332 | * | ||
333 | * We have to cut and waste bits from the standard method because | ||
334 | * the 5520 is a bit odd and not just a pure ATA device. As a result | ||
335 | * we must not disable it. The needed code is short and this avoids | ||
336 | * chip specific mess in the core code. | ||
337 | */ | ||
338 | |||
339 | static int cs5520_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg) | ||
340 | { | ||
341 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | ||
342 | int rc = 0; | ||
343 | |||
344 | rc = ata_host_suspend(host, mesg); | ||
345 | if (rc) | ||
346 | return rc; | ||
347 | |||
348 | pci_save_state(pdev); | ||
349 | return 0; | ||
350 | } | ||
351 | |||
328 | /* For now keep DMA off. We can set it for all but A rev CS5510 once the | 352 | /* For now keep DMA off. We can set it for all but A rev CS5510 once the |
329 | core ATA code can handle it */ | 353 | core ATA code can handle it */ |
330 | 354 | ||
@@ -340,7 +364,7 @@ static struct pci_driver cs5520_pci_driver = { | |||
340 | .id_table = pata_cs5520, | 364 | .id_table = pata_cs5520, |
341 | .probe = cs5520_init_one, | 365 | .probe = cs5520_init_one, |
342 | .remove = cs5520_remove_one, | 366 | .remove = cs5520_remove_one, |
343 | .suspend = ata_pci_device_suspend, | 367 | .suspend = cs5520_pci_device_suspend, |
344 | .resume = cs5520_reinit_one, | 368 | .resume = cs5520_reinit_one, |
345 | }; | 369 | }; |
346 | 370 | ||