{
hw_regs_t hw;
ide_hwif_t *hwif;
- int index;
if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && pnp_irq_valid(dev, 0)))
return -1;
ide_std_init_ports(&hw, pnp_port_start(dev, 0),
pnp_port_start(dev, 1));
hw.irq = pnp_irq(dev, 0);
- hw.dma = NO_DMA;
- index = ide_register_hw(&hw, &hwif);
+ hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+ if (hwif) {
+ u8 index = hwif->index;
+ u8 idx[4] = { index, 0xff, 0xff, 0xff };
+
+ ide_init_port_data(hwif, index);
+ ide_init_port_hw(hwif, &hw);
- if (index != -1) {
- printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
+ printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
pnp_set_drvdata(dev,hwif);
+
+ ide_device_add(idx);
+
return 0;
}
.remove = idepnp_remove,
};
-void __init pnpide_init(void)
+static int __init pnpide_init(void)
{
- pnp_register_driver(&idepnp_driver);
+ return pnp_register_driver(&idepnp_driver);
}
-void __exit pnpide_exit(void)
+static void __exit pnpide_exit(void)
{
pnp_unregister_driver(&idepnp_driver);
}
+
+module_init(pnpide_init);
+module_exit(pnpide_exit);