Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1379554ybh; Thu, 16 Jul 2020 10:26:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw1hu5NK2np72o8ve9XXhyrszksoMEFrzdAIh61jUCbxs+A2Xa4xtxNgmYKsIqGV+B+hVMS X-Received: by 2002:aa7:cdca:: with SMTP id h10mr5594369edw.285.1594920373534; Thu, 16 Jul 2020 10:26:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594920373; cv=none; d=google.com; s=arc-20160816; b=w3kQ4hP55PHfdWxi9kfnN5p+vglLrWXtymy0Vr656saLB6cTqwioHlBVnxotQ+3qwF wBNcdFmQDcniYI+ZD7RoNU0K/558gHWSokC1pcq09OPL/mom8TTclBvLUAOZeZms7rEI 8c+rxKWxu8r1IjL0y+ipAEVE4TsbfBlXV6xaPYH+rZ9xpEnx8Y4i/VN8gEttejh1h1/3 /HW1q0SUmPqgIm4a5uRMD+35l7rp8rBchyjkKiyZsowBO/en0jWxOpOLqESCew+6mwYz acOP95E5tDT9wVvGyH7UEUHwt0XmlEgBzsgwIm4W5XXOlOiQdVtuJgeaLBt1Cqg5NB1d Nnyw== 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=ap6sCeX+vfsgknYFWUWzqHRMYIsUrhYyQY0OJzIHClo=; b=hrkUD/H8Man2tgdPn/mPHGGYGRmde/uDHHQkpIsedUfMwIgL/mI/temkX7Ed+CKw7y oCnJRNfO7ABUB/bIWihehgdXazQOV1UNsFixWMTPAgy9LSuAbmzsBtYnGQhq75i8OXL3 EF6GJQERJuT8zNnkP7QzsrIZsrKXczV0944LmLOTsdg4a8fOQ3IRk7WSlH+sfQbylVjQ S4iYQ8d7fJ4NibxhkPZBXUUgN4lUHPANhoiIVAWBPYaBvn9dlj7k7L1mps8LPACX1rg+ 3rkmuUuZiXeF3H2Mc/xos8cphAQ7/F9bJxyCux05GGIfKpIcTqrp0vDmKuZBFo3IdRxb g6MA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=S6DDIKAe; 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 d19si3707314ejt.396.2020.07.16.10.25.50; Thu, 16 Jul 2020 10:26:13 -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=S6DDIKAe; 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 S1728630AbgGPRXq (ORCPT + 99 others); Thu, 16 Jul 2020 13:23:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728126AbgGPRXp (ORCPT ); Thu, 16 Jul 2020 13:23:45 -0400 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DBF5C061755 for ; Thu, 16 Jul 2020 10:23:45 -0700 (PDT) Received: by mail-ej1-x642.google.com with SMTP id ga4so7397876ejb.11 for ; Thu, 16 Jul 2020 10:23:45 -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=ap6sCeX+vfsgknYFWUWzqHRMYIsUrhYyQY0OJzIHClo=; b=S6DDIKAesPw5Cjx89b0HuzwbTsFk9QhmWPt5VzTZ6wA2Uh4QVf36cFYxTJql64zLQA FLaSC6H2+WAaj2PpaonR0HyxRuPDL0NnUTJEY6UiUZ714K0v+omvP7NnEiex0K8R8B13 F2CaY9/LU+DAdSIHZe1+/K45Rg3SIpYjxFlwNXp8wBNjT02Z3Gqhr19q4ptq39uYL196 uE9UCQkcTzrI/LgOHoEeGt/diY69YXNked59X49Dh9ODuonOtSNYY/1TwCgELzM5YgwB wm64dM1NMTBfZJnZE0T/apcsaKb5ybLGpLp4bCw3RTjsNIpQrIzA07yUMfyVIlYTqTJ+ ZfMQ== 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=ap6sCeX+vfsgknYFWUWzqHRMYIsUrhYyQY0OJzIHClo=; b=ViPSoOHEyJ4LiVvzDprKk9Qi2sJ8rDj6imlHhBv/oQi71GcsnybT9b1Nf62wJSQcNp MtygoRataY0yGi6hMmt2Bn3x8dD+7oCeGKRBlPyRd1kciA0QGAdqIDZLp9+5sUT0Rw8P PPrIwlcvVy8wlAM1Dy/Ges9QptQ/W1YIhZ4wVH0R5vqjzAfNnPLLk7zxzdeVIzpNICHB n5XbYUX2c71UyC8iyGhSBKGxIbwSP9BA34UqwujS5tVlKtELe+It9OOnsNzJ51oHXV7Z snBJpzVzy2OqkhnPxg1OXBXa/t4NPM8Vn9QyeX/wyLtgBtWrHKtQxucQsP7ksmCEHSQi ubYg== X-Gm-Message-State: AOAM5333i7gxUixzq0xmydQmasAxUVe5VkwHj7D9G/jopnr2gxD5rrBs GGekn3Ws4kuivGbKbMtNWEwIgN3KSs64QpIQcRNFGYnkKy8= X-Received: by 2002:a17:906:29d8:: with SMTP id y24mr4685468eje.212.1594920223732; Thu, 16 Jul 2020 10:23:43 -0700 (PDT) MIME-Version: 1.0 References: <20200716170914.3623060-1-yuhsuan@chromium.org> In-Reply-To: <20200716170914.3623060-1-yuhsuan@chromium.org> From: Guenter Roeck Date: Thu, 16 Jul 2020 10:23:32 -0700 Message-ID: Subject: Re: [PATCH v2] ASoC: cros_ec_codec: Reset I2S RX when probing To: Yu-Hsuan Hsu Cc: linux-kernel , Tzung-Bi Shih , Cheng-Yi Chiang , Enric Balletbo i Serra , 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: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) { .... } } 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). 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 >