aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/pcmcia/cm4000_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/pcmcia/cm4000_cs.c')
-rw-r--r--drivers/char/pcmcia/cm4000_cs.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c
index e91b43a014b0..8cbc64fe0feb 100644
--- a/drivers/char/pcmcia/cm4000_cs.c
+++ b/drivers/char/pcmcia/cm4000_cs.c
@@ -1881,8 +1881,11 @@ static int cm4000_probe(struct pcmcia_device *link)
1881 init_waitqueue_head(&dev->readq); 1881 init_waitqueue_head(&dev->readq);
1882 1882
1883 ret = cm4000_config(link, i); 1883 ret = cm4000_config(link, i);
1884 if (ret) 1884 if (ret) {
1885 dev_table[i] = NULL;
1886 kfree(dev);
1885 return ret; 1887 return ret;
1888 }
1886 1889
1887 class_device_create(cmm_class, NULL, MKDEV(major, i), NULL, 1890 class_device_create(cmm_class, NULL, MKDEV(major, i), NULL,
1888 "cmm%d", i); 1891 "cmm%d", i);
@@ -1907,7 +1910,7 @@ static void cm4000_detach(struct pcmcia_device *link)
1907 cm4000_release(link); 1910 cm4000_release(link);
1908 1911
1909 dev_table[devno] = NULL; 1912 dev_table[devno] = NULL;
1910 kfree(dev); 1913 kfree(dev);
1911 1914
1912 class_device_destroy(cmm_class, MKDEV(major, devno)); 1915 class_device_destroy(cmm_class, MKDEV(major, devno));
1913 1916
@@ -1956,12 +1959,14 @@ static int __init cmm_init(void)
1956 if (major < 0) { 1959 if (major < 0) {
1957 printk(KERN_WARNING MODULE_NAME 1960 printk(KERN_WARNING MODULE_NAME
1958 ": could not get major number\n"); 1961 ": could not get major number\n");
1962 class_destroy(cmm_class);
1959 return major; 1963 return major;
1960 } 1964 }
1961 1965
1962 rc = pcmcia_register_driver(&cm4000_driver); 1966 rc = pcmcia_register_driver(&cm4000_driver);
1963 if (rc < 0) { 1967 if (rc < 0) {
1964 unregister_chrdev(major, DEVICE_NAME); 1968 unregister_chrdev(major, DEVICE_NAME);
1969 class_destroy(cmm_class);
1965 return rc; 1970 return rc;
1966 } 1971 }
1967 1972