コード例 #1
0
static int acc_enable_data(int enable)
{
	struct acc_context *cxt = NULL;

	cxt = acc_context_obj;
	if (NULL == cxt->acc_ctl.open_report_data) {
		ACC_ERR("no acc control path\n");
		return -1;
	}

	if (1 == enable) {
		ACC_LOG("ACC enable data\n");
		cxt->is_active_data = true;
		cxt->is_first_data_after_enable = true;
		cxt->acc_ctl.open_report_data(1);
	acc_real_enable(enable);
		if (false == cxt->is_polling_run && cxt->is_batch_enable == false) {
			if (false == cxt->acc_ctl.is_report_input_direct) {
				startTimer(&cxt->hrTimer, atomic_read(&cxt->delay), true);
				cxt->is_polling_run = true;
			}
		}
	}
	if (0 == enable) {
		ACC_LOG("ACC disable\n");

		cxt->is_active_data = false;
		cxt->acc_ctl.open_report_data(0);
		if (true == cxt->is_polling_run) {
			if (false == cxt->acc_ctl.is_report_input_direct) {
				cxt->is_polling_run = false;
				smp_mb();/* for memory barrier */
				stopTimer(&cxt->hrTimer);
				smp_mb();/* for memory barrier */
				cancel_work_sync(&cxt->report);
				cxt->drv_data.acc_data.values[0] = ACC_INVALID_VALUE;
				cxt->drv_data.acc_data.values[1] = ACC_INVALID_VALUE;
				cxt->drv_data.acc_data.values[2] = ACC_INVALID_VALUE;
			}
		}
	acc_real_enable(enable);
	}
	return 0;
}
コード例 #2
0
ファイル: accel.c プロジェクト: Scorpio92/mediatek
static int acc_enable_data(int enable)
{
    struct acc_context *cxt = NULL;
	//int err =0;
	cxt = acc_context_obj;
	if(NULL  == cxt->acc_ctl.open_report_data)
	{
	  ACC_ERR("no acc control path\n");
	  return -1;
	}
	
    if(1 == enable)
    {
       ACC_LOG("ACC enable data\n");
	   cxt->is_active_data =true;
       cxt->is_first_data_after_enable = true;
	   cxt->acc_ctl.open_report_data(1);
	   if(false == cxt->is_polling_run && cxt->is_batch_enable == false)
	   {
	      if(false == cxt->acc_ctl.is_report_input_direct)
	      {
	      	mod_timer(&cxt->timer, jiffies + atomic_read(&cxt->delay)/(1000/HZ));
		  	cxt->is_polling_run = true;
	      }
	   }
    }
	if(0 == enable)
	{
	   ACC_LOG("ACC disable \n");
	   
	   cxt->is_active_data =false;
	   cxt->acc_ctl.open_report_data(0);
	   if(true == cxt->is_polling_run)
	   {
	      if(false == cxt->acc_ctl.is_report_input_direct)
	      {
	      	cxt->is_polling_run = false;
	      	del_timer_sync(&cxt->timer);
	      	cancel_work_sync(&cxt->report);
			cxt->drv_data.acc_data.values[0] = ACC_INVALID_VALUE;
	   		cxt->drv_data.acc_data.values[1] = ACC_INVALID_VALUE;
	   		cxt->drv_data.acc_data.values[2] = ACC_INVALID_VALUE;
	      }
	   }
	   
	}
	acc_real_enable(enable);
	return 0;
}
コード例 #3
0
int acc_enable_nodata(int enable)
{
	struct acc_context *cxt = NULL;

	cxt = acc_context_obj;
	if (NULL == cxt->acc_ctl.enable_nodata) {
		ACC_ERR("acc_enable_nodata:acc ctl path is NULL\n");
		return -1;
	}

	if (1 == enable)
		cxt->is_active_nodata = true;

	if (0 == enable)
		cxt->is_active_nodata = false;
	acc_real_enable(enable);
	return 0;
}