Skip to content

Commit

Permalink
ide: add ide_host_add() helper
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Bartlomiej Zolnierkiewicz committed Jul 23, 2008
1 parent 48c3c10 commit 6f904d0
Show file tree
Hide file tree
Showing 23 changed files with 72 additions and 136 deletions.
7 changes: 1 addition & 6 deletions drivers/ide/arm/ide_arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@

static int __init ide_arm_init(void)
{
struct ide_host *host;
unsigned long base = IDE_ARM_IO, ctl = IDE_ARM_IO + 0x206;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

Expand All @@ -50,11 +49,7 @@ static int __init ide_arm_init(void)
hw.irq = IDE_ARM_IRQ;
hw.chipset = ide_generic;

host = ide_host_alloc(NULL, hws);
if (host)
ide_host_register(host, NULL, hws);

return 0;
return ide_host_add(NULL, hws, NULL);
}

module_init(ide_arm_init);
Expand Down
10 changes: 4 additions & 6 deletions drivers/ide/arm/palm_bk3710.c
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
struct resource *mem, *irq;
struct ide_host *host;
unsigned long base, rate;
int i;
int i, rc;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

clk = clk_get(NULL, "IDECLK");
Expand Down Expand Up @@ -392,16 +392,14 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
hw.irq = irq->start;
hw.chipset = ide_palm3710;

host = ide_host_alloc(&palm_bk3710_port_info, hws);
if (host == NULL)
rc = ide_host_add(&palm_bk3710_port_info, hws, NULL);
if (rc)
goto out;

ide_host_register(host, &palm_bk3710_port_info, hws);

return 0;
out:
printk(KERN_WARNING "Palm Chip BK3710 IDE Register Fail\n");
return -ENODEV;
return rc;
}

/* work with hotplug and coldplug */
Expand Down
8 changes: 2 additions & 6 deletions drivers/ide/arm/rapide.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,9 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
hw.chipset = ide_generic;
hw.dev = &ec->dev;

host = ide_host_alloc(&rapide_port_info, hws);
if (host == NULL) {
ret = -ENOENT;
ret = ide_host_add(&rapide_port_info, hws, &host);
if (ret)
goto release;
}

ide_host_register(host, &rapide_port_info, hws);

