void x_cleanup(void) { class_remove_file( x_class, &class_attr_data1 ); class_remove_file( x_class, &class_attr_data2 ); class_remove_file( x_class, &class_attr_data3 ); class_destroy( x_class ); return; }
static void __exit asus_oled_exit(void) { class_remove_file(oled_class, &class_attr_version.attr); class_destroy(oled_class); usb_deregister(&oled_driver); }
int amlmmc_dtb_init(struct mmc_card *card) { int ret = 0; card_dtb = card; pr_info("%s: register dtb chardev", __func__); ret = alloc_chrdev_region(&amlmmc_dtb_no, 0, 1, DTB_NAME); if (ret < 0) { pr_err("alloc dtb dev_t no failed"); ret = -1; goto exit_err; } cdev_init(&amlmmc_dtb, &dtb_ops); amlmmc_dtb.owner = THIS_MODULE; ret = cdev_add(&amlmmc_dtb, amlmmc_dtb_no, 1); if (ret) { pr_err("dtb dev add failed"); ret = -1; goto exit_err1; } amlmmc_dtb_class = class_create(THIS_MODULE, DTB_NAME); if (IS_ERR(amlmmc_dtb_class)) { pr_err("dtb dev add failed"); ret = -1; goto exit_err2; } ret = class_create_file(amlmmc_dtb_class, &class_attr_emmcdtb); if (ret) { pr_err("dtb dev add failed"); ret = -1; goto exit_err2; } dtb_dev = device_create(amlmmc_dtb_class, NULL, amlmmc_dtb_no, NULL, DTB_NAME); if (IS_ERR(dtb_dev)) { pr_err("dtb dev add failed"); ret = -1; goto exit_err3; } pr_info("%s: register dtb chardev OK", __func__); return ret; exit_err3: class_remove_file(amlmmc_dtb_class, &class_attr_emmcdtb); class_destroy(amlmmc_dtb_class); exit_err2: cdev_del(&amlmmc_dtb); exit_err1: unregister_chrdev_region(amlmmc_dtb_no, 1); exit_err: return ret; }
/* * test_class_file * make test call to class_create_file * and if that call is successful make * another call to class_remove_file */ static int test_class_file() { struct class * cls = &test_class; if (class_create_file(cls, &class_attr_test_id)) { printk("tbase: failed to create class sysfs file\n"); return 1; } else { printk("tbase: created class sysfs file\n"); class_remove_file(cls, &class_attr_test_id); return 0; } }
static __exit void tv_exit_module(void) { int i; if (info->base_class) { for (i = 0; i < ARRAY_SIZE(tv_attr); i++) class_remove_file(info->base_class, tv_attr[i]); class_destroy(info->base_class); } if (info) { unregister_chrdev(info->major, info->name); kfree(info); } vout_unregister_server(&tv_server); vout_log_info("exit tv module\n"); }
static int meson_vout_remove(struct platform_device *pdev) { int i; if(vout_info.base_class==NULL) return -1; #ifdef CONFIG_HAS_EARLYSUSPEND unregister_early_suspend(&early_suspend); #endif for(i=0;i<VOUT_ATTR_MAX;i++) { class_remove_file(vout_info.base_class,vout_attr[i]) ; } class_destroy(vout_info.base_class); return 0; }
static __exit void tv_exit_module(void) { int i; if(info->base_class) { for(i=0;i<ARRAY_SIZE(tv_attr);i++) { class_remove_file(info->base_class,tv_attr[i]) ; } class_destroy(info->base_class); } if(info) { unregister_chrdev(info->major,info->name) ; kfree(info); } vout_unregister_server(&tv_server); amlog_mask_level(LOG_MASK_INIT,LOG_LEVEL_HIGH,"exit tv module\r\n"); }
static int __exit tvout_remove(struct platform_device *pdev) { int i; if (info->base_class) { for (i=0; i<ARRAY_SIZE(tv_attr); i++) { class_remove_file(info->base_class,tv_attr[i]) ; } class_destroy(info->base_class); } if (info) { unregister_chrdev(info->major,info->name) ; kfree(info); } vout2_unregister_server(&tv_server); amlog_mask_level(LOG_MASK_INIT,LOG_LEVEL_HIGH,"exit tv module\n"); return 0; }