From 433cbc1bde71d308feaa3e73b672ee8a9f859995 Mon Sep 17 00:00:00 2001 From: Konstantin Makariev Date: Mon, 13 Jul 2020 13:03:07 -0500 Subject: [PATCH] aw8697: optimize sequencer registers write Write all sequencer registers in one I2C transaction. Set WAVSEQ1 to 1 in vibrate function when it was not explicitly set Change-Id: I24e13813bd97b6afb4436f91e79090ea6cb51a78 Signed-off-by: Konstantin Makariev Reviewed-on: https://gerrit.mot.com/1680232 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Konstantin Makariev Submit-Approved: Jira Key --- drivers/misc/awinic/aw8697/aw8697.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/misc/awinic/aw8697/aw8697.c b/drivers/misc/awinic/aw8697/aw8697.c index 5266a7bee375..464e5647daa0 100644 --- a/drivers/misc/awinic/aw8697/aw8697.c +++ b/drivers/misc/awinic/aw8697/aw8697.c @@ -2649,10 +2649,12 @@ static void aw8697_vibrate(struct aw8697 *aw8697, int value) aw8697_rtp_play(aw8697, seq - AW8697_SEQ_NO_RTP_BASE); break; case HAPTIC_SHORT: - if (aw8697->seq[0] == 0) - aw8697->seq[0] = 0x01; + if (seq == 0) { + /* seq[0] expected from aw8697_seq_store */ + /* when implicit seq, use wave form 0x01 */ + aw8697_haptic_set_wav_seq(aw8697, 0x00, 0x01); + } aw8697->index = 0x01; - aw8697_haptic_set_wav_seq(aw8697, 0x00, aw8697->seq[0]); aw8697_haptic_set_wav_loop(aw8697, 0x00, 0x00); aw8697_haptic_ram_vbat_comp(aw8697, false); aw8697_haptic_play_wav_seq(aw8697, 0x01); @@ -3073,6 +3075,7 @@ static ssize_t aw8697_seq_store(struct device *dev, struct aw8697 *aw8697 = container_of(cdev, struct aw8697, cdev); #endif unsigned int i, val = 0; + unsigned char data[AW8697_WAV_SEQ_SIZE]; int rc; rc = kstrtouint(buf, 0, &val); @@ -3080,13 +3083,13 @@ static ssize_t aw8697_seq_store(struct device *dev, return rc; pr_debug("%s: value=%d\n", __func__, val); - - mutex_lock(&aw8697->lock); for (i = 0; i < AW8697_WAV_SEQ_SIZE; i++) { aw8697->seq[i] = (val >> ((AW8697_WAV_SEQ_SIZE-i-1) * 8)) & 0xFF; - pr_debug("%s: seq[%d]=%d\n", __func__, i, aw8697->seq[i]); - aw8697_haptic_set_wav_seq(aw8697, i, aw8697->seq[i]); + data[i] = aw8697->seq[i]; } + + mutex_lock(&aw8697->lock); + aw8697_i2c_writes(aw8697, AW8697_REG_WAVSEQ1, data, AW8697_WAV_SEQ_SIZE); mutex_unlock(&aw8697->lock); return count;