X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fide%2Fide-disk.c;h=7b3bf05cbf95da0d60876ec2e6596b44d15085aa;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=9217f0ced156afe2fa025693971b47b24625292a;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 9217f0ced..7b3bf05cb 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c @@ -1334,7 +1334,8 @@ enum { idedisk_pm_flush_cache = ide_pm_state_start_suspend, idedisk_pm_standby, - idedisk_pm_restore_dma = ide_pm_state_start_resume, + idedisk_pm_idle = ide_pm_state_start_resume, + idedisk_pm_restore_dma, }; static void idedisk_complete_power_step (ide_drive_t *drive, struct request *rq, u8 stat, u8 error) @@ -1349,6 +1350,9 @@ static void idedisk_complete_power_step (ide_drive_t *drive, struct request *rq, case idedisk_pm_standby: /* Suspend step 2 (standby) complete */ rq->pm->pm_step = ide_pm_state_completed; break; + case idedisk_pm_idle: /* Resume step 1 (idle) complete */ + rq->pm->pm_step = idedisk_pm_restore_dma; + break; } } @@ -1372,13 +1376,20 @@ static ide_startstop_t idedisk_start_power_step (ide_drive_t *drive, struct requ args->command_type = IDE_DRIVE_TASK_NO_DATA; args->handler = &task_no_data_intr; return do_rw_taskfile(drive, args); + case idedisk_pm_standby: /* Suspend step 2 (standby) */ args->tfRegister[IDE_COMMAND_OFFSET] = WIN_STANDBYNOW1; args->command_type = IDE_DRIVE_TASK_NO_DATA; args->handler = &task_no_data_intr; return do_rw_taskfile(drive, args); - case idedisk_pm_restore_dma: /* Resume step 1 (restore DMA) */ + case idedisk_pm_idle: /* Resume step 1 (idle) */ + args->tfRegister[IDE_COMMAND_OFFSET] = WIN_IDLEIMMEDIATE; + args->command_type = IDE_DRIVE_TASK_NO_DATA; + args->handler = task_no_data_intr; + return do_rw_taskfile(drive, args); + + case idedisk_pm_restore_dma: /* Resume step 2 (restore DMA) */ /* * Right now, all we do is call hwif->ide_dma_check(drive), * we could be smarter and check for current xfer_speed @@ -1657,7 +1668,7 @@ static int idedisk_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { struct block_device *bdev = inode->i_bdev; - return generic_ide_ioctl(bdev, cmd, arg); + return generic_ide_ioctl(file, bdev, cmd, arg); } static int idedisk_media_changed(struct gendisk *disk)