From c84e4d88c3ec721a4b5c66f8f3ea4e64fd65808b Mon Sep 17 00:00:00 2001 From: Subbaraman Narayanamurthy Date: Wed, 9 Sep 2020 20:19:37 -0700 Subject: [PATCH 1/2] hwmon: qti_amoled_ecm: Fix initial value for ECM_WRITE_TO_SDAM Whenever ECM is enabled by the user, some SDAM registers are initialized for the proper operation. Change the initial value for ECM_WRITE_TO_SDAM as per the hardware recommendation. Change-Id: I7a414bb83640178055f3c5a463daa6328aaef69c Signed-off-by: Subbaraman Narayanamurthy --- drivers/hwmon/qti_amoled_ecm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hwmon/qti_amoled_ecm.c b/drivers/hwmon/qti_amoled_ecm.c index 5fc0fe3bb8ef..220dd515e630 100644 --- a/drivers/hwmon/qti_amoled_ecm.c +++ b/drivers/hwmon/qti_amoled_ecm.c @@ -183,7 +183,7 @@ static struct amoled_ecm_sdam_config ecm_reset_config[] = { { ECM_MODE, 0x00 }, /* Valid only when ECM uses 2 SDAMs */ { ECM_SEND_IRQ, 0x03 }, - { ECM_WRITE_TO_SDAM, 0x33 } + { ECM_WRITE_TO_SDAM, 0x03 } }; static int ecm_reset_sdam_config(struct amoled_ecm *ecm) From dbe6b304e8a00445dfc475c0c8b388bbe3a6fe67 Mon Sep 17 00:00:00 2001 From: Subbaraman Narayanamurthy Date: Wed, 9 Sep 2020 20:18:12 -0700 Subject: [PATCH 2/2] hwmon: qti_amoled_ecm: add debug log for nvmem writes Add a wrapper function ecm_nvmem_device_write() which can log the nvmem writes. This is useful for debugging. Change-Id: Icc4ee6ff50b46f92e0169660e3400d80f7d4da37 Signed-off-by: Subbaraman Narayanamurthy --- drivers/hwmon/qti_amoled_ecm.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/hwmon/qti_amoled_ecm.c b/drivers/hwmon/qti_amoled_ecm.c index 220dd515e630..91b8cd101ce1 100644 --- a/drivers/hwmon/qti_amoled_ecm.c +++ b/drivers/hwmon/qti_amoled_ecm.c @@ -186,12 +186,25 @@ static struct amoled_ecm_sdam_config ecm_reset_config[] = { { ECM_WRITE_TO_SDAM, 0x03 } }; +static int ecm_nvmem_device_write(struct nvmem_device *nvmem, + unsigned int offset, + size_t bytes, void *buf) +{ + size_t i; + u8 *ptr = buf; + + for (i = 0; i < bytes; i++) + pr_debug("Wrote %#x to %#x\n", *ptr++, offset + i); + + return nvmem_device_write(nvmem, offset, bytes, buf); +} + static int ecm_reset_sdam_config(struct amoled_ecm *ecm) { int rc, i; for (i = 0; i < ARRAY_SIZE(ecm_reset_config); i++) { - rc = nvmem_device_write(ecm->sdam[0].nvmem, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ecm_reset_config[i].reg, 1, &ecm_reset_config[i].reset_val); if (rc < 0) { @@ -212,7 +225,7 @@ static int amoled_ecm_enable(struct amoled_ecm *ecm) int rc; if (data->frames) { - rc = nvmem_device_write(ecm->sdam[0].nvmem, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_N_ESWIRE_COUNT_LSB, 2, &data->frames); if (rc < 0) { pr_err("Failed to write swire count to SDAM, rc=%d\n", @@ -241,7 +254,7 @@ static int amoled_ecm_enable(struct amoled_ecm *ecm) return rc; } - rc = nvmem_device_write(ecm->sdam[0].nvmem, ECM_MODE, 1, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_MODE, 1, &data->mode); if (rc < 0) { pr_err("Failed to write ECM mode to SDAM, rc=%d\n", rc); @@ -286,7 +299,7 @@ static int amoled_ecm_disable(struct amoled_ecm *ecm) return rc; } - rc = nvmem_device_write(ecm->sdam[0].nvmem, ECM_AVERAGE_LSB, 2, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_AVERAGE_LSB, 2, &ecm->data.avg_current); if (rc < 0) { pr_err("Failed to write ECM average to SDAM, rc=%d\n", rc); @@ -587,7 +600,7 @@ static irqreturn_t sdam_full_irq_handler(int irq, void *_ecm) } overwrite &= ~(OVERWRITE_SDAM0_DATA << sdam_num); - rc = nvmem_device_write(ecm->sdam[0].nvmem, ECM_WRITE_TO_SDAM, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_WRITE_TO_SDAM, 1, &overwrite); if (rc < 0) { pr_err("Failed to write ECM_WRITE_TO_SDAM to SDAM, rc=%d\n", @@ -622,7 +635,7 @@ static irqreturn_t sdam_full_irq_handler(int irq, void *_ecm) } overwrite |= (OVERWRITE_SDAM0_DATA << sdam_num); - rc = nvmem_device_write(ecm->sdam[0].nvmem, ECM_WRITE_TO_SDAM, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_WRITE_TO_SDAM, 1, &overwrite); if (rc < 0) { pr_err("Failed to write ECM_WRITE_TO_SDAM to SDAM, rc=%d\n", @@ -641,7 +654,7 @@ static irqreturn_t sdam_full_irq_handler(int irq, void *_ecm) data->num_m_samples++; buf[0] = (ECM_SDAM0_FULL << sdam_num); - rc = nvmem_device_write(ecm->sdam[0].nvmem, ECM_STATUS_CLR, 1, + rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_STATUS_CLR, 1, &buf[0]); if (rc < 0) { pr_err("Failed to clear interrupt status in SDAM, rc=%d\n",