From patchwork Tue Feb 14 16:14:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 13140471 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A7E18C61DA4 for ; Tue, 14 Feb 2023 16:17:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:CC :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=XV9XD0uX6pFa5wX2kO4NQyUR1XBzpYPLFYi4gkRTfhw=; b=GvBRZ2/ai01ikW 8cyyktMFOl1immUVPScefHDuo4afL8lW80zdY1hvYT/EbFBxKnQhB20eDuL/A8ZMEXmit7GKsFIii 2kKf2qYTUjV43fcnflVjyt03nfqLhbwKGuMjxwClpV/sKopEOlwtyXZReLFss8Znw+T2QeWJewfDq OLScFa6swWGJeZyFoMp565Qp64oyqyfBYPRIZ4kApvtFRW3fMp2akboSMJoPPclFTKGbT46/p6WfB 08o0EGT3zHNWcowsWiXA1eY/AUSnYNRGGsgF3n815IPFR5Gk8OD+6u8r19EOe8VR/3R41w31fJG2c kqFyVLLjnEFRX+h3xgtw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pRxzF-002l2C-RO; Tue, 14 Feb 2023 16:16:57 +0000 Received: from esa.microchip.iphmx.com ([68.232.153.233]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pRxzC-002l18-GW for linux-arm-kernel@lists.infradead.org; Tue, 14 Feb 2023 16:16:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1676391414; x=1707927414; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=Ed9OZgaBIh0K4cnf+bMJJOjsYI0DgmyhIgZsOzpMPvw=; b=RBIOgHP+6RvvgelM4QOyb7/qw0yr2NLBYFn23R7NsV+UAnde9oTxjX3U Zs+iv1l6LQfR5FIrNCDaz8XuV2xDVRrTTlnImLB50LWT7GrTsIxfvcwVo zvuj3ghrD6At2q1y5IX5yAghQeZurqAq3Bf22u1IQAkuG+UeBBpVMZBa8 MbeJukxA/jY/FGaE1PuHMJX6s8Pn5QUBgbFvhb3I3kK2sk0QCq/lsCdnL 4q6g/AzqQcLyh3JZneR3voHfY+k/jYJjedijiQ3Tl62AcP8X9mL0XeIQC jQoYYtGw3BRMKe5ue8skULcV+ifs7fRw59q3b1f54czfEMgB/XV25iz9N w==; X-IronPort-AV: E=Sophos;i="5.97,297,1669100400"; d="scan'208";a="200644035" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 14 Feb 2023 09:16:53 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Tue, 14 Feb 2023 09:16:53 -0700 Received: from m18063-ThinkPad-T460p.mchp-main.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.16 via Frontend Transport; Tue, 14 Feb 2023 09:16:43 -0700 From: Claudiu Beznea To: , , , , , , , , CC: , , , , Claudiu Beznea Subject: [PATCH 0/3] ASoC: mchp-pdmc: fix poc noises when starting capture Date: Tue, 14 Feb 2023 18:14:32 +0200 Message-ID: <20230214161435.1088246-1-claudiu.beznea@microchip.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230214_081654_575096_3149DB87 X-CRM114-Status: GOOD ( 10.96 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org To start capture on Microchip PDMC the enable bits for each supported microphone need to be set. After this bit is set the PDMC starts to receive data from microphones and it considers this data as valid data. Thus if microphones are not ready the PDMC captures anyway data from its lines. This data is interpreted by the human ear as poc noises. To avoid this the following software workaround need to be applied when starting capture: 1/ enable PDMC channel 2/ wait 150ms 3/ execute 16 dummy reads from RHR 4/ clear interrupts 5/ enable interrupts 6/ enable DMA channel For this workaround to work step 6 need to be executed at the end. For step 6 was added patch 1/3 from this series. With this, driver sets its struct snd_dmaengine_pcm_config::start_dma_last = 1 and proper action is taken based on this flag when starting DAI trigger vs DMA. The other solution that was identified for this was to extend the already existing mechanism around struct snd_soc_dai_link::stop_dma_first. The downside of this was that a potential struct snd_soc_dai_link::start_dma_last would have to be populated on sound card driver thus, had to be taken into account in all sound card drivers. At the moment, the mchp-pdmc is used only with simple-audio-card. In case of simple-audio-card a new DT binding would had to be introduced to specify this action on dai-link descriptions (as of my investigation). Please advice what might be the best approach. Thank you, Claudiu Beznea Claudiu Beznea (3): ASoC: soc-generic-dmaengine-pcm: add option to start DMA after DAI ASoC: dt-bindings: sama7g5-pdmc: add microchip,startup-delay-us binding ASoC: mchp-pdmc: fix poc noise at capture startup .../sound/microchip,sama7g5-pdmc.yaml | 6 ++ include/sound/dmaengine_pcm.h | 1 + include/sound/soc-component.h | 2 + sound/soc/atmel/mchp-pdmc.c | 55 +++++++++++++++++-- sound/soc/soc-generic-dmaengine-pcm.c | 8 ++- sound/soc/soc-pcm.c | 27 +++++++-- 6 files changed, 86 insertions(+), 13 deletions(-)