ecard_set_drvdata(ec, host);
goto out;
Expand Down
9 changes: 1 addition & 8 deletions drivers/ide/h8300/ide-h8300.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,6 @@ static const struct ide_port_info h8300_port_info = {

static int __init h8300_ide_init(void)
{
struct ide_host *host;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

printk(KERN_INFO DRV_NAME ": H8/300 generic IDE interface\n");
Expand All @@ -205,13 +204,7 @@ static int __init h8300_ide_init(void)

hw_setup(&hw);

host = ide_host_alloc(&h8300_port_info, hws);
if (host == NULL)
return -ENOENT;

ide_host_register(host, &h8300_port_info, hws);

return 0;
return ide_host_add(&h8300_port_info, hws, NULL);

out_busy:
printk(KERN_ERR "ide-h8300: IDE I/F resource already used.\n");
Expand Down
11 changes: 4 additions & 7 deletions drivers/ide/ide-generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@ MODULE_PARM_DESC(probe_mask, "probe mask for legacy ISA IDE ports");

static ssize_t store_add(struct class *cls, const char *buf, size_t n)
{
struct ide_host *host;
unsigned int base, ctl;
int irq;
int irq, rc;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

if (sscanf(buf, "%x:%x:%d", &base, &ctl, &irq) != 3)
Expand All @@ -41,11 +40,9 @@ static ssize_t store_add(struct class *cls, const char *buf, size_t n)
hw.irq = irq;
hw.chipset = ide_generic;

host = ide_host_alloc(NULL, hws);
if (host == NULL)
return -ENOENT;

ide_host_register(host, NULL, hws);
rc = ide_host_add(NULL, hws, NULL);
if (rc)
return rc;

return n;
};
Expand Down
16 changes: 8 additions & 8 deletions drivers/ide/ide-pnp.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ static int idepnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
{
struct ide_host *host;
unsigned long base, ctl;
int rc;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

printk(KERN_INFO DRV_NAME ": generic PnP IDE interface\n");
Expand Down Expand Up @@ -59,19 +60,18 @@ static int idepnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
hw.irq = pnp_irq(dev, 0);
hw.chipset = ide_generic;

host = ide_host_alloc(NULL, hws);
if (host) {
pnp_set_drvdata(dev, host);
rc = ide_host_add(NULL, hws, &host);
if (rc)
goto out;

ide_host_register(host, NULL, hws);

return 0;
}
pnp_set_drvdata(dev, host);

return 0;
out:
release_region(ctl, 1);
release_region(base, 8);

return -1;
return rc;
}

static void idepnp_remove(struct pnp_dev *dev)
Expand Down
27 changes: 19 additions & 8 deletions drivers/ide/ide-probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -1677,6 +1677,24 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
}
EXPORT_SYMBOL_GPL(ide_host_register);

int ide_host_add(const struct ide_port_info *d, hw_regs_t **hws,
struct ide_host **hostp)
{
struct ide_host *host;

host = ide_host_alloc(d, hws);
if (host == NULL)
return -ENOMEM;

ide_host_register(host, d, hws);

if (hostp)
*hostp = host;

return 0;
}
EXPORT_SYMBOL_GPL(ide_host_add);

void ide_host_remove(struct ide_host *host)
{
int i;
Expand Down Expand Up @@ -1749,7 +1767,6 @@ static void ide_legacy_init_one(hw_regs_t **hws, hw_regs_t *hw,

int ide_legacy_device_add(const struct ide_port_info *d, unsigned long config)
{
struct ide_host *host;
hw_regs_t hw[2], *hws[] = { NULL, NULL, NULL, NULL };

memset(&hw, 0, sizeof(hw));
Expand All @@ -1762,12 +1779,6 @@ int ide_legacy_device_add(const struct ide_port_info *d, unsigned long config)
(d->host_flags & IDE_HFLAG_SINGLE))
return -ENOENT;

host = ide_host_alloc(d, hws);
if (host == NULL)
return -ENOMEM;

ide_host_register(host, d, hws);

return 0;
return ide_host_add(d, hws, NULL);
}
EXPORT_SYMBOL_GPL(ide_legacy_device_add);
5 changes: 1 addition & 4 deletions drivers/ide/legacy/buddha.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@ static void __init buddha_setup_ports(hw_regs_t *hw, unsigned long base,
static int __init buddha_init(void)
{
struct zorro_dev *z = NULL;
struct ide_host *host;
u_long buddha_board = 0;
BuddhaType type;
int buddha_num_hwifs, i;
Expand Down Expand Up @@ -226,9 +225,7 @@ static int __init buddha_init(void)
hws[i] = &hw[i];
}

host = ide_host_alloc(NULL, hws);
if (host)
ide_host_register(host, NULL, hws);
ide_host_add(NULL, hws, NULL);
}

return 0;
Expand Down
7 changes: 1 addition & 6 deletions drivers/ide/legacy/gayle.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ static int __init gayle_init(void)
unsigned long phys_base, res_start, res_n;
unsigned long base, ctrlport, irqport;
ide_ack_intr_t *ack_intr;
struct ide_host *host;
int a4000, i;
hw_regs_t hw[GAYLE_NUM_HWIFS], *hws[] = { NULL, NULL, NULL, NULL };

Expand Down Expand Up @@ -180,11 +179,7 @@ static int __init gayle_init(void)
hws[i] = &hw[i];
}

host = ide_host_alloc(NULL, hws);
if (host)
ide_host_register(host, NULL, hws);

return 0;
return ide_host_add(NULL, hws, NULL);
}

