mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
[PATCH] Floppy: Add cmos attribute to floppy driver
Currently only a device 'fdX' shows up in sysfs; the other possible device for this drive (like fd0h1440 etc) must be guessed from there. This patch corrects the floppy driver to create a platform device for each floppy found; each platform device also has an attribute 'cmos' which represents the cmos type for this drive. From this attribute the other possible device types can be computed. From: Hannes Reinecke <hare@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
76d1ce00bd
commit
94fd0db7bf
1 changed files with 29 additions and 13 deletions
|
@ -493,6 +493,8 @@ static struct floppy_struct user_params[N_DRIVE];
|
||||||
|
|
||||||
static sector_t floppy_sizes[256];
|
static sector_t floppy_sizes[256];
|
||||||
|
|
||||||
|
static char floppy_device_name[] = "floppy";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The driver is trying to determine the correct media format
|
* The driver is trying to determine the correct media format
|
||||||
* while probing is set. rw_interrupt() clears it after a
|
* while probing is set. rw_interrupt() clears it after a
|
||||||
|
@ -4191,18 +4193,25 @@ static int __init floppy_setup(char *str)
|
||||||
|
|
||||||
static int have_no_fdc = -ENODEV;
|
static int have_no_fdc = -ENODEV;
|
||||||
|
|
||||||
|
static ssize_t floppy_cmos_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||||
|
{
|
||||||
|
struct platform_device *p = container_of(dev,struct platform_device,dev);
|
||||||
|
int drive = p->id;
|
||||||
|
ssize_t retval;
|
||||||
|
|
||||||
|
retval = sprintf(buf,"%X\n", UDP->cmos);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEVICE_ATTR(cmos,S_IRUGO,floppy_cmos_show,NULL);
|
||||||
|
|
||||||
static void floppy_device_release(struct device *dev)
|
static void floppy_device_release(struct device *dev)
|
||||||
{
|
{
|
||||||
complete(&device_release);
|
complete(&device_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_device floppy_device = {
|
static struct platform_device floppy_device[N_DRIVE];
|
||||||
.name = "floppy",
|
|
||||||
.id = 0,
|
|
||||||
.dev = {
|
|
||||||
.release = floppy_device_release,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct kobject *floppy_find(dev_t dev, int *part, void *data)
|
static struct kobject *floppy_find(dev_t dev, int *part, void *data)
|
||||||
{
|
{
|
||||||
|
@ -4370,20 +4379,26 @@ static int __init floppy_init(void)
|
||||||
goto out_flush_work;
|
goto out_flush_work;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = platform_device_register(&floppy_device);
|
|
||||||
if (err)
|
|
||||||
goto out_flush_work;
|
|
||||||
|
|
||||||
for (drive = 0; drive < N_DRIVE; drive++) {
|
for (drive = 0; drive < N_DRIVE; drive++) {
|
||||||
if (!(allowed_drive_mask & (1 << drive)))
|
if (!(allowed_drive_mask & (1 << drive)))
|
||||||
continue;
|
continue;
|
||||||
if (fdc_state[FDC(drive)].version == FDC_NONE)
|
if (fdc_state[FDC(drive)].version == FDC_NONE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
floppy_device[drive].name = floppy_device_name;
|
||||||
|
floppy_device[drive].id = drive;
|
||||||
|
floppy_device[drive].dev.release = floppy_device_release;
|
||||||
|
|
||||||
|
err = platform_device_register(&floppy_device[drive]);
|
||||||
|
if (err)
|
||||||
|
goto out_flush_work;
|
||||||
|
|
||||||
|
device_create_file(&floppy_device[drive].dev,&dev_attr_cmos);
|
||||||
/* to be cleaned up... */
|
/* to be cleaned up... */
|
||||||
disks[drive]->private_data = (void *)(long)drive;
|
disks[drive]->private_data = (void *)(long)drive;
|
||||||
disks[drive]->queue = floppy_queue;
|
disks[drive]->queue = floppy_queue;
|
||||||
disks[drive]->flags |= GENHD_FL_REMOVABLE;
|
disks[drive]->flags |= GENHD_FL_REMOVABLE;
|
||||||
disks[drive]->driverfs_dev = &floppy_device.dev;
|
disks[drive]->driverfs_dev = &floppy_device[drive].dev;
|
||||||
add_disk(disks[drive]);
|
add_disk(disks[drive]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4603,10 +4618,11 @@ void cleanup_module(void)
|
||||||
fdc_state[FDC(drive)].version != FDC_NONE) {
|
fdc_state[FDC(drive)].version != FDC_NONE) {
|
||||||
del_gendisk(disks[drive]);
|
del_gendisk(disks[drive]);
|
||||||
unregister_devfs_entries(drive);
|
unregister_devfs_entries(drive);
|
||||||
|
device_remove_file(&floppy_device[drive].dev, &dev_attr_cmos);
|
||||||
|
platform_device_unregister(&floppy_device[drive]);
|
||||||
}
|
}
|
||||||
put_disk(disks[drive]);
|
put_disk(disks[drive]);
|
||||||
}
|
}
|
||||||
platform_device_unregister(&floppy_device);
|
|
||||||
devfs_remove("floppy");
|
devfs_remove("floppy");
|
||||||
|
|
||||||
del_timer_sync(&fd_timeout);
|
del_timer_sync(&fd_timeout);
|
||||||
|
|
Loading…
Reference in a new issue