aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-probe.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-06-20 13:11:11 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-20 13:11:11 -0400
commite6423407d01168f7760cdee7270d9f51d1240301 (patch)
tree979795cfa8f6946238ab31f544159142f3e7df93 /drivers/ide/ide-probe.c
parent7f8189068726492950bf1a2dcfd9b51314560abf (diff)
parent39c58f37a10198054c656c28202fb1e6d22fd505 (diff)
Merge branch 'for-2.6.31' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* 'for-2.6.31' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (34 commits) ide-cd: prevent null pointer deref via cdrom_newpc_intr ide: BUG() on unknown requests ide: filter out invalid DMA xfer mode changes in HDIO_DRIVE_CMD ioctl handler ide: do not access ide_drive_t 'drive_data' field directly sl82c105: implement test_irq() method siimage: implement test_irq() method pdc202xx_old: implement test_irq() method (take 2) cmd64x: implement test_irq() method cmd640: implement test_irq() method ide: move ack_intr() method into 'struct ide_port_ops' (take 2) ide: move IRQ clearing from ack_intr() method to clear_irq() method (take 2) siimage: use ide_dma_test_irq() (take 2) cmd64x: implement clear_irq() method (take 2) ide: call clear_irq() method in ide_timer_expiry() sgiioc4: coding style cleanup ide: don't enable IORDY at a probe time ide: IORDY handling fixes ata: add ata_id_pio_need_iordy() helper (v2) ide-tape: fix build issue ide: unify interrupt reason checking ...
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r--drivers/ide/ide-probe.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 79e0af3fd158..51af4eea0d36 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1170,7 +1170,6 @@ static void ide_init_port_hw(ide_hwif_t *hwif, struct ide_hw *hw)
1170 hwif->irq = hw->irq; 1170 hwif->irq = hw->irq;
1171 hwif->dev = hw->dev; 1171 hwif->dev = hw->dev;
1172 hwif->gendev.parent = hw->parent ? hw->parent : hw->dev; 1172 hwif->gendev.parent = hw->parent ? hw->parent : hw->dev;
1173 hwif->ack_intr = hw->ack_intr;
1174 hwif->config_data = hw->config; 1173 hwif->config_data = hw->config;
1175} 1174}
1176 1175
@@ -1378,6 +1377,9 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
1378 1377
1379 ide_init_port(hwif, i & 1, d); 1378 ide_init_port(hwif, i & 1, d);
1380 ide_port_cable_detect(hwif); 1379 ide_port_cable_detect(hwif);
1380
1381 hwif->port_flags |= IDE_PFLAG_PROBING;
1382
1381 ide_port_init_devices(hwif); 1383 ide_port_init_devices(hwif);
1382 } 1384 }
1383 1385
@@ -1388,6 +1390,8 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
1388 if (ide_probe_port(hwif) == 0) 1390 if (ide_probe_port(hwif) == 0)
1389 hwif->present = 1; 1391 hwif->present = 1;
1390 1392
1393 hwif->port_flags &= ~IDE_PFLAG_PROBING;
1394
1391 if ((hwif->host_flags & IDE_HFLAG_4DRIVES) == 0 || 1395 if ((hwif->host_flags & IDE_HFLAG_4DRIVES) == 0 ||
1392 hwif->mate == NULL || hwif->mate->present == 0) { 1396 hwif->mate == NULL || hwif->mate->present == 0) {
1393 if (ide_register_port(hwif)) { 1397 if (ide_register_port(hwif)) {
@@ -1569,11 +1573,20 @@ EXPORT_SYMBOL_GPL(ide_host_remove);
1569 1573
1570void ide_port_scan(ide_hwif_t *hwif) 1574void ide_port_scan(ide_hwif_t *hwif)
1571{ 1575{
1576 int rc;
1577
1572 ide_port_apply_params(hwif); 1578 ide_port_apply_params(hwif);
1573 ide_port_cable_detect(hwif); 1579 ide_port_cable_detect(hwif);
1580
1581 hwif->port_flags |= IDE_PFLAG_PROBING;
1582
1574 ide_port_init_devices(hwif); 1583 ide_port_init_devices(hwif);
1575 1584
1576 if (ide_probe_port(hwif) < 0) 1585 rc = ide_probe_port(hwif);
1586
1587 hwif->port_flags &= ~IDE_PFLAG_PROBING;
1588
1589 if (rc < 0)
1577 return; 1590 return;
1578 1591
1579 hwif->present = 1; 1592 hwif->present = 1;