in i82365.c [1241:1315]
static int __init init_i82365(void)
{
int i, ret;
ret = platform_driver_register(&i82365_driver);
if (ret)
goto err_out;
i82365_device = platform_device_alloc("i82365", 0);
if (i82365_device) {
ret = platform_device_add(i82365_device);
if (ret)
platform_device_put(i82365_device);
} else
ret = -ENOMEM;
if (ret)
goto err_driver_unregister;
printk(KERN_INFO "Intel ISA PCIC probe: ");
sockets = 0;
isa_probe();
if (sockets == 0) {
printk("not found.\n");
ret = -ENODEV;
goto err_dev_unregister;
}
/* Set up interrupt handler(s) */
if (grab_irq != 0)
ret = request_irq(cs_irq, pcic_interrupt, 0, "i82365", pcic_interrupt);
if (ret)
goto err_socket_release;
/* register sockets with the pcmcia core */
for (i = 0; i < sockets; i++) {
socket[i].socket.dev.parent = &i82365_device->dev;
socket[i].socket.ops = &pcic_operations;
socket[i].socket.resource_ops = &pccard_nonstatic_ops;
socket[i].socket.owner = THIS_MODULE;
socket[i].number = i;
ret = pcmcia_register_socket(&socket[i].socket);
if (!ret)
socket[i].flags |= IS_REGISTERED;
}
/* Finally, schedule a polling interrupt */
if (poll_interval != 0) {
timer_setup(&poll_timer, pcic_interrupt_wrapper, 0);
poll_timer.expires = jiffies + poll_interval;
add_timer(&poll_timer);
}
return 0;
err_socket_release:
for (i = 0; i < sockets; i++) {
/* Turn off all interrupt sources! */
i365_set(i, I365_CSCINT, 0);
release_region(socket[i].ioaddr, 2);
}
err_dev_unregister:
platform_device_unregister(i82365_device);
release_region(i365_base, 2);
#ifdef CONFIG_PNP
if (i82365_pnpdev)
pnp_disable_dev(i82365_pnpdev);
#endif
err_driver_unregister:
platform_driver_unregister(&i82365_driver);
err_out:
return ret;
} /* init_i82365 */