All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Fabrice Gasnier <fabrice.gasnier@st.com>
Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>,
	<mcoquelin.stm32@gmail.com>, <alexandre.torgue@st.com>,
	<vkoul@kernel.org>, <linux-iio@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>,
	<linux-stm32@st-md-mailman.stormreply.com>,
	Olivier MOYSAN <olivier.moysan@st.com>
Subject: Re: [PATCH v2] iio: adc: stm32-dfsdm: Use dma_request_chan() instead dma_request_slave_channel()
Date: Sat, 11 Jan 2020 10:58:04 +0000	[thread overview]
Message-ID: <20200111105804.7aebd43e@archlinux> (raw)
In-Reply-To: <5328b668-2522-5d8d-83bb-f99bfe3086ed@st.com>

On Thu, 9 Jan 2020 13:56:14 +0100
Fabrice Gasnier <fabrice.gasnier@st.com> wrote:

> On 1/9/20 12:40 PM, Peter Ujfalusi wrote:
> > 
> > 
> > On 09/01/2020 13.29, Fabrice Gasnier wrote:  
> >> On 1/9/20 11:32 AM, Peter Ujfalusi wrote:  
> >>>
> >>>
> >>> On 09/01/2020 11.13, Fabrice Gasnier wrote:  
> >>>> On 1/7/20 12:45 PM, Peter Ujfalusi wrote:  
> >>>>> dma_request_slave_channel() is a wrapper on top of dma_request_chan()
> >>>>> eating up the error code.
> >>>>>
> >>>>> By using dma_request_chan() directly the driver can support deferred
> >>>>> probing against DMA.
> >>>>>
> >>>>> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> >>>>> ---
> >>>>> Hi,
> >>>>>
> >>>>> Changes since v1:
> >>>>> - Fall back to IRQ mode for ADC only in case of ENODEV  
> >>>>
> >>>> Hi Peter,
> >>>>
> >>>> Thanks for the patch,
> >>>>
> >>>> Please find a minor comment here after. Apart from that, you can add my:
> >>>>
> >>>> Acked-by: Fabrice Gasnier <fabrice.gasnier@st.com>
> >>>>
> >>>>  
> >>>>>
> >>>>> Regards,
> >>>>> Peter
> >>>>>
> >>>>>  drivers/iio/adc/stm32-dfsdm-adc.c | 21 +++++++++++++++++----
> >>>>>  1 file changed, 17 insertions(+), 4 deletions(-)
> >>>>>
> >>>>> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
> >>>>> index e493242c266e..74a2211bdff4 100644
> >>>>> --- a/drivers/iio/adc/stm32-dfsdm-adc.c
> >>>>> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
> >>>>> @@ -1383,9 +1383,13 @@ static int stm32_dfsdm_dma_request(struct iio_dev *indio_dev)
> >>>>>  {
> >>>>>  	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
> >>>>>  
> >>>>> -	adc->dma_chan = dma_request_slave_channel(&indio_dev->dev, "rx");
> >>>>> -	if (!adc->dma_chan)
> >>>>> -		return -EINVAL;
> >>>>> +	adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
> >>>>> +	if (IS_ERR(adc->dma_chan)) {
> >>>>> +		int ret = PTR_ERR(adc->dma_chan);
> >>>>> +
> >>>>> +		adc->dma_chan = NULL;
> >>>>> +		return ret;  
> >>>>
> >>>> You may "return PTR_ERR(adc->dma_chan);" directly here.  
> >>>
> >>> I don't make decision here on behalf of the adc path on to go forward w/
> >>> or w/o DMA support and if we go ahead the stm32_dfsdm_dma_release()
> >>> needs the dma_chan to be NULL in case we don't use DMA.
> >>>
> >>> It is much cleaner to set dma_chan to NULL here than doing it in other
> >>> paths.  
> >>
> >> Hi Peter,  
> > 
> > Hi Fabrice,
> >   
> >> Sorry I wasn't clear enough. I agree with you. I was suggesting only,
> >> talking about the 'ret' variable. It may be removed to spare a few lines
> >> :-).
> >> 	if (IS_ERR(adc->dma_chan)) {
> >> 		adc->dma_chan = NULL;
> >> 		return PTR_ERR(adc->dma_chan);
> >> 	}
> >> I'm okay both ways.  
> > 
> > PTR_ERR(NULL); will return 0
> > I need to retrieve the actual error code before NULLing dma_chan.  
> 
> Oh yes, so please forget this.
> Thanks,
> Fabrice

Applied to the togreg branch of iio.git and pushed out as testing.
Note I'll need to rebase once Greg pushes out staging/staging-next
with the changes currently in staging/staging-testing.  Shouldn't
have an effect on this though!

Thanks,

Jonathan

> 
> >   
> >>  
> >>>  
> >>>>
> >>>> Best Regards,
> >>>> Fabrice
> >>>>  
> >>>>> +	}
> >>>>>  
> >>>>>  	adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
> >>>>>  					 DFSDM_DMA_BUFFER_SIZE,
> >>>>> @@ -1509,7 +1513,16 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
> >>>>>  	init_completion(&adc->completion);
> >>>>>  
> >>>>>  	/* Optionally request DMA */
> >>>>> -	if (stm32_dfsdm_dma_request(indio_dev)) {
> >>>>> +	ret = stm32_dfsdm_dma_request(indio_dev);
> >>>>> +	if (ret) {
> >>>>> +		if (ret != -ENODEV) {
> >>>>> +			if (ret != -EPROBE_DEFER)
> >>>>> +				dev_err(&indio_dev->dev,
> >>>>> +					"DMA channel request failed with %d\n",
> >>>>> +					ret);
> >>>>> +			return ret;
> >>>>> +		}
> >>>>> +
> >>>>>  		dev_dbg(&indio_dev->dev, "No DMA support\n");
> >>>>>  		return 0;
> >>>>>  	}
> >>>>>  
> >>>
> >>> - Péter
> >>>
> >>> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> >>> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
> >>>  
> > 
> > - Péter
> > 
> > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> > Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
> >   


WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@kernel.org>
To: Fabrice Gasnier <fabrice.gasnier@st.com>
Cc: Olivier MOYSAN <olivier.moysan@st.com>,
	alexandre.torgue@st.com, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Peter Ujfalusi <peter.ujfalusi@ti.com>,
	vkoul@kernel.org, mcoquelin.stm32@gmail.com,
	linux-stm32@st-md-mailman.stormreply.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] iio: adc: stm32-dfsdm: Use dma_request_chan() instead dma_request_slave_channel()
