#define AXON_RAM_SECTOR_SIZE           1 << AXON_RAM_SECTOR_SHIFT
 #define AXON_RAM_IRQ_FLAGS             IRQF_SHARED | IRQF_TRIGGER_RISING
 
+static int azfs_major, azfs_minor;
+
 struct axon_ram_bank {
        struct of_device        *device;
        struct gendisk          *disk;
                goto failed;
        }
 
-       bank->disk->first_minor = 0;
+       bank->disk->major = azfs_major;
+       bank->disk->first_minor = azfs_minor;
        bank->disk->fops = &axon_ram_devops;
        bank->disk->private_data = bank;
        bank->disk->driverfs_dev = &device->dev;
 
        sprintf(bank->disk->disk_name, "%s%d",
                        AXON_RAM_DEVICE_NAME, axon_ram_bank_id);
-       bank->disk->major = register_blkdev(0, bank->disk->disk_name);
-       if (bank->disk->major < 0) {
-               dev_err(&device->dev, "Cannot register block device\n");
-               rc = -EFAULT;
-               goto failed;
-       }
 
        bank->disk->queue = blk_alloc_queue(GFP_KERNEL);
        if (bank->disk->queue == NULL) {
                goto failed;
        }
 
+       azfs_minor += bank->disk->minors;
+
        return 0;
 
 failed:
 
        device_remove_file(&device->dev, &dev_attr_ecc);
        free_irq(bank->irq_id, device);
-       unregister_blkdev(bank->disk->major, bank->disk->disk_name);
        del_gendisk(bank->disk);
        iounmap((void __iomem *) bank->io_addr);
        kfree(bank);
 static int __init
 axon_ram_init(void)
 {
+       azfs_major = register_blkdev(azfs_major, AXON_RAM_DEVICE_NAME);
+       if (azfs_major < 0) {
+               printk(KERN_ERR "%s cannot become block device major number\n",
+                               AXON_RAM_MODULE_NAME);
+               return -EFAULT;
+       }
+       azfs_minor = 0;
+
        return of_register_platform_driver(&axon_ram_driver);
 }
 
 axon_ram_exit(void)
 {
        of_unregister_platform_driver(&axon_ram_driver);
+       unregister_blkdev(azfs_major, AXON_RAM_DEVICE_NAME);
 }
 
 module_init(axon_ram_init);