static void ff_exit(void) { if (ff_current_dev) { fmc_device_unregister_n(ff_current_dev->fmc, ff_nr_dev); device_unregister(&ff_current_dev->dev); } cancel_delayed_work_sync(&ff_work); }
static void ff_work_fn(struct work_struct *work) { struct ff_dev *ff = ff_current_dev; int ret; fmc_device_unregister_n(ff->fmc, ff_nr_dev); device_unregister(&ff->dev); ff_current_dev = NULL; ff = ff_dev_create(); if (IS_ERR(ff)) { pr_warning("%s: can't re-create FMC devices\n", __func__); return; } ret = fmc_device_register_n(ff->fmc, ff_nr_dev); if (ret < 0) { dev_warn(&ff->dev, "can't re-register FMC devices\n"); device_unregister(&ff->dev); return; } ff_current_dev = ff; }
void fmc_device_unregister(struct fmc_device *fmc) { fmc_device_unregister_n(&fmc, 1); }