hwmon: qti_amoled_ecm: update ecm_reset_sdam_config()

Currently ECM_SEND_IRQ and ECM_WRITE_TO_SDAM offsets in first
SDAM is initialized to 0x03 to enable storing samples in two
SDAMs for ECM. With an additional SDAM for ECM, these registers
should be initialized accordingly. Support this by updating those
registers with a value based on number of SDAMs.

Change-Id: Icd262907e4fb71f8696b34f9ebf2463e281a2f66
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
This commit is contained in:
Subbaraman Narayanamurthy 2021-05-12 15:18:47 -07:00 committed by David Collins
parent b731ccd999
commit c96271dd6d

View File

@ -77,12 +77,15 @@
#define ECM_SEND_IRQ 0x5F
#define SEND_SDAM0_IRQ BIT(0)
#define SEND_SDAM1_IRQ BIT(1)
#define SEND_SDAM2_IRQ BIT(2)
#define ECM_WRITE_TO_SDAM 0x60
#define WRITE_SDAM0_DATA BIT(0)
#define WRITE_SDAM1_DATA BIT(1)
#define WRITE_SDAM2_DATA BIT(2)
#define OVERWRITE_SDAM0_DATA BIT(4)
#define OVERWRITE_SDAM1_DATA BIT(5)
#define OVERWRITE_SDAM2_DATA BIT(6)
#define ECM_AVERAGE_LSB 0x61
#define ECM_AVERAGE_MSB 0x62
@ -189,9 +192,6 @@ static struct amoled_ecm_sdam_config ecm_reset_config[] = {
{ ECM_SDAM0_INDEX, 0x6C },
{ ECM_SDAM1_INDEX, 0x46 },
{ ECM_MODE, 0x00 },
/* Valid only when ECM uses 2 SDAMs */
{ ECM_SEND_IRQ, 0x03 },
{ ECM_WRITE_TO_SDAM, 0x03 }
};
static int ecm_nvmem_device_write(struct nvmem_device *nvmem,
@ -210,6 +210,7 @@ static int ecm_nvmem_device_write(struct nvmem_device *nvmem,
static int ecm_reset_sdam_config(struct amoled_ecm *ecm)
{
int rc, i;
u8 val = 0, val2 = 0;
for (i = 0; i < ARRAY_SIZE(ecm_reset_config); i++) {
rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem,
@ -222,6 +223,23 @@ static int ecm_reset_sdam_config(struct amoled_ecm *ecm)
}
}
for (i = 0; i < ecm->num_sdams; i++) {
val |= (SEND_SDAM0_IRQ << i);
val2 |= (WRITE_SDAM0_DATA << i);
}
rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_SEND_IRQ, 1, &val);
if (rc < 0) {
pr_err("Failed to write %u to ECM_SEND_IRQ, rc=%d\n", val, rc);
return rc;
}
rc = ecm_nvmem_device_write(ecm->sdam[0].nvmem, ECM_WRITE_TO_SDAM, 1,
&val2);
if (rc < 0)
pr_err("Failed to write %u to ECM_WRITE_TO_SDAM, rc=%d\n", val2,
rc);
usleep_range(10000, 12000);
return rc;