int fpc1020_input_task(fpc1020_data_t *fpc1020) { int error = 0; dev_dbg(&fpc1020->spi->dev, "%s\n", __func__); while (!fpc1020->worker.stop_request && fpc1020->input.enabled && (error >= 0)) { error = fpc1020_write_nav_setup(fpc1020); if (!error) { error = fpc1020_wait_finger_present(fpc1020); } if (!error) { // Send key to wake device input_report_key(fpc1020->input_dev, FPC1020_KEY_FINGER_PRESENT, 1); input_report_key(fpc1020->input_dev, FPC1020_KEY_FINGER_PRESENT, 0); input_sync(fpc1020->input_dev); error = fpc1020_input_loop(fpc1020); } } if (error < 0) { dev_err(&fpc1020->spi->dev, "%s %s (%d)\n", __func__, (error == -EINTR) ? "TERMINATED" : "FAILED", error); } fpc1020->input.enabled = false; return 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_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_down(fpc1020_data_t *fpc1020) { int error; bool finger_down = false; error = fpc1020_wait_finger_present(fpc1020); while (!finger_down && (error >= 0)) { if (fpc1020->worker.stop_request) error = -EINTR; else error = fpc1020_check_finger_present_sum(fpc1020); if (error > fpc1020->setup.capture_finger_down_threshold) finger_down = true; else msleep(FPC1020_CAPTURE_WAIT_FINGER_DELAY_MS); } fpc1020_read_irq(fpc1020, true); return (finger_down) ? 0 : error; }