+ spin_lock_irqsave(&adc->lock, flags);
+ if(client->flags & (1<<type)){
+ spin_unlock_irqrestore(&adc->lock, flags);
+ adc_dbg(adc->dev, "req is exist: %s, client->index: %d\n",
+ (type == ADC_ASYNC_READ)?"async_read":"sync_read", client->index);
+ return -EEXIST;
+ }else if(client->flags != 0){
+ client->flags |= 1<<type;
+ }else{
+ client->flags = 1<<type;
+ ret = adc_request_add(adc, client);
+ if(ret < 0){
+ spin_unlock_irqrestore(&adc->lock, flags);
+ dev_err(adc->dev, "fail to add request\n");
+ return ret;
+ }
+ }
+ if(type == ADC_ASYNC_READ){
+ spin_unlock_irqrestore(&adc->lock, flags);
+ return 0;
+ }
+ client->is_finished = 0;
+ spin_unlock_irqrestore(&adc->lock, flags);
+
+ tmo = wait_event_timeout(client->wait, ( client->is_finished == 1 ), msecs_to_jiffies(ADC_READ_TMO));
+ mutex_lock(&adc->m_lock);
+ if(unlikely((tmo <= 0) && (client->is_finished == 0))) {
+ dev_err(adc->dev, "get adc value timeout.................................\n");
+ if(adc->ops->dump)
+ adc->ops->dump(adc);
+ adc_finished(adc, -1);
+ mutex_unlock(&adc->m_lock);
+ return -ETIMEDOUT;
+ }
+ mutex_unlock(&adc->m_lock);