Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4049641ybg; Fri, 25 Oct 2019 12:35:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqygiG2RML55tctczMTspH8IwuPEsD10XDsEJmsathqf9Nl7gPcCuA+irELpfNH8MN4Q2N2j X-Received: by 2002:a05:6402:88c:: with SMTP id e12mr5721491edy.170.1572032112697; Fri, 25 Oct 2019 12:35:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572032112; cv=none; d=google.com; s=arc-20160816; b=LEidhXjBcOZ4yk+Qxmv6Qk5F9Rbd+MbelsUHMT/cw3NHLbi5DyVmTO5GEnhU05omnJ zemEeL+lwU/NjaNPEL6w9MTpgQh0rbRl0xsfShbtzMSDufPw9uw/lbmzfMaiLdHb/+tJ 4mgKDGUxOBdcLLNJiSDKfAlc5Z+aQQpaOcEieA+rc+D13G1v3IcNG6gOtofZt+AqLn6+ iVY0rzepwm6SHj7nbPD5BokYQCTG3Akmx0vPq0+y/kKHYcVn3pW7+eQuAzz30ISrqGHf IMhME1ZavQbqqP+BjfJai2bQHM+j04d+MIjBj8eWXJrkcQMn4G4i7PIj0O6xUEL7kYiJ JC3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=cNmn/ZoW6SFDMWyDV2IzsVRnVQw1MrtkbUOfePucd/0=; b=fZkSik6fNmdsoAl/D7gV3IXVqjtKiouPcvWUqadPVsc4FODZYUavU5FA+hkCz0rbvk INSUofeA+kt8DgrSP+V096Vk5Vd7A5tSiqG0KHYqN5JVHq/X4ndfdQdOnRvqXY4s+/BK Yhd9kPZHLOHXbqM1Ktky9f0h5Qqm3WbqS4J4hl9viEnbVNFYEzBOma2t1n0Grggt2ccW BbaQz38vgRTz2khLVJfJiQQSuVUvm9o8J7ng160/1B/n27fQ9sp7bB37NWT2FtjuYHUJ njkS5Wl5rGRdjyq4MBMNpJX8C9vDjttwnzvkDsmVubp7LihJa8847si0FiQ30kgguWCb SDQg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h4si2033091edd.189.2019.10.25.12.34.49; Fri, 25 Oct 2019 12:35:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2408753AbfJYJOy (ORCPT + 99 others); Fri, 25 Oct 2019 05:14:54 -0400 Received: from mga07.intel.com ([134.134.136.100]:39273 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2408744AbfJYJOx (ORCPT ); Fri, 25 Oct 2019 05:14:53 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Oct 2019 02:14:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,228,1569308400"; d="scan'208";a="400050841" Received: from brentlu-desk0.itwn.intel.com ([10.5.253.11]) by fmsmga006.fm.intel.com with ESMTP; 25 Oct 2019 02:14:50 -0700 From: Brent Lu To: alsa-devel@alsa-project.org Cc: Cezary Rojewski , Pierre-Louis Bossart , Liam Girdwood , Jie Yang , Mark Brown , Jaroslav Kysela , Takashi Iwai , Brent Lu , "Subhransu S . Prusty" , Richard Fontana , Tzung-Bi Shih , Kuninori Morimoto , Thomas Gleixner , Naveen M , linux-kernel@vger.kernel.org Subject: [PATCH] ASoC: eve: implement set_bias_level function for rt5514 Date: Fri, 25 Oct 2019 17:11:31 +0800 Message-Id: <1571994691-20199-1-git-send-email-brent.lu@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The first DMIC capture always fail (zero sequence data from PCM port) after using DSP hotwording function (i.e. Google assistant). This rt5514 codec requires to control mclk directly in the set_bias_level function. Implement this function in machine driver to control the ssp1_mclk clock explicitly could fix this issue. Signed-off-by: Brent Lu --- .../soc/intel/boards/kbl_rt5663_rt5514_max98927.c | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c index dc09a85..b546de8 100644 --- a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c +++ b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c @@ -653,6 +653,55 @@ static struct snd_soc_dai_link kabylake_dais[] = { }, }; +static int kabylake_set_bias_level(struct snd_soc_card *card, + struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level) +{ + struct snd_soc_component *component = dapm->component; + struct kbl_codec_private *priv = snd_soc_card_get_drvdata(card); + int ret = 0; + + if (!component || strcmp(component->name, RT5514_DEV_NAME)) + return 0; + + if (IS_ERR(priv->mclk)) + return 0; + + /* + * It's required to control mclk directly in the set_bias_level + * function for rt5514 codec or the recording function could + * break. + */ + switch (level) { + case SND_SOC_BIAS_PREPARE: + if (dapm->bias_level == SND_SOC_BIAS_ON) { + dev_dbg(card->dev, "Disable mclk"); + clk_disable_unprepare(priv->mclk); + } else { + dev_dbg(card->dev, "Enable mclk"); + ret = clk_set_rate(priv->mclk, 24000000); + if (ret) { + dev_err(card->dev, "Can't set rate for mclk, err: %d\n", + ret); + return ret; + } + + ret = clk_prepare_enable(priv->mclk); + if (ret) { + dev_err(card->dev, "Can't enable mclk, err: %d\n", + ret); + + /* mclk is already enabled in FW */ + ret = 0; + } + } + break; + default: + break; + } + + return ret; +} + static int kabylake_card_late_probe(struct snd_soc_card *card) { struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(card); @@ -692,6 +741,7 @@ static struct snd_soc_card kabylake_audio_card = { .owner = THIS_MODULE, .dai_link = kabylake_dais, .num_links = ARRAY_SIZE(kabylake_dais), + .set_bias_level = kabylake_set_bias_level, .controls = kabylake_controls, .num_controls = ARRAY_SIZE(kabylake_controls), .dapm_widgets = kabylake_widgets, -- 2.7.4