This is the patch that i gathered from the discussion. I tested it with mcp3008 adc full duplex communication and it works as a charm.
2014-10-25 9:19 GMT+01:00 Henrik Nordström <[email protected]>: > Can you please resend this as a unified diff? (diff -u) > > > fre 2014-10-24 klockan 01:04 -0700 skrev Gnichi Mohamed: > > I made a cooking of patches in case any one needs it. Mo > > > > > > 513,519d512 > > < /* keep unused burst */ > > < void spi_clear_dhb(void *base_addr) > > < { > > < u32 reg_val = readl(base_addr + SPI_CTL_REG); > > < reg_val &= ~SPI_CTL_DHB; > > < writel(reg_val, base_addr + SPI_CTL_REG); > > < } > > 591a585 > > > aw_spi_sel_dma_type(0, aw_spi->base_addr); > > 617c611,612 > > < spin_unlock_irqrestore(&aw_spi->lock, flags); > > --- > > > aw_spi_sel_dma_type(0, aw_spi->base_addr); > > > spin_unlock_irqrestore(&aw_spi->lock, flags); > > 958,960c953,956 > > < #else > > < aw_spi_sel_dma_type(1, base_addr); > > < #endif > > --- > > > aw_spi_sel_dma_type(0, base_addr); > > > #else > > > aw_spi_sel_dma_type(1, base_addr); > > > #endif > > 1008,1009c1004 > > < unsigned int poll_time_rx = 0x7ffff; > > < unsigned int poll_time_tx = 0xfffff; > > --- > > > unsigned int poll_time = 0xfffff; > > 1016,1022c1011 > > < aw_spi_start_xfer(base_addr); > > < if (tx_len) { > > < while ( aw_spi_query_txfifo(base_addr) && > > (--poll_time_tx > 0) ); //txFIFO counter > > < if ( poll_time_tx <= 0 ) { > > < spi_wrn("cpu tx data time out!\n"); > > < } > > < } > > --- > > > aw_spi_start_xfer(base_addr); > > 1024c1013 > > < while(rx_len && (--poll_time_rx >0)) { > > --- > > > while(rx_len && (--poll_time >0)) { > > 1026,1032c1015,1019 > > < if (aw_spi_query_rxfifo(base_addr)) { > > < *rx_buf++ = readb(base_addr > > + SPI_RXDATA_REG); //fetch data > > < --rx_len; > > < } > > < if ( poll_time_rx <= 0 ) { > > < spi_wrn("cpu rx data time > > out!\n"); > > < } > > --- > > > if(aw_spi_query_rxfifo(base_addr)){ > > > *rx_buf++ = readb(base_addr + > > SPI_RXDATA_REG);//fetch data > > > --rx_len; > > > poll_time = 0xffff; > > > } > > 1034c1021,1025 > > < > > --- > > > } else { > > > while(aw_spi_query_txfifo(base_addr)&&(--poll_time > 0) > > );/* txFIFO counter */ > > > } > > > if(poll_time <= 0) { > > > spi_wrn("cpu tx data time out!\n"); > > 1093,1096d1083 > > < /* full duplex mode */ > > < if (t->rx_buf && t->tx_buf) > > < spi_clear_dhb(aw_spi->base_addr); > > < > > > > > > > > -- > > You received this message because you are subscribed to the Google > > Groups "linux-sunxi" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to [email protected]. > > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "linux-sunxi" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/linux-sunxi/RpjSIJNJjTM/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
patchspi
Description: Binary data
