Lines Matching refs:espi

115 	struct ep93xx_spi *espi = spi_controller_get_devdata(host);
116 unsigned long spi_clk_rate = clk_get_rate(espi->clk);
150 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
173 writel(div_cpsr, espi->mmio + SSPCPSR);
174 writel(cr0, espi->mmio + SSPCR0);
181 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
187 val = ((u16 *)xfer->tx_buf)[espi->tx];
188 espi->tx += 2;
191 val = ((u8 *)xfer->tx_buf)[espi->tx];
192 espi->tx += 1;
194 writel(val, espi->mmio + SSPDR);
199 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
203 val = readl(espi->mmio + SSPDR);
206 ((u16 *)xfer->rx_buf)[espi->rx] = val;
207 espi->rx += 2;
210 ((u8 *)xfer->rx_buf)[espi->rx] = val;
211 espi->rx += 1;
228 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
232 while ((readl(espi->mmio + SSPSR) & SSPSR_RNE)) {
234 espi->fifo_level--;
238 while (espi->fifo_level < SPI_FIFO_SIZE && espi->tx < xfer->len) {
240 espi->fifo_level++;
243 if (espi->rx == xfer->len)
275 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
296 chan = espi->dma_rx;
298 sgt = &espi->rx_sgt;
300 conf.src_addr = espi->sspdr_phys;
303 chan = espi->dma_tx;
305 sgt = &espi->tx_sgt;
307 conf.dst_addr = espi->sspdr_phys;
317 * because we are using @espi->zeropage to provide a zero RX buffer
342 sg_set_page(sg, virt_to_page(espi->zeropage),
379 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
384 chan = espi->dma_rx;
385 sgt = &espi->rx_sgt;
387 chan = espi->dma_tx;
388 sgt = &espi->tx_sgt;
406 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
430 dma_async_issue_pending(espi->dma_rx);
431 dma_async_issue_pending(espi->dma_tx);
440 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
447 if (readl(espi->mmio + SSPIIR) & SSPIIR_RORIS) {
449 writel(0, espi->mmio + SSPICR);
473 val = readl(espi->mmio + SSPCR1);
475 writel(val, espi->mmio + SSPCR1);
486 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
497 espi->rx = 0;
498 espi->tx = 0;
505 if (espi->dma_rx && xfer->len > SPI_FIFO_SIZE)
511 val = readl(espi->mmio + SSPCR1);
513 writel(val, espi->mmio + SSPCR1);
522 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
529 while (readl(espi->mmio + SSPSR) & SSPSR_RNE) {
535 readl(espi->mmio + SSPDR);
542 espi->fifo_level = 0;
549 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
553 ret = clk_prepare_enable(espi->clk);
557 val = readl(espi->mmio + SSPCR1);
559 writel(val, espi->mmio + SSPCR1);
566 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
569 val = readl(espi->mmio + SSPCR1);
571 writel(val, espi->mmio + SSPCR1);
573 clk_disable_unprepare(espi->clk);
587 static int ep93xx_spi_setup_dma(struct ep93xx_spi *espi)
592 espi->zeropage = (void *)get_zeroed_page(GFP_KERNEL);
593 if (!espi->zeropage)
599 espi->dma_rx_data.port = EP93XX_DMA_SSP;
600 espi->dma_rx_data.direction = DMA_DEV_TO_MEM;
601 espi->dma_rx_data.name = "ep93xx-spi-rx";
603 espi->dma_rx = dma_request_channel(mask, ep93xx_spi_dma_filter,
604 &espi->dma_rx_data);
605 if (!espi->dma_rx) {
610 espi->dma_tx_data.port = EP93XX_DMA_SSP;
611 espi->dma_tx_data.direction = DMA_MEM_TO_DEV;
612 espi->dma_tx_data.name = "ep93xx-spi-tx";
614 espi->dma_tx = dma_request_channel(mask, ep93xx_spi_dma_filter,
615 &espi->dma_tx_data);
616 if (!espi->dma_tx) {
624 dma_release_channel(espi->dma_rx);
625 espi->dma_rx = NULL;
627 free_page((unsigned long)espi->zeropage);
632 static void ep93xx_spi_release_dma(struct ep93xx_spi *espi)
634 if (espi->dma_rx) {
635 dma_release_channel(espi->dma_rx);
636 sg_free_table(&espi->rx_sgt);
638 if (espi->dma_tx) {
639 dma_release_channel(espi->dma_tx);
640 sg_free_table(&espi->tx_sgt);
643 if (espi->zeropage)
644 free_page((unsigned long)espi->zeropage);
651 struct ep93xx_spi *espi;
666 host = spi_alloc_host(&pdev->dev, sizeof(*espi));
686 espi = spi_controller_get_devdata(host);
688 espi->clk = devm_clk_get(&pdev->dev, NULL);
689 if (IS_ERR(espi->clk)) {
691 error = PTR_ERR(espi->clk);
699 host->max_speed_hz = clk_get_rate(espi->clk) / 2;
700 host->min_speed_hz = clk_get_rate(espi->clk) / (254 * 256);
702 espi->mmio = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
703 if (IS_ERR(espi->mmio)) {
704 error = PTR_ERR(espi->mmio);
707 espi->sspdr_phys = res->start + SSPDR;
716 if (info->use_dma && ep93xx_spi_setup_dma(espi))
720 writel(0, espi->mmio + SSPCR1);
734 ep93xx_spi_release_dma(espi);
744 struct ep93xx_spi *espi = spi_controller_get_devdata(host);
746 ep93xx_spi_release_dma(espi);