Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp746765ybn; Tue, 24 Sep 2019 08:54:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqzWnVRMtu2nT2PRbVdVDQoaeW50iyVZR5urVfKiR5akjs4OJbgnNTGyr3YkExwKJBFkSe7B X-Received: by 2002:a7b:c5c2:: with SMTP id n2mr833746wmk.20.1569340445782; Tue, 24 Sep 2019 08:54:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569340445; cv=none; d=google.com; s=arc-20160816; b=IV7YCkJ/h/WJ69F46KzBvgX3qMNcAcvstDIW8p9oo+rD6pzACoZPbFQN127rygQ7uO VzGRLonEhdzWdNT/5awhgc4W+/zkQYkrYN25K8izpSZ17X/522dxjVn53d0QPaOFDbuA yIu/a5EYxUyuJyY8OgpKUQKdoK1ZBY/4D2u9FqgAmoodt2H4KX+ZQJCmfFeWKCY6GxbK wrz0xXcObfbLdXtPImjASzJw51sKqdHLiCgdazUHma1EQBZ+V/KuqEcFDxQt/oOzALsh EX21K00yJr24g0yyyAg4he1nVZtm94Xv+59Plj3mWPW4Dyh10YLMdLKf89HnbgXsUYcY yy9w== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=X+y2DZi8P0ZgwmfatIBCZZFKWx1TanIZ7M/kn1ZXxtA=; b=VwcWAGtG5ha5dtnjc0tcOR2NfU3XU9Fo4ndoLGKelAey1eb/yF5Oak8nWDOQJyEbd6 TAfcat995oiSEoUqi7QrS+XCsCDYtRw7BwICubhkxar5+3BI99LVzBitB5qm/LmqDPY6 5nfoqLmUyTKsRPo8OZ+ycy0VLIrF7TV39IS9i0VJ3dTzyUBdN7nDtwNKae1fAmmZzwlI 3MHKuoLdhOQRCw7iW2un8453Cl/ozSwdM0YsZRkZxRlBeIvGUGeuD6rgckVAJHtuAM3P DJmAteCYhMvM03KFCHygib+AAA/eyBOLgqm+/JlwPw5CCVo4TarPaMtYfTEkRxpW5PqJ VXGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Yu1Ms/qg"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u14si1359782edq.167.2019.09.24.08.53.41; Tue, 24 Sep 2019 08:54:05 -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; dkim=pass header.i=@kernel.org header.s=default header.b="Yu1Ms/qg"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405576AbfIVTfL (ORCPT + 99 others); Sun, 22 Sep 2019 15:35:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:43220 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390366AbfIVSqy (ORCPT ); Sun, 22 Sep 2019 14:46:54 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1D159206C2; Sun, 22 Sep 2019 18:46:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569178013; bh=S2zNVlmqja7JUe4yh3eRIVAzXvsxaHQuJ0G0lZeEYmc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Yu1Ms/qgzng0CeeCNzu/0zJ8gJ+S7Zurx0MAldaorIxwteVg+XQuE+Q9z307L9OZe psfggg+EhGrTUndJNNlE8RAw9/igSny06qldxgJ3kDmn+6yweeiXgp+IkAYGb9F3vu ZAfrObqCVBlucFAQYknqaR/BLepBGa7QqfYKWggM= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Codrin Ciubotariu , Mark Brown , Sasha Levin Subject: [PATCH AUTOSEL 5.3 100/203] ASoC: mchp-i2s-mcc: Wait for RX/TX RDY only if controller is running Date: Sun, 22 Sep 2019 14:42:06 -0400 Message-Id: <20190922184350.30563-100-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190922184350.30563-1-sashal@kernel.org> References: <20190922184350.30563-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Codrin Ciubotariu [ Upstream commit 0f6fc97501b790c971b11b52a654009d21c45238 ] Since hw_free() can be called multiple times and not just after a stop trigger command, we should check whether the RX or TX ready interrupt was truly enabled previously. For this, we assure that the condition of the wait event is always true, except when RX/TX interrupts are enabled. Fixes: 7e0cdf545a55 ("ASoC: mchp-i2s-mcc: add driver for I2SC Multi-Channel Controller") Signed-off-by: Codrin Ciubotariu Link: https://lore.kernel.org/r/20190820162411.24836-3-codrin.ciubotariu@microchip.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/atmel/mchp-i2s-mcc.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/sound/soc/atmel/mchp-i2s-mcc.c b/sound/soc/atmel/mchp-i2s-mcc.c index 86495883ca3f1..8272915fa09b9 100644 --- a/sound/soc/atmel/mchp-i2s-mcc.c +++ b/sound/soc/atmel/mchp-i2s-mcc.c @@ -686,22 +686,24 @@ static int mchp_i2s_mcc_hw_free(struct snd_pcm_substream *substream, err = wait_event_interruptible_timeout(dev->wq_txrdy, dev->tx_rdy, msecs_to_jiffies(500)); + if (err == 0) { + dev_warn_once(dev->dev, + "Timeout waiting for Tx ready\n"); + regmap_write(dev->regmap, MCHP_I2SMCC_IDRA, + MCHP_I2SMCC_INT_TXRDY_MASK(dev->channels)); + dev->tx_rdy = 1; + } } else { err = wait_event_interruptible_timeout(dev->wq_rxrdy, dev->rx_rdy, msecs_to_jiffies(500)); - } - - if (err == 0) { - u32 idra; - - dev_warn_once(dev->dev, "Timeout waiting for %s\n", - is_playback ? "Tx ready" : "Rx ready"); - if (is_playback) - idra = MCHP_I2SMCC_INT_TXRDY_MASK(dev->channels); - else - idra = MCHP_I2SMCC_INT_RXRDY_MASK(dev->channels); - regmap_write(dev->regmap, MCHP_I2SMCC_IDRA, idra); + if (err == 0) { + dev_warn_once(dev->dev, + "Timeout waiting for Rx ready\n"); + regmap_write(dev->regmap, MCHP_I2SMCC_IDRA, + MCHP_I2SMCC_INT_RXRDY_MASK(dev->channels)); + dev->rx_rdy = 1; + } } if (!mchp_i2s_mcc_is_running(dev)) { @@ -809,6 +811,8 @@ static int mchp_i2s_mcc_dai_probe(struct snd_soc_dai *dai) init_waitqueue_head(&dev->wq_txrdy); init_waitqueue_head(&dev->wq_rxrdy); + dev->tx_rdy = 1; + dev->rx_rdy = 1; snd_soc_dai_init_dma_data(dai, &dev->playback, &dev->capture); -- 2.20.1