應該說不算解決, 算是用改驅動的方法避掉這個問題
硬體有個PIN拉到喇叭, 此PIN為SABRESD_CODEC_PWN_EN => IMX_GPIO_NR(4, 10)
此PIN已被設為GPIO
然後爆音產生的點在sgtl5000.c的small_pop_event的SND_SOC_DAPM_PRE_PMD這個case
HIGH應該是1(true), LOW為0(false)
1. 所以在產生的爆音點上關閉喇叭(將此PIN拉HIGH), 需要mdelay(500), 不然爆音仍是會發生
case SND_SOC_DAPM_PRE_PMD:
gpio_set_value(SABRESD_CODEC_PWN_EN, true);
mdelay(500);
break;
2.在某個點關閉喇叭, 一定要在播放聲音時開啟喇叭(將此PIN拉LOW)
static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{
gpio_set_value(SABRESD_CODEC_PWN_EN, false);
struct snd_soc_pcm_runtime *rtd = substream->private_data
3.打完收工
|