dspi 135 drivers/spi/spi-davinci.c static void davinci_spi_rx_buf_u8(u32 data, struct davinci_spi *dspi) dspi 137 drivers/spi/spi-davinci.c if (dspi->rx) { dspi 138 drivers/spi/spi-davinci.c u8 *rx = dspi->rx; dspi 140 drivers/spi/spi-davinci.c dspi->rx = rx; dspi 144 drivers/spi/spi-davinci.c static void davinci_spi_rx_buf_u16(u32 data, struct davinci_spi *dspi) dspi 146 drivers/spi/spi-davinci.c if (dspi->rx) { dspi 147 drivers/spi/spi-davinci.c u16 *rx = dspi->rx; dspi 149 drivers/spi/spi-davinci.c dspi->rx = rx; dspi 153 drivers/spi/spi-davinci.c static u32 davinci_spi_tx_buf_u8(struct davinci_spi *dspi) dspi 157 drivers/spi/spi-davinci.c if (dspi->tx) { dspi 158 drivers/spi/spi-davinci.c const u8 *tx = dspi->tx; dspi 161 drivers/spi/spi-davinci.c dspi->tx = tx; dspi 166 drivers/spi/spi-davinci.c static u32 davinci_spi_tx_buf_u16(struct davinci_spi *dspi) dspi 170 drivers/spi/spi-davinci.c if (dspi->tx) { dspi 171 drivers/spi/spi-davinci.c const u16 *tx = dspi->tx; dspi 174 drivers/spi/spi-davinci.c dspi->tx = tx; dspi 200 drivers/spi/spi-davinci.c struct davinci_spi *dspi; dspi 205 drivers/spi/spi-davinci.c dspi = spi_master_get_devdata(spi->master); dspi 234 drivers/spi/spi-davinci.c iowrite16(spidat1, dspi->base + SPIDAT1 + 2); dspi 247 drivers/spi/spi-davinci.c static inline int davinci_spi_get_prescale(struct davinci_spi *dspi, dspi 253 drivers/spi/spi-davinci.c ret = DIV_ROUND_UP(clk_get_rate(dspi->clk), max_speed_hz) - 1; dspi 255 drivers/spi/spi-davinci.c if (ret < dspi->prescaler_limit || ret > 255) dspi 274 drivers/spi/spi-davinci.c struct davinci_spi *dspi; dspi 280 drivers/spi/spi-davinci.c dspi = spi_master_get_devdata(spi->master); dspi 299 drivers/spi/spi-davinci.c dspi->get_rx = davinci_spi_rx_buf_u8; dspi 300 drivers/spi/spi-davinci.c dspi->get_tx = davinci_spi_tx_buf_u8; dspi 301 drivers/spi/spi-davinci.c dspi->bytes_per_word[spi->chip_select] = 1; dspi 303 drivers/spi/spi-davinci.c dspi->get_rx = davinci_spi_rx_buf_u16; dspi 304 drivers/spi/spi-davinci.c dspi->get_tx = davinci_spi_tx_buf_u16; dspi 305 drivers/spi/spi-davinci.c dspi->bytes_per_word[spi->chip_select] = 2; dspi 313 drivers/spi/spi-davinci.c prescale = davinci_spi_get_prescale(dspi, hz); dspi 349 drivers/spi/spi-davinci.c if (dspi->version == SPI_VERSION_2) { dspi 376 drivers/spi/spi-davinci.c iowrite32(delay, dspi->base + SPIDELAY); dspi 379 drivers/spi/spi-davinci.c iowrite32(spifmt, dspi->base + SPIFMT0); dspi 388 drivers/spi/spi-davinci.c struct davinci_spi *dspi = spi_master_get_devdata(spi->master); dspi 401 drivers/spi/spi-davinci.c if (dspi->dma_rx && dspi->dma_tx) dspi 416 drivers/spi/spi-davinci.c struct davinci_spi *dspi; dspi 420 drivers/spi/spi-davinci.c dspi = spi_master_get_devdata(spi->master); dspi 427 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIPC0, 1 << spi->chip_select); dspi 431 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIPC0, SPIPC0_SPIENA_MASK); dspi 434 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIGCR1, SPIGCR1_LOOPBACK_MASK); dspi 436 drivers/spi/spi-davinci.c clear_io_bits(dspi->base + SPIGCR1, SPIGCR1_LOOPBACK_MASK); dspi 466 drivers/spi/spi-davinci.c static int davinci_spi_check_error(struct davinci_spi *dspi, int int_status) dspi 468 drivers/spi/spi-davinci.c struct device *sdev = dspi->bitbang.master->dev.parent; dspi 483 drivers/spi/spi-davinci.c if (dspi->version == SPI_VERSION_2) { dspi 512 drivers/spi/spi-davinci.c static int davinci_spi_process_events(struct davinci_spi *dspi) dspi 516 drivers/spi/spi-davinci.c buf = ioread32(dspi->base + SPIBUF); dspi 518 drivers/spi/spi-davinci.c if (dspi->rcount > 0 && !(buf & SPIBUF_RXEMPTY_MASK)) { dspi 519 drivers/spi/spi-davinci.c dspi->get_rx(buf & 0xFFFF, dspi); dspi 520 drivers/spi/spi-davinci.c dspi->rcount--; dspi 523 drivers/spi/spi-davinci.c status = ioread32(dspi->base + SPIFLG); dspi 530 drivers/spi/spi-davinci.c if (dspi->wcount > 0 && !(buf & SPIBUF_TXFULL_MASK)) { dspi 531 drivers/spi/spi-davinci.c spidat1 = ioread32(dspi->base + SPIDAT1); dspi 532 drivers/spi/spi-davinci.c dspi->wcount--; dspi 534 drivers/spi/spi-davinci.c spidat1 |= 0xFFFF & dspi->get_tx(dspi); dspi 535 drivers/spi/spi-davinci.c iowrite32(spidat1, dspi->base + SPIDAT1); dspi 544 drivers/spi/spi-davinci.c struct davinci_spi *dspi = (struct davinci_spi *)data; dspi 546 drivers/spi/spi-davinci.c dspi->rcount = 0; dspi 548 drivers/spi/spi-davinci.c if (!dspi->wcount && !dspi->rcount) dspi 549 drivers/spi/spi-davinci.c complete(&dspi->done); dspi 554 drivers/spi/spi-davinci.c struct davinci_spi *dspi = (struct davinci_spi *)data; dspi 556 drivers/spi/spi-davinci.c dspi->wcount = 0; dspi 558 drivers/spi/spi-davinci.c if (!dspi->wcount && !dspi->rcount) dspi 559 drivers/spi/spi-davinci.c complete(&dspi->done); dspi 573 drivers/spi/spi-davinci.c struct davinci_spi *dspi; dspi 581 drivers/spi/spi-davinci.c dspi = spi_master_get_devdata(spi->master); dspi 582 drivers/spi/spi-davinci.c pdata = &dspi->pdata; dspi 588 drivers/spi/spi-davinci.c data_type = dspi->bytes_per_word[spi->chip_select]; dspi 590 drivers/spi/spi-davinci.c dspi->tx = t->tx_buf; dspi 591 drivers/spi/spi-davinci.c dspi->rx = t->rx_buf; dspi 592 drivers/spi/spi-davinci.c dspi->wcount = t->len / data_type; dspi 593 drivers/spi/spi-davinci.c dspi->rcount = dspi->wcount; dspi 595 drivers/spi/spi-davinci.c spidat1 = ioread32(dspi->base + SPIDAT1); dspi 597 drivers/spi/spi-davinci.c clear_io_bits(dspi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK); dspi 598 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIGCR1, SPIGCR1_SPIENA_MASK); dspi 600 drivers/spi/spi-davinci.c reinit_completion(&dspi->done); dspi 604 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIINT, SPIINT_MASKINT); dspi 606 drivers/spi/spi-davinci.c dspi->wcount--; dspi 607 drivers/spi/spi-davinci.c tx_data = dspi->get_tx(dspi); dspi 610 drivers/spi/spi-davinci.c iowrite32(spidat1, dspi->base + SPIDAT1); dspi 614 drivers/spi/spi-davinci.c .src_addr = (unsigned long)dspi->pbase + SPIBUF, dspi 620 drivers/spi/spi-davinci.c .dst_addr = (unsigned long)dspi->pbase + SPIDAT1, dspi 627 drivers/spi/spi-davinci.c dmaengine_slave_config(dspi->dma_rx, &dma_rx_conf); dspi 628 drivers/spi/spi-davinci.c dmaengine_slave_config(dspi->dma_tx, &dma_tx_conf); dspi 630 drivers/spi/spi-davinci.c rxdesc = dmaengine_prep_slave_sg(dspi->dma_rx, dspi 646 drivers/spi/spi-davinci.c txdesc = dmaengine_prep_slave_sg(dspi->dma_tx, dspi 653 drivers/spi/spi-davinci.c rxdesc->callback_param = (void *)dspi; dspi 655 drivers/spi/spi-davinci.c txdesc->callback_param = (void *)dspi; dspi 658 drivers/spi/spi-davinci.c iowrite16(spidat1 >> 16, dspi->base + SPIDAT1 + 2); dspi 663 drivers/spi/spi-davinci.c dma_async_issue_pending(dspi->dma_rx); dspi 664 drivers/spi/spi-davinci.c dma_async_issue_pending(dspi->dma_tx); dspi 666 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIINT, SPIINT_DMA_REQ_EN); dspi 671 drivers/spi/spi-davinci.c if (wait_for_completion_timeout(&dspi->done, HZ) == 0) dspi 674 drivers/spi/spi-davinci.c while (dspi->rcount > 0 || dspi->wcount > 0) { dspi 675 drivers/spi/spi-davinci.c errors = davinci_spi_process_events(dspi); dspi 682 drivers/spi/spi-davinci.c clear_io_bits(dspi->base + SPIINT, SPIINT_MASKALL); dspi 684 drivers/spi/spi-davinci.c clear_io_bits(dspi->base + SPIINT, SPIINT_DMA_REQ_EN); dspi 686 drivers/spi/spi-davinci.c clear_io_bits(dspi->base + SPIGCR1, SPIGCR1_SPIENA_MASK); dspi 687 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK); dspi 694 drivers/spi/spi-davinci.c ret = davinci_spi_check_error(dspi, errors); dspi 700 drivers/spi/spi-davinci.c if (dspi->rcount != 0 || dspi->wcount != 0) { dspi 737 drivers/spi/spi-davinci.c struct davinci_spi *dspi = data; dspi 740 drivers/spi/spi-davinci.c status = davinci_spi_process_events(dspi); dspi 742 drivers/spi/spi-davinci.c clear_io_bits(dspi->base + SPIINT, SPIINT_MASKINT); dspi 744 drivers/spi/spi-davinci.c if ((!dspi->rcount && !dspi->wcount) || status) dspi 745 drivers/spi/spi-davinci.c complete(&dspi->done); dspi 750 drivers/spi/spi-davinci.c static int davinci_spi_request_dma(struct davinci_spi *dspi) dspi 752 drivers/spi/spi-davinci.c struct device *sdev = dspi->bitbang.master->dev.parent; dspi 754 drivers/spi/spi-davinci.c dspi->dma_rx = dma_request_chan(sdev, "rx"); dspi 755 drivers/spi/spi-davinci.c if (IS_ERR(dspi->dma_rx)) dspi 756 drivers/spi/spi-davinci.c return PTR_ERR(dspi->dma_rx); dspi 758 drivers/spi/spi-davinci.c dspi->dma_tx = dma_request_chan(sdev, "tx"); dspi 759 drivers/spi/spi-davinci.c if (IS_ERR(dspi->dma_tx)) { dspi 760 drivers/spi/spi-davinci.c dma_release_channel(dspi->dma_rx); dspi 761 drivers/spi/spi-davinci.c return PTR_ERR(dspi->dma_tx); dspi 817 drivers/spi/spi-davinci.c struct davinci_spi *dspi) dspi 825 drivers/spi/spi-davinci.c pdata = &dspi->pdata; dspi 851 drivers/spi/spi-davinci.c struct davinci_spi *dspi) dspi 871 drivers/spi/spi-davinci.c struct davinci_spi *dspi; dspi 885 drivers/spi/spi-davinci.c dspi = spi_master_get_devdata(master); dspi 889 drivers/spi/spi-davinci.c dspi->pdata = *pdata; dspi 892 drivers/spi/spi-davinci.c ret = spi_davinci_get_pdata(pdev, dspi); dspi 898 drivers/spi/spi-davinci.c pdata = &dspi->pdata; dspi 900 drivers/spi/spi-davinci.c dspi->bytes_per_word = devm_kcalloc(&pdev->dev, dspi 902 drivers/spi/spi-davinci.c sizeof(*dspi->bytes_per_word), dspi 904 drivers/spi/spi-davinci.c if (dspi->bytes_per_word == NULL) { dspi 915 drivers/spi/spi-davinci.c dspi->pbase = r->start; dspi 917 drivers/spi/spi-davinci.c dspi->base = devm_ioremap_resource(&pdev->dev, r); dspi 918 drivers/spi/spi-davinci.c if (IS_ERR(dspi->base)) { dspi 919 drivers/spi/spi-davinci.c ret = PTR_ERR(dspi->base); dspi 923 drivers/spi/spi-davinci.c init_completion(&dspi->done); dspi 930 drivers/spi/spi-davinci.c dspi->irq = ret; dspi 932 drivers/spi/spi-davinci.c ret = devm_request_threaded_irq(&pdev->dev, dspi->irq, davinci_spi_irq, dspi 933 drivers/spi/spi-davinci.c dummy_thread_fn, 0, dev_name(&pdev->dev), dspi); dspi 937 drivers/spi/spi-davinci.c dspi->bitbang.master = master; dspi 939 drivers/spi/spi-davinci.c dspi->clk = devm_clk_get(&pdev->dev, NULL); dspi 940 drivers/spi/spi-davinci.c if (IS_ERR(dspi->clk)) { dspi 944 drivers/spi/spi-davinci.c ret = clk_prepare_enable(dspi->clk); dspi 958 drivers/spi/spi-davinci.c dspi->bitbang.chipselect = davinci_spi_chipselect; dspi 959 drivers/spi/spi-davinci.c dspi->bitbang.setup_transfer = davinci_spi_setup_transfer; dspi 960 drivers/spi/spi-davinci.c dspi->prescaler_limit = pdata->prescaler_limit; dspi 961 drivers/spi/spi-davinci.c dspi->version = pdata->version; dspi 963 drivers/spi/spi-davinci.c dspi->bitbang.flags = SPI_NO_CS | SPI_LSB_FIRST | SPI_LOOP | SPI_CS_WORD; dspi 964 drivers/spi/spi-davinci.c if (dspi->version == SPI_VERSION_2) dspi 965 drivers/spi/spi-davinci.c dspi->bitbang.flags |= SPI_READY; dspi 967 drivers/spi/spi-davinci.c dspi->bitbang.txrx_bufs = davinci_spi_bufs; dspi 969 drivers/spi/spi-davinci.c ret = davinci_spi_request_dma(dspi); dspi 974 drivers/spi/spi-davinci.c dspi->dma_rx = NULL; dspi 975 drivers/spi/spi-davinci.c dspi->dma_tx = NULL; dspi 978 drivers/spi/spi-davinci.c dspi->get_rx = davinci_spi_rx_buf_u8; dspi 979 drivers/spi/spi-davinci.c dspi->get_tx = davinci_spi_tx_buf_u8; dspi 982 drivers/spi/spi-davinci.c iowrite32(0, dspi->base + SPIGCR0); dspi 984 drivers/spi/spi-davinci.c iowrite32(1, dspi->base + SPIGCR0); dspi 988 drivers/spi/spi-davinci.c iowrite32(spipc0, dspi->base + SPIPC0); dspi 991 drivers/spi/spi-davinci.c iowrite32(SPI_INTLVL_1, dspi->base + SPILVL); dspi 993 drivers/spi/spi-davinci.c iowrite32(SPI_INTLVL_0, dspi->base + SPILVL); dspi 995 drivers/spi/spi-davinci.c iowrite32(CS_DEFAULT, dspi->base + SPIDEF); dspi 998 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIGCR1, SPIGCR1_CLKMOD_MASK); dspi 999 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIGCR1, SPIGCR1_MASTER_MASK); dspi 1000 drivers/spi/spi-davinci.c set_io_bits(dspi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK); dspi 1002 drivers/spi/spi-davinci.c ret = spi_bitbang_start(&dspi->bitbang); dspi 1006 drivers/spi/spi-davinci.c dev_info(&pdev->dev, "Controller at 0x%p\n", dspi->base); dspi 1011 drivers/spi/spi-davinci.c if (dspi->dma_rx) { dspi 1012 drivers/spi/spi-davinci.c dma_release_channel(dspi->dma_rx); dspi 1013 drivers/spi/spi-davinci.c dma_release_channel(dspi->dma_tx); dspi 1016 drivers/spi/spi-davinci.c clk_disable_unprepare(dspi->clk); dspi 1034 drivers/spi/spi-davinci.c struct davinci_spi *dspi; dspi 1038 drivers/spi/spi-davinci.c dspi = spi_master_get_devdata(master); dspi 1040 drivers/spi/spi-davinci.c spi_bitbang_stop(&dspi->bitbang); dspi 1042 drivers/spi/spi-davinci.c clk_disable_unprepare(dspi->clk); dspi 1045 drivers/spi/spi-davinci.c if (dspi->dma_rx) { dspi 1046 drivers/spi/spi-davinci.c dma_release_channel(dspi->dma_rx); dspi 1047 drivers/spi/spi-davinci.c dma_release_channel(dspi->dma_tx); dspi 200 drivers/spi/spi-fsl-dspi.c static u32 dspi_pop_tx(struct fsl_dspi *dspi) dspi 204 drivers/spi/spi-fsl-dspi.c if (dspi->tx) { dspi 205 drivers/spi/spi-fsl-dspi.c if (dspi->bytes_per_word == 1) dspi 206 drivers/spi/spi-fsl-dspi.c txdata = *(u8 *)dspi->tx; dspi 207 drivers/spi/spi-fsl-dspi.c else if (dspi->bytes_per_word == 2) dspi 208 drivers/spi/spi-fsl-dspi.c txdata = *(u16 *)dspi->tx; dspi 210 drivers/spi/spi-fsl-dspi.c txdata = *(u32 *)dspi->tx; dspi 211 drivers/spi/spi-fsl-dspi.c dspi->tx += dspi->bytes_per_word; dspi 213 drivers/spi/spi-fsl-dspi.c dspi->len -= dspi->bytes_per_word; dspi 217 drivers/spi/spi-fsl-dspi.c static u32 dspi_pop_tx_pushr(struct fsl_dspi *dspi) dspi 219 drivers/spi/spi-fsl-dspi.c u16 cmd = dspi->tx_cmd, data = dspi_pop_tx(dspi); dspi 221 drivers/spi/spi-fsl-dspi.c if (spi_controller_is_slave(dspi->ctlr)) dspi 224 drivers/spi/spi-fsl-dspi.c if (dspi->len > 0) dspi 229 drivers/spi/spi-fsl-dspi.c static void dspi_push_rx(struct fsl_dspi *dspi, u32 rxdata) dspi 231 drivers/spi/spi-fsl-dspi.c if (!dspi->rx) dspi 235 drivers/spi/spi-fsl-dspi.c rxdata &= (1 << dspi->bits_per_word) - 1; dspi 237 drivers/spi/spi-fsl-dspi.c if (dspi->bytes_per_word == 1) dspi 238 drivers/spi/spi-fsl-dspi.c *(u8 *)dspi->rx = rxdata; dspi 239 drivers/spi/spi-fsl-dspi.c else if (dspi->bytes_per_word == 2) dspi 240 drivers/spi/spi-fsl-dspi.c *(u16 *)dspi->rx = rxdata; dspi 242 drivers/spi/spi-fsl-dspi.c *(u32 *)dspi->rx = rxdata; dspi 243 drivers/spi/spi-fsl-dspi.c dspi->rx += dspi->bytes_per_word; dspi 248 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = arg; dspi 249 drivers/spi/spi-fsl-dspi.c struct fsl_dspi_dma *dma = dspi->dma; dspi 256 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = arg; dspi 257 drivers/spi/spi-fsl-dspi.c struct fsl_dspi_dma *dma = dspi->dma; dspi 260 drivers/spi/spi-fsl-dspi.c if (dspi->rx) { dspi 262 drivers/spi/spi-fsl-dspi.c dspi_push_rx(dspi, dspi->dma->rx_dma_buf[i]); dspi 268 drivers/spi/spi-fsl-dspi.c static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) dspi 270 drivers/spi/spi-fsl-dspi.c struct device *dev = &dspi->pdev->dev; dspi 271 drivers/spi/spi-fsl-dspi.c struct fsl_dspi_dma *dma = dspi->dma; dspi 276 drivers/spi/spi-fsl-dspi.c dspi->dma->tx_dma_buf[i] = dspi_pop_tx_pushr(dspi); dspi 290 drivers/spi/spi-fsl-dspi.c dma->tx_desc->callback_param = dspi; dspi 308 drivers/spi/spi-fsl-dspi.c dma->rx_desc->callback_param = dspi; dspi 314 drivers/spi/spi-fsl-dspi.c reinit_completion(&dspi->dma->cmd_rx_complete); dspi 315 drivers/spi/spi-fsl-dspi.c reinit_completion(&dspi->dma->cmd_tx_complete); dspi 320 drivers/spi/spi-fsl-dspi.c if (spi_controller_is_slave(dspi->ctlr)) { dspi 321 drivers/spi/spi-fsl-dspi.c wait_for_completion_interruptible(&dspi->dma->cmd_rx_complete); dspi 325 drivers/spi/spi-fsl-dspi.c time_left = wait_for_completion_timeout(&dspi->dma->cmd_tx_complete, dspi 334 drivers/spi/spi-fsl-dspi.c time_left = wait_for_completion_timeout(&dspi->dma->cmd_rx_complete, dspi 346 drivers/spi/spi-fsl-dspi.c static int dspi_dma_xfer(struct fsl_dspi *dspi) dspi 348 drivers/spi/spi-fsl-dspi.c struct spi_message *message = dspi->cur_msg; dspi 349 drivers/spi/spi-fsl-dspi.c struct device *dev = &dspi->pdev->dev; dspi 350 drivers/spi/spi-fsl-dspi.c struct fsl_dspi_dma *dma = dspi->dma; dspi 355 drivers/spi/spi-fsl-dspi.c curr_remaining_bytes = dspi->len; dspi 360 drivers/spi/spi-fsl-dspi.c / dspi->bytes_per_word; dspi 364 drivers/spi/spi-fsl-dspi.c ret = dspi_next_xfer_dma_submit(dspi); dspi 371 drivers/spi/spi-fsl-dspi.c dma->curr_xfer_len * dspi->bytes_per_word; dspi 383 drivers/spi/spi-fsl-dspi.c static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) dspi 385 drivers/spi/spi-fsl-dspi.c struct device *dev = &dspi->pdev->dev; dspi 445 drivers/spi/spi-fsl-dspi.c dspi->dma = dma; dspi 463 drivers/spi/spi-fsl-dspi.c dspi->dma = NULL; dspi 468 drivers/spi/spi-fsl-dspi.c static void dspi_release_dma(struct fsl_dspi *dspi) dspi 470 drivers/spi/spi-fsl-dspi.c struct fsl_dspi_dma *dma = dspi->dma; dspi 471 drivers/spi/spi-fsl-dspi.c struct device *dev = &dspi->pdev->dev; dspi 560 drivers/spi/spi-fsl-dspi.c static void fifo_write(struct fsl_dspi *dspi) dspi 562 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_PUSHR, dspi_pop_tx_pushr(dspi)); dspi 565 drivers/spi/spi-fsl-dspi.c static void cmd_fifo_write(struct fsl_dspi *dspi) dspi 567 drivers/spi/spi-fsl-dspi.c u16 cmd = dspi->tx_cmd; dspi 569 drivers/spi/spi-fsl-dspi.c if (dspi->len > 0) dspi 571 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap_pushr, PUSHR_CMD, cmd); dspi 574 drivers/spi/spi-fsl-dspi.c static void tx_fifo_write(struct fsl_dspi *dspi, u16 txdata) dspi 576 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap_pushr, PUSHR_TX, txdata); dspi 579 drivers/spi/spi-fsl-dspi.c static void dspi_tcfq_write(struct fsl_dspi *dspi) dspi 582 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd |= SPI_PUSHR_CMD_CTCNT; dspi 584 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode && dspi->bits_per_word > 16) { dspi 588 drivers/spi/spi-fsl-dspi.c u32 data = dspi_pop_tx(dspi); dspi 590 drivers/spi/spi-fsl-dspi.c cmd_fifo_write(dspi); dspi 591 drivers/spi/spi-fsl-dspi.c tx_fifo_write(dspi, data & 0xFFFF); dspi 592 drivers/spi/spi-fsl-dspi.c tx_fifo_write(dspi, data >> 16); dspi 597 drivers/spi/spi-fsl-dspi.c fifo_write(dspi); dspi 601 drivers/spi/spi-fsl-dspi.c static u32 fifo_read(struct fsl_dspi *dspi) dspi 605 drivers/spi/spi-fsl-dspi.c regmap_read(dspi->regmap, SPI_POPR, &rxdata); dspi 609 drivers/spi/spi-fsl-dspi.c static void dspi_tcfq_read(struct fsl_dspi *dspi) dspi 611 drivers/spi/spi-fsl-dspi.c dspi_push_rx(dspi, fifo_read(dspi)); dspi 614 drivers/spi/spi-fsl-dspi.c static void dspi_eoq_write(struct fsl_dspi *dspi) dspi 617 drivers/spi/spi-fsl-dspi.c u16 xfer_cmd = dspi->tx_cmd; dspi 620 drivers/spi/spi-fsl-dspi.c while (dspi->len && fifo_size--) { dspi 621 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd = xfer_cmd; dspi 623 drivers/spi/spi-fsl-dspi.c if (dspi->len == dspi->bytes_per_word || fifo_size == 0) dspi 624 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd |= SPI_PUSHR_CMD_EOQ; dspi 627 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd |= SPI_PUSHR_CMD_CTCNT; dspi 629 drivers/spi/spi-fsl-dspi.c fifo_write(dspi); dspi 633 drivers/spi/spi-fsl-dspi.c static void dspi_eoq_read(struct fsl_dspi *dspi) dspi 638 drivers/spi/spi-fsl-dspi.c while ((dspi->rx < dspi->rx_end) && fifo_size--) dspi 639 drivers/spi/spi-fsl-dspi.c dspi_push_rx(dspi, fifo_read(dspi)); dspi 642 drivers/spi/spi-fsl-dspi.c static int dspi_rxtx(struct fsl_dspi *dspi) dspi 644 drivers/spi/spi-fsl-dspi.c struct spi_message *msg = dspi->cur_msg; dspi 652 drivers/spi/spi-fsl-dspi.c regmap_read(dspi->regmap, SPI_TCR, &spi_tcr); dspi 655 drivers/spi/spi-fsl-dspi.c msg->actual_length += spi_tcnt * dspi->bytes_per_word; dspi 657 drivers/spi/spi-fsl-dspi.c trans_mode = dspi->devtype_data->trans_mode; dspi 659 drivers/spi/spi-fsl-dspi.c dspi_eoq_read(dspi); dspi 661 drivers/spi/spi-fsl-dspi.c dspi_tcfq_read(dspi); dspi 663 drivers/spi/spi-fsl-dspi.c if (!dspi->len) dspi 668 drivers/spi/spi-fsl-dspi.c dspi_eoq_write(dspi); dspi 670 drivers/spi/spi-fsl-dspi.c dspi_tcfq_write(dspi); dspi 675 drivers/spi/spi-fsl-dspi.c static int dspi_poll(struct fsl_dspi *dspi) dspi 681 drivers/spi/spi-fsl-dspi.c regmap_read(dspi->regmap, SPI_SR, &spi_sr); dspi 682 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_SR, spi_sr); dspi 691 drivers/spi/spi-fsl-dspi.c return dspi_rxtx(dspi); dspi 696 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id; dspi 699 drivers/spi/spi-fsl-dspi.c regmap_read(dspi->regmap, SPI_SR, &spi_sr); dspi 700 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_SR, spi_sr); dspi 705 drivers/spi/spi-fsl-dspi.c if (dspi_rxtx(dspi) == 0) dspi 706 drivers/spi/spi-fsl-dspi.c complete(&dspi->xfer_done); dspi 714 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); dspi 723 drivers/spi/spi-fsl-dspi.c dspi->cur_transfer = transfer; dspi 724 drivers/spi/spi-fsl-dspi.c dspi->cur_msg = message; dspi 725 drivers/spi/spi-fsl-dspi.c dspi->cur_chip = spi_get_ctldata(spi); dspi 727 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd = SPI_PUSHR_CMD_CTAS(0) | dspi 729 drivers/spi/spi-fsl-dspi.c if (list_is_last(&dspi->cur_transfer->transfer_list, dspi 730 drivers/spi/spi-fsl-dspi.c &dspi->cur_msg->transfers)) { dspi 735 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd |= SPI_PUSHR_CMD_CONT; dspi 743 drivers/spi/spi-fsl-dspi.c dspi->tx_cmd |= SPI_PUSHR_CMD_CONT; dspi 746 drivers/spi/spi-fsl-dspi.c dspi->void_write_data = dspi->cur_chip->void_write_data; dspi 748 drivers/spi/spi-fsl-dspi.c dspi->tx = transfer->tx_buf; dspi 749 drivers/spi/spi-fsl-dspi.c dspi->rx = transfer->rx_buf; dspi 750 drivers/spi/spi-fsl-dspi.c dspi->rx_end = dspi->rx + transfer->len; dspi 751 drivers/spi/spi-fsl-dspi.c dspi->len = transfer->len; dspi 753 drivers/spi/spi-fsl-dspi.c dspi->bits_per_word = transfer->bits_per_word; dspi 755 drivers/spi/spi-fsl-dspi.c dspi->bytes_per_word = 1; dspi 757 drivers/spi/spi-fsl-dspi.c dspi->bytes_per_word = 2; dspi 759 drivers/spi/spi-fsl-dspi.c dspi->bytes_per_word = 4; dspi 761 drivers/spi/spi-fsl-dspi.c regmap_update_bits(dspi->regmap, SPI_MCR, dspi 764 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_CTAR(0), dspi 765 drivers/spi/spi-fsl-dspi.c dspi->cur_chip->ctar_val | dspi 767 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode) dspi 768 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_CTARE(0), dspi 772 drivers/spi/spi-fsl-dspi.c trans_mode = dspi->devtype_data->trans_mode; dspi 775 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_EOQFE); dspi 776 drivers/spi/spi-fsl-dspi.c dspi_eoq_write(dspi); dspi 779 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_TCFQE); dspi 780 drivers/spi/spi-fsl-dspi.c dspi_tcfq_write(dspi); dspi 783 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_RSER, dspi 786 drivers/spi/spi-fsl-dspi.c status = dspi_dma_xfer(dspi); dspi 789 drivers/spi/spi-fsl-dspi.c dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", dspi 795 drivers/spi/spi-fsl-dspi.c if (!dspi->irq) { dspi 797 drivers/spi/spi-fsl-dspi.c status = dspi_poll(dspi); dspi 800 drivers/spi/spi-fsl-dspi.c wait_for_completion(&dspi->xfer_done); dspi 801 drivers/spi/spi-fsl-dspi.c reinit_completion(&dspi->xfer_done); dspi 817 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = spi_controller_get_devdata(spi->controller); dspi 833 drivers/spi/spi-fsl-dspi.c pdata = dev_get_platdata(&dspi->pdev->dev); dspi 848 drivers/spi/spi-fsl-dspi.c clkrate = clk_get_rate(dspi->clk); dspi 863 drivers/spi/spi-fsl-dspi.c if (!spi_controller_is_slave(dspi->ctlr)) { dspi 902 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); dspi 905 drivers/spi/spi-fsl-dspi.c clk_disable_unprepare(dspi->clk); dspi 915 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); dspi 920 drivers/spi/spi-fsl-dspi.c ret = clk_prepare_enable(dspi->clk); dspi 979 drivers/spi/spi-fsl-dspi.c static void dspi_init(struct fsl_dspi *dspi) dspi 983 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode) dspi 985 drivers/spi/spi-fsl-dspi.c if (!spi_controller_is_slave(dspi->ctlr)) dspi 988 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_MCR, mcr); dspi 989 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_SR, SPI_SR_CLEAR); dspi 990 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode) dspi 991 drivers/spi/spi-fsl-dspi.c regmap_write(dspi->regmap, SPI_CTARE(0), dspi 1002 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi; dspi 1010 drivers/spi/spi-fsl-dspi.c dspi = spi_controller_get_devdata(ctlr); dspi 1011 drivers/spi/spi-fsl-dspi.c dspi->pdev = pdev; dspi 1012 drivers/spi/spi-fsl-dspi.c dspi->ctlr = ctlr; dspi 1026 drivers/spi/spi-fsl-dspi.c dspi->devtype_data = &coldfire_data; dspi 1046 drivers/spi/spi-fsl-dspi.c dspi->devtype_data = of_device_get_match_data(&pdev->dev); dspi 1047 drivers/spi/spi-fsl-dspi.c if (!dspi->devtype_data) { dspi 1054 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode) dspi 1066 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode) dspi 1070 drivers/spi/spi-fsl-dspi.c dspi->regmap = devm_regmap_init_mmio(&pdev->dev, base, regmap_config); dspi 1071 drivers/spi/spi-fsl-dspi.c if (IS_ERR(dspi->regmap)) { dspi 1073 drivers/spi/spi-fsl-dspi.c PTR_ERR(dspi->regmap)); dspi 1074 drivers/spi/spi-fsl-dspi.c ret = PTR_ERR(dspi->regmap); dspi 1078 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->xspi_mode) { dspi 1079 drivers/spi/spi-fsl-dspi.c dspi->regmap_pushr = devm_regmap_init_mmio( dspi 1082 drivers/spi/spi-fsl-dspi.c if (IS_ERR(dspi->regmap_pushr)) { dspi 1085 drivers/spi/spi-fsl-dspi.c PTR_ERR(dspi->regmap_pushr)); dspi 1086 drivers/spi/spi-fsl-dspi.c ret = PTR_ERR(dspi->regmap_pushr); dspi 1091 drivers/spi/spi-fsl-dspi.c dspi->clk = devm_clk_get(&pdev->dev, "dspi"); dspi 1092 drivers/spi/spi-fsl-dspi.c if (IS_ERR(dspi->clk)) { dspi 1093 drivers/spi/spi-fsl-dspi.c ret = PTR_ERR(dspi->clk); dspi 1097 drivers/spi/spi-fsl-dspi.c ret = clk_prepare_enable(dspi->clk); dspi 1101 drivers/spi/spi-fsl-dspi.c dspi_init(dspi); dspi 1103 drivers/spi/spi-fsl-dspi.c dspi->irq = platform_get_irq(pdev, 0); dspi 1104 drivers/spi/spi-fsl-dspi.c if (dspi->irq <= 0) { dspi 1107 drivers/spi/spi-fsl-dspi.c dspi->irq = 0; dspi 1111 drivers/spi/spi-fsl-dspi.c ret = devm_request_irq(&pdev->dev, dspi->irq, dspi_interrupt, dspi 1112 drivers/spi/spi-fsl-dspi.c IRQF_SHARED, pdev->name, dspi); dspi 1118 drivers/spi/spi-fsl-dspi.c init_completion(&dspi->xfer_done); dspi 1121 drivers/spi/spi-fsl-dspi.c if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) { dspi 1122 drivers/spi/spi-fsl-dspi.c ret = dspi_request_dma(dspi, res->start); dspi 1130 drivers/spi/spi-fsl-dspi.c clk_get_rate(dspi->clk) / dspi->devtype_data->max_clock_factor; dspi 1143 drivers/spi/spi-fsl-dspi.c clk_disable_unprepare(dspi->clk); dspi 1153 drivers/spi/spi-fsl-dspi.c struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); dspi 1156 drivers/spi/spi-fsl-dspi.c dspi_release_dma(dspi); dspi 1157 drivers/spi/spi-fsl-dspi.c clk_disable_unprepare(dspi->clk); dspi 1158 drivers/spi/spi-fsl-dspi.c spi_unregister_controller(dspi->ctlr);