[PATCH] Add ide_bus_type probe and remove methods

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by Russell King and committed by Greg Kroah-Hartman 4031bbe4 bbbe3a41

+61 -43
+5 -9
drivers/ide/ide-cd.c
··· 3256 3256 } 3257 3257 #endif 3258 3258 3259 - static int ide_cd_remove(struct device *dev) 3259 + static void ide_cd_remove(ide_drive_t *drive) 3260 3260 { 3261 - ide_drive_t *drive = to_ide_device(dev); 3262 3261 struct cdrom_info *info = drive->driver_data; 3263 3262 3264 3263 ide_unregister_subdriver(drive, info->driver); ··· 3265 3266 del_gendisk(info->disk); 3266 3267 3267 3268 ide_cd_put(info); 3268 - 3269 - return 0; 3270 3269 } 3271 3270 3272 3271 static void ide_cd_release(struct kref *kref) ··· 3288 3291 kfree(info); 3289 3292 } 3290 3293 3291 - static int ide_cd_probe(struct device *); 3294 + static int ide_cd_probe(ide_drive_t *); 3292 3295 3293 3296 #ifdef CONFIG_PROC_FS 3294 3297 static int proc_idecd_read_capacity ··· 3314 3317 .owner = THIS_MODULE, 3315 3318 .name = "ide-cdrom", 3316 3319 .bus = &ide_bus_type, 3317 - .probe = ide_cd_probe, 3318 - .remove = ide_cd_remove, 3319 3320 }, 3321 + .probe = ide_cd_probe, 3322 + .remove = ide_cd_remove, 3320 3323 .version = IDECD_VERSION, 3321 3324 .media = ide_cdrom, 3322 3325 .supports_dsc_overlap = 1, ··· 3410 3413 module_param(ignore, charp, 0400); 3411 3414 MODULE_DESCRIPTION("ATAPI CD-ROM Driver"); 3412 3415 3413 - static int ide_cd_probe(struct device *dev) 3416 + static int ide_cd_probe(ide_drive_t *drive) 3414 3417 { 3415 - ide_drive_t *drive = to_ide_device(dev); 3416 3418 struct cdrom_info *info; 3417 3419 struct gendisk *g; 3418 3420 struct request_sense sense;
+8 -14
drivers/ide/ide-disk.c
··· 997 997 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name); 998 998 } 999 999 1000 - static int ide_disk_remove(struct device *dev) 1000 + static void ide_disk_remove(ide_drive_t *drive) 1001 1001 { 1002 - ide_drive_t *drive = to_ide_device(dev); 1003 1002 struct ide_disk_obj *idkp = drive->driver_data; 1004 1003 struct gendisk *g = idkp->disk; 1005 1004 ··· 1009 1010 ide_cacheflush_p(drive); 1010 1011 1011 1012 ide_disk_put(idkp); 1012 - 1013 - return 0; 1014 1013 } 1015 1014 1016 1015 static void ide_disk_release(struct kref *kref) ··· 1024 1027 kfree(idkp); 1025 1028 } 1026 1029 1027 - static int ide_disk_probe(struct device *dev); 1030 + static int ide_disk_probe(ide_drive_t *drive); 1028 1031 1029 - static void ide_device_shutdown(struct device *dev) 1032 + static void ide_device_shutdown(ide_drive_t *drive) 1030 1033 { 1031 - ide_drive_t *drive = container_of(dev, ide_drive_t, gendev); 1032 - 1033 1034 #ifdef CONFIG_ALPHA 1034 1035 /* On Alpha, halt(8) doesn't actually turn the machine off, 1035 1036 it puts you into the sort of firmware monitor. Typically, ··· 1049 1054 } 1050 1055 1051 1056 printk("Shutdown: %s\n", drive->name); 1052 - dev->bus->suspend(dev, PMSG_SUSPEND); 1057 + drive->gendev.bus->suspend(&drive->gendev, PMSG_SUSPEND); 1053 1058 } 1054 1059 1055 1060 static ide_driver_t idedisk_driver = { ··· 1057 1062 .owner = THIS_MODULE, 1058 1063 .name = "ide-disk", 1059 1064 .bus = &ide_bus_type, 1060 - .probe = ide_disk_probe, 1061 - .remove = ide_disk_remove, 1062 - .shutdown = ide_device_shutdown, 1063 1065 }, 1066 + .probe = ide_disk_probe, 1067 + .remove = ide_disk_remove, 1068 + .shutdown = ide_device_shutdown, 1064 1069 .version = IDEDISK_VERSION, 1065 1070 .media = ide_disk, 1066 1071 .supports_dsc_overlap = 0, ··· 1177 1182 1178 1183 MODULE_DESCRIPTION("ATA DISK Driver"); 1179 1184 1180 - static int ide_disk_probe(struct device *dev) 1185 + static int ide_disk_probe(ide_drive_t *drive) 1181 1186 { 1182 - ide_drive_t *drive = to_ide_device(dev); 1183 1187 struct ide_disk_obj *idkp; 1184 1188 struct gendisk *g; 1185 1189
+5 -9
drivers/ide/ide-floppy.c
··· 1871 1871 idefloppy_add_settings(drive); 1872 1872 } 1873 1873 1874 - static int ide_floppy_remove(struct device *dev) 1874 + static void ide_floppy_remove(ide_drive_t *drive) 1875 1875 { 1876 - ide_drive_t *drive = to_ide_device(dev); 1877 1876 idefloppy_floppy_t *floppy = drive->driver_data; 1878 1877 struct gendisk *g = floppy->disk; 1879 1878 ··· 1881 1882 del_gendisk(g); 1882 1883 1883 1884 ide_floppy_put(floppy); 1884 - 1885 - return 0; 1886 1885 } 1887 1886 1888 1887 static void ide_floppy_release(struct kref *kref) ··· 1919 1922 1920 1923 #endif /* CONFIG_PROC_FS */ 1921 1924 1922 - static int ide_floppy_probe(struct device *); 1925 + static int ide_floppy_probe(ide_drive_t *); 1923 1926 1924 1927 static ide_driver_t idefloppy_driver = { 1925 1928 .gen_driver = { 1926 1929 .owner = THIS_MODULE, 1927 1930 .name = "ide-floppy", 1928 1931 .bus = &ide_bus_type, 1929 - .probe = ide_floppy_probe, 1930 - .remove = ide_floppy_remove, 1931 1932 }, 1933 + .probe = ide_floppy_probe, 1934 + .remove = ide_floppy_remove, 1932 1935 .version = IDEFLOPPY_VERSION, 1933 1936 .media = ide_floppy, 1934 1937 .supports_dsc_overlap = 0, ··· 2133 2136 .revalidate_disk= idefloppy_revalidate_disk 2134 2137 }; 2135 2138 2136 - static int ide_floppy_probe(struct device *dev) 2139 + static int ide_floppy_probe(ide_drive_t *drive) 2137 2140 { 2138 - ide_drive_t *drive = to_ide_device(dev); 2139 2141 idefloppy_floppy_t *floppy; 2140 2142 struct gendisk *g; 2141 2143
+7 -11
drivers/ide/ide-tape.c
··· 4682 4682 idetape_add_settings(drive); 4683 4683 } 4684 4684 4685 - static int ide_tape_remove(struct device *dev) 4685 + static void ide_tape_remove(ide_drive_t *drive) 4686 4686 { 4687 - ide_drive_t *drive = to_ide_device(dev); 4688 4687 idetape_tape_t *tape = drive->driver_data; 4689 4688 4690 4689 ide_unregister_subdriver(drive, tape->driver); ··· 4691 4692 ide_unregister_region(tape->disk); 4692 4693 4693 4694 ide_tape_put(tape); 4694 - 4695 - return 0; 4696 4695 } 4697 4696 4698 4697 static void ide_tape_release(struct kref *kref) ··· 4742 4745 4743 4746 #endif 4744 4747 4745 - static int ide_tape_probe(struct device *); 4748 + static int ide_tape_probe(ide_drive_t *); 4746 4749 4747 4750 static ide_driver_t idetape_driver = { 4748 4751 .gen_driver = { 4749 4752 .owner = THIS_MODULE, 4750 4753 .name = "ide-tape", 4751 4754 .bus = &ide_bus_type, 4752 - .probe = ide_tape_probe, 4753 - .remove = ide_tape_remove, 4754 4755 }, 4756 + .probe = ide_tape_probe, 4757 + .remove = ide_tape_remove, 4755 4758 .version = IDETAPE_VERSION, 4756 4759 .media = ide_tape, 4757 4760 .supports_dsc_overlap = 1, ··· 4822 4825 .ioctl = idetape_ioctl, 4823 4826 }; 4824 4827 4825 - static int ide_tape_probe(struct device *dev) 4828 + static int ide_tape_probe(ide_drive_t *drive) 4826 4829 { 4827 - ide_drive_t *drive = to_ide_device(dev); 4828 4830 idetape_tape_t *tape; 4829 4831 struct gendisk *g; 4830 4832 int minor; ··· 4879 4883 idetape_setup(drive, tape, minor); 4880 4884 4881 4885 class_device_create(idetape_sysfs_class, NULL, 4882 - MKDEV(IDETAPE_MAJOR, minor), dev, "%s", tape->name); 4886 + MKDEV(IDETAPE_MAJOR, minor), &drive->gendev, "%s", tape->name); 4883 4887 class_device_create(idetape_sysfs_class, NULL, 4884 - MKDEV(IDETAPE_MAJOR, minor + 128), dev, "n%s", tape->name); 4888 + MKDEV(IDETAPE_MAJOR, minor + 128), &drive->gendev, "n%s", tape->name); 4885 4889 4886 4890 devfs_mk_cdev(MKDEV(HWIF(drive)->major, minor), 4887 4891 S_IFCHR | S_IRUGO | S_IWUGO,
+31
drivers/ide/ide.c
··· 1949 1949 return 0; 1950 1950 } 1951 1951 1952 + static int generic_ide_probe(struct device *dev) 1953 + { 1954 + ide_drive_t *drive = to_ide_device(dev); 1955 + ide_driver_t *drv = to_ide_driver(dev->driver); 1956 + 1957 + return drv->probe ? drv->probe(drive) : -ENODEV; 1958 + } 1959 + 1960 + static int generic_ide_remove(struct device *dev) 1961 + { 1962 + ide_drive_t *drive = to_ide_device(dev); 1963 + ide_driver_t *drv = to_ide_driver(dev->driver); 1964 + 1965 + if (drv->remove) 1966 + drv->remove(drive); 1967 + 1968 + return 0; 1969 + } 1970 + 1971 + static void generic_ide_shutdown(struct device *dev) 1972 + { 1973 + ide_drive_t *drive = to_ide_device(dev); 1974 + ide_driver_t *drv = to_ide_driver(dev->driver); 1975 + 1976 + if (dev->driver && drv->shutdown) 1977 + drv->shutdown(drive); 1978 + } 1979 + 1952 1980 struct bus_type ide_bus_type = { 1953 1981 .name = "ide", 1954 1982 .match = ide_bus_match, 1955 1983 .uevent = ide_uevent, 1984 + .probe = generic_ide_probe, 1985 + .remove = generic_ide_remove, 1986 + .shutdown = generic_ide_shutdown, 1956 1987 .dev_attrs = ide_dev_attrs, 1957 1988 .suspend = generic_ide_suspend, 1958 1989 .resume = generic_ide_resume,
+5
include/linux/ide.h
··· 983 983 ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); 984 984 ide_proc_entry_t *proc; 985 985 struct device_driver gen_driver; 986 + int (*probe)(ide_drive_t *); 987 + void (*remove)(ide_drive_t *); 988 + void (*shutdown)(ide_drive_t *); 986 989 } ide_driver_t; 990 + 991 + #define to_ide_driver(drv) container_of(drv, ide_driver_t, gen_driver) 987 992 988 993 int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); 989 994