123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /*
- * SPI driver for rockchip
- *
- * (C) Copyright 2015 Google, Inc
- *
- * (C) Copyright 2008-2013 Rockchip Electronics
- * Peter, Software Engineering, <superpeter.cai@gmail.com>.
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
- #ifndef __RK_SPI_H
- #define __RK_SPI_H
- struct rockchip_spi {
- u32 ctrlr0;
- u32 ctrlr1;
- u32 enr;
- u32 ser;
- u32 baudr;
- u32 txftlr;
- u32 rxftlr;
- u32 txflr;
- u32 rxflr;
- u32 sr;
- u32 ipr;
- u32 imr;
- u32 isr;
- u32 risr;
- u32 icr;
- u32 dmacr;
- u32 dmatdlr;
- u32 dmardlr; /* 0x44 */
- u32 reserved[0xef];
- u32 txdr[0x100]; /* 0x400 */
- u32 rxdr[0x100]; /* 0x800 */
- };
- /* CTRLR0 */
- enum {
- DFS_SHIFT = 0, /* Data Frame Size */
- DFS_MASK = 3,
- DFS_4BIT = 0,
- DFS_8BIT,
- DFS_16BIT,
- DFS_RESV,
- CFS_SHIFT = 2, /* Control Frame Size */
- CFS_MASK = 0xf,
- SCPH_SHIFT = 6, /* Serial Clock Phase */
- SCPH_MASK = 1,
- SCPH_TOGMID = 0, /* SCLK toggles in middle of first data bit */
- SCPH_TOGSTA, /* SCLK toggles at start of first data bit */
- SCOL_SHIFT = 7, /* Serial Clock Polarity */
- SCOL_MASK = 1,
- SCOL_LOW = 0, /* Inactive state of serial clock is low */
- SCOL_HIGH, /* Inactive state of serial clock is high */
- CSM_SHIFT = 8, /* Chip Select Mode */
- CSM_MASK = 0x3,
- CSM_KEEP = 0, /* ss_n stays low after each frame */
- CSM_HALF, /* ss_n high for half sclk_out cycles */
- CSM_ONE, /* ss_n high for one sclk_out cycle */
- CSM_RESV,
- SSN_DELAY_SHIFT = 10, /* SSN to Sclk_out delay */
- SSN_DELAY_MASK = 1,
- SSN_DELAY_HALF = 0, /* 1/2 sclk_out cycle */
- SSN_DELAY_ONE = 1, /* 1 sclk_out cycle */
- SEM_SHIFT = 11, /* Serial Endian Mode */
- SEM_MASK = 1,
- SEM_LITTLE = 0, /* little endian */
- SEM_BIG, /* big endian */
- FBM_SHIFT = 12, /* First Bit Mode */
- FBM_MASK = 1,
- FBM_MSB = 0, /* first bit is MSB */
- FBM_LSB, /* first bit in LSB */
- HALF_WORD_TX_SHIFT = 13, /* Byte and Halfword Transform */
- HALF_WORD_MASK = 1,
- HALF_WORD_ON = 0, /* apb 16bit write/read, spi 8bit write/read */
- HALF_WORD_OFF, /* apb 8bit write/read, spi 8bit write/read */
- RXDSD_SHIFT = 14, /* Rxd Sample Delay, in cycles */
- RXDSD_MASK = 3,
- FRF_SHIFT = 16, /* Frame Format */
- FRF_MASK = 3,
- FRF_SPI = 0, /* Motorola SPI */
- FRF_SSP, /* Texas Instruments SSP*/
- FRF_MICROWIRE, /* National Semiconductors Microwire */
- FRF_RESV,
- TMOD_SHIFT = 18, /* Transfer Mode */
- TMOD_MASK = 3,
- TMOD_TR = 0, /* xmit & recv */
- TMOD_TO, /* xmit only */
- TMOD_RO, /* recv only */
- TMOD_RESV,
- OMOD_SHIFT = 20, /* Operation Mode */
- OMOD_MASK = 1,
- OMOD_MASTER = 0, /* Master Mode */
- OMOD_SLAVE, /* Slave Mode */
- };
- /* SR */
- enum {
- SR_MASK = 0x7f,
- SR_BUSY = 1 << 0,
- SR_TF_FULL = 1 << 1,
- SR_TF_EMPT = 1 << 2,
- SR_RF_EMPT = 1 << 3,
- SR_RF_FULL = 1 << 4,
- };
- #define ROCKCHIP_SPI_TIMEOUT_MS 1000
- #define ROCKCHIP_SPI_MAX_RATE 48000000
- #endif /* __RK_SPI_H */
|