void cma3000_suspend(struct cma3000_accl_data *data) { mutex_lock(&data->mutex); if (!data->suspended && data->opened) cma3000_poweroff(data); data->suspended = true; mutex_unlock(&data->mutex); }
static void cma3000_close(struct input_dev *input_dev) { struct cma3000_accl_data *data = input_get_drvdata(input_dev); mutex_lock(&data->mutex); if (!data->suspended) cma3000_poweroff(data); data->opened = false; mutex_unlock(&data->mutex); }
int cma3000_exit(struct cma3000_accl_data *data) { int ret; ret = cma3000_poweroff(data); if (data->client->irq) free_irq(data->client->irq, data); mutex_destroy(&data->mutex); input_unregister_device(data->input_dev); input_free_device(data->input_dev); sysfs_remove_group(&data->client->dev.kobj, &cma3000_attr_group); return ret; }