浏览代码

ASoC: tlv320dac33: Limit the US_TO_SAMPLES macro

Limit the time window to maximum 1s in the macro.
The driver deals with much shorter times (<200ms).
This will fix a rare division by zero bug in Mode1.
This could happen, when the work is not executed in
time (within mode1_latency) after the interrupt.
In this case the DAC33 will not receive the needed
nSample command in time, and enters to an unknown
state, and won't recover.
In such event the time window will increase, and
eventually going to be bigger than 1s, resulting
devision by zero.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Peter Ujfalusi 14 年之前
父节点
当前提交
d54e1f4fdf
共有 1 个文件被更改,包括 1 次插入1 次删除
  1. 1 1
      sound/soc/codecs/tlv320dac33.c

+ 1 - 1
sound/soc/codecs/tlv320dac33.c

@@ -58,7 +58,7 @@
 	(1000000000 / ((rate * 1000) / samples))
 	(1000000000 / ((rate * 1000) / samples))
 
 
 #define US_TO_SAMPLES(rate, us) \
 #define US_TO_SAMPLES(rate, us) \
-	(rate / (1000000 / us))
+	(rate / (1000000 / (us < 1000000 ? us : 1000000)))
 
 
 #define UTHR_FROM_PERIOD_SIZE(samples, playrate, burstrate) \
 #define UTHR_FROM_PERIOD_SIZE(samples, playrate, burstrate) \
 	((samples * 5000) / ((burstrate * 5000) / (burstrate - playrate)))
 	((samples * 5000) / ((burstrate * 5000) / (burstrate - playrate)))