class_simple_device_remove(MKDEV(major, unit)); class_simple_destroy(pg_class);
class_device_destroy(pg_class, MKDEV(major, unit)); class_destroy(pg_class);
static int __init pg_init(void){	int unit, err = 0;	if (disable){		err = -1;		goto out;	}	pg_init_units();	if (pg_detect()) {		err = -1;		goto out;	}	if (register_chrdev(major, name, &pg_fops)) {		printk("pg_init: unable to get major number %d\n", major);		for (unit = 0; unit < PG_UNITS; unit++) {			struct pg *dev = &devices[unit];			if (dev->present)				pi_release(dev->pi);		}		err = -1;		goto out;	}	pg_class = class_simple_create(THIS_MODULE, "pg");	if (IS_ERR(pg_class)) {		err = PTR_ERR(pg_class);		goto out_chrdev;	}	devfs_mk_dir("pg");	for (unit = 0; unit < PG_UNITS; unit++) {		struct pg *dev = &devices[unit];		if (dev->present) {			class_simple_device_add(pg_class, MKDEV(major, unit), 					NULL, "pg%u", unit);			err = devfs_mk_cdev(MKDEV(major, unit),				      S_IFCHR | S_IRUSR | S_IWUSR, "pg/%u",				      unit);			if (err) 				goto out_class;		}	}	err = 0;	goto out;out_class:	class_simple_device_remove(MKDEV(major, unit));	class_simple_destroy(pg_class);out_chrdev:	unregister_chrdev(major, "pg");out:	return err;}