aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-probe.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-07-23 13:55:57 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-07-23 13:55:57 -0400
commit6f904d015262dfa43eb1cecc00b0998b4c3543f2 (patch)
treed12a5818072d04525db6eb2d74668ba03bdead2d /drivers/ide/ide-probe.c
parent48c3c1072651922ed153bcf0a33ea82cf20df390 (diff)
ide: add ide_host_add() helper
Add ide_host_add() helper which does ide_host_alloc()+ide_host_register(), then convert ide_setup_pci_device[s](), ide_legacy_device_add() and some host drivers to use it. While at it: * Fix ide_setup_pci_device[s](), ide_arm.c, gayle.c, ide-4drives.c, macide.c, q40ide.c, cmd640.c and cs5520.c to return correct error value. * -ENOENT -> -ENOMEM in rapide.c, ide-h8300.c, ide-generic.c, au1xxx-ide.c and pmac.c * -ENODEV -> -ENOMEM in palm_bk3710.c, ide_platform.c and delkin_cb.c * -1 -> -ENOMEM in ide-pnp.c Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r--drivers/ide/ide-probe.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 84a89561ec0f..17a104b95d54 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1677,6 +1677,24 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
1677} 1677}
1678EXPORT_SYMBOL_GPL(ide_host_register); 1678EXPORT_SYMBOL_GPL(ide_host_register);
1679 1679
1680int ide_host_add(const struct ide_port_info *d, hw_regs_t **hws,
1681 struct ide_host **hostp)
1682{
1683 struct ide_host *host;
1684
1685 host = ide_host_alloc(d, hws);
1686 if (host == NULL)
1687 return -ENOMEM;
1688
1689 ide_host_register(host, d, hws);
1690
1691 if (hostp)
1692 *hostp = host;
1693
1694 return 0;
1695}
1696EXPORT_SYMBOL_GPL(ide_host_add);
1697
1680void ide_host_remove(struct ide_host *host) 1698void ide_host_remove(struct ide_host *host)
1681{ 1699{
1682 int i; 1700 int i;
@@ -1749,7 +1767,6 @@ static void ide_legacy_init_one(hw_regs_t **hws, hw_regs_t *hw,
1749 1767
1750int ide_legacy_device_add(const struct ide_port_info *d, unsigned long config) 1768int ide_legacy_device_add(const struct ide_port_info *d, unsigned long config)
1751{ 1769{
1752 struct ide_host *host;
1753 hw_regs_t hw[2], *hws[] = { NULL, NULL, NULL, NULL }; 1770 hw_regs_t hw[2], *hws[] = { NULL, NULL, NULL, NULL };
1754 1771
1755 memset(&hw, 0, sizeof(hw)); 1772 memset(&hw, 0, sizeof(hw));
@@ -1762,12 +1779,6 @@ int ide_legacy_device_add(const struct ide_port_info *d, unsigned long config)
1762 (d->host_flags & IDE_HFLAG_SINGLE)) 1779 (d->host_flags & IDE_HFLAG_SINGLE))
1763 return -ENOENT; 1780 return -ENOENT;
1764 1781
1765 host = ide_host_alloc(d, hws); 1782 return ide_host_add(d, hws, NULL);
1766 if (host == NULL)
1767 return -ENOMEM;
1768
1769 ide_host_register(host, d, hws);
1770
1771 return 0;
1772} 1783}
1773EXPORT_SYMBOL_GPL(ide_legacy_device_add); 1784EXPORT_SYMBOL_GPL(ide_legacy_device_add);