1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* Header File for Loongson SPI Driver. */ |
3 | /* Copyright (C) 2023 Loongson Technology Corporation Limited */ |
4 | |
5 | #ifndef __LINUX_SPI_LOONGSON_H |
6 | #define __LINUX_SPI_LOONGSON_H |
7 | |
8 | #include <linux/bits.h> |
9 | #include <linux/pm.h> |
10 | #include <linux/types.h> |
11 | |
12 | #define LOONGSON_SPI_SPCR_REG 0x00 |
13 | #define LOONGSON_SPI_SPSR_REG 0x01 |
14 | #define LOONGSON_SPI_FIFO_REG 0x02 |
15 | #define LOONGSON_SPI_SPER_REG 0x03 |
16 | #define LOONGSON_SPI_PARA_REG 0x04 |
17 | #define LOONGSON_SPI_SFCS_REG 0x05 |
18 | #define LOONGSON_SPI_TIMI_REG 0x06 |
19 | |
20 | /* Bits definition for Loongson SPI register */ |
21 | #define LOONGSON_SPI_PARA_MEM_EN BIT(0) |
22 | #define LOONGSON_SPI_SPCR_CPHA BIT(2) |
23 | #define LOONGSON_SPI_SPCR_CPOL BIT(3) |
24 | #define LOONGSON_SPI_SPCR_SPE BIT(6) |
25 | #define LOONGSON_SPI_SPSR_RFEMPTY BIT(0) |
26 | #define LOONGSON_SPI_SPSR_WCOL BIT(6) |
27 | #define LOONGSON_SPI_SPSR_SPIF BIT(7) |
28 | |
29 | struct device; |
30 | struct spi_controller; |
31 | |
32 | struct loongson_spi { |
33 | struct spi_controller *controller; |
34 | void __iomem *base; |
35 | int cs_active; |
36 | unsigned int hz; |
37 | unsigned char spcr; |
38 | unsigned char sper; |
39 | unsigned char spsr; |
40 | unsigned char para; |
41 | unsigned char sfcs; |
42 | unsigned char timi; |
43 | unsigned int mode; |
44 | u64 clk_rate; |
45 | }; |
46 | |
47 | int loongson_spi_init_controller(struct device *dev, void __iomem *reg); |
48 | extern const struct dev_pm_ops loongson_spi_dev_pm_ops; |
49 | #endif /* __LINUX_SPI_LOONGSON_H */ |
50 | |