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; }
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; }
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; }