Date: Sat, 11 Jan 2020 10:58:04 +0000	[thread overview]
Message-ID: <20200111105804.7aebd43e@archlinux> (raw)
In-Reply-To: <5328b668-2522-5d8d-83bb-f99bfe3086ed@st.com>

On Thu, 9 Jan 2020 13:56:14 +0100
Fabrice Gasnier <fabrice.gasnier@st.com> wrote:

> On 1/9/20 12:40 PM, Peter Ujfalusi wrote:
> > 
> > 
> > On 09/01/2020 13.29, Fabrice Gasnier wrote:  
> >> On 1/9/20 11:32 AM, Peter Ujfalusi wrote:  
> >>>
> >>>
> >>> On 09/01/2020 11.13, Fabrice Gasnier wrote:  
> >>>> On 1/7/20 12:45 PM, Peter Ujfalusi wrote:  
> >>>>> dma_request_slave_channel() is a wrapper on top of dma_request_chan()
> >>>>> eating up the error code.
> >>>>>
> >>>>> By using dma_request_chan() directly the driver can support deferred
> >>>>> probing against DMA.
> >>>>>
> >>>>> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> >>>>> ---
> >>>>> Hi,
> >>>>>
> >>>>> Changes since v1:
> >>>>> - Fall back to IRQ mode for ADC only in case of ENODEV  
> >>>>
> >>>> Hi Peter,
> >>>>
> >>>> Thanks for the patch,
> >>>>
> >>>> Please find a minor comment here after. Apart from that, you can add my:
> >>>>
> >>>> Acked-by: Fabrice Gasnier <fabrice.gasnier@st.com>
> >>>>
> >>>>  
> >>>>>
> >>>>> Regards,
> >>>>> Peter
> >>>>>
> >>>>>  drivers/iio/adc/stm32-dfsdm-adc.c | 21 +++++++++++++++++----
> >>>>>  1 file changed, 17 insertions(+), 4 deletions(-)
> >>>>>
> >>>>> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
> >>>>> index e493242c266e..74a2211bdff4 100644
> >>>>> --- a/drivers/iio/adc/stm32-dfsdm-adc.c
> >>>>> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
> >>>>> @@ -1383,9 +1383,13 @@ static int stm32_dfsdm_dma_request(struct iio_dev *indio_dev)
> >>>>>  {
> >>>>>  	struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
> >>>>>  
> >>>>> -	adc->dma_chan = dma_request_slave_channel(&indio_dev->dev, "rx");
> >>>>> -	if (!adc->dma_chan)
> >>>>> -		return -EINVAL;
> >>>>> +	adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
> >>>>> +	if (IS_ERR(adc->dma_chan)) {
> >>>>> +		int ret = PTR_ERR(adc->dma_chan);
> >>>>> +
> >>>>> +		adc->dma_chan = NULL;
> >>>>> +		return ret;  
> >>>>
> >>>> You may "return PTR_ERR(adc->dma_chan);" directly here.  
> >>>
> >>> I don't make decision here on behalf of the adc path on to go forward w/
> >>> or w/o DMA support and if we go ahead the stm32_dfsdm_dma_release()
> >>> needs the dma_chan to be NULL in case we don't use DMA.
> >>>
> >>> It is much cleaner to set dma_chan to NULL here than doing it in other
> >>> paths.  
> >>
> >> Hi Peter,  
> > 
> > Hi Fabrice,
> >   
> >> Sorry I wasn't clear enough. I agree with you. I was suggesting only,
> >> talking about the 'ret' variable. It may be removed to spare a few lines
> >> :-).
> >> 	if (IS_ERR(adc->dma_chan)) {
> >> 		adc->dma_chan = NULL;
> >> 		return PTR_ERR(adc->dma_chan);
> >> 	}
> >> I'm okay both ways.  
> > 
> > PTR_ERR(NULL); will return 0
> > I need to retrieve the actual error code before NULLing dma_chan.  
> 
> Oh yes, so please forget this.
> Thanks,
> Fabrice

Applied to the togreg branch of iio.git and pushed out as testing.
Note I'll need to rebase once Greg pushes out staging/staging-next
with the changes currently in staging/staging-testing.  Shouldn't
have an effect on this though!

Thanks,

Jonathan

> 
> >   
> >>  
> >>>  
> >>>>
> >>>> Best Regards,
> >>>> Fabrice
> >>>>  
> >>>>> +	}
> >>>>>  
> >>>>>  	adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
> >>>>>  					 DFSDM_DMA_BUFFER_SIZE,
> >>>>> @@ -1509,7 +1513,16 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
> >>>>>  	init_completion(&adc->completion);
> >>>>>  
> >>>>>  	/* Optionally request DMA */
> >>>>> -	if (stm32_dfsdm_dma_request(indio_dev)) {
> >>>>> +	ret = stm32_dfsdm_dma_request(indio_dev);
> >>>>> +	if (ret) {
> >>>>> +		if (ret != -ENODEV) {
> >>>>> +			if (ret != -EPROBE_DEFER)
> >>>>> +				dev_err(&indio_dev->dev,
> >>>>> +					"DMA channel request failed with %d\n",
> >>>>> +					ret);
> >>>>> +			return ret;
> >>>>> +		}
> >>>>> +
> >>>>>  		dev_dbg(&indio_dev->dev, "No DMA support\n");
> >>>>>  		return 0;
> >>>>>  	}
> >>>>>  
> >>>
> >>> - Péter
> >>>
> >>> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> >>> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
> >>>  
> > 
> > - Péter
> > 
> > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> > Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
> >   


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-01-11 10:58 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-07 11:45 [PATCH v2] iio: adc: stm32-dfsdm: Use dma_request_chan() instead dma_request_slave_channel() Peter Ujfalusi
2020-01-07 11:45 ` Peter Ujfalusi
2020-01-08 10:12 ` [Linux-stm32] " Olivier MOYSAN
2020-01-08 10:12   ` Olivier MOYSAN
2020-01-09  9:13 ` Fabrice Gasnier
2020-01-09  9:13   ` Fabrice Gasnier
2020-01-09 10:32   ` Peter Ujfalusi
2020-01-09 10:32     ` Peter Ujfalusi
2020-01-09 11:29     ` Fabrice Gasnier
2020-01-09 11:29       ` Fabrice Gasnier
2020-01-09 11:40       ` Peter Ujfalusi
2020-01-09 11:40         ` Peter Ujfalusi
2020-01-09 12:56         ` Fabrice Gasnier
2020-01-09 12:56           ` Fabrice Gasnier
2020-01-11 10:58           ` Jonathan Cameron [this message]
2020-01-11 10:58             ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200111105804.7aebd43e@archlinux \
    --to=jic23@kernel.org \
    --cc=alexandre.torgue@st.com \
    --cc=fabrice.gasnier@st.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=olivier.moysan@st.com \
    --cc=peter.ujfalusi@ti.com \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.