Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
[firefly-linux-kernel-4.4.55.git] / drivers / ide / ide-cd.c
index accb53b85ba7edca91ba5f31fb3cee99c78aeaac..465a92ca01794bd7c2bb2b7630a70c84d04b3776 100644 (file)
@@ -1809,13 +1809,12 @@ static ide_proc_entry_t idecd_proc[] = {
        { NULL, 0, NULL, NULL }
 };
 
-static void ide_cdrom_add_settings(ide_drive_t *drive)
-{
-       ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1,
-                       &drive->dsc_overlap, NULL);
-}
-#else
-static inline void ide_cdrom_add_settings(ide_drive_t *drive) { ; }
+ide_devset_rw_field(dsc_overlap, dsc_overlap);
+
+static const struct ide_proc_devset idecd_settings[] = {
+       IDE_PROC_DEVSET(dsc_overlap, 0, 1),
+       { 0 },
+};
 #endif
 
 static const struct cd_list_entry ide_cd_quirks_list[] = {
@@ -1924,7 +1923,8 @@ static int ide_cdrom_setup(ide_drive_t *drive)
                cd->devinfo.handle = NULL;
                return 1;
        }
-       ide_cdrom_add_settings(drive);
+
+       ide_proc_register_driver(drive, cd->driver);
        return 0;
 }
 
@@ -1969,12 +1969,12 @@ static ide_driver_t ide_cdrom_driver = {
        .remove                 = ide_cd_remove,
        .version                = IDECD_VERSION,
        .media                  = ide_cdrom,
-       .supports_dsc_overlap   = 1,
        .do_request             = ide_cd_do_request,
        .end_request            = ide_end_request,
        .error                  = __ide_error,
 #ifdef CONFIG_IDE_PROC_FS
        .proc                   = idecd_proc,
+       .settings               = idecd_settings,
 #endif
 };
 
@@ -2109,10 +2109,10 @@ static int ide_cd_probe(ide_drive_t *drive)
 
        if (!strstr("ide-cdrom", drive->driver_req))
                goto failed;
-       if (!drive->present)
-               goto failed;
+
        if (drive->media != ide_cdrom && drive->media != ide_optical)
                goto failed;
+
        /* skip drives that we were told to ignore */
        if (ignore != NULL) {
                if (strstr(ignore, drive->name)) {
@@ -2134,8 +2134,6 @@ static int ide_cd_probe(ide_drive_t *drive)
 
        ide_init_disk(g, drive);
 
-       ide_proc_register_driver(drive, &ide_cdrom_driver);
-
        kref_init(&info->kref);
 
        info->drive = drive;
@@ -2150,7 +2148,6 @@ static int ide_cd_probe(ide_drive_t *drive)
        g->driverfs_dev = &drive->gendev;
        g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
        if (ide_cdrom_setup(drive)) {
-               ide_proc_unregister_driver(drive, &ide_cdrom_driver);
                ide_cd_release(&info->kref);
                goto failed;
        }