Don't set LBA bit in Device register for the following cases:

* Power Management requests
  (WIN_FLUSH_CACHE[_EXT], WIN_STANDBYNOW1, WIN_IDLEIMMEDIATE commands)
* special commands (WIN_SPECIFY, WIN_RESTORE, WIN_SETMULT)
* /proc/ide/ SMART support (WIN_SMART with SMART_ENABLE,
  SMART_READ_VALUES and SMART_READ_THRESHOLDS subcommands)
* write cache enabling/disabling in ide-disk
  (WIN_SETFEATURES with SETFEATURES_{EN,DIS}_WCACHE)
* write cache flushing in ide-disk (WIN_FLUSH_CACHE[_EXT])
* acoustic management in ide-disk
  (WIN_SETFEATURES with SETFEATURES_{EN,DIS}_AAM)
* door (un)locking in ide-disk (WIN_DOORLOCK, WIN_DOORUNLOCK)
* /proc/ide/hd?/identify support (WIN_IDENTIFY)

diff -Nru a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
--- a/drivers/ide/ide-taskfile.c        2005-02-20 01:27:04 +01:00
+++ b/drivers/ide/ide-taskfile.c        2005-02-20 01:27:04 +01:00
@@ -127,7 +127,7 @@
        hwif->OUTB(tf->lbam, IDE_LCYL_REG);
        hwif->OUTB(tf->lbah, IDE_HCYL_REG);

-       hwif->OUTB((tf->device & HIHI) | drive->select.all, IDE_SELECT_REG);
+       hwif->OUTB((tf->device & HIHI) | (drive->select.all & 0xBF), 
IDE_SELECT_REG);

        if (task->handler != NULL) {
                if (task->prehandler != NULL) {
@@ -605,6 +605,9 @@
        if (drive->addressing == 1)
                tf->flags |= ATA_TFLAG_LBA48;

+       if (drive->select.b.lba)
+               tf->device |= ATA_LBA;
+
        switch(req_task->data_phase) {
                case TASKFILE_OUT_DMAQ:
                case TASKFILE_OUT_DMA:
@@ -892,7 +895,7 @@
         * select bit (master/slave) in the drive_head register. We must make
         * sure that the desired drive is selected.
         */
-       hwif->OUTB(tf->device | drive->select.all, IDE_SELECT_REG);
+       hwif->OUTB(tf->device | (drive->select.all & 0xBF), IDE_SELECT_REG);
        switch(task->data_phase) {

                case TASKFILE_OUT_DMAQ:
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to