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