浏览代码

ASoC: Improve DAPM pop_wait delays

Currently during pop/click debug we're inserting a delay both after
every log message we generate and at explicit points in the sequence,
slowing things down even further than they need to be especially when
many writes get coalesced by the sequence generation code.

Remove the per-printk delay and ensure that we have explicit delays
where we say we want them.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Mark Brown 15 年之前
父节点
当前提交
692247196d
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      sound/soc/soc-dapm.c

+ 2 - 2
sound/soc/soc-dapm.c

@@ -97,7 +97,6 @@ static void pop_dbg(u32 pop_time, const char *fmt, ...)
 
 
 	if (pop_time) {
 	if (pop_time) {
 		vprintk(fmt, args);
 		vprintk(fmt, args);
-		pop_wait(pop_time);
 	}
 	}
 
 
 	va_end(args);
 	va_end(args);
@@ -314,8 +313,8 @@ static int dapm_update_bits(struct snd_soc_dapm_widget *widget)
 		pop_dbg(codec->pop_time, "pop test %s : %s in %d ms\n",
 		pop_dbg(codec->pop_time, "pop test %s : %s in %d ms\n",
 			widget->name, widget->power ? "on" : "off",
 			widget->name, widget->power ? "on" : "off",
 			codec->pop_time);
 			codec->pop_time);
-		snd_soc_write(codec, widget->reg, new);
 		pop_wait(codec->pop_time);
 		pop_wait(codec->pop_time);
+		snd_soc_write(codec, widget->reg, new);
 	}
 	}
 	pr_debug("reg %x old %x new %x change %d\n", widget->reg,
 	pr_debug("reg %x old %x new %x change %d\n", widget->reg,
 		 old, new, change);
 		 old, new, change);
@@ -1075,6 +1074,7 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
 
 
 	pop_dbg(codec->pop_time, "DAPM sequencing finished, waiting %dms\n",
 	pop_dbg(codec->pop_time, "DAPM sequencing finished, waiting %dms\n",
 		codec->pop_time);
 		codec->pop_time);
+	pop_wait(codec->pop_time);
 
 
 	return 0;
 	return 0;
 }
 }