]> git.neil.brown.name Git - history.git/commitdiff
IDE: register ide driver for all ide drives; not just for disk drives.
authorPatrick Mochel <mochel@osdl.org>
Wed, 9 Oct 2002 03:52:46 +0000 (20:52 -0700)
committerPatrick Mochel <mochel@osdl.org>
Wed, 9 Oct 2002 03:52:46 +0000 (20:52 -0700)
This adds
      struct device_driver    gen_driver;

to ide_driver_t, which is filled in with necessary fields when an ide
driver calls ide_register_driver(). That then registers the driver with
the driver model core.

As a result, this gives us the following output in driverfs:

# tree -d /sys/bus/ide/drivers/
/sys/bus/ide/drivers/
|-- ide-cdrom
`-- ide-disk

The suspend/resume callbacks in ide-disk.c have been temporarily
disabled until the ide core implements generic methods which forward
the calls to the drive drivers.

drivers/ide/ide-disk.c
drivers/ide/ide.c
include/linux/ide.h

index 419ef498c15154f49a4d19bacb5ade48be4b9fd7..b2f3b3c3b947de14942a6827e7d641f03e55ac6e 100644 (file)
@@ -1664,14 +1664,6 @@ static int idedisk_resume(struct device *dev, u32 level)
 /* This is just a hook for the overall driver tree.
  */
 
-static struct device_driver idedisk_devdrv = {
-       .bus = &ide_bus_type,
-       .name = "IDE disk driver",
-
-       .suspend = idedisk_suspend,
-       .resume = idedisk_resume,
-};
-
 static int idedisk_ioctl (ide_drive_t *drive, struct inode *inode,
        struct file *file, unsigned int cmd, unsigned long arg)
 {
@@ -1717,12 +1709,6 @@ static void idedisk_setup (ide_drive_t *drive)
                        drive->doorlocking = 1;
                }
        }
-       {
-               sprintf(drive->disk->disk_dev.name, "ide-disk");
-               drive->disk->disk_dev.driver = &idedisk_devdrv;
-               drive->disk->disk_dev.driver_data = drive;
-       }
-
 #if 1
        (void) probe_lba_addressing(drive, 1);
 #else
@@ -1806,7 +1792,7 @@ static int idedisk_cleanup (ide_drive_t *drive)
 {
        struct gendisk *g = drive->disk;
 
-       device_unregister(&drive->disk->disk_dev);
+       device_unregister(&drive->gendev);
        if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
                if (do_idedisk_flushcache(drive))
                        printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
@@ -1905,7 +1891,6 @@ static void __exit idedisk_exit (void)
 static int idedisk_init (void)
 {
        ide_register_driver(&idedisk_driver);
-       driver_register(&idedisk_devdrv);
        return 0;
 }
 
index 13c58a36e550a377fd6e4bdb71bb32e9b4cef15b..d3b02956a8fbfcf17c00e1108688caa8ddd246ee 100644 (file)
@@ -3440,7 +3440,9 @@ int ide_register_driver(ide_driver_t *driver)
                list_del_init(&drive->list);
                ata_attach(drive);
        }
-       return 0;
+       driver->gen_driver.name = driver->name;
+       driver->gen_driver.bus = &ide_bus_type;
+       return driver_register(&driver->gen_driver);
 }
 
 EXPORT_SYMBOL(ide_register_driver);
index 419b0c92f6f5e8fe6aaaf37950d4a20056a73927..44cb38c00b965f2adb6aed5d9fcc5a034baa835e 100644 (file)
@@ -1200,6 +1200,7 @@ typedef struct ide_driver_s {
        int             (*attach)(ide_drive_t *);
        void            (*ata_prebuilder)(ide_drive_t *);
        void            (*atapi_prebuilder)(ide_drive_t *);
+       struct device_driver    gen_driver;
        struct list_head drives;
        struct list_head drivers;
 } ide_driver_t;