On Tue, Feb 8, 2011 at 2:58 PM, Kevin Hilman <[email protected]> wrote: > Michael Williamson <[email protected]> writes: > >> For DMA operation, the davinci spi driver needs an event queue number. >> Currently, this number is passed as a IORESOURCE_DMA. This is not >> correct, as the event queue is not a DMA channel. Pass the event queue >> via the platform data structure instead. >> >> On dm355 and dm365, move the eventq assignment for spi0 out of resources >> array and into platform data. >> >> Signed-off-by: Michael Williamson <[email protected]> >> Acked-by: Sekhar Nori <[email protected]> > > With Grant's ack, will merge this through davinci tree.
Acked-by: Grant Likely <[email protected]> > > Kevin > >> --- >> Changes since v1: >> - Add Sekhar's Ack. >> - Really fix the typo. This time for sure (blew the format patch >> on last go around). >> >> arch/arm/mach-davinci/dm355.c | 5 +---- >> arch/arm/mach-davinci/dm365.c | 5 +---- >> arch/arm/mach-davinci/include/mach/spi.h | 15 ++++++++++----- >> drivers/spi/davinci_spi.c | 11 +++-------- >> 4 files changed, 15 insertions(+), 21 deletions(-) >> >> diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c >> index a5f8a80..76364d1 100644 >> --- a/arch/arm/mach-davinci/dm355.c >> +++ b/arch/arm/mach-davinci/dm355.c >> @@ -403,16 +403,13 @@ static struct resource dm355_spi0_resources[] = { >> .start = 16, >> .flags = IORESOURCE_DMA, >> }, >> - { >> - .start = EVENTQ_1, >> - .flags = IORESOURCE_DMA, >> - }, >> }; >> >> static struct davinci_spi_platform_data dm355_spi0_pdata = { >> .version = SPI_VERSION_1, >> .num_chipselect = 2, >> .cshold_bug = true, >> + .dma_event_q = EVENTQ_1, >> }; >> static struct platform_device dm355_spi0_device = { >> .name = "spi_davinci", >> diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c >> index 02d2cc3..4604e72 100644 >> --- a/arch/arm/mach-davinci/dm365.c >> +++ b/arch/arm/mach-davinci/dm365.c >> @@ -625,6 +625,7 @@ static u64 dm365_spi0_dma_mask = DMA_BIT_MASK(32); >> static struct davinci_spi_platform_data dm365_spi0_pdata = { >> .version = SPI_VERSION_1, >> .num_chipselect = 2, >> + .dma_event_q = EVENTQ_3, >> }; >> >> static struct resource dm365_spi0_resources[] = { >> @@ -645,10 +646,6 @@ static struct resource dm365_spi0_resources[] = { >> .start = 16, >> .flags = IORESOURCE_DMA, >> }, >> - { >> - .start = EVENTQ_3, >> - .flags = IORESOURCE_DMA, >> - }, >> }; >> >> static struct platform_device dm365_spi0_device = { >> diff --git a/arch/arm/mach-davinci/include/mach/spi.h >> b/arch/arm/mach-davinci/include/mach/spi.h >> index 38f4da5..7af305b 100644 >> --- a/arch/arm/mach-davinci/include/mach/spi.h >> +++ b/arch/arm/mach-davinci/include/mach/spi.h >> @@ -19,6 +19,8 @@ >> #ifndef __ARCH_ARM_DAVINCI_SPI_H >> #define __ARCH_ARM_DAVINCI_SPI_H >> >> +#include <mach/edma.h> >> + >> #define SPI_INTERN_CS 0xFF >> >> enum { >> @@ -39,13 +41,16 @@ enum { >> * to populate if all chip-selects are internal. >> * @cshold_bug: set this to true if the SPI controller on your chip >> requires >> * a write to CSHOLD bit in between transfers (like in DM355). >> + * @dma_event_q: DMA event queue to use if SPI_IO_TYPE_DMA is used for any >> + * device on the bus. >> */ >> struct davinci_spi_platform_data { >> - u8 version; >> - u8 num_chipselect; >> - u8 intr_line; >> - u8 *chip_sel; >> - bool cshold_bug; >> + u8 version; >> + u8 num_chipselect; >> + u8 intr_line; >> + u8 *chip_sel; >> + bool cshold_bug; >> + enum dma_event_q dma_event_q; >> }; >> >> /** >> diff --git a/drivers/spi/davinci_spi.c b/drivers/spi/davinci_spi.c >> index 6beab99..166a879 100644 >> --- a/drivers/spi/davinci_spi.c >> +++ b/drivers/spi/davinci_spi.c >> @@ -790,7 +790,6 @@ static int davinci_spi_probe(struct platform_device >> *pdev) >> struct resource *r, *mem; >> resource_size_t dma_rx_chan = SPI_NO_RESOURCE; >> resource_size_t dma_tx_chan = SPI_NO_RESOURCE; >> - resource_size_t dma_eventq = SPI_NO_RESOURCE; >> int i = 0, ret = 0; >> u32 spipc0; >> >> @@ -878,17 +877,13 @@ static int davinci_spi_probe(struct platform_device >> *pdev) >> r = platform_get_resource(pdev, IORESOURCE_DMA, 1); >> if (r) >> dma_tx_chan = r->start; >> - r = platform_get_resource(pdev, IORESOURCE_DMA, 2); >> - if (r) >> - dma_eventq = r->start; >> >> dspi->bitbang.txrx_bufs = davinci_spi_bufs; >> if (dma_rx_chan != SPI_NO_RESOURCE && >> - dma_tx_chan != SPI_NO_RESOURCE && >> - dma_eventq != SPI_NO_RESOURCE) { >> + dma_tx_chan != SPI_NO_RESOURCE) { >> dspi->dma.rx_channel = dma_rx_chan; >> dspi->dma.tx_channel = dma_tx_chan; >> - dspi->dma.eventq = dma_eventq; >> + dspi->dma.eventq = pdata->dma_event_q; >> >> ret = davinci_spi_request_dma(dspi); >> if (ret) >> @@ -897,7 +892,7 @@ static int davinci_spi_probe(struct platform_device >> *pdev) >> dev_info(&pdev->dev, "DMA: supported\n"); >> dev_info(&pdev->dev, "DMA: RX channel: %d, TX channel: %d, " >> "event queue: %d\n", dma_rx_chan, dma_tx_chan, >> - dma_eventq); >> + pdata->dma_event_q); >> } >> >> dspi->get_rx = davinci_spi_rx_buf_u8; > -- Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
