static int yas_acc_suspend(struct i2c_client *client, pm_message_t mesg) { struct yas_acc_private_data *data = i2c_get_clientdata(client); struct yas_acc_driver *driver = data->driver; dbg_func_in(); dbg("%s : data->suspend = %d / data->suspend_enable = %d\n", __func__, data->suspend, yas_acc_get_enable(driver)); #ifndef PANTECH_AVOID_DEADLOCK mutex_lock(&data->data_mutex); #endif if (data->suspend == 0) { data->suspend_enable = yas_acc_get_enable(driver); if (data->suspend_enable) { #ifndef PANTECH_AVOID_DEADLOCK cancel_delayed_work_sync(&data->work); #endif yas_acc_set_enable(driver, 0); } } data->suspend = 1; #ifndef PANTECH_AVOID_DEADLOCK mutex_unlock(&data->data_mutex); #endif #ifdef POWER_ON_OFF geomagnetic_set_power(0); #endif dbg_func_out(); return 0; }
static ssize_t yas_acc_enable_show(struct device *dev, struct device_attribute *attr, char *buf) { struct input_dev *input = to_input_dev(dev); struct yas_acc_private_data *data = input_get_drvdata(input); return sprintf(buf, "%d\n", yas_acc_get_enable(data->driver)); }
static int yas_acc_suspend(struct i2c_client *client, pm_message_t mesg) { struct yas_acc_private_data *data = i2c_get_clientdata(client); struct yas_acc_driver *driver = data->driver; mutex_lock(&data->data_mutex); if (data->suspend == 0) { data->suspend_enable = yas_acc_get_enable(driver); if (data->suspend_enable) { cancel_delayed_work_sync(&data->work); yas_acc_set_enable(driver, 0); } } data->suspend = 1; mutex_unlock(&data->data_mutex); return 0; }
void yas_acc_early_suspend(struct early_suspend *h) { struct yas_acc_private_data *data = container_of(h, struct yas_acc_private_data, early_suspend); struct yas_acc_driver *driver = data->driver; mutex_lock(&data->data_mutex); if (data->suspend == 0) { data->suspend_enable = yas_acc_get_enable(driver); if (data->suspend_enable) { cancel_delayed_work_sync(&data->work); yas_acc_set_enable(driver, 0); } } data->suspend = 1; mutex_unlock(&data->data_mutex); #ifdef WILLOW_SENSOR_REGULATOR_CONTROL regulator_disable(data->regulator); #endif }
static int yas_acc_suspend(struct i2c_client *client, pm_message_t mesg) { struct yas_acc_private_data *data = i2c_get_clientdata(client); struct yas_acc_driver *driver = data->driver; mutex_lock(&data->data_mutex); #ifdef WILLOW_SENSOR_REGULATOR_CONTROL regulator_disable(data->regulator); #endif if (data->suspend == 0) { data->suspend_enable = yas_acc_get_enable(driver); if (data->suspend_enable) { cancel_delayed_work_sync(&data->work); yas_acc_set_enable(driver, 0); } } data->suspend = 1; mutex_unlock(&data->data_mutex); return 0; }
static int yas_acc_resume(struct i2c_client *client) { struct yas_acc_private_data *data = i2c_get_clientdata(client); struct yas_acc_driver *driver = data->driver; int delay; dbg_func_in(); #ifdef POWER_ON_OFF geomagnetic_set_power(1); #endif #ifndef PANTECH_AVOID_DEADLOCK mutex_lock(&data->data_mutex); #endif dbg("%s : data->suspend = %d / data->suspend_enable = %d / delay = %d\n", __func__, data->suspend, yas_acc_get_enable(driver), yas_acc_get_delay(driver)); if (data->suspend == 1) { if (data->suspend_enable) { delay = yas_acc_get_delay(driver); #ifndef PANTECH_AVOID_DEADLOCK schedule_delayed_work(&data->work, delay_to_jiffies(delay) + 1); #endif yas_acc_set_enable(driver, 1); } } data->suspend = 0; #ifndef PANTECH_AVOID_DEADLOCK mutex_unlock(&data->data_mutex); #endif dbg_func_out(); return 0; }