Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp2025324ybh; Fri, 17 Jul 2020 07:33:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz2imFLQER7xy6up70FzdCKWKBmOHk/UhusRJMnHRKGwL53mbgycudAZekSf8WrMtxg5ynd X-Received: by 2002:a17:906:aac9:: with SMTP id kt9mr8563030ejb.488.1594996389340; Fri, 17 Jul 2020 07:33:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594996389; cv=none; d=google.com; s=arc-20160816; b=nM3x90qSKakK1dTFemFQe7MtuHCxtmGC/pcbGQsFRuqiggD+aGBIvvrb9/g0q1JTC6 tVIvjP3+c8+C9YROopIa1NKsSmuOo2b35t2n5Wg6UHTdJfzYth/Y84xbNuo1f2Zjgheh 5Sei1mbfwaszms6iTOyexvF0SwujVi1g3DB0r67oMOiHYCYLdjymUzEIwnLjOt2FvS2Z PVZ6XafjB9zWiOPE/gdTeDankHQI/pbGp7MGxz5ArhFDH1wkOHFoKM/uAx0VaefjF6P3 QBEAZLg0tW+Zg3qk4KTHNqcZXekeXU9XceC7ZgpLex8Ug/CoU8FRve5AcnktZmUfeccz i50g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=zW8Tx5F9J8OHnFWh/HH8a3bm9XWpmViZ4XegdyqY93E=; b=a9eDUA1CzCNaEN0tKvv3fr8v3TXpFxi7AuRp9MpdJsuOSvlJETlfByvtsjKMMbiPlx DmqEpvaHbHHxbMEHZhOJAi1xj3j2S8a5C+jNKYMUSuRr+f8Ku4e94rgt3ve8B0HtlWXQ 3j786nWbrdbSX/er+Zw2KDFUpO/NOoF66mhHe8I9KRbw6PckIoxEPIXz7HUHN6QBcpHZ kjuMMoTYv9r5lkC+od5WZZvrhqeR/bTV5NNhT4WbWNzpwO5Wgcut8e1i/G00MHQuJya+ kyOGr2DnUtdkX69ZN9vuY+n+FovELlkC+TFYqHe7xf8IB6rikbV0YBG0UXCUK/iRW7Hv E98w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jtQUJdXb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s23si5080181eju.242.2020.07.17.07.32.45; Fri, 17 Jul 2020 07:33:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jtQUJdXb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726446AbgGQOcj (ORCPT + 99 others); Fri, 17 Jul 2020 10:32:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44524 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726079AbgGQOci (ORCPT ); Fri, 17 Jul 2020 10:32:38 -0400 Received: from mail-ej1-x643.google.com (mail-ej1-x643.google.com [IPv6:2a00:1450:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C6FDC0619D2 for ; Fri, 17 Jul 2020 07:32:38 -0700 (PDT) Received: by mail-ej1-x643.google.com with SMTP id lx13so11109892ejb.4 for ; Fri, 17 Jul 2020 07:32:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zW8Tx5F9J8OHnFWh/HH8a3bm9XWpmViZ4XegdyqY93E=; b=jtQUJdXblGi/ryS3Z6ju0NFNquil2t7oPz+mOIhqRlB4n+GfCiVVFAt70VBEuVEOem cPhV/I5KS+5BsUt7ORCFroCirTq5B5yUvVKEMue3guU8lcD2N5dTh/MxIJK5U52DB5hW zjsODvitaaWNmUA4vh1bWfvs0gJmBas/XDonDhN9kLnbFY0TwUVVi9Te1XV0iaOVKG/0 6qZO9eBqXauhvJS+buYBg6K54EUu7JI19FodzDRNpFYeGhK/SHRQbxxbYaNTvnArQOkW AhD4ngtgayXc8OeJSgQiHBnOGgt6uxlfcTkElwzfr3sm9mr6QnDsxRU/Vif4CImCz5Rw XoAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zW8Tx5F9J8OHnFWh/HH8a3bm9XWpmViZ4XegdyqY93E=; b=rlOAPOfZrqY/nMnuqdUCXd8A12WCV60W0bvJed29CeiHLKwLXEXOPlJufLya1JTUku eGbDBLfBUrzv4iG8AtPKJo/AZsA09dunB4POr3njzfhiQYX5uEcpk6rNQ6T3zP8/mF1b j1/KM/052fZvSam6IJi2u3hgzwaGtn5q0p0ZjXir2ucOkE3cw/ruL2IGV+L2OYnwnCZe Pp6oKWaX0UrqfnkWL3zHPp3khwRbp8uNpL+LED44MLIyqF5mG9W2wQDL93HQgsaOIPwW seIpKgkwSSAhdhTI/7K8DUhMH+rgWTdxZvytnccG5Vp72jkSfsQal2uv++qz+bYFjtVQ I/wA== X-Gm-Message-State: AOAM530YtOaI7OXyuTSKf4zCEnzePpG+i3zHQ7b/CO6Fldb7F2L8bs+M Gj3Xu9nTp42Eq859nBrSge/TAbkeVNTkknFge1E8SA== X-Received: by 2002:a17:907:41dc:: with SMTP id og20mr9208765ejb.183.1594996356749; Fri, 17 Jul 2020 07:32:36 -0700 (PDT) MIME-Version: 1.0 References: <20200716170914.3623060-1-yuhsuan@chromium.org> In-Reply-To: From: Guenter Roeck Date: Fri, 17 Jul 2020 07:32:25 -0700 Message-ID: Subject: Re: [PATCH v2] ASoC: cros_ec_codec: Reset I2S RX when probing To: Enric Balletbo i Serra Cc: Yu-Hsuan Hsu , linux-kernel , Tzung-Bi Shih , Cheng-Yi Chiang , Guenter Roeck , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Benson Leung , ALSA development Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 16, 2020 at 10:47 AM Enric Balletbo i Serra wrote: > > Hi, > > On 16/7/20 19:23, Guenter Roeck wrote: > > On Thu, Jul 16, 2020 at 10:09 AM Yu-Hsuan Hsu wrote: > >> > >> It is not guaranteed that I2S RX is disabled when the kernel booting. > >> For example, if the kernel crashes while it is enabled, it will keep > >> enabled until the next time EC reboots. Reset I2S RX when probing to > >> fix this issue. > >> > >> Signed-off-by: Yu-Hsuan Hsu > >> --- > >> drivers/platform/chrome/cros_ec_proto.c | 7 ++++++- > >> include/linux/platform_data/cros_ec_commands.h | 1 + > >> sound/soc/codecs/cros_ec_codec.c | 9 +++++++++ > >> 3 files changed, 16 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c > >> index 3e745e0fe092c..2c60690d7147c 100644 > >> --- a/drivers/platform/chrome/cros_ec_proto.c > >> +++ b/drivers/platform/chrome/cros_ec_proto.c > >> @@ -572,7 +572,12 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev, > >> return -ENOTSUPP; > >> } else if (msg->result != EC_RES_SUCCESS) { > >> dev_dbg(ec_dev->dev, "Command result (err: %d)\n", msg->result); > >> - return -EPROTO; > >> + switch (msg->result) { > >> + case EC_RES_INVALID_PARAM: > >> + return -EINVAL; > > > > As we have learned, this may impact other callers of > > cros_ec_cmd_xfer_status() which only accept -EPROTO as error return > > value. In addition to that, the code is odd: > > > > if (msg->result == EC_RES_INVALID_VERSION) { > > ... > > } else if (msg->result != EC_RES_SUCCESS) { > > switch (msg->result) { > > .... > > } > > } > > > > Ack, this is odd. > > > I really dislike the notion of changing error return values of > > cros_ec_cmd_xfer_status() one by one. That can only cause ongoing > > trouble with callers expecting specific error return codes (as we have > > already seen). > > > > Hmm, that's a good point. Ok. > > Let's apply the Guenter's patch that maps the errors *and* fix the callers of > cros_ec_cmd_xfer_status which only accept -EPROTO (there are few). > > Yu-Hsuan, can you take care of this and send a patch series with all the > required patches? If not, I can work on this next week. > I can look into it as well. Let me know - I don't want to duplicate work. Guenter > Thanks, > Enric > > > Guenter > > > >> + default: > >> + return -EPROTO; > >> + } > >> } > >> > >> return ret; > >> diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h > >> index 69210881ebac8..11ce917ca924c 100644 > >> --- a/include/linux/platform_data/cros_ec_commands.h > >> +++ b/include/linux/platform_data/cros_ec_commands.h > >> @@ -4598,6 +4598,7 @@ enum ec_codec_i2s_rx_subcmd { > >> EC_CODEC_I2S_RX_SET_SAMPLE_DEPTH = 0x2, > >> EC_CODEC_I2S_RX_SET_DAIFMT = 0x3, > >> EC_CODEC_I2S_RX_SET_BCLK = 0x4, > >> + EC_CODEC_I2S_RX_RESET = 0x5, > >> EC_CODEC_I2S_RX_SUBCMD_COUNT, > >> }; > >> > >> diff --git a/sound/soc/codecs/cros_ec_codec.c b/sound/soc/codecs/cros_ec_codec.c > >> index f23956cf4ed84..b5ff30b7f1aa8 100644 > >> --- a/sound/soc/codecs/cros_ec_codec.c > >> +++ b/sound/soc/codecs/cros_ec_codec.c > >> @@ -1034,6 +1034,15 @@ static int cros_ec_codec_platform_probe(struct platform_device *pdev) > >> } > >> priv->ec_capabilities = r.capabilities; > >> > >> + /* Reset EC codec I2S RX. */ > >> + p.cmd = EC_CODEC_I2S_RX_RESET; > >> + ret = send_ec_host_command(priv->ec_device, EC_CMD_EC_CODEC_I2S_RX, > >> + (uint8_t *)&p, sizeof(p), NULL, 0); > >> + if (ret == -EINVAL) > >> + dev_info(dev, "Missing reset command. Please update your EC firmware.\n"); > >> + else if (ret) > >> + dev_err(dev, "failed to EC_CODEC_I2S_RESET: %d\n", ret); > >> + > >> platform_set_drvdata(pdev, priv); > >> > >> ret = devm_snd_soc_register_component(dev, &i2s_rx_component_driver, > >> -- > >> 2.27.0.389.gc38d7665816-goog > >>