From patchwork Fri Dec 6 10:35:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 180918 Delivered-To: patch@linaro.org Received: by 2002:a92:3001:0:0:0:0:0 with SMTP id x1csp614999ile; Fri, 6 Dec 2019 02:35:57 -0800 (PST) X-Google-Smtp-Source: APXvYqxtcr6A5i9wQVcB7T3eqTdY5HLc1++wxp4hKY/NlvDBsrBW+eIRdPpyVZsvck/Uq7koYkA1 X-Received: by 2002:aca:ad11:: with SMTP id w17mr11911382oie.85.1575628557212; Fri, 06 Dec 2019 02:35:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575628557; cv=none; d=google.com; s=arc-20160816; b=ycKy8Wp4XFnhPmZaxelu3dlYvHb/ZgNQBUhDXNpMrJxLwC5GNA8S/D6Ht40lEV3NPx 9fLXPmfBQSVOAeunS1UC3pVRxpylyOEvr+W8UnqWqDmiH6Kj+8mVLoAkkbB7ADRv6Arh TC+ZyRuTl6pb3RB0hYDA2bSssDYHitr/l5v83i2dXa9cTTrihK4k6H9YJIEYIHx8HZlr uBdiYfcI+dTLc50mEsmIerMjLfaWuzLBA+WXX4A9YRI1Zy6JMrNm/ErlNNg/oQ+lLy+M /wpmQ+81laK4QoTcyAOxJOrtCRGg+rEsBgKQU65DrCjbIhCvKD2Ynb5Tu5Sw21q2pjBg OAPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=2P76kSoNDGNNbqOJn2kSGms/jkHQIG00/8B7zZ9IAWc=; b=gFutulzXAHYp95AlaOhO++mPDzzqigPtJbRDQStEsQsA/flybKMX/F276yS9ZZ8FFu 4Qz6hiIlqhbQs454/DASCmhxs6cKY6FH5C2fGSI48QIfp3sUpIRv9ZItMh4nozjdXtIx pqsHyet45M/Sq4+Rdo1U4RcWEOQDn5XqsVtbuRh2FI8aKZHHwKqf2j0ass0W9yP9KYER UqS2lLdJrcNVeOVV78QP85nkav9F2Pu3l16VMj9ELXd1+K1Pl4jtuJullpoUpqqBEH6L qXYLRxNwgbNKcuIrfuijPcmhd5i2+OysYJ6kJiUvznmBtM3TOsI1sl4/Uqz/ADzRu3NV wQgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=oZC+Mg3x; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o6si1691601otk.201.2019.12.06.02.35.56; Fri, 06 Dec 2019 02:35:57 -0800 (PST) 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; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=oZC+Mg3x; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726332AbfLFKfy (ORCPT + 27 others); Fri, 6 Dec 2019 05:35:54 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:43415 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726102AbfLFKfx (ORCPT ); Fri, 6 Dec 2019 05:35:53 -0500 Received: by mail-wr1-f65.google.com with SMTP id d16so7149482wre.10 for ; Fri, 06 Dec 2019 02:35:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2P76kSoNDGNNbqOJn2kSGms/jkHQIG00/8B7zZ9IAWc=; b=oZC+Mg3xodxXWHIkXMzl5MjCHXgHGP4BTZlEj8wbkkQKrb/xTAZz2TcgxnPz/8M8Ap SEVGG0mDu5DnWf8GLyFVlv6oV5oWGyAdn89M1wQTHdjQ0aBd0UHL8VE6vlwJu9lIrQsI IHEs5lBcbWtd66Zi1dpKu6KPBp8rTTQyW/0LSAUEUts5pg5tJQ3SJryqgWnpN0xxKaNY 8awbJssV2Vk6/v9/6qOjuAPxok8m1mCzS66eaw5hBVwaHJNYSnntdObS/5Op3AiyHbSu 4DPDUt5Bw+Dcqzr7sya9ODOXyLswtKpQIvCxPTS8lkAZfIPF5WWNJp9urxJbiuJRQGhS q8hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2P76kSoNDGNNbqOJn2kSGms/jkHQIG00/8B7zZ9IAWc=; b=DIkD6oJUqJJHBpLcSwsgdyzdIw0qLhmWMd9qKVVRGe04tPZ0DterK74j2OJeU7LC9n xox+2+MTX4A7fHsrlGV5OZV5i2tuyDMIcK0G1m51t3d2NcoJSbkOAQs1zIeuuVynbhHY g6av3N8z6nB8LVKv4EPlZNtcfbhSksAsTize2Eo+3W5RNrqSvfis8qpYeFvrP0bvqJGI rcMQYU35/zksx/ptt9vy9S8Rhn/ibjbuwecYTItokiu309X8B+DjvbY26CVenbfkgdj+ P3HnpfhYeTg16cWX9HGxOkEEYICKZv8Fwsd+aR8IyfffWQLsTQnq4VD7ItpS2urPaWfo cTAg== X-Gm-Message-State: APjAAAWm8SeY5tqKBLLIMEJHPsdEp0Blo/6KoioQ5rgiUxphkWnDbwH2 XoAQHQhw4FDd4NKa5FcZjT8eRw== X-Received: by 2002:a5d:404b:: with SMTP id w11mr15822520wrp.171.1575628551056; Fri, 06 Dec 2019 02:35:51 -0800 (PST) Received: from starbuck.baylibre.local (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.googlemail.com with ESMTPSA id n14sm2164013wmk.0.2019.12.06.02.35.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 02:35:50 -0800 (PST) From: Jerome Brunet To: Mark Brown , Liam Girdwood Cc: Jerome Brunet , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] ASoC: hdmi-codec: re-introduce mutex locking again Date: Fri, 6 Dec 2019 11:35:42 +0100 Message-Id: <20191206103542.485224-1-jbrunet@baylibre.com> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 X-Patchwork-Bot: notify Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The dai codec needs to ensure that on one dai is used at any time. This is currently protected by bit atomic operation. With this change, it done with a mutex instead. This change is not about functionality or efficiency. It is done with the hope that it help maintainability in the future. Suggested-by: Mark Brown Signed-off-by: Jerome Brunet --- sound/soc/codecs/hdmi-codec.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) -- 2.23.0 diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c index f8b5b960e597..543363102d03 100644 --- a/sound/soc/codecs/hdmi-codec.c +++ b/sound/soc/codecs/hdmi-codec.c @@ -274,7 +274,8 @@ struct hdmi_codec_priv { uint8_t eld[MAX_ELD_BYTES]; struct snd_pcm_chmap *chmap_info; unsigned int chmap_idx; - unsigned long busy; + struct mutex lock; + bool busy; struct snd_soc_jack *jack; unsigned int jack_status; }; @@ -390,9 +391,10 @@ static int hdmi_codec_startup(struct snd_pcm_substream *substream, struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); int ret = 0; - ret = test_and_set_bit(0, &hcp->busy); - if (ret) { + mutex_lock(&hcp->lock); + if (hcp->busy) { dev_err(dai->dev, "Only one simultaneous stream supported!\n"); + mutex_unlock(&hcp->lock); return -EINVAL; } @@ -405,21 +407,21 @@ static int hdmi_codec_startup(struct snd_pcm_substream *substream, if (hcp->hcd.ops->get_eld) { ret = hcp->hcd.ops->get_eld(dai->dev->parent, hcp->hcd.data, hcp->eld, sizeof(hcp->eld)); + if (ret) + goto err; + + ret = snd_pcm_hw_constraint_eld(substream->runtime, hcp->eld); + if (ret) + goto err; - if (!ret) { - ret = snd_pcm_hw_constraint_eld(substream->runtime, - hcp->eld); - if (ret) - goto err; - } /* Select chmap supported */ hdmi_codec_eld_chmap(hcp); } - return 0; + + hcp->busy = true; err: - /* Release the exclusive lock on error */ - clear_bit(0, &hcp->busy); + mutex_unlock(&hcp->lock); return ret; } @@ -431,7 +433,9 @@ static void hdmi_codec_shutdown(struct snd_pcm_substream *substream, hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; hcp->hcd.ops->audio_shutdown(dai->dev->parent, hcp->hcd.data); - clear_bit(0, &hcp->busy); + mutex_lock(&hcp->lock); + hcp->busy = false; + mutex_unlock(&hcp->lock); } static int hdmi_codec_hw_params(struct snd_pcm_substream *substream, @@ -811,6 +815,8 @@ static int hdmi_codec_probe(struct platform_device *pdev) return -ENOMEM; hcp->hcd = *hcd; + mutex_init(&hcp->lock); + daidrv = devm_kcalloc(dev, dai_count, sizeof(*daidrv), GFP_KERNEL); if (!daidrv) return -ENOMEM;