module_init(gayle_init);
Expand Down
7 changes: 1 addition & 6 deletions drivers/ide/legacy/ide-4drives.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ static const struct ide_port_info ide_4drives_port_info = {

static int __init ide_4drives_init(void)
{
struct ide_host *host;
unsigned long base = 0x1f0, ctl = 0x3f6;
hw_regs_t hw, *hws[] = { &hw, &hw, NULL, NULL };

Expand All @@ -54,11 +53,7 @@ static int __init ide_4drives_init(void)
hw.irq = 14;
hw.chipset = ide_4drives;

host = ide_host_alloc(&ide_4drives_port_info, hws);
if (host)
ide_host_register(host, &ide_4drives_port_info, hws);

return 0;
return ide_host_add(&ide_4drives_port_info, hws, NULL);
}

module_init(ide_4drives_init);
Expand Down
8 changes: 3 additions & 5 deletions drivers/ide/legacy/ide-cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ static struct ide_host *idecs_register(unsigned long io, unsigned long ctl,
{
struct ide_host *host;
ide_hwif_t *hwif;
int i;
int i, rc;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

if (!request_region(io, 8, DRV_NAME)) {
Expand All @@ -184,12 +184,10 @@ static struct ide_host *idecs_register(unsigned long io, unsigned long ctl,
hw.chipset = ide_pci;
hw.dev = &handle->dev;

host = ide_host_alloc(&idecs_port_info, hws);
if (host == NULL)
rc = ide_host_add(&idecs_port_info, hws, &host);
if (rc)
goto out_release;

ide_host_register(host, &idecs_port_info, hws);

hwif = host->ports[0];

if (hwif->present)
Expand Down
8 changes: 2 additions & 6 deletions drivers/ide/legacy/ide_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,9 @@ static int __devinit plat_ide_probe(struct platform_device *pdev)
if (mmio)
d.host_flags |= IDE_HFLAG_MMIO;

host = ide_host_alloc(&d, hws);
if (host == NULL) {
ret = -ENODEV;
ret = ide_host_add(&d, hws, &host);
if (ret)
goto out;
}

ide_host_register(host, &d, hws);

platform_set_drvdata(pdev, host);

Expand Down
7 changes: 1 addition & 6 deletions drivers/ide/legacy/macide.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ static const char *mac_ide_name[] =
static int __init macide_init(void)
{
ide_ack_intr_t *ack_intr;
struct ide_host *host;
unsigned long base;
int irq;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };
Expand Down Expand Up @@ -125,11 +124,7 @@ static int __init macide_init(void)

macide_setup_ports(&hw, base, irq, ack_intr);

host = ide_host_alloc(NULL, hws);
if (host)
ide_host_register(host, NULL, hws);

return 0;
return ide_host_add(NULL, hws, NULL);
}

module_init(macide_init);
Expand Down
7 changes: 1 addition & 6 deletions drivers/ide/legacy/q40ide.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={

static int __init q40ide_init(void)
{
struct ide_host *host;
int i;
hw_regs_t hw[Q40IDE_NUM_HWIFS], *hws[] = { NULL, NULL, NULL, NULL };

Expand Down Expand Up @@ -160,11 +159,7 @@ static int __init q40ide_init(void)
hws[i] = &hw[i];
}

host = ide_host_alloc(&q40ide_port_info, hws);
if (host)
ide_host_register(host, &q40ide_port_info, hws);

return 0;
return ide_host_add(&q40ide_port_info, hws, NULL);
}

module_init(q40ide_init);
Expand Down
8 changes: 2 additions & 6 deletions drivers/ide/mips/au1xxx-ide.c
Original file line number Diff line number Diff line change
Expand Up @@ -609,13 +609,9 @@ static int au_ide_probe(struct device *dev)
hw.dev = dev;
hw.chipset = ide_au1xxx;

host = ide_host_alloc(&au1xxx_port_info, hws);
if (host == NULL) {
ret = -ENOENT;
ret = ide_host_add(&au1xxx_port_info, hws, &host);
if (ret)
goto out;
}

ide_host_register(host, &au1xxx_port_info, hws);

auide_hwif.hwif = host->ports[0];

Expand Down
10 changes: 4 additions & 6 deletions drivers/ide/mips/swarm.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ static int __devinit swarm_ide_probe(struct device *dev)
u8 __iomem *base;
struct ide_host *host;
phys_t offset, size;
int i;
int i, rc;
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };

if (!SIBYTE_HAVE_IDE)
Expand Down Expand Up @@ -115,19 +115,17 @@ static int __devinit swarm_ide_probe(struct device *dev)
hw.irq = K_INT_GB_IDE;
hw.chipset = ide_generic;

host = ide_host_alloc(&swarm_port_info, hws);
if (host == NULL)
rc = ide_host_add(&swarm_port_info, hws, &host);
if (rc)
goto err;

ide_host_register(host, &swarm_port_info, hws);

dev_set_drvdata(dev, host);

return 0;
err:
release_resource(&swarm_ide_resource);
iounmap(base);
return -ENOMEM;
return rc;
}

static struct device_driver swarm_ide_driver = {
Expand Down
Loading

0 comments on commit 6f904d0

Please sign in to comment.