From 34aa364e6c962beb0f47b7c7cfd7e38ee5dfd930 Mon Sep 17 00:00:00 2001 From: Konstantin Makariev Date: Wed, 22 Jul 2020 14:05:39 -0500 Subject: [PATCH] aw8697: improve latency When updating register value by mask, avoid write transfer when old and ne values are identical. Change-Id: Ie9a1a51684b106ee05b893805d2a3a468aa1b812 Signed-off-by: Konstantin Makariev Reviewed-on: https://gerrit.mot.com/1701667 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Ryan Lattrel Reviewed-by: Igor Kovalenko Submit-Approved: Jira Key --- drivers/misc/awinic/aw8697/aw8697.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/misc/awinic/aw8697/aw8697.c b/drivers/misc/awinic/aw8697/aw8697.c index 464e5647daa0..899c46a7a7d9 100644 --- a/drivers/misc/awinic/aw8697/aw8697.c +++ b/drivers/misc/awinic/aw8697/aw8697.c @@ -196,12 +196,15 @@ static int aw8697_i2c_write_bits(struct aw8697 *aw8697, unsigned char reg_addr, unsigned int mask, unsigned char reg_data) { - unsigned char reg_val = 0; + unsigned char oval = 0; + unsigned char nval; - aw8697_i2c_read(aw8697, reg_addr, ®_val); - reg_val &= mask; - reg_val |= reg_data; - aw8697_i2c_write(aw8697, reg_addr, reg_val); + aw8697_i2c_read(aw8697, reg_addr, &oval); + nval = oval; + nval &= mask; + nval |= reg_data; + if (oval != nval) + aw8697_i2c_write(aw8697, reg_addr, nval); return 0; }