[v2] iio: adc: at91-sama5d2_adc: Use dma_request_chan() instead dma_request_slave_channel()

Message ID 20191217103100.21737-1-peter.ujfalusi@ti.com
State Accepted
Commit 687d39d4512aa5f644450d0662f40aeeac1e84a7
Headers show
Series
  • [v2] iio: adc: at91-sama5d2_adc: Use dma_request_chan() instead dma_request_slave_channel()
Related show

Commit Message

Peter Ujfalusi Dec. 17, 2019, 10:31 a.m.
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:
- 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(-)

-- 
Peter

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

Comments

Jonathan Cameron Dec. 23, 2019, 3:50 p.m. | #1
On Tue, 17 Dec 2019 12:31:00 +0200
Peter Ujfalusi <peter.ujfalusi@ti.com> 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 <peter.ujfalusi@ti.com>

> ---

> 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 Ujfalusi Dec. 23, 2019, 10:02 p.m. | #2
Hi Jonathan,

On 12/23/19 5:50 PM, Jonathan Cameron wrote:
> On Tue, 17 Dec 2019 12:31:00 +0200

> Peter Ujfalusi <peter.ujfalusi@ti.com> 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 <peter.ujfalusi@ti.com>

>> ---

>> 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

Patch

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;
 	}