diff options
author | Alan <alan@lxorguk.ukuu.org.uk> | 2006-11-22 12:01:06 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-12-01 22:46:50 -0500 |
commit | 8501120f1df1aa6abe38b51ab91df08ccaa1b971 (patch) | |
tree | d913a7a21d95403137e46b40db695db82e29fc83 /drivers/ata | |
parent | 30ced0f0d211999f316930eff7287aa5a9995bef (diff) |
[PATCH] pata_cs5520: resume support
The CS5520 doesn't need much help to resume but we do need to restore
pcicfg which may have been reset to the BIOS default which is
sometimes incorrect.
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/pata_cs5520.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c index 33d2b88f9c79..f839c0304b3a 100644 --- a/drivers/ata/pata_cs5520.c +++ b/drivers/ata/pata_cs5520.c | |||
@@ -41,7 +41,7 @@ | |||
41 | #include <linux/libata.h> | 41 | #include <linux/libata.h> |
42 | 42 | ||
43 | #define DRV_NAME "pata_cs5520" | 43 | #define DRV_NAME "pata_cs5520" |
44 | #define DRV_VERSION "0.6.2" | 44 | #define DRV_VERSION "0.6.3" |
45 | 45 | ||
46 | struct pio_clocks | 46 | struct pio_clocks |
47 | { | 47 | { |
@@ -168,6 +168,8 @@ static struct scsi_host_template cs5520_sht = { | |||
168 | .slave_configure = ata_scsi_slave_config, | 168 | .slave_configure = ata_scsi_slave_config, |
169 | .slave_destroy = ata_scsi_slave_destroy, | 169 | .slave_destroy = ata_scsi_slave_destroy, |
170 | .bios_param = ata_std_bios_param, | 170 | .bios_param = ata_std_bios_param, |
171 | .resume = ata_scsi_device_resume, | ||
172 | .suspend = ata_scsi_device_suspend, | ||
171 | }; | 173 | }; |
172 | 174 | ||
173 | static struct ata_port_operations cs5520_port_ops = { | 175 | static struct ata_port_operations cs5520_port_ops = { |
@@ -297,6 +299,22 @@ static void __devexit cs5520_remove_one(struct pci_dev *pdev) | |||
297 | dev_set_drvdata(dev, NULL); | 299 | dev_set_drvdata(dev, NULL); |
298 | } | 300 | } |
299 | 301 | ||
302 | /** | ||
303 | * cs5520_reinit_one - device resume | ||
304 | * @pdev: PCI device | ||
305 | * | ||
306 | * Do any reconfiguration work needed by a resume from RAM. We need | ||
307 | * to restore DMA mode support on BIOSen which disabled it | ||
308 | */ | ||
309 | |||
310 | static int cs5520_reinit_one(struct pci_dev *pdev) | ||
311 | { | ||
312 | u8 pcicfg; | ||
313 | pci_read_config_byte(pdev, 0x60, &pcicfg); | ||
314 | if ((pcicfg & 0x40) == 0) | ||
315 | pci_write_config_byte(pdev, 0x60, pcicfg | 0x40); | ||
316 | return ata_pci_device_resume(pdev); | ||
317 | } | ||
300 | /* For now keep DMA off. We can set it for all but A rev CS5510 once the | 318 | /* For now keep DMA off. We can set it for all but A rev CS5510 once the |
301 | core ATA code can handle it */ | 319 | core ATA code can handle it */ |
302 | 320 | ||
@@ -311,7 +329,9 @@ static struct pci_driver cs5520_pci_driver = { | |||
311 | .name = DRV_NAME, | 329 | .name = DRV_NAME, |
312 | .id_table = pata_cs5520, | 330 | .id_table = pata_cs5520, |
313 | .probe = cs5520_init_one, | 331 | .probe = cs5520_init_one, |
314 | .remove = cs5520_remove_one | 332 | .remove = cs5520_remove_one, |
333 | .suspend = ata_pci_device_suspend, | ||
334 | .resume = cs5520_reinit_one, | ||
315 | }; | 335 | }; |
316 | 336 | ||
317 | static int __init cs5520_init(void) | 337 | static int __init cs5520_init(void) |