summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Mochel <mochel@osdl.org>2002-10-08 20:52:46 -0700
committerPatrick Mochel <mochel@osdl.org>2002-10-08 20:52:46 -0700
commitb134c4625b4450b95eaa6b067199a2bfec1976e4 (patch)
tree6719208a627dc2158bb4fdedeacbd88eea2d9ab7
parentca0e5f35dcf8e3d84b0784e98a7a5f9334b0f997 (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.c17
-rw-r--r--drivers/ide/ide.c4
-rw-r--r--include/linux/ide.h1
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;