2019-12-23 15:51:07

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH v2] iio: adc: at91-sama5d2_adc: Use dma_request_chan() instead dma_request_slave_channel()

On Tue, 17 Dec 2019 12:31:00 +0200
Peter Ujfalusi <[email protected]> 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.
Unfortunately that doesn't seem to be true.
The function in question returns void...

And for that matter is called only from the set_watermark callback which
doesn't run at probe time.

So if we were to get a deferred response at runtime there isn't a whole
lot we could do with it.

Jonathan



>
> Signed-off-by: Peter Ujfalusi <[email protected]>
> ---
> Hi,
>
> Changes since v1:
> - Subject prefix is corrected to "iio: adc: at91-sama5d2_adc:"
>
> Regards,
> Peter
>
> drivers/iio/adc/at91-sama5d2_adc.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> index e1850f3d5cf3..a5c7771227d5 100644
> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> @@ -1444,10 +1444,10 @@ static void at91_adc_dma_init(struct platform_device *pdev)
> if (st->dma_st.dma_chan)
> return;
>
> - st->dma_st.dma_chan = dma_request_slave_channel(&pdev->dev, "rx");
> -
> - if (!st->dma_st.dma_chan) {
> + st->dma_st.dma_chan = dma_request_chan(&pdev->dev, "rx");
> + if (IS_ERR(st->dma_st.dma_chan)) {
> dev_info(&pdev->dev, "can't get DMA channel\n");
> + st->dma_st.dma_chan = NULL;
> goto dma_exit;
> }
>


2019-12-23 22:02:26

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH v2] iio: adc: at91-sama5d2_adc: Use dma_request_chan() instead dma_request_slave_channel()

Hi Jonathan,

On 12/23/19 5:50 PM, Jonathan Cameron wrote:
> On Tue, 17 Dec 2019 12:31:00 +0200
> Peter Ujfalusi <[email protected]> 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.
> Unfortunately that doesn't seem to be true.
> The function in question returns void...
>
> And for that matter is called only from the set_watermark callback which
> doesn't run at probe time.
>
> So if we were to get a deferred response at runtime there isn't a whole
> lot we could do with it.

With dma_request_chan() drivers can support deferred probing ;)
I forgot to remove the section which does not apply to this driver.

The main reason for this change is to retire the old APIs for requesting
DMA channel and keep one, consistently named set.

I'll send v3 in in about two weeks with updated commit message.

>
> Jonathan
>
>
>
>>
>> Signed-off-by: Peter Ujfalusi <[email protected]>
>> ---
>> Hi,
>>
>> Changes since v1:
>> - Subject prefix is corrected to "iio: adc: at91-sama5d2_adc:"
>>
>> Regards,
>> Peter
>>
>> drivers/iio/adc/at91-sama5d2_adc.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
>> index e1850f3d5cf3..a5c7771227d5 100644
>> --- a/drivers/iio/adc/at91-sama5d2_adc.c
>> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
>> @@ -1444,10 +1444,10 @@ static void at91_adc_dma_init(struct platform_device *pdev)
>> if (st->dma_st.dma_chan)
>> return;
>>
>> - st->dma_st.dma_chan = dma_request_slave_channel(&pdev->dev, "rx");
>> -
>> - if (!st->dma_st.dma_chan) {
>> + st->dma_st.dma_chan = dma_request_chan(&pdev->dev, "rx");
>> + if (IS_ERR(st->dma_st.dma_chan)) {
>> dev_info(&pdev->dev, "can't get DMA channel\n");
>> + st->dma_st.dma_chan = NULL;
>> goto dma_exit;
>> }
>>
>

- Peter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki