diff options
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r-- | drivers/ide/ide-probe.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 8cad2b4c694f..ba16ade15c8c 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -1634,7 +1634,7 @@ void ide_port_scan(ide_hwif_t *hwif) | |||
1634 | } | 1634 | } |
1635 | EXPORT_SYMBOL_GPL(ide_port_scan); | 1635 | EXPORT_SYMBOL_GPL(ide_port_scan); |
1636 | 1636 | ||
1637 | int ide_legacy_device_add(const struct ide_port_info *d) | 1637 | int ide_legacy_device_add(const struct ide_port_info *d, unsigned long config) |
1638 | { | 1638 | { |
1639 | ide_hwif_t *hwif, *mate; | 1639 | ide_hwif_t *hwif, *mate; |
1640 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | 1640 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; |
@@ -1648,15 +1648,24 @@ int ide_legacy_device_add(const struct ide_port_info *d) | |||
1648 | ide_std_init_ports(&hw[1], 0x170, 0x376); | 1648 | ide_std_init_ports(&hw[1], 0x170, 0x376); |
1649 | hw[1].irq = 15; | 1649 | hw[1].irq = 15; |
1650 | 1650 | ||
1651 | hwif = ide_find_port(); | 1651 | hwif = ide_find_port_slot(d); |
1652 | if (hwif) { | 1652 | if (hwif) { |
1653 | ide_init_port_hw(hwif, &hw[0]); | 1653 | u8 j = (d->host_flags & IDE_HFLAG_QD_2ND_PORT) ? 1 : 0; |
1654 | idx[0] = hwif->index; | 1654 | |
1655 | ide_init_port_hw(hwif, &hw[j]); | ||
1656 | if (config) | ||
1657 | hwif->config_data = config; | ||
1658 | idx[j] = hwif->index; | ||
1655 | } | 1659 | } |
1656 | 1660 | ||
1657 | mate = ide_find_port(); | 1661 | if (hwif == NULL && (d->host_flags & IDE_HFLAG_SINGLE)) |
1662 | return -ENOENT; | ||
1663 | |||
1664 | mate = ide_find_port_slot(d); | ||
1658 | if (mate) { | 1665 | if (mate) { |
1659 | ide_init_port_hw(mate, &hw[1]); | 1666 | ide_init_port_hw(mate, &hw[1]); |
1667 | if (config) | ||
1668 | mate->config_data = config; | ||
1660 | idx[1] = mate->index; | 1669 | idx[1] = mate->index; |
1661 | } | 1670 | } |
1662 | 1671 | ||