spi-rockchip.c (b8d423711d1870c5e1280d5bbb0639fe6638a60e) spi-rockchip.c (736b81e075172f1e6cd7a8bc1a1374a2dee9e4dc)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
4 * Author: Addy Ke <addy.ke@rock-chips.com>
5 */
6
7#include <linux/clk.h>
8#include <linux/dmaengine.h>

--- 93 unchanged lines hidden (view full) ---

102#define CR0_XFM_TR 0x0
103#define CR0_XFM_TO 0x1
104#define CR0_XFM_RO 0x2
105
106#define CR0_OPM_OFFSET 20
107#define CR0_OPM_MASTER 0x0
108#define CR0_OPM_SLAVE 0x1
109
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
4 * Author: Addy Ke <addy.ke@rock-chips.com>
5 */
6
7#include <linux/clk.h>
8#include <linux/dmaengine.h>

--- 93 unchanged lines hidden (view full) ---

102#define CR0_XFM_TR 0x0
103#define CR0_XFM_TO 0x1
104#define CR0_XFM_RO 0x2
105
106#define CR0_OPM_OFFSET 20
107#define CR0_OPM_MASTER 0x0
108#define CR0_OPM_SLAVE 0x1
109
110#define CR0_SOI_OFFSET 23
111
110#define CR0_MTM_OFFSET 0x21
111
112/* Bit fields in SER, 2bit */
113#define SER_MASK 0x3
114
115/* Bit fields in BAUDR */
116#define BAUDR_SCKDV_MIN 2
117#define BAUDR_SCKDV_MAX 65534

--- 113 unchanged lines hidden (view full) ---

231 return 32;
232 }
233}
234
235static void rockchip_spi_set_cs(struct spi_device *spi, bool enable)
236{
237 struct spi_controller *ctlr = spi->controller;
238 struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);
112#define CR0_MTM_OFFSET 0x21
113
114/* Bit fields in SER, 2bit */
115#define SER_MASK 0x3
116
117/* Bit fields in BAUDR */
118#define BAUDR_SCKDV_MIN 2
119#define BAUDR_SCKDV_MAX 65534

--- 113 unchanged lines hidden (view full) ---

233 return 32;
234 }
235}
236
237static void rockchip_spi_set_cs(struct spi_device *spi, bool enable)
238{
239 struct spi_controller *ctlr = spi->controller;
240 struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);
239 bool cs_asserted = !enable;
241 bool cs_asserted = spi->mode & SPI_CS_HIGH ? enable : !enable;
240
241 /* Return immediately for no-op */
242 if (cs_asserted == rs->cs_asserted[spi->chip_select])
243 return;
244
245 if (cs_asserted) {
246 /* Keep things powered as long as CS is asserted */
247 pm_runtime_get_sync(rs->dev);

--- 254 unchanged lines hidden (view full) ---

502 if (slave_mode)
503 cr0 |= CR0_OPM_SLAVE << CR0_OPM_OFFSET;
504 rs->slave_abort = false;
505
506 cr0 |= rs->rsd << CR0_RSD_OFFSET;
507 cr0 |= (spi->mode & 0x3U) << CR0_SCPH_OFFSET;
508 if (spi->mode & SPI_LSB_FIRST)
509 cr0 |= CR0_FBM_LSB << CR0_FBM_OFFSET;
242
243 /* Return immediately for no-op */
244 if (cs_asserted == rs->cs_asserted[spi->chip_select])
245 return;
246
247 if (cs_asserted) {
248 /* Keep things powered as long as CS is asserted */
249 pm_runtime_get_sync(rs->dev);

--- 254 unchanged lines hidden (view full) ---

504 if (slave_mode)
505 cr0 |= CR0_OPM_SLAVE << CR0_OPM_OFFSET;
506 rs->slave_abort = false;
507
508 cr0 |= rs->rsd << CR0_RSD_OFFSET;
509 cr0 |= (spi->mode & 0x3U) << CR0_SCPH_OFFSET;
510 if (spi->mode & SPI_LSB_FIRST)
511 cr0 |= CR0_FBM_LSB << CR0_FBM_OFFSET;
512 if (spi->mode & SPI_CS_HIGH)
513 cr0 |= BIT(spi->chip_select) << CR0_SOI_OFFSET;
510
511 if (xfer->rx_buf && xfer->tx_buf)
512 cr0 |= CR0_XFM_TR << CR0_XFM_OFFSET;
513 else if (xfer->rx_buf)
514 cr0 |= CR0_XFM_RO << CR0_XFM_OFFSET;
515 else if (use_dma)
516 cr0 |= CR0_XFM_TO << CR0_XFM_OFFSET;
517

--- 272 unchanged lines hidden (view full) ---

790 }
791
792 if (ctlr->dma_tx && ctlr->dma_rx) {
793 rs->dma_addr_tx = mem->start + ROCKCHIP_SPI_TXDR;
794 rs->dma_addr_rx = mem->start + ROCKCHIP_SPI_RXDR;
795 ctlr->can_dma = rockchip_spi_can_dma;
796 }
797
514
515 if (xfer->rx_buf && xfer->tx_buf)
516 cr0 |= CR0_XFM_TR << CR0_XFM_OFFSET;
517 else if (xfer->rx_buf)
518 cr0 |= CR0_XFM_RO << CR0_XFM_OFFSET;
519 else if (use_dma)
520 cr0 |= CR0_XFM_TO << CR0_XFM_OFFSET;
521

--- 272 unchanged lines hidden (view full) ---

794 }
795
796 if (ctlr->dma_tx && ctlr->dma_rx) {
797 rs->dma_addr_tx = mem->start + ROCKCHIP_SPI_TXDR;
798 rs->dma_addr_rx = mem->start + ROCKCHIP_SPI_RXDR;
799 ctlr->can_dma = rockchip_spi_can_dma;
800 }
801
802 switch (readl_relaxed(rs->regs + ROCKCHIP_SPI_VERSION)) {
803 case ROCKCHIP_SPI_VER2_TYPE2:
804 ctlr->mode_bits |= SPI_CS_HIGH;
805 break;
806 default:
807 break;
808 }
809
798 ret = devm_spi_register_controller(&pdev->dev, ctlr);
799 if (ret < 0) {
800 dev_err(&pdev->dev, "Failed to register controller\n");
801 goto err_free_dma_rx;
802 }
803
804 return 0;
805

--- 151 unchanged lines hidden ---
810 ret = devm_spi_register_controller(&pdev->dev, ctlr);
811 if (ret < 0) {
812 dev_err(&pdev->dev, "Failed to register controller\n");
813 goto err_free_dma_rx;
814 }
815
816 return 0;
817

--- 151 unchanged lines hidden ---