void rmnet_usb_ctrl_exit(void) { int i; for (i = 0; i < NUM_CTRL_CHANNELS; ++i) { if (!ctrl_dev[i]) return; kfree(ctrl_dev[i]->in_ctlreq); kfree(ctrl_dev[i]->rcvbuf); kfree(ctrl_dev[i]->intbuf); usb_free_urb(ctrl_dev[i]->rcvurb); usb_free_urb(ctrl_dev[i]->inturb); #if defined(DEBUG) device_remove_file(ctrl_dev[i]->devicep, &dev_attr_modem_wait); #endif cdev_del(&ctrl_dev[i]->cdev); destroy_workqueue(ctrl_dev[i]->wq); kfree(ctrl_dev[i]); ctrl_dev[i] = NULL; device_destroy(ctrldev_classp, MKDEV(MAJOR(ctrldev_num), i)); } class_destroy(ctrldev_classp); unregister_chrdev_region(MAJOR(ctrldev_num), NUM_CTRL_CHANNELS); rmnet_usb_ctrl_debugfs_exit(); }
void rmnet_usb_ctrl_exit(int no_rmnet_devs, int no_rmnet_insts_per_dev) { int i, n; for (i = 0; i < no_rmnet_devs; i++) { for (n = 0; n < no_rmnet_insts_per_dev; n++) free_rmnet_ctrl_dev(&ctrl_devs[i][n]); kfree(ctrl_devs[i]); class_destroy(ctrldev_classp[i]); if (ctrldev_num[i]) unregister_chrdev_region(ctrldev_num[i], insts_per_dev); } kfree(ctrl_devs); rmnet_usb_ctrl_debugfs_exit(); }
void rmnet_usb_ctrl_exit(void) { int i; for (i = 0; i < NUM_CTRL_CHANNELS; ++i) { if (!ctrl_dev[i]) return; kfree(ctrl_dev[i]->in_ctlreq); kfree(ctrl_dev[i]->rcvbuf); kfree(ctrl_dev[i]->intbuf); usb_free_urb(ctrl_dev[i]->rcvurb); usb_free_urb(ctrl_dev[i]->inturb); #if defined(DEBUG) device_remove_file(ctrl_dev[i]->devicep, &dev_attr_modem_wait); #endif cdev_del(&ctrl_dev[i]->cdev); destroy_workqueue(ctrl_dev[i]->wq); kfree(ctrl_dev[i]); ctrl_dev[i] = NULL; device_destroy(ctrldev_classp, MKDEV(MAJOR(ctrldev_num), i)); } class_destroy(ctrldev_classp); unregister_chrdev_region(MAJOR(ctrldev_num), NUM_CTRL_CHANNELS); if ( hsicctrldev_classp != NULL ) { pr_info("%s: device_destroy\n", __func__); device_destroy(hsicctrldev_classp, MKDEV(htc_hsicctrldev_major, 0)); pr_info("%s: class_unregister\n", __func__); class_unregister(hsicctrldev_classp); pr_info("%s: class_destroy\n", __func__); class_destroy(hsicctrldev_classp); pr_info("%s: unregister_chrdev\n", __func__); unregister_chrdev(htc_hsicctrldev_major, HTC_HSIC_DEVICE_NAME); hsicctrldev_classp = NULL; hsicdevicep = NULL; enable_shorten_itc_count = 0; } rmnet_usb_ctrl_debugfs_exit(); }
void rmnet_usb_ctrl_exit(int no_rmnet_devs, int no_rmnet_insts_per_dev, unsigned long mux_info) { int i, n; for (i = 0; i < no_rmnet_devs; i++) { for (n = 0; n < no_rmnet_insts_per_dev; n++) { free_rmnet_ctrl_dev(&ctrl_devs[i][n]); if (n && test_bit(i, &mux_info)) continue; free_rmnet_ctrl_udev((&ctrl_devs[i][n])->cudev); } kfree(ctrl_devs[i]); class_destroy(ctrldev_classp[i]); if (ctrldev_num[i]) unregister_chrdev_region(ctrldev_num[i], insts_per_dev); } kfree(ctrl_devs); rmnet_usb_ctrl_debugfs_exit(); }