diff options
Diffstat (limited to 'drivers/ide/ide-io.c')
-rw-r--r-- | drivers/ide/ide-io.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 5b57905a7d71..5589dce88674 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -73,6 +73,7 @@ EXPORT_SYMBOL_GPL(ide_end_rq); | |||
73 | 73 | ||
74 | void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) | 74 | void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) |
75 | { | 75 | { |
76 | const struct ide_tp_ops *tp_ops = drive->hwif->tp_ops; | ||
76 | struct ide_taskfile *tf = &cmd->tf; | 77 | struct ide_taskfile *tf = &cmd->tf; |
77 | struct request *rq = cmd->rq; | 78 | struct request *rq = cmd->rq; |
78 | u8 tf_cmd = tf->command; | 79 | u8 tf_cmd = tf->command; |
@@ -80,7 +81,16 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) | |||
80 | tf->error = err; | 81 | tf->error = err; |
81 | tf->status = stat; | 82 | tf->status = stat; |
82 | 83 | ||
83 | drive->hwif->tp_ops->tf_read(drive, cmd); | 84 | if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { |
85 | u8 data[2]; | ||
86 | |||
87 | tp_ops->input_data(drive, cmd, data, 2); | ||
88 | |||
89 | tf->data = data[0]; | ||
90 | tf->hob_data = data[1]; | ||
91 | } | ||
92 | |||
93 | tp_ops->tf_read(drive, cmd); | ||
84 | 94 | ||
85 | if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) && | 95 | if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) && |
86 | tf_cmd == ATA_CMD_IDLEIMMEDIATE) { | 96 | tf_cmd == ATA_CMD_IDLEIMMEDIATE) { |