mmc: atmel-mci: remove compat for non DT board when requesting dma chan
PATCH RESEND 1/2 mmc: atmel-mci: remove compat for non DT board when requesting dma chan
All boards with a dma controller have DT support so using dma_request_slave_channel_compat is no more needed.
---
Sorry for the noise, typo in cc list.
drivers/mmc/host/atmel-mci.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-)
drivers/mmc/host/atmel-mci.c +1 -19
@@ -2272,23 +2272,6 @@ static void atmci_cleanup_slot(struct atmel_mci_slot *slot,mmc_free_host (slot->mmc); } -static bool atmci_filter (struct dma_chan *chan,void *pdata) -{ -struct mci_platform_data *sl_pdata = pdata; -struct mci_dma_data *sl; - -if (!sl_pdata) -return false; - - sl = sl_pdata->dma_slave; -if (sl &&find_slave_dev (sl) == chan->device->dev) { - chan->private =slave_data_ptr (sl); -return true; - }else { -return false; - } -} -static bool atmci_configure_dma (struct atmel_mci *host) {struct mci_platform_data *pdata;
@@ -2302,8 +2285,7 @@ static bool atmci_configure_dma(struct atmel_mci *host)dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - host->dma.chan =dma_request_slave_channel_compat (mask, atmci_filter, pdata, - &host->pdev->dev,"rxtx" ); + host->dma.chan =dma_request_slave_channel (&host->pdev->dev,"rxtx" );if (!host->dma.chan) {dev_warn (&host->pdev->dev,"no DMA channel available\n" );return false;
Signature · 1 line
2.0.3
PATCH RESEND 2/2 mmc: atmel-mci: introduce probe deferring
Return probe defer if requesting a dma channel without a dma controller probed. Using late_initcall is no more needing.
---
Sorry for the noise, typo in cc list.
drivers/mmc/host/atmel-mci.c | 52 +++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 22 deletions(-)
drivers/mmc/host/atmel-mci.c +30 -22
@@ -2272,37 +2272,40 @@ static void atmci_cleanup_slot(struct atmel_mci_slot *slot,mmc_free_host (slot->mmc); } -static bool atmci_configure_dma (struct atmel_mci *host) +static int atmci_configure_dma (struct atmel_mci *host) {struct mci_platform_data *pdata;dma_cap_mask_t mask; +int ret =0 ;if (host ==NULL ) -return false; +return -EINVAL ; pdata = host->pdev->dev.platform_data;dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - host->dma.chan =dma_request_slave_channel (&host->pdev->dev,"rxtx" ); -if (!host->dma.chan) { -dev_warn (&host->pdev->dev,"no DMA channel available\n" ); -return false; - }else { -dev_info (&host->pdev->dev, -"using %s for DMA transfers\n" , -dma_chan_name (host->dma.chan)); - - host->dma_conf.src_addr = host->mapbase +ATMCI_RDR ; - host->dma_conf.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; - host->dma_conf.src_maxburst =1 ; - host->dma_conf.dst_addr = host->mapbase +ATMCI_TDR ; - host->dma_conf.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; - host->dma_conf.dst_maxburst =1 ; - host->dma_conf.device_fc = false; -return true; + host->dma.chan =dma_request_slave_channel_reason (&host->pdev->dev,"rxtx" ); +if (IS_ERR (host->dma.chan)) { + ret =PTR_ERR (host->dma.chan); +if (ret != -EPROBE_DEFER ) +dev_warn (&host->pdev->dev,"no DMA channel available\n" ); +return ret; } + +dev_info (&host->pdev->dev, +"using %s for DMA transfers\n" , +dma_chan_name (host->dma.chan)); + + host->dma_conf.src_addr = host->mapbase +ATMCI_RDR ; + host->dma_conf.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; + host->dma_conf.src_maxburst =1 ; + host->dma_conf.dst_addr = host->mapbase +ATMCI_TDR ; + host->dma_conf.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; + host->dma_conf.dst_maxburst =1 ; + host->dma_conf.device_fc = false; +return ret; }/*
@@ -2419,7 +2422,10 @@ static int __init atmci_probe(struct platform_device *pdev)/* Get MCI capabilities and set operations according to it */ atmci_get_cap (host); -if (atmci_configure_dma (host)) { + ret =atmci_configure_dma (host); +if (ret == -EPROBE_DEFER ) + goto err_dma_probe_defer; +if (ret ==0 ) { host->prepare_data = &atmci_prepare_data_dma; host->submit_data = &atmci_submit_data_dma; host->stop_transfer = &atmci_stop_transfer_dma;
@@ -2506,6 +2512,7 @@ err_init_slot:del_timer_sync (&host->timer);if (host->dma.chan)dma_release_channel (host->dma.chan); +err_dma_probe_defer:free_irq (irq, host);return ret; }
@@ -2573,6 +2580,7 @@ static const struct dev_pm_ops atmci_dev_pm_ops = { };static struct platform_driver atmci_driver = { + .probe = atmci_probe, .remove =__exit_p (atmci_remove), .driver = { .name ="atmel_mci" ,
@@ -2583,7 +2591,7 @@ static struct platform_driver atmci_driver = {static int __init atmci_init (void ) { -return platform_driver_probe (&atmci_driver, atmci_probe); +return platform_driver_register (&atmci_driver); } static void __exit atmci_exit(void)
@@ -2591,7 +2599,7 @@ static void __exit atmci_exit(void)platform_driver_unregister (&atmci_driver); } -late_initcall (atmci_init);/* try to load after dma driver when built-in */ +subsys_initcall (atmci_init);module_exit (atmci_exit);MODULE_DESCRIPTION ("Atmel Multimedia Card Interface driver" );
Signature · 1 line
2.0.3
PATCH RESEND 2/2 mmc: atmel-mci: introduce probe deferring
On 14/11/2014 15:36, Ludovic Desroches :
Quoted 113 lines
Return probe defer if requesting a dma channel without a dma controller probed. Using
late_initcallis no more needing.Signed-off-by Ludovic Desroches <[email protected]>---
Sorry for the noise, typo in cc list.
drivers/mmc/host/atmel-mci.c | 52 +++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 22 deletions(-)drivers/mmc/host/atmel-mci.c +29
-21@@ -2272,37 +2272,40 @@ static void atmci_cleanup_slot(struct atmel_mci_slot *slot,mmc_free_host (slot->mmc); } -static bool atmci_configure_dma (struct atmel_mci *host) +static int atmci_configure_dma (struct atmel_mci *host) {struct mci_platform_data *pdata;dma_cap_mask_t mask; +int ret =0 ;if (host ==NULL ) -return false; +return -EINVAL ; pdata = host->pdev->dev.platform_data;dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - host->dma.chan =dma_request_slave_channel (&host->pdev->dev,"rxtx" ); -if (!host->dma.chan) { -dev_warn (&host->pdev->dev,"no DMA channel available\n" ); -return false; - }else { -dev_info (&host->pdev->dev, -"using %s for DMA transfers\n" , -dma_chan_name (host->dma.chan)); - - host->dma_conf.src_addr = host->mapbase +ATMCI_RDR ; - host->dma_conf.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; - host->dma_conf.src_maxburst =1 ; - host->dma_conf.dst_addr = host->mapbase +ATMCI_TDR ; - host->dma_conf.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; - host->dma_conf.dst_maxburst =1 ; - host->dma_conf.device_fc = false; -return true; + host->dma.chan =dma_request_slave_channel_reason (&host->pdev->dev,"rxtx" ); +if (IS_ERR (host->dma.chan)) { + ret =PTR_ERR (host->dma.chan); +if (ret != -EPROBE_DEFER ) +dev_warn (&host->pdev->dev,"no DMA channel available\n" ); +return ret; } + +dev_info (&host->pdev->dev, +"using %s for DMA transfers\n" , +dma_chan_name (host->dma.chan)); + + host->dma_conf.src_addr = host->mapbase +ATMCI_RDR ; + host->dma_conf.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; + host->dma_conf.src_maxburst =1 ; + host->dma_conf.dst_addr = host->mapbase +ATMCI_TDR ; + host->dma_conf.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; + host->dma_conf.dst_maxburst =1 ; + host->dma_conf.device_fc = false; +return ret; }/* @@ -2419,7 +2422,10 @@ static int __init atmci_probe(struct platform_device *pdev)/* Get MCI capabilities and set operations according to it */ atmci_get_cap (host); -if (atmci_configure_dma (host)) { + ret =atmci_configure_dma (host); +if (ret == -EPROBE_DEFER ) + goto err_dma_probe_defer; +if (ret ==0 ) { host->prepare_data = &atmci_prepare_data_dma; host->submit_data = &atmci_submit_data_dma; host->stop_transfer = &atmci_stop_transfer_dma;@@ -2506,6 +2512,7 @@ err_init_slot:del_timer_sync (&host->timer);if (host->dma.chan)dma_release_channel (host->dma.chan); +err_dma_probe_defer:free_irq (irq, host);return ret; }@@ -2573,6 +2580,7 @@ static const struct dev_pm_ops atmci_dev_pm_ops = { };static struct platform_driver atmci_driver = { + .probe = atmci_probe, .remove =__exit_p (atmci_remove), .driver = { .name ="atmel_mci" ,@@ -2583,7 +2591,7 @@ static struct platform_driver atmci_driver = {static int __init atmci_init (void ) { -return platform_driver_probe (&atmci_driver, atmci_probe); +return platform_driver_register (&atmci_driver); } static void __exit atmci_exit(void)
drivers/mmc/host/atmel-mci.c static void __exit atmci_exit(void) · line 2602
Quoted 5 lines
drivers/mmc/host/atmel-mci.c +1
-1@@ -2591,7 +2599,7 @@ static void __exit atmci_exit(void)platform_driver_unregister (&atmci_driver); } -late_initcall (atmci_init);/* try to load after dma driver when built-in */ +subsys_initcall (atmci_init);
If deferring probe is activated, so I don't know why a special initcall function is still needed.
Quoted 4 lines
drivers/mmc/host/atmel-mci.c +0
-0module_exit (atmci_exit);MODULE_DESCRIPTION ("Atmel Multimedia Card Interface driver" );
Signature · 1 line
Nicolas Ferre
PATCH RESEND 2/2 mmc: atmel-mci: introduce probe deferring
Quoted 117 lines · Nicolas Ferre
On 14/11/2014 15:36, Ludovic Desroches :
Quoted 116 lines
Return probe defer if requesting a dma channel without a dma controller probed. Using
late_initcallis no more needing.Signed-off-by Ludovic Desroches <[email protected]>---
Sorry for the noise, typo in cc list.
drivers/mmc/host/atmel-mci.c | 52 +++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 22 deletions(-)drivers/mmc/host/atmel-mci.c +29
-21@@ -2272,37 +2272,40 @@ static void atmci_cleanup_slot(struct atmel_mci_slot *slot,mmc_free_host (slot->mmc); } -static bool atmci_configure_dma (struct atmel_mci *host) +static int atmci_configure_dma (struct atmel_mci *host) {struct mci_platform_data *pdata;dma_cap_mask_t mask; +int ret =0 ;if (host ==NULL ) -return false; +return -EINVAL ; pdata = host->pdev->dev.platform_data;dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - host->dma.chan =dma_request_slave_channel (&host->pdev->dev,"rxtx" ); -if (!host->dma.chan) { -dev_warn (&host->pdev->dev,"no DMA channel available\n" ); -return false; - }else { -dev_info (&host->pdev->dev, -"using %s for DMA transfers\n" , -dma_chan_name (host->dma.chan)); - - host->dma_conf.src_addr = host->mapbase +ATMCI_RDR ; - host->dma_conf.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; - host->dma_conf.src_maxburst =1 ; - host->dma_conf.dst_addr = host->mapbase +ATMCI_TDR ; - host->dma_conf.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; - host->dma_conf.dst_maxburst =1 ; - host->dma_conf.device_fc = false; -return true; + host->dma.chan =dma_request_slave_channel_reason (&host->pdev->dev,"rxtx" ); +if (IS_ERR (host->dma.chan)) { + ret =PTR_ERR (host->dma.chan); +if (ret != -EPROBE_DEFER ) +dev_warn (&host->pdev->dev,"no DMA channel available\n" ); +return ret; } + +dev_info (&host->pdev->dev, +"using %s for DMA transfers\n" , +dma_chan_name (host->dma.chan)); + + host->dma_conf.src_addr = host->mapbase +ATMCI_RDR ; + host->dma_conf.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; + host->dma_conf.src_maxburst =1 ; + host->dma_conf.dst_addr = host->mapbase +ATMCI_TDR ; + host->dma_conf.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; + host->dma_conf.dst_maxburst =1 ; + host->dma_conf.device_fc = false; +return ret; }/* @@ -2419,7 +2422,10 @@ static int __init atmci_probe(struct platform_device *pdev)/* Get MCI capabilities and set operations according to it */ atmci_get_cap (host); -if (atmci_configure_dma (host)) { + ret =atmci_configure_dma (host); +if (ret == -EPROBE_DEFER ) + goto err_dma_probe_defer; +if (ret ==0 ) { host->prepare_data = &atmci_prepare_data_dma; host->submit_data = &atmci_submit_data_dma; host->stop_transfer = &atmci_stop_transfer_dma;@@ -2506,6 +2512,7 @@ err_init_slot:del_timer_sync (&host->timer);if (host->dma.chan)dma_release_channel (host->dma.chan); +err_dma_probe_defer:free_irq (irq, host);return ret; }@@ -2573,6 +2580,7 @@ static const struct dev_pm_ops atmci_dev_pm_ops = { };static struct platform_driver atmci_driver = { + .probe = atmci_probe, .remove =__exit_p (atmci_remove), .driver = { .name ="atmel_mci" ,@@ -2583,7 +2591,7 @@ static struct platform_driver atmci_driver = {static int __init atmci_init (void ) { -return platform_driver_probe (&atmci_driver, atmci_probe); +return platform_driver_register (&atmci_driver); } static void __exit atmci_exit(void)@@ -2591,7 +2599,7 @@ static void __exit atmci_exit(void)platform_driver_unregister (&atmci_driver); }
Quoted 6 lines
drivers/mmc/host/atmel-mci.c static void __exit atmci_exit(void) · line 2602
Quoted 2 lines
drivers/mmc/host/atmel-mci.c +1
-1-late_initcall (atmci_init);/* try to load after dma driver when built-in */ +subsys_initcall (atmci_init);If deferring probe is activated, so I don't know why a special initcall function is still needed.
Right, initcall is still a constraint I can remove, I'll replace it with module_platform_driver().
Quoted 4 lines
drivers/mmc/host/atmel-mci.c static void __exit atmci_exit(void) · line 2605
Quoted 4 lines
drivers/mmc/host/atmel-mci.c +0
-0module_exit (atmci_exit);MODULE_DESCRIPTION ("Atmel Multimedia Card Interface driver" );
Ludovic
PATCH RESEND 1/2 mmc: atmel-mci: remove compat for non DT board when requesting dma chan
In reply to Ludovic DesrochesOn 14/11/2014 15:36, Ludovic Desroches :
Quoted 4 lines
All boards with a dma controller have DT support so using
dma_request_slave_channel_compatis no more needed.Signed-off-by Ludovic Desroches <[email protected]>
Yes, sure.
Quoted 46 lines
---
Sorry for the noise, typo in cc list.
drivers/mmc/host/atmel-mci.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-)drivers/mmc/host/atmel-mci.c +1
-19@@ -2272,23 +2272,6 @@ static void atmci_cleanup_slot(struct atmel_mci_slot *slot,mmc_free_host (slot->mmc); } -static bool atmci_filter (struct dma_chan *chan,void *pdata) -{ -struct mci_platform_data *sl_pdata = pdata; -struct mci_dma_data *sl; - -if (!sl_pdata) -return false; - - sl = sl_pdata->dma_slave; -if (sl &&find_slave_dev (sl) == chan->device->dev) { - chan->private =slave_data_ptr (sl); -return true; - }else { -return false; - } -} -static bool atmci_configure_dma (struct atmel_mci *host) {struct mci_platform_data *pdata;@@ -2302,8 +2285,7 @@ static bool atmci_configure_dma(struct atmel_mci *host)dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - host->dma.chan =dma_request_slave_channel_compat (mask, atmci_filter, pdata, - &host->pdev->dev,"rxtx" ); + host->dma.chan =dma_request_slave_channel (&host->pdev->dev,"rxtx" );if (!host->dma.chan) {dev_warn (&host->pdev->dev,"no DMA channel available\n" );return false;
Signature · 1 line
Nicolas Ferre
Ulf Hansson
AppliedPATCH RESEND 1/2 mmc: atmel-mci: remove compat for non DT board when requesting dma chan
In reply to Ludovic DesrochesQuoted 4 lines · Ludovic Desroches
All boards with a dma controller have DT support so using
dma_request_slave_channel_compatis no more needed.Signed-off-by Ludovic Desroches <[email protected]>
Thanks! Applied for next.
Kind regards
Uffe
Quoted 48 lines
---
Sorry for the noise, typo in cc list.
drivers/mmc/host/atmel-mci.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-)drivers/mmc/host/atmel-mci.c +1
-20@@ -2272,23 +2272,6 @@ static void atmci_cleanup_slot(struct atmel_mci_slot *slot,mmc_free_host (slot->mmc); } -static bool atmci_filter (struct dma_chan *chan,void *pdata) -{ -struct mci_platform_data *sl_pdata = pdata; -struct mci_dma_data *sl; - -if (!sl_pdata) -return false; - - sl = sl_pdata->dma_slave; -if (sl &&find_slave_dev (sl) == chan->device->dev) { - chan->private =slave_data_ptr (sl); -return true; - }else { -return false; - } -} -static bool atmci_configure_dma (struct atmel_mci *host) {struct mci_platform_data *pdata;@@ -2302,8 +2285,7 @@ static bool atmci_configure_dma(struct atmel_mci *host)dma_cap_zero (mask);dma_cap_set (DMA_SLAVE , mask); - host->dma.chan =dma_request_slave_channel_compat (mask, atmci_filter, pdata, - &host->pdev->dev,"rxtx" ); + host->dma.chan =dma_request_slave_channel (&host->pdev->dev,"rxtx" );if (!host->dma.chan) {dev_warn (&host->pdev->dev,"no DMA channel available\n" );return false; --2.0.3