diff options
| author | Patrick Mochel <mochel@osdl.org> | 2002-10-08 20:52:46 -0700 |
|---|---|---|
| committer | Patrick Mochel <mochel@osdl.org> | 2002-10-08 20:52:46 -0700 |
| commit | b134c4625b4450b95eaa6b067199a2bfec1976e4 (patch) | |
| tree | 6719208a627dc2158bb4fdedeacbd88eea2d9ab7 | |
| parent | ca0e5f35dcf8e3d84b0784e98a7a5f9334b0f997 (diff) | |
IDE: register ide driver for all ide drives; not just for disk drives.
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.
| -rw-r--r-- | drivers/ide/ide-disk.c | 17 | ||||
| -rw-r--r-- | drivers/ide/ide.c | 4 | ||||
| -rw-r--r-- | include/linux/ide.h | 1 |
3 files changed, 5 insertions, 17 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 419ef498c151..b2f3b3c3b947 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c @@ -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; } diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 13c58a36e550..d3b02956a8fb 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c @@ -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); diff --git a/include/linux/ide.h b/include/linux/ide.h index 419b0c92f6f5..44cb38c00b96 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -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; |
