static int f17_init(struct rmi_function_container *fc) { int retval; retval = f17_alloc_memory(fc); if (retval < 0) goto err_free_data; retval = f17_initialize(fc); if (retval < 0) goto err_free_data; retval = f17_register_devices(fc); if (retval < 0) goto err_free_data; retval = f17_create_sysfs(fc); if (retval < 0) goto err_free_data; return 0; err_free_data: f17_free_memory(fc); return retval; }
static void f17_remove(struct rmi_function_container *fc) { struct rmi_f17_device_data *f17 = fc->data; int i = 0; for (i = 0; i < ARRAY_SIZE(attrs); i++) sysfs_remove_file(&fc->dev.kobj, &attrs[i].attr); for (i = 0; i < f17->query.number_of_sticks + 1; i++) input_unregister_device(f17->sticks[i].input); f17_free_memory(fc); }