From d52429660e813d0b86349f064ecf48fdcaf5f733 Mon Sep 17 00:00:00 2001 From: chenlj2 Date: Thu, 23 Apr 2020 15:08:36 +0800 Subject: [PATCH] DLKM/sarsensor:add tcmd test interfaces for abov mmi 1. add fw_download_status sys interface; 2. add int_state sys interface. port form: https://gerrit.mot.com/#/c/1539901/ Change-Id: I809e33078d66fe04b1b3678a690e5e19c7bdddf0 Signed-off-by: chenlj2 Reviewed-on: https://gerrit.mot.com/1540822 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wen Xie Reviewed-by: Tao Sun Submit-Approved: Jira Key --- .../abov_mmi_overlay/abov_sar_mmi_overlay.c | 43 ++++++++++++++++++- include/linux/input/abov_sar_mmi_overlay.h | 3 ++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/misc/abov_mmi_overlay/abov_sar_mmi_overlay.c b/drivers/misc/abov_mmi_overlay/abov_sar_mmi_overlay.c index 9f3a8fc03238..51a8542e6487 100644 --- a/drivers/misc/abov_mmi_overlay/abov_sar_mmi_overlay.c +++ b/drivers/misc/abov_mmi_overlay/abov_sar_mmi_overlay.c @@ -668,6 +668,26 @@ static ssize_t reset_store(struct class *class, static CLASS_ATTR_RW(reset); +static ssize_t int_state_show(struct class *class, + struct class_attribute *attr, + char *buf) +{ + pabovXX_t this = abov_sar_ptr; + LOG_DBG("Reading INT line state\n"); + return snprintf(buf, 8, "%d\n", this->int_state); +} +static CLASS_ATTR_RO(int_state); + +static ssize_t fw_download_status_show(struct class *class, + struct class_attribute *attr, + char *buf) +{ + pabovXX_t this = abov_sar_ptr; + LOG_DBG("Reading fw download state\n"); + return snprintf(buf, 8, "%d", this->fw_dl_status); +} +static CLASS_ATTR_RO(fw_download_status); + static ssize_t enable_show(struct class *class, struct class_attribute *attr, char *buf) @@ -1291,11 +1311,13 @@ static int abov_fw_update(bool force) } else { LOG_INFO("Firmware is latest,exiting fw upgrade...\n"); fw_upgrade = false; + this->fw_dl_status = 0; rc = -EIO; goto rel_fw; } if (fw_upgrade) { + this->fw_dl_status = 2; for (update_loop = 0; update_loop < 10; update_loop++) { rc = _abov_fw_update(client, &fw->data[32], fw->size-32); if (rc < 0) @@ -1307,8 +1329,11 @@ static int abov_fw_update(bool force) break; } } - if (update_loop >= 10) + if (update_loop >= 10) { + this->fw_dl_status = 1; rc = -EIO; + } + this->fw_dl_status = 0; } rel_fw: @@ -1703,6 +1728,18 @@ static int abov_probe(struct i2c_client *client, const struct i2c_device_id *id) return ret; } + ret = class_create_file(&capsense_class, &class_attr_int_state); + if (ret < 0) { + LOG_DBG("Create int_state file failed (%d)\n", ret); + return ret; + } + + ret = class_create_file(&capsense_class, &class_attr_fw_download_status); + if (ret < 0) { + LOG_DBG("Create fw_download_status file failed (%d)\n", ret); + return ret; + } + ret = class_create_file(&capsense_class, &class_attr_enable); if (ret < 0) { LOG_ERR("Create enable file failed (%d)\n", ret); @@ -1780,6 +1817,7 @@ static int abov_probe(struct i2c_client *client, const struct i2c_device_id *id) } this->loading_fw = false; + this->fw_dl_status = 1; if (isForceUpdate == true) { INIT_WORK(&this->fw_update_work, capsense_fore_update_work); } else { @@ -1963,6 +2001,7 @@ static irqreturn_t abovXX_interrupt_thread(int irq, void *data) mutex_lock(&this->mutex); LOG_DBG("abovXX_irq\n"); + this->int_state = 1; if ((!this->get_nirq_low) || this->get_nirq_low(this->board->irq_gpio)) abovXX_process_interrupt(this, 1); else @@ -1996,6 +2035,7 @@ static irqreturn_t abovXX_irq(int irq, void *pvoid) if (pvoid) { this = (pabovXX_t)pvoid; LOG_DBG("abovXX_irq\n"); + this->int_state = 1; if ((!this->get_nirq_low) || this->get_nirq_low(this->board->irq_gpio)) { LOG_DBG("abovXX_irq - Schedule Work\n"); abovXX_schedule_work(this, 0); @@ -2099,6 +2139,7 @@ int abovXX_sar_init(pabovXX_t this) LOG_ERR("irq %d busy?\n", this->irq); return err; } + this->int_state = 0; #ifdef USE_THREADED_IRQ LOG_INFO("registered with threaded irq (%d)\n", this->irq); #else diff --git a/include/linux/input/abov_sar_mmi_overlay.h b/include/linux/input/abov_sar_mmi_overlay.h index 357d3ee533a8..c77bb026f039 100644 --- a/include/linux/input/abov_sar_mmi_overlay.h +++ b/include/linux/input/abov_sar_mmi_overlay.h @@ -249,6 +249,8 @@ struct abovXX { int read_flag; int irq; int irqTimeout; + /* interrupt check flag */ + int int_state; char irq_disabled; /* whether irq should be ignored.. cases if enable/disable irq is not used * or does not work properly */ @@ -262,6 +264,7 @@ struct abovXX { struct notifier_block ps_notif; bool ps_is_present; bool loading_fw; + int fw_dl_status; struct work_struct fw_update_work;