From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AEE84C433E0 for ; Fri, 10 Jul 2020 05:44:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 82E842077D for ; Fri, 10 Jul 2020 05:44:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=sholland.org header.i=@sholland.org header.b="FYAxZkLd"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PAFB3sOr" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726536AbgGJFok (ORCPT ); Fri, 10 Jul 2020 01:44:40 -0400 Received: from wnew4-smtp.messagingengine.com ([64.147.123.18]:46209 "EHLO wnew4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725851AbgGJFoj (ORCPT ); Fri, 10 Jul 2020 01:44:39 -0400 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.west.internal (Postfix) with ESMTP id 4E199D63; Fri, 10 Jul 2020 01:44:37 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 10 Jul 2020 01:44:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sholland.org; h= from:subject:to:cc:references:message-id:date:mime-version :in-reply-to:content-type:content-transfer-encoding; s=fm3; bh=B kv1RNfuDFYyvEIc++Gnj9pUqO53KBzD75sd4jhLp6Y=; b=FYAxZkLd0MDjmWqiI U1SunbOs6XcWpC3ur+5Rikz2hulUb1pV+jPtZiqXepeBnk/XHyfJej1TF7M9taLL cmlQAfEHAiitoy39HJhlwZY5D87XeGe0Bq6F3rNfp796UlaIkdcCXE7Qbg6xiczF vVZtPC3LRZPqYeUtHZ+yT2J8dwCQratYhYDu4/szqiNEa/kk+dS+ChE3H5Lp0reC 0kBG9k16FAkAgzbrNl3/fDvPsc8KYDnJVgQY+9qRHO+95kMq9SCOVd5gl6C767MS Sbfxghy0jGf0jUVWJ7iO99lrUIQB2CKQrU+X78XUA6U6WlrZVxa1uS3Gtfxll9AP z9yTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=Bkv1RNfuDFYyvEIc++Gnj9pUqO53KBzD75sd4jhLp 6Y=; b=PAFB3sOrVhErSmUejakZts/M9hCPdzJx8OtEvCi/SfKT7wJAlhaM5R8RV S1LYmQlyRx895uuoHh3NuQu9TFmJpoD8RlqRItCVxJQtMgcRiWLTeQ/ad96ZzCDx 31px+tXYHtnwWeF5VRP+nBFNbmSChhxlUeD7epusxSYLEFy5jCGcjRwcWk1Dp4BP uJY4KJO/x7TBOwvZciKZFN6WE2VYWUeHos/jAVro5Py2SNg9l6HC4QOafTxnUQBr Aprst6hJzyIj5AnhYpMsX820zPkVmBhoRj6QiQ14Ttcv16WlSFXprZd1QDzMSnOT lStrAhY1As5TzpaDoEfMEq3p75CQQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrvddtgdellecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhuffvfhfkffgfgggjtgfgsehtkeertddtfeejnecuhfhrohhmpefurghmuhgv lhcujfholhhlrghnugcuoehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhgqeenucggtf frrghtthgvrhhnpeevvdffgedtieehfeeltdekleejvedtvdefueehueeihfdvjefgkeef udegjeejtdenucfkphepjedtrddufeehrddugeekrdduhedunecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepshgrmhhuvghlsehshhholhhlrghn ugdrohhrgh X-ME-Proxy: Received: from [192.168.50.169] (70-135-148-151.lightspeed.stlsmo.sbcglobal.net [70.135.148.151]) by mail.messagingengine.com (Postfix) with ESMTPA id 709CA328005A; Fri, 10 Jul 2020 01:44:34 -0400 (EDT) From: Samuel Holland Subject: Re: [linux-sunxi] [PATCH 01/16] ASoC: sun4i-i2s: Add support for H6 I2S To: peron.clem@gmail.com, Maxime Ripard , Chen-Yu Tsai , Rob Herring , Mark Brown , Liam Girdwood Cc: Jaroslav Kysela , Takashi Iwai , Marcus Cooper , Jernej Skrabec , alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com References: <20200704113902.336911-1-peron.clem@gmail.com> <20200704113902.336911-2-peron.clem@gmail.com> Message-ID: <72a6fddf-5e84-f050-2eee-74178d457789@sholland.org> Date: Fri, 10 Jul 2020 00:44:33 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200704113902.336911-2-peron.clem@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/4/20 6:38 AM, Clément Péron wrote: > From: Jernej Skrabec > > H6 I2S is very similar to that in H3, except it supports up to 16 > channels. > > Signed-off-by: Jernej Skrabec > Signed-off-by: Marcus Cooper > Signed-off-by: Clément Péron > --- > sound/soc/sunxi/sun4i-i2s.c | 227 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 227 insertions(+) > > diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c > index d0a8d5810c0a..9690389cb68e 100644 > --- a/sound/soc/sunxi/sun4i-i2s.c > +++ b/sound/soc/sunxi/sun4i-i2s.c > @@ -124,6 +124,21 @@ > #define SUN8I_I2S_RX_CHAN_SEL_REG 0x54 > #define SUN8I_I2S_RX_CHAN_MAP_REG 0x58 > > +/* Defines required for sun50i-h6 support */ > +#define SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET_MASK GENMASK(21, 20) > +#define SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET(offset) ((offset) << 20) > +#define SUN50I_H6_I2S_TX_CHAN_SEL_MASK GENMASK(19, 16) > +#define SUN50I_H6_I2S_TX_CHAN_SEL(chan) ((chan - 1) << 16) > +#define SUN50I_H6_I2S_TX_CHAN_EN_MASK GENMASK(15, 0) > +#define SUN50I_H6_I2S_TX_CHAN_EN(num_chan) (((1 << num_chan) - 1)) > + > +#define SUN50I_H6_I2S_TX_CHAN_MAP0_REG 0x44 > +#define SUN50I_H6_I2S_TX_CHAN_MAP1_REG 0x48 > + > +#define SUN50I_H6_I2S_RX_CHAN_SEL_REG 0x64 > +#define SUN50I_H6_I2S_RX_CHAN_MAP0_REG 0x68 > +#define SUN50I_H6_I2S_RX_CHAN_MAP1_REG 0x6C > + > struct sun4i_i2s; > > /** > @@ -466,6 +481,65 @@ static int sun8i_i2s_set_chan_cfg(const struct sun4i_i2s *i2s, > return 0; > } > > +static int sun50i_i2s_set_chan_cfg(const struct sun4i_i2s *i2s, > + const struct snd_pcm_hw_params *params) > +{ > + unsigned int channels = params_channels(params); > + unsigned int slots = channels; > + unsigned int lrck_period; > + > + if (i2s->slots) > + slots = i2s->slots; > + > + /* Map the channels for playback and capture */ > + regmap_write(i2s->regmap, SUN50I_H6_I2S_TX_CHAN_MAP1_REG, 0x76543210); > + regmap_write(i2s->regmap, SUN50I_H6_I2S_RX_CHAN_MAP1_REG, 0x76543210); > + > + /* Configure the channels */ > + regmap_update_bits(i2s->regmap, SUN8I_I2S_TX_CHAN_SEL_REG, > + SUN50I_H6_I2S_TX_CHAN_SEL_MASK, > + SUN50I_H6_I2S_TX_CHAN_SEL(channels)); > + regmap_update_bits(i2s->regmap, SUN50I_H6_I2S_RX_CHAN_SEL_REG, > + SUN50I_H6_I2S_TX_CHAN_SEL_MASK, > + SUN50I_H6_I2S_TX_CHAN_SEL(channels)); > + > + regmap_update_bits(i2s->regmap, SUN8I_I2S_CHAN_CFG_REG, > + SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM_MASK, > + SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM(channels)); > + regmap_update_bits(i2s->regmap, SUN8I_I2S_CHAN_CFG_REG, > + SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM_MASK, > + SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM(channels)); > + > + switch (i2s->format & SND_SOC_DAIFMT_FORMAT_MASK) { > + case SND_SOC_DAIFMT_DSP_A: > + case SND_SOC_DAIFMT_DSP_B: > + case SND_SOC_DAIFMT_LEFT_J: > + case SND_SOC_DAIFMT_RIGHT_J: According to the manual, LEFT_J and RIGHT_J should use the same calculation as I2S, not the one for PCM/DSP. > + lrck_period = params_physical_width(params) * slots; > + break; > + > + case SND_SOC_DAIFMT_I2S: > + lrck_period = params_physical_width(params); > + break; > + > + default: > + return -EINVAL; > + } > + > + if (i2s->slot_width) > + lrck_period = i2s->slot_width; > + > + regmap_update_bits(i2s->regmap, SUN4I_I2S_FMT0_REG, > + SUN8I_I2S_FMT0_LRCK_PERIOD_MASK, > + SUN8I_I2S_FMT0_LRCK_PERIOD(lrck_period)); >From the description in the manual, this looks off by one. The number of BCLKs per LRCK is LRCK_PERIOD + 1. > + > + regmap_update_bits(i2s->regmap, SUN8I_I2S_TX_CHAN_SEL_REG, > + SUN50I_H6_I2S_TX_CHAN_EN_MASK, > + SUN50I_H6_I2S_TX_CHAN_EN(channels)); > + > + return 0; > +} > + > static int sun4i_i2s_hw_params(struct snd_pcm_substream *substream, > struct snd_pcm_hw_params *params, > struct snd_soc_dai *dai) > @@ -691,6 +765,108 @@ static int sun8i_i2s_set_soc_fmt(const struct sun4i_i2s *i2s, > return 0; > } > > +static int sun50i_i2s_set_soc_fmt(const struct sun4i_i2s *i2s, > + unsigned int fmt) > +{ > + u32 mode, val; > + u8 offset; > + > + /* > + * DAI clock polarity > + * > + * The setup for LRCK contradicts the datasheet, but under a > + * scope it's clear that the LRCK polarity is reversed > + * compared to the expected polarity on the bus. > + */ This comment makes us sound a lot more confident than I think we actually are. Regards, Samuel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 96D2FC433DF for ; Fri, 10 Jul 2020 05:46:40 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 229DD2076A for ; Fri, 10 Jul 2020 05:46:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=alsa-project.org header.i=@alsa-project.org header.b="MbjcArQQ"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=sholland.org header.i=@sholland.org header.b="FYAxZkLd"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PAFB3sOr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 229DD2076A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sholland.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id A676A1655; Fri, 10 Jul 2020 07:45:48 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz A676A1655 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1594359998; bh=rFMIeh65KzE1IPenufeyclgSSOJopnMuFH17uOAGCTs=; h=From:Subject:To:References:Date:In-Reply-To:Cc:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=MbjcArQQNSRby9vLRXacT31tFRHaZYEoL4R5PGRUb0HFzzMM1gEyYMXGJ9cFKxGgw eEFLYpGU95TQ9XyStf2nvy6XMmKaTtpmA07hnGEc4MqJChlSoQ9DKjMasYW5SYpbga dlzdQQo5KJQrc9X0RFID/Uwi052Bb8f0c9Or4894= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 25945F80161; Fri, 10 Jul 2020 07:44:56 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 4D72BF8015C; Fri, 10 Jul 2020 07:44:53 +0200 (CEST) Received: from wnew4-smtp.messagingengine.com (wnew4-smtp.messagingengine.com [64.147.123.18]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id CF6C1F80112 for ; Fri, 10 Jul 2020 07:44:40 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz CF6C1F80112 Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key) header.d=sholland.org header.i=@sholland.org header.b="FYAxZkLd"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PAFB3sOr" Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.west.internal (Postfix) with ESMTP id 4E199D63; Fri, 10 Jul 2020 01:44:37 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 10 Jul 2020 01:44:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sholland.org; h= from:subject:to:cc:references:message-id:date:mime-version :in-reply-to:content-type:content-transfer-encoding; s=fm3; bh=B kv1RNfuDFYyvEIc++Gnj9pUqO53KBzD75sd4jhLp6Y=; b=FYAxZkLd0MDjmWqiI U1SunbOs6XcWpC3ur+5Rikz2hulUb1pV+jPtZiqXepeBnk/XHyfJej1TF7M9taLL cmlQAfEHAiitoy39HJhlwZY5D87XeGe0Bq6F3rNfp796UlaIkdcCXE7Qbg6xiczF vVZtPC3LRZPqYeUtHZ+yT2J8dwCQratYhYDu4/szqiNEa/kk+dS+ChE3H5Lp0reC 0kBG9k16FAkAgzbrNl3/fDvPsc8KYDnJVgQY+9qRHO+95kMq9SCOVd5gl6C767MS Sbfxghy0jGf0jUVWJ7iO99lrUIQB2CKQrU+X78XUA6U6WlrZVxa1uS3Gtfxll9AP z9yTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=Bkv1RNfuDFYyvEIc++Gnj9pUqO53KBzD75sd4jhLp 6Y=; b=PAFB3sOrVhErSmUejakZts/M9hCPdzJx8OtEvCi/SfKT7wJAlhaM5R8RV S1LYmQlyRx895uuoHh3NuQu9TFmJpoD8RlqRItCVxJQtMgcRiWLTeQ/ad96ZzCDx 31px+tXYHtnwWeF5VRP+nBFNbmSChhxlUeD7epusxSYLEFy5jCGcjRwcWk1Dp4BP uJY4KJO/x7TBOwvZciKZFN6WE2VYWUeHos/jAVro5Py2SNg9l6HC4QOafTxnUQBr Aprst6hJzyIj5AnhYpMsX820zPkVmBhoRj6QiQ14Ttcv16WlSFXprZd1QDzMSnOT lStrAhY1As5TzpaDoEfMEq3p75CQQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrvddtgdellecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhuffvfhfkffgfgggjtgfgsehtkeertddtfeejnecuhfhrohhmpefurghmuhgv lhcujfholhhlrghnugcuoehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhgqeenucggtf frrghtthgvrhhnpeevvdffgedtieehfeeltdekleejvedtvdefueehueeihfdvjefgkeef udegjeejtdenucfkphepjedtrddufeehrddugeekrdduhedunecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepshgrmhhuvghlsehshhholhhlrghn ugdrohhrgh X-ME-Proxy: Received: from [192.168.50.169] (70-135-148-151.lightspeed.stlsmo.sbcglobal.net [70.135.148.151]) by mail.messagingengine.com (Postfix) with ESMTPA id 709CA328005A; Fri, 10 Jul 2020 01:44:34 -0400 (EDT) From: Samuel Holland Subject: Re: [linux-sunxi] [PATCH 01/16] ASoC: sun4i-i2s: Add support for H6 I2S To: peron.clem@gmail.com, Maxime Ripard , Chen-Yu Tsai , Rob Herring , Mark Brown , Liam Girdwood References: <20200704113902.336911-1-peron.clem@gmail.com> <20200704113902.336911-2-peron.clem@gmail.com> Message-ID: <72a6fddf-5e84-f050-2eee-74178d457789@sholland.org> Date: Fri, 10 Jul 2020 00:44:33 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200704113902.336911-2-peron.clem@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Cc: devicetree@vger.kernel.org, Jernej Skrabec , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, Takashi Iwai , Marcus Cooper , linux-sunxi@googlegroups.com, linux-arm-kernel@lists.infradead.org X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" On 7/4/20 6:38 AM, Clément Péron wrote: > From: Jernej Skrabec > > H6 I2S is very similar to that in H3, except it supports up to 16 > channels. > > Signed-off-by: Jernej Skrabec > Signed-off-by: Marcus Cooper > Signed-off-by: Clément Péron > --- > sound/soc/sunxi/sun4i-i2s.c | 227 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 227 insertions(+) > > diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c > index d0a8d5810c0a..9690389cb68e 100644 > --- a/sound/soc/sunxi/sun4i-i2s.c > +++ b/sound/soc/sunxi/sun4i-i2s.c > @@ -124,6 +124,21 @@ > #define SUN8I_I2S_RX_CHAN_SEL_REG 0x54 > #define SUN8I_I2S_RX_CHAN_MAP_REG 0x58 > > +/* Defines required for sun50i-h6 support */ > +#define SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET_MASK GENMASK(21, 20) > +#define SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET(offset) ((offset) << 20) > +#define SUN50I_H6_I2S_TX_CHAN_SEL_MASK GENMASK(19, 16) > +#define SUN50I_H6_I2S_TX_CHAN_SEL(chan) ((chan - 1) << 16) > +#define SUN50I_H6_I2S_TX_CHAN_EN_MASK GENMASK(15, 0) > +#define SUN50I_H6_I2S_TX_CHAN_EN(num_chan) (((1 << num_chan) - 1)) > + > +#define SUN50I_H6_I2S_TX_CHAN_MAP0_REG 0x44 > +#define SUN50I_H6_I2S_TX_CHAN_MAP1_REG 0x48 > + > +#define SUN50I_H6_I2S_RX_CHAN_SEL_REG 0x64 > +#define SUN50I_H6_I2S_RX_CHAN_MAP0_REG 0x68 > +#define SUN50I_H6_I2S_RX_CHAN_MAP1_REG 0x6C > + > struct sun4i_i2s; > > /** > @@ -466,6 +481,65 @@ static int sun8i_i2s_set_chan_cfg(const struct sun4i_i2s *i2s, > return 0; > } > > +static int sun50i_i2s_set_chan_cfg(const struct sun4i_i2s *i2s, > + const struct snd_pcm_hw_params *params) > +{ > + unsigned int channels = params_channels(params); > + unsigned int slots = channels; > + unsigned int lrck_period; > + > + if (i2s->slots) > + slots = i2s->slots; > + > + /* Map the channels for playback and capture */ > + regmap_write(i2s->regmap, SUN50I_H6_I2S_TX_CHAN_MAP1_REG, 0x76543210); > + regmap_write(i2s->regmap, SUN50I_H6_I2S_RX_CHAN_MAP1_REG, 0x76543210); > + > + /* Configure the channels */ > + regmap_update_bits(i2s->regmap, SUN8I_I2S_TX_CHAN_SEL_REG, > + SUN50I_H6_I2S_TX_CHAN_SEL_MASK, > + SUN50I_H6_I2S_TX_CHAN_SEL(channels)); > + regmap_update_bits(i2s->regmap, SUN50I_H6_I2S_RX_CHAN_SEL_REG, > + SUN50I_H6_I2S_TX_CHAN_SEL_MASK, > + SUN50I_H6_I2S_TX_CHAN_SEL(channels)); > + > + regmap_update_bits(i2s->regmap, SUN8I_I2S_CHAN_CFG_REG, > + SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM_MASK, > + SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM(channels)); > + regmap_update_bits(i2s->regmap, SUN8I_I2S_CHAN_CFG_REG, > + SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM_MASK, > + SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM(channels)); > + > + switch (i2s->format & SND_SOC_DAIFMT_FORMAT_MASK) { > + case SND_SOC_DAIFMT_DSP_A: > + case SND_SOC_DAIFMT_DSP_B: > + case SND_SOC_DAIFMT_LEFT_J: > + case SND_SOC_DAIFMT_RIGHT_J: According to the manual, LEFT_J and RIGHT_J should use the same calculation as I2S, not the one for PCM/DSP. > + lrck_period = params_physical_width(params) * slots; > + break; > + > + case SND_SOC_DAIFMT_I2S: > + lrck_period = params_physical_width(params); > + break; > + > + default: > + return -EINVAL; > + } > + > + if (i2s->slot_width) > + lrck_period = i2s->slot_width; > + > + regmap_update_bits(i2s->regmap, SUN4I_I2S_FMT0_REG, > + SUN8I_I2S_FMT0_LRCK_PERIOD_MASK, > + SUN8I_I2S_FMT0_LRCK_PERIOD(lrck_period)); >From the description in the manual, this looks off by one. The number of BCLKs per LRCK is LRCK_PERIOD + 1. > + > + regmap_update_bits(i2s->regmap, SUN8I_I2S_TX_CHAN_SEL_REG, > + SUN50I_H6_I2S_TX_CHAN_EN_MASK, > + SUN50I_H6_I2S_TX_CHAN_EN(channels)); > + > + return 0; > +} > + > static int sun4i_i2s_hw_params(struct snd_pcm_substream *substream, > struct snd_pcm_hw_params *params, > struct snd_soc_dai *dai) > @@ -691,6 +765,108 @@ static int sun8i_i2s_set_soc_fmt(const struct sun4i_i2s *i2s, > return 0; > } > > +static int sun50i_i2s_set_soc_fmt(const struct sun4i_i2s *i2s, > + unsigned int fmt) > +{ > + u32 mode, val; > + u8 offset; > + > + /* > + * DAI clock polarity > + * > + * The setup for LRCK contradicts the datasheet, but under a > + * scope it's clear that the LRCK polarity is reversed > + * compared to the expected polarity on the bus. > + */ This comment makes us sound a lot more confident than I think we actually are. Regards, Samuel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3A98C433E0 for ; Fri, 10 Jul 2020 05:46:30 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BDCA62072E for ; Fri, 10 Jul 2020 05:46:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ZHtAxvBX"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=sholland.org header.i=@sholland.org header.b="FYAxZkLd"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PAFB3sOr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BDCA62072E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sholland.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: To:Subject:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=oTnR/I9CxjD/dEmcgsO+bXIVCvdQu/ihZ/rCQmtHTfk=; b=ZHtAxvBXl5Vf/RMc5CD71epZe CGSBJTKwAlSCoJ+Dr5IQgnt0CDSfp5sVpjbOF+hfgWkalKYT3g24YKZh4S89/KEVvC6OAvictfb1O +Mfa3cCq1vxDridGNh23QwGog1gawohEZlOiPpX3baZxmuFEmY1Xt1yCY5AecmAXTDRrDi9LHk0oZ UgFO0LHzj1Oi7A1h8Wm9sU5F7n1rOXth+J/67TN76XdEXoYAxL9ENDZ7VZwk7DxLzw1Ni+MesxdMe biXsBKt17c9kd7aXHXDvwUwKXHdXR2g5TtMdyzlynplVG75lfvtOVkOF6NuGucjhcHdfgpGSeQtCo wqTi8yX3A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jtlq7-00008m-3W; Fri, 10 Jul 2020 05:44:51 +0000 Received: from wnew4-smtp.messagingengine.com ([64.147.123.18]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jtlq4-000075-7O for linux-arm-kernel@lists.infradead.org; Fri, 10 Jul 2020 05:44:49 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.west.internal (Postfix) with ESMTP id 4E199D63; Fri, 10 Jul 2020 01:44:37 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 10 Jul 2020 01:44:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sholland.org; h= from:subject:to:cc:references:message-id:date:mime-version :in-reply-to:content-type:content-transfer-encoding; s=fm3; bh=B kv1RNfuDFYyvEIc++Gnj9pUqO53KBzD75sd4jhLp6Y=; b=FYAxZkLd0MDjmWqiI U1SunbOs6XcWpC3ur+5Rikz2hulUb1pV+jPtZiqXepeBnk/XHyfJej1TF7M9taLL cmlQAfEHAiitoy39HJhlwZY5D87XeGe0Bq6F3rNfp796UlaIkdcCXE7Qbg6xiczF vVZtPC3LRZPqYeUtHZ+yT2J8dwCQratYhYDu4/szqiNEa/kk+dS+ChE3H5Lp0reC 0kBG9k16FAkAgzbrNl3/fDvPsc8KYDnJVgQY+9qRHO+95kMq9SCOVd5gl6C767MS Sbfxghy0jGf0jUVWJ7iO99lrUIQB2CKQrU+X78XUA6U6WlrZVxa1uS3Gtfxll9AP z9yTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=Bkv1RNfuDFYyvEIc++Gnj9pUqO53KBzD75sd4jhLp 6Y=; b=PAFB3sOrVhErSmUejakZts/M9hCPdzJx8OtEvCi/SfKT7wJAlhaM5R8RV S1LYmQlyRx895uuoHh3NuQu9TFmJpoD8RlqRItCVxJQtMgcRiWLTeQ/ad96ZzCDx 31px+tXYHtnwWeF5VRP+nBFNbmSChhxlUeD7epusxSYLEFy5jCGcjRwcWk1Dp4BP uJY4KJO/x7TBOwvZciKZFN6WE2VYWUeHos/jAVro5Py2SNg9l6HC4QOafTxnUQBr Aprst6hJzyIj5AnhYpMsX820zPkVmBhoRj6QiQ14Ttcv16WlSFXprZd1QDzMSnOT lStrAhY1As5TzpaDoEfMEq3p75CQQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrvddtgdellecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhuffvfhfkffgfgggjtgfgsehtkeertddtfeejnecuhfhrohhmpefurghmuhgv lhcujfholhhlrghnugcuoehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhgqeenucggtf frrghtthgvrhhnpeevvdffgedtieehfeeltdekleejvedtvdefueehueeihfdvjefgkeef udegjeejtdenucfkphepjedtrddufeehrddugeekrdduhedunecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepshgrmhhuvghlsehshhholhhlrghn ugdrohhrgh X-ME-Proxy: Received: from [192.168.50.169] (70-135-148-151.lightspeed.stlsmo.sbcglobal.net [70.135.148.151]) by mail.messagingengine.com (Postfix) with ESMTPA id 709CA328005A; Fri, 10 Jul 2020 01:44:34 -0400 (EDT) From: Samuel Holland Subject: Re: [linux-sunxi] [PATCH 01/16] ASoC: sun4i-i2s: Add support for H6 I2S To: peron.clem@gmail.com, Maxime Ripard , Chen-Yu Tsai , Rob Herring , Mark Brown , Liam Girdwood References: <20200704113902.336911-1-peron.clem@gmail.com> <20200704113902.336911-2-peron.clem@gmail.com> Message-ID: <72a6fddf-5e84-f050-2eee-74178d457789@sholland.org> Date: Fri, 10 Jul 2020 00:44:33 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200704113902.336911-2-peron.clem@gmail.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200710_014448_439868_6E5D8DC5 X-CRM114-Status: GOOD ( 23.13 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Jernej Skrabec , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, Takashi Iwai , Jaroslav Kysela , Marcus Cooper , linux-sunxi@googlegroups.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gNy80LzIwIDY6MzggQU0sIENsw6ltZW50IFDDqXJvbiB3cm90ZToKPiBGcm9tOiBKZXJuZWog U2tyYWJlYyA8amVybmVqLnNrcmFiZWNAc2lvbC5uZXQ+Cj4gCj4gSDYgSTJTIGlzIHZlcnkgc2lt aWxhciB0byB0aGF0IGluIEgzLCBleGNlcHQgaXQgc3VwcG9ydHMgdXAgdG8gMTYKPiBjaGFubmVs cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKZXJuZWogU2tyYWJlYyA8amVybmVqLnNrcmFiZWNAc2lv bC5uZXQ+Cj4gU2lnbmVkLW9mZi1ieTogTWFyY3VzIENvb3BlciA8Y29kZWtpcHBlckBnbWFpbC5j b20+Cj4gU2lnbmVkLW9mZi1ieTogQ2zDqW1lbnQgUMOpcm9uIDxwZXJvbi5jbGVtQGdtYWlsLmNv bT4KPiAtLS0KPiAgc291bmQvc29jL3N1bnhpL3N1bjRpLWkycy5jIHwgMjI3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgMjI3IGluc2VydGlv bnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL3N1bnhpL3N1bjRpLWkycy5jIGIvc291 bmQvc29jL3N1bnhpL3N1bjRpLWkycy5jCj4gaW5kZXggZDBhOGQ1ODEwYzBhLi45NjkwMzg5Y2I2 OGUgMTAwNjQ0Cj4gLS0tIGEvc291bmQvc29jL3N1bnhpL3N1bjRpLWkycy5jCj4gKysrIGIvc291 bmQvc29jL3N1bnhpL3N1bjRpLWkycy5jCj4gQEAgLTEyNCw2ICsxMjQsMjEgQEAKPiAgI2RlZmlu ZSBTVU44SV9JMlNfUlhfQ0hBTl9TRUxfUkVHCTB4NTQKPiAgI2RlZmluZSBTVU44SV9JMlNfUlhf Q0hBTl9NQVBfUkVHCTB4NTgKPiAgCj4gKy8qIERlZmluZXMgcmVxdWlyZWQgZm9yIHN1bjUwaS1o NiBzdXBwb3J0ICovCj4gKyNkZWZpbmUgU1VONTBJX0g2X0kyU19UWF9DSEFOX1NFTF9PRkZTRVRf TUFTSwlHRU5NQVNLKDIxLCAyMCkKPiArI2RlZmluZSBTVU41MElfSDZfSTJTX1RYX0NIQU5fU0VM X09GRlNFVChvZmZzZXQpCSgob2Zmc2V0KSA8PCAyMCkKPiArI2RlZmluZSBTVU41MElfSDZfSTJT X1RYX0NIQU5fU0VMX01BU0sJCUdFTk1BU0soMTksIDE2KQo+ICsjZGVmaW5lIFNVTjUwSV9INl9J MlNfVFhfQ0hBTl9TRUwoY2hhbikJCSgoY2hhbiAtIDEpIDw8IDE2KQo+ICsjZGVmaW5lIFNVTjUw SV9INl9JMlNfVFhfQ0hBTl9FTl9NQVNLCQlHRU5NQVNLKDE1LCAwKQo+ICsjZGVmaW5lIFNVTjUw SV9INl9JMlNfVFhfQ0hBTl9FTihudW1fY2hhbikJKCgoMSA8PCBudW1fY2hhbikgLSAxKSkKPiAr Cj4gKyNkZWZpbmUgU1VONTBJX0g2X0kyU19UWF9DSEFOX01BUDBfUkVHCTB4NDQKPiArI2RlZmlu ZSBTVU41MElfSDZfSTJTX1RYX0NIQU5fTUFQMV9SRUcJMHg0OAo+ICsKPiArI2RlZmluZSBTVU41 MElfSDZfSTJTX1JYX0NIQU5fU0VMX1JFRwkweDY0Cj4gKyNkZWZpbmUgU1VONTBJX0g2X0kyU19S WF9DSEFOX01BUDBfUkVHCTB4NjgKPiArI2RlZmluZSBTVU41MElfSDZfSTJTX1JYX0NIQU5fTUFQ MV9SRUcJMHg2Qwo+ICsKPiAgc3RydWN0IHN1bjRpX2kyczsKPiAgCj4gIC8qKgo+IEBAIC00NjYs NiArNDgxLDY1IEBAIHN0YXRpYyBpbnQgc3VuOGlfaTJzX3NldF9jaGFuX2NmZyhjb25zdCBzdHJ1 Y3Qgc3VuNGlfaTJzICppMnMsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBz dW41MGlfaTJzX3NldF9jaGFuX2NmZyhjb25zdCBzdHJ1Y3Qgc3VuNGlfaTJzICppMnMsCj4gKwkJ CQkgICBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKPiArewo+ICsJdW5z aWduZWQgaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7Cj4gKwl1bnNpZ25l ZCBpbnQgc2xvdHMgPSBjaGFubmVsczsKPiArCXVuc2lnbmVkIGludCBscmNrX3BlcmlvZDsKPiAr Cj4gKwlpZiAoaTJzLT5zbG90cykKPiArCQlzbG90cyA9IGkycy0+c2xvdHM7Cj4gKwo+ICsJLyog TWFwIHRoZSBjaGFubmVscyBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUgKi8KPiArCXJlZ21hcF93 cml0ZShpMnMtPnJlZ21hcCwgU1VONTBJX0g2X0kyU19UWF9DSEFOX01BUDFfUkVHLCAweDc2NTQz MjEwKTsKPiArCXJlZ21hcF93cml0ZShpMnMtPnJlZ21hcCwgU1VONTBJX0g2X0kyU19SWF9DSEFO X01BUDFfUkVHLCAweDc2NTQzMjEwKTsKPiArCj4gKwkvKiBDb25maWd1cmUgdGhlIGNoYW5uZWxz ICovCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoaTJzLT5yZWdtYXAsIFNVTjhJX0kyU19UWF9DSEFO X1NFTF9SRUcsCj4gKwkJCSAgIFNVTjUwSV9INl9JMlNfVFhfQ0hBTl9TRUxfTUFTSywKPiArCQkJ ICAgU1VONTBJX0g2X0kyU19UWF9DSEFOX1NFTChjaGFubmVscykpOwo+ICsJcmVnbWFwX3VwZGF0 ZV9iaXRzKGkycy0+cmVnbWFwLCBTVU41MElfSDZfSTJTX1JYX0NIQU5fU0VMX1JFRywKPiArCQkJ ICAgU1VONTBJX0g2X0kyU19UWF9DSEFOX1NFTF9NQVNLLAo+ICsJCQkgICBTVU41MElfSDZfSTJT X1RYX0NIQU5fU0VMKGNoYW5uZWxzKSk7Cj4gKwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGkycy0+ cmVnbWFwLCBTVU44SV9JMlNfQ0hBTl9DRkdfUkVHLAo+ICsJCQkgICBTVU44SV9JMlNfQ0hBTl9D RkdfVFhfU0xPVF9OVU1fTUFTSywKPiArCQkJICAgU1VOOElfSTJTX0NIQU5fQ0ZHX1RYX1NMT1Rf TlVNKGNoYW5uZWxzKSk7Cj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoaTJzLT5yZWdtYXAsIFNVTjhJ X0kyU19DSEFOX0NGR19SRUcsCj4gKwkJCSAgIFNVTjhJX0kyU19DSEFOX0NGR19SWF9TTE9UX05V TV9NQVNLLAo+ICsJCQkgICBTVU44SV9JMlNfQ0hBTl9DRkdfUlhfU0xPVF9OVU0oY2hhbm5lbHMp KTsKPiArCj4gKwlzd2l0Y2ggKGkycy0+Zm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01B U0spIHsKPiArCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6Cj4gKwljYXNlIFNORF9TT0NfREFJ Rk1UX0RTUF9COgo+ICsJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6Cj4gKwljYXNlIFNORF9T T0NfREFJRk1UX1JJR0hUX0o6CgpBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCwgTEVGVF9KIGFuZCBS SUdIVF9KIHNob3VsZCB1c2UgdGhlIHNhbWUgY2FsY3VsYXRpb24gYXMKSTJTLCBub3QgdGhlIG9u ZSBmb3IgUENNL0RTUC4KCj4gKwkJbHJja19wZXJpb2QgPSBwYXJhbXNfcGh5c2ljYWxfd2lkdGgo cGFyYW1zKSAqIHNsb3RzOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU05EX1NPQ19EQUlGTVRf STJTOgo+ICsJCWxyY2tfcGVyaW9kID0gcGFyYW1zX3BoeXNpY2FsX3dpZHRoKHBhcmFtcyk7Cj4g KwkJYnJlYWs7Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiAr Cj4gKwlpZiAoaTJzLT5zbG90X3dpZHRoKQo+ICsJCWxyY2tfcGVyaW9kID0gaTJzLT5zbG90X3dp ZHRoOwo+ICsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgU1VONElfSTJTX0ZN VDBfUkVHLAo+ICsJCQkgICBTVU44SV9JMlNfRk1UMF9MUkNLX1BFUklPRF9NQVNLLAo+ICsJCQkg ICBTVU44SV9JMlNfRk1UMF9MUkNLX1BFUklPRChscmNrX3BlcmlvZCkpOwoKRnJvbSB0aGUgZGVz Y3JpcHRpb24gaW4gdGhlIG1hbnVhbCwgdGhpcyBsb29rcyBvZmYgYnkgb25lLiBUaGUgbnVtYmVy IG9mIEJDTEtzCnBlciBMUkNLIGlzIExSQ0tfUEVSSU9EICsgMS4KCj4gKwo+ICsJcmVnbWFwX3Vw ZGF0ZV9iaXRzKGkycy0+cmVnbWFwLCBTVU44SV9JMlNfVFhfQ0hBTl9TRUxfUkVHLAo+ICsJCQkg ICBTVU41MElfSDZfSTJTX1RYX0NIQU5fRU5fTUFTSywKPiArCQkJICAgU1VONTBJX0g2X0kyU19U WF9DSEFOX0VOKGNoYW5uZWxzKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRp YyBpbnQgc3VuNGlfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbSwKPiAgCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAo+ICAJ CQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCj4gQEAgLTY5MSw2ICs3NjUsMTA4IEBA IHN0YXRpYyBpbnQgc3VuOGlfaTJzX3NldF9zb2NfZm10KGNvbnN0IHN0cnVjdCBzdW40aV9pMnMg KmkycywKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IHN1bjUwaV9pMnNfc2V0 X3NvY19mbXQoY29uc3Qgc3RydWN0IHN1bjRpX2kycyAqaTJzLAo+ICsJCQkJICB1bnNpZ25lZCBp bnQgZm10KQo+ICt7Cj4gKwl1MzIgbW9kZSwgdmFsOwo+ICsJdTggb2Zmc2V0Owo+ICsKPiArCS8q Cj4gKwkgKiBEQUkgY2xvY2sgcG9sYXJpdHkKPiArCSAqCj4gKwkgKiBUaGUgc2V0dXAgZm9yIExS Q0sgY29udHJhZGljdHMgdGhlIGRhdGFzaGVldCwgYnV0IHVuZGVyIGEKPiArCSAqIHNjb3BlIGl0 J3MgY2xlYXIgdGhhdCB0aGUgTFJDSyBwb2xhcml0eSBpcyByZXZlcnNlZAo+ICsJICogY29tcGFy ZWQgdG8gdGhlIGV4cGVjdGVkIHBvbGFyaXR5IG9uIHRoZSBidXMuCj4gKwkgKi8KClRoaXMgY29t bWVudCBtYWtlcyB1cyBzb3VuZCBhIGxvdCBtb3JlIGNvbmZpZGVudCB0aGFuIEkgdGhpbmsgd2Ug YWN0dWFsbHkgYXJlLgoKUmVnYXJkcywKU2FtdWVsCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==