GNU Linux-libre 6.9.1-gnu
[releases.git] / drivers / spi / spi-loongson.h
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 */