From 6050776464e00870bc5204b78ab488e531bd8bf7 Mon Sep 17 00:00:00 2001 From: Fenglin Wu Date: Wed, 24 Jun 2020 11:10:28 +0800 Subject: [PATCH] input: qcom-hv-haptics: Update sequence of reading STATUS_DATA Per HW recommendation, when reading HAP_CFG_STATUS_DATA registers, MOD_STATUS_XT.SEL need to be written first to select the right mux, then update MOD_STATUS_SEL register so haptics module can present the desired status values into STATUS_DATA registers. Change-Id: I24205072074ff75b25b42c752333b5f99d83d067 Signed-off-by: Fenglin Wu --- drivers/input/misc/qcom-hv-haptics.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/input/misc/qcom-hv-haptics.c b/drivers/input/misc/qcom-hv-haptics.c index d0e013b8db35..c875acf01ddf 100644 --- a/drivers/input/misc/qcom-hv-haptics.c +++ b/drivers/input/misc/qcom-hv-haptics.c @@ -768,10 +768,15 @@ static int haptics_get_closeloop_lra_period_v2( u8 val[2]; u32 tmp; - val[0] = MOD_STATUS_SEL_LAST_GOOD_TLRA_VAL; - val[1] = MOD_STATUS_XT_SEL_LAST_GOOD_TLRA_VAL; + val[0] = MOD_STATUS_XT_SEL_LAST_GOOD_TLRA_VAL; rc = haptics_write(chip, chip->cfg_addr_base, - HAP_CFG_MOD_STATUS_SEL_REG, val, 2); + HAP_CFG_MOD_STATUS_XT_V2_REG, val, 1); + if (rc < 0) + return rc; + + val[0] = MOD_STATUS_SEL_LAST_GOOD_TLRA_VAL; + rc = haptics_write(chip, chip->cfg_addr_base, + HAP_CFG_MOD_STATUS_SEL_REG, val, 1); if (rc < 0) return rc; @@ -1075,8 +1080,8 @@ static int haptics_get_available_fifo_memory(struct haptics_chip *chip) u8 val[2]; u32 fill, available; - val[0] = MOD_STATUS_SEL_FIFO_FILL_STATUS_VAL; if (chip->ptn_revision == HAP_PTN_V1) { + val[0] = MOD_STATUS_SEL_FIFO_FILL_STATUS_VAL; rc = haptics_write(chip, chip->cfg_addr_base, HAP_CFG_MOD_STATUS_SEL_REG, val, 1); if (rc < 0) @@ -1089,9 +1094,15 @@ static int haptics_get_available_fifo_memory(struct haptics_chip *chip) fill = val[0] & FIFO_REAL_TIME_FILL_STATUS_MASK_V1; } else { - val[1] = MOD_STATUS_XT_V2_FIFO_FILL_STATUS_VAL; + val[0] = MOD_STATUS_XT_V2_FIFO_FILL_STATUS_VAL; rc = haptics_write(chip, chip->cfg_addr_base, - HAP_CFG_MOD_STATUS_SEL_REG, val, 2); + HAP_CFG_MOD_STATUS_XT_V2_REG, val, 1); + if (rc < 0) + return rc; + + val[0] = MOD_STATUS_SEL_FIFO_FILL_STATUS_VAL; + rc = haptics_write(chip, chip->cfg_addr_base, + HAP_CFG_MOD_STATUS_SEL_REG, val, 1); if (rc < 0) return rc;