- return 0;
-
- out_unmap:
- iounmap(fs->dma);
- iounmap(fs->swim3);
-
- out_release:
- macio_release_resource(mdev, 0);
- macio_release_resource(mdev, 1);
-
- return rc;
-}
-
-static int __devinit swim3_attach(struct macio_dev *mdev, const struct of_device_id *match)
-{
- int i, rc;
- struct gendisk *disk;
-
- /* Add the drive */
- rc = swim3_add_device(mdev, floppy_count);
- if (rc)
- return rc;
-
- /* Now create the queue if not there yet */
- if (swim3_queue == NULL) {
- /* If we failed, there isn't much we can do as the driver is still
- * too dumb to remove the device, just bail out
- */
- if (register_blkdev(FLOPPY_MAJOR, "fd"))
- return 0;
- swim3_queue = blk_init_queue(do_fd_request, &swim3_lock);
- if (swim3_queue == NULL) {
- unregister_blkdev(FLOPPY_MAJOR, "fd");
- return 0;
- }
- }
-
- /* Now register that disk. Same comment about failure handling */
- i = floppy_count++;
- disk = disks[i] = alloc_disk(1);
- if (disk == NULL)
- return 0;
-
- disk->major = FLOPPY_MAJOR;
- disk->first_minor = i;
- disk->fops = &floppy_fops;
- disk->private_data = &floppy_states[i];
- disk->queue = swim3_queue;
- disk->flags |= GENHD_FL_REMOVABLE;
- sprintf(disk->disk_name, "fd%d", i);
- set_capacity(disk, 2880);
- add_disk(disk);
-
- return 0;
-}
-
-static struct of_device_id swim3_match[] =
-{
- {
- .name = "swim3",
- },
- {
- .compatible = "ohare-swim3"
- },
- {
- .compatible = "swim3"
- },
-};
-
-static struct macio_driver swim3_driver =
-{
- .name = "swim3",
- .match_table = swim3_match,
- .probe = swim3_attach,
-#if 0
- .suspend = swim3_suspend,
- .resume = swim3_resume,
-#endif
-};
-
-
-int swim3_init(void)
-{
- macio_register_driver(&swim3_driver);