diff --git a/os/drivers/input/ist415.c b/os/drivers/input/ist415.c index 3d3e136e28..5c805ed82e 100644 --- a/os/drivers/input/ist415.c +++ b/os/drivers/input/ist415.c @@ -444,6 +444,10 @@ static int ist415_cmd(struct touchscreen_s *upper, int argc, char **argv) ist415_selftest(dev); } else if (strncmp(argv[1], "rec", 4) == 0) { ret = ist415_rec_mode(dev, argc, argv); + } else if (strncmp(argv[1], "cm_test", 8) == 0) { + ret = ist415_cmtest(dev); + } else if(strncmp(argv[1], "jitter_test", 12) == 0) { + ret = ist415_jittertest(dev); } else { ret = -EINVAL; } @@ -454,7 +458,6 @@ static int ist415_cmd(struct touchscreen_s *upper, int argc, char **argv) return ret; } - /**************************************************************************** * Name: ist415_power_on ****************************************************************************/ diff --git a/os/drivers/input/ist415_misc.c b/os/drivers/input/ist415_misc.c index c3e5a568a5..498784ab5f 100644 --- a/os/drivers/input/ist415_misc.c +++ b/os/drivers/input/ist415_misc.c @@ -820,6 +820,52 @@ int ist415_selftest(struct ist415_dev_s *dev) return ret; } +int ist415_cmtest(struct ist415_dev_s *dev) +{ + int16_t *buf16; + int ret = 0; + buf16 = (int16_t *)kmm_malloc(dev->mtl_node_len * sizeof(int16_t)); + if (!buf16) { + return -ENOMEM; + } + ist415_disable(dev); + ist415_sensor(dev, false); + ret = ist415_run_selftest(dev, CMCS_FLAG_CM, (int16_t *)buf16); + kmm_free(buf16); + ist415_reset(dev, false); + ist415_start(dev); + ist415_enable(dev); + if (!ret && !dev->cm_result) { + return OK; + } else if (!ret && dev->cm_result) { + return ERROR; + } + return ret; +} + +int ist415_jittertest(struct ist415_dev_s *dev) +{ + int16_t *buf16; + int ret = 0; + buf16 = (int16_t *)kmm_malloc(dev->mtl_node_len * sizeof(int16_t)); + if (!buf16) { + return -ENOMEM; + } + ist415_disable(dev); + ist415_sensor(dev, false); + ret = ist415_run_selftest(dev, CMCS_FLAG_JITTER, (int16_t *)buf16); + kmm_free(buf16); + ist415_reset(dev, false); + ist415_start(dev); + ist415_enable(dev); + if (!ret && !dev->jitter_result) { + return OK; + } else if (!ret && dev->jitter_result) { + return ERROR; + } + return ret; +} + /**************************************************************************** * Name: ist415_rec_mode * diff --git a/os/drivers/input/ist415_misc.h b/os/drivers/input/ist415_misc.h index 4a6b844734..58a8981f3b 100644 --- a/os/drivers/input/ist415_misc.h +++ b/os/drivers/input/ist415_misc.h @@ -92,6 +92,8 @@ void ist415_run_intr_debug(struct ist415_dev_s *dev); void ist415_display_cpc(struct ist415_dev_s *dev); void ist415_display_rawdata(struct ist415_dev_s *dev); int ist415_selftest(struct ist415_dev_s *dev); +int ist415_cmtest(struct ist415_dev_s *dev); +int ist415_jittertest(struct ist415_dev_s *dev); int ist415_rec_mode(struct ist415_dev_s *dev, int argc, char **argv); void ist415_recording(struct ist415_dev_s *dev);