Support specified seq and extra for various vibrating effect

The first 1 second vibrating would vibrate as a short vibrating
by "else if (value < 100 || aw869x->seq != 0)" because default
aw869x->seq is 0x01000000.

So fix it.

Change-Id: I3903ffd745cfeca63a72b5047ad5ad2867af822a
Signed-off-by: yangjq <yangjq@lenovo.com>
Reviewed-on: https://gerrit.mot.com/1229442
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
yangjq 2018-08-18 18:36:31 +08:00 • committed by Jianqi Yang
commit 04b5986bfb

View file

@ -1100,20 +1100,18 @@ static void aw869x_rtp_play(struct aw869x *aw869x, int value)
static void aw869x_vibrate(struct aw869x *aw869x, int value)
{
int seq;
mutex_lock(&aw869x->lock);
aw869x_haptic_stop(aw869x);
pr_info("%s: value=%d, aw869x->seq=0x%08x\n", __FUNCTION__, value, aw869x->seq);
if (value > 0 || aw869x->seq != 0) {
if (((aw869x->seq >> ((AW869X_SEQUENCER_SIZE - 1) * 8)) & 0xFF) >= 10) {
seq = (aw869x->seq >> ((AW869X_SEQUENCER_SIZE - 1) * 8)) & 0xFF;
pr_info("%s: value=%d, seq=%d\n", __FUNCTION__, value, seq);
if (value > 0 || seq > 2) {
if (seq >= 12)
aw869x_rtp_play(aw869x, 1);
aw869x->seq = 0;
} else if (value < 100 || aw869x->seq != 0) {
else if (value < 100 || seq > 2) {
aw869x_i2c_write_bits(aw869x, AW869X_REG_PWMDBG,
AW869X_BIT_PWMDBG_PWMCLK_MODE_MASK, AW869X_BIT_PWMDBG_PWMCLK_MODE_12KB);
#ifdef AW869X_HAPTIC_VBAT_MONITOR
aw869x_haptic_set_bst_mode(aw869x, AW869X_HAPTIC_BOOST_MODE);
#endif
aw869x_haptic_set_bst_vol(aw869x, AW869X_BIT_BSTCFG_BSTVOL_8P75V);
//aw869x_haptic_set_peak_cur(aw869x, AW869X_BIT_BSTCFG_PEAKCUR_3P5A);
aw869x_haptic_set_gain(aw869x, 0x20);
@ -1130,7 +1128,6 @@ static void aw869x_vibrate(struct aw869x *aw869x, int value)
hrtimer_start(&aw869x->timer,
ns_to_ktime((u64)value * NSEC_PER_MSEC), HRTIMER_MODE_REL);
*/
aw869x->seq = 0;
} else {
aw869x_i2c_write_bits(aw869x, AW869X_REG_PWMDBG,
AW869X_BIT_PWMDBG_PWMCLK_MODE_MASK, AW869X_BIT_PWMDBG_PWMCLK_MODE_12KB);
@ -1152,6 +1149,9 @@ static void aw869x_vibrate(struct aw869x *aw869x, int value)
}
schedule_work(&aw869x->vibrator_work);
}
/* Restore to default short waveform */
if (seq > 2)
aw869x->seq = 0;
}
mutex_unlock(&aw869x->lock);