int fpc1020_capture_wait_finger_down(fpc1020_data_t *fpc1020) { int error = 0; int thold = 32; int addthred = 30; if( fpc1020->setup.finger_auto_threshold ){ error = fpc1020_read_irq(fpc1020, true); if (error < 0) goto out_error; error = fpc1020_cmd(fpc1020, FPC1020_CMD_FINGER_PRESENT_QUERY, FPC_1020_IRQ_REG_BIT_COMMAND_DONE); if (error < 0) goto out_error; error = fpc1020_capture_set_crop(fpc1020,fpc1020->setup.wakeup_detect_cols[0],1,fpc1020->setup.wakeup_detect_rows[0],8); if (error < 0) goto out_error; error = cal_thredhold(fpc1020); if (error < 0) goto out_error; thold = error; error = fpc1020_capture_set_crop(fpc1020,fpc1020->setup.wakeup_detect_cols[1],1,fpc1020->setup.wakeup_detect_rows[1],8); if (error < 0) goto out_error; error = cal_thredhold(fpc1020); if (error < 0) goto out_error; if(error > thold) thold = error; thold += addthred; if(thold < fpc1020->fp_thredhold && thold >= addthred) fpc1020->fp_thredhold = thold; printk("fingerprint fp_thredhold =%d default_hold=%d det1=[%d,1,%d,8] det2=[%d,1,%d,8]\n",\ fpc1020->fp_thredhold,fpc1020->setup.finger_detect_threshold,\ fpc1020->setup.wakeup_detect_cols[0],fpc1020->setup.wakeup_detect_rows[0],\ fpc1020->setup.wakeup_detect_cols[1],fpc1020->setup.wakeup_detect_rows[1]); fpc1020_wake_up(fpc1020); fpc1020_write_sensor_setup(fpc1020); } error = fpc1020_wait_finger_present(fpc1020); fpc1020_read_irq(fpc1020, true); out_error: return (error >= 0) ? 0 : error; }
/* -------------------------------------------------------------------- */ int fpc1020_capture_wait_finger_up(fpc1020_data_t *fpc1020) { int error = 0; bool finger_up = false; int i = 0; wake_lock(&fpc1020->fp_wake_lock); while (!finger_up && (error >= 0)) { // todo: awaiting SW-152 if (fpc1020->worker.stop_request){ error = -EINTR; break; } else error = fpc1020_check_finger_present_sum(fpc1020); i++; if(i > 100){ i = 0; printk("%s:finger present sum = %d \n", __func__, error); } if ((error >= 0) && (error <= FPC1020_FINGER_UP_THRESHOLD)) finger_up = true; else msleep(FPC1020_CAPTURE_WAIT_FINGER_DELAY_MS); } fpc1020_read_irq(fpc1020, true); wake_unlock(&fpc1020->fp_wake_lock); wake_lock_timeout(&fpc1020->fp_wake_lock, FPC1020_DEFAULT_WAKELOCK_TIME_S); return (finger_up) ? 0 : error; }
int fpc1020_capture_nav_wait_finger_down(fpc1020_data_t* fpc1020) { int error = 0; error = fpc1020_wait_finger_present(fpc1020); fpc1020_read_irq(fpc1020, true); return (error >= 0) ? 0 : error; }
int fpc1020_capture_wait_finger_up(fpc1020_data_t *fpc1020) { int error = 0; bool finger_up = false; while (!finger_up && (error >= 0)) { if (fpc1020->worker.stop_request) error = -EINTR; else error = fpc1020_check_finger_present_sum(fpc1020); if ((error >= 0) && (error < fpc1020->setup.capture_finger_up_threshold + 1)) finger_up = true; else msleep(FPC1020_CAPTURE_WAIT_FINGER_DELAY_MS); } fpc1020_read_irq(fpc1020, true); return (finger_up) ? 0 : error; }