diff options
-rw-r--r-- | drivers/ide/ide.c | 36 | ||||
-rw-r--r-- | include/linux/ide.h | 1 |
2 files changed, 11 insertions, 26 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index b7a040ef12f..f04b53cb023 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c @@ -251,29 +251,21 @@ static struct resource* hwif_request_region(ide_hwif_t *hwif, int ide_hwif_request_regions(ide_hwif_t *hwif) { unsigned long addr; - unsigned int i; if (hwif->mmio) return 0; + addr = hwif->io_ports[IDE_CONTROL_OFFSET]; + if (addr && !hwif_request_region(hwif, addr, 1)) goto control_region_busy; - hwif->straight8 = 0; + addr = hwif->io_ports[IDE_DATA_OFFSET]; - if ((addr | 7) == hwif->io_ports[IDE_STATUS_OFFSET]) { - if (!hwif_request_region(hwif, addr, 8)) - goto data_region_busy; - hwif->straight8 = 1; - return 0; - } - for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { - addr = hwif->io_ports[i]; - if (!hwif_request_region(hwif, addr, 1)) { - while (--i) - release_region(addr, 1); - goto data_region_busy; - } - } + BUG_ON((addr | 7) != hwif->io_ports[IDE_STATUS_OFFSET]); + + if (!hwif_request_region(hwif, addr, 8)) + goto data_region_busy; + return 0; data_region_busy: @@ -299,19 +291,13 @@ control_region_busy: void ide_hwif_release_regions(ide_hwif_t *hwif) { - u32 i = 0; - if (hwif->mmio) return; + if (hwif->io_ports[IDE_CONTROL_OFFSET]) release_region(hwif->io_ports[IDE_CONTROL_OFFSET], 1); - if (hwif->straight8) { - release_region(hwif->io_ports[IDE_DATA_OFFSET], 8); - return; - } - for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) - if (hwif->io_ports[i]) - release_region(hwif->io_ports[i], 1); + + release_region(hwif->io_ports[IDE_DATA_OFFSET], 8); } void ide_remove_port_from_hwgroup(ide_hwif_t *hwif) diff --git a/include/linux/ide.h b/include/linux/ide.h index cd8deba68cb..f20410dd448 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -521,7 +521,6 @@ typedef struct hwif_s { unsigned reset : 1; /* reset after probe */ unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ unsigned mmio : 1; /* host uses MMIO */ - unsigned straight8 : 1; /* Alan's straight 8 check */ struct device gendev; struct device *portdev; |