aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-11 22:20:44 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-11 22:20:44 -0400
commit19f71153b9be219756c6b2757921433a69b7975c (patch)
treecc2c5c290a88d61df16848f733aed8708e82c119 /drivers/ide/ide.c
parente6005a85acb9609326512ecc784859831cfb24a3 (diff)
parent8f4dd2e42637fd61a6366d2cace69091926eaa15 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (24 commits) ide: use only ->set_pio_mode method for programming PIO modes (take 2) sis5513: don't change UDMA settings when programming PIO it8213/piix/slc90e66: don't change DMA settings when programming PIO alim15x3: PIO mode setup fixes siimage: fix ->set_pio_mode method to select PIO data transfer cs5520: don't enable VDMA in ->speedproc sc1200: remove redundant warning message from sc1200_tune_chipset() ide-pmac: PIO mode setup fixes (take 3) icside: fix ->speedproc to return on unsupported modes (take 5) sgiioc4: use ide_tune_dma() amd74xx/via82cxxx: use ide_tune_dma() ide: add ide_set{_max}_pio() (take 4) ide: Kconfig face-lift ide: move ide_rate_filter() calls to the upper layer (take 2) sis5513: add ->udma_filter method for chipset_family >= ATA_133 ide: mode limiting fixes for user requested speed changes ide: add missing ide_rate_filter() calls to ->speedproc()-s ide: call udma_filter() before resorting to the UltraDMA mask ide: make jmicron match vendor and device class pdc202xx_new: switch to using pci_get_slot() (take 2) ...
Diffstat (limited to 'drivers/ide/ide.c')
-rw-r--r--drivers/ide/ide.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 5e88a060df06..e96212ce5729 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -396,8 +396,9 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
396 hwif->cds = tmp_hwif->cds; 396 hwif->cds = tmp_hwif->cds;
397#endif 397#endif
398 398
399 hwif->tuneproc = tmp_hwif->tuneproc; 399 hwif->set_pio_mode = tmp_hwif->set_pio_mode;
400 hwif->speedproc = tmp_hwif->speedproc; 400 hwif->speedproc = tmp_hwif->speedproc;
401 hwif->mdma_filter = tmp_hwif->mdma_filter;
401 hwif->udma_filter = tmp_hwif->udma_filter; 402 hwif->udma_filter = tmp_hwif->udma_filter;
402 hwif->selectproc = tmp_hwif->selectproc; 403 hwif->selectproc = tmp_hwif->selectproc;
403 hwif->reset_poll = tmp_hwif->reset_poll; 404 hwif->reset_poll = tmp_hwif->reset_poll;
@@ -866,8 +867,9 @@ int set_pio_mode(ide_drive_t *drive, int arg)
866 if (arg < 0 || arg > 255) 867 if (arg < 0 || arg > 255)
867 return -EINVAL; 868 return -EINVAL;
868 869
869 if (!HWIF(drive)->tuneproc) 870 if (drive->hwif->set_pio_mode == NULL)
870 return -ENOSYS; 871 return -ENOSYS;
872
871 if (drive->special.b.set_tune) 873 if (drive->special.b.set_tune)
872 return -EBUSY; 874 return -EBUSY;
873 ide_init_drive_cmd(&rq); 875 ide_init_drive_cmd(&rq);
@@ -914,6 +916,7 @@ static int generic_ide_suspend(struct device *dev, pm_message_t mesg)
914 struct request rq; 916 struct request rq;
915 struct request_pm_state rqpm; 917 struct request_pm_state rqpm;
916 ide_task_t args; 918 ide_task_t args;
919 int ret;
917 920
918 /* Call ACPI _GTM only once */ 921 /* Call ACPI _GTM only once */
919 if (!(drive->dn % 2)) 922 if (!(drive->dn % 2))
@@ -930,7 +933,14 @@ static int generic_ide_suspend(struct device *dev, pm_message_t mesg)
930 mesg.event = PM_EVENT_FREEZE; 933 mesg.event = PM_EVENT_FREEZE;
931 rqpm.pm_state = mesg.event; 934 rqpm.pm_state = mesg.event;
932 935
933 return ide_do_drive_cmd(drive, &rq, ide_wait); 936 ret = ide_do_drive_cmd(drive, &rq, ide_wait);
937 /* only call ACPI _PS3 after both drivers are suspended */
938 if (!ret && (((drive->dn % 2) && hwif->drives[0].present
939 && hwif->drives[1].present)
940 || !hwif->drives[0].present
941 || !hwif->drives[1].present))
942 ide_acpi_set_state(hwif, 0);
943 return ret;
934} 944}
935 945
936static int generic_ide_resume(struct device *dev) 946static int generic_ide_resume(struct device *dev)
@@ -943,8 +953,10 @@ static int generic_ide_resume(struct device *dev)
943 int err; 953 int err;
944 954
945 /* Call ACPI _STM only once */ 955 /* Call ACPI _STM only once */
946 if (!(drive->dn % 2)) 956 if (!(drive->dn % 2)) {
957 ide_acpi_set_state(hwif, 1);
947 ide_acpi_push_timing(hwif); 958 ide_acpi_push_timing(hwif);
959 }
948 960
949 ide_acpi_exec_tfs(drive); 961 ide_acpi_exec_tfs(drive);
950 962