示例#1
0
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;
}