Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c94df0b2 authored by Fenglin Wu's avatar Fenglin Wu
Browse files

input: qcom-hv-haptics: only use 4-byte writes when refilling FIFO



The haptics module supports writing FIFO samples using 4-byte burst
mode as well as 1-byte mode. During FIFO refilling, if a 1-byte write
was used, then the hardware would fill zeros automatically after that
to keep the FIFO data 4-byte aligned. When this happened in the middle
of playing, the hardware inserted 0 values would cause spurs on the
haptics output. To fix this, only use 4-byte burst writes during FIFO
refilling until the end of the play.

Change-Id: I0441942585e0e0d5da62ec4a7123b2763b292739
Signed-off-by: default avatarFenglin Wu <fenglinw@codeaurora.org>
parent fa43b983
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2282,8 +2282,19 @@ static irqreturn_t fifo_empty_irq_handler(int irq, void *data)
		if (num < 0)
			return IRQ_HANDLED;

		/*
		 * With HAPTICS_PATTERN module revision 2.0 and above, if use
		 * 1-byte write before 4-byte write, the hardware would insert
		 * zeros in between to keep the FIFO samples 4-byte aligned, and
		 * the inserted 0 values would cause HW stop driving hence spurs
		 * will be seen on the haptics output. So only use 1-byte write
		 * at the end of FIFO streaming.
		 */
		if (samples_left <= num)
			num = samples_left;
		else if ((chip->ptn_revision >= HAP_PTN_V2) &&
				(num % HAP_PTN_V2_FIFO_DIN_NUM))
			num -= (num % HAP_PTN_V2_FIFO_DIN_NUM);

		samples = fifo->samples + status->samples_written;