From mboxrd@z Thu Jan 1 00:00:00 1970 From: viresh kumar Subject: Re: [PATCH resend] spi/amba-pl022: work in polling or interrupt mode if pl022_dma_probe fails Date: Tue, 17 May 2011 09:30:27 +0530 Message-ID: <4DD1F2DB.9020308@st.com> References: <052261410dd8d224fc199518e646abf80bfa7d4c.1305518921.git.viresh.kumar@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Armando VISCONTI , "linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org" , Shiraz HASHIM , "spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org" , "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org" To: "dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org" , Return-path: In-Reply-To: <052261410dd8d224fc199518e646abf80bfa7d4c.1305518921.git.viresh.kumar-qxv4g6HH51o@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spi-devel-general-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: linux-spi.vger.kernel.org On 05/16/2011 09:40 AM, Viresh KUMAR wrote: > If pl022_dma_probe fails, we can try to transfer data in polling or interrupt > mode. Also, set platform_info->enable_dma to 0, so that no other code tries to > use dma. > > Signed-off-by: Viresh Kumar > Acked-by: Linus Walleij > --- > drivers/spi/amba-pl022.c | 11 ++++++----- > 1 files changed, 6 insertions(+), 5 deletions(-) > David, Sorry for missing you earlier in "to" list. Can you please push this through spi-devel tree. -- viresh > diff --git a/drivers/spi/amba-pl022.c b/drivers/spi/amba-pl022.c > index dae886e..77f90de 100644 > --- a/drivers/spi/amba-pl022.c > +++ b/drivers/spi/amba-pl022.c > @@ -1068,7 +1068,7 @@ static int __init pl022_dma_probe(struct pl022 *pl022) > pl022->master_info->dma_filter, > pl022->master_info->dma_rx_param); > if (!pl022->dma_rx_channel) { > - dev_err(&pl022->adev->dev, "no RX DMA channel!\n"); > + dev_dbg(&pl022->adev->dev, "no RX DMA channel!\n"); > goto err_no_rxchan; > } > > @@ -1076,13 +1076,13 @@ static int __init pl022_dma_probe(struct pl022 *pl022) > pl022->master_info->dma_filter, > pl022->master_info->dma_tx_param); > if (!pl022->dma_tx_channel) { > - dev_err(&pl022->adev->dev, "no TX DMA channel!\n"); > + dev_dbg(&pl022->adev->dev, "no TX DMA channel!\n"); > goto err_no_txchan; > } > > pl022->dummypage = kmalloc(PAGE_SIZE, GFP_KERNEL); > if (!pl022->dummypage) { > - dev_err(&pl022->adev->dev, "no DMA dummypage!\n"); > + dev_dbg(&pl022->adev->dev, "no DMA dummypage!\n"); > goto err_no_dummypage; > } > > @@ -1098,6 +1098,8 @@ err_no_txchan: > dma_release_channel(pl022->dma_rx_channel); > pl022->dma_rx_channel = NULL; > err_no_rxchan: > + dev_err(&pl022->adev->dev, > + "Failed to work in dma mode, work without dma!\n"); > return -ENODEV; > } > > @@ -2111,7 +2113,7 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id) > if (platform_info->enable_dma) { > status = pl022_dma_probe(pl022); > if (status != 0) > - goto err_no_dma; > + platform_info->enable_dma = 0; > } > > /* Initialize and start queue */ > @@ -2143,7 +2145,6 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id) > err_init_queue: > destroy_queue(pl022); > pl022_dma_remove(pl022); > - err_no_dma: > free_irq(adev->irq[0], pl022); > err_no_irq: > clk_put(pl022->clk); -- viresh ------------------------------------------------------------------------------ Achieve unprecedented app performance and reliability What every C/C++ and Fortran developer should know. Learn how Intel has extended the reach of its next-generation tools to help boost performance applications - inlcuding clusters. http://p.sf.net/sfu/intel-dev2devmay