static int lis3df_resume(struct i2c_client *client) { Accelerometer *data = i2c_get_clientdata(client); mutex_lock(&data->mutex); data->suspend = false; mutex_unlock(&data->mutex); cancel_delayed_work_sync(&data->dw); flush_workqueue(Accelerometer_WorkQueue); #if debug pr_info("LIS3DF: %s ++\n", __func__); #endif if(data->enabled){ lis3df_type_setting(true); queue_delayed_work(Accelerometer_WorkQueue, &data->dw, SleepTime) : -1; }
static int lis3df_enable(void) { int rc = 0; Accelerometer* data = i2c_get_clientdata(this_client); #if debug pr_info("LIS3DF: %s ++\n", __func__); #endif if(data->enabled == false){ //enable sensor lis3df_type_setting(true); mutex_lock(&data->mutex); data->enabled = true; mutex_unlock(&data->mutex); rc = 1; } rc = (rc == 1) ? queue_delayed_work(Accelerometer_WorkQueue, &data->dw, msecs_to_jiffies(20)) : -1; return 0; }
static int lis3df_suspend(struct i2c_client *client, pm_message_t state) { Accelerometer* data = i2c_get_clientdata(client); mutex_lock(&data->mutex); data->suspend = true; mutex_unlock(&data->mutex); cancel_delayed_work_sync(&data->dw); flush_workqueue(Accelerometer_WorkQueue); #if debug pr_info("LIS3DF: %s ++\n", __func__); #endif if(data->enabled){ //Setting Operation mode lis3df_type_setting(false); } #if debug pr_info("LIS3DF: %s --\n", __func__); #endif return 0;// It's need to return 0, non-zero means has falut. }
static int lis3df_disable(void) { Accelerometer* data = i2c_get_clientdata(this_client); #if debug pr_info("LIS3DF: %s \n", __func__); #endif if(data->enabled == true){ mutex_lock(&data->mutex); data->enabled = false; mutex_unlock(&data->mutex); cancel_delayed_work_sync(&data->dw); flush_workqueue(Accelerometer_WorkQueue); //Setting Suspend mode lis3df_type_setting(false); WorkMode = NORMAL_MODE; SleepTime = msecs_to_jiffies(200); POWER_MODE_CAMMAND = CTRL_REG1_XEN | CTRL_REG1_YEN | CTRL_REG1_ZEN | CTRL_REG1_100HZ; } return 0; }