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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS 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 0F407C43381 for ; Sun, 24 Mar 2019 16:44:28 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id D19902171F for ; Sun, 24 Mar 2019 16:44:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="k4JH6snf"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="vvtaW472" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D19902171F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vDS4hKx84bqZgVd012vzDpbTb4iPc7cPgzGVvUCp2/o=; b=k4JH6snfDxBhWg ey3rOof8YbO4sdCnJFBmaTBCLbyJy3o5s79Dyt3YslNQYvO8abGFRJYBMN1dK2QMQaAx9aIQbYsbt vIvV0nMpHxmY9V+y3uTJ2g/O/RIXNhkIFwsc4Y9wDygKyW9RU/7hrsOgfJpbQ6u7B7WGspt0Sq+w6 xq8gDmIxkvzXjVyix5B9qVkALXMmz7347mRNwmEMVY74bnyAFKhe+G0oTkrjzNyykTY93aUu3Qo3l xv6qKF06N09IyFlsyZ7DGyRN4ZIMrtDWFB7Q9+TPk6ZFym/xAJM/uXI+ZR5B1D1YEMkEWCgEmQbrL MfA/CuV0UvLYMOdaSMNQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h86ES-00089J-AO; Sun, 24 Mar 2019 16:44:24 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h86EP-00088D-6R for linux-arm-kernel@lists.infradead.org; Sun, 24 Mar 2019 16:44:22 +0000 Received: from archlinux (cpc91196-cmbg18-2-0-cust659.5-4.cable.virginm.net [81.96.234.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5D68720823; Sun, 24 Mar 2019 16:44:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553445860; bh=DIPove7fmCZCT/Kd2tN6L8r79GQfswXoABLnBzyOU2Y=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=vvtaW472WkVrOclGfD4iF7YQJoL8ZGPgQ4qDdYBWccGpHt+rV171S2nRtTfbZCtwp VHYAiZ472ZcR6ee0OUA/Zg2Bi5GJiZDfiEs88L129PCj9/SE/VAoTvgwcuuemBdnJ9 DmcfmZPGx9f18InGzethSfpcPuG7iO1t97Hwt08o= Date: Sun, 24 Mar 2019 16:44:14 +0000 From: Jonathan Cameron To: Fabrice Gasnier Subject: Re: [PATCH v2 3/8] iio: adc: stm32-dfsdm: move dma enable from start_conv() to start_dma() Message-ID: <20190324164414.03f4bb01@archlinux> In-Reply-To: <1553186849-6261-4-git-send-email-fabrice.gasnier@st.com> References: <1553186849-6261-1-git-send-email-fabrice.gasnier@st.com> <1553186849-6261-4-git-send-email-fabrice.gasnier@st.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190324_094421_303555_8C02E7F8 X-CRM114-Status: GOOD ( 20.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lars@metafoo.de, olivier.moysan@st.com, alexandre.torgue@st.com, linux-iio@vger.kernel.org, pmeerw@pmeerw.net, arnaud.pouliquen@st.com, linux-kernel@vger.kernel.org, mcoquelin.stm32@gmail.com, knaack.h@gmx.de, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, 21 Mar 2019 17:47:24 +0100 Fabrice Gasnier wrote: > Move DMA enable (e.g. set RDMAEN bit) away from start_conv() that is used > for both buffer and single conversions. Thus, single conv rely on > interrupt, not dma. > Note: take care to prepare all DMA stuff and set RDMAEN before starting > filter (can be set only when DFEN=0). > > This is precursor patch to ease support of triggered buffer mode. > > Signed-off-by: Fabrice Gasnier Applied, Thanks, Jonathan > --- > drivers/iio/adc/stm32-dfsdm-adc.c | 77 +++++++++++++++++++-------------------- > 1 file changed, 38 insertions(+), 39 deletions(-) > > diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c > index 8690672..818627f 100644 > --- a/drivers/iio/adc/stm32-dfsdm-adc.c > +++ b/drivers/iio/adc/stm32-dfsdm-adc.c > @@ -429,12 +429,10 @@ static ssize_t dfsdm_adc_audio_set_spiclk(struct iio_dev *indio_dev, > } > > static int stm32_dfsdm_start_conv(struct stm32_dfsdm_adc *adc, > - const struct iio_chan_spec *chan, > - bool dma) > + const struct iio_chan_spec *chan) > { > struct regmap *regmap = adc->dfsdm->regmap; > int ret; > - unsigned int dma_en = 0; > > ret = stm32_dfsdm_start_channel(adc->dfsdm, chan->channel); > if (ret < 0) > @@ -444,25 +442,12 @@ static int stm32_dfsdm_start_conv(struct stm32_dfsdm_adc *adc, > if (ret < 0) > goto stop_channels; > > - if (dma) { > - /* Enable DMA transfer*/ > - dma_en = DFSDM_CR1_RDMAEN(1); > - } > - /* Enable DMA transfer*/ > - ret = regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id), > - DFSDM_CR1_RDMAEN_MASK, dma_en); > - if (ret < 0) > - goto filter_unconfigure; > - > ret = stm32_dfsdm_start_filter(adc->dfsdm, adc->fl_id); > if (ret < 0) > - goto stop_dma; > + goto filter_unconfigure; > > return 0; > > -stop_dma: > - regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id), > - DFSDM_CR1_RDMAEN_MASK, 0); > filter_unconfigure: > regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id), > DFSDM_CR1_CFG_MASK, 0); > @@ -479,10 +464,6 @@ static void stm32_dfsdm_stop_conv(struct stm32_dfsdm_adc *adc, > > stm32_dfsdm_stop_filter(adc->dfsdm, adc->fl_id); > > - /* Clean conversion options */ > - regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id), > - DFSDM_CR1_RDMAEN_MASK, 0); > - > regmap_update_bits(regmap, DFSDM_CR1(adc->fl_id), > DFSDM_CR1_CFG_MASK, 0); > > @@ -599,15 +580,36 @@ static int stm32_dfsdm_adc_dma_start(struct iio_dev *indio_dev) > > cookie = dmaengine_submit(desc); > ret = dma_submit_error(cookie); > - if (ret) { > - dmaengine_terminate_all(adc->dma_chan); > - return ret; > - } > + if (ret) > + goto err_stop_dma; > > /* Issue pending DMA requests */ > dma_async_issue_pending(adc->dma_chan); > > + /* Enable DMA transfer*/ > + ret = regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR1(adc->fl_id), > + DFSDM_CR1_RDMAEN_MASK, DFSDM_CR1_RDMAEN_MASK); > + if (ret < 0) > + goto err_stop_dma; > + > return 0; > + > +err_stop_dma: > + dmaengine_terminate_all(adc->dma_chan); > + > + return ret; > +} > + > +static void stm32_dfsdm_adc_dma_stop(struct iio_dev *indio_dev) > +{ > + struct stm32_dfsdm_adc *adc = iio_priv(indio_dev); > + > + if (!adc->dma_chan) > + return; > + > + regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR1(adc->fl_id), > + DFSDM_CR1_RDMAEN_MASK, 0); > + dmaengine_terminate_all(adc->dma_chan); > } > > static int stm32_dfsdm_postenable(struct iio_dev *indio_dev) > @@ -623,24 +625,22 @@ static int stm32_dfsdm_postenable(struct iio_dev *indio_dev) > if (ret < 0) > return ret; > > - ret = stm32_dfsdm_start_conv(adc, chan, true); > + ret = stm32_dfsdm_adc_dma_start(indio_dev); > if (ret) { > - dev_err(&indio_dev->dev, "Can't start conversion\n"); > + dev_err(&indio_dev->dev, "Can't start DMA\n"); > goto stop_dfsdm; > } > > - if (adc->dma_chan) { > - ret = stm32_dfsdm_adc_dma_start(indio_dev); > - if (ret) { > - dev_err(&indio_dev->dev, "Can't start DMA\n"); > - goto err_stop_conv; > - } > + ret = stm32_dfsdm_start_conv(adc, chan); > + if (ret) { > + dev_err(&indio_dev->dev, "Can't start conversion\n"); > + goto err_stop_dma; > } > > return 0; > > -err_stop_conv: > - stm32_dfsdm_stop_conv(adc, chan); > +err_stop_dma: > + stm32_dfsdm_adc_dma_stop(indio_dev); > stop_dfsdm: > stm32_dfsdm_stop_dfsdm(adc->dfsdm); > > @@ -652,11 +652,10 @@ static int stm32_dfsdm_predisable(struct iio_dev *indio_dev) > struct stm32_dfsdm_adc *adc = iio_priv(indio_dev); > const struct iio_chan_spec *chan = &indio_dev->channels[0]; > > - if (adc->dma_chan) > - dmaengine_terminate_all(adc->dma_chan); > - > stm32_dfsdm_stop_conv(adc, chan); > > + stm32_dfsdm_adc_dma_stop(indio_dev); > + > stm32_dfsdm_stop_dfsdm(adc->dfsdm); > > return 0; > @@ -736,7 +735,7 @@ static int stm32_dfsdm_single_conv(struct iio_dev *indio_dev, > if (ret < 0) > goto stop_dfsdm; > > - ret = stm32_dfsdm_start_conv(adc, chan, false); > + ret = stm32_dfsdm_start_conv(adc, chan); > if (ret < 0) { > regmap_update_bits(adc->dfsdm->regmap, DFSDM_CR2(adc->fl_id), > DFSDM_CR2_REOCIE_MASK, DFSDM_CR2_REOCIE(0)); _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel